ETH Price: $3,576.31 (-0.99%)

Token

ERC-20: Degen Saga (DS)
 

Overview

Max Total Supply

1,000,000,000 DS

Holders

84

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.580113038981562054 DS

Value
$0.00
0xa5d900cda47d9e76cad5343a9466f436cb3323ef
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DegenSaga

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-18
*/

/**

DegenSaga - Revolutionary interactive degen map! This is our story! 

Website - https://degen-saga.com/
Telegram - https://t.me/DegenSaga
Twitter - https://twitter.com/degensaga

You’ve earned your spot in the legendary degen hall of fame.

*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `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");
        unchecked {
            _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");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

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

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

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

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

contract DegenSaga is ERC20, Ownable {
    using SafeMath for uint256;
    event TradingEnabled(uint _block);

    IUniswapV2Router02 public immutable uniswapV2Router;

    address public immutable uniswapV2Pair;
    address public devWallet;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    uint256 public swapTokensAtAmount;
    uint256 public buyDevFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTotalFees;
    uint256 public sellDevFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTotalFees;
    uint256 public maxWallet;

    bool public swapBackEnabled = true;
    bool public limitsInEffect = true;
    bool public tradingActive;
    bool private swapping;

    constructor() ERC20("Degen Saga", "DS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());

        uint256 totalSupply = 1000000000e18;
        maxWallet = totalSupply * 3 / 100;
        swapTokensAtAmount = (totalSupply * 3) / 10000;
        buyDevFee = 14;
        buyLiquidityFee = 1;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        sellDevFee = 14;
        sellLiquidityFee = 1;
        sellTotalFees = sellDevFee + sellLiquidityFee;
        devWallet = owner();

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(address(0x0000), true);

        excludeFromMaxWallet(owner(), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(0xdead), true);
        excludeFromMaxWallet(address(0x0000), true);

        _mint(msg.sender, totalSupply);
    }

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

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

        bool isBuy = from == uniswapV2Pair;
        bool isSell = to == uniswapV2Pair;

        if (!tradingActive && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) require(false, "Trading not started yet");

        if (limitsInEffect && !_isExcludedFromMaxWallet[to] && !swapping) {
            if (isBuy) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded on buy");
            }
            if (!isBuy && !isSell) {
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded on transfer");
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if (canSwap && swapBackEnabled && !swapping && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            swapping = true;
            swapBack();
            swapping = false;
        }

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

        uint256 fees = 0;
        uint256 tokensForLiquidity = 0;

        if (takeFee) {
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity = (fees * sellLiquidityFee) / sellTotalFees;
            }
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity = (fees * buyLiquidityFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }
            if (tokensForLiquidity > 0) {
                super._transfer(address(this), uniswapV2Pair, tokensForLiquidity);
            }

            amount -= fees;
        }

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

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            devWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }
        swapTokensForETH(contractBalance);
    }

    receive() external payable {}

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

    function updateSwapBackEnabled(bool enabled) external onlyOwner {
        swapBackEnabled = enabled;
    }

    function updateBuyFee(uint256 _devFee, uint256 _liquidityFee) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyDevFee + buyLiquidityFee;
        require(buyTotalFees <= 15, "max tax is 15%");
    }

    function updateSellFees(uint256 _devFee, uint256 _liquidityFee) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellDevFee + sellLiquidityFee;
        require(sellTotalFees <= 15, "max tax is 15%");
    }

    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool) {
        require(newAmount >= (totalSupply() * 1) / 100000, "< 0.001% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxWallet(uint256 newAmount) external onlyOwner {
        require(newAmount >= (totalSupply() * 5 / 1000) / 1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newAmount * 1e18;
    }

    function enableTrading() public onlyOwner {
        tradingActive = true;
        emit TradingEnabled(block.number);
    }

    function enableLimits(bool _limitsInEffect) public onlyOwner {
        limitsInEffect = _limitsInEffect;
    }

    function rescue(address token) public onlyOwner {
        ERC20 Token = ERC20(token);
        uint256 balance = Token.balanceOf(address(this));
        if (balance > 0) Token.transfer(_msgSender(), balance);
    }

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

    function excludeFromMaxWallet(address account, bool excluded) public onlyOwner {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    function isExcludedFromMaxWallet(address account) public view returns (bool) {
        return _isExcludedFromMaxWallet[account];
    }

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

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":false,"internalType":"uint256","name":"_block","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_limitsInEffect","type":"bool"}],"name":"enableLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapBackEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055503480156200004757600080fd5b506040518060400160405280600a81526020017f446567656e2053616761000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f44530000000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000cc9291906200090c565b508060049080519060200190620000e59291906200090c565b50505062000108620000fc620004bd60201b60201c565b620004c560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c7919062000a26565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000231573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000257919062000a26565b6040518363ffffffff1660e01b81526004016200027692919062000a69565b6020604051808303816000875af115801562000296573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bc919062000a26565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060006b033b2e3c9fd0803ce80000009050606460038262000311919062000acf565b6200031d919062000b5f565b60108190555061271060038262000335919062000acf565b62000341919062000b5f565b600981905550600e600a819055506001600b81905550600b54600a5462000369919062000b97565b600c81905550600e600d819055506001600e81905550600e54600d5462000391919062000b97565b600f81905550620003a76200058b60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000409620003fb6200058b60201b60201c565b6001620005b560201b60201c565b6200041c306001620005b560201b60201c565b6200043161dead6001620005b560201b60201c565b6200044560006001620005b560201b60201c565b62000467620004596200058b60201b60201c565b60016200069f60201b60201c565b6200047a3060016200069f60201b60201c565b6200048f61dead60016200069f60201b60201c565b620004a3600060016200069f60201b60201c565b620004b533826200078960201b60201c565b505062000d7c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005c5620004bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005eb6200058b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000644576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200063b9062000c55565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b620006af620004bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006d56200058b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200072e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007259062000c55565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620007fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007f39062000cc7565b60405180910390fd5b62000810600083836200090260201b60201c565b806002600082825462000824919062000b97565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200087b919062000b97565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008e2919062000cfa565b60405180910390a3620008fe600083836200090760201b60201c565b5050565b505050565b505050565b8280546200091a9062000d46565b90600052602060002090601f0160209004810192826200093e57600085556200098a565b82601f106200095957805160ff19168380011785556200098a565b828001600101855582156200098a579182015b82811115620009895782518255916020019190600101906200096c565b5b5090506200099991906200099d565b5090565b5b80821115620009b85760008160009055506001016200099e565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620009ee82620009c1565b9050919050565b62000a0081620009e1565b811462000a0c57600080fd5b50565b60008151905062000a2081620009f5565b92915050565b60006020828403121562000a3f5762000a3e620009bc565b5b600062000a4f8482850162000a0f565b91505092915050565b62000a6381620009e1565b82525050565b600060408201905062000a80600083018562000a58565b62000a8f602083018462000a58565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000adc8262000a96565b915062000ae98362000a96565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b255762000b2462000aa0565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000b6c8262000a96565b915062000b798362000a96565b92508262000b8c5762000b8b62000b30565b5b828204905092915050565b600062000ba48262000a96565b915062000bb18362000a96565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000be95762000be862000aa0565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c3d60208362000bf4565b915062000c4a8262000c05565b602082019050919050565b6000602082019050818103600083015262000c708162000c2e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000caf601f8362000bf4565b915062000cbc8262000c77565b602082019050919050565b6000602082019050818103600083015262000ce28162000ca0565b9050919050565b62000cf48162000a96565b82525050565b600060208201905062000d11600083018462000ce9565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d5f57607f821691505b6020821081141562000d765762000d7562000d17565b5b50919050565b60805160a051613c5d62000de160003960008181610ef601528181611e5801528181611eab0152818161219e015281816123a7015281816124550152612522015260008181610b4c015281816129b401528181612a950152612abc0152613c5d6000f3fe60806040526004361061024a5760003560e01c80638a8c523c11610139578063c0246668116100b6578063e2f456051161007a578063e2f45605146108b3578063f11a24d3146108de578063f2fde38b14610909578063f637434214610932578063f8b45b051461095d578063f931d9d21461098857610251565b8063c0246668146107bc578063d257b34f146107e5578063d2fcc00114610822578063d85ba0631461084b578063dd62ed3e1461087657610251565b8063a0d82dc5116100fd578063a0d82dc5146106c3578063a457c2d7146106ee578063a5cdee051461072b578063a9059cbb14610754578063bbc0c7421461079157610251565b80638a8c523c146106005780638da5cb5b146106175780638ea5220f1461064257806395d89b411461066d5780639c3b4fdc1461069857610251565b806349bd5a5e116101c75780636a486a8e1161018b5780636a486a8e1461051b5780636dd3d39f1461054657806370a0823114610583578063715018a6146105c0578063839006f2146105d757610251565b806349bd5a5e146104345780634a62bb651461045f5780634fbee1931461048a578063610e34b9146104c757806364c0a2f8146104f057610251565b80631816467f1161020e5780631816467f1461033d5780631c499ab01461036657806323b872dd1461038f578063313ce567146103cc57806339509351146103f757610251565b806302dbd8f81461025657806306fdde031461027f578063095ea7b3146102aa5780631694505e146102e757806318160ddd1461031257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612baf565b6109b1565b005b34801561028b57600080fd5b50610294610a9a565b6040516102a19190612c88565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612d08565b610b2c565b6040516102de9190612d63565b60405180910390f35b3480156102f357600080fd5b506102fc610b4a565b6040516103099190612ddd565b60405180910390f35b34801561031e57600080fd5b50610327610b6e565b6040516103349190612e07565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190612e22565b610b78565b005b34801561037257600080fd5b5061038d60048036038101906103889190612e4f565b610c38565b005b34801561039b57600080fd5b506103b660048036038101906103b19190612e7c565b610d47565b6040516103c39190612d63565b60405180910390f35b3480156103d857600080fd5b506103e1610e3f565b6040516103ee9190612eeb565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612d08565b610e48565b60405161042b9190612d63565b60405180910390f35b34801561044057600080fd5b50610449610ef4565b6040516104569190612f15565b60405180910390f35b34801561046b57600080fd5b50610474610f18565b6040516104819190612d63565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190612e22565b610f2b565b6040516104be9190612d63565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190612baf565b610f81565b005b3480156104fc57600080fd5b5061050561106b565b6040516105129190612d63565b60405180910390f35b34801561052757600080fd5b5061053061107e565b60405161053d9190612e07565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612e22565b611084565b60405161057a9190612d63565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612e22565b6110da565b6040516105b79190612e07565b60405180910390f35b3480156105cc57600080fd5b506105d5611122565b005b3480156105e357600080fd5b506105fe60048036038101906105f99190612e22565b6111aa565b005b34801561060c57600080fd5b5061061561133e565b005b34801561062357600080fd5b5061062c61140e565b6040516106399190612f15565b60405180910390f35b34801561064e57600080fd5b50610657611438565b6040516106649190612f15565b60405180910390f35b34801561067957600080fd5b5061068261145e565b60405161068f9190612c88565b60405180910390f35b3480156106a457600080fd5b506106ad6114f0565b6040516106ba9190612e07565b60405180910390f35b3480156106cf57600080fd5b506106d86114f6565b6040516106e59190612e07565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190612d08565b6114fc565b6040516107229190612d63565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190612f5c565b6115e7565b005b34801561076057600080fd5b5061077b60048036038101906107769190612d08565b611680565b6040516107889190612d63565b60405180910390f35b34801561079d57600080fd5b506107a661169e565b6040516107b39190612d63565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190612f89565b6116b1565b005b3480156107f157600080fd5b5061080c60048036038101906108079190612e4f565b611788565b6040516108199190612d63565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190612f89565b61187a565b005b34801561085757600080fd5b50610860611951565b60405161086d9190612e07565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190612fc9565b611957565b6040516108aa9190612e07565b60405180910390f35b3480156108bf57600080fd5b506108c86119de565b6040516108d59190612e07565b60405180910390f35b3480156108ea57600080fd5b506108f36119e4565b6040516109009190612e07565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190612e22565b6119ea565b005b34801561093e57600080fd5b50610947611ae2565b6040516109549190612e07565b60405180910390f35b34801561096957600080fd5b50610972611ae8565b60405161097f9190612e07565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190612f5c565b611aee565b005b6109b9611b87565b73ffffffffffffffffffffffffffffffffffffffff166109d761140e565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490613055565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610a4b91906130a4565b600f81905550600f80541115610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90613146565b60405180910390fd5b5050565b606060038054610aa990613195565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad590613195565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b6000610b40610b39611b87565b8484611b8f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610b80611b87565b73ffffffffffffffffffffffffffffffffffffffff16610b9e61140e565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613055565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c40611b87565b73ffffffffffffffffffffffffffffffffffffffff16610c5e61140e565b73ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab90613055565b60405180910390fd5b670de0b6b3a76400006103e86005610cca610b6e565b610cd491906131c7565b610cde9190613250565b610ce89190613250565b811015610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d21906132f3565b60405180910390fd5b670de0b6b3a764000081610d3e91906131c7565b60108190555050565b6000610d54848484611d5a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d9f611b87565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1690613385565b60405180910390fd5b610e3385610e2b611b87565b858403611b8f565b60019150509392505050565b60006012905090565b6000610eea610e55611b87565b848460016000610e63611b87565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee591906130a4565b611b8f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160019054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f89611b87565b73ffffffffffffffffffffffffffffffffffffffff16610fa761140e565b73ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490613055565b60405180910390fd5b81600a8190555080600b81905550600b54600a5461101b91906130a4565b600c81905550600f600c541115611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613146565b60405180910390fd5b5050565b601160009054906101000a900460ff1681565b600f5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112a611b87565b73ffffffffffffffffffffffffffffffffffffffff1661114861140e565b73ffffffffffffffffffffffffffffffffffffffff161461119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613055565b60405180910390fd5b6111a8600061256f565b565b6111b2611b87565b73ffffffffffffffffffffffffffffffffffffffff166111d061140e565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613055565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112669190612f15565b602060405180830381865afa158015611283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a791906133ba565b90506000811115611339578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6112d6611b87565b836040518363ffffffff1660e01b81526004016112f49291906133e7565b6020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113379190613425565b505b505050565b611346611b87565b73ffffffffffffffffffffffffffffffffffffffff1661136461140e565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190613055565b60405180910390fd5b6001601160026101000a81548160ff0219169083151502179055507fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923436040516114049190612e07565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461146d90613195565b80601f016020809104026020016040519081016040528092919081815260200182805461149990613195565b80156114e65780601f106114bb576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116114c957829003601f168201915b5050505050905090565b600a5481565b600d5481565b6000806001600061150b611b87565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf906134c4565b60405180910390fd5b6115dc6115d3611b87565b85858403611b8f565b600191505092915050565b6115ef611b87565b73ffffffffffffffffffffffffffffffffffffffff1661160d61140e565b73ffffffffffffffffffffffffffffffffffffffff1614611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90613055565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600061169461168d611b87565b8484611d5a565b6001905092915050565b601160029054906101000a900460ff1681565b6116b9611b87565b73ffffffffffffffffffffffffffffffffffffffff166116d761140e565b73ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490613055565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611792611b87565b73ffffffffffffffffffffffffffffffffffffffff166117b061140e565b73ffffffffffffffffffffffffffffffffffffffff1614611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd90613055565b60405180910390fd5b620186a06001611814610b6e565b61181e91906131c7565b6118289190613250565b82101561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613530565b60405180910390fd5b8160098190555060019050919050565b611882611b87565b73ffffffffffffffffffffffffffffffffffffffff166118a061140e565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613055565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600b5481565b6119f2611b87565b73ffffffffffffffffffffffffffffffffffffffff16611a1061140e565b73ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90613055565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd906135c2565b60405180910390fd5b611adf8161256f565b50565b600e5481565b60105481565b611af6611b87565b73ffffffffffffffffffffffffffffffffffffffff16611b1461140e565b73ffffffffffffffffffffffffffffffffffffffff1614611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190613055565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c66906136e6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d4d9190612e07565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190613778565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e319061380a565b60405180910390fd5b6000811415611e5457611e4f83836000612635565b61256a565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601160029054906101000a900460ff16158015611f615750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611fb75750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ffe576000611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490613876565b60405180910390fd5b5b601160019054906101000a900460ff1680156120645750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561207d5750601160039054906101000a900460ff16155b1561214c5781156120e157601054612094856110da565b8461209f91906130a4565b11156120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906138e2565b60405180910390fd5b5b811580156120ed575080155b1561214b576010546120fe856110da565b8461210991906130a4565b111561214a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121419061394e565b60405180910390fd5b5b5b6000612157306110da565b90506000600954821015905080801561217c5750601160009054906101000a900460ff165b80156121955750601160039054906101000a900460ff16155b80156121ec57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156122425750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122985750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122dc576001601160036101000a81548160ff0219169083151502179055506122c06128b6565b6000601160036101000a81548160ff0219169083151502179055505b6000601160039054906101000a900460ff16159050600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123925750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561239c57600090505b6000808215612557577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561240257506000600f54115b156124535761242f6064612421600f548b6128df90919063ffffffff16565b6128f590919063ffffffff16565b9150600f54600e548361244291906131c7565b61244c9190613250565b90506124fe565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156124b057506000600c54115b156124fd576124dd60646124cf600c548b6128df90919063ffffffff16565b6128f590919063ffffffff16565b9150600c54600b54836124f091906131c7565b6124fa9190613250565b90505b5b6000821115612513576125128a3084612635565b5b600081111561254857612547307f000000000000000000000000000000000000000000000000000000000000000083612635565b5b8188612554919061396e565b97505b6125628a8a8a612635565b505050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c90613778565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c9061380a565b60405180910390fd5b61272083838361290b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d90613a14565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461283991906130a4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161289d9190612e07565b60405180910390a36128b0848484612910565b50505050565b60006128c1306110da565b905060008114156128d257506128dd565b6128db81612915565b505b565b600081836128ed91906131c7565b905092915050565b600081836129039190613250565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561293257612931613a34565b5b6040519080825280602002602001820160405280156129605781602001602082028036833780820191505090505b509050308160008151811061297857612977613a63565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a419190613aa7565b81600181518110612a5557612a54613a63565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aba307f000000000000000000000000000000000000000000000000000000000000000084611b8f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b3e959493929190613bcd565b600060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612b8c81612b79565b8114612b9757600080fd5b50565b600081359050612ba981612b83565b92915050565b60008060408385031215612bc657612bc5612b74565b5b6000612bd485828601612b9a565b9250506020612be585828601612b9a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c29578082015181840152602081019050612c0e565b83811115612c38576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c5a82612bef565b612c648185612bfa565b9350612c74818560208601612c0b565b612c7d81612c3e565b840191505092915050565b60006020820190508181036000830152612ca28184612c4f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cd582612caa565b9050919050565b612ce581612cca565b8114612cf057600080fd5b50565b600081359050612d0281612cdc565b92915050565b60008060408385031215612d1f57612d1e612b74565b5b6000612d2d85828601612cf3565b9250506020612d3e85828601612b9a565b9150509250929050565b60008115159050919050565b612d5d81612d48565b82525050565b6000602082019050612d786000830184612d54565b92915050565b6000819050919050565b6000612da3612d9e612d9984612caa565b612d7e565b612caa565b9050919050565b6000612db582612d88565b9050919050565b6000612dc782612daa565b9050919050565b612dd781612dbc565b82525050565b6000602082019050612df26000830184612dce565b92915050565b612e0181612b79565b82525050565b6000602082019050612e1c6000830184612df8565b92915050565b600060208284031215612e3857612e37612b74565b5b6000612e4684828501612cf3565b91505092915050565b600060208284031215612e6557612e64612b74565b5b6000612e7384828501612b9a565b91505092915050565b600080600060608486031215612e9557612e94612b74565b5b6000612ea386828701612cf3565b9350506020612eb486828701612cf3565b9250506040612ec586828701612b9a565b9150509250925092565b600060ff82169050919050565b612ee581612ecf565b82525050565b6000602082019050612f006000830184612edc565b92915050565b612f0f81612cca565b82525050565b6000602082019050612f2a6000830184612f06565b92915050565b612f3981612d48565b8114612f4457600080fd5b50565b600081359050612f5681612f30565b92915050565b600060208284031215612f7257612f71612b74565b5b6000612f8084828501612f47565b91505092915050565b60008060408385031215612fa057612f9f612b74565b5b6000612fae85828601612cf3565b9250506020612fbf85828601612f47565b9150509250929050565b60008060408385031215612fe057612fdf612b74565b5b6000612fee85828601612cf3565b9250506020612fff85828601612cf3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061303f602083612bfa565b915061304a82613009565b602082019050919050565b6000602082019050818103600083015261306e81613032565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130af82612b79565b91506130ba83612b79565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130ef576130ee613075565b5b828201905092915050565b7f6d61782074617820697320313525000000000000000000000000000000000000600082015250565b6000613130600e83612bfa565b915061313b826130fa565b602082019050919050565b6000602082019050818103600083015261315f81613123565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131ad57607f821691505b602082108114156131c1576131c0613166565b5b50919050565b60006131d282612b79565b91506131dd83612b79565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561321657613215613075565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061325b82612b79565b915061326683612b79565b92508261327657613275613221565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006132dd602483612bfa565b91506132e882613281565b604082019050919050565b6000602082019050818103600083015261330c816132d0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061336f602883612bfa565b915061337a82613313565b604082019050919050565b6000602082019050818103600083015261339e81613362565b9050919050565b6000815190506133b481612b83565b92915050565b6000602082840312156133d0576133cf612b74565b5b60006133de848285016133a5565b91505092915050565b60006040820190506133fc6000830185612f06565b6134096020830184612df8565b9392505050565b60008151905061341f81612f30565b92915050565b60006020828403121561343b5761343a612b74565b5b600061344984828501613410565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134ae602583612bfa565b91506134b982613452565b604082019050919050565b600060208201905081810360008301526134dd816134a1565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b600061351a601683612bfa565b9150613525826134e4565b602082019050919050565b600060208201905081810360008301526135498161350d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135ac602683612bfa565b91506135b782613550565b604082019050919050565b600060208201905081810360008301526135db8161359f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061363e602483612bfa565b9150613649826135e2565b604082019050919050565b6000602082019050818103600083015261366d81613631565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136d0602283612bfa565b91506136db82613674565b604082019050919050565b600060208201905081810360008301526136ff816136c3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613762602583612bfa565b915061376d82613706565b604082019050919050565b6000602082019050818103600083015261379181613755565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137f4602383612bfa565b91506137ff82613798565b604082019050919050565b60006020820190508181036000830152613823816137e7565b9050919050565b7f54726164696e67206e6f74207374617274656420796574000000000000000000600082015250565b6000613860601783612bfa565b915061386b8261382a565b602082019050919050565b6000602082019050818103600083015261388f81613853565b9050919050565b7f4d61782077616c6c6574206578636565646564206f6e20627579000000000000600082015250565b60006138cc601a83612bfa565b91506138d782613896565b602082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b7f4d61782077616c6c6574206578636565646564206f6e207472616e7366657200600082015250565b6000613938601f83612bfa565b915061394382613902565b602082019050919050565b600060208201905081810360008301526139678161392b565b9050919050565b600061397982612b79565b915061398483612b79565b92508282101561399757613996613075565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006139fe602683612bfa565b9150613a09826139a2565b604082019050919050565b60006020820190508181036000830152613a2d816139f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613aa181612cdc565b92915050565b600060208284031215613abd57613abc612b74565b5b6000613acb84828501613a92565b91505092915050565b6000819050919050565b6000613af9613af4613aef84613ad4565b612d7e565b612b79565b9050919050565b613b0981613ade565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b4481612cca565b82525050565b6000613b568383613b3b565b60208301905092915050565b6000602082019050919050565b6000613b7a82613b0f565b613b848185613b1a565b9350613b8f83613b2b565b8060005b83811015613bc0578151613ba78882613b4a565b9750613bb283613b62565b925050600181019050613b93565b5085935050505092915050565b600060a082019050613be26000830188612df8565b613bef6020830187613b00565b8181036040830152613c018186613b6f565b9050613c106060830185612f06565b613c1d6080830184612df8565b969550505050505056fea26469706673582212209eebb9bee3d6c176473100d346c37f67072446c6446fc2a7a88ecc200daf9d0464736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80638a8c523c11610139578063c0246668116100b6578063e2f456051161007a578063e2f45605146108b3578063f11a24d3146108de578063f2fde38b14610909578063f637434214610932578063f8b45b051461095d578063f931d9d21461098857610251565b8063c0246668146107bc578063d257b34f146107e5578063d2fcc00114610822578063d85ba0631461084b578063dd62ed3e1461087657610251565b8063a0d82dc5116100fd578063a0d82dc5146106c3578063a457c2d7146106ee578063a5cdee051461072b578063a9059cbb14610754578063bbc0c7421461079157610251565b80638a8c523c146106005780638da5cb5b146106175780638ea5220f1461064257806395d89b411461066d5780639c3b4fdc1461069857610251565b806349bd5a5e116101c75780636a486a8e1161018b5780636a486a8e1461051b5780636dd3d39f1461054657806370a0823114610583578063715018a6146105c0578063839006f2146105d757610251565b806349bd5a5e146104345780634a62bb651461045f5780634fbee1931461048a578063610e34b9146104c757806364c0a2f8146104f057610251565b80631816467f1161020e5780631816467f1461033d5780631c499ab01461036657806323b872dd1461038f578063313ce567146103cc57806339509351146103f757610251565b806302dbd8f81461025657806306fdde031461027f578063095ea7b3146102aa5780631694505e146102e757806318160ddd1461031257610251565b3661025157005b600080fd5b34801561026257600080fd5b5061027d60048036038101906102789190612baf565b6109b1565b005b34801561028b57600080fd5b50610294610a9a565b6040516102a19190612c88565b60405180910390f35b3480156102b657600080fd5b506102d160048036038101906102cc9190612d08565b610b2c565b6040516102de9190612d63565b60405180910390f35b3480156102f357600080fd5b506102fc610b4a565b6040516103099190612ddd565b60405180910390f35b34801561031e57600080fd5b50610327610b6e565b6040516103349190612e07565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190612e22565b610b78565b005b34801561037257600080fd5b5061038d60048036038101906103889190612e4f565b610c38565b005b34801561039b57600080fd5b506103b660048036038101906103b19190612e7c565b610d47565b6040516103c39190612d63565b60405180910390f35b3480156103d857600080fd5b506103e1610e3f565b6040516103ee9190612eeb565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190612d08565b610e48565b60405161042b9190612d63565b60405180910390f35b34801561044057600080fd5b50610449610ef4565b6040516104569190612f15565b60405180910390f35b34801561046b57600080fd5b50610474610f18565b6040516104819190612d63565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190612e22565b610f2b565b6040516104be9190612d63565b60405180910390f35b3480156104d357600080fd5b506104ee60048036038101906104e99190612baf565b610f81565b005b3480156104fc57600080fd5b5061050561106b565b6040516105129190612d63565b60405180910390f35b34801561052757600080fd5b5061053061107e565b60405161053d9190612e07565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190612e22565b611084565b60405161057a9190612d63565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a59190612e22565b6110da565b6040516105b79190612e07565b60405180910390f35b3480156105cc57600080fd5b506105d5611122565b005b3480156105e357600080fd5b506105fe60048036038101906105f99190612e22565b6111aa565b005b34801561060c57600080fd5b5061061561133e565b005b34801561062357600080fd5b5061062c61140e565b6040516106399190612f15565b60405180910390f35b34801561064e57600080fd5b50610657611438565b6040516106649190612f15565b60405180910390f35b34801561067957600080fd5b5061068261145e565b60405161068f9190612c88565b60405180910390f35b3480156106a457600080fd5b506106ad6114f0565b6040516106ba9190612e07565b60405180910390f35b3480156106cf57600080fd5b506106d86114f6565b6040516106e59190612e07565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190612d08565b6114fc565b6040516107229190612d63565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190612f5c565b6115e7565b005b34801561076057600080fd5b5061077b60048036038101906107769190612d08565b611680565b6040516107889190612d63565b60405180910390f35b34801561079d57600080fd5b506107a661169e565b6040516107b39190612d63565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190612f89565b6116b1565b005b3480156107f157600080fd5b5061080c60048036038101906108079190612e4f565b611788565b6040516108199190612d63565b60405180910390f35b34801561082e57600080fd5b5061084960048036038101906108449190612f89565b61187a565b005b34801561085757600080fd5b50610860611951565b60405161086d9190612e07565b60405180910390f35b34801561088257600080fd5b5061089d60048036038101906108989190612fc9565b611957565b6040516108aa9190612e07565b60405180910390f35b3480156108bf57600080fd5b506108c86119de565b6040516108d59190612e07565b60405180910390f35b3480156108ea57600080fd5b506108f36119e4565b6040516109009190612e07565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190612e22565b6119ea565b005b34801561093e57600080fd5b50610947611ae2565b6040516109549190612e07565b60405180910390f35b34801561096957600080fd5b50610972611ae8565b60405161097f9190612e07565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190612f5c565b611aee565b005b6109b9611b87565b73ffffffffffffffffffffffffffffffffffffffff166109d761140e565b73ffffffffffffffffffffffffffffffffffffffff1614610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2490613055565b60405180910390fd5b81600d8190555080600e81905550600e54600d54610a4b91906130a4565b600f81905550600f80541115610a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8d90613146565b60405180910390fd5b5050565b606060038054610aa990613195565b80601f0160208091040260200160405190810160405280929190818152602001828054610ad590613195565b8015610b225780601f10610af757610100808354040283529160200191610b22565b820191906000526020600020905b815481529060010190602001808311610b0557829003601f168201915b5050505050905090565b6000610b40610b39611b87565b8484611b8f565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610b80611b87565b73ffffffffffffffffffffffffffffffffffffffff16610b9e61140e565b73ffffffffffffffffffffffffffffffffffffffff1614610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90613055565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610c40611b87565b73ffffffffffffffffffffffffffffffffffffffff16610c5e61140e565b73ffffffffffffffffffffffffffffffffffffffff1614610cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cab90613055565b60405180910390fd5b670de0b6b3a76400006103e86005610cca610b6e565b610cd491906131c7565b610cde9190613250565b610ce89190613250565b811015610d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d21906132f3565b60405180910390fd5b670de0b6b3a764000081610d3e91906131c7565b60108190555050565b6000610d54848484611d5a565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d9f611b87565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1690613385565b60405180910390fd5b610e3385610e2b611b87565b858403611b8f565b60019150509392505050565b60006012905090565b6000610eea610e55611b87565b848460016000610e63611b87565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ee591906130a4565b611b8f565b6001905092915050565b7f00000000000000000000000057691961d9fa61764416fb7e6b406c9e7d9fc22581565b601160019054906101000a900460ff1681565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610f89611b87565b73ffffffffffffffffffffffffffffffffffffffff16610fa761140e565b73ffffffffffffffffffffffffffffffffffffffff1614610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff490613055565b60405180910390fd5b81600a8190555080600b81905550600b54600a5461101b91906130a4565b600c81905550600f600c541115611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90613146565b60405180910390fd5b5050565b601160009054906101000a900460ff1681565b600f5481565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61112a611b87565b73ffffffffffffffffffffffffffffffffffffffff1661114861140e565b73ffffffffffffffffffffffffffffffffffffffff161461119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590613055565b60405180910390fd5b6111a8600061256f565b565b6111b2611b87565b73ffffffffffffffffffffffffffffffffffffffff166111d061140e565b73ffffffffffffffffffffffffffffffffffffffff1614611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613055565b60405180910390fd5b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112669190612f15565b602060405180830381865afa158015611283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a791906133ba565b90506000811115611339578173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6112d6611b87565b836040518363ffffffff1660e01b81526004016112f49291906133e7565b6020604051808303816000875af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113379190613425565b505b505050565b611346611b87565b73ffffffffffffffffffffffffffffffffffffffff1661136461140e565b73ffffffffffffffffffffffffffffffffffffffff16146113ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b190613055565b60405180910390fd5b6001601160026101000a81548160ff0219169083151502179055507fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e923436040516114049190612e07565b60405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606004805461146d90613195565b80601f016020809104026020016040519081016040528092919081815260200182805461149990613195565b80156114e65780601f106114bb576101008083540402835291602001916114e6565b820191906000526020600020905b8154815290600101906020018083116114c957829003601f168201915b5050505050905090565b600a5481565b600d5481565b6000806001600061150b611b87565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf906134c4565b60405180910390fd5b6115dc6115d3611b87565b85858403611b8f565b600191505092915050565b6115ef611b87565b73ffffffffffffffffffffffffffffffffffffffff1661160d61140e565b73ffffffffffffffffffffffffffffffffffffffff1614611663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165a90613055565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b600061169461168d611b87565b8484611d5a565b6001905092915050565b601160029054906101000a900460ff1681565b6116b9611b87565b73ffffffffffffffffffffffffffffffffffffffff166116d761140e565b73ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490613055565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611792611b87565b73ffffffffffffffffffffffffffffffffffffffff166117b061140e565b73ffffffffffffffffffffffffffffffffffffffff1614611806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fd90613055565b60405180910390fd5b620186a06001611814610b6e565b61181e91906131c7565b6118289190613250565b82101561186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613530565b60405180910390fd5b8160098190555060019050919050565b611882611b87565b73ffffffffffffffffffffffffffffffffffffffff166118a061140e565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed90613055565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600b5481565b6119f2611b87565b73ffffffffffffffffffffffffffffffffffffffff16611a1061140e565b73ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d90613055565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611acd906135c2565b60405180910390fd5b611adf8161256f565b50565b600e5481565b60105481565b611af6611b87565b73ffffffffffffffffffffffffffffffffffffffff16611b1461140e565b73ffffffffffffffffffffffffffffffffffffffff1614611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6190613055565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf690613654565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c66906136e6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d4d9190612e07565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190613778565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e319061380a565b60405180910390fd5b6000811415611e5457611e4f83836000612635565b61256a565b60007f00000000000000000000000057691961d9fa61764416fb7e6b406c9e7d9fc22573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614905060007f00000000000000000000000057691961d9fa61764416fb7e6b406c9e7d9fc22573ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050601160029054906101000a900460ff16158015611f615750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611fb75750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ffe576000611ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff490613876565b60405180910390fd5b5b601160019054906101000a900460ff1680156120645750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561207d5750601160039054906101000a900460ff16155b1561214c5781156120e157601054612094856110da565b8461209f91906130a4565b11156120e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d7906138e2565b60405180910390fd5b5b811580156120ed575080155b1561214b576010546120fe856110da565b8461210991906130a4565b111561214a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121419061394e565b60405180910390fd5b5b5b6000612157306110da565b90506000600954821015905080801561217c5750601160009054906101000a900460ff165b80156121955750601160039054906101000a900460ff16155b80156121ec57507f00000000000000000000000057691961d9fa61764416fb7e6b406c9e7d9fc22573ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80156122425750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122985750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122dc576001601160036101000a81548160ff0219169083151502179055506122c06128b6565b6000601160036101000a81548160ff0219169083151502179055505b6000601160039054906101000a900460ff16159050600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123925750600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561239c57600090505b6000808215612557577f00000000000000000000000057691961d9fa61764416fb7e6b406c9e7d9fc22573ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614801561240257506000600f54115b156124535761242f6064612421600f548b6128df90919063ffffffff16565b6128f590919063ffffffff16565b9150600f54600e548361244291906131c7565b61244c9190613250565b90506124fe565b7f00000000000000000000000057691961d9fa61764416fb7e6b406c9e7d9fc22573ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161480156124b057506000600c54115b156124fd576124dd60646124cf600c548b6128df90919063ffffffff16565b6128f590919063ffffffff16565b9150600c54600b54836124f091906131c7565b6124fa9190613250565b90505b5b6000821115612513576125128a3084612635565b5b600081111561254857612547307f00000000000000000000000057691961d9fa61764416fb7e6b406c9e7d9fc22583612635565b5b8188612554919061396e565b97505b6125628a8a8a612635565b505050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269c90613778565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612715576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270c9061380a565b60405180910390fd5b61272083838361290b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156127a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279d90613a14565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461283991906130a4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161289d9190612e07565b60405180910390a36128b0848484612910565b50505050565b60006128c1306110da565b905060008114156128d257506128dd565b6128db81612915565b505b565b600081836128ed91906131c7565b905092915050565b600081836129039190613250565b905092915050565b505050565b505050565b6000600267ffffffffffffffff81111561293257612931613a34565b5b6040519080825280602002602001820160405280156129605781602001602082028036833780820191505090505b509050308160008151811061297857612977613a63565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a419190613aa7565b81600181518110612a5557612a54613a63565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612aba307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611b8f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612b3e959493929190613bcd565b600060405180830381600087803b158015612b5857600080fd5b505af1158015612b6c573d6000803e3d6000fd5b505050505050565b600080fd5b6000819050919050565b612b8c81612b79565b8114612b9757600080fd5b50565b600081359050612ba981612b83565b92915050565b60008060408385031215612bc657612bc5612b74565b5b6000612bd485828601612b9a565b9250506020612be585828601612b9a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612c29578082015181840152602081019050612c0e565b83811115612c38576000848401525b50505050565b6000601f19601f8301169050919050565b6000612c5a82612bef565b612c648185612bfa565b9350612c74818560208601612c0b565b612c7d81612c3e565b840191505092915050565b60006020820190508181036000830152612ca28184612c4f565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612cd582612caa565b9050919050565b612ce581612cca565b8114612cf057600080fd5b50565b600081359050612d0281612cdc565b92915050565b60008060408385031215612d1f57612d1e612b74565b5b6000612d2d85828601612cf3565b9250506020612d3e85828601612b9a565b9150509250929050565b60008115159050919050565b612d5d81612d48565b82525050565b6000602082019050612d786000830184612d54565b92915050565b6000819050919050565b6000612da3612d9e612d9984612caa565b612d7e565b612caa565b9050919050565b6000612db582612d88565b9050919050565b6000612dc782612daa565b9050919050565b612dd781612dbc565b82525050565b6000602082019050612df26000830184612dce565b92915050565b612e0181612b79565b82525050565b6000602082019050612e1c6000830184612df8565b92915050565b600060208284031215612e3857612e37612b74565b5b6000612e4684828501612cf3565b91505092915050565b600060208284031215612e6557612e64612b74565b5b6000612e7384828501612b9a565b91505092915050565b600080600060608486031215612e9557612e94612b74565b5b6000612ea386828701612cf3565b9350506020612eb486828701612cf3565b9250506040612ec586828701612b9a565b9150509250925092565b600060ff82169050919050565b612ee581612ecf565b82525050565b6000602082019050612f006000830184612edc565b92915050565b612f0f81612cca565b82525050565b6000602082019050612f2a6000830184612f06565b92915050565b612f3981612d48565b8114612f4457600080fd5b50565b600081359050612f5681612f30565b92915050565b600060208284031215612f7257612f71612b74565b5b6000612f8084828501612f47565b91505092915050565b60008060408385031215612fa057612f9f612b74565b5b6000612fae85828601612cf3565b9250506020612fbf85828601612f47565b9150509250929050565b60008060408385031215612fe057612fdf612b74565b5b6000612fee85828601612cf3565b9250506020612fff85828601612cf3565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061303f602083612bfa565b915061304a82613009565b602082019050919050565b6000602082019050818103600083015261306e81613032565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006130af82612b79565b91506130ba83612b79565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130ef576130ee613075565b5b828201905092915050565b7f6d61782074617820697320313525000000000000000000000000000000000000600082015250565b6000613130600e83612bfa565b915061313b826130fa565b602082019050919050565b6000602082019050818103600083015261315f81613123565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806131ad57607f821691505b602082108114156131c1576131c0613166565b5b50919050565b60006131d282612b79565b91506131dd83612b79565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561321657613215613075565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061325b82612b79565b915061326683612b79565b92508261327657613275613221565b5b828204905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006132dd602483612bfa565b91506132e882613281565b604082019050919050565b6000602082019050818103600083015261330c816132d0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061336f602883612bfa565b915061337a82613313565b604082019050919050565b6000602082019050818103600083015261339e81613362565b9050919050565b6000815190506133b481612b83565b92915050565b6000602082840312156133d0576133cf612b74565b5b60006133de848285016133a5565b91505092915050565b60006040820190506133fc6000830185612f06565b6134096020830184612df8565b9392505050565b60008151905061341f81612f30565b92915050565b60006020828403121561343b5761343a612b74565b5b600061344984828501613410565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006134ae602583612bfa565b91506134b982613452565b604082019050919050565b600060208201905081810360008301526134dd816134a1565b9050919050565b7f3c20302e3030312520746f74616c20737570706c792e00000000000000000000600082015250565b600061351a601683612bfa565b9150613525826134e4565b602082019050919050565b600060208201905081810360008301526135498161350d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135ac602683612bfa565b91506135b782613550565b604082019050919050565b600060208201905081810360008301526135db8161359f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061363e602483612bfa565b9150613649826135e2565b604082019050919050565b6000602082019050818103600083015261366d81613631565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006136d0602283612bfa565b91506136db82613674565b604082019050919050565b600060208201905081810360008301526136ff816136c3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613762602583612bfa565b915061376d82613706565b604082019050919050565b6000602082019050818103600083015261379181613755565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006137f4602383612bfa565b91506137ff82613798565b604082019050919050565b60006020820190508181036000830152613823816137e7565b9050919050565b7f54726164696e67206e6f74207374617274656420796574000000000000000000600082015250565b6000613860601783612bfa565b915061386b8261382a565b602082019050919050565b6000602082019050818103600083015261388f81613853565b9050919050565b7f4d61782077616c6c6574206578636565646564206f6e20627579000000000000600082015250565b60006138cc601a83612bfa565b91506138d782613896565b602082019050919050565b600060208201905081810360008301526138fb816138bf565b9050919050565b7f4d61782077616c6c6574206578636565646564206f6e207472616e7366657200600082015250565b6000613938601f83612bfa565b915061394382613902565b602082019050919050565b600060208201905081810360008301526139678161392b565b9050919050565b600061397982612b79565b915061398483612b79565b92508282101561399757613996613075565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006139fe602683612bfa565b9150613a09826139a2565b604082019050919050565b60006020820190508181036000830152613a2d816139f1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613aa181612cdc565b92915050565b600060208284031215613abd57613abc612b74565b5b6000613acb84828501613a92565b91505092915050565b6000819050919050565b6000613af9613af4613aef84613ad4565b612d7e565b612b79565b9050919050565b613b0981613ade565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b4481612cca565b82525050565b6000613b568383613b3b565b60208301905092915050565b6000602082019050919050565b6000613b7a82613b0f565b613b848185613b1a565b9350613b8f83613b2b565b8060005b83811015613bc0578151613ba78882613b4a565b9750613bb283613b62565b925050600181019050613b93565b5085935050505092915050565b600060a082019050613be26000830188612df8565b613bef6020830187613b00565b8181036040830152613c018186613b6f565b9050613c106060830185612f06565b613c1d6080830184612df8565b969550505050505056fea26469706673582212209eebb9bee3d6c176473100d346c37f67072446c6446fc2a7a88ecc200daf9d0464736f6c634300080a0033

Deployed Bytecode Sourcemap

23632:7394:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29222:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6438:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8605:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23751:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7558:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28717:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29761:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9256:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7400:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10157:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23811:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24335:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30897:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28944:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24294:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24226:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30753:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7729:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1663:103;;;;;;;;;;;;;:::i;:::-;;30238:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29985:125;;;;;;;;;;;;;:::i;:::-;;1012:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23856:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6657:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24054:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24156:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10875:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30118:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8069:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24375:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30463:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29508:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30603:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24122:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8307:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24014:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24085:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1921:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24188:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24261:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28828:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29222:278;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29329:7:::1;29316:10;:20;;;;29366:13;29347:16;:32;;;;29419:16;;29406:10;;:29;;;;:::i;:::-;29390:13;:45;;;;29471:2;29454:13:::0;::::1;:19;;29446:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29222:278:::0;;:::o;6438:100::-;6492:13;6525:5;6518:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6438:100;:::o;8605:169::-;8688:4;8705:39;8714:12;:10;:12::i;:::-;8728:7;8737:6;8705:8;:39::i;:::-;8762:4;8755:11;;8605:169;;;;:::o;23751:51::-;;;:::o;7558:108::-;7619:7;7646:12;;7639:19;;7558:108;:::o;28717:103::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28803:9:::1;28791;;:21;;;;;;;;;;;;;;;;;;28717:103:::0;:::o;29761:216::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29885:4:::1;29877;29873:1;29857:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;29856:33;;;;:::i;:::-;29843:9;:46;;29835:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;29965:4;29953:9;:16;;;;:::i;:::-;29941:9;:28;;;;29761:216:::0;:::o;9256:492::-;9396:4;9413:36;9423:6;9431:9;9442:6;9413:9;:36::i;:::-;9462:24;9489:11;:19;9501:6;9489:19;;;;;;;;;;;;;;;:33;9509:12;:10;:12::i;:::-;9489:33;;;;;;;;;;;;;;;;9462:60;;9561:6;9541:16;:26;;9533:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9648:57;9657:6;9665:12;:10;:12::i;:::-;9698:6;9679:16;:25;9648:8;:57::i;:::-;9736:4;9729:11;;;9256:492;;;;;:::o;7400:93::-;7458:5;7483:2;7476:9;;7400:93;:::o;10157:215::-;10245:4;10262:80;10271:12;:10;:12::i;:::-;10285:7;10331:10;10294:11;:25;10306:12;:10;:12::i;:::-;10294:25;;;;;;;;;;;;;;;:34;10320:7;10294:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10262:8;:80::i;:::-;10360:4;10353:11;;10157:215;;;;:::o;23811:38::-;;;:::o;24335:33::-;;;;;;;;;;;;;:::o;30897:126::-;30963:4;30987:19;:28;31007:7;30987:28;;;;;;;;;;;;;;;;;;;;;;;;;30980:35;;30897:126;;;:::o;28944:270::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29048:7:::1;29036:9;:19;;;;29084:13;29066:15;:31;;;;29135:15;;29123:9;;:27;;;;:::i;:::-;29108:12;:42;;;;29185:2;29169:12;;:18;;29161:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:270:::0;;:::o;24294:34::-;;;;;;;;;;;;;:::o;24226:28::-;;;;:::o;30753:136::-;30824:4;30848:24;:33;30873:7;30848:33;;;;;;;;;;;;;;;;;;;;;;;;;30841:40;;30753:136;;;:::o;7729:127::-;7803:7;7830:9;:18;7840:7;7830:18;;;;;;;;;;;;;;;;7823:25;;7729:127;;;:::o;1663:103::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1728:30:::1;1755:1;1728:18;:30::i;:::-;1663:103::o:0;30238:217::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30297:11:::1;30317:5;30297:26;;30334:15;30352:5;:15;;;30376:4;30352:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30334:48;;30407:1;30397:7;:11;30393:54;;;30410:5;:14;;;30425:12;:10;:12::i;:::-;30439:7;30410:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30393:54;30286:169;;30238:217:::0;:::o;29985:125::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30054:4:::1;30038:13;;:20;;;;;;;;;;;;;;;;;;30074:28;30089:12;30074:28;;;;;;:::i;:::-;;;;;;;;29985:125::o:0;1012:87::-;1058:7;1085:6;;;;;;;;;;;1078:13;;1012:87;:::o;23856:24::-;;;;;;;;;;;;;:::o;6657:104::-;6713:13;6746:7;6739:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6657:104;:::o;24054:24::-;;;;:::o;24156:25::-;;;;:::o;10875:413::-;10968:4;10985:24;11012:11;:25;11024:12;:10;:12::i;:::-;11012:25;;;;;;;;;;;;;;;:34;11038:7;11012:34;;;;;;;;;;;;;;;;10985:61;;11085:15;11065:16;:35;;11057:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11178:67;11187:12;:10;:12::i;:::-;11201:7;11229:15;11210:16;:34;11178:8;:67::i;:::-;11276:4;11269:11;;;10875:413;;;;:::o;30118:112::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30207:15:::1;30190:14;;:32;;;;;;;;;;;;;;;;;;30118:112:::0;:::o;8069:175::-;8155:4;8172:42;8182:12;:10;:12::i;:::-;8196:9;8207:6;8172:9;:42::i;:::-;8232:4;8225:11;;8069:175;;;;:::o;24375:25::-;;;;;;;;;;;;;:::o;30463:132::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30579:8:::1;30548:19;:28;30568:7;30548:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30463:132:::0;;:::o;29508:245::-;29589:4;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29649:6:::1;29644:1;29628:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29627:28;;;;:::i;:::-;29614:9;:41;;29606:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29714:9;29693:18;:30;;;;29741:4;29734:11;;29508:245:::0;;;:::o;30603:142::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30729:8:::1;30693:24;:33;30718:7;30693:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;30603:142:::0;;:::o;24122:27::-;;;;:::o;8307:151::-;8396:7;8423:11;:18;8435:5;8423:18;;;;;;;;;;;;;;;:27;8442:7;8423:27;;;;;;;;;;;;;;;;8416:34;;8307:151;;;;:::o;24014:33::-;;;;:::o;24085:30::-;;;;:::o;1921:201::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2030:1:::1;2010:22;;:8;:22;;;;2002:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2086:28;2105:8;2086:18;:28::i;:::-;1921:201:::0;:::o;24188:31::-;;;;:::o;24261:24::-;;;;:::o;28828:108::-;1243:12;:10;:12::i;:::-;1232:23;;:7;:5;:7::i;:::-;:23;;;1224:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28921:7:::1;28903:15;;:25;;;;;;;;;;;;;;;;;;28828:108:::0;:::o;359:98::-;412:7;439:10;432:17;;359:98;:::o;14559:380::-;14712:1;14695:19;;:5;:19;;;;14687:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14793:1;14774:21;;:7;:21;;;;14766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14877:6;14847:11;:18;14859:5;14847:18;;;;;;;;;;;;;;;:27;14866:7;14847:27;;;;;;;;;;;;;;;:36;;;;14915:7;14899:32;;14908:5;14899:32;;;14924:6;14899:32;;;;;;:::i;:::-;;;;;;;;14559:380;;;:::o;25610:2365::-;25758:1;25742:18;;:4;:18;;;;25734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25835:1;25821:16;;:2;:16;;;;25813:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25904:1;25894:6;:11;25890:93;;;25922:28;25938:4;25944:2;25948:1;25922:15;:28::i;:::-;25965:7;;25890:93;25995:10;26016:13;26008:21;;:4;:21;;;25995:34;;26040:11;26060:13;26054:19;;:2;:19;;;26040:33;;26091:13;;;;;;;;;;;26090:14;:44;;;;;26109:19;:25;26129:4;26109:25;;;;;;;;;;;;;;;;;;;;;;;;;26108:26;26090:44;:72;;;;;26139:19;:23;26159:2;26139:23;;;;;;;;;;;;;;;;;;;;;;;;;26138:24;26090:72;26086:119;;;26172:5;26164:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;26086:119;26222:14;;;;;;;;;;;:47;;;;;26241:24;:28;26266:2;26241:28;;;;;;;;;;;;;;;;;;;;;;;;;26240:29;26222:47;:60;;;;;26274:8;;;;;;;;;;;26273:9;26222:60;26218:363;;;26303:5;26299:120;;;26363:9;;26346:13;26356:2;26346:9;:13::i;:::-;26337:6;:22;;;;:::i;:::-;:35;;26329:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26299:120;26438:5;26437:6;:17;;;;;26448:6;26447:7;26437:17;26433:137;;;26509:9;;26492:13;26502:2;26492:9;:13::i;:::-;26483:6;:22;;;;:::i;:::-;:35;;26475:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26433:137;26218:363;26593:28;26624:24;26642:4;26624:9;:24::i;:::-;26593:55;;26659:12;26698:18;;26674:20;:42;;26659:57;;26731:7;:26;;;;;26742:15;;;;;;;;;;;26731:26;:39;;;;;26762:8;;;;;;;;;;;26761:9;26731:39;:62;;;;;26780:13;26774:19;;:2;:19;;;26731:62;:92;;;;;26798:19;:25;26818:4;26798:25;;;;;;;;;;;;;;;;;;;;;;;;;26797:26;26731:92;:120;;;;;26828:19;:23;26848:2;26828:23;;;;;;;;;;;;;;;;;;;;;;;;;26827:24;26731:120;26727:224;;;26879:4;26868:8;;:15;;;;;;;;;;;;;;;;;;26898:10;:8;:10::i;:::-;26934:5;26923:8;;:16;;;;;;;;;;;;;;;;;;26727:224;26963:12;26979:8;;;;;;;;;;;26978:9;26963:24;;27002:19;:25;27022:4;27002:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27031:19;:23;27051:2;27031:23;;;;;;;;;;;;;;;;;;;;;;;;;27002:52;26998:100;;;27081:5;27071:15;;26998:100;27110:12;27137:26;27184:7;27180:742;;;27218:13;27212:19;;:2;:19;;;:40;;;;;27251:1;27235:13;;:17;27212:40;27208:423;;;27280:34;27310:3;27280:25;27291:13;;27280:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;27273:41;;27382:13;;27362:16;;27355:4;:23;;;;:::i;:::-;27354:41;;;;:::i;:::-;27333:62;;27208:423;;;27442:13;27434:21;;:4;:21;;;:41;;;;;27474:1;27459:12;;:16;27434:41;27430:201;;;27503:33;27532:3;27503:24;27514:12;;27503:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;27496:40;;27603:12;;27584:15;;27577:4;:22;;;;:::i;:::-;27576:39;;;;:::i;:::-;27555:60;;27430:201;27208:423;27658:1;27651:4;:8;27647:91;;;27680:42;27696:4;27710;27717;27680:15;:42::i;:::-;27647:91;27777:1;27756:18;:22;27752:128;;;27799:65;27823:4;27830:13;27845:18;27799:15;:65::i;:::-;27752:128;27906:4;27896:14;;;;;:::i;:::-;;;27180:742;27934:33;27950:4;27956:2;27960:6;27934:15;:33::i;:::-;25723:2252;;;;;;;25610:2365;;;;:::o;2282:191::-;2356:16;2375:6;;;;;;;;;;;2356:25;;2401:8;2392:6;;:17;;;;;;;;;;;;;;;;;;2456:8;2425:40;;2446:8;2425:40;;;;;;;;;;;;2345:128;2282:191;:::o;11778:733::-;11936:1;11918:20;;:6;:20;;;;11910:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12020:1;11999:23;;:9;:23;;;;11991:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12075:47;12096:6;12104:9;12115:6;12075:20;:47::i;:::-;12135:21;12159:9;:17;12169:6;12159:17;;;;;;;;;;;;;;;;12135:41;;12212:6;12195:13;:23;;12187:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12333:6;12317:13;:22;12297:9;:17;12307:6;12297:17;;;;;;;;;;;;;;;:42;;;;12385:6;12361:9;:20;12371:9;12361:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12426:9;12409:35;;12418:6;12409:35;;;12437:6;12409:35;;;;;;:::i;:::-;;;;;;;;12457:46;12477:6;12485:9;12496:6;12457:19;:46::i;:::-;11899:612;11778:733;;;:::o;28462:210::-;28501:23;28527:24;28545:4;28527:9;:24::i;:::-;28501:50;;28585:1;28566:15;:20;28562:59;;;28603:7;;;28562:59;28631:33;28648:15;28631:16;:33::i;:::-;28490:182;28462:210;:::o;19503:98::-;19561:7;19592:1;19588;:5;;;;:::i;:::-;19581:12;;19503:98;;;;:::o;19902:::-;19960:7;19991:1;19987;:5;;;;:::i;:::-;19980:12;;19902:98;;;;:::o;15539:125::-;;;;:::o;16268:124::-;;;;:::o;27983:471::-;28049:21;28087:1;28073:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28049:40;;28118:4;28100;28105:1;28100:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;28144:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28134:4;28139:1;28134:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;28179:62;28196:4;28211:15;28229:11;28179:8;:62::i;:::-;28254:15;:66;;;28335:11;28361:1;28377:4;28396:9;;;;;;;;;;;28420:15;28254:192;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28038:416;27983:471;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:60::-;4002:3;4023:5;4016:12;;3974:60;;;:::o;4040:142::-;4090:9;4123:53;4141:34;4150:24;4168:5;4150:24;:::i;:::-;4141:34;:::i;:::-;4123:53;:::i;:::-;4110:66;;4040:142;;;:::o;4188:126::-;4238:9;4271:37;4302:5;4271:37;:::i;:::-;4258:50;;4188:126;;;:::o;4320:153::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4320:153;;;:::o;4479:185::-;4593:64;4651:5;4593:64;:::i;:::-;4588:3;4581:77;4479:185;;:::o;4670:276::-;4790:4;4828:2;4817:9;4813:18;4805:26;;4841:98;4936:1;4925:9;4921:17;4912:6;4841:98;:::i;:::-;4670:276;;;;:::o;4952:118::-;5039:24;5057:5;5039:24;:::i;:::-;5034:3;5027:37;4952:118;;:::o;5076:222::-;5169:4;5207:2;5196:9;5192:18;5184:26;;5220:71;5288:1;5277:9;5273:17;5264:6;5220:71;:::i;:::-;5076:222;;;;:::o;5304:329::-;5363:6;5412:2;5400:9;5391:7;5387:23;5383:32;5380:119;;;5418:79;;:::i;:::-;5380:119;5538:1;5563:53;5608:7;5599:6;5588:9;5584:22;5563:53;:::i;:::-;5553:63;;5509:117;5304:329;;;;:::o;5639:::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:86::-;6634:7;6674:4;6667:5;6663:16;6652:27;;6599:86;;;:::o;6691:112::-;6774:22;6790:5;6774:22;:::i;:::-;6769:3;6762:35;6691:112;;:::o;6809:214::-;6898:4;6936:2;6925:9;6921:18;6913:26;;6949:67;7013:1;7002:9;6998:17;6989:6;6949:67;:::i;:::-;6809:214;;;;:::o;7029:118::-;7116:24;7134:5;7116:24;:::i;:::-;7111:3;7104:37;7029:118;;:::o;7153:222::-;7246:4;7284:2;7273:9;7269:18;7261:26;;7297:71;7365:1;7354:9;7350:17;7341:6;7297:71;:::i;:::-;7153:222;;;;:::o;7381:116::-;7451:21;7466:5;7451:21;:::i;:::-;7444:5;7441:32;7431:60;;7487:1;7484;7477:12;7431:60;7381:116;:::o;7503:133::-;7546:5;7584:6;7571:20;7562:29;;7600:30;7624:5;7600:30;:::i;:::-;7503:133;;;;:::o;7642:323::-;7698:6;7747:2;7735:9;7726:7;7722:23;7718:32;7715:119;;;7753:79;;:::i;:::-;7715:119;7873:1;7898:50;7940:7;7931:6;7920:9;7916:22;7898:50;:::i;:::-;7888:60;;7844:114;7642:323;;;;:::o;7971:468::-;8036:6;8044;8093:2;8081:9;8072:7;8068:23;8064:32;8061:119;;;8099:79;;:::i;:::-;8061:119;8219:1;8244:53;8289:7;8280:6;8269:9;8265:22;8244:53;:::i;:::-;8234:63;;8190:117;8346:2;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8317:115;7971:468;;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:182::-;9065:34;9061:1;9053:6;9049:14;9042:58;8925:182;:::o;9113:366::-;9255:3;9276:67;9340:2;9335:3;9276:67;:::i;:::-;9269:74;;9352:93;9441:3;9352:93;:::i;:::-;9470:2;9465:3;9461:12;9454:19;;9113:366;;;:::o;9485:419::-;9651:4;9689:2;9678:9;9674:18;9666:26;;9738:9;9732:4;9728:20;9724:1;9713:9;9709:17;9702:47;9766:131;9892:4;9766:131;:::i;:::-;9758:139;;9485:419;;;:::o;9910:180::-;9958:77;9955:1;9948:88;10055:4;10052:1;10045:15;10079:4;10076:1;10069:15;10096:305;10136:3;10155:20;10173:1;10155:20;:::i;:::-;10150:25;;10189:20;10207:1;10189:20;:::i;:::-;10184:25;;10343:1;10275:66;10271:74;10268:1;10265:81;10262:107;;;10349:18;;:::i;:::-;10262:107;10393:1;10390;10386:9;10379:16;;10096:305;;;;:::o;10407:164::-;10547:16;10543:1;10535:6;10531:14;10524:40;10407:164;:::o;10577:366::-;10719:3;10740:67;10804:2;10799:3;10740:67;:::i;:::-;10733:74;;10816:93;10905:3;10816:93;:::i;:::-;10934:2;10929:3;10925:12;10918:19;;10577:366;;;:::o;10949:419::-;11115:4;11153:2;11142:9;11138:18;11130:26;;11202:9;11196:4;11192:20;11188:1;11177:9;11173:17;11166:47;11230:131;11356:4;11230:131;:::i;:::-;11222:139;;10949:419;;;:::o;11374:180::-;11422:77;11419:1;11412:88;11519:4;11516:1;11509:15;11543:4;11540:1;11533:15;11560:320;11604:6;11641:1;11635:4;11631:12;11621:22;;11688:1;11682:4;11678:12;11709:18;11699:81;;11765:4;11757:6;11753:17;11743:27;;11699:81;11827:2;11819:6;11816:14;11796:18;11793:38;11790:84;;;11846:18;;:::i;:::-;11790:84;11611:269;11560:320;;;:::o;11886:348::-;11926:7;11949:20;11967:1;11949:20;:::i;:::-;11944:25;;11983:20;12001:1;11983:20;:::i;:::-;11978:25;;12171:1;12103:66;12099:74;12096:1;12093:81;12088:1;12081:9;12074:17;12070:105;12067:131;;;12178:18;;:::i;:::-;12067:131;12226:1;12223;12219:9;12208:20;;11886:348;;;;:::o;12240:180::-;12288:77;12285:1;12278:88;12385:4;12382:1;12375:15;12409:4;12406:1;12399:15;12426:185;12466:1;12483:20;12501:1;12483:20;:::i;:::-;12478:25;;12517:20;12535:1;12517:20;:::i;:::-;12512:25;;12556:1;12546:35;;12561:18;;:::i;:::-;12546:35;12603:1;12600;12596:9;12591:14;;12426:185;;;;:::o;12617:223::-;12757:34;12753:1;12745:6;12741:14;12734:58;12826:6;12821:2;12813:6;12809:15;12802:31;12617:223;:::o;12846:366::-;12988:3;13009:67;13073:2;13068:3;13009:67;:::i;:::-;13002:74;;13085:93;13174:3;13085:93;:::i;:::-;13203:2;13198:3;13194:12;13187:19;;12846:366;;;:::o;13218:419::-;13384:4;13422:2;13411:9;13407:18;13399:26;;13471:9;13465:4;13461:20;13457:1;13446:9;13442:17;13435:47;13499:131;13625:4;13499:131;:::i;:::-;13491:139;;13218:419;;;:::o;13643:227::-;13783:34;13779:1;13771:6;13767:14;13760:58;13852:10;13847:2;13839:6;13835:15;13828:35;13643:227;:::o;13876:366::-;14018:3;14039:67;14103:2;14098:3;14039:67;:::i;:::-;14032:74;;14115:93;14204:3;14115:93;:::i;:::-;14233:2;14228:3;14224:12;14217:19;;13876:366;;;:::o;14248:419::-;14414:4;14452:2;14441:9;14437:18;14429:26;;14501:9;14495:4;14491:20;14487:1;14476:9;14472:17;14465:47;14529:131;14655:4;14529:131;:::i;:::-;14521:139;;14248:419;;;:::o;14673:143::-;14730:5;14761:6;14755:13;14746:22;;14777:33;14804:5;14777:33;:::i;:::-;14673:143;;;;:::o;14822:351::-;14892:6;14941:2;14929:9;14920:7;14916:23;14912:32;14909:119;;;14947:79;;:::i;:::-;14909:119;15067:1;15092:64;15148:7;15139:6;15128:9;15124:22;15092:64;:::i;:::-;15082:74;;15038:128;14822:351;;;;:::o;15179:332::-;15300:4;15338:2;15327:9;15323:18;15315:26;;15351:71;15419:1;15408:9;15404:17;15395:6;15351:71;:::i;:::-;15432:72;15500:2;15489:9;15485:18;15476:6;15432:72;:::i;:::-;15179:332;;;;;:::o;15517:137::-;15571:5;15602:6;15596:13;15587:22;;15618:30;15642:5;15618:30;:::i;:::-;15517:137;;;;:::o;15660:345::-;15727:6;15776:2;15764:9;15755:7;15751:23;15747:32;15744:119;;;15782:79;;:::i;:::-;15744:119;15902:1;15927:61;15980:7;15971:6;15960:9;15956:22;15927:61;:::i;:::-;15917:71;;15873:125;15660:345;;;;:::o;16011:224::-;16151:34;16147:1;16139:6;16135:14;16128:58;16220:7;16215:2;16207:6;16203:15;16196:32;16011:224;:::o;16241:366::-;16383:3;16404:67;16468:2;16463:3;16404:67;:::i;:::-;16397:74;;16480:93;16569:3;16480:93;:::i;:::-;16598:2;16593:3;16589:12;16582:19;;16241:366;;;:::o;16613:419::-;16779:4;16817:2;16806:9;16802:18;16794:26;;16866:9;16860:4;16856:20;16852:1;16841:9;16837:17;16830:47;16894:131;17020:4;16894:131;:::i;:::-;16886:139;;16613:419;;;:::o;17038:172::-;17178:24;17174:1;17166:6;17162:14;17155:48;17038:172;:::o;17216:366::-;17358:3;17379:67;17443:2;17438:3;17379:67;:::i;:::-;17372:74;;17455:93;17544:3;17455:93;:::i;:::-;17573:2;17568:3;17564:12;17557:19;;17216:366;;;:::o;17588:419::-;17754:4;17792:2;17781:9;17777:18;17769:26;;17841:9;17835:4;17831:20;17827:1;17816:9;17812:17;17805:47;17869:131;17995:4;17869:131;:::i;:::-;17861:139;;17588:419;;;:::o;18013:225::-;18153:34;18149:1;18141:6;18137:14;18130:58;18222:8;18217:2;18209:6;18205:15;18198:33;18013:225;:::o;18244:366::-;18386:3;18407:67;18471:2;18466:3;18407:67;:::i;:::-;18400:74;;18483:93;18572:3;18483:93;:::i;:::-;18601:2;18596:3;18592:12;18585:19;;18244:366;;;:::o;18616:419::-;18782:4;18820:2;18809:9;18805:18;18797:26;;18869:9;18863:4;18859:20;18855:1;18844:9;18840:17;18833:47;18897:131;19023:4;18897:131;:::i;:::-;18889:139;;18616:419;;;:::o;19041:223::-;19181:34;19177:1;19169:6;19165:14;19158:58;19250:6;19245:2;19237:6;19233:15;19226:31;19041:223;:::o;19270:366::-;19412:3;19433:67;19497:2;19492:3;19433:67;:::i;:::-;19426:74;;19509:93;19598:3;19509:93;:::i;:::-;19627:2;19622:3;19618:12;19611:19;;19270:366;;;:::o;19642:419::-;19808:4;19846:2;19835:9;19831:18;19823:26;;19895:9;19889:4;19885:20;19881:1;19870:9;19866:17;19859:47;19923:131;20049:4;19923:131;:::i;:::-;19915:139;;19642:419;;;:::o;20067:221::-;20207:34;20203:1;20195:6;20191:14;20184:58;20276:4;20271:2;20263:6;20259:15;20252:29;20067:221;:::o;20294:366::-;20436:3;20457:67;20521:2;20516:3;20457:67;:::i;:::-;20450:74;;20533:93;20622:3;20533:93;:::i;:::-;20651:2;20646:3;20642:12;20635:19;;20294:366;;;:::o;20666:419::-;20832:4;20870:2;20859:9;20855:18;20847:26;;20919:9;20913:4;20909:20;20905:1;20894:9;20890:17;20883:47;20947:131;21073:4;20947:131;:::i;:::-;20939:139;;20666:419;;;:::o;21091:224::-;21231:34;21227:1;21219:6;21215:14;21208:58;21300:7;21295:2;21287:6;21283:15;21276:32;21091:224;:::o;21321:366::-;21463:3;21484:67;21548:2;21543:3;21484:67;:::i;:::-;21477:74;;21560:93;21649:3;21560:93;:::i;:::-;21678:2;21673:3;21669:12;21662:19;;21321:366;;;:::o;21693:419::-;21859:4;21897:2;21886:9;21882:18;21874:26;;21946:9;21940:4;21936:20;21932:1;21921:9;21917:17;21910:47;21974:131;22100:4;21974:131;:::i;:::-;21966:139;;21693:419;;;:::o;22118:222::-;22258:34;22254:1;22246:6;22242:14;22235:58;22327:5;22322:2;22314:6;22310:15;22303:30;22118:222;:::o;22346:366::-;22488:3;22509:67;22573:2;22568:3;22509:67;:::i;:::-;22502:74;;22585:93;22674:3;22585:93;:::i;:::-;22703:2;22698:3;22694:12;22687:19;;22346:366;;;:::o;22718:419::-;22884:4;22922:2;22911:9;22907:18;22899:26;;22971:9;22965:4;22961:20;22957:1;22946:9;22942:17;22935:47;22999:131;23125:4;22999:131;:::i;:::-;22991:139;;22718:419;;;:::o;23143:173::-;23283:25;23279:1;23271:6;23267:14;23260:49;23143:173;:::o;23322:366::-;23464:3;23485:67;23549:2;23544:3;23485:67;:::i;:::-;23478:74;;23561:93;23650:3;23561:93;:::i;:::-;23679:2;23674:3;23670:12;23663:19;;23322:366;;;:::o;23694:419::-;23860:4;23898:2;23887:9;23883:18;23875:26;;23947:9;23941:4;23937:20;23933:1;23922:9;23918:17;23911:47;23975:131;24101:4;23975:131;:::i;:::-;23967:139;;23694:419;;;:::o;24119:176::-;24259:28;24255:1;24247:6;24243:14;24236:52;24119:176;:::o;24301:366::-;24443:3;24464:67;24528:2;24523:3;24464:67;:::i;:::-;24457:74;;24540:93;24629:3;24540:93;:::i;:::-;24658:2;24653:3;24649:12;24642:19;;24301:366;;;:::o;24673:419::-;24839:4;24877:2;24866:9;24862:18;24854:26;;24926:9;24920:4;24916:20;24912:1;24901:9;24897:17;24890:47;24954:131;25080:4;24954:131;:::i;:::-;24946:139;;24673:419;;;:::o;25098:181::-;25238:33;25234:1;25226:6;25222:14;25215:57;25098:181;:::o;25285:366::-;25427:3;25448:67;25512:2;25507:3;25448:67;:::i;:::-;25441:74;;25524:93;25613:3;25524:93;:::i;:::-;25642:2;25637:3;25633:12;25626:19;;25285:366;;;:::o;25657:419::-;25823:4;25861:2;25850:9;25846:18;25838:26;;25910:9;25904:4;25900:20;25896:1;25885:9;25881:17;25874:47;25938:131;26064:4;25938:131;:::i;:::-;25930:139;;25657:419;;;:::o;26082:191::-;26122:4;26142:20;26160:1;26142:20;:::i;:::-;26137:25;;26176:20;26194:1;26176:20;:::i;:::-;26171:25;;26215:1;26212;26209:8;26206:34;;;26220:18;;:::i;:::-;26206:34;26265:1;26262;26258:9;26250:17;;26082:191;;;;:::o;26279:225::-;26419:34;26415:1;26407:6;26403:14;26396:58;26488:8;26483:2;26475:6;26471:15;26464:33;26279:225;:::o;26510:366::-;26652:3;26673:67;26737:2;26732:3;26673:67;:::i;:::-;26666:74;;26749:93;26838:3;26749:93;:::i;:::-;26867:2;26862:3;26858:12;26851:19;;26510:366;;;:::o;26882:419::-;27048:4;27086:2;27075:9;27071:18;27063:26;;27135:9;27129:4;27125:20;27121:1;27110:9;27106:17;27099:47;27163:131;27289:4;27163:131;:::i;:::-;27155:139;;26882:419;;;:::o;27307:180::-;27355:77;27352:1;27345:88;27452:4;27449:1;27442:15;27476:4;27473:1;27466:15;27493:180;27541:77;27538:1;27531:88;27638:4;27635:1;27628:15;27662:4;27659:1;27652:15;27679:143;27736:5;27767:6;27761:13;27752:22;;27783:33;27810:5;27783:33;:::i;:::-;27679:143;;;;:::o;27828:351::-;27898:6;27947:2;27935:9;27926:7;27922:23;27918:32;27915:119;;;27953:79;;:::i;:::-;27915:119;28073:1;28098:64;28154:7;28145:6;28134:9;28130:22;28098:64;:::i;:::-;28088:74;;28044:128;27828:351;;;;:::o;28185:85::-;28230:7;28259:5;28248:16;;28185:85;;;:::o;28276:158::-;28334:9;28367:61;28385:42;28394:32;28420:5;28394:32;:::i;:::-;28385:42;:::i;:::-;28367:61;:::i;:::-;28354:74;;28276:158;;;:::o;28440:147::-;28535:45;28574:5;28535:45;:::i;:::-;28530:3;28523:58;28440:147;;:::o;28593:114::-;28660:6;28694:5;28688:12;28678:22;;28593:114;;;:::o;28713:184::-;28812:11;28846:6;28841:3;28834:19;28886:4;28881:3;28877:14;28862:29;;28713:184;;;;:::o;28903:132::-;28970:4;28993:3;28985:11;;29023:4;29018:3;29014:14;29006:22;;28903:132;;;:::o;29041:108::-;29118:24;29136:5;29118:24;:::i;:::-;29113:3;29106:37;29041:108;;:::o;29155:179::-;29224:10;29245:46;29287:3;29279:6;29245:46;:::i;:::-;29323:4;29318:3;29314:14;29300:28;;29155:179;;;;:::o;29340:113::-;29410:4;29442;29437:3;29433:14;29425:22;;29340:113;;;:::o;29489:732::-;29608:3;29637:54;29685:5;29637:54;:::i;:::-;29707:86;29786:6;29781:3;29707:86;:::i;:::-;29700:93;;29817:56;29867:5;29817:56;:::i;:::-;29896:7;29927:1;29912:284;29937:6;29934:1;29931:13;29912:284;;;30013:6;30007:13;30040:63;30099:3;30084:13;30040:63;:::i;:::-;30033:70;;30126:60;30179:6;30126:60;:::i;:::-;30116:70;;29972:224;29959:1;29956;29952:9;29947:14;;29912:284;;;29916:14;30212:3;30205:10;;29613:608;;;29489:732;;;;:::o;30227:831::-;30490:4;30528:3;30517:9;30513:19;30505:27;;30542:71;30610:1;30599:9;30595:17;30586:6;30542:71;:::i;:::-;30623:80;30699:2;30688:9;30684:18;30675:6;30623:80;:::i;:::-;30750:9;30744:4;30740:20;30735:2;30724:9;30720:18;30713:48;30778:108;30881:4;30872:6;30778:108;:::i;:::-;30770:116;;30896:72;30964:2;30953:9;30949:18;30940:6;30896:72;:::i;:::-;30978:73;31046:3;31035:9;31031:19;31022:6;30978:73;:::i;:::-;30227:831;;;;;;;;:::o

Swarm Source

ipfs://9eebb9bee3d6c176473100d346c37f67072446c6446fc2a7a88ecc200daf9d04
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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