ETH Price: $3,545.26 (+6.56%)

Contract

0xAB633Af0731B6d7BCae50e72eAF8318Ec4Fa486b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer212763672024-11-27 3:21:1113 hrs ago1732677671IN
Tibicoin Official: TBC Token
0 ETH0.000689377.6744782
Transfer212763322024-11-27 3:14:1113 hrs ago1732677251IN
Tibicoin Official: TBC Token
0 ETH0.000514987.3481722
Transfer212693012024-11-26 3:41:1137 hrs ago1732592471IN
Tibicoin Official: TBC Token
0 ETH0.000400868.35538781
Bulk Exempt Fee212672272024-11-25 20:43:2344 hrs ago1732567403IN
Tibicoin Official: TBC Token
0 ETH0.0021279718.20305295
Transfer212647142024-11-25 12:16:112 days ago1732536971IN
Tibicoin Official: TBC Token
0 ETH0.0010987711.61312207
Transfer212646402024-11-25 12:01:232 days ago1732536083IN
Tibicoin Official: TBC Token
0 ETH0.0005183413.33194294
Transfer212645882024-11-25 11:50:592 days ago1732535459IN
Tibicoin Official: TBC Token
0 ETH0.0006386716.4269369
Transfer212645412024-11-25 11:41:352 days ago1732534895IN
Tibicoin Official: TBC Token
0 ETH0.0006866717.66131756
Transfer212243892024-11-19 21:12:237 days ago1732050743IN
Tibicoin Official: TBC Token
0 ETH0.001106221.87304909
Transfer212133522024-11-18 8:17:119 days ago1731917831IN
Tibicoin Official: TBC Token
0 ETH0.0009636510.18244273
Transfer211590592024-11-10 18:27:3516 days ago1731263255IN
Tibicoin Official: TBC Token
0 ETH0.0013693935.22108262
Transfer211589892024-11-10 18:13:3516 days ago1731262415IN
Tibicoin Official: TBC Token
0 ETH0.001063327.34831748
Transfer211589402024-11-10 18:03:3516 days ago1731261815IN
Tibicoin Official: TBC Token
0 ETH0.0011738230.19102249
Transfer211588882024-11-10 17:53:1116 days ago1731261191IN
Tibicoin Official: TBC Token
0 ETH0.0020065729.65057416
Transfer211251922024-11-06 1:01:2321 days ago1730854883IN
Tibicoin Official: TBC Token
0 ETH0.0011756323.24584246
Transfer211229212024-11-05 17:24:3521 days ago1730827475IN
Tibicoin Official: TBC Token
0 ETH0.0010325914.19590229
Transfer211228862024-11-05 17:17:3521 days ago1730827055IN
Tibicoin Official: TBC Token
0 ETH0.0011184516.53007845
Transfer210866782024-10-31 16:00:3527 days ago1730390435IN
Tibicoin Official: TBC Token
0 ETH0.0013424114.94048152
Transfer210866412024-10-31 15:53:1127 days ago1730389991IN
Tibicoin Official: TBC Token
0 ETH0.0011491712.14118807
Transfer210862592024-10-31 14:36:4727 days ago1730385407IN
Tibicoin Official: TBC Token
0 ETH0.0015965421.94896095
Transfer210862162024-10-31 14:28:1127 days ago1730384891IN
Tibicoin Official: TBC Token
0 ETH0.001169217.28009101
Transfer210793952024-10-30 15:38:3528 days ago1730302715IN
Tibicoin Official: TBC Token
0 ETH0.0059987366.76319538
Transfer210793602024-10-30 15:31:3528 days ago1730302295IN
Tibicoin Official: TBC Token
0 ETH0.0026542224.81722955
Transfer210793102024-10-30 15:21:3528 days ago1730301695IN
Tibicoin Official: TBC Token
0 ETH0.006956977.43743015
Transfer210792672024-10-30 15:12:5928 days ago1730301179IN
Tibicoin Official: TBC Token
0 ETH0.0026398727.89415121
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TIBICOINOFFICIAL

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-22
*/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.25;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut 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 2;
    }

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }

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

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

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

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

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * generation and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be generated 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 {}
}

