ETH Price: $3,256.40 (-2.69%)

Contract

0xC594fE200ba4E32876e9d43B4B08F837EA181a1b
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer177401352023-07-21 7:49:47480 days ago1689925787IN
0xC594fE20...7EA181a1b
0 ETH0.0009786522.02088464
Transfer177401332023-07-21 7:49:23480 days ago1689925763IN
0xC594fE20...7EA181a1b
0 ETH0.0009743921.92499315
Transfer177401322023-07-21 7:49:11480 days ago1689925751IN
0xC594fE20...7EA181a1b
0 ETH0.0009317720.9661889
Transfer177401312023-07-21 7:48:59480 days ago1689925739IN
0xC594fE20...7EA181a1b
0 ETH0.0009372621.08959448
Transfer177401232023-07-21 7:47:23480 days ago1689925643IN
0xC594fE20...7EA181a1b
0 ETH0.0012574620.42872493
Transfer177400872023-07-21 7:40:11480 days ago1689925211IN
0xC594fE20...7EA181a1b
0 ETH0.000813418.30269572
Transfer177400822023-07-21 7:39:11480 days ago1689925151IN
0xC594fE20...7EA181a1b
0 ETH0.0012521820.34688674
Transfer177400662023-07-21 7:35:59480 days ago1689924959IN
0xC594fE20...7EA181a1b
0 ETH0.0010246223.05537208
Transfer177400652023-07-21 7:35:47480 days ago1689924947IN
0xC594fE20...7EA181a1b
0 ETH0.0009973722.44215719
Transfer177400632023-07-21 7:35:23480 days ago1689924923IN
0xC594fE20...7EA181a1b
0 ETH0.0010126422.7857557
Transfer177400622023-07-21 7:35:11480 days ago1689924911IN
0xC594fE20...7EA181a1b
0 ETH0.000988122.23352524
Transfer177400612023-07-21 7:34:59480 days ago1689924899IN
0xC594fE20...7EA181a1b
0 ETH0.0009533221.4510167
Transfer177400602023-07-21 7:34:47480 days ago1689924887IN
0xC594fE20...7EA181a1b
0 ETH0.0008756919.7041527
Transfer177400602023-07-21 7:34:47480 days ago1689924887IN
0xC594fE20...7EA181a1b
0 ETH0.0008810619.8251527
Transfer177400582023-07-21 7:34:23480 days ago1689924863IN
0xC594fE20...7EA181a1b
0 ETH0.0009082520.43676862
Transfer177400572023-07-21 7:34:11480 days ago1689924851IN
0xC594fE20...7EA181a1b
0 ETH0.0008856319.9278494
Transfer177400552023-07-21 7:33:47480 days ago1689924827IN
0xC594fE20...7EA181a1b
0 ETH0.000899520.23991903
Transfer177400542023-07-21 7:33:35480 days ago1689924815IN
0xC594fE20...7EA181a1b
0 ETH0.0009086720.44622331
Transfer177400532023-07-21 7:33:23480 days ago1689924803IN
0xC594fE20...7EA181a1b
0 ETH0.0009019420.29493139
Transfer177400512023-07-21 7:32:59480 days ago1689924779IN
0xC594fE20...7EA181a1b
0 ETH0.0009357321.06646218
Transfer177400492023-07-21 7:32:35480 days ago1689924755IN
0xC594fE20...7EA181a1b
0 ETH0.0013355921.70209895
Approve177400452023-07-21 7:31:47480 days ago1689924707IN
0xC594fE20...7EA181a1b
0 ETH0.0009657720.7831494
Approve177400252023-07-21 7:27:47480 days ago1689924467IN
0xC594fE20...7EA181a1b
0 ETH0.0008287817.83515696
Approve177399542023-07-21 7:13:23480 days ago1689923603IN
0xC594fE20...7EA181a1b
0 ETH0.0009411220.25278122
Approve177399522023-07-21 7:12:59480 days ago1689923579IN
0xC594fE20...7EA181a1b
0 ETH0.0008551718.40312908
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
177406192023-07-21 9:27:23480 days ago1689931643
0xC594fE20...7EA181a1b
0.00008868 ETH
177406192023-07-21 9:27:23480 days ago1689931643
0xC594fE20...7EA181a1b
0.00008868 ETH
177400602023-07-21 7:34:47480 days ago1689924887
0xC594fE20...7EA181a1b
0.00036577 ETH
177400602023-07-21 7:34:47480 days ago1689924887
0xC594fE20...7EA181a1b
0.00036577 ETH
177400512023-07-21 7:32:59480 days ago1689924779
0xC594fE20...7EA181a1b
0.00036696 ETH
177400512023-07-21 7:32:59480 days ago1689924779
0xC594fE20...7EA181a1b
0.00036696 ETH
177400252023-07-21 7:27:47480 days ago1689924467
0xC594fE20...7EA181a1b
0.00232476 ETH
177400252023-07-21 7:27:47480 days ago1689924467
0xC594fE20...7EA181a1b
0.00232476 ETH
177400132023-07-21 7:25:23480 days ago1689924323
0xC594fE20...7EA181a1b
0.10774259 ETH
177400132023-07-21 7:25:23480 days ago1689924323
0xC594fE20...7EA181a1b
0.10774259 ETH
177399702023-07-21 7:16:35480 days ago1689923795
0xC594fE20...7EA181a1b
0.0019387 ETH
177399702023-07-21 7:16:35480 days ago1689923795
0xC594fE20...7EA181a1b
0.0019387 ETH
177399682023-07-21 7:16:11480 days ago1689923771
0xC594fE20...7EA181a1b
0.01203572 ETH
177399682023-07-21 7:16:11480 days ago1689923771
0xC594fE20...7EA181a1b
0.01203572 ETH
177399582023-07-21 7:14:11480 days ago1689923651
0xC594fE20...7EA181a1b
0.04124772 ETH
177399582023-07-21 7:14:11480 days ago1689923651
0xC594fE20...7EA181a1b
0.04124772 ETH
177399552023-07-21 7:13:35480 days ago1689923615
0xC594fE20...7EA181a1b
0.06374311 ETH
177399552023-07-21 7:13:35480 days ago1689923615
0xC594fE20...7EA181a1b
0.06374311 ETH
177399412023-07-21 7:10:35480 days ago1689923435
0xC594fE20...7EA181a1b
0.00230123 ETH
177399412023-07-21 7:10:35480 days ago1689923435
0xC594fE20...7EA181a1b
0.00230123 ETH
177399272023-07-21 7:07:47480 days ago1689923267
0xC594fE20...7EA181a1b
0.01090843 ETH
177399272023-07-21 7:07:47480 days ago1689923267
0xC594fE20...7EA181a1b
0.01090843 ETH
177398542023-07-21 6:53:11480 days ago1689922391
0xC594fE20...7EA181a1b
0.00441289 ETH
177398542023-07-21 6:53:11480 days ago1689922391
0xC594fE20...7EA181a1b
0.00441289 ETH
177398312023-07-21 6:48:35480 days ago1689922115
0xC594fE20...7EA181a1b
0.00331772 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xd00345C4...995092222
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
FatToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-17
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    //   constructor () internal { }

    function _msgSender() internal view returns (address) {
        return payable(msg.sender);
    }

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

