ETH Price: $2,445.33 (+3.40%)

Token

BUILD (CZ)
 

Overview

Max Total Supply

100,000,000 CZ

Holders

13

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,408,392.121980693 CZ

Value
$0.00
0xd641c50c36a454d325b8fdfe69e017979c431bf0
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:
Token

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-04
*/

// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.7;

// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

/**
 * @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/interfaces/IERC20.sol
// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)


// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @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/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

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

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

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

    /**
     * @dev 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 anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

// File: contracts/Token.sol

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

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

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

contract Token is Context, IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "BUILD";
    string private constant _symbol = "CZ";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public launchBlock;

    // Buy Fee
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 6;

    // Sell Fee
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 6;

    // Original Fee
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousRedisFee = _redisFee;
    uint256 private _previousTaxFee = _taxFee;

    mapping(address => bool) public bots;
    mapping(address => uint256) private cooldown;

    address payable private _operationsAddress;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private tradingOpen = true;
    bool private inSwap = false;
    bool private swapEnabled = true;

    uint256 public _maxTxAmount = 2_000_000 * 10**_decimals;
    uint256 public _maxWalletSize = 6_000_000 * 10**_decimals;
    uint256 public _swapTokensAtAmount = 800_000 * 10**_decimals;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _operationsAddress = payable(_msgSender());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_operationsAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

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

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousRedisFee = _redisFee;
        _previousTaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousRedisFee;
        _taxFee = _previousTaxFee;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        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);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {
            // Trade start check.
            if (!tradingOpen) {
                require(
                    from == owner(),
                    "TOKEN: This account cannot send tokens until trading is enabled"
                );
            }

            require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
            require(
                !bots[from] && !bots[to],
                "TOKEN: Your account is blacklisted!"
            );

            if (
                block.number <= launchBlock &&
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                to != address(this)
            ) {
                bots[to] = true;
            }

            if (to != uniswapV2Pair) {
                require(
                    balanceOf(to) + amount < _maxWalletSize,
                    "TOKEN: Balance exceeds wallet size!"
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

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

            if (
                canSwap &&
                !inSwap &&
                from != uniswapV2Pair &&
                swapEnabled &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        // Transfer tokens.
        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        } else {
            // Set fee for buys.
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            // Set fee for sells.
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

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

    function sendETHToFee(uint256 amount) private {
        (bool sentOperationsFee,) = _operationsAddress.call{value: amount}("");
        require(sentOperationsFee, "Failed to send dev fee.");
    }

    function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
        launchBlock = block.number;
    }

    function manualSwap() external {
        require(
            _msgSender() == _operationsAddress ||
            _msgSender() == owner()
        );
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external {
        require(
            _msgSender() == _operationsAddress ||
            _msgSender() == owner()
        );
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function blockBots(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function unblockBot(address notBot) public onlyOwner {
        bots[notBot] = false;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(
            tAmount,
            _redisFee,
            _taxFee
        );
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tTeam,
            currentRate
        );

        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);

        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);

        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();

        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);

        return (rSupply, tSupply);
    }

    function setFee(
        uint256 redisFeeOnBuy,
        uint256 redisFeeOnSell,
        uint256 taxFeeOnBuy,
        uint256 taxFeeOnSell
    ) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;

        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

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

    // Enable/Disable token swaps.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

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

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":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notBot","type":"address"}],"name":"unblockBot","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"}]

60806040526009600a62000014919062000809565b6305f5e10062000025919062000946565b60001962000034919062000a2d565b600019620000439190620009a7565b600555600060085560066009556000600a556006600b55600a54600c55600b54600d55600c54600e55600d54600f5560016014806101000a81548160ff0219169083151502179055506000601460156101000a81548160ff0219169083151502179055506001601460166101000a81548160ff0219169083151502179055506009600a620000d2919062000809565b621e8480620000e2919062000946565b6015556009600a620000f5919062000809565b625b8d8062000105919062000946565b6016556009600a62000118919062000809565b620c350062000128919062000946565b6017553480156200013857600080fd5b50620001596200014d6200060460201b60201c565b6200060c60201b60201c565b60055460016000620001706200060460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024f57600080fd5b505afa15801562000264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028a919062000710565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002ed57600080fd5b505afa15801562000302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000328919062000710565b6040518363ffffffff1660e01b81526004016200034792919062000764565b602060405180830381600087803b1580156200036257600080fd5b505af115801562000377573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039d919062000710565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ed6200060460201b60201c565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016004600062000443620006d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005766200060460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a620005d5919062000809565b6305f5e100620005e6919062000946565b604051620005f5919062000791565b60405180910390a35062000aef565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000815190506200070a8162000ad5565b92915050565b60006020828403121562000729576200072862000ac3565b5b60006200073984828501620006f9565b91505092915050565b6200074d81620009e2565b82525050565b6200075e8162000a16565b82525050565b60006040820190506200077b600083018562000742565b6200078a602083018462000742565b9392505050565b6000602082019050620007a8600083018462000753565b92915050565b6000808291508390505b60018511156200080057808604811115620007d857620007d762000a65565b5b6001851615620007e85780820291505b8081029050620007f88562000ac8565b9450620007b8565b94509492505050565b6000620008168262000a16565b9150620008238362000a20565b9250620008527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200085a565b905092915050565b6000826200086c57600190506200093f565b816200087c57600090506200093f565b8160018114620008955760028114620008a057620008d6565b60019150506200093f565b60ff841115620008b557620008b462000a65565b5b8360020a915084821115620008cf57620008ce62000a65565b5b506200093f565b5060208310610133831016604e8410600b8410161715620009105782820a9050838111156200090a576200090962000a65565b5b6200093f565b6200091f8484846001620007ae565b9250905081840481111562000939576200093862000a65565b5b81810290505b9392505050565b6000620009538262000a16565b9150620009608362000a16565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200099c576200099b62000a65565b5b828202905092915050565b6000620009b48262000a16565b9150620009c18362000a16565b925082821015620009d757620009d662000a65565b5b828203905092915050565b6000620009ef82620009f6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600062000a3a8262000a16565b915062000a478362000a16565b92508262000a5a5762000a5962000a94565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b62000ae081620009e2565b811462000aec57600080fd5b50565b6138e18062000aff6000396000f3fe6080604052600436106101d05760003560e01c80637d1db4a5116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e1461065c578063ea1644d514610699578063f2fde38b146106c2578063f4293890146106eb576101d7565b8063a9059cbb1461058e578063bfd79284146105cb578063c492f04614610608578063d00efb2f14610631576101d7565b80638f9a55c0116100d15780638f9a55c0146104e657806395d89b411461051157806398a5c3151461053c578063a2a957bb14610565576101d7565b80637d1db4a5146104675780638da5cb5b146104925780638f70ccf7146104bd576101d7565b8063313ce5671161016f5780636d8aa8f81161013e5780636d8aa8f8146103c157806370a08231146103ea578063715018a61461042757806374010ece1461043e576101d7565b8063313ce5671461032b57806349bd5a5e1461035657806351bc3c85146103815780636b99905314610398576101d7565b80631694505e116101ab5780631694505e1461026d57806318160ddd1461029857806323b872dd146102c35780632fd689e314610300576101d7565b8062b8cf2a146101dc57806306fdde0314610205578063095ea7b314610230576101d7565b366101d757005b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612872565b610702565b005b34801561021157600080fd5b5061021a61079f565b6040516102279190612ce4565b60405180910390f35b34801561023c57600080fd5b50610257600480360381019061025291906127d2565b6107dc565b6040516102649190612cae565b60405180910390f35b34801561027957600080fd5b506102826107fa565b60405161028f9190612cc9565b60405180910390f35b3480156102a457600080fd5b506102ad610820565b6040516102ba9190612ea6565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061277f565b610844565b6040516102f79190612cae565b60405180910390f35b34801561030c57600080fd5b5061031561091d565b6040516103229190612ea6565b60405180910390f35b34801561033757600080fd5b50610340610923565b60405161034d9190612f1b565b60405180910390f35b34801561036257600080fd5b5061036b61092c565b6040516103789190612c93565b60405180910390f35b34801561038d57600080fd5b50610396610952565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906126e5565b610a10565b005b3480156103cd57600080fd5b506103e860048036038101906103e391906128bb565b610a73565b005b3480156103f657600080fd5b50610411600480360381019061040c91906126e5565b610a98565b60405161041e9190612ea6565b60405180910390f35b34801561043357600080fd5b5061043c610ae9565b005b34801561044a57600080fd5b50610465600480360381019061046091906128e8565b610afd565b005b34801561047357600080fd5b5061047c610b0f565b6040516104899190612ea6565b60405180910390f35b34801561049e57600080fd5b506104a7610b15565b6040516104b49190612c93565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906128bb565b610b3e565b005b3480156104f257600080fd5b506104fb610b69565b6040516105089190612ea6565b60405180910390f35b34801561051d57600080fd5b50610526610b6f565b6040516105339190612ce4565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e91906128e8565b610bac565b005b34801561057157600080fd5b5061058c60048036038101906105879190612915565b610bbe565b005b34801561059a57600080fd5b506105b560048036038101906105b091906127d2565b610be8565b6040516105c29190612cae565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906126e5565b610c06565b6040516105ff9190612cae565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612812565b610c26565b005b34801561063d57600080fd5b50610646610cd3565b6040516106539190612ea6565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e919061273f565b610cd9565b6040516106909190612ea6565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb91906128e8565b610d60565b005b3480156106ce57600080fd5b506106e960048036038101906106e491906126e5565b610d72565b005b3480156106f757600080fd5b50610700610df6565b005b61070a610eac565b60005b815181101561079b5760016010600084848151811061072f5761072e613415565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806107939061336e565b91505061070d565b5050565b60606040518060400160405280600581526020017f4255494c44000000000000000000000000000000000000000000000000000000815250905090565b60006107f06107e9610f2a565b8484610f32565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a61083091906130c1565b6305f5e10061083f91906131df565b905090565b60006108518484846110fd565b6109128461085d610f2a565b61090d8560405180606001604052806028815260200161388460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c3610f2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad19092919063ffffffff16565b610f32565b600190509392505050565b60175481565b60006009905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610993610f2a565b73ffffffffffffffffffffffffffffffffffffffff1614806109ee57506109b8610b15565b73ffffffffffffffffffffffffffffffffffffffff166109d6610f2a565b73ffffffffffffffffffffffffffffffffffffffff16145b6109f757600080fd5b6000610a0230610a98565b9050610a0d81611b26565b50565b610a18610eac565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610a7b610eac565b80601460166101000a81548160ff02191690831515021790555050565b6000610ae2600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dae565b9050919050565b610af1610eac565b610afb6000611e1c565b565b610b05610eac565b8060158190555050565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b46610eac565b806014806101000a81548160ff0219169083151502179055504360078190555050565b60165481565b60606040518060400160405280600281526020017f435a000000000000000000000000000000000000000000000000000000000000815250905090565b610bb4610eac565b8060178190555050565b610bc6610eac565b8360088190555082600a819055508160098190555080600b8190555050505050565b6000610bfc610bf5610f2a565b84846110fd565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b610c2e610eac565b60005b83839050811015610ccd578160046000868685818110610c5457610c53613415565b5b9050602002016020810190610c6991906126e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610cc59061336e565b915050610c31565b50505050565b60075481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d68610eac565b8060168190555050565b610d7a610eac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190612d86565b60405180910390fd5b610df381611e1c565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e37610f2a565b73ffffffffffffffffffffffffffffffffffffffff161480610e925750610e5c610b15565b73ffffffffffffffffffffffffffffffffffffffff16610e7a610f2a565b73ffffffffffffffffffffffffffffffffffffffff16145b610e9b57600080fd5b6000479050610ea981611ee0565b50565b610eb4610f2a565b73ffffffffffffffffffffffffffffffffffffffff16610ed2610b15565b73ffffffffffffffffffffffffffffffffffffffff1614610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612e06565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990612e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100990612da6565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110f09190612ea6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490612e46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490612d06565b60405180910390fd5b60008111611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790612e26565b60405180910390fd5b611228610b15565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112965750611266610b15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156117d05760148054906101000a900460ff16611323576112b5610b15565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612d26565b60405180910390fd5b5b601554811115611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90612d66565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561140c5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290612dc6565b60405180910390fd5b60075443111580156114aa5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156115045750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561153c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561159a576001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461164757601654816115fc84610a98565b6116069190612fe7565b10611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90612e66565b60405180910390fd5b5b600061165230610a98565b905060006017548210159050601554821061166d5760155491505b8080156116875750601460159054906101000a900460ff16155b80156116e15750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156116f95750601460169054906101000a900460ff165b801561174f5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117a55750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117cd576117b382611b26565b600047905060008111156117cb576117ca47611ee0565b5b505b50505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118775750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061192a5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156119295750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156119385760009050611abf565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156119e35750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156119fb57600854600c81905550600954600d819055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611aa65750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611abe57600a54600c81905550600b54600d819055505b5b611acb84848484611fb2565b50505050565b6000838311158290611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b109190612ce4565b60405180910390fd5b5082840390509392505050565b6001601460156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611b5e57611b5d613444565b5b604051908082528060200260200182016040528015611b8c5781602001602082028036833780820191505090505b5090503081600081518110611ba457611ba3613415565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4657600080fd5b505afa158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e9190612712565b81600181518110611c9257611c91613415565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611cf930601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610f32565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d5d959493929190612ec1565b600060405180830381600087803b158015611d7757600080fd5b505af1158015611d8b573d6000803e3d6000fd5b50505050506000601460156101000a81548160ff02191690831515021790555050565b6000600554821115611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90612d46565b60405180910390fd5b6000611dff611fdf565b9050611e14818461200a90919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611f2890612c7e565b60006040518083038185875af1925050503d8060008114611f65576040519150601f19603f3d011682016040523d82523d6000602084013e611f6a565b606091505b5050905080611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa590612de6565b60405180910390fd5b5050565b80611fc057611fbf612020565b5b611fcb848484612063565b80611fd957611fd861222e565b5b50505050565b6000806000611fec612242565b91509150612003818361200a90919063ffffffff16565b9250505090565b60008183612018919061303d565b905092915050565b6000600c5414801561203457506000600d54145b1561203e57612061565b600c54600e81905550600d54600f819055506000600c819055506000600d819055505b565b600080600080600080612075876122dd565b9550955095509550955095506120d386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234590919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061216885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461235b90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121b481612371565b6121be848361242e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161221b9190612ea6565b60405180910390a3505050505050505050565b600e54600c81905550600f54600d81905550565b6000806000600554905060006009600a61225c91906130c1565b6305f5e10061226b91906131df565b905061229e6009600a61227e91906130c1565b6305f5e10061228d91906131df565b60055461200a90919063ffffffff16565b8210156122d0576005546009600a6122b691906130c1565b6305f5e1006122c591906131df565b9350935050506122d9565b81819350935050505b9091565b60008060008060008060008060006122fa8a600c54600d54612468565b925092509250600061230a611fdf565b9050600080600061231d8e8787876124fe565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600081836123539190613239565b905092915050565b600081836123699190612fe7565b905092915050565b600061237b611fdf565b90506000612392828461258790919063ffffffff16565b90506123e681600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461235b90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6124438260055461234590919063ffffffff16565b60058190555061245e8160065461235b90919063ffffffff16565b6006819055505050565b6000806000806124946064612486888a61258790919063ffffffff16565b61200a90919063ffffffff16565b905060006124be60646124b0888b61258790919063ffffffff16565b61200a90919063ffffffff16565b905060006124e7826124d9858c61234590919063ffffffff16565b61234590919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612517858961258790919063ffffffff16565b9050600061252e868961258790919063ffffffff16565b90506000612545878961258790919063ffffffff16565b9050600061256e82612560858761234590919063ffffffff16565b61234590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000818361259591906131df565b905092915050565b60006125b06125ab84612f5b565b612f36565b905080838252602082019050828560208602820111156125d3576125d261347d565b5b60005b8581101561260357816125e9888261260d565b8452602084019350602083019250506001810190506125d6565b5050509392505050565b60008135905061261c8161383e565b92915050565b6000815190506126318161383e565b92915050565b60008083601f84011261264d5761264c613478565b5b8235905067ffffffffffffffff81111561266a57612669613473565b5b6020830191508360208202830111156126865761268561347d565b5b9250929050565b600082601f8301126126a2576126a1613478565b5b81356126b284826020860161259d565b91505092915050565b6000813590506126ca81613855565b92915050565b6000813590506126df8161386c565b92915050565b6000602082840312156126fb576126fa613487565b5b60006127098482850161260d565b91505092915050565b60006020828403121561272857612727613487565b5b600061273684828501612622565b91505092915050565b6000806040838503121561275657612755613487565b5b60006127648582860161260d565b92505060206127758582860161260d565b9150509250929050565b60008060006060848603121561279857612797613487565b5b60006127a68682870161260d565b93505060206127b78682870161260d565b92505060406127c8868287016126d0565b9150509250925092565b600080604083850312156127e9576127e8613487565b5b60006127f78582860161260d565b9250506020612808858286016126d0565b9150509250929050565b60008060006040848603121561282b5761282a613487565b5b600084013567ffffffffffffffff81111561284957612848613482565b5b61285586828701612637565b93509350506020612868868287016126bb565b9150509250925092565b60006020828403121561288857612887613487565b5b600082013567ffffffffffffffff8111156128a6576128a5613482565b5b6128b28482850161268d565b91505092915050565b6000602082840312156128d1576128d0613487565b5b60006128df848285016126bb565b91505092915050565b6000602082840312156128fe576128fd613487565b5b600061290c848285016126d0565b91505092915050565b6000806000806080858703121561292f5761292e613487565b5b600061293d878288016126d0565b945050602061294e878288016126d0565b935050604061295f878288016126d0565b9250506060612970878288016126d0565b91505092959194509250565b60006129888383612994565b60208301905092915050565b61299d8161326d565b82525050565b6129ac8161326d565b82525050565b60006129bd82612f97565b6129c78185612fba565b93506129d283612f87565b8060005b83811015612a035781516129ea888261297c565b97506129f583612fad565b9250506001810190506129d6565b5085935050505092915050565b612a198161327f565b82525050565b612a28816132c2565b82525050565b612a37816132d4565b82525050565b6000612a4882612fa2565b612a528185612fd6565b9350612a6281856020860161330a565b612a6b8161348c565b840191505092915050565b6000612a83602383612fd6565b9150612a8e826134aa565b604082019050919050565b6000612aa6603f83612fd6565b9150612ab1826134f9565b604082019050919050565b6000612ac9602a83612fd6565b9150612ad482613548565b604082019050919050565b6000612aec601c83612fd6565b9150612af782613597565b602082019050919050565b6000612b0f602683612fd6565b9150612b1a826135c0565b604082019050919050565b6000612b32602283612fd6565b9150612b3d8261360f565b604082019050919050565b6000612b55602383612fd6565b9150612b608261365e565b604082019050919050565b6000612b78601783612fd6565b9150612b83826136ad565b602082019050919050565b6000612b9b602083612fd6565b9150612ba6826136d6565b602082019050919050565b6000612bbe602983612fd6565b9150612bc9826136ff565b604082019050919050565b6000612be1602583612fd6565b9150612bec8261374e565b604082019050919050565b6000612c04602383612fd6565b9150612c0f8261379d565b604082019050919050565b6000612c27600083612fcb565b9150612c32826137ec565b600082019050919050565b6000612c4a602483612fd6565b9150612c55826137ef565b604082019050919050565b612c69816132ab565b82525050565b612c78816132b5565b82525050565b6000612c8982612c1a565b9150819050919050565b6000602082019050612ca860008301846129a3565b92915050565b6000602082019050612cc36000830184612a10565b92915050565b6000602082019050612cde6000830184612a1f565b92915050565b60006020820190508181036000830152612cfe8184612a3d565b905092915050565b60006020820190508181036000830152612d1f81612a76565b9050919050565b60006020820190508181036000830152612d3f81612a99565b9050919050565b60006020820190508181036000830152612d5f81612abc565b9050919050565b60006020820190508181036000830152612d7f81612adf565b9050919050565b60006020820190508181036000830152612d9f81612b02565b9050919050565b60006020820190508181036000830152612dbf81612b25565b9050919050565b60006020820190508181036000830152612ddf81612b48565b9050919050565b60006020820190508181036000830152612dff81612b6b565b9050919050565b60006020820190508181036000830152612e1f81612b8e565b9050919050565b60006020820190508181036000830152612e3f81612bb1565b9050919050565b60006020820190508181036000830152612e5f81612bd4565b9050919050565b60006020820190508181036000830152612e7f81612bf7565b9050919050565b60006020820190508181036000830152612e9f81612c3d565b9050919050565b6000602082019050612ebb6000830184612c60565b92915050565b600060a082019050612ed66000830188612c60565b612ee36020830187612a2e565b8181036040830152612ef581866129b2565b9050612f0460608301856129a3565b612f116080830184612c60565b9695505050505050565b6000602082019050612f306000830184612c6f565b92915050565b6000612f40612f51565b9050612f4c828261333d565b919050565b6000604051905090565b600067ffffffffffffffff821115612f7657612f75613444565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612ff2826132ab565b9150612ffd836132ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613032576130316133b7565b5b828201905092915050565b6000613048826132ab565b9150613053836132ab565b925082613063576130626133e6565b5b828204905092915050565b6000808291508390505b60018511156130b857808604811115613094576130936133b7565b5b60018516156130a35780820291505b80810290506130b18561349d565b9450613078565b94509492505050565b60006130cc826132ab565b91506130d7836132b5565b92506131047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461310c565b905092915050565b60008261311c57600190506131d8565b8161312a57600090506131d8565b8160018114613140576002811461314a57613179565b60019150506131d8565b60ff84111561315c5761315b6133b7565b5b8360020a915084821115613173576131726133b7565b5b506131d8565b5060208310610133831016604e8410600b84101617156131ae5782820a9050838111156131a9576131a86133b7565b5b6131d8565b6131bb848484600161306e565b925090508184048111156131d2576131d16133b7565b5b81810290505b9392505050565b60006131ea826132ab565b91506131f5836132ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322e5761322d6133b7565b5b828202905092915050565b6000613244826132ab565b915061324f836132ab565b925082821015613262576132616133b7565b5b828203905092915050565b60006132788261328b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006132cd826132e6565b9050919050565b60006132df826132ab565b9050919050565b60006132f1826132f8565b9050919050565b60006133038261328b565b9050919050565b60005b8381101561332857808201518184015260208101905061330d565b83811115613337576000848401525b50505050565b6133468261348c565b810181811067ffffffffffffffff8211171561336557613364613444565b5b80604052505050565b6000613379826132ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133ac576133ab6133b7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e6420646576206665652e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6138478161326d565b811461385257600080fd5b50565b61385e8161327f565b811461386957600080fd5b50565b613875816132ab565b811461388057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212206b7e0e650cf92c2b4c82e7dc2287f60c46ba34ce0156d09332a933b457dc38fe64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101d05760003560e01c80637d1db4a5116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e1461065c578063ea1644d514610699578063f2fde38b146106c2578063f4293890146106eb576101d7565b8063a9059cbb1461058e578063bfd79284146105cb578063c492f04614610608578063d00efb2f14610631576101d7565b80638f9a55c0116100d15780638f9a55c0146104e657806395d89b411461051157806398a5c3151461053c578063a2a957bb14610565576101d7565b80637d1db4a5146104675780638da5cb5b146104925780638f70ccf7146104bd576101d7565b8063313ce5671161016f5780636d8aa8f81161013e5780636d8aa8f8146103c157806370a08231146103ea578063715018a61461042757806374010ece1461043e576101d7565b8063313ce5671461032b57806349bd5a5e1461035657806351bc3c85146103815780636b99905314610398576101d7565b80631694505e116101ab5780631694505e1461026d57806318160ddd1461029857806323b872dd146102c35780632fd689e314610300576101d7565b8062b8cf2a146101dc57806306fdde0314610205578063095ea7b314610230576101d7565b366101d757005b600080fd5b3480156101e857600080fd5b5061020360048036038101906101fe9190612872565b610702565b005b34801561021157600080fd5b5061021a61079f565b6040516102279190612ce4565b60405180910390f35b34801561023c57600080fd5b50610257600480360381019061025291906127d2565b6107dc565b6040516102649190612cae565b60405180910390f35b34801561027957600080fd5b506102826107fa565b60405161028f9190612cc9565b60405180910390f35b3480156102a457600080fd5b506102ad610820565b6040516102ba9190612ea6565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061277f565b610844565b6040516102f79190612cae565b60405180910390f35b34801561030c57600080fd5b5061031561091d565b6040516103229190612ea6565b60405180910390f35b34801561033757600080fd5b50610340610923565b60405161034d9190612f1b565b60405180910390f35b34801561036257600080fd5b5061036b61092c565b6040516103789190612c93565b60405180910390f35b34801561038d57600080fd5b50610396610952565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906126e5565b610a10565b005b3480156103cd57600080fd5b506103e860048036038101906103e391906128bb565b610a73565b005b3480156103f657600080fd5b50610411600480360381019061040c91906126e5565b610a98565b60405161041e9190612ea6565b60405180910390f35b34801561043357600080fd5b5061043c610ae9565b005b34801561044a57600080fd5b50610465600480360381019061046091906128e8565b610afd565b005b34801561047357600080fd5b5061047c610b0f565b6040516104899190612ea6565b60405180910390f35b34801561049e57600080fd5b506104a7610b15565b6040516104b49190612c93565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906128bb565b610b3e565b005b3480156104f257600080fd5b506104fb610b69565b6040516105089190612ea6565b60405180910390f35b34801561051d57600080fd5b50610526610b6f565b6040516105339190612ce4565b60405180910390f35b34801561054857600080fd5b50610563600480360381019061055e91906128e8565b610bac565b005b34801561057157600080fd5b5061058c60048036038101906105879190612915565b610bbe565b005b34801561059a57600080fd5b506105b560048036038101906105b091906127d2565b610be8565b6040516105c29190612cae565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906126e5565b610c06565b6040516105ff9190612cae565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190612812565b610c26565b005b34801561063d57600080fd5b50610646610cd3565b6040516106539190612ea6565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e919061273f565b610cd9565b6040516106909190612ea6565b60405180910390f35b3480156106a557600080fd5b506106c060048036038101906106bb91906128e8565b610d60565b005b3480156106ce57600080fd5b506106e960048036038101906106e491906126e5565b610d72565b005b3480156106f757600080fd5b50610700610df6565b005b61070a610eac565b60005b815181101561079b5760016010600084848151811061072f5761072e613415565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806107939061336e565b91505061070d565b5050565b60606040518060400160405280600581526020017f4255494c44000000000000000000000000000000000000000000000000000000815250905090565b60006107f06107e9610f2a565b8484610f32565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a61083091906130c1565b6305f5e10061083f91906131df565b905090565b60006108518484846110fd565b6109128461085d610f2a565b61090d8560405180606001604052806028815260200161388460289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006108c3610f2a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ad19092919063ffffffff16565b610f32565b600190509392505050565b60175481565b60006009905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610993610f2a565b73ffffffffffffffffffffffffffffffffffffffff1614806109ee57506109b8610b15565b73ffffffffffffffffffffffffffffffffffffffff166109d6610f2a565b73ffffffffffffffffffffffffffffffffffffffff16145b6109f757600080fd5b6000610a0230610a98565b9050610a0d81611b26565b50565b610a18610eac565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610a7b610eac565b80601460166101000a81548160ff02191690831515021790555050565b6000610ae2600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dae565b9050919050565b610af1610eac565b610afb6000611e1c565b565b610b05610eac565b8060158190555050565b60155481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b46610eac565b806014806101000a81548160ff0219169083151502179055504360078190555050565b60165481565b60606040518060400160405280600281526020017f435a000000000000000000000000000000000000000000000000000000000000815250905090565b610bb4610eac565b8060178190555050565b610bc6610eac565b8360088190555082600a819055508160098190555080600b8190555050505050565b6000610bfc610bf5610f2a565b84846110fd565b6001905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b610c2e610eac565b60005b83839050811015610ccd578160046000868685818110610c5457610c53613415565b5b9050602002016020810190610c6991906126e5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610cc59061336e565b915050610c31565b50505050565b60075481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d68610eac565b8060168190555050565b610d7a610eac565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de190612d86565b60405180910390fd5b610df381611e1c565b50565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e37610f2a565b73ffffffffffffffffffffffffffffffffffffffff161480610e925750610e5c610b15565b73ffffffffffffffffffffffffffffffffffffffff16610e7a610f2a565b73ffffffffffffffffffffffffffffffffffffffff16145b610e9b57600080fd5b6000479050610ea981611ee0565b50565b610eb4610f2a565b73ffffffffffffffffffffffffffffffffffffffff16610ed2610b15565b73ffffffffffffffffffffffffffffffffffffffff1614610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612e06565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9990612e86565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611012576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100990612da6565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110f09190612ea6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116490612e46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d490612d06565b60405180910390fd5b60008111611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790612e26565b60405180910390fd5b611228610b15565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156112965750611266610b15565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156117d05760148054906101000a900460ff16611323576112b5610b15565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612d26565b60405180910390fd5b5b601554811115611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90612d66565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561140c5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61144b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144290612dc6565b60405180910390fd5b60075443111580156114aa5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80156115045750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561153c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561159a576001601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461164757601654816115fc84610a98565b6116069190612fe7565b10611646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163d90612e66565b60405180910390fd5b5b600061165230610a98565b905060006017548210159050601554821061166d5760155491505b8080156116875750601460159054906101000a900460ff16155b80156116e15750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156116f95750601460169054906101000a900460ff165b801561174f5750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156117a55750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156117cd576117b382611b26565b600047905060008111156117cb576117ca47611ee0565b5b505b50505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118775750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061192a5750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156119295750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156119385760009050611abf565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156119e35750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156119fb57600854600c81905550600954600d819055505b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611aa65750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611abe57600a54600c81905550600b54600d819055505b5b611acb84848484611fb2565b50505050565b6000838311158290611b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b109190612ce4565b60405180910390fd5b5082840390509392505050565b6001601460156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611b5e57611b5d613444565b5b604051908082528060200260200182016040528015611b8c5781602001602082028036833780820191505090505b5090503081600081518110611ba457611ba3613415565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4657600080fd5b505afa158015611c5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7e9190612712565b81600181518110611c9257611c91613415565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611cf930601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610f32565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611d5d959493929190612ec1565b600060405180830381600087803b158015611d7757600080fd5b505af1158015611d8b573d6000803e3d6000fd5b50505050506000601460156101000a81548160ff02191690831515021790555050565b6000600554821115611df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dec90612d46565b60405180910390fd5b6000611dff611fdf565b9050611e14818461200a90919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611f2890612c7e565b60006040518083038185875af1925050503d8060008114611f65576040519150601f19603f3d011682016040523d82523d6000602084013e611f6a565b606091505b5050905080611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa590612de6565b60405180910390fd5b5050565b80611fc057611fbf612020565b5b611fcb848484612063565b80611fd957611fd861222e565b5b50505050565b6000806000611fec612242565b91509150612003818361200a90919063ffffffff16565b9250505090565b60008183612018919061303d565b905092915050565b6000600c5414801561203457506000600d54145b1561203e57612061565b600c54600e81905550600d54600f819055506000600c819055506000600d819055505b565b600080600080600080612075876122dd565b9550955095509550955095506120d386600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461234590919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061216885600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461235b90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506121b481612371565b6121be848361242e565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161221b9190612ea6565b60405180910390a3505050505050505050565b600e54600c81905550600f54600d81905550565b6000806000600554905060006009600a61225c91906130c1565b6305f5e10061226b91906131df565b905061229e6009600a61227e91906130c1565b6305f5e10061228d91906131df565b60055461200a90919063ffffffff16565b8210156122d0576005546009600a6122b691906130c1565b6305f5e1006122c591906131df565b9350935050506122d9565b81819350935050505b9091565b60008060008060008060008060006122fa8a600c54600d54612468565b925092509250600061230a611fdf565b9050600080600061231d8e8787876124fe565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b600081836123539190613239565b905092915050565b600081836123699190612fe7565b905092915050565b600061237b611fdf565b90506000612392828461258790919063ffffffff16565b90506123e681600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461235b90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6124438260055461234590919063ffffffff16565b60058190555061245e8160065461235b90919063ffffffff16565b6006819055505050565b6000806000806124946064612486888a61258790919063ffffffff16565b61200a90919063ffffffff16565b905060006124be60646124b0888b61258790919063ffffffff16565b61200a90919063ffffffff16565b905060006124e7826124d9858c61234590919063ffffffff16565b61234590919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612517858961258790919063ffffffff16565b9050600061252e868961258790919063ffffffff16565b90506000612545878961258790919063ffffffff16565b9050600061256e82612560858761234590919063ffffffff16565b61234590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000818361259591906131df565b905092915050565b60006125b06125ab84612f5b565b612f36565b905080838252602082019050828560208602820111156125d3576125d261347d565b5b60005b8581101561260357816125e9888261260d565b8452602084019350602083019250506001810190506125d6565b5050509392505050565b60008135905061261c8161383e565b92915050565b6000815190506126318161383e565b92915050565b60008083601f84011261264d5761264c613478565b5b8235905067ffffffffffffffff81111561266a57612669613473565b5b6020830191508360208202830111156126865761268561347d565b5b9250929050565b600082601f8301126126a2576126a1613478565b5b81356126b284826020860161259d565b91505092915050565b6000813590506126ca81613855565b92915050565b6000813590506126df8161386c565b92915050565b6000602082840312156126fb576126fa613487565b5b60006127098482850161260d565b91505092915050565b60006020828403121561272857612727613487565b5b600061273684828501612622565b91505092915050565b6000806040838503121561275657612755613487565b5b60006127648582860161260d565b92505060206127758582860161260d565b9150509250929050565b60008060006060848603121561279857612797613487565b5b60006127a68682870161260d565b93505060206127b78682870161260d565b92505060406127c8868287016126d0565b9150509250925092565b600080604083850312156127e9576127e8613487565b5b60006127f78582860161260d565b9250506020612808858286016126d0565b9150509250929050565b60008060006040848603121561282b5761282a613487565b5b600084013567ffffffffffffffff81111561284957612848613482565b5b61285586828701612637565b93509350506020612868868287016126bb565b9150509250925092565b60006020828403121561288857612887613487565b5b600082013567ffffffffffffffff8111156128a6576128a5613482565b5b6128b28482850161268d565b91505092915050565b6000602082840312156128d1576128d0613487565b5b60006128df848285016126bb565b91505092915050565b6000602082840312156128fe576128fd613487565b5b600061290c848285016126d0565b91505092915050565b6000806000806080858703121561292f5761292e613487565b5b600061293d878288016126d0565b945050602061294e878288016126d0565b935050604061295f878288016126d0565b9250506060612970878288016126d0565b91505092959194509250565b60006129888383612994565b60208301905092915050565b61299d8161326d565b82525050565b6129ac8161326d565b82525050565b60006129bd82612f97565b6129c78185612fba565b93506129d283612f87565b8060005b83811015612a035781516129ea888261297c565b97506129f583612fad565b9250506001810190506129d6565b5085935050505092915050565b612a198161327f565b82525050565b612a28816132c2565b82525050565b612a37816132d4565b82525050565b6000612a4882612fa2565b612a528185612fd6565b9350612a6281856020860161330a565b612a6b8161348c565b840191505092915050565b6000612a83602383612fd6565b9150612a8e826134aa565b604082019050919050565b6000612aa6603f83612fd6565b9150612ab1826134f9565b604082019050919050565b6000612ac9602a83612fd6565b9150612ad482613548565b604082019050919050565b6000612aec601c83612fd6565b9150612af782613597565b602082019050919050565b6000612b0f602683612fd6565b9150612b1a826135c0565b604082019050919050565b6000612b32602283612fd6565b9150612b3d8261360f565b604082019050919050565b6000612b55602383612fd6565b9150612b608261365e565b604082019050919050565b6000612b78601783612fd6565b9150612b83826136ad565b602082019050919050565b6000612b9b602083612fd6565b9150612ba6826136d6565b602082019050919050565b6000612bbe602983612fd6565b9150612bc9826136ff565b604082019050919050565b6000612be1602583612fd6565b9150612bec8261374e565b604082019050919050565b6000612c04602383612fd6565b9150612c0f8261379d565b604082019050919050565b6000612c27600083612fcb565b9150612c32826137ec565b600082019050919050565b6000612c4a602483612fd6565b9150612c55826137ef565b604082019050919050565b612c69816132ab565b82525050565b612c78816132b5565b82525050565b6000612c8982612c1a565b9150819050919050565b6000602082019050612ca860008301846129a3565b92915050565b6000602082019050612cc36000830184612a10565b92915050565b6000602082019050612cde6000830184612a1f565b92915050565b60006020820190508181036000830152612cfe8184612a3d565b905092915050565b60006020820190508181036000830152612d1f81612a76565b9050919050565b60006020820190508181036000830152612d3f81612a99565b9050919050565b60006020820190508181036000830152612d5f81612abc565b9050919050565b60006020820190508181036000830152612d7f81612adf565b9050919050565b60006020820190508181036000830152612d9f81612b02565b9050919050565b60006020820190508181036000830152612dbf81612b25565b9050919050565b60006020820190508181036000830152612ddf81612b48565b9050919050565b60006020820190508181036000830152612dff81612b6b565b9050919050565b60006020820190508181036000830152612e1f81612b8e565b9050919050565b60006020820190508181036000830152612e3f81612bb1565b9050919050565b60006020820190508181036000830152612e5f81612bd4565b9050919050565b60006020820190508181036000830152612e7f81612bf7565b9050919050565b60006020820190508181036000830152612e9f81612c3d565b9050919050565b6000602082019050612ebb6000830184612c60565b92915050565b600060a082019050612ed66000830188612c60565b612ee36020830187612a2e565b8181036040830152612ef581866129b2565b9050612f0460608301856129a3565b612f116080830184612c60565b9695505050505050565b6000602082019050612f306000830184612c6f565b92915050565b6000612f40612f51565b9050612f4c828261333d565b919050565b6000604051905090565b600067ffffffffffffffff821115612f7657612f75613444565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612ff2826132ab565b9150612ffd836132ab565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613032576130316133b7565b5b828201905092915050565b6000613048826132ab565b9150613053836132ab565b925082613063576130626133e6565b5b828204905092915050565b6000808291508390505b60018511156130b857808604811115613094576130936133b7565b5b60018516156130a35780820291505b80810290506130b18561349d565b9450613078565b94509492505050565b60006130cc826132ab565b91506130d7836132b5565b92506131047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461310c565b905092915050565b60008261311c57600190506131d8565b8161312a57600090506131d8565b8160018114613140576002811461314a57613179565b60019150506131d8565b60ff84111561315c5761315b6133b7565b5b8360020a915084821115613173576131726133b7565b5b506131d8565b5060208310610133831016604e8410600b84101617156131ae5782820a9050838111156131a9576131a86133b7565b5b6131d8565b6131bb848484600161306e565b925090508184048111156131d2576131d16133b7565b5b81810290505b9392505050565b60006131ea826132ab565b91506131f5836132ab565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561322e5761322d6133b7565b5b828202905092915050565b6000613244826132ab565b915061324f836132ab565b925082821015613262576132616133b7565b5b828203905092915050565b60006132788261328b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006132cd826132e6565b9050919050565b60006132df826132ab565b9050919050565b60006132f1826132f8565b9050919050565b60006133038261328b565b9050919050565b60005b8381101561332857808201518184015260208101905061330d565b83811115613337576000848401525b50505050565b6133468261348c565b810181811067ffffffffffffffff8211171561336557613364613444565b5b80604052505050565b6000613379826132ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156133ac576133ab6133b7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e6420646576206665652e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6138478161326d565b811461385257600080fd5b50565b61385e8161327f565b811461386957600080fd5b50565b613875816132ab565b811461388057600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212206b7e0e650cf92c2b4c82e7dc2287f60c46ba34ce0156d09332a933b457dc38fe64736f6c63430008070033

Deployed Bytecode Sourcemap

14496:14390:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23908:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16966:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17891:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15760:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17243:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18092:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16083:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17152:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15808:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23369:262;;;;;;;;;;;;;:::i;:::-;;24085:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28275:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17346:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12754:103;;;;;;;;;;;;;:::i;:::-;;28384:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15957:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12106:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23223:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16019:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17057:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28069:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27680:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17492:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15613:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28623:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15158:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17699:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28500:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13012:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23639:261;;;;;;;;;;;;;:::i;:::-;;23908:169;11992:13;:11;:13::i;:::-;23984:9:::1;23979:91;24003:5;:12;23999:1;:16;23979:91;;;24054:4;24037;:14;24042:5;24048:1;24042:8;;;;;;;;:::i;:::-;;;;;;;;24037:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;24017:3;;;;;:::i;:::-;;;;23979:91;;;;23908:169:::0;:::o;16966:83::-;17003:13;17036:5;;;;;;;;;;;;;;;;;17029:12;;16966:83;:::o;17891:193::-;17993:4;18015:39;18024:12;:10;:12::i;:::-;18038:7;18047:6;18015:8;:39::i;:::-;18072:4;18065:11;;17891:193;;;;:::o;15760:41::-;;;;;;;;;;;;;:::o;17243:95::-;17296:7;14707:1;15049:2;:13;;;;:::i;:::-;15035:11;:27;;;;:::i;:::-;17316:14;;17243:95;:::o;18092:446::-;18224:4;18241:36;18251:6;18259:9;18270:6;18241:9;:36::i;:::-;18288:220;18311:6;18332:12;:10;:12::i;:::-;18359:138;18415:6;18359:138;;;;;;;;;;;;;;;;;:11;:19;18371:6;18359:19;;;;;;;;;;;;;;;:33;18379:12;:10;:12::i;:::-;18359:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;18288:8;:220::i;:::-;18526:4;18519:11;;18092:446;;;;;:::o;16083:60::-;;;;:::o;17152:83::-;17193:5;14707:1;17211:16;;17152:83;:::o;15808:28::-;;;;;;;;;;;;;:::o;23369:262::-;23449:18;;;;;;;;;;;23433:34;;:12;:10;:12::i;:::-;:34;;;:74;;;;23500:7;:5;:7::i;:::-;23484:23;;:12;:10;:12::i;:::-;:23;;;23433:74;23411:107;;;;;;23529:23;23555:24;23573:4;23555:9;:24::i;:::-;23529:50;;23590:33;23607:15;23590:16;:33::i;:::-;23400:231;23369:262::o;24085:92::-;11992:13;:11;:13::i;:::-;24164:5:::1;24149:4;:12;24154:6;24149:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;24085:92:::0;:::o;28275:101::-;11992:13;:11;:13::i;:::-;28356:12:::1;28342:11;;:26;;;;;;;;;;;;;;;;;;28275:101:::0;:::o;17346:138::-;17412:7;17439:37;17459:7;:16;17467:7;17459:16;;;;;;;;;;;;;;;;17439:19;:37::i;:::-;17432:44;;17346:138;;;:::o;12754:103::-;11992:13;:11;:13::i;:::-;12819:30:::1;12846:1;12819:18;:30::i;:::-;12754:103::o:0;28384:108::-;11992:13;:11;:13::i;:::-;28473:11:::1;28458:12;:26;;;;28384:108:::0;:::o;15957:55::-;;;;:::o;12106:87::-;12152:7;12179:6;;;;;;;;;;;12172:13;;12106:87;:::o;23223:138::-;11992:13;:11;:13::i;:::-;23304:12:::1;23290:11;::::0;:26:::1;;;;;;;;;;;;;;;;;;23341:12;23327:11;:26;;;;23223:138:::0;:::o;16019:57::-;;;;:::o;17057:87::-;17096:13;17129:7;;;;;;;;;;;;;;;;;17122:14;;17057:87;:::o;28069:162::-;11992:13;:11;:13::i;:::-;28205:18:::1;28183:19;:40;;;;28069:162:::0;:::o;27680:336::-;11992:13;:11;:13::i;:::-;27874::::1;27857:14;:30;;;;27916:14;27898:15;:32;;;;27958:11;27943:12;:26;;;;27996:12;27980:13;:28;;;;27680:336:::0;;;;:::o;17492:199::-;17597:4;17619:42;17629:12;:10;:12::i;:::-;17643:9;17654:6;17619:9;:42::i;:::-;17679:4;17672:11;;17492:199;;;;:::o;15613:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;28623:260::-;11992:13;:11;:13::i;:::-;28766:9:::1;28761:115;28785:8;;:15;;28781:1;:19;28761:115;;;28856:8;28822:18;:31;28841:8;;28850:1;28841:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;28822:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;28802:3;;;;;:::i;:::-;;;;28761:115;;;;28623:260:::0;;;:::o;15158:26::-;;;;:::o;17699:184::-;17816:7;17848:11;:18;17860:5;17848:18;;;;;;;;;;;;;;;:27;17867:7;17848:27;;;;;;;;;;;;;;;;17841:34;;17699:184;;;;:::o;28500:115::-;11992:13;:11;:13::i;:::-;28594::::1;28577:14;:30;;;;28500:115:::0;:::o;13012:201::-;11992:13;:11;:13::i;:::-;13121:1:::1;13101:22;;:8;:22;;;;13093:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13177:28;13196:8;13177:18;:28::i;:::-;13012:201:::0;:::o;23639:261::-;23719:18;;;;;;;;;;;23703:34;;:12;:10;:12::i;:::-;:34;;;:74;;;;23770:7;:5;:7::i;:::-;23754:23;;:12;:10;:12::i;:::-;:23;;;23703:74;23681:107;;;;;;23799:26;23828:21;23799:50;;23860:32;23873:18;23860:12;:32::i;:::-;23670:230;23639:261::o;12271:132::-;12346:12;:10;:12::i;:::-;12335:23;;:7;:5;:7::i;:::-;:23;;;12327:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12271:132::o;10690:98::-;10743:7;10770:10;10763:17;;10690:98;:::o;19229:369::-;19373:1;19356:19;;:5;:19;;;;19348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19454:1;19435:21;;:7;:21;;;;19427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19536:6;19506:11;:18;19518:5;19506:18;;;;;;;;;;;;;;;:27;19525:7;19506:27;;;;;;;;;;;;;;;:36;;;;19574:7;19558:32;;19567:5;19558:32;;;19583:6;19558:32;;;;;;:::i;:::-;;;;;;;;19229:369;;;:::o;19606:2911::-;19744:1;19728:18;;:4;:18;;;;19720:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19821:1;19807:16;;:2;:16;;;;19799:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19891:1;19882:6;:10;19874:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;19963:7;:5;:7::i;:::-;19955:15;;:4;:15;;;;:32;;;;;19980:7;:5;:7::i;:::-;19974:13;;:2;:13;;;;19955:32;19951:1800;;;20044:11;;;;;;;;;;20039:205;;20114:7;:5;:7::i;:::-;20106:15;;:4;:15;;;20076:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;20039:205;20278:12;;20268:6;:22;;20260:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;20365:4;:10;20370:4;20365:10;;;;;;;;;;;;;;;;;;;;;;;;;20364:11;:24;;;;;20380:4;:8;20385:2;20380:8;;;;;;;;;;;;;;;;;;;;;;;;;20379:9;20364:24;20338:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;20514:11;;20498:12;:27;;:69;;;;;20554:13;;;;;;;;;;;20546:21;;:4;:21;;;20498:69;:120;;;;;20602:15;;;;;;;;;;;20588:30;;:2;:30;;;;20498:120;:160;;;;;20653:4;20639:19;;:2;:19;;;;20498:160;20476:248;;;20704:4;20693;:8;20698:2;20693:8;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;;;;;;20476:248;20750:13;;;;;;;;;;;20744:19;;:2;:19;;;20740:208;;20839:14;;20830:6;20814:13;20824:2;20814:9;:13::i;:::-;:22;;;;:::i;:::-;:39;20784:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;20740:208;20964:28;20995:24;21013:4;20995:9;:24::i;:::-;20964:55;;21034:12;21073:19;;21049:20;:43;;21034:58;;21137:12;;21113:20;:36;21109:112;;21193:12;;21170:35;;21109:112;21259:7;:35;;;;;21288:6;;;;;;;;;;;21287:7;21259:35;:77;;;;;21323:13;;;;;;;;;;;21315:21;;:4;:21;;;;21259:77;:109;;;;;21357:11;;;;;;;;;;;21259:109;:155;;;;;21390:18;:24;21409:4;21390:24;;;;;;;;;;;;;;;;;;;;;;;;;21389:25;21259:155;:199;;;;;21436:18;:22;21455:2;21436:22;;;;;;;;;;;;;;;;;;;;;;;;;21435:23;21259:199;21237:503;;;21493:38;21510:20;21493:16;:38::i;:::-;21550:26;21579:21;21550:50;;21644:1;21623:18;:22;21619:106;;;21670:35;21683:21;21670:12;:35::i;:::-;21619:106;21474:266;21237:503;19989:1762;;19951:1800;21763:12;21778:4;21763:19;;21843:18;:24;21862:4;21843:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;21871:18;:22;21890:2;21871:22;;;;;;;;;;;;;;;;;;;;;;;;;21843:50;21842:115;;;;21920:13;;;;;;;;;;;21912:21;;:4;:21;;;;:44;;;;;21943:13;;;;;;;;;;;21937:19;;:2;:19;;;;21912:44;21842:115;21824:632;;;21994:5;21984:15;;21824:632;;;22078:13;;;;;;;;;;;22070:21;;:4;:21;;;:55;;;;;22109:15;;;;;;;;;;;22095:30;;:2;:30;;;;22070:55;22066:163;;;22158:14;;22146:9;:26;;;;22201:12;;22191:7;:22;;;;22066:163;22290:13;;;;;;;;;;;22284:19;;:2;:19;;;:55;;;;;22323:15;;;;;;;;;;;22307:32;;:4;:32;;;;22284:55;22280:165;;;22372:15;;22360:9;:27;;;;22416:13;;22406:7;:23;;;;22280:165;21824:632;22468:41;22483:4;22489:2;22493:6;22501:7;22468:14;:41::i;:::-;19709:2808;19606:2911;;;:::o;5190:240::-;5310:7;5368:1;5363;:6;;5371:12;5355:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5410:1;5406;:5;5399:12;;5190:240;;;;;:::o;22525:483::-;16248:4;16239:6;;:13;;;;;;;;;;;;;;;;;;22603:21:::1;22641:1;22627:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22603:40;;22672:4;22654;22659:1;22654:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;22698:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22688:4;22693:1;22688:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;22731:62;22748:4;22763:15;;;;;;;;;;;22781:11;22731:8;:62::i;:::-;22804:15;;;;;;;;;;;:66;;;22885:11;22911:1;22927:4;22954;22974:15;22804:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22592:416;16284:5:::0;16275:6;;:14;;;;;;;;;;;;;;;;;;22525:483;:::o;18546:323::-;18641:7;18699;;18688;:18;;18666:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;18787:19;18809:10;:8;:10::i;:::-;18787:32;;18837:24;18849:11;18837:7;:11;;:24;;;;:::i;:::-;18830:31;;;18546:323;;;:::o;13373:191::-;13447:16;13466:6;;;;;;;;;;;13447:25;;13492:8;13483:6;;:17;;;;;;;;;;;;;;;;;;13547:8;13516:40;;13537:8;13516:40;;;;;;;;;;;;13436:128;13373:191;:::o;23016:199::-;23074:22;23101:18;;;;;;;;;;;:23;;23132:6;23101:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23073:70;;;23162:17;23154:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;23062:153;23016:199;:::o;24185:282::-;24341:7;24336:28;;24350:14;:12;:14::i;:::-;24336:28;24375:44;24393:6;24401:9;24412:6;24375:17;:44::i;:::-;24435:7;24430:29;;24444:15;:13;:15::i;:::-;24430:29;24185:282;;;;:::o;27239:166::-;27281:7;27302:15;27319;27338:19;:17;:19::i;:::-;27301:56;;;;27377:20;27389:7;27377;:11;;:20;;;;:::i;:::-;27370:27;;;;27239:166;:::o;4048:98::-;4106:7;4137:1;4133;:5;;;;:::i;:::-;4126:12;;4048:98;;;;:::o;18877:219::-;18937:1;18924:9;;:14;:30;;;;;18953:1;18942:7;;:12;18924:30;18920:43;;;18956:7;;18920:43;18995:9;;18975:17;:29;;;;19033:7;;19015:15;:25;;;;19065:1;19053:9;:13;;;;19087:1;19077:7;:11;;;;18877:219;:::o;24475:610::-;24622:15;24652:23;24690:12;24717:23;24755:12;24782:13;24809:19;24820:7;24809:10;:19::i;:::-;24607:221;;;;;;;;;;;;24857:28;24877:7;24857;:15;24865:6;24857:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24839:7;:15;24847:6;24839:15;;;;;;;;;;;;;;;:46;;;;24917:39;24940:15;24917:7;:18;24925:9;24917:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24896:7;:18;24904:9;24896:18;;;;;;;;;;;;;;;:60;;;;24967:16;24977:5;24967:9;:16::i;:::-;24994:23;25006:4;25012;24994:11;:23::i;:::-;25050:9;25033:44;;25042:6;25033:44;;;25061:15;25033:44;;;;;;:::i;:::-;;;;;;;;24596:489;;;;;;24475:610;;;:::o;19104:117::-;19160:17;;19148:9;:29;;;;19198:15;;19188:7;:25;;;;19104:117::o;27413:259::-;27464:7;27473;27493:15;27511:7;;27493:25;;27529:15;14707:1;15049:2;:13;;;;:::i;:::-;15035:11;:27;;;;:::i;:::-;27529:25;;27579:20;14707:1;15049:2;:13;;;;:::i;:::-;15035:11;:27;;;;:::i;:::-;27579:7;;:11;;:20;;;;:::i;:::-;27569:7;:30;27565:61;;;27609:7;;14707:1;15049:2;:13;;;;:::i;:::-;15035:11;:27;;;;:::i;:::-;27601:25;;;;;;;;27565:61;27647:7;27656;27639:25;;;;;;27413:259;;;:::o;25504:704::-;25604:7;25626;25648;25670;25692;25714;25750:23;25775:12;25789:13;25806:90;25832:7;25854:9;;25878:7;;25806:11;:90::i;:::-;25749:147;;;;;;25907:19;25929:10;:8;:10::i;:::-;25907:32;;25951:15;25968:23;25993:12;26009:109;26035:7;26057:4;26076:5;26096:11;26009;:109::i;:::-;25950:168;;;;;;26139:7;26148:15;26165:4;26171:15;26188:4;26194:5;26131:69;;;;;;;;;;;;;;;;;;;25504:704;;;;;;;:::o;3292:98::-;3350:7;3381:1;3377;:5;;;;:::i;:::-;3370:12;;3292:98;;;;:::o;2911:::-;2969:7;3000:1;2996;:5;;;;:::i;:::-;2989:12;;2911:98;;;;:::o;25093:211::-;25146:19;25168:10;:8;:10::i;:::-;25146:32;;25189:13;25205:22;25215:11;25205:5;:9;;:22;;;;:::i;:::-;25189:38;;25263:33;25290:5;25263:7;:22;25279:4;25263:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;25238:7;:22;25254:4;25238:22;;;;;;;;;;;;;;;:58;;;;25135:169;;25093:211;:::o;25312:147::-;25390:17;25402:4;25390:7;;:11;;:17;;;;:::i;:::-;25380:7;:27;;;;25431:20;25446:4;25431:10;;:14;;:20;;;;:::i;:::-;25418:10;:33;;;;25312:147;;:::o;26216:471::-;26385:7;26407;26429;26464:12;26479:30;26505:3;26479:21;26491:8;26479:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;26464:45;;26520:13;26536:28;26560:3;26536:19;26548:6;26536:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;26520:44;;26575:23;26601:28;26623:5;26601:17;26613:4;26601:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;26575:54;;26650:15;26667:4;26673:5;26642:37;;;;;;;;;26216:471;;;;;;;:::o;26695:536::-;26889:7;26911;26933;26968:15;26986:24;26998:11;26986:7;:11;;:24;;;;:::i;:::-;26968:42;;27021:12;27036:21;27045:11;27036:4;:8;;:21;;;;:::i;:::-;27021:36;;27068:13;27084:22;27094:11;27084:5;:9;;:22;;;;:::i;:::-;27068:38;;27117:23;27143:28;27165:5;27143:17;27155:4;27143:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;27117:54;;27192:7;27201:15;27218:4;27184:39;;;;;;;;;;26695:536;;;;;;;;:::o;3649:98::-;3707:7;3738:1;3734;:5;;;;:::i;:::-;3727:12;;3649:98;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:568::-;1136:8;1146:6;1196:3;1189:4;1181:6;1177:17;1173:27;1163:122;;1204:79;;:::i;:::-;1163:122;1317:6;1304:20;1294:30;;1347:18;1339:6;1336:30;1333:117;;;1369:79;;:::i;:::-;1333:117;1483:4;1475:6;1471:17;1459:29;;1537:3;1529:4;1521:6;1517:17;1507:8;1503:32;1500:41;1497:128;;;1544:79;;:::i;:::-;1497:128;1063:568;;;;;:::o;1654:370::-;1725:5;1774:3;1767:4;1759:6;1755:17;1751:27;1741:122;;1782:79;;:::i;:::-;1741:122;1899:6;1886:20;1924:94;2014:3;2006:6;1999:4;1991:6;1987:17;1924:94;:::i;:::-;1915:103;;1731:293;1654:370;;;;:::o;2030:133::-;2073:5;2111:6;2098:20;2089:29;;2127:30;2151:5;2127:30;:::i;:::-;2030:133;;;;:::o;2169:139::-;2215:5;2253:6;2240:20;2231:29;;2269:33;2296:5;2269:33;:::i;:::-;2169:139;;;;:::o;2314:329::-;2373:6;2422:2;2410:9;2401:7;2397:23;2393:32;2390:119;;;2428:79;;:::i;:::-;2390:119;2548:1;2573:53;2618:7;2609:6;2598:9;2594:22;2573:53;:::i;:::-;2563:63;;2519:117;2314:329;;;;:::o;2649:351::-;2719:6;2768:2;2756:9;2747:7;2743:23;2739:32;2736:119;;;2774:79;;:::i;:::-;2736:119;2894:1;2919:64;2975:7;2966:6;2955:9;2951:22;2919:64;:::i;:::-;2909:74;;2865:128;2649:351;;;;:::o;3006:474::-;3074:6;3082;3131:2;3119:9;3110:7;3106:23;3102:32;3099:119;;;3137:79;;:::i;:::-;3099:119;3257:1;3282:53;3327:7;3318:6;3307:9;3303:22;3282:53;:::i;:::-;3272:63;;3228:117;3384:2;3410:53;3455:7;3446:6;3435:9;3431:22;3410:53;:::i;:::-;3400:63;;3355:118;3006:474;;;;;:::o;3486:619::-;3563:6;3571;3579;3628:2;3616:9;3607:7;3603:23;3599:32;3596:119;;;3634:79;;:::i;:::-;3596:119;3754:1;3779:53;3824:7;3815:6;3804:9;3800:22;3779:53;:::i;:::-;3769:63;;3725:117;3881:2;3907:53;3952:7;3943:6;3932:9;3928:22;3907:53;:::i;:::-;3897:63;;3852:118;4009:2;4035:53;4080:7;4071:6;4060:9;4056:22;4035:53;:::i;:::-;4025:63;;3980:118;3486:619;;;;;:::o;4111:474::-;4179:6;4187;4236:2;4224:9;4215:7;4211:23;4207:32;4204:119;;;4242:79;;:::i;:::-;4204:119;4362:1;4387:53;4432:7;4423:6;4412:9;4408:22;4387:53;:::i;:::-;4377:63;;4333:117;4489:2;4515:53;4560:7;4551:6;4540:9;4536:22;4515:53;:::i;:::-;4505:63;;4460:118;4111:474;;;;;:::o;4591:698::-;4683:6;4691;4699;4748:2;4736:9;4727:7;4723:23;4719:32;4716:119;;;4754:79;;:::i;:::-;4716:119;4902:1;4891:9;4887:17;4874:31;4932:18;4924:6;4921:30;4918:117;;;4954:79;;:::i;:::-;4918:117;5067:80;5139:7;5130:6;5119:9;5115:22;5067:80;:::i;:::-;5049:98;;;;4845:312;5196:2;5222:50;5264:7;5255:6;5244:9;5240:22;5222:50;:::i;:::-;5212:60;;5167:115;4591:698;;;;;:::o;5295:539::-;5379:6;5428:2;5416:9;5407:7;5403:23;5399:32;5396:119;;;5434:79;;:::i;:::-;5396:119;5582:1;5571:9;5567:17;5554:31;5612:18;5604:6;5601:30;5598:117;;;5634:79;;:::i;:::-;5598:117;5739:78;5809:7;5800:6;5789:9;5785:22;5739:78;:::i;:::-;5729:88;;5525:302;5295:539;;;;:::o;5840:323::-;5896:6;5945:2;5933:9;5924:7;5920:23;5916:32;5913:119;;;5951:79;;:::i;:::-;5913:119;6071:1;6096:50;6138:7;6129:6;6118:9;6114:22;6096:50;:::i;:::-;6086:60;;6042:114;5840:323;;;;:::o;6169:329::-;6228:6;6277:2;6265:9;6256:7;6252:23;6248:32;6245:119;;;6283:79;;:::i;:::-;6245:119;6403:1;6428:53;6473:7;6464:6;6453:9;6449:22;6428:53;:::i;:::-;6418:63;;6374:117;6169:329;;;;:::o;6504:765::-;6590:6;6598;6606;6614;6663:3;6651:9;6642:7;6638:23;6634:33;6631:120;;;6670:79;;:::i;:::-;6631:120;6790:1;6815:53;6860:7;6851:6;6840:9;6836:22;6815:53;:::i;:::-;6805:63;;6761:117;6917:2;6943:53;6988:7;6979:6;6968:9;6964:22;6943:53;:::i;:::-;6933:63;;6888:118;7045:2;7071:53;7116:7;7107:6;7096:9;7092:22;7071:53;:::i;:::-;7061:63;;7016:118;7173:2;7199:53;7244:7;7235:6;7224:9;7220:22;7199:53;:::i;:::-;7189:63;;7144:118;6504:765;;;;;;;:::o;7275:179::-;7344:10;7365:46;7407:3;7399:6;7365:46;:::i;:::-;7443:4;7438:3;7434:14;7420:28;;7275:179;;;;:::o;7460:108::-;7537:24;7555:5;7537:24;:::i;:::-;7532:3;7525:37;7460:108;;:::o;7574:118::-;7661:24;7679:5;7661:24;:::i;:::-;7656:3;7649:37;7574:118;;:::o;7728:732::-;7847:3;7876:54;7924:5;7876:54;:::i;:::-;7946:86;8025:6;8020:3;7946:86;:::i;:::-;7939:93;;8056:56;8106:5;8056:56;:::i;:::-;8135:7;8166:1;8151:284;8176:6;8173:1;8170:13;8151:284;;;8252:6;8246:13;8279:63;8338:3;8323:13;8279:63;:::i;:::-;8272:70;;8365:60;8418:6;8365:60;:::i;:::-;8355:70;;8211:224;8198:1;8195;8191:9;8186:14;;8151:284;;;8155:14;8451:3;8444:10;;7852:608;;;7728:732;;;;:::o;8466:109::-;8547:21;8562:5;8547:21;:::i;:::-;8542:3;8535:34;8466:109;;:::o;8581:183::-;8694:63;8751:5;8694:63;:::i;:::-;8689:3;8682:76;8581:183;;:::o;8770:147::-;8865:45;8904:5;8865:45;:::i;:::-;8860:3;8853:58;8770:147;;:::o;8923:364::-;9011:3;9039:39;9072:5;9039:39;:::i;:::-;9094:71;9158:6;9153:3;9094:71;:::i;:::-;9087:78;;9174:52;9219:6;9214:3;9207:4;9200:5;9196:16;9174:52;:::i;:::-;9251:29;9273:6;9251:29;:::i;:::-;9246:3;9242:39;9235:46;;9015:272;8923:364;;;;:::o;9293:366::-;9435:3;9456:67;9520:2;9515:3;9456:67;:::i;:::-;9449:74;;9532:93;9621:3;9532:93;:::i;:::-;9650:2;9645:3;9641:12;9634:19;;9293:366;;;:::o;9665:::-;9807:3;9828:67;9892:2;9887:3;9828:67;:::i;:::-;9821:74;;9904:93;9993:3;9904:93;:::i;:::-;10022:2;10017:3;10013:12;10006:19;;9665:366;;;:::o;10037:::-;10179:3;10200:67;10264:2;10259:3;10200:67;:::i;:::-;10193:74;;10276:93;10365:3;10276:93;:::i;:::-;10394:2;10389:3;10385:12;10378:19;;10037:366;;;:::o;10409:::-;10551:3;10572:67;10636:2;10631:3;10572:67;:::i;:::-;10565:74;;10648:93;10737:3;10648:93;:::i;:::-;10766:2;10761:3;10757:12;10750:19;;10409:366;;;:::o;10781:::-;10923:3;10944:67;11008:2;11003:3;10944:67;:::i;:::-;10937:74;;11020:93;11109:3;11020:93;:::i;:::-;11138:2;11133:3;11129:12;11122:19;;10781:366;;;:::o;11153:::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:398::-;13916:3;13937:83;14018:1;14013:3;13937:83;:::i;:::-;13930:90;;14029:93;14118:3;14029:93;:::i;:::-;14147:1;14142:3;14138:11;14131:18;;13757:398;;;:::o;14161:366::-;14303:3;14324:67;14388:2;14383:3;14324:67;:::i;:::-;14317:74;;14400:93;14489:3;14400:93;:::i;:::-;14518:2;14513:3;14509:12;14502:19;;14161:366;;;:::o;14533:118::-;14620:24;14638:5;14620:24;:::i;:::-;14615:3;14608:37;14533:118;;:::o;14657:112::-;14740:22;14756:5;14740:22;:::i;:::-;14735:3;14728:35;14657:112;;:::o;14775:379::-;14959:3;14981:147;15124:3;14981:147;:::i;:::-;14974:154;;15145:3;15138:10;;14775:379;;;:::o;15160:222::-;15253:4;15291:2;15280:9;15276:18;15268:26;;15304:71;15372:1;15361:9;15357:17;15348:6;15304:71;:::i;:::-;15160:222;;;;:::o;15388:210::-;15475:4;15513:2;15502:9;15498:18;15490:26;;15526:65;15588:1;15577:9;15573:17;15564:6;15526:65;:::i;:::-;15388:210;;;;:::o;15604:274::-;15723:4;15761:2;15750:9;15746:18;15738:26;;15774:97;15868:1;15857:9;15853:17;15844:6;15774:97;:::i;:::-;15604:274;;;;:::o;15884:313::-;15997:4;16035:2;16024:9;16020:18;16012:26;;16084:9;16078:4;16074:20;16070:1;16059:9;16055:17;16048:47;16112:78;16185:4;16176:6;16112:78;:::i;:::-;16104:86;;15884:313;;;;:::o;16203:419::-;16369:4;16407:2;16396:9;16392:18;16384:26;;16456:9;16450:4;16446:20;16442:1;16431:9;16427:17;16420:47;16484:131;16610:4;16484:131;:::i;:::-;16476:139;;16203:419;;;:::o;16628:::-;16794:4;16832:2;16821:9;16817:18;16809:26;;16881:9;16875:4;16871:20;16867:1;16856:9;16852:17;16845:47;16909:131;17035:4;16909:131;:::i;:::-;16901:139;;16628:419;;;:::o;17053:::-;17219:4;17257:2;17246:9;17242:18;17234:26;;17306:9;17300:4;17296:20;17292:1;17281:9;17277:17;17270:47;17334:131;17460:4;17334:131;:::i;:::-;17326:139;;17053:419;;;:::o;17478:::-;17644:4;17682:2;17671:9;17667:18;17659:26;;17731:9;17725:4;17721:20;17717:1;17706:9;17702:17;17695:47;17759:131;17885:4;17759:131;:::i;:::-;17751:139;;17478:419;;;:::o;17903:::-;18069:4;18107:2;18096:9;18092:18;18084:26;;18156:9;18150:4;18146:20;18142:1;18131:9;18127:17;18120:47;18184:131;18310:4;18184:131;:::i;:::-;18176:139;;17903:419;;;:::o;18328:::-;18494:4;18532:2;18521:9;18517:18;18509:26;;18581:9;18575:4;18571:20;18567:1;18556:9;18552:17;18545:47;18609:131;18735:4;18609:131;:::i;:::-;18601:139;;18328:419;;;:::o;18753:::-;18919:4;18957:2;18946:9;18942:18;18934:26;;19006:9;19000:4;18996:20;18992:1;18981:9;18977:17;18970:47;19034:131;19160:4;19034:131;:::i;:::-;19026:139;;18753:419;;;:::o;19178:::-;19344:4;19382:2;19371:9;19367:18;19359:26;;19431:9;19425:4;19421:20;19417:1;19406:9;19402:17;19395:47;19459:131;19585:4;19459:131;:::i;:::-;19451:139;;19178:419;;;:::o;19603:::-;19769:4;19807:2;19796:9;19792:18;19784:26;;19856:9;19850:4;19846:20;19842:1;19831:9;19827:17;19820:47;19884:131;20010:4;19884:131;:::i;:::-;19876:139;;19603:419;;;:::o;20028:::-;20194:4;20232:2;20221:9;20217:18;20209:26;;20281:9;20275:4;20271:20;20267:1;20256:9;20252:17;20245:47;20309:131;20435:4;20309:131;:::i;:::-;20301:139;;20028:419;;;:::o;20453:::-;20619:4;20657:2;20646:9;20642:18;20634:26;;20706:9;20700:4;20696:20;20692:1;20681:9;20677:17;20670:47;20734:131;20860:4;20734:131;:::i;:::-;20726:139;;20453:419;;;:::o;20878:::-;21044:4;21082:2;21071:9;21067:18;21059:26;;21131:9;21125:4;21121:20;21117:1;21106:9;21102:17;21095:47;21159:131;21285:4;21159:131;:::i;:::-;21151:139;;20878:419;;;:::o;21303:::-;21469:4;21507:2;21496:9;21492:18;21484:26;;21556:9;21550:4;21546:20;21542:1;21531:9;21527:17;21520:47;21584:131;21710:4;21584:131;:::i;:::-;21576:139;;21303:419;;;:::o;21728:222::-;21821:4;21859:2;21848:9;21844:18;21836:26;;21872:71;21940:1;21929:9;21925:17;21916:6;21872:71;:::i;:::-;21728:222;;;;:::o;21956:831::-;22219:4;22257:3;22246:9;22242:19;22234:27;;22271:71;22339:1;22328:9;22324:17;22315:6;22271:71;:::i;:::-;22352:80;22428:2;22417:9;22413:18;22404:6;22352:80;:::i;:::-;22479:9;22473:4;22469:20;22464:2;22453:9;22449:18;22442:48;22507:108;22610:4;22601:6;22507:108;:::i;:::-;22499:116;;22625:72;22693:2;22682:9;22678:18;22669:6;22625:72;:::i;:::-;22707:73;22775:3;22764:9;22760:19;22751:6;22707:73;:::i;:::-;21956:831;;;;;;;;:::o;22793:214::-;22882:4;22920:2;22909:9;22905:18;22897:26;;22933:67;22997:1;22986:9;22982:17;22973:6;22933:67;:::i;:::-;22793:214;;;;:::o;23013:129::-;23047:6;23074:20;;:::i;:::-;23064:30;;23103:33;23131:4;23123:6;23103:33;:::i;:::-;23013:129;;;:::o;23148:75::-;23181:6;23214:2;23208:9;23198:19;;23148:75;:::o;23229:311::-;23306:4;23396:18;23388:6;23385:30;23382:56;;;23418:18;;:::i;:::-;23382:56;23468:4;23460:6;23456:17;23448:25;;23528:4;23522;23518:15;23510:23;;23229:311;;;:::o;23546:132::-;23613:4;23636:3;23628:11;;23666:4;23661:3;23657:14;23649:22;;23546:132;;;:::o;23684:114::-;23751:6;23785:5;23779:12;23769:22;;23684:114;;;:::o;23804:99::-;23856:6;23890:5;23884:12;23874:22;;23804:99;;;:::o;23909:113::-;23979:4;24011;24006:3;24002:14;23994:22;;23909:113;;;:::o;24028:184::-;24127:11;24161:6;24156:3;24149:19;24201:4;24196:3;24192:14;24177:29;;24028:184;;;;:::o;24218:147::-;24319:11;24356:3;24341:18;;24218:147;;;;:::o;24371:169::-;24455:11;24489:6;24484:3;24477:19;24529:4;24524:3;24520:14;24505:29;;24371:169;;;;:::o;24546:305::-;24586:3;24605:20;24623:1;24605:20;:::i;:::-;24600:25;;24639:20;24657:1;24639:20;:::i;:::-;24634:25;;24793:1;24725:66;24721:74;24718:1;24715:81;24712:107;;;24799:18;;:::i;:::-;24712:107;24843:1;24840;24836:9;24829:16;;24546:305;;;;:::o;24857:185::-;24897:1;24914:20;24932:1;24914:20;:::i;:::-;24909:25;;24948:20;24966:1;24948:20;:::i;:::-;24943:25;;24987:1;24977:35;;24992:18;;:::i;:::-;24977:35;25034:1;25031;25027:9;25022:14;;24857:185;;;;:::o;25048:848::-;25109:5;25116:4;25140:6;25131:15;;25164:5;25155:14;;25178:712;25199:1;25189:8;25186:15;25178:712;;;25294:4;25289:3;25285:14;25279:4;25276:24;25273:50;;;25303:18;;:::i;:::-;25273:50;25353:1;25343:8;25339:16;25336:451;;;25768:4;25761:5;25757:16;25748:25;;25336:451;25818:4;25812;25808:15;25800:23;;25848:32;25871:8;25848:32;:::i;:::-;25836:44;;25178:712;;;25048:848;;;;;;;:::o;25902:281::-;25960:5;25984:23;26002:4;25984:23;:::i;:::-;25976:31;;26028:25;26044:8;26028:25;:::i;:::-;26016:37;;26072:104;26109:66;26099:8;26093:4;26072:104;:::i;:::-;26063:113;;25902:281;;;;:::o;26189:1073::-;26243:5;26434:8;26424:40;;26455:1;26446:10;;26457:5;;26424:40;26483:4;26473:36;;26500:1;26491:10;;26502:5;;26473:36;26569:4;26617:1;26612:27;;;;26653:1;26648:191;;;;26562:277;;26612:27;26630:1;26621:10;;26632:5;;;26648:191;26693:3;26683:8;26680:17;26677:43;;;26700:18;;:::i;:::-;26677:43;26749:8;26746:1;26742:16;26733:25;;26784:3;26777:5;26774:14;26771:40;;;26791:18;;:::i;:::-;26771:40;26824:5;;;26562:277;;26948:2;26938:8;26935:16;26929:3;26923:4;26920:13;26916:36;26898:2;26888:8;26885:16;26880:2;26874:4;26871:12;26867:35;26851:111;26848:246;;;27004:8;26998:4;26994:19;26985:28;;27039:3;27032:5;27029:14;27026:40;;;27046:18;;:::i;:::-;27026:40;27079:5;;26848:246;27119:42;27157:3;27147:8;27141:4;27138:1;27119:42;:::i;:::-;27104:57;;;;27193:4;27188:3;27184:14;27177:5;27174:25;27171:51;;;27202:18;;:::i;:::-;27171:51;27251:4;27244:5;27240:16;27231:25;;26189:1073;;;;;;:::o;27268:348::-;27308:7;27331:20;27349:1;27331:20;:::i;:::-;27326:25;;27365:20;27383:1;27365:20;:::i;:::-;27360:25;;27553:1;27485:66;27481:74;27478:1;27475:81;27470:1;27463:9;27456:17;27452:105;27449:131;;;27560:18;;:::i;:::-;27449:131;27608:1;27605;27601:9;27590:20;;27268:348;;;;:::o;27622:191::-;27662:4;27682:20;27700:1;27682:20;:::i;:::-;27677:25;;27716:20;27734:1;27716:20;:::i;:::-;27711:25;;27755:1;27752;27749:8;27746:34;;;27760:18;;:::i;:::-;27746:34;27805:1;27802;27798:9;27790:17;;27622:191;;;;:::o;27819:96::-;27856:7;27885:24;27903:5;27885:24;:::i;:::-;27874:35;;27819:96;;;:::o;27921:90::-;27955:7;27998:5;27991:13;27984:21;27973:32;;27921:90;;;:::o;28017:126::-;28054:7;28094:42;28087:5;28083:54;28072:65;;28017:126;;;:::o;28149:77::-;28186:7;28215:5;28204:16;;28149:77;;;:::o;28232:86::-;28267:7;28307:4;28300:5;28296:16;28285:27;;28232:86;;;:::o;28324:152::-;28400:9;28433:37;28464:5;28433:37;:::i;:::-;28420:50;;28324:152;;;:::o;28482:121::-;28540:9;28573:24;28591:5;28573:24;:::i;:::-;28560:37;;28482:121;;;:::o;28609:126::-;28659:9;28692:37;28723:5;28692:37;:::i;:::-;28679:50;;28609:126;;;:::o;28741:113::-;28791:9;28824:24;28842:5;28824:24;:::i;:::-;28811:37;;28741:113;;;:::o;28860:307::-;28928:1;28938:113;28952:6;28949:1;28946:13;28938:113;;;29037:1;29032:3;29028:11;29022:18;29018:1;29013:3;29009:11;29002:39;28974:2;28971:1;28967:10;28962:15;;28938:113;;;29069:6;29066:1;29063:13;29060:101;;;29149:1;29140:6;29135:3;29131:16;29124:27;29060:101;28909:258;28860:307;;;:::o;29173:281::-;29256:27;29278:4;29256:27;:::i;:::-;29248:6;29244:40;29386:6;29374:10;29371:22;29350:18;29338:10;29335:34;29332:62;29329:88;;;29397:18;;:::i;:::-;29329:88;29437:10;29433:2;29426:22;29216:238;29173:281;;:::o;29460:233::-;29499:3;29522:24;29540:5;29522:24;:::i;:::-;29513:33;;29568:66;29561:5;29558:77;29555:103;;;29638:18;;:::i;:::-;29555:103;29685:1;29678:5;29674:13;29667:20;;29460:233;;;:::o;29699:180::-;29747:77;29744:1;29737:88;29844:4;29841:1;29834:15;29868:4;29865:1;29858:15;29885:180;29933:77;29930:1;29923:88;30030:4;30027:1;30020:15;30054:4;30051:1;30044:15;30071:180;30119:77;30116:1;30109:88;30216:4;30213:1;30206:15;30240:4;30237:1;30230:15;30257:180;30305:77;30302:1;30295:88;30402:4;30399:1;30392:15;30426:4;30423:1;30416:15;30443:117;30552:1;30549;30542:12;30566:117;30675:1;30672;30665:12;30689:117;30798:1;30795;30788:12;30812:117;30921:1;30918;30911:12;30935:117;31044:1;31041;31034:12;31058:102;31099:6;31150:2;31146:7;31141:2;31134:5;31130:14;31126:28;31116:38;;31058:102;;;:::o;31166:::-;31208:8;31255:5;31252:1;31248:13;31227:34;;31166:102;;;:::o;31274:222::-;31414:34;31410:1;31402:6;31398:14;31391:58;31483:5;31478:2;31470:6;31466:15;31459:30;31274:222;:::o;31502:250::-;31642:34;31638:1;31630:6;31626:14;31619:58;31711:33;31706:2;31698:6;31694:15;31687:58;31502:250;:::o;31758:229::-;31898:34;31894:1;31886:6;31882:14;31875:58;31967:12;31962:2;31954:6;31950:15;31943:37;31758:229;:::o;31993:178::-;32133:30;32129:1;32121:6;32117:14;32110:54;31993:178;:::o;32177:225::-;32317:34;32313:1;32305:6;32301:14;32294:58;32386:8;32381:2;32373:6;32369:15;32362:33;32177:225;:::o;32408:221::-;32548:34;32544:1;32536:6;32532:14;32525:58;32617:4;32612:2;32604:6;32600:15;32593:29;32408:221;:::o;32635:222::-;32775:34;32771:1;32763:6;32759:14;32752:58;32844:5;32839:2;32831:6;32827:15;32820:30;32635:222;:::o;32863:173::-;33003:25;32999:1;32991:6;32987:14;32980:49;32863:173;:::o;33042:182::-;33182:34;33178:1;33170:6;33166:14;33159:58;33042:182;:::o;33230:228::-;33370:34;33366:1;33358:6;33354:14;33347:58;33439:11;33434:2;33426:6;33422:15;33415:36;33230:228;:::o;33464:224::-;33604:34;33600:1;33592:6;33588:14;33581:58;33673:7;33668:2;33660:6;33656:15;33649:32;33464:224;:::o;33694:222::-;33834:34;33830:1;33822:6;33818:14;33811:58;33903:5;33898:2;33890:6;33886:15;33879:30;33694:222;:::o;33922:114::-;;:::o;34042:223::-;34182:34;34178:1;34170:6;34166:14;34159:58;34251:6;34246:2;34238:6;34234:15;34227:31;34042:223;:::o;34271:122::-;34344:24;34362:5;34344:24;:::i;:::-;34337:5;34334:35;34324:63;;34383:1;34380;34373:12;34324:63;34271:122;:::o;34399:116::-;34469:21;34484:5;34469:21;:::i;:::-;34462:5;34459:32;34449:60;;34505:1;34502;34495:12;34449:60;34399:116;:::o;34521:122::-;34594:24;34612:5;34594:24;:::i;:::-;34587:5;34584:35;34574:63;;34633:1;34630;34623:12;34574:63;34521:122;:::o

Swarm Source

ipfs://6b7e0e650cf92c2b4c82e7dc2287f60c46ba34ce0156d09332a933b457dc38fe
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.