library Address {
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract TIBICOINOFFICIAL is ERC20, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool public providingLiquidity = false;
    bool public tradingEnabled = false;

    uint256 public tokenLiquidityThreshold; 
    uint256 public maxWalletLimit;

    uint256 public genesis_block;
    uint256 private deadline = 3;
    uint256 private launchtax = 40;

    address private marketingWallet = 0x8BBDF8BfE5c33C0a37472777Dc064255C583e8d2;
    address private devWallet = 0x8BBDF8BfE5c33C0a37472777Dc064255C583e8d2;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 dev;
 
    }

    Taxes public taxes = Taxes(1, 1, 1);
    Taxes public sellTaxes = Taxes(1, 1, 1);

    mapping(address => bool) public exemptFee;
    mapping(address => bool) public allowedTransfer;

    //Anti Dump
    mapping(address => uint256) private _lastSell;
    bool public coolDownEnabled = true;
    uint256 public coolDownTime = 30 seconds;


    constructor(address routerAdd) ERC20("Tibicoin Official", "TBC") payable {
        _tokengeneration(msg.sender, 1000000000 * 10**decimals());
        tokenLiquidityThreshold = 10000000 * 10**decimals(); //1%
        maxWalletLimit = 50000000 * 10**decimals(); //5%
        exemptFee[msg.sender] = true;


        IRouter _router = IRouter(routerAdd);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());


        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[devWallet] = true;
       

        allowedTransfer[address(this)] = true;
        allowedTransfer[owner()] = true;
        allowedTransfer[pair] = true;
        allowedTransfer[marketingWallet] = true;
        allowedTransfer[devWallet] = true;

    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        override
        returns (bool)
    {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        override
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        if (!allowedTransfer[sender] && !allowedTransfer[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (sender == pair && !exemptFee[recipient]) {
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != pair && !exemptFee[recipient] && !exemptFee[sender]
        ) {
            if (recipient != pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
            if (coolDownEnabled) {
                uint256 timePassed = block.timestamp - _lastSell[sender];
                require(timePassed >= coolDownTime, "Cooldown enabled");
                _lastSell[sender] = block.timestamp;
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        Taxes memory currentTaxes;

        bool useLaunchFee = !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < genesis_block + deadline;

        //set fee to zero if fees in contract are handled or exempted
        if (exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair && !useLaunchFee) {
            feeswap =
                sellTaxes.liquidity +
                sellTaxes.marketing +             
                sellTaxes.dev;
            feesum = feeswap;
            currentTaxes = sellTaxes;
        } else if (!useLaunchFee) {
            feeswap =
                taxes.liquidity +
                taxes.marketing +
                taxes.dev;
            feesum = feeswap;
            currentTaxes = taxes;
        } else if (useLaunchFee) {
            feeswap = launchtax;
            feesum = launchtax;
        }

        fee = (amount * feesum) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair) handle_fees(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - fee);
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }

        }
    }

    function handle_fees(uint256 feeswap, Taxes memory swapTaxes) private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance * swapTaxes.liquidity) /
                denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance / (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity to uniswap
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

            uint256 devAmt = unitBalance * 2 * swapTaxes.dev;
            if (devAmt > 0) {
                payable(devWallet).sendValue(devAmt);
            }

  

        }
    }

    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] = router.WETH();

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tokenAmount);

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

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        tokenLiquidityThreshold = new_amount * 10**decimals();
    }

    function UpdateBuyTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        taxes = Taxes(_marketing, _liquidity,  _dev);
        require((_marketing + _liquidity + _dev) <= 25, "Buy taxes up to 25% only");
    }

    function UpdateSellTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        sellTaxes = Taxes(_marketing, _liquidity,  _dev);
        require((_marketing + _liquidity + _dev) <= 25, "Sell taxes up to 25% only");
    }

    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner {
        router = IRouter(newRouter);
        pair = newPair;
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is has begun");
        tradingEnabled = true;
        providingLiquidity = true;
        genesis_block = block.number;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function updateAllowedTransfer(address account, bool state) external onlyOwner {
        allowedTransfer[account] = state;
    }

    function bulkAllowedTransfer(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            allowedTransfer[accounts[i]] = state;
        }
    }

    function updateExemptFee(address _address, bool state) external onlyOwner {
        exemptFee[_address] = state;
    }

    function bulkExemptFee(address[] memory accounts, bool state) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            exemptFee[accounts[i]] = state;
        }
    }

    function updateMaxWalletlimit(uint256 amount) external onlyOwner {
        require(amount >= totalSupply() / 1000, "Cannot set max wallet amount lower than 0.1%");
        maxWalletLimit = amount * 10**decimals();
    }    

    function mint(address _to, uint256 _amount) public onlyOwner {
        _tokengeneration(_to, _amount);
    }

    function rescueETH(uint256 weiAmount) external onlyOwner {
        payable(devWallet).transfer(weiAmount);
    }

    function rescueTokens(address tokenAdd, uint256 amount) external onlyOwner {
        IERC20(tokenAdd).transfer(devWallet, amount);
    }

    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }
    
    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAdd","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"UpdateBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"UpdateSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"providingLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLiquidityThreshold","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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateAllowedTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600760146101000a81548160ff0219169083151502179055505f600760156101000a81548160ff0219169083151502179055506003600b556028600c55738bbdf8bfe5c33c0a37472777dc064255c583e8d2600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738bbdf8bfe5c33c0a37472777dc064255c583e8d2600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060018152602001600181526020016001815250600f5f820151815f01556020820151816001015560408201518160020155505060405180606001604052806001815260200160018152602001600181525060125f820151815f015560208201518160010155604082015181600201555050600160185f6101000a81548160ff021916908315150217905550601e601955604051615f44380380615f4483398181016040528101906101a69190610b25565b6040518060400160405280601181526020017f54696269636f696e204f6666696369616c0000000000000000000000000000008152506040518060400160405280600381526020017f544243000000000000000000000000000000000000000000000000000000000081525081600390816102219190610d8a565b5080600490816102319190610d8a565b50505061025061024561087660201b60201c565b61087d60201b60201c565b6102883361026261094060201b60201c565b600a61026e9190610fc1565b633b9aca0061027d919061100b565b61094860201b60201c565b61029661094060201b60201c565b600a6102a29190610fc1565b629896806102b0919061100b565b6008819055506102c461094060201b60201c565b600a6102d09190610fc1565b6302faf0806102df919061100b565b600981905550600160155f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f8190505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610388573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ac9190610b25565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610411573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104359190610b25565b6040518363ffffffff1660e01b815260040161045292919061105b565b6020604051808303815f875af115801561046e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104929190610b25565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160155f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160165f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160165f6106bd610a9a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160165f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160165f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160165f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050505061117b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6002905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad90611102565b60405180910390fd5b6109c75f8383610ac260201b60201c565b8060025f8282546109d89190611120565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610a2a9190611120565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610a8e9190611162565b60405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610af482610acb565b9050919050565b610b0481610aea565b8114610b0e575f80fd5b50565b5f81519050610b1f81610afb565b92915050565b5f60208284031215610b3a57610b39610ac7565b5b5f610b4784828501610b11565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610bcb57607f821691505b602082108103610bde57610bdd610b87565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610c05565b610c4a8683610c05565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610c8e610c89610c8484610c62565b610c6b565b610c62565b9050919050565b5f819050919050565b610ca783610c74565b610cbb610cb382610c95565b848454610c11565b825550505050565b5f90565b610ccf610cc3565b610cda818484610c9e565b505050565b5b81811015610cfd57610cf25f82610cc7565b600181019050610ce0565b5050565b601f821115610d4257610d1381610be4565b610d1c84610bf6565b81016020851015610d2b578190505b610d3f610d3785610bf6565b830182610cdf565b50505b505050565b5f82821c905092915050565b5f610d625f1984600802610d47565b1980831691505092915050565b5f610d7a8383610d53565b9150826002028217905092915050565b610d9382610b50565b67ffffffffffffffff811115610dac57610dab610b5a565b5b610db68254610bb4565b610dc1828285610d01565b5f60209050601f831160018114610df2575f8415610de0578287015190505b610dea8582610d6f565b865550610e51565b601f198416610e0086610be4565b5f5b82811015610e2757848901518255600182019150602085019450602081019050610e02565b86831015610e445784890151610e40601f891682610d53565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610edb57808604811115610eb757610eb6610e59565b5b6001851615610ec65780820291505b8081029050610ed485610e86565b9450610e9b565b94509492505050565b5f82610ef35760019050610fae565b81610f00575f9050610fae565b8160018114610f165760028114610f2057610f4f565b6001915050610fae565b60ff841115610f3257610f31610e59565b5b8360020a915084821115610f4957610f48610e59565b5b50610fae565b5060208310610133831016604e8410600b8410161715610f845782820a905083811115610f7f57610f7e610e59565b5b610fae565b610f918484846001610e92565b92509050818404811115610fa857610fa7610e59565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610fcb82610c62565b9150610fd683610fb5565b92506110037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610ee4565b905092915050565b5f61101582610c62565b915061102083610c62565b925082820261102e81610c62565b9150828204841483151761104557611044610e59565b5b5092915050565b61105581610aea565b82525050565b5f60408201905061106e5f83018561104c565b61107b602083018461104c565b9392505050565b5f82825260208201905092915050565b7f45524332303a2067656e65726174696f6e20746f20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6110ec602583611082565b91506110f782611092565b604082019050919050565b5f6020820190508181035f830152611119816110e0565b9050919050565b5f61112a82610c62565b915061113583610c62565b925082820190508082111561114d5761114c610e59565b5b92915050565b61115c81610c62565b82525050565b5f6020820190506111755f830184611153565b92915050565b614dbc806111885f395ff3fe608060405260043610610275575f3560e01c8063715018a61161014e578063a9059cbb116100c0578063dd62ed3e11610079578063dd62ed3e14610930578063ee36e3591461096c578063f2fde38b14610996578063f66895a3146109be578063f887ea40146109ea578063fbe6324e14610a145761027c565b8063a9059cbb14610816578063aacebbe314610852578063b5c571451461087a578063c5d32bb2146108a2578063d2ce0db2146108de578063d8672e51146109085761027c565b80638da5cb5b116101125780638da5cb5b1461070c57806395d89b41146107365780639d282cd6146107605780639e252f0014610788578063a457c2d7146107b0578063a8aa1b31146107ec5761027c565b8063715018a614610662578063728f8eea1461067857806381428be1146106a457806385141a77146106cc5780638a8c523c146106f65761027c565b8063355496ca116101e757806342b6fa11116101ab57806342b6fa11146105465780634ada218b1461056e578063573761981461059857806362695eae146105c057806366a88d96146105fc57806370a08231146106265761027c565b8063355496ca1461046a578063395093511461049257806340b28c2f146104ce57806340c10f19146104f657806342966c681461051e5761027c565b80631675d802116102395780631675d8021461035e57806318160ddd146103885780631816467f146103b257806323b872dd146103da578063274a533c14610416578063313ce567146104405761027c565b806306fdde0314610280578063095ea7b3146102aa5780630e375a5c146102e65780631178b3fc1461030e5780631340538f146103365761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a3e565b6040516102a191906136a0565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb919061375e565b610ace565b6040516102dd91906137b6565b60405180910390f35b3480156102f1575f80fd5b5061030c60048036038101906103079190613939565b610aeb565b005b348015610319575f80fd5b50610334600480360381019061032f9190613993565b610bf2565b005b348015610341575f80fd5b5061035c600480360381019061035791906139e3565b610d09565b005b348015610369575f80fd5b50610372610da2565b60405161037f9190613a1d565b60405180910390f35b348015610393575f80fd5b5061039c610da8565b6040516103a99190613a1d565b60405180910390f35b3480156103bd575f80fd5b506103d860048036038101906103d39190613a36565b610db1565b005b3480156103e5575f80fd5b5061040060048036038101906103fb9190613a61565b610e70565b60405161040d91906137b6565b60405180910390f35b348015610421575f80fd5b5061042a610f6b565b6040516104379190613a1d565b60405180910390f35b34801561044b575f80fd5b50610454610f71565b6040516104619190613acc565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190613ae5565b610f79565b005b34801561049d575f80fd5b506104b860048036038101906104b3919061375e565b61104d565b6040516104c591906137b6565b60405180910390f35b3480156104d9575f80fd5b506104f460048036038101906104ef9190613b23565b6110f4565b005b348015610501575f80fd5b5061051c6004803603810190610517919061375e565b6111f4565b005b348015610529575f80fd5b50610544600480360381019061053f9190613b61565b61127e565b005b348015610551575f80fd5b5061056c60048036038101906105679190613b61565b611292565b005b348015610579575f80fd5b50610582611336565b60405161058f91906137b6565b60405180910390f35b3480156105a3575f80fd5b506105be60048036038101906105b9919061375e565b611349565b005b3480156105cb575f80fd5b506105e660048036038101906105e19190613a36565b611466565b6040516105f391906137b6565b60405180910390f35b348015610607575f80fd5b50610610611483565b60405161061d9190613a1d565b60405180910390f35b348015610631575f80fd5b5061064c60048036038101906106479190613a36565b611489565b6040516106599190613a1d565b60405180910390f35b34801561066d575f80fd5b506106766114ce565b005b348015610683575f80fd5b5061068c611555565b60405161069b93929190613b8c565b60405180910390f35b3480156106af575f80fd5b506106ca60048036038101906106c59190613939565b61156c565b005b3480156106d7575f80fd5b506106e0611673565b6040516106ed9190613bd0565b60405180910390f35b348015610701575f80fd5b5061070a611679565b005b348015610717575f80fd5b50610720611784565b60405161072d9190613bd0565b60405180910390f35b348015610741575f80fd5b5061074a6117ac565b60405161075791906136a0565b60405180910390f35b34801561076b575f80fd5b5061078660048036038101906107819190613993565b61183c565b005b348015610793575f80fd5b506107ae60048036038101906107a99190613b61565b611953565b005b3480156107bb575f80fd5b506107d660048036038101906107d1919061375e565b611a37565b6040516107e391906137b6565b60405180910390f35b3480156107f7575f80fd5b50610800611b26565b60405161080d9190613bd0565b60405180910390f35b348015610821575f80fd5b5061083c6004803603810190610837919061375e565b611b4b565b60405161084991906137b6565b60405180910390f35b34801561085d575f80fd5b5061087860048036038101906108739190613a36565b611b61565b005b348015610885575f80fd5b506108a0600480360381019061089b9190613ae5565b611c20565b005b3480156108ad575f80fd5b506108c860048036038101906108c39190613a36565b611cf4565b6040516108d591906137b6565b60405180910390f35b3480156108e9575f80fd5b506108f2611d11565b6040516108ff9190613a1d565b60405180910390f35b348015610913575f80fd5b5061092e60048036038101906109299190613b61565b611d17565b005b34801561093b575f80fd5b5061095660048036038101906109519190613b23565b611e12565b6040516109639190613a1d565b60405180910390f35b348015610977575f80fd5b50610980611e94565b60405161098d91906137b6565b60405180910390f35b3480156109a1575f80fd5b506109bc60048036038101906109b79190613a36565b611ea6565b005b3480156109c9575f80fd5b506109d2611f9c565b6040516109e193929190613b8c565b60405180910390f35b3480156109f5575f80fd5b506109fe611fb3565b604051610a0b9190613c44565b60405180910390f35b348015610a1f575f80fd5b50610a28611fd8565b604051610a3591906137b6565b60405180910390f35b606060038054610a4d90613c8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7990613c8a565b8015610ac45780601f10610a9b57610100808354040283529160200191610ac4565b820191905f5260205f20905b815481529060010190602001808311610aa757829003601f168201915b5050505050905090565b5f610ae1610ada611feb565b8484611ff2565b6001905092915050565b610af3611feb565b73ffffffffffffffffffffffffffffffffffffffff16610b11611784565b73ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90613d04565b60405180910390fd5b5f5b8251811015610bed578160155f858481518110610b8957610b88613d22565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610b69565b505050565b610bfa611feb565b73ffffffffffffffffffffffffffffffffffffffff16610c18611784565b73ffffffffffffffffffffffffffffffffffffffff1614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590613d04565b60405180910390fd5b60405180606001604052808481526020018381526020018281525060125f820151815f015560208201518160010155604082015181600201559050506019818385610cb99190613d7c565b610cc39190613d7c565b1115610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90613df9565b60405180910390fd5b505050565b610d11611feb565b73ffffffffffffffffffffffffffffffffffffffff16610d2f611784565b73ffffffffffffffffffffffffffffffffffffffff1614610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613d04565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b60085481565b5f600254905090565b610db9611feb565b73ffffffffffffffffffffffffffffffffffffffff16610dd7611784565b73ffffffffffffffffffffffffffffffffffffffff1614610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613d04565b60405180910390fd5b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610e7c8484846121b5565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ec3611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3990613e87565b60405180910390fd5b610f5f85610f4e611feb565b8584610f5a9190613ea5565b611ff2565b60019150509392505050565b600a5481565b5f6002905090565b610f81611feb565b73ffffffffffffffffffffffffffffffffffffffff16610f9f611784565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613d04565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6110ea611059611feb565b848460015f611066611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110e59190613d7c565b611ff2565b6001905092915050565b6110fc611feb565b73ffffffffffffffffffffffffffffffffffffffff1661111a611784565b73ffffffffffffffffffffffffffffffffffffffff1614611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116790613d04565b60405180910390fd5b8160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6111fc611feb565b73ffffffffffffffffffffffffffffffffffffffff1661121a611784565b73ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790613d04565b60405180910390fd5b61127a8282612a06565b5050565b61128f611289611feb565b82612b52565b50565b61129a611feb565b73ffffffffffffffffffffffffffffffffffffffff166112b8611784565b73ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590613d04565b60405180910390fd5b611316610f71565b600a6113229190614007565b8161132d9190614051565b60088190555050565b600760159054906101000a900460ff1681565b611351611feb565b73ffffffffffffffffffffffffffffffffffffffff1661136f611784565b73ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613d04565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611421929190614092565b6020604051808303815f875af115801561143d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146191906140cd565b505050565b6016602052805f5260405f205f915054906101000a900460ff1681565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114d6611feb565b73ffffffffffffffffffffffffffffffffffffffff166114f4611784565b73ffffffffffffffffffffffffffffffffffffffff161461154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613d04565b60405180910390fd5b6115535f612d1c565b565b600f805f0154908060010154908060020154905083565b611574611feb565b73ffffffffffffffffffffffffffffffffffffffff16611592611784565b73ffffffffffffffffffffffffffffffffffffffff16146115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613d04565b60405180910390fd5b5f5b825181101561166e578160165f85848151811061160a57611609613d22565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506115ea565b505050565b61dead81565b611681611feb565b73ffffffffffffffffffffffffffffffffffffffff1661169f611784565b73ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613d04565b60405180910390fd5b600760159054906101000a900460ff1615611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c90614142565b60405180910390fd5b6001600760156101000a81548160ff0219169083151502179055506001600760146101000a81548160ff02191690831515021790555043600a81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546117bb90613c8a565b80601f01602080910402602001604051908101604052809291908181526020018280546117e790613c8a565b80156118325780601f1061180957610100808354040283529160200191611832565b820191905f5260205f20905b81548152906001019060200180831161181557829003601f168201915b5050505050905090565b611844611feb565b73ffffffffffffffffffffffffffffffffffffffff16611862611784565b73ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90613d04565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f5f820151815f0155602082015181600101556040820151816002015590505060198183856119039190613d7c565b61190d9190613d7c565b111561194e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611945906141aa565b60405180910390fd5b505050565b61195b611feb565b73ffffffffffffffffffffffffffffffffffffffff16611979611784565b73ffffffffffffffffffffffffffffffffffffffff16146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690613d04565b60405180910390fd5b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611a33573d5f803e3d5ffd5b5050565b5f8060015f611a44611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614238565b60405180910390fd5b611b1b611b09611feb565b858584611b169190613ea5565b611ff2565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611b573384846121b5565b6001905092915050565b611b69611feb565b73ffffffffffffffffffffffffffffffffffffffff16611b87611784565b73ffffffffffffffffffffffffffffffffffffffff1614611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490613d04565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c28611feb565b73ffffffffffffffffffffffffffffffffffffffff16611c46611784565b73ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390613d04565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6015602052805f5260405f205f915054906101000a900460ff1681565b60195481565b611d1f611feb565b73ffffffffffffffffffffffffffffffffffffffff16611d3d611784565b73ffffffffffffffffffffffffffffffffffffffff1614611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613d04565b60405180910390fd5b6103e8611d9e610da8565b611da89190614283565b811015611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614323565b60405180910390fd5b611df2610f71565b600a611dfe9190614007565b81611e099190614051565b60098190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60185f9054906101000a900460ff1681565b611eae611feb565b73ffffffffffffffffffffffffffffffffffffffff16611ecc611784565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613d04565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f87906143b1565b60405180910390fd5b611f9981612d1c565b50565b6012805f0154908060010154908060020154905083565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760149054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612060576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120579061443f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c5906144cd565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a89190613a1d565b60405180910390a3505050565b5f81116121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee9061455b565b60405180910390fd5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612295575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122ea57600760159054906101000a900460ff166122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e0906145c3565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561238d575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123eb576009548161239f84611489565b6123a99190613d7c565b11156123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e19061462b565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561248f575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124e2575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561267e5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612594576009548161254884611489565b6125529190613d7c565b1115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a9061462b565b60405180910390fd5b5b60185f9054906101000a900460ff161561267d575f60175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054426125f29190613ea5565b9050601954811015612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614693565b60405180910390fd5b4260175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5b5f805f612689613612565b5f60155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612728575060155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127425750600b54600a5461273f9190613d7c565b43105b905060155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127df575060155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127ec575f925061291a565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015612846575080155b156128a65760126002015460125f01546012600101546128669190613d7c565b6128709190613d7c565b945084935060126040518060600160405290815f8201548152602001600182015481526020016002820154815250509150612919565b8061290657600f60020154600f5f0154600f600101546128c69190613d7c565b6128d09190613d7c565b9450849350600f6040518060600160405290815f8201548152602001600182015481526020016002820154815250509150612918565b801561291757600c549450600c5493505b5b5b5b606484876129289190614051565b6129329190614283565b9250600760149054906101000a900460ff16801561299d575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b156129ad576129ac8583612ddf565b5b6129c3888885896129be9190613ea5565b612f94565b5f8311156129fc575f8511156129fb575f606486886129e29190614051565b6129ec9190614283565b90506129f9893083612f94565b505b5b5050505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b90614721565b60405180910390fd5b612a7f5f8383613207565b8060025f828254612a909190613d7c565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612ae29190613d7c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b469190613a1d565b60405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb7906147af565b60405180910390fd5b612bcb825f83613207565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c459061483d565b60405180910390fd5b8181612c5a9190613ea5565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254612cab9190613ea5565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0f9190613a1d565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f612de930611489565b90506008548110612f8f5760016008541115612e055760085490505b5f600284612e139190614051565b90505f81846020015184612e279190614051565b612e319190614283565b90505f8184612e409190613ea5565b90505f479050612e4f8261320c565b5f8147612e5c9190613ea5565b90505f876020015186612e6f9190613ea5565b82612e7a9190614283565b90505f886020015182612e8d9190614051565b90505f811115612ea257612ea18682613442565b5b5f895f0151600284612eb49190614051565b612ebe9190614051565b90505f811115612f1357612f1281600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661352290919063ffffffff16565b5b5f8a60400151600285612f269190614051565b612f309190614051565b90505f811115612f8557612f8481600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661352290919063ffffffff16565b5b5050505050505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff9906148cb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306790614959565b60405180910390fd5b61307b838383613207565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156130fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f5906149e7565b60405180910390fd5b818161310a9190613ea5565b5f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546131959190613d7c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131f99190613a1d565b60405180910390a350505050565b505050565b5f600267ffffffffffffffff811115613228576132276137d3565b5b6040519080825280602002602001820160405280156132565781602001602082028036833780820191505090505b50905030815f8151811061326d5761326c613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613311573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133359190614a19565b8160018151811061334957613348613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ff2565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613411959493929190614b34565b5f604051808303815f87803b158015613428575f80fd5b505af115801561343a573d5f803e3d5ffd5b505050505050565b61346e3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ff2565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806134b8611784565b426040518863ffffffff1660e01b81526004016134da96959493929190614b8c565b60606040518083038185885af11580156134f6573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061351b9190614bff565b5050505050565b80471015613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c90614c99565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161358a90614ce4565b5f6040518083038185875af1925050503d805f81146135c4576040519150601f19603f3d011682016040523d82523d5f602084013e6135c9565b606091505b505090508061360d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360490614d68565b60405180910390fd5b505050565b60405180606001604052805f81526020015f81526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61367282613630565b61367c818561363a565b935061368c81856020860161364a565b61369581613658565b840191505092915050565b5f6020820190508181035f8301526136b88184613668565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136fa826136d1565b9050919050565b61370a816136f0565b8114613714575f80fd5b50565b5f8135905061372581613701565b92915050565b5f819050919050565b61373d8161372b565b8114613747575f80fd5b50565b5f8135905061375881613734565b92915050565b5f8060408385031215613774576137736136c9565b5b5f61378185828601613717565b92505060206137928582860161374a565b9150509250929050565b5f8115159050919050565b6137b08161379c565b82525050565b5f6020820190506137c95f8301846137a7565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61380982613658565b810181811067ffffffffffffffff82111715613828576138276137d3565b5b80604052505050565b5f61383a6136c0565b90506138468282613800565b919050565b5f67ffffffffffffffff821115613865576138646137d3565b5b602082029050602081019050919050565b5f80fd5b5f61388c6138878461384b565b613831565b905080838252602082019050602084028301858111156138af576138ae613876565b5b835b818110156138d857806138c48882613717565b8452602084019350506020810190506138b1565b5050509392505050565b5f82601f8301126138f6576138f56137cf565b5b813561390684826020860161387a565b91505092915050565b6139188161379c565b8114613922575f80fd5b50565b5f813590506139338161390f565b92915050565b5f806040838503121561394f5761394e6136c9565b5b5f83013567ffffffffffffffff81111561396c5761396b6136cd565b5b613978858286016138e2565b925050602061398985828601613925565b9150509250929050565b5f805f606084860312156139aa576139a96136c9565b5b5f6139b78682870161374a565b93505060206139c88682870161374a565b92505060406139d98682870161374a565b9150509250925092565b5f602082840312156139f8576139f76136c9565b5b5f613a0584828501613925565b91505092915050565b613a178161372b565b82525050565b5f602082019050613a305f830184613a0e565b92915050565b5f60208284031215613a4b57613a4a6136c9565b5b5f613a5884828501613717565b91505092915050565b5f805f60608486031215613a7857613a776136c9565b5b5f613a8586828701613717565b9350506020613a9686828701613717565b9250506040613aa78682870161374a565b9150509250925092565b5f60ff82169050919050565b613ac681613ab1565b82525050565b5f602082019050613adf5f830184613abd565b92915050565b5f8060408385031215613afb57613afa6136c9565b5b5f613b0885828601613717565b9250506020613b1985828601613925565b9150509250929050565b5f8060408385031215613b3957613b386136c9565b5b5f613b4685828601613717565b9250506020613b5785828601613717565b9150509250929050565b5f60208284031215613b7657613b756136c9565b5b5f613b838482850161374a565b91505092915050565b5f606082019050613b9f5f830186613a0e565b613bac6020830185613a0e565b613bb96040830184613a0e565b949350505050565b613bca816136f0565b82525050565b5f602082019050613be35f830184613bc1565b92915050565b5f819050919050565b5f613c0c613c07613c02846136d1565b613be9565b6136d1565b9050919050565b5f613c1d82613bf2565b9050919050565b5f613c2e82613c13565b9050919050565b613c3e81613c24565b82525050565b5f602082019050613c575f830184613c35565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ca157607f821691505b602082108103613cb457613cb3613c5d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613cee60208361363a565b9150613cf982613cba565b602082019050919050565b5f6020820190508181035f830152613d1b81613ce2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d868261372b565b9150613d918361372b565b9250828201905080821115613da957613da8613d4f565b5b92915050565b7f53656c6c20746178657320757020746f20323525206f6e6c79000000000000005f82015250565b5f613de360198361363a565b9150613dee82613daf565b602082019050919050565b5f6020820190508181035f830152613e1081613dd7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e7160288361363a565b9150613e7c82613e17565b604082019050919050565b5f6020820190508181035f830152613e9e81613e65565b9050919050565b5f613eaf8261372b565b9150613eba8361372b565b9250828203905081811115613ed257613ed1613d4f565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115613f2d57808604811115613f0957613f08613d4f565b5b6001851615613f185780820291505b8081029050613f2685613ed8565b9450613eed565b94509492505050565b5f82613f455760019050614000565b81613f52575f9050614000565b8160018114613f685760028114613f7257613fa1565b6001915050614000565b60ff841115613f8457613f83613d4f565b5b8360020a915084821115613f9b57613f9a613d4f565b5b50614000565b5060208310610133831016604e8410600b8410161715613fd65782820a905083811115613fd157613fd0613d4f565b5b614000565b613fe38484846001613ee4565b92509050818404811115613ffa57613ff9613d4f565b5b81810290505b9392505050565b5f6140118261372b565b915061401c83613ab1565b92506140497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f36565b905092915050565b5f61405b8261372b565b91506140668361372b565b92508282026140748161372b565b9150828204841483151761408b5761408a613d4f565b5b5092915050565b5f6040820190506140a55f830185613bc1565b6140b26020830184613a0e565b9392505050565b5f815190506140c78161390f565b92915050565b5f602082840312156140e2576140e16136c9565b5b5f6140ef848285016140b9565b91505092915050565b7f54726164696e672069732068617320626567756e0000000000000000000000005f82015250565b5f61412c60148361363a565b9150614137826140f8565b602082019050919050565b5f6020820190508181035f83015261415981614120565b9050919050565b7f42757920746178657320757020746f20323525206f6e6c7900000000000000005f82015250565b5f61419460188361363a565b915061419f82614160565b602082019050919050565b5f6020820190508181035f8301526141c181614188565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61422260258361363a565b915061422d826141c8565b604082019050919050565b5f6020820190508181035f83015261424f81614216565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61428d8261372b565b91506142988361372b565b9250826142a8576142a7614256565b5b828204905092915050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f775f8201527f6572207468616e20302e31250000000000000000000000000000000000000000602082015250565b5f61430d602c8361363a565b9150614318826142b3565b604082019050919050565b5f6020820190508181035f83015261433a81614301565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61439b60268361363a565b91506143a682614341565b604082019050919050565b5f6020820190508181035f8301526143c88161438f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61442960248361363a565b9150614434826143cf565b604082019050919050565b5f6020820190508181035f8301526144568161441d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144b760228361363a565b91506144c28261445d565b604082019050919050565b5f6020820190508181035f8301526144e4816144ab565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f61454560298361363a565b9150614550826144eb565b604082019050919050565b5f6020820190508181035f83015261457281614539565b9050919050565b7f54726164696e67206e6f7420656e61626c6564000000000000000000000000005f82015250565b5f6145ad60138361363a565b91506145b882614579565b602082019050919050565b5f6020820190508181035f8301526145da816145a1565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d69745f82015250565b5f61461560208361363a565b9150614620826145e1565b602082019050919050565b5f6020820190508181035f83015261464281614609565b9050919050565b7f436f6f6c646f776e20656e61626c6564000000000000000000000000000000005f82015250565b5f61467d60108361363a565b915061468882614649565b602082019050919050565b5f6020820190508181035f8301526146aa81614671565b9050919050565b7f45524332303a2067656e65726174696f6e20746f20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61470b60258361363a565b9150614716826146b1565b604082019050919050565b5f6020820190508181035f830152614738816146ff565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61479960218361363a565b91506147a48261473f565b604082019050919050565b5f6020820190508181035f8301526147c68161478d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f61482760228361363a565b9150614832826147cd565b604082019050919050565b5f6020820190508181035f8301526148548161481b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6148b560258361363a565b91506148c08261485b565b604082019050919050565b5f6020820190508181035f8301526148e2816148a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61494360238361363a565b915061494e826148e9565b604082019050919050565b5f6020820190508181035f83015261497081614937565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149d160268361363a565b91506149dc82614977565b604082019050919050565b5f6020820190508181035f8301526149fe816149c5565b9050919050565b5f81519050614a1381613701565b92915050565b5f60208284031215614a2e57614a2d6136c9565b5b5f614a3b84828501614a05565b91505092915050565b5f819050919050565b5f614a67614a62614a5d84614a44565b613be9565b61372b565b9050919050565b614a7781614a4d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614aaf816136f0565b82525050565b5f614ac08383614aa6565b60208301905092915050565b5f602082019050919050565b5f614ae282614a7d565b614aec8185614a87565b9350614af783614a97565b805f5b83811015614b27578151614b0e8882614ab5565b9750614b1983614acc565b925050600181019050614afa565b5085935050505092915050565b5f60a082019050614b475f830188613a0e565b614b546020830187614a6e565b8181036040830152614b668186614ad8565b9050614b756060830185613bc1565b614b826080830184613a0e565b9695505050505050565b5f60c082019050614b9f5f830189613bc1565b614bac6020830188613a0e565b614bb96040830187614a6e565b614bc66060830186614a6e565b614bd36080830185613bc1565b614be060a0830184613a0e565b979650505050505050565b5f81519050614bf981613734565b92915050565b5f805f60608486031215614c1657614c156136c9565b5b5f614c2386828701614beb565b9350506020614c3486828701614beb565b9250506040614c4586828701614beb565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f614c83601d8361363a565b9150614c8e82614c4f565b602082019050919050565b5f6020820190508181035f830152614cb081614c77565b9050919050565b5f81905092915050565b50565b5f614ccf5f83614cb7565b9150614cda82614cc1565b5f82019050919050565b5f614cee82614cc4565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c20725f8201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b5f614d52603a8361363a565b9150614d5d82614cf8565b604082019050919050565b5f6020820190508181035f830152614d7f81614d46565b905091905056fea2646970667358221220d30e12d826718d834e0a97ad124ba2b517aba37eeae38649bfefe5d3ffbe723e64736f6c634300081900330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x608060405260043610610275575f3560e01c8063715018a61161014e578063a9059cbb116100c0578063dd62ed3e11610079578063dd62ed3e14610930578063ee36e3591461096c578063f2fde38b14610996578063f66895a3146109be578063f887ea40146109ea578063fbe6324e14610a145761027c565b8063a9059cbb14610816578063aacebbe314610852578063b5c571451461087a578063c5d32bb2146108a2578063d2ce0db2146108de578063d8672e51146109085761027c565b80638da5cb5b116101125780638da5cb5b1461070c57806395d89b41146107365780639d282cd6146107605780639e252f0014610788578063a457c2d7146107b0578063a8aa1b31146107ec5761027c565b8063715018a614610662578063728f8eea1461067857806381428be1146106a457806385141a77146106cc5780638a8c523c146106f65761027c565b8063355496ca116101e757806342b6fa11116101ab57806342b6fa11146105465780634ada218b1461056e578063573761981461059857806362695eae146105c057806366a88d96146105fc57806370a08231146106265761027c565b8063355496ca1461046a578063395093511461049257806340b28c2f146104ce57806340c10f19146104f657806342966c681461051e5761027c565b80631675d802116102395780631675d8021461035e57806318160ddd146103885780631816467f146103b257806323b872dd146103da578063274a533c14610416578063313ce567146104405761027c565b806306fdde0314610280578063095ea7b3146102aa5780630e375a5c146102e65780631178b3fc1461030e5780631340538f146103365761027c565b3661027c57005b5f80fd5b34801561028b575f80fd5b50610294610a3e565b6040516102a191906136a0565b60405180910390f35b3480156102b5575f80fd5b506102d060048036038101906102cb919061375e565b610ace565b6040516102dd91906137b6565b60405180910390f35b3480156102f1575f80fd5b5061030c60048036038101906103079190613939565b610aeb565b005b348015610319575f80fd5b50610334600480360381019061032f9190613993565b610bf2565b005b348015610341575f80fd5b5061035c600480360381019061035791906139e3565b610d09565b005b348015610369575f80fd5b50610372610da2565b60405161037f9190613a1d565b60405180910390f35b348015610393575f80fd5b5061039c610da8565b6040516103a99190613a1d565b60405180910390f35b3480156103bd575f80fd5b506103d860048036038101906103d39190613a36565b610db1565b005b3480156103e5575f80fd5b5061040060048036038101906103fb9190613a61565b610e70565b60405161040d91906137b6565b60405180910390f35b348015610421575f80fd5b5061042a610f6b565b6040516104379190613a1d565b60405180910390f35b34801561044b575f80fd5b50610454610f71565b6040516104619190613acc565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b9190613ae5565b610f79565b005b34801561049d575f80fd5b506104b860048036038101906104b3919061375e565b61104d565b6040516104c591906137b6565b60405180910390f35b3480156104d9575f80fd5b506104f460048036038101906104ef9190613b23565b6110f4565b005b348015610501575f80fd5b5061051c6004803603810190610517919061375e565b6111f4565b005b348015610529575f80fd5b50610544600480360381019061053f9190613b61565b61127e565b005b348015610551575f80fd5b5061056c60048036038101906105679190613b61565b611292565b005b348015610579575f80fd5b50610582611336565b60405161058f91906137b6565b60405180910390f35b3480156105a3575f80fd5b506105be60048036038101906105b9919061375e565b611349565b005b3480156105cb575f80fd5b506105e660048036038101906105e19190613a36565b611466565b6040516105f391906137b6565b60405180910390f35b348015610607575f80fd5b50610610611483565b60405161061d9190613a1d565b60405180910390f35b348015610631575f80fd5b5061064c60048036038101906106479190613a36565b611489565b6040516106599190613a1d565b60405180910390f35b34801561066d575f80fd5b506106766114ce565b005b348015610683575f80fd5b5061068c611555565b60405161069b93929190613b8c565b60405180910390f35b3480156106af575f80fd5b506106ca60048036038101906106c59190613939565b61156c565b005b3480156106d7575f80fd5b506106e0611673565b6040516106ed9190613bd0565b60405180910390f35b348015610701575f80fd5b5061070a611679565b005b348015610717575f80fd5b50610720611784565b60405161072d9190613bd0565b60405180910390f35b348015610741575f80fd5b5061074a6117ac565b60405161075791906136a0565b60405180910390f35b34801561076b575f80fd5b5061078660048036038101906107819190613993565b61183c565b005b348015610793575f80fd5b506107ae60048036038101906107a99190613b61565b611953565b005b3480156107bb575f80fd5b506107d660048036038101906107d1919061375e565b611a37565b6040516107e391906137b6565b60405180910390f35b3480156107f7575f80fd5b50610800611b26565b60405161080d9190613bd0565b60405180910390f35b348015610821575f80fd5b5061083c6004803603810190610837919061375e565b611b4b565b60405161084991906137b6565b60405180910390f35b34801561085d575f80fd5b5061087860048036038101906108739190613a36565b611b61565b005b348015610885575f80fd5b506108a0600480360381019061089b9190613ae5565b611c20565b005b3480156108ad575f80fd5b506108c860048036038101906108c39190613a36565b611cf4565b6040516108d591906137b6565b60405180910390f35b3480156108e9575f80fd5b506108f2611d11565b6040516108ff9190613a1d565b60405180910390f35b348015610913575f80fd5b5061092e60048036038101906109299190613b61565b611d17565b005b34801561093b575f80fd5b5061095660048036038101906109519190613b23565b611e12565b6040516109639190613a1d565b60405180910390f35b348015610977575f80fd5b50610980611e94565b60405161098d91906137b6565b60405180910390f35b3480156109a1575f80fd5b506109bc60048036038101906109b79190613a36565b611ea6565b005b3480156109c9575f80fd5b506109d2611f9c565b6040516109e193929190613b8c565b60405180910390f35b3480156109f5575f80fd5b506109fe611fb3565b604051610a0b9190613c44565b60405180910390f35b348015610a1f575f80fd5b50610a28611fd8565b604051610a3591906137b6565b60405180910390f35b606060038054610a4d90613c8a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7990613c8a565b8015610ac45780601f10610a9b57610100808354040283529160200191610ac4565b820191905f5260205f20905b815481529060010190602001808311610aa757829003601f168201915b5050505050905090565b5f610ae1610ada611feb565b8484611ff2565b6001905092915050565b610af3611feb565b73ffffffffffffffffffffffffffffffffffffffff16610b11611784565b73ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5e90613d04565b60405180910390fd5b5f5b8251811015610bed578160155f858481518110610b8957610b88613d22565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050610b69565b505050565b610bfa611feb565b73ffffffffffffffffffffffffffffffffffffffff16610c18611784565b73ffffffffffffffffffffffffffffffffffffffff1614610c6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6590613d04565b60405180910390fd5b60405180606001604052808481526020018381526020018281525060125f820151815f015560208201518160010155604082015181600201559050506019818385610cb99190613d7c565b610cc39190613d7c565b1115610d04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfb90613df9565b60405180910390fd5b505050565b610d11611feb565b73ffffffffffffffffffffffffffffffffffffffff16610d2f611784565b73ffffffffffffffffffffffffffffffffffffffff1614610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90613d04565b60405180910390fd5b80600760146101000a81548160ff02191690831515021790555050565b60085481565b5f600254905090565b610db9611feb565b73ffffffffffffffffffffffffffffffffffffffff16610dd7611784565b73ffffffffffffffffffffffffffffffffffffffff1614610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2490613d04565b60405180910390fd5b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f610e7c8484846121b5565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610ec3611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610f42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3990613e87565b60405180910390fd5b610f5f85610f4e611feb565b8584610f5a9190613ea5565b611ff2565b60019150509392505050565b600a5481565b5f6002905090565b610f81611feb565b73ffffffffffffffffffffffffffffffffffffffff16610f9f611784565b73ffffffffffffffffffffffffffffffffffffffff1614610ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fec90613d04565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6110ea611059611feb565b848460015f611066611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546110e59190613d7c565b611ff2565b6001905092915050565b6110fc611feb565b73ffffffffffffffffffffffffffffffffffffffff1661111a611784565b73ffffffffffffffffffffffffffffffffffffffff1614611170576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116790613d04565b60405180910390fd5b8160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6111fc611feb565b73ffffffffffffffffffffffffffffffffffffffff1661121a611784565b73ffffffffffffffffffffffffffffffffffffffff1614611270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126790613d04565b60405180910390fd5b61127a8282612a06565b5050565b61128f611289611feb565b82612b52565b50565b61129a611feb565b73ffffffffffffffffffffffffffffffffffffffff166112b8611784565b73ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590613d04565b60405180910390fd5b611316610f71565b600a6113229190614007565b8161132d9190614051565b60088190555050565b600760159054906101000a900460ff1681565b611351611feb565b73ffffffffffffffffffffffffffffffffffffffff1661136f611784565b73ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc90613d04565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611421929190614092565b6020604051808303815f875af115801561143d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061146191906140cd565b505050565b6016602052805f5260405f205f915054906101000a900460ff1681565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114d6611feb565b73ffffffffffffffffffffffffffffffffffffffff166114f4611784565b73ffffffffffffffffffffffffffffffffffffffff161461154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190613d04565b60405180910390fd5b6115535f612d1c565b565b600f805f0154908060010154908060020154905083565b611574611feb565b73ffffffffffffffffffffffffffffffffffffffff16611592611784565b73ffffffffffffffffffffffffffffffffffffffff16146115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613d04565b60405180910390fd5b5f5b825181101561166e578160165f85848151811061160a57611609613d22565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555080806001019150506115ea565b505050565b61dead81565b611681611feb565b73ffffffffffffffffffffffffffffffffffffffff1661169f611784565b73ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90613d04565b60405180910390fd5b600760159054906101000a900460ff1615611745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173c90614142565b60405180910390fd5b6001600760156101000a81548160ff0219169083151502179055506001600760146101000a81548160ff02191690831515021790555043600a81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546117bb90613c8a565b80601f01602080910402602001604051908101604052809291908181526020018280546117e790613c8a565b80156118325780601f1061180957610100808354040283529160200191611832565b820191905f5260205f20905b81548152906001019060200180831161181557829003601f168201915b5050505050905090565b611844611feb565b73ffffffffffffffffffffffffffffffffffffffff16611862611784565b73ffffffffffffffffffffffffffffffffffffffff16146118b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118af90613d04565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f5f820151815f0155602082015181600101556040820151816002015590505060198183856119039190613d7c565b61190d9190613d7c565b111561194e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611945906141aa565b60405180910390fd5b505050565b61195b611feb565b73ffffffffffffffffffffffffffffffffffffffff16611979611784565b73ffffffffffffffffffffffffffffffffffffffff16146119cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c690613d04565b60405180910390fd5b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611a33573d5f803e3d5ffd5b5050565b5f8060015f611a44611feb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af590614238565b60405180910390fd5b611b1b611b09611feb565b858584611b169190613ea5565b611ff2565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611b573384846121b5565b6001905092915050565b611b69611feb565b73ffffffffffffffffffffffffffffffffffffffff16611b87611784565b73ffffffffffffffffffffffffffffffffffffffff1614611bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd490613d04565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c28611feb565b73ffffffffffffffffffffffffffffffffffffffff16611c46611784565b73ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390613d04565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6015602052805f5260405f205f915054906101000a900460ff1681565b60195481565b611d1f611feb565b73ffffffffffffffffffffffffffffffffffffffff16611d3d611784565b73ffffffffffffffffffffffffffffffffffffffff1614611d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8a90613d04565b60405180910390fd5b6103e8611d9e610da8565b611da89190614283565b811015611dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de190614323565b60405180910390fd5b611df2610f71565b600a611dfe9190614007565b81611e099190614051565b60098190555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60185f9054906101000a900460ff1681565b611eae611feb565b73ffffffffffffffffffffffffffffffffffffffff16611ecc611784565b73ffffffffffffffffffffffffffffffffffffffff1614611f22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1990613d04565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f87906143b1565b60405180910390fd5b611f9981612d1c565b50565b6012805f0154908060010154908060020154905083565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760149054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612060576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120579061443f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c5906144cd565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516121a89190613a1d565b60405180910390a3505050565b5f81116121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee9061455b565b60405180910390fd5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612295575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122ea57600760159054906101000a900460ff166122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e0906145c3565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561238d575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123eb576009548161239f84611489565b6123a99190613d7c565b11156123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e19061462b565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561248f575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156124e2575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561267e5760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612594576009548161254884611489565b6125529190613d7c565b1115612593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258a9061462b565b60405180910390fd5b5b60185f9054906101000a900460ff161561267d575f60175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054426125f29190613ea5565b9050601954811015612639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263090614693565b60405180910390fd5b4260175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5b5f805f612689613612565b5f60155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612728575060155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156127425750600b54600a5461273f9190613d7c565b43105b905060155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127df575060155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156127ec575f925061291a565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015612846575080155b156128a65760126002015460125f01546012600101546128669190613d7c565b6128709190613d7c565b945084935060126040518060600160405290815f8201548152602001600182015481526020016002820154815250509150612919565b8061290657600f60020154600f5f0154600f600101546128c69190613d7c565b6128d09190613d7c565b9450849350600f6040518060600160405290815f8201548152602001600182015481526020016002820154815250509150612918565b801561291757600c549450600c5493505b5b5b5b606484876129289190614051565b6129329190614283565b9250600760149054906101000a900460ff16801561299d575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b156129ad576129ac8583612ddf565b5b6129c3888885896129be9190613ea5565b612f94565b5f8311156129fc575f8511156129fb575f606486886129e29190614051565b6129ec9190614283565b90506129f9893083612f94565b505b5b5050505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6b90614721565b60405180910390fd5b612a7f5f8383613207565b8060025f828254612a909190613d7c565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612ae29190613d7c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b469190613a1d565b60405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bb7906147af565b60405180910390fd5b612bcb825f83613207565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c459061483d565b60405180910390fd5b8181612c5a9190613ea5565b5f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f828254612cab9190613ea5565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d0f9190613a1d565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f612de930611489565b90506008548110612f8f5760016008541115612e055760085490505b5f600284612e139190614051565b90505f81846020015184612e279190614051565b612e319190614283565b90505f8184612e409190613ea5565b90505f479050612e4f8261320c565b5f8147612e5c9190613ea5565b90505f876020015186612e6f9190613ea5565b82612e7a9190614283565b90505f886020015182612e8d9190614051565b90505f811115612ea257612ea18682613442565b5b5f895f0151600284612eb49190614051565b612ebe9190614051565b90505f811115612f1357612f1281600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661352290919063ffffffff16565b5b5f8a60400151600285612f269190614051565b612f309190614051565b90505f811115612f8557612f8481600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661352290919063ffffffff16565b5b5050505050505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff9906148cb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306790614959565b60405180910390fd5b61307b838383613207565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156130fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f5906149e7565b60405180910390fd5b818161310a9190613ea5565b5f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546131959190613d7c565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131f99190613a1d565b60405180910390a350505050565b505050565b5f600267ffffffffffffffff811115613228576132276137d3565b5b6040519080825280602002602001820160405280156132565781602001602082028036833780820191505090505b50905030815f8151811061326d5761326c613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613311573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133359190614a19565b8160018151811061334957613348613d22565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506133af3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ff2565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613411959493929190614b34565b5f604051808303815f87803b158015613428575f80fd5b505af115801561343a573d5f803e3d5ffd5b505050505050565b61346e3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ff2565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806134b8611784565b426040518863ffffffff1660e01b81526004016134da96959493929190614b8c565b60606040518083038185885af11580156134f6573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061351b9190614bff565b5050505050565b80471015613565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355c90614c99565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161358a90614ce4565b5f6040518083038185875af1925050503d805f81146135c4576040519150601f19603f3d011682016040523d82523d5f602084013e6135c9565b606091505b505090508061360d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360490614d68565b60405180910390fd5b505050565b60405180606001604052805f81526020015f81526020015f81525090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61367282613630565b61367c818561363a565b935061368c81856020860161364a565b61369581613658565b840191505092915050565b5f6020820190508181035f8301526136b88184613668565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6136fa826136d1565b9050919050565b61370a816136f0565b8114613714575f80fd5b50565b5f8135905061372581613701565b92915050565b5f819050919050565b61373d8161372b565b8114613747575f80fd5b50565b5f8135905061375881613734565b92915050565b5f8060408385031215613774576137736136c9565b5b5f61378185828601613717565b92505060206137928582860161374a565b9150509250929050565b5f8115159050919050565b6137b08161379c565b82525050565b5f6020820190506137c95f8301846137a7565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61380982613658565b810181811067ffffffffffffffff82111715613828576138276137d3565b5b80604052505050565b5f61383a6136c0565b90506138468282613800565b919050565b5f67ffffffffffffffff821115613865576138646137d3565b5b602082029050602081019050919050565b5f80fd5b5f61388c6138878461384b565b613831565b905080838252602082019050602084028301858111156138af576138ae613876565b5b835b818110156138d857806138c48882613717565b8452602084019350506020810190506138b1565b5050509392505050565b5f82601f8301126138f6576138f56137cf565b5b813561390684826020860161387a565b91505092915050565b6139188161379c565b8114613922575f80fd5b50565b5f813590506139338161390f565b92915050565b5f806040838503121561394f5761394e6136c9565b5b5f83013567ffffffffffffffff81111561396c5761396b6136cd565b5b613978858286016138e2565b925050602061398985828601613925565b9150509250929050565b5f805f606084860312156139aa576139a96136c9565b5b5f6139b78682870161374a565b93505060206139c88682870161374a565b92505060406139d98682870161374a565b9150509250925092565b5f602082840312156139f8576139f76136c9565b5b5f613a0584828501613925565b91505092915050565b613a178161372b565b82525050565b5f602082019050613a305f830184613a0e565b92915050565b5f60208284031215613a4b57613a4a6136c9565b5b5f613a5884828501613717565b91505092915050565b5f805f60608486031215613a7857613a776136c9565b5b5f613a8586828701613717565b9350506020613a9686828701613717565b9250506040613aa78682870161374a565b9150509250925092565b5f60ff82169050919050565b613ac681613ab1565b82525050565b5f602082019050613adf5f830184613abd565b92915050565b5f8060408385031215613afb57613afa6136c9565b5b5f613b0885828601613717565b9250506020613b1985828601613925565b9150509250929050565b5f8060408385031215613b3957613b386136c9565b5b5f613b4685828601613717565b9250506020613b5785828601613717565b9150509250929050565b5f60208284031215613b7657613b756136c9565b5b5f613b838482850161374a565b91505092915050565b5f606082019050613b9f5f830186613a0e565b613bac6020830185613a0e565b613bb96040830184613a0e565b949350505050565b613bca816136f0565b82525050565b5f602082019050613be35f830184613bc1565b92915050565b5f819050919050565b5f613c0c613c07613c02846136d1565b613be9565b6136d1565b9050919050565b5f613c1d82613bf2565b9050919050565b5f613c2e82613c13565b9050919050565b613c3e81613c24565b82525050565b5f602082019050613c575f830184613c35565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613ca157607f821691505b602082108103613cb457613cb3613c5d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613cee60208361363a565b9150613cf982613cba565b602082019050919050565b5f6020820190508181035f830152613d1b81613ce2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613d868261372b565b9150613d918361372b565b9250828201905080821115613da957613da8613d4f565b5b92915050565b7f53656c6c20746178657320757020746f20323525206f6e6c79000000000000005f82015250565b5f613de360198361363a565b9150613dee82613daf565b602082019050919050565b5f6020820190508181035f830152613e1081613dd7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613e7160288361363a565b9150613e7c82613e17565b604082019050919050565b5f6020820190508181035f830152613e9e81613e65565b9050919050565b5f613eaf8261372b565b9150613eba8361372b565b9250828203905081811115613ed257613ed1613d4f565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115613f2d57808604811115613f0957613f08613d4f565b5b6001851615613f185780820291505b8081029050613f2685613ed8565b9450613eed565b94509492505050565b5f82613f455760019050614000565b81613f52575f9050614000565b8160018114613f685760028114613f7257613fa1565b6001915050614000565b60ff841115613f8457613f83613d4f565b5b8360020a915084821115613f9b57613f9a613d4f565b5b50614000565b5060208310610133831016604e8410600b8410161715613fd65782820a905083811115613fd157613fd0613d4f565b5b614000565b613fe38484846001613ee4565b92509050818404811115613ffa57613ff9613d4f565b5b81810290505b9392505050565b5f6140118261372b565b915061401c83613ab1565b92506140497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613f36565b905092915050565b5f61405b8261372b565b91506140668361372b565b92508282026140748161372b565b9150828204841483151761408b5761408a613d4f565b5b5092915050565b5f6040820190506140a55f830185613bc1565b6140b26020830184613a0e565b9392505050565b5f815190506140c78161390f565b92915050565b5f602082840312156140e2576140e16136c9565b5b5f6140ef848285016140b9565b91505092915050565b7f54726164696e672069732068617320626567756e0000000000000000000000005f82015250565b5f61412c60148361363a565b9150614137826140f8565b602082019050919050565b5f6020820190508181035f83015261415981614120565b9050919050565b7f42757920746178657320757020746f20323525206f6e6c7900000000000000005f82015250565b5f61419460188361363a565b915061419f82614160565b602082019050919050565b5f6020820190508181035f8301526141c181614188565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61422260258361363a565b915061422d826141c8565b604082019050919050565b5f6020820190508181035f83015261424f81614216565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61428d8261372b565b91506142988361372b565b9250826142a8576142a7614256565b5b828204905092915050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f775f8201527f6572207468616e20302e31250000000000000000000000000000000000000000602082015250565b5f61430d602c8361363a565b9150614318826142b3565b604082019050919050565b5f6020820190508181035f83015261433a81614301565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61439b60268361363a565b91506143a682614341565b604082019050919050565b5f6020820190508181035f8301526143c88161438f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61442960248361363a565b9150614434826143cf565b604082019050919050565b5f6020820190508181035f8301526144568161441d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6144b760228361363a565b91506144c28261445d565b604082019050919050565b5f6020820190508181035f8301526144e4816144ab565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f61454560298361363a565b9150614550826144eb565b604082019050919050565b5f6020820190508181035f83015261457281614539565b9050919050565b7f54726164696e67206e6f7420656e61626c6564000000000000000000000000005f82015250565b5f6145ad60138361363a565b91506145b882614579565b602082019050919050565b5f6020820190508181035f8301526145da816145a1565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d69745f82015250565b5f61461560208361363a565b9150614620826145e1565b602082019050919050565b5f6020820190508181035f83015261464281614609565b9050919050565b7f436f6f6c646f776e20656e61626c6564000000000000000000000000000000005f82015250565b5f61467d60108361363a565b915061468882614649565b602082019050919050565b5f6020820190508181035f8301526146aa81614671565b9050919050565b7f45524332303a2067656e65726174696f6e20746f20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61470b60258361363a565b9150614716826146b1565b604082019050919050565b5f6020820190508181035f830152614738816146ff565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61479960218361363a565b91506147a48261473f565b604082019050919050565b5f6020820190508181035f8301526147c68161478d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f61482760228361363a565b9150614832826147cd565b604082019050919050565b5f6020820190508181035f8301526148548161481b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6148b560258361363a565b91506148c08261485b565b604082019050919050565b5f6020820190508181035f8301526148e2816148a9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61494360238361363a565b915061494e826148e9565b604082019050919050565b5f6020820190508181035f83015261497081614937565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149d160268361363a565b91506149dc82614977565b604082019050919050565b5f6020820190508181035f8301526149fe816149c5565b9050919050565b5f81519050614a1381613701565b92915050565b5f60208284031215614a2e57614a2d6136c9565b5b5f614a3b84828501614a05565b91505092915050565b5f819050919050565b5f614a67614a62614a5d84614a44565b613be9565b61372b565b9050919050565b614a7781614a4d565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614aaf816136f0565b82525050565b5f614ac08383614aa6565b60208301905092915050565b5f602082019050919050565b5f614ae282614a7d565b614aec8185614a87565b9350614af783614a97565b805f5b83811015614b27578151614b0e8882614ab5565b9750614b1983614acc565b925050600181019050614afa565b5085935050505092915050565b5f60a082019050614b475f830188613a0e565b614b546020830187614a6e565b8181036040830152614b668186614ad8565b9050614b756060830185613bc1565b614b826080830184613a0e565b9695505050505050565b5f60c082019050614b9f5f830189613bc1565b614bac6020830188613a0e565b614bb96040830187614a6e565b614bc66060830186614a6e565b614bd36080830185613bc1565b614be060a0830184613a0e565b979650505050505050565b5f81519050614bf981613734565b92915050565b5f805f60608486031215614c1657614c156136c9565b5b5f614c2386828701614beb565b9350506020614c3486828701614beb565b9250506040614c4586828701614beb565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f614c83601d8361363a565b9150614c8e82614c4f565b602082019050919050565b5f6020820190508181035f830152614cb081614c77565b9050919050565b5f81905092915050565b50565b5f614ccf5f83614cb7565b9150614cda82614cc1565b5f82019050919050565b5f614cee82614cc4565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c20725f8201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b5f614d52603a8361363a565b9150614d5d82614cf8565b604082019050919050565b5f6020820190508181035f830152614d7f81614d46565b905091905056fea2646970667358221220d30e12d826718d834e0a97ad124ba2b517aba37eeae38649bfefe5d3ffbe723e64736f6c63430008190033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

