ETH Price: $3,268.03 (-0.42%)
Gas: 2 Gwei

Token

HALFLIFE (HALFLIFE)
 

Overview

Max Total Supply

1,000,000,000 HALFLIFE

Holders

70

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,680,453.406960811787930374 HALFLIFE

Value
$0.00
0x35e996e0eb21a26273b9ed7fd3e00d9b35682bee
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:
HalfLife

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

☢️ HALFLIFE ☢️

HalfLife works via an auto-locking mechanism that is coded into the contract.
When buying the token the user is immediately able to trade 50% of their purchase,
the remaining is unlocked in stages every 24 hours.
This is designed to bring stability and growth to the HalfLife chart and ensures everyone trades responsibly.


🌐 https://www.halflife.wtf
💬 https://t.me/HalfLifePortal
🐦 https://twitter.com/HalfLifeERC20

*/

// File @openzeppelin/contracts/utils/[email protected]

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File @openzeppelin/contracts/access/[email protected]

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC20/[email protected]

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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

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

pragma solidity ^0.8.0;

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

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

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

// File @openzeppelin/contracts/token/ERC20/[email protected]

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

pragma solidity ^0.8.0;

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File contracts/IUniswapV2Factory.sol

pragma solidity ^0.8.9;

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

// File contracts/IUniswapV2Router02.sol

pragma solidity ^0.8.9;

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);
}

// File contracts/Token.sol

pragma solidity ^0.8.19;

