ETH Price: $3,405.24 (+2.76%)

Token

Dojo Supercomputer (DOJO)
 

Overview

Max Total Supply

1,000,000,000,000,000 DOJO

Holders

606

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,934,803,424,936.473251684 DOJO

Value
$0.00
0x5a527ed68b1d3d41ee48800696b6a052ae5c92d9
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:
DOJO

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 * SPDX-License-Identifier: UNLICENSED 
 * 
*/

pragma solidity ^0.8.7;

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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

/**
 * @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.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

    string private constant _name = "Dojo Supercomputer";
    string private constant _symbol = "DOJO";
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1e15 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private minContractTokensToSwap = 1e12 * 10**9;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMaxWallet;
    mapping (address => bool) private _bots;
    uint256 private _taxFee = 0;
    uint256 private _teamFee = 25;
    uint256 private _maxWalletSize = 2e13 * 10**9;
    uint256 private _buyFee = 25;
    uint256 private _sellFee = 25;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousteamFee = _teamFee;
    address payable private _treasury;
    address payable private _marketingWallet;
    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen = false;
    bool private _swapAll = false;
    bool private inSwap = false;
    mapping(address => bool) private automatedMarketMakerPairs;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event Response(bool treasury, bool marketing);

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

        _treasury = payable(0x9c3bdf69858A7Bee4bD2a8082c3A6B98fE147eF4);
        _marketingWallet = payable(0x9eF2555736feee8C88485fa17b4533Aa9649A9C7);
        
        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        _isExcludedFromFee[_treasury] = true;
        _isExcludedFromFee[_marketingWallet] = true;

        _isExcludedFromMaxWallet[owner()] = true;
        _isExcludedFromMaxWallet[address(this)] = true;
        _isExcludedFromMaxWallet[_treasury] = true;
        _isExcludedFromMaxWallet[_marketingWallet] = true;

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

    function name() public pure returns (string memory) {
        return _name;
    }
    
    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()) {
            
            require(!_bots[from] && !_bots[to]);

            if(to != uniswapV2Pair && !_isExcludedFromMaxWallet[to]) {
                require(balanceOf(address(to)) + amount <= _maxWalletSize, "TOKEN: Balance exceeds wallet size!");
            }
            
            if(from == uniswapV2Pair && to != address(uniswapV2Router) && !_isExcludedFromFee[to]) {
                require(tradingOpen, "Trading not yet enabled.");
                _teamFee = _buyFee;
            }
            uint256 contractTokenBalance = balanceOf(address(this));

            if(!inSwap && from != uniswapV2Pair && tradingOpen) {
                _teamFee = _sellFee;

                if (automatedMarketMakerPairs[to]) {
                    if(contractTokenBalance > minContractTokensToSwap) {
                        if(!_swapAll) {
                            contractTokenBalance = minContractTokensToSwap;
                        }
                        swapAndSend(contractTokenBalance);
                    }
                }

            }
        }
        bool takeFee = true;

        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        if(!automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to]) {
            takeFee = false;
        }
        
        _tokenTransfer(from,to,amount,takeFee);
    }

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

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

    function swapAndSend(uint256 contractTokenBalance) private {
        
        swapTokensForEth(contractTokenBalance);

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

    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 treasury, ) = _treasury.call{value: amount.div(2)}("");
        (bool marketing, ) = _marketingWallet.call{value: amount.div(2)}("");

        emit Response(treasury, marketing);
    }
    
    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 _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(tAmount, _taxFee, _teamFee);
        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 taxFee, uint256 TeamFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tTeam = tAmount.mul(TeamFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    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 _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 _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 launch() external onlyOwner() {
        require(!tradingOpen,"trading is already open");
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
        tradingOpen = true;
        automatedMarketMakerPairs[uniswapV2Pair] = true;
    }
    
    function setMarketingWallet (address payable marketing) external onlyOwner {
        _isExcludedFromFee[_marketingWallet] = false;
        _marketingWallet = marketing;
        _isExcludedFromFee[marketing] = true;
    }

    function setTreasury (address payable treasury) external onlyOwner() {
        _isExcludedFromFee[_treasury] = false;
        _treasury = treasury;
        _isExcludedFromFee[treasury] = true;
    }

    function excludeFromFee(address[] calldata ads, bool onoff) public onlyOwner {
        for (uint i = 0; i < ads.length; i++) {
            _isExcludedFromFee[ads[i]] = onoff;
        }
    }

    function isExcludedFromFee(address ad) public view returns (bool) {
        return _isExcludedFromFee[ad];
    }

    function excludeFromMaxWallet(address[] calldata ads, bool onoff) public onlyOwner {
        for (uint i = 0; i < ads.length; i++) {
            _isExcludedFromMaxWallet[ads[i]] = onoff;
        }
    }
    
    function isExcludedMaxWallet(address ad) public view returns (bool) {
        return _isExcludedFromMaxWallet[ad];
    }

    function setBuyFee(uint256 buy) external onlyOwner {
        require(buy <= 25);
        _buyFee = buy;
    }

    function setSellFee(uint256 sell) external onlyOwner {
        require(sell <= 25);
        _sellFee = sell;
    }

    function setTaxFee(uint256 tax) external onlyOwner {
        require(tax <= 25);
        _taxFee = tax;
    }
    
    function setMinContractTokensToSwap(uint256 numToken) external onlyOwner {
        minContractTokensToSwap = numToken * 10**9;
    }

    function setMaxWallet(uint256 amt) external onlyOwner {
        _maxWalletSize = amt * 10**9;
    }

    function setSwapAll(bool onoff) external onlyOwner {
        _swapAll = onoff;
    }

    function setBots(address[] calldata bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            if (bots_[i] != uniswapV2Pair && bots_[i] != address(uniswapV2Router)) {
                _bots[bots_[i]] = true;
            }
        }
    }
    
    function delBot(address notbot) public onlyOwner {
        _bots[notbot] = false;
    }
    
    function isBot(address ad) public view returns (bool) {
        return _bots[ad];
    }
    
    function manualswap() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }
    
    function manualsend() external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function thisBalance() public view returns (uint) {
        return balanceOf(address(this));
    }

    function amountInPool() public view returns (uint) {
        return balanceOf(uniswapV2Pair);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }

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

    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 removeAllFee() private {
        if(_taxFee == 0 && _teamFee == 0) return;
        _previousTaxFee = _taxFee;
        _previousteamFee = _teamFee;
        _taxFee = 0;
        _teamFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _teamFee = _previousteamFee;
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, 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 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 _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);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"treasury","type":"bool"},{"indexed":false,"internalType":"bool","name":"marketing","type":"bool"}],"name":"Response","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountInPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"delBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"ads","type":"address[]"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"ads","type":"address[]"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ad","type":"address"}],"name":"isExcludedMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buy","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numToken","type":"uint256"}],"name":"setMinContractTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sell","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"thisBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405269d3c21bcecceda10000006000196200001e9190620006cf565b6000196200002d919062000736565b600355683635c9adc5dea000006005556000600c556019600d5569043c33c1937564800000600e556019600f556019601055600c54601155600d546012556000601660146101000a81548160ff0219169083151502179055506000601660156101000a81548160ff02191690831515021790555060006016806101000a81548160ff021916908315150217905550348015620000c857600080fd5b506000620000db6200066560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350739c3bdf69858a7bee4bd2a8082c3a6b98fe147ef4601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739ef2555736feee8c88485fa17b4533aa9649a9c7601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600354600660006200023a6200066560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600960006200028e6200066d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000620004416200066d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005ee6200066560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef69d3c21bcecceda100000060405162000657919062000782565b60405180910390a36200079f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620006dc8262000696565b9150620006e98362000696565b925082620006fc57620006fb620006a0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007438262000696565b9150620007508362000696565b92508282039050818111156200076b576200076a62000707565b5b92915050565b6200077c8162000696565b82525050565b600060208201905062000799600083018462000771565b92915050565b61509580620007af6000396000f3fe6080604052600436106102135760003560e01c80638b4cee0811610118578063c4081a4c116100a0578063dd62ed3e1161006f578063dd62ed3e14610744578063de30aad114610781578063e1ab04c9146107aa578063f0f44260146107e7578063f2fde38b146108105761021a565b8063c4081a4c1461069e578063db8aeab1146106c7578063db92dbb6146106f0578063dd4670641461071b5761021a565b8063a69df4b5116100e7578063a69df4b5146105df578063a9059cbb146105f6578063b515566a14610633578063b6c523241461065c578063c3c8cd80146106875761021a565b80638b4cee08146105375780638da5cb5b1461056057806395d89b411461058b5780639a7a23d6146105b65761021a565b806328875c161161019b5780635d0044ca1161016a5780635d0044ca1461047a5780635d098b38146104a35780636fc3eaec146104cc57806370a08231146104e3578063715018a6146105205761021a565b806328875c16146103ac578063313ce567146103d55780633bbac579146104005780635342acb41461043d5761021a565b806312dfbd33116101e257806312dfbd33146102c757806318160ddd146102f057806323b872dd1461031b578063273123b71461035857806327f3a72a146103815761021a565b806301339c211461021f57806306fdde0314610236578063095ea7b3146102615780630cc835a31461029e5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610839565b005b34801561024257600080fd5b5061024b610d80565b6040516102589190613dc7565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190613e87565b610dbd565b6040516102959190613ee2565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613efd565b610ddb565b005b3480156102d357600080fd5b506102ee60048036038101906102e99190613efd565b610e88565b005b3480156102fc57600080fd5b50610305610f36565b6040516103129190613f39565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613f54565b610f48565b60405161034f9190613ee2565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613fa7565b611021565b005b34801561038d57600080fd5b50610396611111565b6040516103a39190613f39565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190614065565b611121565b005b3480156103e157600080fd5b506103ea61125b565b6040516103f791906140e1565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190613fa7565b611264565b6040516104349190613ee2565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613fa7565b6112ba565b6040516104719190613ee2565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613efd565b611310565b005b3480156104af57600080fd5b506104ca60048036038101906104c5919061413a565b6113be565b005b3480156104d857600080fd5b506104e1611569565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190613fa7565b61160f565b6040516105179190613f39565b60405180910390f35b34801561052c57600080fd5b50610535611660565b005b34801561054357600080fd5b5061055e60048036038101906105599190613efd565b6117b3565b005b34801561056c57600080fd5b50610575611860565b6040516105829190614176565b60405180910390f35b34801561059757600080fd5b506105a0611889565b6040516105ad9190613dc7565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190614191565b6118c6565b005b3480156105eb57600080fd5b506105f46119f9565b005b34801561060257600080fd5b5061061d60048036038101906106189190613e87565b611bcd565b60405161062a9190613ee2565b60405180910390f35b34801561063f57600080fd5b5061065a600480360381019061065591906141d1565b611beb565b005b34801561066857600080fd5b50610671611e25565b60405161067e9190613f39565b60405180910390f35b34801561069357600080fd5b5061069c611e2f565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613efd565b611edd565b005b3480156106d357600080fd5b506106ee60048036038101906106e99190614065565b611f8a565b005b3480156106fc57600080fd5b506107056120c4565b6040516107129190613f39565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190613efd565b6120f6565b005b34801561075057600080fd5b5061076b6004803603810190610766919061421e565b6122bd565b6040516107789190613f39565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a3919061425e565b612344565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613fa7565b6123f6565b6040516107de9190613ee2565b60405180910390f35b3480156107f357600080fd5b5061080e6004803603810190610809919061413a565b61244c565b005b34801561081c57600080fd5b5061083760048036038101906108329190613fa7565b6125f7565b005b6108416127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c5906142d7565b60405180910390fd5b601660149054906101000a900460ff161561091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091590614343565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109af30601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006127c0565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1e9190614378565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa99190614378565b6040518363ffffffff1660e01b8152600401610ac69291906143a5565b6020604051808303816000875af1158015610ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b099190614378565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610b923061160f565b600080610b9d611860565b426040518863ffffffff1660e01b8152600401610bbf96959493929190614413565b60606040518083038185885af1158015610bdd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c029190614489565b505050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610ca49291906144dc565b6020604051808303816000875af1158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce7919061451a565b506001601660146101000a81548160ff021916908315150217905550600160176000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280601281526020017f446f6a6f205375706572636f6d70757465720000000000000000000000000000815250905090565b6000610dd1610dca6127b8565b84846127c0565b6001905092915050565b610de36127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e67906142d7565b60405180910390fd5b6019811115610e7e57600080fd5b80600f8190555050565b610e906127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f14906142d7565b60405180910390fd5b633b9aca0081610f2d9190614576565b60058190555050565b600069d3c21bcecceda1000000905090565b6000610f55848484612989565b61101684610f616127b8565b6110118560405180606001604052806028815260200161503860289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc76127b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c89092919063ffffffff16565b6127c0565b600190509392505050565b6110296127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad906142d7565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061111c3061160f565b905090565b6111296127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad906142d7565b60405180910390fd5b60005b838390508110156112555781600960008686858181106111dc576111db6145b8565b5b90506020020160208101906111f19190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061124d906145e7565b9150506111b9565b50505050565b60006009905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113186127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c906142d7565b60405180910390fd5b633b9aca00816113b59190614576565b600e8190555050565b6113c66127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906142d7565b60405180910390fd5b600060096000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115716127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f5906142d7565b60405180910390fd5b600047905061160c8161312c565b50565b6000611659600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ac565b9050919050565b6116686127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec906142d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117bb6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906142d7565b60405180910390fd5b601981111561185657600080fd5b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f444f4a4f00000000000000000000000000000000000000000000000000000000815250905090565b6118ce6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611952906142d7565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e2906146a1565b60405180910390fd5b6119f5828261331a565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8090614733565b60405180910390fd5b6002544211611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac49061479f565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611be1611bda6127b8565b8484612989565b6001905092915050565b611bf36127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c77906142d7565b60405180910390fd5b60005b82829050811015611e2057601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838383818110611cda57611cd96145b8565b5b9050602002016020810190611cef9190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1614158015611d885750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838383818110611d5a57611d596145b8565b5b9050602002016020810190611d6f9190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611e0d576001600b6000858585818110611da657611da56145b8565b5b9050602002016020810190611dbb9190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611e18906145e7565b915050611c83565b505050565b6000600254905090565b611e376127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb906142d7565b60405180910390fd5b6000611ecf3061160f565b9050611eda81613375565b50565b611ee56127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906142d7565b60405180910390fd5b6019811115611f8057600080fd5b80600c8190555050565b611f926127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612016906142d7565b60405180910390fd5b60005b838390508110156120be5781600a6000868685818110612045576120446145b8565b5b905060200201602081019061205a9190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120b6906145e7565b915050612022565b50505050565b60006120f1601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661160f565b905090565b6120fe6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612182906142d7565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261223991906147bf565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61234c6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d0906142d7565b60405180910390fd5b80601660156101000a81548160ff02191690831515021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6124546127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d8906142d7565b60405180910390fd5b600060096000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6125ff6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461268c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612683906142d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f290614865565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361282f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612826906148f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289590614989565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161297c9190613f39565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ef90614a1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5e90614aad565b60405180910390fd5b60008111612aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa190614b3f565b60405180910390fd5b612ab2611860565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b205750612af0611860565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f5757600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bc95750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bd257600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c7a5750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cd857600e5481612c8c8461160f565b612c9691906147bf565b1115612cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cce90614bd1565b60405180910390fd5b5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612d835750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dd95750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3757601660149054906101000a900460ff16612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490614c3d565b60405180910390fd5b600f54600d819055505b6000612e423061160f565b905060168054906101000a900460ff16158015612ead5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec55750601660149054906101000a900460ff165b15612f5557601054600d81905550601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f5457600554811115612f5357601660159054906101000a900460ff16612f495760055490505b612f52816135ec565b5b5b5b505b600060019050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ffe5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561300857600090505b601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130ac5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130b657600090505b6130c284848484613611565b50505050565b6000838311158290613110576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131079190613dc7565b60405180910390fd5b506000838561311f9190614c5d565b9050809150509392505050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661317b60028461363e90919063ffffffff16565b60405161318790614cc2565b60006040518083038185875af1925050503d80600081146131c4576040519150601f19603f3d011682016040523d82523d6000602084013e6131c9565b606091505b505090506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661321c60028561363e90919063ffffffff16565b60405161322890614cc2565b60006040518083038185875af1925050503d8060008114613265576040519150601f19603f3d011682016040523d82523d6000602084013e61326a565b606091505b505090507fc45e9b3ac19bf635feaed560109cb8931031fbbc86809d50d65d41a2cf2fe8b9828260405161329f929190614cd7565b60405180910390a1505050565b60006003548211156132f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ea90614d72565b60405180910390fd5b60006132fd613688565b9050613312818461363e90919063ffffffff16565b915050919050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60016016806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156133ac576133ab614d92565b5b6040519080825280602002602001820160405280156133da5781602001602082028036833780820191505090505b50905030816000815181106133f2576133f16145b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bd9190614378565b816001815181106134d1576134d06145b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061353830601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846127c0565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161359c959493929190614e7f565b600060405180830381600087803b1580156135b657600080fd5b505af11580156135ca573d6000803e3d6000fd5b505050505060006016806101000a81548160ff02191690831515021790555050565b6135f581613375565b6000479050600081111561360d5761360c4761312c565b5b5050565b8061361f5761361e6136b3565b5b61362a8484846136f0565b80613638576136376138bb565b5b50505050565b600061368083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138cf565b905092915050565b6000806000613695613932565b915091506136ac818361363e90919063ffffffff16565b9250505090565b6000600c541480156136c757506000600d54145b6136ee57600c54601181905550600d546012819055506000600c819055506000600d819055505b565b60008060008060008061370287613997565b95509550955095509550955061376086600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ff90919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137f585600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a4990919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384181613aa7565b61384b8483613b64565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138a89190613f39565b60405180910390a3505050505050505050565b601154600c81905550601254600d81905550565b60008083118290613916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390d9190613dc7565b60405180910390fd5b50600083856139259190614f08565b9050809150509392505050565b60008060006003549050600069d3c21bcecceda1000000905061396a69d3c21bcecceda100000060035461363e90919063ffffffff16565b82101561398a5760035469d3c21bcecceda1000000935093505050613993565b81819350935050505b9091565b60008060008060008060008060006139b48a600c54600d54613b9e565b92509250925060006139c4613688565b905060008060006139d78e878787613c34565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000613a4183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130c8565b905092915050565b6000808284613a5891906147bf565b905083811015613a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9490614f85565b60405180910390fd5b8091505092915050565b6000613ab1613688565b90506000613ac88284613cbd90919063ffffffff16565b9050613b1c81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a4990919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613b79826003546139ff90919063ffffffff16565b600381905550613b9481600454613a4990919063ffffffff16565b6004819055505050565b600080600080613bca6064613bbc888a613cbd90919063ffffffff16565b61363e90919063ffffffff16565b90506000613bf46064613be6888b613cbd90919063ffffffff16565b61363e90919063ffffffff16565b90506000613c1d82613c0f858c6139ff90919063ffffffff16565b6139ff90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080613c4d8589613cbd90919063ffffffff16565b90506000613c648689613cbd90919063ffffffff16565b90506000613c7b8789613cbd90919063ffffffff16565b90506000613ca482613c9685876139ff90919063ffffffff16565b6139ff90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808303613ccf5760009050613d31565b60008284613cdd9190614576565b9050828482613cec9190614f08565b14613d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2390615017565b60405180910390fd5b809150505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d71578082015181840152602081019050613d56565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d9982613d37565b613da38185613d42565b9350613db3818560208601613d53565b613dbc81613d7d565b840191505092915050565b60006020820190508181036000830152613de18184613d8e565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1e82613df3565b9050919050565b613e2e81613e13565b8114613e3957600080fd5b50565b600081359050613e4b81613e25565b92915050565b6000819050919050565b613e6481613e51565b8114613e6f57600080fd5b50565b600081359050613e8181613e5b565b92915050565b60008060408385031215613e9e57613e9d613de9565b5b6000613eac85828601613e3c565b9250506020613ebd85828601613e72565b9150509250929050565b60008115159050919050565b613edc81613ec7565b82525050565b6000602082019050613ef76000830184613ed3565b92915050565b600060208284031215613f1357613f12613de9565b5b6000613f2184828501613e72565b91505092915050565b613f3381613e51565b82525050565b6000602082019050613f4e6000830184613f2a565b92915050565b600080600060608486031215613f6d57613f6c613de9565b5b6000613f7b86828701613e3c565b9350506020613f8c86828701613e3c565b9250506040613f9d86828701613e72565b9150509250925092565b600060208284031215613fbd57613fbc613de9565b5b6000613fcb84828501613e3c565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ff957613ff8613fd4565b5b8235905067ffffffffffffffff81111561401657614015613fd9565b5b60208301915083602082028301111561403257614031613fde565b5b9250929050565b61404281613ec7565b811461404d57600080fd5b50565b60008135905061405f81614039565b92915050565b60008060006040848603121561407e5761407d613de9565b5b600084013567ffffffffffffffff81111561409c5761409b613dee565b5b6140a886828701613fe3565b935093505060206140bb86828701614050565b9150509250925092565b600060ff82169050919050565b6140db816140c5565b82525050565b60006020820190506140f660008301846140d2565b92915050565b600061410782613df3565b9050919050565b614117816140fc565b811461412257600080fd5b50565b6000813590506141348161410e565b92915050565b6000602082840312156141505761414f613de9565b5b600061415e84828501614125565b91505092915050565b61417081613e13565b82525050565b600060208201905061418b6000830184614167565b92915050565b600080604083850312156141a8576141a7613de9565b5b60006141b685828601613e3c565b92505060206141c785828601614050565b9150509250929050565b600080602083850312156141e8576141e7613de9565b5b600083013567ffffffffffffffff81111561420657614205613dee565b5b61421285828601613fe3565b92509250509250929050565b6000806040838503121561423557614234613de9565b5b600061424385828601613e3c565b925050602061425485828601613e3c565b9150509250929050565b60006020828403121561427457614273613de9565b5b600061428284828501614050565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142c1602083613d42565b91506142cc8261428b565b602082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b600061432d601783613d42565b9150614338826142f7565b602082019050919050565b6000602082019050818103600083015261435c81614320565b9050919050565b60008151905061437281613e25565b92915050565b60006020828403121561438e5761438d613de9565b5b600061439c84828501614363565b91505092915050565b60006040820190506143ba6000830185614167565b6143c76020830184614167565b9392505050565b6000819050919050565b6000819050919050565b60006143fd6143f86143f3846143ce565b6143d8565b613e51565b9050919050565b61440d816143e2565b82525050565b600060c0820190506144286000830189614167565b6144356020830188613f2a565b6144426040830187614404565b61444f6060830186614404565b61445c6080830185614167565b61446960a0830184613f2a565b979650505050505050565b60008151905061448381613e5b565b92915050565b6000806000606084860312156144a2576144a1613de9565b5b60006144b086828701614474565b93505060206144c186828701614474565b92505060406144d286828701614474565b9150509250925092565b60006040820190506144f16000830185614167565b6144fe6020830184613f2a565b9392505050565b60008151905061451481614039565b92915050565b6000602082840312156145305761452f613de9565b5b600061453e84828501614505565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061458182613e51565b915061458c83613e51565b925082820261459a81613e51565b915082820484148315176145b1576145b0614547565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006145f282613e51565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361462457614623614547565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061468b603983613d42565b91506146968261462f565b604082019050919050565b600060208201905081810360008301526146ba8161467e565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061471d602383613d42565b9150614728826146c1565b604082019050919050565b6000602082019050818103600083015261474c81614710565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614789601f83613d42565b915061479482614753565b602082019050919050565b600060208201905081810360008301526147b88161477c565b9050919050565b60006147ca82613e51565b91506147d583613e51565b92508282019050808211156147ed576147ec614547565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061484f602683613d42565b915061485a826147f3565b604082019050919050565b6000602082019050818103600083015261487e81614842565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148e1602483613d42565b91506148ec82614885565b604082019050919050565b60006020820190508181036000830152614910816148d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614973602283613d42565b915061497e82614917565b604082019050919050565b600060208201905081810360008301526149a281614966565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a05602583613d42565b9150614a10826149a9565b604082019050919050565b60006020820190508181036000830152614a34816149f8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a97602383613d42565b9150614aa282614a3b565b604082019050919050565b60006020820190508181036000830152614ac681614a8a565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614b29602983613d42565b9150614b3482614acd565b604082019050919050565b60006020820190508181036000830152614b5881614b1c565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000614bbb602383613d42565b9150614bc682614b5f565b604082019050919050565b60006020820190508181036000830152614bea81614bae565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b6000614c27601883613d42565b9150614c3282614bf1565b602082019050919050565b60006020820190508181036000830152614c5681614c1a565b9050919050565b6000614c6882613e51565b9150614c7383613e51565b9250828203905081811115614c8b57614c8a614547565b5b92915050565b600081905092915050565b50565b6000614cac600083614c91565b9150614cb782614c9c565b600082019050919050565b6000614ccd82614c9f565b9150819050919050565b6000604082019050614cec6000830185613ed3565b614cf96020830184613ed3565b9392505050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614d5c602a83613d42565b9150614d6782614d00565b604082019050919050565b60006020820190508181036000830152614d8b81614d4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614df681613e13565b82525050565b6000614e088383614ded565b60208301905092915050565b6000602082019050919050565b6000614e2c82614dc1565b614e368185614dcc565b9350614e4183614ddd565b8060005b83811015614e72578151614e598882614dfc565b9750614e6483614e14565b925050600181019050614e45565b5085935050505092915050565b600060a082019050614e946000830188613f2a565b614ea16020830187614404565b8181036040830152614eb38186614e21565b9050614ec26060830185614167565b614ecf6080830184613f2a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f1382613e51565b9150614f1e83613e51565b925082614f2e57614f2d614ed9565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f6f601b83613d42565b9150614f7a82614f39565b602082019050919050565b60006020820190508181036000830152614f9e81614f62565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615001602183613d42565b915061500c82614fa5565b604082019050919050565b6000602082019050818103600083015261503081614ff4565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209f84e229af5921816b1f474b968ed328da6ad7c06e3b04981f89cc2782a46b8864736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80638b4cee0811610118578063c4081a4c116100a0578063dd62ed3e1161006f578063dd62ed3e14610744578063de30aad114610781578063e1ab04c9146107aa578063f0f44260146107e7578063f2fde38b146108105761021a565b8063c4081a4c1461069e578063db8aeab1146106c7578063db92dbb6146106f0578063dd4670641461071b5761021a565b8063a69df4b5116100e7578063a69df4b5146105df578063a9059cbb146105f6578063b515566a14610633578063b6c523241461065c578063c3c8cd80146106875761021a565b80638b4cee08146105375780638da5cb5b1461056057806395d89b411461058b5780639a7a23d6146105b65761021a565b806328875c161161019b5780635d0044ca1161016a5780635d0044ca1461047a5780635d098b38146104a35780636fc3eaec146104cc57806370a08231146104e3578063715018a6146105205761021a565b806328875c16146103ac578063313ce567146103d55780633bbac579146104005780635342acb41461043d5761021a565b806312dfbd33116101e257806312dfbd33146102c757806318160ddd146102f057806323b872dd1461031b578063273123b71461035857806327f3a72a146103815761021a565b806301339c211461021f57806306fdde0314610236578063095ea7b3146102615780630cc835a31461029e5761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b50610234610839565b005b34801561024257600080fd5b5061024b610d80565b6040516102589190613dc7565b60405180910390f35b34801561026d57600080fd5b5061028860048036038101906102839190613e87565b610dbd565b6040516102959190613ee2565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613efd565b610ddb565b005b3480156102d357600080fd5b506102ee60048036038101906102e99190613efd565b610e88565b005b3480156102fc57600080fd5b50610305610f36565b6040516103129190613f39565b60405180910390f35b34801561032757600080fd5b50610342600480360381019061033d9190613f54565b610f48565b60405161034f9190613ee2565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190613fa7565b611021565b005b34801561038d57600080fd5b50610396611111565b6040516103a39190613f39565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190614065565b611121565b005b3480156103e157600080fd5b506103ea61125b565b6040516103f791906140e1565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190613fa7565b611264565b6040516104349190613ee2565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190613fa7565b6112ba565b6040516104719190613ee2565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613efd565b611310565b005b3480156104af57600080fd5b506104ca60048036038101906104c5919061413a565b6113be565b005b3480156104d857600080fd5b506104e1611569565b005b3480156104ef57600080fd5b5061050a60048036038101906105059190613fa7565b61160f565b6040516105179190613f39565b60405180910390f35b34801561052c57600080fd5b50610535611660565b005b34801561054357600080fd5b5061055e60048036038101906105599190613efd565b6117b3565b005b34801561056c57600080fd5b50610575611860565b6040516105829190614176565b60405180910390f35b34801561059757600080fd5b506105a0611889565b6040516105ad9190613dc7565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190614191565b6118c6565b005b3480156105eb57600080fd5b506105f46119f9565b005b34801561060257600080fd5b5061061d60048036038101906106189190613e87565b611bcd565b60405161062a9190613ee2565b60405180910390f35b34801561063f57600080fd5b5061065a600480360381019061065591906141d1565b611beb565b005b34801561066857600080fd5b50610671611e25565b60405161067e9190613f39565b60405180910390f35b34801561069357600080fd5b5061069c611e2f565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613efd565b611edd565b005b3480156106d357600080fd5b506106ee60048036038101906106e99190614065565b611f8a565b005b3480156106fc57600080fd5b506107056120c4565b6040516107129190613f39565b60405180910390f35b34801561072757600080fd5b50610742600480360381019061073d9190613efd565b6120f6565b005b34801561075057600080fd5b5061076b6004803603810190610766919061421e565b6122bd565b6040516107789190613f39565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a3919061425e565b612344565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613fa7565b6123f6565b6040516107de9190613ee2565b60405180910390f35b3480156107f357600080fd5b5061080e6004803603810190610809919061413a565b61244c565b005b34801561081c57600080fd5b5061083760048036038101906108329190613fa7565b6125f7565b005b6108416127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146108ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c5906142d7565b60405180910390fd5b601660149054906101000a900460ff161561091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091590614343565b60405180910390fd5b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506109af30601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006127c0565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1e9190614378565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa99190614378565b6040518363ffffffff1660e01b8152600401610ac69291906143a5565b6020604051808303816000875af1158015610ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b099190614378565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730610b923061160f565b600080610b9d611860565b426040518863ffffffff1660e01b8152600401610bbf96959493929190614413565b60606040518083038185885af1158015610bdd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c029190614489565b505050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401610ca49291906144dc565b6020604051808303816000875af1158015610cc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce7919061451a565b506001601660146101000a81548160ff021916908315150217905550600160176000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606040518060400160405280601281526020017f446f6a6f205375706572636f6d70757465720000000000000000000000000000815250905090565b6000610dd1610dca6127b8565b84846127c0565b6001905092915050565b610de36127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e67906142d7565b60405180910390fd5b6019811115610e7e57600080fd5b80600f8190555050565b610e906127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f14906142d7565b60405180910390fd5b633b9aca0081610f2d9190614576565b60058190555050565b600069d3c21bcecceda1000000905090565b6000610f55848484612989565b61101684610f616127b8565b6110118560405180606001604052806028815260200161503860289139600860008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610fc76127b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130c89092919063ffffffff16565b6127c0565b600190509392505050565b6110296127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad906142d7565b60405180910390fd5b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600061111c3061160f565b905090565b6111296127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad906142d7565b60405180910390fd5b60005b838390508110156112555781600960008686858181106111dc576111db6145b8565b5b90506020020160208101906111f19190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061124d906145e7565b9150506111b9565b50505050565b60006009905090565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113186127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139c906142d7565b60405180910390fd5b633b9aca00816113b59190614576565b600e8190555050565b6113c66127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906142d7565b60405180910390fd5b600060096000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6115716127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f5906142d7565b60405180910390fd5b600047905061160c8161312c565b50565b6000611659600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132ac565b9050919050565b6116686127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec906142d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6117bb6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183f906142d7565b60405180910390fd5b601981111561185657600080fd5b8060108190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f444f4a4f00000000000000000000000000000000000000000000000000000000815250905090565b6118ce6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461195b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611952906142d7565b60405180910390fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e2906146a1565b60405180910390fd5b6119f5828261331a565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8090614733565b60405180910390fd5b6002544211611acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac49061479f565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611be1611bda6127b8565b8484612989565b6001905092915050565b611bf36127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c77906142d7565b60405180910390fd5b60005b82829050811015611e2057601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838383818110611cda57611cd96145b8565b5b9050602002016020810190611cef9190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1614158015611d885750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16838383818110611d5a57611d596145b8565b5b9050602002016020810190611d6f9190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611e0d576001600b6000858585818110611da657611da56145b8565b5b9050602002016020810190611dbb9190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8080611e18906145e7565b915050611c83565b505050565b6000600254905090565b611e376127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb906142d7565b60405180910390fd5b6000611ecf3061160f565b9050611eda81613375565b50565b611ee56127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f69906142d7565b60405180910390fd5b6019811115611f8057600080fd5b80600c8190555050565b611f926127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612016906142d7565b60405180910390fd5b60005b838390508110156120be5781600a6000868685818110612045576120446145b8565b5b905060200201602081019061205a9190613fa7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806120b6906145e7565b915050612022565b50505050565b60006120f1601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661160f565b905090565b6120fe6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461218b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612182906142d7565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261223991906147bf565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61234c6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d0906142d7565b60405180910390fd5b80601660156101000a81548160ff02191690831515021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6124546127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d8906142d7565b60405180910390fd5b600060096000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6125ff6127b8565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461268c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612683906142d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036126fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f290614865565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361282f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612826906148f7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361289e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289590614989565b60405180910390fd5b80600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161297c9190613f39565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ef90614a1b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5e90614aad565b60405180910390fd5b60008111612aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa190614b3f565b60405180910390fd5b612ab2611860565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612b205750612af0611860565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f5757600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bc95750600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bd257600080fd5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c7a5750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cd857600e5481612c8c8461160f565b612c9691906147bf565b1115612cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cce90614bd1565b60405180910390fd5b5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015612d835750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dd95750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e3757601660149054906101000a900460ff16612e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2490614c3d565b60405180910390fd5b600f54600d819055505b6000612e423061160f565b905060168054906101000a900460ff16158015612ead5750601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612ec55750601660149054906101000a900460ff165b15612f5557601054600d81905550601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f5457600554811115612f5357601660159054906101000a900460ff16612f495760055490505b612f52816135ec565b5b5b5b505b600060019050600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ffe5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561300857600090505b601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130ac5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130b657600090505b6130c284848484613611565b50505050565b6000838311158290613110576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131079190613dc7565b60405180910390fd5b506000838561311f9190614c5d565b9050809150509392505050565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661317b60028461363e90919063ffffffff16565b60405161318790614cc2565b60006040518083038185875af1925050503d80600081146131c4576040519150601f19603f3d011682016040523d82523d6000602084013e6131c9565b606091505b505090506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661321c60028561363e90919063ffffffff16565b60405161322890614cc2565b60006040518083038185875af1925050503d8060008114613265576040519150601f19603f3d011682016040523d82523d6000602084013e61326a565b606091505b505090507fc45e9b3ac19bf635feaed560109cb8931031fbbc86809d50d65d41a2cf2fe8b9828260405161329f929190614cd7565b60405180910390a1505050565b60006003548211156132f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ea90614d72565b60405180910390fd5b60006132fd613688565b9050613312818461363e90919063ffffffff16565b915050919050565b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60016016806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156133ac576133ab614d92565b5b6040519080825280602002602001820160405280156133da5781602001602082028036833780820191505090505b50905030816000815181106133f2576133f16145b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134bd9190614378565b816001815181106134d1576134d06145b8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061353830601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846127c0565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161359c959493929190614e7f565b600060405180830381600087803b1580156135b657600080fd5b505af11580156135ca573d6000803e3d6000fd5b505050505060006016806101000a81548160ff02191690831515021790555050565b6135f581613375565b6000479050600081111561360d5761360c4761312c565b5b5050565b8061361f5761361e6136b3565b5b61362a8484846136f0565b80613638576136376138bb565b5b50505050565b600061368083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138cf565b905092915050565b6000806000613695613932565b915091506136ac818361363e90919063ffffffff16565b9250505090565b6000600c541480156136c757506000600d54145b6136ee57600c54601181905550600d546012819055506000600c819055506000600d819055505b565b60008060008060008061370287613997565b95509550955095509550955061376086600660008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ff90919063ffffffff16565b600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137f585600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a4990919063ffffffff16565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061384181613aa7565b61384b8483613b64565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516138a89190613f39565b60405180910390a3505050505050505050565b601154600c81905550601254600d81905550565b60008083118290613916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390d9190613dc7565b60405180910390fd5b50600083856139259190614f08565b9050809150509392505050565b60008060006003549050600069d3c21bcecceda1000000905061396a69d3c21bcecceda100000060035461363e90919063ffffffff16565b82101561398a5760035469d3c21bcecceda1000000935093505050613993565b81819350935050505b9091565b60008060008060008060008060006139b48a600c54600d54613b9e565b92509250925060006139c4613688565b905060008060006139d78e878787613c34565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000613a4183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130c8565b905092915050565b6000808284613a5891906147bf565b905083811015613a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9490614f85565b60405180910390fd5b8091505092915050565b6000613ab1613688565b90506000613ac88284613cbd90919063ffffffff16565b9050613b1c81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a4990919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b613b79826003546139ff90919063ffffffff16565b600381905550613b9481600454613a4990919063ffffffff16565b6004819055505050565b600080600080613bca6064613bbc888a613cbd90919063ffffffff16565b61363e90919063ffffffff16565b90506000613bf46064613be6888b613cbd90919063ffffffff16565b61363e90919063ffffffff16565b90506000613c1d82613c0f858c6139ff90919063ffffffff16565b6139ff90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080613c4d8589613cbd90919063ffffffff16565b90506000613c648689613cbd90919063ffffffff16565b90506000613c7b8789613cbd90919063ffffffff16565b90506000613ca482613c9685876139ff90919063ffffffff16565b6139ff90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808303613ccf5760009050613d31565b60008284613cdd9190614576565b9050828482613cec9190614f08565b14613d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2390615017565b60405180910390fd5b809150505b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d71578082015181840152602081019050613d56565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d9982613d37565b613da38185613d42565b9350613db3818560208601613d53565b613dbc81613d7d565b840191505092915050565b60006020820190508181036000830152613de18184613d8e565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1e82613df3565b9050919050565b613e2e81613e13565b8114613e3957600080fd5b50565b600081359050613e4b81613e25565b92915050565b6000819050919050565b613e6481613e51565b8114613e6f57600080fd5b50565b600081359050613e8181613e5b565b92915050565b60008060408385031215613e9e57613e9d613de9565b5b6000613eac85828601613e3c565b9250506020613ebd85828601613e72565b9150509250929050565b60008115159050919050565b613edc81613ec7565b82525050565b6000602082019050613ef76000830184613ed3565b92915050565b600060208284031215613f1357613f12613de9565b5b6000613f2184828501613e72565b91505092915050565b613f3381613e51565b82525050565b6000602082019050613f4e6000830184613f2a565b92915050565b600080600060608486031215613f6d57613f6c613de9565b5b6000613f7b86828701613e3c565b9350506020613f8c86828701613e3c565b9250506040613f9d86828701613e72565b9150509250925092565b600060208284031215613fbd57613fbc613de9565b5b6000613fcb84828501613e3c565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613ff957613ff8613fd4565b5b8235905067ffffffffffffffff81111561401657614015613fd9565b5b60208301915083602082028301111561403257614031613fde565b5b9250929050565b61404281613ec7565b811461404d57600080fd5b50565b60008135905061405f81614039565b92915050565b60008060006040848603121561407e5761407d613de9565b5b600084013567ffffffffffffffff81111561409c5761409b613dee565b5b6140a886828701613fe3565b935093505060206140bb86828701614050565b9150509250925092565b600060ff82169050919050565b6140db816140c5565b82525050565b60006020820190506140f660008301846140d2565b92915050565b600061410782613df3565b9050919050565b614117816140fc565b811461412257600080fd5b50565b6000813590506141348161410e565b92915050565b6000602082840312156141505761414f613de9565b5b600061415e84828501614125565b91505092915050565b61417081613e13565b82525050565b600060208201905061418b6000830184614167565b92915050565b600080604083850312156141a8576141a7613de9565b5b60006141b685828601613e3c565b92505060206141c785828601614050565b9150509250929050565b600080602083850312156141e8576141e7613de9565b5b600083013567ffffffffffffffff81111561420657614205613dee565b5b61421285828601613fe3565b92509250509250929050565b6000806040838503121561423557614234613de9565b5b600061424385828601613e3c565b925050602061425485828601613e3c565b9150509250929050565b60006020828403121561427457614273613de9565b5b600061428284828501614050565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142c1602083613d42565b91506142cc8261428b565b602082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b600061432d601783613d42565b9150614338826142f7565b602082019050919050565b6000602082019050818103600083015261435c81614320565b9050919050565b60008151905061437281613e25565b92915050565b60006020828403121561438e5761438d613de9565b5b600061439c84828501614363565b91505092915050565b60006040820190506143ba6000830185614167565b6143c76020830184614167565b9392505050565b6000819050919050565b6000819050919050565b60006143fd6143f86143f3846143ce565b6143d8565b613e51565b9050919050565b61440d816143e2565b82525050565b600060c0820190506144286000830189614167565b6144356020830188613f2a565b6144426040830187614404565b61444f6060830186614404565b61445c6080830185614167565b61446960a0830184613f2a565b979650505050505050565b60008151905061448381613e5b565b92915050565b6000806000606084860312156144a2576144a1613de9565b5b60006144b086828701614474565b93505060206144c186828701614474565b92505060406144d286828701614474565b9150509250925092565b60006040820190506144f16000830185614167565b6144fe6020830184613f2a565b9392505050565b60008151905061451481614039565b92915050565b6000602082840312156145305761452f613de9565b5b600061453e84828501614505565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061458182613e51565b915061458c83613e51565b925082820261459a81613e51565b915082820484148315176145b1576145b0614547565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006145f282613e51565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361462457614623614547565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061468b603983613d42565b91506146968261462f565b604082019050919050565b600060208201905081810360008301526146ba8161467e565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061471d602383613d42565b9150614728826146c1565b604082019050919050565b6000602082019050818103600083015261474c81614710565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b6000614789601f83613d42565b915061479482614753565b602082019050919050565b600060208201905081810360008301526147b88161477c565b9050919050565b60006147ca82613e51565b91506147d583613e51565b92508282019050808211156147ed576147ec614547565b5b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061484f602683613d42565b915061485a826147f3565b604082019050919050565b6000602082019050818103600083015261487e81614842565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148e1602483613d42565b91506148ec82614885565b604082019050919050565b60006020820190508181036000830152614910816148d4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614973602283613d42565b915061497e82614917565b604082019050919050565b600060208201905081810360008301526149a281614966565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614a05602583613d42565b9150614a10826149a9565b604082019050919050565b60006020820190508181036000830152614a34816149f8565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a97602383613d42565b9150614aa282614a3b565b604082019050919050565b60006020820190508181036000830152614ac681614a8a565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614b29602983613d42565b9150614b3482614acd565b604082019050919050565b60006020820190508181036000830152614b5881614b1c565b9050919050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000614bbb602383613d42565b9150614bc682614b5f565b604082019050919050565b60006020820190508181036000830152614bea81614bae565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642e0000000000000000600082015250565b6000614c27601883613d42565b9150614c3282614bf1565b602082019050919050565b60006020820190508181036000830152614c5681614c1a565b9050919050565b6000614c6882613e51565b9150614c7383613e51565b9250828203905081811115614c8b57614c8a614547565b5b92915050565b600081905092915050565b50565b6000614cac600083614c91565b9150614cb782614c9c565b600082019050919050565b6000614ccd82614c9f565b9150819050919050565b6000604082019050614cec6000830185613ed3565b614cf96020830184613ed3565b9392505050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614d5c602a83613d42565b9150614d6782614d00565b604082019050919050565b60006020820190508181036000830152614d8b81614d4f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614df681613e13565b82525050565b6000614e088383614ded565b60208301905092915050565b6000602082019050919050565b6000614e2c82614dc1565b614e368185614dcc565b9350614e4183614ddd565b8060005b83811015614e72578151614e598882614dfc565b9750614e6483614e14565b925050600181019050614e45565b5085935050505092915050565b600060a082019050614e946000830188613f2a565b614ea16020830187614404565b8181036040830152614eb38186614e21565b9050614ec26060830185614167565b614ecf6080830184613f2a565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f1382613e51565b9150614f1e83613e51565b925082614f2e57614f2d614ed9565b5b828204905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614f6f601b83613d42565b9150614f7a82614f39565b602082019050919050565b60006020820190508181036000830152614f9e81614f62565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615001602183613d42565b915061500c82614fa5565b604082019050919050565b6000602082019050818103600083015261503081614ff4565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209f84e229af5921816b1f474b968ed328da6ad7c06e3b04981f89cc2782a46b8864736f6c63430008120033

Deployed Bytecode Sourcemap

11899:15021:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20702:762;;;;;;;;;;;;;:::i;:::-;;14382:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25021:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22590:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22959:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26479:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25710:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23588:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24117:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21918:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26388:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23689:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22120:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23101:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21476:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23956:153;;;;;;;;;;;;;:::i;:::-;;24724:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9803:148;;;;;;;;;;;;;:::i;:::-;;22710:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9160:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26293:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24334:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10825:305;;;;;;;;;;;;;:::i;:::-;;25535:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23304:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10358:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23790:154;;;;;;;;;;;;;:::i;:::-;;22835:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22242:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24225:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10523:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24870:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23210:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22460:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21708:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10106:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20702:762;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20761:11:::1;;;;;;;;;;;20760:12;20752:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;20810:35;20867:42;20810:100;;20939:16;20921:15;;:34;;;;;;;;;;;;;;;;;;20966:58;20983:4;20998:15;;;;;;;;;;;12216:12;20966:8;:58::i;:::-;21069:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21051:56;;;21116:4;21123:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21051:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21035:13;;:112;;;;;;;;;;;;;;;;;;21158:15;;;;;;;;;;;:31;;;21197:21;21228:4;21234:24;21252:4;21234:9;:24::i;:::-;21259:1;21261::::0;21263:7:::1;:5;:7::i;:::-;21271:15;21158:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21305:13;;;;;;;;;;;21298:29;;;21336:15;;;;;;;;;;;21354:14;21298:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21394:4;21380:11;;:18;;;;;;;;;;;;;;;;;;21452:4;21409:25;:40;21435:13;;;;;;;;;;;21409:40;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;20741:723;20702:762::o:0;14382:83::-;14419:13;14452:5;;;;;;;;;;;;;;;;;14445:12;;14382:83;:::o;25021:161::-;25096:4;25113:39;25122:12;:10;:12::i;:::-;25136:7;25145:6;25113:8;:39::i;:::-;25170:4;25163:11;;25021:161;;;;:::o;22590:112::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22667:2:::1;22660:3;:9;;22652:18;;;::::0;::::1;;22691:3;22681:7;:13;;;;22590:112:::0;:::o;22959:134::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23080:5:::1;23069:8;:16;;;;:::i;:::-;23043:23;:42;;;;22959:134:::0;:::o;26479:95::-;26532:7;12216:12;26552:14;;26479:95;:::o;25710:313::-;25808:4;25825:36;25835:6;25843:9;25854:6;25825:9;:36::i;:::-;25872:121;25881:6;25889:12;:10;:12::i;:::-;25903:89;25941:6;25903:89;;;;;;;;;;;;;;;;;:11;:19;25915:6;25903:19;;;;;;;;;;;;;;;:33;25923:12;:10;:12::i;:::-;25903:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25872:8;:121::i;:::-;26011:4;26004:11;;25710:313;;;;;:::o;23588:89::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23664:5:::1;23648;:13;23654:6;23648:13;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;23588:89:::0;:::o;24117:100::-;24161:4;24185:24;24203:4;24185:9;:24::i;:::-;24178:31;;24117:100;:::o;21918:194::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22011:6:::1;22006:99;22027:3;;:10;;22023:1;:14;22006:99;;;22088:5;22059:18;:26;22078:3;;22082:1;22078:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22059:26;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;22039:3;;;;;:::i;:::-;;;;22006:99;;;;21918:194:::0;;;:::o;26388:83::-;26429:5;12124:1;26447:16;;26388:83;:::o;23689:89::-;23737:4;23761:5;:9;23767:2;23761:9;;;;;;;;;;;;;;;;;;;;;;;;;23754:16;;23689:89;;;:::o;22120:114::-;22180:4;22204:18;:22;22223:2;22204:22;;;;;;;;;;;;;;;;;;;;;;;;;22197:29;;22120:114;;;:::o;23101:101::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23189:5:::1;23183:3;:11;;;;:::i;:::-;23166:14;:28;;;;23101:101:::0;:::o;21476:224::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21601:5:::1;21562:18;:36;21581:16;;;;;;;;;;;21562:36;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;21636:9;21617:16;;:28;;;;;;;;;;;;;;;;;;21688:4;21656:18;:29;21675:9;21656:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21476:224:::0;:::o;23956:153::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24008:26:::1;24037:21;24008:50;;24069:32;24082:18;24069:12;:32::i;:::-;23997:112;23956:153::o:0;24724:138::-;24790:7;24817:37;24837:7;:16;24845:7;24837:16;;;;;;;;;;;;;;;;24817:19;:37::i;:::-;24810:44;;24724:138;;;:::o;9803:148::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;9910:1:::1;9873:40;;9894:6;::::0;::::1;;;;;;;;9873:40;;;;;;;;;;;;9941:1;9924:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;9803:148::o:0;22710:117::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22790:2:::1;22782:4;:10;;22774:19;;;::::0;::::1;;22815:4;22804:8;:15;;;;22710:117:::0;:::o;9160:79::-;9198:7;9225:6;;;;;;;;;;;9218:13;;9160:79;:::o;26293:87::-;26332:13;26365:7;;;;;;;;;;;;;;;;;26358:14;;26293:87;:::o;24334:244::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24443:13:::1;;;;;;;;;;;24435:21;;:4;:21;;::::0;24427:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24529:41;24558:4;24564:5;24529:28;:41::i;:::-;24334:244:::0;;:::o;10825:305::-;10895:10;10877:28;;:14;;;;;;;;;;;:28;;;10869:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;10982:9;;10964:15;:27;10956:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11073:14;;;;;;;;;;;11044:44;;11065:6;;;;;;;;;;11044:44;;;;;;;;;;;;11108:14;;;;;;;;;;;11099:6;;:23;;;;;;;;;;;;;;;;;;10825:305::o;25535:167::-;25613:4;25630:42;25640:12;:10;:12::i;:::-;25654:9;25665:6;25630:9;:42::i;:::-;25690:4;25683:11;;25535:167;;;;:::o;23304:272::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23380:6:::1;23375:194;23396:5;;:12;;23392:1;:16;23375:194;;;23446:13;;;;;;;;;;;23434:25;;:5;;23440:1;23434:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:25;;;;:65;;;;;23483:15;;;;;;;;;;;23463:36;;:5;;23469:1;23463:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:36;;;;23434:65;23430:128;;;23538:4;23520:5;:15;23526:5;;23532:1;23526:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23520:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;23430:128;23410:3;;;;;:::i;:::-;;;;23375:194;;;;23304:272:::0;;:::o;10358:89::-;10403:7;10430:9;;10423:16;;10358:89;:::o;23790:154::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23842:23:::1;23868:24;23886:4;23868:9;:24::i;:::-;23842:50;;23903:33;23920:15;23903:16;:33::i;:::-;23831:113;23790:154::o:0;22835:112::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22912:2:::1;22905:3;:9;;22897:18;;;::::0;::::1;;22936:3;22926:7;:13;;;;22835:112:::0;:::o;22242:206::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22341:6:::1;22336:105;22357:3;;:10;;22353:1;:14;22336:105;;;22424:5;22389:24;:32;22414:3;;22418:1;22414:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;22389:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;22369:3;;;;;:::i;:::-;;;;22336:105;;;;22242:206:::0;;;:::o;24225:101::-;24270:4;24294:24;24304:13;;;;;;;;;;;24294:9;:24::i;:::-;24287:31;;24225:101;:::o;10523:226::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10604:6:::1;::::0;::::1;;;;;;;;10587:14;;:23;;;;;;;;;;;;;;;;;;10638:1;10621:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;10681:4;10663:15;:22;;;;:::i;:::-;10651:9;:34;;;;10738:1;10701:40;;10722:6;::::0;::::1;;;;;;;;10701:40;;;;;;;;;;;;10523:226:::0;:::o;24870:143::-;24951:7;24978:11;:18;24990:5;24978:18;;;;;;;;;;;;;;;:27;24997:7;24978:27;;;;;;;;;;;;;;;;24971:34;;24870:143;;;;:::o;23210:86::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23283:5:::1;23272:8;;:16;;;;;;;;;;;;;;;;;;23210:86:::0;:::o;22460:122::-;22522:4;22546:24;:28;22571:2;22546:28;;;;;;;;;;;;;;;;;;;;;;;;;22539:35;;22460:122;;;:::o;21708:202::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21820:5:::1;21788:18;:29;21807:9;;;;;;;;;;;21788:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21848:8;21836:9;;:20;;;;;;;;;;;;;;;;;;21898:4;21867:18;:28;21886:8;21867:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;21708:202:::0;:::o;10106:244::-;9382:12;:10;:12::i;:::-;9372:22;;:6;;;;;;;;;;:22;;;9364:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10215:1:::1;10195:22;;:8;:22;;::::0;10187:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;10305:8;10276:38;;10297:6;::::0;::::1;;;;;;;;10276:38;;;;;;;;;;;;10334:8;10325:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;10106:244:::0;:::o;7987:98::-;8040:7;8067:10;8060:17;;7987:98;:::o;26582:335::-;26692:1;26675:19;;:5;:19;;;26667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26773:1;26754:21;;:7;:21;;;26746:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26855:6;26825:11;:18;26837:5;26825:18;;;;;;;;;;;;;;;:27;26844:7;26825:27;;;;;;;;;;;;;;;:36;;;;26893:7;26877:32;;26886:5;26877:32;;;26902:6;26877:32;;;;;;:::i;:::-;;;;;;;;26582:335;;;:::o;14477:1765::-;14581:1;14565:18;;:4;:18;;;14557:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14658:1;14644:16;;:2;:16;;;14636:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14728:1;14719:6;:10;14711:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14799:7;:5;:7::i;:::-;14791:15;;:4;:15;;;;:32;;;;;14816:7;:5;:7::i;:::-;14810:13;;:2;:13;;;;14791:32;14788:1124;;;14863:5;:11;14869:4;14863:11;;;;;;;;;;;;;;;;;;;;;;;;;14862:12;:26;;;;;14879:5;:9;14885:2;14879:9;;;;;;;;;;;;;;;;;;;;;;;;;14878:10;14862:26;14854:35;;;;;;14915:13;;;;;;;;;;;14909:19;;:2;:19;;;;:52;;;;;14933:24;:28;14958:2;14933:28;;;;;;;;;;;;;;;;;;;;;;;;;14932:29;14909:52;14906:189;;;15025:14;;15015:6;14990:22;15008:2;14990:9;:22::i;:::-;:31;;;;:::i;:::-;:49;;14982:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;14906:189;15134:13;;;;;;;;;;;15126:21;;:4;:21;;;:55;;;;;15165:15;;;;;;;;;;;15151:30;;:2;:30;;;;15126:55;:82;;;;;15186:18;:22;15205:2;15186:22;;;;;;;;;;;;;;;;;;;;;;;;;15185:23;15126:82;15123:207;;;15237:11;;;;;;;;;;;15229:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;15307:7;;15296:8;:18;;;;15123:207;15344:28;15375:24;15393:4;15375:9;:24::i;:::-;15344:55;;15420:6;;;;;;;;;;15419:7;:32;;;;;15438:13;;;;;;;;;;;15430:21;;:4;:21;;;;15419:32;:47;;;;;15455:11;;;;;;;;;;;15419:47;15416:485;;;15498:8;;15487;:19;;;;15531:25;:29;15557:2;15531:29;;;;;;;;;;;;;;;;;;;;;;;;;15527:357;;;15611:23;;15588:20;:46;15585:280;;;15667:8;;;;;;;;;;;15663:119;;15731:23;;15708:46;;15663:119;15808:33;15820:20;15808:11;:33::i;:::-;15585:280;15527:357;15416:485;14825:1087;14788:1124;15922:12;15937:4;15922:19;;15957:18;:24;15976:4;15957:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;15985:18;:22;16004:2;15985:22;;;;;;;;;;;;;;;;;;;;;;;;;15957:50;15954:97;;;16034:5;16024:15;;15954:97;16067:25;:31;16093:4;16067:31;;;;;;;;;;;;;;;;;;;;;;;;;16066:32;:66;;;;;16103:25;:29;16129:2;16103:29;;;;;;;;;;;;;;;;;;;;;;;;;16102:30;16066:66;16063:113;;;16159:5;16149:15;;16063:113;16196:38;16211:4;16216:2;16219:6;16226:7;16196:14;:38::i;:::-;14546:1696;14477:1765;;;:::o;4397:192::-;4483:7;4516:1;4511;:6;;4519:12;4503:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4543:9;4559:1;4555;:5;;;;:::i;:::-;4543:17;;4580:1;4573:8;;;4397:192;;;;;:::o;17566:251::-;17624:13;17643:9;;;;;;;;;;;:14;;17665:13;17676:1;17665:6;:10;;:13;;;;:::i;:::-;17643:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17623:60;;;17695:14;17715:16;;;;;;;;;;;:21;;17744:13;17755:1;17744:6;:10;;:13;;;;:::i;:::-;17715:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17694:68;;;17780:29;17789:8;17799:9;17780:29;;;;;;;:::i;:::-;;;;;;;;17612:205;;17566:251;:::o;26031:254::-;26098:7;26137;;26126;:18;;26118:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26202:19;26225:10;:8;:10::i;:::-;26202:33;;26253:24;26265:11;26253:7;:11;;:24;;;;:::i;:::-;26246:31;;;26031:254;;;:::o;24586:130::-;24703:5;24669:25;:31;24695:4;24669:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24586:130;;:::o;17067:483::-;13600:4;13591:6;;:13;;;;;;;;;;;;;;;;;;17145:21:::1;17183:1;17169:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17145:40;;17214:4;17196;17201:1;17196:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;17240:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17230:4;17235:1;17230:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;17273:62;17290:4;17305:15;;;;;;;;;;;17323:11;17273:8;:62::i;:::-;17346:15;;;;;;;;;;;:66;;;17427:11;17453:1;17469:4;17496;17516:15;17346:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17134:416;13636:5:::0;13627:6;;:14;;;;;;;;;;;;;;;;;;17067:483;:::o;16771:288::-;16851:38;16868:20;16851:16;:38::i;:::-;16902:26;16931:21;16902:50;;16987:1;16966:18;:22;16963:89;;;17005:35;17018:21;17005:12;:35::i;:::-;16963:89;16830:229;16771:288;:::o;17829:263::-;17941:7;17937:40;;17963:14;:12;:14::i;:::-;17937:40;17988:44;18006:6;18014:9;18025:6;17988:17;:44::i;:::-;18047:7;18043:41;;18069:15;:13;:15::i;:::-;18043:41;17829:263;;;;:::o;5795:132::-;5853:7;5880:39;5884:1;5887;5880:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5873:46;;5795:132;;;;:::o;19433:163::-;19474:7;19495:15;19512;19531:19;:17;:19::i;:::-;19494:56;;;;19568:20;19580:7;19568;:11;;:20;;;;:::i;:::-;19561:27;;;;19433:163;:::o;25190:210::-;25247:1;25236:7;;:12;:29;;;;;25264:1;25252:8;;:13;25236:29;25267:7;25233:41;25302:7;;25284:15;:25;;;;25339:8;;25320:16;:27;;;;25368:1;25358:7;:11;;;;25391:1;25380:8;:12;;;;25190:210;:::o;18100:490::-;18199:15;18216:23;18241:12;18255:23;18280:12;18294:13;18311:19;18322:7;18311:10;:19::i;:::-;18198:132;;;;;;;;;;;;18359:28;18379:7;18359;:15;18367:6;18359:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;18341:7;:15;18349:6;18341:15;;;;;;;;;;;;;;;:46;;;;18419:39;18442:15;18419:7;:18;18427:9;18419:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;18398:7;:18;18406:9;18398:18;;;;;;;;;;;;;;;:60;;;;18472:16;18482:5;18472:9;:16::i;:::-;18499:23;18511:4;18517;18499:11;:23::i;:::-;18555:9;18538:44;;18547:6;18538:44;;;18566:15;18538:44;;;;;;:::i;:::-;;;;;;;;18187:403;;;;;;18100:490;;;:::o;25412:115::-;25466:15;;25456:7;:25;;;;25503:16;;25492:8;:27;;;;25412:115::o;6423:278::-;6509:7;6541:1;6537;:5;6544:12;6529:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6568:9;6584:1;6580;:5;;;;:::i;:::-;6568:17;;6692:1;6685:8;;;6423:278;;;;;:::o;19604:255::-;19654:7;19663;19683:15;19701:7;;19683:25;;19719:15;12216:12;19719:25;;19768:20;12216:12;19768:7;;:11;;:20;;;;:::i;:::-;19758:7;:30;19755:60;;;19798:7;;12216:12;19790:25;;;;;;;;19755:60;19834:7;19843;19826:25;;;;;;19604:255;;;:::o;18598:468::-;18657:7;18666;18675;18684;18693;18702;18723:23;18748:12;18762:13;18779:39;18791:7;18800;;18809:8;;18779:11;:39::i;:::-;18722:96;;;;;;18829:19;18852:10;:8;:10::i;:::-;18829:33;;18874:15;18891:23;18916:12;18932:46;18944:7;18953:4;18959:5;18966:11;18932;:46::i;:::-;18873:105;;;;;;18997:7;19006:15;19023:4;19029:15;19046:4;19052:5;18989:69;;;;;;;;;;;;;;;;;;;18598:468;;;;;;;:::o;3958:136::-;4016:7;4043:43;4047:1;4050;4043:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4036:50;;3958:136;;;;:::o;3494:181::-;3552:7;3572:9;3588:1;3584;:5;;;;:::i;:::-;3572:17;;3613:1;3608;:6;;3600:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3666:1;3659:8;;;3494:181;;;;:::o;20284:214::-;20337:19;20360:10;:8;:10::i;:::-;20337:33;;20381:13;20397:22;20407:11;20397:5;:9;;:22;;;;:::i;:::-;20381:38;;20457:33;20484:5;20457:7;:22;20473:4;20457:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;20432:7;:22;20448:4;20432:22;;;;;;;;;;;;;;;:58;;;;20326:172;;20284:214;:::o;20506:147::-;20584:17;20596:4;20584:7;;:11;;:17;;;;:::i;:::-;20574:7;:27;;;;20625:20;20640:4;20625:10;;:14;;:20;;;;:::i;:::-;20612:10;:33;;;;20506:147;;:::o;19074:351::-;19167:7;19176;19185;19205:12;19220:28;19244:3;19220:19;19232:6;19220:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;19205:43;;19259:13;19275:29;19300:3;19275:20;19287:7;19275;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;19259:45;;19315:23;19341:28;19363:5;19341:17;19353:4;19341:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;19315:54;;19388:15;19405:4;19411:5;19380:37;;;;;;;;;19074:351;;;;;;;:::o;19867:409::-;19977:7;19986;19995;20015:15;20033:24;20045:11;20033:7;:11;;:24;;;;:::i;:::-;20015:42;;20068:12;20083:21;20092:11;20083:4;:8;;:21;;;;:::i;:::-;20068:36;;20115:13;20131:22;20141:11;20131:5;:9;;:22;;;;:::i;:::-;20115:38;;20164:23;20190:28;20212:5;20190:17;20202:4;20190:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;20164:54;;20237:7;20246:15;20263:4;20229:39;;;;;;;;;;19867:409;;;;;;;;:::o;4848:471::-;4906:7;5156:1;5151;:6;5147:47;;5181:1;5174:8;;;;5147:47;5206:9;5222:1;5218;:5;;;;:::i;:::-;5206:17;;5251:1;5246;5242;:5;;;;:::i;:::-;:10;5234:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5310:1;5303:8;;;4848:471;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:329::-;4817:6;4866:2;4854:9;4845:7;4841:23;4837:32;4834:119;;;4872:79;;:::i;:::-;4834:119;4992:1;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4963:117;4758:329;;;;:::o;5093:117::-;5202:1;5199;5192:12;5216:117;5325:1;5322;5315:12;5339:117;5448:1;5445;5438:12;5479:568;5552:8;5562:6;5612:3;5605:4;5597:6;5593:17;5589:27;5579:122;;5620:79;;:::i;:::-;5579:122;5733:6;5720:20;5710:30;;5763:18;5755:6;5752:30;5749:117;;;5785:79;;:::i;:::-;5749:117;5899:4;5891:6;5887:17;5875:29;;5953:3;5945:4;5937:6;5933:17;5923:8;5919:32;5916:41;5913:128;;;5960:79;;:::i;:::-;5913:128;5479:568;;;;;:::o;6053:116::-;6123:21;6138:5;6123:21;:::i;:::-;6116:5;6113:32;6103:60;;6159:1;6156;6149:12;6103:60;6053:116;:::o;6175:133::-;6218:5;6256:6;6243:20;6234:29;;6272:30;6296:5;6272:30;:::i;:::-;6175:133;;;;:::o;6314:698::-;6406:6;6414;6422;6471:2;6459:9;6450:7;6446:23;6442:32;6439:119;;;6477:79;;:::i;:::-;6439:119;6625:1;6614:9;6610:17;6597:31;6655:18;6647:6;6644:30;6641:117;;;6677:79;;:::i;:::-;6641:117;6790:80;6862:7;6853:6;6842:9;6838:22;6790:80;:::i;:::-;6772:98;;;;6568:312;6919:2;6945:50;6987:7;6978:6;6967:9;6963:22;6945:50;:::i;:::-;6935:60;;6890:115;6314:698;;;;;:::o;7018:86::-;7053:7;7093:4;7086:5;7082:16;7071:27;;7018:86;;;:::o;7110:112::-;7193:22;7209:5;7193:22;:::i;:::-;7188:3;7181:35;7110:112;;:::o;7228:214::-;7317:4;7355:2;7344:9;7340:18;7332:26;;7368:67;7432:1;7421:9;7417:17;7408:6;7368:67;:::i;:::-;7228:214;;;;:::o;7448:104::-;7493:7;7522:24;7540:5;7522:24;:::i;:::-;7511:35;;7448:104;;;:::o;7558:138::-;7639:32;7665:5;7639:32;:::i;:::-;7632:5;7629:43;7619:71;;7686:1;7683;7676:12;7619:71;7558:138;:::o;7702:155::-;7756:5;7794:6;7781:20;7772:29;;7810:41;7845:5;7810:41;:::i;:::-;7702:155;;;;:::o;7863:345::-;7930:6;7979:2;7967:9;7958:7;7954:23;7950:32;7947:119;;;7985:79;;:::i;:::-;7947:119;8105:1;8130:61;8183:7;8174:6;8163:9;8159:22;8130:61;:::i;:::-;8120:71;;8076:125;7863:345;;;;:::o;8214:118::-;8301:24;8319:5;8301:24;:::i;:::-;8296:3;8289:37;8214:118;;:::o;8338:222::-;8431:4;8469:2;8458:9;8454:18;8446:26;;8482:71;8550:1;8539:9;8535:17;8526:6;8482:71;:::i;:::-;8338:222;;;;:::o;8566:468::-;8631:6;8639;8688:2;8676:9;8667:7;8663:23;8659:32;8656:119;;;8694:79;;:::i;:::-;8656:119;8814:1;8839:53;8884:7;8875:6;8864:9;8860:22;8839:53;:::i;:::-;8829:63;;8785:117;8941:2;8967:50;9009:7;9000:6;8989:9;8985:22;8967:50;:::i;:::-;8957:60;;8912:115;8566:468;;;;;:::o;9040:559::-;9126:6;9134;9183:2;9171:9;9162:7;9158:23;9154:32;9151:119;;;9189:79;;:::i;:::-;9151:119;9337:1;9326:9;9322:17;9309:31;9367:18;9359:6;9356:30;9353:117;;;9389:79;;:::i;:::-;9353:117;9502:80;9574:7;9565:6;9554:9;9550:22;9502:80;:::i;:::-;9484:98;;;;9280:312;9040:559;;;;;:::o;9605:474::-;9673:6;9681;9730:2;9718:9;9709:7;9705:23;9701:32;9698:119;;;9736:79;;:::i;:::-;9698:119;9856:1;9881:53;9926:7;9917:6;9906:9;9902:22;9881:53;:::i;:::-;9871:63;;9827:117;9983:2;10009:53;10054:7;10045:6;10034:9;10030:22;10009:53;:::i;:::-;9999:63;;9954:118;9605:474;;;;;:::o;10085:323::-;10141:6;10190:2;10178:9;10169:7;10165:23;10161:32;10158:119;;;10196:79;;:::i;:::-;10158:119;10316:1;10341:50;10383:7;10374:6;10363:9;10359:22;10341:50;:::i;:::-;10331:60;;10287:114;10085:323;;;;:::o;10414:182::-;10554:34;10550:1;10542:6;10538:14;10531:58;10414:182;:::o;10602:366::-;10744:3;10765:67;10829:2;10824:3;10765:67;:::i;:::-;10758:74;;10841:93;10930:3;10841:93;:::i;:::-;10959:2;10954:3;10950:12;10943:19;;10602:366;;;:::o;10974:419::-;11140:4;11178:2;11167:9;11163:18;11155:26;;11227:9;11221:4;11217:20;11213:1;11202:9;11198:17;11191:47;11255:131;11381:4;11255:131;:::i;:::-;11247:139;;10974:419;;;:::o;11399:173::-;11539:25;11535:1;11527:6;11523:14;11516:49;11399:173;:::o;11578:366::-;11720:3;11741:67;11805:2;11800:3;11741:67;:::i;:::-;11734:74;;11817:93;11906:3;11817:93;:::i;:::-;11935:2;11930:3;11926:12;11919:19;;11578:366;;;:::o;11950:419::-;12116:4;12154:2;12143:9;12139:18;12131:26;;12203:9;12197:4;12193:20;12189:1;12178:9;12174:17;12167:47;12231:131;12357:4;12231:131;:::i;:::-;12223:139;;11950:419;;;:::o;12375:143::-;12432:5;12463:6;12457:13;12448:22;;12479:33;12506:5;12479:33;:::i;:::-;12375:143;;;;:::o;12524:351::-;12594:6;12643:2;12631:9;12622:7;12618:23;12614:32;12611:119;;;12649:79;;:::i;:::-;12611:119;12769:1;12794:64;12850:7;12841:6;12830:9;12826:22;12794:64;:::i;:::-;12784:74;;12740:128;12524:351;;;;:::o;12881:332::-;13002:4;13040:2;13029:9;13025:18;13017:26;;13053:71;13121:1;13110:9;13106:17;13097:6;13053:71;:::i;:::-;13134:72;13202:2;13191:9;13187:18;13178:6;13134:72;:::i;:::-;12881:332;;;;;:::o;13219:85::-;13264:7;13293:5;13282:16;;13219:85;;;:::o;13310:60::-;13338:3;13359:5;13352:12;;13310:60;;;:::o;13376:158::-;13434:9;13467:61;13485:42;13494:32;13520:5;13494:32;:::i;:::-;13485:42;:::i;:::-;13467:61;:::i;:::-;13454:74;;13376:158;;;:::o;13540:147::-;13635:45;13674:5;13635:45;:::i;:::-;13630:3;13623:58;13540:147;;:::o;13693:807::-;13942:4;13980:3;13969:9;13965:19;13957:27;;13994:71;14062:1;14051:9;14047:17;14038:6;13994:71;:::i;:::-;14075:72;14143:2;14132:9;14128:18;14119:6;14075:72;:::i;:::-;14157:80;14233:2;14222:9;14218:18;14209:6;14157:80;:::i;:::-;14247;14323:2;14312:9;14308:18;14299:6;14247:80;:::i;:::-;14337:73;14405:3;14394:9;14390:19;14381:6;14337:73;:::i;:::-;14420;14488:3;14477:9;14473:19;14464:6;14420:73;:::i;:::-;13693:807;;;;;;;;;:::o;14506:143::-;14563:5;14594:6;14588:13;14579:22;;14610:33;14637:5;14610:33;:::i;:::-;14506:143;;;;:::o;14655:663::-;14743:6;14751;14759;14808:2;14796:9;14787:7;14783:23;14779:32;14776:119;;;14814:79;;:::i;:::-;14776:119;14934:1;14959:64;15015:7;15006:6;14995:9;14991:22;14959:64;:::i;:::-;14949:74;;14905:128;15072:2;15098:64;15154:7;15145:6;15134:9;15130:22;15098:64;:::i;:::-;15088:74;;15043:129;15211:2;15237:64;15293:7;15284:6;15273:9;15269:22;15237:64;:::i;:::-;15227:74;;15182:129;14655:663;;;;;:::o;15324:332::-;15445:4;15483:2;15472:9;15468:18;15460:26;;15496:71;15564:1;15553:9;15549:17;15540:6;15496:71;:::i;:::-;15577:72;15645:2;15634:9;15630:18;15621:6;15577:72;:::i;:::-;15324:332;;;;;:::o;15662:137::-;15716:5;15747:6;15741:13;15732:22;;15763:30;15787:5;15763:30;:::i;:::-;15662:137;;;;:::o;15805:345::-;15872:6;15921:2;15909:9;15900:7;15896:23;15892:32;15889:119;;;15927:79;;:::i;:::-;15889:119;16047:1;16072:61;16125:7;16116:6;16105:9;16101:22;16072:61;:::i;:::-;16062:71;;16018:125;15805:345;;;;:::o;16156:180::-;16204:77;16201:1;16194:88;16301:4;16298:1;16291:15;16325:4;16322:1;16315:15;16342:410;16382:7;16405:20;16423:1;16405:20;:::i;:::-;16400:25;;16439:20;16457:1;16439:20;:::i;:::-;16434:25;;16494:1;16491;16487:9;16516:30;16534:11;16516:30;:::i;:::-;16505:41;;16695:1;16686:7;16682:15;16679:1;16676:22;16656:1;16649:9;16629:83;16606:139;;16725:18;;:::i;:::-;16606:139;16390:362;16342:410;;;;:::o;16758:180::-;16806:77;16803:1;16796:88;16903:4;16900:1;16893:15;16927:4;16924:1;16917:15;16944:233;16983:3;17006:24;17024:5;17006:24;:::i;:::-;16997:33;;17052:66;17045:5;17042:77;17039:103;;17122:18;;:::i;:::-;17039:103;17169:1;17162:5;17158:13;17151:20;;16944:233;;;:::o;17183:244::-;17323:34;17319:1;17311:6;17307:14;17300:58;17392:27;17387:2;17379:6;17375:15;17368:52;17183:244;:::o;17433:366::-;17575:3;17596:67;17660:2;17655:3;17596:67;:::i;:::-;17589:74;;17672:93;17761:3;17672:93;:::i;:::-;17790:2;17785:3;17781:12;17774:19;;17433:366;;;:::o;17805:419::-;17971:4;18009:2;17998:9;17994:18;17986:26;;18058:9;18052:4;18048:20;18044:1;18033:9;18029:17;18022:47;18086:131;18212:4;18086:131;:::i;:::-;18078:139;;17805:419;;;:::o;18230:222::-;18370:34;18366:1;18358:6;18354:14;18347:58;18439:5;18434:2;18426:6;18422:15;18415:30;18230:222;:::o;18458:366::-;18600:3;18621:67;18685:2;18680:3;18621:67;:::i;:::-;18614:74;;18697:93;18786:3;18697:93;:::i;:::-;18815:2;18810:3;18806:12;18799:19;;18458:366;;;:::o;18830:419::-;18996:4;19034:2;19023:9;19019:18;19011:26;;19083:9;19077:4;19073:20;19069:1;19058:9;19054:17;19047:47;19111:131;19237:4;19111:131;:::i;:::-;19103:139;;18830:419;;;:::o;19255:181::-;19395:33;19391:1;19383:6;19379:14;19372:57;19255:181;:::o;19442:366::-;19584:3;19605:67;19669:2;19664:3;19605:67;:::i;:::-;19598:74;;19681:93;19770:3;19681:93;:::i;:::-;19799:2;19794:3;19790:12;19783:19;;19442:366;;;:::o;19814:419::-;19980:4;20018:2;20007:9;20003:18;19995:26;;20067:9;20061:4;20057:20;20053:1;20042:9;20038:17;20031:47;20095:131;20221:4;20095:131;:::i;:::-;20087:139;;19814:419;;;:::o;20239:191::-;20279:3;20298:20;20316:1;20298:20;:::i;:::-;20293:25;;20332:20;20350:1;20332:20;:::i;:::-;20327:25;;20375:1;20372;20368:9;20361:16;;20396:3;20393:1;20390:10;20387:36;;;20403:18;;:::i;:::-;20387:36;20239:191;;;;:::o;20436:225::-;20576:34;20572:1;20564:6;20560:14;20553:58;20645:8;20640:2;20632:6;20628:15;20621:33;20436:225;:::o;20667:366::-;20809:3;20830:67;20894:2;20889:3;20830:67;:::i;:::-;20823:74;;20906:93;20995:3;20906:93;:::i;:::-;21024:2;21019:3;21015:12;21008:19;;20667:366;;;:::o;21039:419::-;21205:4;21243:2;21232:9;21228:18;21220:26;;21292:9;21286:4;21282:20;21278:1;21267:9;21263:17;21256:47;21320:131;21446:4;21320:131;:::i;:::-;21312:139;;21039:419;;;:::o;21464:223::-;21604:34;21600:1;21592:6;21588:14;21581:58;21673:6;21668:2;21660:6;21656:15;21649:31;21464:223;:::o;21693:366::-;21835:3;21856:67;21920:2;21915:3;21856:67;:::i;:::-;21849:74;;21932:93;22021:3;21932:93;:::i;:::-;22050:2;22045:3;22041:12;22034:19;;21693:366;;;:::o;22065:419::-;22231:4;22269:2;22258:9;22254:18;22246:26;;22318:9;22312:4;22308:20;22304:1;22293:9;22289:17;22282:47;22346:131;22472:4;22346:131;:::i;:::-;22338:139;;22065:419;;;:::o;22490:221::-;22630:34;22626:1;22618:6;22614:14;22607:58;22699:4;22694:2;22686:6;22682:15;22675:29;22490:221;:::o;22717:366::-;22859:3;22880:67;22944:2;22939:3;22880:67;:::i;:::-;22873:74;;22956:93;23045:3;22956:93;:::i;:::-;23074:2;23069:3;23065:12;23058:19;;22717:366;;;:::o;23089:419::-;23255:4;23293:2;23282:9;23278:18;23270:26;;23342:9;23336:4;23332:20;23328:1;23317:9;23313:17;23306:47;23370:131;23496:4;23370:131;:::i;:::-;23362:139;;23089:419;;;:::o;23514:224::-;23654:34;23650:1;23642:6;23638:14;23631:58;23723:7;23718:2;23710:6;23706:15;23699:32;23514:224;:::o;23744:366::-;23886:3;23907:67;23971:2;23966:3;23907:67;:::i;:::-;23900:74;;23983:93;24072:3;23983:93;:::i;:::-;24101:2;24096:3;24092:12;24085:19;;23744:366;;;:::o;24116:419::-;24282:4;24320:2;24309:9;24305:18;24297:26;;24369:9;24363:4;24359:20;24355:1;24344:9;24340:17;24333:47;24397:131;24523:4;24397:131;:::i;:::-;24389:139;;24116:419;;;:::o;24541:222::-;24681:34;24677:1;24669:6;24665:14;24658:58;24750:5;24745:2;24737:6;24733:15;24726:30;24541:222;:::o;24769:366::-;24911:3;24932:67;24996:2;24991:3;24932:67;:::i;:::-;24925:74;;25008:93;25097:3;25008:93;:::i;:::-;25126:2;25121:3;25117:12;25110:19;;24769:366;;;:::o;25141:419::-;25307:4;25345:2;25334:9;25330:18;25322:26;;25394:9;25388:4;25384:20;25380:1;25369:9;25365:17;25358:47;25422:131;25548:4;25422:131;:::i;:::-;25414:139;;25141:419;;;:::o;25566:228::-;25706:34;25702:1;25694:6;25690:14;25683:58;25775:11;25770:2;25762:6;25758:15;25751:36;25566:228;:::o;25800:366::-;25942:3;25963:67;26027:2;26022:3;25963:67;:::i;:::-;25956:74;;26039:93;26128:3;26039:93;:::i;:::-;26157:2;26152:3;26148:12;26141:19;;25800:366;;;:::o;26172:419::-;26338:4;26376:2;26365:9;26361:18;26353:26;;26425:9;26419:4;26415:20;26411:1;26400:9;26396:17;26389:47;26453:131;26579:4;26453:131;:::i;:::-;26445:139;;26172:419;;;:::o;26597:222::-;26737:34;26733:1;26725:6;26721:14;26714:58;26806:5;26801:2;26793:6;26789:15;26782:30;26597:222;:::o;26825:366::-;26967:3;26988:67;27052:2;27047:3;26988:67;:::i;:::-;26981:74;;27064:93;27153:3;27064:93;:::i;:::-;27182:2;27177:3;27173:12;27166:19;;26825:366;;;:::o;27197:419::-;27363:4;27401:2;27390:9;27386:18;27378:26;;27450:9;27444:4;27440:20;27436:1;27425:9;27421:17;27414:47;27478:131;27604:4;27478:131;:::i;:::-;27470:139;;27197:419;;;:::o;27622:174::-;27762:26;27758:1;27750:6;27746:14;27739:50;27622:174;:::o;27802:366::-;27944:3;27965:67;28029:2;28024:3;27965:67;:::i;:::-;27958:74;;28041:93;28130:3;28041:93;:::i;:::-;28159:2;28154:3;28150:12;28143:19;;27802:366;;;:::o;28174:419::-;28340:4;28378:2;28367:9;28363:18;28355:26;;28427:9;28421:4;28417:20;28413:1;28402:9;28398:17;28391:47;28455:131;28581:4;28455:131;:::i;:::-;28447:139;;28174:419;;;:::o;28599:194::-;28639:4;28659:20;28677:1;28659:20;:::i;:::-;28654:25;;28693:20;28711:1;28693:20;:::i;:::-;28688:25;;28737:1;28734;28730:9;28722:17;;28761:1;28755:4;28752:11;28749:37;;;28766:18;;:::i;:::-;28749:37;28599:194;;;;:::o;28799:147::-;28900:11;28937:3;28922:18;;28799:147;;;;:::o;28952:114::-;;:::o;29072:398::-;29231:3;29252:83;29333:1;29328:3;29252:83;:::i;:::-;29245:90;;29344:93;29433:3;29344:93;:::i;:::-;29462:1;29457:3;29453:11;29446:18;;29072:398;;;:::o;29476:379::-;29660:3;29682:147;29825:3;29682:147;:::i;:::-;29675:154;;29846:3;29839:10;;29476:379;;;:::o;29861:308::-;29970:4;30008:2;29997:9;29993:18;29985:26;;30021:65;30083:1;30072:9;30068:17;30059:6;30021:65;:::i;:::-;30096:66;30158:2;30147:9;30143:18;30134:6;30096:66;:::i;:::-;29861:308;;;;;:::o;30175:229::-;30315:34;30311:1;30303:6;30299:14;30292:58;30384:12;30379:2;30371:6;30367:15;30360:37;30175:229;:::o;30410:366::-;30552:3;30573:67;30637:2;30632:3;30573:67;:::i;:::-;30566:74;;30649:93;30738:3;30649:93;:::i;:::-;30767:2;30762:3;30758:12;30751:19;;30410:366;;;:::o;30782:419::-;30948:4;30986:2;30975:9;30971:18;30963:26;;31035:9;31029:4;31025:20;31021:1;31010:9;31006:17;30999:47;31063:131;31189:4;31063:131;:::i;:::-;31055:139;;30782:419;;;:::o;31207:180::-;31255:77;31252:1;31245:88;31352:4;31349:1;31342:15;31376:4;31373:1;31366:15;31393:114;31460:6;31494:5;31488:12;31478:22;;31393:114;;;:::o;31513:184::-;31612:11;31646:6;31641:3;31634:19;31686:4;31681:3;31677:14;31662:29;;31513:184;;;;:::o;31703:132::-;31770:4;31793:3;31785:11;;31823:4;31818:3;31814:14;31806:22;;31703:132;;;:::o;31841:108::-;31918:24;31936:5;31918:24;:::i;:::-;31913:3;31906:37;31841:108;;:::o;31955:179::-;32024:10;32045:46;32087:3;32079:6;32045:46;:::i;:::-;32123:4;32118:3;32114:14;32100:28;;31955:179;;;;:::o;32140:113::-;32210:4;32242;32237:3;32233:14;32225:22;;32140:113;;;:::o;32289:732::-;32408:3;32437:54;32485:5;32437:54;:::i;:::-;32507:86;32586:6;32581:3;32507:86;:::i;:::-;32500:93;;32617:56;32667:5;32617:56;:::i;:::-;32696:7;32727:1;32712:284;32737:6;32734:1;32731:13;32712:284;;;32813:6;32807:13;32840:63;32899:3;32884:13;32840:63;:::i;:::-;32833:70;;32926:60;32979:6;32926:60;:::i;:::-;32916:70;;32772:224;32759:1;32756;32752:9;32747:14;;32712:284;;;32716:14;33012:3;33005:10;;32413:608;;;32289:732;;;;:::o;33027:831::-;33290:4;33328:3;33317:9;33313:19;33305:27;;33342:71;33410:1;33399:9;33395:17;33386:6;33342:71;:::i;:::-;33423:80;33499:2;33488:9;33484:18;33475:6;33423:80;:::i;:::-;33550:9;33544:4;33540:20;33535:2;33524:9;33520:18;33513:48;33578:108;33681:4;33672:6;33578:108;:::i;:::-;33570:116;;33696:72;33764:2;33753:9;33749:18;33740:6;33696:72;:::i;:::-;33778:73;33846:3;33835:9;33831:19;33822:6;33778:73;:::i;:::-;33027:831;;;;;;;;:::o;33864:180::-;33912:77;33909:1;33902:88;34009:4;34006:1;33999:15;34033:4;34030:1;34023:15;34050:185;34090:1;34107:20;34125:1;34107:20;:::i;:::-;34102:25;;34141:20;34159:1;34141:20;:::i;:::-;34136:25;;34180:1;34170:35;;34185:18;;:::i;:::-;34170:35;34227:1;34224;34220:9;34215:14;;34050:185;;;;:::o;34241:177::-;34381:29;34377:1;34369:6;34365:14;34358:53;34241:177;:::o;34424:366::-;34566:3;34587:67;34651:2;34646:3;34587:67;:::i;:::-;34580:74;;34663:93;34752:3;34663:93;:::i;:::-;34781:2;34776:3;34772:12;34765:19;;34424:366;;;:::o;34796:419::-;34962:4;35000:2;34989:9;34985:18;34977:26;;35049:9;35043:4;35039:20;35035:1;35024:9;35020:17;35013:47;35077:131;35203:4;35077:131;:::i;:::-;35069:139;;34796:419;;;:::o;35221:220::-;35361:34;35357:1;35349:6;35345:14;35338:58;35430:3;35425:2;35417:6;35413:15;35406:28;35221:220;:::o;35447:366::-;35589:3;35610:67;35674:2;35669:3;35610:67;:::i;:::-;35603:74;;35686:93;35775:3;35686:93;:::i;:::-;35804:2;35799:3;35795:12;35788:19;;35447:366;;;:::o;35819:419::-;35985:4;36023:2;36012:9;36008:18;36000:26;;36072:9;36066:4;36062:20;36058:1;36047:9;36043:17;36036:47;36100:131;36226:4;36100:131;:::i;:::-;36092:139;;35819:419;;;:::o

Swarm Source

ipfs://9f84e229af5921816b1f474b968ed328da6ad7c06e3b04981f89cc2782a46b88
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.