ETH Price: $2,687.65 (-1.87%)

Contract

0xb8e86549835d23CdC85668265bA37184593e1302
 

Overview

ETH Balance

463 wei

Eth Value

Less Than $0.01 (@ $2,687.65/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve171318232023-04-26 17:14:59488 days ago1682529299IN
0xb8e86549...4593e1302
0 ETH0.0020151142.71755279
Approve170425312023-04-14 2:35:35501 days ago1681439735IN
0xb8e86549...4593e1302
0 ETH0.0014155530.17656075
Approve170322432023-04-12 13:32:35502 days ago1681306355IN
0xb8e86549...4593e1302
0 ETH0.001056222.48722768
Approve170313752023-04-12 10:35:47502 days ago1681295747IN
0xb8e86549...4593e1302
0 ETH0.0010647422.57115509
Approve170310062023-04-12 9:21:47502 days ago1681291307IN
0xb8e86549...4593e1302
0 ETH0.0009409920.05486068
Approve170309932023-04-12 9:19:11502 days ago1681291151IN
0xb8e86549...4593e1302
0 ETH0.0009230519.56747894
Approve170307392023-04-12 8:28:11502 days ago1681288091IN
0xb8e86549...4593e1302
0 ETH0.0009249319.71772538
Approve170306222023-04-12 8:04:35502 days ago1681286675IN
0xb8e86549...4593e1302
0 ETH0.0009696820.5298891
Approve170305472023-04-12 7:48:59502 days ago1681285739IN
0xb8e86549...4593e1302
0 ETH0.0009551520.24800623
Approve170297842023-04-12 5:12:35503 days ago1681276355IN
0xb8e86549...4593e1302
0 ETH0.000942719.98400172
Approve170296652023-04-12 4:48:23503 days ago1681274903IN
0xb8e86549...4593e1302
0 ETH0.001108123.49015416
Approve170295862023-04-12 4:32:35503 days ago1681273955IN
0xb8e86549...4593e1302
0 ETH0.0008887518.84040237
Approve170288492023-04-12 2:04:11503 days ago1681265051IN
0xb8e86549...4593e1302
0 ETH0.0008954318.98204222
Approve170243622023-04-11 10:48:11503 days ago1681210091IN
0xb8e86549...4593e1302
0 ETH0.0009718320.71744549
Approve170241492023-04-11 10:05:11503 days ago1681207511IN
0xb8e86549...4593e1302
0 ETH0.001019821.61837762
Approve170232482023-04-11 7:01:23503 days ago1681196483IN
0xb8e86549...4593e1302
0 ETH0.0008518318.15924521
Approve170231702023-04-11 6:45:23503 days ago1681195523IN
0xb8e86549...4593e1302
0 ETH0.0009035619.1542792
Approve170229602023-04-11 6:03:11504 days ago1681192991IN
0xb8e86549...4593e1302
0 ETH0.0015628433.24859007
Approve170226522023-04-11 5:00:23504 days ago1681189223IN
0xb8e86549...4593e1302
0 ETH0.0009333419.78549463
Approve170226162023-04-11 4:53:11504 days ago1681188791IN
0xb8e86549...4593e1302
0 ETH0.0010173321.56609747
Approve170224302023-04-11 4:14:11504 days ago1681186451IN
0xb8e86549...4593e1302
0 ETH0.001001821.23676141
Approve170224272023-04-11 4:13:35504 days ago1681186415IN
0xb8e86549...4593e1302
0 ETH0.0010672222.62362999
Approve170217412023-04-11 1:53:47504 days ago1681178027IN
0xb8e86549...4593e1302
0 ETH0.0011697524.79715344
Approve170216712023-04-11 1:39:23504 days ago1681177163IN
0xb8e86549...4593e1302
0 ETH0.0010873423.0502339
Approve170211972023-04-11 0:03:23504 days ago1681171403IN
0xb8e86549...4593e1302
0 ETH0.0009335619.79029992
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
170305122023-04-12 7:41:23502 days ago1681285283
0xb8e86549...4593e1302
0.00608763 ETH
170305122023-04-12 7:41:23502 days ago1681285283
0xb8e86549...4593e1302
0.00608763 ETH
170305122023-04-12 7:41:23502 days ago1681285283
0xb8e86549...4593e1302
0.01217526 ETH
170247802023-04-11 12:12:59503 days ago1681215179
0xb8e86549...4593e1302
0.01340304 ETH
170247802023-04-11 12:12:59503 days ago1681215179
0xb8e86549...4593e1302
0.01340304 ETH
170247802023-04-11 12:12:59503 days ago1681215179
0xb8e86549...4593e1302
0.02680609 ETH
170210502023-04-10 23:32:35504 days ago1681169555
0xb8e86549...4593e1302
0.02974578 ETH
170210502023-04-10 23:32:35504 days ago1681169555
0xb8e86549...4593e1302
0.02974578 ETH
170210502023-04-10 23:32:35504 days ago1681169555
0xb8e86549...4593e1302
0.05949156 ETH
170193602023-04-10 17:48:23504 days ago1681148903
0xb8e86549...4593e1302
0.02719946 ETH
170193602023-04-10 17:48:23504 days ago1681148903
0xb8e86549...4593e1302
0.02719946 ETH
170193602023-04-10 17:48:23504 days ago1681148903
0xb8e86549...4593e1302
0.05439893 ETH
170070992023-04-09 0:05:35506 days ago1680998735
0xb8e86549...4593e1302
0.0192177 ETH
170070992023-04-09 0:05:35506 days ago1680998735
0xb8e86549...4593e1302
0.0192177 ETH
170070992023-04-09 0:05:35506 days ago1680998735
0xb8e86549...4593e1302
0.0384354 ETH
170034412023-04-08 11:39:23506 days ago1680953963
0xb8e86549...4593e1302
0.01096011 ETH
170034412023-04-08 11:39:23506 days ago1680953963
0xb8e86549...4593e1302
0.01096011 ETH
170034412023-04-08 11:39:23506 days ago1680953963
0xb8e86549...4593e1302
0.02192023 ETH
169999212023-04-07 23:41:59507 days ago1680910919
0xb8e86549...4593e1302
0.02799521 ETH
169999212023-04-07 23:41:59507 days ago1680910919
0xb8e86549...4593e1302
0.02799521 ETH
169999212023-04-07 23:41:59507 days ago1680910919
0xb8e86549...4593e1302
0.05599042 ETH
169985102023-04-07 18:53:59507 days ago1680893639
0xb8e86549...4593e1302
0.02845443 ETH
169985102023-04-07 18:53:59507 days ago1680893639
0xb8e86549...4593e1302
0.02845443 ETH
169985102023-04-07 18:53:59507 days ago1680893639
0xb8e86549...4593e1302
0.05690886 ETH
169983112023-04-07 18:13:35507 days ago1680891215
0xb8e86549...4593e1302
0.02981647 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RIPUSD

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

TG: https://t.me/ripusd
Twitter: https://twitter.com/RIPUSDERC
Website: https://www.ripusderc.com
Blog: https://mirror.xyz/0x6592072005C5F005e2D9816390FBd728D79cB1AE/4wHvIreFuIqMwFKHz5c9074kGiROTk8ED_RAtoUv5JI
Buy Tax / Sell Tax: 1%/1%

*/
pragma solidity ^0.8.17;
//SPDX-License-Identifier: UNLICENSED

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 18;
    }

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _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);
    }

    /** This function will be used to generate the total supply
    * while deploying the contract
    *
    * This function can never be called again after deploying contract
    */
    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 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 RIPUSD is ERC20, Ownable {
    using Address for address payable;

    IRouter public router;
    address public pair;

    bool private _liquidityMutex = false;
    bool public providingLiquidity = false;
    bool public tradingEnabled = false;

    uint256 public tokenLiquidityThreshold = 3e5 * 10**18; // 0.3% Swap Threshold
    uint256 public maxWalletLimit = 2e6 * 10**18;  // 2% Max Wallet

    uint256 public genesis_block;
    uint256 private deadline = 1;
    uint256 private launchtax = 99;

    address public marketingWallet = 0x2327f9F2C7bdaA5697b28E5846001981eDBf96Ab;
    address private devWallet = 0xE12b5c44A93728a83CA435DB1bf50aaE98CCFEbF;
	address public constant deadWallet = 0x000000000000000000000000000000000000dEaD;

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

    Taxes public taxes = Taxes(8, 0, 7);
    Taxes public sellTaxes = Taxes(30, 0, 30);

    mapping(address => bool) public exemptFee;

    //Anti Dump
    mapping(address => uint256) private _lastSell;

    modifier mutexLock() {
        if (!_liquidityMutex) {
            _liquidityMutex = true;
            _;
            _liquidityMutex = false;
        }
    }

    constructor() ERC20("RIP USD", "RIP$") {
        _tokengeneration(msg.sender, 1e8 * 10**decimals()); // 100 Million
        exemptFee[msg.sender] = true;

        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Create a pair for this new token
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());

        router = _router;
        pair = _pair;
        exemptFee[address(this)] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[devWallet] = true;
        exemptFee[deadWallet] = 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 (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

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

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

        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 (_liquidityMutex || 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 mutexLock {


	if(feeswap == 0){
            return;
        }	

        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
                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 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
            devWallet,
            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) <= 15, "Must keep fees at 15% or less");
    }

    function SetSellTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        require((_marketing + _liquidity + _dev) <= 99, "Must keep fees at 99% or less"); // to shake bots
        sellTaxes = Taxes(_marketing, _liquidity, _dev);
    }


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

    function updatedeadline(uint256 _deadline) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        require(_deadline < 10, "Block should be less than 10");
        deadline = _deadline;
    }

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

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

    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 updateMaxTxLimit(uint256 maxWallet) external onlyOwner {
        require(maxWallet >= 1e5, "Cannot set max wallet amount lower than 0.1%");
        maxWalletLimit = maxWallet * 10**decimals(); 
    }

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

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

    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"SetSellTaxes","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":"UpdateBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExemptFee","outputs":[],"stateMutability":"nonpayable","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","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":"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":"maxWallet","type":"uint256"}],"name":"updateMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"updatedeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600760146101000a81548160ff0219169083151502179055506000600760156101000a81548160ff0219169083151502179055506000600760166101000a81548160ff021916908315150217905550693f870857a3e0e38000006008556a01a784379d99db420000006009556001600b556063600c55732327f9f2c7bdaa5697b28e5846001981edbf96ab600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e12b5c44a93728a83ca435db1bf50aae98ccfebf600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051806060016040528060088152602001600081526020016007815250600f60008201518160000155602082015181600101556040820151816002015550506040518060600160405280601e815260200160008152602001601e81525060126000820151816000015560208201518160010155604082015181600201555050348015620001b357600080fd5b506040518060400160405280600781526020017f52495020555344000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5249502400000000000000000000000000000000000000000000000000000000815250816003908162000231919062000b42565b50806004908162000243919062000b42565b505050620002666200025a620006b060201b60201c565b620006b860201b60201c565b620002a6336200027b6200077e60201b60201c565b600a62000289919062000db9565b6305f5e1006200029a919062000e0a565b6200078760201b60201c565b6001601560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038b919062000ebf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000419919062000ebf565b6040518363ffffffff1660e01b81526004016200043892919062000f02565b6020604051808303816000875af115801562000458573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047e919062000ebf565b905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016015600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062001006565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f09062000fb6565b60405180910390fd5b6200080d60008383620008c360201b60201c565b80600281905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008b7919062000fe9565b60405180910390a35050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094a57607f821691505b60208210810362000960576200095f62000902565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200098b565b620009d686836200098b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a2362000a1d62000a1784620009ee565b620009f8565b620009ee565b9050919050565b6000819050919050565b62000a3f8362000a02565b62000a5762000a4e8262000a2a565b84845462000998565b825550505050565b600090565b62000a6e62000a5f565b62000a7b81848462000a34565b505050565b5b8181101562000aa35762000a9760008262000a64565b60018101905062000a81565b5050565b601f82111562000af25762000abc8162000966565b62000ac7846200097b565b8101602085101562000ad7578190505b62000aef62000ae6856200097b565b83018262000a80565b50505b505050565b600082821c905092915050565b600062000b176000198460080262000af7565b1980831691505092915050565b600062000b32838362000b04565b9150826002028217905092915050565b62000b4d82620008c8565b67ffffffffffffffff81111562000b695762000b68620008d3565b5b62000b75825462000931565b62000b8282828562000aa7565b600060209050601f83116001811462000bba576000841562000ba5578287015190505b62000bb1858262000b24565b86555062000c21565b601f19841662000bca8662000966565b60005b8281101562000bf45784890151825560018201915060208501945060208101905062000bcd565b8683101562000c14578489015162000c10601f89168262000b04565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cb75780860481111562000c8f5762000c8e62000c29565b5b600185161562000c9f5780820291505b808102905062000caf8562000c58565b945062000c6f565b94509492505050565b60008262000cd2576001905062000da5565b8162000ce2576000905062000da5565b816001811462000cfb576002811462000d065762000d3c565b600191505062000da5565b60ff84111562000d1b5762000d1a62000c29565b5b8360020a91508482111562000d355762000d3462000c29565b5b5062000da5565b5060208310610133831016604e8410600b841016171562000d765782820a90508381111562000d705762000d6f62000c29565b5b62000da5565b62000d85848484600162000c65565b9250905081840481111562000d9f5762000d9e62000c29565b5b81810290505b9392505050565b600060ff82169050919050565b600062000dc682620009ee565b915062000dd38362000dac565b925062000e027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cc0565b905092915050565b600062000e1782620009ee565b915062000e2483620009ee565b925082820262000e3481620009ee565b9150828204841483151762000e4e5762000e4d62000c29565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e878262000e5a565b9050919050565b62000e998162000e7a565b811462000ea557600080fd5b50565b60008151905062000eb98162000e8e565b92915050565b60006020828403121562000ed85762000ed762000e55565b5b600062000ee88482850162000ea8565b91505092915050565b62000efc8162000e7a565b82525050565b600060408201905062000f19600083018562000ef1565b62000f28602083018462000ef1565b9392505050565b600082825260208201905092915050565b7f45524332303a2067656e65726174696f6e20746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600062000f9e60258362000f2f565b915062000fab8262000f40565b604082019050919050565b6000602082019050818103600083015262000fd18162000f8f565b9050919050565b62000fe381620009ee565b82525050565b600060208201905062001000600083018462000fd8565b92915050565b61469680620010166000396000f3fe6080604052600436106102345760003560e01c806375f0a8741161012e578063a9059cbb116100ab578063edaa11681161006f578063edaa11681461084a578063f2fde38b14610873578063f66895a31461089c578063f887ea40146108c9578063fbe6324e146108f45761023b565b8063a9059cbb14610741578063aacebbe31461077e578063c2c327d1146107a7578063c5d32bb2146107d0578063dd62ed3e1461080d5761023b565b806395d89b41116100f257806395d89b411461065c5780639d282cd6146106875780639e252f00146106b0578063a457c2d7146106d9578063a8aa1b31146107165761023b565b806375f0a8741461059b57806385141a77146105c65780638a8c523c146105f15780638cd4426d146106085780638da5cb5b146106315761023b565b8063313ce567116101bc5780634e736f22116101805780634e736f22146104c657806366a88d96146104ef57806370a082311461051a578063715018a614610557578063728f8eea1461056e5761023b565b8063313ce567146103e1578063355496ca1461040c578063395093511461043557806342b6fa11146104725780634ada218b1461049b5761023b565b80631675d802116102035780631675d802146102fa57806318160ddd146103255780631816467f1461035057806323b872dd14610379578063274a533c146103b65761023b565b806306fdde0314610240578063095ea7b31461026b5780630e375a5c146102a85780631340538f146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561091f565b6040516102629190612f92565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061305c565b6109b1565b60405161029f91906130b7565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613246565b6109cf565b005b3480156102dd57600080fd5b506102f860048036038101906102f391906132a2565b610ae0565b005b34801561030657600080fd5b5061030f610b79565b60405161031c91906132de565b60405180910390f35b34801561033157600080fd5b5061033a610b7f565b60405161034791906132de565b60405180910390f35b34801561035c57600080fd5b50610377600480360381019061037291906132f9565b610b89565b005b34801561038557600080fd5b506103a0600480360381019061039b9190613326565b610c49565b6040516103ad91906130b7565b60405180910390f35b3480156103c257600080fd5b506103cb610d4a565b6040516103d891906132de565b60405180910390f35b3480156103ed57600080fd5b506103f6610d50565b6040516104039190613395565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e91906133b0565b610d59565b005b34801561044157600080fd5b5061045c6004803603810190610457919061305c565b610e30565b60405161046991906130b7565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906133f0565b610edc565b005b3480156104a757600080fd5b506104b0610f80565b6040516104bd91906130b7565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e8919061341d565b610f93565b005b3480156104fb57600080fd5b506105046110ac565b60405161051191906132de565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c91906132f9565b6110b2565b60405161054e91906132de565b60405180910390f35b34801561056357600080fd5b5061056c6110fa565b005b34801561057a57600080fd5b50610583611182565b60405161059293929190613470565b60405180910390f35b3480156105a757600080fd5b506105b061119a565b6040516105bd91906134b6565b60405180910390f35b3480156105d257600080fd5b506105db6111c0565b6040516105e891906134b6565b60405180910390f35b3480156105fd57600080fd5b506106066111c6565b005b34801561061457600080fd5b5061062f600480360381019061062a919061305c565b6112d1565b005b34801561063d57600080fd5b50610646611376565b60405161065391906134b6565b60405180910390f35b34801561066857600080fd5b506106716113a0565b60405161067e9190612f92565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a9919061341d565b611432565b005b3480156106bc57600080fd5b506106d760048036038101906106d291906133f0565b61154b565b005b3480156106e557600080fd5b5061070060048036038101906106fb919061305c565b6115b7565b60405161070d91906130b7565b60405180910390f35b34801561072257600080fd5b5061072b6116ab565b60405161073891906134b6565b60405180910390f35b34801561074d57600080fd5b506107686004803603810190610763919061305c565b6116d1565b60405161077591906130b7565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a091906132f9565b6116e8565b005b3480156107b357600080fd5b506107ce60048036038101906107c991906133f0565b6117a8565b005b3480156107dc57600080fd5b506107f760048036038101906107f291906132f9565b611892565b60405161080491906130b7565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f91906134d1565b6118b2565b60405161084191906132de565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c91906133f0565b611939565b005b34801561087f57600080fd5b5061089a600480360381019061089591906132f9565b611a52565b005b3480156108a857600080fd5b506108b1611b49565b6040516108c093929190613470565b60405180910390f35b3480156108d557600080fd5b506108de611b61565b6040516108eb9190613570565b60405180910390f35b34801561090057600080fd5b50610909611b87565b60405161091691906130b7565b60405180910390f35b60606003805461092e906135ba565b80601f016020809104026020016040519081016040528092919081815260200182805461095a906135ba565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b60006109c56109be611b9a565b8484611ba2565b6001905092915050565b6109d7611b9a565b73ffffffffffffffffffffffffffffffffffffffff166109f5611376565b73ffffffffffffffffffffffffffffffffffffffff1614610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613637565b60405180910390fd5b60005b8251811015610adb578160156000858481518110610a6f57610a6e613657565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ad3906136b5565b915050610a4e565b505050565b610ae8611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610b06611376565b73ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390613637565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60085481565b6000600254905090565b610b91611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610baf611376565b73ffffffffffffffffffffffffffffffffffffffff1614610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90613637565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610c56848484611d6b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca1611b9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d189061376f565b60405180910390fd5b610d3e85610d2d611b9a565b8584610d39919061378f565b611ba2565b60019150509392505050565b600a5481565b60006012905090565b610d61611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610d7f611376565b73ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90613637565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610ed2610e3d611b9a565b848460016000610e4b611b9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecd91906137c3565b611ba2565b6001905092915050565b610ee4611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610f02611376565b73ffffffffffffffffffffffffffffffffffffffff1614610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90613637565b60405180910390fd5b610f60610d50565b600a610f6c919061392a565b81610f779190613975565b60088190555050565b600760169054906101000a900460ff1681565b610f9b611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610fb9611376565b73ffffffffffffffffffffffffffffffffffffffff161461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690613637565b60405180910390fd5b606381838561101e91906137c3565b61102891906137c3565b1115611069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106090613a03565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506012600082015181600001556020820151816001015560408201518160020155905050505050565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611102611b9a565b73ffffffffffffffffffffffffffffffffffffffff16611120611376565b73ffffffffffffffffffffffffffffffffffffffff1614611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90613637565b60405180910390fd5b6111806000612548565b565b600f8060000154908060010154908060020154905083565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b6111ce611b9a565b73ffffffffffffffffffffffffffffffffffffffff166111ec611376565b73ffffffffffffffffffffffffffffffffffffffff1614611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990613637565b60405180910390fd5b600760169054906101000a900460ff1615611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990613a6f565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600a81905550565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161132e929190613a8f565b6020604051808303816000875af115801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190613acd565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546113af906135ba565b80601f01602080910402602001604051908101604052809291908181526020018280546113db906135ba565b80156114285780601f106113fd57610100808354040283529160200191611428565b820191906000526020600020905b81548152906001019060200180831161140b57829003601f168201915b5050505050905090565b61143a611b9a565b73ffffffffffffffffffffffffffffffffffffffff16611458611376565b73ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613637565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f600082015181600001556020820151816001015560408201518160020155905050600f8183856114fb91906137c3565b61150591906137c3565b1115611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90613b46565b60405180910390fd5b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115b3573d6000803e3d6000fd5b5050565b600080600160006115c6611b9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613bd8565b60405180910390fd5b6116a061168e611b9a565b85858461169b919061378f565b611ba2565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116de338484611d6b565b6001905092915050565b6116f0611b9a565b73ffffffffffffffffffffffffffffffffffffffff1661170e611376565b73ffffffffffffffffffffffffffffffffffffffff1614611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90613637565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117b0611b9a565b73ffffffffffffffffffffffffffffffffffffffff166117ce611376565b73ffffffffffffffffffffffffffffffffffffffff1614611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90613637565b60405180910390fd5b620186a081101561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613c6a565b60405180910390fd5b611872610d50565b600a61187e919061392a565b816118899190613975565b60098190555050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611941611b9a565b73ffffffffffffffffffffffffffffffffffffffff1661195f611376565b73ffffffffffffffffffffffffffffffffffffffff16146119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90613637565b60405180910390fd5b600760169054906101000a900460ff1615611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90613cfc565b60405180910390fd5b600a8110611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90613d68565b60405180910390fd5b80600b8190555050565b611a5a611b9a565b73ffffffffffffffffffffffffffffffffffffffff16611a78611376565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613637565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490613dfa565b60405180910390fd5b611b4681612548565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890613e8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7790613f1e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d5e91906132de565b60405180910390a3505050565b60008111611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590613fb0565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e525750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ea757600760169054906101000a900460ff16611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d9061401c565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f4e5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f675750600760149054906101000a900460ff16155b15611fc55760095481611f79846110b2565b611f8391906137c3565b1115611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90614088565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561206d5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120c35750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120dc5750600760149054906101000a900460ff16155b1561219057600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461218f5760095481612143846110b2565b61214d91906137c3565b111561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614088565b60405180910390fd5b5b5b600080600061219d612ee1565b6000601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122435750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561225d5750600b54600a5461225a91906137c3565b43105b9050600760149054906101000a900460ff16806122c35750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123175750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123255760009250612458565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015612380575080155b156123e2576012600201546012600001546012600101546123a191906137c3565b6123ab91906137c3565b9450849350601260405180606001604052908160008201548152602001600182015481526020016002820154815250509150612457565b8061244457600f60020154600f60000154600f6001015461240391906137c3565b61240d91906137c3565b9450849350600f60405180606001604052908160008201548152602001600182015481526020016002820154815250509150612456565b801561245557600c549450600c5493505b5b5b5b606484876124669190613975565b61247091906140d7565b9250600760159054906101000a900460ff1680156124dc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b156124ec576124eb858361260e565b5b612502888885896124fd919061378f565b612828565b600083111561253e57600085111561253d576000606486886125249190613975565b61252e91906140d7565b905061253b893083612828565b505b5b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff16612824576001600760146101000a81548160ff0219169083151502179055506000820315612808576000612651306110b2565b90506008548110612806576001600854111561266d5760085490505b600060028461267c9190613975565b90506000818460200151846126919190613975565b61269b91906140d7565b9050600081846126ab919061378f565b905060004790506126bb82612aa5565b600081476126c9919061378f565b905060008760200151866126dd919061378f565b826126e891906140d7565b905060008860200151826126fc9190613975565b90506000811115612712576127118682612ce8565b5b600089600001516002846127269190613975565b6127309190613975565b905060008111156127875761278681600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612de890919063ffffffff16565b5b60008a6040015160028561279b9190613975565b6127a59190613975565b905060008111156127fc576127fb81600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612de890919063ffffffff16565b5b5050505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e9061417a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd9061420c565b60405180910390fd5b612911838383612edc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e9061429e565b60405180910390fd5b81816129a3919061378f565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3391906137c3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a9791906132de565b60405180910390a350505050565b6000600267ffffffffffffffff811115612ac257612ac16130d7565b5b604051908082528060200260200182016040528015612af05781602001602082028036833780820191505090505b5090503081600081518110612b0857612b07613657565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd391906142d3565b81600181518110612be757612be6613657565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c4e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ba2565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cb29594939291906143f9565b600060405180830381600087803b158015612ccc57600080fd5b505af1158015612ce0573d6000803e3d6000fd5b505050505050565b612d1530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ba2565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612d9e96959493929190614453565b60606040518083038185885af1158015612dbc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de191906144c9565b5050505050565b80471015612e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2290614568565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612e51906145b9565b60006040518083038185875af1925050503d8060008114612e8e576040519150601f19603f3d011682016040523d82523d6000602084013e612e93565b606091505b5050905080612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614640565b60405180910390fd5b505050565b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f3c578082015181840152602081019050612f21565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f6482612f02565b612f6e8185612f0d565b9350612f7e818560208601612f1e565b612f8781612f48565b840191505092915050565b60006020820190508181036000830152612fac8184612f59565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ff382612fc8565b9050919050565b61300381612fe8565b811461300e57600080fd5b50565b60008135905061302081612ffa565b92915050565b6000819050919050565b61303981613026565b811461304457600080fd5b50565b60008135905061305681613030565b92915050565b6000806040838503121561307357613072612fbe565b5b600061308185828601613011565b925050602061309285828601613047565b9150509250929050565b60008115159050919050565b6130b18161309c565b82525050565b60006020820190506130cc60008301846130a8565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61310f82612f48565b810181811067ffffffffffffffff8211171561312e5761312d6130d7565b5b80604052505050565b6000613141612fb4565b905061314d8282613106565b919050565b600067ffffffffffffffff82111561316d5761316c6130d7565b5b602082029050602081019050919050565b600080fd5b600061319661319184613152565b613137565b905080838252602082019050602084028301858111156131b9576131b861317e565b5b835b818110156131e257806131ce8882613011565b8452602084019350506020810190506131bb565b5050509392505050565b600082601f830112613201576132006130d2565b5b8135613211848260208601613183565b91505092915050565b6132238161309c565b811461322e57600080fd5b50565b6000813590506132408161321a565b92915050565b6000806040838503121561325d5761325c612fbe565b5b600083013567ffffffffffffffff81111561327b5761327a612fc3565b5b613287858286016131ec565b925050602061329885828601613231565b9150509250929050565b6000602082840312156132b8576132b7612fbe565b5b60006132c684828501613231565b91505092915050565b6132d881613026565b82525050565b60006020820190506132f360008301846132cf565b92915050565b60006020828403121561330f5761330e612fbe565b5b600061331d84828501613011565b91505092915050565b60008060006060848603121561333f5761333e612fbe565b5b600061334d86828701613011565b935050602061335e86828701613011565b925050604061336f86828701613047565b9150509250925092565b600060ff82169050919050565b61338f81613379565b82525050565b60006020820190506133aa6000830184613386565b92915050565b600080604083850312156133c7576133c6612fbe565b5b60006133d585828601613011565b92505060206133e685828601613231565b9150509250929050565b60006020828403121561340657613405612fbe565b5b600061341484828501613047565b91505092915050565b60008060006060848603121561343657613435612fbe565b5b600061344486828701613047565b935050602061345586828701613047565b925050604061346686828701613047565b9150509250925092565b600060608201905061348560008301866132cf565b61349260208301856132cf565b61349f60408301846132cf565b949350505050565b6134b081612fe8565b82525050565b60006020820190506134cb60008301846134a7565b92915050565b600080604083850312156134e8576134e7612fbe565b5b60006134f685828601613011565b925050602061350785828601613011565b9150509250929050565b6000819050919050565b600061353661353161352c84612fc8565b613511565b612fc8565b9050919050565b60006135488261351b565b9050919050565b600061355a8261353d565b9050919050565b61356a8161354f565b82525050565b60006020820190506135856000830184613561565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135d257607f821691505b6020821081036135e5576135e461358b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613621602083612f0d565b915061362c826135eb565b602082019050919050565b6000602082019050818103600083015261365081613614565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136c082613026565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136f2576136f1613686565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613759602883612f0d565b9150613764826136fd565b604082019050919050565b600060208201905081810360008301526137888161374c565b9050919050565b600061379a82613026565b91506137a583613026565b92508282039050818111156137bd576137bc613686565b5b92915050565b60006137ce82613026565b91506137d983613026565b92508282019050808211156137f1576137f0613686565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111561384e5780860481111561382a57613829613686565b5b60018516156138395780820291505b8081029050613847856137f7565b945061380e565b94509492505050565b6000826138675760019050613923565b816138755760009050613923565b816001811461388b5760028114613895576138c4565b6001915050613923565b60ff8411156138a7576138a6613686565b5b8360020a9150848211156138be576138bd613686565b5b50613923565b5060208310610133831016604e8410600b84101617156138f95782820a9050838111156138f4576138f3613686565b5b613923565b6139068484846001613804565b9250905081840481111561391d5761391c613686565b5b81810290505b9392505050565b600061393582613026565b915061394083613379565b925061396d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613857565b905092915050565b600061398082613026565b915061398b83613026565b925082820261399981613026565b915082820484148315176139b0576139af613686565b5b5092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006139ed601d83612f0d565b91506139f8826139b7565b602082019050919050565b60006020820190508181036000830152613a1c816139e0565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613a59601a83612f0d565b9150613a6482613a23565b602082019050919050565b60006020820190508181036000830152613a8881613a4c565b9050919050565b6000604082019050613aa460008301856134a7565b613ab160208301846132cf565b9392505050565b600081519050613ac78161321a565b92915050565b600060208284031215613ae357613ae2612fbe565b5b6000613af184828501613ab8565b91505092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613b30601d83612f0d565b9150613b3b82613afa565b602082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613bc2602583612f0d565b9150613bcd82613b66565b604082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e31250000000000000000000000000000000000000000602082015250565b6000613c54602c83612f0d565b9150613c5f82613bf8565b604082019050919050565b60006020820190508181036000830152613c8381613c47565b9050919050565b7f43616e2774206368616e6765207768656e2074726164696e672068617320737460008201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b6000613ce6602583612f0d565b9150613cf182613c8a565b604082019050919050565b60006020820190508181036000830152613d1581613cd9565b9050919050565b7f426c6f636b2073686f756c64206265206c657373207468616e20313000000000600082015250565b6000613d52601c83612f0d565b9150613d5d82613d1c565b602082019050919050565b60006020820190508181036000830152613d8181613d45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613de4602683612f0d565b9150613def82613d88565b604082019050919050565b60006020820190508181036000830152613e1381613dd7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e76602483612f0d565b9150613e8182613e1a565b604082019050919050565b60006020820190508181036000830152613ea581613e69565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f08602283612f0d565b9150613f1382613eac565b604082019050919050565b60006020820190508181036000830152613f3781613efb565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613f9a602983612f0d565b9150613fa582613f3e565b604082019050919050565b60006020820190508181036000830152613fc981613f8d565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b6000614006601383612f0d565b915061401182613fd0565b602082019050919050565b6000602082019050818103600083015261403581613ff9565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b6000614072602083612f0d565b915061407d8261403c565b602082019050919050565b600060208201905081810360008301526140a181614065565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140e282613026565b91506140ed83613026565b9250826140fd576140fc6140a8565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614164602583612f0d565b915061416f82614108565b604082019050919050565b6000602082019050818103600083015261419381614157565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141f6602383612f0d565b91506142018261419a565b604082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614288602683612f0d565b91506142938261422c565b604082019050919050565b600060208201905081810360008301526142b78161427b565b9050919050565b6000815190506142cd81612ffa565b92915050565b6000602082840312156142e9576142e8612fbe565b5b60006142f7848285016142be565b91505092915050565b6000819050919050565b600061432561432061431b84614300565b613511565b613026565b9050919050565b6143358161430a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61437081612fe8565b82525050565b60006143828383614367565b60208301905092915050565b6000602082019050919050565b60006143a68261433b565b6143b08185614346565b93506143bb83614357565b8060005b838110156143ec5781516143d38882614376565b97506143de8361438e565b9250506001810190506143bf565b5085935050505092915050565b600060a08201905061440e60008301886132cf565b61441b602083018761432c565b818103604083015261442d818661439b565b905061443c60608301856134a7565b61444960808301846132cf565b9695505050505050565b600060c08201905061446860008301896134a7565b61447560208301886132cf565b614482604083018761432c565b61448f606083018661432c565b61449c60808301856134a7565b6144a960a08301846132cf565b979650505050505050565b6000815190506144c381613030565b92915050565b6000806000606084860312156144e2576144e1612fbe565b5b60006144f0868287016144b4565b9350506020614501868287016144b4565b9250506040614512868287016144b4565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614552601d83612f0d565b915061455d8261451c565b602082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b600081905092915050565b50565b60006145a3600083614588565b91506145ae82614593565b600082019050919050565b60006145c482614596565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b600061462a603a83612f0d565b9150614635826145ce565b604082019050919050565b600060208201905081810360008301526146598161461d565b905091905056fea26469706673582212209cecd6abcbb613072b646eed5dde9952fb127de84136a4a745a4f3b3c2ec35ab64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102345760003560e01c806375f0a8741161012e578063a9059cbb116100ab578063edaa11681161006f578063edaa11681461084a578063f2fde38b14610873578063f66895a31461089c578063f887ea40146108c9578063fbe6324e146108f45761023b565b8063a9059cbb14610741578063aacebbe31461077e578063c2c327d1146107a7578063c5d32bb2146107d0578063dd62ed3e1461080d5761023b565b806395d89b41116100f257806395d89b411461065c5780639d282cd6146106875780639e252f00146106b0578063a457c2d7146106d9578063a8aa1b31146107165761023b565b806375f0a8741461059b57806385141a77146105c65780638a8c523c146105f15780638cd4426d146106085780638da5cb5b146106315761023b565b8063313ce567116101bc5780634e736f22116101805780634e736f22146104c657806366a88d96146104ef57806370a082311461051a578063715018a614610557578063728f8eea1461056e5761023b565b8063313ce567146103e1578063355496ca1461040c578063395093511461043557806342b6fa11146104725780634ada218b1461049b5761023b565b80631675d802116102035780631675d802146102fa57806318160ddd146103255780631816467f1461035057806323b872dd14610379578063274a533c146103b65761023b565b806306fdde0314610240578063095ea7b31461026b5780630e375a5c146102a85780631340538f146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b5061025561091f565b6040516102629190612f92565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061305c565b6109b1565b60405161029f91906130b7565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613246565b6109cf565b005b3480156102dd57600080fd5b506102f860048036038101906102f391906132a2565b610ae0565b005b34801561030657600080fd5b5061030f610b79565b60405161031c91906132de565b60405180910390f35b34801561033157600080fd5b5061033a610b7f565b60405161034791906132de565b60405180910390f35b34801561035c57600080fd5b50610377600480360381019061037291906132f9565b610b89565b005b34801561038557600080fd5b506103a0600480360381019061039b9190613326565b610c49565b6040516103ad91906130b7565b60405180910390f35b3480156103c257600080fd5b506103cb610d4a565b6040516103d891906132de565b60405180910390f35b3480156103ed57600080fd5b506103f6610d50565b6040516104039190613395565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e91906133b0565b610d59565b005b34801561044157600080fd5b5061045c6004803603810190610457919061305c565b610e30565b60405161046991906130b7565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906133f0565b610edc565b005b3480156104a757600080fd5b506104b0610f80565b6040516104bd91906130b7565b60405180910390f35b3480156104d257600080fd5b506104ed60048036038101906104e8919061341d565b610f93565b005b3480156104fb57600080fd5b506105046110ac565b60405161051191906132de565b60405180910390f35b34801561052657600080fd5b50610541600480360381019061053c91906132f9565b6110b2565b60405161054e91906132de565b60405180910390f35b34801561056357600080fd5b5061056c6110fa565b005b34801561057a57600080fd5b50610583611182565b60405161059293929190613470565b60405180910390f35b3480156105a757600080fd5b506105b061119a565b6040516105bd91906134b6565b60405180910390f35b3480156105d257600080fd5b506105db6111c0565b6040516105e891906134b6565b60405180910390f35b3480156105fd57600080fd5b506106066111c6565b005b34801561061457600080fd5b5061062f600480360381019061062a919061305c565b6112d1565b005b34801561063d57600080fd5b50610646611376565b60405161065391906134b6565b60405180910390f35b34801561066857600080fd5b506106716113a0565b60405161067e9190612f92565b60405180910390f35b34801561069357600080fd5b506106ae60048036038101906106a9919061341d565b611432565b005b3480156106bc57600080fd5b506106d760048036038101906106d291906133f0565b61154b565b005b3480156106e557600080fd5b5061070060048036038101906106fb919061305c565b6115b7565b60405161070d91906130b7565b60405180910390f35b34801561072257600080fd5b5061072b6116ab565b60405161073891906134b6565b60405180910390f35b34801561074d57600080fd5b506107686004803603810190610763919061305c565b6116d1565b60405161077591906130b7565b60405180910390f35b34801561078a57600080fd5b506107a560048036038101906107a091906132f9565b6116e8565b005b3480156107b357600080fd5b506107ce60048036038101906107c991906133f0565b6117a8565b005b3480156107dc57600080fd5b506107f760048036038101906107f291906132f9565b611892565b60405161080491906130b7565b60405180910390f35b34801561081957600080fd5b50610834600480360381019061082f91906134d1565b6118b2565b60405161084191906132de565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c91906133f0565b611939565b005b34801561087f57600080fd5b5061089a600480360381019061089591906132f9565b611a52565b005b3480156108a857600080fd5b506108b1611b49565b6040516108c093929190613470565b60405180910390f35b3480156108d557600080fd5b506108de611b61565b6040516108eb9190613570565b60405180910390f35b34801561090057600080fd5b50610909611b87565b60405161091691906130b7565b60405180910390f35b60606003805461092e906135ba565b80601f016020809104026020016040519081016040528092919081815260200182805461095a906135ba565b80156109a75780601f1061097c576101008083540402835291602001916109a7565b820191906000526020600020905b81548152906001019060200180831161098a57829003601f168201915b5050505050905090565b60006109c56109be611b9a565b8484611ba2565b6001905092915050565b6109d7611b9a565b73ffffffffffffffffffffffffffffffffffffffff166109f5611376565b73ffffffffffffffffffffffffffffffffffffffff1614610a4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4290613637565b60405180910390fd5b60005b8251811015610adb578160156000858481518110610a6f57610a6e613657565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ad3906136b5565b915050610a4e565b505050565b610ae8611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610b06611376565b73ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5390613637565b60405180910390fd5b80600760156101000a81548160ff02191690831515021790555050565b60085481565b6000600254905090565b610b91611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610baf611376565b73ffffffffffffffffffffffffffffffffffffffff1614610c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfc90613637565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000610c56848484611d6b565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610ca1611b9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d189061376f565b60405180910390fd5b610d3e85610d2d611b9a565b8584610d39919061378f565b611ba2565b60019150509392505050565b600a5481565b60006012905090565b610d61611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610d7f611376565b73ffffffffffffffffffffffffffffffffffffffff1614610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90613637565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610ed2610e3d611b9a565b848460016000610e4b611b9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ecd91906137c3565b611ba2565b6001905092915050565b610ee4611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610f02611376565b73ffffffffffffffffffffffffffffffffffffffff1614610f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4f90613637565b60405180910390fd5b610f60610d50565b600a610f6c919061392a565b81610f779190613975565b60088190555050565b600760169054906101000a900460ff1681565b610f9b611b9a565b73ffffffffffffffffffffffffffffffffffffffff16610fb9611376565b73ffffffffffffffffffffffffffffffffffffffff161461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100690613637565b60405180910390fd5b606381838561101e91906137c3565b61102891906137c3565b1115611069576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106090613a03565b60405180910390fd5b6040518060600160405280848152602001838152602001828152506012600082015181600001556020820151816001015560408201518160020155905050505050565b60095481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611102611b9a565b73ffffffffffffffffffffffffffffffffffffffff16611120611376565b73ffffffffffffffffffffffffffffffffffffffff1614611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90613637565b60405180910390fd5b6111806000612548565b565b600f8060000154908060010154908060020154905083565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61dead81565b6111ce611b9a565b73ffffffffffffffffffffffffffffffffffffffff166111ec611376565b73ffffffffffffffffffffffffffffffffffffffff1614611242576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123990613637565b60405180910390fd5b600760169054906101000a900460ff1615611292576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128990613a6f565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600a81905550565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161132e929190613a8f565b6020604051808303816000875af115801561134d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113719190613acd565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546113af906135ba565b80601f01602080910402602001604051908101604052809291908181526020018280546113db906135ba565b80156114285780601f106113fd57610100808354040283529160200191611428565b820191906000526020600020905b81548152906001019060200180831161140b57829003601f168201915b5050505050905090565b61143a611b9a565b73ffffffffffffffffffffffffffffffffffffffff16611458611376565b73ffffffffffffffffffffffffffffffffffffffff16146114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613637565b60405180910390fd5b604051806060016040528084815260200183815260200182815250600f600082015181600001556020820151816001015560408201518160020155905050600f8183856114fb91906137c3565b61150591906137c3565b1115611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90613b46565b60405180910390fd5b505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115b3573d6000803e3d6000fd5b5050565b600080600160006115c6611b9a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613bd8565b60405180910390fd5b6116a061168e611b9a565b85858461169b919061378f565b611ba2565b600191505092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116de338484611d6b565b6001905092915050565b6116f0611b9a565b73ffffffffffffffffffffffffffffffffffffffff1661170e611376565b73ffffffffffffffffffffffffffffffffffffffff1614611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b90613637565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117b0611b9a565b73ffffffffffffffffffffffffffffffffffffffff166117ce611376565b73ffffffffffffffffffffffffffffffffffffffff1614611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90613637565b60405180910390fd5b620186a081101561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613c6a565b60405180910390fd5b611872610d50565b600a61187e919061392a565b816118899190613975565b60098190555050565b60156020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611941611b9a565b73ffffffffffffffffffffffffffffffffffffffff1661195f611376565b73ffffffffffffffffffffffffffffffffffffffff16146119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90613637565b60405180910390fd5b600760169054906101000a900460ff1615611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90613cfc565b60405180910390fd5b600a8110611a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3f90613d68565b60405180910390fd5b80600b8190555050565b611a5a611b9a565b73ffffffffffffffffffffffffffffffffffffffff16611a78611376565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613637565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3490613dfa565b60405180910390fd5b611b4681612548565b50565b60128060000154908060010154908060020154905083565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760159054906101000a900460ff1681565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890613e8c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7790613f1e565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d5e91906132de565b60405180910390a3505050565b60008111611dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da590613fb0565b60405180910390fd5b601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611e525750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ea757600760169054906101000a900460ff16611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d9061401c565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f4e5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f675750600760149054906101000a900460ff16155b15611fc55760095481611f79846110b2565b611f8391906137c3565b1115611fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbb90614088565b60405180910390fd5b5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561206d5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120c35750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120dc5750600760149054906101000a900460ff16155b1561219057600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461218f5760095481612143846110b2565b61214d91906137c3565b111561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614088565b60405180910390fd5b5b5b600080600061219d612ee1565b6000601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122435750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561225d5750600b54600a5461225a91906137c3565b43105b9050600760149054906101000a900460ff16806122c35750601560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123175750601560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156123255760009250612458565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015612380575080155b156123e2576012600201546012600001546012600101546123a191906137c3565b6123ab91906137c3565b9450849350601260405180606001604052908160008201548152602001600182015481526020016002820154815250509150612457565b8061244457600f60020154600f60000154600f6001015461240391906137c3565b61240d91906137c3565b9450849350600f60405180606001604052908160008201548152602001600182015481526020016002820154815250509150612456565b801561245557600c549450600c5493505b5b5b5b606484876124669190613975565b61247091906140d7565b9250600760159054906101000a900460ff1680156124dc5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b156124ec576124eb858361260e565b5b612502888885896124fd919061378f565b612828565b600083111561253e57600085111561253d576000606486886125249190613975565b61252e91906140d7565b905061253b893083612828565b505b5b5050505050505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff16612824576001600760146101000a81548160ff0219169083151502179055506000820315612808576000612651306110b2565b90506008548110612806576001600854111561266d5760085490505b600060028461267c9190613975565b90506000818460200151846126919190613975565b61269b91906140d7565b9050600081846126ab919061378f565b905060004790506126bb82612aa5565b600081476126c9919061378f565b905060008760200151866126dd919061378f565b826126e891906140d7565b905060008860200151826126fc9190613975565b90506000811115612712576127118682612ce8565b5b600089600001516002846127269190613975565b6127309190613975565b905060008111156127875761278681600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612de890919063ffffffff16565b5b60008a6040015160028561279b9190613975565b6127a59190613975565b905060008111156127fc576127fb81600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612de890919063ffffffff16565b5b5050505050505050505b505b6000600760146101000a81548160ff0219169083151502179055505b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161288e9061417a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fd9061420c565b60405180910390fd5b612911838383612edc565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e9061429e565b60405180910390fd5b81816129a3919061378f565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3391906137c3565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612a9791906132de565b60405180910390a350505050565b6000600267ffffffffffffffff811115612ac257612ac16130d7565b5b604051908082528060200260200182016040528015612af05781602001602082028036833780820191505090505b5090503081600081518110612b0857612b07613657565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd391906142d3565b81600181518110612be757612be6613657565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612c4e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ba2565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612cb29594939291906143f9565b600060405180830381600087803b158015612ccc57600080fd5b505af1158015612ce0573d6000803e3d6000fd5b505050505050565b612d1530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ba2565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612d9e96959493929190614453565b60606040518083038185885af1158015612dbc573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612de191906144c9565b5050505050565b80471015612e2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2290614568565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612e51906145b9565b60006040518083038185875af1925050503d8060008114612e8e576040519150601f19603f3d011682016040523d82523d6000602084013e612e93565b606091505b5050905080612ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ece90614640565b60405180910390fd5b505050565b505050565b60405180606001604052806000815260200160008152602001600081525090565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f3c578082015181840152602081019050612f21565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f6482612f02565b612f6e8185612f0d565b9350612f7e818560208601612f1e565b612f8781612f48565b840191505092915050565b60006020820190508181036000830152612fac8184612f59565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ff382612fc8565b9050919050565b61300381612fe8565b811461300e57600080fd5b50565b60008135905061302081612ffa565b92915050565b6000819050919050565b61303981613026565b811461304457600080fd5b50565b60008135905061305681613030565b92915050565b6000806040838503121561307357613072612fbe565b5b600061308185828601613011565b925050602061309285828601613047565b9150509250929050565b60008115159050919050565b6130b18161309c565b82525050565b60006020820190506130cc60008301846130a8565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61310f82612f48565b810181811067ffffffffffffffff8211171561312e5761312d6130d7565b5b80604052505050565b6000613141612fb4565b905061314d8282613106565b919050565b600067ffffffffffffffff82111561316d5761316c6130d7565b5b602082029050602081019050919050565b600080fd5b600061319661319184613152565b613137565b905080838252602082019050602084028301858111156131b9576131b861317e565b5b835b818110156131e257806131ce8882613011565b8452602084019350506020810190506131bb565b5050509392505050565b600082601f830112613201576132006130d2565b5b8135613211848260208601613183565b91505092915050565b6132238161309c565b811461322e57600080fd5b50565b6000813590506132408161321a565b92915050565b6000806040838503121561325d5761325c612fbe565b5b600083013567ffffffffffffffff81111561327b5761327a612fc3565b5b613287858286016131ec565b925050602061329885828601613231565b9150509250929050565b6000602082840312156132b8576132b7612fbe565b5b60006132c684828501613231565b91505092915050565b6132d881613026565b82525050565b60006020820190506132f360008301846132cf565b92915050565b60006020828403121561330f5761330e612fbe565b5b600061331d84828501613011565b91505092915050565b60008060006060848603121561333f5761333e612fbe565b5b600061334d86828701613011565b935050602061335e86828701613011565b925050604061336f86828701613047565b9150509250925092565b600060ff82169050919050565b61338f81613379565b82525050565b60006020820190506133aa6000830184613386565b92915050565b600080604083850312156133c7576133c6612fbe565b5b60006133d585828601613011565b92505060206133e685828601613231565b9150509250929050565b60006020828403121561340657613405612fbe565b5b600061341484828501613047565b91505092915050565b60008060006060848603121561343657613435612fbe565b5b600061344486828701613047565b935050602061345586828701613047565b925050604061346686828701613047565b9150509250925092565b600060608201905061348560008301866132cf565b61349260208301856132cf565b61349f60408301846132cf565b949350505050565b6134b081612fe8565b82525050565b60006020820190506134cb60008301846134a7565b92915050565b600080604083850312156134e8576134e7612fbe565b5b60006134f685828601613011565b925050602061350785828601613011565b9150509250929050565b6000819050919050565b600061353661353161352c84612fc8565b613511565b612fc8565b9050919050565b60006135488261351b565b9050919050565b600061355a8261353d565b9050919050565b61356a8161354f565b82525050565b60006020820190506135856000830184613561565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135d257607f821691505b6020821081036135e5576135e461358b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613621602083612f0d565b915061362c826135eb565b602082019050919050565b6000602082019050818103600083015261365081613614565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136c082613026565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136f2576136f1613686565b5b600182019050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613759602883612f0d565b9150613764826136fd565b604082019050919050565b600060208201905081810360008301526137888161374c565b9050919050565b600061379a82613026565b91506137a583613026565b92508282039050818111156137bd576137bc613686565b5b92915050565b60006137ce82613026565b91506137d983613026565b92508282019050808211156137f1576137f0613686565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111561384e5780860481111561382a57613829613686565b5b60018516156138395780820291505b8081029050613847856137f7565b945061380e565b94509492505050565b6000826138675760019050613923565b816138755760009050613923565b816001811461388b5760028114613895576138c4565b6001915050613923565b60ff8411156138a7576138a6613686565b5b8360020a9150848211156138be576138bd613686565b5b50613923565b5060208310610133831016604e8410600b84101617156138f95782820a9050838111156138f4576138f3613686565b5b613923565b6139068484846001613804565b9250905081840481111561391d5761391c613686565b5b81810290505b9392505050565b600061393582613026565b915061394083613379565b925061396d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613857565b905092915050565b600061398082613026565b915061398b83613026565b925082820261399981613026565b915082820484148315176139b0576139af613686565b5b5092915050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006139ed601d83612f0d565b91506139f8826139b7565b602082019050919050565b60006020820190508181036000830152613a1c816139e0565b9050919050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000613a59601a83612f0d565b9150613a6482613a23565b602082019050919050565b60006020820190508181036000830152613a8881613a4c565b9050919050565b6000604082019050613aa460008301856134a7565b613ab160208301846132cf565b9392505050565b600081519050613ac78161321a565b92915050565b600060208284031215613ae357613ae2612fbe565b5b6000613af184828501613ab8565b91505092915050565b7f4d757374206b656570206665657320617420313525206f72206c657373000000600082015250565b6000613b30601d83612f0d565b9150613b3b82613afa565b602082019050919050565b60006020820190508181036000830152613b5f81613b23565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613bc2602583612f0d565b9150613bcd82613b66565b604082019050919050565b60006020820190508181036000830152613bf181613bb5565b9050919050565b7f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760008201527f6572207468616e20302e31250000000000000000000000000000000000000000602082015250565b6000613c54602c83612f0d565b9150613c5f82613bf8565b604082019050919050565b60006020820190508181036000830152613c8381613c47565b9050919050565b7f43616e2774206368616e6765207768656e2074726164696e672068617320737460008201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b6000613ce6602583612f0d565b9150613cf182613c8a565b604082019050919050565b60006020820190508181036000830152613d1581613cd9565b9050919050565b7f426c6f636b2073686f756c64206265206c657373207468616e20313000000000600082015250565b6000613d52601c83612f0d565b9150613d5d82613d1c565b602082019050919050565b60006020820190508181036000830152613d8181613d45565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613de4602683612f0d565b9150613def82613d88565b604082019050919050565b60006020820190508181036000830152613e1381613dd7565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e76602483612f0d565b9150613e8182613e1a565b604082019050919050565b60006020820190508181036000830152613ea581613e69565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613f08602283612f0d565b9150613f1382613eac565b604082019050919050565b60006020820190508181036000830152613f3781613efb565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613f9a602983612f0d565b9150613fa582613f3e565b604082019050919050565b60006020820190508181036000830152613fc981613f8d565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b6000614006601383612f0d565b915061401182613fd0565b602082019050919050565b6000602082019050818103600083015261403581613ff9565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d6974600082015250565b6000614072602083612f0d565b915061407d8261403c565b602082019050919050565b600060208201905081810360008301526140a181614065565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140e282613026565b91506140ed83613026565b9250826140fd576140fc6140a8565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614164602583612f0d565b915061416f82614108565b604082019050919050565b6000602082019050818103600083015261419381614157565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141f6602383612f0d565b91506142018261419a565b604082019050919050565b60006020820190508181036000830152614225816141e9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614288602683612f0d565b91506142938261422c565b604082019050919050565b600060208201905081810360008301526142b78161427b565b9050919050565b6000815190506142cd81612ffa565b92915050565b6000602082840312156142e9576142e8612fbe565b5b60006142f7848285016142be565b91505092915050565b6000819050919050565b600061432561432061431b84614300565b613511565b613026565b9050919050565b6143358161430a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61437081612fe8565b82525050565b60006143828383614367565b60208301905092915050565b6000602082019050919050565b60006143a68261433b565b6143b08185614346565b93506143bb83614357565b8060005b838110156143ec5781516143d38882614376565b97506143de8361438e565b9250506001810190506143bf565b5085935050505092915050565b600060a08201905061440e60008301886132cf565b61441b602083018761432c565b818103604083015261442d818661439b565b905061443c60608301856134a7565b61444960808301846132cf565b9695505050505050565b600060c08201905061446860008301896134a7565b61447560208301886132cf565b614482604083018761432c565b61448f606083018661432c565b61449c60808301856134a7565b6144a960a08301846132cf565b979650505050505050565b6000815190506144c381613030565b92915050565b6000806000606084860312156144e2576144e1612fbe565b5b60006144f0868287016144b4565b9350506020614501868287016144b4565b9250506040614512868287016144b4565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b6000614552601d83612f0d565b915061455d8261451c565b602082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b600081905092915050565b50565b60006145a3600083614588565b91506145ae82614593565b600082019050919050565b60006145c482614596565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b600061462a603a83612f0d565b9150614635826145ce565b604082019050919050565b600060208201905081810360008301526146598161461d565b905091905056fea26469706673582212209cecd6abcbb613072b646eed5dde9952fb127de84136a4a745a4f3b3c2ec35ab64736f6c63430008110033

