Contract 0x42bfe4a3e023f2c90aebffbd9b667599fa38514f 2

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x19386d84e970142858822bbbd4debb4d55f9e09291fb316506b322c3bdf559d3Approve144711772022-01-18 11:06:541 min ago0x8e39869f1052073067a13d06ff4408ab72bbbaeb IN  Ulti Arena: ULTI Token0 BNB0.000270888
0x1d07c0784ed3ee31a72abd8b8f52dd57e3c17c29986afa679a56521ed19a52c4Approve144711022022-01-18 11:02:575 mins ago0xff2112fa77dd6a86a3b8948c6e0af564c1898f23 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0x893adc02585f753022769d17ce28d85a1bddcd403f7814402dbdadb51371b4a4Approve144710802022-01-18 11:01:437 mins ago0xe000e761fc5e6fefec3b2b546457ee12185a47f1 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0x5699b201e80d70363e2a0ab6cfc3b4f506c203b47c30abc6b66834f6dc2c9e64Approve144710662022-01-18 11:01:007 mins ago0x3a65705eb271a9b3787103894e4ca60f66699cf0 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x1e6716bc950ae9647a2801316707f857098a16d34388b1a4091e40010c7706faApprove144710582022-01-18 11:00:368 mins ago0x3a65705eb271a9b3787103894e4ca60f66699cf0 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x40f4852007e7690dfa2794587b759771baab37462f77affa332c5053be7201aaApprove144710412022-01-18 10:59:458 mins ago0xff2112fa77dd6a86a3b8948c6e0af564c1898f23 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0x23e544de7ba071849b783652a36dff2c64932edf64246759229d40f890a324ecApprove144710312022-01-18 10:59:159 mins ago0x0ac883505d25fe726481e10d1e36d5f4616beb48 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0x888046622bcc8635686e7fb7002c99af4211fa92b38d9756cc39719d9869d20dApprove144710262022-01-18 10:59:009 mins ago0x3a65705eb271a9b3787103894e4ca60f66699cf0 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0xb99b5542d5c29d2a1578285af1e4dcb9f7e24dc02915963c09a8b5e90424668eApprove144710112022-01-18 10:58:1510 mins ago0x3a65705eb271a9b3787103894e4ca60f66699cf0 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0x4bbe976df1c87391c76d6969a292d723bb8046ed5661fe9b9b64fe9c1781bd60Approve144709962022-01-18 10:57:3011 mins ago0x3a65705eb271a9b3787103894e4ca60f66699cf0 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x9ec7aca0e48eec610aa355d5cd5bf3eaafd648c51e5754dade31c960566966aaApprove144709842022-01-18 10:56:5411 mins ago0x3abb2336ee6b29b6260ed497adcea631af1febf4 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0xa5ad448a56d6f0e80cc25c738c502c07df7ba51b7efaad1f04a94a6e00c70e1aApprove144709152022-01-18 10:53:2715 mins ago0x9508ae409624fdfb3a27541f2e551a199f77d060 IN  Ulti Arena: ULTI Token0 BNB0.00022574
0xced4fd8370892c4faafbb8e242389474ec2571f244afd8706fe695edb18ad63eApprove144708932022-01-18 10:52:2116 mins ago0x4309e152d2c5d9e03a06fbdc248c152436867151 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0x598fc5193cdb3bb9ab4117c45fed970ff43cac1f714d4bb00fce392c32c4c774Approve144708632022-01-18 10:50:5117 mins ago0x34965e73d87c3406a502b1efa29c3d83a25be426 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0xbfa7e1081c09c4090c59ad8d049ce390bb62ac3e56f1f2fd7c1da284f3cdd199Approve144708402022-01-18 10:49:4219 mins ago0x3a65705eb271a9b3787103894e4ca60f66699cf0 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x7ad083d17ea81689132f456637bee2e0e43273dc1f85433cab7af6cb81e63167Approve144708182022-01-18 10:48:3620 mins ago0x3a65705eb271a9b3787103894e4ca60f66699cf0 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0x4385d504c35c2ae16489d7b52a97dfd63f72a1ce3f5451b91035a48e19283858Approve144708092022-01-18 10:48:0920 mins ago0xdce1768152dce29a9cc5f2343df8cf9beda3f64e IN  Ulti Arena: ULTI Token0 BNB0.0002243
0xfdfaf2b6ffbaab6dcec8fde6ca8e228d65e15fbf9d80ebe2d882dcf2bdb89e83Approve144707432022-01-18 10:44:5123 mins ago0xa9430254bcfbbf4c504e1eeb7c526e8f1ac04141 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x041f5f15c140b4a9088c2c66070429847d9d3a8bdd511f7664c140370eb9af5eApprove144707242022-01-18 10:43:5424 mins ago0x6ad968dd2637dabd7038e04adf28c35bc82578bc IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x921f14881d717333f5e1f0b97b09bd1065dd9c47a9b9fb7c0641001c9e749f3eApprove144707212022-01-18 10:43:4524 mins ago0x50ce00d68619e68cec11e18a340089708e739052 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x3202cb45ebe0bb4c8b4cb8894b35ebda962805dc493fc07236776c70c8f4a7afApprove144707132022-01-18 10:43:2125 mins ago0xa9430254bcfbbf4c504e1eeb7c526e8f1ac04141 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x13eea174a70e9c3613cf62cba0b87030898908ac7f8273143fc915f05930d21cApprove144707022022-01-18 10:42:4825 mins ago0x50ce00d68619e68cec11e18a340089708e739052 IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x342746ba11d44f23a5f29bf9329f6c5f99b3bd5db47779e1f846ea829a471898Approve144706742022-01-18 10:41:2427 mins ago0xa9430254bcfbbf4c504e1eeb7c526e8f1ac04141 IN  Ulti Arena: ULTI Token0 BNB0.0002243
0x1150af20648631e8e46e7b5b5ac5744fa83abde1e912b0859706e35bb7217543Approve144706012022-01-18 10:37:4131 mins ago0x6ad968dd2637dabd7038e04adf28c35bc82578bc IN  Ulti Arena: ULTI Token0 BNB0.0001283
0x82bfee3e7a1a0a31b94cce2aba46b33adc04dd6f7909980ef67e3b8d4cd95189Approve144705562022-01-18 10:35:2633 mins ago0x6ad968dd2637dabd7038e04adf28c35bc82578bc IN  Ulti Arena: ULTI Token0 BNB0.0001283
[ Download CSV Export 

OVERVIEW

Ulti Arena (ULTI) is a community and NFT marketplace for Gaming Artists, Developers, and Players that was for empowering artists and creating opportunities. It’s the place for artists to showcase their work and for gaming enthusiasts to enjoy the creations from the gaming world.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xd7d4a241df01a35419bee1fbf45b5d2a75ac6e7148f9011af346f631dedd8a12123876412021-11-05 11:58:4873 days 23 hrs ago Ulti Arena: ULTI Token PancakeSwap: Router v20.163648677220689318 BNB
0xd7d4a241df01a35419bee1fbf45b5d2a75ac6e7148f9011af346f631dedd8a12123876412021-11-05 11:58:4873 days 23 hrs ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.163648677220689318 BNB
0x9c407666d687af131b39c3921215c053fbe0029d77e2a6f02545198e3126e998123872362021-11-05 11:38:2373 days 23 hrs ago Ulti Arena: ULTI Token PancakeSwap: Router v20.175842570792656552 BNB
0x9c407666d687af131b39c3921215c053fbe0029d77e2a6f02545198e3126e998123872362021-11-05 11:38:2373 days 23 hrs ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.175842570792656552 BNB
0xc14fcd6a0ec3241769d0893875f26a14267c0177def9aebbefc6d2d4736980e8123869942021-11-05 11:26:1373 days 23 hrs ago Ulti Arena: ULTI Token PancakeSwap: Router v20.171060837637487263 BNB
0xc14fcd6a0ec3241769d0893875f26a14267c0177def9aebbefc6d2d4736980e8123869942021-11-05 11:26:1373 days 23 hrs ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.171060837637487263 BNB
0xedb7865389680bc5eaa2d20bb136213050fa2f713dcc302d5cb7dad419dab861123868982021-11-05 11:21:2573 days 23 hrs ago Ulti Arena: ULTI Token PancakeSwap: Router v20.155305307785427836 BNB
0xedb7865389680bc5eaa2d20bb136213050fa2f713dcc302d5cb7dad419dab861123868982021-11-05 11:21:2573 days 23 hrs ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.155305307785427836 BNB
0xfd793e172205b335ee3dab33f5aab39deebf2c3f2e7dc33694ea2b0477813251123867802021-11-05 11:15:3173 days 23 hrs ago Ulti Arena: ULTI Token PancakeSwap: Router v20.159623579501975785 BNB
0xfd793e172205b335ee3dab33f5aab39deebf2c3f2e7dc33694ea2b0477813251123867802021-11-05 11:15:3173 days 23 hrs ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.159623579501975785 BNB
0x84e0695e35ee268fc971fcc94522aa3b9b4349d812f5750d6e061e18dc7d477d123863812021-11-05 10:55:3474 days 13 mins ago Ulti Arena: ULTI Token PancakeSwap: Router v20.158066682217526655 BNB
0x84e0695e35ee268fc971fcc94522aa3b9b4349d812f5750d6e061e18dc7d477d123863812021-11-05 10:55:3474 days 13 mins ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.158066682217526655 BNB
0x0daa8ae6ed355b323c63a39e5800f6421c0a82897acf2fdeebf70f2162f12c23123862162021-11-05 10:47:1974 days 21 mins ago Ulti Arena: ULTI Token PancakeSwap: Router v20.172782914626969565 BNB
0x0daa8ae6ed355b323c63a39e5800f6421c0a82897acf2fdeebf70f2162f12c23123862162021-11-05 10:47:1974 days 21 mins ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.172782914626969565 BNB
0xec1f680eabe107f2a7b9b280169ec310de4d632d07d055ac375026d4583746f4123861052021-11-05 10:41:4674 days 26 mins ago Ulti Arena: ULTI Token PancakeSwap: Router v20.157552750509356636 BNB
0xec1f680eabe107f2a7b9b280169ec310de4d632d07d055ac375026d4583746f4123861052021-11-05 10:41:4674 days 26 mins ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.157552750509356636 BNB
0xac38ec37b9a68684b6e6261c17a96dc1a2088d0ff443602ea512a44e82af7b2d123858112021-11-05 10:27:0474 days 41 mins ago Ulti Arena: ULTI Token PancakeSwap: Router v20.164973954253382905 BNB
0xac38ec37b9a68684b6e6261c17a96dc1a2088d0ff443602ea512a44e82af7b2d123858112021-11-05 10:27:0474 days 41 mins ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.164973954253382905 BNB
0xa72a5bed6ad13f9b1d186dfba65281b2294e05a011a8b0776f8502eead2c37fa123854962021-11-05 10:10:5374 days 57 mins ago Ulti Arena: ULTI Token PancakeSwap: Router v20.158725136598148032 BNB
0xa72a5bed6ad13f9b1d186dfba65281b2294e05a011a8b0776f8502eead2c37fa123854962021-11-05 10:10:5374 days 57 mins ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.158725136598148032 BNB
0xfae4a1ce75f3c64c9f8e139015e1abee134560371c3a37a01227082d9b269463123853002021-11-05 10:00:2874 days 1 hr ago Ulti Arena: ULTI Token PancakeSwap: Router v20.177910313870550009 BNB
0xfae4a1ce75f3c64c9f8e139015e1abee134560371c3a37a01227082d9b269463123853002021-11-05 10:00:2874 days 1 hr ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.177910313870550009 BNB
0x7948fdea1a0d301670042f05fd19768755cddf07469cabb174b3aa200ebd029e123851112021-11-05 9:51:0174 days 1 hr ago Ulti Arena: ULTI Token PancakeSwap: Router v20.179425454948723021 BNB
0x7948fdea1a0d301670042f05fd19768755cddf07469cabb174b3aa200ebd029e123851112021-11-05 9:51:0174 days 1 hr ago PancakeSwap: Router v2 Ulti Arena: ULTI Token0.179425454948723021 BNB
0x7ac3f0fdc43fcf4025533ec94e427d3ad6369e3176ed7148c85021064d322085123847882021-11-05 9:34:5274 days 1 hr ago Ulti Arena: ULTI Token PancakeSwap: Router v20.178509202150939734 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UltiCoin

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 9 : UltiCoin.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

import './interfaces/IBEP20.sol';
import './extensions/TokensLiquify.sol';
import '@openzeppelin/contracts/access/Ownable.sol';
import '@openzeppelin/contracts/utils/structs/EnumerableSet.sol';

/*
 *    |  \  |  \|  \      |        \|      \       /      \           |  \
 *    | $$  | $$| $$       \$$$$$$$$ \$$$$$$      |  $$$$$$\  ______   \$$ _______
 *    | $$  | $$| $$         | $$     | $$        | $$   \$$ /      \ |  \|       \
 *    | $$  | $$| $$         | $$     | $$        | $$      |  $$$$$$\| $$| $$$$$$$\
 *    | $$  | $$| $$         | $$     | $$        | $$   __ | $$  | $$| $$| $$  | $$
 *    | $$__/ $$| $$_____    | $$    _| $$_       | $$__/  \| $$__/ $$| $$| $$  | $$
 *     \$$    $$| $$     \   | $$   |   $$ \       \$$    $$ \$$    $$| $$| $$  | $$
 *      \$$$$$$  \$$$$$$$$    \$$    \$$$$$$        \$$$$$$   \$$$$$$  \$$ \$$   \$$
 */

contract UltiCoin is IBEP20, Ownable, TokensLiquify {
    using EnumerableSet for EnumerableSet.AddressSet;

    struct AccountStatus {
        bool feeExcluded;
        bool accountLimitExcluded;
        bool transferLimitExcluded;
        bool blacklistedBot;
        uint256 swapCooldown;
    }

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

    EnumerableSet.AddressSet private _excludedFromReward;
    mapping(address => AccountStatus) private statuses;

    uint256 private _tTotal = 250 * 1e9 * 1e18;
    uint256 private _rTotal = (type(uint256).max - (type(uint256).max % _tTotal));

    string public constant override name = 'ULTI Coin';
    string public constant override symbol = 'ULTI';
    uint8 public constant override decimals = 18;

    uint256 public tFeeTotal;
    uint256 public tBurnTotal;
    uint256 public tLiquidityTotal;

    uint8 public tFeePercent = 2;
    uint8 public tBurnPercent = 2;
    uint8 public tLiquidityPercent = 2;

    uint256 public accountLimit;
    uint256 public singleTransferLimit;
    uint256 public swapCooldownDuration;

    uint256 public launchTime;

    event RewardExclusion(address indexed account, bool isExcluded);
    event FeeExclusion(address indexed account, bool isExcluded);
    event AccountLimitExclusion(address indexed account, bool isExcluded);
    event TransferLimitExclusion(address indexed account, bool isExcluded);

    constructor(address owner, address router) {
        // Transfer ownership to given address
        transferOwnership(owner);

        // Set router and create swap pair
        _setRouterAddress(router);

        // Exclude the owner and this contract from transfer restrictions
        statuses[owner] = AccountStatus(true, true, true, false, 0);
        statuses[address(this)] = AccountStatus(true, true, true, false, 0);

        // Exclude swap pair and swap router from account limit
        statuses[swapPair].accountLimitExcluded = true;
        statuses[address(swapRouter)].accountLimitExcluded = true;

        // Set initial settings
        accountLimit = 200 * 10e6 * (10**uint256(decimals));
        singleTransferLimit = 10 * 10e6 * (10**uint256(decimals));
        swapCooldownDuration = 1 minutes;
        minAmountToLiquify = 5000 * (10**uint256(decimals));

        // Assign initial supply to the owner
        _rOwned[owner] = _rTotal;
        emit Transfer(address(0), owner, _tTotal);
    }

    function getOwner() external view override returns (address) {
        return owner();
    }

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

    function balanceOf(address account) external view override returns (uint256) {
        return _balanceOf(account);
    }

    function totalSupply() external view override returns (uint256) {
        return _tTotal;
    }

    function getAccountStatus(address account)
        external
        view
        returns (
            bool,
            bool,
            bool,
            bool,
            bool
        )
    {
        return (
            _isExcludedFromReward(account),
            statuses[account].feeExcluded,
            statuses[account].accountLimitExcluded,
            statuses[account].transferLimitExcluded,
            statuses[account].blacklistedBot
        );
    }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        return true;
    }

    function reflect(uint256 tAmount) external {
        address account = msg.sender;
        require(!_isExcludedFromReward(account), 'Reflect from excluded address');
        require(_balanceOf(account) >= tAmount, 'Reflect amount exceeds sender balance');

        uint256 currentRate = _getRate();
        _rOwned[account] = _rOwned[account] - (tAmount * currentRate);
        _reflectFeeAndBurn(tAmount, 0, currentRate);
    }

    function burn(uint256 amount) external {
        _burn(msg.sender, amount);
    }

    function burnFrom(address account, uint256 amount) external {
        _approve(account, msg.sender, _allowances[account][msg.sender] - amount);
        _burn(account, amount);
    }

    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue);
        return true;
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) {
        require(tAmount <= _tTotal, 'Amount must be less than supply');
        uint256 currentRate = _getRate();
        if (!deductTransferFee) {
            return tAmount * currentRate;
        } else {
            (uint256 rTransferAmount, , , , ) = _getValues(tAmount, currentRate);
            return rTransferAmount;
        }
    }

    // Owner functions

    function setTax(
        uint8 feePercent,
        uint8 burnPercent,
        uint8 liquidityPercent
    ) external onlyOwner {
        tFeePercent = feePercent;
        tBurnPercent = burnPercent;
        tLiquidityPercent = liquidityPercent;
    }

    function setAccountLimit(uint256 amount) external onlyOwner {
        accountLimit = amount;
    }

    function setSingleTransferLimit(uint256 amount) external onlyOwner {
        singleTransferLimit = amount;
    }

    function setSwapCooldownDuration(uint256 duration) external onlyOwner {
        swapCooldownDuration = duration;
    }

    function launch() external onlyOwner {
        launchTime = block.timestamp;
        isLiquifyingEnabled = true;
    }

    function setRewardExclusion(address account, bool isExcluded) external onlyOwner {
        if (!isExcluded && _excludedFromReward.remove(account)) {
            _rOwned[account] = _tOwned[account] * _getRate();
            _tOwned[account] = 0;
            emit RewardExclusion(account, false);
        } else if (isExcluded) {
            require(account != address(this), 'Cannot exclude coin contract');
            if (!_excludedFromReward.contains(account)) {
                if (_rOwned[account] > 0) {
                    _tOwned[account] = _tokenFromReflection(_rOwned[account]);
                }
                _excludedFromReward.add(account);
                emit RewardExclusion(account, true);
            }
        }
    }

    function setFeeExclusion(address account, bool isExcluded) external onlyOwner {
        statuses[account].feeExcluded = isExcluded;
        emit FeeExclusion(account, isExcluded);
    }

    function setAccountLimitExclusion(address account, bool isExcluded) external onlyOwner {
        statuses[account].accountLimitExcluded = isExcluded;
        emit AccountLimitExclusion(account, isExcluded);
    }

    function setTransferLimitExclusion(address account, bool isExcluded) external onlyOwner {
        statuses[account].transferLimitExcluded = isExcluded;
        emit TransferLimitExclusion(account, isExcluded);
    }

    function setBotsBlacklisting(address[] memory bots, bool isBlacklisted) external onlyOwner {
        for (uint256 i = 0; i < bots.length; i++) {
            statuses[bots[i]].blacklistedBot = isBlacklisted;
        }
    }

    function _isExcludedFromReward(address account) private view returns (bool) {
        return _excludedFromReward.contains(account);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        require(owner != address(0), 'Approve from the zero address');
        require(spender != address(0), 'Approve to the zero address');

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

    function _balanceOf(address account) private view returns (uint256) {
        if (_isExcludedFromReward(account)) return _tOwned[account];
        return _tokenFromReflection(_rOwned[account]);
    }

    function _burn(address account, uint256 tAmount) private {
        require(account != address(0), 'Burn from the zero address');
        require(_balanceOf(account) >= tAmount, 'Burn amount exceeds balance');

        uint256 currentRate = _getRate();
        _rOwned[account] = _rOwned[account] - (tAmount * currentRate);
        if (_isExcludedFromReward(account)) {
            _tOwned[account] = _tOwned[account] - tAmount;
        }
        _reflectFeeAndBurn(0, tAmount, currentRate);
        emit Transfer(account, address(0), tAmount);
    }

    function _tokenFromReflection(uint256 rAmount) private view returns (uint256) {
        require(rAmount <= _rTotal, 'Amount must be less than total reflections');
        uint256 currentRate = _getRate();
        return rAmount / currentRate;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        require(sender != address(0), 'Transfer from the zero address');
        require(recipient != address(0), 'Transfer to the zero address');
        require(amount > 0, 'Transfer amount must be greater than zero');

        _blacklistFrontRunners(sender);

        _checkBotBlacklisting(sender, recipient);
        _checkTransferLimit(sender, recipient, amount);
        _checkAccountLimit(recipient, amount, _balanceOf(recipient));
        _checkSwapCooldown(sender, recipient);

        _tokenTransfer(sender, recipient, amount);

        _liquifyTokens(sender);
    }

    function _blacklistFrontRunners(address sender) private {
        if (launchTime == 0 || block.timestamp < launchTime + 5 seconds) {
            if (sender != swapPair && sender != address(swapRouter) && !statuses[sender].feeExcluded) {
                statuses[sender].blacklistedBot = true;
            }
        }
    }

    function _checkBotBlacklisting(address sender, address recipient) private view {
        require(!statuses[sender].blacklistedBot, 'Sender is blacklisted');
        require(!statuses[recipient].blacklistedBot, 'Recipient is blacklisted');
    }

    function _checkTransferLimit(
        address sender,
        address recipient,
        uint256 amount
    ) private view {
        if (!statuses[sender].transferLimitExcluded && !statuses[recipient].transferLimitExcluded) {
            require(amount <= singleTransferLimit, 'Transfer amount exceeds the limit');
        }
    }

    function _checkAccountLimit(
        address recipient,
        uint256 amount,
        uint256 recipientBalance
    ) private view {
        if (!statuses[recipient].accountLimitExcluded) {
            require(recipientBalance + amount <= accountLimit, 'Recipient has reached account tokens limit');
        }
    }

    function _checkSwapCooldown(address sender, address recipient) private {
        if (swapCooldownDuration > 0 && sender == swapPair && recipient != address(swapRouter)) {
            require(statuses[recipient].swapCooldown < block.timestamp, 'Swap is cooling down');
            statuses[recipient].swapCooldown = block.timestamp + swapCooldownDuration;
        }
    }

    function _liquifyTokens(address sender) private {
        uint256 amountToLiquify = _balanceOf(address(this));
        if (
            isLiquifyingEnabled && !_isInSwapAndLiquify() && sender != swapPair && amountToLiquify >= minAmountToLiquify
        ) {
            if (amountToLiquify > singleTransferLimit) {
                amountToLiquify = singleTransferLimit;
            }
            // approve router to transfer tokens to cover all possible scenarios
            _approve(address(this), address(swapRouter), amountToLiquify);
            _swapAndLiquify(amountToLiquify, owner());
        }
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        bool disableFee = statuses[sender].feeExcluded || statuses[recipient].feeExcluded;

        if (_isExcludedFromReward(sender) && !_isExcludedFromReward(recipient)) {
            _transferFromExcluded(sender, recipient, amount, disableFee);
        } else if (!_isExcludedFromReward(sender) && _isExcludedFromReward(recipient)) {
            _transferToExcluded(sender, recipient, amount, disableFee);
        } else if (_isExcludedFromReward(sender) && _isExcludedFromReward(recipient)) {
            _transferBothExcluded(sender, recipient, amount, disableFee);
        } else {
            _transferStandard(sender, recipient, amount, disableFee);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount,
        bool disableFee
    ) private {
        uint256 currentRate = _getRate();
        (uint256 rTransferAmount, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn) =
            _getValues(tAmount, currentRate, disableFee);
        _rOwned[sender] = _rOwned[sender] - (tAmount * currentRate);
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity, currentRate);
        _reflectFeeAndBurn(tFee, tBurn, currentRate);
        _emitTransfers(sender, recipient, tTransferAmount, tBurn, tLiquidity);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount,
        bool disableFee
    ) private {
        uint256 currentRate = _getRate();
        (uint256 rTransferAmount, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn) =
            _getValues(tAmount, currentRate, disableFee);
        _rOwned[sender] = _rOwned[sender] - (tAmount * currentRate);
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity, currentRate);
        _reflectFeeAndBurn(tFee, tBurn, currentRate);
        _emitTransfers(sender, recipient, tTransferAmount, tBurn, tLiquidity);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount,
        bool disableFee
    ) private {
        uint256 currentRate = _getRate();
        (uint256 rTransferAmount, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn) =
            _getValues(tAmount, currentRate, disableFee);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - (tAmount * currentRate);
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity, currentRate);
        _reflectFeeAndBurn(tFee, tBurn, currentRate);
        _emitTransfers(sender, recipient, tTransferAmount, tBurn, tLiquidity);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount,
        bool disableFee
    ) private {
        uint256 currentRate = _getRate();
        (uint256 rTransferAmount, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn) =
            _getValues(tAmount, currentRate, disableFee);
        _tOwned[sender] = _tOwned[sender] - tAmount;
        _rOwned[sender] = _rOwned[sender] - (tAmount * currentRate);
        _tOwned[recipient] = _tOwned[recipient] + tTransferAmount;
        _rOwned[recipient] = _rOwned[recipient] + rTransferAmount;
        _takeLiquidity(tLiquidity, currentRate);
        _reflectFeeAndBurn(tFee, tBurn, currentRate);
        _emitTransfers(sender, recipient, tTransferAmount, tBurn, tLiquidity);
    }

    function _emitTransfers(
        address sender,
        address recipient,
        uint256 tTransferAmount,
        uint256 tBurn,
        uint256 tLiquidity
    ) private {
        emit Transfer(sender, recipient, tTransferAmount);
        if (tBurn > 0) {
            emit Transfer(sender, address(0), tBurn);
        }
        if (tLiquidity > 0) {
            emit Transfer(sender, address(this), tLiquidity);
        }
    }

    function _takeLiquidity(uint256 tLiquidity, uint256 currentRate) private {
        _rOwned[address(this)] = _rOwned[address(this)] + (tLiquidity * currentRate);
        if (_isExcludedFromReward(address(this))) {
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        }
        tLiquidityTotal = tLiquidityTotal + tLiquidity;
    }

    function _reflectFeeAndBurn(
        uint256 tFee,
        uint256 tBurn,
        uint256 currentRate
    ) private {
        _rTotal = _rTotal - (tFee * currentRate) - (tBurn * currentRate);
        tBurnTotal = tBurnTotal + tBurn;
        tFeeTotal = tFeeTotal + tFee;
        _tTotal = _tTotal - tBurn;
    }

    function _getValues(uint256 tAmount, uint256 currentRate)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return _getValues(tAmount, currentRate, false);
    }

    function _getValues(
        uint256 tAmount,
        uint256 currentRate,
        bool disableFee
    )
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tBurn) = _getTValues(tAmount, disableFee);
        return (
            _getRTransferAmount(tAmount, tFee, tLiquidity, tBurn, currentRate),
            tTransferAmount,
            tFee,
            tLiquidity,
            tBurn
        );
    }

    function _getTValues(uint256 tAmount, bool disableFee)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        if (disableFee) {
            return (tAmount, 0, 0, 0);
        }

        uint256 tFee = (tAmount * tFeePercent) / 100;
        uint256 tLiquidity = (tAmount * tLiquidityPercent) / 100;
        uint256 tBurn = (tAmount * tBurnPercent) / 100;
        uint256 tTransferAmount = tAmount - tFee - tLiquidity - tBurn;
        return (tTransferAmount, tFee, tLiquidity, tBurn);
    }

    function _getRTransferAmount(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 tBurn,
        uint256 currentRate
    ) private pure returns (uint256) {
        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rLiquidity = tLiquidity * currentRate;
        uint256 rBurn = tBurn * currentRate;
        return rAmount - rFee - rLiquidity - rBurn;
    }

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excludedFromReward.length(); i++) {
            address excluded = _excludedFromReward.at(i);
            if (_rOwned[excluded] > rSupply || _tOwned[excluded] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[excluded];
            tSupply = tSupply - _tOwned[excluded];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

File 2 of 9 : IBEP20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

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

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

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

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

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

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

File 3 of 9 : TokensLiquify.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.6;

import '../interfaces/IPancakeFactory.sol';
import '../interfaces/IPancakeRouter02.sol';
import '@openzeppelin/contracts/access/Ownable.sol';

contract TokensLiquify is Ownable {
    bool private isInSwapAndLiquify;

    IPancakeRouter02 public swapRouter;
    address public swapPair;

    bool public isLiquifyingEnabled;
    uint256 public minAmountToLiquify;

    event TokensSwapped(uint256 tokensSwapped, uint256 bnbReceived);
    event TokensLiquified(uint256 tokensLiquified, uint256 bnbLiquified, uint256 lpMinted);

    receive() external payable {}

    function withdrawFunds(uint256 amount) external onlyOwner {
        payable(owner()).transfer(amount);
    }

    function switchLiquifying() external onlyOwner {
        isLiquifyingEnabled = !isLiquifyingEnabled;
    }

    function setMinAmountToLiquify(uint256 amount) external onlyOwner {
        minAmountToLiquify = amount;
    }

    function setRouterAddress(address routerAddress_) external onlyOwner {
        _setRouterAddress(routerAddress_);
    }

    function _isInSwapAndLiquify() internal view returns (bool) {
        return isInSwapAndLiquify;
    }

    function _setRouterAddress(address routerAddress_) internal {
        IPancakeRouter02 _swapRouter = IPancakeRouter02(routerAddress_);
        swapPair = IPancakeFactory(_swapRouter.factory()).createPair(address(this), _swapRouter.WETH());
        swapRouter = _swapRouter;
    }

    function _swapAndLiquify(uint256 tokenAmount, address lpReceiver) internal {
        isInSwapAndLiquify = true;
        uint256 firstHalf = tokenAmount / 2;
        uint256 otherHalf = tokenAmount - firstHalf;
        uint256 bnbReceived = _swapTokensForBNB(firstHalf);
        _addLiquidity(otherHalf, bnbReceived, lpReceiver);
        isInSwapAndLiquify = false;
    }

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

        uint256 balance = address(this).balance;
        swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
        uint256 newBalance = address(this).balance;
        uint256 bnbReceived = newBalance - balance;
        emit TokensSwapped(tokenAmount, bnbReceived);
        return bnbReceived;
    }

    function _addLiquidity(
        uint256 tokenAmount,
        uint256 bnbAmount,
        address lpReceiver
    ) private {
        (uint256 amountToken, uint256 amountBNB, uint256 liquidity) =
            swapRouter.addLiquidityETH{value: bnbAmount}(
                address(this),
                tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                lpReceiver,
                block.timestamp
            );
        emit TokensLiquified(amountToken, amountBNB, liquidity);
    }
}

File 4 of 9 : 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 5 of 9 : EnumerableSet.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

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

// Source:
// https://github.com/pancakeswap/pancake-swap-core/blob/master/contracts/interfaces/IPancakeFactory.sol

pragma solidity ^0.8.6;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

File 7 of 9 : IPancakeRouter02.sol
// SPDX-License-Identifier: MIT

// Source:
// https://github.com/pancakeswap/pancake-swap-periphery/blob/master/contracts/interfaces/IPancakeRouter02.sol

pragma solidity ^0.8.6;

import './IPancakeRouter01.sol';

interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

File 8 of 9 : IPancakeRouter01.sol
// SPDX-License-Identifier: MIT

// Source:
// https://github.com/pancakeswap/pancake-swap-periphery/blob/master/contracts/interfaces/IPancakeRouter01.sol

pragma solidity ^0.8.6;

interface IPancakeRouter01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts);
}