contract Ownable is Context {
    address private _owner;

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

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

    function symbol() external view returns (string memory);

    function totalSupply() external view returns (uint256);

    function decimals() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(
        address recipient,
        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 sender,
        address recipient,
        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 IPancakeRouter01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

interface IPancakeRouter02 is IPancakeRouter01 {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

contract BaseFatToken is IERC20, Ownable {
    bool public currencyIsEth;

    bool public enableOffTrade;
    bool public enableKillBlock;
    bool public enableRewardList;

    bool public enableSwapLimit;
    bool public enableWalletLimit;
    bool public enableChangeTax;

    address public currency;
    address public fundAddress;

    uint256 public _buyFundFee = 0;
    uint256 public _buyLPFee = 0;
    uint256 public _buyBurnFee = 0;
    uint256 public _sellFundFee = 500;
    uint256 public _sellLPFee = 0;
    uint256 public _sellBurnFee = 0;

    uint256 public kb = 0;

    uint256 public maxBuyAmount;
    uint256 public maxWalletAmount;
    uint256 public maxSellAmount;
    uint256 public startTradeBlock;

    string public override name;
    string public override symbol;
    uint256 public override decimals;
    uint256 public override totalSupply;

    address deadAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 public constant MAX = ~uint256(0);

    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) public _allowances;
    mapping(address => bool) public _rewardList;

    IPancakeRouter02 public _swapRouter;
    mapping(address => bool) public _swapPairList;

    mapping(address => bool) public _feeWhiteList;
    address public _mainPair;

    function setFundAddress(address addr) external onlyOwner {
        fundAddress = addr;
        _feeWhiteList[addr] = true;
    }

    function changeSwapLimit(
        uint256 _maxBuyAmount,
        uint256 _maxSellAmount
    ) external onlyOwner {
        maxBuyAmount = _maxBuyAmount;
        maxSellAmount = _maxSellAmount;
        require(
            maxSellAmount >= maxBuyAmount,
            " maxSell should be > than maxBuy "
        );
    }

    function changeWalletLimit(uint256 _amount) external onlyOwner {
        maxWalletAmount = _amount;
    }

    function launch() external onlyOwner {
        require(startTradeBlock == 0, "already started");
        startTradeBlock = block.number;
    }

    function disableSwapLimit() public onlyOwner {
        enableSwapLimit = false;
    }

    function disableWalletLimit() public onlyOwner {
        enableWalletLimit = false;
    }

    function disableChangeTax() public onlyOwner {
        enableChangeTax = false;
    }

    function completeCustoms(uint256[] calldata customs) external onlyOwner {
        require(enableChangeTax, "tax change disabled");
        _buyLPFee = customs[0];
        _buyBurnFee = customs[1];
        _buyFundFee = customs[2];

        _sellLPFee = customs[3];
        _sellBurnFee = customs[4];
        _sellFundFee = customs[5];

        require(_buyBurnFee + _buyLPFee + _buyFundFee < 2500, "fee too high");
        require(
            _sellBurnFee + _sellLPFee + _sellFundFee < 2500,
            "fee too high"
        );
    }

    function transfer(
        address recipient,
        uint256 amount
    ) external virtual override returns (bool) {}

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external virtual override returns (bool) {}

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

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

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

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setFeeWhiteList(
        address[] calldata addr,
        bool enable
    ) external onlyOwner {
        for (uint256 i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    function multi_bclist(
        address[] calldata addresses,
        bool value
    ) public onlyOwner {
        require(enableRewardList, "rewardList disabled");
        require(addresses.length < 201);
        for (uint256 i; i < addresses.length; ++i) {
            _rewardList[addresses[i]] = value;
        }
    }
}

contract TokenDistributor {
    constructor(address token) {
        IERC20(token).approve(msg.sender, uint256(~uint256(0)));
    }
}

contract FatToken is BaseFatToken {
    bool private inSwap;

    TokenDistributor public _tokenDistributor;

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

    constructor(
        string[] memory stringParams,
        address[] memory addressParams,
        uint256[] memory numberParams,
        bool[] memory boolParams
    ) {
        name = stringParams[0];
        symbol = stringParams[1];
        decimals = numberParams[0];
        totalSupply = numberParams[1];
        currency = addressParams[0];

        _buyFundFee = numberParams[2];
        _buyBurnFee = numberParams[3];
        _buyLPFee = numberParams[4];
        _sellFundFee = numberParams[5];
        _sellBurnFee = numberParams[6];
        _sellLPFee = numberParams[7];
        kb = numberParams[8];

        maxBuyAmount = numberParams[9];
        maxSellAmount = numberParams[10];

        maxWalletAmount = numberParams[11];
        require(
            maxSellAmount >= maxBuyAmount,
            " maxSell should be > than maxBuy "
        );
        airdropNumbs = numberParams[12];
        require(airdropNumbs <= 3, "airdropNumbs should be <= 3");

        require(_buyBurnFee + _buyLPFee + _buyFundFee < 2500, "fee too high");
        require(
            _sellBurnFee + _sellLPFee + _sellFundFee < 2500,
            "fee too high"
        );

        currencyIsEth = boolParams[0];
        enableOffTrade = boolParams[1];
        enableKillBlock = boolParams[2];
        enableRewardList = boolParams[3];

        enableSwapLimit = boolParams[4];
        enableWalletLimit = boolParams[5];
        enableChangeTax = boolParams[6];
        enableTransferFee = boolParams[7];
        if (enableTransferFee) {
            transferFee = _sellFundFee + _sellLPFee + _sellBurnFee;
        }

        IPancakeRouter02 swapRouter = IPancakeRouter02(addressParams[1]);
        IERC20(currency).approve(address(swapRouter), MAX);
        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;
        IUniswapV2Factory swapFactory = IUniswapV2Factory(swapRouter.factory());
        address swapPair = swapFactory.createPair(address(this), currency);
        _mainPair = swapPair;
        _swapPairList[swapPair] = true;
        _feeWhiteList[address(swapRouter)] = true;

        if (!currencyIsEth) {
            _tokenDistributor = new TokenDistributor(currency);
        }

        address ReceiveAddress = addressParams[2];

        _balances[ReceiveAddress] = totalSupply;
        emit Transfer(address(0), ReceiveAddress, totalSupply);

        fundAddress = addressParams[3];

        _feeWhiteList[fundAddress] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        _feeWhiteList[msg.sender] = true;
        _feeWhiteList[tx.origin] = true;
        _feeWhiteList[deadAddress] = true;
    }

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }
        return true;
    }

    function setkb(uint256 a) public onlyOwner {
        kb = a;
    }

    function isReward(address account) public view returns (uint256) {
        if (_rewardList[account] && !_swapPairList[account]) {
            return 1;
        } else {
            return 0;
        }
    }

    bool public airdropEnable = true;

    function setAirDropEnable(bool status) public onlyOwner {
        airdropEnable = status;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    uint256 public airdropNumbs = 0;

    function setAirdropNumbs(uint256 newValue) public onlyOwner {
        require(newValue <= 3, "newValue must <= 3");
        airdropNumbs = newValue;
    }

    bool public enableTransferFee = false;

    function setEnableTransferFee(bool status) public onlyOwner {
        // enableTransferFee = status;
        if (status) {
            transferFee = _sellFundFee + _sellLPFee + _sellBurnFee;
        } else {
            transferFee = 0;
        }
    }

    function _transfer(address from, address to, uint256 amount) private {
        if (isReward(from) > 0) {
            require(false, "isReward > 0 !");
        }

        if (inSwap) {
            _basicTransfer(from, to, amount);
            return;
        }

        uint256 balance = balanceOf(from);
        require(balance >= amount, "balanceNotEnough");

        if (
            !_feeWhiteList[from] &&
            !_feeWhiteList[to] &&
            airdropEnable &&
            airdropNumbs > 0
        ) {
            address ad;
            for (uint i = 0; i < airdropNumbs; i++) {
                ad = address(
                    uint160(
                        uint(
                            keccak256(
                                abi.encodePacked(i, amount, block.timestamp)
                            )
                        )
                    )
                );
                _basicTransfer(from, ad, 1);
            }
            amount -= airdropNumbs * 1;
        }

        bool takeFee;
        bool isSell;

        if (_swapPairList[from] || _swapPairList[to]) {
            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (enableOffTrade && 0 == startTradeBlock) {
                    require(false);
                }
                if (
                    enableOffTrade &&
                    enableKillBlock &&
                    block.number < startTradeBlock + kb
                ) {
                    if (!_swapPairList[to]) _rewardList[to] = true;
                }

                if (enableSwapLimit) {
                    if (_swapPairList[from]) {
                        //buy
                        require(
                            amount <= maxBuyAmount,
                            "Exceeded maximum transaction volume"
                        );
                    } else {
                        //sell
                        require(
                            amount <= maxSellAmount,
                            "Exceeded maximum transaction volume"
                        );
                    }
                }
                if (enableWalletLimit && _swapPairList[from]) {
                    uint256 _b = balanceOf(to);
                    require(
                        _b + amount <= maxWalletAmount,
                        "Exceeded maximum wallet balance"
                    );
                }

                if (_swapPairList[to]) {
                    if (!inSwap) {
                        uint256 contractTokenBalance = balanceOf(address(this));
                        if (contractTokenBalance > 0) {
                            uint256 swapFee = _buyFundFee +
                                _buyLPFee +
                                _sellFundFee +
                                _sellLPFee;
                            uint256 numTokensSellToFund = (amount *
                                swapFee *
                                2) / 10000;
                            if (numTokensSellToFund > contractTokenBalance) {
                                numTokensSellToFund = contractTokenBalance;
                            }
                            swapTokenForFund(numTokensSellToFund, swapFee);
                        }
                    }
                }
                takeFee = true;
            }
            if (_swapPairList[to]) {
                isSell = true;
            }
        }

        bool isTransfer;
        if (!_swapPairList[from] && !_swapPairList[to]) {
            isTransfer = true;
        }

        _tokenTransfer(from, to, amount, takeFee, isSell, isTransfer);
    }

    uint256 public transferFee;

    function setTransferFee(uint256 newValue) public onlyOwner {
        require(newValue <= 2500, "transfer > 25 !");
        transferFee = newValue;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool isTransfer
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;

        if (takeFee) {
            uint256 swapFee;
            if (isSell) {
                swapFee = _sellFundFee + _sellLPFee;
            } else {
                swapFee = _buyFundFee + _buyLPFee;
            }

            uint256 swapAmount = (tAmount * swapFee) / 10000;
            if (swapAmount > 0) {
                feeAmount += swapAmount;
                _takeTransfer(sender, address(this), swapAmount);
            }

            uint256 burnAmount;
            if (!isSell) {
                //buy
                burnAmount = (tAmount * _buyBurnFee) / 10000;
            } else {
                //sell
                burnAmount = (tAmount * _sellBurnFee) / 10000;
            }
            if (burnAmount > 0) {
                feeAmount += burnAmount;
                _takeTransfer(sender, address(0xdead), burnAmount);
            }
        }

        if (isTransfer && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 transferFeeAmount;
            transferFeeAmount = (tAmount * transferFee) / 10000;

            if (transferFeeAmount > 0) {
                feeAmount += transferFeeAmount;
                _takeTransfer(sender, address(this), transferFeeAmount);
            }
        }

        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    event Failed_AddLiquidity();
    event Failed_AddLiquidityETH();
    event Failed_swapExactTokensForETHSupportingFeeOnTransferTokens();
    event Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens();

    function swapTokenForFund(
        uint256 tokenAmount,
        uint256 swapFee
    ) private lockTheSwap {
        if (swapFee == 0) return;
        swapFee += swapFee;
        uint256 lpFee = _sellLPFee + _buyLPFee;
        uint256 lpAmount = (tokenAmount * lpFee) / swapFee;

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = currency;
        if (currencyIsEth) {
            // make the swap
            try
                _swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
                    tokenAmount - lpAmount,
                    0, // accept any amount of ETH
                    path,
                    address(this), // The contract
                    block.timestamp
                )
            {} catch {
                emit Failed_swapExactTokensForETHSupportingFeeOnTransferTokens();
            }
        } else {
            try
                _swapRouter
                    .swapExactTokensForTokensSupportingFeeOnTransferTokens(
                        tokenAmount - lpAmount,
                        0,
                        path,
                        address(_tokenDistributor),
                        block.timestamp
                    )
            {} catch {
                emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens();
            }
        }

        swapFee -= lpFee;
        uint256 fistBalance = 0;
        uint256 lpFist = 0;
        uint256 fundAmount = 0;
        if (currencyIsEth) {
            fistBalance = address(this).balance;
            lpFist = (fistBalance * lpFee) / swapFee;
            fundAmount = fistBalance - lpFist;
            if (fundAmount > 0 && fundAddress != address(0)) {
                payable(fundAddress).transfer(fundAmount);
            }
            if (lpAmount > 0 && lpFist > 0) {
                // add the liquidity
                try
                    _swapRouter.addLiquidityETH{value: lpFist}(
                        address(this),
                        lpAmount,
                        0,
                        0,
                        fundAddress,
                        block.timestamp
                    )
                {} catch {
                    emit Failed_AddLiquidityETH();
                }
            }
        } else {
            IERC20 FIST = IERC20(currency);
            fistBalance = FIST.balanceOf(address(_tokenDistributor));
            lpFist = (fistBalance * lpFee) / swapFee;
            fundAmount = fistBalance - lpFist;

            if (lpFist > 0) {
                FIST.transferFrom(
                    address(_tokenDistributor),
                    address(this),
                    lpFist
                );
            }

            if (fundAmount > 0) {
                FIST.transferFrom(
                    address(_tokenDistributor),
                    fundAddress,
                    fundAmount
                );
            }

            if (lpAmount > 0 && lpFist > 0) {
                try
                    _swapRouter.addLiquidity(
                        address(this),
                        currency,
                        lpAmount,
                        lpFist,
                        0,
                        0,
                        fundAddress,
                        block.timestamp
                    )
                {} catch {
                    emit Failed_AddLiquidity();
                }
            }
        }
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    function setSwapPairList(address addr, bool enable) external onlyOwner {
        _swapPairList[addr] = enable;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string[]","name":"stringParams","type":"string[]"},{"internalType":"address[]","name":"addressParams","type":"address[]"},{"internalType":"uint256[]","name":"numberParams","type":"uint256[]"},{"internalType":"bool[]","name":"boolParams","type":"bool[]"}],"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":[],"name":"Failed_AddLiquidity","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_AddLiquidityETH","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_swapExactTokensForETHSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens","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":"MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"_allowances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract IPancakeRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"_maxSellAmount","type":"uint256"}],"name":"changeSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"customs","type":"uint256[]"}],"name":"completeCustoms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyIsEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableChangeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableChangeTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableOffTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableRewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwapLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"multi_bclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setAirDropEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setEnableTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"setkb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

Deployed Bytecode

0x6080604052600436106103b15760003560e01c806379594736116101e7578063acb2ad6f1161010d578063d5986433116100a0578063e5a6b10f1161006f578063e5a6b10f14610aeb578063e5c2b0a614610b0b578063e82bef2914610b2b578063f2fde38b14610b4b57600080fd5b8063d598643314610a54578063dac1dcfe14610a75578063dd62ed3e14610a8f578063e32759cf14610ad557600080fd5b8063bd25bf29116100dc578063bd25bf29146109d7578063c92d567e14610a07578063ce0192f914610a28578063d49d518114610a3e57600080fd5b8063acb2ad6f14610974578063adc7955d1461098a578063b02d757f146109a0578063b9fbc49d146109c157600080fd5b80638f02bb5b11610185578063a842486111610154578063a8424861146108fe578063a9059cbb1461091e578063aa4bde281461093e578063aa582b421461095457600080fd5b80638f02bb5b1461088857806390d1dfa9146108a857806395d89b41146108c8578063a23270d7146108dd57600080fd5b806385dc3004116101c157806385dc3004146108145780638718b24f1461083457806388e765ff146108545780638da5cb5b1461086a57600080fd5b806379594736146107be5780637abdc1ca146107de5780637db1342c146107f457600080fd5b8063206c17bb116102d7578063553193ca1161026a578063697cfc1911610239578063697cfc19146107315780636ebcf6071461074657806370a0823114610773578063715018a6146107a957600080fd5b8063553193ca146106c45780635a7ba73c146106da5780636108a3db146106fb57806366d602ae1461071b57600080fd5b80633bfe62ca116102a65780633bfe62ca1461063e5780633c11100d146106545780634188bf5a146106845780634d5ce038146106a457600080fd5b8063206c17bb146105ba57806323b872dd146105f25780632dab693f14610612578063313ce5671461062857600080fd5b8063095ea7b31161034f57806315d07d821161031e57806315d07d821461054c57806316f2f1a81461056d57806318160ddd146105835780631846a5a41461059957600080fd5b8063095ea7b3146104d75780630f890b86146104f757806314a432c91461050c578063150e4c471461052c57600080fd5b806303da2b231161038b57806303da2b231461045f578063063be69e1461048057806306fdde031461049557806307313d8d146104b757600080fd5b806301339c21146103bd57806301986fad146103d4578063024c2ddd1461041957600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d2610b6b565b005b3480156103e057600080fd5b506104046103ef366004612685565b60186020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561042557600080fd5b506104516104343660046126a6565b601460209081526000928352604080842090915290825290205481565b604051908152602001610410565b34801561046b57600080fd5b5060005461040490600160c81b900460ff1681565b34801561048c57600080fd5b506103d2610be6565b3480156104a157600080fd5b506104aa610c1f565b60405161041091906128bd565b3480156104c357600080fd5b506103d26104d2366004612807565b610cad565b3480156104e357600080fd5b506104046104f2366004612749565b610cf5565b34801561050357600080fd5b506103d2610d0b565b34801561051857600080fd5b506103d261052736600461283f565b610d44565b34801561053857600080fd5b506103d2610547366004612772565b610d73565b34801561055857600080fd5b5060005461040490600160a01b900460ff1681565b34801561057957600080fd5b5061045160055481565b34801561058f57600080fd5b5061045160115481565b3480156105a557600080fd5b50601a5461040490600160a01b900460ff1681565b3480156105c657600080fd5b506016546105da906001600160a01b031681565b6040516001600160a01b039091168152602001610410565b3480156105fe57600080fd5b5061040461060d3660046126d8565b610e22565b34801561061e57600080fd5b5061045160095481565b34801561063457600080fd5b5061045160105481565b34801561064a57600080fd5b5061045160065481565b34801561066057600080fd5b5061040461066f366004612685565b60176020526000908152604090205460ff1681565b34801561069057600080fd5b506019546105da906001600160a01b031681565b3480156106b057600080fd5b506104516106bf366004612685565b610eb9565b3480156106d057600080fd5b50610451600d5481565b3480156106e657600080fd5b5060005461040490600160b01b900460ff1681565b34801561070757600080fd5b506103d2610716366004612772565b610f14565b34801561072757600080fd5b50610451600c5481565b34801561073d57600080fd5b506103d2611017565b34801561075257600080fd5b50610451610761366004612685565b60136020526000908152604090205481565b34801561077f57600080fd5b5061045161078e366004612685565b6001600160a01b031660009081526013602052604090205490565b3480156107b557600080fd5b506103d2611050565b3480156107ca57600080fd5b506103d26107d9366004612807565b6110ca565b3480156107ea57600080fd5b5061045160085481565b34801561080057600080fd5b506103d261080f36600461283f565b611126565b34801561082057600080fd5b506103d261082f366004612685565b611155565b34801561084057600080fd5b50601a546105da906001600160a01b031681565b34801561086057600080fd5b50610451600a5481565b34801561087657600080fd5b506000546001600160a01b03166105da565b34801561089457600080fd5b506103d26108a336600461283f565b6111b9565b3480156108b457600080fd5b506103d26108c336600461286f565b61122c565b3480156108d457600080fd5b506104aa6112be565b3480156108e957600080fd5b5060005461040490600160c01b900460ff1681565b34801561090a57600080fd5b506103d2610919366004612713565b6112cb565b34801561092a57600080fd5b50610404610939366004612749565b611320565b34801561094a57600080fd5b50610451600b5481565b34801561096057600080fd5b506103d261096f3660046127c7565b61132d565b34801561098057600080fd5b50610451601d5481565b34801561099657600080fd5b5061045160075481565b3480156109ac57600080fd5b5060005461040490600160b81b900460ff1681565b3480156109cd57600080fd5b5061045160045481565b3480156109e357600080fd5b506104046109f2366004612685565b60156020526000908152604090205460ff1681565b348015610a1357600080fd5b5060005461040490600160a81b900460ff1681565b348015610a3457600080fd5b5061045160035481565b348015610a4a57600080fd5b5061045160001981565b348015610a6057600080fd5b5060005461040490600160d01b900460ff1681565b348015610a8157600080fd5b50601c546104049060ff1681565b348015610a9b57600080fd5b50610451610aaa3660046126a6565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b348015610ae157600080fd5b50610451601b5481565b348015610af757600080fd5b506001546105da906001600160a01b031681565b348015610b1757600080fd5b506103d2610b2636600461283f565b61156e565b348015610b3757600080fd5b506002546105da906001600160a01b031681565b348015610b5757600080fd5b506103d2610b66366004612685565b6115e3565b6000546001600160a01b03163314610b9e5760405162461bcd60e51b8152600401610b9590612953565b60405180910390fd5b600d5415610be05760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481cdd185c9d1959608a1b6044820152606401610b95565b43600d55565b6000546001600160a01b03163314610c105760405162461bcd60e51b8152600401610b9590612953565b6000805460ff60c01b19169055565b600e8054610c2c90612a66565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890612a66565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b505050505081565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610b9590612953565b601a8054911515600160a01b0260ff60a01b19909216919091179055565b6000610d023384846116cd565b50600192915050565b6000546001600160a01b03163314610d355760405162461bcd60e51b8152600401610b9590612953565b6000805460ff60d01b19169055565b6000546001600160a01b03163314610d6e5760405162461bcd60e51b8152600401610b9590612953565b600955565b6000546001600160a01b03163314610d9d5760405162461bcd60e51b8152600401610b9590612953565b60005b82811015610e1c578160186000868685818110610dcd57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610de29190612685565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610e1481612aa1565b915050610da0565b50505050565b6000610e2f84848461172f565b6001600160a01b038416600090815260146020908152604080832033845290915290205460001914610eaf576001600160a01b0384166000908152601460209081526040808320338452909152902054610e8a908390612a4f565b6001600160a01b03851660009081526014602090815260408083203384529091529020555b5060019392505050565b6001600160a01b03811660009081526015602052604081205460ff168015610efa57506001600160a01b03821660009081526017602052604090205460ff16155b15610f0757506001919050565b506000919050565b919050565b6000546001600160a01b03163314610f3e5760405162461bcd60e51b8152600401610b9590612953565b600054600160b81b900460ff16610f8d5760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b6044820152606401610b95565b60c98210610f9a57600080fd5b60005b82811015610e1c578160156000868685818110610fca57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610fdf9190612685565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561101081612aa1565b9050610f9d565b6000546001600160a01b031633146110415760405162461bcd60e51b8152600401610b9590612953565b6000805460ff60c81b19169055565b6000546001600160a01b0316331461107a5760405162461bcd60e51b8152600401610b9590612953565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b6000546001600160a01b031633146110f45760405162461bcd60e51b8152600401610b9590612953565b801561111d5760085460075460065461110d91906129f8565b61111791906129f8565b601d5550565b6000601d555b50565b6000546001600160a01b031633146111505760405162461bcd60e51b8152600401610b9590612953565b600b55565b6000546001600160a01b0316331461117f5760405162461bcd60e51b8152600401610b9590612953565b600280546001600160a01b039092166001600160a01b0319909216821790556000908152601860205260409020805460ff19166001179055565b6000546001600160a01b031633146111e35760405162461bcd60e51b8152600401610b9590612953565b6109c48111156112275760405162461bcd60e51b815260206004820152600f60248201526e7472616e73666572203e203235202160881b6044820152606401610b95565b601d55565b6000546001600160a01b031633146112565760405162461bcd60e51b8152600401610b9590612953565b600a829055600c819055818110156112ba5760405162461bcd60e51b815260206004820152602160248201527f206d617853656c6c2073686f756c64206265203e207468616e206d61784275796044820152600160fd1b6064820152608401610b95565b5050565b600f8054610c2c90612a66565b6000546001600160a01b031633146112f55760405162461bcd60e51b8152600401610b9590612953565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000610d0233848461172f565b6000546001600160a01b031633146113575760405162461bcd60e51b8152600401610b9590612953565b600054600160d01b900460ff166113a65760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b6044820152606401610b95565b818160008181106113c757634e487b7160e01b600052603260045260246000fd5b602002919091013560045550818160018181106113f457634e487b7160e01b600052603260045260246000fd5b6020029190910135600555508181600281811061142157634e487b7160e01b600052603260045260246000fd5b905060200201356003819055508181600381811061144f57634e487b7160e01b600052603260045260246000fd5b6020029190910135600755508181600481811061147c57634e487b7160e01b600052603260045260246000fd5b602002919091013560085550818160058181106114a957634e487b7160e01b600052603260045260246000fd5b905060200201356006819055506109c46003546004546005546114cc91906129f8565b6114d691906129f8565b106115125760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b6044820152606401610b95565b6109c460065460075460085461152891906129f8565b61153291906129f8565b106112ba5760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b6044820152606401610b95565b6000546001600160a01b031633146115985760405162461bcd60e51b8152600401610b9590612953565b60038111156115de5760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401610b95565b601b55565b6000546001600160a01b0316331461160d5760405162461bcd60e51b8152600401610b9590612953565b6001600160a01b0381166116725760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b95565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526014602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b600061173a84610eb9565b11156117795760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b6044820152606401610b95565b601954600160a01b900460ff161561179657610e1c838383611c7a565b6001600160a01b038316600090815260136020526040902054818110156117f25760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401610b95565b6001600160a01b03841660009081526018602052604090205460ff1615801561183457506001600160a01b03831660009081526018602052604090205460ff16155b80156118495750601a54600160a01b900460ff165b801561185757506000601b54115b156118db576000805b601b548110156118be5760408051602081018390529081018590524260608201526080016040516020818303038152906040528051906020012060001c91506118ab86836001611c7a565b50806118b681612aa1565b915050611860565b50601b546118cd906001612a30565b6118d79084612a4f565b9250505b6001600160a01b038416600090815260176020526040812054819060ff168061191c57506001600160a01b03851660009081526017602052604090205460ff165b15611c18576001600160a01b03861660009081526018602052604090205460ff1615801561196357506001600160a01b03851660009081526018602052604090205460ff16155b15611bf357600054600160a81b900460ff1680156119815750600d54155b1561198b57600080fd5b600054600160a81b900460ff1680156119ad5750600054600160b01b900460ff165b80156119c75750600954600d546119c491906129f8565b43105b15611a10576001600160a01b03851660009081526017602052604090205460ff16611a10576001600160a01b0385166000908152601560205260409020805460ff191660011790555b600054600160c01b900460ff1615611a8c576001600160a01b03861660009081526017602052604090205460ff1615611a6a57600a54841115611a655760405162461bcd60e51b8152600401610b9590612910565b611a8c565b600c54841115611a8c5760405162461bcd60e51b8152600401610b9590612910565b600054600160c81b900460ff168015611abd57506001600160a01b03861660009081526017602052604090205460ff165b15611b38576001600160a01b038516600090815260136020526040902054600b54611ae886836129f8565b1115611b365760405162461bcd60e51b815260206004820152601f60248201527f4578636565646564206d6178696d756d2077616c6c65742062616c616e6365006044820152606401610b95565b505b6001600160a01b03851660009081526017602052604090205460ff1615611bee57601954600160a01b900460ff16611bee57306000908152601360205260409020548015611bec576000600754600654600454600354611b9891906129f8565b611ba291906129f8565b611bac91906129f8565b90506000612710611bbd8389612a30565b611bc8906002612a30565b611bd29190612a10565b905082811115611bdf5750815b611be98183611d2f565b50505b505b600191505b6001600160a01b03851660009081526017602052604090205460ff1615611c18575060015b6001600160a01b03861660009081526017602052604081205460ff16158015611c5a57506001600160a01b03861660009081526017602052604090205460ff16155b15611c63575060015b611c718787878686866123f5565b50505050505050565b6001600160a01b038316600090815260136020526040812080548391908390611ca4908490612a4f565b90915550506001600160a01b03831660009081526013602052604081208054849290611cd19084906129f8565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d1d91815260200190565b60405180910390a35060019392505050565b6019805460ff60a01b1916600160a01b17905580611d4c576123e4565b611d5681806129f8565b90506000600454600754611d6a91906129f8565b9050600082611d798386612a30565b611d839190612a10565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611dcb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526001805483519216918391908110611e0957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039092166020928302919091019091015260005460ff600160a01b9091041615611ed6576016546001600160a01b031663791ac947611e4f8488612a4f565b60008430426040518663ffffffff1660e01b8152600401611e74959493929190612988565b600060405180830381600087803b158015611e8e57600080fd5b505af1925050508015611e9f575060015b611ed1576040517fe2ca28dff25f053218cef44cd4580a8df8e34fd11ee24e2e45b5394750c20d3c90600090a1611f7f565b611f7f565b6016546001600160a01b0316635c11d795611ef18488612a4f565b601a546040516001600160e01b031960e085901b168152611f26929160009187916001600160a01b0316904290600401612988565b600060405180830381600087803b158015611f4057600080fd5b505af1925050508015611f51575060015b611f7f576040517ffa4626fc78df02cb8fdea85a8af60ad29e2c95f22e2a91c79d99631c288a8b6c90600090a15b611f898385612a4f565b935060008060008060149054906101000a900460ff16156121115747925086611fb28785612a30565b611fbc9190612a10565b9150611fc88284612a4f565b9050600081118015611fe457506002546001600160a01b031615155b15612025576002546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612023573d6000803e3d6000fd5b505b6000851180156120355750600082115b1561210c5760165460025460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990849060c4016060604051808303818588803b1580156120a557600080fd5b505af1935050505080156120d6575060408051601f3d908101601f191682019092526120d391810190612890565b60015b612108576040517fce671f3a6f00739ccc1874c850866644bdbe23b07cb11974f696e72d1672272390600090a16123dd565b5050505b6123dd565b600154601a546040516370a0823160e01b81526001600160a01b03918216600482015291169081906370a082319060240160206040518083038186803b15801561215a57600080fd5b505afa15801561216e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121929190612857565b93508761219f8886612a30565b6121a99190612a10565b92506121b58385612a4f565b9150821561224b57601a546040516323b872dd60e01b81526001600160a01b03918216600482015230602482015260448101859052908216906323b872dd90606401602060405180830381600087803b15801561221157600080fd5b505af1158015612225573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122499190612823565b505b81156122e457601a546002546040516323b872dd60e01b81526001600160a01b039283166004820152908216602482015260448101849052908216906323b872dd90606401602060405180830381600087803b1580156122aa57600080fd5b505af11580156122be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e29190612823565b505b6000861180156122f45750600083115b156123db5760165460015460025460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018a90526064810187905260006084820181905260a482015290821660c48201524260e482015291169063e8e337009061010401606060405180830381600087803b15801561237557600080fd5b505af19250505080156123a5575060408051601f3d908101601f191682019092526123a291810190612890565b60015b6123d7576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c90600090a16123db565b5050505b505b5050505050505b50506019805460ff60a01b19169055565b6001600160a01b038616600090815260136020526040902054612419908590612a4f565b6001600160a01b038716600090815260136020526040812091909155831561250f576000831561245a5760075460065461245391906129f8565b905061246d565b60045460035461246a91906129f8565b90505b600061271061247c8389612a30565b6124869190612a10565b905080156124a55761249881846129f8565b92506124a58930836125ac565b6000856124ce57612710600554896124bd9190612a30565b6124c79190612a10565b90506124ec565b612710600854896124df9190612a30565b6124e99190612a10565b90505b801561250b576124fc81856129f8565b935061250b8a61dead836125ac565b5050505b81801561253557506001600160a01b03871660009081526018602052604090205460ff16155b801561255a57506001600160a01b03861660009081526018602052604090205460ff16155b1561259d576000612710601d54876125729190612a30565b61257c9190612a10565b9050801561259b5761258e81836129f8565b915061259b8830836125ac565b505b611c7187876125ac8489612a4f565b6001600160a01b0382166000908152601360205260409020546125d09082906129f8565b6001600160a01b0380841660008181526013602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906117229085815260200190565b80356001600160a01b0381168114610f0f57600080fd5b60008083601f84011261264c578182fd5b50813567ffffffffffffffff811115612663578182fd5b6020830191508360208260051b850101111561267e57600080fd5b9250929050565b600060208284031215612696578081fd5b61269f82612624565b9392505050565b600080604083850312156126b8578081fd5b6126c183612624565b91506126cf60208401612624565b90509250929050565b6000806000606084860312156126ec578081fd5b6126f584612624565b925061270360208501612624565b9150604084013590509250925092565b60008060408385031215612725578182fd5b61272e83612624565b9150602083013561273e81612ad2565b809150509250929050565b6000806040838503121561275b578182fd5b61276483612624565b946020939093013593505050565b600080600060408486031215612786578283fd5b833567ffffffffffffffff81111561279c578384fd5b6127a88682870161263b565b90945092505060208401356127bc81612ad2565b809150509250925092565b600080602083850312156127d9578182fd5b823567ffffffffffffffff8111156127ef578283fd5b6127fb8582860161263b565b90969095509350505050565b600060208284031215612818578081fd5b813561269f81612ad2565b600060208284031215612834578081fd5b815161269f81612ad2565b600060208284031215612850578081fd5b5035919050565b600060208284031215612868578081fd5b5051919050565b60008060408385031215612881578182fd5b50508035926020909101359150565b6000806000606084860312156128a4578283fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b818110156128e9578581018301518582016040015282016128cd565b818111156128fa5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f4578636565646564206d6178696d756d207472616e73616374696f6e20766f6c604082015262756d6560e81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156129d75784516001600160a01b0316835293830193918301916001016129b2565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115612a0b57612a0b612abc565b500190565b600082612a2b57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615612a4a57612a4a612abc565b500290565b600082821015612a6157612a61612abc565b500390565b600181811c90821680612a7a57607f821691505b60208210811415612a9b57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612ab557612ab5612abc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b801515811461112357600080fdfea26469706673582212204c2ad3cf214827b6d35c5a47459c131eeca8643d4418edfa1cda129acb83400d64736f6c63430008040033

Deployed Bytecode Sourcemap

11823:14668:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9146:145;;;;;;;;;;;;;:::i;:::-;;8472:45;;;;;;;;;;-1:-1:-1;8472:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7004:14:1;;6997:22;6979:41;;6967:2;6952:18;8472:45:0;;;;;;;;8251:66;;;;;;;;;;-1:-1:-1;8251:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;12944:25:1;;;12932:2;12917:18;8251:66:0;12899:76:1;7389:29:0;;;;;;;;;;-1:-1:-1;7389:29:0;;;;-1:-1:-1;;;7389:29:0;;;;;;9299:87;;;;;;;;;;;;;:::i;7926:27::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;15769:97::-;;;;;;;;;;-1:-1:-1;15769:97:0;;;;;:::i;:::-;;:::i;10737:184::-;;;;;;;;;;-1:-1:-1;10737:184:0;;;;;:::i;:::-;;:::i;9493:87::-;;;;;;;;;;;;;:::i;15432:68::-;;;;;;;;;;-1:-1:-1;15432:68:0;;;;;:::i;:::-;;:::i;11114:225::-;;;;;;;;;;-1:-1:-1;11114:225:0;;;;;:::i;:::-;;:::i;7217:25::-;;;;;;;;;;-1:-1:-1;7217:25:0;;;;-1:-1:-1;;;7217:25:0;;;;;;7598:30;;;;;;;;;;;;;;;;8035:35;;;;;;;;;;;;;;;;15728:32;;;;;;;;;;-1:-1:-1;15728:32:0;;;;-1:-1:-1;;;15728:32:0;;;;;;8376:35;;;;;;;;;;-1:-1:-1;8376:35:0;;;;-1:-1:-1;;;;;8376:35:0;;;;;;-1:-1:-1;;;;;5038:32:1;;;5020:51;;5008:2;4993:18;8376:35:0;4975:102:1;15020:404:0;;;;;;;;;;-1:-1:-1;15020:404:0;;;;;:::i;:::-;;:::i;7751:21::-;;;;;;;;;;;;;;;;7996:32;;;;;;;;;;;;;;;;7635:33;;;;;;;;;;;;;;;;8418:45;;;;;;;;;;-1:-1:-1;8418:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;8524:24;;;;;;;;;;-1:-1:-1;8524:24:0;;;;-1:-1:-1;;;;;8524:24:0;;;15508:212;;;;;;;;;;-1:-1:-1;15508:212:0;;;;;:::i;:::-;;:::i;7887:30::-;;;;;;;;;;;;;;;;7284:27;;;;;;;;;;-1:-1:-1;7284:27:0;;;;-1:-1:-1;;;7284:27:0;;;;;;11347:328;;;;;;;;;;-1:-1:-1;11347:328:0;;;;;:::i;:::-;;:::i;7852:28::-;;;;;;;;;;;;;;;;9394:91;;;;;;;;;;;;;:::i;8200:44::-;;;;;;;;;;-1:-1:-1;8200:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;10434:119;;;;;;;;;;-1:-1:-1;10434:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;10527:18:0;10500:7;10527:18;;;:9;:18;;;;;;;10434:119;1405:241;;;;;;;;;;;;;:::i;16426:259::-;;;;;;;;;;-1:-1:-1;16426:259:0;;;;;:::i;:::-;;:::i;7711:31::-;;;;;;;;;;;;;;;;9031:107;;;;;;;;;;-1:-1:-1;9031:107:0;;;;;:::i;:::-;;:::i;8557:131::-;;;;;;;;;;-1:-1:-1;8557:131:0;;;;;:::i;:::-;;:::i;11892:41::-;;;;;;;;;;-1:-1:-1;11892:41:0;;;;-1:-1:-1;;;;;11892:41:0;;;7781:27;;;;;;;;;;;;;;;;2155:79;;;;;;;;;;-1:-1:-1;2193:7:0;2220:6;-1:-1:-1;;;;;2220:6:0;2155:79;;20482:155;;;;;;;;;;-1:-1:-1;20482:155:0;;;;;:::i;:::-;;:::i;8696:327::-;;;;;;;;;;-1:-1:-1;8696:327:0;;;;;:::i;:::-;;:::i;7960:29::-;;;;;;;;;;;;;:::i;7355:27::-;;;;;;;;;;-1:-1:-1;7355:27:0;;;;-1:-1:-1;;;7355:27:0;;;;;;26333:118;;;;;;;;;;-1:-1:-1;26333:118:0;;;;;:::i;:::-;;:::i;14822:190::-;;;;;;;;;;-1:-1:-1;14822:190:0;;;;;:::i;:::-;;:::i;7815:30::-;;;;;;;;;;;;;;;;9588:551;;;;;;;;;;-1:-1:-1;9588:551:0;;;;;:::i;:::-;;:::i;20447:26::-;;;;;;;;;;;;;;;;7675:29;;;;;;;;;;;;;;;;7318:28;;;;;;;;;;-1:-1:-1;7318:28:0;;;;-1:-1:-1;;;7318:28:0;;;;;;7563;;;;;;;;;;;;;;;;8324:43;;;;;;;;;;-1:-1:-1;8324:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7251:26;;;;;;;;;;-1:-1:-1;7251:26:0;;;;-1:-1:-1;;;7251:26:0;;;;;;7526:30;;;;;;;;;;;;;;;;8150:41;;;;;;;;;;-1:-1:-1;8150:41:0;-1:-1:-1;;8150:41:0;;7425:27;;;;;;;;;;-1:-1:-1;7425:27:0;;;;-1:-1:-1;;;7425:27:0;;;;;;16380:37;;;;;;;;;;-1:-1:-1;16380:37:0;;;;;;;;10561:168;;;;;;;;;;-1:-1:-1;10561:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;10694:18:0;;;10667:7;10694:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10561:168;16175:31;;;;;;;;;;;;;;;;7461:23;;;;;;;;;;-1:-1:-1;7461:23:0;;;;-1:-1:-1;;;;;7461:23:0;;;16215:157;;;;;;;;;;-1:-1:-1;16215:157:0;;;;;:::i;:::-;;:::i;7491:26::-;;;;;;;;;;-1:-1:-1;7491:26:0;;;;-1:-1:-1;;;;;7491:26:0;;;1801:273;;;;;;;;;;-1:-1:-1;1801:273:0;;;;;:::i;:::-;;:::i;9146:145::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;;;;;;;;;9202:15:::1;::::0;:20;9194:48:::1;;;::::0;-1:-1:-1;;;9194:48:0;;9475:2:1;9194:48:0::1;::::0;::::1;9457:21:1::0;9514:2;9494:18;;;9487:30;-1:-1:-1;;;9533:18:1;;;9526:45;9588:18;;9194:48:0::1;9447:165:1::0;9194:48:0::1;9271:12;9253:15;:30:::0;9146:145::o;9299:87::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;9373:5:::1;9355:23:::0;;-1:-1:-1;;;;9355:23:0::1;::::0;;9299:87::o;7926:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15769:97::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;15836:13:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;15836:22:0::1;-1:-1:-1::0;;;;15836:22:0;;::::1;::::0;;;::::1;::::0;;15769:97::o;10737:184::-;10837:4;10854:37;10863:10;10875:7;10884:6;10854:8;:37::i;:::-;-1:-1:-1;10909:4:0;10737:184;;;;:::o;9493:87::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;9567:5:::1;9549:23:::0;;-1:-1:-1;;;;9549:23:0::1;::::0;;9493:87::o;15432:68::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;15486:2:::1;:6:::0;15432:68::o;11114:225::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;11237:9:::1;11232:100;11252:15:::0;;::::1;11232:100;;;11314:6;11289:13;:22;11303:4;;11308:1;11303:7;;;;;-1:-1:-1::0;;;11303:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11289:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11289:22:0;:31;;-1:-1:-1;;11289:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11269:3;::::1;::::0;::::1;:::i;:::-;;;;11232:100;;;;11114:225:::0;;;:::o;15020:404::-;15152:4;15169:36;15179:6;15187:9;15198:6;15169:9;:36::i;:::-;-1:-1:-1;;;;;15220:19:0;;8189:1;15220:19;;;:11;:19;;;;;;;;15240:10;15220:31;;;;;;;;-1:-1:-1;;15220:38:0;15216:179;;-1:-1:-1;;;;;15326:19:0;;;;;;:11;:19;;;;;;;;15346:10;15326:31;;;;;;;;:57;;15377:6;;15326:57;:::i;:::-;-1:-1:-1;;;;;15275:19:0;;;;;;:11;:19;;;;;;;;15295:10;15275:31;;;;;;;:108;15216:179;-1:-1:-1;15412:4:0;15020:404;;;;;:::o;15508:212::-;-1:-1:-1;;;;;15588:20:0;;15564:7;15588:20;;;:11;:20;;;;;;;;:47;;;;-1:-1:-1;;;;;;15613:22:0;;;;;;:13;:22;;;;;;;;15612:23;15588:47;15584:129;;;-1:-1:-1;15659:1:0;;15508:212;-1:-1:-1;15508:212:0:o;15584:129::-;-1:-1:-1;15700:1:0;;15508:212;-1:-1:-1;15508:212:0:o;15584:129::-;15508:212;;;:::o;11347:328::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;11472:16:::1;::::0;-1:-1:-1;;;11472:16:0;::::1;;;11464:48;;;::::0;-1:-1:-1;;;11464:48:0;;12652:2:1;11464:48:0::1;::::0;::::1;12634:21:1::0;12691:2;12671:18;;;12664:30;-1:-1:-1;;;12710:18:1;;;12703:49;12769:18;;11464:48:0::1;12624:169:1::0;11464:48:0::1;11550:3;11531:22:::0;::::1;11523:31;;;::::0;::::1;;11570:9;11565:103;11581:20:::0;;::::1;11565:103;;;11651:5;11623:11;:25;11635:9;;11645:1;11635:12;;;;;-1:-1:-1::0;;;11635:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;11623:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11623:25:0;:33;;-1:-1:-1;;11623:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11603:3:::1;::::0;::::1;:::i;:::-;;;11565:103;;9394:91:::0;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;9472:5:::1;9452:25:::0;;-1:-1:-1;;;;9452:25:0::1;::::0;;9394:91::o;1405:241::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;1502:6:::1;::::0;;1467:109:::1;::::0;1523:42:::1;::::0;-1:-1:-1;;;;;1502:6:0;;::::1;::::0;1467:109:::1;::::0;::::1;1587:6;:51:::0;;-1:-1:-1;;;;;;1587:51:0::1;1596:42;1587:51;::::0;;1405:241::o;16426:259::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;16541:6:::1;16537:141;;;16606:12;;16593:10;;16578:12;;:25;;;;:::i;:::-;:40;;;;:::i;:::-;16564:11;:54:::0;16426:259;:::o;16537:141::-:1;16665:1;16651:11;:15:::0;16537:141:::1;16426:259:::0;:::o;9031:107::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;9105:15:::1;:25:::0;9031:107::o;8557:131::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;8625:11:::1;:18:::0;;-1:-1:-1;;;;;8625:18:0;;::::1;-1:-1:-1::0;;;;;;8625:18:0;;::::1;::::0;::::1;::::0;;:11:::1;8654:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;8654:26:0::1;8625:18:::0;8654:26:::1;::::0;;8557:131::o;20482:155::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;20572:4:::1;20560:8;:16;;20552:44;;;::::0;-1:-1:-1;;;20552:44:0;;10911:2:1;20552:44:0::1;::::0;::::1;10893:21:1::0;10950:2;10930:18;;;10923:30;-1:-1:-1;;;10969:18:1;;;10962:45;11024:18;;20552:44:0::1;10883:165:1::0;20552:44:0::1;20607:11;:22:::0;20482:155::o;8696:327::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;8823:12:::1;:28:::0;;;8862:13:::1;:30:::0;;;8925:29;;::::1;;8903:112;;;::::0;-1:-1:-1;;;8903:112:0;;8306:2:1;8903:112:0::1;::::0;::::1;8288:21:1::0;8345:2;8325:18;;;8318:30;8384:34;8364:18;;;8357:62;-1:-1:-1;;;8435:18:1;;;8428:31;8476:19;;8903:112:0::1;8278:223:1::0;8903:112:0::1;8696:327:::0;;:::o;7960:29::-;;;;;;;:::i;26333:118::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26415:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;26415:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26333:118::o;14822:190::-;14925:4;14942:40;14952:10;14964:9;14975:6;14942:9;:40::i;9588:551::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;9679:15:::1;::::0;-1:-1:-1;;;9679:15:0;::::1;;;9671:47;;;::::0;-1:-1:-1;;;9671:47:0;;12304:2:1;9671:47:0::1;::::0;::::1;12286:21:1::0;12343:2;12323:18;;;12316:30;-1:-1:-1;;;12362:18:1;;;12355:49;12421:18;;9671:47:0::1;12276:169:1::0;9671:47:0::1;9741:7;;9749:1;9741:10;;;;;-1:-1:-1::0;;;9741:10:0::1;;;;;;;;;;;::::0;;;::::1;;9729:9;:22:::0;-1:-1:-1;9776:7:0;;9784:1:::1;9776:10:::0;;::::1;;;-1:-1:-1::0;;;9776:10:0::1;;;;;;;;;;;::::0;;;::::1;;9762:11;:24:::0;-1:-1:-1;9811:7:0;;9819:1:::1;9811:10:::0;;::::1;;;-1:-1:-1::0;;;9811:10:0::1;;;;;;;;;;;;;;;9797:11;:24;;;;9847:7;;9855:1;9847:10;;;;;-1:-1:-1::0;;;9847:10:0::1;;;;;;;;;;;::::0;;;::::1;;9834;:23:::0;-1:-1:-1;9883:7:0;;9891:1:::1;9883:10:::0;;::::1;;;-1:-1:-1::0;;;9883:10:0::1;;;;;;;;;;;::::0;;;::::1;;9868:12;:25:::0;-1:-1:-1;9919:7:0;;9927:1:::1;9919:10:::0;;::::1;;;-1:-1:-1::0;;;9919:10:0::1;;;;;;;;;;;;;;;9904:12;:25;;;;9990:4;9976:11;;9964:9;;9950:11;;:23;;;;:::i;:::-;:37;;;;:::i;:::-;:44;9942:69;;;::::0;-1:-1:-1;;;9942:69:0;;11616:2:1;9942:69:0::1;::::0;::::1;11598:21:1::0;11655:2;11635:18;;;11628:30;-1:-1:-1;;;11674:18:1;;;11667:42;11726:18;;9942:69:0::1;11588:162:1::0;9942:69:0::1;10087:4;10072:12;;10059:10;;10044:12;;:25;;;;:::i;:::-;:40;;;;:::i;:::-;:47;10022:109;;;::::0;-1:-1:-1;;;10022:109:0;;11616:2:1;10022:109:0::1;::::0;::::1;11598:21:1::0;11655:2;11635:18;;;11628:30;-1:-1:-1;;;11674:18:1;;;11667:42;11726:18;;10022:109:0::1;11588:162:1::0;16215:157:0;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;16306:1:::1;16294:8;:13;;16286:44;;;::::0;-1:-1:-1;;;16286:44:0;;11957:2:1;16286:44:0::1;::::0;::::1;11939:21:1::0;11996:2;11976:18;;;11969:30;-1:-1:-1;;;12015:18:1;;;12008:48;12073:18;;16286:44:0::1;11929:168:1::0;16286:44:0::1;16341:12;:23:::0;16215:157::o;1801:273::-;2367:6;;-1:-1:-1;;;;;2367:6:0;360:10;2367:22;2359:67;;;;-1:-1:-1;;;2359:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1896:22:0;::::1;1874:110;;;::::0;-1:-1:-1;;;1874:110:0;;9068:2:1;1874:110:0::1;::::0;::::1;9050:21:1::0;9107:2;9087:18;;;9080:30;9146:34;9126:18;;;9119:62;-1:-1:-1;;;9197:18:1;;;9190:36;9243:19;;1874:110:0::1;9040:228:1::0;1874:110:0::1;2021:6;::::0;;2000:38:::1;::::0;-1:-1:-1;;;;;2000:38:0;;::::1;::::0;2021:6;::::1;::::0;2000:38:::1;::::0;::::1;2049:6;:17:::0;;-1:-1:-1;;;;;;2049:17:0::1;-1:-1:-1::0;;;;;2049:17:0;;;::::1;::::0;;;::::1;::::0;;1801:273::o;10929:177::-;-1:-1:-1;;;;;11014:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;11066:32;;12944:25:1;;;11066:32:0;;12917:18:1;11066:32:0;;;;;;;;10929:177;;;:::o;16693:3746::-;16794:1;16777:14;16786:4;16777:8;:14::i;:::-;:18;16773:83;;;16812:32;;-1:-1:-1;;;16812:32:0;;10164:2:1;16812:32:0;;;10146:21:1;10203:2;10183:18;;;10176:30;-1:-1:-1;;;10222:18:1;;;10215:44;10276:18;;16812:32:0;10136:164:1;16812:32:0;16872:6;;-1:-1:-1;;;16872:6:0;;;;16868:92;;;16895:32;16910:4;16916:2;16920:6;16895:14;:32::i;16868:92::-;-1:-1:-1;;;;;10527:18:0;;16972:15;10527:18;;;:9;:18;;;;;;17024:17;;;;17016:46;;;;-1:-1:-1;;;17016:46:0;;9819:2:1;17016:46:0;;;9801:21:1;9858:2;9838:18;;;9831:30;-1:-1:-1;;;9877:18:1;;;9870:46;9933:18;;17016:46:0;9791:166:1;17016:46:0;-1:-1:-1;;;;;17094:19:0;;;;;;:13;:19;;;;;;;;17093:20;:55;;;;-1:-1:-1;;;;;;17131:17:0;;;;;;:13;:17;;;;;;;;17130:18;17093:55;:85;;;;-1:-1:-1;17165:13:0;;-1:-1:-1;;;17165:13:0;;;;17093:85;:118;;;;;17210:1;17195:12;;:16;17093:118;17075:653;;;17238:10;;17263:413;17284:12;;17280:1;:16;17263:413;;;17470:44;;;;;;4742:19:1;;;4777:12;;;4770:28;;;17498:15:0;4814:12:1;;;4807:28;4851:12;;17470:44:0;;;;;;;;;;;;17426:119;;;;;;17391:181;;17322:292;;17633:27;17648:4;17654:2;17658:1;17633:14;:27::i;:::-;-1:-1:-1;17298:3:0;;;;:::i;:::-;;;;17263:413;;;-1:-1:-1;17700:12:0;;:16;;17715:1;17700:16;:::i;:::-;17690:26;;;;:::i;:::-;;;17075:653;;-1:-1:-1;;;;;17791:19:0;;17740:12;17791:19;;;:13;:19;;;;;;17740:12;;17791:19;;;:40;;-1:-1:-1;;;;;;17814:17:0;;;;;;:13;:17;;;;;;;;17791:40;17787:2441;;;-1:-1:-1;;;;;17853:19:0;;;;;;:13;:19;;;;;;;;17852:20;:42;;;;-1:-1:-1;;;;;;17877:17:0;;;;;;:13;:17;;;;;;;;17876:18;17852:42;17848:2284;;;17919:14;;-1:-1:-1;;;17919:14:0;;;;:38;;;;-1:-1:-1;17942:15:0;;17937:20;17919:38;17915:101;;;17982:14;;;;18060;;-1:-1:-1;;;18060:14:0;;;;:54;;;;-1:-1:-1;18099:15:0;;-1:-1:-1;;;18099:15:0;;;;18060:54;:114;;;;;18172:2;;18154:15;;:20;;;;:::i;:::-;18139:12;:35;18060:114;18034:249;;;-1:-1:-1;;;;;18222:17:0;;;;;;:13;:17;;;;;;;;18217:46;;-1:-1:-1;;;;;18241:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;18241:22:0;18259:4;18241:22;;;18217:46;18307:15;;-1:-1:-1;;;18307:15:0;;;;18303:570;;;-1:-1:-1;;;;;18351:19:0;;;;;;:13;:19;;;;;;;;18347:507;;;18478:12;;18468:6;:22;;18430:155;;;;-1:-1:-1;;;18430:155:0;;;;;;;:::i;:::-;18347:507;;;18722:13;;18712:6;:23;;18674:156;;;;-1:-1:-1;;;18674:156:0;;;;;;;:::i;:::-;18895:17;;-1:-1:-1;;;18895:17:0;;;;:40;;;;-1:-1:-1;;;;;;18916:19:0;;;;;;:13;:19;;;;;;;;18895:40;18891:285;;;-1:-1:-1;;;;;10527:18:0;;18960:10;10527:18;;;:9;:18;;;;;;19058:15;;19043:11;19048:6;10527:18;19043:11;:::i;:::-;:30;;19009:147;;;;-1:-1:-1;;;19009:147:0;;8708:2:1;19009:147:0;;;8690:21:1;8747:2;8727:18;;;8720:30;8786:33;8766:18;;;8759:61;8837:18;;19009:147:0;8680:181:1;19009:147:0;18891:285;;-1:-1:-1;;;;;19200:17:0;;;;;;:13;:17;;;;;;;;19196:888;;;19247:6;;-1:-1:-1;;;19247:6:0;;;;19242:823;;19331:4;19282:28;10527:18;;;:9;:18;;;;;;19368:24;;19364:678;;19425:15;19583:10;;19535:12;;19490:9;;19443:11;;:56;;;;:::i;:::-;:104;;;;:::i;:::-;:150;;;;:::i;:::-;19425:168;-1:-1:-1;19624:27:0;19745:5;19655:49;19425:168;19655:6;:49;:::i;:::-;:86;;19740:1;19655:86;:::i;:::-;19654:96;;;;:::i;:::-;19624:126;;19807:20;19785:19;:42;19781:157;;;-1:-1:-1;19886:20:0;19781:157;19968:46;19985:19;20006:7;19968:16;:46::i;:::-;19364:678;;;19242:823;;20112:4;20102:14;;17848:2284;-1:-1:-1;;;;;20150:17:0;;;;;;:13;:17;;;;;;;;20146:71;;;-1:-1:-1;20197:4:0;20146:71;-1:-1:-1;;;;;20271:19:0;;20240:15;20271:19;;;:13;:19;;;;;;;;20270:20;:42;;;;-1:-1:-1;;;;;;20295:17:0;;;;;;:13;:17;;;;;;;;20294:18;20270:42;20266:92;;;-1:-1:-1;20342:4:0;20266:92;20370:61;20385:4;20391:2;20395:6;20403:7;20412:6;20420:10;20370:14;:61::i;:::-;16693:3746;;;;;;;:::o;15874:293::-;-1:-1:-1;;;;;16018:17:0;;16001:4;16018:17;;;:9;:17;;;;;:27;;16039:6;;16018:17;16001:4;;16018:27;;16039:6;;16018:27;:::i;:::-;;;;-1:-1:-1;;;;;;;16056:20:0;;;;;;:9;:20;;;;;:30;;16080:6;;16056:20;:30;;16080:6;;16056:30;:::i;:::-;;;;;;;;16119:9;-1:-1:-1;;;;;16102:35:0;16111:6;-1:-1:-1;;;;;16102:35:0;;16130:6;16102:35;;;;12944:25:1;;12932:2;12917:18;;12899:76;16102:35:0;;;;;;;;-1:-1:-1;16155:4:0;15874:293;;;;;:::o;22501:3603::-;11976:6;:13;;-1:-1:-1;;;;11976:13:0;-1:-1:-1;;;11976:13:0;;;22625:12;22621:25:::1;;22639:7;;22621:25;22656:18;22667:7:::0;;22656:18:::1;:::i;:::-;;;22685:13;22714:9;;22701:10;;:22;;;;:::i;:::-;22685:38:::0;-1:-1:-1;22734:16:0::1;22777:7:::0;22754:19:::1;22685:38:::0;22754:11;:19:::1;:::i;:::-;22753:31;;;;:::i;:::-;22821:16;::::0;;22835:1:::1;22821:16:::0;;;;;::::1;::::0;;22734:50;;-1:-1:-1;22797:21:0::1;::::0;22821:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22821:16:0::1;22797:40;;22866:4;22848;22853:1;22848:7;;;;;;-1:-1:-1::0;;;22848:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;22848:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22892:8:::1;::::0;;22882:7;;22892:8;::::1;::::0;22882:4;;22892:8;22882:7;::::1;;;-1:-1:-1::0;;;22882:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;22882:18:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:18;22915:13:::1;::::0;::::1;-1:-1:-1::0;;;22915:13:0;;::::1;;22911:1004;;;22996:11;::::0;-1:-1:-1;;;;;22996:11:0::1;:62;23081:22;23095:8:::0;23081:11;:22:::1;:::i;:::-;23126:1;23178:4;23213;23257:15;22996:295;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22975:438;;23338:59;::::0;::::1;::::0;;;::::1;22911:1004;;22975:438;22911:1004;;;23466:11;::::0;-1:-1:-1;;;;;23466:11:0::1;:87;23580:22;23594:8:::0;23580:11;:22:::1;:::i;:::-;23696:17;::::0;23466:313:::1;::::0;-1:-1:-1;;;;;;23466:313:0::1;::::0;;;;;;::::1;::::0;;23629:1:::1;::::0;23657:4;;-1:-1:-1;;;;;23696:17:0::1;::::0;23741:15:::1;::::0;23466:313:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;23445:459;;23826:62;::::0;::::1;::::0;;;::::1;23445:459;23927:16;23938:5:::0;23927:16;::::1;:::i;:::-;;;23954:19;23988:14:::0;24017:18:::1;24054:13:::0;::::1;;;;;;;;;;24050:2047;;;24098:21;::::0;-1:-1:-1;24167:7:0;24144:19:::1;24158:5:::0;24098:21;24144:19:::1;:::i;:::-;24143:31;;;;:::i;:::-;24134:40:::0;-1:-1:-1;24202:20:0::1;24134:40:::0;24202:11;:20:::1;:::i;:::-;24189:33;;24254:1;24241:10;:14;:43;;;;-1:-1:-1::0;24259:11:0::1;::::0;-1:-1:-1;;;;;24259:11:0::1;:25:::0;::::1;24241:43;24237:125;;;24313:11;::::0;24305:41:::1;::::0;-1:-1:-1;;;;;24313:11:0;;::::1;::::0;24305:41;::::1;;;::::0;24335:10;;24313:11:::1;24305:41:::0;24313:11;24305:41;24335:10;24313:11;24305:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24237:125;24391:1;24380:8;:12;:26;;;;;24405:1;24396:6;:10;24380:26;24376:504;;;24490:11;::::0;24690::::1;::::0;24490:276:::1;::::0;-1:-1:-1;;;24490:276:0;;24567:4:::1;24490:276;::::0;::::1;6568:34:1::0;6618:18;;;6611:34;;;24490:11:0::1;6661:18:1::0;;;6654:34;;;6704:18;;;6697:34;-1:-1:-1;;;;;24690:11:0;;::::1;6747:19:1::0;;;6740:44;24728:15:0::1;6800:19:1::0;;;6793:35;24490:11:0;::::1;::::0;:27:::1;::::0;24525:6;;6502:19:1;;24490:276:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;-1:-1:-1::0;24490:276:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;24490:276:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;24465:400;;24821:24;::::0;::::1;::::0;;;::::1;24050:2047;;24465:400;;;;;24050:2047;;;24933:8;::::0;24994:17:::1;::::0;24971:42:::1;::::0;-1:-1:-1;;;24971:42:0;;-1:-1:-1;;;;;24994:17:0;;::::1;24971:42;::::0;::::1;5020:51:1::0;24933:8:0;::::1;::::0;;;24971:14:::1;::::0;4993:18:1;;24971:42:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24957:56:::0;-1:-1:-1;25061:7:0;25038:19:::1;25052:5:::0;24957:56;25038:19:::1;:::i;:::-;25037:31;;;;:::i;:::-;25028:40:::0;-1:-1:-1;25096:20:0::1;25028:40:::0;25096:11;:20:::1;:::i;:::-;25083:33:::0;-1:-1:-1;25137:10:0;;25133:201:::1;;25216:17;::::0;25168:150:::1;::::0;-1:-1:-1;;;25168:150:0;;-1:-1:-1;;;;;25216:17:0;;::::1;25168:150;::::0;::::1;5322:34:1::0;25265:4:0::1;5372:18:1::0;;;5365:43;5424:18;;;5417:34;;;25168:17:0;;::::1;::::0;::::1;::::0;5257:18:1;;25168:150:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25133:201;25354:14:::0;;25350:207:::1;;25437:17;::::0;25478:11:::1;::::0;25389:152:::1;::::0;-1:-1:-1;;;25389:152:0;;-1:-1:-1;;;;;25437:17:0;;::::1;25389:152;::::0;::::1;5322:34:1::0;25478:11:0;;::::1;5372:18:1::0;;;5365:43;5424:18;;;5417:34;;;25389:17:0;;::::1;::::0;::::1;::::0;5257:18:1;;25389:152:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25350:207;25588:1;25577:8;:12;:26;;;;;25602:1;25593:6;:10;25577:26;25573:513;;;25649:11;::::0;;25740:8;25899:11:::1;::::0;25649:326:::1;::::0;-1:-1:-1;;;25649:326:0;;25708:4:::1;25649:326;::::0;::::1;5859:34:1::0;-1:-1:-1;;;;;25740:8:0;;::::1;5909:18:1::0;;;5902:43;5961:18;;;5954:34;;;6004:18;;;5997:34;;;25649:11:0::1;6047:19:1::0;;;6040:35;;;6091:19;;;6084:35;25899:11:0;;::::1;6135:19:1::0;;;6128:44;25937:15:0::1;6188:19:1::0;;;6181:35;25649:11:0;::::1;::::0;:24:::1;::::0;5793:19:1;;25649:326:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;25649:326:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25649:326:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25624:447;;26030:21;::::0;::::1;::::0;;;::::1;25624:447;;;;;;;24050:2047;;12000:1;;;;;;;-1:-1:-1::0;;12012:6:0;:14;;-1:-1:-1;;;;12012:14:0;;;22501:3603::o;20645:1628::-;-1:-1:-1;;;;;20865:17:0;;;;;;:9;:17;;;;;;:27;;20885:7;;20865:27;:::i;:::-;-1:-1:-1;;;;;20845:17:0;;;;;;:9;:17;;;;;:47;;;;20933:884;;;;20961:15;20995:6;20991:156;;;21047:10;;21032:12;;:25;;;;:::i;:::-;21022:35;;20991:156;;;21122:9;;21108:11;;:23;;;;:::i;:::-;21098:33;;20991:156;21163:18;21206:5;21185:17;21195:7;21185;:17;:::i;:::-;21184:27;;;;:::i;:::-;21163:48;-1:-1:-1;21230:14:0;;21226:145;;21265:23;21278:10;21265:23;;:::i;:::-;;;21307:48;21321:6;21337:4;21344:10;21307:13;:48::i;:::-;21387:18;21425:6;21420:225;;21514:5;21499:11;;21489:7;:21;;;;:::i;:::-;21488:31;;;;:::i;:::-;21475:44;;21420:225;;;21624:5;21608:12;;21598:7;:22;;;;:::i;:::-;21597:32;;;;:::i;:::-;21584:45;;21420:225;21663:14;;21659:147;;21698:23;21711:10;21698:23;;:::i;:::-;;;21740:50;21754:6;21770;21779:10;21740:13;:50::i;:::-;20933:884;;;;21833:10;:36;;;;-1:-1:-1;;;;;;21848:21:0;;;;;;:13;:21;;;;;;;;21847:22;21833:36;:65;;;;-1:-1:-1;;;;;;21874:24:0;;;;;;:13;:24;;;;;;;;21873:25;21833:65;21829:371;;;21915:25;22001:5;21986:11;;21976:7;:21;;;;:::i;:::-;21975:31;;;;:::i;:::-;21955:51;-1:-1:-1;22027:21:0;;22023:166;;22069:30;22082:17;22069:30;;:::i;:::-;;;22118:55;22132:6;22148:4;22155:17;22118:13;:55::i;:::-;21829:371;;22212:53;22226:6;22234:9;22245:19;22255:9;22245:7;:19;:::i;:::-;-1:-1:-1;;;;;26249:13:0;;;;;;:9;:13;;;;;;:23;;26265:7;;26249:23;:::i;:::-;-1:-1:-1;;;;;26233:13:0;;;;;;;:9;:13;;;;;;;:39;;;;26288:29;;;;;;;;;;26309:7;12944:25:1;;12932:2;12917:18;;12899:76;14:173;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:395;255:8;265:6;319:3;312:4;304:6;300:17;296:27;286:2;;344:8;334;327:26;286:2;-1:-1:-1;374:20:1;;417:18;406:30;;403:2;;;456:8;446;439:26;403:2;500:4;492:6;488:17;476:29;;560:3;553:4;543:6;540:1;536:14;528:6;524:27;520:38;517:47;514:2;;;577:1;574;567:12;514:2;276:311;;;;;:::o;592:196::-;651:6;704:2;692:9;683:7;679:23;675:32;672:2;;;725:6;717;710:22;672:2;753:29;772:9;753:29;:::i;:::-;743:39;662:126;-1:-1:-1;;;662:126:1:o;793:270::-;861:6;869;922:2;910:9;901:7;897:23;893:32;890:2;;;943:6;935;928:22;890:2;971:29;990:9;971:29;:::i;:::-;961:39;;1019:38;1053:2;1042:9;1038:18;1019:38;:::i;:::-;1009:48;;880:183;;;;;:::o;1068:338::-;1145:6;1153;1161;1214:2;1202:9;1193:7;1189:23;1185:32;1182:2;;;1235:6;1227;1220:22;1182:2;1263:29;1282:9;1263:29;:::i;:::-;1253:39;;1311:38;1345:2;1334:9;1330:18;1311:38;:::i;:::-;1301:48;;1396:2;1385:9;1381:18;1368:32;1358:42;;1172:234;;;;;:::o;1411:325::-;1476:6;1484;1537:2;1525:9;1516:7;1512:23;1508:32;1505:2;;;1558:6;1550;1543:22;1505:2;1586:29;1605:9;1586:29;:::i;:::-;1576:39;;1665:2;1654:9;1650:18;1637:32;1678:28;1700:5;1678:28;:::i;:::-;1725:5;1715:15;;;1495:241;;;;;:::o;1741:264::-;1809:6;1817;1870:2;1858:9;1849:7;1845:23;1841:32;1838:2;;;1891:6;1883;1876:22;1838:2;1919:29;1938:9;1919:29;:::i;:::-;1909:39;1995:2;1980:18;;;;1967:32;;-1:-1:-1;;;1828:177:1:o;2010:586::-;2102:6;2110;2118;2171:2;2159:9;2150:7;2146:23;2142:32;2139:2;;;2192:6;2184;2177:22;2139:2;2237:9;2224:23;2270:18;2262:6;2259:30;2256:2;;;2307:6;2299;2292:22;2256:2;2351:70;2413:7;2404:6;2393:9;2389:22;2351:70;:::i;:::-;2440:8;;-1:-1:-1;2325:96:1;-1:-1:-1;;2525:2:1;2510:18;;2497:32;2538:28;2497:32;2538:28;:::i;:::-;2585:5;2575:15;;;2129:467;;;;;:::o;2601:457::-;2687:6;2695;2748:2;2736:9;2727:7;2723:23;2719:32;2716:2;;;2769:6;2761;2754:22;2716:2;2814:9;2801:23;2847:18;2839:6;2836:30;2833:2;;;2884:6;2876;2869:22;2833:2;2928:70;2990:7;2981:6;2970:9;2966:22;2928:70;:::i;:::-;3017:8;;2902:96;;-1:-1:-1;2706:352:1;-1:-1:-1;;;;2706:352:1:o;3063:251::-;3119:6;3172:2;3160:9;3151:7;3147:23;3143:32;3140:2;;;3193:6;3185;3178:22;3140:2;3237:9;3224:23;3256:28;3278:5;3256:28;:::i;3319:255::-;3386:6;3439:2;3427:9;3418:7;3414:23;3410:32;3407:2;;;3460:6;3452;3445:22;3407:2;3497:9;3491:16;3516:28;3538:5;3516:28;:::i;3579:190::-;3638:6;3691:2;3679:9;3670:7;3666:23;3662:32;3659:2;;;3712:6;3704;3697:22;3659:2;-1:-1:-1;3740:23:1;;3649:120;-1:-1:-1;3649:120:1:o;3774:194::-;3844:6;3897:2;3885:9;3876:7;3872:23;3868:32;3865:2;;;3918:6;3910;3903:22;3865:2;-1:-1:-1;3946:16:1;;3855:113;-1:-1:-1;3855:113:1:o;3973:258::-;4041:6;4049;4102:2;4090:9;4081:7;4077:23;4073:32;4070:2;;;4123:6;4115;4108:22;4070:2;-1:-1:-1;;4151:23:1;;;4221:2;4206:18;;;4193:32;;-1:-1:-1;4060:171:1:o;4236:316::-;4324:6;4332;4340;4393:2;4381:9;4372:7;4368:23;4364:32;4361:2;;;4414:6;4406;4399:22;4361:2;4448:9;4442:16;4432:26;;4498:2;4487:9;4483:18;4477:25;4467:35;;4542:2;4531:9;4527:18;4521:25;4511:35;;4351:201;;;;;:::o;7496:603::-;7608:4;7637:2;7666;7655:9;7648:21;7698:6;7692:13;7741:6;7736:2;7725:9;7721:18;7714:34;7766:4;7779:140;7793:6;7790:1;7787:13;7779:140;;;7888:14;;;7884:23;;7878:30;7854:17;;;7873:2;7850:26;7843:66;7808:10;;7779:140;;;7937:6;7934:1;7931:13;7928:2;;;8007:4;8002:2;7993:6;7982:9;7978:22;7974:31;7967:45;7928:2;-1:-1:-1;8083:2:1;8062:15;-1:-1:-1;;8058:29:1;8043:45;;;;8090:2;8039:54;;7617:482;-1:-1:-1;;;7617:482:1:o;10305:399::-;10507:2;10489:21;;;10546:2;10526:18;;;10519:30;10585:34;10580:2;10565:18;;10558:62;-1:-1:-1;;;10651:2:1;10636:18;;10629:33;10694:3;10679:19;;10479:225::o;11053:356::-;11255:2;11237:21;;;11274:18;;;11267:30;11333:34;11328:2;11313:18;;11306:62;11400:2;11385:18;;11227:182::o;12980:983::-;13242:4;13290:3;13279:9;13275:19;13321:6;13310:9;13303:25;13347:2;13385:6;13380:2;13369:9;13365:18;13358:34;13428:3;13423:2;13412:9;13408:18;13401:31;13452:6;13487;13481:13;13518:6;13510;13503:22;13556:3;13545:9;13541:19;13534:26;;13595:2;13587:6;13583:15;13569:29;;13616:4;13629:195;13643:6;13640:1;13637:13;13629:195;;;13708:13;;-1:-1:-1;;;;;13704:39:1;13692:52;;13799:15;;;;13764:12;;;;13740:1;13658:9;13629:195;;;-1:-1:-1;;;;;;;13880:32:1;;;;13875:2;13860:18;;13853:60;-1:-1:-1;;;13944:3:1;13929:19;13922:35;13841:3;13251:712;-1:-1:-1;;;13251:712:1:o;13968:128::-;14008:3;14039:1;14035:6;14032:1;14029:13;14026:2;;;14045:18;;:::i;:::-;-1:-1:-1;14081:9:1;;14016:80::o;14101:217::-;14141:1;14167;14157:2;;-1:-1:-1;;;14192:31:1;;14246:4;14243:1;14236:15;14274:4;14199:1;14264:15;14157:2;-1:-1:-1;14303:9:1;;14147:171::o;14323:168::-;14363:7;14429:1;14425;14421:6;14417:14;14414:1;14411:21;14406:1;14399:9;14392:17;14388:45;14385:2;;;14436:18;;:::i;:::-;-1:-1:-1;14476:9:1;;14375:116::o;14496:125::-;14536:4;14564:1;14561;14558:8;14555:2;;;14569:18;;:::i;:::-;-1:-1:-1;14606:9:1;;14545:76::o;14626:380::-;14705:1;14701:12;;;;14748;;;14769:2;;14823:4;14815:6;14811:17;14801:27;;14769:2;14876;14868:6;14865:14;14845:18;14842:38;14839:2;;;14922:10;14917:3;14913:20;14910:1;14903:31;14957:4;14954:1;14947:15;14985:4;14982:1;14975:15;14839:2;;14681:325;;;:::o;15011:135::-;15050:3;-1:-1:-1;;15071:17:1;;15068:2;;;15091:18;;:::i;:::-;-1:-1:-1;15138:1:1;15127:13;;15058:88::o;15151:127::-;15212:10;15207:3;15203:20;15200:1;15193:31;15243:4;15240:1;15233:15;15267:4;15264:1;15257:15;15283:118;15369:5;15362:13;15355:21;15348:5;15345:32;15335:2;;15391:1;15388;15381:12

Swarm Source

ipfs://899e653470fb3ffd8b32d3081529dc944c19d4b7c64c96ffd8fa6f54c7d7ce24

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.