Deployed Bytecode Sourcemap

12941:11105:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2632:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14821:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23320:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21528:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13211:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3752:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23082:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14990:448;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13365:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3594:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23192:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15446:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21688:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13168:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22164:303;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13294:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3923:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11604:94;;;;;;;;;;;;;:::i;:::-;;13828:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13474:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13630:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22476:224;;;;;;;;;;;;;:::i;:::-;;23861:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11381:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2851:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21873:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23749:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15702:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13052:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16120:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22959:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23530:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13920:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4542:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22708:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11706:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13870:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;13024:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13123:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2632:100;2686:13;2719:5;2712:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2632:100;:::o;14821:161::-;14896:4;14913:39;14922:12;:10;:12::i;:::-;14936:7;14945:6;14913:8;:39::i;:::-;14970:4;14963:11;;14821:161;;;;:::o;23320:202::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23417:9:::1;23412:103;23436:8;:15;23432:1;:19;23412:103;;;23498:5;23473:9;:22;23483:8;23492:1;23483:11;;;;;;;;:::i;:::-;;;;;;;;23473:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;23453:3;;;;;:::i;:::-;;;;23412:103;;;;23320:202:::0;;:::o;21528:152::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21667:5:::1;21646:18;;:26;;;;;;;;;;;;;;;;;;21528:152:::0;:::o;13211:53::-;;;;:::o;3752:108::-;3813:7;3840:12;;3833:19;;3752:108;:::o;23082:102::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23167:9:::1;23155;;:21;;;;;;;;;;;;;;;;;;23082:102:::0;:::o;14990:448::-;15122:4;15139:36;15149:6;15157:9;15168:6;15139:9;:36::i;:::-;15188:24;15215:11;:19;15227:6;15215:19;;;;;;;;;;;;;;;:33;15235:12;:10;:12::i;:::-;15215:33;;;;;;;;;;;;;;;;15188:60;;15287:6;15267:16;:26;;15259:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;15349:57;15358:6;15366:12;:10;:12::i;:::-;15399:6;15380:16;:25;;;;:::i;:::-;15349:8;:57::i;:::-;15426:4;15419:11;;;14990:448;;;;;:::o;13365:28::-;;;;:::o;3594:93::-;3652:5;3677:2;3670:9;;3594:93;:::o;23192:120::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23299:5:::1;23277:9;:19;23287:8;23277:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;23192:120:::0;;:::o;15446:248::-;15562:4;15584:80;15593:12;:10;:12::i;:::-;15607:7;15653:10;15616:11;:25;15628:12;:10;:12::i;:::-;15616:25;;;;;;;;;;;;;;;:34;15642:7;15616:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;15584:8;:80::i;:::-;15682:4;15675:11;;15446:248;;;;:::o;21688:177::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21847:10:::1;:8;:10::i;:::-;21843:2;:14;;;;:::i;:::-;21830:10;:27;;;;:::i;:::-;21804:23;:53;;;;21688:177:::0;:::o;13168:34::-;;;;;;;;;;;;;:::o;22164:303::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22348:2:::1;22339:4;22326:10;22313;:23;;;;:::i;:::-;:30;;;;:::i;:::-;22312:38;;22304:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;22424:35;;;;;;;;22430:10;22424:35;;;;22442:10;22424:35;;;;22454:4;22424:35;;::::0;22412:9:::1;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;22164:303:::0;;;:::o;13294:44::-;;;;:::o;3923:127::-;3997:7;4024:9;:18;4034:7;4024:18;;;;;;;;;;;;;;;;4017:25;;3923:127;;;:::o;11604:94::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11669:21:::1;11687:1;11669:9;:21::i;:::-;11604:94::o:0;13828:35::-;;;;;;;;;;;;;;;;;;;:::o;13474:75::-;;;;;;;;;;;;;:::o;13630:79::-;13667:42;13630:79;:::o;22476:224::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22540:14:::1;;;;;;;;;;;22539:15;22531:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22613:4;22596:14;;:21;;;;;;;;;;;;;;;;;;22649:4;22628:18;;:25;;;;;;;;;;;;;;;;;;22680:12;22664:13;:28;;;;22476:224::o:0;23861:127::-;23943:8;23936:25;;;23962:9;;;;;;;;;;;23973:6;23936:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23861:127;;:::o;11381:87::-;11427:7;11454:6;;;;;;;;;;;11447:13;;11381:87;:::o;2851:104::-;2907:13;2940:7;2933:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2851:104;:::o;21873:283::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22023:35:::1;;;;;;;;22029:10;22023:35;;;;22041:10;22023:35;;;;22053:4;22023:35;;::::0;22015:5:::1;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;22112:2;22103:4;22090:10;22077;:23;;;;:::i;:::-;:30;;;;:::i;:::-;22076:38;;22068:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21873:283:::0;;;:::o;23749:104::-;23815:9;;;;;;;;;;;23807:27;;:38;23835:9;23807:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23749:104;:::o;15702:410::-;15823:4;15845:24;15872:11;:25;15884:12;:10;:12::i;:::-;15872:25;;;;;;;;;;;;;;;:34;15898:7;15872:34;;;;;;;;;;;;;;;;15845:61;;15945:15;15925:16;:35;;15917:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;16013:67;16022:12;:10;:12::i;:::-;16036:7;16064:15;16045:16;:34;;;;:::i;:::-;16013:8;:67::i;:::-;16100:4;16093:11;;;15702:410;;;;:::o;13052:19::-;;;;;;;;;;;;;:::o;16120:165::-;16198:4;16215:40;16225:10;16237:9;16248:6;16215:9;:40::i;:::-;16273:4;16266:11;;16120:165;;;;:::o;22959:115::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23057:9:::1;23039:15;;:27;;;;;;;;;;;;;;;;;;22959:115:::0;:::o;23530:211::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23626:3:::1;23613:9;:16;;23605:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23722:10;:8;:10::i;:::-;23718:2;:14;;;;:::i;:::-;23706:9;:26;;;;:::i;:::-;23689:14;:43;;;;23530:211:::0;:::o;13920:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;4542:201::-;4676:7;4708:11;:18;4720:5;4708:18;;;;;;;;;;;;;;;:27;4727:7;4708:27;;;;;;;;;;;;;;;;4701:34;;4542:201;;;;:::o;22708:243::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22790:14:::1;;;;;;;;;;;22789:15;22781:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22877:2;22865:9;:14;22857:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;22934:9;22923:8;:20;;;;22708:243:::0;:::o;11706:192::-;11527:12;:10;:12::i;:::-;11516:23;;:7;:5;:7::i;:::-;:23;;;11508:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11815:1:::1;11795:22;;:8;:22;;::::0;11787:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11871:19;11881:8;11871:9;:19::i;:::-;11706:192:::0;:::o;13870:41::-;;;;;;;;;;;;;;;;;;;:::o;13024:21::-;;;;;;;;;;;;;:::o;13123:38::-;;;;;;;;;;;;;:::o;354:98::-;407:7;434:10;427:17;;354:98;:::o;9680:380::-;9833:1;9816:19;;:5;:19;;;9808:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9914:1;9895:21;;:7;:21;;;9887:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9998:6;9968:11;:18;9980:5;9968:18;;;;;;;;;;;;;;;:27;9987:7;9968:27;;;;;;;;;;;;;;;:36;;;;10036:7;10020:32;;10029:5;10020:32;;;10045:6;10020:32;;;;;;:::i;:::-;;;;;;;;9680:380;;;:::o;16293:2588::-;16443:1;16434:6;:10;16426:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;16508:9;:17;16518:6;16508:17;;;;;;;;;;;;;;;;;;;;;;;;;16507:18;:43;;;;;16530:9;:20;16540:9;16530:20;;;;;;;;;;;;;;;;;;;;;;;;;16529:21;16507:43;16503:122;;;16575:14;;;;;;;;;;;16567:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16503:122;16651:4;;;;;;;;;;;16641:14;;:6;:14;;;:39;;;;;16660:9;:20;16670:9;16660:20;;;;;;;;;;;;;;;;;;;;;;;;;16659:21;16641:39;:59;;;;;16685:15;;;;;;;;;;;16684:16;16641:59;16637:233;;;16776:14;;16766:6;16743:20;16753:9;16743;:20::i;:::-;:29;;;;:::i;:::-;:47;;16717:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;16637:233;16910:4;;;;;;;;;;;16900:14;;:6;:14;;;;:39;;;;;16919:9;:20;16929:9;16919:20;;;;;;;;;;;;;;;;;;;;;;;;;16918:21;16900:39;:61;;;;;16944:9;:17;16954:6;16944:17;;;;;;;;;;;;;;;;;;;;;;;;;16943:18;16900:61;:81;;;;;16966:15;;;;;;;;;;;16965:16;16900:81;16882:348;;;17025:4;;;;;;;;;;;17012:17;;:9;:17;;;17008:211;;17113:14;;17103:6;17080:20;17090:9;17080;:20::i;:::-;:29;;;;:::i;:::-;:47;;17050:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;17008:211;16882:348;17242:15;17268:14;17293:11;17315:25;;:::i;:::-;17353:17;17374:9;:17;17384:6;17374:17;;;;;;;;;;;;;;;;;;;;;;;;;17373:18;:56;;;;;17409:9;:20;17419:9;17409:20;;;;;;;;;;;;;;;;;;;;;;;;;17408:21;17373:56;:112;;;;;17477:8;;17461:13;;:24;;;;:::i;:::-;17446:12;:39;17373:112;17353:132;;17573:15;;;;;;;;;;;:36;;;;17592:9;:17;17602:6;17592:17;;;;;;;;;;;;;;;;;;;;;;;;;17573:36;:60;;;;17613:9;:20;17623:9;17613:20;;;;;;;;;;;;;;;;;;;;;;;;;17573:60;17569:728;;;17654:1;17648:7;;17569:728;;;17719:4;;;;;;;;;;;17706:17;;:9;:17;;;:34;;;;;17728:12;17727:13;17706:34;17702:595;;;17873:9;:13;;;17823:9;:19;;;17784:9;:19;;;:58;;;;:::i;:::-;:102;;;;:::i;:::-;17757:129;;17911:7;17902:16;;17948:9;17933:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17702:595;;;17980:12;17975:322;;18106:5;:9;;;18071:5;:15;;;18036:5;:15;;;:50;;;;:::i;:::-;:79;;;;:::i;:::-;18009:106;;18140:7;18131:16;;18177:5;18162:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17975:322;;;18204:12;18200:97;;;18243:9;;18233:19;;18276:9;;18267:18;;18200:97;17975:322;17702:595;17569:728;18335:3;18325:6;18316;:15;;;;:::i;:::-;18315:23;;;;:::i;:::-;18309:29;;18452:18;;;;;;;;;;;:36;;;;;18484:4;;;;;;;;;;;18474:14;;:6;:14;;;;18452:36;18448:76;;;18490:34;18502:7;18511:12;18490:11;:34::i;:::-;18448:76;18566:48;18582:6;18590:9;18610:3;18601:6;:12;;;;:::i;:::-;18566:15;:48::i;:::-;18635:1;18629:3;:7;18625:249;;;18711:1;18701:7;:11;18697:164;;;18733:17;18774:3;18763:7;18754:6;:16;;;;:::i;:::-;18753:24;;;;:::i;:::-;18733:44;;18796:49;18812:6;18828:4;18835:9;18796:15;:49::i;:::-;18714:147;18697:164;18625:249;16415:2466;;;;;16293:2588;;;:::o;11906:173::-;11962:16;11981:6;;;;;;;;;;;11962:25;;12007:8;11998:6;;:17;;;;;;;;;;;;;;;;;;12062:8;12031:40;;12052:8;12031:40;;;;;;;;;;;;11951:128;11906:173;:::o;18889:1590::-;14078:15;;;;;;;;;;;14073:125;;14128:4;14110:15;;:22;;;;;;;;;;;;;;;;;;18991:1:::1;18980:7;:12:::0;18977:49;19008:7:::1;18977:49;19039:23;19065:24;19083:4;19065:9;:24::i;:::-;19039:50;;19123:23;;19104:15;:42;19100:1372;;19193:1;19167:23;;:27;19163:109;;;19233:23;;19215:41;;19163:109;19343:19;19375:1;19365:7;:11;;;;:::i;:::-;19343:33;;19391:32;19485:11;19445:9;:19;;;19427:15;:37;;;;:::i;:::-;19426:70;;;;:::i;:::-;19391:105;;19511:14;19546:24;19528:15;:42;;;;:::i;:::-;19511:59;;19587:22;19612:21;19587:46;;19650:24;19667:6;19650:16;:24::i;:::-;19691:20;19738:14;19714:21;:38;;;;:::i;:::-;19691:61;;19767:19;19819:9;:19;;;19805:11;:33;;;;:::i;:::-;19789:12;:50;;;;:::i;:::-;19767:72;;19854:29;19900:9;:19;;;19886:11;:33;;;;:::i;:::-;19854:65;;19964:1;19940:21;:25;19936:161;;;20020:61;20033:24;20059:21;20020:12;:61::i;:::-;19936:161;20113:20;20154:9;:19;;;20150:1;20136:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;20113:60;;20207:1;20192:12;:16;20188:105;;;20229:48;20264:12;20237:15;;;;;;;;;;;20229:34;;;;:48;;;;:::i;:::-;20188:105;20309:14;20344:9;:13;;;20340:1;20326:11;:15;;;;:::i;:::-;:31;;;;:::i;:::-;20309:48;;20385:1;20376:6;:10;20372:87;;;20407:36;20436:6;20415:9;;;;;;;;;;;20407:28;;;;:36;;;;:::i;:::-;20372:87;19148:1324;;;;;;;;;19100:1372;18969:1510;14147:1;14181:5:::0;14163:15;;:23;;;;;;;;;;;;;;;;;;14073:125;18889:1590;;:::o;8055:638::-;8213:1;8195:20;;:6;:20;;;8187:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8297:1;8276:23;;:9;:23;;;8268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8352:47;8373:6;8381:9;8392:6;8352:20;:47::i;:::-;8412:21;8436:9;:17;8446:6;8436:17;;;;;;;;;;;;;;;;8412:41;;8489:6;8472:13;:23;;8464:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8585:6;8569:13;:22;;;;:::i;:::-;8549:9;:17;8559:6;8549:17;;;;;;;;;;;;;;;:42;;;;8626:6;8602:9;:20;8612:9;8602:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8667:9;8650:35;;8659:6;8650:35;;;8678:6;8650:35;;;;;;:::i;:::-;;;;;;;;8176:517;8055:638;;;:::o;20487:526::-;20605:21;20643:1;20629:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20605:40;;20674:4;20656;20661:1;20656:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;20700:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20690:4;20695:1;20690:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;20726:53;20743:4;20758:6;;;;;;;;;;;20767:11;20726:8;:53::i;:::-;20818:6;;;;;;;;;;;:57;;;20890:11;20916:1;20932:4;20959;20979:15;20818:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20542:471;20487:526;:::o;21021:499::-;21169:53;21186:4;21201:6;;;;;;;;;;;21210:11;21169:8;:53::i;:::-;21265:6;;;;;;;;;;;:22;;;21296:9;21330:4;21350:11;21376:1;21419;21462:9;;;;;;;;;;;21486:15;21265:247;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21021:499;;:::o;10824:319::-;10939:6;10914:21;:31;;10906:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10993:12;11011:9;:14;;11034:6;11011:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10992:54;;;11065:7;11057:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;10895:248;10824:319;;:::o;10669:125::-;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:180;3617:77;3614:1;3607:88;3714:4;3711:1;3704:15;3738:4;3735:1;3728:15;3755:281;3838:27;3860:4;3838:27;:::i;:::-;3830:6;3826:40;3968:6;3956:10;3953:22;3932:18;3920:10;3917:34;3914:62;3911:88;;;3979:18;;:::i;:::-;3911:88;4019:10;4015:2;4008:22;3798:238;3755:281;;:::o;4042:129::-;4076:6;4103:20;;:::i;:::-;4093:30;;4132:33;4160:4;4152:6;4132:33;:::i;:::-;4042:129;;;:::o;4177:311::-;4254:4;4344:18;4336:6;4333:30;4330:56;;;4366:18;;:::i;:::-;4330:56;4416:4;4408:6;4404:17;4396:25;;4476:4;4470;4466:15;4458:23;;4177:311;;;:::o;4494:117::-;4603:1;4600;4593:12;4634:710;4730:5;4755:81;4771:64;4828:6;4771:64;:::i;:::-;4755:81;:::i;:::-;4746:90;;4856:5;4885:6;4878:5;4871:21;4919:4;4912:5;4908:16;4901:23;;4972:4;4964:6;4960:17;4952:6;4948:30;5001:3;4993:6;4990:15;4987:122;;;5020:79;;:::i;:::-;4987:122;5135:6;5118:220;5152:6;5147:3;5144:15;5118:220;;;5227:3;5256:37;5289:3;5277:10;5256:37;:::i;:::-;5251:3;5244:50;5323:4;5318:3;5314:14;5307:21;;5194:144;5178:4;5173:3;5169:14;5162:21;;5118:220;;;5122:21;4736:608;;4634:710;;;;;:::o;5367:370::-;5438:5;5487:3;5480:4;5472:6;5468:17;5464:27;5454:122;;5495:79;;:::i;:::-;5454:122;5612:6;5599:20;5637:94;5727:3;5719:6;5712:4;5704:6;5700:17;5637:94;:::i;:::-;5628:103;;5444:293;5367:370;;;;:::o;5743:116::-;5813:21;5828:5;5813:21;:::i;:::-;5806:5;5803:32;5793:60;;5849:1;5846;5839:12;5793:60;5743:116;:::o;5865:133::-;5908:5;5946:6;5933:20;5924:29;;5962:30;5986:5;5962:30;:::i;:::-;5865:133;;;;:::o;6004:678::-;6094:6;6102;6151:2;6139:9;6130:7;6126:23;6122:32;6119:119;;;6157:79;;:::i;:::-;6119:119;6305:1;6294:9;6290:17;6277:31;6335:18;6327:6;6324:30;6321:117;;;6357:79;;:::i;:::-;6321:117;6462:78;6532:7;6523:6;6512:9;6508:22;6462:78;:::i;:::-;6452:88;;6248:302;6589:2;6615:50;6657:7;6648:6;6637:9;6633:22;6615:50;:::i;:::-;6605:60;;6560:115;6004:678;;;;;:::o;6688:323::-;6744:6;6793:2;6781:9;6772:7;6768:23;6764:32;6761:119;;;6799:79;;:::i;:::-;6761:119;6919:1;6944:50;6986:7;6977:6;6966:9;6962:22;6944:50;:::i;:::-;6934:60;;6890:114;6688:323;;;;:::o;7017:118::-;7104:24;7122:5;7104:24;:::i;:::-;7099:3;7092:37;7017:118;;:::o;7141:222::-;7234:4;7272:2;7261:9;7257:18;7249:26;;7285:71;7353:1;7342:9;7338:17;7329:6;7285:71;:::i;:::-;7141:222;;;;:::o;7369:329::-;7428:6;7477:2;7465:9;7456:7;7452:23;7448:32;7445:119;;;7483:79;;:::i;:::-;7445:119;7603:1;7628:53;7673:7;7664:6;7653:9;7649:22;7628:53;:::i;:::-;7618:63;;7574:117;7369:329;;;;:::o;7704:619::-;7781:6;7789;7797;7846:2;7834:9;7825:7;7821:23;7817:32;7814:119;;;7852:79;;:::i;:::-;7814:119;7972:1;7997:53;8042:7;8033:6;8022:9;8018:22;7997:53;:::i;:::-;7987:63;;7943:117;8099:2;8125:53;8170:7;8161:6;8150:9;8146:22;8125:53;:::i;:::-;8115:63;;8070:118;8227:2;8253:53;8298:7;8289:6;8278:9;8274:22;8253:53;:::i;:::-;8243:63;;8198:118;7704:619;;;;;:::o;8329:86::-;8364:7;8404:4;8397:5;8393:16;8382:27;;8329:86;;;:::o;8421:112::-;8504:22;8520:5;8504:22;:::i;:::-;8499:3;8492:35;8421:112;;:::o;8539:214::-;8628:4;8666:2;8655:9;8651:18;8643:26;;8679:67;8743:1;8732:9;8728:17;8719:6;8679:67;:::i;:::-;8539:214;;;;:::o;8759:468::-;8824:6;8832;8881:2;8869:9;8860:7;8856:23;8852:32;8849:119;;;8887:79;;:::i;:::-;8849:119;9007:1;9032:53;9077:7;9068:6;9057:9;9053:22;9032:53;:::i;:::-;9022:63;;8978:117;9134:2;9160:50;9202:7;9193:6;9182:9;9178:22;9160:50;:::i;:::-;9150:60;;9105:115;8759:468;;;;;:::o;9233:329::-;9292:6;9341:2;9329:9;9320:7;9316:23;9312:32;9309:119;;;9347:79;;:::i;:::-;9309:119;9467:1;9492:53;9537:7;9528:6;9517:9;9513:22;9492:53;:::i;:::-;9482:63;;9438:117;9233:329;;;;:::o;9568:619::-;9645:6;9653;9661;9710:2;9698:9;9689:7;9685:23;9681:32;9678:119;;;9716:79;;:::i;:::-;9678:119;9836:1;9861:53;9906:7;9897:6;9886:9;9882:22;9861:53;:::i;:::-;9851:63;;9807:117;9963:2;9989:53;10034:7;10025:6;10014:9;10010:22;9989:53;:::i;:::-;9979:63;;9934:118;10091:2;10117:53;10162:7;10153:6;10142:9;10138:22;10117:53;:::i;:::-;10107:63;;10062:118;9568:619;;;;;:::o;10193:442::-;10342:4;10380:2;10369:9;10365:18;10357:26;;10393:71;10461:1;10450:9;10446:17;10437:6;10393:71;:::i;:::-;10474:72;10542:2;10531:9;10527:18;10518:6;10474:72;:::i;:::-;10556;10624:2;10613:9;10609:18;10600:6;10556:72;:::i;:::-;10193:442;;;;;;:::o;10641:118::-;10728:24;10746:5;10728:24;:::i;:::-;10723:3;10716:37;10641:118;;:::o;10765:222::-;10858:4;10896:2;10885:9;10881:18;10873:26;;10909:71;10977:1;10966:9;10962:17;10953:6;10909:71;:::i;:::-;10765:222;;;;:::o;10993:474::-;11061:6;11069;11118:2;11106:9;11097:7;11093:23;11089:32;11086:119;;;11124:79;;:::i;:::-;11086:119;11244:1;11269:53;11314:7;11305:6;11294:9;11290:22;11269:53;:::i;:::-;11259:63;;11215:117;11371:2;11397:53;11442:7;11433:6;11422:9;11418:22;11397:53;:::i;:::-;11387:63;;11342:118;10993:474;;;;;:::o;11473:60::-;11501:3;11522:5;11515:12;;11473:60;;;:::o;11539:142::-;11589:9;11622:53;11640:34;11649:24;11667:5;11649:24;:::i;:::-;11640:34;:::i;:::-;11622:53;:::i;:::-;11609:66;;11539:142;;;:::o;11687:126::-;11737:9;11770:37;11801:5;11770:37;:::i;:::-;11757:50;;11687:126;;;:::o;11819:141::-;11884:9;11917:37;11948:5;11917:37;:::i;:::-;11904:50;;11819:141;;;:::o;11966:161::-;12068:52;12114:5;12068:52;:::i;:::-;12063:3;12056:65;11966:161;;:::o;12133:252::-;12241:4;12279:2;12268:9;12264:18;12256:26;;12292:86;12375:1;12364:9;12360:17;12351:6;12292:86;:::i;:::-;12133:252;;;;:::o;12391:180::-;12439:77;12436:1;12429:88;12536:4;12533:1;12526:15;12560:4;12557:1;12550:15;12577:320;12621:6;12658:1;12652:4;12648:12;12638:22;;12705:1;12699:4;12695:12;12726:18;12716:81;;12782:4;12774:6;12770:17;12760:27;;12716:81;12844:2;12836:6;12833:14;12813:18;12810:38;12807:84;;12863:18;;:::i;:::-;12807:84;12628:269;12577:320;;;:::o;12903:182::-;13043:34;13039:1;13031:6;13027:14;13020:58;12903:182;:::o;13091:366::-;13233:3;13254:67;13318:2;13313:3;13254:67;:::i;:::-;13247:74;;13330:93;13419:3;13330:93;:::i;:::-;13448:2;13443:3;13439:12;13432:19;;13091:366;;;:::o;13463:419::-;13629:4;13667:2;13656:9;13652:18;13644:26;;13716:9;13710:4;13706:20;13702:1;13691:9;13687:17;13680:47;13744:131;13870:4;13744:131;:::i;:::-;13736:139;;13463:419;;;:::o;13888:180::-;13936:77;13933:1;13926:88;14033:4;14030:1;14023:15;14057:4;14054:1;14047:15;14074:180;14122:77;14119:1;14112:88;14219:4;14216:1;14209:15;14243:4;14240:1;14233:15;14260:233;14299:3;14322:24;14340:5;14322:24;:::i;:::-;14313:33;;14368:66;14361:5;14358:77;14355:103;;14438:18;;:::i;:::-;14355:103;14485:1;14478:5;14474:13;14467:20;;14260:233;;;:::o;14499:227::-;14639:34;14635:1;14627:6;14623:14;14616:58;14708:10;14703:2;14695:6;14691:15;14684:35;14499:227;:::o;14732:366::-;14874:3;14895:67;14959:2;14954:3;14895:67;:::i;:::-;14888:74;;14971:93;15060:3;14971:93;:::i;:::-;15089:2;15084:3;15080:12;15073:19;;14732:366;;;:::o;15104:419::-;15270:4;15308:2;15297:9;15293:18;15285:26;;15357:9;15351:4;15347:20;15343:1;15332:9;15328:17;15321:47;15385:131;15511:4;15385:131;:::i;:::-;15377:139;;15104:419;;;:::o;15529:194::-;15569:4;15589:20;15607:1;15589:20;:::i;:::-;15584:25;;15623:20;15641:1;15623:20;:::i;:::-;15618:25;;15667:1;15664;15660:9;15652:17;;15691:1;15685:4;15682:11;15679:37;;;15696:18;;:::i;:::-;15679:37;15529:194;;;;:::o;15729:191::-;15769:3;15788:20;15806:1;15788:20;:::i;:::-;15783:25;;15822:20;15840:1;15822:20;:::i;:::-;15817:25;;15865:1;15862;15858:9;15851:16;;15886:3;15883:1;15880:10;15877:36;;;15893:18;;:::i;:::-;15877:36;15729:191;;;;:::o;15926:102::-;15968:8;16015:5;16012:1;16008:13;15987:34;;15926:102;;;:::o;16034:848::-;16095:5;16102:4;16126:6;16117:15;;16150:5;16141:14;;16164:712;16185:1;16175:8;16172:15;16164:712;;;16280:4;16275:3;16271:14;16265:4;16262:24;16259:50;;;16289:18;;:::i;:::-;16259:50;16339:1;16329:8;16325:16;16322:451;;;16754:4;16747:5;16743:16;16734:25;;16322:451;16804:4;16798;16794:15;16786:23;;16834:32;16857:8;16834:32;:::i;:::-;16822:44;;16164:712;;;16034:848;;;;;;;:::o;16888:1073::-;16942:5;17133:8;17123:40;;17154:1;17145:10;;17156:5;;17123:40;17182:4;17172:36;;17199:1;17190:10;;17201:5;;17172:36;17268:4;17316:1;17311:27;;;;17352:1;17347:191;;;;17261:277;;17311:27;17329:1;17320:10;;17331:5;;;17347:191;17392:3;17382:8;17379:17;17376:43;;;17399:18;;:::i;:::-;17376:43;17448:8;17445:1;17441:16;17432:25;;17483:3;17476:5;17473:14;17470:40;;;17490:18;;:::i;:::-;17470:40;17523:5;;;17261:277;;17647:2;17637:8;17634:16;17628:3;17622:4;17619:13;17615:36;17597:2;17587:8;17584:16;17579:2;17573:4;17570:12;17566:35;17550:111;17547:246;;;17703:8;17697:4;17693:19;17684:28;;17738:3;17731:5;17728:14;17725:40;;;17745:18;;:::i;:::-;17725:40;17778:5;;17547:246;17818:42;17856:3;17846:8;17840:4;17837:1;17818:42;:::i;:::-;17803:57;;;;17892:4;17887:3;17883:14;17876:5;17873:25;17870:51;;;17901:18;;:::i;:::-;17870:51;17950:4;17943:5;17939:16;17930:25;;16888:1073;;;;;;:::o;17967:281::-;18025:5;18049:23;18067:4;18049:23;:::i;:::-;18041:31;;18093:25;18109:8;18093:25;:::i;:::-;18081:37;;18137:104;18174:66;18164:8;18158:4;18137:104;:::i;:::-;18128:113;;17967:281;;;;:::o;18254:410::-;18294:7;18317:20;18335:1;18317:20;:::i;:::-;18312:25;;18351:20;18369:1;18351:20;:::i;:::-;18346:25;;18406:1;18403;18399:9;18428:30;18446:11;18428:30;:::i;:::-;18417:41;;18607:1;18598:7;18594:15;18591:1;18588:22;18568:1;18561:9;18541:83;18518:139;;18637:18;;:::i;:::-;18518:139;18302:362;18254:410;;;;:::o;18670:179::-;18810:31;18806:1;18798:6;18794:14;18787:55;18670:179;:::o;18855:366::-;18997:3;19018:67;19082:2;19077:3;19018:67;:::i;:::-;19011:74;;19094:93;19183:3;19094:93;:::i;:::-;19212:2;19207:3;19203:12;19196:19;;18855:366;;;:::o;19227:419::-;19393:4;19431:2;19420:9;19416:18;19408:26;;19480:9;19474:4;19470:20;19466:1;19455:9;19451:17;19444:47;19508:131;19634:4;19508:131;:::i;:::-;19500:139;;19227:419;;;:::o;19652:176::-;19792:28;19788:1;19780:6;19776:14;19769:52;19652:176;:::o;19834:366::-;19976:3;19997:67;20061:2;20056:3;19997:67;:::i;:::-;19990:74;;20073:93;20162:3;20073:93;:::i;:::-;20191:2;20186:3;20182:12;20175:19;;19834:366;;;:::o;20206:419::-;20372:4;20410:2;20399:9;20395:18;20387:26;;20459:9;20453:4;20449:20;20445:1;20434:9;20430:17;20423:47;20487:131;20613:4;20487:131;:::i;:::-;20479:139;;20206:419;;;:::o;20631:332::-;20752:4;20790:2;20779:9;20775:18;20767:26;;20803:71;20871:1;20860:9;20856:17;20847:6;20803:71;:::i;:::-;20884:72;20952:2;20941:9;20937:18;20928:6;20884:72;:::i;:::-;20631:332;;;;;:::o;20969:137::-;21023:5;21054:6;21048:13;21039:22;;21070:30;21094:5;21070:30;:::i;:::-;20969:137;;;;:::o;21112:345::-;21179:6;21228:2;21216:9;21207:7;21203:23;21199:32;21196:119;;;21234:79;;:::i;:::-;21196:119;21354:1;21379:61;21432:7;21423:6;21412:9;21408:22;21379:61;:::i;:::-;21369:71;;21325:125;21112:345;;;;:::o;21463:179::-;21603:31;21599:1;21591:6;21587:14;21580:55;21463:179;:::o;21648:366::-;21790:3;21811:67;21875:2;21870:3;21811:67;:::i;:::-;21804:74;;21887:93;21976:3;21887:93;:::i;:::-;22005:2;22000:3;21996:12;21989:19;;21648:366;;;:::o;22020:419::-;22186:4;22224:2;22213:9;22209:18;22201:26;;22273:9;22267:4;22263:20;22259:1;22248:9;22244:17;22237:47;22301:131;22427:4;22301:131;:::i;:::-;22293:139;;22020:419;;;:::o;22445:224::-;22585:34;22581:1;22573:6;22569:14;22562:58;22654:7;22649:2;22641:6;22637:15;22630:32;22445:224;:::o;22675:366::-;22817:3;22838:67;22902:2;22897:3;22838:67;:::i;:::-;22831:74;;22914:93;23003:3;22914:93;:::i;:::-;23032:2;23027:3;23023:12;23016:19;;22675:366;;;:::o;23047:419::-;23213:4;23251:2;23240:9;23236:18;23228:26;;23300:9;23294:4;23290:20;23286:1;23275:9;23271:17;23264:47;23328:131;23454:4;23328:131;:::i;:::-;23320:139;;23047:419;;;:::o;23472:231::-;23612:34;23608:1;23600:6;23596:14;23589:58;23681:14;23676:2;23668:6;23664:15;23657:39;23472:231;:::o;23709:366::-;23851:3;23872:67;23936:2;23931:3;23872:67;:::i;:::-;23865:74;;23948:93;24037:3;23948:93;:::i;:::-;24066:2;24061:3;24057:12;24050:19;;23709:366;;;:::o;24081:419::-;24247:4;24285:2;24274:9;24270:18;24262:26;;24334:9;24328:4;24324:20;24320:1;24309:9;24305:17;24298:47;24362:131;24488:4;24362:131;:::i;:::-;24354:139;;24081:419;;;:::o;24506:224::-;24646:34;24642:1;24634:6;24630:14;24623:58;24715:7;24710:2;24702:6;24698:15;24691:32;24506:224;:::o;24736:366::-;24878:3;24899:67;24963:2;24958:3;24899:67;:::i;:::-;24892:74;;24975:93;25064:3;24975:93;:::i;:::-;25093:2;25088:3;25084:12;25077:19;;24736:366;;;:::o;25108:419::-;25274:4;25312:2;25301:9;25297:18;25289:26;;25361:9;25355:4;25351:20;25347:1;25336:9;25332:17;25325:47;25389:131;25515:4;25389:131;:::i;:::-;25381:139;;25108:419;;;:::o;25533:178::-;25673:30;25669:1;25661:6;25657:14;25650:54;25533:178;:::o;25717:366::-;25859:3;25880:67;25944:2;25939:3;25880:67;:::i;:::-;25873:74;;25956:93;26045:3;25956:93;:::i;:::-;26074:2;26069:3;26065:12;26058:19;;25717:366;;;:::o;26089:419::-;26255:4;26293:2;26282:9;26278:18;26270:26;;26342:9;26336:4;26332:20;26328:1;26317:9;26313:17;26306:47;26370:131;26496:4;26370:131;:::i;:::-;26362:139;;26089:419;;;:::o;26514:225::-;26654:34;26650:1;26642:6;26638:14;26631:58;26723:8;26718:2;26710:6;26706:15;26699:33;26514:225;:::o;26745:366::-;26887:3;26908:67;26972:2;26967:3;26908:67;:::i;:::-;26901:74;;26984:93;27073:3;26984:93;:::i;:::-;27102:2;27097:3;27093:12;27086:19;;26745:366;;;:::o;27117:419::-;27283:4;27321:2;27310:9;27306:18;27298:26;;27370:9;27364:4;27360:20;27356:1;27345:9;27341:17;27334:47;27398:131;27524:4;27398:131;:::i;:::-;27390:139;;27117:419;;;:::o;27542:223::-;27682:34;27678:1;27670:6;27666:14;27659:58;27751:6;27746:2;27738:6;27734:15;27727:31;27542:223;:::o;27771:366::-;27913:3;27934:67;27998:2;27993:3;27934:67;:::i;:::-;27927:74;;28010:93;28099:3;28010:93;:::i;:::-;28128:2;28123:3;28119:12;28112:19;;27771:366;;;:::o;28143:419::-;28309:4;28347:2;28336:9;28332:18;28324:26;;28396:9;28390:4;28386:20;28382:1;28371:9;28367:17;28360:47;28424:131;28550:4;28424:131;:::i;:::-;28416:139;;28143:419;;;:::o;28568:221::-;28708:34;28704:1;28696:6;28692:14;28685:58;28777:4;28772:2;28764:6;28760:15;28753:29;28568:221;:::o;28795:366::-;28937:3;28958:67;29022:2;29017:3;28958:67;:::i;:::-;28951:74;;29034:93;29123:3;29034:93;:::i;:::-;29152:2;29147:3;29143:12;29136:19;;28795:366;;;:::o;29167:419::-;29333:4;29371:2;29360:9;29356:18;29348:26;;29420:9;29414:4;29410:20;29406:1;29395:9;29391:17;29384:47;29448:131;29574:4;29448:131;:::i;:::-;29440:139;;29167:419;;;:::o;29592:228::-;29732:34;29728:1;29720:6;29716:14;29709:58;29801:11;29796:2;29788:6;29784:15;29777:36;29592:228;:::o;29826:366::-;29968:3;29989:67;30053:2;30048:3;29989:67;:::i;:::-;29982:74;;30065:93;30154:3;30065:93;:::i;:::-;30183:2;30178:3;30174:12;30167:19;;29826:366;;;:::o;30198:419::-;30364:4;30402:2;30391:9;30387:18;30379:26;;30451:9;30445:4;30441:20;30437:1;30426:9;30422:17;30415:47;30479:131;30605:4;30479:131;:::i;:::-;30471:139;;30198:419;;;:::o;30623:169::-;30763:21;30759:1;30751:6;30747:14;30740:45;30623:169;:::o;30798:366::-;30940:3;30961:67;31025:2;31020:3;30961:67;:::i;:::-;30954:74;;31037:93;31126:3;31037:93;:::i;:::-;31155:2;31150:3;31146:12;31139:19;;30798:366;;;:::o;31170:419::-;31336:4;31374:2;31363:9;31359:18;31351:26;;31423:9;31417:4;31413:20;31409:1;31398:9;31394:17;31387:47;31451:131;31577:4;31451:131;:::i;:::-;31443:139;;31170:419;;;:::o;31595:182::-;31735:34;31731:1;31723:6;31719:14;31712:58;31595:182;:::o;31783:366::-;31925:3;31946:67;32010:2;32005:3;31946:67;:::i;:::-;31939:74;;32022:93;32111:3;32022:93;:::i;:::-;32140:2;32135:3;32131:12;32124:19;;31783:366;;;:::o;32155:419::-;32321:4;32359:2;32348:9;32344:18;32336:26;;32408:9;32402:4;32398:20;32394:1;32383:9;32379:17;32372:47;32436:131;32562:4;32436:131;:::i;:::-;32428:139;;32155:419;;;:::o;32580:180::-;32628:77;32625:1;32618:88;32725:4;32722:1;32715:15;32749:4;32746:1;32739:15;32766:185;32806:1;32823:20;32841:1;32823:20;:::i;:::-;32818:25;;32857:20;32875:1;32857:20;:::i;:::-;32852:25;;32896:1;32886:35;;32901:18;;:::i;:::-;32886:35;32943:1;32940;32936:9;32931:14;;32766:185;;;;:::o;32957:224::-;33097:34;33093:1;33085:6;33081:14;33074:58;33166:7;33161:2;33153:6;33149:15;33142:32;32957:224;:::o;33187:366::-;33329:3;33350:67;33414:2;33409:3;33350:67;:::i;:::-;33343:74;;33426:93;33515:3;33426:93;:::i;:::-;33544:2;33539:3;33535:12;33528:19;;33187:366;;;:::o;33559:419::-;33725:4;33763:2;33752:9;33748:18;33740:26;;33812:9;33806:4;33802:20;33798:1;33787:9;33783:17;33776:47;33840:131;33966:4;33840:131;:::i;:::-;33832:139;;33559:419;;;:::o;33984:222::-;34124:34;34120:1;34112:6;34108:14;34101:58;34193:5;34188:2;34180:6;34176:15;34169:30;33984:222;:::o;34212:366::-;34354:3;34375:67;34439:2;34434:3;34375:67;:::i;:::-;34368:74;;34451:93;34540:3;34451:93;:::i;:::-;34569:2;34564:3;34560:12;34553:19;;34212:366;;;:::o;34584:419::-;34750:4;34788:2;34777:9;34773:18;34765:26;;34837:9;34831:4;34827:20;34823:1;34812:9;34808:17;34801:47;34865:131;34991:4;34865:131;:::i;:::-;34857:139;;34584:419;;;:::o;35009:225::-;35149:34;35145:1;35137:6;35133:14;35126:58;35218:8;35213:2;35205:6;35201:15;35194:33;35009:225;:::o;35240:366::-;35382:3;35403:67;35467:2;35462:3;35403:67;:::i;:::-;35396:74;;35479:93;35568:3;35479:93;:::i;:::-;35597:2;35592:3;35588:12;35581:19;;35240:366;;;:::o;35612:419::-;35778:4;35816:2;35805:9;35801:18;35793:26;;35865:9;35859:4;35855:20;35851:1;35840:9;35836:17;35829:47;35893:131;36019:4;35893:131;:::i;:::-;35885:139;;35612:419;;;:::o;36037:143::-;36094:5;36125:6;36119:13;36110:22;;36141:33;36168:5;36141:33;:::i;:::-;36037:143;;;;:::o;36186:351::-;36256:6;36305:2;36293:9;36284:7;36280:23;36276:32;36273:119;;;36311:79;;:::i;:::-;36273:119;36431:1;36456:64;36512:7;36503:6;36492:9;36488:22;36456:64;:::i;:::-;36446:74;;36402:128;36186:351;;;;:::o;36543:85::-;36588:7;36617:5;36606:16;;36543:85;;;:::o;36634:158::-;36692:9;36725:61;36743:42;36752:32;36778:5;36752:32;:::i;:::-;36743:42;:::i;:::-;36725:61;:::i;:::-;36712:74;;36634:158;;;:::o;36798:147::-;36893:45;36932:5;36893:45;:::i;:::-;36888:3;36881:58;36798:147;;:::o;36951:114::-;37018:6;37052:5;37046:12;37036:22;;36951:114;;;:::o;37071:184::-;37170:11;37204:6;37199:3;37192:19;37244:4;37239:3;37235:14;37220:29;;37071:184;;;;:::o;37261:132::-;37328:4;37351:3;37343:11;;37381:4;37376:3;37372:14;37364:22;;37261:132;;;:::o;37399:108::-;37476:24;37494:5;37476:24;:::i;:::-;37471:3;37464:37;37399:108;;:::o;37513:179::-;37582:10;37603:46;37645:3;37637:6;37603:46;:::i;:::-;37681:4;37676:3;37672:14;37658:28;;37513:179;;;;:::o;37698:113::-;37768:4;37800;37795:3;37791:14;37783:22;;37698:113;;;:::o;37847:732::-;37966:3;37995:54;38043:5;37995:54;:::i;:::-;38065:86;38144:6;38139:3;38065:86;:::i;:::-;38058:93;;38175:56;38225:5;38175:56;:::i;:::-;38254:7;38285:1;38270:284;38295:6;38292:1;38289:13;38270:284;;;38371:6;38365:13;38398:63;38457:3;38442:13;38398:63;:::i;:::-;38391:70;;38484:60;38537:6;38484:60;:::i;:::-;38474:70;;38330:224;38317:1;38314;38310:9;38305:14;;38270:284;;;38274:14;38570:3;38563:10;;37971:608;;;37847:732;;;;:::o;38585:831::-;38848:4;38886:3;38875:9;38871:19;38863:27;;38900:71;38968:1;38957:9;38953:17;38944:6;38900:71;:::i;:::-;38981:80;39057:2;39046:9;39042:18;39033:6;38981:80;:::i;:::-;39108:9;39102:4;39098:20;39093:2;39082:9;39078:18;39071:48;39136:108;39239:4;39230:6;39136:108;:::i;:::-;39128:116;;39254:72;39322:2;39311:9;39307:18;39298:6;39254:72;:::i;:::-;39336:73;39404:3;39393:9;39389:19;39380:6;39336:73;:::i;:::-;38585:831;;;;;;;;:::o;39422:807::-;39671:4;39709:3;39698:9;39694:19;39686:27;;39723:71;39791:1;39780:9;39776:17;39767:6;39723:71;:::i;:::-;39804:72;39872:2;39861:9;39857:18;39848:6;39804:72;:::i;:::-;39886:80;39962:2;39951:9;39947:18;39938:6;39886:80;:::i;:::-;39976;40052:2;40041:9;40037:18;40028:6;39976:80;:::i;:::-;40066:73;40134:3;40123:9;40119:19;40110:6;40066:73;:::i;:::-;40149;40217:3;40206:9;40202:19;40193:6;40149:73;:::i;:::-;39422:807;;;;;;;;;:::o;40235:143::-;40292:5;40323:6;40317:13;40308:22;;40339:33;40366:5;40339:33;:::i;:::-;40235:143;;;;:::o;40384:663::-;40472:6;40480;40488;40537:2;40525:9;40516:7;40512:23;40508:32;40505:119;;;40543:79;;:::i;:::-;40505:119;40663:1;40688:64;40744:7;40735:6;40724:9;40720:22;40688:64;:::i;:::-;40678:74;;40634:128;40801:2;40827:64;40883:7;40874:6;40863:9;40859:22;40827:64;:::i;:::-;40817:74;;40772:129;40940:2;40966:64;41022:7;41013:6;41002:9;40998:22;40966:64;:::i;:::-;40956:74;;40911:129;40384:663;;;;;:::o;41053:179::-;41193:31;41189:1;41181:6;41177:14;41170:55;41053:179;:::o;41238:366::-;41380:3;41401:67;41465:2;41460:3;41401:67;:::i;:::-;41394:74;;41477:93;41566:3;41477:93;:::i;:::-;41595:2;41590:3;41586:12;41579:19;;41238:366;;;:::o;41610:419::-;41776:4;41814:2;41803:9;41799:18;41791:26;;41863:9;41857:4;41853:20;41849:1;41838:9;41834:17;41827:47;41891:131;42017:4;41891:131;:::i;:::-;41883:139;;41610:419;;;:::o;42035:147::-;42136:11;42173:3;42158:18;;42035:147;;;;:::o;42188:114::-;;:::o;42308:398::-;42467:3;42488:83;42569:1;42564:3;42488:83;:::i;:::-;42481:90;;42580:93;42669:3;42580:93;:::i;:::-;42698:1;42693:3;42689:11;42682:18;;42308:398;;;:::o;42712:379::-;42896:3;42918:147;43061:3;42918:147;:::i;:::-;42911:154;;43082:3;43075:10;;42712:379;;;:::o;43097:245::-;43237:34;43233:1;43225:6;43221:14;43214:58;43306:28;43301:2;43293:6;43289:15;43282:53;43097:245;:::o;43348:366::-;43490:3;43511:67;43575:2;43570:3;43511:67;:::i;:::-;43504:74;;43587:93;43676:3;43587:93;:::i;:::-;43705:2;43700:3;43696:12;43689:19;;43348:366;;;:::o;43720:419::-;43886:4;43924:2;43913:9;43909:18;43901:26;;43973:9;43967:4;43963:20;43959:1;43948:9;43944:17;43937:47;44001:131;44127:4;44001:131;:::i;:::-;43993:139;;43720:419;;;:::o

Swarm Source

ipfs://9cecd6abcbb613072b646eed5dde9952fb127de84136a4a745a4f3b3c2ec35ab

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ 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.