ETH Price: $2,680.23 (+0.44%)

Token

APE STAX (ASTAX 🦍)
 

Overview

Max Total Supply

1,000,000,000,000 ASTAX 🦍

Holders

1,124

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
68,406.048640641 ASTAX 🦍

Value
$0.00
0xacb46b778738e80cfc94154b49acd6a8837fbdbe
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:
ApeToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 6 : ApeToken.sol
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;

import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/token/ERC20/IERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/access/Ownable.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/Context.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/math/SafeMath.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.1.0/contracts/utils/Address.sol";

contract ApeToken is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    // erc20
    mapping (address => uint256) private _rOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    // total supply = 1 trillion
    uint256 private constant _tTotal = 10**12 * 10**_decimals;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    string private _name = 'APE STAX';
    string private _symbol = 'ASTAX \xF0\x9F\xA6\x8D';
    uint8 private constant _decimals = 9;

    // uniswap
    address public constant uniswapV2RouterAddr = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 public uniswapV2Router = IUniswapV2Router02(uniswapV2RouterAddr);
    address public constant uniswapV2FactoryAddr = address(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
    address public liquidityPoolAddr = UniswapV2Library.pairFor(uniswapV2FactoryAddr, uniswapV2Router.WETH(), address(this));

    // initial token allocations
    uint256 private _ownerTokenAmount = _rTotal.div(100).mul(90);
    uint256 private _marketingInitialTokenAmount = _rTotal.div(100).mul(5);
    uint256 private _lotteryTokenAmount = _rTotal.div(100).mul(5);

    // cooldown and numsells
    struct Holder {
        uint256 timeTransfer;
        uint256 numSells;
        uint256 timeSell;
    }
    mapping (address => Holder) public holder;
    // first 10 minutes there is a buy limit of 1.1 bn
   // uint256 private constant _buylimitPriceImpact = 3;
    uint256 private constant _buyLimit = 11 * 10**8 * 10**_decimals;
    uint256 private constant _buyLimitTime = 10 minutes;
    uint256 private constant _resetTime = 24 hours;
    uint256 private _buyCooldown = 10 seconds;
    uint256 private _sellCooldown = 30 seconds;
    uint256 private _w2wCooldown = 30 seconds;

    // taxes
    mapping (address => bool) public whitelist;
    mapping (address => bool) public blacklist;
    struct Taxes {
        uint256 marketing;
        uint256 redistribution;
        uint256 lottery;
        uint256 buybackBurn;
    }

    // index 0 in setter
    Taxes private _buyTaxrates = Taxes(50, 25, 25, 0);
    Taxes private _firstSellTaxrates = Taxes(50, 0, 20, 30);
    Taxes private _secondSellTaxrates = Taxes(130, 0, 30, 40);
    Taxes private _thirdSellTaxrates = Taxes(150, 0, 40, 60);
    Taxes private _fourthSellTaxrates = Taxes(180, 0, 40, 80);
    Taxes private _w2wSellTaxrates = Taxes(150, 0, 40, 60);
    address public constant burnAddr = address(0x000000000000000000000000000000000000dEaD);
    address payable public marketingAddr = payable(0x7B7B7c8A9cd0922E5894B3d3166f313Cf200A363);
    address payable public marketingInitialAddr = payable(0xdcBBcAA8fD8e610017D6922517Ff3f4ed2611e71);
    address public lotteryAddr = address(0x284c1D4Fb47e6548bde1e63A47198419Ec678449);

    // gets set to true after openTrading is called
    bool public tradingEnabled = false;
    uint256 public launchTime;

    // preventing circular calls of swapping
    bool public inSwap = false;
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    // every time the contract has 0.000005% of the total supply in tokens it will swap
    // them to eth in the next sell, keeping the buyback taxes whilst sending the rest to marketing
    uint256 public minimumTokensBeforeSwap = _tTotal.mul(5).div(1000000);

    // every time the contract has 1 eth it will use that for the buyback burn
    uint256 public minimumETHBeforeBurn = 1 ether;

    // the counter for how much of the token balance of the contract is allocated to buyback.
    // get reset every time the contract balance is swapped to eth.
    uint256 public rBuybackBurn;

    // incase something goes wrong, pause all transfers completely
    bool public transfersPaused = false;
    // to make sure that transfers can never be locked forever, pauses are 1 week long
    uint256 public transfersPausedTime;
    uint256 private constant _pauseDuration = 1 weeks;

    event SwapETHForTokens(uint256 amountIn, address[] path);
    event SwapTokensForETH(uint256 amountIn, address[] path);

    constructor () {

        // 90% of tsupply to owner
        _rOwned[_msgSender()] = _ownerTokenAmount;
        emit Transfer(address(0), _msgSender(), _ownerTokenAmount);
        // 5% of tsupply to marketingInitial
        _rOwned[marketingInitialAddr] = _marketingInitialTokenAmount;
        emit Transfer(address(0), marketingInitialAddr, _marketingInitialTokenAmount);
        // 5% of tsupply to lottery
        _rOwned[lotteryAddr] = _lotteryTokenAmount;
        emit Transfer(address(0), lotteryAddr, _lotteryTokenAmount);

        whitelist[address(this)] = true;
        whitelist[_msgSender()] = true;
        whitelist[lotteryAddr] = true;
        whitelist[burnAddr] = true;
        whitelist[marketingInitialAddr] = true;
        whitelist[marketingAddr] = true;
        // this is for the disperse app (airdrop)
        whitelist[address(0xD152f549545093347A162Dce210e7293f1452150)] = true;
    }
    receive() external payable {}


// ==========  ERC20
    function name() public view returns (string memory) {
        return _name;
    }

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

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

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

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

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

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

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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


// ==========  TRANSFER
    function _transfer(address sender, address recipient, uint256 tAmount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(tAmount > 0, "Transfer amount must be greater than zero");
        require(tradingEnabled || whitelist[sender] || whitelist[recipient], "ASTAX: Trading is not live yet. ");
        require(!blacklist[sender] && !blacklist[recipient], "ASTAX: Address is blacklisted. ");
        require(!transfersPaused || transfersPausedTime.add(_pauseDuration) <= block.timestamp, "ASTAX: Trading is paused. ");

        Taxes memory taxRates = Taxes(0,0,0,0);

        // getting appropiate tax rates and swapping of tokens/ sending of eth when threshhold passed
        if (!whitelist[sender] && !whitelist[recipient]) {

            // buy tax
            if (sender == liquidityPoolAddr && recipient != uniswapV2RouterAddr) {

                if (launchTime.add(_buyLimitTime) >= block.timestamp) {
                    require(
                        tAmount <= _buyLimit,
                        "ASTAX: No buy greater than 1.1 billion can be made for the first 10 minutes. "
                    );
                }

                // enforce cooldown and note down time
                require(
                    holder[recipient].timeTransfer.add(_buyCooldown) < block.timestamp,
                    "ASTAX: Need to wait until next transfer. "
                );
                holder[recipient].timeTransfer = block.timestamp;

                // set standard buy taxrates
                taxRates = _buyTaxrates;
            }

            // sell tax
            if (recipient == liquidityPoolAddr) {
                // enforce cooldown and note down time
                require(
                    holder[sender].timeTransfer.add(_sellCooldown) < block.timestamp,
                    "ASTAX: Need to wait until next transfer. "
                );
                holder[sender].timeTransfer = block.timestamp;

                // reset number of sells after 24 hours
                if (holder[sender].numSells > 0 && holder[sender].timeSell.add(_resetTime) < block.timestamp) {
                    holder[sender].numSells = 0;
                    holder[sender].timeSell = block.timestamp;
                }

                // set tax according to price impact or number of sells
                uint256 priceImpact = tAmount.mul(100).div(balanceOf(liquidityPoolAddr));

                // default sell taxrate, gets changed if numsells or priceimpact indicates that it should
                taxRates = _firstSellTaxrates;
                if (priceImpact > 1 || holder[sender].numSells == 1) {
                    taxRates = _secondSellTaxrates;
                }
                if (priceImpact > 2 || holder[sender].numSells >= 2) {
                    taxRates = _thirdSellTaxrates;
                }
                if (priceImpact > 3) {
                    taxRates = _fourthSellTaxrates;
                }

                // increment number of sells for holder
                if (holder[sender].numSells < 2) {
                    holder[sender].numSells = holder[sender].numSells.add(1);
                }
            }

            // wallet 2 wallet tax (or nonuniswap)
            if (sender != liquidityPoolAddr && recipient != liquidityPoolAddr) {

                // enforce cooldown and note down time
                require(
                    holder[sender].timeTransfer.add(_w2wCooldown) < block.timestamp,
                    "ASTAX: Need to wait until next transfer. "
                );
                holder[sender].timeTransfer = block.timestamp;

                // same tax rates as a third sell
                taxRates = _w2wSellTaxrates;
            }

            // if not already swapping then tokens and eth can be swapped now
            // when marketing, lottery and burn address are whitelisted inSwap is irrelevant
            if (!inSwap && sender != liquidityPoolAddr) {

                // swap tokens and send some to marketing, whilst keeping the eth for buyback burn
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= minimumTokensBeforeSwap) {
                    if (rBuybackBurn != 0) {
                        uint256 toBeBurned = tokenFromReflection(rBuybackBurn);
                        uint256 toBeSentToMarketing = contractTokenBalance.sub(toBeBurned);
                        if (toBeSentToMarketing != 0) {
                            swapTokensForETHTo(toBeSentToMarketing, marketingAddr);
                        }
                        rBuybackBurn = 0;
                        swapTokensForETHTo(toBeBurned, payable(this));
                    } else {
                        swapTokensForETHTo(contractTokenBalance, marketingAddr);
                    }
                }

                // swap eth for buyback burn if above minimum
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance >= minimumETHBeforeBurn) {
                    swapETHForTokensTo(contractETHBalance, burnAddr);
                }
            }
        }

        // make sure taxes are not applied when swapping internal balances
        // in case marketing, lottery or burn address are not whitelisted
        if(inSwap) {
            taxRates = Taxes(0,0,0,0);
        }

        // check taxrates and use simpler transfer if appropiate
        if (taxRates.marketing == 0 && taxRates.buybackBurn == 0 && taxRates.redistribution == 0 && taxRates.lottery == 0) {
            _tokenTransferWithoutFees(sender, recipient, tAmount);
        } else {
            _tokenTransferWithFees(sender, recipient, tAmount, taxRates);
        }
    }

    function _tokenTransferWithoutFees(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate = _getRate();
        uint256 rAmount = tAmount.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _tokenTransferWithFees(address sender, address recipient, uint256 tAmount, Taxes memory taxRates) private {

        // translating amount to reflected amount
        uint256 currentRate = _getRate();
        uint256 rAmount = tAmount.mul(currentRate);

        // getting tax values
        Taxes memory tTaxValues = _getTTaxValues(tAmount, taxRates);
        Taxes memory rTaxValues = _getRTaxValues(tTaxValues);

        // removing tax values from the total amount
        uint256 rTransferAmount = _getTransferAmount(rAmount, rTaxValues);
        uint256 tTransferAmount = _getTransferAmount(tAmount, tTaxValues);

        // reflecting sender and recipient balances
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        // reflecting redistribution fees
        _rTotal = _rTotal.sub(rTaxValues.redistribution);

        // reflecting lottery fees
        _rOwned[lotteryAddr] = _rOwned[lotteryAddr].add(rTaxValues.lottery);

        // reflecting buybackburn and marketing fees
        _rOwned[address(this)] = _rOwned[address(this)].add(rTaxValues.marketing).add(rTaxValues.buybackBurn);
        rBuybackBurn = rBuybackBurn.add(rTaxValues.buybackBurn);

        // standard erc20 event
        emit Transfer(sender, recipient, tTransferAmount);
    }



// ==========  SWAP
    function swapTokensForETHTo(uint256 tokenAmount, address payable recipient) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }

    function swapETHForTokensTo(uint256 amount, address recipient) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);

        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            recipient,
            block.timestamp.add(300)
        );

        emit SwapETHForTokens(amount, path);
    }