-----Decoded View---------------
Arg [0] : routerAdd (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d


Deployed Bytecode Sourcemap

13594:11909:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2371:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15616:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24520:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23115:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22482:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13831:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3490:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23921:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15785:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13915:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3333:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24392:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16241:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23409:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24964:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25350:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22642:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13788:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25204:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14517:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13877:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3661:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12257:94;;;;;;;;;;;;;:::i;:::-;;14379:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;24170:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14181:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23572:218;;;;;;;;;;;;;:::i;:::-;;12034:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2590:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22827:280;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25082:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16497:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13715:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16915:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23798:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24032:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14469:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14683:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24730:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4280:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14642:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12359:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14421:39;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13687:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13743:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2371:100;2425:13;2458:5;2451:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2371:100;:::o;15616:161::-;15691:4;15708:39;15717:12;:10;:12::i;:::-;15731:7;15740:6;15708:8;:39::i;:::-;15765:4;15758:11;;15616:161;;;;:::o;24520:202::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24617:9:::1;24612:103;24636:8;:15;24632:1;:19;24612:103;;;24698:5;24673:9;:22;24683:8;24692:1;24683:11;;;;;;;;:::i;:::-;;;;;;;;24673:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;24653:3;;;;;;;24612:103;;;;24520:202:::0;;:::o;23115:286::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23270:36:::1;;;;;;;;23276:10;23270:36;;;;23288:10;23270:36;;;;23301:4;23270:36;;::::0;23258:9:::1;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;23361:2;23352:4;23339:10;23326;:23;;;;:::i;:::-;:30;;;;:::i;:::-;23325:38;;23317:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23115:286:::0;;;:::o;22482:152::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22621:5:::1;22600:18;;:26;;;;;;;;;;;;;;;;;;22482:152:::0;:::o;13831:38::-;;;;:::o;3490:108::-;3551:7;3578:12;;3571:19;;3490:108;:::o;23921:103::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24007:9:::1;23995;;:21;;;;;;;;;;;;;;;;;;23921:103:::0;:::o;15785:448::-;15917:4;15934:36;15944:6;15952:9;15963:6;15934:9;:36::i;:::-;15983:24;16010:11;:19;16022:6;16010:19;;;;;;;;;;;;;;;:33;16030:12;:10;:12::i;:::-;16010:33;;;;;;;;;;;;;;;;15983:60;;16082:6;16062:16;:26;;16054:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;16144:57;16153:6;16161:12;:10;:12::i;:::-;16194:6;16175:16;:25;;;;:::i;:::-;16144:8;:57::i;:::-;16221:4;16214:11;;;15785:448;;;;;:::o;13915:28::-;;;;:::o;3333:92::-;3391:5;3416:1;3409:8;;3333:92;:::o;24392:120::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24499:5:::1;24477:9;:19;24487:8;24477:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24392:120:::0;;:::o;16241:248::-;16357:4;16379:80;16388:12;:10;:12::i;:::-;16402:7;16448:10;16411:11;:25;16423:12;:10;:12::i;:::-;16411:25;;;;;;;;;;;;;;;:34;16437:7;16411:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16379:8;:80::i;:::-;16477:4;16470:11;;16241:248;;;;:::o;23409:155::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23521:9:::1;23504:6;;:27;;;;;;;;;;;;;;;;;;23549:7;23542:4;;:14;;;;;;;;;;;;;;;;;;23409:155:::0;;:::o;24964:110::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25036:30:::1;25053:3;25058:7;25036:16;:30::i;:::-;24964:110:::0;;:::o;25350:91::-;25406:27;25412:12;:10;:12::i;:::-;25426:6;25406:5;:27::i;:::-;25350:91;:::o;22642:177::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22801:10:::1;:8;:10::i;:::-;22797:2;:14;;;;:::i;:::-;22784:10;:27;;;;:::i;:::-;22758:23;:53;;;;22642:177:::0;:::o;13788:34::-;;;;;;;;;;;;;:::o;25204:138::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25297:8:::1;25290:25;;;25316:9;;;;;;;;;;;25327:6;25290:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25204:138:::0;;:::o;14517:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;13877:29::-;;;;:::o;3661:127::-;3735:7;3762:9;:18;3772:7;3762:18;;;;;;;;;;;;;;;;3755:25;;3661:127;;;:::o;12257:94::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12322:21:::1;12340:1;12322:9;:21::i;:::-;12257:94::o:0;14379:35::-;;;;;;;;;;;;;;;;;;;:::o;24170:214::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24273:9:::1;24268:109;24292:8;:15;24288:1;:19;24268:109;;;24360:5;24329:15;:28;24345:8;24354:1;24345:11;;;;;;;;:::i;:::-;;;;;;;;24329:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24309:3;;;;;;;24268:109;;;;24170:214:::0;;:::o;14181:79::-;14218:42;14181:79;:::o;23572:218::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23636:14:::1;;;;;;;;;;;23635:15;23627:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23703:4;23686:14;;:21;;;;;;;;;;;;;;;;;;23739:4;23718:18;;:25;;;;;;;;;;;;;;;;;;23770:12;23754:13;:28;;;;23572:218::o:0;12034:87::-;12080:7;12107:6;;;;;;;;;;;12100:13;;12034:87;:::o;2590:104::-;2646:13;2679:7;2672:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2590:104;:::o;22827:280::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22977:36:::1;;;;;;;;22983:10;22977:36;;;;22995:10;22977:36;;;;23008:4;22977:36;;::::0;22969:5:::1;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;23068:2;23059:4;23046:10;23033;:23;;;;:::i;:::-;:30;;;;:::i;:::-;23032:38;;23024:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22827:280:::0;;;:::o;25082:114::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25158:9:::1;;;;;;;;;;;25150:27;;:38;25178:9;25150:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25082:114:::0;:::o;16497:410::-;16618:4;16640:24;16667:11;:25;16679:12;:10;:12::i;:::-;16667:25;;;;;;;;;;;;;;;:34;16693:7;16667:34;;;;;;;;;;;;;;;;16640:61;;16740:15;16720:16;:35;;16712:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16808:67;16817:12;:10;:12::i;:::-;16831:7;16859:15;16840:16;:34;;;;:::i;:::-;16808:8;:67::i;:::-;16895:4;16888:11;;;16497:410;;;;:::o;13715:19::-;;;;;;;;;;;;;:::o;16915:165::-;16993:4;17010:40;17020:10;17032:9;17043:6;17010:9;:40::i;:::-;17068:4;17061:11;;16915:165;;;;:::o;23798:115::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23896:9:::1;23878:15;;:27;;;;;;;;;;;;;;;;;;23798:115:::0;:::o;24032:130::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24149:5:::1;24122:15;:24;24138:7;24122:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;24032:130:::0;;:::o;14469:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;14683:40::-;;;;:::o;24730:222::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24840:4:::1;24824:13;:11;:13::i;:::-;:20;;;;:::i;:::-;24814:6;:30;;24806:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;24934:10;:8;:10::i;:::-;24930:2;:14;;;;:::i;:::-;24921:6;:23;;;;:::i;:::-;24904:14;:40;;;;24730:222:::0;:::o;4280:201::-;4414:7;4446:11;:18;4458:5;4446:18;;;;;;;;;;;;;;;:27;4465:7;4446:27;;;;;;;;;;;;;;;;4439:34;;4280:201;;;;:::o;14642:34::-;;;;;;;;;;;;;:::o;12359:192::-;12180:12;:10;:12::i;:::-;12169:23;;:7;:5;:7::i;:::-;:23;;;12161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12468:1:::1;12448:22;;:8;:22;;::::0;12440:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;12524:19;12534:8;12524:9;:19::i;:::-;12359:192:::0;:::o;14421:39::-;;;;;;;;;;;;;;;;;;;:::o;13687:21::-;;;;;;;;;;;;;:::o;13743:38::-;;;;;;;;;;;;;:::o;93:98::-;146:7;173:10;166:17;;93:98;:::o;10333:380::-;10486:1;10469:19;;:5;:19;;;10461:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10567:1;10548:21;;:7;:21;;;10540:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10651:6;10621:11;:18;10633:5;10621:18;;;;;;;;;;;;;;;:27;10640:7;10621:27;;;;;;;;;;;;;;;:36;;;;10689:7;10673:32;;10682:5;10673:32;;;10698:6;10673:32;;;;;;:::i;:::-;;;;;;;;10333:380;;;:::o;17088:2793::-;17238:1;17229:6;:10;17221:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;17301:15;:23;17317:6;17301:23;;;;;;;;;;;;;;;;;;;;;;;;;17300:24;:55;;;;;17329:15;:26;17345:9;17329:26;;;;;;;;;;;;;;;;;;;;;;;;;17328:27;17300:55;17296:134;;;17380:14;;;;;;;;;;;17372:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17296:134;17456:4;;;;;;;;;;;17446:14;;:6;:14;;;:39;;;;;17465:9;:20;17475:9;17465:20;;;;;;;;;;;;;;;;;;;;;;;;;17464:21;17446:39;17442:213;;;17561:14;;17551:6;17528:20;17538:9;17528;:20::i;:::-;:29;;;;:::i;:::-;:47;;17502:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;17442:213;17695:4;;;;;;;;;;;17685:14;;:6;:14;;;;:39;;;;;17704:9;:20;17714:9;17704:20;;;;;;;;;;;;;;;;;;;;;;;;;17703:21;17685:39;:61;;;;;17729:9;:17;17739:6;17729:17;;;;;;;;;;;;;;;;;;;;;;;;;17728:18;17685:61;17667:582;;;17790:4;;;;;;;;;;;17777:17;;:9;:17;;;17773:211;;17878:14;;17868:6;17845:20;17855:9;17845;:20::i;:::-;:29;;;;:::i;:::-;:47;;17815:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;17773:211;18002:15;;;;;;;;;;;17998:240;;;18038:18;18077:9;:17;18087:6;18077:17;;;;;;;;;;;;;;;;18059:15;:35;;;;:::i;:::-;18038:56;;18135:12;;18121:10;:26;;18113:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;18207:15;18187:9;:17;18197:6;18187:17;;;;;;;;;;;;;;;:35;;;;18019:219;17998:240;17667:582;18261:15;18287:14;18312:11;18334:25;;:::i;:::-;18372:17;18393:9;:17;18403:6;18393:17;;;;;;;;;;;;;;;;;;;;;;;;;18392:18;:56;;;;;18428:9;:20;18438:9;18428:20;;;;;;;;;;;;;;;;;;;;;;;;;18427:21;18392:56;:112;;;;;18496:8;;18480:13;;:24;;;;:::i;:::-;18465:12;:39;18392:112;18372:132;;18592:9;:17;18602:6;18592:17;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;18613:9;:20;18623:9;18613:20;;;;;;;;;;;;;;;;;;;;;;;;;18592:41;18588:709;;;18654:1;18648:7;;18588:709;;;18719:4;;;;;;;;;;;18706:17;;:9;:17;;;:34;;;;;18728:12;18727:13;18706:34;18702:595;;;18875:9;:13;;;18823:9;:19;;;18784:9;:19;;;:58;;;;:::i;:::-;:104;;;;:::i;:::-;18757:131;;18912:7;18903:16;;18949:9;18934:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18702:595;;;18981:12;18976:321;;19107:5;:9;;;19072:5;:15;;;19037:5;:15;;;:50;;;;:::i;:::-;:79;;;;:::i;:::-;19010:106;;19140:7;19131:16;;19177:5;19162:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18976:321;;;19204:12;19200:97;;;19243:9;;19233:19;;19276:9;;19267:18;;19200:97;18976:321;18702:595;18588:709;19335:3;19325:6;19316;:15;;;;:::i;:::-;19315:23;;;;:::i;:::-;19309:29;;19452:18;;;;;;;;;;;:36;;;;;19484:4;;;;;;;;;;;19474:14;;:6;:14;;;;19452:36;19448:76;;;19490:34;19502:7;19511:12;19490:11;:34::i;:::-;19448:76;19566:48;19582:6;19590:9;19610:3;19601:6;:12;;;;:::i;:::-;19566:15;:48::i;:::-;19635:1;19629:3;:7;19625:249;;;19711:1;19701:7;:11;19697:164;;;19733:17;19774:3;19763:7;19754:6;:16;;;;:::i;:::-;19753:24;;;;:::i;:::-;19733:44;;19796:49;19812:6;19828:4;19835:9;19796:15;:49::i;:::-;19714:147;19697:164;19625:249;17210:2671;;;;;17088:2793;;;:::o;8713:355::-;8827:1;8808:21;;:7;:21;;;8800:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8884:49;8913:1;8917:7;8926:6;8884:20;:49::i;:::-;8962:6;8946:12;;:22;;;;;;;:::i;:::-;;;;;;;;9001:6;8979:9;:18;8989:7;8979:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;9044:7;9023:37;;9040:1;9023:37;;;9053:6;9023:37;;;;;;:::i;:::-;;;;;;;;8713:355;;:::o;9401:494::-;9504:1;9485:21;;:7;:21;;;9477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9557:49;9578:7;9595:1;9599:6;9557:20;:49::i;:::-;9619:22;9644:9;:18;9654:7;9644:18;;;;;;;;;;;;;;;;9619:43;;9699:6;9681:14;:24;;9673:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9793:6;9776:14;:23;;;;:::i;:::-;9755:9;:18;9765:7;9755:18;;;;;;;;;;;;;;;:44;;;;9826:6;9810:12;;:22;;;;;;;:::i;:::-;;;;;;;;9876:1;9850:37;;9859:7;9850:37;;;9880:6;9850:37;;;;;;:::i;:::-;;;;;;;;9466:429;9401:494;;:::o;12559:173::-;12615:16;12634:6;;;;;;;;;;;12615:25;;12660:8;12651:6;;:17;;;;;;;;;;;;;;;;;;12715:8;12684:40;;12705:8;12684:40;;;;;;;;;;;;12604:128;12559:173;:::o;19889:1538::-;19970:23;19996:24;20014:4;19996:9;:24::i;:::-;19970:50;;20054:23;;20035:15;:42;20031:1389;;20124:1;20098:23;;:27;20094:109;;;20164:23;;20146:41;;20094:109;20274:19;20306:1;20296:7;:11;;;;:::i;:::-;20274:33;;20322:32;20416:11;20376:9;:19;;;20358:15;:37;;;;:::i;:::-;20357:70;;;;:::i;:::-;20322:105;;20442:14;20477:24;20459:15;:42;;;;:::i;:::-;20442:59;;20518:22;20543:21;20518:46;;20581:24;20598:6;20581:16;:24::i;:::-;20622:20;20669:14;20645:21;:38;;;;:::i;:::-;20622:61;;20698:19;20750:9;:19;;;20736:11;:33;;;;:::i;:::-;20720:12;:50;;;;:::i;:::-;20698:72;;20785:29;20831:9;:19;;;20817:11;:33;;;;:::i;:::-;20785:65;;20895:1;20871:21;:25;20867:172;;;20962:61;20975:24;21001:21;20962:12;:61::i;:::-;20867:172;21055:20;21096:9;:19;;;21092:1;21078:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;21055:60;;21149:1;21134:12;:16;21130:105;;;21171:48;21206:12;21179:15;;;;;;;;;;;21171:34;;;;:48;;;;:::i;:::-;21130:105;21251:14;21286:9;:13;;;21282:1;21268:11;:15;;;;:::i;:::-;:31;;;;:::i;:::-;21251:48;;21327:1;21318:6;:10;21314:87;;;21349:36;21378:6;21357:9;;;;;;;;;;;21349:28;;;;:36;;;;:::i;:::-;21314:87;20079:1341;;;;;;;;;20031:1389;19959:1468;19889:1538;;:::o;7793:638::-;7951:1;7933:20;;:6;:20;;;7925:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8035:1;8014:23;;:9;:23;;;8006:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8090:47;8111:6;8119:9;8130:6;8090:20;:47::i;:::-;8150:21;8174:9;:17;8184:6;8174:17;;;;;;;;;;;;;;;;8150:41;;8227:6;8210:13;:23;;8202:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8323:6;8307:13;:22;;;;:::i;:::-;8287:9;:17;8297:6;8287:17;;;;;;;;;;;;;;;:42;;;;8364:6;8340:9;:20;8350:9;8340:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8405:9;8388:35;;8397:6;8388:35;;;8416:6;8388:35;;;;;;:::i;:::-;;;;;;;;7914:517;7793:638;;;:::o;11322:125::-;;;;:::o;21435:534::-;21561:21;21599:1;21585:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21561:40;;21630:4;21612;21617:1;21612:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21656:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21646:4;21651:1;21646:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21682:53;21699:4;21714:6;;;;;;;;;;;21723:11;21682:8;:53::i;:::-;21774:6;;;;;;;;;;;:57;;;21846:11;21872:1;21888:4;21915;21935:15;21774:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21490:479;21435:534;:::o;21977:497::-;22125:53;22142:4;22157:6;;;;;;;;;;;22166:11;22125:8;:53::i;:::-;22221:6;;;;;;;;;;;:22;;;22252:9;22286:4;22306:11;22332:1;22375;22418:7;:5;:7::i;:::-;22440:15;22221:245;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21977:497;;:::o;11477:319::-;11592:6;11567:21;:31;;11559:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11646:12;11664:9;:14;;11687:6;11664:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11645:54;;;11718:7;11710:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;11548:248;11477:319;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:117::-;3448:1;3445;3438:12;3462:180;3510:77;3507:1;3500:88;3607:4;3604:1;3597:15;3631:4;3628:1;3621:15;3648:281;3731:27;3753:4;3731:27;:::i;:::-;3723:6;3719:40;3861:6;3849:10;3846:22;3825:18;3813:10;3810:34;3807:62;3804:88;;;3872:18;;:::i;:::-;3804:88;3912:10;3908:2;3901:22;3691:238;3648:281;;:::o;3935:129::-;3969:6;3996:20;;:::i;:::-;3986:30;;4025:33;4053:4;4045:6;4025:33;:::i;:::-;3935:129;;;:::o;4070:311::-;4147:4;4237:18;4229:6;4226:30;4223:56;;;4259:18;;:::i;:::-;4223:56;4309:4;4301:6;4297:17;4289:25;;4369:4;4363;4359:15;4351:23;;4070:311;;;:::o;4387:117::-;4496:1;4493;4486:12;4527:710;4623:5;4648:81;4664:64;4721:6;4664:64;:::i;:::-;4648:81;:::i;:::-;4639:90;;4749:5;4778:6;4771:5;4764:21;4812:4;4805:5;4801:16;4794:23;;4865:4;4857:6;4853:17;4845:6;4841:30;4894:3;4886:6;4883:15;4880:122;;;4913:79;;:::i;:::-;4880:122;5028:6;5011:220;5045:6;5040:3;5037:15;5011:220;;;5120:3;5149:37;5182:3;5170:10;5149:37;:::i;:::-;5144:3;5137:50;5216:4;5211:3;5207:14;5200:21;;5087:144;5071:4;5066:3;5062:14;5055:21;;5011:220;;;5015:21;4629:608;;4527:710;;;;;:::o;5260:370::-;5331:5;5380:3;5373:4;5365:6;5361:17;5357:27;5347:122;;5388:79;;:::i;:::-;5347:122;5505:6;5492:20;5530:94;5620:3;5612:6;5605:4;5597:6;5593:17;5530:94;:::i;:::-;5521:103;;5337:293;5260:370;;;;:::o;5636:116::-;5706:21;5721:5;5706:21;:::i;:::-;5699:5;5696:32;5686:60;;5742:1;5739;5732:12;5686:60;5636:116;:::o;5758:133::-;5801:5;5839:6;5826:20;5817:29;;5855:30;5879:5;5855:30;:::i;:::-;5758:133;;;;:::o;5897:678::-;5987:6;5995;6044:2;6032:9;6023:7;6019:23;6015:32;6012:119;;;6050:79;;:::i;:::-;6012:119;6198:1;6187:9;6183:17;6170:31;6228:18;6220:6;6217:30;6214:117;;;6250:79;;:::i;:::-;6214:117;6355:78;6425:7;6416:6;6405:9;6401:22;6355:78;:::i;:::-;6345:88;;6141:302;6482:2;6508:50;6550:7;6541:6;6530:9;6526:22;6508:50;:::i;:::-;6498:60;;6453:115;5897:678;;;;;:::o;6581:619::-;6658:6;6666;6674;6723:2;6711:9;6702:7;6698:23;6694:32;6691:119;;;6729:79;;:::i;:::-;6691:119;6849:1;6874:53;6919:7;6910:6;6899:9;6895:22;6874:53;:::i;:::-;6864:63;;6820:117;6976:2;7002:53;7047:7;7038:6;7027:9;7023:22;7002:53;:::i;:::-;6992:63;;6947:118;7104:2;7130:53;7175:7;7166:6;7155:9;7151:22;7130:53;:::i;:::-;7120:63;;7075:118;6581:619;;;;;:::o;7206:323::-;7262:6;7311:2;7299:9;7290:7;7286:23;7282:32;7279:119;;;7317:79;;:::i;:::-;7279:119;7437:1;7462:50;7504:7;7495:6;7484:9;7480:22;7462:50;:::i;:::-;7452:60;;7408:114;7206:323;;;;:::o;7535:118::-;7622:24;7640:5;7622:24;:::i;:::-;7617:3;7610:37;7535:118;;:::o;7659:222::-;7752:4;7790:2;7779:9;7775:18;7767:26;;7803:71;7871:1;7860:9;7856:17;7847:6;7803:71;:::i;:::-;7659:222;;;;:::o;7887:329::-;7946:6;7995:2;7983:9;7974:7;7970:23;7966:32;7963:119;;;8001:79;;:::i;:::-;7963:119;8121:1;8146:53;8191:7;8182:6;8171:9;8167:22;8146:53;:::i;:::-;8136:63;;8092:117;7887:329;;;;:::o;8222:619::-;8299:6;8307;8315;8364:2;8352:9;8343:7;8339:23;8335:32;8332:119;;;8370:79;;:::i;:::-;8332:119;8490:1;8515:53;8560:7;8551:6;8540:9;8536:22;8515:53;:::i;:::-;8505:63;;8461:117;8617:2;8643:53;8688:7;8679:6;8668:9;8664:22;8643:53;:::i;:::-;8633:63;;8588:118;8745:2;8771:53;8816:7;8807:6;8796:9;8792:22;8771:53;:::i;:::-;8761:63;;8716:118;8222:619;;;;;:::o;8847:86::-;8882:7;8922:4;8915:5;8911:16;8900:27;;8847:86;;;:::o;8939:112::-;9022:22;9038:5;9022:22;:::i;:::-;9017:3;9010:35;8939:112;;:::o;9057:214::-;9146:4;9184:2;9173:9;9169:18;9161:26;;9197:67;9261:1;9250:9;9246:17;9237:6;9197:67;:::i;:::-;9057:214;;;;:::o;9277:468::-;9342:6;9350;9399:2;9387:9;9378:7;9374:23;9370:32;9367:119;;;9405:79;;:::i;:::-;9367:119;9525:1;9550:53;9595:7;9586:6;9575:9;9571:22;9550:53;:::i;:::-;9540:63;;9496:117;9652:2;9678:50;9720:7;9711:6;9700:9;9696:22;9678:50;:::i;:::-;9668:60;;9623:115;9277:468;;;;;:::o;9751:474::-;9819:6;9827;9876:2;9864:9;9855:7;9851:23;9847:32;9844:119;;;9882:79;;:::i;:::-;9844:119;10002:1;10027:53;10072:7;10063:6;10052:9;10048:22;10027:53;:::i;:::-;10017:63;;9973:117;10129:2;10155:53;10200:7;10191:6;10180:9;10176:22;10155:53;:::i;:::-;10145:63;;10100:118;9751:474;;;;;:::o;10231:329::-;10290:6;10339:2;10327:9;10318:7;10314:23;10310:32;10307:119;;;10345:79;;:::i;:::-;10307:119;10465:1;10490:53;10535:7;10526:6;10515:9;10511:22;10490:53;:::i;:::-;10480:63;;10436:117;10231:329;;;;:::o;10566:442::-;10715:4;10753:2;10742:9;10738:18;10730:26;;10766:71;10834:1;10823:9;10819:17;10810:6;10766:71;:::i;:::-;10847:72;10915:2;10904:9;10900:18;10891:6;10847:72;:::i;:::-;10929;10997:2;10986:9;10982:18;10973:6;10929:72;:::i;:::-;10566:442;;;;;;:::o;11014:118::-;11101:24;11119:5;11101:24;:::i;:::-;11096:3;11089:37;11014:118;;:::o;11138:222::-;11231:4;11269:2;11258:9;11254:18;11246:26;;11282:71;11350:1;11339:9;11335:17;11326:6;11282:71;:::i;:::-;11138:222;;;;:::o;11366:60::-;11394:3;11415:5;11408:12;;11366:60;;;:::o;11432:142::-;11482:9;11515:53;11533:34;11542:24;11560:5;11542:24;:::i;:::-;11533:34;:::i;:::-;11515:53;:::i;:::-;11502:66;;11432:142;;;:::o;11580:126::-;11630:9;11663:37;11694:5;11663:37;:::i;:::-;11650:50;;11580:126;;;:::o;11712:141::-;11777:9;11810:37;11841:5;11810:37;:::i;:::-;11797:50;;11712:141;;;:::o;11859:161::-;11961:52;12007:5;11961:52;:::i;:::-;11956:3;11949:65;11859:161;;:::o;12026:252::-;12134:4;12172:2;12161:9;12157:18;12149:26;;12185:86;12268:1;12257:9;12253:17;12244:6;12185:86;:::i;:::-;12026:252;;;;:::o;12284:180::-;12332:77;12329:1;12322:88;12429:4;12426:1;12419:15;12453:4;12450:1;12443:15;12470:320;12514:6;12551:1;12545:4;12541:12;12531:22;;12598:1;12592:4;12588:12;12619:18;12609:81;;12675:4;12667:6;12663:17;12653:27;;12609:81;12737:2;12729:6;12726:14;12706:18;12703:38;12700:84;;12756:18;;:::i;:::-;12700:84;12521:269;12470:320;;;:::o;12796:182::-;12936:34;12932:1;12924:6;12920:14;12913:58;12796:182;:::o;12984:366::-;13126:3;13147:67;13211:2;13206:3;13147:67;:::i;:::-;13140:74;;13223:93;13312:3;13223:93;:::i;:::-;13341:2;13336:3;13332:12;13325:19;;12984:366;;;:::o;13356:419::-;13522:4;13560:2;13549:9;13545:18;13537:26;;13609:9;13603:4;13599:20;13595:1;13584:9;13580:17;13573:47;13637:131;13763:4;13637:131;:::i;:::-;13629:139;;13356:419;;;:::o;13781:180::-;13829:77;13826:1;13819:88;13926:4;13923:1;13916:15;13950:4;13947:1;13940:15;13967:180;14015:77;14012:1;14005:88;14112:4;14109:1;14102:15;14136:4;14133:1;14126:15;14153:191;14193:3;14212:20;14230:1;14212:20;:::i;:::-;14207:25;;14246:20;14264:1;14246:20;:::i;:::-;14241:25;;14289:1;14286;14282:9;14275:16;;14310:3;14307:1;14304:10;14301:36;;;14317:18;;:::i;:::-;14301:36;14153:191;;;;:::o;14350:175::-;14490:27;14486:1;14478:6;14474:14;14467:51;14350:175;:::o;14531:366::-;14673:3;14694:67;14758:2;14753:3;14694:67;:::i;:::-;14687:74;;14770:93;14859:3;14770:93;:::i;:::-;14888:2;14883:3;14879:12;14872:19;;14531:366;;;:::o;14903:419::-;15069:4;15107:2;15096:9;15092:18;15084:26;;15156:9;15150:4;15146:20;15142:1;15131:9;15127:17;15120:47;15184:131;15310:4;15184:131;:::i;:::-;15176:139;;14903:419;;;:::o;15328:227::-;15468:34;15464:1;15456:6;15452:14;15445:58;15537:10;15532:2;15524:6;15520:15;15513:35;15328:227;:::o;15561:366::-;15703:3;15724:67;15788:2;15783:3;15724:67;:::i;:::-;15717:74;;15800:93;15889:3;15800:93;:::i;:::-;15918:2;15913:3;15909:12;15902:19;;15561:366;;;:::o;15933:419::-;16099:4;16137:2;16126:9;16122:18;16114:26;;16186:9;16180:4;16176:20;16172:1;16161:9;16157:17;16150:47;16214:131;16340:4;16214:131;:::i;:::-;16206:139;;15933:419;;;:::o;16358:194::-;16398:4;16418:20;16436:1;16418:20;:::i;:::-;16413:25;;16452:20;16470:1;16452:20;:::i;:::-;16447:25;;16496:1;16493;16489:9;16481:17;;16520:1;16514:4;16511:11;16508:37;;;16525:18;;:::i;:::-;16508:37;16358:194;;;;:::o;16558:102::-;16600:8;16647:5;16644:1;16640:13;16619:34;;16558:102;;;:::o;16666:848::-;16727:5;16734:4;16758:6;16749:15;;16782:5;16773:14;;16796:712;16817:1;16807:8;16804:15;16796:712;;;16912:4;16907:3;16903:14;16897:4;16894:24;16891:50;;;16921:18;;:::i;:::-;16891:50;16971:1;16961:8;16957:16;16954:451;;;17386:4;17379:5;17375:16;17366:25;;16954:451;17436:4;17430;17426:15;17418:23;;17466:32;17489:8;17466:32;:::i;:::-;17454:44;;16796:712;;;16666:848;;;;;;;:::o;17520:1073::-;17574:5;17765:8;17755:40;;17786:1;17777:10;;17788:5;;17755:40;17814:4;17804:36;;17831:1;17822:10;;17833:5;;17804:36;17900:4;17948:1;17943:27;;;;17984:1;17979:191;;;;17893:277;;17943:27;17961:1;17952:10;;17963:5;;;17979:191;18024:3;18014:8;18011:17;18008:43;;;18031:18;;:::i;:::-;18008:43;18080:8;18077:1;18073:16;18064:25;;18115:3;18108:5;18105:14;18102:40;;;18122:18;;:::i;:::-;18102:40;18155:5;;;17893:277;;18279:2;18269:8;18266:16;18260:3;18254:4;18251:13;18247:36;18229:2;18219:8;18216:16;18211:2;18205:4;18202:12;18198:35;18182:111;18179:246;;;18335:8;18329:4;18325:19;18316:28;;18370:3;18363:5;18360:14;18357:40;;;18377:18;;:::i;:::-;18357:40;18410:5;;18179:246;18450:42;18488:3;18478:8;18472:4;18469:1;18450:42;:::i;:::-;18435:57;;;;18524:4;18519:3;18515:14;18508:5;18505:25;18502:51;;;18533:18;;:::i;:::-;18502:51;18582:4;18575:5;18571:16;18562:25;;17520:1073;;;;;;:::o;18599:281::-;18657:5;18681:23;18699:4;18681:23;:::i;:::-;18673:31;;18725:25;18741:8;18725:25;:::i;:::-;18713:37;;18769:104;18806:66;18796:8;18790:4;18769:104;:::i;:::-;18760:113;;18599:281;;;;:::o;18886:410::-;18926:7;18949:20;18967:1;18949:20;:::i;:::-;18944:25;;18983:20;19001:1;18983:20;:::i;:::-;18978:25;;19038:1;19035;19031:9;19060:30;19078:11;19060:30;:::i;:::-;19049:41;;19239:1;19230:7;19226:15;19223:1;19220:22;19200:1;19193:9;19173:83;19150:139;;19269:18;;:::i;:::-;19150:139;18934:362;18886:410;;;;:::o;19302:332::-;19423:4;19461:2;19450:9;19446:18;19438:26;;19474:71;19542:1;19531:9;19527:17;19518:6;19474:71;:::i;:::-;19555:72;19623:2;19612:9;19608:18;19599:6;19555:72;:::i;:::-;19302:332;;;;;:::o;19640:137::-;19694:5;19725:6;19719:13;19710:22;;19741:30;19765:5;19741:30;:::i;:::-;19640:137;;;;:::o;19783:345::-;19850:6;19899:2;19887:9;19878:7;19874:23;19870:32;19867:119;;;19905:79;;:::i;:::-;19867:119;20025:1;20050:61;20103:7;20094:6;20083:9;20079:22;20050:61;:::i;:::-;20040:71;;19996:125;19783:345;;;;:::o;20134:170::-;20274:22;20270:1;20262:6;20258:14;20251:46;20134:170;:::o;20310:366::-;20452:3;20473:67;20537:2;20532:3;20473:67;:::i;:::-;20466:74;;20549:93;20638:3;20549:93;:::i;:::-;20667:2;20662:3;20658:12;20651:19;;20310:366;;;:::o;20682:419::-;20848:4;20886:2;20875:9;20871:18;20863:26;;20935:9;20929:4;20925:20;20921:1;20910:9;20906:17;20899:47;20963:131;21089:4;20963:131;:::i;:::-;20955:139;;20682:419;;;:::o;21107:174::-;21247:26;21243:1;21235:6;21231:14;21224:50;21107:174;:::o;21287:366::-;21429:3;21450:67;21514:2;21509:3;21450:67;:::i;:::-;21443:74;;21526:93;21615:3;21526:93;:::i;:::-;21644:2;21639:3;21635:12;21628:19;;21287:366;;;:::o;21659:419::-;21825:4;21863:2;21852:9;21848:18;21840:26;;21912:9;21906:4;21902:20;21898:1;21887:9;21883:17;21876:47;21940:131;22066:4;21940:131;:::i;:::-;21932:139;;21659:419;;;:::o;22084:224::-;22224:34;22220:1;22212:6;22208:14;22201:58;22293:7;22288:2;22280:6;22276:15;22269:32;22084:224;:::o;22314:366::-;22456:3;22477:67;22541:2;22536:3;22477:67;:::i;:::-;22470:74;;22553:93;22642:3;22553:93;:::i;:::-;22671:2;22666:3;22662:12;22655:19;;22314:366;;;:::o;22686:419::-;22852:4;22890:2;22879:9;22875:18;22867:26;;22939:9;22933:4;22929:20;22925:1;22914:9;22910:17;22903:47;22967:131;23093:4;22967:131;:::i;:::-;22959:139;;22686:419;;;:::o;23111:180::-;23159:77;23156:1;23149:88;23256:4;23253:1;23246:15;23280:4;23277:1;23270:15;23297:185;23337:1;23354:20;23372:1;23354:20;:::i;:::-;23349:25;;23388:20;23406:1;23388:20;:::i;:::-;23383:25;;23427:1;23417:35;;23432:18;;:::i;:::-;23417:35;23474:1;23471;23467:9;23462:14;;23297:185;;;;:::o;23488:231::-;23628:34;23624:1;23616:6;23612:14;23605:58;23697:14;23692:2;23684:6;23680:15;23673:39;23488:231;:::o;23725:366::-;23867:3;23888:67;23952:2;23947:3;23888:67;:::i;:::-;23881:74;;23964:93;24053:3;23964:93;:::i;:::-;24082:2;24077:3;24073:12;24066:19;;23725:366;;;:::o;24097:419::-;24263:4;24301:2;24290:9;24286:18;24278:26;;24350:9;24344:4;24340:20;24336:1;24325:9;24321:17;24314:47;24378:131;24504:4;24378:131;:::i;:::-;24370:139;;24097:419;;;:::o;24522:225::-;24662:34;24658:1;24650:6;24646:14;24639:58;24731:8;24726:2;24718:6;24714:15;24707:33;24522:225;:::o;24753:366::-;24895:3;24916:67;24980:2;24975:3;24916:67;:::i;:::-;24909:74;;24992:93;25081:3;24992:93;:::i;:::-;25110:2;25105:3;25101:12;25094:19;;24753:366;;;:::o;25125:419::-;25291:4;25329:2;25318:9;25314:18;25306:26;;25378:9;25372:4;25368:20;25364:1;25353:9;25349:17;25342:47;25406:131;25532:4;25406:131;:::i;:::-;25398:139;;25125:419;;;:::o;25550:223::-;25690:34;25686:1;25678:6;25674:14;25667:58;25759:6;25754:2;25746:6;25742:15;25735:31;25550:223;:::o;25779:366::-;25921:3;25942:67;26006:2;26001:3;25942:67;:::i;:::-;25935:74;;26018:93;26107:3;26018:93;:::i;:::-;26136:2;26131:3;26127:12;26120:19;;25779:366;;;:::o;26151:419::-;26317:4;26355:2;26344:9;26340:18;26332:26;;26404:9;26398:4;26394:20;26390:1;26379:9;26375:17;26368:47;26432:131;26558:4;26432:131;:::i;:::-;26424:139;;26151:419;;;:::o;26576:221::-;26716:34;26712:1;26704:6;26700:14;26693:58;26785:4;26780:2;26772:6;26768:15;26761:29;26576:221;:::o;26803:366::-;26945:3;26966:67;27030:2;27025:3;26966:67;:::i;:::-;26959:74;;27042:93;27131:3;27042:93;:::i;:::-;27160:2;27155:3;27151:12;27144:19;;26803:366;;;:::o;27175:419::-;27341:4;27379:2;27368:9;27364:18;27356:26;;27428:9;27422:4;27418:20;27414:1;27403:9;27399:17;27392:47;27456:131;27582:4;27456:131;:::i;:::-;27448:139;;27175:419;;;:::o;27600:228::-;27740:34;27736:1;27728:6;27724:14;27717:58;27809:11;27804:2;27796:6;27792:15;27785:36;27600:228;:::o;27834:366::-;27976:3;27997:67;28061:2;28056:3;27997:67;:::i;:::-;27990:74;;28073:93;28162:3;28073:93;:::i;:::-;28191:2;28186:3;28182:12;28175:19;;27834:366;;;:::o;28206:419::-;28372:4;28410:2;28399:9;28395:18;28387:26;;28459:9;28453:4;28449:20;28445:1;28434:9;28430:17;28423:47;28487:131;28613:4;28487:131;:::i;:::-;28479:139;;28206:419;;;:::o;28631:169::-;28771:21;28767:1;28759:6;28755:14;28748:45;28631:169;:::o;28806:366::-;28948:3;28969:67;29033:2;29028:3;28969:67;:::i;:::-;28962:74;;29045:93;29134:3;29045:93;:::i;:::-;29163:2;29158:3;29154:12;29147:19;;28806:366;;;:::o;29178:419::-;29344:4;29382:2;29371:9;29367:18;29359:26;;29431:9;29425:4;29421:20;29417:1;29406:9;29402:17;29395:47;29459:131;29585:4;29459:131;:::i;:::-;29451:139;;29178:419;;;:::o;29603:182::-;29743:34;29739:1;29731:6;29727:14;29720:58;29603:182;:::o;29791:366::-;29933:3;29954:67;30018:2;30013:3;29954:67;:::i;:::-;29947:74;;30030:93;30119:3;30030:93;:::i;:::-;30148:2;30143:3;30139:12;30132:19;;29791:366;;;:::o;30163:419::-;30329:4;30367:2;30356:9;30352:18;30344:26;;30416:9;30410:4;30406:20;30402:1;30391:9;30387:17;30380:47;30444:131;30570:4;30444:131;:::i;:::-;30436:139;;30163:419;;;:::o;30588:166::-;30728:18;30724:1;30716:6;30712:14;30705:42;30588:166;:::o;30760:366::-;30902:3;30923:67;30987:2;30982:3;30923:67;:::i;:::-;30916:74;;30999:93;31088:3;30999:93;:::i;:::-;31117:2;31112:3;31108:12;31101:19;;30760:366;;;:::o;31132:419::-;31298:4;31336:2;31325:9;31321:18;31313:26;;31385:9;31379:4;31375:20;31371:1;31360:9;31356:17;31349:47;31413:131;31539:4;31413:131;:::i;:::-;31405:139;;31132:419;;;:::o;31557:224::-;31697:34;31693:1;31685:6;31681:14;31674:58;31766:7;31761:2;31753:6;31749:15;31742:32;31557:224;:::o;31787:366::-;31929:3;31950:67;32014:2;32009:3;31950:67;:::i;:::-;31943:74;;32026:93;32115:3;32026:93;:::i;:::-;32144:2;32139:3;32135:12;32128:19;;31787:366;;;:::o;32159:419::-;32325:4;32363:2;32352:9;32348:18;32340:26;;32412:9;32406:4;32402:20;32398:1;32387:9;32383:17;32376:47;32440:131;32566:4;32440:131;:::i;:::-;32432:139;;32159:419;;;:::o;32584:220::-;32724:34;32720:1;32712:6;32708:14;32701:58;32793:3;32788:2;32780:6;32776:15;32769:28;32584:220;:::o;32810:366::-;32952:3;32973:67;33037:2;33032:3;32973:67;:::i;:::-;32966:74;;33049:93;33138:3;33049:93;:::i;:::-;33167:2;33162:3;33158:12;33151:19;;32810:366;;;:::o;33182:419::-;33348:4;33386:2;33375:9;33371:18;33363:26;;33435:9;33429:4;33425:20;33421:1;33410:9;33406:17;33399:47;33463:131;33589:4;33463:131;:::i;:::-;33455:139;;33182:419;;;:::o;33607:221::-;33747:34;33743:1;33735:6;33731:14;33724:58;33816:4;33811:2;33803:6;33799:15;33792:29;33607:221;:::o;33834:366::-;33976:3;33997:67;34061:2;34056:3;33997:67;:::i;:::-;33990:74;;34073:93;34162:3;34073:93;:::i;:::-;34191:2;34186:3;34182:12;34175:19;;33834:366;;;:::o;34206:419::-;34372:4;34410:2;34399:9;34395:18;34387:26;;34459:9;34453:4;34449:20;34445:1;34434:9;34430:17;34423:47;34487:131;34613:4;34487:131;:::i;:::-;34479:139;;34206:419;;;:::o;34631:224::-;34771:34;34767:1;34759:6;34755:14;34748:58;34840:7;34835:2;34827:6;34823:15;34816:32;34631:224;:::o;34861:366::-;35003:3;35024:67;35088:2;35083:3;35024:67;:::i;:::-;35017:74;;35100:93;35189:3;35100:93;:::i;:::-;35218:2;35213:3;35209:12;35202:19;;34861:366;;;:::o;35233:419::-;35399:4;35437:2;35426:9;35422:18;35414:26;;35486:9;35480:4;35476:20;35472:1;35461:9;35457:17;35450:47;35514:131;35640:4;35514:131;:::i;:::-;35506:139;;35233:419;;;:::o;35658:222::-;35798:34;35794:1;35786:6;35782:14;35775:58;35867:5;35862:2;35854:6;35850:15;35843:30;35658:222;:::o;35886:366::-;36028:3;36049:67;36113:2;36108:3;36049:67;:::i;:::-;36042:74;;36125:93;36214:3;36125:93;:::i;:::-;36243:2;36238:3;36234:12;36227:19;;35886:366;;;:::o;36258:419::-;36424:4;36462:2;36451:9;36447:18;36439:26;;36511:9;36505:4;36501:20;36497:1;36486:9;36482:17;36475:47;36539:131;36665:4;36539:131;:::i;:::-;36531:139;;36258:419;;;:::o;36683:225::-;36823:34;36819:1;36811:6;36807:14;36800:58;36892:8;36887:2;36879:6;36875:15;36868:33;36683:225;:::o;36914:366::-;37056:3;37077:67;37141:2;37136:3;37077:67;:::i;:::-;37070:74;;37153:93;37242:3;37153:93;:::i;:::-;37271:2;37266:3;37262:12;37255:19;;36914:366;;;:::o;37286:419::-;37452:4;37490:2;37479:9;37475:18;37467:26;;37539:9;37533:4;37529:20;37525:1;37514:9;37510:17;37503:47;37567:131;37693:4;37567:131;:::i;:::-;37559:139;;37286:419;;;:::o;37711:143::-;37768:5;37799:6;37793:13;37784:22;;37815:33;37842:5;37815:33;:::i;:::-;37711:143;;;;:::o;37860:351::-;37930:6;37979:2;37967:9;37958:7;37954:23;37950:32;37947:119;;;37985:79;;:::i;:::-;37947:119;38105:1;38130:64;38186:7;38177:6;38166:9;38162:22;38130:64;:::i;:::-;38120:74;;38076:128;37860:351;;;;:::o;38217:85::-;38262:7;38291:5;38280:16;;38217:85;;;:::o;38308:158::-;38366:9;38399:61;38417:42;38426:32;38452:5;38426:32;:::i;:::-;38417:42;:::i;:::-;38399:61;:::i;:::-;38386:74;;38308:158;;;:::o;38472:147::-;38567:45;38606:5;38567:45;:::i;:::-;38562:3;38555:58;38472:147;;:::o;38625:114::-;38692:6;38726:5;38720:12;38710:22;;38625:114;;;:::o;38745:184::-;38844:11;38878:6;38873:3;38866:19;38918:4;38913:3;38909:14;38894:29;;38745:184;;;;:::o;38935:132::-;39002:4;39025:3;39017:11;;39055:4;39050:3;39046:14;39038:22;;38935:132;;;:::o;39073:108::-;39150:24;39168:5;39150:24;:::i;:::-;39145:3;39138:37;39073:108;;:::o;39187:179::-;39256:10;39277:46;39319:3;39311:6;39277:46;:::i;:::-;39355:4;39350:3;39346:14;39332:28;;39187:179;;;;:::o;39372:113::-;39442:4;39474;39469:3;39465:14;39457:22;;39372:113;;;:::o;39521:732::-;39640:3;39669:54;39717:5;39669:54;:::i;:::-;39739:86;39818:6;39813:3;39739:86;:::i;:::-;39732:93;;39849:56;39899:5;39849:56;:::i;:::-;39928:7;39959:1;39944:284;39969:6;39966:1;39963:13;39944:284;;;40045:6;40039:13;40072:63;40131:3;40116:13;40072:63;:::i;:::-;40065:70;;40158:60;40211:6;40158:60;:::i;:::-;40148:70;;40004:224;39991:1;39988;39984:9;39979:14;;39944:284;;;39948:14;40244:3;40237:10;;39645:608;;;39521:732;;;;:::o;40259:831::-;40522:4;40560:3;40549:9;40545:19;40537:27;;40574:71;40642:1;40631:9;40627:17;40618:6;40574:71;:::i;:::-;40655:80;40731:2;40720:9;40716:18;40707:6;40655:80;:::i;:::-;40782:9;40776:4;40772:20;40767:2;40756:9;40752:18;40745:48;40810:108;40913:4;40904:6;40810:108;:::i;:::-;40802:116;;40928:72;40996:2;40985:9;40981:18;40972:6;40928:72;:::i;:::-;41010:73;41078:3;41067:9;41063:19;41054:6;41010:73;:::i;:::-;40259:831;;;;;;;;:::o;41096:807::-;41345:4;41383:3;41372:9;41368:19;41360:27;;41397:71;41465:1;41454:9;41450:17;41441:6;41397:71;:::i;:::-;41478:72;41546:2;41535:9;41531:18;41522:6;41478:72;:::i;:::-;41560:80;41636:2;41625:9;41621:18;41612:6;41560:80;:::i;:::-;41650;41726:2;41715:9;41711:18;41702:6;41650:80;:::i;:::-;41740:73;41808:3;41797:9;41793:19;41784:6;41740:73;:::i;:::-;41823;41891:3;41880:9;41876:19;41867:6;41823:73;:::i;:::-;41096:807;;;;;;;;;:::o;41909:143::-;41966:5;41997:6;41991:13;41982:22;;42013:33;42040:5;42013:33;:::i;:::-;41909:143;;;;:::o;42058:663::-;42146:6;42154;42162;42211:2;42199:9;42190:7;42186:23;42182:32;42179:119;;;42217:79;;:::i;:::-;42179:119;42337:1;42362:64;42418:7;42409:6;42398:9;42394:22;42362:64;:::i;:::-;42352:74;;42308:128;42475:2;42501:64;42557:7;42548:6;42537:9;42533:22;42501:64;:::i;:::-;42491:74;;42446:129;42614:2;42640:64;42696:7;42687:6;42676:9;42672:22;42640:64;:::i;:::-;42630:74;;42585:129;42058:663;;;;;:::o;42727:179::-;42867:31;42863:1;42855:6;42851:14;42844:55;42727:179;:::o;42912:366::-;43054:3;43075:67;43139:2;43134:3;43075:67;:::i;:::-;43068:74;;43151:93;43240:3;43151:93;:::i;:::-;43269:2;43264:3;43260:12;43253:19;;42912:366;;;:::o;43284:419::-;43450:4;43488:2;43477:9;43473:18;43465:26;;43537:9;43531:4;43527:20;43523:1;43512:9;43508:17;43501:47;43565:131;43691:4;43565:131;:::i;:::-;43557:139;;43284:419;;;:::o;43709:147::-;43810:11;43847:3;43832:18;;43709:147;;;;:::o;43862:114::-;;:::o;43982:398::-;44141:3;44162:83;44243:1;44238:3;44162:83;:::i;:::-;44155:90;;44254:93;44343:3;44254:93;:::i;:::-;44372:1;44367:3;44363:11;44356:18;;43982:398;;;:::o;44386:379::-;44570:3;44592:147;44735:3;44592:147;:::i;:::-;44585:154;;44756:3;44749:10;;44386:379;;;:::o;44771:245::-;44911:34;44907:1;44899:6;44895:14;44888:58;44980:28;44975:2;44967:6;44963:15;44956:53;44771:245;:::o;45022:366::-;45164:3;45185:67;45249:2;45244:3;45185:67;:::i;:::-;45178:74;;45261:93;45350:3;45261:93;:::i;:::-;45379:2;45374:3;45370:12;45363:19;;45022:366;;;:::o;45394:419::-;45560:4;45598:2;45587:9;45583:18;45575:26;;45647:9;45641:4;45637:20;45633:1;45622:9;45618:17;45611:47;45675:131;45801:4;45675:131;:::i;:::-;45667:139;;45394:419;;;:::o

Swarm Source

ipfs://d30e12d826718d834e0a97ad124ba2b517aba37eeae38649bfefe5d3ffbe723e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

TibiCoin is more than just a digital asset; it is a sustainable revolution that drives positive change in the world while offering innovative investment opportunities.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.