File 9 of 9 : 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;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"router","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AccountLimitExclusion","type":"event"},{"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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"FeeExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"RewardExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensLiquified","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbLiquified","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lpMinted","type":"uint256"}],"name":"TokensLiquified","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"}],"name":"TokensSwapped","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"TransferLimitExclusion","type":"event"},{"inputs":[],"name":"accountLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountStatus","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"isLiquifyingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minAmountToLiquify","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setAccountLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setAccountLimitExclusion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"setBotsBlacklisting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setFeeExclusion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinAmountToLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setRewardExclusion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress_","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSingleTransferLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"setSwapCooldownDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"feePercent","type":"uint8"},{"internalType":"uint8","name":"burnPercent","type":"uint8"},{"internalType":"uint8","name":"liquidityPercent","type":"uint8"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"setTransferLimitExclusion","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"singleTransferLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapCooldownDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IPancakeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"switchLiquifying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tBurnPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tBurnTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tFeePercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tLiquidityPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tLiquidityTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526c0327cb2734119d3b7a90000000600a55600a547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000045919062000e24565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000072919062000dab565b600b556002600f60006101000a81548160ff021916908360ff1602179055506002600f60016101000a81548160ff021916908360ff1602179055506002600f60026101000a81548160ff021916908360ff160217905550348015620000d657600080fd5b5060405162006f5c38038062006f5c8339818101604052810190620000fc919062000a5c565b60006200010e6200060460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001bd826200060c60201b60201c565b620001ce81620007cb60201b60201c565b6040518060a001604052806001151581526020016001151581526020016001151581526020016000151581526020016000815250600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff021916908315150217905550608082015181600101559050506040518060a001604052806001151581526020016001151581526020016001151581526020016000151581526020016000815250600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555060808201518160010155905050600160096000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff021916908315150217905550600160096000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff021916908315150217905550601260ff16600a620004db919062000c0d565b6377359400620004ec919062000d4a565b601081905550601260ff16600a62000505919062000c0d565b6305f5e10062000516919062000d4a565b601181905550603c601281905550601260ff16600a62000537919062000c0d565b61138862000546919062000d4a565b600381905550600b54600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620005f4919062000b84565b60405180910390a3505062000f5e565b600033905090565b6200061c6200060460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000642620009ea60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200069b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006929062000b62565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200070e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007059062000b40565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200081757600080fd5b505afa1580156200082c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000852919062000a2a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620008b557600080fd5b505afa158015620008ca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008f0919062000a2a565b6040518363ffffffff1660e01b81526004016200090f92919062000b13565b602060405180830381600087803b1580156200092a57600080fd5b505af11580156200093f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000965919062000a2a565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008151905062000a248162000f44565b92915050565b60006020828403121562000a435762000a4262000eba565b5b600062000a538482850162000a13565b91505092915050565b6000806040838503121562000a765762000a7562000eba565b5b600062000a868582860162000a13565b925050602062000a998582860162000a13565b9150509250929050565b62000aae8162000de6565b82525050565b600062000ac360268362000ba1565b915062000ad08262000ecc565b604082019050919050565b600062000aea60208362000ba1565b915062000af78262000f1b565b602082019050919050565b62000b0d8162000e1a565b82525050565b600060408201905062000b2a600083018562000aa3565b62000b39602083018462000aa3565b9392505050565b6000602082019050818103600083015262000b5b8162000ab4565b9050919050565b6000602082019050818103600083015262000b7d8162000adb565b9050919050565b600060208201905062000b9b600083018462000b02565b92915050565b600082825260208201905092915050565b6000808291508390505b600185111562000c045780860481111562000bdc5762000bdb62000e5c565b5b600185161562000bec5780820291505b808102905062000bfc8562000ebf565b945062000bbc565b94509492505050565b600062000c1a8262000e1a565b915062000c278362000e1a565b925062000c567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000c5e565b905092915050565b60008262000c70576001905062000d43565b8162000c80576000905062000d43565b816001811462000c99576002811462000ca45762000cda565b600191505062000d43565b60ff84111562000cb95762000cb862000e5c565b5b8360020a91508482111562000cd35762000cd262000e5c565b5b5062000d43565b5060208310610133831016604e8410600b841016171562000d145782820a90508381111562000d0e5762000d0d62000e5c565b5b62000d43565b62000d23848484600162000bb2565b9250905081840481111562000d3d5762000d3c62000e5c565b5b81810290505b9392505050565b600062000d578262000e1a565b915062000d648362000e1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000da05762000d9f62000e5c565b5b828202905092915050565b600062000db88262000e1a565b915062000dc58362000e1a565b92508282101562000ddb5762000dda62000e5c565b5b828203905092915050565b600062000df38262000dfa565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600062000e318262000e1a565b915062000e3e8362000e1a565b92508262000e515762000e5062000e8b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000f4f8162000de6565b811462000f5b57600080fd5b50565b615fee8062000f6e6000396000f3fe6080604052600436106102975760003560e01c806370a082311161015a578063a457c2d7116100c1578063d82483581161007a578063d8248358146109d7578063db17fb6f14610a02578063dd62ed3e14610a2b578063f2fde38b14610a68578063f6c4389c14610a91578063fd4fa05a14610abc5761029e565b8063a457c2d7146108b3578063a9059cbb146108f0578063b07793091461092d578063b50a72ac14610958578063c31c9c0714610983578063d72d591b146109ae5761029e565b806379cc67901161011357806379cc6790146107b7578063893d20e8146107e05780638da5cb5b1461080b5780638e5a6abf146108365780638efd5e3b1461085f57806395d89b41146108885761029e565b806370a08231146106bd578063715018a6146106fa5780637247842814610711578063750e6bbb1461073a5780637844c2ea14610763578063790ca4131461078c5761029e565b8063326c8940116101fe5780634c949baa116101b75780634c949baa146105d1578063502e27e0146105fc5780636a9f0e38146106275780636d204f50146106525780636e026d621461067b5780636ed3ec67146106925761029e565b8063326c8940146104af57806335df58ef146104da578063395093511461050557806341cb87fc1461054257806342966c681461056b5780634549b039146105945761029e565b806318160ddd1161025057806318160ddd1461039d57806323b872dd146103c857806326991cc81461040557806330b94cd514610430578063313ce5671461045957806331a75bd0146104845761029e565b806301339c21146102a3578063053ab182146102ba57806306fdde03146102e3578063095ea7b31461030e578063155dd5ee1461034b5780631612d2d7146103745761029e565b3661029e57005b600080fd5b3480156102af57600080fd5b506102b8610afd565b005b3480156102c657600080fd5b506102e160048036038101906102dc9190614d9d565b610b9d565b005b3480156102ef57600080fd5b506102f8610cec565b60405161030591906153b2565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190614d01565b610d25565b6040516103429190615329565b60405180910390f35b34801561035757600080fd5b50610372600480360381019061036d9190614d9d565b610d3c565b005b34801561038057600080fd5b5061039b60048036038101906103969190614d9d565b610e09565b005b3480156103a957600080fd5b506103b2610e8f565b6040516103bf9190615654565b60405180910390f35b3480156103d457600080fd5b506103ef60048036038101906103ea9190614c6e565b610e99565b6040516103fc9190615329565b60405180910390f35b34801561041157600080fd5b5061041a610f43565b6040516104279190615284565b60405180910390f35b34801561043c57600080fd5b5061045760048036038101906104529190614cc1565b610f69565b005b34801561046557600080fd5b5061046e611091565b60405161047b9190615729565b60405180910390f35b34801561049057600080fd5b50610499611096565b6040516104a69190615654565b60405180910390f35b3480156104bb57600080fd5b506104c461109c565b6040516104d19190615654565b60405180910390f35b3480156104e657600080fd5b506104ef6110a2565b6040516104fc9190615729565b60405180910390f35b34801561051157600080fd5b5061052c60048036038101906105279190614d01565b6110b5565b6040516105399190615329565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190614bd4565b611153565b005b34801561057757600080fd5b50610592600480360381019061058d9190614d9d565b6111db565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190614dca565b6111e8565b6040516105c89190615654565b60405180910390f35b3480156105dd57600080fd5b506105e6611272565b6040516105f39190615729565b60405180910390f35b34801561060857600080fd5b50610611611285565b60405161061e9190615329565b60405180910390f35b34801561063357600080fd5b5061063c611298565b6040516106499190615654565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190614e5d565b61129e565b005b34801561068757600080fd5b50610690611370565b005b34801561069e57600080fd5b506106a7611418565b6040516106b49190615654565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df9190614bd4565b61141e565b6040516106f19190615654565b60405180910390f35b34801561070657600080fd5b5061070f611430565b005b34801561071d57600080fd5b5061073860048036038101906107339190614cc1565b61156a565b005b34801561074657600080fd5b50610761600480360381019061075c9190614d9d565b611903565b005b34801561076f57600080fd5b5061078a60048036038101906107859190614d9d565b611989565b005b34801561079857600080fd5b506107a1611a0f565b6040516107ae9190615654565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190614d01565b611a15565b005b3480156107ec57600080fd5b506107f5611ab5565b6040516108029190615284565b60405180910390f35b34801561081757600080fd5b50610820611ac4565b60405161082d9190615284565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190614cc1565b611aed565b005b34801561086b57600080fd5b5061088660048036038101906108819190614d9d565b611c15565b005b34801561089457600080fd5b5061089d611c9b565b6040516108aa91906153b2565b60405180910390f35b3480156108bf57600080fd5b506108da60048036038101906108d59190614d01565b611cd4565b6040516108e79190615329565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190614d01565b611d72565b6040516109249190615329565b60405180910390f35b34801561093957600080fd5b50610942611d89565b60405161094f9190615654565b60405180910390f35b34801561096457600080fd5b5061096d611d8f565b60405161097a9190615729565b60405180910390f35b34801561098f57600080fd5b50610998611da2565b6040516109a59190615397565b60405180910390f35b3480156109ba57600080fd5b506109d560048036038101906109d09190614d41565b611dc8565b005b3480156109e357600080fd5b506109ec611edc565b6040516109f99190615654565b60405180910390f35b348015610a0e57600080fd5b50610a296004803603810190610a249190614cc1565b611ee2565b005b348015610a3757600080fd5b50610a526004803603810190610a4d9190614c2e565b61200a565b604051610a5f9190615654565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a9190614bd4565b612091565b005b348015610a9d57600080fd5b50610aa661223a565b604051610ab39190615654565b60405180910390f35b348015610ac857600080fd5b50610ae36004803603810190610ade9190614bd4565b612240565b604051610af4959493929190615344565b60405180910390f35b610b056123a4565b73ffffffffffffffffffffffffffffffffffffffff16610b23611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7090615574565b60405180910390fd5b426013819055506001600260146101000a81548160ff021916908315150217905550565b6000339050610bab816123ac565b15610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290615534565b60405180910390fd5b81610bf5826123c9565b1015610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906154d4565b60405180910390fd5b6000610c40612470565b90508083610c4e9190615871565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c9891906158cb565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ce783600083612494565b505050565b6040518060400160405280600981526020017f554c544920436f696e000000000000000000000000000000000000000000000081525081565b6000610d3233848461250a565b6001905092915050565b610d446123a4565b73ffffffffffffffffffffffffffffffffffffffff16610d62611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90615574565b60405180910390fd5b610dc0611ac4565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e05573d6000803e3d6000fd5b5050565b610e116123a4565b73ffffffffffffffffffffffffffffffffffffffff16610e2f611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610e85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7c90615574565b60405180910390fd5b8060118190555050565b6000600a54905090565b6000610ea68484846126d5565b610f38843384600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f3391906158cb565b61250a565b600190509392505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f716123a4565b73ffffffffffffffffffffffffffffffffffffffff16610f8f611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614610fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdc90615574565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f7091fe081ceb2a09a20e86451ff5cba0b3ed3a6fc7fb6557147601a616459035826040516110859190615329565b60405180910390a25050565b601281565b600c5481565b60115481565b600f60009054906101000a900460ff1681565b6000611149338484600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461114491906157ea565b61250a565b6001905092915050565b61115b6123a4565b73ffffffffffffffffffffffffffffffffffffffff16611179611ac4565b73ffffffffffffffffffffffffffffffffffffffff16146111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c690615574565b60405180910390fd5b6111d88161284c565b50565b6111e53382612a5d565b50565b6000600a5483111561122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906154f4565b60405180910390fd5b6000611239612470565b90508261125457808461124c9190615871565b91505061126c565b60006112608583612cd1565b50505050905080925050505b92915050565b600f60019054906101000a900460ff1681565b600260149054906101000a900460ff1681565b600d5481565b6112a66123a4565b73ffffffffffffffffffffffffffffffffffffffff166112c4611ac4565b73ffffffffffffffffffffffffffffffffffffffff161461131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190615574565b60405180910390fd5b82600f60006101000a81548160ff021916908360ff16021790555081600f60016101000a81548160ff021916908360ff16021790555080600f60026101000a81548160ff021916908360ff160217905550505050565b6113786123a4565b73ffffffffffffffffffffffffffffffffffffffff16611396611ac4565b73ffffffffffffffffffffffffffffffffffffffff16146113ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e390615574565b60405180910390fd5b600260149054906101000a900460ff1615600260146101000a81548160ff021916908315150217905550565b60125481565b6000611429826123c9565b9050919050565b6114386123a4565b73ffffffffffffffffffffffffffffffffffffffff16611456611ac4565b73ffffffffffffffffffffffffffffffffffffffff16146114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390615574565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115726123a4565b73ffffffffffffffffffffffffffffffffffffffff16611590611ac4565b73ffffffffffffffffffffffffffffffffffffffff16146115e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115dd90615574565b60405180910390fd5b801580156116045750611603826007612cf990919063ffffffff16565b5b1561173757611611612470565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461165b9190615871565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167ff8cf462f0890722c8053b2b639432878f31673c04f338bda3ecb1177082f435b600060405161172a9190615329565b60405180910390a26118ff565b80156118fe573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a3906153f4565b60405180910390fd5b6117c0826007612d2990919063ffffffff16565b6118fd576000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561189857611854600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d59565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6118ac826007612dc090919063ffffffff16565b508173ffffffffffffffffffffffffffffffffffffffff167ff8cf462f0890722c8053b2b639432878f31673c04f338bda3ecb1177082f435b60016040516118f49190615329565b60405180910390a25b5b5b5050565b61190b6123a4565b73ffffffffffffffffffffffffffffffffffffffff16611929611ac4565b73ffffffffffffffffffffffffffffffffffffffff161461197f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197690615574565b60405180910390fd5b8060128190555050565b6119916123a4565b73ffffffffffffffffffffffffffffffffffffffff166119af611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614611a05576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fc90615574565b60405180910390fd5b8060108190555050565b60135481565b611aa7823383600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aa291906158cb565b61250a565b611ab18282612a5d565b5050565b6000611abf611ac4565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611af56123a4565b73ffffffffffffffffffffffffffffffffffffffff16611b13611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614611b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6090615574565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160026101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fd6963e556f3a140104edfbcb0525c250d58aba9c663957b547070e0b081e706882604051611c099190615329565b60405180910390a25050565b611c1d6123a4565b73ffffffffffffffffffffffffffffffffffffffff16611c3b611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614611c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8890615574565b60405180910390fd5b8060038190555050565b6040518060400160405280600481526020017f554c54490000000000000000000000000000000000000000000000000000000081525081565b6000611d68338484600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d6391906158cb565b61250a565b6001905092915050565b6000611d7f3384846126d5565b6001905092915050565b600e5481565b600f60029054906101000a900460ff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611dd06123a4565b73ffffffffffffffffffffffffffffffffffffffff16611dee611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90615574565b60405180910390fd5b60005b8251811015611ed7578160096000858481518110611e6857611e67615ac4565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160036101000a81548160ff0219169083151502179055508080611ecf906159ee565b915050611e47565b505050565b60035481565b611eea6123a4565b73ffffffffffffffffffffffffffffffffffffffff16611f08611ac4565b73ffffffffffffffffffffffffffffffffffffffff1614611f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5590615574565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160016101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167ff2957fc8824da1387f07d42a7166047700b4182572afb6e4044e15cfa7b52dd882604051611ffe9190615329565b60405180910390a25050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120996123a4565b73ffffffffffffffffffffffffffffffffffffffff166120b7611ac4565b73ffffffffffffffffffffffffffffffffffffffff161461210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490615574565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217490615454565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105481565b6000806000806000612251866123ac565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff16600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff16600960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900460ff169450945094509450945091939590929450565b600033905090565b60006123c2826007612d2990919063ffffffff16565b9050919050565b60006123d4826123ac565b1561242057600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905061246b565b612468600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d59565b90505b919050565b600080600061247d612df0565b91509150808261248d9190615840565b9250505090565b80826124a09190615871565b81846124ac9190615871565b600b546124b991906158cb565b6124c391906158cb565b600b8190555081600d546124d791906157ea565b600d8190555082600c546124eb91906157ea565b600c8190555081600a546124ff91906158cb565b600a81905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561257a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612571906154b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190615414565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126c89190615654565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612745576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273c90615634565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ac906155f4565b60405180910390fd5b600081116127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90615594565b60405180910390fd5b61280183612fb4565b61280b8383613141565b612816838383613265565b6128298282612824856123c9565b61335f565b6128338383613409565b61283e8383836135a4565b612847836136f6565b505050565b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561289757600080fd5b505afa1580156128ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128cf9190614c01565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293157600080fd5b505afa158015612945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129699190614c01565b6040518363ffffffff1660e01b815260040161298692919061529f565b602060405180830381600087803b1580156129a057600080fd5b505af11580156129b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d89190614c01565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612acd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac490615494565b60405180910390fd5b80612ad7836123c9565b1015612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f90615554565b60405180910390fd5b6000612b22612470565b90508082612b309190615871565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b7a91906158cb565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612bc6836123ac565b15612c5a5781600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c1691906158cb565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b612c6660008383612494565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cc49190615654565b60405180910390a3505050565b6000806000806000612ce5878760006137e4565b945094509450945094509295509295909350565b6000612d21836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61382e565b905092915050565b6000612d51836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61393a565b905092915050565b6000600b54821115612da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9790615434565b60405180910390fd5b6000612daa612470565b90508083612db89190615840565b915050919050565b6000612de8836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61395d565b905092915050565b6000806000600b5490506000600a54905060005b612e0e60076139cd565b811015612f7e576000612e2b8260076139e290919063ffffffff16565b905083600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612eb8575082600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612ed057600b54600a549550955050505050612fb0565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f1b91906158cb565b9350600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f6891906158cb565b9250508080612f76906159ee565b915050612e04565b50600a54600b54612f8f9190615840565b821015612fa757600b54600a54935093505050612fb0565b81819350935050505b9091565b60006013541480612fd257506005601354612fcf91906157ea565b42105b1561313e57600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156130835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b80156130dc5750600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff16155b1561313d576001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160036101000a81548160ff0219169083151502179055505b5b50565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900460ff16156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c890615514565b60405180910390fd5b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160039054906101000a900460ff1615613261576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325890615474565b60405180910390fd5b5050565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff1615801561330f5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160029054906101000a900460ff16155b1561335a57601154811115613359576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613350906155d4565b60405180910390fd5b5b505050565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160019054906101000a900460ff166134045760105482826133c291906157ea565b1115613403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fa90615614565b60405180910390fd5b5b505050565b60006012541180156134685750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156134c25750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b156135a05742600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101541061354b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613542906155b4565b60405180910390fd5b6012544261355991906157ea565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b5050565b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff168061364d5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900460ff165b9050613658846123ac565b801561366a5750613668836123ac565b155b156136805761367b848484846139fc565b6136f0565b613689846123ac565b15801561369b575061369a836123ac565b5b156136b1576136ac84848484613c08565b6136ef565b6136ba846123ac565b80156136cb57506136ca836123ac565b5b156136e1576136dc84848484613e14565b6136ee565b6136ed848484846140ae565b5b5b5b50505050565b6000613701306123c9565b9050600260149054906101000a900460ff168015613724575061372261422c565b155b801561377e5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561378c57506003548110155b156137e0576011548111156137a15760115490505b6137ce30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168361250a565b6137df816137da611ac4565b614242565b5b5050565b60008060008060008060008060006137fc8c8b6142b7565b93509350935093506138118c8484848f6143a0565b848484849850985098509850985050505050939792965093509350565b6000808360010160008481526020019081526020016000205490506000811461392e57600060018261386091906158cb565b905060006001866000018054905061387891906158cb565b9050600086600001828154811061389257613891615ac4565b5b90600052602060002001549050808760000184815481106138b6576138b5615ac4565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550866000018054806138f2576138f1615a95565b5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050613934565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b6000613969838361393a565b6139c25782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506139c7565b600090505b92915050565b60006139db82600001614412565b9050919050565b60006139f18360000183614423565b60001c905092915050565b6000613a06612470565b90506000806000806000613a1b8887896137e4565b9450945094509450945087600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a7091906158cb565b600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508588613abf9190615871565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b0991906158cb565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b9791906157ea565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613be48287614497565b613bef838288612494565b613bfc8a8a8684866145e5565b50505050505050505050565b6000613c12612470565b90506000806000806000613c278887896137e4565b945094509450945094508588613c3d9190615871565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c8791906158cb565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d1591906157ea565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613da391906157ea565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613df08287614497565b613dfb838288612494565b613e088a8a8684866145e5565b50505050505050505050565b6000613e1e612470565b90506000806000806000613e338887896137e4565b9450945094509450945087600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e8891906158cb565b600560008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508588613ed79190615871565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613f2191906158cb565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555083600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613faf91906157ea565b600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461403d91906157ea565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061408a8287614497565b614095838288612494565b6140a28a8a8684866145e5565b50505050505050505050565b60006140b8612470565b905060008060008060006140cd8887896137e4565b9450945094509450945085886140e39190615871565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461412d91906158cb565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546141bb91906157ea565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142088287614497565b614213838288612494565b6142208a8a8684866145e5565b50505050505050505050565b60008060149054906101000a900460ff16905090565b6001600060146101000a81548160ff021916908315150217905550600060028361426c9190615840565b90506000818461427c91906158cb565b9050600061428983614730565b90506142968282866149b1565b60008060146101000a81548160ff0219169083151502179055505050505050565b60008060008084156142d6578560008060009350935093509350614397565b60006064600f60009054906101000a900460ff1660ff16886142f89190615871565b6143029190615840565b905060006064600f60029054906101000a900460ff1660ff16896143269190615871565b6143309190615840565b905060006064600f60019054906101000a900460ff1660ff168a6143549190615871565b61435e9190615840565b905060008183858c61437091906158cb565b61437a91906158cb565b61438491906158cb565b9050808484849750975097509750505050505b92959194509250565b60008082876143af9190615871565b9050600083876143bf9190615871565b9050600084876143cf9190615871565b9050600085876143df9190615871565b9050808284866143ef91906158cb565b6143f991906158cb565b61440391906158cb565b94505050505095945050505050565b600081600001805490509050919050565b60008183600001805490501161446e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614465906153d4565b60405180910390fd5b82600001828154811061448457614483615ac4565b5b9060005260206000200154905092915050565b80826144a39190615871565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546144ed91906157ea565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614539306123ac565b156145cd5781600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461458991906157ea565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b81600e546145db91906157ea565b600e819055505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146429190615654565b60405180910390a360008211156146ba57600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516146b19190615654565b60405180910390a35b6000811115614729573073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516147209190615654565b60405180910390a35b5050505050565b600080600267ffffffffffffffff81111561474e5761474d615af3565b5b60405190808252806020026020018201604052801561477c5781602001602082028036833780820191505090505b509050308160008151811061479457614793615ac4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561483657600080fd5b505afa15801561484a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061486e9190614c01565b8160018151811061488257614881615ac4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478560008530426040518663ffffffff1660e01b815260040161492595949392919061566f565b600060405180830381600087803b15801561493f57600080fd5b505af1158015614953573d6000803e3d6000fd5b5050505060004790506000828261496a91906158cb565b90507fbdc89df9460547640e2147ba22a6ef8476d5390eecc620e9d76fbaa551bf4e8a868260405161499d9291906156c9565b60405180910390a180945050505050919050565b6000806000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198630896000808a426040518863ffffffff1660e01b8152600401614a1d969594939291906152c8565b6060604051808303818588803b158015614a3657600080fd5b505af1158015614a4a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614a6f9190614e0a565b9250925092507f5cd8e1f1365bc044402b269cd442d1006e0a0be5b2eabcbd3348312153fd309d838383604051614aa8939291906156f2565b60405180910390a1505050505050565b6000614acb614ac684615769565b615744565b90508083825260208201905082856020860282011115614aee57614aed615b27565b5b60005b85811015614b1e5781614b048882614b28565b845260208401935060208301925050600181019050614af1565b5050509392505050565b600081359050614b3781615f85565b92915050565b600081519050614b4c81615f85565b92915050565b600082601f830112614b6757614b66615b22565b5b8135614b77848260208601614ab8565b91505092915050565b600081359050614b8f81615f9c565b92915050565b600081359050614ba481615fb3565b92915050565b600081519050614bb981615fb3565b92915050565b600081359050614bce81615fca565b92915050565b600060208284031215614bea57614be9615b31565b5b6000614bf884828501614b28565b91505092915050565b600060208284031215614c1757614c16615b31565b5b6000614c2584828501614b3d565b91505092915050565b60008060408385031215614c4557614c44615b31565b5b6000614c5385828601614b28565b9250506020614c6485828601614b28565b9150509250929050565b600080600060608486031215614c8757614c86615b31565b5b6000614c9586828701614b28565b9350506020614ca686828701614b28565b9250506040614cb786828701614b95565b9150509250925092565b60008060408385031215614cd857614cd7615b31565b5b6000614ce685828601614b28565b9250506020614cf785828601614b80565b9150509250929050565b60008060408385031215614d1857614d17615b31565b5b6000614d2685828601614b28565b9250506020614d3785828601614b95565b9150509250929050565b60008060408385031215614d5857614d57615b31565b5b600083013567ffffffffffffffff811115614d7657614d75615b2c565b5b614d8285828601614b52565b9250506020614d9385828601614b80565b9150509250929050565b600060208284031215614db357614db2615b31565b5b6000614dc184828501614b95565b91505092915050565b60008060408385031215614de157614de0615b31565b5b6000614def85828601614b95565b9250506020614e0085828601614b80565b9150509250929050565b600080600060608486031215614e2357614e22615b31565b5b6000614e3186828701614baa565b9350506020614e4286828701614baa565b9250506040614e5386828701614baa565b9150509250925092565b600080600060608486031215614e7657614e75615b31565b5b6000614e8486828701614bbf565b9350506020614e9586828701614bbf565b9250506040614ea686828701614bbf565b9150509250925092565b6000614ebc8383614ec8565b60208301905092915050565b614ed1816158ff565b82525050565b614ee0816158ff565b82525050565b6000614ef1826157a5565b614efb81856157c8565b9350614f0683615795565b8060005b83811015614f37578151614f1e8882614eb0565b9750614f29836157bb565b925050600181019050614f0a565b5085935050505092915050565b614f4d81615911565b82525050565b614f5c81615954565b82525050565b614f6b81615978565b82525050565b6000614f7c826157b0565b614f8681856157d9565b9350614f9681856020860161598a565b614f9f81615b36565b840191505092915050565b6000614fb76022836157d9565b9150614fc282615b47565b604082019050919050565b6000614fda601c836157d9565b9150614fe582615b96565b602082019050919050565b6000614ffd601b836157d9565b915061500882615bbf565b602082019050919050565b6000615020602a836157d9565b915061502b82615be8565b604082019050919050565b60006150436026836157d9565b915061504e82615c37565b604082019050919050565b60006150666018836157d9565b915061507182615c86565b602082019050919050565b6000615089601a836157d9565b915061509482615caf565b602082019050919050565b60006150ac601d836157d9565b91506150b782615cd8565b602082019050919050565b60006150cf6025836157d9565b91506150da82615d01565b604082019050919050565b60006150f2601f836157d9565b91506150fd82615d50565b602082019050919050565b60006151156015836157d9565b915061512082615d79565b602082019050919050565b6000615138601d836157d9565b915061514382615da2565b602082019050919050565b600061515b601b836157d9565b915061516682615dcb565b602082019050919050565b600061517e6020836157d9565b915061518982615df4565b602082019050919050565b60006151a16029836157d9565b91506151ac82615e1d565b604082019050919050565b60006151c46014836157d9565b91506151cf82615e6c565b602082019050919050565b60006151e76021836157d9565b91506151f282615e95565b604082019050919050565b600061520a601c836157d9565b915061521582615ee4565b602082019050919050565b600061522d602a836157d9565b915061523882615f0d565b604082019050919050565b6000615250601e836157d9565b915061525b82615f5c565b602082019050919050565b61526f8161593d565b82525050565b61527e81615947565b82525050565b60006020820190506152996000830184614ed7565b92915050565b60006040820190506152b46000830185614ed7565b6152c16020830184614ed7565b9392505050565b600060c0820190506152dd6000830189614ed7565b6152ea6020830188615266565b6152f76040830187614f62565b6153046060830186614f62565b6153116080830185614ed7565b61531e60a0830184615266565b979650505050505050565b600060208201905061533e6000830184614f44565b92915050565b600060a0820190506153596000830188614f44565b6153666020830187614f44565b6153736040830186614f44565b6153806060830185614f44565b61538d6080830184614f44565b9695505050505050565b60006020820190506153ac6000830184614f53565b92915050565b600060208201905081810360008301526153cc8184614f71565b905092915050565b600060208201905081810360008301526153ed81614faa565b9050919050565b6000602082019050818103600083015261540d81614fcd565b9050919050565b6000602082019050818103600083015261542d81614ff0565b9050919050565b6000602082019050818103600083015261544d81615013565b9050919050565b6000602082019050818103600083015261546d81615036565b9050919050565b6000602082019050818103600083015261548d81615059565b9050919050565b600060208201905081810360008301526154ad8161507c565b9050919050565b600060208201905081810360008301526154cd8161509f565b9050919050565b600060208201905081810360008301526154ed816150c2565b9050919050565b6000602082019050818103600083015261550d816150e5565b9050919050565b6000602082019050818103600083015261552d81615108565b9050919050565b6000602082019050818103600083015261554d8161512b565b9050919050565b6000602082019050818103600083015261556d8161514e565b9050919050565b6000602082019050818103600083015261558d81615171565b9050919050565b600060208201905081810360008301526155ad81615194565b9050919050565b600060208201905081810360008301526155cd816151b7565b9050919050565b600060208201905081810360008301526155ed816151da565b9050919050565b6000602082019050818103600083015261560d816151fd565b9050919050565b6000602082019050818103600083015261562d81615220565b9050919050565b6000602082019050818103600083015261564d81615243565b9050919050565b60006020820190506156696000830184615266565b92915050565b600060a0820190506156846000830188615266565b6156916020830187614f62565b81810360408301526156a38186614ee6565b90506156b26060830185614ed7565b6156bf6080830184615266565b9695505050505050565b60006040820190506156de6000830185615266565b6156eb6020830184615266565b9392505050565b60006060820190506157076000830186615266565b6157146020830185615266565b6157216040830184615266565b949350505050565b600060208201905061573e6000830184615275565b92915050565b600061574e61575f565b905061575a82826159bd565b919050565b6000604051905090565b600067ffffffffffffffff82111561578457615783615af3565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006157f58261593d565b91506158008361593d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561583557615834615a37565b5b828201905092915050565b600061584b8261593d565b91506158568361593d565b92508261586657615865615a66565b5b828204905092915050565b600061587c8261593d565b91506158878361593d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158c0576158bf615a37565b5b828202905092915050565b60006158d68261593d565b91506158e18361593d565b9250828210156158f4576158f3615a37565b5b828203905092915050565b600061590a8261591d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061595f82615966565b9050919050565b60006159718261591d565b9050919050565b60006159838261593d565b9050919050565b60005b838110156159a857808201518184015260208101905061598d565b838111156159b7576000848401525b50505050565b6159c682615b36565b810181811067ffffffffffffffff821117156159e5576159e4615af3565b5b80604052505050565b60006159f98261593d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a2c57615a2b615a37565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74206578636c75646520636f696e20636f6e747261637400000000600082015250565b7f417070726f766520746f20746865207a65726f20616464726573730000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f526563697069656e7420697320626c61636b6c69737465640000000000000000600082015250565b7f4275726e2066726f6d20746865207a65726f2061646472657373000000000000600082015250565b7f417070726f76652066726f6d20746865207a65726f2061646472657373000000600082015250565b7f5265666c65637420616d6f756e7420657863656564732073656e64657220626160008201527f6c616e6365000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f53656e64657220697320626c61636b6c69737465640000000000000000000000600082015250565b7f5265666c6563742066726f6d206578636c756465642061646472657373000000600082015250565b7f4275726e20616d6f756e7420657863656564732062616c616e63650000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f5377617020697320636f6f6c696e6720646f776e000000000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206c696d6960008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b7f526563697069656e74206861732072656163686564206163636f756e7420746f60008201527f6b656e73206c696d697400000000000000000000000000000000000000000000602082015250565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b615f8e816158ff565b8114615f9957600080fd5b50565b615fa581615911565b8114615fb057600080fd5b50565b615fbc8161593d565b8114615fc757600080fd5b50565b615fd381615947565b8114615fde57600080fd5b5056fea164736f6c6343000806000a0000000000000000000000008595c4ad15d51c5bf920c249869ec5b3250c2d4d00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008595c4ad15d51c5bf920c249869ec5b3250c2d4d00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

-----Decoded View---------------
Arg [0] : owner (address): 0x8595c4ad15d51c5bf920c249869ec5b3250c2d4d
Arg [1] : router (address): 0x10ed43c718714eb63d5aa57b78b54704e256024e

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000008595c4ad15d51c5bf920c249869ec5b3250c2d4d
Arg [1] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.