ETH Price: $2,388.00 (-3.62%)

Token

DoodlesCoin (DOODLES)
 

Overview

Max Total Supply

1,000,000,000 DOODLES

Holders

53

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
elmayito.eth
Balance
0.114210006359465173 DOODLES

Value
$0.00
0x4da43b47d33287f2003c29ff29a1432d9d5f8be9
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:
DoodlesCoin

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 2 of 11: Contract.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./ERC20.sol";
import "./Ownable.sol";
import "./SafeMath.sol";

import "./IUniswapV2Pair.sol";
import "./IUniswapV2Router02.sol";
import "./IUniswapV2Factory.sol";

/*
    @DoodlesCoin
    - Website: https://doodlescoin.net/
    - Telegram: https://t.me/DoodlesCoin

    + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - ++ - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
    +                                                                                                                      +
    +                                                                                                                      +
    .                                                                                                                      .
    .                                                    ####-                                                             .
    .                                        :*##:   .###-...:##                                                           .
    .                                        +#.:# :#+:........+#####+                                                     .
    .                                       .:#..#*=.................:#.                                                   .
    .                                     .#..*:.........:.........=-.-#                                                   .
    .                                      :+#-....:+**+^^+***__=**#:.*#                                                   .
    .                                      .#:.....:#              ^#.#                                                    .
    .                                      #:....-#^                 #                                                     .
    .                                      #-.....#    ++             +   ++                                               .
    .                                      .#.....+   +##+            .* +##+                                              .
    .                                       #.....#    ++  .######**.  #  ++                                               .
    .                                       #*  ^#^       *####--  ##. #                                                   .
    .                                      #:  #.         *####--  #*  #                                                   .
    .                                      #.   # :.       .###--  -# .+                                                   .
    .                                       #.   .#          ###--  # #                                                    .
    .                                        ^##^  #       .###--  =# *                                                    .
    .                                            #**#.     ###--  -*+**#                                                   .
    .                                            #***####**###--  +#****#                                                  .
    .                                           .##*********###--  #**##.                                                  .
    .                                          #************###--  #*****#                                                 .
    .                    ..:..                #*****#*******###--  #**#****###* *###                                       .
    .               .####*^^^^*###.          ##*****#******###--  #***#***#  :# #  :#                                      .
    .              :*             =#.        #******#*******##--  #***#***#  .# #  .#                 .####.               .
    .               ++#   ######.   #-  .*#####*****#*########--  #***#####  .# #  .#   .#######.   #*^   .^#+             .
    .                +#   #::::..#   #.#^^      ^#**#^       ^#- #**#^       .# #  .# +#^       ^# #+        #+            .
    .                .#   #      #   ##    .##.  .##.   .##.   # *#   .##.   .# #  .##.   -+#+.  # #   :######:            .
    .                .#   #     .#   #    #:::#   #.   #:::#   ###   #::::#  .# #  .##  :#####+  #.##     :...             .
    .                .#   #    .#.  :#   #   .#  .#   #    #   ##    #^   #  .# #  .##  .^     .##. *#+:.    .#            .
    .                .#   #####^    ##   #  :#.  .#   #  .#    ##    #   #.  .# #  .##   .=*######..##+###.   .#           .
    .                .#   ..      .###.   ###   .%#.   ###    *#-#    ###     # #  .##*   .      ####   ^     .#           .
    .                 #.   ..:-#####* #.      .*#  ##.      .##. :#._     _### ##.  #**#.     .:##. ##.     -##            .
    .                  ############*   =########    :########-     +#######^ ### ##### ^######++#^   ^#######+             .
    .                    ^*######*^      ^*##*^       ^*##*^         ^*###*^ ^##^ ^###^  ^*####*^      ^*##*^              .
    +                                                                                                                      +
    +                                                                                                                      +
    + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - ++ - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
*/

contract DoodlesCoin is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;

    mapping (address => bool) private _isBlacklisted;
    bool private _swapping;
    uint256 private _launchTime;

    address private feeWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
        
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    
    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public totalFees;
    uint256 private _marketingFee;
    uint256 private _liquidityFee;
    uint256 private _devFee;
    
    uint256 private _tokensForMarketing;
    uint256 private _tokensForLiquidity;
    uint256 private _tokensForDev;
    
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) private automatedMarketMakerPairs;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event feeWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity);

    constructor() ERC20("DoodlesCoin", "DOODLES") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 marketingFee = 4;
        uint256 liquidityFee = 3;
        uint256 devFee = 1;
        
        uint256 totalSupply = 1e9 * 1e18;
        
        maxTransactionAmount = totalSupply * 5 / 1000;
        maxWallet = totalSupply * 1 / 100;
        swapTokensAtAmount = totalSupply * 15 / 10000;

        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        _devFee = devFee;
        totalFees = _marketingFee + _liquidityFee + _devFee;
        
        feeWallet = address(owner()); // set as fee wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        _launchTime = block.timestamp.add(2);
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * 1e18;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * 1e18;
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateFees(uint256 marketingFee, uint256 liquidityFee, uint256 devFee) external onlyOwner {
        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        _devFee = devFee;
        totalFees = _marketingFee + _liquidityFee + _devFee;
        require(totalFees <= 10, "Must keep fees at 10% or less");
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    function updateFeeWallet(address newWallet) external onlyOwner {
        emit feeWalletUpdated(newWallet, feeWallet);
        feeWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    
    function setBlacklisted(address[] memory blacklisted_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            if (blacklisted_[i] != uniswapV2Pair && blacklisted_[i] != address(uniswapV2Router)) {
                _isBlacklisted[blacklisted_[i]] = true;
            }
        }
    }
    
    function delBlacklisted(address[] memory blacklisted_) public onlyOwner {
        for (uint i = 0; i < blacklisted_.length; i++) {
            _isBlacklisted[blacklisted_[i]] = false;
        }
    }
    
    function isSniper(address addr) public view returns (bool) {
        return _isBlacklisted[addr];
    }

    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");
        require(!_isBlacklisted[from], "Your address has been marked as a sniper, you are unable to transfer or swap.");
        
         if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (block.timestamp <= _launchTime) _isBlacklisted[to] = true;
        
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !_swapping
            ) {
                if (!tradingActive) {
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
                 
                // when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                    require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
                
                // when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                    require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if (!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (
            canSwap &&
            !_swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        bool takeFee = !_swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            fees = amount.mul(totalFees).div(100);
            _tokensForLiquidity += fees * _liquidityFee / totalFees;
            _tokensForDev += fees * _devFee / totalFees;
            _tokensForMarketing += fees * _marketingFee / totalFees;
            
            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function _swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    
    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity + _tokensForMarketing + _tokensForDev;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;
        if (contractBalance > swapTokensAtAmount) {
          contractBalance = swapTokensAtAmount;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * _tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(_tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        
        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDev = 0;

        payable(feeWallet).transfer(ethForMarketing.add(ethForDev));
                
        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, _tokensForLiquidity);
        }
    }

    function forceSwap() external onlyOwner {
        _swapTokensForEth(address(this).balance);
        payable(feeWallet).transfer(address(this).balance);
    }

    function forceSend() external onlyOwner {
        payable(feeWallet).transfer(address(this).balance);
    }

    receive() external payable {}
}

