ETH Price: $3,809.62 (+4.96%)

Token

Junior Shiba (JRSHIB)
 

Overview

Max Total Supply

1,000,000,000,000,000 JRSHIB

Holders

186

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,110,104,555,019.073292026546091435 JRSHIB

Value
$0.00
0xAC67E86a7434372EE5bA518FD0ceC90476010c90
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Junior Shiba is a fully decentralized cryptocurrency entirely driven by its fun and creative community members with features including NFTs, Games, earning crypto while playing, swapping, Crypto education, and a presence in the Metaverse.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
JRSHIB

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Multiple files format)

File 8 of 10: JuniorShibaToken.sol
// SPDX-License-Identifier: Unlicensed

/*
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: .   ..~MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMM ......... . :MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMM ..888888888~... MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM. ...... .MMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMM8...88888888888O8... MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO.......888.....MMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMM$..7888O??????Z8888D....MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM... .88888888888...7MMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMM...8887+?????????88888...NMMMMMMMMMMMMMMMMMMMMMMMMMMNM ...888888888OD8888=..MMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMM.. D88D=????????????888O~.. MMMMMMMMMMMMMMMMMMMMMMMMM....D888888I???????D88.. MMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMM...8888=+?????????????+D888.. MMMMMMMMMMMMMMMMMMMMMM ...88888Z???????????=888...MMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMM..D888==???D8888D???????8888........~MMMM7. ... MN. ..888887?===?D8888???==88D..MMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMM ..888+==???8888888???????D888.........  ............?8888I?====D888888O??==888 . MMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMM..8D88==+??D88888888+??????D8888D888$.....88D88D....8D888?=====8D8888888??+==88D..MMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMM ..888~==???8888888888+??????88888D8D88=O888888D88..D888+?====+8888888888???==888.. MMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMM .8888===??888888888888???????888... ,8888.....,8D88888???????88888888888D??==~888..MMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMM8..888I==+??888888888888D??????I. .....88. ....:888888Z???????D88888888888D??===888 .ZMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMM...888===???8D88888888888+???????..............??????????????+8888888888888??+==888...MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMM ..888===???8888888888888D????????............???????????????88888888888888Z??==O88...MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMM .888D===???88888888888888?????????..........????????????????888888888888888??===88$..MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMM..888====??88888888888888N??????????.........???????????????+888888888888888??===888..MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM ..888====??D8888888888??????????????,........??????????????????$D88888888888??===888 .MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM...888====??88888888$?????????????????........?????????????????????I888888888??===888 .MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM ..888===+??788888????????????????????........????????????????????????8888888??===888..MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM ..888===+???+7????????????????????????.......???????????????????????????DD8???===888..DMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM .=888===+?????????????????????????????.......?????????????????????????????????===888..DMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM .,888===+?????????????????????????????.......?????????????????????????????????===888..MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMM ..888====?????????????????????????????.......????????????????????????????????+===888..MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMN ..8888====?????????????????????????????.......????????????????????????????????===~888..MMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMM . 8888====????????????????,....+????????.......????????????????????????????????===888D.. MMMMMMMMMMMMMM
MMMMMMMMMMMMMM7..~888~===????????????????~........???????.......??????,......:??????????????????===+888D...MMMMMMMMMMMMM
MMMMMMMMMMMMM:..O888~===?????????????????=........???????.......?????.........??????????????????+====8888.. MMMMMMMMMMMM
MMMMMMMMMMMMD .7888~===????????????????????????:.+??????=...... +????.........???????????????????=====888D..$MMMMMMMMMMM
MMMMMMMMMMMM..+8D8~===??????????????????????????????????........:?????++????+?????????????????????+====888?..MMMMMMMMMMM
MMMMMMMMMMM..,888====+??????????????????????????????????.........??????????????????????????????????=====88O. .MMMMMMMMMM
MMMMMMMMMM  .D8D+===+??????????????????????O888888??????.........??????+8O+?????????????????????????====Z888...MMMMMMMMM
MMMMMMMMM ..888?===+??????????????????????8D8D...8O????,.........????D888888D???????????????????????+====8888. MMMMMMMMM
MMMMMMMMM..8888====??????????????????????88888....8D???...........??88...D8888I??????????????????????=====888...MMMMMMMM
MMMMMMMM...888====??????????I??II?I?????OD888D...888??,...........?888....88888????????II?????????????====8888. MMMMMMMM
MMMMMMMZ..888?===??????????IIIIIIIIII???8888888O8888?~............:888. .D88888??????IIIIII???????????=====888...MMMMMMM
MMMMMMM...888===??????????IIIIIIIIIII+??D88888888888..?D888888DO...888888888888????IIIIIIIIIII?????????====8888. MMMMMMM
MMMMMMM  D88?===??????????IIIIIIIIII?I??+8888888888................Z8888888888D????IIIIIIIIIII?????????====I888. ~MMMMMM
MMMMMM...888===????????????IIIIIIII?????I788888888..................8888888888??????IIIIIIIIII?????????+====888...MMMMMM
MMMMMM .Z8DD~==???????????+I??I??I?????....88888.....8888888888O.....88888888.=???????IIIII?I+??????????====D88$..MMMMMM
MMMMMN .D88~==+?????????????+I??II???..............:8888888888888D.... .OI.......???I?IIIIII????????????====D888..MMMMMM
MMMMM,..888===?????????????????????~...........?Z..D88888888888888................??????????????????????====788D..$MMMMM
MMMMM .~888===????????????????????~...........O88...88888888888888..D8.............?????????????????????+====88D...MMMMM
MMMMM .8888===????????????????????............88.....8D888888888D...D8D.............?????????????????????===~888.. MMMMM
MMMMM .8888===???????????????????,............88......~88888888......88.............?????????????????????====888...MMMMM
MMMMM .8888===???????????????????.............88.........,88.........88.............?????????????????????===O888...MMMMM
MMMMM .888D===???????????????????.............888. ..... .88.........8O.............+???????????????????+===D888.. MMMMM
MMMMM..~8888==???????????????????............ 88888D8D88D888D......888..............=???????????????????====D888..MMMMMM
MMMMM ..8888==???????????????????.............8888888888888888888D8888..............+???????????????????===?D88O..MMMMMM
MMMMMM .8888?=+?????????????????+.............8888  88888888888  888:..............????????????????????===8888.. MMMMMM
MMMMMM ..8888==??????????????????..............888 888888888888 8888...............????????????????????==D888D..MMMMMMM
MMMMMMM..88888=??????????????????..............8888$77$$$$$$$$8888888...............???????????????????==?8888...MMMMMMM
MMMMMMM...8888D=??????????????????..............88$$$$$$$$$$$$$$7888...............????????????????????==8888...MMMMMMMM
MMMMMMMM...D8888??????????????????..............88O$$$$$$$$$$$$$788................???????????????????+O8888Z..NMMMMMMMM
MMMMMMMMM ..88888+????????????????+..............88O$$$$$$$$$$$Z88................????????????????????88888$..+MMMMMMMMM
MMMMMMMMMM...888888?????????????????..............O88$$$$$$$7Z888................???????????????????788888...DMMMMMMMMMM
MMMMMMMMMMM+ ..88888Z????????????????...............88888888888.................??????????????????+888888 ..MMMMMMMMMMMM
MMMMMMMMMMMMN ..888888????????????????:............. ..,ZO=...................:?????????????????+888888... MMMMMMMMMMMMM
MMMMMMMMMMMMMM ..,888888O???????????????.....................................?????????????????$888888O...NMMMMMMMMMMMMMM
MMMMMMMMMMMMMMM ...88888888???????????????................................,????????????????Z8888888:.. OMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMM. ..D8888888D??????????????+...........................????????????????O8D888888....:MMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMM....ID888888O8+???????????????,.................=????????????????$888888888.. ..MMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMM ...:8888888888I???????????????????????????????????????????I8888888888:....:MMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMM ...$888888888888+?????????????????????????????????$88D888888888......MMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMM ....Z888888888888O8Z??????????????????????Z888888888888887. ...:MMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMM......88888888888888888D8888888D8888888888888888888O......$MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM= ......88888888888888888888888888888888888~.....  $MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: ........$88D8888888888888888D87.......  .MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM ..............................MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO: . ...  .  =OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM


https://juniorshiba.com
https://twitter.com/jrshibatoken
https://t.me/juniorshibatoken

*/

pragma solidity ^0.8.9;

import './IERC20.sol';
import './SafeMath.sol';
import './Ownable.sol';
import './Context.sol';
import './Address.sol';
import './IUniswapV2Factory.sol';
import './IUniswapV2Pair.sol';
import './IUniswapV2Router02.sol';

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

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

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    uint256 private constant MAX 	= ~uint256(0);
    uint256 private _tTotal 		= 1000000000000000 * (10**18);
    uint256 private _rTotal 		= (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name 	= 'Junior Shiba';
    string private _symbol 	= 'JRSHIB';
    uint8 private _decimals = 18;

    uint256 private _taxFee 		= 3;
    uint256 private _teamFee 		= 7;
    uint256 private _previousTaxFee 	= _taxFee;
    uint256 private _previousTeamFee 	= _teamFee;

    address payable public _opsTeamWalletAddress;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwap = false;
    bool public swapEnabled = true;

    bool public buySellLimitEnabled = true;
    bool public cooldownEnabled 	= true;

    //Min buy/sell amount - > 4T and it can't be changed
    uint256 private constant MIN_BUY_SELL_TXN_AMOUNT 	= 4000000000000;

    // buy/sell Max transaction limit - >  4T
    uint256 private _maxTxAmount 	= 4000000000000 * (10**18);



    // minimum amount of tokens to be swaped => 50M
    uint256 private _numOfTokensToExchangeForTeam = 50000000000 * (10**18);

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);

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

    constructor (address payable opsTeamWalletAddress) 
	{
        _opsTeamWalletAddress = opsTeamWalletAddress;
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        // Create a uniswap pair for this new token

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

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;

        // Exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

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

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

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

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

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

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

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

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

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

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

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

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

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
        _isExcludedFromFee[account] = excluded;
    }

    function enableDisableBuySellLimit(bool _buySellLimitEnabled) external onlyOwner()
    {
        buySellLimitEnabled = _buySellLimitEnabled;
    }


    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeAccount(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        require(!_isExcluded[account], "Account is already excluded");
        require(_excluded.length < 1000, "Excluded list is too long");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

        _previousTaxFee = _taxFee;
        _previousTeamFee = _teamFee;

        _taxFee = 0;
        _teamFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _teamFee = _previousTeamFee;
    }

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!cooldownEnabled || (cooldown[sender] < block.timestamp && cooldown[recipient] < block.timestamp), "Cooldown is enabled. Try again in a few minutes.");

        if(sender != owner() && recipient != owner() && buySellLimitEnabled )
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap?
        // also, don't get caught in a circular charity event.
        // also, don't swap if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));

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

        bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForTeam;
        if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
            // swap the current tokens to ETH and send to the team
            swapTokensForEth(contractTokenBalance);

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

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }

        //transfer amount, it will take tax and team fee
        _tokenTransfer(sender,recipient,amount,takeFee);

        if (!_isExcludedFromFee[sender]) {
            cooldown[sender] = block.timestamp + (60 seconds);
        }
        if (!_isExcludedFromFee[recipient]) {
            cooldown[recipient] = block.timestamp + (60 seconds);
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToTeam(uint256 amount) private {
        _opsTeamWalletAddress.transfer(amount);
    }

    // We are exposing these functions to be able to manual swap and send
    // in case the token is highly valued and 5M becomes too much
    function manualSwap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToTeam(contractETHBalance);
    }

    function setSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function setCooldownEnabled(bool enabled) external onlyOwner() {
        cooldownEnabled = enabled;
    }

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

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        uint256 tTeamFee = amount.mul(_teamFee).div(100);
        uint256 rTeamFee = tTeamFee.mul(_getRate());
        _takeTeam(tTeamFee, rTeamFee);

        if(!takeFee)
            restoreAllFee();
    }

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

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

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

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

    function _takeTeam(uint256 tTeamFee, uint256 rTeamFee) private {
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeamFee);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tTeamFee);
    }

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

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeamFee) = _getTValues(tAmount, _taxFee, _teamFee);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate, tTeamFee);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 teamFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tTeamFee = tAmount.mul(teamFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeamFee);
        return (tTransferAmount, tFee, tTeamFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate, uint256 tTeamFee) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeamFee = tTeamFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeamFee);
        return (rAmount, rTransferAmount, rFee);
    }

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }

    function getMaxTxAmount() public view returns(uint256) {
        return _maxTxAmount;
    }

    function getNumOfTokensToExchangeForTeam() public view returns(uint256) {
        return _numOfTokensToExchangeForTeam;
    }

    function _getETHBalance() public view returns(uint256 balance) {
        return address(this).balance;
    }

    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 3, 'taxFee should be between 1 and 3');
        _taxFee = taxFee;
    }

    function _setTeamFee(uint256 teamFee) external onlyOwner() {
        require(teamFee >= 1 && teamFee <= 7, 'teamFee should be between 1 and 7');
        _teamFee = teamFee;
    }

    function _setOpsTeamWallet(address payable opsTeamWalletAddress) external onlyOwner() {
        _opsTeamWalletAddress = opsTeamWalletAddress;
    }

    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner()
    {
        require(maxTxAmount >= MIN_BUY_SELL_TXN_AMOUNT  , 'maxTxAmount should be greater than MIN_BUY_SELL_TXN_AMOUNT');
        uint256 _tempMaxTxAmount 	= maxTxAmount * (10**18);
        _maxTxAmount = _tempMaxTxAmount;
    }
}

