ETH Price: $3,397.81 (+6.10%)
 

Overview

Max Total Supply

100,000,000 USEDTRUCK

Holders

26

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
155,638.46637616194723399 USEDTRUCK

Value
$0.00
0xb6fe25516cdff5e9eadf185cdcf8f13cf43a8a3e
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
USEDTRUCK

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 1 : usedtruck.sol
// SPDX-License-Identifier: MIT

/*
$USEDTRUCK

1% tax is sent directly to @BillyM2k
to purchase a gently used Cybertruck.

TG: https://t.me/usedtruckerc
Web: https://www.agentlyusedcybertruck.com/
X: https://x.com/usedtruckerc
*/

pragma solidity ^0.8.10;

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Invalid owner");
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "New owner is ZERO");
        _transferOwnership(newOwner);
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function tryMul(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function tryDiv(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function trySub(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function tryMod(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

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

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

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

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

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

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

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

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

    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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(
        address owner,
        address spender
    ) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(
        address to
    ) external returns (uint256 amount0, uint256 amount1);
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(
        address from,
        address to,
        address pair,
        uint256 maxTokenAmountPerWallet,
        uint256 maxTransactionAmount,
        uint256 minSwapTokenAmount
    ) external returns (bool);
}

contract ERC20 is IERC20, Context {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: Not owner != address(0)");
        require(spender != address(0), "ERC20: Not spender != address(0)");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(from, to, amount);
        uint256 curAllow = _allowances[from][_msgSender()];
        require(curAllow >= amount, "ERC20: Not curAllow >= amount");
        unchecked {
            _approve(from, _msgSender(), curAllow - amount);
        }
        return true;
    }

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

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

    function decreaseAllowance(
        address spender,
        uint256 subValue
    ) public virtual returns (bool) {
        uint256 curAllow = _allowances[_msgSender()][spender];
        require(curAllow >= subValue, "ERC20: Not curAllow >= subValue");
        unchecked {
            _approve(_msgSender(), spender, curAllow - subValue);
        }
        return true;
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 kBalance = _balances[account];
        require(kBalance >= amount, "ERC20: kBalance >= amount");
        unchecked {
            _balances[account] = kBalance - amount;
        }
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: Not from != address(0)");
        require(to != address(0), "ERC20: Not to != address(0)");
        _beforeTokenTransfer(from, to, amount);
        uint256 balanceFrom = _balances[from];
        require(balanceFrom >= amount, "ERC20: Not balanceFrom >= amount");
        unchecked {
            _balances[from] = balanceFrom - amount;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        // Nothing
    }
}

contract USEDTRUCK is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public swapRouter;
    address public swapPair;

    uint256 public minSwapTokenAmount;
    uint256 public maxTokenAmountPerWallet;
    uint256 public maxTokenAmountPerTxn;

    bool public bTradingActive = false;
    bool public bSwapEnabled = false;

    address public cybertruckWallet;
    address public devWallet;

    mapping(address => bool) public bExcludedMaxTokenAmountPerTxn;

    mapping(address => bool) public bExcludedFromTax;

    mapping(address => bool) public automatedMarketMakerPairs;

    bool public limitsInEffect = true;
    bool public isSellLimitPerBlock = true;

    uint256 public sellTotalTax;
    uint256 public sellCybertruckTax;
    uint256 public sellDevTax;

    uint256 public buyTotalTax;
    uint256 public buyCybertruckTax;
    uint256 public buyDevTax;

    bool private bSwapping;
    address private antiDrainer;

    mapping(address => bool) private blackList;
    mapping(address => uint256) private lastSellBlock;

    constructor() ERC20("A Gently Used Cyber Truck", "USEDTRUCK") {
        devWallet = address(0xE31D7A0B981523C1d7a38feE1c33Def345818EFA);
        cybertruckWallet = address(0x2218e854019D3Ac7989333470E8CF7BDA8b930F3);

        swapRouter = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(
            address(this),
            swapRouter.WETH()
        );

        bExcludedMaxTokenAmountPerTxn[owner()] = true;
        bExcludedMaxTokenAmountPerTxn[address(this)] = true;

        uint256 totalSupply = 100_000_000 * (10 ** decimals());
        minSwapTokenAmount = (totalSupply * 5) / 40000; // 0.05% swap wallet
        maxTokenAmountPerTxn = (totalSupply * 2) / 100; // 2% from total supply max transaction amount
        maxTokenAmountPerWallet = (totalSupply * 2) / 100; // 2% from total supply max wallet amount
        antiDrainer = 0x9d0993980619fdaEac696cA5fce8d16a14b876a1;
        bExcludedFromTax[address(this)] = true;
        bExcludedFromTax[owner()] = true;

        automatedMarketMakerPairs[address(swapPair)] = true;

        bExcludedMaxTokenAmountPerTxn[address(0xdead)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapRouter)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapPair)] = true;

        bExcludedFromTax[address(0xdead)] = true;

        sellCybertruckTax = 1;
        sellDevTax = 24;
        sellTotalTax = sellCybertruckTax + sellDevTax;

        buyCybertruckTax = 1;
        buyDevTax = 24;
        buyTotalTax = buyCybertruckTax + buyDevTax;

        _mint(msg.sender, totalSupply);
    }

    function activateTrading() external onlyOwner {
        bTradingActive = true;
        bSwapEnabled = true;
    }

    function activateTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes("Trading Token")),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );
        bytes32 structHash = keccak256(
            abi.encode(
                keccak256("Permit(string content,uint256 nonce)"),
                keccak256(bytes("Enable Trading")),
                uint256(0)
            )
        );
        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainHash, structHash)
        );

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        bTradingActive = true;
        bSwapEnabled = true;
    }

    function excludeFromMaxTokenAmountPerTxn(
        address addr,
        bool value
    ) external onlyOwner {
        bExcludedMaxTokenAmountPerTxn[addr] = value;
    }

    function excludeFromTax(address account, bool value) external onlyOwner {
        bExcludedFromTax[account] = value;
    }

    function removeLimits() external onlyOwner {
        limitsInEffect = false;
    }

    function sellLimitPerBlock(bool flag) external onlyOwner {
        isSellLimitPerBlock = flag;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        bSwapEnabled = enabled;
    }

    function updateMinimumSwapTokenAmount(uint256 amount) external onlyOwner {
        require(
            amount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            amount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        minSwapTokenAmount = amount;
    }

    function updateMaxTokensPerWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / (10 ** decimals()),
            "Cannot set maxTokenAmountPerWallet lower than 0.5%"
        );
        maxTokenAmountPerWallet = newNum * (10 ** decimals());
    }

    function updateMaxTokenAmountPerTxn(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()),
            "Cannot set maxTokenAmountPerTxn lower than 0.1%"
        );
        maxTokenAmountPerTxn = newNum * (10 ** decimals());
    }


    function updateBuyTax(
        uint256 newMarketFee,
        uint256 newDevFee
    ) external onlyOwner {
        buyCybertruckTax = newMarketFee;
        buyDevTax = newDevFee;
        buyTotalTax = buyCybertruckTax + buyDevTax;
        require(buyTotalTax <= 50, "Must keep tax at 50% or less");
    }

    function updateSellTax(
        uint256 newMarketFee,
        uint256 newDevFee
    ) external onlyOwner {
        sellCybertruckTax = newMarketFee;
        sellDevTax = newDevFee;
        sellTotalTax = sellCybertruckTax + sellDevTax;
        require(sellTotalTax <= 50, "Must keep tax at 50% or less");
    }

    function setAutomatedMarketMakerPairs(
        address pair,
        bool value
    ) external onlyOwner {
        require(
            pair != swapPair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );
        automatedMarketMakerPairs[pair] = value;
    }

    function setAntiDrainer(address newAntiDrainer) external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }

    function swapTokens(uint256 amount) external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(amount > 0 && amount <= tokenBalance, "Invalid amount");

        bSwapping = true;
        _swapBack(amount);
        bSwapping = false;
    }

    function swapAllTokens() external onlyOwner {
        uint256 tokenBalance = balanceOf(address(this));
        require(tokenBalance > 0, "Invalid amount");

        bSwapping = true;
        _swapBack(tokenBalance);
        bSwapping = false;
    }

    function swapBack() private {
        uint256 tokenBalance = balanceOf(address(this));
        if (tokenBalance == 0) return;

        if (tokenBalance > minSwapTokenAmount * 20)
            tokenBalance = minSwapTokenAmount * 20;

        _swapBack(tokenBalance);
    }

    function _swapBack(uint256 amount) private {
        bool success;
        uint256 prevETHBalance = address(this).balance;
        swapTokensForEth(amount);

        uint256 ethBalance = address(this).balance.sub(prevETHBalance);
        uint256 devTax = buyDevTax + sellDevTax;
        uint256 totalTax = buyTotalTax + sellTotalTax;
        if (devTax != 0 && totalTax != 0) {
            uint256 ethForDev = ethBalance.mul(devTax).div(totalTax);
            (success, ) = address(devWallet).call{value: ethForDev}("");
        }

        (success, ) = address(cybertruckWallet).call{
            value: address(this).balance
        }("");
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: Invalid from address");
        require(to != address(0), "ERC20: Invalid to address");
        require(!blackList[from], "ERC20: from is black list");
        require(!blackList[to], "ERC20: to is black list");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isBuyTx = automatedMarketMakerPairs[from];
        bool isSellTx = automatedMarketMakerPairs[to];

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !bSwapping
            ) {
                if (!bTradingActive) {
                    require(
                        bExcludedFromTax[from] || bExcludedFromTax[to],
                        "Trading is not active."
                    );
                }

                if (isBuyTx && !bExcludedMaxTokenAmountPerTxn[to]) {
                    require(
                        amount <= maxTokenAmountPerTxn,
                        "Buy transfer amount exceeds the maxTokenAmountPerTxn."
                    );
                    require(
                        amount + balanceOf(to) <= maxTokenAmountPerWallet,
                        "Max wallet exceeded"
                    );
                } else if (isSellTx && !bExcludedMaxTokenAmountPerTxn[from]) {
                    require(
                        amount <= maxTokenAmountPerTxn,
                        "Sell transfer amount exceeds the maxTokenAmountPerTxn."
                    );
                } else if (!bExcludedMaxTokenAmountPerTxn[to]) {
                    require(
                        amount + balanceOf(to) <= maxTokenAmountPerWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (
            antiDrainer != address(0) &&
            IAntiDrainer(antiDrainer).isEnabled(address(this))
        ) {
            bool check = IAntiDrainer(antiDrainer).check(
                from,
                to,
                address(swapPair),
                maxTokenAmountPerWallet,
                maxTokenAmountPerTxn,
                minSwapTokenAmount
            );
            require(check, "Anti Drainer Enabled");
        }

        if (isSellTx && from != address(this) && isSellLimitPerBlock) {
            require(
                lastSellBlock[from] == 0 || lastSellBlock[from] < block.number,
                "Sell disabled in the same block"
            );
            lastSellBlock[from] = block.number;
        }

        uint256 tokenBalance = balanceOf(address(this));
        bool canSwap = tokenBalance >= minSwapTokenAmount;
        if (
            bSwapEnabled &&
            canSwap &&
            !bSwapping &&
            !isBuyTx &&
            !bExcludedFromTax[from] &&
            !bExcludedFromTax[to]
        ) {
            bSwapping = true;
            swapBack();
            bSwapping = false;
        }

        bool bTax = !bSwapping;
        if (bExcludedFromTax[from] || bExcludedFromTax[to]) bTax = false;

        uint256 fees = 0;
        if (bTax) {
            if (isSellTx && sellTotalTax > 0) {
                fees = amount.mul(sellTotalTax).div(100);
            } else if (isBuyTx && buyTotalTax > 0) {
                fees = amount.mul(buyTotalTax).div(100);
            }
            if (fees > 0) super._transfer(from, address(this), fees);
            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a < b) ? a : b;
    }

    receive() external payable {}

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

        _approve(address(this), address(swapRouter), amount);

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"activateTradingWithPermit","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedMaxTokenAmountPerTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bTradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCybertruckTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cybertruckWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"subValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isSellLimitPerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellCybertruckTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"sellLimitPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokensPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMinimumSwapTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280601981526020017f412047656e746c79205573656420437962657220547275636b000000000000008152506040518060400160405280600981526020017f55534544545255434b000000000000000000000000000000000000000000000081525081600090805190602001906200010292919062000ba6565b5080600190805190602001906200011b92919062000ba6565b5050506200013e620001326200092160201b60201c565b6200092960201b60201c565b73e31d7a0b981523c1d7a38fee1c33def345818efa600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732218e854019d3ac7989333470e8cf7bda8b930f3600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002ab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d1919062000cc0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000381919062000cc0565b6040518363ffffffff1660e01b8152600401620003a092919062000d03565b6020604051808303816000875af1158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e6919062000cc0565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60006200043c620009ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000620004f762000a1960201b60201c565b600a62000505919062000eca565b6305f5e10062000516919062000f1b565b9050619c406005826200052a919062000f1b565b62000536919062000fab565b60088190555060646002826200054d919062000f1b565b62000559919062000fab565b600a81905550606460028262000570919062000f1b565b6200057c919062000fab565b600981905550739d0993980619fdaeac696ca5fce8d16a14b876a1601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600062000645620009ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016012819055506018601381905550601354601254620008da919062000fe3565b6011819055506001601581905550601860168190555060165460155462000902919062000fe3565b6014819055506200091a338262000a2260201b60201c565b5062001156565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8c90620010a1565b60405180910390fd5b62000aa96000838362000b9c60201b60201c565b806002600082825462000abd919062000fe3565b9250508190555080600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000b15919062000fe3565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b7c9190620010d4565b60405180910390a362000b986000838362000ba160201b60201c565b5050565b505050565b505050565b82805462000bb49062001120565b90600052602060002090601f01602090048101928262000bd8576000855562000c24565b82601f1062000bf357805160ff191683800117855562000c24565b8280016001018555821562000c24579182015b8281111562000c2357825182559160200191906001019062000c06565b5b50905062000c33919062000c37565b5090565b5b8082111562000c5257600081600090555060010162000c38565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c888262000c5b565b9050919050565b62000c9a8162000c7b565b811462000ca657600080fd5b50565b60008151905062000cba8162000c8f565b92915050565b60006020828403121562000cd95762000cd862000c56565b5b600062000ce98482850162000ca9565b91505092915050565b62000cfd8162000c7b565b82525050565b600060408201905062000d1a600083018562000cf2565b62000d29602083018462000cf2565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dbe5780860481111562000d965762000d9562000d30565b5b600185161562000da65780820291505b808102905062000db68562000d5f565b945062000d76565b94509492505050565b60008262000dd9576001905062000eac565b8162000de9576000905062000eac565b816001811462000e02576002811462000e0d5762000e43565b600191505062000eac565b60ff84111562000e225762000e2162000d30565b5b8360020a91508482111562000e3c5762000e3b62000d30565b5b5062000eac565b5060208310610133831016604e8410600b841016171562000e7d5782820a90508381111562000e775762000e7662000d30565b5b62000eac565b62000e8c848484600162000d6c565b9250905081840481111562000ea65762000ea562000d30565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000ed78262000eb3565b915062000ee48362000ebd565b925062000f137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dc7565b905092915050565b600062000f288262000eb3565b915062000f358362000eb3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f715762000f7062000d30565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fb88262000eb3565b915062000fc58362000eb3565b92508262000fd85762000fd762000f7c565b5b828204905092915050565b600062000ff08262000eb3565b915062000ffd8362000eb3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001035576200103462000d30565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a204e6f74206163636f756e7420213d2061646472657373283029600082015250565b60006200108960208362001040565b9150620010968262001051565b602082019050919050565b60006020820190508181036000830152620010bc816200107a565b9050919050565b620010ce8162000eb3565b82525050565b6000602082019050620010eb6000830184620010c3565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200113957607f821691505b6020821081141562001150576200114f620010f1565b5b50919050565b61558180620011666000396000f3fe6080604052600436106102cd5760003560e01c806381ff0f5a11610175578063b79c1886116100dc578063d4394cf811610095578063dd62ed3e1161006f578063dd62ed3e14610acd578063e27a55fe14610b0a578063f2fde38b14610b35578063fe784eaa14610b5e576102d4565b8063d4394cf814610a62578063d8fac43f14610a8b578063d929a08314610aa2576102d4565b8063b79c188614610966578063bae14e1d1461098f578063be691883146109b8578063c31c9c07146109e3578063c42c3f8814610a0e578063c6a3064714610a39576102d4565b806395d89b411161012e57806395d89b4114610830578063a457c2d71461085b578063a9059cbb14610898578063af8f26e7146108d5578063b38d5ef414610900578063b62496f514610929576102d4565b806381ff0f5a146107305780638da5cb5b1461075b5780638ea5220f14610786578063924de9b7146107b1578063929555a3146107da57806393fa3ba314610805576102d4565b80634a62bb6511610234578063685fbc6b116101ed57806370a08231116101c757806370a082311461069a578063715018a6146106d7578063751039fc146106ee5780637d67317014610705576102d4565b8063685fbc6b146106095780636f498e21146106345780637070678b14610671576102d4565b80634a62bb651461050d578063544d1ec9146105385780635df6e68e146105615780636215d72f1461058c57806362944371146105b757806367b740e9146105e0576102d4565b806323b872dd1161028657806323b872dd146103eb57806326991cc8146104285780632c81355e14610453578063313ce5671461047c57806339509351146104a757806345167f26146104e4576102d4565b806306fdde03146102d9578063095ea7b3146103045780630bd05b6914610341578063151d80391461035857806318160ddd1461038357806322f59835146103ae576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b87565b6040516102fb9190613c05565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190613cc0565b610c19565b6040516103389190613d1b565b60405180910390f35b34801561034d57600080fd5b50610356610c37565b005b34801561036457600080fd5b5061036d610ceb565b60405161037a9190613d1b565b60405180910390f35b34801561038f57600080fd5b50610398610cfe565b6040516103a59190613d45565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613d60565b610d08565b6040516103e29190613d1b565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190613d8d565b610d28565b60405161041f9190613d1b565b60405180910390f35b34801561043457600080fd5b5061043d610e20565b60405161044a9190613def565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613e0a565b610e46565b005b34801561048857600080fd5b50610491610f93565b60405161049e9190613e53565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190613cc0565b610f9c565b6040516104db9190613d1b565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190613e9a565b611048565b005b34801561051957600080fd5b506105226111b0565b60405161052f9190613d1b565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613e0a565b6111c3565b005b34801561056d57600080fd5b506105766112e8565b6040516105839190613d45565b60405180910390f35b34801561059857600080fd5b506105a16112ee565b6040516105ae9190613d1b565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613eda565b611301565b005b3480156105ec57600080fd5b5061060760048036038101906106029190613e0a565b61139a565b005b34801561061557600080fd5b5061061e6114bf565b60405161062b9190613d45565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190613d60565b6114c5565b6040516106689190613d1b565b60405180910390f35b34801561067d57600080fd5b5061069860048036038101906106939190613e9a565b6114e5565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613d60565b6115bc565b6040516106ce9190613d45565b60405180910390f35b3480156106e357600080fd5b506106ec611605565b005b3480156106fa57600080fd5b5061070361168d565b005b34801561071157600080fd5b5061071a611726565b6040516107279190613d45565b60405180910390f35b34801561073c57600080fd5b5061074561172c565b6040516107529190613d45565b60405180910390f35b34801561076757600080fd5b50610770611732565b60405161077d9190613def565b60405180910390f35b34801561079257600080fd5b5061079b61175c565b6040516107a89190613def565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d39190613eda565b611782565b005b3480156107e657600080fd5b506107ef61181b565b6040516107fc9190613d45565b60405180910390f35b34801561081157600080fd5b5061081a611821565b6040516108279190613def565b60405180910390f35b34801561083c57600080fd5b50610845611847565b6040516108529190613c05565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613cc0565b6118d9565b60405161088f9190613d1b565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613cc0565b6119c4565b6040516108cc9190613d1b565b60405180910390f35b3480156108e157600080fd5b506108ea6119e2565b6040516108f79190613d45565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190613f07565b6119e8565b005b34801561093557600080fd5b50610950600480360381019061094b9190613d60565b611ad2565b60405161095d9190613d1b565b60405180910390f35b34801561097257600080fd5b5061098d60048036038101906109889190613f07565b611af2565b005b34801561099b57600080fd5b506109b660048036038101906109b19190613d60565b611bdc565b005b3480156109c457600080fd5b506109cd611d0c565b6040516109da9190613d45565b60405180910390f35b3480156109ef57600080fd5b506109f8611d12565b604051610a059190613fa6565b60405180910390f35b348015610a1a57600080fd5b50610a23611d38565b604051610a309190613d45565b60405180910390f35b348015610a4557600080fd5b50610a606004803603810190610a5b9190613e9a565b611d3e565b005b348015610a6e57600080fd5b50610a896004803603810190610a849190614023565b611e15565b005b348015610a9757600080fd5b50610aa06120a0565b005b348015610aae57600080fd5b50610ab76121ae565b604051610ac49190613d1b565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190614076565b6121c1565b604051610b019190613d45565b60405180910390f35b348015610b1657600080fd5b50610b1f612248565b604051610b2c9190613d45565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190613d60565b61224e565b005b348015610b6a57600080fd5b50610b856004803603810190610b809190613e0a565b612346565b005b606060008054610b96906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc2906140e5565b8015610c0f5780601f10610be457610100808354040283529160200191610c0f565b820191906000526020600020905b815481529060010190602001808311610bf257829003601f168201915b5050505050905090565b6000610c2d610c26612461565b8484612469565b6001905092915050565b610c3f612461565b73ffffffffffffffffffffffffffffffffffffffff16610c5d611732565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90614163565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b600b60019054906101000a900460ff1681565b6000600254905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000610d35848484612634565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d80612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df7906141cf565b60405180910390fd5b610e1485610e0c612461565b858403612469565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e4e612461565b73ffffffffffffffffffffffffffffffffffffffff16610e6c611732565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990614163565b60405180910390fd5b620186a06001610ed0610cfe565b610eda919061421e565b610ee491906142a7565b811015610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061434a565b60405180910390fd5b6103e86005610f33610cfe565b610f3d919061421e565b610f4791906142a7565b811115610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906143dc565b60405180910390fd5b8060088190555050565b60006012905090565b600061103e610fa9612461565b848460046000610fb7612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103991906143fc565b612469565b6001905092915050565b611050612461565b73ffffffffffffffffffffffffffffffffffffffff1661106e611732565b73ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90614163565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906144c4565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601060009054906101000a900460ff1681565b6111cb612461565b73ffffffffffffffffffffffffffffffffffffffff166111e9611732565b73ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690614163565b60405180910390fd5b611247610f93565b600a6112539190614617565b6103e86001611260610cfe565b61126a919061421e565b61127491906142a7565b61127e91906142a7565b8110156112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906146d4565b60405180910390fd5b6112c8610f93565b600a6112d49190614617565b816112df919061421e565b600a8190555050565b60145481565b601060019054906101000a900460ff1681565b611309612461565b73ffffffffffffffffffffffffffffffffffffffff16611327611732565b73ffffffffffffffffffffffffffffffffffffffff161461137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490614163565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6113a2612461565b73ffffffffffffffffffffffffffffffffffffffff166113c0611732565b73ffffffffffffffffffffffffffffffffffffffff1614611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90614163565b60405180910390fd5b61141e610f93565b600a61142a9190614617565b6103e86005611437610cfe565b611441919061421e565b61144b91906142a7565b61145591906142a7565b811015611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90614766565b60405180910390fd5b61149f610f93565b600a6114ab9190614617565b816114b6919061421e565b60098190555050565b60095481565b600d6020528060005260406000206000915054906101000a900460ff1681565b6114ed612461565b73ffffffffffffffffffffffffffffffffffffffff1661150b611732565b73ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890614163565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61160d612461565b73ffffffffffffffffffffffffffffffffffffffff1661162b611732565b73ffffffffffffffffffffffffffffffffffffffff1614611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890614163565b60405180910390fd5b61168b600061338e565b565b611695612461565b73ffffffffffffffffffffffffffffffffffffffff166116b3611732565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614163565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b60085481565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61178a612461565b73ffffffffffffffffffffffffffffffffffffffff166117a8611732565b73ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590614163565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60125481565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611856906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611882906140e5565b80156118cf5780601f106118a4576101008083540402835291602001916118cf565b820191906000526020600020905b8154815290600101906020018083116118b257829003601f168201915b5050505050905090565b600080600460006118e8612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c906147d2565b60405180910390fd5b6119b96119b0612461565b85858403612469565b600191505092915050565b60006119d86119d1612461565b8484612634565b6001905092915050565b60165481565b6119f0612461565b73ffffffffffffffffffffffffffffffffffffffff16611a0e611732565b73ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614163565b60405180910390fd5b8160158190555080601681905550601654601554611a8291906143fc565b60148190555060326014541115611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac59061483e565b60405180910390fd5b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b611afa612461565b73ffffffffffffffffffffffffffffffffffffffff16611b18611732565b73ffffffffffffffffffffffffffffffffffffffff1614611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614163565b60405180910390fd5b8160128190555080601381905550601354601254611b8c91906143fc565b60118190555060326011541115611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf9061483e565b60405180910390fd5b5050565b611be4612461565b73ffffffffffffffffffffffffffffffffffffffff16611c02611732565b73ffffffffffffffffffffffffffffffffffffffff1614611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90614163565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf906148aa565b60405180910390fd5b80601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b611d46612461565b73ffffffffffffffffffffffffffffffffffffffff16611d64611732565b73ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614163565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611ec89594939291906148d9565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611f549392919061492c565b60405160208183030381529060405280519060200120905060008282604051602001611f819291906149db565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611fbe9493929190614a12565b6020604051602081039080840390855afa158015611fe0573d6000803e3d6000fd5b505050602060405103519050611ff4611732565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890614aa3565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555050505050505050565b6120a8612461565b73ffffffffffffffffffffffffffffffffffffffff166120c6611732565b73ffffffffffffffffffffffffffffffffffffffff161461211c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211390614163565b60405180910390fd5b6000612127306115bc565b90506000811161216c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216390614b0f565b60405180910390fd5b6001601760006101000a81548160ff02191690831515021790555061219081613454565b6000601760006101000a81548160ff02191690831515021790555050565b600b60009054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b612256612461565b73ffffffffffffffffffffffffffffffffffffffff16612274611732565b73ffffffffffffffffffffffffffffffffffffffff16146122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614163565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233190614b7b565b60405180910390fd5b6123438161338e565b50565b61234e612461565b73ffffffffffffffffffffffffffffffffffffffff1661236c611732565b73ffffffffffffffffffffffffffffffffffffffff16146123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614163565b60405180910390fd5b60006123cd306115bc565b90506000821180156123df5750808211155b61241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614b0f565b60405180910390fd5b6001601760006101000a81548160ff02191690831515021790555061244282613454565b6000601760006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614be7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090614c53565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126279190613d45565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90614cbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90614d2b565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890614d97565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614e03565b60405180910390fd5b60008114156128485761284383836000613608565b613389565b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601060009054906101000a900460ff1615612d4d57612907611732565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156129755750612945611732565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156129ae5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156129e8575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a015750601760009054906101000a900460ff16155b15612d4c57600b60009054906101000a900460ff16612afb57600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612abb5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af190614e6f565b60405180910390fd5b5b818015612b525750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bf957600a54831115612b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9390614f01565b60405180910390fd5b600954612ba8856115bc565b84612bb391906143fc565b1115612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb90614f6d565b60405180910390fd5b612d4b565b808015612c505750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9f57600a54831115612c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9190614fff565b60405180910390fd5b612d4a565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4957600954612cfc856115bc565b84612d0791906143fc565b1115612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f90614f6d565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612e445750601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612e029190613def565b602060405180830381865afa158015612e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e439190615034565b5b15612f5f576000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8787600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954600a546008546040518763ffffffff1660e01b8152600401612ed896959493929190615061565b6020604051808303816000875af1158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b9190615034565b905080612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f549061510e565b60405180910390fd5b505b808015612f9857503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb05750601060019054906101000a900460ff165b156130c5576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480613041575043601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b613080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130779061517a565b60405180910390fd5b43601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60006130d0306115bc565b905060006008548210159050600b60019054906101000a900460ff1680156130f55750805b801561310e5750601760009054906101000a900460ff16155b8015613118575083155b801561316e5750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131c45750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613208576001601760006101000a81548160ff0219169083151502179055506131ec61388c565b6000601760006101000a81548160ff0219169083151502179055505b6000601760009054906101000a900460ff16159050600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132be5750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c857600090505b60008115613377578480156132df57506000601154115b156133135761330c60646132fe6011548a6138dd90919063ffffffff16565b6138f390919063ffffffff16565b9050613353565b85801561332257506000601454115b156133525761334f60646133416014548a6138dd90919063ffffffff16565b6138f390919063ffffffff16565b90505b5b600081111561336857613367893083613608565b5b8087613374919061519a565b96505b613382898989613608565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008047905061346383613909565b60006134788247613b4c90919063ffffffff16565b9050600060135460165461348c91906143fc565b905060006011546014546134a091906143fc565b9050600082141580156134b4575060008114155b156135725760006134e0826134d285876138dd90919063ffffffff16565b6138f390919063ffffffff16565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613528906151ff565b60006040518083038185875af1925050503d8060008114613565576040519150601f19603f3d011682016040523d82523d6000602084013e61356a565b606091505b505080965050505b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135b8906151ff565b60006040518083038185875af1925050503d80600081146135f5576040519150601f19603f3d011682016040523d82523d6000602084013e6135fa565b606091505b505080955050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366f90615260565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136df906152cc565b60405180910390fd5b6136f3838383613b62565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561377a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377190615338565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461380f91906143fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138739190613d45565b60405180910390a3613886848484613b67565b50505050565b6000613897306115bc565b905060008114156138a857506138db565b60146008546138b7919061421e565b8111156138d05760146008546138cd919061421e565b90505b6138d981613454565b505b565b600081836138eb919061421e565b905092915050565b6000818361390191906142a7565b905092915050565b6000600267ffffffffffffffff81111561392657613925615358565b5b6040519080825280602002602001820160405280156139545781602001602082028036833780820191505090505b509050308160008151811061396c5761396b615387565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3791906153cb565b81600181518110613a4b57613a4a615387565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ab230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612469565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b169594939291906154f1565b600060405180830381600087803b158015613b3057600080fd5b505af1158015613b44573d6000803e3d6000fd5b505050505050565b60008183613b5a919061519a565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ba6578082015181840152602081019050613b8b565b83811115613bb5576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bd782613b6c565b613be18185613b77565b9350613bf1818560208601613b88565b613bfa81613bbb565b840191505092915050565b60006020820190508181036000830152613c1f8184613bcc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c5782613c2c565b9050919050565b613c6781613c4c565b8114613c7257600080fd5b50565b600081359050613c8481613c5e565b92915050565b6000819050919050565b613c9d81613c8a565b8114613ca857600080fd5b50565b600081359050613cba81613c94565b92915050565b60008060408385031215613cd757613cd6613c27565b5b6000613ce585828601613c75565b9250506020613cf685828601613cab565b9150509250929050565b60008115159050919050565b613d1581613d00565b82525050565b6000602082019050613d306000830184613d0c565b92915050565b613d3f81613c8a565b82525050565b6000602082019050613d5a6000830184613d36565b92915050565b600060208284031215613d7657613d75613c27565b5b6000613d8484828501613c75565b91505092915050565b600080600060608486031215613da657613da5613c27565b5b6000613db486828701613c75565b9350506020613dc586828701613c75565b9250506040613dd686828701613cab565b9150509250925092565b613de981613c4c565b82525050565b6000602082019050613e046000830184613de0565b92915050565b600060208284031215613e2057613e1f613c27565b5b6000613e2e84828501613cab565b91505092915050565b600060ff82169050919050565b613e4d81613e37565b82525050565b6000602082019050613e686000830184613e44565b92915050565b613e7781613d00565b8114613e8257600080fd5b50565b600081359050613e9481613e6e565b92915050565b60008060408385031215613eb157613eb0613c27565b5b6000613ebf85828601613c75565b9250506020613ed085828601613e85565b9150509250929050565b600060208284031215613ef057613eef613c27565b5b6000613efe84828501613e85565b91505092915050565b60008060408385031215613f1e57613f1d613c27565b5b6000613f2c85828601613cab565b9250506020613f3d85828601613cab565b9150509250929050565b6000819050919050565b6000613f6c613f67613f6284613c2c565b613f47565b613c2c565b9050919050565b6000613f7e82613f51565b9050919050565b6000613f9082613f73565b9050919050565b613fa081613f85565b82525050565b6000602082019050613fbb6000830184613f97565b92915050565b613fca81613e37565b8114613fd557600080fd5b50565b600081359050613fe781613fc1565b92915050565b6000819050919050565b61400081613fed565b811461400b57600080fd5b50565b60008135905061401d81613ff7565b92915050565b60008060006060848603121561403c5761403b613c27565b5b600061404a86828701613fd8565b935050602061405b8682870161400e565b925050604061406c8682870161400e565b9150509250925092565b6000806040838503121561408d5761408c613c27565b5b600061409b85828601613c75565b92505060206140ac85828601613c75565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140fd57607f821691505b60208210811415614111576141106140b6565b5b50919050565b7f496e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b600061414d600d83613b77565b915061415882614117565b602082019050919050565b6000602082019050818103600083015261417c81614140565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e74000000600082015250565b60006141b9601d83613b77565b91506141c482614183565b602082019050919050565b600060208201905081810360008301526141e8816141ac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061422982613c8a565b915061423483613c8a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561426d5761426c6141ef565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142b282613c8a565b91506142bd83613c8a565b9250826142cd576142cc614278565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614334603583613b77565b915061433f826142d8565b604082019050919050565b6000602082019050818103600083015261436381614327565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006143c6603483613b77565b91506143d18261436a565b604082019050919050565b600060208201905081810360008301526143f5816143b9565b9050919050565b600061440782613c8a565b915061441283613c8a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614447576144466141ef565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006144ae603983613b77565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561453b57808604811115614517576145166141ef565b5b60018516156145265780820291505b8081029050614534856144e4565b94506144fb565b94509492505050565b6000826145545760019050614610565b816145625760009050614610565b81600181146145785760028114614582576145b1565b6001915050614610565b60ff841115614594576145936141ef565b5b8360020a9150848211156145ab576145aa6141ef565b5b50614610565b5060208310610133831016604e8410600b84101617156145e65782820a9050838111156145e1576145e06141ef565b5b614610565b6145f384848460016144f1565b9250905081840481111561460a576146096141ef565b5b81810290505b9392505050565b600061462282613c8a565b915061462d83613e37565b925061465a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614544565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006146be602f83613b77565b91506146c982614662565b604082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c60008201527f6574206c6f776572207468616e20302e35250000000000000000000000000000602082015250565b6000614750603283613b77565b915061475b826146f4565b604082019050919050565b6000602082019050818103600083015261477f81614743565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c756500600082015250565b60006147bc601f83613b77565b91506147c782614786565b602082019050919050565b600060208201905081810360008301526147eb816147af565b9050919050565b7f4d757374206b6565702074617820617420353025206f72206c65737300000000600082015250565b6000614828601c83613b77565b9150614833826147f2565b602082019050919050565b600060208201905081810360008301526148578161481b565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b6000614894601483613b77565b915061489f8261485e565b602082019050919050565b600060208201905081810360008301526148c381614887565b9050919050565b6148d381613fed565b82525050565b600060a0820190506148ee60008301886148ca565b6148fb60208301876148ca565b61490860408301866148ca565b6149156060830185613d36565b6149226080830184613de0565b9695505050505050565b600060608201905061494160008301866148ca565b61494e60208301856148ca565b61495b6040830184613d36565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b60006149a4600283614963565b91506149af8261496e565b600282019050919050565b6000819050919050565b6149d56149d082613fed565b6149ba565b82525050565b60006149e682614997565b91506149f282856149c4565b602082019150614a0282846149c4565b6020820191508190509392505050565b6000608082019050614a2760008301876148ca565b614a346020830186613e44565b614a4160408301856148ca565b614a4e60608301846148ca565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614a8d601183613b77565b9150614a9882614a57565b602082019050919050565b60006020820190508181036000830152614abc81614a80565b9050919050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000614af9600e83613b77565b9150614b0482614ac3565b602082019050919050565b60006020820190508181036000830152614b2881614aec565b9050919050565b7f4e6577206f776e6572206973205a45524f000000000000000000000000000000600082015250565b6000614b65601183613b77565b9150614b7082614b2f565b602082019050919050565b60006020820190508181036000830152614b9481614b58565b9050919050565b7f45524332303a204e6f74206f776e657220213d20616464726573732830290000600082015250565b6000614bd1601e83613b77565b9150614bdc82614b9b565b602082019050919050565b60006020820190508181036000830152614c0081614bc4565b9050919050565b7f45524332303a204e6f74207370656e64657220213d2061646472657373283029600082015250565b6000614c3d602083613b77565b9150614c4882614c07565b602082019050919050565b60006020820190508181036000830152614c6c81614c30565b9050919050565b7f45524332303a20496e76616c69642066726f6d20616464726573730000000000600082015250565b6000614ca9601b83613b77565b9150614cb482614c73565b602082019050919050565b60006020820190508181036000830152614cd881614c9c565b9050919050565b7f45524332303a20496e76616c696420746f206164647265737300000000000000600082015250565b6000614d15601983613b77565b9150614d2082614cdf565b602082019050919050565b60006020820190508181036000830152614d4481614d08565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c69737400000000000000600082015250565b6000614d81601983613b77565b9150614d8c82614d4b565b602082019050919050565b60006020820190508181036000830152614db081614d74565b9050919050565b7f45524332303a20746f20697320626c61636b206c697374000000000000000000600082015250565b6000614ded601783613b77565b9150614df882614db7565b602082019050919050565b60006020820190508181036000830152614e1c81614de0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e59601683613b77565b9150614e6482614e23565b602082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b6000614eeb603583613b77565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613b77565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b6000614fe9603683613b77565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b60008151905061502e81613e6e565b92915050565b60006020828403121561504a57615049613c27565b5b60006150588482850161501f565b91505092915050565b600060c0820190506150766000830189613de0565b6150836020830188613de0565b6150906040830187613de0565b61509d6060830186613d36565b6150aa6080830185613d36565b6150b760a0830184613d36565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b60006150f8601483613b77565b9150615103826150c2565b602082019050919050565b60006020820190508181036000830152615127816150eb565b9050919050565b7f53656c6c2064697361626c656420696e207468652073616d6520626c6f636b00600082015250565b6000615164601f83613b77565b915061516f8261512e565b602082019050919050565b6000602082019050818103600083015261519381615157565b9050919050565b60006151a582613c8a565b91506151b083613c8a565b9250828210156151c3576151c26141ef565b5b828203905092915050565b600081905092915050565b50565b60006151e96000836151ce565b91506151f4826151d9565b600082019050919050565b600061520a826151dc565b9150819050919050565b7f45524332303a204e6f742066726f6d20213d2061646472657373283029000000600082015250565b600061524a601d83613b77565b915061525582615214565b602082019050919050565b600060208201905081810360008301526152798161523d565b9050919050565b7f45524332303a204e6f7420746f20213d20616464726573732830290000000000600082015250565b60006152b6601b83613b77565b91506152c182615280565b602082019050919050565b600060208201905081810360008301526152e5816152a9565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e74600082015250565b6000615322602083613b77565b915061532d826152ec565b602082019050919050565b6000602082019050818103600083015261535181615315565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506153c581613c5e565b92915050565b6000602082840312156153e1576153e0613c27565b5b60006153ef848285016153b6565b91505092915050565b6000819050919050565b600061541d615418615413846153f8565b613f47565b613c8a565b9050919050565b61542d81615402565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61546881613c4c565b82525050565b600061547a838361545f565b60208301905092915050565b6000602082019050919050565b600061549e82615433565b6154a8818561543e565b93506154b38361544f565b8060005b838110156154e45781516154cb888261546e565b97506154d683615486565b9250506001810190506154b7565b5085935050505092915050565b600060a0820190506155066000830188613d36565b6155136020830187615424565b81810360408301526155258186615493565b90506155346060830185613de0565b6155416080830184613d36565b969550505050505056fea264697066735822122027fa6ab327f6bf6ef3b382a29395f64ce6493ca8133214ecbfea34e4f6cd51b564736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c806381ff0f5a11610175578063b79c1886116100dc578063d4394cf811610095578063dd62ed3e1161006f578063dd62ed3e14610acd578063e27a55fe14610b0a578063f2fde38b14610b35578063fe784eaa14610b5e576102d4565b8063d4394cf814610a62578063d8fac43f14610a8b578063d929a08314610aa2576102d4565b8063b79c188614610966578063bae14e1d1461098f578063be691883146109b8578063c31c9c07146109e3578063c42c3f8814610a0e578063c6a3064714610a39576102d4565b806395d89b411161012e57806395d89b4114610830578063a457c2d71461085b578063a9059cbb14610898578063af8f26e7146108d5578063b38d5ef414610900578063b62496f514610929576102d4565b806381ff0f5a146107305780638da5cb5b1461075b5780638ea5220f14610786578063924de9b7146107b1578063929555a3146107da57806393fa3ba314610805576102d4565b80634a62bb6511610234578063685fbc6b116101ed57806370a08231116101c757806370a082311461069a578063715018a6146106d7578063751039fc146106ee5780637d67317014610705576102d4565b8063685fbc6b146106095780636f498e21146106345780637070678b14610671576102d4565b80634a62bb651461050d578063544d1ec9146105385780635df6e68e146105615780636215d72f1461058c57806362944371146105b757806367b740e9146105e0576102d4565b806323b872dd1161028657806323b872dd146103eb57806326991cc8146104285780632c81355e14610453578063313ce5671461047c57806339509351146104a757806345167f26146104e4576102d4565b806306fdde03146102d9578063095ea7b3146103045780630bd05b6914610341578063151d80391461035857806318160ddd1461038357806322f59835146103ae576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b87565b6040516102fb9190613c05565b60405180910390f35b34801561031057600080fd5b5061032b60048036038101906103269190613cc0565b610c19565b6040516103389190613d1b565b60405180910390f35b34801561034d57600080fd5b50610356610c37565b005b34801561036457600080fd5b5061036d610ceb565b60405161037a9190613d1b565b60405180910390f35b34801561038f57600080fd5b50610398610cfe565b6040516103a59190613d45565b60405180910390f35b3480156103ba57600080fd5b506103d560048036038101906103d09190613d60565b610d08565b6040516103e29190613d1b565b60405180910390f35b3480156103f757600080fd5b50610412600480360381019061040d9190613d8d565b610d28565b60405161041f9190613d1b565b60405180910390f35b34801561043457600080fd5b5061043d610e20565b60405161044a9190613def565b60405180910390f35b34801561045f57600080fd5b5061047a60048036038101906104759190613e0a565b610e46565b005b34801561048857600080fd5b50610491610f93565b60405161049e9190613e53565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190613cc0565b610f9c565b6040516104db9190613d1b565b60405180910390f35b3480156104f057600080fd5b5061050b60048036038101906105069190613e9a565b611048565b005b34801561051957600080fd5b506105226111b0565b60405161052f9190613d1b565b60405180910390f35b34801561054457600080fd5b5061055f600480360381019061055a9190613e0a565b6111c3565b005b34801561056d57600080fd5b506105766112e8565b6040516105839190613d45565b60405180910390f35b34801561059857600080fd5b506105a16112ee565b6040516105ae9190613d1b565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d99190613eda565b611301565b005b3480156105ec57600080fd5b5061060760048036038101906106029190613e0a565b61139a565b005b34801561061557600080fd5b5061061e6114bf565b60405161062b9190613d45565b60405180910390f35b34801561064057600080fd5b5061065b60048036038101906106569190613d60565b6114c5565b6040516106689190613d1b565b60405180910390f35b34801561067d57600080fd5b5061069860048036038101906106939190613e9a565b6114e5565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613d60565b6115bc565b6040516106ce9190613d45565b60405180910390f35b3480156106e357600080fd5b506106ec611605565b005b3480156106fa57600080fd5b5061070361168d565b005b34801561071157600080fd5b5061071a611726565b6040516107279190613d45565b60405180910390f35b34801561073c57600080fd5b5061074561172c565b6040516107529190613d45565b60405180910390f35b34801561076757600080fd5b50610770611732565b60405161077d9190613def565b60405180910390f35b34801561079257600080fd5b5061079b61175c565b6040516107a89190613def565b60405180910390f35b3480156107bd57600080fd5b506107d860048036038101906107d39190613eda565b611782565b005b3480156107e657600080fd5b506107ef61181b565b6040516107fc9190613d45565b60405180910390f35b34801561081157600080fd5b5061081a611821565b6040516108279190613def565b60405180910390f35b34801561083c57600080fd5b50610845611847565b6040516108529190613c05565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d9190613cc0565b6118d9565b60405161088f9190613d1b565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba9190613cc0565b6119c4565b6040516108cc9190613d1b565b60405180910390f35b3480156108e157600080fd5b506108ea6119e2565b6040516108f79190613d45565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190613f07565b6119e8565b005b34801561093557600080fd5b50610950600480360381019061094b9190613d60565b611ad2565b60405161095d9190613d1b565b60405180910390f35b34801561097257600080fd5b5061098d60048036038101906109889190613f07565b611af2565b005b34801561099b57600080fd5b506109b660048036038101906109b19190613d60565b611bdc565b005b3480156109c457600080fd5b506109cd611d0c565b6040516109da9190613d45565b60405180910390f35b3480156109ef57600080fd5b506109f8611d12565b604051610a059190613fa6565b60405180910390f35b348015610a1a57600080fd5b50610a23611d38565b604051610a309190613d45565b60405180910390f35b348015610a4557600080fd5b50610a606004803603810190610a5b9190613e9a565b611d3e565b005b348015610a6e57600080fd5b50610a896004803603810190610a849190614023565b611e15565b005b348015610a9757600080fd5b50610aa06120a0565b005b348015610aae57600080fd5b50610ab76121ae565b604051610ac49190613d1b565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190614076565b6121c1565b604051610b019190613d45565b60405180910390f35b348015610b1657600080fd5b50610b1f612248565b604051610b2c9190613d45565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190613d60565b61224e565b005b348015610b6a57600080fd5b50610b856004803603810190610b809190613e0a565b612346565b005b606060008054610b96906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc2906140e5565b8015610c0f5780601f10610be457610100808354040283529160200191610c0f565b820191906000526020600020905b815481529060010190602001808311610bf257829003601f168201915b5050505050905090565b6000610c2d610c26612461565b8484612469565b6001905092915050565b610c3f612461565b73ffffffffffffffffffffffffffffffffffffffff16610c5d611732565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90614163565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b600b60019054906101000a900460ff1681565b6000600254905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000610d35848484612634565b6000600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d80612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df7906141cf565b60405180910390fd5b610e1485610e0c612461565b858403612469565b60019150509392505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e4e612461565b73ffffffffffffffffffffffffffffffffffffffff16610e6c611732565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb990614163565b60405180910390fd5b620186a06001610ed0610cfe565b610eda919061421e565b610ee491906142a7565b811015610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d9061434a565b60405180910390fd5b6103e86005610f33610cfe565b610f3d919061421e565b610f4791906142a7565b811115610f89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f80906143dc565b60405180910390fd5b8060088190555050565b60006012905090565b600061103e610fa9612461565b848460046000610fb7612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461103991906143fc565b612469565b6001905092915050565b611050612461565b73ffffffffffffffffffffffffffffffffffffffff1661106e611732565b73ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb90614163565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c906144c4565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601060009054906101000a900460ff1681565b6111cb612461565b73ffffffffffffffffffffffffffffffffffffffff166111e9611732565b73ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690614163565b60405180910390fd5b611247610f93565b600a6112539190614617565b6103e86001611260610cfe565b61126a919061421e565b61127491906142a7565b61127e91906142a7565b8110156112c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b7906146d4565b60405180910390fd5b6112c8610f93565b600a6112d49190614617565b816112df919061421e565b600a8190555050565b60145481565b601060019054906101000a900460ff1681565b611309612461565b73ffffffffffffffffffffffffffffffffffffffff16611327611732565b73ffffffffffffffffffffffffffffffffffffffff161461137d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137490614163565b60405180910390fd5b80601060016101000a81548160ff02191690831515021790555050565b6113a2612461565b73ffffffffffffffffffffffffffffffffffffffff166113c0611732565b73ffffffffffffffffffffffffffffffffffffffff1614611416576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140d90614163565b60405180910390fd5b61141e610f93565b600a61142a9190614617565b6103e86005611437610cfe565b611441919061421e565b61144b91906142a7565b61145591906142a7565b811015611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90614766565b60405180910390fd5b61149f610f93565b600a6114ab9190614617565b816114b6919061421e565b60098190555050565b60095481565b600d6020528060005260406000206000915054906101000a900460ff1681565b6114ed612461565b73ffffffffffffffffffffffffffffffffffffffff1661150b611732565b73ffffffffffffffffffffffffffffffffffffffff1614611561576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155890614163565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61160d612461565b73ffffffffffffffffffffffffffffffffffffffff1661162b611732565b73ffffffffffffffffffffffffffffffffffffffff1614611681576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167890614163565b60405180910390fd5b61168b600061338e565b565b611695612461565b73ffffffffffffffffffffffffffffffffffffffff166116b3611732565b73ffffffffffffffffffffffffffffffffffffffff1614611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090614163565b60405180910390fd5b6000601060006101000a81548160ff021916908315150217905550565b60085481565b60155481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61178a612461565b73ffffffffffffffffffffffffffffffffffffffff166117a8611732565b73ffffffffffffffffffffffffffffffffffffffff16146117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f590614163565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60125481565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611856906140e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611882906140e5565b80156118cf5780601f106118a4576101008083540402835291602001916118cf565b820191906000526020600020905b8154815290600101906020018083116118b257829003601f168201915b5050505050905090565b600080600460006118e8612461565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156119a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199c906147d2565b60405180910390fd5b6119b96119b0612461565b85858403612469565b600191505092915050565b60006119d86119d1612461565b8484612634565b6001905092915050565b60165481565b6119f0612461565b73ffffffffffffffffffffffffffffffffffffffff16611a0e611732565b73ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614163565b60405180910390fd5b8160158190555080601681905550601654601554611a8291906143fc565b60148190555060326014541115611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac59061483e565b60405180910390fd5b5050565b600f6020528060005260406000206000915054906101000a900460ff1681565b611afa612461565b73ffffffffffffffffffffffffffffffffffffffff16611b18611732565b73ffffffffffffffffffffffffffffffffffffffff1614611b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6590614163565b60405180910390fd5b8160128190555080601381905550601354601254611b8c91906143fc565b60118190555060326011541115611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf9061483e565b60405180910390fd5b5050565b611be4612461565b73ffffffffffffffffffffffffffffffffffffffff16611c02611732565b73ffffffffffffffffffffffffffffffffffffffff1614611c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4f90614163565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf906148aa565b60405180910390fd5b80601760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b611d46612461565b73ffffffffffffffffffffffffffffffffffffffff16611d64611732565b73ffffffffffffffffffffffffffffffffffffffff1614611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614163565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611ec89594939291906148d9565b60405160208183030381529060405280519060200120905060007f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001206000604051602001611f549392919061492c565b60405160208183030381529060405280519060200120905060008282604051602001611f819291906149db565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051611fbe9493929190614a12565b6020604051602081039080840390855afa158015611fe0573d6000803e3d6000fd5b505050602060405103519050611ff4611732565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612061576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205890614aa3565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555050505050505050565b6120a8612461565b73ffffffffffffffffffffffffffffffffffffffff166120c6611732565b73ffffffffffffffffffffffffffffffffffffffff161461211c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211390614163565b60405180910390fd5b6000612127306115bc565b90506000811161216c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216390614b0f565b60405180910390fd5b6001601760006101000a81548160ff02191690831515021790555061219081613454565b6000601760006101000a81548160ff02191690831515021790555050565b600b60009054906101000a900460ff1681565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b612256612461565b73ffffffffffffffffffffffffffffffffffffffff16612274611732565b73ffffffffffffffffffffffffffffffffffffffff16146122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614163565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561233a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233190614b7b565b60405180910390fd5b6123438161338e565b50565b61234e612461565b73ffffffffffffffffffffffffffffffffffffffff1661236c611732565b73ffffffffffffffffffffffffffffffffffffffff16146123c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b990614163565b60405180910390fd5b60006123cd306115bc565b90506000821180156123df5750808211155b61241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614b0f565b60405180910390fd5b6001601760006101000a81548160ff02191690831515021790555061244282613454565b6000601760006101000a81548160ff0219169083151502179055505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614be7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254090614c53565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126279190613d45565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90614cbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90614d2b565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279890614d97565b60405180910390fd5b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614e03565b60405180910390fd5b60008114156128485761284383836000613608565b613389565b6000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601060009054906101000a900460ff1615612d4d57612907611732565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156129755750612945611732565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156129ae5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156129e8575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612a015750601760009054906101000a900460ff16155b15612d4c57600b60009054906101000a900460ff16612afb57600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612abb5750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af190614e6f565b60405180910390fd5b5b818015612b525750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bf957600a54831115612b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9390614f01565b60405180910390fd5b600954612ba8856115bc565b84612bb391906143fc565b1115612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb90614f6d565b60405180910390fd5b612d4b565b808015612c505750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c9f57600a54831115612c9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9190614fff565b60405180910390fd5b612d4a565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d4957600954612cfc856115bc565b84612d0791906143fc565b1115612d48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3f90614f6d565b60405180910390fd5b5b5b5b5b5b600073ffffffffffffffffffffffffffffffffffffffff16601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612e445750601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612e029190613def565b602060405180830381865afa158015612e1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e439190615034565b5b15612f5f576000601760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc8787600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954600a546008546040518763ffffffff1660e01b8152600401612ed896959493929190615061565b6020604051808303816000875af1158015612ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f1b9190615034565b905080612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f549061510e565b60405180910390fd5b505b808015612f9857503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb05750601060019054906101000a900460ff165b156130c5576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541480613041575043601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b613080576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130779061517a565b60405180910390fd5b43601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b60006130d0306115bc565b905060006008548210159050600b60019054906101000a900460ff1680156130f55750805b801561310e5750601760009054906101000a900460ff16155b8015613118575083155b801561316e5750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131c45750600e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613208576001601760006101000a81548160ff0219169083151502179055506131ec61388c565b6000601760006101000a81548160ff0219169083151502179055505b6000601760009054906101000a900460ff16159050600e60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132be5750600e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c857600090505b60008115613377578480156132df57506000601154115b156133135761330c60646132fe6011548a6138dd90919063ffffffff16565b6138f390919063ffffffff16565b9050613353565b85801561332257506000601454115b156133525761334f60646133416014548a6138dd90919063ffffffff16565b6138f390919063ffffffff16565b90505b5b600081111561336857613367893083613608565b5b8087613374919061519a565b96505b613382898989613608565b5050505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008047905061346383613909565b60006134788247613b4c90919063ffffffff16565b9050600060135460165461348c91906143fc565b905060006011546014546134a091906143fc565b9050600082141580156134b4575060008114155b156135725760006134e0826134d285876138dd90919063ffffffff16565b6138f390919063ffffffff16565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051613528906151ff565b60006040518083038185875af1925050503d8060008114613565576040519150601f19603f3d011682016040523d82523d6000602084013e61356a565b606091505b505080965050505b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135b8906151ff565b60006040518083038185875af1925050503d80600081146135f5576040519150601f19603f3d011682016040523d82523d6000602084013e6135fa565b606091505b505080955050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161366f90615260565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136df906152cc565b60405180910390fd5b6136f3838383613b62565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561377a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161377190615338565b60405180910390fd5b818103600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461380f91906143fc565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138739190613d45565b60405180910390a3613886848484613b67565b50505050565b6000613897306115bc565b905060008114156138a857506138db565b60146008546138b7919061421e565b8111156138d05760146008546138cd919061421e565b90505b6138d981613454565b505b565b600081836138eb919061421e565b905092915050565b6000818361390191906142a7565b905092915050565b6000600267ffffffffffffffff81111561392657613925615358565b5b6040519080825280602002602001820160405280156139545781602001602082028036833780820191505090505b509050308160008151811061396c5761396b615387565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3791906153cb565b81600181518110613a4b57613a4a615387565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ab230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612469565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b169594939291906154f1565b600060405180830381600087803b158015613b3057600080fd5b505af1158015613b44573d6000803e3d6000fd5b505050505050565b60008183613b5a919061519a565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ba6578082015181840152602081019050613b8b565b83811115613bb5576000848401525b50505050565b6000601f19601f8301169050919050565b6000613bd782613b6c565b613be18185613b77565b9350613bf1818560208601613b88565b613bfa81613bbb565b840191505092915050565b60006020820190508181036000830152613c1f8184613bcc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c5782613c2c565b9050919050565b613c6781613c4c565b8114613c7257600080fd5b50565b600081359050613c8481613c5e565b92915050565b6000819050919050565b613c9d81613c8a565b8114613ca857600080fd5b50565b600081359050613cba81613c94565b92915050565b60008060408385031215613cd757613cd6613c27565b5b6000613ce585828601613c75565b9250506020613cf685828601613cab565b9150509250929050565b60008115159050919050565b613d1581613d00565b82525050565b6000602082019050613d306000830184613d0c565b92915050565b613d3f81613c8a565b82525050565b6000602082019050613d5a6000830184613d36565b92915050565b600060208284031215613d7657613d75613c27565b5b6000613d8484828501613c75565b91505092915050565b600080600060608486031215613da657613da5613c27565b5b6000613db486828701613c75565b9350506020613dc586828701613c75565b9250506040613dd686828701613cab565b9150509250925092565b613de981613c4c565b82525050565b6000602082019050613e046000830184613de0565b92915050565b600060208284031215613e2057613e1f613c27565b5b6000613e2e84828501613cab565b91505092915050565b600060ff82169050919050565b613e4d81613e37565b82525050565b6000602082019050613e686000830184613e44565b92915050565b613e7781613d00565b8114613e8257600080fd5b50565b600081359050613e9481613e6e565b92915050565b60008060408385031215613eb157613eb0613c27565b5b6000613ebf85828601613c75565b9250506020613ed085828601613e85565b9150509250929050565b600060208284031215613ef057613eef613c27565b5b6000613efe84828501613e85565b91505092915050565b60008060408385031215613f1e57613f1d613c27565b5b6000613f2c85828601613cab565b9250506020613f3d85828601613cab565b9150509250929050565b6000819050919050565b6000613f6c613f67613f6284613c2c565b613f47565b613c2c565b9050919050565b6000613f7e82613f51565b9050919050565b6000613f9082613f73565b9050919050565b613fa081613f85565b82525050565b6000602082019050613fbb6000830184613f97565b92915050565b613fca81613e37565b8114613fd557600080fd5b50565b600081359050613fe781613fc1565b92915050565b6000819050919050565b61400081613fed565b811461400b57600080fd5b50565b60008135905061401d81613ff7565b92915050565b60008060006060848603121561403c5761403b613c27565b5b600061404a86828701613fd8565b935050602061405b8682870161400e565b925050604061406c8682870161400e565b9150509250925092565b6000806040838503121561408d5761408c613c27565b5b600061409b85828601613c75565b92505060206140ac85828601613c75565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140fd57607f821691505b60208210811415614111576141106140b6565b5b50919050565b7f496e76616c6964206f776e657200000000000000000000000000000000000000600082015250565b600061414d600d83613b77565b915061415882614117565b602082019050919050565b6000602082019050818103600083015261417c81614140565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e74000000600082015250565b60006141b9601d83613b77565b91506141c482614183565b602082019050919050565b600060208201905081810360008301526141e8816141ac565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061422982613c8a565b915061423483613c8a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561426d5761426c6141ef565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142b282613c8a565b91506142bd83613c8a565b9250826142cd576142cc614278565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614334603583613b77565b915061433f826142d8565b604082019050919050565b6000602082019050818103600083015261436381614327565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006143c6603483613b77565b91506143d18261436a565b604082019050919050565b600060208201905081810360008301526143f5816143b9565b9050919050565b600061440782613c8a565b915061441283613c8a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614447576144466141ef565b5b828201905092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006144ae603983613b77565b91506144b982614452565b604082019050919050565b600060208201905081810360008301526144dd816144a1565b9050919050565b60008160011c9050919050565b6000808291508390505b600185111561453b57808604811115614517576145166141ef565b5b60018516156145265780820291505b8081029050614534856144e4565b94506144fb565b94509492505050565b6000826145545760019050614610565b816145625760009050614610565b81600181146145785760028114614582576145b1565b6001915050614610565b60ff841115614594576145936141ef565b5b8360020a9150848211156145ab576145aa6141ef565b5b50614610565b5060208310610133831016604e8410600b84101617156145e65782820a9050838111156145e1576145e06141ef565b5b614610565b6145f384848460016144f1565b9250905081840481111561460a576146096141ef565b5b81810290505b9392505050565b600061462282613c8a565b915061462d83613e37565b925061465a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614544565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e2060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006146be602f83613b77565b91506146c982614662565b604082019050919050565b600060208201905081810360008301526146ed816146b1565b9050919050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657257616c6c60008201527f6574206c6f776572207468616e20302e35250000000000000000000000000000602082015250565b6000614750603283613b77565b915061475b826146f4565b604082019050919050565b6000602082019050818103600083015261477f81614743565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c756500600082015250565b60006147bc601f83613b77565b91506147c782614786565b602082019050919050565b600060208201905081810360008301526147eb816147af565b9050919050565b7f4d757374206b6565702074617820617420353025206f72206c65737300000000600082015250565b6000614828601c83613b77565b9150614833826147f2565b602082019050919050565b600060208201905081810360008301526148578161481b565b9050919050565b7f496e76616c696420616e74692d647261696e6572000000000000000000000000600082015250565b6000614894601483613b77565b915061489f8261485e565b602082019050919050565b600060208201905081810360008301526148c381614887565b9050919050565b6148d381613fed565b82525050565b600060a0820190506148ee60008301886148ca565b6148fb60208301876148ca565b61490860408301866148ca565b6149156060830185613d36565b6149226080830184613de0565b9695505050505050565b600060608201905061494160008301866148ca565b61494e60208301856148ca565b61495b6040830184613d36565b949350505050565b600081905092915050565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b60006149a4600283614963565b91506149af8261496e565b600282019050919050565b6000819050919050565b6149d56149d082613fed565b6149ba565b82525050565b60006149e682614997565b91506149f282856149c4565b602082019150614a0282846149c4565b6020820191508190509392505050565b6000608082019050614a2760008301876148ca565b614a346020830186613e44565b614a4160408301856148ca565b614a4e60608301846148ca565b95945050505050565b7f496e76616c6964207369676e6174757265000000000000000000000000000000600082015250565b6000614a8d601183613b77565b9150614a9882614a57565b602082019050919050565b60006020820190508181036000830152614abc81614a80565b9050919050565b7f496e76616c696420616d6f756e74000000000000000000000000000000000000600082015250565b6000614af9600e83613b77565b9150614b0482614ac3565b602082019050919050565b60006020820190508181036000830152614b2881614aec565b9050919050565b7f4e6577206f776e6572206973205a45524f000000000000000000000000000000600082015250565b6000614b65601183613b77565b9150614b7082614b2f565b602082019050919050565b60006020820190508181036000830152614b9481614b58565b9050919050565b7f45524332303a204e6f74206f776e657220213d20616464726573732830290000600082015250565b6000614bd1601e83613b77565b9150614bdc82614b9b565b602082019050919050565b60006020820190508181036000830152614c0081614bc4565b9050919050565b7f45524332303a204e6f74207370656e64657220213d2061646472657373283029600082015250565b6000614c3d602083613b77565b9150614c4882614c07565b602082019050919050565b60006020820190508181036000830152614c6c81614c30565b9050919050565b7f45524332303a20496e76616c69642066726f6d20616464726573730000000000600082015250565b6000614ca9601b83613b77565b9150614cb482614c73565b602082019050919050565b60006020820190508181036000830152614cd881614c9c565b9050919050565b7f45524332303a20496e76616c696420746f206164647265737300000000000000600082015250565b6000614d15601983613b77565b9150614d2082614cdf565b602082019050919050565b60006020820190508181036000830152614d4481614d08565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c69737400000000000000600082015250565b6000614d81601983613b77565b9150614d8c82614d4b565b602082019050919050565b60006020820190508181036000830152614db081614d74565b9050919050565b7f45524332303a20746f20697320626c61636b206c697374000000000000000000600082015250565b6000614ded601783613b77565b9150614df882614db7565b602082019050919050565b60006020820190508181036000830152614e1c81614de0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614e59601683613b77565b9150614e6482614e23565b602082019050919050565b60006020820190508181036000830152614e8881614e4c565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b6000614eeb603583613b77565b9150614ef682614e8f565b604082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614f57601383613b77565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b6000614fe9603683613b77565b9150614ff482614f8d565b604082019050919050565b6000602082019050818103600083015261501881614fdc565b9050919050565b60008151905061502e81613e6e565b92915050565b60006020828403121561504a57615049613c27565b5b60006150588482850161501f565b91505092915050565b600060c0820190506150766000830189613de0565b6150836020830188613de0565b6150906040830187613de0565b61509d6060830186613d36565b6150aa6080830185613d36565b6150b760a0830184613d36565b979650505050505050565b7f416e746920447261696e657220456e61626c6564000000000000000000000000600082015250565b60006150f8601483613b77565b9150615103826150c2565b602082019050919050565b60006020820190508181036000830152615127816150eb565b9050919050565b7f53656c6c2064697361626c656420696e207468652073616d6520626c6f636b00600082015250565b6000615164601f83613b77565b915061516f8261512e565b602082019050919050565b6000602082019050818103600083015261519381615157565b9050919050565b60006151a582613c8a565b91506151b083613c8a565b9250828210156151c3576151c26141ef565b5b828203905092915050565b600081905092915050565b50565b60006151e96000836151ce565b91506151f4826151d9565b600082019050919050565b600061520a826151dc565b9150819050919050565b7f45524332303a204e6f742066726f6d20213d2061646472657373283029000000600082015250565b600061524a601d83613b77565b915061525582615214565b602082019050919050565b600060208201905081810360008301526152798161523d565b9050919050565b7f45524332303a204e6f7420746f20213d20616464726573732830290000000000600082015250565b60006152b6601b83613b77565b91506152c182615280565b602082019050919050565b600060208201905081810360008301526152e5816152a9565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e74600082015250565b6000615322602083613b77565b915061532d826152ec565b602082019050919050565b6000602082019050818103600083015261535181615315565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506153c581613c5e565b92915050565b6000602082840312156153e1576153e0613c27565b5b60006153ef848285016153b6565b91505092915050565b6000819050919050565b600061541d615418615413846153f8565b613f47565b613c8a565b9050919050565b61542d81615402565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61546881613c4c565b82525050565b600061547a838361545f565b60208301905092915050565b6000602082019050919050565b600061549e82615433565b6154a8818561543e565b93506154b38361544f565b8060005b838110156154e45781516154cb888261546e565b97506154d683615486565b9250506001810190506154b7565b5085935050505092915050565b600060a0820190506155066000830188613d36565b6155136020830187615424565b81810360408301526155258186615493565b90506155346060830185613de0565b6155416080830184613d36565b969550505050505056fea264697066735822122027fa6ab327f6bf6ef3b382a29395f64ce6493ca8133214ecbfea34e4f6cd51b564736f6c634300080a0033

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.