contract HalfLife is ERC20, Ownable {
    uint256 public _maxTxAmount = 20000000 * 10 ** decimals();
    uint256 public _maxWalletSize = 20000000 * 10 ** decimals();
    uint256 public _swapTokensAtAmount = 2000000 * 10 ** decimals();

    uint256 public halfLifeTime = 24 * 3600;
    bool public halfLifeEnabled = true;

    uint256 private immutable _maxFee = 30; // highest tax can be set
    uint256 private _taxFeeOnBuy = 20; // initial buy fee - final tax is 2
    uint256 private _taxFeeOnSell = 30; // inital sell fee - final tax is 2

    mapping(address => Transaction[]) public transactions;

    mapping(address => bool) private _isExcludedFromFee;

    address payable private constant _feeAddress =
        payable(0xC1FFC94A510c7ff3f00d64835c37a3a9a58B3B53);

    IUniswapV2Router02 public constant uniswapV2Router =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    address public uniswapV2Pair;

    bool private inSwap = false;

    struct Transaction {
        uint256 timestamp;
        uint256 amount;
    }

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() ERC20("HALFLIFE", "HALFLIFE") {
        _mint(msg.sender, 1000000000 * 10 ** decimals());

        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this),
                uniswapV2Router.WETH()
            );

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_feeAddress] = true;
    }

    function getUserTransactions(
        address _address
    ) public view returns (Transaction[] memory) {
        return transactions[_address];
    }

    // private

    function getAvailableBalance(address _address) private returns (uint256) {
        Transaction[] storage userTxs = transactions[_address];
        uint256 numRemoved = 0;

        uint256 restrictedBalance = 0;
        for (uint i = 0; i < userTxs.length; i++) {
            if (numRemoved > 0) {
                userTxs[i - numRemoved] = userTxs[i];
            }
            // 4 half lives completed (100% available)
            if (userTxs[i].timestamp < block.timestamp - 4 * halfLifeTime) {
                numRemoved++;
                continue;
            }

            // 3 half lives completed (93.75% available)
            if (userTxs[i].timestamp < block.timestamp - 3 * halfLifeTime) {
                restrictedBalance += (userTxs[i].amount * 625) / 10000;
                continue;
            }

            // 2 half lives completed (87.5% available)
            if (userTxs[i].timestamp < block.timestamp - 2 * halfLifeTime) {
                restrictedBalance += (userTxs[i].amount * 1250) / 10000;
                continue;
            }

            // 1 half life completed (75% available)
            if (userTxs[i].timestamp < block.timestamp - 1 * halfLifeTime) {
                restrictedBalance += (userTxs[i].amount * 2500) / 10000;
                continue;
            }

            // 0 half lives completed (50% available)
            if (userTxs[i].timestamp < block.timestamp - 30) {
                restrictedBalance += (userTxs[i].amount * 5000) / 10000;
                continue;
            }
        }
        for (uint i = 0; i < numRemoved; i++) userTxs.pop();
        transactions[_address] = userTxs;
        return balanceOf(_address) - restrictedBalance;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(
            !halfLifeEnabled ||
                _isExcludedFromFee[from] ||
                from == address(uniswapV2Router) ||
                from == uniswapV2Pair ||
                _isExcludedFromFee[to] ||
                to == address(uniswapV2Router) ||
                to == uniswapV2Pair,
            "You can't transfer to another wallet"
        );
        if (from != owner() && to != owner()) {
            if (to != _feeAddress && from != _feeAddress) {
                require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
            }

            if (
                to != uniswapV2Pair && to != _feeAddress && from != _feeAddress
            ) {
                require(
                    balanceOf(to) + amount < _maxWalletSize,
                    "TOKEN: Balance exceeds wallet size!"
                );
            }
            uint256 contractTokenBalance = balanceOf(address(this));

            if (contractTokenBalance >= _maxTxAmount) {
                contractTokenBalance = _maxTxAmount;
            }

            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if (
                canSwap &&
                !inSwap &&
                from != uniswapV2Pair &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                swapTokensForEth(contractTokenBalance);

                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    _feeAddress.transfer(address(this).balance);
                }
            }
        }

        //Transfer Tokens
        bool isBuy;
        uint256 _taxFee = 0;
        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            _taxFee = 0;
        } else {
            //Set Fee for Buys
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _taxFee = _taxFeeOnBuy;
                isBuy = true;
            }

            //Set Fee for Sells
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                require(
                    !halfLifeEnabled ||
                        _isExcludedFromFee[from] ||
                        amount <= getAvailableBalance(from),
                    "Insufficient balance available"
                );
                _taxFee = _taxFeeOnSell;
            }
        }

        uint256 tTeam = (amount * _taxFee) / 100;
        uint256 tTransferAmount = amount - tTeam;
        if (isBuy) {
            transactions[to].push(
                Transaction(block.timestamp, tTransferAmount)
            );
        }

        super._transfer(from, to, tTransferAmount);
        super._transfer(from, address(this), tTeam);
    }

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

    // onlyOwner external

    function setHalfLifeEnabled(bool _halfLifeEnabled) external onlyOwner {
        halfLifeEnabled = _halfLifeEnabled;
    }

    function setHalfLifeTime(uint256 _halfLifeTime) external onlyOwner {
        halfLifeTime = _halfLifeTime;
    }

    function setFee(
        uint256 taxFeeOnBuy,
        uint256 taxFeeOnSell
    ) external onlyOwner {
        require(taxFeeOnBuy <= _maxFee, "Fee is too high");
        require(taxFeeOnSell <= _maxFee, "Fee is too high");

        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    //Remove all TX and Wallet Limits
    function removeLimits() external onlyOwner {
        _maxTxAmount = totalSupply();
        _maxWalletSize = totalSupply();
    }

    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(
        uint256 swapTokensAtAmount
    ) external onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    function excludeAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

    // Send the current ETH and token balance to the marketing address
    function cleanContract() external {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            _feeAddress.transfer(contractETHBalance);
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            transfer(_feeAddress, contractTokenBalance);
        }
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cleanContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getUserTransactions","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct HalfLife.Transaction[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halfLifeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"halfLifeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_halfLifeEnabled","type":"bool"}],"name":"setHalfLifeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_halfLifeTime","type":"uint256"}],"name":"setHalfLifeTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405262000014620004e660201b60201c565b600a620000229190620008f8565b6301312d0062000033919062000949565b60065562000046620004e660201b60201c565b600a620000549190620008f8565b6301312d0062000065919062000949565b60075562000078620004e660201b60201c565b600a620000869190620008f8565b621e848062000096919062000949565b600855620151806009556001600a60006101000a81548160ff021916908315150217905550601e6080908152506014600b55601e600c556000600f60146101000a81548160ff021916908315150217905550348015620000f557600080fd5b506040518060400160405280600881526020017f48414c464c4946450000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f48414c464c494645000000000000000000000000000000000000000000000000815250816003908162000173919062000c04565b50806004908162000185919062000c04565b505050620001a86200019c620004ef60201b60201c565b620004f760201b60201c565b620001e833620001bd620004e660201b60201c565b600a620001cb9190620008f8565b633b9aca00620001dc919062000949565b620005bd60201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e919062000d55565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000310919062000d55565b6040518363ffffffff1660e01b81526004016200032f92919062000d98565b6020604051808303816000875af11580156200034f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000375919062000d55565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e6000620003cb6200072a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600073c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000eb1565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200062f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006269062000e26565b60405180910390fd5b62000643600083836200075460201b60201c565b806002600082825462000657919062000e48565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200070a919062000e94565b60405180910390a362000726600083836200075960201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620007ec57808604811115620007c457620007c36200075e565b5b6001851615620007d45780820291505b8081029050620007e4856200078d565b9450620007a4565b94509492505050565b600082620008075760019050620008da565b81620008175760009050620008da565b81600181146200083057600281146200083b5762000871565b6001915050620008da565b60ff84111562000850576200084f6200075e565b5b8360020a9150848211156200086a57620008696200075e565b5b50620008da565b5060208310610133831016604e8410600b8410161715620008ab5782820a905083811115620008a557620008a46200075e565b5b620008da565b620008ba84848460016200079a565b92509050818404811115620008d457620008d36200075e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b60006200090582620008e1565b91506200091283620008eb565b9250620009417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620007f5565b905092915050565b60006200095682620008e1565b91506200096383620008e1565b92508282026200097381620008e1565b915082820484148315176200098d576200098c6200075e565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a1657607f821691505b60208210810362000a2c5762000a2b620009ce565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a57565b62000aa2868362000a57565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000ae562000adf62000ad984620008e1565b62000aba565b620008e1565b9050919050565b6000819050919050565b62000b018362000ac4565b62000b1962000b108262000aec565b84845462000a64565b825550505050565b600090565b62000b3062000b21565b62000b3d81848462000af6565b505050565b5b8181101562000b655762000b5960008262000b26565b60018101905062000b43565b5050565b601f82111562000bb45762000b7e8162000a32565b62000b898462000a47565b8101602085101562000b99578190505b62000bb162000ba88562000a47565b83018262000b42565b50505b505050565b600082821c905092915050565b600062000bd96000198460080262000bb9565b1980831691505092915050565b600062000bf4838362000bc6565b9150826002028217905092915050565b62000c0f8262000994565b67ffffffffffffffff81111562000c2b5762000c2a6200099f565b5b62000c378254620009fd565b62000c4482828562000b69565b600060209050601f83116001811462000c7c576000841562000c67578287015190505b62000c73858262000be6565b86555062000ce3565b601f19841662000c8c8662000a32565b60005b8281101562000cb65784890151825560018201915060208501945060208101905062000c8f565b8683101562000cd6578489015162000cd2601f89168262000bc6565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000d1d8262000cf0565b9050919050565b62000d2f8162000d10565b811462000d3b57600080fd5b50565b60008151905062000d4f8162000d24565b92915050565b60006020828403121562000d6e5762000d6d62000ceb565b5b600062000d7e8482850162000d3e565b91505092915050565b62000d928162000d10565b82525050565b600060408201905062000daf600083018562000d87565b62000dbe602083018462000d87565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e0e601f8362000dc5565b915062000e1b8262000dd6565b602082019050919050565b6000602082019050818103600083015262000e418162000dff565b9050919050565b600062000e5582620008e1565b915062000e6283620008e1565b925082820190508082111562000e7d5762000e7c6200075e565b5b92915050565b62000e8e81620008e1565b82525050565b600060208201905062000eab600083018462000e83565b92915050565b60805161390962000ed460003960008181610912015261097501526139096000f3fe6080604052600436106101d15760003560e01c8063751039fc116100f757806398a5c31511610095578063dd62ed3e11610064578063dd62ed3e14610674578063e8a32462146106b1578063ef925399146106dc578063f2fde38b14610719576101d8565b806398a5c315146105a8578063a457c2d7146105d1578063a9059cbb1461060e578063dd40f0781461064b576101d8565b80638da5cb5b116100d15780638da5cb5b146104fe5780638f9a55c01461052957806390d2c93a1461055457806395d89b411461057d576101d8565b8063751039fc146104a55780637be842dd146104bc5780637d1db4a5146104d3576101d8565b80632fd689e31161016f57806352f7c9881161013e57806352f7c988146103ff57806361b2bb371461042857806370a0823114610451578063715018a61461048e576101d8565b80632fd689e314610341578063313ce5671461036c578063395093511461039757806349bd5a5e146103d4576101d8565b80631694505e116101ab5780631694505e1461028357806318160ddd146102ae5780632190e631146102d957806323b872dd14610304576101d8565b806306fdde03146101dd578063095ea7b3146102085780631453812814610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610742565b6040516101ff91906127d4565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190612894565b6107d4565b60405161023c91906128ef565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612894565b6107f7565b60405161027a929190612919565b60405180910390f35b34801561028f57600080fd5b50610298610838565b6040516102a591906129a1565b60405180910390f35b3480156102ba57600080fd5b506102c3610850565b6040516102d091906129bc565b60405180910390f35b3480156102e557600080fd5b506102ee61085a565b6040516102fb91906128ef565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906129d7565b61086d565b60405161033891906128ef565b60405180910390f35b34801561034d57600080fd5b5061035661089c565b60405161036391906129bc565b60405180910390f35b34801561037857600080fd5b506103816108a2565b60405161038e9190612a46565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612894565b6108ab565b6040516103cb91906128ef565b60405180910390f35b3480156103e057600080fd5b506103e96108e2565b6040516103f69190612a70565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190612a8b565b610908565b005b34801561043457600080fd5b5061044f600480360381019061044a9190612acb565b6109e8565b005b34801561045d57600080fd5b5061047860048036038101906104739190612af8565b6109fa565b60405161048591906129bc565b60405180910390f35b34801561049a57600080fd5b506104a3610a42565b005b3480156104b157600080fd5b506104ba610a56565b005b3480156104c857600080fd5b506104d1610a7c565b005b3480156104df57600080fd5b506104e8610b20565b6040516104f591906129bc565b60405180910390f35b34801561050a57600080fd5b50610513610b26565b6040516105209190612a70565b60405180910390f35b34801561053557600080fd5b5061053e610b50565b60405161054b91906129bc565b60405180910390f35b34801561056057600080fd5b5061057b60048036038101906105769190612bb6565b610b56565b005b34801561058957600080fd5b50610592610c03565b60405161059f91906127d4565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca9190612acb565b610c95565b005b3480156105dd57600080fd5b506105f860048036038101906105f39190612894565b610ca7565b60405161060591906128ef565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190612894565b610d1e565b60405161064291906128ef565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190612c16565b610d41565b005b34801561068057600080fd5b5061069b60048036038101906106969190612c43565b610d66565b6040516106a891906129bc565b60405180910390f35b3480156106bd57600080fd5b506106c6610ded565b6040516106d391906129bc565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190612af8565b610df3565b6040516107109190612d70565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b9190612af8565b610ea5565b005b60606003805461075190612dc1565b80601f016020809104026020016040519081016040528092919081815260200182805461077d90612dc1565b80156107ca5780601f1061079f576101008083540402835291602001916107ca565b820191906000526020600020905b8154815290600101906020018083116107ad57829003601f168201915b5050505050905090565b6000806107df610f28565b90506107ec818585610f30565b600191505092915050565b600d602052816000526040600020818154811061081357600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600a60009054906101000a900460ff1681565b600080610878610f28565b90506108858582856110f9565b610890858585611185565b60019150509392505050565b60085481565b60006012905090565b6000806108b6610f28565b90506108d78185856108c88589610d66565b6108d29190612e21565b610f30565b600191505092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610910611c7b565b7f0000000000000000000000000000000000000000000000000000000000000000821115610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a90612ea1565b60405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156109d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cd90612ea1565b60405180910390fd5b81600b8190555080600c819055505050565b6109f0611c7b565b8060098190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4a611c7b565b610a546000611cf9565b565b610a5e611c7b565b610a66610850565b600681905550610a74610850565b600781905550565b60004790506000811115610ae65773c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ae4573d6000803e3d6000fd5b505b6000610af1306109fa565b90506000811115610b1c57610b1a73c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5382610d1e565b505b5050565b60065481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b610b5e611c7b565b60005b83839050811015610bfd5781600e6000868685818110610b8457610b83612ec1565b5b9050602002016020810190610b999190612af8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bf590612ef0565b915050610b61565b50505050565b606060048054610c1290612dc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90612dc1565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b5050505050905090565b610c9d611c7b565b8060088190555050565b600080610cb2610f28565b90506000610cc08286610d66565b905083811015610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90612faa565b60405180910390fd5b610d128286868403610f30565b60019250505092915050565b600080610d29610f28565b9050610d36818585611185565b600191505092915050565b610d49611c7b565b80600a60006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6060600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610e9a57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610e54565b505050509050919050565b610ead611c7b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f139061303c565b60405180910390fd5b610f2581611cf9565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f96906130ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590613160565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110ec91906129bc565b60405180910390a3505050565b60006111058484610d66565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461117f5781811015611171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611168906131cc565b60405180910390fd5b61117e8484848403610f30565b5b50505050565b600a60009054906101000a900460ff1615806111ea5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806112345750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061128c5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806112e05750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061132a5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806113825750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b89061325e565b60405180910390fd5b6113c9610b26565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114375750611407610b26565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118215773c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156114cc575073c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561151757600654811115611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d906132ca565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156115b5575073c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611601575073c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561165e5760075481611613846109fa565b61161d9190612e21565b1061165d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116549061335c565b60405180910390fd5b5b6000611669306109fa565b9050600654811061167a5760065490505b6000600854821015905080801561169e5750600f60149054906101000a900460ff16155b80156116f85750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561174e5750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117a45750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561181e576117b282611dbf565b6000479050600081111561181c5773c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561181a573d6000803e3d6000fd5b505b505b50505b60008060009050600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118c95750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061197c5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561197b5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561198a5760009050611b96565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611a275750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611a3657600b549050600191505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611ad35750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611b9557600a60009054906101000a900460ff161580611b3d5750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611b505750611b4c85611fef565b8311155b611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b86906133c8565b60405180910390fd5b600c5490505b5b600060648285611ba691906133e8565b611bb09190613459565b905060008185611bc0919061348a565b90508315611c5c57600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280428152602001838152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550505b611c67878783612431565b611c72873084612431565b50505050505050565b611c83610f28565b73ffffffffffffffffffffffffffffffffffffffff16611ca1610b26565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee9061350a565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600f60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611df757611df661352a565b5b604051908082528060200260200182016040528015611e255781602001602082028036833780820191505090505b5090503081600081518110611e3d57611e3c612ec1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061356e565b81600181518110611f0e57611f0d612ec1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f9e959493929190613694565b600060405180830381600087803b158015611fb857600080fd5b505af1158015611fcc573d6000803e3d6000fd5b50505050506000600f60146101000a81548160ff02191690831515021790555050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008060005b838054905081101561236a5760008311156120b35783818154811061206157612060612ec1565b5b906000526020600020906002020184848361207c919061348a565b8154811061208d5761208c612ec1565b5b906000526020600020906002020160008201548160000155600182015481600101559050505b60095460046120c291906133e8565b426120cd919061348a565b8482815481106120e0576120df612ec1565b5b906000526020600020906002020160000154101561210b57828061210390612ef0565b935050612357565b600954600361211a91906133e8565b42612125919061348a565b84828154811061213857612137612ec1565b5b90600052602060002090600202016000015410156121a15761271061027185838154811061216957612168612ec1565b5b90600052602060002090600202016001015461218591906133e8565b61218f9190613459565b8261219a9190612e21565b9150612357565b60095460026121b091906133e8565b426121bb919061348a565b8482815481106121ce576121cd612ec1565b5b9060005260206000209060020201600001541015612237576127106104e28583815481106121ff576121fe612ec1565b5b90600052602060002090600202016001015461221b91906133e8565b6122259190613459565b826122309190612e21565b9150612357565b600954600161224691906133e8565b42612251919061348a565b84828154811061226457612263612ec1565b5b90600052602060002090600202016000015410156122cd576127106109c485838154811061229557612294612ec1565b5b9060005260206000209060020201600101546122b191906133e8565b6122bb9190613459565b826122c69190612e21565b9150612357565b601e426122da919061348a565b8482815481106122ed576122ec612ec1565b5b90600052602060002090600202016000015410156123565761271061138885838154811061231e5761231d612ec1565b5b90600052602060002090600202016001015461233a91906133e8565b6123449190613459565b8261234f9190612e21565b9150612357565b5b808061236290612ef0565b915050612039565b5060005b828110156123c35783805480612387576123866136ee565b5b600190038181906000526020600020906002020160008082016000905560018201600090555050905580806123bb90612ef0565b91505061236e565b5082600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080546124129291906126b1565b508061241d866109fa565b612427919061348a565b9350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124979061378f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690613821565b60405180910390fd5b61251a8383836126a7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612597906138b3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161268e91906129bc565b60405180910390a36126a18484846126ac565b50505050565b505050565b505050565b82805482825590600052602060002090600202810192821561270c5760005260206000209160020282015b8281111561270b57828260008201548160000155600182015481600101555050916002019190600201906126dc565b5b509050612719919061271d565b5090565b5b808211156127405760008082016000905560018201600090555060020161271e565b5090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561277e578082015181840152602081019050612763565b60008484015250505050565b6000601f19601f8301169050919050565b60006127a682612744565b6127b0818561274f565b93506127c0818560208601612760565b6127c98161278a565b840191505092915050565b600060208201905081810360008301526127ee818461279b565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061282b82612800565b9050919050565b61283b81612820565b811461284657600080fd5b50565b60008135905061285881612832565b92915050565b6000819050919050565b6128718161285e565b811461287c57600080fd5b50565b60008135905061288e81612868565b92915050565b600080604083850312156128ab576128aa6127f6565b5b60006128b985828601612849565b92505060206128ca8582860161287f565b9150509250929050565b60008115159050919050565b6128e9816128d4565b82525050565b600060208201905061290460008301846128e0565b92915050565b6129138161285e565b82525050565b600060408201905061292e600083018561290a565b61293b602083018461290a565b9392505050565b6000819050919050565b600061296761296261295d84612800565b612942565b612800565b9050919050565b60006129798261294c565b9050919050565b600061298b8261296e565b9050919050565b61299b81612980565b82525050565b60006020820190506129b66000830184612992565b92915050565b60006020820190506129d1600083018461290a565b92915050565b6000806000606084860312156129f0576129ef6127f6565b5b60006129fe86828701612849565b9350506020612a0f86828701612849565b9250506040612a208682870161287f565b9150509250925092565b600060ff82169050919050565b612a4081612a2a565b82525050565b6000602082019050612a5b6000830184612a37565b92915050565b612a6a81612820565b82525050565b6000602082019050612a856000830184612a61565b92915050565b60008060408385031215612aa257612aa16127f6565b5b6000612ab08582860161287f565b9250506020612ac18582860161287f565b9150509250929050565b600060208284031215612ae157612ae06127f6565b5b6000612aef8482850161287f565b91505092915050565b600060208284031215612b0e57612b0d6127f6565b5b6000612b1c84828501612849565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612b4a57612b49612b25565b5b8235905067ffffffffffffffff811115612b6757612b66612b2a565b5b602083019150836020820283011115612b8357612b82612b2f565b5b9250929050565b612b93816128d4565b8114612b9e57600080fd5b50565b600081359050612bb081612b8a565b92915050565b600080600060408486031215612bcf57612bce6127f6565b5b600084013567ffffffffffffffff811115612bed57612bec6127fb565b5b612bf986828701612b34565b93509350506020612c0c86828701612ba1565b9150509250925092565b600060208284031215612c2c57612c2b6127f6565b5b6000612c3a84828501612ba1565b91505092915050565b60008060408385031215612c5a57612c596127f6565b5b6000612c6885828601612849565b9250506020612c7985828601612849565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612cb88161285e565b82525050565b604082016000820151612cd46000850182612caf565b506020820151612ce76020850182612caf565b50505050565b6000612cf98383612cbe565b60408301905092915050565b6000602082019050919050565b6000612d1d82612c83565b612d278185612c8e565b9350612d3283612c9f565b8060005b83811015612d63578151612d4a8882612ced565b9750612d5583612d05565b925050600181019050612d36565b5085935050505092915050565b60006020820190508181036000830152612d8a8184612d12565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dd957607f821691505b602082108103612dec57612deb612d92565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e2c8261285e565b9150612e378361285e565b9250828201905080821115612e4f57612e4e612df2565b5b92915050565b7f46656520697320746f6f20686967680000000000000000000000000000000000600082015250565b6000612e8b600f8361274f565b9150612e9682612e55565b602082019050919050565b60006020820190508181036000830152612eba81612e7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612efb8261285e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f2d57612f2c612df2565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f9460258361274f565b9150612f9f82612f38565b604082019050919050565b60006020820190508181036000830152612fc381612f87565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061302660268361274f565b915061303182612fca565b604082019050919050565b6000602082019050818103600083015261305581613019565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130b860248361274f565b91506130c38261305c565b604082019050919050565b600060208201905081810360008301526130e7816130ab565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061314a60228361274f565b9150613155826130ee565b604082019050919050565b600060208201905081810360008301526131798161313d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006131b6601d8361274f565b91506131c182613180565b602082019050919050565b600060208201905081810360008301526131e5816131a9565b9050919050565b7f596f752063616e2774207472616e7366657220746f20616e6f7468657220776160008201527f6c6c657400000000000000000000000000000000000000000000000000000000602082015250565b600061324860248361274f565b9150613253826131ec565b604082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b60006132b4601c8361274f565b91506132bf8261327e565b602082019050919050565b600060208201905081810360008301526132e3816132a7565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b600061334660238361274f565b9150613351826132ea565b604082019050919050565b6000602082019050818103600083015261337581613339565b9050919050565b7f496e73756666696369656e742062616c616e636520617661696c61626c650000600082015250565b60006133b2601e8361274f565b91506133bd8261337c565b602082019050919050565b600060208201905081810360008301526133e1816133a5565b9050919050565b60006133f38261285e565b91506133fe8361285e565b925082820261340c8161285e565b9150828204841483151761342357613422612df2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134648261285e565b915061346f8361285e565b92508261347f5761347e61342a565b5b828204905092915050565b60006134958261285e565b91506134a08361285e565b92508282039050818111156134b8576134b7612df2565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134f460208361274f565b91506134ff826134be565b602082019050919050565b60006020820190508181036000830152613523816134e7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061356881612832565b92915050565b600060208284031215613584576135836127f6565b5b600061359284828501613559565b91505092915050565b6000819050919050565b60006135c06135bb6135b68461359b565b612942565b61285e565b9050919050565b6135d0816135a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61360b81612820565b82525050565b600061361d8383613602565b60208301905092915050565b6000602082019050919050565b6000613641826135d6565b61364b81856135e1565b9350613656836135f2565b8060005b8381101561368757815161366e8882613611565b975061367983613629565b92505060018101905061365a565b5085935050505092915050565b600060a0820190506136a9600083018861290a565b6136b660208301876135c7565b81810360408301526136c88186613636565b90506136d76060830185612a61565b6136e4608083018461290a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061377960258361274f565b91506137848261371d565b604082019050919050565b600060208201905081810360008301526137a88161376c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061380b60238361274f565b9150613816826137af565b604082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061389d60268361274f565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b905091905056fea264697066735822122045077ef913969e5301519e061187af6967c62e9e43fcd9b178a9edbbf47eb98b64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c8063751039fc116100f757806398a5c31511610095578063dd62ed3e11610064578063dd62ed3e14610674578063e8a32462146106b1578063ef925399146106dc578063f2fde38b14610719576101d8565b806398a5c315146105a8578063a457c2d7146105d1578063a9059cbb1461060e578063dd40f0781461064b576101d8565b80638da5cb5b116100d15780638da5cb5b146104fe5780638f9a55c01461052957806390d2c93a1461055457806395d89b411461057d576101d8565b8063751039fc146104a55780637be842dd146104bc5780637d1db4a5146104d3576101d8565b80632fd689e31161016f57806352f7c9881161013e57806352f7c988146103ff57806361b2bb371461042857806370a0823114610451578063715018a61461048e576101d8565b80632fd689e314610341578063313ce5671461036c578063395093511461039757806349bd5a5e146103d4576101d8565b80631694505e116101ab5780631694505e1461028357806318160ddd146102ae5780632190e631146102d957806323b872dd14610304576101d8565b806306fdde03146101dd578063095ea7b3146102085780631453812814610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610742565b6040516101ff91906127d4565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190612894565b6107d4565b60405161023c91906128ef565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612894565b6107f7565b60405161027a929190612919565b60405180910390f35b34801561028f57600080fd5b50610298610838565b6040516102a591906129a1565b60405180910390f35b3480156102ba57600080fd5b506102c3610850565b6040516102d091906129bc565b60405180910390f35b3480156102e557600080fd5b506102ee61085a565b6040516102fb91906128ef565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906129d7565b61086d565b60405161033891906128ef565b60405180910390f35b34801561034d57600080fd5b5061035661089c565b60405161036391906129bc565b60405180910390f35b34801561037857600080fd5b506103816108a2565b60405161038e9190612a46565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612894565b6108ab565b6040516103cb91906128ef565b60405180910390f35b3480156103e057600080fd5b506103e96108e2565b6040516103f69190612a70565b60405180910390f35b34801561040b57600080fd5b5061042660048036038101906104219190612a8b565b610908565b005b34801561043457600080fd5b5061044f600480360381019061044a9190612acb565b6109e8565b005b34801561045d57600080fd5b5061047860048036038101906104739190612af8565b6109fa565b60405161048591906129bc565b60405180910390f35b34801561049a57600080fd5b506104a3610a42565b005b3480156104b157600080fd5b506104ba610a56565b005b3480156104c857600080fd5b506104d1610a7c565b005b3480156104df57600080fd5b506104e8610b20565b6040516104f591906129bc565b60405180910390f35b34801561050a57600080fd5b50610513610b26565b6040516105209190612a70565b60405180910390f35b34801561053557600080fd5b5061053e610b50565b60405161054b91906129bc565b60405180910390f35b34801561056057600080fd5b5061057b60048036038101906105769190612bb6565b610b56565b005b34801561058957600080fd5b50610592610c03565b60405161059f91906127d4565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca9190612acb565b610c95565b005b3480156105dd57600080fd5b506105f860048036038101906105f39190612894565b610ca7565b60405161060591906128ef565b60405180910390f35b34801561061a57600080fd5b5061063560048036038101906106309190612894565b610d1e565b60405161064291906128ef565b60405180910390f35b34801561065757600080fd5b50610672600480360381019061066d9190612c16565b610d41565b005b34801561068057600080fd5b5061069b60048036038101906106969190612c43565b610d66565b6040516106a891906129bc565b60405180910390f35b3480156106bd57600080fd5b506106c6610ded565b6040516106d391906129bc565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe9190612af8565b610df3565b6040516107109190612d70565b60405180910390f35b34801561072557600080fd5b50610740600480360381019061073b9190612af8565b610ea5565b005b60606003805461075190612dc1565b80601f016020809104026020016040519081016040528092919081815260200182805461077d90612dc1565b80156107ca5780601f1061079f576101008083540402835291602001916107ca565b820191906000526020600020905b8154815290600101906020018083116107ad57829003601f168201915b5050505050905090565b6000806107df610f28565b90506107ec818585610f30565b600191505092915050565b600d602052816000526040600020818154811061081357600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600a60009054906101000a900460ff1681565b600080610878610f28565b90506108858582856110f9565b610890858585611185565b60019150509392505050565b60085481565b60006012905090565b6000806108b6610f28565b90506108d78185856108c88589610d66565b6108d29190612e21565b610f30565b600191505092915050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610910611c7b565b7f000000000000000000000000000000000000000000000000000000000000001e821115610973576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096a90612ea1565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000001e8111156109d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cd90612ea1565b60405180910390fd5b81600b8190555080600c819055505050565b6109f0611c7b565b8060098190555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a4a611c7b565b610a546000611cf9565b565b610a5e611c7b565b610a66610850565b600681905550610a74610850565b600781905550565b60004790506000811115610ae65773c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610ae4573d6000803e3d6000fd5b505b6000610af1306109fa565b90506000811115610b1c57610b1a73c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5382610d1e565b505b5050565b60065481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075481565b610b5e611c7b565b60005b83839050811015610bfd5781600e6000868685818110610b8457610b83612ec1565b5b9050602002016020810190610b999190612af8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610bf590612ef0565b915050610b61565b50505050565b606060048054610c1290612dc1565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3e90612dc1565b8015610c8b5780601f10610c6057610100808354040283529160200191610c8b565b820191906000526020600020905b815481529060010190602001808311610c6e57829003601f168201915b5050505050905090565b610c9d611c7b565b8060088190555050565b600080610cb2610f28565b90506000610cc08286610d66565b905083811015610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90612faa565b60405180910390fd5b610d128286868403610f30565b60019250505092915050565b600080610d29610f28565b9050610d36818585611185565b600191505092915050565b610d49611c7b565b80600a60006101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6060600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015610e9a57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610e54565b505050509050919050565b610ead611c7b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f139061303c565b60405180910390fd5b610f2581611cf9565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f96906130ce565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590613160565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110ec91906129bc565b60405180910390a3505050565b60006111058484610d66565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461117f5781811015611171576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611168906131cc565b60405180910390fd5b61117e8484848403610f30565b5b50505050565b600a60009054906101000a900460ff1615806111ea5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806112345750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061128c5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806112e05750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061132a5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806113825750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b6113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b89061325e565b60405180910390fd5b6113c9610b26565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156114375750611407610b26565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156118215773c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156114cc575073c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561151757600654811115611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d906132ca565b60405180910390fd5b5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156115b5575073c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611601575073c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561165e5760075481611613846109fa565b61161d9190612e21565b1061165d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116549061335c565b60405180910390fd5b5b6000611669306109fa565b9050600654811061167a5760065490505b6000600854821015905080801561169e5750600f60149054906101000a900460ff16155b80156116f85750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b801561174e5750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117a45750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561181e576117b282611dbf565b6000479050600081111561181c5773c1ffc94a510c7ff3f00d64835c37a3a9a58b3b5373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561181a573d6000803e3d6000fd5b505b505b50505b60008060009050600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118c95750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061197c5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415801561197b5750600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561198a5760009050611b96565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015611a275750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611a3657600b549050600191505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611ad35750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15611b9557600a60009054906101000a900460ff161580611b3d5750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611b505750611b4c85611fef565b8311155b611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b86906133c8565b60405180910390fd5b600c5490505b5b600060648285611ba691906133e8565b611bb09190613459565b905060008185611bc0919061348a565b90508315611c5c57600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405280428152602001838152509080600181540180825580915050600190039060005260206000209060020201600090919091909150600082015181600001556020820151816001015550505b611c67878783612431565b611c72873084612431565b50505050505050565b611c83610f28565b73ffffffffffffffffffffffffffffffffffffffff16611ca1610b26565b73ffffffffffffffffffffffffffffffffffffffff1614611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee9061350a565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001600f60146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611df757611df661352a565b5b604051908082528060200260200182016040528015611e255781602001602082028036833780820191505090505b5090503081600081518110611e3d57611e3c612ec1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa919061356e565b81600181518110611f0e57611f0d612ec1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f9e959493929190613694565b600060405180830381600087803b158015611fb857600080fd5b505af1158015611fcc573d6000803e3d6000fd5b50505050506000600f60146101000a81548160ff02191690831515021790555050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008060005b838054905081101561236a5760008311156120b35783818154811061206157612060612ec1565b5b906000526020600020906002020184848361207c919061348a565b8154811061208d5761208c612ec1565b5b906000526020600020906002020160008201548160000155600182015481600101559050505b60095460046120c291906133e8565b426120cd919061348a565b8482815481106120e0576120df612ec1565b5b906000526020600020906002020160000154101561210b57828061210390612ef0565b935050612357565b600954600361211a91906133e8565b42612125919061348a565b84828154811061213857612137612ec1565b5b90600052602060002090600202016000015410156121a15761271061027185838154811061216957612168612ec1565b5b90600052602060002090600202016001015461218591906133e8565b61218f9190613459565b8261219a9190612e21565b9150612357565b60095460026121b091906133e8565b426121bb919061348a565b8482815481106121ce576121cd612ec1565b5b9060005260206000209060020201600001541015612237576127106104e28583815481106121ff576121fe612ec1565b5b90600052602060002090600202016001015461221b91906133e8565b6122259190613459565b826122309190612e21565b9150612357565b600954600161224691906133e8565b42612251919061348a565b84828154811061226457612263612ec1565b5b90600052602060002090600202016000015410156122cd576127106109c485838154811061229557612294612ec1565b5b9060005260206000209060020201600101546122b191906133e8565b6122bb9190613459565b826122c69190612e21565b9150612357565b601e426122da919061348a565b8482815481106122ed576122ec612ec1565b5b90600052602060002090600202016000015410156123565761271061138885838154811061231e5761231d612ec1565b5b90600052602060002090600202016001015461233a91906133e8565b6123449190613459565b8261234f9190612e21565b9150612357565b5b808061236290612ef0565b915050612039565b5060005b828110156123c35783805480612387576123866136ee565b5b600190038181906000526020600020906002020160008082016000905560018201600090555050905580806123bb90612ef0565b91505061236e565b5082600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209080546124129291906126b1565b508061241d866109fa565b612427919061348a565b9350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124979061378f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250690613821565b60405180910390fd5b61251a8383836126a7565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612597906138b3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161268e91906129bc565b60405180910390a36126a18484846126ac565b50505050565b505050565b505050565b82805482825590600052602060002090600202810192821561270c5760005260206000209160020282015b8281111561270b57828260008201548160000155600182015481600101555050916002019190600201906126dc565b5b509050612719919061271d565b5090565b5b808211156127405760008082016000905560018201600090555060020161271e565b5090565b600081519050919050565b600082825260208201905092915050565b60005b8381101561277e578082015181840152602081019050612763565b60008484015250505050565b6000601f19601f8301169050919050565b60006127a682612744565b6127b0818561274f565b93506127c0818560208601612760565b6127c98161278a565b840191505092915050565b600060208201905081810360008301526127ee818461279b565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061282b82612800565b9050919050565b61283b81612820565b811461284657600080fd5b50565b60008135905061285881612832565b92915050565b6000819050919050565b6128718161285e565b811461287c57600080fd5b50565b60008135905061288e81612868565b92915050565b600080604083850312156128ab576128aa6127f6565b5b60006128b985828601612849565b92505060206128ca8582860161287f565b9150509250929050565b60008115159050919050565b6128e9816128d4565b82525050565b600060208201905061290460008301846128e0565b92915050565b6129138161285e565b82525050565b600060408201905061292e600083018561290a565b61293b602083018461290a565b9392505050565b6000819050919050565b600061296761296261295d84612800565b612942565b612800565b9050919050565b60006129798261294c565b9050919050565b600061298b8261296e565b9050919050565b61299b81612980565b82525050565b60006020820190506129b66000830184612992565b92915050565b60006020820190506129d1600083018461290a565b92915050565b6000806000606084860312156129f0576129ef6127f6565b5b60006129fe86828701612849565b9350506020612a0f86828701612849565b9250506040612a208682870161287f565b9150509250925092565b600060ff82169050919050565b612a4081612a2a565b82525050565b6000602082019050612a5b6000830184612a37565b92915050565b612a6a81612820565b82525050565b6000602082019050612a856000830184612a61565b92915050565b60008060408385031215612aa257612aa16127f6565b5b6000612ab08582860161287f565b9250506020612ac18582860161287f565b9150509250929050565b600060208284031215612ae157612ae06127f6565b5b6000612aef8482850161287f565b91505092915050565b600060208284031215612b0e57612b0d6127f6565b5b6000612b1c84828501612849565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612b4a57612b49612b25565b5b8235905067ffffffffffffffff811115612b6757612b66612b2a565b5b602083019150836020820283011115612b8357612b82612b2f565b5b9250929050565b612b93816128d4565b8114612b9e57600080fd5b50565b600081359050612bb081612b8a565b92915050565b600080600060408486031215612bcf57612bce6127f6565b5b600084013567ffffffffffffffff811115612bed57612bec6127fb565b5b612bf986828701612b34565b93509350506020612c0c86828701612ba1565b9150509250925092565b600060208284031215612c2c57612c2b6127f6565b5b6000612c3a84828501612ba1565b91505092915050565b60008060408385031215612c5a57612c596127f6565b5b6000612c6885828601612849565b9250506020612c7985828601612849565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612cb88161285e565b82525050565b604082016000820151612cd46000850182612caf565b506020820151612ce76020850182612caf565b50505050565b6000612cf98383612cbe565b60408301905092915050565b6000602082019050919050565b6000612d1d82612c83565b612d278185612c8e565b9350612d3283612c9f565b8060005b83811015612d63578151612d4a8882612ced565b9750612d5583612d05565b925050600181019050612d36565b5085935050505092915050565b60006020820190508181036000830152612d8a8184612d12565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612dd957607f821691505b602082108103612dec57612deb612d92565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e2c8261285e565b9150612e378361285e565b9250828201905080821115612e4f57612e4e612df2565b5b92915050565b7f46656520697320746f6f20686967680000000000000000000000000000000000600082015250565b6000612e8b600f8361274f565b9150612e9682612e55565b602082019050919050565b60006020820190508181036000830152612eba81612e7e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612efb8261285e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f2d57612f2c612df2565b5b600182019050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612f9460258361274f565b9150612f9f82612f38565b604082019050919050565b60006020820190508181036000830152612fc381612f87565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061302660268361274f565b915061303182612fca565b604082019050919050565b6000602082019050818103600083015261305581613019565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130b860248361274f565b91506130c38261305c565b604082019050919050565b600060208201905081810360008301526130e7816130ab565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061314a60228361274f565b9150613155826130ee565b604082019050919050565b600060208201905081810360008301526131798161313d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006131b6601d8361274f565b91506131c182613180565b602082019050919050565b600060208201905081810360008301526131e5816131a9565b9050919050565b7f596f752063616e2774207472616e7366657220746f20616e6f7468657220776160008201527f6c6c657400000000000000000000000000000000000000000000000000000000602082015250565b600061324860248361274f565b9150613253826131ec565b604082019050919050565b600060208201905081810360008301526132778161323b565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b60006132b4601c8361274f565b91506132bf8261327e565b602082019050919050565b600060208201905081810360008301526132e3816132a7565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b600061334660238361274f565b9150613351826132ea565b604082019050919050565b6000602082019050818103600083015261337581613339565b9050919050565b7f496e73756666696369656e742062616c616e636520617661696c61626c650000600082015250565b60006133b2601e8361274f565b91506133bd8261337c565b602082019050919050565b600060208201905081810360008301526133e1816133a5565b9050919050565b60006133f38261285e565b91506133fe8361285e565b925082820261340c8161285e565b9150828204841483151761342357613422612df2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006134648261285e565b915061346f8361285e565b92508261347f5761347e61342a565b5b828204905092915050565b60006134958261285e565b91506134a08361285e565b92508282039050818111156134b8576134b7612df2565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134f460208361274f565b91506134ff826134be565b602082019050919050565b60006020820190508181036000830152613523816134e7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061356881612832565b92915050565b600060208284031215613584576135836127f6565b5b600061359284828501613559565b91505092915050565b6000819050919050565b60006135c06135bb6135b68461359b565b612942565b61285e565b9050919050565b6135d0816135a5565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61360b81612820565b82525050565b600061361d8383613602565b60208301905092915050565b6000602082019050919050565b6000613641826135d6565b61364b81856135e1565b9350613656836135f2565b8060005b8381101561368757815161366e8882613611565b975061367983613629565b92505060018101905061365a565b5085935050505092915050565b600060a0820190506136a9600083018861290a565b6136b660208301876135c7565b81810360408301526136c88186613636565b90506136d76060830185612a61565b6136e4608083018461290a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061377960258361274f565b91506137848261371d565b604082019050919050565b600060208201905081810360008301526137a88161376c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061380b60238361274f565b9150613816826137af565b604082019050919050565b6000602082019050818103600083015261383a816137fe565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061389d60268361274f565b91506138a882613841565b604082019050919050565b600060208201905081810360008301526138cc81613890565b905091905056fea264697066735822122045077ef913969e5301519e061187af6967c62e9e43fcd9b178a9edbbf47eb98b64736f6c63430008130033