File 1 of 10: Address.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

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

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 2 of 10: 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) {
        return msg.data;
    }
}

File 3 of 10: IERC20.sol
// SPDX-License-Identifier: MIT
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
pragma solidity ^0.8.4;

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

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

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

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

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

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

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

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

File 4 of 10: IUniswapV2Factory.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 5 of 10: IUniswapV2Pair.sol
// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

File 6 of 10: IUniswapV2Router01.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

File 7 of 10: IUniswapV2Router02.sol
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 9 of 10: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"opsTeamWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_opsTeamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"opsTeamWalletAddress","type":"address"}],"name":"_setOpsTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"teamFee","type":"uint256"}],"name":"_setTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buySellLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_buySellLimitEnabled","type":"bool"}],"name":"enableDisableBuySellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumOfTokensToExchangeForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"bool","name":"enabled","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526d314dc6448d9338c15b0a0000000060088190556200002690600019620004dd565b620000349060001962000500565b60095560408051808201909152600c8082526b4a756e696f7220536869626160a01b60209092019182526200006c91600b9162000437565b5060408051808201909152600680825265252929a424a160d11b60209092019182526200009c91600c9162000437565b50600d8054601260ff1990911681179091556003600e8190556007600f819055601091909155601155805463ffffffff60a01b19166201010160a81b1790556c327cb2734119d3b7a9000000006013556ba18f07d736b90be5500000006014553480156200010957600080fd5b5060405162002df938038062002df98339810160408190526200012c916200053f565b6200013733620003e7565b601280546001600160a01b0319166001600160a01b03831617905560095460016000620001613390565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d857600080fd5b505afa158015620001ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021391906200053f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025c57600080fd5b505afa15801562000271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029791906200053f565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002e057600080fd5b505af1158015620002f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031b91906200053f565b6001600160a01b0390811660a0528116608052600160056000620003476000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260059092529020805490911660011790556200038f3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600854604051620003d791815260200190565b60405180910390a35050620005a3565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620004459062000566565b90600052602060002090601f016020900481019282620004695760008555620004b4565b82601f106200048457805160ff1916838001178555620004b4565b82800160010185558215620004b4579182015b82811115620004b457825182559160200191906001019062000497565b50620004c2929150620004c6565b5090565b5b80821115620004c25760008155600101620004c7565b600082620004fb57634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200052157634e487b7160e01b600052601160045260246000fd5b500390565b6001600160a01b03811681146200053c57600080fd5b50565b6000602082840312156200055257600080fd5b81516200055f8162000526565b9392505050565b600181811c908216806200057b57607f821691505b602082108114156200059d57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a051612814620005e56000396000818161046701526118610152600081816102e201528181611ad301528181611b9b0152611bd701526128146000f3fe60806040526004361061024a5760003560e01c80636d8b052711610139578063a985ceef116100b6578063eb9d283e1161007a578063eb9d283e14610736578063f2cc0c181461074b578063f2fde38b1461076b578063f42938901461078b578063f815a842146107a0578063f84354f1146107b357600080fd5b8063a985ceef14610656578063af9549e014610677578063cba0e99614610697578063dd62ed3e146106d0578063e01af92c1461071657600080fd5b80637ef1f70c116100fd5780637ef1f70c146105c25780638da5cb5b146105e357806395d89b4114610601578063a457c2d714610616578063a9059cbb1461063657600080fd5b80636d8b0527146105375780636ddd17131461054c57806370a082311461056d578063715018a61461058d5780637c39fcdb146105a257600080fd5b8063313ce567116101c757806351bc3c851161018b57806351bc3c85146104895780635342acb41461049e5780635880b873146104d75780635932ead1146104f75780635c9213f11461051757600080fd5b8063313ce567146103d357806339509351146103f55780633bd5d173146104155780634549b0391461043557806349bd5a5e1461045557600080fd5b80631bbae6e01161020e5780631bbae6e01461033157806323b872dd146103535780632866716214610373578063299b8887146103935780632d838119146103b357600080fd5b806306fdde0314610256578063095ea7b31461028157806313114a9d146102b15780631694505e146102d057806318160ddd1461031c57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b6107d3565b60405161027891906123f8565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612462565b610865565b6040519015158152602001610278565b3480156102bd57600080fd5b50600a545b604051908152602001610278565b3480156102dc57600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b34801561032857600080fd5b506008546102c2565b34801561033d57600080fd5b5061035161034c36600461248e565b61087c565b005b34801561035f57600080fd5b506102a161036e3660046124a7565b610946565b34801561037f57600080fd5b5061035161038e36600461248e565b6109af565b34801561039f57600080fd5b506103516103ae3660046124e8565b610a46565b3480156103bf57600080fd5b506102c26103ce36600461248e565b610a92565b3480156103df57600080fd5b50600d5460405160ff9091168152602001610278565b34801561040157600080fd5b506102a1610410366004612462565b610b16565b34801561042157600080fd5b5061035161043036600461248e565b610b4c565b34801561044157600080fd5b506102c261045036600461251a565b610c34565b34801561046157600080fd5b506103047f000000000000000000000000000000000000000000000000000000000000000081565b34801561049557600080fd5b50610351610cbf565b3480156104aa57600080fd5b506102a16104b93660046124e8565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156104e357600080fd5b506103516104f236600461248e565b610d02565b34801561050357600080fd5b50610351610512366004612546565b610d8f565b34801561052357600080fd5b50610351610532366004612546565b610dd7565b34801561054357600080fd5b506013546102c2565b34801561055857600080fd5b506012546102a190600160a81b900460ff1681565b34801561057957600080fd5b506102c26105883660046124e8565b610e1f565b34801561059957600080fd5b50610351610e7e565b3480156105ae57600080fd5b50601254610304906001600160a01b031681565b3480156105ce57600080fd5b506012546102a190600160b01b900460ff1681565b3480156105ef57600080fd5b506000546001600160a01b0316610304565b34801561060d57600080fd5b5061026b610eb4565b34801561062257600080fd5b506102a1610631366004612462565b610ec3565b34801561064257600080fd5b506102a1610651366004612462565b610f12565b34801561066257600080fd5b506012546102a190600160b81b900460ff1681565b34801561068357600080fd5b50610351610692366004612561565b610f1f565b3480156106a357600080fd5b506102a16106b23660046124e8565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106dc57600080fd5b506102c26106eb36600461258d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561072257600080fd5b50610351610731366004612546565b610f74565b34801561074257600080fd5b506014546102c2565b34801561075757600080fd5b506103516107663660046124e8565b610fbc565b34801561077757600080fd5b506103516107863660046124e8565b6111da565b34801561079757600080fd5b50610351611272565b3480156107ac57600080fd5b50476102c2565b3480156107bf57600080fd5b506103516107ce3660046124e8565b6112a6565b6060600b80546107e2906125c6565b80601f016020809104026020016040519081016040528092919081815260200182805461080e906125c6565b801561085b5780601f106108305761010080835404028352916020019161085b565b820191906000526020600020905b81548152906001019060200180831161083e57829003601f168201915b5050505050905090565b600061087233848461145d565b5060015b92915050565b6000546001600160a01b031633146108af5760405162461bcd60e51b81526004016108a690612601565b60405180910390fd5b6503a35294400081101561092b5760405162461bcd60e51b815260206004820152603a60248201527f6d61785478416d6f756e742073686f756c64206265206772656174657220746860448201527f616e204d494e5f4255595f53454c4c5f54584e5f414d4f554e5400000000000060648201526084016108a6565b600061093f82670de0b6b3a764000061264c565b6013555050565b6000610953848484611581565b6109a584336109a085604051806060016040528060288152602001612792602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061199f565b61145d565b5060019392505050565b6000546001600160a01b031633146109d95760405162461bcd60e51b81526004016108a690612601565b600181101580156109eb575060078111155b610a415760405162461bcd60e51b815260206004820152602160248201527f7465616d4665652073686f756c64206265206265747765656e203120616e64206044820152603760f81b60648201526084016108a6565b600f55565b6000546001600160a01b03163314610a705760405162461bcd60e51b81526004016108a690612601565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000600954821115610af95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108a6565b6000610b036119cb565b9050610b0f83826119ee565b9392505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108729185906109a090866119fa565b3360008181526006602052604090205460ff1615610bc15760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108a6565b6000610bcc83611a06565b505050506001600160a01b038316600090815260016020526040902054909150610bf69082611a5d565b6001600160a01b038316600090815260016020526040902055600954610c1c9082611a5d565b600955600a54610c2c90846119fa565b600a55505050565b6000600854831115610c885760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108a6565b81610ca6576000610c9884611a06565b509294506108769350505050565b6000610cb184611a06565b509194506108769350505050565b6000546001600160a01b03163314610ce95760405162461bcd60e51b81526004016108a690612601565b6000610cf430610e1f565b9050610cff81611a69565b50565b6000546001600160a01b03163314610d2c5760405162461bcd60e51b81526004016108a690612601565b60018110158015610d3e575060038111155b610d8a5760405162461bcd60e51b815260206004820181905260248201527f7461784665652073686f756c64206265206265747765656e203120616e64203360448201526064016108a6565b600e55565b6000546001600160a01b03163314610db95760405162461bcd60e51b81526004016108a690612601565b60128054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610e015760405162461bcd60e51b81526004016108a690612601565b60128054911515600160b01b0260ff60b01b19909216919091179055565b6001600160a01b03811660009081526006602052604081205460ff1615610e5c57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461087690610a92565b6000546001600160a01b03163314610ea85760405162461bcd60e51b81526004016108a690612601565b610eb26000611c58565b565b6060600c80546107e2906125c6565b600061087233846109a0856040518060600160405280602581526020016127ba602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061199f565b6000610872338484611581565b6000546001600160a01b03163314610f495760405162461bcd60e51b81526004016108a690612601565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f9e5760405162461bcd60e51b81526004016108a690612601565b60128054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314610fe65760405162461bcd60e51b81526004016108a690612601565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561105e5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b60648201526084016108a6565b6001600160a01b03811660009081526006602052604090205460ff16156110c75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108a6565b6007546103e81161111a5760405162461bcd60e51b815260206004820152601960248201527f4578636c75646564206c69737420697320746f6f206c6f6e670000000000000060448201526064016108a6565b6001600160a01b03811660009081526001602052604090205415611174576001600160a01b03811660009081526001602052604090205461115a90610a92565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031633146112045760405162461bcd60e51b81526004016108a690612601565b6001600160a01b0381166112695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a6565b610cff81611c58565b6000546001600160a01b0316331461129c5760405162461bcd60e51b81526004016108a690612601565b47610cff81611ca8565b6000546001600160a01b031633146112d05760405162461bcd60e51b81526004016108a690612601565b6001600160a01b03811660009081526006602052604090205460ff166113385760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108a6565b60005b60075481101561145957816001600160a01b0316600782815481106113625761136261266b565b6000918252602090912001546001600160a01b03161415611447576007805461138d90600190612681565b8154811061139d5761139d61266b565b600091825260209091200154600780546001600160a01b0390921691839081106113c9576113c961266b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff19169055600780548061142157611421612698565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611451816126ae565b91505061133b565b5050565b6001600160a01b0383166114bf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a6565b6001600160a01b0382166115205760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108a6565b6001600160a01b0382166116475760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108a6565b600081116116a95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108a6565b601254600160b81b900460ff1615806116fb57506001600160a01b038316600090815260046020526040902054421180156116fb57506001600160a01b03821660009081526004602052604090205442115b6117605760405162461bcd60e51b815260206004820152603060248201527f436f6f6c646f776e20697320656e61626c65642e2054727920616761696e206960448201526f371030903332bb9036b4b73aba32b99760811b60648201526084016108a6565b6000546001600160a01b0384811691161480159061178c57506000546001600160a01b03838116911614155b80156117a15750601254600160b01b900460ff165b15611809576013548111156118095760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108a6565b600061181430610e1f565b9050601354811061182457506013545b6014546012549082101590600160a01b900460ff1615801561184f5750601254600160a81b900460ff165b80156118585750805b801561189657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b156118b6576118a482611a69565b4780156118b4576118b447611ca8565b505b6001600160a01b03851660009081526005602052604090205460019060ff16806118f857506001600160a01b03851660009081526005602052604090205460ff165b15611901575060005b61190d86868684611ce2565b6001600160a01b03861660009081526005602052604090205460ff166119525761193842603c6126c9565b6001600160a01b0387166000908152600460205260409020555b6001600160a01b03851660009081526005602052604090205460ff166119975761197d42603c6126c9565b6001600160a01b0386166000908152600460205260409020555b505050505050565b600081848411156119c35760405162461bcd60e51b81526004016108a691906123f8565b505050900390565b60008060006119d8611e9d565b90925090506119e782826119ee565b9250505090565b6000610b0f82846126e1565b6000610b0f82846126c9565b600080600080600080600080611a2189600e54600f5461201f565b9250925092506000611a316119cb565b90506000806000611a448d87868861206e565b919f909e50909c50969a50949850949650505050505050565b6000610b0f8284612681565b6012805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611ab157611ab161266b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2a57600080fd5b505afa158015611b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b629190612703565b81600181518110611b7557611b7561266b565b60200260200101906001600160a01b031690816001600160a01b031681525050611bc0307f00000000000000000000000000000000000000000000000000000000000000008461145d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790611c15908590600090869030904290600401612720565b600060405180830381600087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b50506012805460ff60a01b1916905550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611459573d6000803e3d6000fd5b80611cef57611cef6120be565b6001600160a01b03841660009081526006602052604090205460ff168015611d3057506001600160a01b03831660009081526006602052604090205460ff16155b15611d4557611d408484846120ec565b611e43565b6001600160a01b03841660009081526006602052604090205460ff16158015611d8657506001600160a01b03831660009081526006602052604090205460ff165b15611d9657611d40848484612205565b6001600160a01b03841660009081526006602052604090205460ff16158015611dd857506001600160a01b03831660009081526006602052604090205460ff16155b15611de857611d408484846122ab565b6001600160a01b03841660009081526006602052604090205460ff168015611e2857506001600160a01b03831660009081526006602052604090205460ff165b15611e3857611d408484846122ec565b611e438484846122ab565b6000611e656064611e5f600f548661235c90919063ffffffff16565b906119ee565b90506000611e7b611e746119cb565b839061235c565b9050611e878282612368565b8261199757611997601054600e55601154600f55565b6009546008546000918291825b600754811015611fef57826001600060078481548110611ecc57611ecc61266b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f375750816002600060078481548110611f1057611f1061266b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f4d57600954600854945094505050509091565b611f936001600060078481548110611f6757611f6761266b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611a5d565b9250611fdb6002600060078481548110611faf57611faf61266b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611a5d565b915080611fe7816126ae565b915050611eaa565b50600854600954611fff916119ee565b821015612016576009546008549350935050509091565b90939092509050565b60008080806120336064611e5f898961235c565b905060006120466064611e5f8a8961235c565b9050600061205e826120588b86611a5d565b90611a5d565b9992985090965090945050505050565b600080808061207d888761235c565b9050600061208b888861235c565b90506000612099878961235c565b905060006120ab826120588686611a5d565b939b939a50919850919650505050505050565b600e541580156120ce5750600f54155b156120d557565b600e8054601055600f805460115560009182905555565b60008060008060006120fd86611a06565b6001600160a01b038d166000908152600260205260409020549499509297509095509350915061212d9087611a5d565b6001600160a01b03891660009081526002602090815260408083209390935560019052205461215c9086611a5d565b6001600160a01b03808a16600090815260016020526040808220939093559089168152205461218b90856119fa565b6001600160a01b0388166000908152600160205260409020556121ae83826123d4565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121f391815260200190565b60405180910390a35050505050505050565b600080600080600061221686611a06565b6001600160a01b038d16600090815260016020526040902054949950929750909550935091506122469086611a5d565b6001600160a01b03808a16600090815260016020908152604080832094909455918a1681526002909152205461227c90836119fa565b6001600160a01b03881660009081526002602090815260408083209390935560019052205461218b90856119fa565b60008060008060006122bc86611a06565b6001600160a01b038d166000908152600160205260409020549499509297509095509350915061215c9086611a5d565b60008060008060006122fd86611a06565b6001600160a01b038d166000908152600260205260409020549499509297509095509350915061232d9087611a5d565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546122469086611a5d565b6000610b0f828461264c565b3060009081526001602052604090205461238290826119fa565b3060009081526001602090815260408083209390935560069052205460ff161561145957306000908152600260205260409020546123c090836119fa565b306000908152600260205260409020555050565b6009546123e19083611a5d565b600955600a546123f190826119fa565b600a555050565b600060208083528351808285015260005b8181101561242557858101830151858201604001528201612409565b81811115612437576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cff57600080fd5b6000806040838503121561247557600080fd5b82356124808161244d565b946020939093013593505050565b6000602082840312156124a057600080fd5b5035919050565b6000806000606084860312156124bc57600080fd5b83356124c78161244d565b925060208401356124d78161244d565b929592945050506040919091013590565b6000602082840312156124fa57600080fd5b8135610b0f8161244d565b8035801515811461251557600080fd5b919050565b6000806040838503121561252d57600080fd5b8235915061253d60208401612505565b90509250929050565b60006020828403121561255857600080fd5b610b0f82612505565b6000806040838503121561257457600080fd5b823561257f8161244d565b915061253d60208401612505565b600080604083850312156125a057600080fd5b82356125ab8161244d565b915060208301356125bb8161244d565b809150509250929050565b600181811c908216806125da57607f821691505b602082108114156125fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561266657612666612636565b500290565b634e487b7160e01b600052603260045260246000fd5b60008282101561269357612693612636565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156126c2576126c2612636565b5060010190565b600082198211156126dc576126dc612636565b500190565b6000826126fe57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561271557600080fd5b8151610b0f8161244d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127705784516001600160a01b03168352938301939183019160010161274b565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220897085d883f788277a7f5798a467a7da4d3a41855d0e47bd1f0543d7c48ea2a164736f6c6343000809003300000000000000000000000031ccac855635c16e0941843d5a24b1374ce0a4ba

