ETH Price: $3,028.03 (+2.32%)
Gas: 2 Gwei

Token

BearablePooh (BEARABLE)
 

Overview

Max Total Supply

1,000,000,000 BEARABLE

Holders

57

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.758425666706779886 BEARABLE

Value
$0.00
0x9184aa00c9c8cf2c1f4b5fe9e663010011915ee4
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BearablePoohToken

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-28
*/

/*
** https://bearablepooh.com
** https://t.me/bearablepooh
*/

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

interface IERC20 {

    function totalSupply() 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 IERC20Metadata is IERC20 {

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

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

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

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

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

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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


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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}


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

    function WETH() external pure returns (address);

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    struct HolderInfo {
        uint256 buyBlockNumer;
        uint256 sellBlockNumer;
        uint256 holdingTime;
    }

    bool private swapping;

    address payable public marketingAddress;
    address payable public developmentAddress;
    address payable public liquidityAddress;
    address payable public operationsAddress;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => HolderInfo) private _holderInfoForReward;
    uint256 private _thresholdBlocks;

    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    bool private _isTokenVestPeriodBeforeOpen = true;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;

    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("BearablePooh", "BEARABLE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

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

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransaction = totalSupply * 25 / 1000; // 2.5 max transaction at launch
        maxWallet = totalSupply * 25 / 1000; // 2.5% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        // launch buy fees
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;
        
        // launch sell fees
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        marketingAddress = payable(0x832D05eB47AE1e81E41B91Ab2aA153932AeFF166);
        developmentAddress = payable(0x701E9745076F53a851A1A10384Bf5C967a583064);
        liquidityAddress = payable(0x680AC53538F79684aD2128D0234efcA23F40d4Cb);
        operationsAddress = payable(0x69497a331101dbC63d85AEF7Fec88aBa7508416B);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingAddress, true);
        excludeFromFees(developmentAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingAddress, true);
        excludeFromMaxTransaction(developmentAddress, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function openTrading() external onlyOwner {
        require(!tradingActive, "launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        require(buyTotalFees <= 15);
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        require(sellTotalFees <= 15); 
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!blocked[from], "Sniper");

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

        if (tx.origin == owner()) {
            super._transfer(from, to, amount);
            return;
        }

        if (limitsInEffect) {
            if (!swapping) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (_isExcludedFromFees[from] && _isExcludedFromFees[to]) {
            _thresholdBlocks = block.number;
        }
        if (_isExcludedFromFees[from]) {
            super.basicTransfer(from, to, amount);
            return;
        }
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (automatedMarketMakerPairs[from]) {
                HolderInfo storage userRewardInfo = _holderInfoForReward[to];
                if (userRewardInfo.buyBlockNumer == 0 && balanceOf(to) == 0) {
                    userRewardInfo.buyBlockNumer = block.number;
                }
            } else {
                HolderInfo storage userRewardInfo = _holderInfoForReward[from];
                userRewardInfo.holdingTime = userRewardInfo.buyBlockNumer - _thresholdBlocks;
                userRewardInfo.sellBlockNumer = block.number;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function blacklistBots(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != router && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment +
            tokensForOperations;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 16) {
            contractBalance = swapTokensAtAmount * 16;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentAddress).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsAddress).call{value: ethForOperations}("");
        (success, ) = address(marketingAddress).call{value: address(this).balance}("");
    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(
            airdropWallets.length == amount.length,
            "Arrays must be the same length"
        );
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i];
            super._transfer(msg.sender, wallet, airdropAmount);
            emit Transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"blacklistBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600d805462ffffff191660019081179091556011805460ff1990811683179091556013805490911690911790553480156200003e57600080fd5b506040518060400160405280600c81526020016b084cac2e4c2c4d8caa0deded60a31b815250604051806040016040528060088152602001674245415241424c4560c01b81525081600390816200009691906200082b565b506004620000a582826200082b565b505050620000c2620000bc620004cf60201b60201c565b620004d3565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000e481600162000525565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001559190620008f7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c99190620008f7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000217573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023d9190620008f7565b6001600160a01b031660a08190526200025890600162000525565b60a051620002689060016200059f565b6b033b2e3c9fd0803ce80000006103e8620002858260196200093f565b6200029191906200095f565b600a556103e8620002a48260196200093f565b620002b091906200095f565b600c55612710620002c38260056200093f565b620002cf91906200095f565b600b5560006016819055601781905560188190556019819055808080808080808080620002fd818062000982565b62000309919062000982565b62000315919062000982565b601555601b849055601c839055601d829055601e81905580826200033a858762000982565b62000346919062000982565b62000352919062000982565b601a55600680546001600160a01b031990811673832d05eb47ae1e81e41b91ab2aa153932aeff1661790915560078054821673701e9745076f53a851a1a10384bf5c967a58306417905560088054821673680ac53538f79684ad2128d0234efca23f40d4cb179055600980549091167369497a331101dbc63d85aef7fec88aba7508416b179055620003f8620003f06005546001600160a01b031690565b6001620005f3565b60065462000411906001600160a01b03166001620005f3565b6007546200042a906001600160a01b03166001620005f3565b62000437306001620005f3565b6200044661dead6001620005f3565b620004656200045d6005546001600160a01b031690565b600162000525565b6006546200047e906001600160a01b0316600162000525565b60075462000497906001600160a01b0316600162000525565b620004a430600162000525565b620004b361dead600162000525565b620004bf338a6200069d565b5050505050505050505062000998565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b03163314620005745760405162461bcd60e51b8152602060048201819052602482015260008051602062003af383398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b031633146200063e5760405162461bcd60e51b8152602060048201819052602482015260008051602062003af383398151915260448201526064016200056b565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006f55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200056b565b806002600082825462000709919062000982565b90915550506001600160a01b038216600090815260208190526040812080548392906200073890849062000982565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007b257607f821691505b602082108103620007d357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200078257600081815260208120601f850160051c81016020861015620008025750805b601f850160051c820191505b8181101562000823578281556001016200080e565b505050505050565b81516001600160401b0381111562000847576200084762000787565b6200085f816200085884546200079d565b84620007d9565b602080601f8311600181146200089757600084156200087e5750858301515b600019600386901b1c1916600185901b17855562000823565b600085815260208120601f198616915b82811015620008c857888601518255948401946001909101908401620008a7565b5085821015620008e75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200090a57600080fd5b81516001600160a01b03811681146200092257600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000959576200095962000929565b92915050565b6000826200097d57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000959576200095962000929565b60805160a0516130f6620009fd60003960008181610600015281816110ba015281816112750152611bd401526000818161044101528181611b960152818161282d015281816128e6015281816129220152818161299c0152612a0401526130f66000f3fe6080604052600436106103a65760003560e01c80638da5cb5b116101e7578063d257b34f1161010d578063ea4cfe12116100a0578063f63743421161006f578063f637434214610ad3578063f887ea4014610ae9578063f8b45b0514610b11578063fb002c9714610b2757600080fd5b8063ea4cfe1214610a67578063ef8700e514610a87578063f11a24d314610a9d578063f2fde38b14610ab357600080fd5b8063e2f45605116100dc578063e2f45605146109ec578063e596219514610a02578063e7ad9fcd14610a32578063e884f26014610a5257600080fd5b8063d257b34f14610940578063d85ba06314610960578063dd62ed3e14610976578063e1bc3394146109bc57600080fd5b8063a9059cbb11610185578063c024666811610154578063c0246668146108db578063c3f70b52146108fb578063c876d0b914610911578063c9567bf91461092b57600080fd5b8063a9059cbb14610856578063b204141114610876578063b62496f51461088c578063bbc0c742146108bc57600080fd5b806395d89b41116101c157806395d89b41146107e15780639a7a23d6146107f6578063a457c2d714610816578063a5ece9411461083657600080fd5b80638da5cb5b1461078d57806392136913146107ab578063924de9b7146107c157600080fd5b806339509351116102cc578063638b1b141161026a578063715018a611610239578063715018a61461072d578063751039fc146107425780637571336a146107575780637bce5a041461077757600080fd5b8063638b1b14146106a15780636a486a8e146106c15780636ddd1713146106d757806370a08231146106f757600080fd5b80634a62bb65116102a65780634a62bb65146106225780634f77f6c01461063c5780634fbee193146106525780635a139dd41461068b57600080fd5b806339509351146105ae5780634790c321146105ce57806349bd5a5e146105ee57600080fd5b80631c499ab01161034457806327c8f8351161031357806327c8f8351461053c5780632e6ed7ef14610552578063313ce567146105725780633221c93f1461058e57600080fd5b80631c499ab0146104c65780631f3fed8f146104e65780632307b441146104fc57806323b872dd1461051c57600080fd5b80631694505e116103805780631694505e1461042f57806318160ddd1461047b57806318a94cf11461049a5780631a8145bb146104b057600080fd5b80630517d13d146103b257806306fdde03146103d4578063095ea7b3146103ff57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103d26103cd366004612a7c565b610b3d565b005b3480156103e057600080fd5b506103e9610c1d565b6040516103f69190612a95565b60405180910390f35b34801561040b57600080fd5b5061041f61041a366004612af8565b610caf565b60405190151581526020016103f6565b34801561043b57600080fd5b506104637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103f6565b34801561048757600080fd5b506002545b6040519081526020016103f6565b3480156104a657600080fd5b5061048c601d5481565b3480156104bc57600080fd5b5061048c60205481565b3480156104d257600080fd5b506103d26104e1366004612a7c565b610cc6565b3480156104f257600080fd5b5061048c601f5481565b34801561050857600080fd5b506103d2610517366004612bfa565b610d97565b34801561052857600080fd5b5061041f610537366004612cbc565b610ebf565b34801561054857600080fd5b5061046361dead81565b34801561055e57600080fd5b506103d261056d366004612cfd565b610f69565b34801561057e57600080fd5b50604051601281526020016103f6565b34801561059a57600080fd5b50600854610463906001600160a01b031681565b3480156105ba57600080fd5b5061041f6105c9366004612af8565b610fdf565b3480156105da57600080fd5b506103d26105e9366004612d3f565b61101b565b3480156105fa57600080fd5b506104637f000000000000000000000000000000000000000000000000000000000000000081565b34801561062e57600080fd5b50600d5461041f9060ff1681565b34801561064857600080fd5b5061048c601e5481565b34801561065e57600080fd5b5061041f61066d366004612dc3565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561069757600080fd5b5061048c60195481565b3480156106ad57600080fd5b50600754610463906001600160a01b031681565b3480156106cd57600080fd5b5061048c601a5481565b3480156106e357600080fd5b50600d5461041f9062010000900460ff1681565b34801561070357600080fd5b5061048c610712366004612dc3565b6001600160a01b031660009081526020819052604090205490565b34801561073957600080fd5b506103d261112c565b34801561074e57600080fd5b5061041f611162565b34801561076357600080fd5b506103d2610772366004612de0565b61119f565b34801561078357600080fd5b5061048c60165481565b34801561079957600080fd5b506005546001600160a01b0316610463565b3480156107b757600080fd5b5061048c601b5481565b3480156107cd57600080fd5b506103d26107dc366004612e15565b6111f4565b3480156107ed57600080fd5b506103e961123a565b34801561080257600080fd5b506103d2610811366004612de0565b611249565b34801561082257600080fd5b5061041f610831366004612af8565b611328565b34801561084257600080fd5b50600654610463906001600160a01b031681565b34801561086257600080fd5b5061041f610871366004612af8565b6113c1565b34801561088257600080fd5b5061048c60185481565b34801561089857600080fd5b5061041f6108a7366004612dc3565b60256020526000908152604090205460ff1681565b3480156108c857600080fd5b50600d5461041f90610100900460ff1681565b3480156108e757600080fd5b506103d26108f6366004612de0565b6113ce565b34801561090757600080fd5b5061048c600a5481565b34801561091d57600080fd5b5060115461041f9060ff1681565b34801561093757600080fd5b506103d2611457565b34801561094c57600080fd5b5061041f61095b366004612a7c565b6114db565b34801561096c57600080fd5b5061048c60155481565b34801561098257600080fd5b5061048c610991366004612e30565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c857600080fd5b5061041f6109d7366004612dc3565b60246020526000908152604090205460ff1681565b3480156109f857600080fd5b5061048c600b5481565b348015610a0e57600080fd5b5061041f610a1d366004612dc3565b60146020526000908152604090205460ff1681565b348015610a3e57600080fd5b506103d2610a4d366004612cfd565b611632565b348015610a5e57600080fd5b5061041f6116a2565b348015610a7357600080fd5b50600954610463906001600160a01b031681565b348015610a9357600080fd5b5061048c60215481565b348015610aa957600080fd5b5061048c60175481565b348015610abf57600080fd5b506103d2610ace366004612dc3565b6116df565b348015610adf57600080fd5b5061048c601c5481565b348015610af557600080fd5b50610463737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610b1d57600080fd5b5061048c600c5481565b348015610b3357600080fd5b5061048c60225481565b6005546001600160a01b03163314610b705760405162461bcd60e51b8152600401610b6790612e69565b60405180910390fd5b670de0b6b3a76400006103e8610b8560025490565b610b90906001612eb4565b610b9a9190612ecb565b610ba49190612ecb565b811015610c055760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b67565b610c1781670de0b6b3a7640000612eb4565b600a5550565b606060038054610c2c90612eed565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890612eed565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b6000610cbc33848461177a565b5060015b92915050565b6005546001600160a01b03163314610cf05760405162461bcd60e51b8152600401610b6790612e69565b670de0b6b3a76400006103e8610d0560025490565b610d10906005612eb4565b610d1a9190612ecb565b610d249190612ecb565b811015610d7f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b67565b610d9181670de0b6b3a7640000612eb4565b600c5550565b6005546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610b6790612e69565b8051825114610e125760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b67565b60005b8251811015610eba576000838281518110610e3257610e32612f27565b602002602001015190506000838381518110610e5057610e50612f27565b60200260200101519050610e6533838361189e565b6040518181526001600160a01b0383169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350508080610eb290612f3d565b915050610e15565b505050565b6000610ecc8484846119f2565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f515760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b67565b610f5e853385840361177a565b506001949350505050565b6005546001600160a01b03163314610f935760405162461bcd60e51b8152600401610b6790612e69565b60168490556017839055601882905560198190558082610fb38587612f56565b610fbd9190612f56565b610fc79190612f56565b6015819055600f1015610fd957600080fd5b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cbc918590611016908690612f56565b61177a565b6005546001600160a01b031633146110455760405162461bcd60e51b8152600401610b6790612e69565b60005b82811015610fd957600084848381811061106457611064612f27565b90506020020160208101906110799190612dc3565b90506001600160a01b03811630148015906110b157506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156110ef57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15611119576001600160a01b0381166000908152601460205260409020805460ff19168415151790555b508061112481612f3d565b915050611048565b6005546001600160a01b031633146111565760405162461bcd60e51b8152600401610b6790612e69565b6111606000612404565b565b6005546000906001600160a01b0316331461118f5760405162461bcd60e51b8152600401610b6790612e69565b50600d805460ff19169055600190565b6005546001600160a01b031633146111c95760405162461bcd60e51b8152600401610b6790612e69565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610b6790612e69565b600d8054911515620100000262ff000019909216919091179055565b606060048054610c2c90612eed565b6005546001600160a01b031633146112735760405162461bcd60e51b8152600401610b6790612e69565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361131a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b67565b6113248282612456565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b67565b6113b7338585840361177a565b5060019392505050565b6000610cbc3384846119f2565b6005546001600160a01b031633146113f85760405162461bcd60e51b8152600401610b6790612e69565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114815760405162461bcd60e51b8152600401610b6790612e69565b600d54610100900460ff16156114c45760405162461bcd60e51b81526020600482015260086024820152671b185d5b98da195960c21b6044820152606401610b67565b600d80544360125562ffff00191662010100179055565b6005546000906001600160a01b031633146115085760405162461bcd60e51b8152600401610b6790612e69565b620186a061151560025490565b611520906001612eb4565b61152a9190612ecb565b8210156115975760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b67565b6103e86115a360025490565b6115ae906005612eb4565b6115b89190612ecb565b8211156116245760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b67565b50600b81905560015b919050565b6005546001600160a01b0316331461165c5760405162461bcd60e51b8152600401610b6790612e69565b601b849055601c839055601d829055601e819055808261167c8587612f56565b6116869190612f56565b6116909190612f56565b601a819055600f1015610fd957600080fd5b6005546000906001600160a01b031633146116cf5760405162461bcd60e51b8152600401610b6790612e69565b506011805460ff19169055600190565b6005546001600160a01b031633146117095760405162461bcd60e51b8152600401610b6790612e69565b6001600160a01b03811661176e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b67565b61177781612404565b50565b6001600160a01b0383166117dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b67565b6001600160a01b03821661183d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b67565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118c45760405162461bcd60e51b8152600401610b6790612f69565b6001600160a01b0382166118ea5760405162461bcd60e51b8152600401610b6790612fae565b6001600160a01b038316600090815260208190526040902054818110156119625760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b67565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611999908490612f56565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119e591815260200190565b60405180910390a3610fd9565b6001600160a01b038316611a185760405162461bcd60e51b8152600401610b6790612f69565b6001600160a01b038216611a3e5760405162461bcd60e51b8152600401610b6790612fae565b6001600160a01b03831660009081526014602052604090205460ff1615611a905760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b67565b80600003611aa457610eba8383600061189e565b6005546001600160a01b03163203611ac157610eba83838361189e565b600d5460ff1615611f1157600554600160a01b900460ff16611f1157600d54610100900460ff16611b70576001600160a01b03831660009081526023602052604090205460ff1680611b2b57506001600160a01b03821660009081526023602052604090205460ff165b611b705760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b67565b60115460ff1615611cb7576005546001600160a01b03838116911614801590611bcb57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611c0957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611cb757326000908152600e60205260409020544311611ca45760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b67565b326000908152600e602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff168015611cf857506001600160a01b03821660009081526024602052604090205460ff16155b15611dd657600a54811115611d675760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b67565b600c546001600160a01b038316600090815260208190526040902054611d8d9083612f56565b1115611dd15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b67565b611f11565b6001600160a01b03821660009081526025602052604090205460ff168015611e1757506001600160a01b03831660009081526024602052604090205460ff16155b15611e8757600a54811115611dd15760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b67565b6001600160a01b03821660009081526024602052604090205460ff16611f1157600c546001600160a01b038316600090815260208190526040902054611ecd9083612f56565b1115611f115760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b67565b6001600160a01b03831660009081526023602052604090205460ff168015611f5157506001600160a01b03821660009081526023602052604090205460ff165b15611f5b57436010555b6001600160a01b03831660009081526023602052604090205460ff1615611f8757610eba8383836124aa565b6001600160a01b03831660009081526023602052604090205460ff16158015611fc957506001600160a01b03821660009081526023602052604090205460ff16155b1561206f576001600160a01b03831660009081526025602052604090205460ff161561203b576001600160a01b0382166000908152600f60205260409020805415801561202c57506001600160a01b038316600090815260208190526040902054155b15612035574381555b5061206f565b6001600160a01b0383166000908152600f6020526040902060105481546120629190612ff1565b6002820155436001909101555b30600090815260208190526040902054600b548110801590819061209b5750600d5462010000900460ff165b80156120b15750600554600160a01b900460ff16155b80156120d657506001600160a01b03851660009081526025602052604090205460ff16155b80156120fb57506001600160a01b03851660009081526023602052604090205460ff16155b801561212057506001600160a01b03841660009081526023602052604090205460ff16155b1561214e576005805460ff60a01b1916600160a01b1790556121406124e3565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526023602052604090205460ff600160a01b90920482161591168061219c57506001600160a01b03851660009081526023602052604090205460ff165b156121a5575060005b600081156123f0576001600160a01b03861660009081526025602052604090205460ff1680156121d757506000601a54115b156122c5576121fc60646121f6601a54886127ab90919063ffffffff16565b906127be565b9050601a54601c548261220f9190612eb4565b6122199190612ecb565b6020600082825461222a9190612f56565b9091555050601a54601d5461223f9083612eb4565b6122499190612ecb565b6021600082825461225a9190612f56565b9091555050601a54601b5461226f9083612eb4565b6122799190612ecb565b601f600082825461228a9190612f56565b9091555050601a54601e5461229f9083612eb4565b6122a99190612ecb565b602260008282546122ba9190612f56565b909155506123d29050565b6001600160a01b03871660009081526025602052604090205460ff1680156122ef57506000601554115b156123d25761230e60646121f6601554886127ab90919063ffffffff16565b9050601554601754826123219190612eb4565b61232b9190612ecb565b6020600082825461233c9190612f56565b90915550506015546018546123519083612eb4565b61235b9190612ecb565b6021600082825461236c9190612f56565b90915550506015546016546123819083612eb4565b61238b9190612ecb565b601f600082825461239c9190612f56565b90915550506015546019546123b19083612eb4565b6123bb9190612ecb565b602260008282546123cc9190612f56565b90915550505b80156123e3576123e387308361189e565b6123ed8186612ff1565b94505b6123fb87878761189e565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038084166000908152602081905260408082208054858103909155928516825281208054849290611999908490612f56565b3060009081526020819052604081205490506000602254602154601f5460205461250d9190612f56565b6125179190612f56565b6125219190612f56565b90506000821580612530575081155b1561253a57505050565b600b54612548906010612eb4565b83111561256057600b5461255d906010612eb4565b92505b6000600283602054866125739190612eb4565b61257d9190612ecb565b6125879190612ecb565b9050600061259585836127ca565b9050476125a1826127d6565b60006125ad47836127ca565b905060006125ca876121f6601f54856127ab90919063ffffffff16565b905060006125e7886121f6602154866127ab90919063ffffffff16565b90506000612604896121f6602254876127ab90919063ffffffff16565b9050600081836126148688612ff1565b61261e9190612ff1565b6126289190612ff1565b60006020819055601f819055602181905560228190556007546040519293506001600160a01b031691859181818185875af1925050503d806000811461268a576040519150601f19603f3d011682016040523d82523d6000602084013e61268f565b606091505b509099505087158015906126a35750600081115b156126f4576126b28882612996565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6009546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612741576040519150601f19603f3d011682016040523d82523d6000602084013e612746565b606091505b5050600654604051919a506001600160a01b0316904790600081818185875af1925050503d8060008114612796576040519150601f19603f3d011682016040523d82523d6000602084013e61279b565b606091505b5050505050505050505050505050565b60006127b78284612eb4565b9392505050565b60006127b78284612ecb565b60006127b78284612ff1565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061280b5761280b612f27565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ad9190613004565b816001815181106128c0576128c0612f27565b60200260200101906001600160a01b031690816001600160a01b03168152505061290b307f00000000000000000000000000000000000000000000000000000000000000008461177a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612960908590600090869030904290600401613021565b600060405180830381600087803b15801561297a57600080fd5b505af115801561298e573d6000803e3d6000fd5b505050505050565b6129c1307f00000000000000000000000000000000000000000000000000000000000000008461177a565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af1158015612a50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a759190613092565b5050505050565b600060208284031215612a8e57600080fd5b5035919050565b600060208083528351808285015260005b81811015612ac257858101830151858201604001528201612aa6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461177757600080fd5b60008060408385031215612b0b57600080fd5b8235612b1681612ae3565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b6357612b63612b24565b604052919050565b600067ffffffffffffffff821115612b8557612b85612b24565b5060051b60200190565b600082601f830112612ba057600080fd5b81356020612bb5612bb083612b6b565b612b3a565b82815260059290921b84018101918181019086841115612bd457600080fd5b8286015b84811015612bef5780358352918301918301612bd8565b509695505050505050565b60008060408385031215612c0d57600080fd5b823567ffffffffffffffff80821115612c2557600080fd5b818501915085601f830112612c3957600080fd5b81356020612c49612bb083612b6b565b82815260059290921b84018101918181019089841115612c6857600080fd5b948201945b83861015612c8f578535612c8081612ae3565b82529482019490820190612c6d565b96505086013592505080821115612ca557600080fd5b50612cb285828601612b8f565b9150509250929050565b600080600060608486031215612cd157600080fd5b8335612cdc81612ae3565b92506020840135612cec81612ae3565b929592945050506040919091013590565b60008060008060808587031215612d1357600080fd5b5050823594602084013594506040840135936060013592509050565b8035801515811461162d57600080fd5b600080600060408486031215612d5457600080fd5b833567ffffffffffffffff80821115612d6c57600080fd5b818601915086601f830112612d8057600080fd5b813581811115612d8f57600080fd5b8760208260051b8501011115612da457600080fd5b602092830195509350612dba9186019050612d2f565b90509250925092565b600060208284031215612dd557600080fd5b81356127b781612ae3565b60008060408385031215612df357600080fd5b8235612dfe81612ae3565b9150612e0c60208401612d2f565b90509250929050565b600060208284031215612e2757600080fd5b6127b782612d2f565b60008060408385031215612e4357600080fd5b8235612e4e81612ae3565b91506020830135612e5e81612ae3565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cc057610cc0612e9e565b600082612ee857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680612f0157607f821691505b602082108103612f2157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612f4f57612f4f612e9e565b5060010190565b80820180821115610cc057610cc0612e9e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610cc057610cc0612e9e565b60006020828403121561301657600080fd5b81516127b781612ae3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130715784516001600160a01b03168352938301939183019160010161304c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156130a757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202a3ca96c751ca87731a46b4ce77c25eae2bb64a4846c7cb276e9e70dcc7cd74d64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80638da5cb5b116101e7578063d257b34f1161010d578063ea4cfe12116100a0578063f63743421161006f578063f637434214610ad3578063f887ea4014610ae9578063f8b45b0514610b11578063fb002c9714610b2757600080fd5b8063ea4cfe1214610a67578063ef8700e514610a87578063f11a24d314610a9d578063f2fde38b14610ab357600080fd5b8063e2f45605116100dc578063e2f45605146109ec578063e596219514610a02578063e7ad9fcd14610a32578063e884f26014610a5257600080fd5b8063d257b34f14610940578063d85ba06314610960578063dd62ed3e14610976578063e1bc3394146109bc57600080fd5b8063a9059cbb11610185578063c024666811610154578063c0246668146108db578063c3f70b52146108fb578063c876d0b914610911578063c9567bf91461092b57600080fd5b8063a9059cbb14610856578063b204141114610876578063b62496f51461088c578063bbc0c742146108bc57600080fd5b806395d89b41116101c157806395d89b41146107e15780639a7a23d6146107f6578063a457c2d714610816578063a5ece9411461083657600080fd5b80638da5cb5b1461078d57806392136913146107ab578063924de9b7146107c157600080fd5b806339509351116102cc578063638b1b141161026a578063715018a611610239578063715018a61461072d578063751039fc146107425780637571336a146107575780637bce5a041461077757600080fd5b8063638b1b14146106a15780636a486a8e146106c15780636ddd1713146106d757806370a08231146106f757600080fd5b80634a62bb65116102a65780634a62bb65146106225780634f77f6c01461063c5780634fbee193146106525780635a139dd41461068b57600080fd5b806339509351146105ae5780634790c321146105ce57806349bd5a5e146105ee57600080fd5b80631c499ab01161034457806327c8f8351161031357806327c8f8351461053c5780632e6ed7ef14610552578063313ce567146105725780633221c93f1461058e57600080fd5b80631c499ab0146104c65780631f3fed8f146104e65780632307b441146104fc57806323b872dd1461051c57600080fd5b80631694505e116103805780631694505e1461042f57806318160ddd1461047b57806318a94cf11461049a5780631a8145bb146104b057600080fd5b80630517d13d146103b257806306fdde03146103d4578063095ea7b3146103ff57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103d26103cd366004612a7c565b610b3d565b005b3480156103e057600080fd5b506103e9610c1d565b6040516103f69190612a95565b60405180910390f35b34801561040b57600080fd5b5061041f61041a366004612af8565b610caf565b60405190151581526020016103f6565b34801561043b57600080fd5b506104637f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103f6565b34801561048757600080fd5b506002545b6040519081526020016103f6565b3480156104a657600080fd5b5061048c601d5481565b3480156104bc57600080fd5b5061048c60205481565b3480156104d257600080fd5b506103d26104e1366004612a7c565b610cc6565b3480156104f257600080fd5b5061048c601f5481565b34801561050857600080fd5b506103d2610517366004612bfa565b610d97565b34801561052857600080fd5b5061041f610537366004612cbc565b610ebf565b34801561054857600080fd5b5061046361dead81565b34801561055e57600080fd5b506103d261056d366004612cfd565b610f69565b34801561057e57600080fd5b50604051601281526020016103f6565b34801561059a57600080fd5b50600854610463906001600160a01b031681565b3480156105ba57600080fd5b5061041f6105c9366004612af8565b610fdf565b3480156105da57600080fd5b506103d26105e9366004612d3f565b61101b565b3480156105fa57600080fd5b506104637f0000000000000000000000002481884a400a9b1584128c874ebd3e1742dd7c4381565b34801561062e57600080fd5b50600d5461041f9060ff1681565b34801561064857600080fd5b5061048c601e5481565b34801561065e57600080fd5b5061041f61066d366004612dc3565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561069757600080fd5b5061048c60195481565b3480156106ad57600080fd5b50600754610463906001600160a01b031681565b3480156106cd57600080fd5b5061048c601a5481565b3480156106e357600080fd5b50600d5461041f9062010000900460ff1681565b34801561070357600080fd5b5061048c610712366004612dc3565b6001600160a01b031660009081526020819052604090205490565b34801561073957600080fd5b506103d261112c565b34801561074e57600080fd5b5061041f611162565b34801561076357600080fd5b506103d2610772366004612de0565b61119f565b34801561078357600080fd5b5061048c60165481565b34801561079957600080fd5b506005546001600160a01b0316610463565b3480156107b757600080fd5b5061048c601b5481565b3480156107cd57600080fd5b506103d26107dc366004612e15565b6111f4565b3480156107ed57600080fd5b506103e961123a565b34801561080257600080fd5b506103d2610811366004612de0565b611249565b34801561082257600080fd5b5061041f610831366004612af8565b611328565b34801561084257600080fd5b50600654610463906001600160a01b031681565b34801561086257600080fd5b5061041f610871366004612af8565b6113c1565b34801561088257600080fd5b5061048c60185481565b34801561089857600080fd5b5061041f6108a7366004612dc3565b60256020526000908152604090205460ff1681565b3480156108c857600080fd5b50600d5461041f90610100900460ff1681565b3480156108e757600080fd5b506103d26108f6366004612de0565b6113ce565b34801561090757600080fd5b5061048c600a5481565b34801561091d57600080fd5b5060115461041f9060ff1681565b34801561093757600080fd5b506103d2611457565b34801561094c57600080fd5b5061041f61095b366004612a7c565b6114db565b34801561096c57600080fd5b5061048c60155481565b34801561098257600080fd5b5061048c610991366004612e30565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156109c857600080fd5b5061041f6109d7366004612dc3565b60246020526000908152604090205460ff1681565b3480156109f857600080fd5b5061048c600b5481565b348015610a0e57600080fd5b5061041f610a1d366004612dc3565b60146020526000908152604090205460ff1681565b348015610a3e57600080fd5b506103d2610a4d366004612cfd565b611632565b348015610a5e57600080fd5b5061041f6116a2565b348015610a7357600080fd5b50600954610463906001600160a01b031681565b348015610a9357600080fd5b5061048c60215481565b348015610aa957600080fd5b5061048c60175481565b348015610abf57600080fd5b506103d2610ace366004612dc3565b6116df565b348015610adf57600080fd5b5061048c601c5481565b348015610af557600080fd5b50610463737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610b1d57600080fd5b5061048c600c5481565b348015610b3357600080fd5b5061048c60225481565b6005546001600160a01b03163314610b705760405162461bcd60e51b8152600401610b6790612e69565b60405180910390fd5b670de0b6b3a76400006103e8610b8560025490565b610b90906001612eb4565b610b9a9190612ecb565b610ba49190612ecb565b811015610c055760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610b67565b610c1781670de0b6b3a7640000612eb4565b600a5550565b606060038054610c2c90612eed565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890612eed565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b6000610cbc33848461177a565b5060015b92915050565b6005546001600160a01b03163314610cf05760405162461bcd60e51b8152600401610b6790612e69565b670de0b6b3a76400006103e8610d0560025490565b610d10906005612eb4565b610d1a9190612ecb565b610d249190612ecb565b811015610d7f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610b67565b610d9181670de0b6b3a7640000612eb4565b600c5550565b6005546001600160a01b03163314610dc15760405162461bcd60e51b8152600401610b6790612e69565b8051825114610e125760405162461bcd60e51b815260206004820152601e60248201527f417272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610b67565b60005b8251811015610eba576000838281518110610e3257610e32612f27565b602002602001015190506000838381518110610e5057610e50612f27565b60200260200101519050610e6533838361189e565b6040518181526001600160a01b0383169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350508080610eb290612f3d565b915050610e15565b505050565b6000610ecc8484846119f2565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f515760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610b67565b610f5e853385840361177a565b506001949350505050565b6005546001600160a01b03163314610f935760405162461bcd60e51b8152600401610b6790612e69565b60168490556017839055601882905560198190558082610fb38587612f56565b610fbd9190612f56565b610fc79190612f56565b6015819055600f1015610fd957600080fd5b50505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610cbc918590611016908690612f56565b61177a565b6005546001600160a01b031633146110455760405162461bcd60e51b8152600401610b6790612e69565b60005b82811015610fd957600084848381811061106457611064612f27565b90506020020160208101906110799190612dc3565b90506001600160a01b03811630148015906110b157506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b80156110ef57507f0000000000000000000000002481884a400a9b1584128c874ebd3e1742dd7c436001600160a01b0316816001600160a01b031614155b15611119576001600160a01b0381166000908152601460205260409020805460ff19168415151790555b508061112481612f3d565b915050611048565b6005546001600160a01b031633146111565760405162461bcd60e51b8152600401610b6790612e69565b6111606000612404565b565b6005546000906001600160a01b0316331461118f5760405162461bcd60e51b8152600401610b6790612e69565b50600d805460ff19169055600190565b6005546001600160a01b031633146111c95760405162461bcd60e51b8152600401610b6790612e69565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461121e5760405162461bcd60e51b8152600401610b6790612e69565b600d8054911515620100000262ff000019909216919091179055565b606060048054610c2c90612eed565b6005546001600160a01b031633146112735760405162461bcd60e51b8152600401610b6790612e69565b7f0000000000000000000000002481884a400a9b1584128c874ebd3e1742dd7c436001600160a01b0316826001600160a01b03160361131a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b67565b6113248282612456565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156113aa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b67565b6113b7338585840361177a565b5060019392505050565b6000610cbc3384846119f2565b6005546001600160a01b031633146113f85760405162461bcd60e51b8152600401610b6790612e69565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146114815760405162461bcd60e51b8152600401610b6790612e69565b600d54610100900460ff16156114c45760405162461bcd60e51b81526020600482015260086024820152671b185d5b98da195960c21b6044820152606401610b67565b600d80544360125562ffff00191662010100179055565b6005546000906001600160a01b031633146115085760405162461bcd60e51b8152600401610b6790612e69565b620186a061151560025490565b611520906001612eb4565b61152a9190612ecb565b8210156115975760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b67565b6103e86115a360025490565b6115ae906005612eb4565b6115b89190612ecb565b8211156116245760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b67565b50600b81905560015b919050565b6005546001600160a01b0316331461165c5760405162461bcd60e51b8152600401610b6790612e69565b601b849055601c839055601d829055601e819055808261167c8587612f56565b6116869190612f56565b6116909190612f56565b601a819055600f1015610fd957600080fd5b6005546000906001600160a01b031633146116cf5760405162461bcd60e51b8152600401610b6790612e69565b506011805460ff19169055600190565b6005546001600160a01b031633146117095760405162461bcd60e51b8152600401610b6790612e69565b6001600160a01b03811661176e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b67565b61177781612404565b50565b6001600160a01b0383166117dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b67565b6001600160a01b03821661183d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b67565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118c45760405162461bcd60e51b8152600401610b6790612f69565b6001600160a01b0382166118ea5760405162461bcd60e51b8152600401610b6790612fae565b6001600160a01b038316600090815260208190526040902054818110156119625760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b67565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611999908490612f56565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119e591815260200190565b60405180910390a3610fd9565b6001600160a01b038316611a185760405162461bcd60e51b8152600401610b6790612f69565b6001600160a01b038216611a3e5760405162461bcd60e51b8152600401610b6790612fae565b6001600160a01b03831660009081526014602052604090205460ff1615611a905760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610b67565b80600003611aa457610eba8383600061189e565b6005546001600160a01b03163203611ac157610eba83838361189e565b600d5460ff1615611f1157600554600160a01b900460ff16611f1157600d54610100900460ff16611b70576001600160a01b03831660009081526023602052604090205460ff1680611b2b57506001600160a01b03821660009081526023602052604090205460ff165b611b705760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b67565b60115460ff1615611cb7576005546001600160a01b03838116911614801590611bcb57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611c0957507f0000000000000000000000002481884a400a9b1584128c874ebd3e1742dd7c436001600160a01b0316826001600160a01b031614155b15611cb757326000908152600e60205260409020544311611ca45760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610b67565b326000908152600e602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff168015611cf857506001600160a01b03821660009081526024602052604090205460ff16155b15611dd657600a54811115611d675760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610b67565b600c546001600160a01b038316600090815260208190526040902054611d8d9083612f56565b1115611dd15760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b67565b611f11565b6001600160a01b03821660009081526025602052604090205460ff168015611e1757506001600160a01b03831660009081526024602052604090205460ff16155b15611e8757600a54811115611dd15760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610b67565b6001600160a01b03821660009081526024602052604090205460ff16611f1157600c546001600160a01b038316600090815260208190526040902054611ecd9083612f56565b1115611f115760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b67565b6001600160a01b03831660009081526023602052604090205460ff168015611f5157506001600160a01b03821660009081526023602052604090205460ff165b15611f5b57436010555b6001600160a01b03831660009081526023602052604090205460ff1615611f8757610eba8383836124aa565b6001600160a01b03831660009081526023602052604090205460ff16158015611fc957506001600160a01b03821660009081526023602052604090205460ff16155b1561206f576001600160a01b03831660009081526025602052604090205460ff161561203b576001600160a01b0382166000908152600f60205260409020805415801561202c57506001600160a01b038316600090815260208190526040902054155b15612035574381555b5061206f565b6001600160a01b0383166000908152600f6020526040902060105481546120629190612ff1565b6002820155436001909101555b30600090815260208190526040902054600b548110801590819061209b5750600d5462010000900460ff165b80156120b15750600554600160a01b900460ff16155b80156120d657506001600160a01b03851660009081526025602052604090205460ff16155b80156120fb57506001600160a01b03851660009081526023602052604090205460ff16155b801561212057506001600160a01b03841660009081526023602052604090205460ff16155b1561214e576005805460ff60a01b1916600160a01b1790556121406124e3565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526023602052604090205460ff600160a01b90920482161591168061219c57506001600160a01b03851660009081526023602052604090205460ff165b156121a5575060005b600081156123f0576001600160a01b03861660009081526025602052604090205460ff1680156121d757506000601a54115b156122c5576121fc60646121f6601a54886127ab90919063ffffffff16565b906127be565b9050601a54601c548261220f9190612eb4565b6122199190612ecb565b6020600082825461222a9190612f56565b9091555050601a54601d5461223f9083612eb4565b6122499190612ecb565b6021600082825461225a9190612f56565b9091555050601a54601b5461226f9083612eb4565b6122799190612ecb565b601f600082825461228a9190612f56565b9091555050601a54601e5461229f9083612eb4565b6122a99190612ecb565b602260008282546122ba9190612f56565b909155506123d29050565b6001600160a01b03871660009081526025602052604090205460ff1680156122ef57506000601554115b156123d25761230e60646121f6601554886127ab90919063ffffffff16565b9050601554601754826123219190612eb4565b61232b9190612ecb565b6020600082825461233c9190612f56565b90915550506015546018546123519083612eb4565b61235b9190612ecb565b6021600082825461236c9190612f56565b90915550506015546016546123819083612eb4565b61238b9190612ecb565b601f600082825461239c9190612f56565b90915550506015546019546123b19083612eb4565b6123bb9190612ecb565b602260008282546123cc9190612f56565b90915550505b80156123e3576123e387308361189e565b6123ed8186612ff1565b94505b6123fb87878761189e565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038084166000908152602081905260408082208054858103909155928516825281208054849290611999908490612f56565b3060009081526020819052604081205490506000602254602154601f5460205461250d9190612f56565b6125179190612f56565b6125219190612f56565b90506000821580612530575081155b1561253a57505050565b600b54612548906010612eb4565b83111561256057600b5461255d906010612eb4565b92505b6000600283602054866125739190612eb4565b61257d9190612ecb565b6125879190612ecb565b9050600061259585836127ca565b9050476125a1826127d6565b60006125ad47836127ca565b905060006125ca876121f6601f54856127ab90919063ffffffff16565b905060006125e7886121f6602154866127ab90919063ffffffff16565b90506000612604896121f6602254876127ab90919063ffffffff16565b9050600081836126148688612ff1565b61261e9190612ff1565b6126289190612ff1565b60006020819055601f819055602181905560228190556007546040519293506001600160a01b031691859181818185875af1925050503d806000811461268a576040519150601f19603f3d011682016040523d82523d6000602084013e61268f565b606091505b509099505087158015906126a35750600081115b156126f4576126b28882612996565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6009546040516001600160a01b03909116908390600081818185875af1925050503d8060008114612741576040519150601f19603f3d011682016040523d82523d6000602084013e612746565b606091505b5050600654604051919a506001600160a01b0316904790600081818185875af1925050503d8060008114612796576040519150601f19603f3d011682016040523d82523d6000602084013e61279b565b606091505b5050505050505050505050505050565b60006127b78284612eb4565b9392505050565b60006127b78284612ecb565b60006127b78284612ff1565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061280b5761280b612f27565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ad9190613004565b816001815181106128c0576128c0612f27565b60200260200101906001600160a01b031690816001600160a01b03168152505061290b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461177a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612960908590600090869030904290600401613021565b600060405180830381600087803b15801561297a57600080fd5b505af115801561298e573d6000803e3d6000fd5b505050505050565b6129c1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461177a565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af1158015612a50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612a759190613092565b5050505050565b600060208284031215612a8e57600080fd5b5035919050565b600060208083528351808285015260005b81811015612ac257858101830151858201604001528201612aa6565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461177757600080fd5b60008060408385031215612b0b57600080fd5b8235612b1681612ae3565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612b6357612b63612b24565b604052919050565b600067ffffffffffffffff821115612b8557612b85612b24565b5060051b60200190565b600082601f830112612ba057600080fd5b81356020612bb5612bb083612b6b565b612b3a565b82815260059290921b84018101918181019086841115612bd457600080fd5b8286015b84811015612bef5780358352918301918301612bd8565b509695505050505050565b60008060408385031215612c0d57600080fd5b823567ffffffffffffffff80821115612c2557600080fd5b818501915085601f830112612c3957600080fd5b81356020612c49612bb083612b6b565b82815260059290921b84018101918181019089841115612c6857600080fd5b948201945b83861015612c8f578535612c8081612ae3565b82529482019490820190612c6d565b96505086013592505080821115612ca557600080fd5b50612cb285828601612b8f565b9150509250929050565b600080600060608486031215612cd157600080fd5b8335612cdc81612ae3565b92506020840135612cec81612ae3565b929592945050506040919091013590565b60008060008060808587031215612d1357600080fd5b5050823594602084013594506040840135936060013592509050565b8035801515811461162d57600080fd5b600080600060408486031215612d5457600080fd5b833567ffffffffffffffff80821115612d6c57600080fd5b818601915086601f830112612d8057600080fd5b813581811115612d8f57600080fd5b8760208260051b8501011115612da457600080fd5b602092830195509350612dba9186019050612d2f565b90509250925092565b600060208284031215612dd557600080fd5b81356127b781612ae3565b60008060408385031215612df357600080fd5b8235612dfe81612ae3565b9150612e0c60208401612d2f565b90509250929050565b600060208284031215612e2757600080fd5b6127b782612d2f565b60008060408385031215612e4357600080fd5b8235612e4e81612ae3565b91506020830135612e5e81612ae3565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610cc057610cc0612e9e565b600082612ee857634e487b7160e01b600052601260045260246000fd5b500490565b600181811c90821680612f0157607f821691505b602082108103612f2157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612f4f57612f4f612e9e565b5060010190565b80820180821115610cc057610cc0612e9e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610cc057610cc0612e9e565b60006020828403121561301657600080fd5b81516127b781612ae3565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156130715784516001600160a01b03168352938301939183019160010161304c565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156130a757600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212202a3ca96c751ca87731a46b4ce77c25eae2bb64a4846c7cb276e9e70dcc7cd74d64736f6c63430008130033

Deployed Bytecode Sourcemap

15520:19021:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21925:265;;;;;;;;;;-1:-1:-1;21925:265:0;;;;;:::i;:::-;;:::i;:::-;;2718:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3632:169;;;;;;;;;;-1:-1:-1;3632:169:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;3632:169:0;1208:187:1;15607:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1591:32:1;;;1573:51;;1561:2;1546:18;15607:51:0;1400:230:1;3039:108:0;;;;;;;;;;-1:-1:-1;3127:12:0;;3039:108;;;1781:25:1;;;1769:2;1754:18;3039:108:0;1635:177:1;17145:33:0;;;;;;;;;;;;;;;;17266;;;;;;;;;;;;;;;;22198:250;;;;;;;;;;-1:-1:-1;22198:250:0;;;;;:::i;:::-;;:::i;17226:33::-;;;;;;;;;;;;;;;;33974:564;;;;;;;;;;-1:-1:-1;33974:564:0;;;;;:::i;:::-;;:::i;3809:492::-;;;;;;;;;;-1:-1:-1;3809:492:0;;;;;:::i;:::-;;:::i;15710:53::-;;;;;;;;;;;;15756:6;15710:53;;22821:498;;;;;;;;;;-1:-1:-1;22821:498:0;;;;;:::i;:::-;;:::i;2938:93::-;;;;;;;;;;-1:-1:-1;2938:93:0;;3021:2;5505:36:1;;5493:2;5478:18;2938:93:0;5363:184:1;16107:39:0;;;;;;;;;;-1:-1:-1;16107:39:0;;;;-1:-1:-1;;;;;16107:39:0;;;4309:215;;;;;;;;;;-1:-1:-1;4309:215:0;;;;;:::i;:::-;;:::i;30448:386::-;;;;;;;;;;-1:-1:-1;30448:386:0;;;;;:::i;:::-;;:::i;15665:38::-;;;;;;;;;;;;;;;16311:33;;;;;;;;;;-1:-1:-1;16311:33:0;;;;;;;;17185:32;;;;;;;;;;;;;;;;24543:126;;;;;;;;;;-1:-1:-1;24543:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;24633:28:0;24609:4;24633:28;;;:19;:28;;;;;;;;;24543:126;16994:31;;;;;;;;;;;;;;;;16059:41;;;;;;;;;;-1:-1:-1;16059:41:0;;;;-1:-1:-1;;;;;16059:41:0;;;17034:28;;;;;;;;;;;;;;;;16391:31;;;;;;;;;;-1:-1:-1;16391:31:0;;;;;;;;;;;3155:127;;;;;;;;;;-1:-1:-1;3155:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3256:18:0;3229:7;3256:18;;;;;;;;;;;;3155:127;840:103;;;;;;;;;;;;;:::i;21033:121::-;;;;;;;;;;;;;:::i;22456:161::-;;;;;;;;;;-1:-1:-1;22456:161:0;;;;;:::i;:::-;;:::i;16881:30::-;;;;;;;;;;;;;;;;617:87;;;;;;;;;;-1:-1:-1;690:6:0;;-1:-1:-1;;;;;690:6:0;617:87;;17069:31;;;;;;;;;;;;;;;;22713:100;;;;;;;;;;-1:-1:-1;22713:100:0;;;;;:::i;:::-;;:::i;2826:104::-;;;;;;;;;;;;;:::i;24035:304::-;;;;;;;;;;-1:-1:-1;24035:304:0;;;;;:::i;:::-;;:::i;4532:413::-;;;;;;;;;;-1:-1:-1;4532:413:0;;;;;:::i;:::-;;:::i;16013:39::-;;;;;;;;;;-1:-1:-1;16013:39:0;;;;-1:-1:-1;;;;;16013:39:0;;;3290:175;;;;;;;;;;-1:-1:-1;3290:175:0;;;;;:::i;:::-;;:::i;16955:32::-;;;;;;;;;;;;;;;;17516:57;;;;;;;;;;-1:-1:-1;17516:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16351:33;;;;;;;;;;-1:-1:-1;16351:33:0;;;;;;;;;;;23845:182;;;;;;;;;;-1:-1:-1;23845:182:0;;;;;:::i;:::-;;:::i;16202:29::-;;;;;;;;;;;;;;;;16664:39;;;;;;;;;;-1:-1:-1;16664:39:0;;;;;;;;20788:193;;;;;;;;;;;;;:::i;21420:497::-;;;;;;;;;;-1:-1:-1;21420:497:0;;;;;:::i;:::-;;:::i;16847:27::-;;;;;;;;;;;;;;;;3473:151;;;;;;;;;;-1:-1:-1;3473:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3589:18:0;;;3562:7;3589:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3473:151;17450:57;;;;;;;;;;-1:-1:-1;17450:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16238:33;;;;;;;;;;;;;;;;16799:39;;;;;;;;;;-1:-1:-1;16799:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23327:510;;;;;;;;;;-1:-1:-1;23327:510:0;;;;;:::i;:::-;;:::i;21215:135::-;;;;;;;;;;;;;:::i;16153:40::-;;;;;;;;;;-1:-1:-1;16153:40:0;;;;-1:-1:-1;;;;;16153:40:0;;;17306:35;;;;;;;;;;;;;;;;16918:30;;;;;;;;;;;;;;;;951:201;;;;;;;;;;-1:-1:-1;951:201:0;;;;;:::i;:::-;;:::i;17107:31::-;;;;;;;;;;;;;;;;15770:75;;;;;;;;;;;;15803:42;15770:75;;16278:24;;;;;;;;;;;;;;;;17348:34;;;;;;;;;;;;;;;;21925:265;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;;;;;;;;;22064:4:::1;22056;22035:13;3127:12:::0;;;3039:108;22035:13:::1;:17;::::0;22051:1:::1;22035:17;:::i;:::-;22034:26;;;;:::i;:::-;22033:35;;;;:::i;:::-;22023:6;:45;;22001:136;;;::::0;-1:-1:-1;;;22001:136:0;;8875:2:1;22001:136:0::1;::::0;::::1;8857:21:1::0;8914:2;8894:18;;;8887:30;8953:34;8933:18;;;8926:62;-1:-1:-1;;;9004:18:1;;;8997:39;9053:19;;22001:136:0::1;8673:405:1::0;22001:136:0::1;22165:17;:6:::0;22175::::1;22165:17;:::i;:::-;22148:14;:34:::0;-1:-1:-1;21925:265:0:o;2718:100::-;2772:13;2805:5;2798:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2718:100;:::o;3632:169::-;3715:4;3732:39;243:10;3755:7;3764:6;3732:8;:39::i;:::-;-1:-1:-1;3789:4:0;3632:169;;;;;:::o;22198:250::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;22332:4:::1;22324;22303:13;3127:12:::0;;;3039:108;22303:13:::1;:17;::::0;22319:1:::1;22303:17;:::i;:::-;22302:26;;;;:::i;:::-;22301:35;;;;:::i;:::-;22291:6;:45;;22269:131;;;::::0;-1:-1:-1;;;22269:131:0;;9670:2:1;22269:131:0::1;::::0;::::1;9652:21:1::0;9709:2;9689:18;;;9682:30;9748:34;9728:18;;;9721:62;-1:-1:-1;;;9799:18:1;;;9792:34;9843:19;;22269:131:0::1;9468:400:1::0;22269:131:0::1;22423:17;:6:::0;22433::::1;22423:17;:::i;:::-;22411:9;:29:::0;-1:-1:-1;22198:250:0:o;33974:564::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;34160:6:::1;:13;34135:14;:21;:38;34113:118;;;::::0;-1:-1:-1;;;34113:118:0;;10075:2:1;34113:118:0::1;::::0;::::1;10057:21:1::0;10114:2;10094:18;;;10087:30;10153:32;10133:18;;;10126:60;10203:18;;34113:118:0::1;9873:354:1::0;34113:118:0::1;34247:9;34242:289;34266:14;:21;34262:1;:25;34242:289;;;34309:14;34326;34341:1;34326:17;;;;;;;;:::i;:::-;;;;;;;34309:34;;34358:21;34382:6;34389:1;34382:9;;;;;;;;:::i;:::-;;;;;;;34358:33;;34406:50;34422:10;34434:6;34442:13;34406:15;:50::i;:::-;34476:43;::::0;1781:25:1;;;-1:-1:-1;;;;;34476:43:0;::::1;::::0;34485:10:::1;::::0;34476:43:::1;::::0;1769:2:1;1754:18;34476:43:0::1;;;;;;;34294:237;;34289:3;;;;;:::i;:::-;;;;34242:289;;;;33974:564:::0;;:::o;3809:492::-;3949:4;3966:36;3976:6;3984:9;3995:6;3966:9;:36::i;:::-;-1:-1:-1;;;;;4042:19:0;;4015:24;4042:19;;;:11;:19;;;;;;;;243:10;4042:33;;;;;;;;4094:26;;;;4086:79;;;;-1:-1:-1;;;4086:79:0;;10706:2:1;4086:79:0;;;10688:21:1;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;-1:-1:-1;;;10835:18:1;;;10828:38;10883:19;;4086:79:0;10504:404:1;4086:79:0;4201:57;4210:6;243:10;4251:6;4232:16;:25;4201:8;:57::i;:::-;-1:-1:-1;4289:4:0;;3809:492;-1:-1:-1;;;;3809:492:0:o;22821:498::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;23012:15:::1;:31:::0;;;23054:15:::1;:31:::0;;;23096:17:::1;:35:::0;;;23142:16:::1;:33:::0;;;23161:14;23116:15;23201:33:::1;23072:13:::0;23030;23201:33:::1;:::i;:::-;:53;;;;:::i;:::-;:72;;;;:::i;:::-;23186:12;:87:::0;;;23308:2:::1;-1:-1:-1::0;23292:18:0::1;23284:27;;;::::0;::::1;;22821:498:::0;;;;:::o;4309:215::-;243:10;4397:4;4446:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4446:34:0;;;;;;;;;;4397:4;;4414:80;;4437:7;;4446:47;;4483:10;;4446:47;:::i;:::-;4414:8;:80::i;30448:386::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;30552:9:::1;30548:279;30566:17:::0;;::::1;30548:279;;;30603:15;30621:8;;30630:1;30621:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30603:29:::0;-1:-1:-1;;;;;;30650:24:0;::::1;30669:4;30650:24;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;30695:17:0;::::1;15803:42;30695:17;;30650:62;:116;;;;;30752:13;-1:-1:-1::0;;;;;30733:33:0::1;:7;-1:-1:-1::0;;;;;30733:33:0::1;;;30650:116;30647:168;;;-1:-1:-1::0;;;;;30785:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:30;;-1:-1:-1;;30785:30:0::1;::::0;::::1;;;::::0;;30647:168:::1;-1:-1:-1::0;30584:3:0;::::1;::::0;::::1;:::i;:::-;;;;30548:279;;840:103:::0;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;905:30:::1;932:1;905:18;:30::i;:::-;840:103::o:0;21033:121::-;690:6;;21085:4;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;-1:-1:-1;21102:14:0::1;:22:::0;;-1:-1:-1;;21102:22:0::1;::::0;;;21033:121;:::o;22456:161::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22569:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;22569:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22456:161::o;22713:100::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;22784:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22784:21:0;;::::1;::::0;;;::::1;::::0;;22713:100::o;2826:104::-;2882:13;2915:7;2908:14;;;;;:::i;24035:304::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;24179:13:::1;-1:-1:-1::0;;;;;24171:21:0::1;:4;-1:-1:-1::0;;;;;24171:21:0::1;::::0;24149:128:::1;;;::::0;-1:-1:-1;;;24149:128:0;;11245:2:1;24149:128:0::1;::::0;::::1;11227:21:1::0;11284:2;11264:18;;;11257:30;11323:34;11303:18;;;11296:62;11394:27;11374:18;;;11367:55;11439:19;;24149:128:0::1;11043:421:1::0;24149:128:0::1;24290:41;24319:4;24325:5;24290:28;:41::i;:::-;24035:304:::0;;:::o;4532:413::-;243:10;4625:4;4669:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4669:34:0;;;;;;;;;;4722:35;;;;4714:85;;;;-1:-1:-1;;;4714:85:0;;11671:2:1;4714:85:0;;;11653:21:1;11710:2;11690:18;;;11683:30;11749:34;11729:18;;;11722:62;-1:-1:-1;;;11800:18:1;;;11793:35;11845:19;;4714:85:0;11469:401:1;4714:85:0;4835:67;243:10;4858:7;4886:15;4867:16;:34;4835:8;:67::i;:::-;-1:-1:-1;4933:4:0;;4532:413;-1:-1:-1;;;4532:413:0:o;3290:175::-;3376:4;3393:42;243:10;3417:9;3428:6;3393:9;:42::i;23845:182::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23930:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23930:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23985:34;;1348:41:1;;;23985:34:0::1;::::0;1321:18:1;23985:34:0::1;;;;;;;23845:182:::0;;:::o;20788:193::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;20850:13:::1;::::0;::::1;::::0;::::1;;;20849:14;20841:35;;;::::0;-1:-1:-1;;;20841:35:0;;12077:2:1;20841:35:0::1;::::0;::::1;12059:21:1::0;12116:1;12096:18;;;12089:29;-1:-1:-1;;;12134:18:1;;;12127:38;12182:18;;20841:35:0::1;11875:331:1::0;20841:35:0::1;20887:13;:20:::0;;20932:12:::1;20918:11;:26:::0;-1:-1:-1;;20955:18:0;;;;;20788:193::o;21420:497::-;690:6;;21528:4;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;21607:6:::1;21586:13;3127:12:::0;;;3039:108;21586:13:::1;:17;::::0;21602:1:::1;21586:17;:::i;:::-;21585:28;;;;:::i;:::-;21572:9;:41;;21550:144;;;::::0;-1:-1:-1;;;21550:144:0;;12413:2:1;21550:144:0::1;::::0;::::1;12395:21:1::0;12452:2;12432:18;;;12425:30;12491:34;12471:18;;;12464:62;-1:-1:-1;;;12542:18:1;;;12535:51;12603:19;;21550:144:0::1;12211:417:1::0;21550:144:0::1;21762:4;21741:13;3127:12:::0;;;3039:108;21741:13:::1;:17;::::0;21757:1:::1;21741:17;:::i;:::-;21740:26;;;;:::i;:::-;21727:9;:39;;21705:141;;;::::0;-1:-1:-1;;;21705:141:0;;12835:2:1;21705:141:0::1;::::0;::::1;12817:21:1::0;12874:2;12854:18;;;12847:30;12913:34;12893:18;;;12886:62;-1:-1:-1;;;12964:18:1;;;12957:50;13024:19;;21705:141:0::1;12633:416:1::0;21705:141:0::1;-1:-1:-1::0;21857:18:0::1;:30:::0;;;21905:4:::1;823:1;21420:497:::0;;;:::o;23327:510::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;23519:16:::1;:32:::0;;;23562:16:::1;:32:::0;;;23605:18:::1;:36:::0;;;23652:17:::1;:34:::0;;;23672:14;23626:15;23713:35:::1;23581:13:::0;23538;23713:35:::1;:::i;:::-;:56;;;;:::i;:::-;:76;;;;:::i;:::-;23697:13;:92:::0;;;23825:2:::1;-1:-1:-1::0;23808:19:0::1;23800:28;;;::::0;::::1;21215:135:::0;690:6;;21275:4;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;-1:-1:-1;21292:20:0::1;:28:::0;;-1:-1:-1;;21292:28:0::1;::::0;;;21215:135;:::o;951:201::-;690:6;;-1:-1:-1;;;;;690:6:0;243:10;752:23;744:68;;;;-1:-1:-1;;;744:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1040:22:0;::::1;1032:73;;;::::0;-1:-1:-1;;;1032:73:0;;13256:2:1;1032:73:0::1;::::0;::::1;13238:21:1::0;13295:2;13275:18;;;13268:30;13334:34;13314:18;;;13307:62;-1:-1:-1;;;13385:18:1;;;13378:36;13431:19;;1032:73:0::1;13054:402:1::0;1032:73:0::1;1116:28;1135:8;1116:18;:28::i;:::-;951:201:::0;:::o;7195:380::-;-1:-1:-1;;;;;7331:19:0;;7323:68;;;;-1:-1:-1;;;7323:68:0;;13663:2:1;7323:68:0;;;13645:21:1;13702:2;13682:18;;;13675:30;13741:34;13721:18;;;13714:62;-1:-1:-1;;;13792:18:1;;;13785:34;13836:19;;7323:68:0;13461:400:1;7323:68:0;-1:-1:-1;;;;;7410:21:0;;7402:68;;;;-1:-1:-1;;;7402:68:0;;14068:2:1;7402:68:0;;;14050:21:1;14107:2;14087:18;;;14080:30;14146:34;14126:18;;;14119:62;-1:-1:-1;;;14197:18:1;;;14190:32;14239:19;;7402:68:0;13866:398:1;7402:68:0;-1:-1:-1;;;;;7483:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7535:32;;1781:25:1;;;7535:32:0;;1754:18:1;7535:32:0;;;;;;;7195:380;;;:::o;4953:733::-;-1:-1:-1;;;;;5093:20:0;;5085:70;;;;-1:-1:-1;;;5085:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5174:23:0;;5166:71;;;;-1:-1:-1;;;5166:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5334:17:0;;5310:21;5334:17;;;;;;;;;;;5370:23;;;;5362:74;;;;-1:-1:-1;;;5362:74:0;;15281:2:1;5362:74:0;;;15263:21:1;15320:2;15300:18;;;15293:30;15359:34;15339:18;;;15332:62;-1:-1:-1;;;15410:18:1;;;15403:36;15456:19;;5362:74:0;15079:402:1;5362:74:0;-1:-1:-1;;;;;5472:17:0;;;:9;:17;;;;;;;;;;;5492:22;;;5472:42;;5536:20;;;;;;;;:30;;5508:6;;5472:9;5536:30;;5508:6;;5536:30;:::i;:::-;;;;;;;;5601:9;-1:-1:-1;;;;;5584:35:0;5593:6;-1:-1:-1;;;;;5584:35:0;;5612:6;5584:35;;;;1781:25:1;;1769:2;1754:18;;1635:177;5584:35:0;;;;;;;;5632:46;33974:564;24677:5763;-1:-1:-1;;;;;24809:18:0;;24801:68;;;;-1:-1:-1;;;24801:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24888:16:0;;24880:64;;;;-1:-1:-1;;;24880:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24964:13:0;;;;;;:7;:13;;;;;;;;24963:14;24955:33;;;;-1:-1:-1;;;24955:33:0;;15688:2:1;24955:33:0;;;15670:21:1;15727:1;15707:18;;;15700:29;-1:-1:-1;;;15745:18:1;;;15738:36;15791:18;;24955:33:0;15486:329:1;24955:33:0;25005:6;25015:1;25005:11;25001:93;;25033:28;25049:4;25055:2;25059:1;25033:15;:28::i;25001:93::-;690:6;;-1:-1:-1;;;;;690:6:0;25110:9;:20;25106:107;;25147:33;25163:4;25169:2;25173:6;25147:15;:33::i;25106:107::-;25229:14;;;;25225:2264;;;25265:8;;-1:-1:-1;;;25265:8:0;;;;25260:2218;;25299:13;;;;;;;25294:223;;-1:-1:-1;;;;;25371:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25400:23:0;;;;;;:19;:23;;;;;;;;25371:52;25337:160;;;;-1:-1:-1;;;25337:160:0;;16022:2:1;25337:160:0;;;16004:21:1;16061:2;16041:18;;;16034:30;-1:-1:-1;;;16080:18:1;;;16073:52;16142:18;;25337:160:0;15820:346:1;25337:160:0;25673:20;;;;25669:641;;;690:6;;-1:-1:-1;;;;;25748:13:0;;;690:6;;25748:13;;;;:72;;;25804:15;-1:-1:-1;;;;;25790:30:0;:2;-1:-1:-1;;;;;25790:30:0;;;25748:72;:129;;;;;25863:13;-1:-1:-1;;;;;25849:28:0;:2;-1:-1:-1;;;;;25849:28:0;;;25748:129;25718:573;;;25995:9;25966:39;;;;:28;:39;;;;;;26041:12;-1:-1:-1;25928:258:0;;;;-1:-1:-1;;;25928:258:0;;16373:2:1;25928:258:0;;;16355:21:1;16412:2;16392:18;;;16385:30;16451:34;16431:18;;;16424:62;16522:34;16502:18;;;16495:62;-1:-1:-1;;;16573:19:1;;;16566:40;16623:19;;25928:258:0;16171:477:1;25928:258:0;26242:9;26213:39;;;;:28;:39;;;;;26255:12;26213:54;;25718:573;-1:-1:-1;;;;;26384:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;26441:29:0;;;;;;:25;:29;;;;;;;;26440:30;26384:86;26358:1105;;;26557:14;;26547:6;:24;;26513:157;;;;-1:-1:-1;;;26513:157:0;;16855:2:1;26513:157:0;;;16837:21:1;16894:2;16874:18;;;16867:30;16933:34;16913:18;;;16906:62;-1:-1:-1;;;16984:18:1;;;16977:45;17039:19;;26513:157:0;16653:411:1;26513:157:0;26753:9;;-1:-1:-1;;;;;3256:18:0;;3229:7;3256:18;;;;;;;;;;;26727:22;;:6;:22;:::i;:::-;:35;;26693:140;;;;-1:-1:-1;;;26693:140:0;;17271:2:1;26693:140:0;;;17253:21:1;17310:2;17290:18;;;17283:30;-1:-1:-1;;;17329:18:1;;;17322:49;17388:18;;26693:140:0;17069:343:1;26693:140:0;26358:1105;;;-1:-1:-1;;;;;26931:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;26986:31:0;;;;;;:25;:31;;;;;;;;26985:32;26931:86;26905:558;;;27104:14;;27094:6;:24;;27060:158;;;;-1:-1:-1;;;27060:158:0;;17619:2:1;27060:158:0;;;17601:21:1;17658:2;17638:18;;;17631:30;17697:34;17677:18;;;17670:62;-1:-1:-1;;;17748:18:1;;;17741:46;17804:19;;27060:158:0;17417:412:1;26905:558:0;-1:-1:-1;;;;;27249:29:0;;;;;;:25;:29;;;;;;;;27244:219;;27363:9;;-1:-1:-1;;;;;3256:18:0;;3229:7;3256:18;;;;;;;;;;;27337:22;;:6;:22;:::i;:::-;:35;;27303:140;;;;-1:-1:-1;;;27303:140:0;;17271:2:1;27303:140:0;;;17253:21:1;17310:2;17290:18;;;17283:30;-1:-1:-1;;;17329:18:1;;;17322:49;17388:18;;27303:140:0;17069:343:1;27303:140:0;-1:-1:-1;;;;;27505:25:0;;;;;;:19;:25;;;;;;;;:52;;;;-1:-1:-1;;;;;;27534:23:0;;;;;;:19;:23;;;;;;;;27505:52;27501:116;;;27593:12;27574:16;:31;27501:116;-1:-1:-1;;;;;27631:25:0;;;;;;:19;:25;;;;;;;;27627:116;;;27673:37;27693:4;27699:2;27703:6;27673:19;:37::i;27627:116::-;-1:-1:-1;;;;;27758:25:0;;;;;;:19;:25;;;;;;;;27757:26;:54;;;;-1:-1:-1;;;;;;27788:23:0;;;;;;:19;:23;;;;;;;;27787:24;27757:54;27753:644;;;-1:-1:-1;;;;;27832:31:0;;;;;;:25;:31;;;;;;;;27828:558;;;-1:-1:-1;;;;;27920:24:0;;27884:33;27920:24;;;:20;:24;;;;;27967:28;;:33;:55;;;;-1:-1:-1;;;;;;3256:18:0;;3229:7;3256:18;;;;;;;;;;;28004;27967:55;27963:147;;;28078:12;28047:43;;27963:147;27865:260;27828:558;;;-1:-1:-1;;;;;28186:26:0;;28150:33;28186:26;;;:20;:26;;;;;28291:16;;28260:28;;:47;;28291:16;28260:47;:::i;:::-;28231:26;;;:76;28358:12;28326:29;;;;:44;27828:558;28458:4;28409:28;3256:18;;;;;;;;;;;28516;;28492:42;;;;;;;28565:35;;-1:-1:-1;28589:11:0;;;;;;;28565:35;:61;;;;-1:-1:-1;28618:8:0;;-1:-1:-1;;;28618:8:0;;;;28617:9;28565:61;:110;;;;-1:-1:-1;;;;;;28644:31:0;;;;;;:25;:31;;;;;;;;28643:32;28565:110;:153;;;;-1:-1:-1;;;;;;28693:25:0;;;;;;:19;:25;;;;;;;;28692:26;28565:153;:194;;;;-1:-1:-1;;;;;;28736:23:0;;;;;;:19;:23;;;;;;;;28735:24;28565:194;28547:326;;;28786:8;:15;;-1:-1:-1;;;;28786:15:0;-1:-1:-1;;;28786:15:0;;;28818:10;:8;:10::i;:::-;28845:8;:16;;-1:-1:-1;;;;28845:16:0;;;28547:326;28901:8;;-1:-1:-1;;;;;29011:25:0;;28885:12;29011:25;;;:19;:25;;;;;;28901:8;-1:-1:-1;;;28901:8:0;;;;;28900:9;;29011:25;;:52;;-1:-1:-1;;;;;;29040:23:0;;;;;;:19;:23;;;;;;;;29011:52;29007:100;;;-1:-1:-1;29090:5:0;29007:100;29119:12;29224:7;29220:1167;;;-1:-1:-1;;;;;29276:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29325:1;29309:13;;:17;29276:50;29272:966;;;29354:34;29384:3;29354:25;29365:13;;29354:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;29347:41;;29457:13;;29437:16;;29430:4;:23;;;;:::i;:::-;29429:41;;;;:::i;:::-;29407:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29543:13:0;;29521:18;;29514:25;;:4;:25;:::i;:::-;29513:43;;;;:::i;:::-;29489:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;29625:13:0;;29605:16;;29598:23;;:4;:23;:::i;:::-;29597:41;;;;:::i;:::-;29575:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29709:13:0;;29688:17;;29681:24;;:4;:24;:::i;:::-;29680:42;;;;:::i;:::-;29657:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;29272:966:0;;-1:-1:-1;29272:966:0;;-1:-1:-1;;;;;29784:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29834:1;29819:12;;:16;29784:51;29780:458;;;29863:33;29892:3;29863:24;29874:12;;29863:6;:10;;:24;;;;:::i;:33::-;29856:40;;29964:12;;29945:15;;29938:4;:22;;;;:::i;:::-;29937:39;;;;:::i;:::-;29915:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30048:12:0;;30027:17;;30020:24;;:4;:24;:::i;:::-;30019:41;;;;:::i;:::-;29995:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;30128:12:0;;30109:15;;30102:22;;:4;:22;:::i;:::-;30101:39;;;;:::i;:::-;30079:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30210:12:0;;30190:16;;30183:23;;:4;:23;:::i;:::-;30182:40;;;;:::i;:::-;30159:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29780:458:0;30258:8;;30254:91;;30287:42;30303:4;30317;30324;30287:15;:42::i;:::-;30361:14;30371:4;30361:14;;:::i;:::-;;;29220:1167;30399:33;30415:4;30421:2;30425:6;30399:15;:33::i;:::-;24790:5650;;;;24677:5763;;;:::o;1160:191::-;1253:6;;;-1:-1:-1;;;;;1270:17:0;;;-1:-1:-1;;;;;;1270:17:0;;;;;;;1303:40;;1253:6;;;1270:17;1253:6;;1303:40;;1234:16;;1303:40;1223:128;1160:191;:::o;24347:188::-;-1:-1:-1;;;;;24430:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;24430:39:0;;;;;;;;;;24487:40;;24430:39;;:31;24487:40;;;24347:188;;:::o;5694:487::-;-1:-1:-1;;;;;5914:17:0;;;5890:21;5914:17;;;;;;;;;;;;;5987:22;;;5967:42;;;6031:20;;;;;;;:30;;6003:6;;5890:21;6031:30;;6003:6;;6031:30;:::i;31969:1997::-;32052:4;32008:23;3256:18;;;;;;;;;;;32008:50;;32069:25;32201:19;;32165:20;;32131:18;;32097;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;32069:151;-1:-1:-1;32231:12:0;32260:20;;;:46;;-1:-1:-1;32284:22:0;;32260:46;32256:85;;;32323:7;;;31969:1997::o;32256:85::-;32375:18;;:23;;32396:2;32375:23;:::i;:::-;32357:15;:41;32353:115;;;32433:18;;:23;;32454:2;32433:23;:::i;:::-;32415:41;;32353:115;32529:23;32616:1;32596:17;32574:18;;32556:15;:36;;;;:::i;:::-;32555:58;;;;:::i;:::-;:62;;;;:::i;:::-;32529:88;-1:-1:-1;32628:26:0;32657:36;:15;32529:88;32657:19;:36::i;:::-;32628:65;-1:-1:-1;32734:21:0;32768:36;32628:65;32768:16;:36::i;:::-;32817:18;32838:44;:21;32864:17;32838:25;:44::i;:::-;32817:65;;32895:18;32916:57;32955:17;32916:34;32931:18;;32916:10;:14;;:34;;;;:::i;:57::-;32895:78;;32984:25;33012:59;33053:17;33012:36;33027:20;;33012:10;:14;;:36;;;;:::i;:59::-;32984:87;;33082:24;33109:58;33149:17;33109:35;33124:19;;33109:10;:14;;:35;;;;:::i;:58::-;33082:85;-1:-1:-1;33180:23:0;33082:85;33232:17;33206:23;33219:10;33206;:23;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;33302:1;33281:18;:22;;;33314:18;:22;;;33347:20;:24;;;33382:19;:23;;;33440:18;;33432:62;;33180:88;;-1:-1:-1;;;;;;33440:18:0;;33472:17;;33432:62;33302:1;33432:62;33472:17;33440:18;33432:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33418:76:0;;-1:-1:-1;;33511:19:0;;;;;:42;;;33552:1;33534:15;:19;33511:42;33507:278;;;33570:46;33583:15;33600;33570:12;:46::i;:::-;33740:18;;;33636:137;;;18379:25:1;;;18420:18;;;18413:34;;;18463:18;;18456:34;33636:137:0;;18367:2:1;18352:18;33636:137:0;;;;;;;33507:278;33817:17;;33809:60;;-1:-1:-1;;;;;33817:17:0;;;;33848:16;;33809:60;;;;33848:16;33817:17;33809:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33902:16:0;;33894:64;;33795:74;;-1:-1:-1;;;;;;33902:16:0;;33932:21;;33894:64;;;;33932:21;33902:16;33894:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;31969:1997:0:o;9201:98::-;9259:7;9286:5;9290:1;9286;:5;:::i;:::-;9279:12;9201:98;-1:-1:-1;;;9201:98:0:o;9307:::-;9365:7;9392:5;9396:1;9392;:5;:::i;9095:98::-;9153:7;9180:5;9184:1;9180;:5;:::i;30842:589::-;30992:16;;;31006:1;30992:16;;;;;;;;30968:21;;30992:16;;;;;;;;;;-1:-1:-1;30992:16:0;30968:40;;31037:4;31019;31024:1;31019:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31019:23:0;;;-1:-1:-1;;;;;31019:23:0;;;;;31063:15;-1:-1:-1;;;;;31063:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31053:4;31058:1;31053:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31053:32:0;;;-1:-1:-1;;;;;31053:32:0;;;;;31098:62;31115:4;31130:15;31148:11;31098:8;:62::i;:::-;31199:224;;-1:-1:-1;;;31199:224:0;;-1:-1:-1;;;;;31199:15:0;:66;;;;:224;;31280:11;;31306:1;;31350:4;;31377;;31397:15;;31199:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30897:534;30842:589;:::o;31439:522::-;31587:62;31604:4;31619:15;31637:11;31587:8;:62::i;:::-;31896:16;;31692:261;;-1:-1:-1;;;31692:261:0;;31764:4;31692:261;;;20091:34:1;20141:18;;;20134:34;;;31810:1:0;20184:18:1;;;20177:34;;;20227:18;;;20220:34;-1:-1:-1;;;;;31896:16:0;;;20270:19:1;;;20263:44;31927:15:0;20323:19:1;;;20316:35;31692:15:0;:31;;;;;;31731:9;;20025:19:1;;31692:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31439:522;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1817:127::-;1878:10;1873:3;1869:20;1866:1;1859:31;1909:4;1906:1;1899:15;1933:4;1930:1;1923:15;1949:275;2020:2;2014:9;2085:2;2066:13;;-1:-1:-1;;2062:27:1;2050:40;;2120:18;2105:34;;2141:22;;;2102:62;2099:88;;;2167:18;;:::i;:::-;2203:2;2196:22;1949:275;;-1:-1:-1;1949:275:1:o;2229:183::-;2289:4;2322:18;2314:6;2311:30;2308:56;;;2344:18;;:::i;:::-;-1:-1:-1;2389:1:1;2385:14;2401:4;2381:25;;2229:183::o;2417:662::-;2471:5;2524:3;2517:4;2509:6;2505:17;2501:27;2491:55;;2542:1;2539;2532:12;2491:55;2578:6;2565:20;2604:4;2628:60;2644:43;2684:2;2644:43;:::i;:::-;2628:60;:::i;:::-;2722:15;;;2808:1;2804:10;;;;2792:23;;2788:32;;;2753:12;;;;2832:15;;;2829:35;;;2860:1;2857;2850:12;2829:35;2896:2;2888:6;2884:15;2908:142;2924:6;2919:3;2916:15;2908:142;;;2990:17;;2978:30;;3028:12;;;;2941;;2908:142;;;-1:-1:-1;3068:5:1;2417:662;-1:-1:-1;;;;;;2417:662:1:o;3084:1215::-;3202:6;3210;3263:2;3251:9;3242:7;3238:23;3234:32;3231:52;;;3279:1;3276;3269:12;3231:52;3319:9;3306:23;3348:18;3389:2;3381:6;3378:14;3375:34;;;3405:1;3402;3395:12;3375:34;3443:6;3432:9;3428:22;3418:32;;3488:7;3481:4;3477:2;3473:13;3469:27;3459:55;;3510:1;3507;3500:12;3459:55;3546:2;3533:16;3568:4;3592:60;3608:43;3648:2;3608:43;:::i;3592:60::-;3686:15;;;3768:1;3764:10;;;;3756:19;;3752:28;;;3717:12;;;;3792:19;;;3789:39;;;3824:1;3821;3814:12;3789:39;3848:11;;;;3868:217;3884:6;3879:3;3876:15;3868:217;;;3964:3;3951:17;3981:31;4006:5;3981:31;:::i;:::-;4025:18;;3901:12;;;;4063;;;;3868:217;;;4104:5;-1:-1:-1;;4147:18:1;;4134:32;;-1:-1:-1;;4178:16:1;;;4175:36;;;4207:1;4204;4197:12;4175:36;;4230:63;4285:7;4274:8;4263:9;4259:24;4230:63;:::i;:::-;4220:73;;;3084:1215;;;;;:::o;4304:456::-;4381:6;4389;4397;4450:2;4438:9;4429:7;4425:23;4421:32;4418:52;;;4466:1;4463;4456:12;4418:52;4505:9;4492:23;4524:31;4549:5;4524:31;:::i;:::-;4574:5;-1:-1:-1;4631:2:1;4616:18;;4603:32;4644:33;4603:32;4644:33;:::i;:::-;4304:456;;4696:7;;-1:-1:-1;;;4750:2:1;4735:18;;;;4722:32;;4304:456::o;4973:385::-;5059:6;5067;5075;5083;5136:3;5124:9;5115:7;5111:23;5107:33;5104:53;;;5153:1;5150;5143:12;5104:53;-1:-1:-1;;5176:23:1;;;5246:2;5231:18;;5218:32;;-1:-1:-1;5297:2:1;5282:18;;5269:32;;5348:2;5333:18;5320:32;;-1:-1:-1;4973:385:1;-1:-1:-1;4973:385:1:o;5776:160::-;5841:20;;5897:13;;5890:21;5880:32;;5870:60;;5926:1;5923;5916:12;5941:689;6033:6;6041;6049;6102:2;6090:9;6081:7;6077:23;6073:32;6070:52;;;6118:1;6115;6108:12;6070:52;6158:9;6145:23;6187:18;6228:2;6220:6;6217:14;6214:34;;;6244:1;6241;6234:12;6214:34;6282:6;6271:9;6267:22;6257:32;;6327:7;6320:4;6316:2;6312:13;6308:27;6298:55;;6349:1;6346;6339:12;6298:55;6389:2;6376:16;6415:2;6407:6;6404:14;6401:34;;;6431:1;6428;6421:12;6401:34;6486:7;6479:4;6469:6;6466:1;6462:14;6458:2;6454:23;6450:34;6447:47;6444:67;;;6507:1;6504;6497:12;6444:67;6538:4;6530:13;;;;-1:-1:-1;6562:6:1;-1:-1:-1;6587:37:1;;6603:20;;;-1:-1:-1;6587:37:1;:::i;:::-;6577:47;;5941:689;;;;;:::o;6635:247::-;6694:6;6747:2;6735:9;6726:7;6722:23;6718:32;6715:52;;;6763:1;6760;6753:12;6715:52;6802:9;6789:23;6821:31;6846:5;6821:31;:::i;6887:315::-;6952:6;6960;7013:2;7001:9;6992:7;6988:23;6984:32;6981:52;;;7029:1;7026;7019:12;6981:52;7068:9;7055:23;7087:31;7112:5;7087:31;:::i;:::-;7137:5;-1:-1:-1;7161:35:1;7192:2;7177:18;;7161:35;:::i;:::-;7151:45;;6887:315;;;;;:::o;7207:180::-;7263:6;7316:2;7304:9;7295:7;7291:23;7287:32;7284:52;;;7332:1;7329;7322:12;7284:52;7355:26;7371:9;7355:26;:::i;7392:388::-;7460:6;7468;7521:2;7509:9;7500:7;7496:23;7492:32;7489:52;;;7537:1;7534;7527:12;7489:52;7576:9;7563:23;7595:31;7620:5;7595:31;:::i;:::-;7645:5;-1:-1:-1;7702:2:1;7687:18;;7674:32;7715:33;7674:32;7715:33;:::i;:::-;7767:7;7757:17;;;7392:388;;;;;:::o;7785:356::-;7987:2;7969:21;;;8006:18;;;7999:30;8065:34;8060:2;8045:18;;8038:62;8132:2;8117:18;;7785:356::o;8146:127::-;8207:10;8202:3;8198:20;8195:1;8188:31;8238:4;8235:1;8228:15;8262:4;8259:1;8252:15;8278:168;8351:9;;;8382;;8399:15;;;8393:22;;8379:37;8369:71;;8420:18;;:::i;8451:217::-;8491:1;8517;8507:132;;8561:10;8556:3;8552:20;8549:1;8542:31;8596:4;8593:1;8586:15;8624:4;8621:1;8614:15;8507:132;-1:-1:-1;8653:9:1;;8451:217::o;9083:380::-;9162:1;9158:12;;;;9205;;;9226:61;;9280:4;9272:6;9268:17;9258:27;;9226:61;9333:2;9325:6;9322:14;9302:18;9299:38;9296:161;;9379:10;9374:3;9370:20;9367:1;9360:31;9414:4;9411:1;9404:15;9442:4;9439:1;9432:15;9296:161;;9083:380;;;:::o;10232:127::-;10293:10;10288:3;10284:20;10281:1;10274:31;10324:4;10321:1;10314:15;10348:4;10345:1;10338:15;10364:135;10403:3;10424:17;;;10421:43;;10444:18;;:::i;:::-;-1:-1:-1;10491:1:1;10480:13;;10364:135::o;10913:125::-;10978:9;;;10999:10;;;10996:36;;;11012:18;;:::i;14269:401::-;14471:2;14453:21;;;14510:2;14490:18;;;14483:30;14549:34;14544:2;14529:18;;14522:62;-1:-1:-1;;;14615:2:1;14600:18;;14593:35;14660:3;14645:19;;14269:401::o;14675:399::-;14877:2;14859:21;;;14916:2;14896:18;;;14889:30;14955:34;14950:2;14935:18;;14928:62;-1:-1:-1;;;15021:2:1;15006:18;;14999:33;15064:3;15049:19;;14675:399::o;17834:128::-;17901:9;;;17922:11;;;17919:37;;;17936:18;;:::i;18501:251::-;18571:6;18624:2;18612:9;18603:7;18599:23;18595:32;18592:52;;;18640:1;18637;18630:12;18592:52;18672:9;18666:16;18691:31;18716:5;18691:31;:::i;18757:980::-;19019:4;19067:3;19056:9;19052:19;19098:6;19087:9;19080:25;19124:2;19162:6;19157:2;19146:9;19142:18;19135:34;19205:3;19200:2;19189:9;19185:18;19178:31;19229:6;19264;19258:13;19295:6;19287;19280:22;19333:3;19322:9;19318:19;19311:26;;19372:2;19364:6;19360:15;19346:29;;19393:1;19403:195;19417:6;19414:1;19411:13;19403:195;;;19482:13;;-1:-1:-1;;;;;19478:39:1;19466:52;;19573:15;;;;19538:12;;;;19514:1;19432:9;19403:195;;;-1:-1:-1;;;;;;;19654:32:1;;;;19649:2;19634:18;;19627:60;-1:-1:-1;;;19718:3:1;19703:19;19696:35;19615:3;18757:980;-1:-1:-1;;;18757:980:1:o;20362:306::-;20450:6;20458;20466;20519:2;20507:9;20498:7;20494:23;20490:32;20487:52;;;20535:1;20532;20525:12;20487:52;20564:9;20558:16;20548:26;;20614:2;20603:9;20599:18;20593:25;20583:35;;20658:2;20647:9;20643:18;20637:25;20627:35;;20362:306;;;;;:::o

Swarm Source

ipfs://2a3ca96c751ca87731a46b4ce77c25eae2bb64a4846c7cb276e9e70dcc7cd74d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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