Deployed Bytecode Sourcemap

22175:8810:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9989:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12415:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22735:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;22973:124;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11118:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22466:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13221:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22348:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10960:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13925:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23106:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29520:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29398:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11289:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3310:103;;;;;;;;;;;;;:::i;:::-;;29879:131;;;;;;;;;;;;;:::i;:::-;;30561:384;;;;;;;;;;;;;:::i;:::-;;22218:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2669:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22282:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30227:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10208:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30062:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14691:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11638:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29267:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11919:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22420:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23805:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3568:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9989:100;10043:13;10076:5;10069:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9989:100;:::o;12415:226::-;12523:4;12540:13;12556:12;:10;:12::i;:::-;12540:28;;12579:32;12588:5;12595:7;12604:6;12579:8;:32::i;:::-;12629:4;12622:11;;;12415:226;;;;:::o;22735:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22973:124::-;23054:42;22973:124;:::o;11118:108::-;11179:7;11206:12;;11199:19;;11118:108;:::o;22466:34::-;;;;;;;;;;;;;:::o;13221:295::-;13352:4;13369:15;13387:12;:10;:12::i;:::-;13369:30;;13410:38;13426:4;13432:7;13441:6;13410:15;:38::i;:::-;13459:27;13469:4;13475:2;13479:6;13459:9;:27::i;:::-;13504:4;13497:11;;;13221:295;;;;;:::o;22348:63::-;;;;:::o;10960:93::-;11018:5;11043:2;11036:9;;10960:93;:::o;13925:263::-;14038:4;14055:13;14071:12;:10;:12::i;:::-;14055:28;;14094:64;14103:5;14110:7;14147:10;14119:25;14129:5;14136:7;14119:9;:25::i;:::-;:38;;;;:::i;:::-;14094:8;:64::i;:::-;14176:4;14169:11;;;13925:263;;;;:::o;23106:28::-;;;;;;;;;;;;;:::o;29520:312::-;2555:13;:11;:13::i;:::-;29657:7:::1;29642:11;:22;;29634:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;29719:7;29703:12;:23;;29695:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;29774:11;29759:12;:26;;;;29812:12;29796:13;:28;;;;29520:312:::0;;:::o;29398:114::-;2555:13;:11;:13::i;:::-;29491::::1;29476:12;:28;;;;29398:114:::0;:::o;11289:143::-;11379:7;11406:9;:18;11416:7;11406:18;;;;;;;;;;;;;;;;11399:25;;11289:143;;;:::o;3310:103::-;2555:13;:11;:13::i;:::-;3375:30:::1;3402:1;3375:18;:30::i;:::-;3310:103::o:0;29879:131::-;2555:13;:11;:13::i;:::-;29948::::1;:11;:13::i;:::-;29933:12;:28;;;;29989:13;:11;:13::i;:::-;29972:14;:30;;;;29879:131::o:0;30561:384::-;30606:26;30635:21;30606:50;;30692:1;30671:18;:22;30667:95;;;22921:42;30710:20;;:40;30731:18;30710:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30667:95;30772:28;30803:24;30821:4;30803:9;:24::i;:::-;30772:55;;30865:1;30842:20;:24;30838:100;;;30883:43;22921:42;30905:20;30883:8;:43::i;:::-;;30838:100;30595:350;;30561:384::o;22218:57::-;;;;:::o;2669:87::-;2715:7;2742:6;;;;;;;;;;;2735:13;;2669:87;:::o;22282:59::-;;;;:::o;30227:254::-;2555:13;:11;:13::i;:::-;30364:9:::1;30359:115;30383:8;;:15;;30379:1;:19;30359:115;;;30454:8;30420:18;:31;30439:8;;30448:1;30439:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30420:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;30400:3;;;;;:::i;:::-;;;;30359:115;;;;30227:254:::0;;;:::o;10208:104::-;10264:13;10297:7;10290:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10208:104;:::o;30062:157::-;2555:13;:11;:13::i;:::-;30193:18:::1;30171:19;:40;;;;30062:157:::0;:::o;14691:498::-;14809:4;14826:13;14842:12;:10;:12::i;:::-;14826:28;;14865:24;14892:25;14902:5;14909:7;14892:9;:25::i;:::-;14865:52;;14970:15;14950:16;:35;;14928:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;15086:60;15095:5;15102:7;15130:15;15111:16;:34;15086:8;:60::i;:::-;15177:4;15170:11;;;;14691:498;;;;:::o;11638:218::-;11742:4;11759:13;11775:12;:10;:12::i;:::-;11759:28;;11798;11808:5;11815:2;11819:6;11798:9;:28::i;:::-;11844:4;11837:11;;;11638:218;;;;:::o;29267:123::-;2555:13;:11;:13::i;:::-;29366:16:::1;29348:15;;:34;;;;;;;;;;;;;;;;;;29267:123:::0;:::o;11919:176::-;12033:7;12060:11;:18;12072:5;12060:18;;;;;;;;;;;;;;;:27;12079:7;12060:27;;;;;;;;;;;;;;;;12053:34;;11919:176;;;;:::o;22420:39::-;;;;:::o;23805:154::-;23889:20;23929:12;:22;23942:8;23929:22;;;;;;;;;;;;;;;23922:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23805:154;;;:::o;3568:238::-;2555:13;:11;:13::i;:::-;3691:1:::1;3671:22;;:8;:22;;::::0;3649:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3770:28;3789:8;3770:18;:28::i;:::-;3568:238:::0;:::o;1193:98::-;1246:7;1273:10;1266:17;;1193:98;:::o;18817:380::-;18970:1;18953:19;;:5;:19;;;18945:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19051:1;19032:21;;:7;:21;;;19024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19135:6;19105:11;:18;19117:5;19105:18;;;;;;;;;;;;;;;:27;19124:7;19105:27;;;;;;;;;;;;;;;:36;;;;19173:7;19157:32;;19166:5;19157:32;;;19182:6;19157:32;;;;;;:::i;:::-;;;;;;;;18817:380;;;:::o;19488:502::-;19623:24;19650:25;19660:5;19667:7;19650:9;:25::i;:::-;19623:52;;19710:17;19690:16;:37;19686:297;;19790:6;19770:16;:26;;19744:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19905:51;19914:5;19921:7;19949:6;19930:16;:25;19905:8;:51::i;:::-;19686:297;19612:378;19488:502;;;:::o;25745:3067::-;25892:15;;;;;;;;;;;25891:16;:61;;;;25928:18;:24;25947:4;25928:24;;;;;;;;;;;;;;;;;;;;;;;;;25891:61;:114;;;;23054:42;25973:32;;:4;:32;;;25891:114;:156;;;;26034:13;;;;;;;;;;;26026:21;;:4;:21;;;25891:156;:199;;;;26068:18;:22;26087:2;26068:22;;;;;;;;;;;;;;;;;;;;;;;;;25891:199;:250;;;;23054:42;26111:30;;:2;:30;;;25891:250;:290;;;;26168:13;;;;;;;;;;;26162:19;;:2;:19;;;25891:290;25869:376;;;;;;;;;;;;:::i;:::-;;;;;;;;;26268:7;:5;:7::i;:::-;26260:15;;:4;:15;;;;:32;;;;;26285:7;:5;:7::i;:::-;26279:13;;:2;:13;;;;26260:32;26256:1278;;;22921:42;26313:17;;:2;:17;;;;:40;;;;;22921:42;26334:19;;:4;:19;;;;26313:40;26309:144;;;26392:12;;26382:6;:22;;26374:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;26309:144;26497:13;;;;;;;;;;;26491:19;;:2;:19;;;;:40;;;;;22921:42;26514:17;;:2;:17;;;;26491:40;:63;;;;;22921:42;26535:19;;:4;:19;;;;26491:63;26469:284;;;26644:14;;26635:6;26619:13;26629:2;26619:9;:13::i;:::-;:22;;;;:::i;:::-;:39;26589:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;26469:284;26767:28;26798:24;26816:4;26798:9;:24::i;:::-;26767:55;;26867:12;;26843:20;:36;26839:112;;26923:12;;26900:35;;26839:112;26967:12;27006:19;;26982:20;:43;;26967:58;;27064:7;:35;;;;;27093:6;;;;;;;;;;;27092:7;27064:35;:77;;;;;27128:13;;;;;;;;;;;27120:21;;:4;:21;;;;27064:77;:123;;;;;27163:18;:24;27182:4;27163:24;;;;;;;;;;;;;;;;;;;;;;;;;27162:25;27064:123;:167;;;;;27209:18;:22;27228:2;27209:22;;;;;;;;;;;;;;;;;;;;;;;;;27208:23;27064:167;27042:481;;;27266:38;27283:20;27266:16;:38::i;:::-;27325:26;27354:21;27325:50;;27419:1;27398:18;:22;27394:114;;;22921:42;27445:20;;:43;27466:21;27445:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27394:114;27247:276;27042:481;26294:1240;;26256:1278;27573:10;27594:15;27612:1;27594:19;;27643:18;:24;27662:4;27643:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;27671:18;:22;27690:2;27671:22;;;;;;;;;;;;;;;;;;;;;;;;;27643:50;27642:115;;;;27720:13;;;;;;;;;;;27712:21;;:4;:21;;;;:44;;;;;27743:13;;;;;;;;;;;27737:19;;:2;:19;;;;27712:44;27642:115;27624:820;;;27794:1;27784:11;;27624:820;;;27872:13;;;;;;;;;;;27864:21;;:4;:21;;;:55;;;;;23054:42;27889:30;;:2;:30;;;;27864:55;27860:149;;;27950:12;;27940:22;;27989:4;27981:12;;27860:149;28068:13;;;;;;;;;;;28062:19;;:2;:19;;;:55;;;;;23054:42;28085:32;;:4;:32;;;;28062:55;28058:375;;;28169:15;;;;;;;;;;;28168:16;:69;;;;28213:18;:24;28232:4;28213:24;;;;;;;;;;;;;;;;;;;;;;;;;28168:69;:133;;;;28276:25;28296:4;28276:19;:25::i;:::-;28266:6;:35;;28168:133;28138:237;;;;;;;;;;;;:::i;:::-;;;;;;;;;28404:13;;28394:23;;28058:375;27624:820;28456:13;28493:3;28482:7;28473:6;:16;;;;:::i;:::-;28472:24;;;;:::i;:::-;28456:40;;28507:23;28542:5;28533:6;:14;;;;:::i;:::-;28507:40;;28562:5;28558:138;;;28584:12;:16;28597:2;28584:16;;;;;;;;;;;;;;;28624:45;;;;;;;;28636:15;28624:45;;;;28653:15;28624:45;;;28584:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28558:138;28708:42;28724:4;28730:2;28734:15;28708;:42::i;:::-;28761:43;28777:4;28791;28798:5;28761:15;:43::i;:::-;25858:2954;;;;25745:3067;;;:::o;2834:132::-;2909:12;:10;:12::i;:::-;2898:23;;:7;:5;:7::i;:::-;:23;;;2890:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2834:132::o;3966:191::-;4040:16;4059:6;;;;;;;;;;;4040:25;;4085:8;4076:6;;:17;;;;;;;;;;;;;;;;;;4140:8;4109:40;;4130:8;4109:40;;;;;;;;;;;;4029:128;3966:191;:::o;28820:410::-;23310:4;23301:6;;:13;;;;;;;;;;;;;;;;;;28898:21:::1;28936:1;28922:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28898:40;;28967:4;28949;28954:1;28949:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23054:42;28993:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28983:4;28988:1;28983:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;23054:42;29026:66;;;29107:11;29133:1;29149:4;29176;29196:15;29026:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28887:343;23346:5:::0;23337:6;;:14;;;;;;;;;;;;;;;;;;28820:410;:::o;23985:1752::-;24049:7;24069:29;24101:12;:22;24114:8;24101:22;;;;;;;;;;;;;;;24069:54;;24134:18;24169:25;24214:6;24209:1359;24230:7;:14;;;;24226:1;:18;24209:1359;;;24283:1;24270:10;:14;24266:91;;;24331:7;24339:1;24331:10;;;;;;;;:::i;:::-;;;;;;;;;;;;24305:7;24317:10;24313:1;:14;;;;:::i;:::-;24305:23;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;;24266:91;24476:12;;24472:1;:16;;;;:::i;:::-;24454:15;:34;;;;:::i;:::-;24431:7;24439:1;24431:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;;:57;24427:137;;;24509:12;;;;;:::i;:::-;;;;24540:8;;24427:137;24687:12;;24683:1;:16;;;;:::i;:::-;24665:15;:34;;;;:::i;:::-;24642:7;24650:1;24642:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;;:57;24638:179;;;24769:5;24762:3;24742:7;24750:1;24742:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:17;;;:23;;;;:::i;:::-;24741:33;;;;:::i;:::-;24720:54;;;;;:::i;:::-;;;24793:8;;24638:179;24939:12;;24935:1;:16;;;;:::i;:::-;24917:15;:34;;;;:::i;:::-;24894:7;24902:1;24894:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;;:57;24890:180;;;25022:5;25014:4;24994:7;25002:1;24994:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:17;;;:24;;;;:::i;:::-;24993:34;;;;:::i;:::-;24972:55;;;;;:::i;:::-;;;25046:8;;24890:180;25189:12;;25185:1;:16;;;;:::i;:::-;25167:15;:34;;;;:::i;:::-;25144:7;25152:1;25144:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;;:57;25140:180;;;25272:5;25264:4;25244:7;25252:1;25244:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:17;;;:24;;;;:::i;:::-;25243:34;;;;:::i;:::-;25222:55;;;;;:::i;:::-;;;25296:8;;25140:180;25436:2;25418:15;:20;;;;:::i;:::-;25395:7;25403:1;25395:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:20;;;:43;25391:166;;;25509:5;25501:4;25481:7;25489:1;25481:10;;;;;;;;:::i;:::-;;;;;;;;;;;;:17;;;:24;;;;:::i;:::-;25480:34;;;;:::i;:::-;25459:55;;;;;:::i;:::-;;;25533:8;;25391:166;24209:1359;24246:3;;;;;:::i;:::-;;;;24209:1359;;;;25583:6;25578:51;25599:10;25595:1;:14;25578:51;;;25616:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25611:3;;;;;:::i;:::-;;;;25578:51;;;;25665:7;25640:12;:22;25653:8;25640:22;;;;;;;;;;;;;;;:32;;;;;;;;:::i;:::-;;25712:17;25690:19;25700:8;25690:9;:19::i;:::-;:39;;;;:::i;:::-;25683:46;;;;;23985:1752;;;:::o;15659:877::-;15806:1;15790:18;;:4;:18;;;15782:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15883:1;15869:16;;:2;:16;;;15861:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15938:38;15959:4;15965:2;15969:6;15938:20;:38::i;:::-;15989:19;16011:9;:15;16021:4;16011:15;;;;;;;;;;;;;;;;15989:37;;16074:6;16059:11;:21;;16037:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;16214:6;16200:11;:20;16182:9;:15;16192:4;16182:15;;;;;;;;;;;;;;;:38;;;;16417:6;16400:9;:13;16410:2;16400:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;16467:2;16452:26;;16461:4;16452:26;;;16471:6;16452:26;;;;;;:::i;:::-;;;;;;;;16491:37;16511:4;16517:2;16521:6;16491:19;:37::i;:::-;15771:765;15659:877;;;:::o;20590:125::-;;;;:::o;21319:124::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:332::-;3691:4;3729:2;3718:9;3714:18;3706:26;;3742:71;3810:1;3799:9;3795:17;3786:6;3742:71;:::i;:::-;3823:72;3891:2;3880:9;3876:18;3867:6;3823:72;:::i;:::-;3570:332;;;;;:::o;3908:60::-;3936:3;3957:5;3950:12;;3908:60;;;:::o;3974:142::-;4024:9;4057:53;4075:34;4084:24;4102:5;4084:24;:::i;:::-;4075:34;:::i;:::-;4057:53;:::i;:::-;4044:66;;3974:142;;;:::o;4122:126::-;4172:9;4205:37;4236:5;4205:37;:::i;:::-;4192:50;;4122:126;;;:::o;4254:152::-;4330:9;4363:37;4394:5;4363:37;:::i;:::-;4350:50;;4254:152;;;:::o;4412:183::-;4525:63;4582:5;4525:63;:::i;:::-;4520:3;4513:76;4412:183;;:::o;4601:274::-;4720:4;4758:2;4747:9;4743:18;4735:26;;4771:97;4865:1;4854:9;4850:17;4841:6;4771:97;:::i;:::-;4601:274;;;;:::o;4881:222::-;4974:4;5012:2;5001:9;4997:18;4989:26;;5025:71;5093:1;5082:9;5078:17;5069:6;5025:71;:::i;:::-;4881:222;;;;:::o;5109:619::-;5186:6;5194;5202;5251:2;5239:9;5230:7;5226:23;5222:32;5219:119;;;5257:79;;:::i;:::-;5219:119;5377:1;5402:53;5447:7;5438:6;5427:9;5423:22;5402:53;:::i;:::-;5392:63;;5348:117;5504:2;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5475:118;5632:2;5658:53;5703:7;5694:6;5683:9;5679:22;5658:53;:::i;:::-;5648:63;;5603:118;5109:619;;;;;:::o;5734:86::-;5769:7;5809:4;5802:5;5798:16;5787:27;;5734:86;;;:::o;5826:112::-;5909:22;5925:5;5909:22;:::i;:::-;5904:3;5897:35;5826:112;;:::o;5944:214::-;6033:4;6071:2;6060:9;6056:18;6048:26;;6084:67;6148:1;6137:9;6133:17;6124:6;6084:67;:::i;:::-;5944:214;;;;:::o;6164:118::-;6251:24;6269:5;6251:24;:::i;:::-;6246:3;6239:37;6164:118;;:::o;6288:222::-;6381:4;6419:2;6408:9;6404:18;6396:26;;6432:71;6500:1;6489:9;6485:17;6476:6;6432:71;:::i;:::-;6288:222;;;;:::o;6516:474::-;6584:6;6592;6641:2;6629:9;6620:7;6616:23;6612:32;6609:119;;;6647:79;;:::i;:::-;6609:119;6767:1;6792:53;6837:7;6828:6;6817:9;6813:22;6792:53;:::i;:::-;6782:63;;6738:117;6894:2;6920:53;6965:7;6956:6;6945:9;6941:22;6920:53;:::i;:::-;6910:63;;6865:118;6516:474;;;;;:::o;6996:329::-;7055:6;7104:2;7092:9;7083:7;7079:23;7075:32;7072:119;;;7110:79;;:::i;:::-;7072:119;7230:1;7255:53;7300:7;7291:6;7280:9;7276:22;7255:53;:::i;:::-;7245:63;;7201:117;6996:329;;;;:::o;7331:::-;7390:6;7439:2;7427:9;7418:7;7414:23;7410:32;7407:119;;;7445:79;;:::i;:::-;7407:119;7565:1;7590:53;7635:7;7626:6;7615:9;7611:22;7590:53;:::i;:::-;7580:63;;7536:117;7331:329;;;;:::o;7666:117::-;7775:1;7772;7765:12;7789:117;7898:1;7895;7888:12;7912:117;8021:1;8018;8011:12;8052:568;8125:8;8135:6;8185:3;8178:4;8170:6;8166:17;8162:27;8152:122;;8193:79;;:::i;:::-;8152:122;8306:6;8293:20;8283:30;;8336:18;8328:6;8325:30;8322:117;;;8358:79;;:::i;:::-;8322:117;8472:4;8464:6;8460:17;8448:29;;8526:3;8518:4;8510:6;8506:17;8496:8;8492:32;8489:41;8486:128;;;8533:79;;:::i;:::-;8486:128;8052:568;;;;;:::o;8626:116::-;8696:21;8711:5;8696:21;:::i;:::-;8689:5;8686:32;8676:60;;8732:1;8729;8722:12;8676:60;8626:116;:::o;8748:133::-;8791:5;8829:6;8816:20;8807:29;;8845:30;8869:5;8845:30;:::i;:::-;8748:133;;;;:::o;8887:698::-;8979:6;8987;8995;9044:2;9032:9;9023:7;9019:23;9015:32;9012:119;;;9050:79;;:::i;:::-;9012:119;9198:1;9187:9;9183:17;9170:31;9228:18;9220:6;9217:30;9214:117;;;9250:79;;:::i;:::-;9214:117;9363:80;9435:7;9426:6;9415:9;9411:22;9363:80;:::i;:::-;9345:98;;;;9141:312;9492:2;9518:50;9560:7;9551:6;9540:9;9536:22;9518:50;:::i;:::-;9508:60;;9463:115;8887:698;;;;;:::o;9591:323::-;9647:6;9696:2;9684:9;9675:7;9671:23;9667:32;9664:119;;;9702:79;;:::i;:::-;9664:119;9822:1;9847:50;9889:7;9880:6;9869:9;9865:22;9847:50;:::i;:::-;9837:60;;9793:114;9591:323;;;;:::o;9920:474::-;9988:6;9996;10045:2;10033:9;10024:7;10020:23;10016:32;10013:119;;;10051:79;;:::i;:::-;10013:119;10171:1;10196:53;10241:7;10232:6;10221:9;10217:22;10196:53;:::i;:::-;10186:63;;10142:117;10298:2;10324:53;10369:7;10360:6;10349:9;10345:22;10324:53;:::i;:::-;10314:63;;10269:118;9920:474;;;;;:::o;10400:142::-;10495:6;10529:5;10523:12;10513:22;;10400:142;;;:::o;10548:212::-;10675:11;10709:6;10704:3;10697:19;10749:4;10744:3;10740:14;10725:29;;10548:212;;;;:::o;10766:160::-;10861:4;10884:3;10876:11;;10914:4;10909:3;10905:14;10897:22;;10766:160;;;:::o;10932:108::-;11009:24;11027:5;11009:24;:::i;:::-;11004:3;10997:37;10932:108;;:::o;11112:510::-;11255:4;11250:3;11246:14;11347:4;11340:5;11336:16;11330:23;11366:63;11423:4;11418:3;11414:14;11400:12;11366:63;:::i;:::-;11270:169;11523:4;11516:5;11512:16;11506:23;11542:63;11599:4;11594:3;11590:14;11576:12;11542:63;:::i;:::-;11449:166;11224:398;11112:510;;:::o;11628:291::-;11753:10;11774:102;11872:3;11864:6;11774:102;:::i;:::-;11908:4;11903:3;11899:14;11885:28;;11628:291;;;;:::o;11925:141::-;12023:4;12055;12050:3;12046:14;12038:22;;11925:141;;;:::o;12142:956::-;12317:3;12346:82;12422:5;12346:82;:::i;:::-;12444:114;12551:6;12546:3;12444:114;:::i;:::-;12437:121;;12582:84;12660:5;12582:84;:::i;:::-;12689:7;12720:1;12705:368;12730:6;12727:1;12724:13;12705:368;;;12806:6;12800:13;12833:119;12948:3;12933:13;12833:119;:::i;:::-;12826:126;;12975:88;13056:6;12975:88;:::i;:::-;12965:98;;12765:308;12752:1;12749;12745:9;12740:14;;12705:368;;;12709:14;13089:3;13082:10;;12322:776;;;12142:956;;;;:::o;13104:485::-;13303:4;13341:2;13330:9;13326:18;13318:26;;13390:9;13384:4;13380:20;13376:1;13365:9;13361:17;13354:47;13418:164;13577:4;13568:6;13418:164;:::i;:::-;13410:172;;13104:485;;;;:::o;13595:180::-;13643:77;13640:1;13633:88;13740:4;13737:1;13730:15;13764:4;13761:1;13754:15;13781:320;13825:6;13862:1;13856:4;13852:12;13842:22;;13909:1;13903:4;13899:12;13930:18;13920:81;;13986:4;13978:6;13974:17;13964:27;;13920:81;14048:2;14040:6;14037:14;14017:18;14014:38;14011:84;;14067:18;;:::i;:::-;14011:84;13832:269;13781:320;;;:::o;14107:180::-;14155:77;14152:1;14145:88;14252:4;14249:1;14242:15;14276:4;14273:1;14266:15;14293:191;14333:3;14352:20;14370:1;14352:20;:::i;:::-;14347:25;;14386:20;14404:1;14386:20;:::i;:::-;14381:25;;14429:1;14426;14422:9;14415:16;;14450:3;14447:1;14444:10;14441:36;;;14457:18;;:::i;:::-;14441:36;14293:191;;;;:::o;14490:165::-;14630:17;14626:1;14618:6;14614:14;14607:41;14490:165;:::o;14661:366::-;14803:3;14824:67;14888:2;14883:3;14824:67;:::i;:::-;14817:74;;14900:93;14989:3;14900:93;:::i;:::-;15018:2;15013:3;15009:12;15002:19;;14661:366;;;:::o;15033:419::-;15199:4;15237:2;15226:9;15222:18;15214:26;;15286:9;15280:4;15276:20;15272:1;15261:9;15257:17;15250:47;15314:131;15440:4;15314:131;:::i;:::-;15306:139;;15033:419;;;:::o;15458:180::-;15506:77;15503:1;15496:88;15603:4;15600:1;15593:15;15627:4;15624:1;15617:15;15644:233;15683:3;15706:24;15724:5;15706:24;:::i;:::-;15697:33;;15752:66;15745:5;15742:77;15739:103;;15822:18;;:::i;:::-;15739:103;15869:1;15862:5;15858:13;15851:20;;15644:233;;;:::o;15883:224::-;16023:34;16019:1;16011:6;16007:14;16000:58;16092:7;16087:2;16079:6;16075:15;16068:32;15883:224;:::o;16113:366::-;16255:3;16276:67;16340:2;16335:3;16276:67;:::i;:::-;16269:74;;16352:93;16441:3;16352:93;:::i;:::-;16470:2;16465:3;16461:12;16454:19;;16113:366;;;:::o;16485:419::-;16651:4;16689:2;16678:9;16674:18;16666:26;;16738:9;16732:4;16728:20;16724:1;16713:9;16709:17;16702:47;16766:131;16892:4;16766:131;:::i;:::-;16758:139;;16485:419;;;:::o;16910:225::-;17050:34;17046:1;17038:6;17034:14;17027:58;17119:8;17114:2;17106:6;17102:15;17095:33;16910:225;:::o;17141:366::-;17283:3;17304:67;17368:2;17363:3;17304:67;:::i;:::-;17297:74;;17380:93;17469:3;17380:93;:::i;:::-;17498:2;17493:3;17489:12;17482:19;;17141:366;;;:::o;17513:419::-;17679:4;17717:2;17706:9;17702:18;17694:26;;17766:9;17760:4;17756:20;17752:1;17741:9;17737:17;17730:47;17794:131;17920:4;17794:131;:::i;:::-;17786:139;;17513:419;;;:::o;17938:223::-;18078:34;18074:1;18066:6;18062:14;18055:58;18147:6;18142:2;18134:6;18130:15;18123:31;17938:223;:::o;18167:366::-;18309:3;18330:67;18394:2;18389:3;18330:67;:::i;:::-;18323:74;;18406:93;18495:3;18406:93;:::i;:::-;18524:2;18519:3;18515:12;18508:19;;18167:366;;;:::o;18539:419::-;18705:4;18743:2;18732:9;18728:18;18720:26;;18792:9;18786:4;18782:20;18778:1;18767:9;18763:17;18756:47;18820:131;18946:4;18820:131;:::i;:::-;18812:139;;18539:419;;;:::o;18964:221::-;19104:34;19100:1;19092:6;19088:14;19081:58;19173:4;19168:2;19160:6;19156:15;19149:29;18964:221;:::o;19191:366::-;19333:3;19354:67;19418:2;19413:3;19354:67;:::i;:::-;19347:74;;19430:93;19519:3;19430:93;:::i;:::-;19548:2;19543:3;19539:12;19532:19;;19191:366;;;:::o;19563:419::-;19729:4;19767:2;19756:9;19752:18;19744:26;;19816:9;19810:4;19806:20;19802:1;19791:9;19787:17;19780:47;19844:131;19970:4;19844:131;:::i;:::-;19836:139;;19563:419;;;:::o;19988:179::-;20128:31;20124:1;20116:6;20112:14;20105:55;19988:179;:::o;20173:366::-;20315:3;20336:67;20400:2;20395:3;20336:67;:::i;:::-;20329:74;;20412:93;20501:3;20412:93;:::i;:::-;20530:2;20525:3;20521:12;20514:19;;20173:366;;;:::o;20545:419::-;20711:4;20749:2;20738:9;20734:18;20726:26;;20798:9;20792:4;20788:20;20784:1;20773:9;20769:17;20762:47;20826:131;20952:4;20826:131;:::i;:::-;20818:139;;20545:419;;;:::o;20970:223::-;21110:34;21106:1;21098:6;21094:14;21087:58;21179:6;21174:2;21166:6;21162:15;21155:31;20970:223;:::o;21199:366::-;21341:3;21362:67;21426:2;21421:3;21362:67;:::i;:::-;21355:74;;21438:93;21527:3;21438:93;:::i;:::-;21556:2;21551:3;21547:12;21540:19;;21199:366;;;:::o;21571:419::-;21737:4;21775:2;21764:9;21760:18;21752:26;;21824:9;21818:4;21814:20;21810:1;21799:9;21795:17;21788:47;21852:131;21978:4;21852:131;:::i;:::-;21844:139;;21571:419;;;:::o;21996:178::-;22136:30;22132:1;22124:6;22120:14;22113:54;21996:178;:::o;22180:366::-;22322:3;22343:67;22407:2;22402:3;22343:67;:::i;:::-;22336:74;;22419:93;22508:3;22419:93;:::i;:::-;22537:2;22532:3;22528:12;22521:19;;22180:366;;;:::o;22552:419::-;22718:4;22756:2;22745:9;22741:18;22733:26;;22805:9;22799:4;22795:20;22791:1;22780:9;22776:17;22769:47;22833:131;22959:4;22833:131;:::i;:::-;22825:139;;22552:419;;;:::o;22977:222::-;23117:34;23113:1;23105:6;23101:14;23094:58;23186:5;23181:2;23173:6;23169:15;23162:30;22977:222;:::o;23205:366::-;23347:3;23368:67;23432:2;23427:3;23368:67;:::i;:::-;23361:74;;23444:93;23533:3;23444:93;:::i;:::-;23562:2;23557:3;23553:12;23546:19;;23205:366;;;:::o;23577:419::-;23743:4;23781:2;23770:9;23766:18;23758:26;;23830:9;23824:4;23820:20;23816:1;23805:9;23801:17;23794:47;23858:131;23984:4;23858:131;:::i;:::-;23850:139;;23577:419;;;:::o;24002:180::-;24142:32;24138:1;24130:6;24126:14;24119:56;24002:180;:::o;24188:366::-;24330:3;24351:67;24415:2;24410:3;24351:67;:::i;:::-;24344:74;;24427:93;24516:3;24427:93;:::i;:::-;24545:2;24540:3;24536:12;24529:19;;24188:366;;;:::o;24560:419::-;24726:4;24764:2;24753:9;24749:18;24741:26;;24813:9;24807:4;24803:20;24799:1;24788:9;24784:17;24777:47;24841:131;24967:4;24841:131;:::i;:::-;24833:139;;24560:419;;;:::o;24985:410::-;25025:7;25048:20;25066:1;25048:20;:::i;:::-;25043:25;;25082:20;25100:1;25082:20;:::i;:::-;25077:25;;25137:1;25134;25130:9;25159:30;25177:11;25159:30;:::i;:::-;25148:41;;25338:1;25329:7;25325:15;25322:1;25319:22;25299:1;25292:9;25272:83;25249:139;;25368:18;;:::i;:::-;25249:139;25033:362;24985:410;;;;:::o;25401:180::-;25449:77;25446:1;25439:88;25546:4;25543:1;25536:15;25570:4;25567:1;25560:15;25587:185;25627:1;25644:20;25662:1;25644:20;:::i;:::-;25639:25;;25678:20;25696:1;25678:20;:::i;:::-;25673:25;;25717:1;25707:35;;25722:18;;:::i;:::-;25707:35;25764:1;25761;25757:9;25752:14;;25587:185;;;;:::o;25778:194::-;25818:4;25838:20;25856:1;25838:20;:::i;:::-;25833:25;;25872:20;25890:1;25872:20;:::i;:::-;25867:25;;25916:1;25913;25909:9;25901:17;;25940:1;25934:4;25931:11;25928:37;;;25945:18;;:::i;:::-;25928:37;25778:194;;;;:::o;25978:182::-;26118:34;26114:1;26106:6;26102:14;26095:58;25978:182;:::o;26166:366::-;26308:3;26329:67;26393:2;26388:3;26329:67;:::i;:::-;26322:74;;26405:93;26494:3;26405:93;:::i;:::-;26523:2;26518:3;26514:12;26507:19;;26166:366;;;:::o;26538:419::-;26704:4;26742:2;26731:9;26727:18;26719:26;;26791:9;26785:4;26781:20;26777:1;26766:9;26762:17;26755:47;26819:131;26945:4;26819:131;:::i;:::-;26811:139;;26538:419;;;:::o;26963:180::-;27011:77;27008:1;27001:88;27108:4;27105:1;27098:15;27132:4;27129:1;27122:15;27149:143;27206:5;27237:6;27231:13;27222:22;;27253:33;27280:5;27253:33;:::i;:::-;27149:143;;;;:::o;27298:351::-;27368:6;27417:2;27405:9;27396:7;27392:23;27388:32;27385:119;;;27423:79;;:::i;:::-;27385:119;27543:1;27568:64;27624:7;27615:6;27604:9;27600:22;27568:64;:::i;:::-;27558:74;;27514:128;27298:351;;;;:::o;27655:85::-;27700:7;27729:5;27718:16;;27655:85;;;:::o;27746:158::-;27804:9;27837:61;27855:42;27864:32;27890:5;27864:32;:::i;:::-;27855:42;:::i;:::-;27837:61;:::i;:::-;27824:74;;27746:158;;;:::o;27910:147::-;28005:45;28044:5;28005:45;:::i;:::-;28000:3;27993:58;27910:147;;:::o;28063:114::-;28130:6;28164:5;28158:12;28148:22;;28063:114;;;:::o;28183:184::-;28282:11;28316:6;28311:3;28304:19;28356:4;28351:3;28347:14;28332:29;;28183:184;;;;:::o;28373:132::-;28440:4;28463:3;28455:11;;28493:4;28488:3;28484:14;28476:22;;28373:132;;;:::o;28511:108::-;28588:24;28606:5;28588:24;:::i;:::-;28583:3;28576:37;28511:108;;:::o;28625:179::-;28694:10;28715:46;28757:3;28749:6;28715:46;:::i;:::-;28793:4;28788:3;28784:14;28770:28;;28625:179;;;;:::o;28810:113::-;28880:4;28912;28907:3;28903:14;28895:22;;28810:113;;;:::o;28959:732::-;29078:3;29107:54;29155:5;29107:54;:::i;:::-;29177:86;29256:6;29251:3;29177:86;:::i;:::-;29170:93;;29287:56;29337:5;29287:56;:::i;:::-;29366:7;29397:1;29382:284;29407:6;29404:1;29401:13;29382:284;;;29483:6;29477:13;29510:63;29569:3;29554:13;29510:63;:::i;:::-;29503:70;;29596:60;29649:6;29596:60;:::i;:::-;29586:70;;29442:224;29429:1;29426;29422:9;29417:14;;29382:284;;;29386:14;29682:3;29675:10;;29083:608;;;28959:732;;;;:::o;29697:831::-;29960:4;29998:3;29987:9;29983:19;29975:27;;30012:71;30080:1;30069:9;30065:17;30056:6;30012:71;:::i;:::-;30093:80;30169:2;30158:9;30154:18;30145:6;30093:80;:::i;:::-;30220:9;30214:4;30210:20;30205:2;30194:9;30190:18;30183:48;30248:108;30351:4;30342:6;30248:108;:::i;:::-;30240:116;;30366:72;30434:2;30423:9;30419:18;30410:6;30366:72;:::i;:::-;30448:73;30516:3;30505:9;30501:19;30492:6;30448:73;:::i;:::-;29697:831;;;;;;;;:::o;30534:180::-;30582:77;30579:1;30572:88;30679:4;30676:1;30669:15;30703:4;30700:1;30693:15;30720:224;30860:34;30856:1;30848:6;30844:14;30837:58;30929:7;30924:2;30916:6;30912:15;30905:32;30720:224;:::o;30950:366::-;31092:3;31113:67;31177:2;31172:3;31113:67;:::i;:::-;31106:74;;31189:93;31278:3;31189:93;:::i;:::-;31307:2;31302:3;31298:12;31291:19;;30950:366;;;:::o;31322:419::-;31488:4;31526:2;31515:9;31511:18;31503:26;;31575:9;31569:4;31565:20;31561:1;31550:9;31546:17;31539:47;31603:131;31729:4;31603:131;:::i;:::-;31595:139;;31322:419;;;:::o;31747:222::-;31887:34;31883:1;31875:6;31871:14;31864:58;31956:5;31951:2;31943:6;31939:15;31932:30;31747:222;:::o;31975:366::-;32117:3;32138:67;32202:2;32197:3;32138:67;:::i;:::-;32131:74;;32214:93;32303:3;32214:93;:::i;:::-;32332:2;32327:3;32323:12;32316:19;;31975:366;;;:::o;32347:419::-;32513:4;32551:2;32540:9;32536:18;32528:26;;32600:9;32594:4;32590:20;32586:1;32575:9;32571:17;32564:47;32628:131;32754:4;32628:131;:::i;:::-;32620:139;;32347:419;;;:::o;32772:225::-;32912:34;32908:1;32900:6;32896:14;32889:58;32981:8;32976:2;32968:6;32964:15;32957:33;32772:225;:::o;33003:366::-;33145:3;33166:67;33230:2;33225:3;33166:67;:::i;:::-;33159:74;;33242:93;33331:3;33242:93;:::i;:::-;33360:2;33355:3;33351:12;33344:19;;33003:366;;;:::o;33375:419::-;33541:4;33579:2;33568:9;33564:18;33556:26;;33628:9;33622:4;33618:20;33614:1;33603:9;33599:17;33592:47;33656:131;33782:4;33656:131;:::i;:::-;33648:139;;33375:419;;;:::o

Swarm Source

ipfs://45077ef913969e5301519e061187af6967c62e9e43fcd9b178a9edbbf47eb98b
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.