// ==========  REFLECT
    function _getRate() private view returns(uint256) {
        return _rTotal.div(_tTotal);
    }

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

    function _getTTaxValues(uint256 amount, Taxes memory taxRates) private pure returns (Taxes memory) {
        Taxes memory taxValues;
        taxValues.redistribution = amount.div(1000).mul(taxRates.redistribution);
        taxValues.buybackBurn = amount.div(1000).mul(taxRates.buybackBurn);
        taxValues.marketing = amount.div(1000).mul(taxRates.marketing);
        taxValues.lottery = amount.div(1000).mul(taxRates.lottery);
        return taxValues;
    }

    function _getRTaxValues(Taxes memory tTaxValues) private view returns (Taxes memory) {
        Taxes memory taxValues;
        uint256 currentRate = _getRate();
        taxValues.redistribution = tTaxValues.redistribution.mul(currentRate);
        taxValues.buybackBurn = tTaxValues.buybackBurn.mul(currentRate);
        taxValues.marketing = tTaxValues.marketing.mul(currentRate);
        taxValues.lottery = tTaxValues.lottery.mul(currentRate);
        return taxValues;
    }

    function _getTransferAmount(uint256 amount, Taxes memory taxValues) private pure returns (uint256) {
        return amount.sub(taxValues.marketing).sub(taxValues.lottery).sub(taxValues.buybackBurn).sub(taxValues.redistribution);
    }


// ==========  ADMIN
    function openTrading() external onlyOwner() {
        require(!tradingEnabled, "ASTAX: Trading is already enabled. ");
        tradingEnabled = true;
        launchTime = block.timestamp;
    }

    // swap tokens and send some to marketing, whilst keeping some eth for buyback burn
    function manualTaxConv() external onlyOwner() returns (bool) {
        uint256 contractTokenBalance = balanceOf(address(this));
        if (contractTokenBalance > 0) {
            if (rBuybackBurn != 0) {
                uint256 toBeBurned = tokenFromReflection(rBuybackBurn);
                uint256 toBeSentToMarketing = contractTokenBalance.sub(toBeBurned);
                if (toBeSentToMarketing != 0) {
                    swapTokensForETHTo(toBeSentToMarketing, marketingAddr);
                }
                rBuybackBurn = 0;
                swapTokensForETHTo(toBeBurned, payable(this));
            } else {
                swapTokensForETHTo(contractTokenBalance, marketingAddr);
            }
        }
        return true;
    }

    function manualBuybackBurn() external onlyOwner() returns (bool) {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            swapETHForTokensTo(contractETHBalance, burnAddr);
        }
        return true;
    }

    function setWhitelist(address addr, bool onoff) external onlyOwner() {
        whitelist[addr] = onoff;
    }

    function setBlacklist(address addr, bool onoff) external onlyOwner() {
        require(addr != liquidityPoolAddr && addr != uniswapV2RouterAddr, "ASTAX: Can't block uniswap. ");
        blacklist[addr] = onoff;
    }

    function setMarketingWallet(address payable marketing) external onlyOwner() {
        marketingAddr = marketing;
    }

    function setMarketingLottery(address lottery) external onlyOwner() {
        lotteryAddr = lottery;
    }

    function setMinimumTokensBeforeSwap(uint256 val) external onlyOwner() {
        minimumTokensBeforeSwap = val;
    }

    function setMinimumETHBeforeBurn(uint256 val) external onlyOwner() {
        minimumETHBeforeBurn = val;
    }

    function setBuyCooldown(uint256 cooldown) external onlyOwner() {
        require(cooldown <= 60 seconds, "ASTAX: Cooldown value too large. ");
        _buyCooldown = cooldown;
    }

    function setW2WCooldown(uint256 cooldown) external onlyOwner() {
        require(cooldown <= 60 seconds, "ASTAX: Cooldown value too large. ");
        _w2wCooldown = cooldown;
    }

    function setSellCooldown(uint256 cooldown) external onlyOwner() {
        require(cooldown <= 60 seconds, "ASTAX: Cooldown value too large. ");
        _sellCooldown = cooldown;
    }

    // ugly. not proud of it, but works. in theory allows setting firststell taxrates to 45%,
    // but because of contract code size limits this has to suffice.
    function setTaxrates(uint256 i, Taxes calldata taxrates) external onlyOwner() {
        if (i == 0) {
            _firstSellTaxrates = taxrates;
        } else if (i == 1) {
            _secondSellTaxrates = taxrates;
        } else if (i == 2) {
            _thirdSellTaxrates = taxrates;
        } else if (i == 3) {
            _fourthSellTaxrates = taxrates;
        } else if (i == 4) {
            _w2wSellTaxrates = taxrates;
        } else if (i == 5) {
            _buyTaxrates = taxrates;
        } else if (i == 6) {
            _firstSellTaxrates = taxrates;
            _secondSellTaxrates = taxrates;
            _thirdSellTaxrates = taxrates;
            _fourthSellTaxrates = taxrates;
            _w2wSellTaxrates = taxrates;
        }
    }

    function setPauseTrading(bool onoff) external onlyOwner() {
        transfersPaused = onoff;
        if (onoff) {
            transfersPausedTime = block.timestamp;
        }
    }
}


// ==========  LIBS
library UniswapV2Library {
    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'UniswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'UniswapV2Library: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint160(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f' // init code hash
            )))));
    }
}