File 1 of 11: Context.sol
// SPDX-License-Identifier: MIT
// 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 3 of 11: ERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin 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}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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, _allowances[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 = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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;
        }
        _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;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

    /**
     * @dev Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * 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 {}
}

File 4 of 11: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `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);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

File 5 of 11: IERC20Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

import "./IERC20.sol";

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

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 7 of 11: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 8 of 11: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 9 of 11: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

File 11 of 11: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

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

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

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

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"feeWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"blacklisted_","type":"address[]"}],"name":"delBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwap","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":[{"internalType":"address","name":"addr","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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[]","name":"blacklisted_","type":"address[]"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"devFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055506001601160006101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600b81526020017f446f6f646c6573436f696e0000000000000000000000000000000000000000008152506040518060400160405280600781526020017f444f4f444c4553000000000000000000000000000000000000000000000000008152508160039080519060200190620000e792919062000ada565b5080600490805190602001906200010092919062000ada565b50505062000123620001176200059a60201b60201c565b620005a260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200014f8160016200066860201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d757600080fd5b505afa158015620001ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000212919062000ba1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027557600080fd5b505afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000ba1565b6040518363ffffffff1660e01b8152600401620002cf92919062000c54565b602060405180830381600087803b158015620002ea57600080fd5b505af1158015620002ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000325919062000ba1565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200039a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200066860201b60201c565b620003cf600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200075260201b60201c565b60006004905060006003905060006001905060006b033b2e3c9fd0803ce800000090506103e860058262000404919062000da5565b62000410919062000d6d565b600c81905550606460018262000427919062000da5565b62000433919062000d6d565b600e81905550612710600f826200044b919062000da5565b62000457919062000d6d565b600d8190555083601381905550826014819055508160158190555060155460145460135462000487919062000d10565b62000493919062000d10565b601281905550620004a9620007f360201b60201c565b600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200050b620004fd620007f360201b60201c565b60016200081d60201b60201c565b6200051e3060016200081d60201b60201c565b6200053361dead60016200081d60201b60201c565b6200055562000547620007f360201b60201c565b60016200066860201b60201c565b620005683060016200066860201b60201c565b6200057d61dead60016200066860201b60201c565b6200058f33826200095760201b60201c565b505050505062000f84565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006786200059a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200069e620007f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ee9062000c9e565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200082d6200059a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000853620007f360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a39062000c9e565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094b919062000c81565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c19062000cc0565b60405180910390fd5b620009de6000838362000ad060201b60201c565b8060026000828254620009f2919062000d10565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a49919062000d10565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ab0919062000ce2565b60405180910390a362000acc6000838362000ad560201b60201c565b5050565b505050565b505050565b82805462000ae89062000e50565b90600052602060002090601f01602090048101928262000b0c576000855562000b58565b82601f1062000b2757805160ff191683800117855562000b58565b8280016001018555821562000b58579182015b8281111562000b5757825182559160200191906001019062000b3a565b5b50905062000b67919062000b6b565b5090565b5b8082111562000b8657600081600090555060010162000b6c565b5090565b60008151905062000b9b8162000f6a565b92915050565b60006020828403121562000bba5762000bb962000f13565b5b600062000bca8482850162000b8a565b91505092915050565b62000bde8162000e06565b82525050565b62000bef8162000e1a565b82525050565b600062000c0460208362000cff565b915062000c118262000f18565b602082019050919050565b600062000c2b601f8362000cff565b915062000c388262000f41565b602082019050919050565b62000c4e8162000e46565b82525050565b600060408201905062000c6b600083018562000bd3565b62000c7a602083018462000bd3565b9392505050565b600060208201905062000c98600083018462000be4565b92915050565b6000602082019050818103600083015262000cb98162000bf5565b9050919050565b6000602082019050818103600083015262000cdb8162000c1c565b9050919050565b600060208201905062000cf9600083018462000c43565b92915050565b600082825260208201905092915050565b600062000d1d8262000e46565b915062000d2a8362000e46565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d625762000d6162000e86565b5b828201905092915050565b600062000d7a8262000e46565b915062000d878362000e46565b92508262000d9a5762000d9962000eb5565b5b828204905092915050565b600062000db28262000e46565b915062000dbf8362000e46565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dfb5762000dfa62000e86565b5b828202905092915050565b600062000e138262000e26565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000e6957607f821691505b6020821081141562000e805762000e7f62000ee4565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000f758162000e06565b811462000f8157600080fd5b50565b614d668062000f946000396000f3fe6080604052600436106102295760003560e01c80638a8c523c11610123578063c8125e45116100ab578063df778d261161006f578063df778d2614610826578063e2f456051461083d578063e884f26014610868578063f2fde38b14610893578063f8b45b05146108bc57610230565b8063c8125e451461072d578063c876d0b914610756578063c8c8ebe414610781578063d257b34f146107ac578063dd62ed3e146107e957610230565b8063a457c2d7116100f2578063a457c2d714610636578063a9059cbb14610673578063bbc0c742146106b0578063c0246668146106db578063c18bc1951461070457610230565b80638a8c523c146105a05780638da5cb5b146105b757806395d89b41146105e25780639a7a23d61461060d57610230565b806323b872dd116101b1578063667185241161017557806366718524146104cf57806370a08231146104f8578063715018a614610535578063751039fc1461054c5780637571336a1461057757610230565b806323b872dd146103c2578063313ce567146103ff578063395093511461042a5780634a62bb65146104675780634fbee1931461049257610230565b806312b77e8a116101f857806312b77e8a1461030357806313114a9d1461031a57806318160ddd14610345578063203e727e14610370578063224290851461039957610230565b806306fdde0314610235578063095ea7b3146102605780630b559c6f1461029d5780630f3a325f146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108e7565b6040516102579190613f48565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061396d565b610979565b6040516102949190613f2d565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906139ad565b61099c565b005b3480156102d257600080fd5b506102ed60048036038101906102e89190613840565b610b93565b6040516102fa9190613f2d565b60405180910390f35b34801561030f57600080fd5b50610318610be9565b005b34801561032657600080fd5b5061032f610cd0565b60405161033c919061420a565b60405180910390f35b34801561035157600080fd5b5061035a610cd6565b604051610367919061420a565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906139f6565b610ce0565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190613a23565b610def565b005b3480156103ce57600080fd5b506103e960048036038101906103e491906138da565b610eee565b6040516103f69190613f2d565b60405180910390f35b34801561040b57600080fd5b50610414610f1d565b60405161042191906142b6565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c919061396d565b610f26565b60405161045e9190613f2d565b60405180910390f35b34801561047357600080fd5b5061047c610fd0565b6040516104899190613f2d565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613840565b610fe3565b6040516104c69190613f2d565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613840565b611039565b005b34801561050457600080fd5b5061051f600480360381019061051a9190613840565b611175565b60405161052c919061420a565b60405180910390f35b34801561054157600080fd5b5061054a6111bd565b005b34801561055857600080fd5b50610561611245565b60405161056e9190613f2d565b60405180910390f35b34801561058357600080fd5b5061059e6004803603810190610599919061392d565b6112e5565b005b3480156105ac57600080fd5b506105b56113bc565b005b3480156105c357600080fd5b506105cc61146f565b6040516105d99190613eb1565b60405180910390f35b3480156105ee57600080fd5b506105f7611499565b6040516106049190613f48565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f919061392d565b61152b565b005b34801561064257600080fd5b5061065d6004803603810190610658919061396d565b611646565b60405161066a9190613f2d565b60405180910390f35b34801561067f57600080fd5b5061069a6004803603810190610695919061396d565b611730565b6040516106a79190613f2d565b60405180910390f35b3480156106bc57600080fd5b506106c5611753565b6040516106d29190613f2d565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd919061392d565b611766565b005b34801561071057600080fd5b5061072b600480360381019061072691906139f6565b61188b565b005b34801561073957600080fd5b50610754600480360381019061074f91906139ad565b61199a565b005b34801561076257600080fd5b5061076b611aab565b6040516107789190613f2d565b60405180910390f35b34801561078d57600080fd5b50610796611abe565b6040516107a3919061420a565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce91906139f6565b611ac4565b6040516107e09190613f2d565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b919061389a565b611c19565b60405161081d919061420a565b60405180910390f35b34801561083257600080fd5b5061083b611ca0565b005b34801561084957600080fd5b50610852611d90565b60405161085f919061420a565b60405180910390f35b34801561087457600080fd5b5061087d611d96565b60405161088a9190613f2d565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613840565b611e36565b005b3480156108c857600080fd5b506108d1611f2e565b6040516108de919061420a565b60405180910390f35b6060600380546108f690614526565b80601f016020809104026020016040519081016040528092919081815260200182805461092290614526565b801561096f5780601f106109445761010080835404028352916020019161096f565b820191906000526020600020905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b600080610984611f34565b9050610991818585611f3c565b600191505092915050565b6109a4611f34565b73ffffffffffffffffffffffffffffffffffffffff166109c261146f565b73ffffffffffffffffffffffffffffffffffffffff1614610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f9061412a565b60405180910390fd5b60005b8151811015610b8f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610a7057610a6f61465f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610b045750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610ae357610ae261465f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610b7c57600160086000848481518110610b2257610b2161465f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610b8790614589565b915050610a1b565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bf1611f34565b73ffffffffffffffffffffffffffffffffffffffff16610c0f61146f565b73ffffffffffffffffffffffffffffffffffffffff1614610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c9061412a565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ccd573d6000803e3d6000fd5b50565b60125481565b6000600254905090565b610ce8611f34565b73ffffffffffffffffffffffffffffffffffffffff16610d0661146f565b73ffffffffffffffffffffffffffffffffffffffff1614610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d539061412a565b60405180910390fd5b670de0b6b3a76400006103e86001610d72610cd6565b610d7c91906143fe565b610d8691906143cd565b610d9091906143cd565b811015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906141ea565b60405180910390fd5b670de0b6b3a764000081610de691906143fe565b600c8190555050565b610df7611f34565b73ffffffffffffffffffffffffffffffffffffffff16610e1561146f565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e629061412a565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354610e939190614377565b610e9d9190614377565b601281905550600a6012541115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090613f8a565b60405180910390fd5b505050565b600080610ef9611f34565b9050610f06858285612107565b610f11858585612193565b60019150509392505050565b60006012905090565b600080610f31611f34565b9050610fc5818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fc09190614377565b611f3c565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611041611f34565b73ffffffffffffffffffffffffffffffffffffffff1661105f61146f565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac9061412a565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c5611f34565b73ffffffffffffffffffffffffffffffffffffffff166111e361146f565b73ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112309061412a565b60405180910390fd5b6112436000612d7e565b565b600061124f611f34565b73ffffffffffffffffffffffffffffffffffffffff1661126d61146f565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba9061412a565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b6112ed611f34565b73ffffffffffffffffffffffffffffffffffffffff1661130b61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113589061412a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113c4611f34565b73ffffffffffffffffffffffffffffffffffffffff166113e261146f565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f9061412a565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550611467600242612e4490919063ffffffff16565b600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114a890614526565b80601f01602080910402602001604051908101604052809291908181526020018280546114d490614526565b80156115215780601f106114f657610100808354040283529160200191611521565b820191906000526020600020905b81548152906001019060200180831161150457829003601f168201915b5050505050905090565b611533611f34565b73ffffffffffffffffffffffffffffffffffffffff1661155161146f565b73ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e9061412a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f9061402a565b60405180910390fd5b6116428282612e5a565b5050565b600080611651611f34565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906141ca565b60405180910390fd5b6117248286868403611f3c565b60019250505092915050565b60008061173b611f34565b9050611748818585612193565b600191505092915050565b600f60019054906101000a900460ff1681565b61176e611f34565b73ffffffffffffffffffffffffffffffffffffffff1661178c61146f565b73ffffffffffffffffffffffffffffffffffffffff16146117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d99061412a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161187f9190613f2d565b60405180910390a25050565b611893611f34565b73ffffffffffffffffffffffffffffffffffffffff166118b161146f565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe9061412a565b60405180910390fd5b670de0b6b3a76400006103e8600561191d610cd6565b61192791906143fe565b61193191906143cd565b61193b91906143cd565b81101561197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119749061400a565b60405180910390fd5b670de0b6b3a76400008161199191906143fe565b600e8190555050565b6119a2611f34565b73ffffffffffffffffffffffffffffffffffffffff166119c061146f565b73ffffffffffffffffffffffffffffffffffffffff1614611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d9061412a565b60405180910390fd5b60005b8151811015611aa757600060086000848481518110611a3b57611a3a61465f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a9f90614589565b915050611a19565b5050565b601160009054906101000a900460ff1681565b600c5481565b6000611ace611f34565b73ffffffffffffffffffffffffffffffffffffffff16611aec61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b399061412a565b60405180910390fd5b620186a06001611b50610cd6565b611b5a91906143fe565b611b6491906143cd565b821015611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d906140aa565b60405180910390fd5b6103e86005611bb3610cd6565b611bbd91906143fe565b611bc791906143cd565b821115611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c00906140ca565b60405180910390fd5b81600d8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ca8611f34565b73ffffffffffffffffffffffffffffffffffffffff16611cc661146f565b73ffffffffffffffffffffffffffffffffffffffff1614611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d139061412a565b60405180910390fd5b611d2547612efb565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d8d573d6000803e3d6000fd5b50565b600d5481565b6000611da0611f34565b73ffffffffffffffffffffffffffffffffffffffff16611dbe61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b9061412a565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611e3e611f34565b73ffffffffffffffffffffffffffffffffffffffff16611e5c61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea99061412a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613fca565b60405180910390fd5b611f2b81612d7e565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa39061418a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390613fea565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120fa919061420a565b60405180910390a3505050565b60006121138484611c19565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461218d578181101561217f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121769061404a565b60405180910390fd5b61218c8484848403611f3c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa9061414a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a90613f6a565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f79061416a565b60405180910390fd5b600081141561231a576123158383600061314d565b612d79565b600a54421161237c576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612a435761239961146f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561240757506123d761146f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124405750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124935750600960009054906101000a900460ff16155b15612a4257600f60019054906101000a900460ff1661258d57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061254d5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390613faa565b60405180910390fd5b5b601160009054906101000a900460ff1615612759576125aa61146f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126335750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561268d5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156127585743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a9061410a565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127fc5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128a357600c54811115612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906140ea565b60405180910390fd5b600e5461285283611175565b8261285d9190614377565b111561289e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612895906141aa565b60405180910390fd5b612a41565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129465750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299557600c54811115612990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129879061408a565b60405180910390fd5b612a40565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a3f57600e546129f283611175565b826129fd9190614377565b1115612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a35906141aa565b60405180910390fd5b5b5b5b5b5b6000612a4e30611175565b90506000600d548210159050808015612a745750600960009054906101000a900460ff16155b8015612aca5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b205750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b765750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bba576001600960006101000a81548160ff021916908315150217905550612b9e6133ce565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c705750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c7a57600090505b60008115612d6957612caa6064612c9c601254886135f990919063ffffffff16565b61360f90919063ffffffff16565b905060125460145482612cbd91906143fe565b612cc791906143cd565b60176000828254612cd89190614377565b9250508190555060125460155482612cf091906143fe565b612cfa91906143cd565b60186000828254612d0b9190614377565b9250508190555060125460135482612d2391906143fe565b612d2d91906143cd565b60166000828254612d3e9190614377565b925050819055506000811115612d5a57612d5987308361314d565b5b8085612d669190614458565b94505b612d7487878761314d565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612e529190614377565b905092915050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115612f1857612f1761468e565b5b604051908082528060200260200182016040528015612f465781602001602082028036833780820191505090505b5090503081600081518110612f5e57612f5d61465f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561300057600080fd5b505afa158015613014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613038919061386d565b8160018151811061304c5761304b61465f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130b330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613117959493929190614225565b600060405180830381600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b49061414a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322490613f6a565b60405180910390fd5b613238838383613625565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b59061406a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133519190614377565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133b5919061420a565b60405180910390a36133c884848461362a565b50505050565b60006133d930611175565b905060006018546016546017546133f09190614377565b6133fa9190614377565b9050600082148061340b5750600081145b156134175750506135f7565b600d5482111561342757600d5491505b60006002826017548561343a91906143fe565b61344491906143cd565b61344e91906143cd565b90506000613465828561362f90919063ffffffff16565b9050600047905061347582612efb565b600061348a824761362f90919063ffffffff16565b905060006134b5866134a7601654856135f990919063ffffffff16565b61360f90919063ffffffff16565b905060006134e0876134d2601854866135f990919063ffffffff16565b61360f90919063ffffffff16565b905060008183856134f19190614458565b6134fb9190614458565b9050600060178190555060006016819055506000601881905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6135648486612e4490919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561358f573d6000803e3d6000fd5b506000871180156135a05750600081115b156135ed576135af8782613645565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516135e49392919061427f565b60405180910390a15b5050505050505050505b565b6000818361360791906143fe565b905092915050565b6000818361361d91906143cd565b905092915050565b505050565b505050565b6000818361363d9190614458565b905092915050565b61367230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806136be61146f565b426040518863ffffffff1660e01b81526004016136e096959493929190613ecc565b6060604051808303818588803b1580156136f957600080fd5b505af115801561370d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137329190613a76565b5050505050565b600061374c613747846142f6565b6142d1565b9050808382526020820190508285602086028201111561376f5761376e6146c2565b5b60005b8581101561379f578161378588826137a9565b845260208401935060208301925050600181019050613772565b5050509392505050565b6000813590506137b881614ceb565b92915050565b6000815190506137cd81614ceb565b92915050565b600082601f8301126137e8576137e76146bd565b5b81356137f8848260208601613739565b91505092915050565b60008135905061381081614d02565b92915050565b60008135905061382581614d19565b92915050565b60008151905061383a81614d19565b92915050565b600060208284031215613856576138556146cc565b5b6000613864848285016137a9565b91505092915050565b600060208284031215613883576138826146cc565b5b6000613891848285016137be565b91505092915050565b600080604083850312156138b1576138b06146cc565b5b60006138bf858286016137a9565b92505060206138d0858286016137a9565b9150509250929050565b6000806000606084860312156138f3576138f26146cc565b5b6000613901868287016137a9565b9350506020613912868287016137a9565b925050604061392386828701613816565b9150509250925092565b60008060408385031215613944576139436146cc565b5b6000613952858286016137a9565b925050602061396385828601613801565b9150509250929050565b60008060408385031215613984576139836146cc565b5b6000613992858286016137a9565b92505060206139a385828601613816565b9150509250929050565b6000602082840312156139c3576139c26146cc565b5b600082013567ffffffffffffffff8111156139e1576139e06146c7565b5b6139ed848285016137d3565b91505092915050565b600060208284031215613a0c57613a0b6146cc565b5b6000613a1a84828501613816565b91505092915050565b600080600060608486031215613a3c57613a3b6146cc565b5b6000613a4a86828701613816565b9350506020613a5b86828701613816565b9250506040613a6c86828701613816565b9150509250925092565b600080600060608486031215613a8f57613a8e6146cc565b5b6000613a9d8682870161382b565b9350506020613aae8682870161382b565b9250506040613abf8682870161382b565b9150509250925092565b6000613ad58383613ae1565b60208301905092915050565b613aea8161448c565b82525050565b613af98161448c565b82525050565b6000613b0a82614332565b613b148185614355565b9350613b1f83614322565b8060005b83811015613b50578151613b378882613ac9565b9750613b4283614348565b925050600181019050613b23565b5085935050505092915050565b613b668161449e565b82525050565b613b75816144e1565b82525050565b6000613b868261433d565b613b908185614366565b9350613ba08185602086016144f3565b613ba9816146d1565b840191505092915050565b6000613bc1602383614366565b9150613bcc826146e2565b604082019050919050565b6000613be4601d83614366565b9150613bef82614731565b602082019050919050565b6000613c07601683614366565b9150613c128261475a565b602082019050919050565b6000613c2a602683614366565b9150613c3582614783565b604082019050919050565b6000613c4d602283614366565b9150613c58826147d2565b604082019050919050565b6000613c70602483614366565b9150613c7b82614821565b604082019050919050565b6000613c93603983614366565b9150613c9e82614870565b604082019050919050565b6000613cb6601d83614366565b9150613cc1826148bf565b602082019050919050565b6000613cd9602683614366565b9150613ce4826148e8565b604082019050919050565b6000613cfc603683614366565b9150613d0782614937565b604082019050919050565b6000613d1f603583614366565b9150613d2a82614986565b604082019050919050565b6000613d42603483614366565b9150613d4d826149d5565b604082019050919050565b6000613d65603583614366565b9150613d7082614a24565b604082019050919050565b6000613d88604983614366565b9150613d9382614a73565b606082019050919050565b6000613dab602083614366565b9150613db682614ae8565b602082019050919050565b6000613dce602583614366565b9150613dd982614b11565b604082019050919050565b6000613df1604d83614366565b9150613dfc82614b60565b606082019050919050565b6000613e14602483614366565b9150613e1f82614bd5565b604082019050919050565b6000613e37601383614366565b9150613e4282614c24565b602082019050919050565b6000613e5a602583614366565b9150613e6582614c4d565b604082019050919050565b6000613e7d602f83614366565b9150613e8882614c9c565b604082019050919050565b613e9c816144ca565b82525050565b613eab816144d4565b82525050565b6000602082019050613ec66000830184613af0565b92915050565b600060c082019050613ee16000830189613af0565b613eee6020830188613e93565b613efb6040830187613b6c565b613f086060830186613b6c565b613f156080830185613af0565b613f2260a0830184613e93565b979650505050505050565b6000602082019050613f426000830184613b5d565b92915050565b60006020820190508181036000830152613f628184613b7b565b905092915050565b60006020820190508181036000830152613f8381613bb4565b9050919050565b60006020820190508181036000830152613fa381613bd7565b9050919050565b60006020820190508181036000830152613fc381613bfa565b9050919050565b60006020820190508181036000830152613fe381613c1d565b9050919050565b6000602082019050818103600083015261400381613c40565b9050919050565b6000602082019050818103600083015261402381613c63565b9050919050565b6000602082019050818103600083015261404381613c86565b9050919050565b6000602082019050818103600083015261406381613ca9565b9050919050565b6000602082019050818103600083015261408381613ccc565b9050919050565b600060208201905081810360008301526140a381613cef565b9050919050565b600060208201905081810360008301526140c381613d12565b9050919050565b600060208201905081810360008301526140e381613d35565b9050919050565b6000602082019050818103600083015261410381613d58565b9050919050565b6000602082019050818103600083015261412381613d7b565b9050919050565b6000602082019050818103600083015261414381613d9e565b9050919050565b6000602082019050818103600083015261416381613dc1565b9050919050565b6000602082019050818103600083015261418381613de4565b9050919050565b600060208201905081810360008301526141a381613e07565b9050919050565b600060208201905081810360008301526141c381613e2a565b9050919050565b600060208201905081810360008301526141e381613e4d565b9050919050565b6000602082019050818103600083015261420381613e70565b9050919050565b600060208201905061421f6000830184613e93565b92915050565b600060a08201905061423a6000830188613e93565b6142476020830187613b6c565b81810360408301526142598186613aff565b90506142686060830185613af0565b6142756080830184613e93565b9695505050505050565b60006060820190506142946000830186613e93565b6142a16020830185613e93565b6142ae6040830184613e93565b949350505050565b60006020820190506142cb6000830184613ea2565b92915050565b60006142db6142ec565b90506142e78282614558565b919050565b6000604051905090565b600067ffffffffffffffff8211156143115761431061468e565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614382826144ca565b915061438d836144ca565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143c2576143c16145d2565b5b828201905092915050565b60006143d8826144ca565b91506143e3836144ca565b9250826143f3576143f2614601565b5b828204905092915050565b6000614409826144ca565b9150614414836144ca565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561444d5761444c6145d2565b5b828202905092915050565b6000614463826144ca565b915061446e836144ca565b925082821015614481576144806145d2565b5b828203905092915050565b6000614497826144aa565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006144ec826144ca565b9050919050565b60005b838110156145115780820151818401526020810190506144f6565b83811115614520576000848401525b50505050565b6000600282049050600182168061453e57607f821691505b6020821081141561455257614551614630565b5b50919050565b614561826146d1565b810181811067ffffffffffffffff821117156145805761457f61468e565b5b80604052505050565b6000614594826144ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145c7576145c66145d2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b614cf48161448c565b8114614cff57600080fd5b50565b614d0b8161449e565b8114614d1657600080fd5b50565b614d22816144ca565b8114614d2d57600080fd5b5056fea26469706673582212200f52f689a154ad5013258313be7c3ad4c3c15056f4fd5dac7a2efa641e3969f064736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80638a8c523c11610123578063c8125e45116100ab578063df778d261161006f578063df778d2614610826578063e2f456051461083d578063e884f26014610868578063f2fde38b14610893578063f8b45b05146108bc57610230565b8063c8125e451461072d578063c876d0b914610756578063c8c8ebe414610781578063d257b34f146107ac578063dd62ed3e146107e957610230565b8063a457c2d7116100f2578063a457c2d714610636578063a9059cbb14610673578063bbc0c742146106b0578063c0246668146106db578063c18bc1951461070457610230565b80638a8c523c146105a05780638da5cb5b146105b757806395d89b41146105e25780639a7a23d61461060d57610230565b806323b872dd116101b1578063667185241161017557806366718524146104cf57806370a08231146104f8578063715018a614610535578063751039fc1461054c5780637571336a1461057757610230565b806323b872dd146103c2578063313ce567146103ff578063395093511461042a5780634a62bb65146104675780634fbee1931461049257610230565b806312b77e8a116101f857806312b77e8a1461030357806313114a9d1461031a57806318160ddd14610345578063203e727e14610370578063224290851461039957610230565b806306fdde0314610235578063095ea7b3146102605780630b559c6f1461029d5780630f3a325f146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108e7565b6040516102579190613f48565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061396d565b610979565b6040516102949190613f2d565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf91906139ad565b61099c565b005b3480156102d257600080fd5b506102ed60048036038101906102e89190613840565b610b93565b6040516102fa9190613f2d565b60405180910390f35b34801561030f57600080fd5b50610318610be9565b005b34801561032657600080fd5b5061032f610cd0565b60405161033c919061420a565b60405180910390f35b34801561035157600080fd5b5061035a610cd6565b604051610367919061420a565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906139f6565b610ce0565b005b3480156103a557600080fd5b506103c060048036038101906103bb9190613a23565b610def565b005b3480156103ce57600080fd5b506103e960048036038101906103e491906138da565b610eee565b6040516103f69190613f2d565b60405180910390f35b34801561040b57600080fd5b50610414610f1d565b60405161042191906142b6565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c919061396d565b610f26565b60405161045e9190613f2d565b60405180910390f35b34801561047357600080fd5b5061047c610fd0565b6040516104899190613f2d565b60405180910390f35b34801561049e57600080fd5b506104b960048036038101906104b49190613840565b610fe3565b6040516104c69190613f2d565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613840565b611039565b005b34801561050457600080fd5b5061051f600480360381019061051a9190613840565b611175565b60405161052c919061420a565b60405180910390f35b34801561054157600080fd5b5061054a6111bd565b005b34801561055857600080fd5b50610561611245565b60405161056e9190613f2d565b60405180910390f35b34801561058357600080fd5b5061059e6004803603810190610599919061392d565b6112e5565b005b3480156105ac57600080fd5b506105b56113bc565b005b3480156105c357600080fd5b506105cc61146f565b6040516105d99190613eb1565b60405180910390f35b3480156105ee57600080fd5b506105f7611499565b6040516106049190613f48565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f919061392d565b61152b565b005b34801561064257600080fd5b5061065d6004803603810190610658919061396d565b611646565b60405161066a9190613f2d565b60405180910390f35b34801561067f57600080fd5b5061069a6004803603810190610695919061396d565b611730565b6040516106a79190613f2d565b60405180910390f35b3480156106bc57600080fd5b506106c5611753565b6040516106d29190613f2d565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd919061392d565b611766565b005b34801561071057600080fd5b5061072b600480360381019061072691906139f6565b61188b565b005b34801561073957600080fd5b50610754600480360381019061074f91906139ad565b61199a565b005b34801561076257600080fd5b5061076b611aab565b6040516107789190613f2d565b60405180910390f35b34801561078d57600080fd5b50610796611abe565b6040516107a3919061420a565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce91906139f6565b611ac4565b6040516107e09190613f2d565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b919061389a565b611c19565b60405161081d919061420a565b60405180910390f35b34801561083257600080fd5b5061083b611ca0565b005b34801561084957600080fd5b50610852611d90565b60405161085f919061420a565b60405180910390f35b34801561087457600080fd5b5061087d611d96565b60405161088a9190613f2d565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613840565b611e36565b005b3480156108c857600080fd5b506108d1611f2e565b6040516108de919061420a565b60405180910390f35b6060600380546108f690614526565b80601f016020809104026020016040519081016040528092919081815260200182805461092290614526565b801561096f5780601f106109445761010080835404028352916020019161096f565b820191906000526020600020905b81548152906001019060200180831161095257829003601f168201915b5050505050905090565b600080610984611f34565b9050610991818585611f3c565b600191505092915050565b6109a4611f34565b73ffffffffffffffffffffffffffffffffffffffff166109c261146f565b73ffffffffffffffffffffffffffffffffffffffff1614610a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0f9061412a565b60405180910390fd5b60005b8151811015610b8f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610a7057610a6f61465f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614158015610b045750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16828281518110610ae357610ae261465f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614155b15610b7c57600160086000848481518110610b2257610b2161465f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080610b8790614589565b915050610a1b565b5050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610bf1611f34565b73ffffffffffffffffffffffffffffffffffffffff16610c0f61146f565b73ffffffffffffffffffffffffffffffffffffffff1614610c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5c9061412a565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ccd573d6000803e3d6000fd5b50565b60125481565b6000600254905090565b610ce8611f34565b73ffffffffffffffffffffffffffffffffffffffff16610d0661146f565b73ffffffffffffffffffffffffffffffffffffffff1614610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d539061412a565b60405180910390fd5b670de0b6b3a76400006103e86001610d72610cd6565b610d7c91906143fe565b610d8691906143cd565b610d9091906143cd565b811015610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906141ea565b60405180910390fd5b670de0b6b3a764000081610de691906143fe565b600c8190555050565b610df7611f34565b73ffffffffffffffffffffffffffffffffffffffff16610e1561146f565b73ffffffffffffffffffffffffffffffffffffffff1614610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e629061412a565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354610e939190614377565b610e9d9190614377565b601281905550600a6012541115610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090613f8a565b60405180910390fd5b505050565b600080610ef9611f34565b9050610f06858285612107565b610f11858585612193565b60019150509392505050565b60006012905090565b600080610f31611f34565b9050610fc5818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610fc09190614377565b611f3c565b600191505092915050565b600f60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611041611f34565b73ffffffffffffffffffffffffffffffffffffffff1661105f61146f565b73ffffffffffffffffffffffffffffffffffffffff16146110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac9061412a565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5deb5ef622431f0df5a39b72dd556892f68ba42aa0f3aaf0800e166ce866492860405160405180910390a380600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111c5611f34565b73ffffffffffffffffffffffffffffffffffffffff166111e361146f565b73ffffffffffffffffffffffffffffffffffffffff1614611239576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112309061412a565b60405180910390fd5b6112436000612d7e565b565b600061124f611f34565b73ffffffffffffffffffffffffffffffffffffffff1661126d61146f565b73ffffffffffffffffffffffffffffffffffffffff16146112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba9061412a565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b6112ed611f34565b73ffffffffffffffffffffffffffffffffffffffff1661130b61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611361576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113589061412a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113c4611f34565b73ffffffffffffffffffffffffffffffffffffffff166113e261146f565b73ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f9061412a565b60405180910390fd5b6001600f60016101000a81548160ff021916908315150217905550611467600242612e4490919063ffffffff16565b600a81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546114a890614526565b80601f01602080910402602001604051908101604052809291908181526020018280546114d490614526565b80156115215780601f106114f657610100808354040283529160200191611521565b820191906000526020600020905b81548152906001019060200180831161150457829003601f168201915b5050505050905090565b611533611f34565b73ffffffffffffffffffffffffffffffffffffffff1661155161146f565b73ffffffffffffffffffffffffffffffffffffffff16146115a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159e9061412a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f9061402a565b60405180910390fd5b6116428282612e5a565b5050565b600080611651611f34565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906141ca565b60405180910390fd5b6117248286868403611f3c565b60019250505092915050565b60008061173b611f34565b9050611748818585612193565b600191505092915050565b600f60019054906101000a900460ff1681565b61176e611f34565b73ffffffffffffffffffffffffffffffffffffffff1661178c61146f565b73ffffffffffffffffffffffffffffffffffffffff16146117e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d99061412a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161187f9190613f2d565b60405180910390a25050565b611893611f34565b73ffffffffffffffffffffffffffffffffffffffff166118b161146f565b73ffffffffffffffffffffffffffffffffffffffff1614611907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fe9061412a565b60405180910390fd5b670de0b6b3a76400006103e8600561191d610cd6565b61192791906143fe565b61193191906143cd565b61193b91906143cd565b81101561197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119749061400a565b60405180910390fd5b670de0b6b3a76400008161199191906143fe565b600e8190555050565b6119a2611f34565b73ffffffffffffffffffffffffffffffffffffffff166119c061146f565b73ffffffffffffffffffffffffffffffffffffffff1614611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d9061412a565b60405180910390fd5b60005b8151811015611aa757600060086000848481518110611a3b57611a3a61465f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611a9f90614589565b915050611a19565b5050565b601160009054906101000a900460ff1681565b600c5481565b6000611ace611f34565b73ffffffffffffffffffffffffffffffffffffffff16611aec61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b399061412a565b60405180910390fd5b620186a06001611b50610cd6565b611b5a91906143fe565b611b6491906143cd565b821015611ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9d906140aa565b60405180910390fd5b6103e86005611bb3610cd6565b611bbd91906143fe565b611bc791906143cd565b821115611c09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c00906140ca565b60405180910390fd5b81600d8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ca8611f34565b73ffffffffffffffffffffffffffffffffffffffff16611cc661146f565b73ffffffffffffffffffffffffffffffffffffffff1614611d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d139061412a565b60405180910390fd5b611d2547612efb565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611d8d573d6000803e3d6000fd5b50565b600d5481565b6000611da0611f34565b73ffffffffffffffffffffffffffffffffffffffff16611dbe61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0b9061412a565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b611e3e611f34565b73ffffffffffffffffffffffffffffffffffffffff16611e5c61146f565b73ffffffffffffffffffffffffffffffffffffffff1614611eb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea99061412a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613fca565b60405180910390fd5b611f2b81612d7e565b50565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa39061418a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561201c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201390613fea565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120fa919061420a565b60405180910390a3505050565b60006121138484611c19565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461218d578181101561217f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121769061404a565b60405180910390fd5b61218c8484848403611f3c565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fa9061414a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a90613f6a565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f79061416a565b60405180910390fd5b600081141561231a576123158383600061314d565b612d79565b600a54421161237c576001600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600f60009054906101000a900460ff1615612a435761239961146f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561240757506123d761146f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124405750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561247a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156124935750600960009054906101000a900460ff16155b15612a4257600f60019054906101000a900460ff1661258d57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061254d5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390613faa565b60405180910390fd5b5b601160009054906101000a900460ff1615612759576125aa61146f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126335750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561268d5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156127585743601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a9061410a565b60405180910390fd5b43601060003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127fc5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128a357600c54811115612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d906140ea565b60405180910390fd5b600e5461285283611175565b8261285d9190614377565b111561289e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612895906141aa565b60405180910390fd5b612a41565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129465750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299557600c54811115612990576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129879061408a565b60405180910390fd5b612a40565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a3f57600e546129f283611175565b826129fd9190614377565b1115612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a35906141aa565b60405180910390fd5b5b5b5b5b5b6000612a4e30611175565b90506000600d548210159050808015612a745750600960009054906101000a900460ff16155b8015612aca5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b205750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b765750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bba576001600960006101000a81548160ff021916908315150217905550612b9e6133ce565b6000600960006101000a81548160ff0219169083151502179055505b6000600960009054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c705750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c7a57600090505b60008115612d6957612caa6064612c9c601254886135f990919063ffffffff16565b61360f90919063ffffffff16565b905060125460145482612cbd91906143fe565b612cc791906143cd565b60176000828254612cd89190614377565b9250508190555060125460155482612cf091906143fe565b612cfa91906143cd565b60186000828254612d0b9190614377565b9250508190555060125460135482612d2391906143fe565b612d2d91906143cd565b60166000828254612d3e9190614377565b925050819055506000811115612d5a57612d5987308361314d565b5b8085612d669190614458565b94505b612d7487878761314d565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183612e529190614377565b905092915050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600267ffffffffffffffff811115612f1857612f1761468e565b5b604051908082528060200260200182016040528015612f465781602001602082028036833780820191505090505b5090503081600081518110612f5e57612f5d61465f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561300057600080fd5b505afa158015613014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613038919061386d565b8160018151811061304c5761304b61465f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506130b330600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613117959493929190614225565b600060405180830381600087803b15801561313157600080fd5b505af1158015613145573d6000803e3d6000fd5b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b49061414a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561322d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322490613f6a565b60405180910390fd5b613238838383613625565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156132be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b59061406a565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133519190614377565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133b5919061420a565b60405180910390a36133c884848461362a565b50505050565b60006133d930611175565b905060006018546016546017546133f09190614377565b6133fa9190614377565b9050600082148061340b5750600081145b156134175750506135f7565b600d5482111561342757600d5491505b60006002826017548561343a91906143fe565b61344491906143cd565b61344e91906143cd565b90506000613465828561362f90919063ffffffff16565b9050600047905061347582612efb565b600061348a824761362f90919063ffffffff16565b905060006134b5866134a7601654856135f990919063ffffffff16565b61360f90919063ffffffff16565b905060006134e0876134d2601854866135f990919063ffffffff16565b61360f90919063ffffffff16565b905060008183856134f19190614458565b6134fb9190614458565b9050600060178190555060006016819055506000601881905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6135648486612e4490919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561358f573d6000803e3d6000fd5b506000871180156135a05750600081115b156135ed576135af8782613645565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516135e49392919061427f565b60405180910390a15b5050505050505050505b565b6000818361360791906143fe565b905092915050565b6000818361361d91906143cd565b905092915050565b505050565b505050565b6000818361363d9190614458565b905092915050565b61367230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3c565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806136be61146f565b426040518863ffffffff1660e01b81526004016136e096959493929190613ecc565b6060604051808303818588803b1580156136f957600080fd5b505af115801561370d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137329190613a76565b5050505050565b600061374c613747846142f6565b6142d1565b9050808382526020820190508285602086028201111561376f5761376e6146c2565b5b60005b8581101561379f578161378588826137a9565b845260208401935060208301925050600181019050613772565b5050509392505050565b6000813590506137b881614ceb565b92915050565b6000815190506137cd81614ceb565b92915050565b600082601f8301126137e8576137e76146bd565b5b81356137f8848260208601613739565b91505092915050565b60008135905061381081614d02565b92915050565b60008135905061382581614d19565b92915050565b60008151905061383a81614d19565b92915050565b600060208284031215613856576138556146cc565b5b6000613864848285016137a9565b91505092915050565b600060208284031215613883576138826146cc565b5b6000613891848285016137be565b91505092915050565b600080604083850312156138b1576138b06146cc565b5b60006138bf858286016137a9565b92505060206138d0858286016137a9565b9150509250929050565b6000806000606084860312156138f3576138f26146cc565b5b6000613901868287016137a9565b9350506020613912868287016137a9565b925050604061392386828701613816565b9150509250925092565b60008060408385031215613944576139436146cc565b5b6000613952858286016137a9565b925050602061396385828601613801565b9150509250929050565b60008060408385031215613984576139836146cc565b5b6000613992858286016137a9565b92505060206139a385828601613816565b9150509250929050565b6000602082840312156139c3576139c26146cc565b5b600082013567ffffffffffffffff8111156139e1576139e06146c7565b5b6139ed848285016137d3565b91505092915050565b600060208284031215613a0c57613a0b6146cc565b5b6000613a1a84828501613816565b91505092915050565b600080600060608486031215613a3c57613a3b6146cc565b5b6000613a4a86828701613816565b9350506020613a5b86828701613816565b9250506040613a6c86828701613816565b9150509250925092565b600080600060608486031215613a8f57613a8e6146cc565b5b6000613a9d8682870161382b565b9350506020613aae8682870161382b565b9250506040613abf8682870161382b565b9150509250925092565b6000613ad58383613ae1565b60208301905092915050565b613aea8161448c565b82525050565b613af98161448c565b82525050565b6000613b0a82614332565b613b148185614355565b9350613b1f83614322565b8060005b83811015613b50578151613b378882613ac9565b9750613b4283614348565b925050600181019050613b23565b5085935050505092915050565b613b668161449e565b82525050565b613b75816144e1565b82525050565b6000613b868261433d565b613b908185614366565b9350613ba08185602086016144f3565b613ba9816146d1565b840191505092915050565b6000613bc1602383614366565b9150613bcc826146e2565b604082019050919050565b6000613be4601d83614366565b9150613bef82614731565b602082019050919050565b6000613c07601683614366565b9150613c128261475a565b602082019050919050565b6000613c2a602683614366565b9150613c3582614783565b604082019050919050565b6000613c4d602283614366565b9150613c58826147d2565b604082019050919050565b6000613c70602483614366565b9150613c7b82614821565b604082019050919050565b6000613c93603983614366565b9150613c9e82614870565b604082019050919050565b6000613cb6601d83614366565b9150613cc1826148bf565b602082019050919050565b6000613cd9602683614366565b9150613ce4826148e8565b604082019050919050565b6000613cfc603683614366565b9150613d0782614937565b604082019050919050565b6000613d1f603583614366565b9150613d2a82614986565b604082019050919050565b6000613d42603483614366565b9150613d4d826149d5565b604082019050919050565b6000613d65603583614366565b9150613d7082614a24565b604082019050919050565b6000613d88604983614366565b9150613d9382614a73565b606082019050919050565b6000613dab602083614366565b9150613db682614ae8565b602082019050919050565b6000613dce602583614366565b9150613dd982614b11565b604082019050919050565b6000613df1604d83614366565b9150613dfc82614b60565b606082019050919050565b6000613e14602483614366565b9150613e1f82614bd5565b604082019050919050565b6000613e37601383614366565b9150613e4282614c24565b602082019050919050565b6000613e5a602583614366565b9150613e6582614c4d565b604082019050919050565b6000613e7d602f83614366565b9150613e8882614c9c565b604082019050919050565b613e9c816144ca565b82525050565b613eab816144d4565b82525050565b6000602082019050613ec66000830184613af0565b92915050565b600060c082019050613ee16000830189613af0565b613eee6020830188613e93565b613efb6040830187613b6c565b613f086060830186613b6c565b613f156080830185613af0565b613f2260a0830184613e93565b979650505050505050565b6000602082019050613f426000830184613b5d565b92915050565b60006020820190508181036000830152613f628184613b7b565b905092915050565b60006020820190508181036000830152613f8381613bb4565b9050919050565b60006020820190508181036000830152613fa381613bd7565b9050919050565b60006020820190508181036000830152613fc381613bfa565b9050919050565b60006020820190508181036000830152613fe381613c1d565b9050919050565b6000602082019050818103600083015261400381613c40565b9050919050565b6000602082019050818103600083015261402381613c63565b9050919050565b6000602082019050818103600083015261404381613c86565b9050919050565b6000602082019050818103600083015261406381613ca9565b9050919050565b6000602082019050818103600083015261408381613ccc565b9050919050565b600060208201905081810360008301526140a381613cef565b9050919050565b600060208201905081810360008301526140c381613d12565b9050919050565b600060208201905081810360008301526140e381613d35565b9050919050565b6000602082019050818103600083015261410381613d58565b9050919050565b6000602082019050818103600083015261412381613d7b565b9050919050565b6000602082019050818103600083015261414381613d9e565b9050919050565b6000602082019050818103600083015261416381613dc1565b9050919050565b6000602082019050818103600083015261418381613de4565b9050919050565b600060208201905081810360008301526141a381613e07565b9050919050565b600060208201905081810360008301526141c381613e2a565b9050919050565b600060208201905081810360008301526141e381613e4d565b9050919050565b6000602082019050818103600083015261420381613e70565b9050919050565b600060208201905061421f6000830184613e93565b92915050565b600060a08201905061423a6000830188613e93565b6142476020830187613b6c565b81810360408301526142598186613aff565b90506142686060830185613af0565b6142756080830184613e93565b9695505050505050565b60006060820190506142946000830186613e93565b6142a16020830185613e93565b6142ae6040830184613e93565b949350505050565b60006020820190506142cb6000830184613ea2565b92915050565b60006142db6142ec565b90506142e78282614558565b919050565b6000604051905090565b600067ffffffffffffffff8211156143115761431061468e565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614382826144ca565b915061438d836144ca565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143c2576143c16145d2565b5b828201905092915050565b60006143d8826144ca565b91506143e3836144ca565b9250826143f3576143f2614601565b5b828204905092915050565b6000614409826144ca565b9150614414836144ca565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561444d5761444c6145d2565b5b828202905092915050565b6000614463826144ca565b915061446e836144ca565b925082821015614481576144806145d2565b5b828203905092915050565b6000614497826144aa565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006144ec826144ca565b9050919050565b60005b838110156145115780820151818401526020810190506144f6565b83811115614520576000848401525b50505050565b6000600282049050600182168061453e57607f821691505b6020821081141561455257614551614630565b5b50919050565b614561826146d1565b810181811067ffffffffffffffff821117156145805761457f61468e565b5b80604052505050565b6000614594826144ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145c7576145c66145d2565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206164647265737320686173206265656e206d61726b65642061732060008201527f6120736e697065722c20796f752061726520756e61626c6520746f207472616e60208201527f73666572206f7220737761702e00000000000000000000000000000000000000604082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b614cf48161448c565b8114614cff57600080fd5b50565b614d0b8161449e565b8114614d1657600080fd5b50565b614d22816144ca565b8114614d2d57600080fd5b5056fea26469706673582212200f52f689a154ad5013258313be7c3ad4c3c15056f4fd5dac7a2efa641e3969f064736f6c63430008070033

Deployed Bytecode Sourcemap

5396:13761:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4412:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11818:321:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12366:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19008:109;;;;;;;;;;;;;:::i;:::-;;6157:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3223:106:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9905:232:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10524:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5171:286:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3072:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5852:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5845:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11681:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11516:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3387:125:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1661:101:9;;;;;;;;;;;;;:::i;:::-;;9115:121:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10368:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8929:130;;;;;;;;;;;;;:::i;:::-;;1029:85:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2346:102:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11064:244:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6575:429:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3708:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5885:33:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10874:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10145:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12151:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6109:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5722:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9511:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3955:149:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18840:160:1;;;;;;;;;;;;;:::i;:::-;;5764:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9301:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1911:198:9;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5804:24:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2135:98:2;2189:13;2221:5;2214:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2135:98;:::o;4412:197::-;4495:4;4511:13;4527:12;:10;:12::i;:::-;4511:28;;4549:32;4558:5;4565:7;4574:6;4549:8;:32::i;:::-;4598:4;4591:11;;;4412:197;;;;:::o;11818:321:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11906:6:1::1;11901:231;11922:12;:19;11918:1;:23;11901:231;;;11986:13;;;;;;;;;;;11967:32;;:12;11980:1;11967:15;;;;;;;;:::i;:::-;;;;;;;;:32;;;;:79;;;;;12030:15;;;;;;;;;;;12003:43;;:12;12016:1;12003:15;;;;;;;;:::i;:::-;;;;;;;;:43;;;;11967:79;11963:158;;;12101:4;12067:14;:31;12082:12;12095:1;12082:15;;;;;;;;:::i;:::-;;;;;;;;12067:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;11963:158;11943:3;;;;;:::i;:::-;;;;11901:231;;;;11818:321:::0;:::o;12366:105::-;12419:4;12443:14;:20;12458:4;12443:20;;;;;;;;;;;;;;;;;;;;;;;;;12436:27;;12366:105;;;:::o;19008:109::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19067:9:1::1;;;;;;;;;;;19059:27;;:50;19087:21;19059:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;19008:109::o:0;6157:24::-;;;;:::o;3223:106:2:-;3284:7;3310:12;;3303:19;;3223:106;:::o;9905:232:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10026:4:1::1;10018;10014:1;9998:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;9997:33;;;;:::i;:::-;9987:6;:43;;9979:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;10125:4;10116:6;:13;;;;:::i;:::-;10093:20;:36;;;;9905:232:::0;:::o;10524:342::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10650:12:1::1;10634:13;:28;;;;10689:12;10673:13;:28;;;;10722:6;10712:7;:16;;;;10783:7;;10767:13;;10751;;:29;;;;:::i;:::-;:39;;;;:::i;:::-;10739:9;:51;;;;10822:2;10809:9;;:15;;10801:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;10524:342:::0;;;:::o;5171:286:2:-;5298:4;5314:15;5332:12;:10;:12::i;:::-;5314:30;;5354:38;5370:4;5376:7;5385:6;5354:15;:38::i;:::-;5402:27;5412:4;5418:2;5422:6;5402:9;:27::i;:::-;5446:4;5439:11;;;5171:286;;;;;:::o;3072:91::-;3130:5;3154:2;3147:9;;3072:91;:::o;5852:236::-;5940:4;5956:13;5972:12;:10;:12::i;:::-;5956:28;;5994:66;6003:5;6010:7;6049:10;6019:11;:18;6031:5;6019:18;;;;;;;;;;;;;;;:27;6038:7;6019:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;5994:8;:66::i;:::-;6077:4;6070:11;;;5852:236;;;;:::o;5845:33:1:-;;;;;;;;;;;;;:::o;11681:125::-;11746:4;11770:19;:28;11790:7;11770:28;;;;;;;;;;;;;;;;;;;;;;;;;11763:35;;11681:125;;;:::o;11516:157::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11623:9:1::1;;;;;;;;;;;11595:38;;11612:9;11595:38;;;;;;;;;;;;11656:9;11644;;:21;;;;;;;;;;;;;;;;;;11516:157:::0;:::o;3387:125:2:-;3461:7;3487:9;:18;3497:7;3487:18;;;;;;;;;;;;;;;;3480:25;;3387:125;;;:::o;1661:101:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;9115:121:1:-;9167:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9201:5:1::1;9184:14;;:22;;;;;;;;;;;;;;;;;;9224:4;9217:11;;9115:121:::0;:::o;10368:144::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10500:4:1::1;10458:31;:39;10490:6;10458:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;10368:144:::0;;:::o;8929:130::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9000:4:1::1;8984:13;;:20;;;;;;;;;;;;;;;;;;9029:22;9049:1;9029:15;:19;;:22;;;;:::i;:::-;9015:11;:36;;;;8929:130::o:0;1029:85:9:-;1075:7;1101:6;;;;;;;;;;;1094:13;;1029:85;:::o;2346:102:2:-;2402:13;2434:7;2427:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2346:102;:::o;11064:244:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11171:13:1::1;;;;;;;;;;;11163:21;;:4;:21;;;;11155:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;11259:41;11288:4;11294:5;11259:28;:41::i;:::-;11064:244:::0;;:::o;6575:429:2:-;6668:4;6684:13;6700:12;:10;:12::i;:::-;6684:28;;6722:24;6749:11;:18;6761:5;6749:18;;;;;;;;;;;;;;;:27;6768:7;6749:27;;;;;;;;;;;;;;;;6722:54;;6814:15;6794:16;:35;;6786:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6905:60;6914:5;6921:7;6949:15;6930:16;:34;6905:8;:60::i;:::-;6993:4;6986:11;;;;6575:429;;;;:::o;3708:189::-;3787:4;3803:13;3819:12;:10;:12::i;:::-;3803:28;;3841;3851:5;3858:2;3862:6;3841:9;:28::i;:::-;3886:4;3879:11;;;3708:189;;;;:::o;5885:33:1:-;;;;;;;;;;;;;:::o;10874:182::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10990:8:1::1;10959:19;:28;10979:7;10959:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;11030:7;11014:34;;;11039:8;11014:34;;;;;;:::i;:::-;;;;;;;;10874:182:::0;;:::o;10145:211::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10267:4:1::1;10261;10257:1;10241:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;10240:31;;;;:::i;:::-;10230:6;:41;;10222:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;10344:4;10335:6;:13;;;;:::i;:::-;10323:9;:25;;;;10145:211:::0;:::o;12151:203::-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12239:6:1::1;12234:113;12255:12;:19;12251:1;:23;12234:113;;;12330:5;12296:14;:31;12311:12;12324:1;12311:15;;;;;;;;:::i;:::-;;;;;;;;12296:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;12276:3;;;;;:::i;:::-;;;;12234:113;;;;12151:203:::0;:::o;6109:39::-;;;;;;;;;;;;;:::o;5722:35::-;;;;:::o;9511:382::-;9592:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9649:6:1::1;9645:1;9629:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;9616:9;:39;;9608:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;9764:4;9760:1;9744:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;9731:9;:37;;9723:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;9856:9;9835:18;:30;;;;9882:4;9875:11;;9511:382:::0;;;:::o;3955:149:2:-;4044:7;4070:11;:18;4082:5;4070:18;;;;;;;;;;;;;;;:27;4089:7;4070:27;;;;;;;;;;;;;;;;4063:34;;3955:149;;;;:::o;18840:160:1:-;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18891:40:1::1;18909:21;18891:17;:40::i;:::-;18950:9;;;;;;;;;;;18942:27;;:50;18970:21;18942:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;18840:160::o:0;5764:33::-;;;;:::o;9301:135::-;9361:4;1252:12:9;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9401:5:1::1;9378:20;;:28;;;;;;;;;;;;;;;;;;9424:4;9417:11;;9301:135:::0;:::o;1911:198:9:-;1252:12;:10;:12::i;:::-;1241:23;;:7;:5;:7::i;:::-;:23;;;1233:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2019:1:::1;1999:22;;:8;:22;;;;1991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2074:28;2093:8;2074:18;:28::i;:::-;1911:198:::0;:::o;5804:24:1:-;;;;:::o;640:96:0:-;693:7;719:10;712:17;;640:96;:::o;10102:370:2:-;10250:1;10233:19;;:5;:19;;;;10225:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10330:1;10311:21;;:7;:21;;;;10303:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10412:6;10382:11;:18;10394:5;10382:18;;;;;;;;;;;;;;;:27;10401:7;10382:27;;;;;;;;;;;;;;;:36;;;;10449:7;10433:32;;10442:5;10433:32;;;10458:6;10433:32;;;;;;:::i;:::-;;;;;;;;10102:370;;;:::o;10749:441::-;10879:24;10906:25;10916:5;10923:7;10906:9;:25::i;:::-;10879:52;;10965:17;10945:16;:37;10941:243;;11026:6;11006:16;:26;;10998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11108:51;11117:5;11124:7;11152:6;11133:16;:25;11108:8;:51::i;:::-;10941:243;10869:321;10749:441;;;:::o;12479:3721:1:-;12627:1;12611:18;;:4;:18;;;;12603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12704:1;12690:16;;:2;:16;;;;12682:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12766:14;:20;12781:4;12766:20;;;;;;;;;;;;;;;;;;;;;;;;;12765:21;12757:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;12904:1;12894:6;:11;12890:93;;;12922:28;12938:4;12944:2;12948:1;12922:15;:28::i;:::-;12965:7;;12890:93;13018:11;;12999:15;:30;12995:61;;13052:4;13031:14;:18;13046:2;13031:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;12995:61;13081:14;;;;;;;;;;;13077:1838;;;13142:7;:5;:7::i;:::-;13134:15;;:4;:15;;;;:49;;;;;13176:7;:5;:7::i;:::-;13170:13;;:2;:13;;;;13134:49;:86;;;;;13218:1;13204:16;;:2;:16;;;;13134:86;:128;;;;;13255:6;13241:21;;:2;:21;;;;13134:128;:159;;;;;13284:9;;;;;;;;;;;13283:10;13134:159;13112:1792;;;13333:13;;;;;;;;;;;13328:150;;13379:19;:25;13399:4;13379:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;13408:19;:23;13428:2;13408:23;;;;;;;;;;;;;;;;;;;;;;;;;13379:52;13371:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;13328:150;13636:20;;;;;;;;;;;13632:423;;;13690:7;:5;:7::i;:::-;13684:13;;:2;:13;;;;:47;;;;;13715:15;;;;;;;;;;;13701:30;;:2;:30;;;;13684:47;:79;;;;;13749:13;;;;;;;;;;;13735:28;;:2;:28;;;;13684:79;13680:356;;;13841:12;13799:28;:39;13828:9;13799:39;;;;;;;;;;;;;;;;:54;13791:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;14000:12;13958:28;:39;13987:9;13958:39;;;;;;;;;;;;;;;:54;;;;13680:356;13632:423;14125:25;:31;14151:4;14125:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;14161:31;:35;14193:2;14161:35;;;;;;;;;;;;;;;;;;;;;;;;;14160:36;14125:71;14121:768;;;14239:20;;14229:6;:30;;14221:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;14374:9;;14357:13;14367:2;14357:9;:13::i;:::-;14348:6;:22;;;;:::i;:::-;:35;;14340:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14121:768;;;14502:25;:29;14528:2;14502:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;14536:31;:37;14568:4;14536:37;;;;;;;;;;;;;;;;;;;;;;;;;14535:38;14502:71;14498:391;;;14616:20;;14606:6;:30;;14598:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;14498:391;;;14743:31;:35;14775:2;14743:35;;;;;;;;;;;;;;;;;;;;;;;;;14738:151;;14836:9;;14819:13;14829:2;14819:9;:13::i;:::-;14810:6;:22;;;;:::i;:::-;:35;;14802:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14738:151;14498:391;14121:768;13112:1792;13077:1838;14929:28;14960:24;14978:4;14960:9;:24::i;:::-;14929:55;;14995:12;15034:18;;15010:20;:42;;14995:57;;15081:7;:34;;;;;15106:9;;;;;;;;;;;15105:10;15081:34;:83;;;;;15133:25;:31;15159:4;15133:31;;;;;;;;;;;;;;;;;;;;;;;;;15132:32;15081:83;:126;;;;;15182:19;:25;15202:4;15182:25;;;;;;;;;;;;;;;;;;;;;;;;;15181:26;15081:126;:167;;;;;15225:19;:23;15245:2;15225:23;;;;;;;;;;;;;;;;;;;;;;;;;15224:24;15081:167;15063:297;;;15287:4;15275:9;;:16;;;;;;;;;;;;;;;;;;15306:10;:8;:10::i;:::-;15343:5;15331:9;;:17;;;;;;;;;;;;;;;;;;15063:297;15372:12;15388:9;;;;;;;;;;;15387:10;15372:25;;15499:19;:25;15519:4;15499:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;15528:19;:23;15548:2;15528:23;;;;;;;;;;;;;;;;;;;;;;;;;15499:52;15495:100;;;15578:5;15568:15;;15495:100;15615:12;15720:7;15716:431;;;15751:30;15777:3;15751:21;15762:9;;15751:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;15744:37;;15842:9;;15826:13;;15819:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;15796:19;;:55;;;;;;;:::i;:::-;;;;;;;;15900:9;;15890:7;;15883:4;:14;;;;:::i;:::-;:26;;;;:::i;:::-;15866:13;;:43;;;;;;;:::i;:::-;;;;;;;;15970:9;;15954:13;;15947:4;:20;;;;:::i;:::-;:32;;;;:::i;:::-;15924:19;;:55;;;;;;;:::i;:::-;;;;;;;;16019:1;16012:4;:8;16008:91;;;16041:42;16057:4;16071;16078;16041:15;:42::i;:::-;16008:91;16131:4;16121:14;;;;;:::i;:::-;;;15716:431;16159:33;16175:4;16181:2;16185:6;16159:15;:33::i;:::-;12592:3608;;;;12479:3721;;;;:::o;2263:187:9:-;2336:16;2355:6;;;;;;;;;;;2336:25;;2380:8;2371:6;;:17;;;;;;;;;;;;;;;;;;2434:8;2403:40;;2424:8;2403:40;;;;;;;;;;;;2326:124;2263:187;:::o;2741:96:10:-;2799:7;2829:1;2825;:5;;;;:::i;:::-;2818:12;;2741:96;;;;:::o;11316:188:1:-;11433:5;11399:25;:31;11425:4;11399:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;11490:5;11456:40;;11484:4;11456:40;;;;;;;;;;;;11316:188;;:::o;16208:590::-;16335:21;16373:1;16359:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16335:40;;16404:4;16386;16391:1;16386:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;16430:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16420:4;16425:1;16420:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;16465:62;16482:4;16497:15;;;;;;;;;;;16515:11;16465:8;:62::i;:::-;16566:15;;;;;;;;;;;:66;;;16647:11;16673:1;16717:4;16744;16764:15;16566:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16264:534;16208:590;:::o;7467:651:2:-;7609:1;7593:18;;:4;:18;;;;7585:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7685:1;7671:16;;:2;:16;;;;7663:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;7738:38;7759:4;7765:2;7769:6;7738:20;:38::i;:::-;7787:19;7809:9;:15;7819:4;7809:15;;;;;;;;;;;;;;;;7787:37;;7857:6;7842:11;:21;;7834:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7972:6;7958:11;:20;7940:9;:15;7950:4;7940:15;;;;;;;;;;;;;;;:38;;;;8015:6;7998:9;:13;8008:2;7998:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;8052:2;8037:26;;8046:4;8037:26;;;8056:6;8037:26;;;;;;:::i;:::-;;;;;;;;8074:37;8094:4;8100:2;8104:6;8074:19;:37::i;:::-;7575:543;7467:651;;;:::o;17332:1500:1:-;17371:23;17397:24;17415:4;17397:9;:24::i;:::-;17371:50;;17432:25;17504:13;;17482:19;;17460;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;17432:85;;17561:1;17542:15;:20;:46;;;;17587:1;17566:17;:22;17542:46;17538:59;;;17590:7;;;;17538:59;17629:18;;17611:15;:36;17607:103;;;17680:18;;17662:36;;17607:103;17779:23;17865:1;17845:17;17823:19;;17805:15;:37;;;;:::i;:::-;:57;;;;:::i;:::-;:61;;;;:::i;:::-;17779:87;;17877:26;17906:36;17926:15;17906;:19;;:36;;;;:::i;:::-;17877:65;;17963:25;17991:21;17963:49;;18025:37;18043:18;18025:17;:37::i;:::-;18084:18;18105:44;18131:17;18105:21;:25;;:44;;;;:::i;:::-;18084:65;;18160:23;18186:58;18226:17;18186:35;18201:19;;18186:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;18160:84;;18255:17;18275:52;18309:17;18275:29;18290:13;;18275:10;:14;;:29;;;;:::i;:::-;:33;;:52;;;;:::i;:::-;18255:72;;18338:23;18395:9;18377:15;18364:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;18338:66;;18447:1;18425:19;:23;;;;18481:1;18459:19;:23;;;;18509:1;18493:13;:17;;;;18531:9;;;;;;;;;;;18523:27;;:59;18551:30;18571:9;18551:15;:19;;:30;;;;:::i;:::-;18523:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18633:1;18615:15;:19;:42;;;;;18656:1;18638:15;:19;18615:42;18611:214;;;18674:47;18688:15;18705;18674:13;:47::i;:::-;18741:72;18756:18;18776:15;18793:19;;18741:72;;;;;;;;:::i;:::-;;;;;;;;18611:214;17360:1472;;;;;;;;;17332:1500;:::o;3451:96:10:-;3509:7;3539:1;3535;:5;;;;:::i;:::-;3528:12;;3451:96;;;;:::o;3836:::-;3894:7;3924:1;3920;:5;;;;:::i;:::-;3913:12;;3836:96;;;;:::o;11774:121:2:-;;;;:::o;12483:120::-;;;;:::o;3108:96:10:-;3166:7;3196:1;3192;:5;;;;:::i;:::-;3185:12;;3108:96;;;;:::o;16810:514:1:-;16959:62;16976:4;16991:15;;;;;;;;;;;17009:11;16959:8;:62::i;:::-;17064:15;;;;;;;;;;;:31;;;17103:9;17136:4;17156:11;17182:1;17225;17268:7;:5;:7::i;:::-;17290:15;17064:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16810:514;;:::o;24:722:11:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:370::-;1134:5;1183:3;1176:4;1168:6;1164:17;1160:27;1150:122;;1191:79;;:::i;:::-;1150:122;1308:6;1295:20;1333:94;1423:3;1415:6;1408:4;1400:6;1396:17;1333:94;:::i;:::-;1324:103;;1140:293;1063:370;;;;:::o;1439:133::-;1482:5;1520:6;1507:20;1498:29;;1536:30;1560:5;1536:30;:::i;:::-;1439:133;;;;:::o;1578:139::-;1624:5;1662:6;1649:20;1640:29;;1678:33;1705:5;1678:33;:::i;:::-;1578:139;;;;:::o;1723:143::-;1780:5;1811:6;1805:13;1796:22;;1827:33;1854:5;1827:33;:::i;:::-;1723:143;;;;:::o;1872:329::-;1931:6;1980:2;1968:9;1959:7;1955:23;1951:32;1948:119;;;1986:79;;:::i;:::-;1948:119;2106:1;2131:53;2176:7;2167:6;2156:9;2152:22;2131:53;:::i;:::-;2121:63;;2077:117;1872:329;;;;:::o;2207:351::-;2277:6;2326:2;2314:9;2305:7;2301:23;2297:32;2294:119;;;2332:79;;:::i;:::-;2294:119;2452:1;2477:64;2533:7;2524:6;2513:9;2509:22;2477:64;:::i;:::-;2467:74;;2423:128;2207:351;;;;:::o;2564:474::-;2632:6;2640;2689:2;2677:9;2668:7;2664:23;2660:32;2657:119;;;2695:79;;:::i;:::-;2657:119;2815:1;2840:53;2885:7;2876:6;2865:9;2861:22;2840:53;:::i;:::-;2830:63;;2786:117;2942:2;2968:53;3013:7;3004:6;2993:9;2989:22;2968:53;:::i;:::-;2958:63;;2913:118;2564:474;;;;;:::o;3044:619::-;3121:6;3129;3137;3186:2;3174:9;3165:7;3161:23;3157:32;3154:119;;;3192:79;;:::i;:::-;3154:119;3312:1;3337:53;3382:7;3373:6;3362:9;3358:22;3337:53;:::i;:::-;3327:63;;3283:117;3439:2;3465:53;3510:7;3501:6;3490:9;3486:22;3465:53;:::i;:::-;3455:63;;3410:118;3567:2;3593:53;3638:7;3629:6;3618:9;3614:22;3593:53;:::i;:::-;3583:63;;3538:118;3044:619;;;;;:::o;3669:468::-;3734:6;3742;3791:2;3779:9;3770:7;3766:23;3762:32;3759:119;;;3797:79;;:::i;:::-;3759:119;3917:1;3942:53;3987:7;3978:6;3967:9;3963:22;3942:53;:::i;:::-;3932:63;;3888:117;4044:2;4070:50;4112:7;4103:6;4092:9;4088:22;4070:50;:::i;:::-;4060:60;;4015:115;3669:468;;;;;:::o;4143:474::-;4211:6;4219;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:53;4464:7;4455:6;4444:9;4440:22;4419:53;:::i;:::-;4409:63;;4365:117;4521:2;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4492:118;4143:474;;;;;:::o;4623:539::-;4707:6;4756:2;4744:9;4735:7;4731:23;4727:32;4724:119;;;4762:79;;:::i;:::-;4724:119;4910:1;4899:9;4895:17;4882:31;4940:18;4932:6;4929:30;4926:117;;;4962:79;;:::i;:::-;4926:117;5067:78;5137:7;5128:6;5117:9;5113:22;5067:78;:::i;:::-;5057:88;;4853:302;4623:539;;;;:::o;5168:329::-;5227:6;5276:2;5264:9;5255:7;5251:23;5247:32;5244:119;;;5282:79;;:::i;:::-;5244:119;5402:1;5427:53;5472:7;5463:6;5452:9;5448:22;5427:53;:::i;:::-;5417:63;;5373:117;5168:329;;;;:::o;5503:619::-;5580:6;5588;5596;5645:2;5633:9;5624:7;5620:23;5616:32;5613:119;;;5651:79;;:::i;:::-;5613:119;5771:1;5796:53;5841:7;5832:6;5821:9;5817:22;5796:53;:::i;:::-;5786:63;;5742:117;5898:2;5924:53;5969:7;5960:6;5949:9;5945:22;5924:53;:::i;:::-;5914:63;;5869:118;6026:2;6052:53;6097:7;6088:6;6077:9;6073:22;6052:53;:::i;:::-;6042:63;;5997:118;5503:619;;;;;:::o;6128:663::-;6216:6;6224;6232;6281:2;6269:9;6260:7;6256:23;6252:32;6249:119;;;6287:79;;:::i;:::-;6249:119;6407:1;6432:64;6488:7;6479:6;6468:9;6464:22;6432:64;:::i;:::-;6422:74;;6378:128;6545:2;6571:64;6627:7;6618:6;6607:9;6603:22;6571:64;:::i;:::-;6561:74;;6516:129;6684:2;6710:64;6766:7;6757:6;6746:9;6742:22;6710:64;:::i;:::-;6700:74;;6655:129;6128:663;;;;;:::o;6797:179::-;6866:10;6887:46;6929:3;6921:6;6887:46;:::i;:::-;6965:4;6960:3;6956:14;6942:28;;6797:179;;;;:::o;6982:108::-;7059:24;7077:5;7059:24;:::i;:::-;7054:3;7047:37;6982:108;;:::o;7096:118::-;7183:24;7201:5;7183:24;:::i;:::-;7178:3;7171:37;7096:118;;:::o;7250:732::-;7369:3;7398:54;7446:5;7398:54;:::i;:::-;7468:86;7547:6;7542:3;7468:86;:::i;:::-;7461:93;;7578:56;7628:5;7578:56;:::i;:::-;7657:7;7688:1;7673:284;7698:6;7695:1;7692:13;7673:284;;;7774:6;7768:13;7801:63;7860:3;7845:13;7801:63;:::i;:::-;7794:70;;7887:60;7940:6;7887:60;:::i;:::-;7877:70;;7733:224;7720:1;7717;7713:9;7708:14;;7673:284;;;7677:14;7973:3;7966:10;;7374:608;;;7250:732;;;;:::o;7988:109::-;8069:21;8084:5;8069:21;:::i;:::-;8064:3;8057:34;7988:109;;:::o;8103:147::-;8198:45;8237:5;8198:45;:::i;:::-;8193:3;8186:58;8103:147;;:::o;8256:364::-;8344:3;8372:39;8405:5;8372:39;:::i;:::-;8427:71;8491:6;8486:3;8427:71;:::i;:::-;8420:78;;8507:52;8552:6;8547:3;8540:4;8533:5;8529:16;8507:52;:::i;:::-;8584:29;8606:6;8584:29;:::i;:::-;8579:3;8575:39;8568:46;;8348:272;8256:364;;;;:::o;8626:366::-;8768:3;8789:67;8853:2;8848:3;8789:67;:::i;:::-;8782:74;;8865:93;8954:3;8865:93;:::i;:::-;8983:2;8978:3;8974:12;8967:19;;8626:366;;;:::o;8998:::-;9140:3;9161:67;9225:2;9220:3;9161:67;:::i;:::-;9154:74;;9237:93;9326:3;9237:93;:::i;:::-;9355:2;9350:3;9346:12;9339:19;;8998:366;;;:::o;9370:::-;9512:3;9533:67;9597:2;9592:3;9533:67;:::i;:::-;9526:74;;9609:93;9698:3;9609:93;:::i;:::-;9727:2;9722:3;9718:12;9711:19;;9370:366;;;:::o;9742:::-;9884:3;9905:67;9969:2;9964:3;9905:67;:::i;:::-;9898:74;;9981:93;10070:3;9981:93;:::i;:::-;10099:2;10094:3;10090:12;10083:19;;9742:366;;;:::o;10114:::-;10256:3;10277:67;10341:2;10336:3;10277:67;:::i;:::-;10270:74;;10353:93;10442:3;10353:93;:::i;:::-;10471:2;10466:3;10462:12;10455:19;;10114:366;;;:::o;10486:::-;10628:3;10649:67;10713:2;10708:3;10649:67;:::i;:::-;10642:74;;10725:93;10814:3;10725:93;:::i;:::-;10843:2;10838:3;10834:12;10827:19;;10486:366;;;:::o;10858:::-;11000:3;11021:67;11085:2;11080:3;11021:67;:::i;:::-;11014:74;;11097:93;11186:3;11097:93;:::i;:::-;11215:2;11210:3;11206:12;11199:19;;10858:366;;;:::o;11230:::-;11372:3;11393:67;11457:2;11452:3;11393:67;:::i;:::-;11386:74;;11469:93;11558:3;11469:93;:::i;:::-;11587:2;11582:3;11578:12;11571:19;;11230:366;;;:::o;11602:::-;11744:3;11765:67;11829:2;11824:3;11765:67;:::i;:::-;11758:74;;11841:93;11930:3;11841:93;:::i;:::-;11959:2;11954:3;11950:12;11943:19;;11602:366;;;:::o;11974:::-;12116:3;12137:67;12201:2;12196:3;12137:67;:::i;:::-;12130:74;;12213:93;12302:3;12213:93;:::i;:::-;12331:2;12326:3;12322:12;12315:19;;11974:366;;;:::o;12346:::-;12488:3;12509:67;12573:2;12568:3;12509:67;:::i;:::-;12502:74;;12585:93;12674:3;12585:93;:::i;:::-;12703:2;12698:3;12694:12;12687:19;;12346:366;;;:::o;12718:::-;12860:3;12881:67;12945:2;12940:3;12881:67;:::i;:::-;12874:74;;12957:93;13046:3;12957:93;:::i;:::-;13075:2;13070:3;13066:12;13059:19;;12718:366;;;:::o;13090:::-;13232:3;13253:67;13317:2;13312:3;13253:67;:::i;:::-;13246:74;;13329:93;13418:3;13329:93;:::i;:::-;13447:2;13442:3;13438:12;13431:19;;13090:366;;;:::o;13462:::-;13604:3;13625:67;13689:2;13684:3;13625:67;:::i;:::-;13618:74;;13701:93;13790:3;13701:93;:::i;:::-;13819:2;13814:3;13810:12;13803:19;;13462:366;;;:::o;13834:::-;13976:3;13997:67;14061:2;14056:3;13997:67;:::i;:::-;13990:74;;14073:93;14162:3;14073:93;:::i;:::-;14191:2;14186:3;14182:12;14175:19;;13834:366;;;:::o;14206:::-;14348:3;14369:67;14433:2;14428:3;14369:67;:::i;:::-;14362:74;;14445:93;14534:3;14445:93;:::i;:::-;14563:2;14558:3;14554:12;14547:19;;14206:366;;;:::o;14578:::-;14720:3;14741:67;14805:2;14800:3;14741:67;:::i;:::-;14734:74;;14817:93;14906:3;14817:93;:::i;:::-;14935:2;14930:3;14926:12;14919:19;;14578:366;;;:::o;14950:::-;15092:3;15113:67;15177:2;15172:3;15113:67;:::i;:::-;15106:74;;15189:93;15278:3;15189:93;:::i;:::-;15307:2;15302:3;15298:12;15291:19;;14950:366;;;:::o;15322:::-;15464:3;15485:67;15549:2;15544:3;15485:67;:::i;:::-;15478:74;;15561:93;15650:3;15561:93;:::i;:::-;15679:2;15674:3;15670:12;15663:19;;15322:366;;;:::o;15694:::-;15836:3;15857:67;15921:2;15916:3;15857:67;:::i;:::-;15850:74;;15933:93;16022:3;15933:93;:::i;:::-;16051:2;16046:3;16042:12;16035:19;;15694:366;;;:::o;16066:::-;16208:3;16229:67;16293:2;16288:3;16229:67;:::i;:::-;16222:74;;16305:93;16394:3;16305:93;:::i;:::-;16423:2;16418:3;16414:12;16407:19;;16066:366;;;:::o;16438:118::-;16525:24;16543:5;16525:24;:::i;:::-;16520:3;16513:37;16438:118;;:::o;16562:112::-;16645:22;16661:5;16645:22;:::i;:::-;16640:3;16633:35;16562:112;;:::o;16680:222::-;16773:4;16811:2;16800:9;16796:18;16788:26;;16824:71;16892:1;16881:9;16877:17;16868:6;16824:71;:::i;:::-;16680:222;;;;:::o;16908:807::-;17157:4;17195:3;17184:9;17180:19;17172:27;;17209:71;17277:1;17266:9;17262:17;17253:6;17209:71;:::i;:::-;17290:72;17358:2;17347:9;17343:18;17334:6;17290:72;:::i;:::-;17372:80;17448:2;17437:9;17433:18;17424:6;17372:80;:::i;:::-;17462;17538:2;17527:9;17523:18;17514:6;17462:80;:::i;:::-;17552:73;17620:3;17609:9;17605:19;17596:6;17552:73;:::i;:::-;17635;17703:3;17692:9;17688:19;17679:6;17635:73;:::i;:::-;16908:807;;;;;;;;;:::o;17721:210::-;17808:4;17846:2;17835:9;17831:18;17823:26;;17859:65;17921:1;17910:9;17906:17;17897:6;17859:65;:::i;:::-;17721:210;;;;:::o;17937:313::-;18050:4;18088:2;18077:9;18073:18;18065:26;;18137:9;18131:4;18127:20;18123:1;18112:9;18108:17;18101:47;18165:78;18238:4;18229:6;18165:78;:::i;:::-;18157:86;;17937:313;;;;:::o;18256:419::-;18422:4;18460:2;18449:9;18445:18;18437:26;;18509:9;18503:4;18499:20;18495:1;18484:9;18480:17;18473:47;18537:131;18663:4;18537:131;:::i;:::-;18529:139;;18256:419;;;:::o;18681:::-;18847:4;18885:2;18874:9;18870:18;18862:26;;18934:9;18928:4;18924:20;18920:1;18909:9;18905:17;18898:47;18962:131;19088:4;18962:131;:::i;:::-;18954:139;;18681:419;;;:::o;19106:::-;19272:4;19310:2;19299:9;19295:18;19287:26;;19359:9;19353:4;19349:20;19345:1;19334:9;19330:17;19323:47;19387:131;19513:4;19387:131;:::i;:::-;19379:139;;19106:419;;;:::o;19531:::-;19697:4;19735:2;19724:9;19720:18;19712:26;;19784:9;19778:4;19774:20;19770:1;19759:9;19755:17;19748:47;19812:131;19938:4;19812:131;:::i;:::-;19804:139;;19531:419;;;:::o;19956:::-;20122:4;20160:2;20149:9;20145:18;20137:26;;20209:9;20203:4;20199:20;20195:1;20184:9;20180:17;20173:47;20237:131;20363:4;20237:131;:::i;:::-;20229:139;;19956:419;;;:::o;20381:::-;20547:4;20585:2;20574:9;20570:18;20562:26;;20634:9;20628:4;20624:20;20620:1;20609:9;20605:17;20598:47;20662:131;20788:4;20662:131;:::i;:::-;20654:139;;20381:419;;;:::o;20806:::-;20972:4;21010:2;20999:9;20995:18;20987:26;;21059:9;21053:4;21049:20;21045:1;21034:9;21030:17;21023:47;21087:131;21213:4;21087:131;:::i;:::-;21079:139;;20806:419;;;:::o;21231:::-;21397:4;21435:2;21424:9;21420:18;21412:26;;21484:9;21478:4;21474:20;21470:1;21459:9;21455:17;21448:47;21512:131;21638:4;21512:131;:::i;:::-;21504:139;;21231:419;;;:::o;21656:::-;21822:4;21860:2;21849:9;21845:18;21837:26;;21909:9;21903:4;21899:20;21895:1;21884:9;21880:17;21873:47;21937:131;22063:4;21937:131;:::i;:::-;21929:139;;21656:419;;;:::o;22081:::-;22247:4;22285:2;22274:9;22270:18;22262:26;;22334:9;22328:4;22324:20;22320:1;22309:9;22305:17;22298:47;22362:131;22488:4;22362:131;:::i;:::-;22354:139;;22081:419;;;:::o;22506:::-;22672:4;22710:2;22699:9;22695:18;22687:26;;22759:9;22753:4;22749:20;22745:1;22734:9;22730:17;22723:47;22787:131;22913:4;22787:131;:::i;:::-;22779:139;;22506:419;;;:::o;22931:::-;23097:4;23135:2;23124:9;23120:18;23112:26;;23184:9;23178:4;23174:20;23170:1;23159:9;23155:17;23148:47;23212:131;23338:4;23212:131;:::i;:::-;23204:139;;22931:419;;;:::o;23356:::-;23522:4;23560:2;23549:9;23545:18;23537:26;;23609:9;23603:4;23599:20;23595:1;23584:9;23580:17;23573:47;23637:131;23763:4;23637:131;:::i;:::-;23629:139;;23356:419;;;:::o;23781:::-;23947:4;23985:2;23974:9;23970:18;23962:26;;24034:9;24028:4;24024:20;24020:1;24009:9;24005:17;23998:47;24062:131;24188:4;24062:131;:::i;:::-;24054:139;;23781:419;;;:::o;24206:::-;24372:4;24410:2;24399:9;24395:18;24387:26;;24459:9;24453:4;24449:20;24445:1;24434:9;24430:17;24423:47;24487:131;24613:4;24487:131;:::i;:::-;24479:139;;24206:419;;;:::o;24631:::-;24797:4;24835:2;24824:9;24820:18;24812:26;;24884:9;24878:4;24874:20;24870:1;24859:9;24855:17;24848:47;24912:131;25038:4;24912:131;:::i;:::-;24904:139;;24631:419;;;:::o;25056:::-;25222:4;25260:2;25249:9;25245:18;25237:26;;25309:9;25303:4;25299:20;25295:1;25284:9;25280:17;25273:47;25337:131;25463:4;25337:131;:::i;:::-;25329:139;;25056:419;;;:::o;25481:::-;25647:4;25685:2;25674:9;25670:18;25662:26;;25734:9;25728:4;25724:20;25720:1;25709:9;25705:17;25698:47;25762:131;25888:4;25762:131;:::i;:::-;25754:139;;25481:419;;;:::o;25906:::-;26072:4;26110:2;26099:9;26095:18;26087:26;;26159:9;26153:4;26149:20;26145:1;26134:9;26130:17;26123:47;26187:131;26313:4;26187:131;:::i;:::-;26179:139;;25906:419;;;:::o;26331:::-;26497:4;26535:2;26524:9;26520:18;26512:26;;26584:9;26578:4;26574:20;26570:1;26559:9;26555:17;26548:47;26612:131;26738:4;26612:131;:::i;:::-;26604:139;;26331:419;;;:::o;26756:::-;26922:4;26960:2;26949:9;26945:18;26937:26;;27009:9;27003:4;26999:20;26995:1;26984:9;26980:17;26973:47;27037:131;27163:4;27037:131;:::i;:::-;27029:139;;26756:419;;;:::o;27181:222::-;27274:4;27312:2;27301:9;27297:18;27289:26;;27325:71;27393:1;27382:9;27378:17;27369:6;27325:71;:::i;:::-;27181:222;;;;:::o;27409:831::-;27672:4;27710:3;27699:9;27695:19;27687:27;;27724:71;27792:1;27781:9;27777:17;27768:6;27724:71;:::i;:::-;27805:80;27881:2;27870:9;27866:18;27857:6;27805:80;:::i;:::-;27932:9;27926:4;27922:20;27917:2;27906:9;27902:18;27895:48;27960:108;28063:4;28054:6;27960:108;:::i;:::-;27952:116;;28078:72;28146:2;28135:9;28131:18;28122:6;28078:72;:::i;:::-;28160:73;28228:3;28217:9;28213:19;28204:6;28160:73;:::i;:::-;27409:831;;;;;;;;:::o;28246:442::-;28395:4;28433:2;28422:9;28418:18;28410:26;;28446:71;28514:1;28503:9;28499:17;28490:6;28446:71;:::i;:::-;28527:72;28595:2;28584:9;28580:18;28571:6;28527:72;:::i;:::-;28609;28677:2;28666:9;28662:18;28653:6;28609:72;:::i;:::-;28246:442;;;;;;:::o;28694:214::-;28783:4;28821:2;28810:9;28806:18;28798:26;;28834:67;28898:1;28887:9;28883:17;28874:6;28834:67;:::i;:::-;28694:214;;;;:::o;28914:129::-;28948:6;28975:20;;:::i;:::-;28965:30;;29004:33;29032:4;29024:6;29004:33;:::i;:::-;28914:129;;;:::o;29049:75::-;29082:6;29115:2;29109:9;29099:19;;29049:75;:::o;29130:311::-;29207:4;29297:18;29289:6;29286:30;29283:56;;;29319:18;;:::i;:::-;29283:56;29369:4;29361:6;29357:17;29349:25;;29429:4;29423;29419:15;29411:23;;29130:311;;;:::o;29447:132::-;29514:4;29537:3;29529:11;;29567:4;29562:3;29558:14;29550:22;;29447:132;;;:::o;29585:114::-;29652:6;29686:5;29680:12;29670:22;;29585:114;;;:::o;29705:99::-;29757:6;29791:5;29785:12;29775:22;;29705:99;;;:::o;29810:113::-;29880:4;29912;29907:3;29903:14;29895:22;;29810:113;;;:::o;29929:184::-;30028:11;30062:6;30057:3;30050:19;30102:4;30097:3;30093:14;30078:29;;29929:184;;;;:::o;30119:169::-;30203:11;30237:6;30232:3;30225:19;30277:4;30272:3;30268:14;30253:29;;30119:169;;;;:::o;30294:305::-;30334:3;30353:20;30371:1;30353:20;:::i;:::-;30348:25;;30387:20;30405:1;30387:20;:::i;:::-;30382:25;;30541:1;30473:66;30469:74;30466:1;30463:81;30460:107;;;30547:18;;:::i;:::-;30460:107;30591:1;30588;30584:9;30577:16;;30294:305;;;;:::o;30605:185::-;30645:1;30662:20;30680:1;30662:20;:::i;:::-;30657:25;;30696:20;30714:1;30696:20;:::i;:::-;30691:25;;30735:1;30725:35;;30740:18;;:::i;:::-;30725:35;30782:1;30779;30775:9;30770:14;;30605:185;;;;:::o;30796:348::-;30836:7;30859:20;30877:1;30859:20;:::i;:::-;30854:25;;30893:20;30911:1;30893:20;:::i;:::-;30888:25;;31081:1;31013:66;31009:74;31006:1;31003:81;30998:1;30991:9;30984:17;30980:105;30977:131;;;31088:18;;:::i;:::-;30977:131;31136:1;31133;31129:9;31118:20;;30796:348;;;;:::o;31150:191::-;31190:4;31210:20;31228:1;31210:20;:::i;:::-;31205:25;;31244:20;31262:1;31244:20;:::i;:::-;31239:25;;31283:1;31280;31277:8;31274:34;;;31288:18;;:::i;:::-;31274:34;31333:1;31330;31326:9;31318:17;;31150:191;;;;:::o;31347:96::-;31384:7;31413:24;31431:5;31413:24;:::i;:::-;31402:35;;31347:96;;;:::o;31449:90::-;31483:7;31526:5;31519:13;31512:21;31501:32;;31449:90;;;:::o;31545:126::-;31582:7;31622:42;31615:5;31611:54;31600:65;;31545:126;;;:::o;31677:77::-;31714:7;31743:5;31732:16;;31677:77;;;:::o;31760:86::-;31795:7;31835:4;31828:5;31824:16;31813:27;;31760:86;;;:::o;31852:121::-;31910:9;31943:24;31961:5;31943:24;:::i;:::-;31930:37;;31852:121;;;:::o;31979:307::-;32047:1;32057:113;32071:6;32068:1;32065:13;32057:113;;;32156:1;32151:3;32147:11;32141:18;32137:1;32132:3;32128:11;32121:39;32093:2;32090:1;32086:10;32081:15;;32057:113;;;32188:6;32185:1;32182:13;32179:101;;;32268:1;32259:6;32254:3;32250:16;32243:27;32179:101;32028:258;31979:307;;;:::o;32292:320::-;32336:6;32373:1;32367:4;32363:12;32353:22;;32420:1;32414:4;32410:12;32441:18;32431:81;;32497:4;32489:6;32485:17;32475:27;;32431:81;32559:2;32551:6;32548:14;32528:18;32525:38;32522:84;;;32578:18;;:::i;:::-;32522:84;32343:269;32292:320;;;:::o;32618:281::-;32701:27;32723:4;32701:27;:::i;:::-;32693:6;32689:40;32831:6;32819:10;32816:22;32795:18;32783:10;32780:34;32777:62;32774:88;;;32842:18;;:::i;:::-;32774:88;32882:10;32878:2;32871:22;32661:238;32618:281;;:::o;32905:233::-;32944:3;32967:24;32985:5;32967:24;:::i;:::-;32958:33;;33013:66;33006:5;33003:77;33000:103;;;33083:18;;:::i;:::-;33000:103;33130:1;33123:5;33119:13;33112:20;;32905:233;;;:::o;33144:180::-;33192:77;33189:1;33182:88;33289:4;33286:1;33279:15;33313:4;33310:1;33303:15;33330:180;33378:77;33375:1;33368:88;33475:4;33472:1;33465:15;33499:4;33496:1;33489:15;33516:180;33564:77;33561:1;33554:88;33661:4;33658:1;33651:15;33685:4;33682:1;33675:15;33702:180;33750:77;33747:1;33740:88;33847:4;33844:1;33837:15;33871:4;33868:1;33861:15;33888:180;33936:77;33933:1;33926:88;34033:4;34030:1;34023:15;34057:4;34054:1;34047:15;34074:117;34183:1;34180;34173:12;34197:117;34306:1;34303;34296:12;34320:117;34429:1;34426;34419:12;34443:117;34552:1;34549;34542:12;34566:102;34607:6;34658:2;34654:7;34649:2;34642:5;34638:14;34634:28;34624:38;;34566:102;;;:::o;34674:222::-;34814:34;34810:1;34802:6;34798:14;34791:58;34883:5;34878:2;34870:6;34866:15;34859:30;34674:222;:::o;34902:179::-;35042:31;35038:1;35030:6;35026:14;35019:55;34902:179;:::o;35087:172::-;35227:24;35223:1;35215:6;35211:14;35204:48;35087:172;:::o;35265:225::-;35405:34;35401:1;35393:6;35389:14;35382:58;35474:8;35469:2;35461:6;35457:15;35450:33;35265:225;:::o;35496:221::-;35636:34;35632:1;35624:6;35620:14;35613:58;35705:4;35700:2;35692:6;35688:15;35681:29;35496:221;:::o;35723:223::-;35863:34;35859:1;35851:6;35847:14;35840:58;35932:6;35927:2;35919:6;35915:15;35908:31;35723:223;:::o;35952:244::-;36092:34;36088:1;36080:6;36076:14;36069:58;36161:27;36156:2;36148:6;36144:15;36137:52;35952:244;:::o;36202:179::-;36342:31;36338:1;36330:6;36326:14;36319:55;36202:179;:::o;36387:225::-;36527:34;36523:1;36515:6;36511:14;36504:58;36596:8;36591:2;36583:6;36579:15;36572:33;36387:225;:::o;36618:241::-;36758:34;36754:1;36746:6;36742:14;36735:58;36827:24;36822:2;36814:6;36810:15;36803:49;36618:241;:::o;36865:240::-;37005:34;37001:1;36993:6;36989:14;36982:58;37074:23;37069:2;37061:6;37057:15;37050:48;36865:240;:::o;37111:239::-;37251:34;37247:1;37239:6;37235:14;37228:58;37320:22;37315:2;37307:6;37303:15;37296:47;37111:239;:::o;37356:240::-;37496:34;37492:1;37484:6;37480:14;37473:58;37565:23;37560:2;37552:6;37548:15;37541:48;37356:240;:::o;37602:297::-;37742:34;37738:1;37730:6;37726:14;37719:58;37811:34;37806:2;37798:6;37794:15;37787:59;37880:11;37875:2;37867:6;37863:15;37856:36;37602:297;:::o;37905:182::-;38045:34;38041:1;38033:6;38029:14;38022:58;37905:182;:::o;38093:224::-;38233:34;38229:1;38221:6;38217:14;38210:58;38302:7;38297:2;38289:6;38285:15;38278:32;38093:224;:::o;38323:301::-;38463:34;38459:1;38451:6;38447:14;38440:58;38532:34;38527:2;38519:6;38515:15;38508:59;38601:15;38596:2;38588:6;38584:15;38577:40;38323:301;:::o;38630:223::-;38770:34;38766:1;38758:6;38754:14;38747:58;38839:6;38834:2;38826:6;38822:15;38815:31;38630:223;:::o;38859:169::-;38999:21;38995:1;38987:6;38983:14;38976:45;38859:169;:::o;39034:224::-;39174:34;39170:1;39162:6;39158:14;39151:58;39243:7;39238:2;39230:6;39226:15;39219:32;39034:224;:::o;39264:234::-;39404:34;39400:1;39392:6;39388:14;39381:58;39473:17;39468:2;39460:6;39456:15;39449:42;39264:234;:::o;39504:122::-;39577:24;39595:5;39577:24;:::i;:::-;39570:5;39567:35;39557:63;;39616:1;39613;39606:12;39557:63;39504:122;:::o;39632:116::-;39702:21;39717:5;39702:21;:::i;:::-;39695:5;39692:32;39682:60;;39738:1;39735;39728:12;39682:60;39632:116;:::o;39754:122::-;39827:24;39845:5;39827:24;:::i;:::-;39820:5;39817:35;39807:63;;39866:1;39863;39856:12;39807:63;39754:122;:::o

Swarm Source

ipfs://0f52f689a154ad5013258313be7c3ad4c3c15056f4fd5dac7a2efa641e3969f0
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.