Deployed Bytecode

0x60806040526004361061024a5760003560e01c80636d8b052711610139578063a985ceef116100b6578063eb9d283e1161007a578063eb9d283e14610736578063f2cc0c181461074b578063f2fde38b1461076b578063f42938901461078b578063f815a842146107a0578063f84354f1146107b357600080fd5b8063a985ceef14610656578063af9549e014610677578063cba0e99614610697578063dd62ed3e146106d0578063e01af92c1461071657600080fd5b80637ef1f70c116100fd5780637ef1f70c146105c25780638da5cb5b146105e357806395d89b4114610601578063a457c2d714610616578063a9059cbb1461063657600080fd5b80636d8b0527146105375780636ddd17131461054c57806370a082311461056d578063715018a61461058d5780637c39fcdb146105a257600080fd5b8063313ce567116101c757806351bc3c851161018b57806351bc3c85146104895780635342acb41461049e5780635880b873146104d75780635932ead1146104f75780635c9213f11461051757600080fd5b8063313ce567146103d357806339509351146103f55780633bd5d173146104155780634549b0391461043557806349bd5a5e1461045557600080fd5b80631bbae6e01161020e5780631bbae6e01461033157806323b872dd146103535780632866716214610373578063299b8887146103935780632d838119146103b357600080fd5b806306fdde0314610256578063095ea7b31461028157806313114a9d146102b15780631694505e146102d057806318160ddd1461031c57600080fd5b3661025157005b600080fd5b34801561026257600080fd5b5061026b6107d3565b60405161027891906123f8565b60405180910390f35b34801561028d57600080fd5b506102a161029c366004612462565b610865565b6040519015158152602001610278565b3480156102bd57600080fd5b50600a545b604051908152602001610278565b3480156102dc57600080fd5b506103047f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610278565b34801561032857600080fd5b506008546102c2565b34801561033d57600080fd5b5061035161034c36600461248e565b61087c565b005b34801561035f57600080fd5b506102a161036e3660046124a7565b610946565b34801561037f57600080fd5b5061035161038e36600461248e565b6109af565b34801561039f57600080fd5b506103516103ae3660046124e8565b610a46565b3480156103bf57600080fd5b506102c26103ce36600461248e565b610a92565b3480156103df57600080fd5b50600d5460405160ff9091168152602001610278565b34801561040157600080fd5b506102a1610410366004612462565b610b16565b34801561042157600080fd5b5061035161043036600461248e565b610b4c565b34801561044157600080fd5b506102c261045036600461251a565b610c34565b34801561046157600080fd5b506103047f00000000000000000000000097fed55bc2c982c611f051139c24bdb207fc6ccd81565b34801561049557600080fd5b50610351610cbf565b3480156104aa57600080fd5b506102a16104b93660046124e8565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156104e357600080fd5b506103516104f236600461248e565b610d02565b34801561050357600080fd5b50610351610512366004612546565b610d8f565b34801561052357600080fd5b50610351610532366004612546565b610dd7565b34801561054357600080fd5b506013546102c2565b34801561055857600080fd5b506012546102a190600160a81b900460ff1681565b34801561057957600080fd5b506102c26105883660046124e8565b610e1f565b34801561059957600080fd5b50610351610e7e565b3480156105ae57600080fd5b50601254610304906001600160a01b031681565b3480156105ce57600080fd5b506012546102a190600160b01b900460ff1681565b3480156105ef57600080fd5b506000546001600160a01b0316610304565b34801561060d57600080fd5b5061026b610eb4565b34801561062257600080fd5b506102a1610631366004612462565b610ec3565b34801561064257600080fd5b506102a1610651366004612462565b610f12565b34801561066257600080fd5b506012546102a190600160b81b900460ff1681565b34801561068357600080fd5b50610351610692366004612561565b610f1f565b3480156106a357600080fd5b506102a16106b23660046124e8565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106dc57600080fd5b506102c26106eb36600461258d565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561072257600080fd5b50610351610731366004612546565b610f74565b34801561074257600080fd5b506014546102c2565b34801561075757600080fd5b506103516107663660046124e8565b610fbc565b34801561077757600080fd5b506103516107863660046124e8565b6111da565b34801561079757600080fd5b50610351611272565b3480156107ac57600080fd5b50476102c2565b3480156107bf57600080fd5b506103516107ce3660046124e8565b6112a6565b6060600b80546107e2906125c6565b80601f016020809104026020016040519081016040528092919081815260200182805461080e906125c6565b801561085b5780601f106108305761010080835404028352916020019161085b565b820191906000526020600020905b81548152906001019060200180831161083e57829003601f168201915b5050505050905090565b600061087233848461145d565b5060015b92915050565b6000546001600160a01b031633146108af5760405162461bcd60e51b81526004016108a690612601565b60405180910390fd5b6503a35294400081101561092b5760405162461bcd60e51b815260206004820152603a60248201527f6d61785478416d6f756e742073686f756c64206265206772656174657220746860448201527f616e204d494e5f4255595f53454c4c5f54584e5f414d4f554e5400000000000060648201526084016108a6565b600061093f82670de0b6b3a764000061264c565b6013555050565b6000610953848484611581565b6109a584336109a085604051806060016040528060288152602001612792602891396001600160a01b038a166000908152600360209081526040808320338452909152902054919061199f565b61145d565b5060019392505050565b6000546001600160a01b031633146109d95760405162461bcd60e51b81526004016108a690612601565b600181101580156109eb575060078111155b610a415760405162461bcd60e51b815260206004820152602160248201527f7465616d4665652073686f756c64206265206265747765656e203120616e64206044820152603760f81b60648201526084016108a6565b600f55565b6000546001600160a01b03163314610a705760405162461bcd60e51b81526004016108a690612601565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b6000600954821115610af95760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108a6565b6000610b036119cb565b9050610b0f83826119ee565b9392505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916108729185906109a090866119fa565b3360008181526006602052604090205460ff1615610bc15760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108a6565b6000610bcc83611a06565b505050506001600160a01b038316600090815260016020526040902054909150610bf69082611a5d565b6001600160a01b038316600090815260016020526040902055600954610c1c9082611a5d565b600955600a54610c2c90846119fa565b600a55505050565b6000600854831115610c885760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108a6565b81610ca6576000610c9884611a06565b509294506108769350505050565b6000610cb184611a06565b509194506108769350505050565b6000546001600160a01b03163314610ce95760405162461bcd60e51b81526004016108a690612601565b6000610cf430610e1f565b9050610cff81611a69565b50565b6000546001600160a01b03163314610d2c5760405162461bcd60e51b81526004016108a690612601565b60018110158015610d3e575060038111155b610d8a5760405162461bcd60e51b815260206004820181905260248201527f7461784665652073686f756c64206265206265747765656e203120616e64203360448201526064016108a6565b600e55565b6000546001600160a01b03163314610db95760405162461bcd60e51b81526004016108a690612601565b60128054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610e015760405162461bcd60e51b81526004016108a690612601565b60128054911515600160b01b0260ff60b01b19909216919091179055565b6001600160a01b03811660009081526006602052604081205460ff1615610e5c57506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461087690610a92565b6000546001600160a01b03163314610ea85760405162461bcd60e51b81526004016108a690612601565b610eb26000611c58565b565b6060600c80546107e2906125c6565b600061087233846109a0856040518060600160405280602581526020016127ba602591393360009081526003602090815260408083206001600160a01b038d168452909152902054919061199f565b6000610872338484611581565b6000546001600160a01b03163314610f495760405162461bcd60e51b81526004016108a690612601565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610f9e5760405162461bcd60e51b81526004016108a690612601565b60128054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b03163314610fe65760405162461bcd60e51b81526004016108a690612601565b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b038216141561105e5760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c75646520556e697377617020726f757465604482015261391760f11b60648201526084016108a6565b6001600160a01b03811660009081526006602052604090205460ff16156110c75760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108a6565b6007546103e81161111a5760405162461bcd60e51b815260206004820152601960248201527f4578636c75646564206c69737420697320746f6f206c6f6e670000000000000060448201526064016108a6565b6001600160a01b03811660009081526001602052604090205415611174576001600160a01b03811660009081526001602052604090205461115a90610a92565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600660205260408120805460ff191660019081179091556007805491820181559091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319169091179055565b6000546001600160a01b031633146112045760405162461bcd60e51b81526004016108a690612601565b6001600160a01b0381166112695760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a6565b610cff81611c58565b6000546001600160a01b0316331461129c5760405162461bcd60e51b81526004016108a690612601565b47610cff81611ca8565b6000546001600160a01b031633146112d05760405162461bcd60e51b81526004016108a690612601565b6001600160a01b03811660009081526006602052604090205460ff166113385760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108a6565b60005b60075481101561145957816001600160a01b0316600782815481106113625761136261266b565b6000918252602090912001546001600160a01b03161415611447576007805461138d90600190612681565b8154811061139d5761139d61266b565b600091825260209091200154600780546001600160a01b0390921691839081106113c9576113c961266b565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600690925220805460ff19169055600780548061142157611421612698565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611451816126ae565b91505061133b565b5050565b6001600160a01b0383166114bf5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a6565b6001600160a01b0382166115205760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a6565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115e55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108a6565b6001600160a01b0382166116475760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108a6565b600081116116a95760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108a6565b601254600160b81b900460ff1615806116fb57506001600160a01b038316600090815260046020526040902054421180156116fb57506001600160a01b03821660009081526004602052604090205442115b6117605760405162461bcd60e51b815260206004820152603060248201527f436f6f6c646f776e20697320656e61626c65642e2054727920616761696e206960448201526f371030903332bb9036b4b73aba32b99760811b60648201526084016108a6565b6000546001600160a01b0384811691161480159061178c57506000546001600160a01b03838116911614155b80156117a15750601254600160b01b900460ff165b15611809576013548111156118095760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108a6565b600061181430610e1f565b9050601354811061182457506013545b6014546012549082101590600160a01b900460ff1615801561184f5750601254600160a81b900460ff165b80156118585750805b801561189657507f00000000000000000000000097fed55bc2c982c611f051139c24bdb207fc6ccd6001600160a01b0316856001600160a01b031614155b156118b6576118a482611a69565b4780156118b4576118b447611ca8565b505b6001600160a01b03851660009081526005602052604090205460019060ff16806118f857506001600160a01b03851660009081526005602052604090205460ff165b15611901575060005b61190d86868684611ce2565b6001600160a01b03861660009081526005602052604090205460ff166119525761193842603c6126c9565b6001600160a01b0387166000908152600460205260409020555b6001600160a01b03851660009081526005602052604090205460ff166119975761197d42603c6126c9565b6001600160a01b0386166000908152600460205260409020555b505050505050565b600081848411156119c35760405162461bcd60e51b81526004016108a691906123f8565b505050900390565b60008060006119d8611e9d565b90925090506119e782826119ee565b9250505090565b6000610b0f82846126e1565b6000610b0f82846126c9565b600080600080600080600080611a2189600e54600f5461201f565b9250925092506000611a316119cb565b90506000806000611a448d87868861206e565b919f909e50909c50969a50949850949650505050505050565b6000610b0f8284612681565b6012805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611ab157611ab161266b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611b2a57600080fd5b505afa158015611b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b629190612703565b81600181518110611b7557611b7561266b565b60200260200101906001600160a01b031690816001600160a01b031681525050611bc0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461145d565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790611c15908590600090869030904290600401612720565b600060405180830381600087803b158015611c2f57600080fd5b505af1158015611c43573d6000803e3d6000fd5b50506012805460ff60a01b1916905550505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611459573d6000803e3d6000fd5b80611cef57611cef6120be565b6001600160a01b03841660009081526006602052604090205460ff168015611d3057506001600160a01b03831660009081526006602052604090205460ff16155b15611d4557611d408484846120ec565b611e43565b6001600160a01b03841660009081526006602052604090205460ff16158015611d8657506001600160a01b03831660009081526006602052604090205460ff165b15611d9657611d40848484612205565b6001600160a01b03841660009081526006602052604090205460ff16158015611dd857506001600160a01b03831660009081526006602052604090205460ff16155b15611de857611d408484846122ab565b6001600160a01b03841660009081526006602052604090205460ff168015611e2857506001600160a01b03831660009081526006602052604090205460ff165b15611e3857611d408484846122ec565b611e438484846122ab565b6000611e656064611e5f600f548661235c90919063ffffffff16565b906119ee565b90506000611e7b611e746119cb565b839061235c565b9050611e878282612368565b8261199757611997601054600e55601154600f55565b6009546008546000918291825b600754811015611fef57826001600060078481548110611ecc57611ecc61266b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611f375750816002600060078481548110611f1057611f1061266b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611f4d57600954600854945094505050509091565b611f936001600060078481548110611f6757611f6761266b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611a5d565b9250611fdb6002600060078481548110611faf57611faf61266b565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611a5d565b915080611fe7816126ae565b915050611eaa565b50600854600954611fff916119ee565b821015612016576009546008549350935050509091565b90939092509050565b60008080806120336064611e5f898961235c565b905060006120466064611e5f8a8961235c565b9050600061205e826120588b86611a5d565b90611a5d565b9992985090965090945050505050565b600080808061207d888761235c565b9050600061208b888861235c565b90506000612099878961235c565b905060006120ab826120588686611a5d565b939b939a50919850919650505050505050565b600e541580156120ce5750600f54155b156120d557565b600e8054601055600f805460115560009182905555565b60008060008060006120fd86611a06565b6001600160a01b038d166000908152600260205260409020549499509297509095509350915061212d9087611a5d565b6001600160a01b03891660009081526002602090815260408083209390935560019052205461215c9086611a5d565b6001600160a01b03808a16600090815260016020526040808220939093559089168152205461218b90856119fa565b6001600160a01b0388166000908152600160205260409020556121ae83826123d4565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121f391815260200190565b60405180910390a35050505050505050565b600080600080600061221686611a06565b6001600160a01b038d16600090815260016020526040902054949950929750909550935091506122469086611a5d565b6001600160a01b03808a16600090815260016020908152604080832094909455918a1681526002909152205461227c90836119fa565b6001600160a01b03881660009081526002602090815260408083209390935560019052205461218b90856119fa565b60008060008060006122bc86611a06565b6001600160a01b038d166000908152600160205260409020549499509297509095509350915061215c9086611a5d565b60008060008060006122fd86611a06565b6001600160a01b038d166000908152600260205260409020549499509297509095509350915061232d9087611a5d565b6001600160a01b0389166000908152600260209081526040808320939093556001905220546122469086611a5d565b6000610b0f828461264c565b3060009081526001602052604090205461238290826119fa565b3060009081526001602090815260408083209390935560069052205460ff161561145957306000908152600260205260409020546123c090836119fa565b306000908152600260205260409020555050565b6009546123e19083611a5d565b600955600a546123f190826119fa565b600a555050565b600060208083528351808285015260005b8181101561242557858101830151858201604001528201612409565b81811115612437576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610cff57600080fd5b6000806040838503121561247557600080fd5b82356124808161244d565b946020939093013593505050565b6000602082840312156124a057600080fd5b5035919050565b6000806000606084860312156124bc57600080fd5b83356124c78161244d565b925060208401356124d78161244d565b929592945050506040919091013590565b6000602082840312156124fa57600080fd5b8135610b0f8161244d565b8035801515811461251557600080fd5b919050565b6000806040838503121561252d57600080fd5b8235915061253d60208401612505565b90509250929050565b60006020828403121561255857600080fd5b610b0f82612505565b6000806040838503121561257457600080fd5b823561257f8161244d565b915061253d60208401612505565b600080604083850312156125a057600080fd5b82356125ab8161244d565b915060208301356125bb8161244d565b809150509250929050565b600181811c908216806125da57607f821691505b602082108114156125fb57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561266657612666612636565b500290565b634e487b7160e01b600052603260045260246000fd5b60008282101561269357612693612636565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156126c2576126c2612636565b5060010190565b600082198211156126dc576126dc612636565b500190565b6000826126fe57634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561271557600080fd5b8151610b0f8161244d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156127705784516001600160a01b03168352938301939183019160010161274b565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220897085d883f788277a7f5798a467a7da4d3a41855d0e47bd1f0543d7c48ea2a164736f6c63430008090033

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