interface IUniswapV2Router02  {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

File 2 of 6 : Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 3 of 6 : SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

File 4 of 6 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

File 5 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

File 6 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holder","outputs":[{"internalType":"uint256","name":"timeTransfer","type":"uint256"},{"internalType":"uint256","name":"numSells","type":"uint256"},{"internalType":"uint256","name":"timeSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"inSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPoolAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lotteryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBuybackBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualTaxConv","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingInitialAddr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumETHBeforeBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rBuybackBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cooldown","type":"uint256"}],"name":"setBuyCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lottery","type":"address"}],"name":"setMarketingLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMinimumETHBeforeBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setPauseTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cooldown","type":"uint256"}],"name":"setSellCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"},{"components":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"redistribution","type":"uint256"},{"internalType":"uint256","name":"lottery","type":"uint256"},{"internalType":"uint256","name":"buybackBurn","type":"uint256"}],"internalType":"struct ApeToken.Taxes","name":"taxrates","type":"tuple"}],"name":"setTaxrates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cooldown","type":"uint256"}],"name":"setW2WCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transfersPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfersPausedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2FactoryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2RouterAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a6200001491906200125a565b64e8d4a5100062000026919062001397565b600019620000359190620014f0565b600019620000449190620013f8565b6003556040518060400160405280600881526020017f4150452053544158000000000000000000000000000000000000000000000000815250600490805190602001906200009492919062000efa565b506040518060400160405280600a81526020017f415354415820f09fa68d0000000000000000000000000000000000000000000081525060059080519060200190620000e292919062000efa565b50737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000207735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ba57600080fd5b505afa158015620001cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f5919062000fc1565b3062000d0e60201b620021c81760201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200027e605a6200026a606460035462000d8c60201b6200223a1790919060201c565b62000da460201b620022501790919060201c565b600855620002b86005620002a4606460035462000d8c60201b6200223a1790919060201c565b62000da460201b620022501790919060201c565b600955620002f26005620002de606460035462000d8c60201b6200223a1790919060201c565b62000da460201b620022501790919060201c565b600a55600a600c55601e600d55601e600e556040518060800160405280603281526020016019815260200160198152602001600081525060116000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280603281526020016000815260200160148152602001601e815250601560008201518160000155602082015181600101556040820151816002015560608201518160030155505060405180608001604052806082815260200160008152602001601e8152602001602881525060196000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280609681526020016000815260200160288152602001603c815250601d600082015181600001556020820151816001015560408201518160020155606082015181600301555050604051806080016040528060b481526020016000815260200160288152602001605081525060216000820151816000015560208201518160010155604082015181600201556060820151816003015550506040518060800160405280609681526020016000815260200160288152602001603c8152506025600082015181600001556020820151816001015560408201518160020155606082015181600301555050737b7b7c8a9cd0922e5894b3d3166f313cf200a363602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dcbbcaa8fd8e610017d6922517ff3f4ed2611e71602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073284c1d4fb47e6548bde1e63a47198419ec678449602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602b60146101000a81548160ff0219169083151502179055506000602d60006101000a81548160ff02191690831515021790555062000677620f42406200066360056009600a6200063d91906200125a565b64e8d4a510006200064f919062001397565b62000da460201b620022501790919060201c565b62000d8c60201b6200223a1790919060201c565b602e55670de0b6b3a7640000602f556000603160006101000a81548160ff021916908315150217905550348015620006ae57600080fd5b506000620006c162000dbc60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600854600160006200077662000dbc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620007c462000dbc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200082591906200118e565b60405180910390a360095460016000602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200091991906200118e565b60405180910390a3600a5460016000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a5460405162000a0d91906200118e565b60405180910390a36001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600062000a8362000dbc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f600073d152f549545093347a162dce210e7293f145215073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620016b3565b600080600062000d25858562000dc460201b60201c565b9150915085828260405160200162000d3f929190620010d0565b6040516020818303038152906040528051906020012060405160200162000d6892919062001100565b6040516020818303038152906040528051906020012060001c925050509392505050565b6000818362000d9c9190620011c7565b905092915050565b6000818362000db4919062001397565b905092915050565b600033905090565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141562000e39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e30906200114a565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161062000e7557828462000e78565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ef3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000eea906200116c565b60405180910390fd5b9250929050565b82805462000f089062001488565b90600052602060002090601f01602090048101928262000f2c576000855562000f78565b82601f1062000f4757805160ff191683800117855562000f78565b8280016001018555821562000f78579182015b8281111562000f7757825182559160200191906001019062000f5a565b5b50905062000f87919062000f8b565b5090565b5b8082111562000fa657600081600090555060010162000f8c565b5090565b60008151905062000fbb8162001699565b92915050565b60006020828403121562000fd457600080fd5b600062000fe48482850162000faa565b91505092915050565b6200100262000ffc8262001433565b620014be565b82525050565b6200101d620010178262001447565b620014d2565b82525050565b600062001032602583620011ab565b91506200103f82620015cf565b604082019050919050565b600062001059602083620011bc565b915062001066826200161e565b602082019050919050565b600062001080600183620011bc565b91506200108d8262001647565b600182019050919050565b6000620010a7601e83620011ab565b9150620010b48262001670565b602082019050919050565b620010ca8162001471565b82525050565b6000620010de828562000fed565b601482019150620010f0828462000fed565b6014820191508190509392505050565b60006200110d8262001071565b91506200111b828562000fed565b6014820191506200112d828462001008565b6020820191506200113e826200104a565b91508190509392505050565b60006020820190508181036000830152620011658162001023565b9050919050565b60006020820190508181036000830152620011878162001098565b9050919050565b6000602082019050620011a56000830184620010bf565b92915050565b600082825260208201905092915050565b600081905092915050565b6000620011d48262001471565b9150620011e18362001471565b925082620011f457620011f362001557565b5b828204905092915050565b6000808291508390505b6001851115620012515780860481111562001229576200122862001528565b5b6001851615620012395780820291505b80810290506200124985620015c2565b945062001209565b94509492505050565b6000620012678262001471565b915062001274836200147b565b9250620012a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620012ab565b905092915050565b600082620012bd576001905062001390565b81620012cd576000905062001390565b8160018114620012e65760028114620012f15762001327565b600191505062001390565b60ff84111562001306576200130562001528565b5b8360020a91508482111562001320576200131f62001528565b5b5062001390565b5060208310610133831016604e8410600b8410161715620013615782820a9050838111156200135b576200135a62001528565b5b62001390565b620013708484846001620011ff565b925090508184048111156200138a576200138962001528565b5b81810290505b9392505050565b6000620013a48262001471565b9150620013b18362001471565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620013ed57620013ec62001528565b5b828202905092915050565b6000620014058262001471565b9150620014128362001471565b92508282101562001428576200142762001528565b5b828203905092915050565b6000620014408262001451565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006002820490506001821680620014a157607f821691505b60208210811415620014b857620014b762001586565b5b50919050565b6000620014cb82620014dc565b9050919050565b6000819050919050565b6000620014e982620015b5565b9050919050565b6000620014fd8262001471565b91506200150a8362001471565b9250826200151d576200151c62001557565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160601b9050919050565b60008160011c9050919050565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b620016a48162001433565b8114620016b057600080fd5b50565b615ade80620016c36000396000f3fe6080604052600436106102975760003560e01c8063790ca4131161015a578063c9567bf9116100c1578063dd62ed3e1161007a578063dd62ed3e14610a1b578063ee9e20c614610a58578063f2fde38b14610a81578063f9f92be414610aaa578063fc1ca33c14610ae7578063ff142f9714610b105761029e565b8063c9567bf91461092d578063cea2085114610944578063d246d4111461096f578063d2d7ad831461099a578063d8306786146109c5578063d85ff2ff146109f05761029e565b8063a091273b11610113578063a091273b1461080d578063a457c2d714610838578063a9059cbb14610875578063aee50b1e146108b2578063bad291ab146108db578063c29632bd146109045761029e565b8063790ca413146106f957806381f181431461072457806381f651aa1461074f5780638da5cb5b1461077a57806395d89b41146107a55780639b19251a146107d05761029e565b8063313ce567116101fe578063497f3eeb116101b7578063497f3eeb146105fd5780634ada218b1461062857806353d6fd59146106535780635d098b381461067c57806370a08231146106a5578063715018a6146106e25761029e565b8063313ce567146104ed5780633155c4ba1461051857806339509351146105415780633ff42b921461057e57806341d72548146105a95780634563f30a146105d25761029e565b80631eb7caba116102505780631eb7caba146103b5578063216fb989146103f457806323b872dd1461041f5780632c66562b1461045c5780632d838119146104855780632f5b1564146104c25761029e565b806306fdde03146102a357806307d51141146102ce578063095ea7b3146102f9578063153b0d1e146103365780631694505e1461035f57806318160ddd1461038a5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b3b565b6040516102c59190614b3c565b60405180910390f35b3480156102da57600080fd5b506102e3610bcd565b6040516102f09190614d9e565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b919061452c565b610bd3565b60405161032d9190614aba565b60405180910390f35b34801561034257600080fd5b5061035d600480360381019061035891906144f0565b610bf1565b005b34801561036b57600080fd5b50610374610da5565b6040516103819190614ad5565b60405180910390f35b34801561039657600080fd5b5061039f610dcb565b6040516103ac9190614d9e565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d791906143ea565b610df0565b6040516103eb93929190614e43565b60405180910390f35b34801561040057600080fd5b50610409610e1a565b6040516104169190614aba565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906144a1565b610ebb565b6040516104539190614aba565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190614591565b610f94565b005b34801561049157600080fd5b506104ac60048036038101906104a79190614591565b61105e565b6040516104b99190614d9e565b60405180910390f35b3480156104ce57600080fd5b506104d76110cc565b6040516104e49190614a84565b60405180910390f35b3480156104f957600080fd5b506105026110f2565b60405161050f9190614e7a565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190614568565b6110fb565b005b34801561054d57600080fd5b506105686004803603810190610563919061452c565b6111a2565b6040516105759190614aba565b60405180910390f35b34801561058a57600080fd5b50610593611255565b6040516105a09190614a9f565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614591565b61127b565b005b3480156105de57600080fd5b506105e7611345565b6040516105f49190614aba565b60405180910390f35b34801561060957600080fd5b50610612611358565b60405161061f9190614a9f565b60405180910390f35b34801561063457600080fd5b5061063d61137e565b60405161064a9190614aba565b60405180910390f35b34801561065f57600080fd5b5061067a600480360381019061067591906144f0565b611391565b005b34801561068857600080fd5b506106a3600480360381019061069e919061443c565b611468565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906143ea565b611528565b6040516106d99190614d9e565b60405180910390f35b3480156106ee57600080fd5b506106f7611579565b005b34801561070557600080fd5b5061070e6116b3565b60405161071b9190614d9e565b60405180910390f35b34801561073057600080fd5b506107396116b9565b6040516107469190614aba565b60405180910390f35b34801561075b57600080fd5b50610764611801565b6040516107719190614a84565b60405180910390f35b34801561078657600080fd5b5061078f611827565b60405161079c9190614a84565b60405180910390f35b3480156107b157600080fd5b506107ba611850565b6040516107c79190614b3c565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906143ea565b6118e2565b6040516108049190614aba565b60405180910390f35b34801561081957600080fd5b50610822611902565b60405161082f9190614d9e565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a919061452c565b611908565b60405161086c9190614aba565b60405180910390f35b34801561088157600080fd5b5061089c6004803603810190610897919061452c565b6119d5565b6040516108a99190614aba565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d49190614591565b6119f3565b005b3480156108e757600080fd5b5061090260048036038101906108fd91906143ea565b611a79565b005b34801561091057600080fd5b5061092b60048036038101906109269190614591565b611b39565b005b34801561093957600080fd5b50610942611c03565b005b34801561095057600080fd5b50610959611cf3565b6040516109669190614a84565b60405180910390f35b34801561097b57600080fd5b50610984611d0b565b6040516109919190614a84565b60405180910390f35b3480156109a657600080fd5b506109af611d11565b6040516109bc9190614d9e565b60405180910390f35b3480156109d157600080fd5b506109da611d17565b6040516109e79190614aba565b60405180910390f35b3480156109fc57600080fd5b50610a05611d2a565b604051610a129190614d9e565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190614465565b611d30565b604051610a4f9190614d9e565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190614591565b611db7565b005b348015610a8d57600080fd5b50610aa86004803603810190610aa391906143ea565b611e3d565b005b348015610ab657600080fd5b50610ad16004803603810190610acc91906143ea565b611fe6565b604051610ade9190614aba565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b0991906145ba565b612006565b005b348015610b1c57600080fd5b50610b256121b0565b604051610b329190614a84565b60405180910390f35b606060048054610b4a90615325565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7690615325565b8015610bc35780601f10610b9857610100808354040283529160200191610bc3565b820191906000526020600020905b815481529060010190602001808311610ba657829003601f168201915b5050505050905090565b60325481565b6000610be7610be0612266565b848461226e565b6001905092915050565b610bf9612266565b73ffffffffffffffffffffffffffffffffffffffff16610c17611827565b73ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490614c7e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610d0b5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190614d7e565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a610ddb9190614fcf565b64e8d4a51000610deb91906150ed565b905090565b600b6020528060005260406000206000915090508060000154908060010154908060020154905083565b6000610e24612266565b73ffffffffffffffffffffffffffffffffffffffff16610e42611827565b73ffffffffffffffffffffffffffffffffffffffff1614610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90614c7e565b60405180910390fd5b60004790506000811115610eb357610eb28161dead612439565b5b600191505090565b6000610ec8848484612753565b610f8984610ed4612266565b610f8485604051806060016040528060288152602001615a5c60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f3a612266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c59092919063ffffffff16565b61226e565b600190509392505050565b610f9c612266565b73ffffffffffffffffffffffffffffffffffffffff16610fba611827565b73ffffffffffffffffffffffffffffffffffffffff1614611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790614c7e565b60405180910390fd5b603c811115611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90614d5e565b60405180910390fd5b80600d8190555050565b60006003548211156110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c90614bfe565b60405180910390fd5b60006110af61371a565b90506110c4818461223a90919063ffffffff16565b915050919050565b602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b611103612266565b73ffffffffffffffffffffffffffffffffffffffff16611121611827565b73ffffffffffffffffffffffffffffffffffffffff1614611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90614c7e565b60405180910390fd5b80603160006101000a81548160ff021916908315150217905550801561119f57426032819055505b50565b600061124b6111af612266565b8461124685600260006111c0612266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b61226e565b6001905092915050565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611283612266565b73ffffffffffffffffffffffffffffffffffffffff166112a1611827565b73ffffffffffffffffffffffffffffffffffffffff16146112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90614c7e565b60405180910390fd5b603c81111561133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290614d5e565b60405180910390fd5b80600e8190555050565b603160009054906101000a900460ff1681565b602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602b60149054906101000a900460ff1681565b611399612266565b73ffffffffffffffffffffffffffffffffffffffff166113b7611827565b73ffffffffffffffffffffffffffffffffffffffff161461140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490614c7e565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611470612266565b73ffffffffffffffffffffffffffffffffffffffff1661148e611827565b73ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90614c7e565b60405180910390fd5b80602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611572600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105e565b9050919050565b611581612266565b73ffffffffffffffffffffffffffffffffffffffff1661159f611827565b73ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90614c7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b602c5481565b60006116c3612266565b73ffffffffffffffffffffffffffffffffffffffff166116e1611827565b73ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90614c7e565b60405180910390fd5b600061174230611528565b905060008111156117f9576000603054146117cb57600061176460305461105e565b9050600061177b828461376990919063ffffffff16565b9050600081146117b2576117b181602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661377f565b5b60006030819055506117c4823061377f565b50506117f8565b6117f781602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661377f565b5b5b600191505090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461185f90615325565b80601f016020809104026020016040519081016040528092919081815260200182805461188b90615325565b80156118d85780601f106118ad576101008083540402835291602001916118d8565b820191906000526020600020905b8154815290600101906020018083116118bb57829003601f168201915b5050505050905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b602f5481565b60006119cb611915612266565b846119c685604051806060016040528060258152602001615a84602591396002600061193f612266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c59092919063ffffffff16565b61226e565b6001905092915050565b60006119e96119e2612266565b8484612753565b6001905092915050565b6119fb612266565b73ffffffffffffffffffffffffffffffffffffffff16611a19611827565b73ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614c7e565b60405180910390fd5b80602e8190555050565b611a81612266565b73ffffffffffffffffffffffffffffffffffffffff16611a9f611827565b73ffffffffffffffffffffffffffffffffffffffff1614611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec90614c7e565b60405180910390fd5b80602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b41612266565b73ffffffffffffffffffffffffffffffffffffffff16611b5f611827565b73ffffffffffffffffffffffffffffffffffffffff1614611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac90614c7e565b60405180910390fd5b603c811115611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090614d5e565b60405180910390fd5b80600c8190555050565b611c0b612266565b73ffffffffffffffffffffffffffffffffffffffff16611c29611827565b73ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614c7e565b60405180910390fd5b602b60149054906101000a900460ff1615611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690614d1e565b60405180910390fd5b6001602b60146101000a81548160ff02191690831515021790555042602c81905550565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b61dead81565b602e5481565b602d60009054906101000a900460ff1681565b60305481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611dbf612266565b73ffffffffffffffffffffffffffffffffffffffff16611ddd611827565b73ffffffffffffffffffffffffffffffffffffffff1614611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90614c7e565b60405180910390fd5b80602f8190555050565b611e45612266565b73ffffffffffffffffffffffffffffffffffffffff16611e63611827565b73ffffffffffffffffffffffffffffffffffffffff1614611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090614c7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090614bbe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60106020528060005260406000206000915054906101000a900460ff1681565b61200e612266565b73ffffffffffffffffffffffffffffffffffffffff1661202c611827565b73ffffffffffffffffffffffffffffffffffffffff1614612082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207990614c7e565b60405180910390fd5b60008214156120a257806015818161209a91906159ce565b9050506121ac565b60018214156120c25780601981816120ba91906159ce565b9050506121ab565b60028214156120e25780601d81816120da91906159ce565b9050506121aa565b60038214156121025780602181816120fa91906159ce565b9050506121a9565b600482141561212257806025818161211a91906159ce565b9050506121a8565b600582141561214257806011818161213a91906159ce565b9050506121a7565b60068214156121a657806015818161215a91906159ce565b905050806019818161216c91906159ce565b90505080601d818161217e91906159ce565b905050806021818161219091906159ce565b90505080602581816121a291906159ce565b9050505b5b5b5b5b5b5b5050565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b60008060006121d78585613aa5565b915091508582826040516020016121ef929190614a16565b60405160208183030381529060405280519060200120604051602001612216929190614a42565b6040516020818303038152906040528051906020012060001c925050509392505050565b600081836122489190614f4b565b905092915050565b6000818361225e91906150ed565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590614cfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590614bde565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161242c9190614d9e565b60405180910390a3505050565b6001602d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612497577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124c55781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253057600080fd5b505afa158015612544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125689190614413565b816000815181106125a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612617577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084866126a961012c4261375390919063ffffffff16565b6040518663ffffffff1660e01b81526004016126c89493929190614af0565b6000604051808303818588803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624838260405161272b929190614db9565b60405180910390a1506000602d60006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614cde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614b5e565b60405180910390fd5b60008111612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286d90614c9e565b60405180910390fd5b602b60149054906101000a900460ff16806128da5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061292e5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61296d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296490614c5e565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a115750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4790614c3e565b60405180910390fd5b603160009054906101000a900460ff161580612a83575042612a8062093a8060325461375390919063ffffffff16565b11155b612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab990614b9e565b60405180910390fd5b6000604051806080016040528060008152602001600081526020016000815260200160008152509050600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b8f5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561362857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c315750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612dca5742612c4e610258602c5461375390919063ffffffff16565b10612cb3576009600a612c619190614fcf565b634190ab00612c7091906150ed565b821115612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca990614b7e565b60405180910390fd5b5b42612d0b600c54600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461375390919063ffffffff16565b10612d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4290614cbe565b60405180910390fd5b42600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550601160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561330f5742612e78600d54600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461375390919063ffffffff16565b10612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90614cbe565b60405180910390fd5b42600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154118015612fa7575042612fa562015180600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461375390919063ffffffff16565b105b1561303c576000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505b600061308e61306c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611528565b61308060648661225090919063ffffffff16565b61223a90919063ffffffff16565b905060156040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509150600181118061311857506001600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b1561315557601960405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b60028111806131a757506002600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410155b156131e457601d60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b600381111561322557602160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6002600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154101561330d576132c66001600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461375390919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156133bb5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156134d75742613418600e54600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461375390919063ffffffff16565b10613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344f90614cbe565b60405180910390fd5b42600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550602560405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b602d60009054906101000a900460ff161580156135425750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561362757600061355230611528565b9050602e548110613609576000603054146135db57600061357460305461105e565b9050600061358b828461376990919063ffffffff16565b9050600081146135c2576135c181602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661377f565b5b60006030819055506135d4823061377f565b5050613608565b61360781602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661377f565b5b5b6000479050602f548110613624576136238161dead612439565b5b50505b5b602d60009054906101000a900460ff1615613665576040518060800160405280600081526020016000815260200160008152602001600081525090505b6000816000015114801561367d575060008160600151145b801561368d575060008160200151145b801561369d575060008160400151145b156136b2576136ad848484613bd3565b6136bf565b6136be84848484613d8c565b5b50505050565b600083831115829061370d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137049190614b3c565b60405180910390fd5b5082840390509392505050565b600061374e6009600a61372d9190614fcf565b64e8d4a5100061373d91906150ed565b60035461223a90919063ffffffff16565b905090565b600081836137619190614ef5565b905092915050565b600081836137779190615147565b905092915050565b6001602d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156137dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561380b5781602001602082028036833780820191505090505b5090503081600081518110613849577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138eb57600080fd5b505afa1580156138ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139239190614413565b8160018151811061395d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139b630737a250d5630b4cf539739df2c5dacb4c659f2488d8561226e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401613a1a959493929190614de9565b600060405180830381600087803b158015613a3457600080fd5b505af1158015613a48573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78382604051613a7d929190614db9565b60405180910390a1506000602d60006101000a81548160ff0219169083151502179055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0e90614c1e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610613b51578284613b54565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bc390614d3e565b60405180910390fd5b9250929050565b6000613bdd61371a565b90506000613bf4828461225090919063ffffffff16565b9050613c4881600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376990919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cdd81600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d7d9190614d9e565b60405180910390a35050505050565b6000613d9661371a565b90506000613dad828561225090919063ffffffff16565b90506000613dbb858561414b565b90506000613dc882614235565b90506000613dd684836142db565b90506000613de488856142db565b9050613e3885600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ecd82600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f29836020015160035461376990919063ffffffff16565b600381905550613fa7836040015160016000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b60016000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614078836060015161406a8560000151600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b61375390919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140d4836060015160305461375390919063ffffffff16565b6030819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516141379190614d9e565b60405180910390a350505050505050505050565b61415361433e565b61415b61433e565b61418683602001516141786103e88761223a90919063ffffffff16565b61225090919063ffffffff16565b8160200181815250506141ba83606001516141ac6103e88761223a90919063ffffffff16565b61225090919063ffffffff16565b8160600181815250506141ee83600001516141e06103e88761223a90919063ffffffff16565b61225090919063ffffffff16565b81600001818152505061422283604001516142146103e88761223a90919063ffffffff16565b61225090919063ffffffff16565b8160400181815250508091505092915050565b61423d61433e565b61424561433e565b600061424f61371a565b905061426881856020015161225090919063ffffffff16565b82602001818152505061428881856060015161225090919063ffffffff16565b8260600181815250506142a881856000015161225090919063ffffffff16565b8260000181815250506142c881856040015161225090919063ffffffff16565b8260400181815250508192505050919050565b60006143368260200151614328846060015161431a866040015161430c88600001518a61376990919063ffffffff16565b61376990919063ffffffff16565b61376990919063ffffffff16565b61376990919063ffffffff16565b905092915050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b600081359050614375816159ff565b92915050565b60008151905061438a816159ff565b92915050565b60008135905061439f81615a16565b92915050565b6000813590506143b481615a2d565b92915050565b6000608082840312156143cc57600080fd5b81905092915050565b6000813590506143e481615a44565b92915050565b6000602082840312156143fc57600080fd5b600061440a84828501614366565b91505092915050565b60006020828403121561442557600080fd5b60006144338482850161437b565b91505092915050565b60006020828403121561444e57600080fd5b600061445c84828501614390565b91505092915050565b6000806040838503121561447857600080fd5b600061448685828601614366565b925050602061449785828601614366565b9150509250929050565b6000806000606084860312156144b657600080fd5b60006144c486828701614366565b93505060206144d586828701614366565b92505060406144e6868287016143d5565b9150509250925092565b6000806040838503121561450357600080fd5b600061451185828601614366565b9250506020614522858286016143a5565b9150509250929050565b6000806040838503121561453f57600080fd5b600061454d85828601614366565b925050602061455e858286016143d5565b9150509250929050565b60006020828403121561457a57600080fd5b6000614588848285016143a5565b91505092915050565b6000602082840312156145a357600080fd5b60006145b1848285016143d5565b91505092915050565b60008060a083850312156145cd57600080fd5b60006145db858286016143d5565b92505060206145ec858286016143ba565b9150509250929050565b6000614602838361462c565b60208301905092915050565b614617816151ec565b82525050565b6146268161518d565b82525050565b6146358161517b565b82525050565b6146448161517b565b82525050565b61465b6146568261517b565b615357565b82525050565b600061466c82614ea5565b6146768185614ec8565b935061468183614e95565b8060005b838110156146b257815161469988826145f6565b97506146a483614ebb565b925050600181019050614685565b5085935050505092915050565b6146c88161519f565b82525050565b6146df6146da826151ab565b615369565b82525050565b6146ee816151fe565b82525050565b6146fd81615222565b82525050565b600061470e82614eb0565b6147188185614ed9565b935061472881856020860161526a565b61473181615432565b840191505092915050565b6000614749602383614ed9565b91506147548261546a565b604082019050919050565b600061476c604d83614ed9565b9150614777826154b9565b606082019050919050565b600061478f601a83614ed9565b915061479a8261552e565b602082019050919050565b60006147b2602683614ed9565b91506147bd82615557565b604082019050919050565b60006147d5602283614ed9565b91506147e0826155a6565b604082019050919050565b60006147f8603383614ed9565b9150614803826155f5565b604082019050919050565b600061481b602583614ed9565b915061482682615644565b604082019050919050565b600061483e602083614eea565b915061484982615693565b602082019050919050565b6000614861601f83614ed9565b915061486c826156bc565b602082019050919050565b6000614884600183614eea565b915061488f826156e5565b600182019050919050565b60006148a7602083614ed9565b91506148b28261570e565b602082019050919050565b60006148ca602083614ed9565b91506148d582615737565b602082019050919050565b60006148ed602983614ed9565b91506148f882615760565b604082019050919050565b6000614910602983614ed9565b915061491b826157af565b604082019050919050565b6000614933602583614ed9565b915061493e826157fe565b604082019050919050565b6000614956602483614ed9565b91506149618261584d565b604082019050919050565b6000614979602383614ed9565b91506149848261589c565b604082019050919050565b600061499c601e83614ed9565b91506149a7826158eb565b602082019050919050565b60006149bf602183614ed9565b91506149ca82615914565b604082019050919050565b60006149e2601c83614ed9565b91506149ed82615963565b602082019050919050565b614a01816151d5565b82525050565b614a10816151df565b82525050565b6000614a22828561464a565b601482019150614a32828461464a565b6014820191508190509392505050565b6000614a4d82614877565b9150614a59828561464a565b601482019150614a6982846146ce565b602082019150614a7882614831565b91508190509392505050565b6000602082019050614a99600083018461463b565b92915050565b6000602082019050614ab4600083018461461d565b92915050565b6000602082019050614acf60008301846146bf565b92915050565b6000602082019050614aea60008301846146e5565b92915050565b6000608082019050614b0560008301876146f4565b8181036020830152614b178186614661565b9050614b26604083018561463b565b614b3360608301846149f8565b95945050505050565b60006020820190508181036000830152614b568184614703565b905092915050565b60006020820190508181036000830152614b778161473c565b9050919050565b60006020820190508181036000830152614b978161475f565b9050919050565b60006020820190508181036000830152614bb781614782565b9050919050565b60006020820190508181036000830152614bd7816147a5565b9050919050565b60006020820190508181036000830152614bf7816147c8565b9050919050565b60006020820190508181036000830152614c17816147eb565b9050919050565b60006020820190508181036000830152614c378161480e565b9050919050565b60006020820190508181036000830152614c5781614854565b9050919050565b60006020820190508181036000830152614c778161489a565b9050919050565b60006020820190508181036000830152614c97816148bd565b9050919050565b60006020820190508181036000830152614cb7816148e0565b9050919050565b60006020820190508181036000830152614cd781614903565b9050919050565b60006020820190508181036000830152614cf781614926565b9050919050565b60006020820190508181036000830152614d1781614949565b9050919050565b60006020820190508181036000830152614d378161496c565b9050919050565b60006020820190508181036000830152614d578161498f565b9050919050565b60006020820190508181036000830152614d77816149b2565b9050919050565b60006020820190508181036000830152614d97816149d5565b9050919050565b6000602082019050614db360008301846149f8565b92915050565b6000604082019050614dce60008301856149f8565b8181036020830152614de08184614661565b90509392505050565b600060a082019050614dfe60008301886149f8565b614e0b60208301876146f4565b8181036040830152614e1d8186614661565b9050614e2c606083018561460e565b614e3960808301846149f8565b9695505050505050565b6000606082019050614e5860008301866149f8565b614e6560208301856149f8565b614e7260408301846149f8565b949350505050565b6000602082019050614e8f6000830184614a07565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f00826151d5565b9150614f0b836151d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f4057614f3f615385565b5b828201905092915050565b6000614f56826151d5565b9150614f61836151d5565b925082614f7157614f706153b4565b5b828204905092915050565b6000808291508390505b6001851115614fc657808604811115614fa257614fa1615385565b5b6001851615614fb15780820291505b8081029050614fbf8561545d565b9450614f86565b94509492505050565b6000614fda826151d5565b9150614fe5836151df565b92506150127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461501a565b905092915050565b60008261502a57600190506150e6565b8161503857600090506150e6565b816001811461504e576002811461505857615087565b60019150506150e6565b60ff84111561506a57615069615385565b5b8360020a91508482111561508157615080615385565b5b506150e6565b5060208310610133831016604e8410600b84101617156150bc5782820a9050838111156150b7576150b6615385565b5b6150e6565b6150c98484846001614f7c565b925090508184048111156150e0576150df615385565b5b81810290505b9392505050565b60006150f8826151d5565b9150615103836151d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561513c5761513b615385565b5b828202905092915050565b6000615152826151d5565b915061515d836151d5565b9250828210156151705761516f615385565b5b828203905092915050565b6000615186826151b5565b9050919050565b6000615198826151b5565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006151f782615234565b9050919050565b600061520982615210565b9050919050565b600061521b826151b5565b9050919050565b600061522d826151d5565b9050919050565b600061523f82615246565b9050919050565b6000615251826151b5565b9050919050565b6000615263826151d5565b9050919050565b60005b8381101561528857808201518184015260208101905061526d565b83811115615297576000848401525b50505050565b6000810160008301806152af8161541c565b90506152bb81846159dc565b5050506001810160208301806152d08161541c565b90506152dc81846159dc565b5050506002810160408301806152f18161541c565b90506152fd81846159dc565b5050506003810160608301806153128161541c565b905061531e81846159dc565b5050505050565b6000600282049050600182168061533d57607f821691505b60208210811415615351576153506153e3565b5b50919050565b600061536282615373565b9050919050565b6000819050919050565b600061537e82615450565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000819050919050565b6000813561542981615a44565b80915050919050565b6000601f19601f8301169050919050565b60008160001b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f41535441583a204e6f206275792067726561746572207468616e20312e31206260008201527f696c6c696f6e2063616e206265206d61646520666f722074686520666972737460208201527f203130206d696e757465732e2000000000000000000000000000000000000000604082015250565b7f41535441583a2054726164696e67206973207061757365642e20000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373206f7220657175616c2074686160008201527f6e20746f74616c207265666c656374696f6e7300000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7f41535441583a204164647265737320697320626c61636b6c69737465642e2000600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f41535441583a2054726164696e67206973206e6f74206c697665207965742e20600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f41535441583a204e65656420746f207761697420756e74696c206e657874207460008201527f72616e736665722e200000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f41535441583a2054726164696e6720697320616c726561647920656e61626c6560008201527f642e200000000000000000000000000000000000000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b7f41535441583a20436f6f6c646f776e2076616c756520746f6f206c617267652e60008201527f2000000000000000000000000000000000000000000000000000000000000000602082015250565b7f41535441583a2043616e277420626c6f636b20756e69737761702e2000000000600082015250565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6159b884615443565b9350801983169250808416831791505092915050565b6159d8828261529d565b5050565b6159e582615258565b6159f86159f182615412565b835461598c565b8255505050565b615a088161517b565b8114615a1357600080fd5b50565b615a1f8161518d565b8114615a2a57600080fd5b50565b615a368161519f565b8114615a4157600080fd5b50565b615a4d816151d5565b8114615a5857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb7c799f0302d690c2e828bafd230f7e2d369eb59aa104f00366bba49a0b2c5a64736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102975760003560e01c8063790ca4131161015a578063c9567bf9116100c1578063dd62ed3e1161007a578063dd62ed3e14610a1b578063ee9e20c614610a58578063f2fde38b14610a81578063f9f92be414610aaa578063fc1ca33c14610ae7578063ff142f9714610b105761029e565b8063c9567bf91461092d578063cea2085114610944578063d246d4111461096f578063d2d7ad831461099a578063d8306786146109c5578063d85ff2ff146109f05761029e565b8063a091273b11610113578063a091273b1461080d578063a457c2d714610838578063a9059cbb14610875578063aee50b1e146108b2578063bad291ab146108db578063c29632bd146109045761029e565b8063790ca413146106f957806381f181431461072457806381f651aa1461074f5780638da5cb5b1461077a57806395d89b41146107a55780639b19251a146107d05761029e565b8063313ce567116101fe578063497f3eeb116101b7578063497f3eeb146105fd5780634ada218b1461062857806353d6fd59146106535780635d098b381461067c57806370a08231146106a5578063715018a6146106e25761029e565b8063313ce567146104ed5780633155c4ba1461051857806339509351146105415780633ff42b921461057e57806341d72548146105a95780634563f30a146105d25761029e565b80631eb7caba116102505780631eb7caba146103b5578063216fb989146103f457806323b872dd1461041f5780632c66562b1461045c5780632d838119146104855780632f5b1564146104c25761029e565b806306fdde03146102a357806307d51141146102ce578063095ea7b3146102f9578063153b0d1e146103365780631694505e1461035f57806318160ddd1461038a5761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610b3b565b6040516102c59190614b3c565b60405180910390f35b3480156102da57600080fd5b506102e3610bcd565b6040516102f09190614d9e565b60405180910390f35b34801561030557600080fd5b50610320600480360381019061031b919061452c565b610bd3565b60405161032d9190614aba565b60405180910390f35b34801561034257600080fd5b5061035d600480360381019061035891906144f0565b610bf1565b005b34801561036b57600080fd5b50610374610da5565b6040516103819190614ad5565b60405180910390f35b34801561039657600080fd5b5061039f610dcb565b6040516103ac9190614d9e565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d791906143ea565b610df0565b6040516103eb93929190614e43565b60405180910390f35b34801561040057600080fd5b50610409610e1a565b6040516104169190614aba565b60405180910390f35b34801561042b57600080fd5b50610446600480360381019061044191906144a1565b610ebb565b6040516104539190614aba565b60405180910390f35b34801561046857600080fd5b50610483600480360381019061047e9190614591565b610f94565b005b34801561049157600080fd5b506104ac60048036038101906104a79190614591565b61105e565b6040516104b99190614d9e565b60405180910390f35b3480156104ce57600080fd5b506104d76110cc565b6040516104e49190614a84565b60405180910390f35b3480156104f957600080fd5b506105026110f2565b60405161050f9190614e7a565b60405180910390f35b34801561052457600080fd5b5061053f600480360381019061053a9190614568565b6110fb565b005b34801561054d57600080fd5b506105686004803603810190610563919061452c565b6111a2565b6040516105759190614aba565b60405180910390f35b34801561058a57600080fd5b50610593611255565b6040516105a09190614a9f565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614591565b61127b565b005b3480156105de57600080fd5b506105e7611345565b6040516105f49190614aba565b60405180910390f35b34801561060957600080fd5b50610612611358565b60405161061f9190614a9f565b60405180910390f35b34801561063457600080fd5b5061063d61137e565b60405161064a9190614aba565b60405180910390f35b34801561065f57600080fd5b5061067a600480360381019061067591906144f0565b611391565b005b34801561068857600080fd5b506106a3600480360381019061069e919061443c565b611468565b005b3480156106b157600080fd5b506106cc60048036038101906106c791906143ea565b611528565b6040516106d99190614d9e565b60405180910390f35b3480156106ee57600080fd5b506106f7611579565b005b34801561070557600080fd5b5061070e6116b3565b60405161071b9190614d9e565b60405180910390f35b34801561073057600080fd5b506107396116b9565b6040516107469190614aba565b60405180910390f35b34801561075b57600080fd5b50610764611801565b6040516107719190614a84565b60405180910390f35b34801561078657600080fd5b5061078f611827565b60405161079c9190614a84565b60405180910390f35b3480156107b157600080fd5b506107ba611850565b6040516107c79190614b3c565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f291906143ea565b6118e2565b6040516108049190614aba565b60405180910390f35b34801561081957600080fd5b50610822611902565b60405161082f9190614d9e565b60405180910390f35b34801561084457600080fd5b5061085f600480360381019061085a919061452c565b611908565b60405161086c9190614aba565b60405180910390f35b34801561088157600080fd5b5061089c6004803603810190610897919061452c565b6119d5565b6040516108a99190614aba565b60405180910390f35b3480156108be57600080fd5b506108d960048036038101906108d49190614591565b6119f3565b005b3480156108e757600080fd5b5061090260048036038101906108fd91906143ea565b611a79565b005b34801561091057600080fd5b5061092b60048036038101906109269190614591565b611b39565b005b34801561093957600080fd5b50610942611c03565b005b34801561095057600080fd5b50610959611cf3565b6040516109669190614a84565b60405180910390f35b34801561097b57600080fd5b50610984611d0b565b6040516109919190614a84565b60405180910390f35b3480156109a657600080fd5b506109af611d11565b6040516109bc9190614d9e565b60405180910390f35b3480156109d157600080fd5b506109da611d17565b6040516109e79190614aba565b60405180910390f35b3480156109fc57600080fd5b50610a05611d2a565b604051610a129190614d9e565b60405180910390f35b348015610a2757600080fd5b50610a426004803603810190610a3d9190614465565b611d30565b604051610a4f9190614d9e565b60405180910390f35b348015610a6457600080fd5b50610a7f6004803603810190610a7a9190614591565b611db7565b005b348015610a8d57600080fd5b50610aa86004803603810190610aa391906143ea565b611e3d565b005b348015610ab657600080fd5b50610ad16004803603810190610acc91906143ea565b611fe6565b604051610ade9190614aba565b60405180910390f35b348015610af357600080fd5b50610b0e6004803603810190610b0991906145ba565b612006565b005b348015610b1c57600080fd5b50610b256121b0565b604051610b329190614a84565b60405180910390f35b606060048054610b4a90615325565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7690615325565b8015610bc35780601f10610b9857610100808354040283529160200191610bc3565b820191906000526020600020905b815481529060010190602001808311610ba657829003601f168201915b5050505050905090565b60325481565b6000610be7610be0612266565b848461226e565b6001905092915050565b610bf9612266565b73ffffffffffffffffffffffffffffffffffffffff16610c17611827565b73ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6490614c7e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610d0b5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b610d4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4190614d7e565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a610ddb9190614fcf565b64e8d4a51000610deb91906150ed565b905090565b600b6020528060005260406000206000915090508060000154908060010154908060020154905083565b6000610e24612266565b73ffffffffffffffffffffffffffffffffffffffff16610e42611827565b73ffffffffffffffffffffffffffffffffffffffff1614610e98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8f90614c7e565b60405180910390fd5b60004790506000811115610eb357610eb28161dead612439565b5b600191505090565b6000610ec8848484612753565b610f8984610ed4612266565b610f8485604051806060016040528060288152602001615a5c60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f3a612266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c59092919063ffffffff16565b61226e565b600190509392505050565b610f9c612266565b73ffffffffffffffffffffffffffffffffffffffff16610fba611827565b73ffffffffffffffffffffffffffffffffffffffff1614611010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100790614c7e565b60405180910390fd5b603c811115611054576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104b90614d5e565b60405180910390fd5b80600d8190555050565b60006003548211156110a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109c90614bfe565b60405180910390fd5b60006110af61371a565b90506110c4818461223a90919063ffffffff16565b915050919050565b602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009905090565b611103612266565b73ffffffffffffffffffffffffffffffffffffffff16611121611827565b73ffffffffffffffffffffffffffffffffffffffff1614611177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116e90614c7e565b60405180910390fd5b80603160006101000a81548160ff021916908315150217905550801561119f57426032819055505b50565b600061124b6111af612266565b8461124685600260006111c0612266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b61226e565b6001905092915050565b602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611283612266565b73ffffffffffffffffffffffffffffffffffffffff166112a1611827565b73ffffffffffffffffffffffffffffffffffffffff16146112f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ee90614c7e565b60405180910390fd5b603c81111561133b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133290614d5e565b60405180910390fd5b80600e8190555050565b603160009054906101000a900460ff1681565b602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602b60149054906101000a900460ff1681565b611399612266565b73ffffffffffffffffffffffffffffffffffffffff166113b7611827565b73ffffffffffffffffffffffffffffffffffffffff161461140d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140490614c7e565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611470612266565b73ffffffffffffffffffffffffffffffffffffffff1661148e611827565b73ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db90614c7e565b60405180910390fd5b80602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611572600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105e565b9050919050565b611581612266565b73ffffffffffffffffffffffffffffffffffffffff1661159f611827565b73ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90614c7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b602c5481565b60006116c3612266565b73ffffffffffffffffffffffffffffffffffffffff166116e1611827565b73ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90614c7e565b60405180910390fd5b600061174230611528565b905060008111156117f9576000603054146117cb57600061176460305461105e565b9050600061177b828461376990919063ffffffff16565b9050600081146117b2576117b181602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661377f565b5b60006030819055506117c4823061377f565b50506117f8565b6117f781602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661377f565b5b5b600191505090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461185f90615325565b80601f016020809104026020016040519081016040528092919081815260200182805461188b90615325565b80156118d85780601f106118ad576101008083540402835291602001916118d8565b820191906000526020600020905b8154815290600101906020018083116118bb57829003601f168201915b5050505050905090565b600f6020528060005260406000206000915054906101000a900460ff1681565b602f5481565b60006119cb611915612266565b846119c685604051806060016040528060258152602001615a84602591396002600061193f612266565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136c59092919063ffffffff16565b61226e565b6001905092915050565b60006119e96119e2612266565b8484612753565b6001905092915050565b6119fb612266565b73ffffffffffffffffffffffffffffffffffffffff16611a19611827565b73ffffffffffffffffffffffffffffffffffffffff1614611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6690614c7e565b60405180910390fd5b80602e8190555050565b611a81612266565b73ffffffffffffffffffffffffffffffffffffffff16611a9f611827565b73ffffffffffffffffffffffffffffffffffffffff1614611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec90614c7e565b60405180910390fd5b80602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b41612266565b73ffffffffffffffffffffffffffffffffffffffff16611b5f611827565b73ffffffffffffffffffffffffffffffffffffffff1614611bb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bac90614c7e565b60405180910390fd5b603c811115611bf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf090614d5e565b60405180910390fd5b80600c8190555050565b611c0b612266565b73ffffffffffffffffffffffffffffffffffffffff16611c29611827565b73ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614c7e565b60405180910390fd5b602b60149054906101000a900460ff1615611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690614d1e565b60405180910390fd5b6001602b60146101000a81548160ff02191690831515021790555042602c81905550565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b61dead81565b602e5481565b602d60009054906101000a900460ff1681565b60305481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611dbf612266565b73ffffffffffffffffffffffffffffffffffffffff16611ddd611827565b73ffffffffffffffffffffffffffffffffffffffff1614611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90614c7e565b60405180910390fd5b80602f8190555050565b611e45612266565b73ffffffffffffffffffffffffffffffffffffffff16611e63611827565b73ffffffffffffffffffffffffffffffffffffffff1614611eb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb090614c7e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2090614bbe565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60106020528060005260406000206000915054906101000a900460ff1681565b61200e612266565b73ffffffffffffffffffffffffffffffffffffffff1661202c611827565b73ffffffffffffffffffffffffffffffffffffffff1614612082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207990614c7e565b60405180910390fd5b60008214156120a257806015818161209a91906159ce565b9050506121ac565b60018214156120c25780601981816120ba91906159ce565b9050506121ab565b60028214156120e25780601d81816120da91906159ce565b9050506121aa565b60038214156121025780602181816120fa91906159ce565b9050506121a9565b600482141561212257806025818161211a91906159ce565b9050506121a8565b600582141561214257806011818161213a91906159ce565b9050506121a7565b60068214156121a657806015818161215a91906159ce565b905050806019818161216c91906159ce565b90505080601d818161217e91906159ce565b905050806021818161219091906159ce565b90505080602581816121a291906159ce565b9050505b5b5b5b5b5b5b5050565b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f81565b60008060006121d78585613aa5565b915091508582826040516020016121ef929190614a16565b60405160208183030381529060405280519060200120604051602001612216929190614a42565b6040516020818303038152906040528051906020012060001c925050509392505050565b600081836122489190614f4b565b905092915050565b6000818361225e91906150ed565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590614cfe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561234e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234590614bde565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161242c9190614d9e565b60405180910390a3505050565b6001602d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612497577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156124c55781602001602082028036833780820191505090505b509050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561253057600080fd5b505afa158015612544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125689190614413565b816000815181106125a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612617577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de9584600084866126a961012c4261375390919063ffffffff16565b6040518663ffffffff1660e01b81526004016126c89493929190614af0565b6000604051808303818588803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b50505050507f6fd378a9d8b7345c2e5b18229aaf1e39d32b177b501d0a0d26a0a858a23a9624838260405161272b929190614db9565b60405180910390a1506000602d60006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba90614cde565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614b5e565b60405180910390fd5b60008111612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286d90614c9e565b60405180910390fd5b602b60149054906101000a900460ff16806128da5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061292e5750600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61296d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296490614c5e565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a115750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4790614c3e565b60405180910390fd5b603160009054906101000a900460ff161580612a83575042612a8062093a8060325461375390919063ffffffff16565b11155b612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab990614b9e565b60405180910390fd5b6000604051806080016040528060008152602001600081526020016000815260200160008152509050600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612b8f5750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561362857600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612c315750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612dca5742612c4e610258602c5461375390919063ffffffff16565b10612cb3576009600a612c619190614fcf565b634190ab00612c7091906150ed565b821115612cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca990614b7e565b60405180910390fd5b5b42612d0b600c54600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461375390919063ffffffff16565b10612d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4290614cbe565b60405180910390fd5b42600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550601160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561330f5742612e78600d54600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461375390919063ffffffff16565b10612eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eaf90614cbe565b60405180910390fd5b42600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154118015612fa7575042612fa562015180600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461375390919063ffffffff16565b105b1561303c576000600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555042600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505b600061308e61306c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611528565b61308060648661225090919063ffffffff16565b61223a90919063ffffffff16565b905060156040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509150600181118061311857506001600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154145b1561315557601960405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b60028111806131a757506002600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015410155b156131e457601d60405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b600381111561322557602160405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505091505b6002600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154101561330d576132c66001600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015461375390919063ffffffff16565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156133bb5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156134d75742613418600e54600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461375390919063ffffffff16565b10613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161344f90614cbe565b60405180910390fd5b42600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550602560405180608001604052908160008201548152602001600182015481526020016002820154815260200160038201548152505090505b602d60009054906101000a900460ff161580156135425750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561362757600061355230611528565b9050602e548110613609576000603054146135db57600061357460305461105e565b9050600061358b828461376990919063ffffffff16565b9050600081146135c2576135c181602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661377f565b5b60006030819055506135d4823061377f565b5050613608565b61360781602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661377f565b5b5b6000479050602f548110613624576136238161dead612439565b5b50505b5b602d60009054906101000a900460ff1615613665576040518060800160405280600081526020016000815260200160008152602001600081525090505b6000816000015114801561367d575060008160600151145b801561368d575060008160200151145b801561369d575060008160400151145b156136b2576136ad848484613bd3565b6136bf565b6136be84848484613d8c565b5b50505050565b600083831115829061370d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137049190614b3c565b60405180910390fd5b5082840390509392505050565b600061374e6009600a61372d9190614fcf565b64e8d4a5100061373d91906150ed565b60035461223a90919063ffffffff16565b905090565b600081836137619190614ef5565b905092915050565b600081836137779190615147565b905092915050565b6001602d60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156137dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561380b5781602001602082028036833780820191505090505b5090503081600081518110613849577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156138eb57600080fd5b505afa1580156138ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139239190614413565b8160018151811061395d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139b630737a250d5630b4cf539739df2c5dacb4c659f2488d8561226e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008486426040518663ffffffff1660e01b8152600401613a1a959493929190614de9565b600060405180830381600087803b158015613a3457600080fd5b505af1158015613a48573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78382604051613a7d929190614db9565b60405180910390a1506000602d60006101000a81548160ff0219169083151502179055505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b0e90614c1e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610613b51578284613b54565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bc390614d3e565b60405180910390fd5b9250929050565b6000613bdd61371a565b90506000613bf4828461225090919063ffffffff16565b9050613c4881600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376990919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cdd81600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613d7d9190614d9e565b60405180910390a35050505050565b6000613d9661371a565b90506000613dad828561225090919063ffffffff16565b90506000613dbb858561414b565b90506000613dc882614235565b90506000613dd684836142db565b90506000613de488856142db565b9050613e3885600160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461376990919063ffffffff16565b600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ecd82600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f29836020015160035461376990919063ffffffff16565b600381905550613fa7836040015160016000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b60016000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614078836060015161406a8560000151600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461375390919063ffffffff16565b61375390919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140d4836060015160305461375390919063ffffffff16565b6030819055508873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516141379190614d9e565b60405180910390a350505050505050505050565b61415361433e565b61415b61433e565b61418683602001516141786103e88761223a90919063ffffffff16565b61225090919063ffffffff16565b8160200181815250506141ba83606001516141ac6103e88761223a90919063ffffffff16565b61225090919063ffffffff16565b8160600181815250506141ee83600001516141e06103e88761223a90919063ffffffff16565b61225090919063ffffffff16565b81600001818152505061422283604001516142146103e88761223a90919063ffffffff16565b61225090919063ffffffff16565b8160400181815250508091505092915050565b61423d61433e565b61424561433e565b600061424f61371a565b905061426881856020015161225090919063ffffffff16565b82602001818152505061428881856060015161225090919063ffffffff16565b8260600181815250506142a881856000015161225090919063ffffffff16565b8260000181815250506142c881856040015161225090919063ffffffff16565b8260400181815250508192505050919050565b60006143368260200151614328846060015161431a866040015161430c88600001518a61376990919063ffffffff16565b61376990919063ffffffff16565b61376990919063ffffffff16565b61376990919063ffffffff16565b905092915050565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b600081359050614375816159ff565b92915050565b60008151905061438a816159ff565b92915050565b60008135905061439f81615a16565b92915050565b6000813590506143b481615a2d565b92915050565b6000608082840312156143cc57600080fd5b81905092915050565b6000813590506143e481615a44565b92915050565b6000602082840312156143fc57600080fd5b600061440a84828501614366565b91505092915050565b60006020828403121561442557600080fd5b60006144338482850161437b565b91505092915050565b60006020828403121561444e57600080fd5b600061445c84828501614390565b91505092915050565b6000806040838503121561447857600080fd5b600061448685828601614366565b925050602061449785828601614366565b9150509250929050565b6000806000606084860312156144b657600080fd5b60006144c486828701614366565b93505060206144d586828701614366565b92505060406144e6868287016143d5565b9150509250925092565b6000806040838503121561450357600080fd5b600061451185828601614366565b9250506020614522858286016143a5565b9150509250929050565b6000806040838503121561453f57600080fd5b600061454d85828601614366565b925050602061455e858286016143d5565b9150509250929050565b60006020828403121561457a57600080fd5b6000614588848285016143a5565b91505092915050565b6000602082840312156145a357600080fd5b60006145b1848285016143d5565b91505092915050565b60008060a083850312156145cd57600080fd5b60006145db858286016143d5565b92505060206145ec858286016143ba565b9150509250929050565b6000614602838361462c565b60208301905092915050565b614617816151ec565b82525050565b6146268161518d565b82525050565b6146358161517b565b82525050565b6146448161517b565b82525050565b61465b6146568261517b565b615357565b82525050565b600061466c82614ea5565b6146768185614ec8565b935061468183614e95565b8060005b838110156146b257815161469988826145f6565b97506146a483614ebb565b925050600181019050614685565b5085935050505092915050565b6146c88161519f565b82525050565b6146df6146da826151ab565b615369565b82525050565b6146ee816151fe565b82525050565b6146fd81615222565b82525050565b600061470e82614eb0565b6147188185614ed9565b935061472881856020860161526a565b61473181615432565b840191505092915050565b6000614749602383614ed9565b91506147548261546a565b604082019050919050565b600061476c604d83614ed9565b9150614777826154b9565b606082019050919050565b600061478f601a83614ed9565b915061479a8261552e565b602082019050919050565b60006147b2602683614ed9565b91506147bd82615557565b604082019050919050565b60006147d5602283614ed9565b91506147e0826155a6565b604082019050919050565b60006147f8603383614ed9565b9150614803826155f5565b604082019050919050565b600061481b602583614ed9565b915061482682615644565b604082019050919050565b600061483e602083614eea565b915061484982615693565b602082019050919050565b6000614861601f83614ed9565b915061486c826156bc565b602082019050919050565b6000614884600183614eea565b915061488f826156e5565b600182019050919050565b60006148a7602083614ed9565b91506148b28261570e565b602082019050919050565b60006148ca602083614ed9565b91506148d582615737565b602082019050919050565b60006148ed602983614ed9565b91506148f882615760565b604082019050919050565b6000614910602983614ed9565b915061491b826157af565b604082019050919050565b6000614933602583614ed9565b915061493e826157fe565b604082019050919050565b6000614956602483614ed9565b91506149618261584d565b604082019050919050565b6000614979602383614ed9565b91506149848261589c565b604082019050919050565b600061499c601e83614ed9565b91506149a7826158eb565b602082019050919050565b60006149bf602183614ed9565b91506149ca82615914565b604082019050919050565b60006149e2601c83614ed9565b91506149ed82615963565b602082019050919050565b614a01816151d5565b82525050565b614a10816151df565b82525050565b6000614a22828561464a565b601482019150614a32828461464a565b6014820191508190509392505050565b6000614a4d82614877565b9150614a59828561464a565b601482019150614a6982846146ce565b602082019150614a7882614831565b91508190509392505050565b6000602082019050614a99600083018461463b565b92915050565b6000602082019050614ab4600083018461461d565b92915050565b6000602082019050614acf60008301846146bf565b92915050565b6000602082019050614aea60008301846146e5565b92915050565b6000608082019050614b0560008301876146f4565b8181036020830152614b178186614661565b9050614b26604083018561463b565b614b3360608301846149f8565b95945050505050565b60006020820190508181036000830152614b568184614703565b905092915050565b60006020820190508181036000830152614b778161473c565b9050919050565b60006020820190508181036000830152614b978161475f565b9050919050565b60006020820190508181036000830152614bb781614782565b9050919050565b60006020820190508181036000830152614bd7816147a5565b9050919050565b60006020820190508181036000830152614bf7816147c8565b9050919050565b60006020820190508181036000830152614c17816147eb565b9050919050565b60006020820190508181036000830152614c378161480e565b9050919050565b60006020820190508181036000830152614c5781614854565b9050919050565b60006020820190508181036000830152614c778161489a565b9050919050565b60006020820190508181036000830152614c97816148bd565b9050919050565b60006020820190508181036000830152614cb7816148e0565b9050919050565b60006020820190508181036000830152614cd781614903565b9050919050565b60006020820190508181036000830152614cf781614926565b9050919050565b60006020820190508181036000830152614d1781614949565b9050919050565b60006020820190508181036000830152614d378161496c565b9050919050565b60006020820190508181036000830152614d578161498f565b9050919050565b60006020820190508181036000830152614d77816149b2565b9050919050565b60006020820190508181036000830152614d97816149d5565b9050919050565b6000602082019050614db360008301846149f8565b92915050565b6000604082019050614dce60008301856149f8565b8181036020830152614de08184614661565b90509392505050565b600060a082019050614dfe60008301886149f8565b614e0b60208301876146f4565b8181036040830152614e1d8186614661565b9050614e2c606083018561460e565b614e3960808301846149f8565b9695505050505050565b6000606082019050614e5860008301866149f8565b614e6560208301856149f8565b614e7260408301846149f8565b949350505050565b6000602082019050614e8f6000830184614a07565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614f00826151d5565b9150614f0b836151d5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614f4057614f3f615385565b5b828201905092915050565b6000614f56826151d5565b9150614f61836151d5565b925082614f7157614f706153b4565b5b828204905092915050565b6000808291508390505b6001851115614fc657808604811115614fa257614fa1615385565b5b6001851615614fb15780820291505b8081029050614fbf8561545d565b9450614f86565b94509492505050565b6000614fda826151d5565b9150614fe5836151df565b92506150127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461501a565b905092915050565b60008261502a57600190506150e6565b8161503857600090506150e6565b816001811461504e576002811461505857615087565b60019150506150e6565b60ff84111561506a57615069615385565b5b8360020a91508482111561508157615080615385565b5b506150e6565b5060208310610133831016604e8410600b84101617156150bc5782820a9050838111156150b7576150b6615385565b5b6150e6565b6150c98484846001614f7c565b925090508184048111156150e0576150df615385565b5b81810290505b9392505050565b60006150f8826151d5565b9150615103836151d5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561513c5761513b615385565b5b828202905092915050565b6000615152826151d5565b915061515d836151d5565b9250828210156151705761516f615385565b5b828203905092915050565b6000615186826151b5565b9050919050565b6000615198826151b5565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006151f782615234565b9050919050565b600061520982615210565b9050919050565b600061521b826151b5565b9050919050565b600061522d826151d5565b9050919050565b600061523f82615246565b9050919050565b6000615251826151b5565b9050919050565b6000615263826151d5565b9050919050565b60005b8381101561528857808201518184015260208101905061526d565b83811115615297576000848401525b50505050565b6000810160008301806152af8161541c565b90506152bb81846159dc565b5050506001810160208301806152d08161541c565b90506152dc81846159dc565b5050506002810160408301806152f18161541c565b90506152fd81846159dc565b5050506003810160608301806153128161541c565b905061531e81846159dc565b5050505050565b6000600282049050600182168061533d57607f821691505b60208210811415615351576153506153e3565b5b50919050565b600061536282615373565b9050919050565b6000819050919050565b600061537e82615450565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000819050919050565b6000813561542981615a44565b80915050919050565b6000601f19601f8301169050919050565b60008160001b9050919050565b60008160601b9050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f41535441583a204e6f206275792067726561746572207468616e20312e31206260008201527f696c6c696f6e2063616e206265206d61646520666f722074686520666972737460208201527f203130206d696e757465732e2000000000000000000000000000000000000000604082015250565b7f41535441583a2054726164696e67206973207061757365642e20000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373206f7220657175616c2074686160008201527f6e20746f74616c207265666c656374696f6e7300000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a204944454e544943414c5f4144445260008201527f4553534553000000000000000000000000000000000000000000000000000000602082015250565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7f41535441583a204164647265737320697320626c61636b6c69737465642e2000600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b7f41535441583a2054726164696e67206973206e6f74206c697665207965742e20600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f41535441583a204e65656420746f207761697420756e74696c206e657874207460008201527f72616e736665722e200000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f41535441583a2054726164696e6720697320616c726561647920656e61626c6560008201527f642e200000000000000000000000000000000000000000000000000000000000602082015250565b7f556e697377617056324c6962726172793a205a45524f5f414444524553530000600082015250565b7f41535441583a20436f6f6c646f776e2076616c756520746f6f206c617267652e60008201527f2000000000000000000000000000000000000000000000000000000000000000602082015250565b7f41535441583a2043616e277420626c6f636b20756e69737761702e2000000000600082015250565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6159b884615443565b9350801983169250808416831791505092915050565b6159d8828261529d565b5050565b6159e582615258565b6159f86159f182615412565b835461598c565b8255505050565b615a088161517b565b8114615a1357600080fd5b50565b615a1f8161518d565b8114615a2a57600080fd5b50565b615a368161519f565b8114615a4157600080fd5b50565b615a4d816151d5565b8114615a5857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb7c799f0302d690c2e828bafd230f7e2d369eb59aa104f00366bba49a0b2c5a64736f6c63430008040033

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.