ETH Price: $3,461.12 (+5.18%)

Token

Brotherhood Of The Bag (BROTHERHOOD)
 

Overview

Max Total Supply

100,000,000 BROTHERHOOD

Holders

34

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
900,000 BROTHERHOOD

Value
$0.00
0xEc11Ea6d580Cfc98B122044cd71353f31088A0F1
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:
BROTHERHOOD

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-26
*/

//      Oath of Loyalty for the Brotherhood of the Bag
//            https://brotherhoodofthebag.vip


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

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 _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 BROTHERHOOD is ERC20, Ownable {
    using SafeMath for uint256;

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

    bool private swapping;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public castleWallsEnforced = true;
    bool public initiated = false;
    bool public swapEnabled = false;

    uint256 private buyBrotherhoodFee = 10;
    uint256 private sellBrotherhoodFee = 50;
    uint256 private _buyBrotherhoodFee;
    uint256 private _sellBrotherhoodFee;
    address private kingsWallet;
    uint256 public minTokensToEnterBrotherhood;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(uint256 => uint256) private swapInBlock;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping (address => uint256) public _balances;
    mapping(address => bool) private __exemptFromFees;
    mapping(address => bool) private _banished;
    address[] public brotherhoodofthebag;
    address[] public OathKeepers;
    bool public goalAchieved = false;
    uint256 public brotherhoodGoal = 1000;

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExemptFromFees(address indexed account, bool status);
    event newMinToEnterBrotherhood(uint256 minTokensToEnterBrotherhood);
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event TransferForeignToken(address token, uint256 amount);

    constructor() ERC20("Brotherhood Of The Bag", "BROTHERHOOD") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        kingsWallet = address(msg.sender);

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

        uint256 totalSupply = 100_000_000 * 1e18;
        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 1) / 100;
        swapTokensAtAmount = (totalSupply * 1) / 10000;
        minTokensToEnterBrotherhood = (totalSupply * 20) / 100000; // .02% required to be a part of the brotherhood

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        __exemptFromFees[address(this)] = true;
        __exemptFromFees[address(0xdead)] = true;
        __exemptFromFees[address(owner())] = true;
        __exemptFromFees[address(uniswapV2Pair)] = true;

        _approve(address(this), address(msg.sender), totalSupply);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function commencement() external onlyOwner {
        initiated = true;
        swapEnabled = true;
    }

    function takedownFences() external onlyOwner returns (bool) {
        castleWallsEnforced = false;
        return true;
    }

    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 whitelistContract(address _whitelist, bool isWL) public onlyOwner {
        _isExcludedMaxTransactionAmount[_whitelist] = isWL;
        _isExcludedFromFees[_whitelist] = isWL;
    }

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

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

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

     function exemptFromFees(address account, bool _status) public onlyOwner {
        __exemptFromFees[account] = _status;
        emit ExemptFromFees(account, _status);
    }

    function transferForeignToken(address _token, address _to)
        external
        onlyOwner
        returns (bool _recovered)
    {
        require(_token != address(0), "_token address cannot be 0");
        require(_token != address(this), "Can't withdraw native tokens");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        (_recovered, ) = address(_to).call{value: address(this).balance}("");
        emit TransferForeignToken(_token, _contractBalance);
    }

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

    function newMinTokensToEnterBrotherhood(uint256 _numerator, uint256 _divisor) external onlyOwner {
        minTokensToEnterBrotherhood = (totalSupply() * _numerator) / _divisor;
        emit newMinToEnterBrotherhood(minTokensToEnterBrotherhood);
    }


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

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

        uint256 blockNum = block.number;

        if (castleWallsEnforced) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
               

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

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

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            (swapInBlock[blockNum] < 2) &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            brotherhoodFund();
            ++swapInBlock[blockNum];
            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) {
            _buyBrotherhoodFee = buyBrotherhoodFee;
            _sellBrotherhoodFee = sellBrotherhoodFee;
            // on sell
            if (automatedMarketMakerPairs[to] && _sellBrotherhoodFee > 0) {
                fees = amount.mul(_sellBrotherhoodFee).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && _buyBrotherhoodFee > 0) {
                fees = amount.mul(_buyBrotherhoodFee).div(100);
            }

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

            amount -= fees;
            // on a sell
            if (!automatedMarketMakerPairs[from]) {
                _balances[from] = _balances[from].sub(amount);
            }
            // on a buy
            if (!automatedMarketMakerPairs[to]) {
                _balances[to] = _balances[to].add(amount);
                newMemberOfTheBrotherhood(to);
            }
            
        }
        super._transfer(from, to, amount);
    }

  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 brotherhoodFund() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }
        uint256 amountToSwapForETH = contractBalance;
        uint256 beforeSwap = address(this).balance;
        // do the swap, leave 80% of taxes in the contract to divvy out
        swapTokensForEth(amountToSwapForETH);
        uint256 receivedETH = address(this).balance - beforeSwap;
        uint256 kingsFee = receivedETH.div(5);
        payable(kingsWallet).transfer(kingsFee);
    }

    function updateBrotherhoodGoal(uint256 _newGoal) external onlyOwner {
        require(_newGoal < 1500, "Cannot set an unrealistic goal");
        brotherhoodGoal = _newGoal;
    }

    function checkBrotherhoodGoalAchieved() public view returns (bool) {
        if (brotherhoodofthebag.length > brotherhoodGoal) {
            return true;
        }
        return false;
    }

    function Brotherhood_Of_The_Bag_Oath_Keepers() external {
        require(checkBrotherhoodGoalAchieved(), "Goal hasn't been met yet");
        for (uint i; i< brotherhoodofthebag.length;i++){
            if (_balances[brotherhoodofthebag[i]]<=minTokensToEnterBrotherhood && !_banished[brotherhoodofthebag[i]])
            {
                OathKeepers.push(brotherhoodofthebag[i]);
            }
        }

        // Congratulations Oathkeepers.  Your fealty shall be rewarded!
        if (address(this).balance > 0){
            bool success;
            uint256 shares = OathKeepers.length;
            uint256 oathkeeperPortion = (address(this).balance).div(shares);
            for (uint i; i<OathKeepers.length;i++) {
                (success, ) = address(OathKeepers[i]).call{value: oathkeeperPortion}("");
            }
        }
        
        // Fealty oath has been met.  Bortherhood is no longer taxed.
        buyBrotherhoodFee = 0;
        sellBrotherhoodFee = 0;

     }

    function brotherhoodMemberAlready(address wallet) private view returns (bool){
        for (uint i; i< brotherhoodofthebag.length;i++){
            if (brotherhoodofthebag[i]==wallet) return true;
        }
        return false;
     }

    function newMemberOfTheBrotherhood(address wallet) private {
         if (!brotherhoodMemberAlready(wallet) && !automatedMarketMakerPairs[wallet] && !_isExcludedFromFees[wallet]) {
             brotherhoodofthebag.push(wallet);
         }
     }

}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExemptFromFees","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":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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensToEnterBrotherhood","type":"uint256"}],"name":"newMinToEnterBrotherhood","type":"event"},{"inputs":[],"name":"Brotherhood_Of_The_Bag_Oath_Keepers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"OathKeepers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","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":[],"name":"brotherhoodGoal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"brotherhoodofthebag","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"castleWallsEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkBrotherhoodGoalAchieved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"commencement","outputs":[],"stateMutability":"nonpayable","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":[{"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":"account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"exemptFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"goalAchieved","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initiated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","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":"minTokensToEnterBrotherhood","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numerator","type":"uint256"},{"internalType":"uint256","name":"_divisor","type":"uint256"}],"name":"newMinTokensToEnterBrotherhood","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"takedownFences","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_recovered","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newGoal","type":"uint256"}],"name":"updateBrotherhoodGoal","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"},{"inputs":[{"internalType":"address","name":"_whitelist","type":"address"},{"internalType":"bool","name":"isWL","type":"bool"}],"name":"whitelistContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526009805462ffffff19166001179055600a80556032600b556019805460ff191690556103e8601a5534801562000038575f80fd5b506040518060400160405280601681526020017f42726f74686572686f6f64204f662054686520426167000000000000000000008152506040518060400160405280600b81526020016a109493d51211549213d3d160aa1b8152508160039081620000a49190620008bc565b506004620000b38282620008bc565b505050620000d0620000ca6200044760201b60201c565b6200044b565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000f28160016200049c565b6001600160a01b0381166080819052600e80546001600160a01b031916331790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200014d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000173919062000984565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e5919062000984565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000230573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000256919062000984565b6001600160a01b031660a0819052620002719060016200049c565b60a0516200028190600162000514565b6a52b7d2dcc80cd2e400000060646200029c826001620009c7565b620002a89190620009e7565b6006556064620002ba826001620009c7565b620002c69190620009e7565b600855612710620002d9826001620009c7565b620002e59190620009e7565b600755620186a0620002f9826014620009c7565b620003059190620009e7565b600f55620003276200031f6005546001600160a01b031690565b600162000567565b6200033430600162000567565b6200034361dead600162000567565b620003626200035a6005546001600160a01b031690565b60016200049c565b6200036f3060016200049c565b6200037e61dead60016200049c565b305f90815260156020819052604082208054600160ff19918216811790925561dead84527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e580549091168217905591620003e06005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff1996871617905560a05190911681526015909252902080549091166001179055620004333033836200060f565b6200043f338262000736565b505062000a1d565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6005546001600160a01b03163314620004ea5760405162461bcd60e51b815260206004820181905260248201525f8051602062002fad83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b6001600160a01b0382165f81815260136020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005b15760405162461bcd60e51b815260206004820181905260248201525f8051602062002fad8339815191526044820152606401620004e1565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038316620006735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620004e1565b6001600160a01b038216620006d65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004e1565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166200078e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004e1565b8060025f828254620007a1919062000a07565b90915550506001600160a01b0382165f9081526020819052604081208054839290620007cf90849062000a07565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200084657607f821691505b6020821081036200086557634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111562000818575f81815260208120601f850160051c81016020861015620008935750805b601f850160051c820191505b81811015620008b4578281556001016200089f565b505050505050565b81516001600160401b03811115620008d857620008d86200081d565b620008f081620008e9845462000831565b846200086b565b602080601f83116001811462000926575f84156200090e5750858301515b5f19600386901b1c1916600185901b178555620008b4565b5f85815260208120601f198616915b82811015620009565788860151825594840194600190910190840162000935565b50858210156200097457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000995575f80fd5b81516001600160a01b0381168114620009ac575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417620009e157620009e1620009b3565b92915050565b5f8262000a0257634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115620009e157620009e1620009b3565b60805160a05161255962000a545f395f61042b01525f818161033f01528181611f870152818161203e015261207a01526125595ff3fe608060405260043610610262575f3560e01c80638366e79a1161013f578063b62496f5116100b3578063d257b34f11610078578063d257b34f14610725578063dd62ed3e14610744578063e2f4560514610788578063f2fde38b1461079d578063f8b45b05146107bc578063fd0a1cd9146107d1575f80fd5b8063b62496f514610690578063bef8255a146106be578063bf9e03c7146106dd578063c0246668146106f1578063c8c8ebe414610710575f80fd5b80639b6b5499116101045780639b6b5499146105e25780639f11853614610601578063a29337cd1461061f578063a457c2d714610633578063a672990c14610652578063a9059cbb14610671575f80fd5b80638366e79a1461055e5780638da5cb5b1461057d578063924de9b71461059a57806395d89b41146105b957806399168df1146105cd575f80fd5b806339509351116101d65780636ebcf6071161019b5780636ebcf6071461049957806370a08231146104c4578063715018a6146104f85780637571336a1461050c57806376aabef41461052b578063811e4a3d1461053f575f80fd5b806339509351146103fb57806349bd5a5e1461041a57806364b0f32a1461044d578063675b51c5146104615780636ddd17131461047a575f80fd5b80631694505e116102275780631694505e1461032e57806318160ddd1461037957806323b872dd1461039757806327c8f835146103b65780632d2a6139146103cb578063313ce567146103e0575f80fd5b806306fdde031461026d578063082cf17714610297578063095ea7b3146102b85780630f7a4590146102e757806310d5de5314610300575f80fd5b3661026957005b5f80fd5b348015610278575f80fd5b506102816107f0565b60405161028e9190612146565b60405180910390f35b3480156102a2575f80fd5b506102b66102b1366004612191565b610880565b005b3480156102c3575f80fd5b506102d76102d23660046121bc565b610909565b604051901515815260200161028e565b3480156102f2575f80fd5b506019546102d79060ff1681565b34801561030b575f80fd5b506102d761031a3660046121e6565b60126020525f908152604090205460ff1681565b348015610339575f80fd5b506103617f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161028e565b348015610384575f80fd5b506002545b60405190815260200161028e565b3480156103a2575f80fd5b506102d76103b1366004612201565b61091f565b3480156103c1575f80fd5b5061036161dead81565b3480156103d6575f80fd5b50610389601a5481565b3480156103eb575f80fd5b506040516012815260200161028e565b348015610406575f80fd5b506102d76104153660046121bc565b6109c7565b348015610425575f80fd5b506103617f000000000000000000000000000000000000000000000000000000000000000081565b348015610458575f80fd5b506102d7610a02565b34801561046c575f80fd5b506009546102d79060ff1681565b348015610485575f80fd5b506009546102d79062010000900460ff1681565b3480156104a4575f80fd5b506103896104b33660046121e6565b60146020525f908152604090205481565b3480156104cf575f80fd5b506103896104de3660046121e6565b6001600160a01b03165f9081526020819052604090205490565b348015610503575f80fd5b506102b6610a3e565b348015610517575f80fd5b506102b661052636600461224e565b610a73565b348015610536575f80fd5b506102b6610ac7565b34801561054a575f80fd5b50610361610559366004612191565b610b04565b348015610569575f80fd5b506102d7610578366004612281565b610b2c565b348015610588575f80fd5b506005546001600160a01b0316610361565b3480156105a5575f80fd5b506102b66105b43660046122b8565b610d0b565b3480156105c4575f80fd5b50610281610d51565b3480156105d8575f80fd5b50610389600f5481565b3480156105ed575f80fd5b506102b66105fc36600461224e565b610d60565b34801561060c575f80fd5b506009546102d790610100900460ff1681565b34801561062a575f80fd5b506102d7610de9565b34801561063e575f80fd5b506102d761064d3660046121bc565b610e02565b34801561065d575f80fd5b506102b661066c36600461224e565b610e9a565b34801561067c575f80fd5b506102d761068b3660046121bc565b610f01565b34801561069b575f80fd5b506102d76106aa3660046121e6565b60136020525f908152604090205460ff1681565b3480156106c9575f80fd5b506103616106d8366004612191565b610f0d565b3480156106e8575f80fd5b506102b6610f1c565b3480156106fc575f80fd5b506102b661070b36600461224e565b61111e565b34801561071b575f80fd5b5061038960065481565b348015610730575f80fd5b506102d761073f366004612191565b61119f565b34801561074f575f80fd5b5061038961075e366004612281565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610793575f80fd5b5061038960075481565b3480156107a8575f80fd5b506102b66107b73660046121e6565b6112f5565b3480156107c7575f80fd5b5061038960085481565b3480156107dc575f80fd5b506102b66107eb3660046122d1565b611390565b6060600380546107ff906122f1565b80601f016020809104026020016040519081016040528092919081815260200182805461082b906122f1565b80156108765780601f1061084d57610100808354040283529160200191610876565b820191905f5260205f20905b81548152906001019060200180831161085957829003601f168201915b5050505050905090565b6005546001600160a01b031633146108b35760405162461bcd60e51b81526004016108aa90612329565b60405180910390fd5b6105dc81106109045760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f742073657420616e20756e7265616c697374696320676f616c000060448201526064016108aa565b601a55565b5f610915338484611415565b5060015b92915050565b5f61092b848484611538565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156109af5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108aa565b6109bc8533858403611415565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109159185906109fd908690612372565b611415565b6005545f906001600160a01b03163314610a2e5760405162461bcd60e51b81526004016108aa90612329565b506009805460ff19169055600190565b6005546001600160a01b03163314610a685760405162461bcd60e51b81526004016108aa90612329565b610a715f611c11565b565b6005546001600160a01b03163314610a9d5760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610af15760405162461bcd60e51b81526004016108aa90612329565b6009805462ffff00191662010100179055565b60178181548110610b13575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005545f906001600160a01b03163314610b585760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b038316610bae5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016108aa565b306001600160a01b03841603610c065760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e730000000060448201526064016108aa565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6e9190612385565b9050826001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610cb8576040519150601f19603f3d011682016040523d82523d5f602084013e610cbd565b606091505b5050604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314610d355760405162461bcd60e51b81526004016108aa90612329565b60098054911515620100000262ff000019909216919091179055565b6060600480546107ff906122f1565b6005546001600160a01b03163314610d8a5760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b0382165f81815260156020908152604091829020805460ff191685151590811790915591519182527f590a1cbcb70ed170a155921dd94b9bdef584d7a7e4a7c0a811ea3c9bef823e0691015b60405180910390a25050565b601a546017545f911015610dfd5750600190565b505f90565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610e835760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108aa565b610e903385858403611415565b5060019392505050565b6005546001600160a01b03163314610ec45760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b039091165f908152601260209081526040808320805494151560ff19958616811790915560109092529091208054909216179055565b5f610915338484611538565b60188181548110610b13575f80fd5b610f24610de9565b610f705760405162461bcd60e51b815260206004820152601860248201527f476f616c206861736e2774206265656e206d657420796574000000000000000060448201526064016108aa565b5f5b60175481101561106857600f5460145f60178481548110610f9557610f9561239c565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411801590611001575060165f60178381548110610fd857610fd861239c565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205460ff16155b156110565760186017828154811061101b5761101b61239c565b5f9182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b80611060816123b0565b915050610f72565b504715611113576018545f908161107f4783611c62565b90505f5b60185481101561110e57601881815481106110a0576110a061239c565b5f9182526020822001546040516001600160a01b039091169184919081818185875af1925050503d805f81146110f1576040519150601f19603f3d011682016040523d82523d5f602084013e6110f6565b606091505b50909450819050611106816123b0565b915050611083565b505050505b5f600a819055600b55565b6005546001600160a01b031633146111485760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610ddd565b6005545f906001600160a01b031633146111cb5760405162461bcd60e51b81526004016108aa90612329565b620186a06111d860025490565b6111e39060016123c8565b6111ed91906123df565b82101561125a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108aa565b6103e861126660025490565b6112719060056123c8565b61127b91906123df565b8211156112e75760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108aa565b50600781905560015b919050565b6005546001600160a01b0316331461131f5760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b0381166113845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108aa565b61138d81611c11565b50565b6005546001600160a01b031633146113ba5760405162461bcd60e51b81526004016108aa90612329565b80826113c560025490565b6113cf91906123c8565b6113d991906123df565b600f8190556040519081527fe4b0e310794dc792f96a44832f8c9ad0fbb46d83337220f2baf52b1a9fcf09179060200160405180910390a15050565b6001600160a01b0383166114775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108aa565b6001600160a01b0382166114d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108aa565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661155e5760405162461bcd60e51b81526004016108aa906123fe565b6001600160a01b0382166115845760405162461bcd60e51b81526004016108aa90612443565b805f0361159b5761159683835f611c74565b505050565b600954439060ff161561190a576005546001600160a01b038581169116148015906115d457506005546001600160a01b03848116911614155b80156115e857506001600160a01b03831615155b80156115ff57506001600160a01b03831661dead14155b80156116155750600554600160a01b900460ff16155b1561190a57600954610100900460ff166116ab576001600160a01b0384165f9081526010602052604090205460ff168061166657506001600160a01b0383165f9081526010602052604090205460ff165b6116ab5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108aa565b6001600160a01b0384165f9081526013602052604090205460ff1680156116ea57506001600160a01b0383165f9081526012602052604090205460ff16155b156117cd5760065482111561175f5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108aa565b6008546001600160a01b0384165f908152602081905260409020546117849084612372565b11156117c85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108aa565b61190a565b6001600160a01b0383165f9081526013602052604090205460ff16801561180c57506001600160a01b0384165f9081526012602052604090205460ff16155b15611882576006548211156117c85760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016108aa565b6001600160a01b0383165f9081526012602052604090205460ff1661190a576008546001600160a01b0384165f908152602081905260409020546118c69084612372565b111561190a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108aa565b305f9081526020819052604090205460075481108015908190611935575060095462010000900460ff165b801561194b5750600554600160a01b900460ff16155b801561196457505f838152601160205260409020546002115b801561198857506001600160a01b0386165f9081526013602052604090205460ff16155b80156119ac57506001600160a01b0386165f9081526010602052604090205460ff16155b80156119d057506001600160a01b0385165f9081526010602052604090205460ff16155b15611a1d576005805460ff60a01b1916600160a01b1790556119f0611dc7565b5f8381526011602052604081208054909190611a0b906123b0565b909155506005805460ff60a01b191690555b6005546001600160a01b0387165f9081526010602052604090205460ff600160a01b909204821615911680611a6957506001600160a01b0386165f9081526010602052604090205460ff165b15611a7157505f5b5f8115611bfc57600a54600c55600b54600d556001600160a01b0387165f9081526013602052604090205460ff168015611aac57505f600d54115b15611ad857611ad16064611acb600d5489611e6b90919063ffffffff16565b90611c62565b9050611b22565b6001600160a01b0388165f9081526013602052604090205460ff168015611b0057505f600c54115b15611b2257611b1f6064611acb600c5489611e6b90919063ffffffff16565b90505b8015611b3357611b33883083611c74565b611b3d8187612486565b6001600160a01b0389165f9081526013602052604090205490965060ff16611b9a576001600160a01b0388165f90815260146020526040902054611b819087611e76565b6001600160a01b0389165f908152601460205260409020555b6001600160a01b0387165f9081526013602052604090205460ff16611bfc576001600160a01b0387165f90815260146020526040902054611bdb9087611e81565b6001600160a01b0388165f90815260146020526040902055611bfc87611e8c565b611c07888888611c74565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f611c6d82846123df565b9392505050565b6001600160a01b038316611c9a5760405162461bcd60e51b81526004016108aa906123fe565b6001600160a01b038216611cc05760405162461bcd60e51b81526004016108aa90612443565b6001600160a01b0383165f9081526020819052604090205481811015611d375760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108aa565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611d6d908490612372565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611db991815260200190565b60405180910390a350505050565b305f9081526020819052604081205490819003611de15750565b600754611def9060146123c8565b811115611e0757600754611e049060146123c8565b90505b8047611e1282611f32565b5f611e1d8247612486565b90505f611e2b826005611c62565b600e546040519192506001600160a01b03169082156108fc029083905f818181858888f19350505050158015611e63573d5f803e3d5ffd5b505050505050565b5f611c6d82846123c8565b5f611c6d8284612486565b5f611c6d8284612372565b611e95816120e0565b158015611eba57506001600160a01b0381165f9081526013602052604090205460ff16155b8015611ede57506001600160a01b0381165f9081526010602052604090205460ff16155b1561138d57601780546001810182555f919091527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b0383166001600160a01b031990911617905550565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f6557611f6561239c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120059190612499565b816001815181106120185761201861239c565b60200260200101906001600160a01b031690816001600160a01b031681525050612063307f000000000000000000000000000000000000000000000000000000000000000084611415565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906120b79085905f908690309042906004016124b4565b5f604051808303815f87803b1580156120ce575f80fd5b505af1158015611e63573d5f803e3d5ffd5b5f805b60175481101561213e57826001600160a01b03166017828154811061210a5761210a61239c565b5f918252602090912001546001600160a01b03160361212c5750600192915050565b80612136816123b0565b9150506120e3565b505f92915050565b5f6020808352835180828501525f5b8181101561217157858101830151858201604001528201612155565b505f604082860101526040601f19601f8301168501019250505092915050565b5f602082840312156121a1575f80fd5b5035919050565b6001600160a01b038116811461138d575f80fd5b5f80604083850312156121cd575f80fd5b82356121d8816121a8565b946020939093013593505050565b5f602082840312156121f6575f80fd5b8135611c6d816121a8565b5f805f60608486031215612213575f80fd5b833561221e816121a8565b9250602084013561222e816121a8565b929592945050506040919091013590565b803580151581146112f0575f80fd5b5f806040838503121561225f575f80fd5b823561226a816121a8565b91506122786020840161223f565b90509250929050565b5f8060408385031215612292575f80fd5b823561229d816121a8565b915060208301356122ad816121a8565b809150509250929050565b5f602082840312156122c8575f80fd5b611c6d8261223f565b5f80604083850312156122e2575f80fd5b50508035926020909101359150565b600181811c9082168061230557607f821691505b60208210810361232357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109195761091961235e565b5f60208284031215612395575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f600182016123c1576123c161235e565b5060010190565b80820281158282048414176109195761091961235e565b5f826123f957634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109195761091961235e565b5f602082840312156124a9575f80fd5b8151611c6d816121a8565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156125025784516001600160a01b0316835293830193918301916001016124dd565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122063e3699ebf11a9c157fab5a67e2d856b5f18341efa1beb420cb0b49e23ec2d2a64736f6c634300081500334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x608060405260043610610262575f3560e01c80638366e79a1161013f578063b62496f5116100b3578063d257b34f11610078578063d257b34f14610725578063dd62ed3e14610744578063e2f4560514610788578063f2fde38b1461079d578063f8b45b05146107bc578063fd0a1cd9146107d1575f80fd5b8063b62496f514610690578063bef8255a146106be578063bf9e03c7146106dd578063c0246668146106f1578063c8c8ebe414610710575f80fd5b80639b6b5499116101045780639b6b5499146105e25780639f11853614610601578063a29337cd1461061f578063a457c2d714610633578063a672990c14610652578063a9059cbb14610671575f80fd5b80638366e79a1461055e5780638da5cb5b1461057d578063924de9b71461059a57806395d89b41146105b957806399168df1146105cd575f80fd5b806339509351116101d65780636ebcf6071161019b5780636ebcf6071461049957806370a08231146104c4578063715018a6146104f85780637571336a1461050c57806376aabef41461052b578063811e4a3d1461053f575f80fd5b806339509351146103fb57806349bd5a5e1461041a57806364b0f32a1461044d578063675b51c5146104615780636ddd17131461047a575f80fd5b80631694505e116102275780631694505e1461032e57806318160ddd1461037957806323b872dd1461039757806327c8f835146103b65780632d2a6139146103cb578063313ce567146103e0575f80fd5b806306fdde031461026d578063082cf17714610297578063095ea7b3146102b85780630f7a4590146102e757806310d5de5314610300575f80fd5b3661026957005b5f80fd5b348015610278575f80fd5b506102816107f0565b60405161028e9190612146565b60405180910390f35b3480156102a2575f80fd5b506102b66102b1366004612191565b610880565b005b3480156102c3575f80fd5b506102d76102d23660046121bc565b610909565b604051901515815260200161028e565b3480156102f2575f80fd5b506019546102d79060ff1681565b34801561030b575f80fd5b506102d761031a3660046121e6565b60126020525f908152604090205460ff1681565b348015610339575f80fd5b506103617f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b03909116815260200161028e565b348015610384575f80fd5b506002545b60405190815260200161028e565b3480156103a2575f80fd5b506102d76103b1366004612201565b61091f565b3480156103c1575f80fd5b5061036161dead81565b3480156103d6575f80fd5b50610389601a5481565b3480156103eb575f80fd5b506040516012815260200161028e565b348015610406575f80fd5b506102d76104153660046121bc565b6109c7565b348015610425575f80fd5b506103617f0000000000000000000000004adf4c9b6d178ddce2961ae327da4edc5345f83f81565b348015610458575f80fd5b506102d7610a02565b34801561046c575f80fd5b506009546102d79060ff1681565b348015610485575f80fd5b506009546102d79062010000900460ff1681565b3480156104a4575f80fd5b506103896104b33660046121e6565b60146020525f908152604090205481565b3480156104cf575f80fd5b506103896104de3660046121e6565b6001600160a01b03165f9081526020819052604090205490565b348015610503575f80fd5b506102b6610a3e565b348015610517575f80fd5b506102b661052636600461224e565b610a73565b348015610536575f80fd5b506102b6610ac7565b34801561054a575f80fd5b50610361610559366004612191565b610b04565b348015610569575f80fd5b506102d7610578366004612281565b610b2c565b348015610588575f80fd5b506005546001600160a01b0316610361565b3480156105a5575f80fd5b506102b66105b43660046122b8565b610d0b565b3480156105c4575f80fd5b50610281610d51565b3480156105d8575f80fd5b50610389600f5481565b3480156105ed575f80fd5b506102b66105fc36600461224e565b610d60565b34801561060c575f80fd5b506009546102d790610100900460ff1681565b34801561062a575f80fd5b506102d7610de9565b34801561063e575f80fd5b506102d761064d3660046121bc565b610e02565b34801561065d575f80fd5b506102b661066c36600461224e565b610e9a565b34801561067c575f80fd5b506102d761068b3660046121bc565b610f01565b34801561069b575f80fd5b506102d76106aa3660046121e6565b60136020525f908152604090205460ff1681565b3480156106c9575f80fd5b506103616106d8366004612191565b610f0d565b3480156106e8575f80fd5b506102b6610f1c565b3480156106fc575f80fd5b506102b661070b36600461224e565b61111e565b34801561071b575f80fd5b5061038960065481565b348015610730575f80fd5b506102d761073f366004612191565b61119f565b34801561074f575f80fd5b5061038961075e366004612281565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b348015610793575f80fd5b5061038960075481565b3480156107a8575f80fd5b506102b66107b73660046121e6565b6112f5565b3480156107c7575f80fd5b5061038960085481565b3480156107dc575f80fd5b506102b66107eb3660046122d1565b611390565b6060600380546107ff906122f1565b80601f016020809104026020016040519081016040528092919081815260200182805461082b906122f1565b80156108765780601f1061084d57610100808354040283529160200191610876565b820191905f5260205f20905b81548152906001019060200180831161085957829003601f168201915b5050505050905090565b6005546001600160a01b031633146108b35760405162461bcd60e51b81526004016108aa90612329565b60405180910390fd5b6105dc81106109045760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f742073657420616e20756e7265616c697374696320676f616c000060448201526064016108aa565b601a55565b5f610915338484611415565b5060015b92915050565b5f61092b848484611538565b6001600160a01b0384165f908152600160209081526040808320338452909152902054828110156109af5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108aa565b6109bc8533858403611415565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109159185906109fd908690612372565b611415565b6005545f906001600160a01b03163314610a2e5760405162461bcd60e51b81526004016108aa90612329565b506009805460ff19169055600190565b6005546001600160a01b03163314610a685760405162461bcd60e51b81526004016108aa90612329565b610a715f611c11565b565b6005546001600160a01b03163314610a9d5760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610af15760405162461bcd60e51b81526004016108aa90612329565b6009805462ffff00191662010100179055565b60178181548110610b13575f80fd5b5f918252602090912001546001600160a01b0316905081565b6005545f906001600160a01b03163314610b585760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b038316610bae5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f74206265203000000000000060448201526064016108aa565b306001600160a01b03841603610c065760405162461bcd60e51b815260206004820152601c60248201527f43616e2774207769746864726177206e617469766520746f6b656e730000000060448201526064016108aa565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015610c4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6e9190612385565b9050826001600160a01b0316476040515f6040518083038185875af1925050503d805f8114610cb8576040519150601f19603f3d011682016040523d82523d5f602084013e610cbd565b606091505b5050604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b03163314610d355760405162461bcd60e51b81526004016108aa90612329565b60098054911515620100000262ff000019909216919091179055565b6060600480546107ff906122f1565b6005546001600160a01b03163314610d8a5760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b0382165f81815260156020908152604091829020805460ff191685151590811790915591519182527f590a1cbcb70ed170a155921dd94b9bdef584d7a7e4a7c0a811ea3c9bef823e0691015b60405180910390a25050565b601a546017545f911015610dfd5750600190565b505f90565b335f9081526001602090815260408083206001600160a01b038616845290915281205482811015610e835760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108aa565b610e903385858403611415565b5060019392505050565b6005546001600160a01b03163314610ec45760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b039091165f908152601260209081526040808320805494151560ff19958616811790915560109092529091208054909216179055565b5f610915338484611538565b60188181548110610b13575f80fd5b610f24610de9565b610f705760405162461bcd60e51b815260206004820152601860248201527f476f616c206861736e2774206265656e206d657420796574000000000000000060448201526064016108aa565b5f5b60175481101561106857600f5460145f60178481548110610f9557610f9561239c565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205411801590611001575060165f60178381548110610fd857610fd861239c565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205460ff16155b156110565760186017828154811061101b5761101b61239c565b5f9182526020808320909101548354600181018555938352912090910180546001600160a01b0319166001600160a01b039092169190911790555b80611060816123b0565b915050610f72565b504715611113576018545f908161107f4783611c62565b90505f5b60185481101561110e57601881815481106110a0576110a061239c565b5f9182526020822001546040516001600160a01b039091169184919081818185875af1925050503d805f81146110f1576040519150601f19603f3d011682016040523d82523d5f602084013e6110f6565b606091505b50909450819050611106816123b0565b915050611083565b505050505b5f600a819055600b55565b6005546001600160a01b031633146111485760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610ddd565b6005545f906001600160a01b031633146111cb5760405162461bcd60e51b81526004016108aa90612329565b620186a06111d860025490565b6111e39060016123c8565b6111ed91906123df565b82101561125a5760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b60648201526084016108aa565b6103e861126660025490565b6112719060056123c8565b61127b91906123df565b8211156112e75760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b60648201526084016108aa565b50600781905560015b919050565b6005546001600160a01b0316331461131f5760405162461bcd60e51b81526004016108aa90612329565b6001600160a01b0381166113845760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108aa565b61138d81611c11565b50565b6005546001600160a01b031633146113ba5760405162461bcd60e51b81526004016108aa90612329565b80826113c560025490565b6113cf91906123c8565b6113d991906123df565b600f8190556040519081527fe4b0e310794dc792f96a44832f8c9ad0fbb46d83337220f2baf52b1a9fcf09179060200160405180910390a15050565b6001600160a01b0383166114775760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108aa565b6001600160a01b0382166114d85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108aa565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661155e5760405162461bcd60e51b81526004016108aa906123fe565b6001600160a01b0382166115845760405162461bcd60e51b81526004016108aa90612443565b805f0361159b5761159683835f611c74565b505050565b600954439060ff161561190a576005546001600160a01b038581169116148015906115d457506005546001600160a01b03848116911614155b80156115e857506001600160a01b03831615155b80156115ff57506001600160a01b03831661dead14155b80156116155750600554600160a01b900460ff16155b1561190a57600954610100900460ff166116ab576001600160a01b0384165f9081526010602052604090205460ff168061166657506001600160a01b0383165f9081526010602052604090205460ff165b6116ab5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108aa565b6001600160a01b0384165f9081526013602052604090205460ff1680156116ea57506001600160a01b0383165f9081526012602052604090205460ff16155b156117cd5760065482111561175f5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b60648201526084016108aa565b6008546001600160a01b0384165f908152602081905260409020546117849084612372565b11156117c85760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108aa565b61190a565b6001600160a01b0383165f9081526013602052604090205460ff16801561180c57506001600160a01b0384165f9081526012602052604090205460ff16155b15611882576006548211156117c85760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b60648201526084016108aa565b6001600160a01b0383165f9081526012602052604090205460ff1661190a576008546001600160a01b0384165f908152602081905260409020546118c69084612372565b111561190a5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108aa565b305f9081526020819052604090205460075481108015908190611935575060095462010000900460ff165b801561194b5750600554600160a01b900460ff16155b801561196457505f838152601160205260409020546002115b801561198857506001600160a01b0386165f9081526013602052604090205460ff16155b80156119ac57506001600160a01b0386165f9081526010602052604090205460ff16155b80156119d057506001600160a01b0385165f9081526010602052604090205460ff16155b15611a1d576005805460ff60a01b1916600160a01b1790556119f0611dc7565b5f8381526011602052604081208054909190611a0b906123b0565b909155506005805460ff60a01b191690555b6005546001600160a01b0387165f9081526010602052604090205460ff600160a01b909204821615911680611a6957506001600160a01b0386165f9081526010602052604090205460ff165b15611a7157505f5b5f8115611bfc57600a54600c55600b54600d556001600160a01b0387165f9081526013602052604090205460ff168015611aac57505f600d54115b15611ad857611ad16064611acb600d5489611e6b90919063ffffffff16565b90611c62565b9050611b22565b6001600160a01b0388165f9081526013602052604090205460ff168015611b0057505f600c54115b15611b2257611b1f6064611acb600c5489611e6b90919063ffffffff16565b90505b8015611b3357611b33883083611c74565b611b3d8187612486565b6001600160a01b0389165f9081526013602052604090205490965060ff16611b9a576001600160a01b0388165f90815260146020526040902054611b819087611e76565b6001600160a01b0389165f908152601460205260409020555b6001600160a01b0387165f9081526013602052604090205460ff16611bfc576001600160a01b0387165f90815260146020526040902054611bdb9087611e81565b6001600160a01b0388165f90815260146020526040902055611bfc87611e8c565b611c07888888611c74565b5050505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f611c6d82846123df565b9392505050565b6001600160a01b038316611c9a5760405162461bcd60e51b81526004016108aa906123fe565b6001600160a01b038216611cc05760405162461bcd60e51b81526004016108aa90612443565b6001600160a01b0383165f9081526020819052604090205481811015611d375760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108aa565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611d6d908490612372565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611db991815260200190565b60405180910390a350505050565b305f9081526020819052604081205490819003611de15750565b600754611def9060146123c8565b811115611e0757600754611e049060146123c8565b90505b8047611e1282611f32565b5f611e1d8247612486565b90505f611e2b826005611c62565b600e546040519192506001600160a01b03169082156108fc029083905f818181858888f19350505050158015611e63573d5f803e3d5ffd5b505050505050565b5f611c6d82846123c8565b5f611c6d8284612486565b5f611c6d8284612372565b611e95816120e0565b158015611eba57506001600160a01b0381165f9081526013602052604090205460ff16155b8015611ede57506001600160a01b0381165f9081526010602052604090205460ff16155b1561138d57601780546001810182555f919091527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b0383166001600160a01b031990911617905550565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611f6557611f6561239c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120059190612499565b816001815181106120185761201861239c565b60200260200101906001600160a01b031690816001600160a01b031681525050612063307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611415565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906120b79085905f908690309042906004016124b4565b5f604051808303815f87803b1580156120ce575f80fd5b505af1158015611e63573d5f803e3d5ffd5b5f805b60175481101561213e57826001600160a01b03166017828154811061210a5761210a61239c565b5f918252602090912001546001600160a01b03160361212c5750600192915050565b80612136816123b0565b9150506120e3565b505f92915050565b5f6020808352835180828501525f5b8181101561217157858101830151858201604001528201612155565b505f604082860101526040601f19601f8301168501019250505092915050565b5f602082840312156121a1575f80fd5b5035919050565b6001600160a01b038116811461138d575f80fd5b5f80604083850312156121cd575f80fd5b82356121d8816121a8565b946020939093013593505050565b5f602082840312156121f6575f80fd5b8135611c6d816121a8565b5f805f60608486031215612213575f80fd5b833561221e816121a8565b9250602084013561222e816121a8565b929592945050506040919091013590565b803580151581146112f0575f80fd5b5f806040838503121561225f575f80fd5b823561226a816121a8565b91506122786020840161223f565b90509250929050565b5f8060408385031215612292575f80fd5b823561229d816121a8565b915060208301356122ad816121a8565b809150509250929050565b5f602082840312156122c8575f80fd5b611c6d8261223f565b5f80604083850312156122e2575f80fd5b50508035926020909101359150565b600181811c9082168061230557607f821691505b60208210810361232357634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156109195761091961235e565b5f60208284031215612395575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f600182016123c1576123c161235e565b5060010190565b80820281158282048414176109195761091961235e565b5f826123f957634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b818103818111156109195761091961235e565b5f602082840312156124a9575f80fd5b8151611c6d816121a8565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156125025784516001600160a01b0316835293830193918301916001016124dd565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122063e3699ebf11a9c157fab5a67e2d856b5f18341efa1beb420cb0b49e23ec2d2a64736f6c63430008150033

Deployed Bytecode Sourcemap

15459:13443:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2898:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26988:182;;;;;;;;;;-1:-1:-1;26988:182:0;;;;;:::i;:::-;;:::i;:::-;;3878:194;;;;;;;;;;-1:-1:-1;3878:194:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;3878:194:0;1208:187:1;16712:32:0;;;;;;;;;;-1:-1:-1;16712:32:0;;;;;;;;16343:63;;;;;;;;;;-1:-1:-1;16343:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15540:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1843:32:1;;;1825:51;;1813:2;1798:18;15540:51:0;1652:230:1;3219:108:0;;;;;;;;;;-1:-1:-1;3307:12:0;;3219:108;;;2033:25:1;;;2021:2;2006:18;3219:108:0;1887:177:1;4080:529:0;;;;;;;;;;-1:-1:-1;4080:529:0;;;;;:::i;:::-;;:::i;15643:53::-;;;;;;;;;;;;15689:6;15643:53;;16751:37;;;;;;;;;;;;;;;;3118:93;;;;;;;;;;-1:-1:-1;3118:93:0;;3201:2;2880:36:1;;2868:2;2853:18;3118:93:0;2738:184:1;4617:290:0;;;;;;;;;;-1:-1:-1;4617:290:0;;;;;:::i;:::-;;:::i;15598:38::-;;;;;;;;;;;;;;;19030:128;;;;;;;;;;;;;:::i;15850:38::-;;;;;;;;;;-1:-1:-1;15850:38:0;;;;;;;;15931:31;;;;;;;;;;-1:-1:-1;15931:31:0;;;;;;;;;;;16477:45;;;;;;;;;;-1:-1:-1;16477:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;3335:143;;;;;;;;;;-1:-1:-1;3335:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;3452:18:0;3425:7;3452:18;;;;;;;;;;;;3335:143;903:103;;;;;;;;;;;;;:::i;19856:169::-;;;;;;;;;;-1:-1:-1;19856:169:0;;;;;:::i;:::-;;:::i;18915:107::-;;;;;;;;;;;;;:::i;16634:36::-;;;;;;;;;;-1:-1:-1;16634:36:0;;;;;:::i;:::-;;:::i;20602:507::-;;;;;;;;;;-1:-1:-1;20602:507:0;;;;;:::i;:::-;;:::i;680:87::-;;;;;;;;;;-1:-1:-1;753:6:0;;-1:-1:-1;;;;;753:6:0;680:87;;20121:100;;;;;;;;;;-1:-1:-1;20121:100:0;;;;;:::i;:::-;;:::i;3006:104::-;;;;;;;;;;;;;:::i;16179:42::-;;;;;;;;;;;;;;;;20420:174;;;;;;;;;;-1:-1:-1;20420:174:0;;;;;:::i;:::-;;:::i;15895:29::-;;;;;;;;;;-1:-1:-1;15895:29:0;;;;;;;;;;;27178:196;;;;;;;;;;;;;:::i;4915:475::-;;;;;;;;;;-1:-1:-1;4915:475:0;;;;;:::i;:::-;;:::i;19655:193::-;;;;;;;;;;-1:-1:-1;19655:193:0;;;;;:::i;:::-;;:::i;3486:200::-;;;;;;;;;;-1:-1:-1;3486:200:0;;;;;:::i;:::-;;:::i;16413:57::-;;;;;;;;;;-1:-1:-1;16413:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16677:28;;;;;;;;;;-1:-1:-1;16677:28:0;;;;;:::i;:::-;;:::i;27382:1010::-;;;;;;;;;;;;;:::i;20229:182::-;;;;;;;;;;-1:-1:-1;20229:182:0;;;;;:::i;:::-;;:::i;15735:35::-;;;;;;;;;;;;;;;;19166:481;;;;;;;;;;-1:-1:-1;19166:481:0;;;;;:::i;:::-;;:::i;3694:176::-;;;;;;;;;;-1:-1:-1;3694:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;3835:18:0;;;3808:7;3835:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3694:176;15777:33;;;;;;;;;;;;;;;;1014:238;;;;;;;;;;-1:-1:-1;1014:238:0;;;;;:::i;:::-;;:::i;15817:24::-;;;;;;;;;;;;;;;;21312:254;;;;;;;;;;-1:-1:-1;21312:254:0;;;;;:::i;:::-;;:::i;2898:100::-;2952:13;2985:5;2978:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2898:100;:::o;26988:182::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;;;;;;;;;27086:4:::1;27075:8;:15;27067:58;;;::::0;-1:-1:-1;;;27067:58:0;;5191:2:1;27067:58:0::1;::::0;::::1;5173:21:1::0;5230:2;5210:18;;;5203:30;5269:32;5249:18;;;5242:60;5319:18;;27067:58:0::1;4989:354:1::0;27067:58:0::1;27136:15;:26:::0;26988:182::o;3878:194::-;3986:4;4003:39;281:10;4026:7;4035:6;4003:8;:39::i;:::-;-1:-1:-1;4060:4:0;3878:194;;;;;:::o;4080:529::-;4220:4;4237:36;4247:6;4255:9;4266:6;4237:9;:36::i;:::-;-1:-1:-1;;;;;4313:19:0;;4286:24;4313:19;;;:11;:19;;;;;;;;281:10;4313:33;;;;;;;;4379:26;;;;4357:116;;;;-1:-1:-1;;;4357:116:0;;5550:2:1;4357:116:0;;;5532:21:1;5589:2;5569:18;;;5562:30;5628:34;5608:18;;;5601:62;-1:-1:-1;;;5679:18:1;;;5672:38;5727:19;;4357:116:0;5348:404:1;4357:116:0;4509:57;4518:6;281:10;4559:6;4540:16;:25;4509:8;:57::i;:::-;-1:-1:-1;4597:4:0;;4080:529;-1:-1:-1;;;;4080:529:0:o;4617:290::-;281:10;4730:4;4819:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4819:34:0;;;;;;;;;;4730:4;;4747:130;;4797:7;;4819:47;;4856:10;;4819:47;:::i;:::-;4747:8;:130::i;19030:128::-;753:6;;19084:4;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;-1:-1:-1;19101:19:0::1;:27:::0;;-1:-1:-1;;19101:27:0::1;::::0;;;19030:128;:::o;903:103::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;968:30:::1;995:1;968:18;:30::i;:::-;903:103::o:0;19856:169::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19971:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;19971:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19856:169::o;18915:107::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;18969:9:::1;:16:::0;;-1:-1:-1;;18996:18:0;;;;;18915:107::o;16634:36::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16634:36:0;;-1:-1:-1;16634:36:0;:::o;20602:507::-;753:6;;20716:15;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20757:20:0;::::1;20749:59;;;::::0;-1:-1:-1;;;20749:59:0;;6221:2:1;20749:59:0::1;::::0;::::1;6203:21:1::0;6260:2;6240:18;;;6233:30;6299:28;6279:18;;;6272:56;6345:18;;20749:59:0::1;6019:350:1::0;20749:59:0::1;20845:4;-1:-1:-1::0;;;;;20827:23:0;::::1;::::0;20819:64:::1;;;::::0;-1:-1:-1;;;20819:64:0;;6576:2:1;20819:64:0::1;::::0;::::1;6558:21:1::0;6615:2;6595:18;;;6588:30;6654;6634:18;;;6627:58;6702:18;;20819:64:0::1;6374:352:1::0;20819:64:0::1;20921:39;::::0;-1:-1:-1;;;20921:39:0;;20954:4:::1;20921:39;::::0;::::1;1825:51:1::0;20894:24:0::1;::::0;-1:-1:-1;;;;;20921:24:0;::::1;::::0;::::1;::::0;1798:18:1;;20921:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20894:66;;20996:3;-1:-1:-1::0;;;;;20988:17:0::1;21013:21;20988:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;21055:46:0::1;::::0;;-1:-1:-1;;;;;7322:32:1;;7304:51;;7386:2;7371:18;;7364:34;;;20971:68:0;;-1:-1:-1;21055:46:0::1;::::0;7277:18:1;21055:46:0::1;;;;;;;20738:371;20602:507:::0;;;;:::o;20121:100::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;20192:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;20192:21:0;;::::1;::::0;;;::::1;::::0;;20121:100::o;3006:104::-;3062:13;3095:7;3088:14;;;;;:::i;20420:174::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20503:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:35;;-1:-1:-1;;20503:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20554:32;;1348:41:1;;;20554:32:0::1;::::0;1321:18:1;20554:32:0::1;;;;;;;;20420:174:::0;;:::o;27178:196::-;27289:15;;27260:19;:26;27239:4;;-1:-1:-1;27256:88:0;;;-1:-1:-1;27328:4:0;;27178:196::o;27256:88::-;-1:-1:-1;27361:5:0;;27178:196::o;4915:475::-;281:10;5033:4;5077:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5077:34:0;;;;;;;;;;5144:35;;;;5122:122;;;;-1:-1:-1;;;5122:122:0;;7611:2:1;5122:122:0;;;7593:21:1;7650:2;7630:18;;;7623:30;7689:34;7669:18;;;7662:62;-1:-1:-1;;;7740:18:1;;;7733:35;7785:19;;5122:122:0;7409:401:1;5122:122:0;5280:67;281:10;5303:7;5331:15;5312:16;:34;5280:8;:67::i;:::-;-1:-1:-1;5378:4:0;;4915:475;-1:-1:-1;;;4915:475:0:o;19655:193::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19741:43:0;;::::1;;::::0;;;:31:::1;:43;::::0;;;;;;;:50;;;::::1;;-1:-1:-1::0;;19741:50:0;;::::1;::::0;::::1;::::0;;;19802:19:::1;:31:::0;;;;;;:38;;;;::::1;;::::0;;19655:193::o;3486:200::-;3597:4;3614:42;281:10;3638:9;3649:6;3614:9;:42::i;16677:28::-;;;;;;;;;;;;27382:1010;27457:30;:28;:30::i;:::-;27449:67;;;;-1:-1:-1;;;27449:67:0;;8017:2:1;27449:67:0;;;7999:21:1;8056:2;8036:18;;;8029:30;8095:26;8075:18;;;8068:54;8139:18;;27449:67:0;7815:348:1;27449:67:0;27532:6;27527:267;27543:19;:26;27540:29;;27527:267;;;27628:27;;27593:9;:33;27603:19;27623:1;27603:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27603:22:0;27593:33;;;;;;;;;;;;;:62;;;;:100;;;27660:9;:33;27670:19;27690:1;27670:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27670:22:0;27660:33;;;;;;;;;;;;;;;27659:34;27593:100;27589:194;;;27727:11;27744:19;27764:1;27744:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;27727:40;;27744:22;27727:40;;;;;;;;;;;;;;-1:-1:-1;;;;;;27727:40:0;-1:-1:-1;;;;;27744:22:0;;;27727:40;;;;;;27589:194;27570:3;;;;:::i;:::-;;;;27527:267;;;-1:-1:-1;27883:21:0;:25;27879:357;;27968:11;:18;27924:12;;;28029:35;28030:21;27968:18;28029:27;:35::i;:::-;28001:63;;28084:6;28079:146;28094:11;:18;28092:20;;28079:146;;;28159:11;28171:1;28159:14;;;;;;;;:::i;:::-;;;;;;;;;;28151:58;;-1:-1:-1;;;;;28159:14:0;;;;28187:17;;28151:58;;28159:14;28151:58;28187:17;28159:14;28151:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28137:72:0;;-1:-1:-1;28113:3:0;;-1:-1:-1;28113:3:0;;;:::i;:::-;;;;28079:146;;;;27909:327;;;27879:357;28347:1;28327:17;:21;;;28359:18;:22;27382:1010::o;20229:182::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20314:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;20314:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20369:34;;1348:41:1;;;20369:34:0::1;::::0;1321:18:1;20369:34:0::1;1208:187:1::0;19166:481:0;753:6;;19263:4;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;19337:6:::1;19316:13;3307:12:::0;;;3219:108;19316:13:::1;:17;::::0;19332:1:::1;19316:17;:::i;:::-;19315:28;;;;:::i;:::-;19302:9;:41;;19280:144;;;::::0;-1:-1:-1;;;19280:144:0;;9037:2:1;19280:144:0::1;::::0;::::1;9019:21:1::0;9076:2;9056:18;;;9049:30;9115:34;9095:18;;;9088:62;-1:-1:-1;;;9166:18:1;;;9159:51;9227:19;;19280:144:0::1;8835:417:1::0;19280:144:0::1;19492:4;19471:13;3307:12:::0;;;3219:108;19471:13:::1;:17;::::0;19487:1:::1;19471:17;:::i;:::-;19470:26;;;;:::i;:::-;19457:9;:39;;19435:141;;;::::0;-1:-1:-1;;;19435:141:0;;9459:2:1;19435:141:0::1;::::0;::::1;9441:21:1::0;9498:2;9478:18;;;9471:30;9537:34;9517:18;;;9510:62;-1:-1:-1;;;9588:18:1;;;9581:50;9648:19;;19435:141:0::1;9257:416:1::0;19435:141:0::1;-1:-1:-1::0;19587:18:0::1;:30:::0;;;19635:4:::1;886:1;19166:481:::0;;;:::o;1014:238::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1117:22:0;::::1;1095:110;;;::::0;-1:-1:-1;;;1095:110:0;;9880:2:1;1095:110:0::1;::::0;::::1;9862:21:1::0;9919:2;9899:18;;;9892:30;9958:34;9938:18;;;9931:62;-1:-1:-1;;;10009:18:1;;;10002:36;10055:19;;1095:110:0::1;9678:402:1::0;1095:110:0::1;1216:28;1235:8;1216:18;:28::i;:::-;1014:238:::0;:::o;21312:254::-;753:6;;-1:-1:-1;;;;;753:6:0;281:10;815:23;807:68;;;;-1:-1:-1;;;807:68:0;;;;;;;:::i;:::-;21481:8:::1;21467:10;21451:13;3307:12:::0;;;3219:108;21451:13:::1;:26;;;;:::i;:::-;21450:39;;;;:::i;:::-;21420:27;:69:::0;;;21505:53:::1;::::0;2033:25:1;;;21505:53:0::1;::::0;2021:2:1;2006:18;21505:53:0::1;;;;;;;21312:254:::0;;:::o;7182:380::-;-1:-1:-1;;;;;7318:19:0;;7310:68;;;;-1:-1:-1;;;7310:68:0;;10287:2:1;7310:68:0;;;10269:21:1;10326:2;10306:18;;;10299:30;10365:34;10345:18;;;10338:62;-1:-1:-1;;;10416:18:1;;;10409:34;10460:19;;7310:68:0;10085:400:1;7310:68:0;-1:-1:-1;;;;;7397:21:0;;7389:68;;;;-1:-1:-1;;;7389:68:0;;10692:2:1;7389:68:0;;;10674:21:1;10731:2;10711:18;;;10704:30;10770:34;10750:18;;;10743:62;-1:-1:-1;;;10821:18:1;;;10814:32;10863:19;;7389:68:0;10490:398:1;7389:68:0;-1:-1:-1;;;;;7470:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7522:32;;2033:25:1;;;7522:32:0;;2006:18:1;7522:32:0;;;;;;;7182:380;;;:::o;21576:4110::-;-1:-1:-1;;;;;21708:18:0;;21700:68;;;;-1:-1:-1;;;21700:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21787:16:0;;21779:64;;;;-1:-1:-1;;;21779:64:0;;;;;;;:::i;:::-;21860:6;21870:1;21860:11;21856:93;;21888:28;21904:4;21910:2;21914:1;21888:15;:28::i;:::-;21576:4110;;;:::o;21856:93::-;22009:19;;21980:12;;22009:19;;22005:1714;;;753:6;;-1:-1:-1;;;;;22067:15:0;;;753:6;;22067:15;;;;:49;;-1:-1:-1;753:6:0;;-1:-1:-1;;;;;22103:13:0;;;753:6;;22103:13;;22067:49;:86;;;;-1:-1:-1;;;;;;22137:16:0;;;;22067:86;:128;;;;-1:-1:-1;;;;;;22174:21:0;;22188:6;22174:21;;22067:128;:158;;;;-1:-1:-1;22217:8:0;;-1:-1:-1;;;22217:8:0;;;;22216:9;22067:158;22045:1663;;;22284:9;;;;;;;22279:219;;-1:-1:-1;;;;;22352:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;22381:23:0;;;;;;:19;:23;;;;;;;;22352:52;22318:160;;;;-1:-1:-1;;;22318:160:0;;11905:2:1;22318:160:0;;;11887:21:1;11944:2;11924:18;;;11917:30;-1:-1:-1;;;11963:18:1;;;11956:52;12025:18;;22318:160:0;11703:346:1;22318:160:0;-1:-1:-1;;;;;22572:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;22629:35:0;;;;;;:31;:35;;;;;;;;22628:36;22572:92;22546:1147;;;22751:20;;22741:6;:30;;22707:169;;;;-1:-1:-1;;;22707:169:0;;12256:2:1;22707:169:0;;;12238:21:1;12295:2;12275:18;;;12268:30;12334:34;12314:18;;;12307:62;-1:-1:-1;;;12385:18:1;;;12378:51;12446:19;;22707:169:0;12054:417:1;22707:169:0;22959:9;;-1:-1:-1;;;;;3452:18:0;;3425:7;3452:18;;;;;;;;;;;22933:22;;:6;:22;:::i;:::-;:35;;22899:140;;;;-1:-1:-1;;;22899:140:0;;12678:2:1;22899:140:0;;;12660:21:1;12717:2;12697:18;;;12690:30;-1:-1:-1;;;12736:18:1;;;12729:49;12795:18;;22899:140:0;12476:343:1;22899:140:0;22546:1147;;;-1:-1:-1;;;;;23137:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;23192:37:0;;;;;;:31;:37;;;;;;;;23191:38;23137:92;23111:582;;;23316:20;;23306:6;:30;;23272:170;;;;-1:-1:-1;;;23272:170:0;;13026:2:1;23272:170:0;;;13008:21:1;13065:2;13045:18;;;13038:30;13104:34;13084:18;;;13077:62;-1:-1:-1;;;13155:18:1;;;13148:52;13217:19;;23272:170:0;12824:418:1;23111:582:0;-1:-1:-1;;;;;23473:35:0;;;;;;:31;:35;;;;;;;;23468:225;;23593:9;;-1:-1:-1;;;;;3452:18:0;;3425:7;3452:18;;;;;;;;;;;23567:22;;:6;:22;:::i;:::-;:35;;23533:140;;;;-1:-1:-1;;;23533:140:0;;12678:2:1;23533:140:0;;;12660:21:1;12717:2;12697:18;;;12690:30;-1:-1:-1;;;12736:18:1;;;12729:49;12795:18;;23533:140:0;12476:343:1;23533:140:0;23780:4;23731:28;3452:18;;;;;;;;;;;23836;;23812:42;;;;;;;23885:35;;-1:-1:-1;23909:11:0;;;;;;;23885:35;:61;;;;-1:-1:-1;23938:8:0;;-1:-1:-1;;;23938:8:0;;;;23937:9;23885:61;:105;;;;-1:-1:-1;23964:21:0;;;;:11;:21;;;;;;23988:1;-1:-1:-1;23885:105:0;:154;;;;-1:-1:-1;;;;;;24008:31:0;;;;;;:25;:31;;;;;;;;24007:32;23885:154;:197;;;;-1:-1:-1;;;;;;24057:25:0;;;;;;:19;:25;;;;;;;;24056:26;23885:197;:238;;;;-1:-1:-1;;;;;;24100:23:0;;;;;;:19;:23;;;;;;;;24099:24;23885:238;23867:411;;;24150:8;:15;;-1:-1:-1;;;;24150:15:0;-1:-1:-1;;;24150:15:0;;;24180:17;:15;:17::i;:::-;24214:21;;;;:11;:21;;;;;24212:23;;24214:21;;;24212:23;;;:::i;:::-;;;;-1:-1:-1;24250:8:0;:16;;-1:-1:-1;;;;24250:16:0;;;23867:411;24306:8;;-1:-1:-1;;;;;24416:25:0;;24290:12;24416:25;;;:19;:25;;;;;;24306:8;-1:-1:-1;;;24306:8:0;;;;;24305:9;;24416:25;;:52;;-1:-1:-1;;;;;;24445:23:0;;;;;;:19;:23;;;;;;;;24416:52;24412:100;;;-1:-1:-1;24495:5:0;24412:100;24524:12;24629:7;24625:1010;;;24674:17;;24653:18;:38;24728:18;;24706:19;:40;-1:-1:-1;;;;;24789:29:0;;-1:-1:-1;24789:29:0;;;:25;:29;;;;;;;;:56;;;;;24844:1;24822:19;;:23;24789:56;24785:330;;;24873:40;24909:3;24873:31;24884:19;;24873:6;:10;;:31;;;;:::i;:::-;:35;;:40::i;:::-;24866:47;;24785:330;;;-1:-1:-1;;;;;24975:31:0;;;;;;:25;:31;;;;;;;;:57;;;;;25031:1;25010:18;;:22;24975:57;24971:144;;;25060:39;25095:3;25060:30;25071:18;;25060:6;:10;;:30;;;;:::i;:39::-;25053:46;;24971:144;25135:8;;25131:91;;25164:42;25180:4;25194;25201;25164:15;:42::i;:::-;25238:14;25248:4;25238:14;;:::i;:::-;-1:-1:-1;;;;;25298:31:0;;;;;;:25;:31;;;;;;25238:14;;-1:-1:-1;25298:31:0;;25293:118;;-1:-1:-1;;;;;25368:15:0;;;;;;:9;:15;;;;;;:27;;25388:6;25368:19;:27::i;:::-;-1:-1:-1;;;;;25350:15:0;;;;;;:9;:15;;;;;:45;25293:118;-1:-1:-1;;;;;25455:29:0;;;;;;:25;:29;;;;;;;;25450:160;;-1:-1:-1;;;;;25521:13:0;;;;;;:9;:13;;;;;;:25;;25539:6;25521:17;:25::i;:::-;-1:-1:-1;;;;;25505:13:0;;;;;;:9;:13;;;;;:41;25565:29;25515:2;25565:25;:29::i;:::-;25645:33;25661:4;25667:2;25671:6;25645:15;:33::i;:::-;21689:3997;;;;;21576:4110;;;:::o;1260:191::-;1353:6;;;-1:-1:-1;;;;;1370:17:0;;;-1:-1:-1;;;;;;1370:17:0;;;;;;;1403:40;;1353:6;;;1370:17;1353:6;;1403:40;;1334:16;;1403:40;1323:128;1260:191;:::o;9417:98::-;9475:7;9502:5;9506:1;9502;:5;:::i;:::-;9495:12;9417:98;-1:-1:-1;;;9417:98:0:o;5398:770::-;-1:-1:-1;;;;;5538:20:0;;5530:70;;;;-1:-1:-1;;;5530:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5619:23:0;;5611:71;;;;-1:-1:-1;;;5611:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5779:17:0;;5755:21;5779:17;;;;;;;;;;;5829:23;;;;5807:111;;;;-1:-1:-1;;;5807:111:0;;13582:2:1;5807:111:0;;;13564:21:1;13621:2;13601:18;;;13594:30;13660:34;13640:18;;;13633:62;-1:-1:-1;;;13711:18:1;;;13704:36;13757:19;;5807:111:0;13380:402:1;5807:111:0;-1:-1:-1;;;;;5954:17:0;;;:9;:17;;;;;;;;;;;5974:22;;;5954:42;;6018:20;;;;;;;;:30;;5990:6;;5954:9;6018:30;;5990:6;;6018:30;:::i;:::-;;;;;;;;6083:9;-1:-1:-1;;;;;6066:35:0;6075:6;-1:-1:-1;;;;;6066:35:0;;6094:6;6066:35;;;;2033:25:1;;2021:2;2006:18;;1887:177;6066:35:0;;;;;;;;5519:649;5398:770;;;:::o;26289:691::-;26379:4;26335:23;3452:18;;;;;;;;;;;;26400:20;;;26396:59;;26437:7;26289:691::o;26396:59::-;26487:18;;:23;;26508:2;26487:23;:::i;:::-;26469:15;:41;26465:115;;;26545:18;;:23;;26566:2;26545:23;:::i;:::-;26527:41;;26465:115;26619:15;26666:21;26771:36;26619:15;26771:16;:36::i;:::-;26818:19;26840:34;26864:10;26840:21;:34;:::i;:::-;26818:56;-1:-1:-1;26885:16:0;26904:18;26818:56;26920:1;26904:15;:18::i;:::-;26941:11;;26933:39;;26885:37;;-1:-1:-1;;;;;;26941:11:0;;26933:39;;;;;26885:37;;26941:11;26933:39;26941:11;26933:39;26885:37;26941:11;26933:39;;;;;;;;;;;;;;;;;;;;;26324:656;;;;;26289:691::o;9311:98::-;9369:7;9396:5;9400:1;9396;:5;:::i;9205:98::-;9263:7;9290:5;9294:1;9290;:5;:::i;9099:98::-;9157:7;9184:5;9188:1;9184;:5;:::i;28648:249::-;28724:32;28749:6;28724:24;:32::i;:::-;28723:33;:71;;;;-1:-1:-1;;;;;;28761:33:0;;;;;;:25;:33;;;;;;;;28760:34;28723:71;:103;;;;-1:-1:-1;;;;;;28799:27:0;;;;;;:19;:27;;;;;;;;28798:28;28723:103;28719:170;;;28844:19;:32;;;;;;;-1:-1:-1;28844:32:0;;;;;;;;-1:-1:-1;;;;;28844:32:0;;-1:-1:-1;;;;;;28844:32:0;;;;;;28648:249;:::o;25692:589::-;25842:16;;;25856:1;25842:16;;;;;;;;25818:21;;25842:16;;;;;;;;;;-1:-1:-1;25842:16:0;25818:40;;25887:4;25869;25874:1;25869:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;25869:23:0;;;-1:-1:-1;;;;;25869:23:0;;;;;25913:15;-1:-1:-1;;;;;25913:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25903:4;25908:1;25903:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;25903:32:0;;;-1:-1:-1;;;;;25903:32:0;;;;;25948:62;25965:4;25980:15;25998:11;25948:8;:62::i;:::-;26049:224;;-1:-1:-1;;;26049:224:0;;-1:-1:-1;;;;;26049:15:0;:66;;;;:224;;26130:11;;26156:1;;26200:4;;26227;;26247:15;;26049:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28400:240;28472:4;28493:6;28488:121;28504:19;:26;28501:29;;28488:121;;;28578:6;-1:-1:-1;;;;;28554:30:0;:19;28574:1;28554:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;28554:22:0;:30;28550:47;;-1:-1:-1;28593:4:0;;28400:240;-1:-1:-1;;28400:240:0:o;28550:47::-;28531:3;;;;:::i;:::-;;;;28488:121;;;-1:-1:-1;28626:5:0;;28400:240;-1:-1:-1;;28400:240:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:180::-;626:6;679:2;667:9;658:7;654:23;650:32;647:52;;;695:1;692;685:12;647:52;-1:-1:-1;718:23:1;;567:180;-1:-1:-1;567:180:1: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;1400:247::-;1459:6;1512:2;1500:9;1491:7;1487:23;1483:32;1480:52;;;1528:1;1525;1518:12;1480:52;1567:9;1554:23;1586:31;1611:5;1586:31;:::i;2069:456::-;2146:6;2154;2162;2215:2;2203:9;2194:7;2190:23;2186:32;2183:52;;;2231:1;2228;2221:12;2183:52;2270:9;2257:23;2289:31;2314:5;2289:31;:::i;:::-;2339:5;-1:-1:-1;2396:2:1;2381:18;;2368:32;2409:33;2368:32;2409:33;:::i;:::-;2069:456;;2461:7;;-1:-1:-1;;;2515:2:1;2500:18;;;;2487:32;;2069:456::o;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3092:315;3157:6;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;3273:9;3260:23;3292:31;3317:5;3292:31;:::i;:::-;3342:5;-1:-1:-1;3366:35:1;3397:2;3382:18;;3366:35;:::i;:::-;3356:45;;3092:315;;;;;:::o;3412:388::-;3480:6;3488;3541:2;3529:9;3520:7;3516:23;3512:32;3509:52;;;3557:1;3554;3547:12;3509:52;3596:9;3583:23;3615:31;3640:5;3615:31;:::i;:::-;3665:5;-1:-1:-1;3722:2:1;3707:18;;3694:32;3735:33;3694:32;3735:33;:::i;:::-;3787:7;3777:17;;;3412:388;;;;;:::o;3805:180::-;3861:6;3914:2;3902:9;3893:7;3889:23;3885:32;3882:52;;;3930:1;3927;3920:12;3882:52;3953:26;3969:9;3953:26;:::i;3990:248::-;4058:6;4066;4119:2;4107:9;4098:7;4094:23;4090:32;4087:52;;;4135:1;4132;4125:12;4087:52;-1:-1:-1;;4158:23:1;;;4228:2;4213:18;;;4200:32;;-1:-1:-1;3990:248:1:o;4243:380::-;4322:1;4318:12;;;;4365;;;4386:61;;4440:4;4432:6;4428:17;4418:27;;4386:61;4493:2;4485:6;4482:14;4462:18;4459:38;4456:161;;4539:10;4534:3;4530:20;4527:1;4520:31;4574:4;4571:1;4564:15;4602:4;4599:1;4592:15;4456:161;;4243:380;;;:::o;4628:356::-;4830:2;4812:21;;;4849:18;;;4842:30;4908:34;4903:2;4888:18;;4881:62;4975:2;4960:18;;4628:356::o;5757:127::-;5818:10;5813:3;5809:20;5806:1;5799:31;5849:4;5846:1;5839:15;5873:4;5870:1;5863:15;5889:125;5954:9;;;5975:10;;;5972:36;;;5988:18;;:::i;6731:184::-;6801:6;6854:2;6842:9;6833:7;6829:23;6825:32;6822:52;;;6870:1;6867;6860:12;6822:52;-1:-1:-1;6893:16:1;;6731:184;-1:-1:-1;6731:184:1:o;8168:127::-;8229:10;8224:3;8220:20;8217:1;8210:31;8260:4;8257:1;8250:15;8284:4;8281:1;8274:15;8300:135;8339:3;8360:17;;;8357:43;;8380:18;;:::i;:::-;-1:-1:-1;8427:1:1;8416:13;;8300:135::o;8440:168::-;8513:9;;;8544;;8561:15;;;8555:22;;8541:37;8531:71;;8582:18;;:::i;8613:217::-;8653:1;8679;8669:132;;8723:10;8718:3;8714:20;8711:1;8704:31;8758:4;8755:1;8748:15;8786:4;8783:1;8776:15;8669:132;-1:-1:-1;8815:9:1;;8613:217::o;10893:401::-;11095:2;11077:21;;;11134:2;11114:18;;;11107:30;11173:34;11168:2;11153:18;;11146:62;-1:-1:-1;;;11239:2:1;11224:18;;11217:35;11284:3;11269:19;;10893:401::o;11299:399::-;11501:2;11483:21;;;11540:2;11520:18;;;11513:30;11579:34;11574:2;11559:18;;11552:62;-1:-1:-1;;;11645:2:1;11630:18;;11623:33;11688:3;11673:19;;11299:399::o;13247:128::-;13314:9;;;13335:11;;;13332:37;;;13349:18;;:::i;13919:251::-;13989:6;14042:2;14030:9;14021:7;14017:23;14013:32;14010:52;;;14058:1;14055;14048:12;14010:52;14090:9;14084:16;14109:31;14134:5;14109:31;:::i;14175:980::-;14437:4;14485:3;14474:9;14470:19;14516:6;14505:9;14498:25;14542:2;14580:6;14575:2;14564:9;14560:18;14553:34;14623:3;14618:2;14607:9;14603:18;14596:31;14647:6;14682;14676:13;14713:6;14705;14698:22;14751:3;14740:9;14736:19;14729:26;;14790:2;14782:6;14778:15;14764:29;;14811:1;14821:195;14835:6;14832:1;14829:13;14821:195;;;14900:13;;-1:-1:-1;;;;;14896:39:1;14884:52;;14991:15;;;;14956:12;;;;14932:1;14850:9;14821:195;;;-1:-1:-1;;;;;;;15072:32:1;;;;15067:2;15052:18;;15045:60;-1:-1:-1;;;15136:3:1;15121:19;15114:35;15033:3;14175:980;-1:-1:-1;;;14175:980:1:o

Swarm Source

ipfs://63e3699ebf11a9c157fab5a67e2d856b5f18341efa1beb420cb0b49e23ec2d2a
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.