00000000000000000000000031ccac855635c16e0941843d5a24b1374ce0a4ba

-----Decoded View---------------
Arg [0] : opsTeamWalletAddress (address): 0x31CCaC855635C16E0941843d5a24B1374ce0A4BA

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000031ccac855635c16e0941843d5a24b1374ce0a4ba


Deployed Bytecode Sourcemap

9553:18657:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12236:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13148:161;;;;;;;;;;-1:-1:-1;13148:161:7;;;;;:::i;:::-;;:::i;:::-;;;1237:14:10;;1230:22;1212:41;;1200:2;1185:18;13148:161:7;1072:187:10;14563:87:7;;;;;;;;;;-1:-1:-1;14632:10:7;;14563:87;;;1410:25:10;;;1398:2;1383:18;14563:87:7;1264:177:10;10604:51:7;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1637:32:10;;;1619:51;;1607:2;1592:18;10604:51:7;1446:230:10;12513:95:7;;;;;;;;;;-1:-1:-1;12593:7:7;;12513:95;;27902:305;;;;;;;;;;-1:-1:-1;27902:305:7;;;;;:::i;:::-;;:::i;:::-;;13317:313;;;;;;;;;;-1:-1:-1;13317:313:7;;;;;:::i;:::-;;:::i;27556:181::-;;;;;;;;;;-1:-1:-1;27556:181:7;;;;;:::i;:::-;;:::i;27745:149::-;;;;;;;;;;-1:-1:-1;27745:149:7;;;;;:::i;:::-;;:::i;15484:253::-;;;;;;;;;;-1:-1:-1;15484:253:7;;;;;:::i;:::-;;:::i;12422:83::-;;;;;;;;;;-1:-1:-1;12488:9:7;;12422:83;;12488:9;;;;2729:36:10;;2717:2;2702:18;12422:83:7;2587:184:10;13638:218:7;;;;;;;;;;-1:-1:-1;13638:218:7;;;;;:::i;:::-;;:::i;14658:376::-;;;;;;;;;;-1:-1:-1;14658:376:7;;;;;:::i;:::-;;:::i;15042:434::-;;;;;;;;;;-1:-1:-1;15042:434:7;;;;;:::i;:::-;;:::i;10662:38::-;;;;;;;;;;;;;;;20705:156;;;;;;;;;;;;;:::i;17099:123::-;;;;;;;;;;-1:-1:-1;17099:123:7;;;;;:::i;:::-;-1:-1:-1;;;;;17187:27:7;17163:4;17187:27;;;:18;:27;;;;;;;;;17099:123;27374:174;;;;;;;;;;-1:-1:-1;27374:174:7;;;;;:::i;:::-;;:::i;21139:107::-;;;;;;;;;;-1:-1:-1;21139:107:7;;;;;:::i;:::-;;:::i;14404:149::-;;;;;;;;;;-1:-1:-1;14404:149:7;;;;;:::i;:::-;;:::i;27020:93::-;;;;;;;;;;-1:-1:-1;27093:12:7;;27020:93;;10735:30;;;;;;;;;;-1:-1:-1;10735:30:7;;;;-1:-1:-1;;;10735:30:7;;;;;;12616:198;;;;;;;;;;-1:-1:-1;12616:198:7;;;;;:::i;:::-;;:::i;1650:94:8:-;;;;;;;;;;;;;:::i;10551:44:7:-;;;;;;;;;;-1:-1:-1;10551:44:7;;;;-1:-1:-1;;;;;10551:44:7;;;10774:38;;;;;;;;;;-1:-1:-1;10774:38:7;;;;-1:-1:-1;;;10774:38:7;;;;;;999:87:8;;;;;;;;;;-1:-1:-1;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;999:87;;12327::7;;;;;;;;;;;;;:::i;13864:269::-;;;;;;;;;;-1:-1:-1;13864:269:7;;;;;:::i;:::-;;:::i;12822:167::-;;;;;;;;;;-1:-1:-1;12822:167:7;;;;;:::i;:::-;;:::i;10819:35::-;;;;;;;;;;-1:-1:-1;10819:35:7;;;;-1:-1:-1;;;10819:35:7;;;;;;14259:137;;;;;;;;;;-1:-1:-1;14259:137:7;;;;;:::i;:::-;;:::i;14141:110::-;;;;;;;;;;-1:-1:-1;14141:110:7;;;;;:::i;:::-;-1:-1:-1;;;;;14223:20:7;14199:4;14223:20;;;:11;:20;;;;;;;;;14141:110;12997:143;;;;;;;;;;-1:-1:-1;12997:143:7;;;;;:::i;:::-;-1:-1:-1;;;;;13105:18:7;;;13078:7;13105:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12997:143;21033:98;;;;;;;;;;-1:-1:-1;21033:98:7;;;;;:::i;:::-;;:::i;27121:127::-;;;;;;;;;;-1:-1:-1;27211:29:7;;27121:127;;15745:515;;;;;;;;;;-1:-1:-1;15745:515:7;;;;;:::i;:::-;;:::i;1899:192:8:-;;;;;;;;;;-1:-1:-1;1899:192:8;;;;;:::i;:::-;;:::i;20869:156:7:-;;;;;;;;;;;;;:::i;27256:110::-;;;;;;;;;;-1:-1:-1;27337:21:7;27256:110;;16268:478;;;;;;;;;;-1:-1:-1;16268:478:7;;;;;:::i;:::-;;:::i;12236:83::-;12273:13;12306:5;12299:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12236:83;:::o;13148:161::-;13223:4;13240:39;681:10:1;13263:7:7;13272:6;13240:8;:39::i;:::-;-1:-1:-1;13297:4:7;13148:161;;;;;:::o;27902:305::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;;;;;;;;;10973:13:7::1;27993:11;:38;;27985:111;;;::::0;-1:-1:-1;;;27985:111:7;;5724:2:10;27985:111:7::1;::::0;::::1;5706:21:10::0;5763:2;5743:18;;;5736:30;5802:34;5782:18;;;5775:62;5873:28;5853:18;;;5846:56;5919:19;;27985:111:7::1;5522:422:10::0;27985:111:7::1;28107:24;28135:22;:11:::0;28150:6:::1;28135:22;:::i;:::-;28168:12;:31:::0;-1:-1:-1;;27902:305:7:o;13317:313::-;13415:4;13432:36;13442:6;13450:9;13461:6;13432:9;:36::i;:::-;13479:121;13488:6;681:10:1;13510:89:7;13548:6;13510:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13510:19:7;;;;;;:11;:19;;;;;;;;681:10:1;13510:33:7;;;;;;;;;;:37;:89::i;:::-;13479:8;:121::i;:::-;-1:-1:-1;13618:4:7;13317:313;;;;;:::o;27556:181::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;27645:1:7::1;27634:7;:12;;:28;;;;;27661:1;27650:7;:12;;27634:28;27626:74;;;::::0;-1:-1:-1;;;27626:74:7;;6456:2:10;27626:74:7::1;::::0;::::1;6438:21:10::0;6495:2;6475:18;;;6468:30;6534:34;6514:18;;;6507:62;-1:-1:-1;;;6585:18:10;;;6578:31;6626:19;;27626:74:7::1;6254:397:10::0;27626:74:7::1;27711:8;:18:::0;27556:181::o;27745:149::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;27842:21:7::1;:44:::0;;-1:-1:-1;;;;;;27842:44:7::1;-1:-1:-1::0;;;;;27842:44:7;;;::::1;::::0;;;::::1;::::0;;27745:149::o;15484:253::-;15550:7;15589;;15578;:18;;15570:73;;;;-1:-1:-1;;;15570:73:7;;6858:2:10;15570:73:7;;;6840:21:10;6897:2;6877:18;;;6870:30;6936:34;6916:18;;;6909:62;-1:-1:-1;;;6987:18:10;;;6980:40;7037:19;;15570:73:7;6656:406:10;15570:73:7;15654:19;15677:10;:8;:10::i;:::-;15654:33;-1:-1:-1;15705:24:7;:7;15654:33;15705:11;:24::i;:::-;15698:31;15484:253;-1:-1:-1;;;15484:253:7:o;13638:218::-;681:10:1;13726:4:7;13775:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;13775:34:7;;;;;;;;;;13726:4;;13743:83;;13766:7;;13775:50;;13814:10;13775:38;:50::i;14658:376::-;681:10:1;14710:14:7;14759:19;;;:11;:19;;;;;;;;14758:20;14750:77;;;;-1:-1:-1;;;14750:77:7;;7269:2:10;14750:77:7;;;7251:21:10;7308:2;7288:18;;;7281:30;7347:34;7327:18;;;7320:62;-1:-1:-1;;;7398:18:10;;;7391:42;7450:19;;14750:77:7;7067:408:10;14750:77:7;14839:15;14862:19;14873:7;14862:10;:19::i;:::-;-1:-1:-1;;;;;;;;;14910:15:7;;;;;;:7;:15;;;;;;14838:43;;-1:-1:-1;14910:28:7;;14838:43;14910:19;:28::i;:::-;-1:-1:-1;;;;;14892:15:7;;;;;;:7;:15;;;;;:46;14959:7;;:20;;14971:7;14959:11;:20::i;:::-;14949:7;:30;15003:10;;:23;;15018:7;15003:14;:23::i;:::-;14990:10;:36;-1:-1:-1;;;14658:376:7:o;15042:434::-;15132:7;15171;;15160;:18;;15152:62;;;;-1:-1:-1;;;15152:62:7;;7682:2:10;15152:62:7;;;7664:21:10;7721:2;7701:18;;;7694:30;7760:33;7740:18;;;7733:61;7811:18;;15152:62:7;7480:355:10;15152:62:7;15230:17;15225:244;;15265:15;15288:19;15299:7;15288:10;:19::i;:::-;-1:-1:-1;15264:43:7;;-1:-1:-1;15322:14:7;;-1:-1:-1;;;;15322:14:7;15225:244;15371:23;15401:19;15412:7;15401:10;:19::i;:::-;-1:-1:-1;15369:51:7;;-1:-1:-1;15435:22:7;;-1:-1:-1;;;;15435:22:7;20705:156;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;20759:23:7::1;20785:24;20803:4;20785:9;:24::i;:::-;20759:50;;20820:33;20837:15;20820:16;:33::i;:::-;20748:113;20705:156::o:0;27374:174::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;27460:1:7::1;27450:6;:11;;:26;;;;;27475:1;27465:6;:11;;27450:26;27442:71;;;::::0;-1:-1:-1;;;27442:71:7;;8042:2:10;27442:71:7::1;::::0;::::1;8024:21:10::0;;;8061:18;;;8054:30;8120:34;8100:18;;;8093:62;8172:18;;27442:71:7::1;7840:356:10::0;27442:71:7::1;27524:7;:16:::0;27374:174::o;21139:107::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;21213:15:7::1;:25:::0;;;::::1;;-1:-1:-1::0;;;21213:25:7::1;-1:-1:-1::0;;;;21213:25:7;;::::1;::::0;;;::::1;::::0;;21139:107::o;14404:149::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;14503:19:7::1;:42:::0;;;::::1;;-1:-1:-1::0;;;14503:42:7::1;-1:-1:-1::0;;;;14503:42:7;;::::1;::::0;;;::::1;::::0;;14404:149::o;12616:198::-;-1:-1:-1;;;;;12706:20:7;;12682:7;12706:20;;;:11;:20;;;;;;;;12702:49;;;-1:-1:-1;;;;;;12735:16:7;;;;;:7;:16;;;;;;;12616:198::o;12702:49::-;-1:-1:-1;;;;;12789:16:7;;;;;;:7;:16;;;;;;12769:37;;:19;:37::i;1650:94:8:-;1045:7;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;12327:87:7:-;12366:13;12399:7;12392:14;;;;;:::i;13864:269::-;13957:4;13974:129;681:10:1;13997:7:7;14006:96;14045:15;14006:96;;;;;;;;;;;;;;;;;681:10:1;14006:25:7;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;14006:34:7;;;;;;;;;;;;:38;:96::i;12822:167::-;12900:4;12917:42;681:10:1;12941:9:7;12952:6;12917:9;:42::i;14259:137::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;14350:27:7;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;14350:38:7::1;::::0;::::1;;::::0;;;::::1;::::0;;14259:137::o;21033:98::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;21102:11:7::1;:21:::0;;;::::1;;-1:-1:-1::0;;;21102:21:7::1;-1:-1:-1::0;;;;21102:21:7;;::::1;::::0;;;::::1;::::0;;21033:98::o;15745:515::-;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;15837:42:7::1;-1:-1:-1::0;;;;;15826:53:7;::::1;;;15818:100;;;::::0;-1:-1:-1;;;15818:100:7;;8403:2:10;15818:100:7::1;::::0;::::1;8385:21:10::0;8442:2;8422:18;;;8415:30;8481:34;8461:18;;;8454:62;-1:-1:-1;;;8532:18:10;;;8525:32;8574:19;;15818:100:7::1;8201:398:10::0;15818:100:7::1;-1:-1:-1::0;;;;;15938:20:7;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;15937:21;15929:61;;;::::0;-1:-1:-1;;;15929:61:7;;8806:2:10;15929:61:7::1;::::0;::::1;8788:21:10::0;8845:2;8825:18;;;8818:30;8884:29;8864:18;;;8857:57;8931:18;;15929:61:7::1;8604:351:10::0;15929:61:7::1;16009:9;:16:::0;16028:4:::1;-1:-1:-1::0;16001:61:7::1;;;::::0;-1:-1:-1;;;16001:61:7;;9162:2:10;16001:61:7::1;::::0;::::1;9144:21:10::0;9201:2;9181:18;;;9174:30;9240:27;9220:18;;;9213:55;9285:18;;16001:61:7::1;8960:349:10::0;16001:61:7::1;-1:-1:-1::0;;;;;16076:16:7;::::1;16095:1;16076:16:::0;;;:7:::1;:16;::::0;;;;;:20;16073:108:::1;;-1:-1:-1::0;;;;;16152:16:7;::::1;;::::0;;;:7:::1;:16;::::0;;;;;16132:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;16113:16:7;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;16073:108:::1;-1:-1:-1::0;;;;;16191:20:7::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;16191:27:7::1;16214:4;16191:27:::0;;::::1;::::0;;;16229:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;16229:23:7::1;::::0;;::::1;::::0;;15745:515::o;1899:192:8:-;1045:7;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;1988:22:8;::::1;1980:73;;;::::0;-1:-1:-1;;;1980:73:8;;9516:2:10;1980:73:8::1;::::0;::::1;9498:21:10::0;9555:2;9535:18;;;9528:30;9594:34;9574:18;;;9567:62;-1:-1:-1;;;9645:18:10;;;9638:36;9691:19;;1980:73:8::1;9314:402:10::0;1980:73:8::1;2064:19;2074:8;2064:9;:19::i;20869:156:7:-:0;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;20952:21:7::1;20984:33;20952:21:::0;20984:13:::1;:33::i;16268:478::-:0;1045:7:8;1072:6;-1:-1:-1;;;;;1072:6:8;681:10:1;1219:23:8;1211:68;;;;-1:-1:-1;;;1211:68:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;16349:20:7;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;16341:60;;;::::0;-1:-1:-1;;;16341:60:7;;8806:2:10;16341:60:7::1;::::0;::::1;8788:21:10::0;8845:2;8825:18;;;8818:30;8884:29;8864:18;;;8857:57;8931:18;;16341:60:7::1;8604:351:10::0;16341:60:7::1;16417:9;16412:327;16436:9;:16:::0;16432:20;::::1;16412:327;;;16494:7;-1:-1:-1::0;;;;;16478:23:7::1;:9;16488:1;16478:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;16478:12:7::1;:23;16474:254;;;16537:9;16547:16:::0;;:20:::1;::::0;16566:1:::1;::::0;16547:20:::1;:::i;:::-;16537:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;16522:9:::1;:12:::0;;-1:-1:-1;;;;;16537:31:7;;::::1;::::0;16532:1;;16522:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;16522:46:7::1;-1:-1:-1::0;;;;;16522:46:7;;::::1;;::::0;;16587:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;16626:11:::1;:20:::0;;;;:28;;-1:-1:-1;;16626:28:7::1;::::0;;16673:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;16673:15:7;;;;;-1:-1:-1;;;;;;16673:15:7::1;::::0;;;;;16412:327:::1;16268:478:::0;:::o;16474:254::-:1;16454:3:::0;::::1;::::0;::::1;:::i;:::-;;;;16412:327;;;;16268:478:::0;:::o;17230:337::-;-1:-1:-1;;;;;17323:19:7;;17315:68;;;;-1:-1:-1;;;17315:68:7;;10457:2:10;17315:68:7;;;10439:21:10;10496:2;10476:18;;;10469:30;10535:34;10515:18;;;10508:62;-1:-1:-1;;;10586:18:10;;;10579:34;10630:19;;17315:68:7;10255:400:10;17315:68:7;-1:-1:-1;;;;;17402:21:7;;17394:68;;;;-1:-1:-1;;;17394:68:7;;10862:2:10;17394:68:7;;;10844:21:10;10901:2;10881:18;;;10874:30;10940:34;10920:18;;;10913:62;-1:-1:-1;;;10991:18:10;;;10984:32;11033:19;;17394:68:7;10660:398:10;17394:68:7;-1:-1:-1;;;;;17475:18:7;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17527:32;;1410:25:10;;;17527:32:7;;1383:18:10;17527:32:7;;;;;;;17230:337;;;:::o;17575:2260::-;-1:-1:-1;;;;;17672:20:7;;17664:70;;;;-1:-1:-1;;;17664:70:7;;11265:2:10;17664:70:7;;;11247:21:10;11304:2;11284:18;;;11277:30;11343:34;11323:18;;;11316:62;-1:-1:-1;;;11394:18:10;;;11387:35;11439:19;;17664:70:7;11063:401:10;17664:70:7;-1:-1:-1;;;;;17753:23:7;;17745:71;;;;-1:-1:-1;;;17745:71:7;;11671:2:10;17745:71:7;;;11653:21:10;11710:2;11690:18;;;11683:30;11749:34;11729:18;;;11722:62;-1:-1:-1;;;11800:18:10;;;11793:33;11843:19;;17745:71:7;11469:399:10;17745:71:7;17844:1;17835:6;:10;17827:64;;;;-1:-1:-1;;;17827:64:7;;12075:2:10;17827:64:7;;;12057:21:10;12114:2;12094:18;;;12087:30;12153:34;12133:18;;;12126:62;-1:-1:-1;;;12204:18:10;;;12197:39;12253:19;;17827:64:7;11873:405:10;17827:64:7;17911:15;;-1:-1:-1;;;17911:15:7;;;;17910:16;;:97;;-1:-1:-1;;;;;;17931:16:7;;;;;;:8;:16;;;;;;17950:15;-1:-1:-1;17931:75:7;;;;-1:-1:-1;;;;;;17969:19:7;;;;;;:8;:19;;;;;;17991:15;-1:-1:-1;17931:75:7;17902:158;;;;-1:-1:-1;;;17902:158:7;;12485:2:10;17902:158:7;;;12467:21:10;12524:2;12504:18;;;12497:30;12563:34;12543:18;;;12536:62;-1:-1:-1;;;12614:18:10;;;12607:46;12670:19;;17902:158:7;12283:412:10;17902:158:7;1045:7:8;1072:6;-1:-1:-1;;;;;18076:17:7;;;1072:6:8;;18076:17:7;;;;:41;;-1:-1:-1;1045:7:8;1072:6;-1:-1:-1;;;;;18097:20:7;;;1072:6:8;;18097:20:7;;18076:41;:64;;;;-1:-1:-1;18121:19:7;;-1:-1:-1;;;18121:19:7;;;;18076:64;18073:158;;;18174:12;;18164:6;:22;;18156:75;;;;-1:-1:-1;;;18156:75:7;;12902:2:10;18156:75:7;;;12884:21:10;12941:2;12921:18;;;12914:30;12980:34;12960:18;;;12953:62;-1:-1:-1;;;13031:18:10;;;13024:38;13079:19;;18156:75:7;12700:404:10;18156:75:7;18497:28;18528:24;18546:4;18528:9;:24::i;:::-;18497:55;;18592:12;;18568:20;:36;18565:112;;-1:-1:-1;18653:12:7;;18565:112;18740:29;;18785:6;;18716:53;;;;;-1:-1:-1;;;18785:6:7;;;;18784:7;:22;;;;-1:-1:-1;18795:11:7;;-1:-1:-1;;;18795:11:7;;;;18784:22;:45;;;;;18810:19;18784:45;:72;;;;;18843:13;-1:-1:-1;;;;;18833:23:7;:6;-1:-1:-1;;;;;18833:23:7;;;18784:72;18780:390;;;18941:38;18958:20;18941:16;:38::i;:::-;19025:21;19064:22;;19061:98;;19107:36;19121:21;19107:13;:36::i;:::-;18858:312;18780:390;-1:-1:-1;;;;;19362:26:7;;19243:12;19362:26;;;:18;:26;;;;;;19258:4;;19362:26;;;:59;;-1:-1:-1;;;;;;19392:29:7;;;;;;:18;:29;;;;;;;;19362:59;19359:105;;;-1:-1:-1;19447:5:7;19359:105;19534:47;19549:6;19556:9;19566:6;19573:7;19534:14;:47::i;:::-;-1:-1:-1;;;;;19599:26:7;;;;;;:18;:26;;;;;;;;19594:109;;19661:30;:15;19680:10;19661:30;:::i;:::-;-1:-1:-1;;;;;19642:16:7;;;;;;:8;:16;;;;;:49;19594:109;-1:-1:-1;;;;;19718:29:7;;;;;;:18;:29;;;;;;;;19713:115;;19786:30;:15;19805:10;19786:30;:::i;:::-;-1:-1:-1;;;;;19764:19:7;;;;;;:8;:19;;;;;:52;19713:115;17653:2182;;;17575:2260;;;:::o;5042:240:9:-;5162:7;5223:12;5215:6;;;;5207:29;;;;-1:-1:-1;;;5207:29:9;;;;;;;;:::i;:::-;-1:-1:-1;;;5258:5:9;;;5042:240::o;26090:163:7:-;26131:7;26152:15;26169;26188:19;:17;:19::i;:::-;26151:56;;-1:-1:-1;26151:56:7;-1:-1:-1;26225:20:7;26151:56;;26225:11;:20::i;:::-;26218:27;;;;26090:163;:::o;3900:98:9:-;3958:7;3985:5;3989:1;3985;:5;:::i;2763:98::-;2821:7;2848:5;2852:1;2848;:5;:::i;24827:458:7:-;24886:7;24895;24904;24913;24922;24943:23;24968:12;24982:16;25002:39;25014:7;25023;;25032:8;;25002:11;:39::i;:::-;24942:99;;;;;;25052:19;25075:10;:8;:10::i;:::-;25052:33;;25097:15;25114:23;25139:12;25155:49;25167:7;25176:4;25182:11;25195:8;25155:11;:49::i;:::-;25096:108;;;;-1:-1:-1;25096:108:7;;-1:-1:-1;25255:15:7;;-1:-1:-1;25272:4:7;;-1:-1:-1;24827:458:7;;-1:-1:-1;;;;;;;24827:458:7:o;3144:98:9:-;3202:7;3229:5;3233:1;3229;:5;:::i;19843:600:7:-;11390:6;:13;;-1:-1:-1;;;;11390:13:7;-1:-1:-1;;;11390:13:7;;;20004:16:::1;::::0;;20018:1:::1;20004:16:::0;;;;;::::1;::::0;;-1:-1:-1;;20004:16:7::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20004:16:7::1;19980:40;;20049:4;20031;20036:1;20031:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;20031:23:7::1;;;-1:-1:-1::0;;;;;20031:23:7::1;;;::::0;::::1;20075:15;-1:-1:-1::0;;;;;20075:20:7::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20065:4;20070:1;20065:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1::0;;;;;20065:32:7::1;;;-1:-1:-1::0;;;;;20065:32:7::1;;;::::0;::::1;20110:62;20127:4;20142:15;20160:11;20110:8;:62::i;:::-;20211:224;::::0;-1:-1:-1;;;20211:224:7;;-1:-1:-1;;;;;20211:15:7::1;:66;::::0;::::1;::::0;:224:::1;::::0;20292:11;;20318:1:::1;::::0;20362:4;;20389::::1;::::0;20409:15:::1;::::0;20211:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11426:6:7;:14;;-1:-1:-1;;;;11426:14:7;;;-1:-1:-1;;;;19843:600:7:o;2099:173:8:-;2155:16;2174:6;;-1:-1:-1;;;;;2191:17:8;;;-1:-1:-1;;;;;;2191:17:8;;;;;;2224:40;;2174:6;;;;;;;2224:40;;2155:16;2224:40;2144:128;2099:173;:::o;20451:104:7:-;20509:21;;:38;;-1:-1:-1;;;;;20509:21:7;;;;:38;;;;;20540:6;;20509:21;:38;:21;:38;20540:6;20509:21;:38;;;;;;;;;;;;;;;;;;;21254:972;21366:7;21362:40;;21388:14;:12;:14::i;:::-;-1:-1:-1;;;;;21419:19:7;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;21443:22:7;;;;;;:11;:22;;;;;;;;21442:23;21419:46;21415:597;;;21482:48;21504:6;21512:9;21523:6;21482:21;:48::i;:::-;21415:597;;;-1:-1:-1;;;;;21553:19:7;;;;;;:11;:19;;;;;;;;21552:20;:46;;;;-1:-1:-1;;;;;;21576:22:7;;;;;;:11;:22;;;;;;;;21552:46;21548:464;;;21615:46;21635:6;21643:9;21654:6;21615:19;:46::i;21548:464::-;-1:-1:-1;;;;;21684:19:7;;;;;;:11;:19;;;;;;;;21683:20;:47;;;;-1:-1:-1;;;;;;21708:22:7;;;;;;:11;:22;;;;;;;;21707:23;21683:47;21679:333;;;21747:44;21765:6;21773:9;21784:6;21747:17;:44::i;21679:333::-;-1:-1:-1;;;;;21813:19:7;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;21836:22:7;;;;;;:11;:22;;;;;;;;21813:45;21809:203;;;21875:48;21897:6;21905:9;21916:6;21875:21;:48::i;21809:203::-;21956:44;21974:6;21982:9;21993:6;21956:17;:44::i;:::-;22022:16;22041:29;22066:3;22041:20;22052:8;;22041:6;:10;;:20;;;;:::i;:::-;:24;;:29::i;:::-;22022:48;;22081:16;22100:24;22113:10;:8;:10::i;:::-;22100:8;;:12;:24::i;:::-;22081:43;;22135:29;22145:8;22155;22135:9;:29::i;:::-;22181:7;22177:41;;22203:15;17030;;17020:7;:25;17067:16;;17056:8;:27;16976:115;26261:555;26358:7;;26394;;26311;;;;;26412:289;26436:9;:16;26432:20;;26412:289;;;26502:7;26478;:21;26486:9;26496:1;26486:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26486:12:7;26478:21;;;;;;;;;;;;;:31;;:66;;;26537:7;26513;:21;26521:9;26531:1;26521:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26521:12:7;26513:21;;;;;;;;;;;;;:31;26478:66;26474:97;;;26554:7;;26563;;26546:25;;;;;;;26261:555;;:::o;26474:97::-;26596:34;26608:7;:21;26616:9;26626:1;26616:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26616:12:7;26608:21;;;;;;;;;;;;;26596:7;;:11;:34::i;:::-;26586:44;;26655:34;26667:7;:21;26675:9;26685:1;26675:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;26675:12:7;26667:21;;;;;;;;;;;;;26655:7;;:11;:34::i;:::-;26645:44;-1:-1:-1;26454:3:7;;;;:::i;:::-;;;;26412:289;;;-1:-1:-1;26737:7:7;;26725;;:20;;:11;:20::i;:::-;26715:7;:30;26711:61;;;26755:7;;26764;;26747:25;;;;;;26261:555;;:::o;26711:61::-;26791:7;;26800;;-1:-1:-1;26261:555:7;-1:-1:-1;26261:555:7:o;25293:360::-;25386:7;;;;25439:28;25463:3;25439:19;:7;25451:6;25439:11;:19::i;:28::-;25424:43;-1:-1:-1;25478:16:7;25497:29;25522:3;25497:20;:7;25509;25497:11;:20::i;:29::-;25478:48;-1:-1:-1;25537:23:7;25563:31;25478:48;25563:17;:7;25575:4;25563:11;:17::i;:::-;:21;;:31::i;:::-;25537:57;25630:4;;-1:-1:-1;25636:8:7;;-1:-1:-1;25293:360:7;;-1:-1:-1;;;;;25293:360:7:o;25661:421::-;25774:7;;;;25830:24;:7;25842:11;25830;:24::i;:::-;25812:42;-1:-1:-1;25865:12:7;25880:21;:4;25889:11;25880:8;:21::i;:::-;25865:36;-1:-1:-1;25912:16:7;25931:25;:8;25944:11;25931:12;:25::i;:::-;25912:44;-1:-1:-1;25967:23:7;25993:31;25912:44;25993:17;:7;26005:4;25993:11;:17::i;:31::-;26043:7;;;;-1:-1:-1;26069:4:7;;-1:-1:-1;25661:421:7;;-1:-1:-1;;;;;;;25661:421:7:o;16754:214::-;16800:7;;:12;:29;;;;-1:-1:-1;16816:8:7;;:13;16800:29;16797:41;;;16754:214::o;16797:41::-;16868:7;;;16850:15;:25;16905:8;;;16886:16;:27;-1:-1:-1;16926:11:7;;;;16948:12;16754:214::o;23213:506::-;23316:15;23333:23;23358:12;23372:23;23397:12;23413:19;23424:7;23413:10;:19::i;:::-;-1:-1:-1;;;;;23461:15:7;;;;;;:7;:15;;;;;;23315:117;;-1:-1:-1;23315:117:7;;-1:-1:-1;23315:117:7;;-1:-1:-1;23315:117:7;-1:-1:-1;23315:117:7;-1:-1:-1;23461:28:7;;23481:7;23461:19;:28::i;:::-;-1:-1:-1;;;;;23443:15:7;;;;;;:7;:15;;;;;;;;:46;;;;23518:7;:15;;;;:28;;23538:7;23518:19;:28::i;:::-;-1:-1:-1;;;;;23500:15:7;;;;;;;:7;:15;;;;;;:46;;;;23578:18;;;;;;;:39;;23601:15;23578:22;:39::i;:::-;-1:-1:-1;;;;;23557:18:7;;;;;;:7;:18;;;;;:60;23628:23;23640:4;23646;23628:11;:23::i;:::-;23684:9;-1:-1:-1;;;;;23667:44:7;23676:6;-1:-1:-1;;;;;23667:44:7;;23695:15;23667:44;;;;1410:25:10;;1398:2;1383:18;;1264:177;23667:44:7;;;;;;;;23304:415;;;;;23213:506;;;:::o;22687:518::-;22788:15;22805:23;22830:12;22844:23;22869:12;22885:19;22896:7;22885:10;:19::i;:::-;-1:-1:-1;;;;;22933:15:7;;;;;;:7;:15;;;;;;22787:117;;-1:-1:-1;22787:117:7;;-1:-1:-1;22787:117:7;;-1:-1:-1;22787:117:7;-1:-1:-1;22787:117:7;-1:-1:-1;22933:28:7;;22787:117;22933:19;:28::i;:::-;-1:-1:-1;;;;;22915:15:7;;;;;;;:7;:15;;;;;;;;:46;;;;22993:18;;;;;:7;:18;;;;;:39;;23016:15;22993:22;:39::i;:::-;-1:-1:-1;;;;;22972:18:7;;;;;;:7;:18;;;;;;;;:60;;;;23064:7;:18;;;;:39;;23087:15;23064:22;:39::i;22234:445::-;22333:15;22350:23;22375:12;22389:23;22414:12;22430:19;22441:7;22430:10;:19::i;:::-;-1:-1:-1;;;;;22478:15:7;;;;;;:7;:15;;;;;;22332:117;;-1:-1:-1;22332:117:7;;-1:-1:-1;22332:117:7;;-1:-1:-1;22332:117:7;-1:-1:-1;22332:117:7;-1:-1:-1;22478:28:7;;22332:117;22478:19;:28::i;23727:577::-;23830:15;23847:23;23872:12;23886:23;23911:12;23927:19;23938:7;23927:10;:19::i;:::-;-1:-1:-1;;;;;23975:15:7;;;;;;:7;:15;;;;;;23829:117;;-1:-1:-1;23829:117:7;;-1:-1:-1;23829:117:7;;-1:-1:-1;23829:117:7;-1:-1:-1;23829:117:7;-1:-1:-1;23975:28:7;;23995:7;23975:19;:28::i;:::-;-1:-1:-1;;;;;23957:15:7;;;;;;:7;:15;;;;;;;;:46;;;;24032:7;:15;;;;:28;;24052:7;24032:19;:28::i;3501:98:9:-;3559:7;3586:5;3590:1;3586;:5;:::i;24312:259:7:-;24427:4;24411:22;;;;:7;:22;;;;;;:36;;24438:8;24411:26;:36::i;:::-;24402:4;24386:22;;;;:7;:22;;;;;;;;:61;;;;24461:11;:26;;;;;;24458:105;;;24543:4;24527:22;;;;:7;:22;;;;;;:36;;24554:8;24527:26;:36::i;:::-;24518:4;24502:22;;;;:7;:22;;;;;:61;24312:259;;:::o;24579:147::-;24657:7;;:17;;24669:4;24657:11;:17::i;:::-;24647:7;:27;24698:10;;:20;;24713:4;24698:14;:20::i;:::-;24685:10;:33;-1:-1:-1;;24579:147:7:o;14:597:10:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:10;574:15;-1:-1:-1;;570:29:10;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:10:o;616:131::-;-1:-1:-1;;;;;691:31:10;;681:42;;671:70;;737:1;734;727:12;752:315;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:10:o;1681:180::-;1740:6;1793:2;1781:9;1772:7;1768:23;1764:32;1761:52;;;1809:1;1806;1799:12;1761:52;-1:-1:-1;1832:23:10;;1681:180;-1:-1:-1;1681:180:10:o;1866:456::-;1943:6;1951;1959;2012:2;2000:9;1991:7;1987:23;1983:32;1980:52;;;2028:1;2025;2018:12;1980:52;2067:9;2054:23;2086:31;2111:5;2086:31;:::i;:::-;2136:5;-1:-1:-1;2193:2:10;2178:18;;2165:32;2206:33;2165:32;2206:33;:::i;:::-;1866:456;;2258:7;;-1:-1:-1;;;2312:2:10;2297:18;;;;2284:32;;1866:456::o;2327:255::-;2394:6;2447:2;2435:9;2426:7;2422:23;2418:32;2415:52;;;2463:1;2460;2453:12;2415:52;2502:9;2489:23;2521:31;2546:5;2521:31;:::i;2776:160::-;2841:20;;2897:13;;2890:21;2880:32;;2870:60;;2926:1;2923;2916:12;2870:60;2776:160;;;:::o;2941:248::-;3006:6;3014;3067:2;3055:9;3046:7;3042:23;3038:32;3035:52;;;3083:1;3080;3073:12;3035:52;3119:9;3106:23;3096:33;;3148:35;3179:2;3168:9;3164:18;3148:35;:::i;:::-;3138:45;;2941:248;;;;;:::o;3654:180::-;3710:6;3763:2;3751:9;3742:7;3738:23;3734:32;3731:52;;;3779:1;3776;3769:12;3731:52;3802:26;3818:9;3802:26;:::i;4063:315::-;4128:6;4136;4189:2;4177:9;4168:7;4164:23;4160:32;4157:52;;;4205:1;4202;4195:12;4157:52;4244:9;4231:23;4263:31;4288:5;4263:31;:::i;:::-;4313:5;-1:-1:-1;4337:35:10;4368:2;4353:18;;4337:35;:::i;4383:388::-;4451:6;4459;4512:2;4500:9;4491:7;4487:23;4483:32;4480:52;;;4528:1;4525;4518:12;4480:52;4567:9;4554:23;4586:31;4611:5;4586:31;:::i;:::-;4636:5;-1:-1:-1;4693:2:10;4678:18;;4665:32;4706:33;4665:32;4706:33;:::i;:::-;4758:7;4748:17;;;4383:388;;;;;:::o;4776:380::-;4855:1;4851:12;;;;4898;;;4919:61;;4973:4;4965:6;4961:17;4951:27;;4919:61;5026:2;5018:6;5015:14;4995:18;4992:38;4989:161;;;5072:10;5067:3;5063:20;5060:1;5053:31;5107:4;5104:1;5097:15;5135:4;5132:1;5125:15;4989:161;;4776:380;;;:::o;5161:356::-;5363:2;5345:21;;;5382:18;;;5375:30;5441:34;5436:2;5421:18;;5414:62;5508:2;5493:18;;5161:356::o;5949:127::-;6010:10;6005:3;6001:20;5998:1;5991:31;6041:4;6038:1;6031:15;6065:4;6062:1;6055:15;6081:168;6121:7;6187:1;6183;6179:6;6175:14;6172:1;6169:21;6164:1;6157:9;6150:17;6146:45;6143:71;;;6194:18;;:::i;:::-;-1:-1:-1;6234:9:10;;6081:168::o;9721:127::-;9782:10;9777:3;9773:20;9770:1;9763:31;9813:4;9810:1;9803:15;9837:4;9834:1;9827:15;9853:125;9893:4;9921:1;9918;9915:8;9912:34;;;9926:18;;:::i;:::-;-1:-1:-1;9963:9:10;;9853:125::o;9983:127::-;10044:10;10039:3;10035:20;10032:1;10025:31;10075:4;10072:1;10065:15;10099:4;10096:1;10089:15;10115:135;10154:3;-1:-1:-1;;10175:17:10;;10172:43;;;10195:18;;:::i;:::-;-1:-1:-1;10242:1:10;10231:13;;10115:135::o;13109:128::-;13149:3;13180:1;13176:6;13173:1;13170:13;13167:39;;;13186:18;;:::i;:::-;-1:-1:-1;13222:9:10;;13109:128::o;13242:217::-;13282:1;13308;13298:132;;13352:10;13347:3;13343:20;13340:1;13333:31;13387:4;13384:1;13377:15;13415:4;13412:1;13405:15;13298:132;-1:-1:-1;13444:9:10;;13242:217::o;13596:251::-;13666:6;13719:2;13707:9;13698:7;13694:23;13690:32;13687:52;;;13735:1;13732;13725:12;13687:52;13767:9;13761:16;13786:31;13811:5;13786:31;:::i;13852:980::-;14114:4;14162:3;14151:9;14147:19;14193:6;14182:9;14175:25;14219:2;14257:6;14252:2;14241:9;14237:18;14230:34;14300:3;14295:2;14284:9;14280:18;14273:31;14324:6;14359;14353:13;14390:6;14382;14375:22;14428:3;14417:9;14413:19;14406:26;;14467:2;14459:6;14455:15;14441:29;;14488:1;14498:195;14512:6;14509:1;14506:13;14498:195;;;14577:13;;-1:-1:-1;;;;;14573:39:10;14561:52;;14668:15;;;;14633:12;;;;14609:1;14527:9;14498:195;;;-1:-1:-1;;;;;;;14749:32:10;;;;14744:2;14729:18;;14722:60;-1:-1:-1;;;14813:3:10;14798:19;14791:35;14710:3;13852:980;-1:-1:-1;;;13852:980:10:o

Swarm Source

ipfs://897085d883f788277a7f5798a467a7da4d3a41855d0e47bd1f0543d7c48ea2a1
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.