ETH Price: $2,494.78 (-0.96%)

Token

FalconX (FALCX)
 

Overview

Max Total Supply

600,000,000,000 FALCX

Holders

60

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
nappleio.eth
Balance
8,238,608.356298719 FALCX

Value
$0.00
0xbee9d9038e8f0efc0a924961229fd52d9b1af0a1
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:
FalconX

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-16
*/

/*


███████╗ █████╗ ██╗      ██████╗ ██████╗ ███╗   ██╗    ██╗  ██╗
██╔════╝██╔══██╗██║     ██╔════╝██╔═══██╗████╗  ██║    ╚██╗██╔╝
█████╗  ███████║██║     ██║     ██║   ██║██╔██╗ ██║     ╚███╔╝ 
██╔══╝  ██╔══██║██║     ██║     ██║   ██║██║╚██╗██║     ██╔██╗ 
██║     ██║  ██║███████╗╚██████╗╚██████╔╝██║ ╚████║    ██╔╝ ██╗
╚═╝     ╚═╝  ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═╝  ╚═══╝    ╚═╝  ╚═╝
projectfalconx.com


2.5% Auto LP
4% Marketing
1.5% team
0% Referral and Community

*/

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

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

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

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

abstract contract IERC20Extented is IERC20 {
    function decimals() external view virtual returns (uint8);
    function name() external view virtual returns (string memory);
    function symbol() external view virtual returns (string memory);
}

contract FalconX is Context, IERC20, IERC20Extented, Ownable {
    using SafeMath for uint256;
    string private constant _name = "FalconX";
    string private constant _symbol = "FALCX";
    uint8 private constant _decimals = 9;
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant _tTotal = 600000000000 * 10**9; // 600 Billion
    uint256 public _priceImpact = 2;
    uint256 private _firstBlock;
    uint256 private _botBlocks;
    uint256 public _maxWalletAmount;
    uint256 private _maxSellAmountBNB = 5000000000000000000; // 5 BNB
    uint256 private _minBuyBNB = 0; //10000000000000000; // 0.01 BNB
    uint256 private _minSellBNB = 0; //10000000000000000; // 0.01 BNB

    // fees
    uint256 public _liquidityFee = 25; // divided by 1000
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 public _marketingFee = 40; // divided by 1000
    uint256 private _previousMarketingFee = _marketingFee;
    uint256 public _teamFee = 15; // divided by 1000
    uint256 private _previousTeamFee = _teamFee;
    uint256 public _communityFee = 0 ;// divided by 1000
    uint256 private _previousCommunityFee = _communityFee;
    uint256 public _burnFee = 0; // divided by 1000
    uint256 private _previousBurnFee = _burnFee;
    
    uint256 private _marketingPercent = 73;
    uint256 private _teamPercent = 27;
    uint256 private _communityPercent = 0;

    struct FeeBreakdown {
        uint256 tLiquidity;
        uint256 tMarketing;
        uint256 tTeam;
        uint256 tCommunity;
        uint256 tBurn;
        uint256 tAmount;
    }

    mapping(address => bool) private bots;
    address payable private _marketingAddress = payable(0xA5347334AF09Bbc6C2456AB435F54ef8189FA709);
    address payable private _teamAddress = payable(0x5cCaA2b9f967019FE5ea59AC572407dBe0858cbE);
    address payable private _communityAddress = payable(0xBD92de26245518A172732222749e662Fb28b4674);
    address payable constant private _burnAddress = payable(0x000000000000000000000000000000000000dEaD);
    address private presaleRouter;
    address private presaleAddress;
    IUniswapV2Router02 private uniswapV2Router;
    address public uniswapV2Pair;
    uint256 private _maxTxAmount;

    bool private tradingOpen = false;
    bool private inSwap = false;
    bool private presale = true;
    bool private pairSwapped = false;
    bool public _priceImpactSellLimitEnabled = false;
    bool public _BNBsellLimitEnabled = false;
    
    address public bridge;

    event EndedPresale(bool presale);
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    event PercentsUpdated(uint256 _marketingPercent, uint256 _teamPercent, uint256 _communityPercent);
    event FeesUpdated(uint256 _marketingFee, uint256 _liquidityFee, uint256 _teamFee, uint256 _communityFee, uint256 _burnFee);
    event PriceImpactUpdated(uint256 _priceImpact);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor(address _bridge) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);//ropstenn 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //bsc test 0xD99D1c33F9fC3444f8101754aBC46c52416550D1);//bsc main net 0x10ED43C718714eb63d5aA57B78B54704E256024E);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router),type(uint256).max);

        _maxTxAmount = _tTotal; // start off transaction limit at 100% of total supply
        _maxWalletAmount = _tTotal.div(1); // 100%
        _priceImpact = 100;

        _balances[_bridge] = _tTotal;
        bridge = _bridge;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() override external pure returns (string memory) {
        return _name;
    }

    function symbol() override external pure returns (string memory) {
        return _symbol;
    }

    function decimals() override external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

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

    function isBot(address account) public view returns (bool) {
        return bots[account];
    }
    
    function setBridge(address _bridge) external onlyOwner {
        bridge = _bridge;
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

    function removeAllFee() private {
        if (_marketingFee == 0 && _liquidityFee == 0 && _teamFee == 0 && _communityFee == 0 && _burnFee == 0) return;
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        _previousTeamFee = _teamFee;
        _previousCommunityFee = _communityFee;
        _previousBurnFee = _burnFee;
        
        _marketingFee = 0;
        _liquidityFee = 0;
        _teamFee = 0;
        _communityFee = 0;
        _burnFee = 0;
    }

    function setBotFee() private {
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        _previousTeamFee = _teamFee;
        _previousCommunityFee = _communityFee;
        _previousBurnFee = _burnFee;
        
        _marketingFee = 180;
        _liquidityFee = 180;
        _teamFee = 18;
        _communityFee = 18;
        _burnFee = 180;
    }
    
    function restoreAllFee() private {
        _marketingFee = _previousMarketingFee;
        _liquidityFee = _previousLiquidityFee;
        _teamFee = _previousTeamFee;
        _communityFee = _previousCommunityFee;
        _burnFee = _previousBurnFee;
    }

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

    // calculate price based on pair reserves
    function getTokenPriceBNB(uint256 amount) external view returns(uint256) {
        IERC20Extented token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());//FalconX
        IERC20Extented token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());//bnb
        
        require(token0.decimals() != 0, "ERR: decimals cannot be zero");
        
        (uint112 Res0, uint112 Res1,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        if(pairSwapped) {
            token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());//FalconX
            token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());//bnb
            (Res1, Res0,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        }

        uint res1 = Res1*(10**token0.decimals());
        return((amount*res1)/(Res0*(10**token0.decimals()))); // return amount of token1 needed to buy token0
    }
    
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        bool takeFee = true;

        if (from != owner() && to != owner() && !presale && from != address(this) && to != address(this) && from != bridge && to != bridge) {
            require(tradingOpen);
            if (from != presaleRouter && from != presaleAddress) {
                require(amount <= _maxTxAmount);
            }
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {//buys

                if (block.timestamp <= _firstBlock.add(_botBlocks) && from != presaleRouter && from != presaleAddress) {
                    bots[to] = true;
                }
                
                uint256 bnbAmount = this.getTokenPriceBNB(amount);
                
                require(bnbAmount >= _minBuyBNB, "you must buy at least min BNB worth of token");
                require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");
            }
            
            if (!inSwap && from != uniswapV2Pair) { //sells, transfers
                require(!bots[from] && !bots[to]);
                
                uint256 bnbAmount = this.getTokenPriceBNB(amount);
                
                require(bnbAmount >= _minSellBNB, "you must sell at least the min BNB worth of token");

                if (_BNBsellLimitEnabled) {
                    
                    require(bnbAmount <= _maxSellAmountBNB, 'you cannot sell more than the max BNB amount per transaction');

                }
                
                else if (_priceImpactSellLimitEnabled) {
                    
                    require(amount <= balanceOf(uniswapV2Pair).mul(_priceImpact).div(100)); // price impact limit

                }
                
                if(to != uniswapV2Pair) {
                    
                    require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");

                }

                uint256 contractTokenBalance = balanceOf(address(this));

                if (contractTokenBalance > 0) {

                    swapAndLiquify(contractTokenBalance);
                
                }
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
                    
            }
        }

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || presale || from == bridge || to == bridge) {
            takeFee = false;
        }

        else if (bots[from] || bots[to]) {
            setBotFee();
            takeFee = true;
        }

        if (presale) {
            require(from == owner() || from == presaleRouter || from == presaleAddress);
        }
        
        _tokenTransfer(from, to, amount, takeFee);
        restoreAllFee();
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
              address(this),
              tokenAmount,
              0, // slippage is unavoidable
              0, // slippage is unavoidable
              owner(),
              block.timestamp
          );
    }
  
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 autoLPamount = _liquidityFee.mul(contractTokenBalance).div(_marketingFee.add(_teamFee).add(_communityFee).add(_liquidityFee));

        // split the contract balance into halves
        uint256 half =  autoLPamount.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current BNB balance.
        // this is so that we can capture exactly the amount of BNB that the
        // swap creates, and not make the liquidity event include any BNB that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for BNB
        swapTokensForEth(otherHalf); // <- this breaks the BNB -> HATE swap when swap+liquify is triggered

        // how much BNB did we just swap into?
        uint256 newBalance = ((address(this).balance.sub(initialBalance)).mul(half)).div(otherHalf);

        // add liquidity to pancakeswap
        addLiquidity(half, newBalance);
    }

    function sendETHToFee(uint256 amount) private {
        _marketingAddress.transfer(amount.mul(_marketingPercent).div(100));
        _teamAddress.transfer(amount.mul(_teamPercent).div(100));
        _communityAddress.transfer(amount.mul(_communityPercent).div(100));
    }

    function openTrading(uint256 botBlocks) private {
        _firstBlock = block.timestamp;
        _botBlocks = botBlocks;
        tradingOpen = true;
    }

    function manualswap() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance > 0) {
            swapTokensForEth(contractBalance);
        }
    }

    function manualsend() external {
        require(_msgSender() == _marketingAddress);
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance > 0) {
            sendETHToFee(contractETHBalance);
        }
    }

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

    function _transferStandard(address sender, address recipient, uint256 amount) private {
        FeeBreakdown memory fees;
        fees.tMarketing = amount.mul(_marketingFee).div(1000);
        fees.tLiquidity = amount.mul(_liquidityFee).div(1000);
        fees.tTeam = amount.mul(_teamFee).div(1000);
        fees.tCommunity = amount.mul(_communityFee).div(1000);
        fees.tBurn = amount.mul(_burnFee).div(1000);
        
        fees.tAmount = amount.sub(fees.tMarketing).sub(fees.tLiquidity).sub(fees.tTeam).sub(fees.tCommunity).sub(fees.tBurn);
        
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(fees.tAmount);
        _balances[address(this)] = _balances[address(this)].add(fees.tMarketing.add(fees.tLiquidity).add(fees.tTeam).add(fees.tCommunity));
        _balances[_burnAddress] = _balances[_burnAddress].add(fees.tBurn);
        
        emit Transfer(sender, recipient, fees.tAmount);
    }
    
    receive() external payable {}

    function excludeFromFee(address account) public onlyOwner() {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = false;
    }
    
    function removeBot(address account) external onlyOwner() {
        bots[account] = false;
    }

    function addBot(address account) external onlyOwner() {
        bots[account] = true;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > _tTotal.div(10000), "Amount must be greater than 0.01% of supply");
        require(maxTxAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxTxAmount = maxTxAmount;
        emit MaxTxAmountUpdated(_maxTxAmount);
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        require(maxWalletAmount > _tTotal.div(200), "Amount must be greater than 0.5% of supply");
        require(maxWalletAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxWalletAmount = maxWalletAmount;
    }

    function setTaxes(uint256 marketingFee, uint256 liquidityFee, uint256 teamFee, uint256 communityFee, uint256 burnFee) external onlyOwner() {
        uint256 totalFee = marketingFee.add(liquidityFee).add(teamFee).add(communityFee).add(burnFee);
        require(totalFee.div(10) < 50, "Sum of fees must be less than 50");

        _marketingFee = marketingFee;
        _liquidityFee = liquidityFee;
        _teamFee = teamFee;
        _communityFee = communityFee;
        _burnFee = burnFee;
        
        _previousMarketingFee = _marketingFee;
        _previousLiquidityFee = _liquidityFee;
        _previousTeamFee = _teamFee;
        _previousCommunityFee = _communityFee;
        _previousBurnFee = _burnFee;
        
        uint256 totalBNBfees = _marketingFee.add(_teamFee).add(_communityFee);
        
        _marketingPercent = (_marketingFee.mul(100)).div(totalBNBfees);
        _teamPercent = (_teamFee.mul(100)).div(totalBNBfees);
        _communityPercent = (_communityFee.mul(100)).div(totalBNBfees);
        
        emit FeesUpdated(_marketingFee, _liquidityFee, _teamFee, _communityFee, _burnFee);
    }

    function setPriceImpact(uint256 priceImpact) external onlyOwner() {
        require(priceImpact <= 100, "max price impact must be less than or equal to 100");
        require(priceImpact > 0, "cant prevent sells, choose value greater than 0");
        _priceImpact = priceImpact;
        emit PriceImpactUpdated(_priceImpact);
    }

    function setPresaleRouterAndAddress(address router, address wallet) external onlyOwner() {
        presaleRouter = router;
        presaleAddress = wallet;
        excludeFromFee(presaleRouter);
        excludeFromFee(presaleAddress);
    }

    function endPresale(uint256 botBlocks) external onlyOwner() {
        require(presale == true, "presale already ended");
        presale = false;
        openTrading(botBlocks);
        emit EndedPresale(presale);
    }

    function updatePairSwapped(bool swapped) external onlyOwner() {
        pairSwapped = swapped;
    }
    
    function updateMinBuySellBNB(uint256 minBuyBNB, uint256 minSellBNB) external onlyOwner() {
        require(minBuyBNB <= 100000000000000000, "cant make the limit higher than 0.1 BNB");
        require(minSellBNB <= 100000000000000000, "cant make the limit higher than 0.1 BNB");
        _minBuyBNB = minBuyBNB;
        _minSellBNB = minSellBNB;
    }
    
    function updateMaxSellAmountBNB(uint256 maxSellBNB) external onlyOwner() {
        require(maxSellBNB >= 1000000000000000000, "cant make the limit lower than 1 BNB");
        _maxSellAmountBNB = maxSellBNB;
    }
    
    function updateCommunityAddress(address payable communityAddress) external onlyOwner() {
        _communityAddress = communityAddress;
    }
    
    function updateMarketingAddress(address payable marketingAddress) external onlyOwner() {
        _marketingAddress = marketingAddress;
    }
    
    function updateTeamAddress(address payable teamAddress) external onlyOwner() {
        _teamAddress = teamAddress;
    }
    
    function enableBNBsellLimit() external onlyOwner() {
        require(_BNBsellLimitEnabled == false, "already enabled");
        _BNBsellLimitEnabled = true;
        _priceImpactSellLimitEnabled = false;
    }
    
    function disableBNBsellLimit() external onlyOwner() {
        require(_BNBsellLimitEnabled == true, "already disabled");
        _BNBsellLimitEnabled = false;
    }
    
    function enablePriceImpactSellLimit() external onlyOwner() {
        require(_priceImpactSellLimitEnabled == false, "already enabled");
        _priceImpactSellLimitEnabled = true;
        _BNBsellLimitEnabled = false;
    }
    
    function disablePriceImpactSellLimit() external onlyOwner() {
        require(_priceImpactSellLimitEnabled == true, "already disabled");
        _priceImpactSellLimitEnabled = false;
    }
}




/*



 ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░  
    ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██
░░                                                                              ██
░░                                                                              ██
░░    ██                                              	    	Spade Secured   ██
░░    ████                                                                      ██
░░  ▒▒▒▒██                                                                      ██
░░  ██▓▓████                                                                    ██
░░  ▓▓▒▒▒▒██                                                                    ██
░░  ▒▒    ██                                                                    ██
░░  ▓▓    ▓▓▒▒                                                                  ██
░░                                                                              ██
░░    ██▒▒                            ██████                                    ██
░░  ▒▒████                            ██████▒▒                                  ██
░░  ████████                        ▒▒████████                                  ██
░░  ████████                      ██████████████                                ██
░░    ▒▒                        ██████████████████                              ██
░░    ░░                      ██████████████████████                            ██
░░                          ██████████████████████████                          ██
░░                          ████████████████████████████                        ██
░░                        ████████████████████████████████                      ██
░░                      ████████████████████████████████████                    ██
░░                    ▓▓████████████████████████████████████░░                  ██
░░                    ████████████████████████████████████████                  ██
░░                  ██████████████████████████████████████████                  ██
░░                  ████████████████████████████████████████████                ██
░░                ██████████████████████████████████████████████▒▒              ██
░░              ▒▒████████████████████████████████████████████████              ██
░░              ██████████████████████████████████████████████████              ██
░░              ██████████████████████████████████████████████████              ██
░░              ██████████████████████████████████████████████████              ██
░░              ██████████████████████████████████████████████████              ██
░░                ██████████████████████████████████████████████▓▓              ██
░░                  ████████████████▒▒██████  ██████████████████                ██
░░                    ████████████▒▒  ██████    ██████████████                  ██
░░                      ░░░░░░░░░░    ██████      ░░░░░░░░░░                    ██
░░                                    ██████                                    ██
░░                                  ░░████████                                  ██
░░                                ▒▒████████████                                ██
░░                              ▒▒████████████████                              ██
░░                              ░░░░░░░░░░░░░░░░░░                        ▒▒    ██
░░                                                                    ████▒▒██  ██
░░                                                                    ████████  ██
░░                                                                      ██████  ██
░░                                                                      ████    ██
░░                                                                              ██
░░                                                                    ░░    ░░  ██
░░                                                                    ██        ██
░░                                                                    ████████  ██
░░                                                                      ░░  ██  ██
░░                                                                      ██████  ██
░░                                                                      ▒▒██    ██
░░                                                                        ░░    ██
░░                                                                              ██
░░ Spadetech.io                                                                 ██



*/

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"presale","type":"bool"}],"name":"EndedPresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_teamFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_communityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_burnFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_marketingPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_teamPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_communityPercent","type":"uint256"}],"name":"PercentsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_priceImpact","type":"uint256"}],"name":"PriceImpactUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_BNBsellLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_communityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_priceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_priceImpactSellLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableBNBsellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disablePriceImpactSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBNBsellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePriceImpactSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenPriceBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"name":"setBridge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleRouterAndAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"name":"setPriceImpact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"teamFee","type":"uint256"},{"internalType":"uint256","name":"communityFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"communityAddress","type":"address"}],"name":"updateCommunityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellBNB","type":"uint256"}],"name":"updateMaxSellAmountBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuyBNB","type":"uint256"},{"internalType":"uint256","name":"minSellBNB","type":"uint256"}],"name":"updateMinBuySellBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapped","type":"bool"}],"name":"updatePairSwapped","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"teamAddress","type":"address"}],"name":"updateTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526002600555674563918244f400006009556000600a819055600b8190556019600c819055600d556028600e819055600f908155601081905560115560128190556013819055601481905560158190556049601655601b6017819055601891909155601a80546001600160a01b031990811673a5347334af09bbc6c2456ab435f54ef8189fa7091790915581548116735ccaa2b9f967019fe5ea59ac572407dbe0858cbe17909155601c805490911673bd92de26245518a172732222749e662fb28b46741790556022805465ffffffffffff191662010000179055348015620000eb57600080fd5b5060405162003c1438038062003c148339810160408190526200010e91620006a6565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556200018e3082682086ac351052600000620004ed565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001c857600080fd5b505afa158015620001dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002039190620006a6565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024c57600080fd5b505afa15801562000261573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002879190620006a6565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002d057600080fd5b505af1158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b9190620006a6565b602080546001600160a01b0319166001600160a01b03928316908117909155601f5460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b390604401602060405180830381600087803b1580156200036e57600080fd5b505af115801562000383573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a99190620006cf565b50682086ac351052600000602181905550620003de6001682086ac3510526000006200061960201b62001bbb1790919060201c565b60085560646005556001600160a01b0382166000818152600260205260408120682086ac351052600000905560228054600160301b600160d01b031916660100000000000090930292909217909155600190600490620004466000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260049092529020805490911660011790556200048e3390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef682086ac351052600000604051620004dd91815260200190565b60405180910390a3505062000768565b6001600160a01b038316620005555760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620005b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016200054c565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006200066383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200066a60201b60201c565b9392505050565b600081836200068e5760405162461bcd60e51b81526004016200054c9190620006f1565b5060006200069d848662000747565b95945050505050565b600060208284031215620006b8578081fd5b81516001600160a01b038116811462000663578182fd5b600060208284031215620006e1578081fd5b8151801515811462000663578182fd5b6000602080835283518082850152825b818110156200071f5785810183015185820160400152820162000701565b81811115620007315783604083870101525b50601f01601f1916929092016040019392505050565b6000826200076357634e487b7160e01b81526012600452602481fd5b500490565b61349c80620007786000396000f3fe6080604052600436106102975760003560e01c806370a082311161015a578063c0b0fda2116100c1578063dd62ed3e1161007a578063dd62ed3e146107dc578063e78cea9214610822578063ea2f0b3714610849578063ec28438a14610869578063f2fde38b14610889578063ffecf516146108a957600080fd5b8063c0b0fda214610745578063c2f77e411461075b578063c3c8cd801461077b578063c690c00c14610790578063cdda3e54146107b1578063dc06f1ad146107c657600080fd5b80639eb942e5116101135780639eb942e5146106a45780639edf96cb146106ba5780639f2ebc08146106da578063a2d9ff7e146106fa578063a9059cbb1461070f578063bfa31ff91461072f57600080fd5b806370a08231146105cd578063715018a6146106035780637a6d4398146106185780638da5cb5b146106385780638dd148021461065657806395d89b411461067657600080fd5b80633f5e0c05116101fe5780635fecd926116101b75780635fecd926146105375780636235e93f146105575780636ac56ced146105775780636bc87c3a1461058c5780636c0a24eb146105a25780636fc3eaec146105b857600080fd5b80633f5e0c0514610468578063437823ec1461048857806349bd5a5e146104a85780634bfe514d146104e05780635e3d3007146104f55780635fcefa421461051757600080fd5b806323b872dd1161025057806323b872dd1461039357806327a14fc2146103b35780632b929aa8146103d3578063313ce567146103f357806334596c161461040f5780633bbac5791461042f57600080fd5b806306fdde03146102a3578063095ea7b3146102e557806314eb76ac1461031557806318160ddd1461033757806322976e0d1461035d5780632369bf831461037357600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b5060408051808201909152600781526608cc2d8c6dedcb60cb1b60208201525b6040516102dc91906130c1565b60405180910390f35b3480156102f157600080fd5b50610305610300366004612f4f565b6108c9565b60405190151581526020016102dc565b34801561032157600080fd5b50610335610330366004612e9f565b6108e0565b005b34801561034357600080fd5b50682086ac3510526000005b6040519081526020016102dc565b34801561036957600080fd5b5061034f600e5481565b34801561037f57600080fd5b5061033561038e366004612e9f565b610935565b34801561039f57600080fd5b506103056103ae366004612f0f565b610981565b3480156103bf57600080fd5b506103356103ce366004612fe8565b6109ea565b3480156103df57600080fd5b506103356103ee366004612fe8565b610ab7565b3480156103ff57600080fd5b50604051600981526020016102dc565b34801561041b57600080fd5b5061033561042a366004612f7a565b610bf1565b34801561043b57600080fd5b5061030561044a366004612e9f565b6001600160a01b031660009081526019602052604090205460ff1690565b34801561047457600080fd5b50610335610483366004613018565b610c39565b34801561049457600080fd5b506103356104a3366004612e9f565b610cbe565b3480156104b457600080fd5b506020546104c8906001600160a01b031681565b6040516001600160a01b0390911681526020016102dc565b3480156104ec57600080fd5b50610335610d0c565b34801561050157600080fd5b5060225461030590640100000000900460ff1681565b34801561052357600080fd5b50610335610532366004613066565b610d98565b34801561054357600080fd5b50610335610552366004612e9f565b610f30565b34801561056357600080fd5b50610335610572366004612fe8565b610f7b565b34801561058357600080fd5b5061033561100e565b34801561059857600080fd5b5061034f600c5481565b3480156105ae57600080fd5b5061034f60085481565b3480156105c457600080fd5b5061033561109d565b3480156105d957600080fd5b5061034f6105e8366004612e9f565b6001600160a01b031660009081526002602052604090205490565b34801561060f57600080fd5b506103356110d0565b34801561062457600080fd5b50610335610633366004612ed7565b611106565b34801561064457600080fd5b506000546001600160a01b03166104c8565b34801561066257600080fd5b50610335610671366004612e9f565b611180565b34801561068257600080fd5b5060408051808201909152600581526408c829886b60db1b60208201526102cf565b3480156106b057600080fd5b5061034f60105481565b3480156106c657600080fd5b506103356106d5366004612fe8565b6111d9565b3480156106e657600080fd5b506103356106f5366004612e9f565b6112ae565b34801561070657600080fd5b506103356112fa565b34801561071b57600080fd5b5061030561072a366004612f4f565b611387565b34801561073b57600080fd5b5061034f60055481565b34801561075157600080fd5b5061034f60145481565b34801561076757600080fd5b5061034f610776366004612fe8565b611394565b34801561078757600080fd5b506103356118c0565b34801561079c57600080fd5b5060225461030590600160281b900460ff1681565b3480156107bd57600080fd5b506103356118ff565b3480156107d257600080fd5b5061034f60125481565b3480156107e857600080fd5b5061034f6107f7366004612ed7565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561082e57600080fd5b506022546104c890600160301b90046001600160a01b031681565b34801561085557600080fd5b50610335610864366004612e9f565b61198b565b34801561087557600080fd5b50610335610884366004612fe8565b6119d6565b34801561089557600080fd5b506103356108a4366004612e9f565b611ad5565b3480156108b557600080fd5b506103356108c4366004612e9f565b611b6d565b60006108d6338484611c04565b5060015b92915050565b6000546001600160a01b031633146109135760405162461bcd60e51b815260040161090a906131c2565b60405180910390fd5b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461095f5760405162461bcd60e51b815260040161090a906131c2565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600061098e848484611d28565b6109e084336109db8560405180606001604052806028815260200161343f602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612598565b611c04565b5060019392505050565b6000546001600160a01b03163314610a145760405162461bcd60e51b815260040161090a906131c2565b610a28682086ac35105260000060c8611bbb565b8111610a895760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e3525604482015269206f6620737570706c7960b01b606482015260840161090a565b682086ac351052600000811115610ab25760405162461bcd60e51b815260040161090a906131f7565b600855565b6000546001600160a01b03163314610ae15760405162461bcd60e51b815260040161090a906131c2565b6064811115610b4d5760405162461bcd60e51b815260206004820152603260248201527f6d617820707269636520696d70616374206d757374206265206c6573732074686044820152710616e206f7220657175616c20746f203130360741b606482015260840161090a565b60008111610bb55760405162461bcd60e51b815260206004820152602f60248201527f63616e742070726576656e742073656c6c732c2063686f6f73652076616c756560448201526e02067726561746572207468616e203608c1b606482015260840161090a565b60058190556040518181527f585981c0db15e25002a67c38e62f983f189bb219fae23eb213566640fbae5e3c906020015b60405180910390a150565b6000546001600160a01b03163314610c1b5760405162461bcd60e51b815260040161090a906131c2565b6022805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b03163314610c635760405162461bcd60e51b815260040161090a906131c2565b67016345785d8a0000821115610c8b5760405162461bcd60e51b815260040161090a90613114565b67016345785d8a0000811115610cb35760405162461bcd60e51b815260040161090a90613114565b600a91909155600b55565b6000546001600160a01b03163314610ce85760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610d365760405162461bcd60e51b815260040161090a906131c2565b602254600160281b900460ff161515600114610d875760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b604482015260640161090a565b6022805465ff000000000019169055565b6000546001600160a01b03163314610dc25760405162461bcd60e51b815260040161090a906131c2565b6000610ddc82610dd6858188818c8c6125d2565b906125d2565b90506032610deb82600a611bbb565b10610e385760405162461bcd60e51b815260206004820181905260248201527f53756d206f662066656573206d757374206265206c657373207468616e203530604482015260640161090a565b600e869055600c859055601084905560128390556014829055600f869055600d8590556011849055601383905560158290556000610e7a84610dd689886125d2565b9050610e9c81610e966064600e5461263190919063ffffffff16565b90611bbb565b601655601054610eb3908290610e96906064612631565b601755601254610eca908290610e96906064612631565b601855600e54600c546010546012546014546040805195865260208601949094528484019290925260608401526080830152517f96b67df2c4648b38ada47da86f80d0a256df93150752a7b365ca487cab934e649181900360a00190a150505050505050565b6000546001600160a01b03163314610f5a5760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b03166000908152601960205260409020805460ff19169055565b6000546001600160a01b03163314610fa55760405162461bcd60e51b815260040161090a906131c2565b670de0b6b3a76400008110156110095760405162461bcd60e51b8152602060048201526024808201527f63616e74206d616b6520746865206c696d6974206c6f776572207468616e20316044820152631021272160e11b606482015260840161090a565b600955565b6000546001600160a01b031633146110385760405162461bcd60e51b815260040161090a906131c2565b602254640100000000900460ff16156110855760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b604482015260640161090a565b6022805465ffff000000001916640100000000179055565b601a546001600160a01b0316336001600160a01b0316146110bd57600080fd5b4780156110cd576110cd816126b0565b50565b6000546001600160a01b031633146110fa5760405162461bcd60e51b815260040161090a906131c2565b61110460006127a2565b565b6000546001600160a01b031633146111305760405162461bcd60e51b815260040161090a906131c2565b601d80546001600160a01b038085166001600160a01b03199283168117909355601e80549185169190921617905561116790610cbe565b601e5461117c906001600160a01b0316610cbe565b5050565b6000546001600160a01b031633146111aa5760405162461bcd60e51b815260040161090a906131c2565b602280546001600160a01b03909216600160301b026601000000000000600160d01b0319909216919091179055565b6000546001600160a01b031633146112035760405162461bcd60e51b815260040161090a906131c2565b60225462010000900460ff1615156001146112585760405162461bcd60e51b81526020600482015260156024820152741c1c995cd85b1948185b1c9958591e48195b991959605a1b604482015260640161090a565b6022805442600655600783905562ff00ff191660011790556022546040516201000090910460ff16151581527fbad30b8287730cfd8b6df18f878abbd745dc20365bfec848056cad8e6c17b91b90602001610be6565b6000546001600160a01b031633146112d85760405162461bcd60e51b815260040161090a906131c2565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113245760405162461bcd60e51b815260040161090a906131c2565b602254600160281b900460ff16156113705760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b604482015260640161090a565b6022805465ffff000000001916600160281b179055565b60006108d6338484611d28565b6020805460408051630dfe168160e01b8152905160009384936001600160a01b031692630dfe16819260048083019392829003018186803b1580156113d857600080fd5b505afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190612ebb565b602080546040805163d21220a760e01b815290519394506000936001600160a01b039092169263d21220a792600480840193829003018186803b15801561145657600080fd5b505afa15801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190612ebb565b9050816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c957600080fd5b505afa1580156114dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150191906130a0565b60ff166115505760405162461bcd60e51b815260206004820152601c60248201527f4552523a20646563696d616c732063616e6e6f74206265207a65726f00000000604482015260640161090a565b600080602060009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156115a157600080fd5b505afa1580156115b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d99190612f9a565b5060225491935091506301000000900460ff161561177f57602080546040805163d21220a760e01b815290516001600160a01b039092169263d21220a792600480840193829003018186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612ebb565b9350602060009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b957600080fd5b505afa1580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f19190612ebb565b9250602060009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117799190612f9a565b50925090505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ba57600080fd5b505afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f291906130a0565b6117fd90600a613332565b611810906001600160701b0384166133dd565b9050846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561184b57600080fd5b505afa15801561185f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188391906130a0565b61188e90600a613332565b6118a1906001600160701b0385166133dd565b6118ab82896133dd565b6118b591906132cf565b979650505050505050565b601a546001600160a01b0316336001600160a01b0316146118e057600080fd5b3060009081526002602052604090205480156110cd576110cd816127f2565b6000546001600160a01b031633146119295760405162461bcd60e51b815260040161090a906131c2565b602254640100000000900460ff16151560011461197b5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b604482015260640161090a565b6022805464ff0000000019169055565b6000546001600160a01b031633146119b55760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611a005760405162461bcd60e51b815260040161090a906131c2565b611a15682086ac351052600000612710611bbb565b8111611a775760405162461bcd60e51b815260206004820152602b60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e303160448201526a25206f6620737570706c7960a81b606482015260840161090a565b682086ac351052600000811115611aa05760405162461bcd60e51b815260040161090a906131f7565b60218190556040518181527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf90602001610be6565b6000546001600160a01b03163314611aff5760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b038116611b645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090a565b6110cd816127a2565b6000546001600160a01b03163314611b975760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b03166000908152601960205260409020805460ff19166001179055565b6000611bfd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612991565b9392505050565b6001600160a01b038316611c665760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090a565b6001600160a01b038216611cc75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d8c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161090a565b6001600160a01b038216611dee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161090a565b60008111611e505760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161090a565b6001611e646000546001600160a01b031690565b6001600160a01b0316846001600160a01b031614158015611e9357506000546001600160a01b03848116911614155b8015611ea8575060225462010000900460ff16155b8015611ebd57506001600160a01b0384163014155b8015611ed257506001600160a01b0383163014155b8015611ef357506022546001600160a01b03858116600160301b9092041614155b8015611f1457506022546001600160a01b03848116600160301b9092041614155b156123ea5760225460ff16611f2857600080fd5b601d546001600160a01b03858116911614801590611f545750601e546001600160a01b03858116911614155b15611f6857602154821115611f6857600080fd5b6020546001600160a01b038581169116148015611f935750601f546001600160a01b03848116911614155b1561212857600754600654611fa7916125d2565b4211158015611fc45750601d546001600160a01b03858116911614155b8015611fde5750601e546001600160a01b03858116911614155b15612007576001600160a01b0383166000908152601960205260409020805460ff191660011790555b60405163c2f77e4160e01b815260048101839052600090309063c2f77e419060240160206040518083038186803b15801561204157600080fd5b505afa158015612055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120799190613000565b9050600a548110156120e25760405162461bcd60e51b815260206004820152602c60248201527f796f75206d75737420627579206174206c65617374206d696e20424e4220776f60448201526b393a341037b3103a37b5b2b760a11b606482015260840161090a565b60085461210884610dd6876001600160a01b031660009081526002602052604090205490565b11156121265760405162461bcd60e51b815260040161090a9061315b565b505b602254610100900460ff1615801561214e57506020546001600160a01b03858116911614155b156123ea576001600160a01b03841660009081526019602052604090205460ff1615801561219557506001600160a01b03831660009081526019602052604090205460ff16155b61219e57600080fd5b60405163c2f77e4160e01b815260048101839052600090309063c2f77e419060240160206040518083038186803b1580156121d857600080fd5b505afa1580156121ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122109190613000565b9050600b5481101561227e5760405162461bcd60e51b815260206004820152603160248201527f796f75206d7573742073656c6c206174206c6561737420746865206d696e20426044820152702721103bb7b93a341037b3103a37b5b2b760791b606482015260840161090a565b602254600160281b900460ff161561230d576009548111156123085760405162461bcd60e51b815260206004820152603c60248201527f796f752063616e6e6f742073656c6c206d6f7265207468616e20746865206d6160448201527f7820424e4220616d6f756e7420706572207472616e73616374696f6e00000000606482015260840161090a565b61235e565b602254640100000000900460ff161561235e57600554602080546001600160a01b031660009081526002909152604090205461235291606491610e9691905b90612631565b83111561235e57600080fd5b6020546001600160a01b038581169116146123b75760085461239984610dd6876001600160a01b031660009081526002602052604090205490565b11156123b75760405162461bcd60e51b815260040161090a9061315b565b3060009081526002602052604090205480156123d6576123d6816129bf565b4780156123e6576123e6476126b0565b5050505b6001600160a01b03841660009081526004602052604090205460ff168061242957506001600160a01b03831660009081526004602052604090205460ff165b8061243c575060225462010000900460ff165b8061245b57506022546001600160a01b03858116600160301b90920416145b8061247a57506022546001600160a01b03848116600160301b90920416145b1561248757506000612508565b6001600160a01b03841660009081526019602052604090205460ff16806124c657506001600160a01b03831660009081526019602052604090205460ff165b1561250857612504600e8054600f55600c8054600d5560108054601155601280546013556014805460155560b4948590559284905590819055805555565b5060015b60225462010000900460ff1615612563576000546001600160a01b03858116911614806125425750601d546001600160a01b038581169116145b8061255a5750601e546001600160a01b038581169116145b61256357600080fd5b61256f84848484612a49565b612592600f54600e55600d54600c55601154601055601354601255601554601455565b50505050565b600081848411156125bc5760405162461bcd60e51b815260040161090a91906130c1565b5060006125c984866133fc565b95945050505050565b6000806125df83856132b7565b905083811015611bfd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161090a565b600082612640575060006108da565b600061264c83856133dd565b90508261265985836132cf565b14611bfd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161090a565b601a546016546001600160a01b03909116906108fc906126d890606490610e96908690612631565b6040518115909202916000818181858888f19350505050158015612700573d6000803e3d6000fd5b50601b546017546001600160a01b03909116906108fc9061272990606490610e96908690612631565b6040518115909202916000818181858888f19350505050158015612751573d6000803e3d6000fd5b50601c546018546001600160a01b03909116906108fc9061277a90606490610e96908690612631565b6040518115909202916000818181858888f1935050505015801561117c573d6000803e3d6000fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6022805461ff001916610100179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061284457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561289857600080fd5b505afa1580156128ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d09190612ebb565b816001815181106128f157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601f546129179130911684611c04565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612950908590600090869030904290600401613247565b600060405180830381600087803b15801561296a57600080fd5b505af115801561297e573d6000803e3d6000fd5b50506022805461ff001916905550505050565b600081836129b25760405162461bcd60e51b815260040161090a91906130c1565b5060006125c984866132cf565b6022805461ff001916610100179055600c54601254601054600e54600093612a00936129f3939192610dd6928391906125d2565b600c54610e969085612631565b90506000612a0f826002611bbb565b90506000612a1d8483612a61565b905047612a29826127f2565b6000612a3d83610e968661234c4787612a61565b905061297e8482612aa3565b80612a5657612a56612b87565b61256f848484612bf9565b6000611bfd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612598565b601f54612abb9030906001600160a01b031684611c04565b601f546001600160a01b031663f305d719823085600080612ae46000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612b4757600080fd5b505af1158015612b5b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b809190613039565b5050505050565b600e54158015612b975750600c54155b8015612ba35750601054155b8015612baf5750601254155b8015612bbb5750601454155b15612bc257565b600e8054600f55600c8054600d55601080546011556012805460135560148054601555600094859055928490559083905582905555565b612c326040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612c4d6103e8610e96600e548561263190919063ffffffff16565b6020820152600c54612c68906103e890610e96908590612631565b8152601054612c80906103e890610e96908590612631565b6040820152601254612c9b906103e890610e96908590612631565b6060820152601454612cb6906103e890610e96908590612631565b608082018190526060820151604083015183516020850151612ced9493612ce7939092849283919082908b90612a61565b90612a61565b60a08201526001600160a01b038416600090815260026020526040902054612d159083612a61565b6001600160a01b038086166000908152600260205260408082209390935560a084015191861681529190912054612d4b916125d2565b60026000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550612db8612da28260600151610dd68460400151610dd6866000015187602001516125d290919063ffffffff16565b30600090815260026020526040902054906125d2565b30600090815260026020526040812091909155608082015161dead9091527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612e01916125d2565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5560a08101516040516001600160a01b0385811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612e759190815260200190565b60405180910390a350505050565b80516001600160701b0381168114612e9a57600080fd5b919050565b600060208284031215612eb0578081fd5b8135611bfd81613429565b600060208284031215612ecc578081fd5b8151611bfd81613429565b60008060408385031215612ee9578081fd5b8235612ef481613429565b91506020830135612f0481613429565b809150509250929050565b600080600060608486031215612f23578081fd5b8335612f2e81613429565b92506020840135612f3e81613429565b929592945050506040919091013590565b60008060408385031215612f61578182fd5b8235612f6c81613429565b946020939093013593505050565b600060208284031215612f8b578081fd5b81358015158114611bfd578182fd5b600080600060608486031215612fae578283fd5b612fb784612e83565b9250612fc560208501612e83565b9150604084015163ffffffff81168114612fdd578182fd5b809150509250925092565b600060208284031215612ff9578081fd5b5035919050565b600060208284031215613011578081fd5b5051919050565b6000806040838503121561302a578182fd5b50508035926020909101359150565b60008060006060848603121561304d578283fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561307d578081fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000602082840312156130b1578081fd5b815160ff81168114611bfd578182fd5b6000602080835283518082850152825b818110156130ed578581018301518582016040015282016130d1565b818111156130fe5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526027908201527f63616e74206d616b6520746865206c696d697420686967686572207468616e206040820152661817189021272160c91b606082015260800190565b60208082526041908201527f77616c6c65742062616c616e6365206166746572207472616e73666572206d7560408201527f7374206265206c657373207468616e206d61782077616c6c657420616d6f756e6060820152601d60fa1b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f416d6f756e74206d757374206265206c657373207468616e206f72206571756160408201526f6c20746f20746f74616c537570706c7960801b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132965784516001600160a01b031683529383019391830191600101613271565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156132ca576132ca613413565b500190565b6000826132ea57634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561332a57816000190482111561331057613310613413565b8085161561331d57918102915b93841c93908002906132f4565b509250929050565b6000611bfd60ff84168360008261334b575060016108da565b81613358575060006108da565b816001811461336e576002811461337857613394565b60019150506108da565b60ff84111561338957613389613413565b50506001821b6108da565b5060208310610133831016604e8410600b84101617156133b7575081810a6108da565b6133c183836132ef565b80600019048211156133d5576133d5613413565b029392505050565b60008160001904831182151516156133f7576133f7613413565b500290565b60008282101561340e5761340e613413565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146110cd57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b3da3e5022413e35547506dac0425ac5ea476d755d68aa6ac7473e7dd7d91cdc64736f6c634300080400330000000000000000000000006d54f12a11901843a4cac37b8eb911dade8184a9

Deployed Bytecode

0x6080604052600436106102975760003560e01c806370a082311161015a578063c0b0fda2116100c1578063dd62ed3e1161007a578063dd62ed3e146107dc578063e78cea9214610822578063ea2f0b3714610849578063ec28438a14610869578063f2fde38b14610889578063ffecf516146108a957600080fd5b8063c0b0fda214610745578063c2f77e411461075b578063c3c8cd801461077b578063c690c00c14610790578063cdda3e54146107b1578063dc06f1ad146107c657600080fd5b80639eb942e5116101135780639eb942e5146106a45780639edf96cb146106ba5780639f2ebc08146106da578063a2d9ff7e146106fa578063a9059cbb1461070f578063bfa31ff91461072f57600080fd5b806370a08231146105cd578063715018a6146106035780637a6d4398146106185780638da5cb5b146106385780638dd148021461065657806395d89b411461067657600080fd5b80633f5e0c05116101fe5780635fecd926116101b75780635fecd926146105375780636235e93f146105575780636ac56ced146105775780636bc87c3a1461058c5780636c0a24eb146105a25780636fc3eaec146105b857600080fd5b80633f5e0c0514610468578063437823ec1461048857806349bd5a5e146104a85780634bfe514d146104e05780635e3d3007146104f55780635fcefa421461051757600080fd5b806323b872dd1161025057806323b872dd1461039357806327a14fc2146103b35780632b929aa8146103d3578063313ce567146103f357806334596c161461040f5780633bbac5791461042f57600080fd5b806306fdde03146102a3578063095ea7b3146102e557806314eb76ac1461031557806318160ddd1461033757806322976e0d1461035d5780632369bf831461037357600080fd5b3661029e57005b600080fd5b3480156102af57600080fd5b5060408051808201909152600781526608cc2d8c6dedcb60cb1b60208201525b6040516102dc91906130c1565b60405180910390f35b3480156102f157600080fd5b50610305610300366004612f4f565b6108c9565b60405190151581526020016102dc565b34801561032157600080fd5b50610335610330366004612e9f565b6108e0565b005b34801561034357600080fd5b50682086ac3510526000005b6040519081526020016102dc565b34801561036957600080fd5b5061034f600e5481565b34801561037f57600080fd5b5061033561038e366004612e9f565b610935565b34801561039f57600080fd5b506103056103ae366004612f0f565b610981565b3480156103bf57600080fd5b506103356103ce366004612fe8565b6109ea565b3480156103df57600080fd5b506103356103ee366004612fe8565b610ab7565b3480156103ff57600080fd5b50604051600981526020016102dc565b34801561041b57600080fd5b5061033561042a366004612f7a565b610bf1565b34801561043b57600080fd5b5061030561044a366004612e9f565b6001600160a01b031660009081526019602052604090205460ff1690565b34801561047457600080fd5b50610335610483366004613018565b610c39565b34801561049457600080fd5b506103356104a3366004612e9f565b610cbe565b3480156104b457600080fd5b506020546104c8906001600160a01b031681565b6040516001600160a01b0390911681526020016102dc565b3480156104ec57600080fd5b50610335610d0c565b34801561050157600080fd5b5060225461030590640100000000900460ff1681565b34801561052357600080fd5b50610335610532366004613066565b610d98565b34801561054357600080fd5b50610335610552366004612e9f565b610f30565b34801561056357600080fd5b50610335610572366004612fe8565b610f7b565b34801561058357600080fd5b5061033561100e565b34801561059857600080fd5b5061034f600c5481565b3480156105ae57600080fd5b5061034f60085481565b3480156105c457600080fd5b5061033561109d565b3480156105d957600080fd5b5061034f6105e8366004612e9f565b6001600160a01b031660009081526002602052604090205490565b34801561060f57600080fd5b506103356110d0565b34801561062457600080fd5b50610335610633366004612ed7565b611106565b34801561064457600080fd5b506000546001600160a01b03166104c8565b34801561066257600080fd5b50610335610671366004612e9f565b611180565b34801561068257600080fd5b5060408051808201909152600581526408c829886b60db1b60208201526102cf565b3480156106b057600080fd5b5061034f60105481565b3480156106c657600080fd5b506103356106d5366004612fe8565b6111d9565b3480156106e657600080fd5b506103356106f5366004612e9f565b6112ae565b34801561070657600080fd5b506103356112fa565b34801561071b57600080fd5b5061030561072a366004612f4f565b611387565b34801561073b57600080fd5b5061034f60055481565b34801561075157600080fd5b5061034f60145481565b34801561076757600080fd5b5061034f610776366004612fe8565b611394565b34801561078757600080fd5b506103356118c0565b34801561079c57600080fd5b5060225461030590600160281b900460ff1681565b3480156107bd57600080fd5b506103356118ff565b3480156107d257600080fd5b5061034f60125481565b3480156107e857600080fd5b5061034f6107f7366004612ed7565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561082e57600080fd5b506022546104c890600160301b90046001600160a01b031681565b34801561085557600080fd5b50610335610864366004612e9f565b61198b565b34801561087557600080fd5b50610335610884366004612fe8565b6119d6565b34801561089557600080fd5b506103356108a4366004612e9f565b611ad5565b3480156108b557600080fd5b506103356108c4366004612e9f565b611b6d565b60006108d6338484611c04565b5060015b92915050565b6000546001600160a01b031633146109135760405162461bcd60e51b815260040161090a906131c2565b60405180910390fd5b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461095f5760405162461bcd60e51b815260040161090a906131c2565b601a80546001600160a01b0319166001600160a01b0392909216919091179055565b600061098e848484611d28565b6109e084336109db8560405180606001604052806028815260200161343f602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190612598565b611c04565b5060019392505050565b6000546001600160a01b03163314610a145760405162461bcd60e51b815260040161090a906131c2565b610a28682086ac35105260000060c8611bbb565b8111610a895760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e3525604482015269206f6620737570706c7960b01b606482015260840161090a565b682086ac351052600000811115610ab25760405162461bcd60e51b815260040161090a906131f7565b600855565b6000546001600160a01b03163314610ae15760405162461bcd60e51b815260040161090a906131c2565b6064811115610b4d5760405162461bcd60e51b815260206004820152603260248201527f6d617820707269636520696d70616374206d757374206265206c6573732074686044820152710616e206f7220657175616c20746f203130360741b606482015260840161090a565b60008111610bb55760405162461bcd60e51b815260206004820152602f60248201527f63616e742070726576656e742073656c6c732c2063686f6f73652076616c756560448201526e02067726561746572207468616e203608c1b606482015260840161090a565b60058190556040518181527f585981c0db15e25002a67c38e62f983f189bb219fae23eb213566640fbae5e3c906020015b60405180910390a150565b6000546001600160a01b03163314610c1b5760405162461bcd60e51b815260040161090a906131c2565b6022805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b03163314610c635760405162461bcd60e51b815260040161090a906131c2565b67016345785d8a0000821115610c8b5760405162461bcd60e51b815260040161090a90613114565b67016345785d8a0000811115610cb35760405162461bcd60e51b815260040161090a90613114565b600a91909155600b55565b6000546001600160a01b03163314610ce85760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610d365760405162461bcd60e51b815260040161090a906131c2565b602254600160281b900460ff161515600114610d875760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b604482015260640161090a565b6022805465ff000000000019169055565b6000546001600160a01b03163314610dc25760405162461bcd60e51b815260040161090a906131c2565b6000610ddc82610dd6858188818c8c6125d2565b906125d2565b90506032610deb82600a611bbb565b10610e385760405162461bcd60e51b815260206004820181905260248201527f53756d206f662066656573206d757374206265206c657373207468616e203530604482015260640161090a565b600e869055600c859055601084905560128390556014829055600f869055600d8590556011849055601383905560158290556000610e7a84610dd689886125d2565b9050610e9c81610e966064600e5461263190919063ffffffff16565b90611bbb565b601655601054610eb3908290610e96906064612631565b601755601254610eca908290610e96906064612631565b601855600e54600c546010546012546014546040805195865260208601949094528484019290925260608401526080830152517f96b67df2c4648b38ada47da86f80d0a256df93150752a7b365ca487cab934e649181900360a00190a150505050505050565b6000546001600160a01b03163314610f5a5760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b03166000908152601960205260409020805460ff19169055565b6000546001600160a01b03163314610fa55760405162461bcd60e51b815260040161090a906131c2565b670de0b6b3a76400008110156110095760405162461bcd60e51b8152602060048201526024808201527f63616e74206d616b6520746865206c696d6974206c6f776572207468616e20316044820152631021272160e11b606482015260840161090a565b600955565b6000546001600160a01b031633146110385760405162461bcd60e51b815260040161090a906131c2565b602254640100000000900460ff16156110855760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b604482015260640161090a565b6022805465ffff000000001916640100000000179055565b601a546001600160a01b0316336001600160a01b0316146110bd57600080fd5b4780156110cd576110cd816126b0565b50565b6000546001600160a01b031633146110fa5760405162461bcd60e51b815260040161090a906131c2565b61110460006127a2565b565b6000546001600160a01b031633146111305760405162461bcd60e51b815260040161090a906131c2565b601d80546001600160a01b038085166001600160a01b03199283168117909355601e80549185169190921617905561116790610cbe565b601e5461117c906001600160a01b0316610cbe565b5050565b6000546001600160a01b031633146111aa5760405162461bcd60e51b815260040161090a906131c2565b602280546001600160a01b03909216600160301b026601000000000000600160d01b0319909216919091179055565b6000546001600160a01b031633146112035760405162461bcd60e51b815260040161090a906131c2565b60225462010000900460ff1615156001146112585760405162461bcd60e51b81526020600482015260156024820152741c1c995cd85b1948185b1c9958591e48195b991959605a1b604482015260640161090a565b6022805442600655600783905562ff00ff191660011790556022546040516201000090910460ff16151581527fbad30b8287730cfd8b6df18f878abbd745dc20365bfec848056cad8e6c17b91b90602001610be6565b6000546001600160a01b031633146112d85760405162461bcd60e51b815260040161090a906131c2565b601c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113245760405162461bcd60e51b815260040161090a906131c2565b602254600160281b900460ff16156113705760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b604482015260640161090a565b6022805465ffff000000001916600160281b179055565b60006108d6338484611d28565b6020805460408051630dfe168160e01b8152905160009384936001600160a01b031692630dfe16819260048083019392829003018186803b1580156113d857600080fd5b505afa1580156113ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114109190612ebb565b602080546040805163d21220a760e01b815290519394506000936001600160a01b039092169263d21220a792600480840193829003018186803b15801561145657600080fd5b505afa15801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e9190612ebb565b9050816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156114c957600080fd5b505afa1580156114dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150191906130a0565b60ff166115505760405162461bcd60e51b815260206004820152601c60248201527f4552523a20646563696d616c732063616e6e6f74206265207a65726f00000000604482015260640161090a565b600080602060009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156115a157600080fd5b505afa1580156115b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d99190612f9a565b5060225491935091506301000000900460ff161561177f57602080546040805163d21220a760e01b815290516001600160a01b039092169263d21220a792600480840193829003018186803b15801561163157600080fd5b505afa158015611645573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116699190612ebb565b9350602060009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156116b957600080fd5b505afa1580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f19190612ebb565b9250602060009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561174157600080fd5b505afa158015611755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117799190612f9a565b50925090505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156117ba57600080fd5b505afa1580156117ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f291906130a0565b6117fd90600a613332565b611810906001600160701b0384166133dd565b9050846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561184b57600080fd5b505afa15801561185f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188391906130a0565b61188e90600a613332565b6118a1906001600160701b0385166133dd565b6118ab82896133dd565b6118b591906132cf565b979650505050505050565b601a546001600160a01b0316336001600160a01b0316146118e057600080fd5b3060009081526002602052604090205480156110cd576110cd816127f2565b6000546001600160a01b031633146119295760405162461bcd60e51b815260040161090a906131c2565b602254640100000000900460ff16151560011461197b5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b604482015260640161090a565b6022805464ff0000000019169055565b6000546001600160a01b031633146119b55760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b03163314611a005760405162461bcd60e51b815260040161090a906131c2565b611a15682086ac351052600000612710611bbb565b8111611a775760405162461bcd60e51b815260206004820152602b60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e303160448201526a25206f6620737570706c7960a81b606482015260840161090a565b682086ac351052600000811115611aa05760405162461bcd60e51b815260040161090a906131f7565b60218190556040518181527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf90602001610be6565b6000546001600160a01b03163314611aff5760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b038116611b645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161090a565b6110cd816127a2565b6000546001600160a01b03163314611b975760405162461bcd60e51b815260040161090a906131c2565b6001600160a01b03166000908152601960205260409020805460ff19166001179055565b6000611bfd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612991565b9392505050565b6001600160a01b038316611c665760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161090a565b6001600160a01b038216611cc75760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161090a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611d8c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161090a565b6001600160a01b038216611dee5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161090a565b60008111611e505760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161090a565b6001611e646000546001600160a01b031690565b6001600160a01b0316846001600160a01b031614158015611e9357506000546001600160a01b03848116911614155b8015611ea8575060225462010000900460ff16155b8015611ebd57506001600160a01b0384163014155b8015611ed257506001600160a01b0383163014155b8015611ef357506022546001600160a01b03858116600160301b9092041614155b8015611f1457506022546001600160a01b03848116600160301b9092041614155b156123ea5760225460ff16611f2857600080fd5b601d546001600160a01b03858116911614801590611f545750601e546001600160a01b03858116911614155b15611f6857602154821115611f6857600080fd5b6020546001600160a01b038581169116148015611f935750601f546001600160a01b03848116911614155b1561212857600754600654611fa7916125d2565b4211158015611fc45750601d546001600160a01b03858116911614155b8015611fde5750601e546001600160a01b03858116911614155b15612007576001600160a01b0383166000908152601960205260409020805460ff191660011790555b60405163c2f77e4160e01b815260048101839052600090309063c2f77e419060240160206040518083038186803b15801561204157600080fd5b505afa158015612055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120799190613000565b9050600a548110156120e25760405162461bcd60e51b815260206004820152602c60248201527f796f75206d75737420627579206174206c65617374206d696e20424e4220776f60448201526b393a341037b3103a37b5b2b760a11b606482015260840161090a565b60085461210884610dd6876001600160a01b031660009081526002602052604090205490565b11156121265760405162461bcd60e51b815260040161090a9061315b565b505b602254610100900460ff1615801561214e57506020546001600160a01b03858116911614155b156123ea576001600160a01b03841660009081526019602052604090205460ff1615801561219557506001600160a01b03831660009081526019602052604090205460ff16155b61219e57600080fd5b60405163c2f77e4160e01b815260048101839052600090309063c2f77e419060240160206040518083038186803b1580156121d857600080fd5b505afa1580156121ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122109190613000565b9050600b5481101561227e5760405162461bcd60e51b815260206004820152603160248201527f796f75206d7573742073656c6c206174206c6561737420746865206d696e20426044820152702721103bb7b93a341037b3103a37b5b2b760791b606482015260840161090a565b602254600160281b900460ff161561230d576009548111156123085760405162461bcd60e51b815260206004820152603c60248201527f796f752063616e6e6f742073656c6c206d6f7265207468616e20746865206d6160448201527f7820424e4220616d6f756e7420706572207472616e73616374696f6e00000000606482015260840161090a565b61235e565b602254640100000000900460ff161561235e57600554602080546001600160a01b031660009081526002909152604090205461235291606491610e9691905b90612631565b83111561235e57600080fd5b6020546001600160a01b038581169116146123b75760085461239984610dd6876001600160a01b031660009081526002602052604090205490565b11156123b75760405162461bcd60e51b815260040161090a9061315b565b3060009081526002602052604090205480156123d6576123d6816129bf565b4780156123e6576123e6476126b0565b5050505b6001600160a01b03841660009081526004602052604090205460ff168061242957506001600160a01b03831660009081526004602052604090205460ff165b8061243c575060225462010000900460ff165b8061245b57506022546001600160a01b03858116600160301b90920416145b8061247a57506022546001600160a01b03848116600160301b90920416145b1561248757506000612508565b6001600160a01b03841660009081526019602052604090205460ff16806124c657506001600160a01b03831660009081526019602052604090205460ff165b1561250857612504600e8054600f55600c8054600d5560108054601155601280546013556014805460155560b4948590559284905590819055805555565b5060015b60225462010000900460ff1615612563576000546001600160a01b03858116911614806125425750601d546001600160a01b038581169116145b8061255a5750601e546001600160a01b038581169116145b61256357600080fd5b61256f84848484612a49565b612592600f54600e55600d54600c55601154601055601354601255601554601455565b50505050565b600081848411156125bc5760405162461bcd60e51b815260040161090a91906130c1565b5060006125c984866133fc565b95945050505050565b6000806125df83856132b7565b905083811015611bfd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161090a565b600082612640575060006108da565b600061264c83856133dd565b90508261265985836132cf565b14611bfd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161090a565b601a546016546001600160a01b03909116906108fc906126d890606490610e96908690612631565b6040518115909202916000818181858888f19350505050158015612700573d6000803e3d6000fd5b50601b546017546001600160a01b03909116906108fc9061272990606490610e96908690612631565b6040518115909202916000818181858888f19350505050158015612751573d6000803e3d6000fd5b50601c546018546001600160a01b03909116906108fc9061277a90606490610e96908690612631565b6040518115909202916000818181858888f1935050505015801561117c573d6000803e3d6000fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6022805461ff001916610100179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061284457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561289857600080fd5b505afa1580156128ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d09190612ebb565b816001815181106128f157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601f546129179130911684611c04565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612950908590600090869030904290600401613247565b600060405180830381600087803b15801561296a57600080fd5b505af115801561297e573d6000803e3d6000fd5b50506022805461ff001916905550505050565b600081836129b25760405162461bcd60e51b815260040161090a91906130c1565b5060006125c984866132cf565b6022805461ff001916610100179055600c54601254601054600e54600093612a00936129f3939192610dd6928391906125d2565b600c54610e969085612631565b90506000612a0f826002611bbb565b90506000612a1d8483612a61565b905047612a29826127f2565b6000612a3d83610e968661234c4787612a61565b905061297e8482612aa3565b80612a5657612a56612b87565b61256f848484612bf9565b6000611bfd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612598565b601f54612abb9030906001600160a01b031684611c04565b601f546001600160a01b031663f305d719823085600080612ae46000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612b4757600080fd5b505af1158015612b5b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b809190613039565b5050505050565b600e54158015612b975750600c54155b8015612ba35750601054155b8015612baf5750601254155b8015612bbb5750601454155b15612bc257565b600e8054600f55600c8054600d55601080546011556012805460135560148054601555600094859055928490559083905582905555565b612c326040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b612c4d6103e8610e96600e548561263190919063ffffffff16565b6020820152600c54612c68906103e890610e96908590612631565b8152601054612c80906103e890610e96908590612631565b6040820152601254612c9b906103e890610e96908590612631565b6060820152601454612cb6906103e890610e96908590612631565b608082018190526060820151604083015183516020850151612ced9493612ce7939092849283919082908b90612a61565b90612a61565b60a08201526001600160a01b038416600090815260026020526040902054612d159083612a61565b6001600160a01b038086166000908152600260205260408082209390935560a084015191861681529190912054612d4b916125d2565b60026000856001600160a01b03166001600160a01b0316815260200190815260200160002081905550612db8612da28260600151610dd68460400151610dd6866000015187602001516125d290919063ffffffff16565b30600090815260026020526040902054906125d2565b30600090815260026020526040812091909155608082015161dead9091527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc54612e01916125d2565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5560a08101516040516001600160a01b0385811692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612e759190815260200190565b60405180910390a350505050565b80516001600160701b0381168114612e9a57600080fd5b919050565b600060208284031215612eb0578081fd5b8135611bfd81613429565b600060208284031215612ecc578081fd5b8151611bfd81613429565b60008060408385031215612ee9578081fd5b8235612ef481613429565b91506020830135612f0481613429565b809150509250929050565b600080600060608486031215612f23578081fd5b8335612f2e81613429565b92506020840135612f3e81613429565b929592945050506040919091013590565b60008060408385031215612f61578182fd5b8235612f6c81613429565b946020939093013593505050565b600060208284031215612f8b578081fd5b81358015158114611bfd578182fd5b600080600060608486031215612fae578283fd5b612fb784612e83565b9250612fc560208501612e83565b9150604084015163ffffffff81168114612fdd578182fd5b809150509250925092565b600060208284031215612ff9578081fd5b5035919050565b600060208284031215613011578081fd5b5051919050565b6000806040838503121561302a578182fd5b50508035926020909101359150565b60008060006060848603121561304d578283fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561307d578081fd5b505083359560208501359550604085013594606081013594506080013592509050565b6000602082840312156130b1578081fd5b815160ff81168114611bfd578182fd5b6000602080835283518082850152825b818110156130ed578581018301518582016040015282016130d1565b818111156130fe5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526027908201527f63616e74206d616b6520746865206c696d697420686967686572207468616e206040820152661817189021272160c91b606082015260800190565b60208082526041908201527f77616c6c65742062616c616e6365206166746572207472616e73666572206d7560408201527f7374206265206c657373207468616e206d61782077616c6c657420616d6f756e6060820152601d60fa1b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f416d6f756e74206d757374206265206c657373207468616e206f72206571756160408201526f6c20746f20746f74616c537570706c7960801b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156132965784516001600160a01b031683529383019391830191600101613271565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156132ca576132ca613413565b500190565b6000826132ea57634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561332a57816000190482111561331057613310613413565b8085161561331d57918102915b93841c93908002906132f4565b509250929050565b6000611bfd60ff84168360008261334b575060016108da565b81613358575060006108da565b816001811461336e576002811461337857613394565b60019150506108da565b60ff84111561338957613389613413565b50506001821b6108da565b5060208310610133831016604e8410600b84101617156133b7575081810a6108da565b6133c183836132ef565b80600019048211156133d5576133d5613413565b029392505050565b60008160001904831182151516156133f7576133f7613413565b500290565b60008282101561340e5761340e613413565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146110cd57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b3da3e5022413e35547506dac0425ac5ea476d755d68aa6ac7473e7dd7d91cdc64736f6c63430008040033

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

0000000000000000000000006d54f12a11901843a4cac37b8eb911dade8184a9

-----Decoded View---------------
Arg [0] : _bridge (address): 0x6d54f12a11901843a4Cac37B8EB911dADe8184a9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006d54f12a11901843a4cac37b8eb911dade8184a9


Deployed Bytecode Sourcemap

8723:20955:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12939:94;;;;;;;;;;-1:-1:-1;13020:5:0;;;;;;;;;;;;-1:-1:-1;;;13020:5:0;;;;12939:94;;;;;;;:::i;:::-;;;;;;;;14023:163;;;;;;;;;;-1:-1:-1;14023:163:0;;;;;:::i;:::-;;:::i;:::-;;;5712:14:1;;5705:22;5687:41;;5675:2;5660:18;14023:163:0;5642:92:1;28707:122:0;;;;;;;;;;-1:-1:-1;28707:122:0;;;;;:::i;:::-;;:::i;:::-;;13249:97;;;;;;;;;;-1:-1:-1;9184:20:0;13249:97;;;16426:25:1;;;16414:2;16399:18;13249:97:0;16381:76:1;9715:33:0;;;;;;;;;;;;;;;;28553:142;;;;;;;;;;-1:-1:-1;28553:142:0;;;;;:::i;:::-;;:::i;14194:312::-;;;;;;;;;;-1:-1:-1;14194:312:0;;;;;:::i;:::-;;:::i;25375:325::-;;;;;;;;;;-1:-1:-1;25375:325:0;;;;;:::i;:::-;;:::i;26862:337::-;;;;;;;;;;-1:-1:-1;26862:337:0;;;;;:::i;:::-;;:::i;13147:94::-;;;;;;;;;;-1:-1:-1;13147:94:0;;8955:1;18060:36:1;;18048:2;18033:18;13147:94:0;18015:87:1;27692:102:0;;;;;;;;;;-1:-1:-1;27692:102:0;;;;;:::i;:::-;;:::i;13481:98::-;;;;;;;;;;-1:-1:-1;13481:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;13558:13:0;13534:4;13558:13;;;:4;:13;;;;;;;;;13481:98;27806:354;;;;;;;;;;-1:-1:-1;27806:354:0;;;;;:::i;:::-;;:::i;24558:113::-;;;;;;;;;;-1:-1:-1;24558:113:0;;;;;:::i;:::-;;:::i;11066:28::-;;;;;;;;;;-1:-1:-1;11066:28:0;;;;-1:-1:-1;;;;;11066:28:0;;;;;;-1:-1:-1;;;;;4891:32:1;;;4873:51;;4861:2;4846:18;11066:28:0;4828:102:1;29065:167:0;;;;;;;;;;;;;:::i;11284:48::-;;;;;;;;;;-1:-1:-1;11284:48:0;;;;;;;;;;;25708:1146;;;;;;;;;;-1:-1:-1;25708:1146:0;;;;;:::i;:::-;;:::i;24805:97::-;;;;;;;;;;-1:-1:-1;24805:97:0;;;;;:::i;:::-;;:::i;28172:215::-;;;;;;;;;;-1:-1:-1;28172:215:0;;;;;:::i;:::-;;:::i;29244:228::-;;;;;;;;;;;;;:::i;9596:33::-;;;;;;;;;;;;;;;;9331:31;;;;;;;;;;;;;;;;22995:250;;;;;;;;;;;;;:::i;13354:119::-;;;;;;;;;;-1:-1:-1;13354:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;13447:18:0;13420:7;13447:18;;;:9;:18;;;;;;;13354:119;3630:103;;;;;;;;;;;;;:::i;27207:245::-;;;;;;;;;;-1:-1:-1;27207:245:0;;;;;:::i;:::-;;:::i;3416:79::-;;;;;;;;;;-1:-1:-1;3454:7:0;3481:6;-1:-1:-1;;;;;3481:6:0;3416:79;;13591:90;;;;;;;;;;-1:-1:-1;13591:90:0;;;;;:::i;:::-;;:::i;13041:98::-;;;;;;;;;;-1:-1:-1;13124:7:0;;;;;;;;;;;;-1:-1:-1;;;13124:7:0;;;;13041:98;;9834:28;;;;;;;;;;;;;;;;27460:224;;;;;;;;;;-1:-1:-1;27460:224:0;;;;;:::i;:::-;;:::i;28399:142::-;;;;;;;;;;-1:-1:-1;28399:142:0;;;;;:::i;:::-;;:::i;28841:212::-;;;;;;;;;;;;;:::i;13693:169::-;;;;;;;;;;-1:-1:-1;13693:169:0;;;;;:::i;:::-;;:::i;9226:31::-;;;;;;;;;;;;;;;;10056:27;;;;;;;;;;;;;;;;16117:899;;;;;;;;;;-1:-1:-1;16117:899:0;;;;;:::i;:::-;;:::i;22739:248::-;;;;;;;;;;;;;:::i;11339:40::-;;;;;;;;;;-1:-1:-1;11339:40:0;;;;-1:-1:-1;;;11339:40:0;;;;;;29484:191;;;;;;;;;;;;;:::i;9938:32::-;;;;;;;;;;;;;;;;13870:145;;;;;;;;;;-1:-1:-1;13870:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;13980:18:0;;;13953:7;13980:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13870:145;11392:21;;;;;;;;;;-1:-1:-1;11392:21:0;;;;-1:-1:-1;;;11392:21:0;;-1:-1:-1;;;;;11392:21:0;;;24679:114;;;;;;;;;;-1:-1:-1;24679:114:0;;;;;:::i;:::-;;:::i;25015:352::-;;;;;;;;;;-1:-1:-1;25015:352:0;;;;;:::i;:::-;;:::i;3892:201::-;;;;;;;;;;-1:-1:-1;3892:201:0;;;;;:::i;:::-;;:::i;24910:93::-;;;;;;;;;;-1:-1:-1;24910:93:0;;;;;:::i;:::-;;:::i;14023:163::-;14100:4;14117:39;1217:10;14140:7;14149:6;14117:8;:39::i;:::-;-1:-1:-1;14174:4:0;14023:163;;;;;:::o;28707:122::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;;;;;;;;;28795:12:::1;:26:::0;;-1:-1:-1;;;;;;28795:26:0::1;-1:-1:-1::0;;;;;28795:26:0;;;::::1;::::0;;;::::1;::::0;;28707:122::o;28553:142::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;28651:17:::1;:36:::0;;-1:-1:-1;;;;;;28651:36:0::1;-1:-1:-1::0;;;;;28651:36:0;;;::::1;::::0;;;::::1;::::0;;28553:142::o;14194:312::-;14294:4;14311:36;14321:6;14329:9;14340:6;14311:9;:36::i;:::-;14358:118;14367:6;1217:10;14387:88;14425:6;14387:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14387:19:0;;;;;;:11;:19;;;;;;;;1217:10;14387:33;;;;;;;;;;:37;:88::i;:::-;14358:8;:118::i;:::-;-1:-1:-1;14494:4:0;14194:312;;;;;:::o;25375:325::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;25486:16:::1;9184:20;25498:3;25486:11;:16::i;:::-;25468:15;:34;25460:89;;;::::0;-1:-1:-1;;;25460:89:0;;10475:2:1;25460:89:0::1;::::0;::::1;10457:21:1::0;10514:2;10494:18;;;10487:30;10553:34;10533:18;;;10526:62;-1:-1:-1;;;10604:18:1;;;10597:40;10654:19;;25460:89:0::1;10447:232:1::0;25460:89:0::1;9184:20;25568:15;:26;;25560:87;;;;-1:-1:-1::0;;;25560:87:0::1;;;;;;;:::i;:::-;25658:16;:34:::0;25375:325::o;26862:337::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;26962:3:::1;26947:11;:18;;26939:81;;;::::0;-1:-1:-1;;;26939:81:0;;15290:2:1;26939:81:0::1;::::0;::::1;15272:21:1::0;15329:2;15309:18;;;15302:30;15368:34;15348:18;;;15341:62;-1:-1:-1;;;15419:18:1;;;15412:48;15477:19;;26939:81:0::1;15262:240:1::0;26939:81:0::1;27053:1;27039:11;:15;27031:75;;;::::0;-1:-1:-1;;;27031:75:0;;15709:2:1;27031:75:0::1;::::0;::::1;15691:21:1::0;15748:2;15728:18;;;15721:30;15787:34;15767:18;;;15760:62;-1:-1:-1;;;15838:18:1;;;15831:45;15893:19;;27031:75:0::1;15681:237:1::0;27031:75:0::1;27117:12;:26:::0;;;27159:32:::1;::::0;16426:25:1;;;27159:32:0::1;::::0;16414:2:1;16399:18;27159:32:0::1;;;;;;;;26862:337:::0;:::o;27692:102::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;27765:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;27765:21:0;;::::1;::::0;;;::::1;::::0;;27692:102::o;27806:354::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;27927:18:::1;27914:9;:31;;27906:83;;;;-1:-1:-1::0;;;27906:83:0::1;;;;;;;:::i;:::-;28022:18;28008:10;:32;;28000:84;;;;-1:-1:-1::0;;;28000:84:0::1;;;;;;;:::i;:::-;28095:10;:22:::0;;;;28128:11:::1;:24:::0;27806:354::o;24558:113::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24629:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;24629:34:0::1;24659:4;24629:34;::::0;;24558:113::o;29065:167::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;29136:20:::1;::::0;-1:-1:-1;;;29136:20:0;::::1;;;:28;;29160:4;29136:28;29128:57;;;::::0;-1:-1:-1;;;29128:57:0;;9306:2:1;29128:57:0::1;::::0;::::1;9288:21:1::0;9345:2;9325:18;;;9318:30;-1:-1:-1;;;9364:18:1;;;9357:46;9420:18;;29128:57:0::1;9278:166:1::0;29128:57:0::1;29196:20;:28:::0;;-1:-1:-1;;29196:28:0::1;::::0;;29065:167::o;25708:1146::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;25858:16:::1;25877:74;25943:7:::0;25877:61:::1;25925:12:::0;25877:61;25912:7;25877:61;:12;25894;25877:16:::1;:30::i;:::-;:34:::0;::::1;:43::i;:74::-;25858:93:::0;-1:-1:-1;25989:2:0::1;25970:16;25858:93:::0;25983:2:::1;25970:12;:16::i;:::-;:21;25962:66;;;::::0;-1:-1:-1;;;25962:66:0;;7779:2:1;25962:66:0::1;::::0;::::1;7761:21:1::0;;;7798:18;;;7791:30;7857:34;7837:18;;;7830:62;7909:18;;25962:66:0::1;7751:182:1::0;25962:66:0::1;26041:13;:28:::0;;;26080:13:::1;:28:::0;;;26119:8:::1;:18:::0;;;26148:13:::1;:28:::0;;;26187:8:::1;:18:::0;;;26226:21:::1;:37:::0;;;26274:21:::1;:37:::0;;;26322:16:::1;:27:::0;;;26360:21:::1;:37:::0;;;26408:16:::1;:27:::0;;;-1:-1:-1;26479:46:0::1;26164:12:::0;26479:27:::1;26057:12:::0;26130:7;26479:17:::1;:27::i;:46::-;26456:69;;26566:42;26595:12;26567:22;26585:3;26567:13;;:17;;:22;;;;:::i;:::-;26566:28:::0;::::1;:42::i;:::-;26546:17;:62:::0;26635:8:::1;::::0;26634:37:::1;::::0;26658:12;;26635:17:::1;::::0;26648:3:::1;26635:12;:17::i;26634:37::-;26619:12;:52:::0;26703:13:::1;::::0;26702:42:::1;::::0;26731:12;;26703:22:::1;::::0;26721:3:::1;26703:17;:22::i;26702:42::-;26682:17;:62:::0;26782:13:::1;::::0;26797::::1;::::0;26812:8:::1;::::0;26822:13:::1;::::0;26837:8:::1;::::0;26770:76:::1;::::0;;17709:25:1;;;17765:2;17750:18;;17743:34;;;;17793:18;;;17786:34;;;;17851:2;17836:18;;17829:34;17894:3;17879:19;;17872:35;26770:76:0;::::1;::::0;;;;17696:3:1;26770:76:0;;::::1;3613:1;;25708:1146:::0;;;;;:::o;24805:97::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24873:13:0::1;24889:5;24873:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;24873:21:0::1;::::0;;24805:97::o;28172:215::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;28278:19:::1;28264:10;:33;;28256:82;;;::::0;-1:-1:-1;;;28256:82:0;;12884:2:1;28256:82:0::1;::::0;::::1;12866:21:1::0;12923:2;12903:18;;;12896:30;12962:34;12942:18;;;12935:62;-1:-1:-1;;;13013:18:1;;;13006:34;13057:19;;28256:82:0::1;12856:226:1::0;28256:82:0::1;28349:17;:30:::0;28172:215::o;29244:228::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;29322:28:::1;::::0;;;::::1;;;:37;29314:65;;;::::0;-1:-1:-1;;;29314:65:0;;13289:2:1;29314:65:0::1;::::0;::::1;13271:21:1::0;13328:2;13308:18;;;13301:30;-1:-1:-1;;;13347:18:1;;;13340:45;13402:18;;29314:65:0::1;13261:165:1::0;29314:65:0::1;29390:28;:35:::0;;-1:-1:-1;;29436:28:0;29390:35;29436:28;;;29244:228::o;22995:250::-;23061:17;;-1:-1:-1;;;;;23061:17:0;1217:10;-1:-1:-1;;;;;23045:33:0;;23037:42;;;;;;23119:21;23155:22;;23151:87;;23194:32;23207:18;23194:12;:32::i;:::-;22995:250;:::o;3630:103::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;3695:30:::1;3722:1;3695:18;:30::i;:::-;3630:103::o:0;27207:245::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;27307:13:::1;:22:::0;;-1:-1:-1;;;;;27307:22:0;;::::1;-1:-1:-1::0;;;;;;27307:22:0;;::::1;::::0;::::1;::::0;;;27340:14:::1;:23:::0;;;;::::1;::::0;;;::::1;;::::0;;27374:29:::1;::::0;:14:::1;:29::i;:::-;27429:14;::::0;27414:30:::1;::::0;-1:-1:-1;;;;;27429:14:0::1;27414;:30::i;:::-;27207:245:::0;;:::o;13591:90::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;13657:6:::1;:16:::0;;-1:-1:-1;;;;;13657:16:0;;::::1;-1:-1:-1::0;;;13657:16:0::1;-1:-1:-1::0;;;;;;13657:16:0;;::::1;::::0;;;::::1;::::0;;13591:90::o;27460:224::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;27539:7:::1;::::0;;;::::1;;;:15;;27550:4;27539:15;27531:49;;;::::0;-1:-1:-1;;;27531:49:0;;9651:2:1;27531:49:0::1;::::0;::::1;9633:21:1::0;9690:2;9670:18;;;9663:30;-1:-1:-1;;;9709:18:1;;;9702:51;9770:18;;27531:49:0::1;9623:171:1::0;27531:49:0::1;27591:7;:15:::0;;22646;22632:11;:29;22672:10;:22;;;-1:-1:-1;;22705:18:0;-1:-1:-1;22705:18:0;;;27668:7:::1;::::0;27655:21:::1;::::0;27668:7;;;::::1;;;5712:14:1::0;5705:22;5687:41;;27655:21:0::1;::::0;5675:2:1;5660:18;27655:21:0::1;5642:92:1::0;28399:142:0;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;28497:17:::1;:36:::0;;-1:-1:-1;;;;;;28497:36:0::1;-1:-1:-1::0;;;;;28497:36:0;;;::::1;::::0;;;::::1;::::0;;28399:142::o;28841:212::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;28911:20:::1;::::0;-1:-1:-1;;;28911:20:0;::::1;;;:29;28903:57;;;::::0;-1:-1:-1;;;28903:57:0;;13289:2:1;28903:57:0::1;::::0;::::1;13271:21:1::0;13328:2;13308:18;;;13301:30;-1:-1:-1;;;13347:18:1;;;13340:45;13402:18;;28903:57:0::1;13261:165:1::0;28903:57:0::1;28971:20;:27:::0;;-1:-1:-1;;29009:36:0;-1:-1:-1;;;29009:36:0;;;28841:212::o;13693:169::-;13773:4;13790:42;1217:10;13814:9;13825:6;13790:9;:42::i;16117:899::-;16255:13;;;16240:38;;;-1:-1:-1;;;16240:38:0;;;;16181:7;;;;-1:-1:-1;;;;;16255:13:0;;16240:36;;:38;;;;;16255:13;16240:38;;;;;16255:13;16240:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16353:13;;;16338:38;;;-1:-1:-1;;;16338:38:0;;;;16201:78;;-1:-1:-1;16299:21:0;;-1:-1:-1;;;;;16353:13:0;;;;16338:36;;:38;;;;;;;;;;16353:13;16338:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16299:78;;16411:6;-1:-1:-1;;;;;16411:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:22;;16403:63;;;;-1:-1:-1;;;16403:63:0;;16125:2:1;16403:63:0;;;16107:21:1;16164:2;16144:18;;;16137:30;16203;16183:18;;;16176:58;16251:18;;16403:63:0;16097:178:1;16403:63:0;16488:12;16502;16534:13;;;;;;;;;-1:-1:-1;;;;;16534:13:0;-1:-1:-1;;;;;16519:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16576:11:0;;16487:75;;-1:-1:-1;16487:75:0;-1:-1:-1;16576:11:0;;;;;16573:272;;;16643:13;;;16628:38;;;-1:-1:-1;;;16628:38:0;;;;-1:-1:-1;;;;;16643:13:0;;;;16628:36;;:38;;;;;;;;;;16643:13;16628:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16604:63;;16730:13;;;;;;;;;-1:-1:-1;;;;;16730:13:0;-1:-1:-1;;;;;16715:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16691:63;;16805:13;;;;;;;;;-1:-1:-1;;;;;16805:13:0;-1:-1:-1;;;;;16790:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16774:59:0;-1:-1:-1;16774:59:0;-1:-1:-1;16573:272:0;16857:9;16879:6;-1:-1:-1;;;;;16879:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16875:21;;:2;:21;:::i;:::-;16869:28;;-1:-1:-1;;;;;16869:28:0;;;:::i;:::-;16857:40;;16940:6;-1:-1:-1;;;;;16940:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16936:21;;:2;:21;:::i;:::-;16930:28;;-1:-1:-1;;;;;16930:28:0;;;:::i;:::-;16916:11;16923:4;16916:6;:11;:::i;:::-;16915:44;;;;:::i;:::-;16908:52;16117:899;-1:-1:-1;;;;;;;16117:899:0:o;22739:248::-;22805:17;;-1:-1:-1;;;;;22805:17:0;1217:10;-1:-1:-1;;;;;22789:33:0;;22781:42;;;;;;22878:4;22834:23;13447:18;;;:9;:18;;;;;;22899:19;;22895:85;;22935:33;22952:15;22935:16;:33::i;29484:191::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;29563:28:::1;::::0;;;::::1;;;:36;;29595:4;29563:36;29555:65;;;::::0;-1:-1:-1;;;29555:65:0;;9306:2:1;29555:65:0::1;::::0;::::1;9288:21:1::0;9345:2;9325:18;;;9318:30;-1:-1:-1;;;9364:18:1;;;9357:46;9420:18;;29555:65:0::1;9278:166:1::0;29555:65:0::1;29631:28;:36:::0;;-1:-1:-1;;29631:36:0::1;::::0;;29484:191::o;24679:114::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24750:27:0::1;24780:5;24750:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;24750:35:0::1;::::0;;24679:114::o;25015:352::-;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;25114:18:::1;9184:20;25126:5;25114:11;:18::i;:::-;25100:11;:32;25092:88;;;::::0;-1:-1:-1;;;25092:88:0;;10886:2:1;25092:88:0::1;::::0;::::1;10868:21:1::0;10925:2;10905:18;;;10898:30;10964:34;10944:18;;;10937:62;-1:-1:-1;;;11015:18:1;;;11008:41;11066:19;;25092:88:0::1;10858:233:1::0;25092:88:0::1;9184:20;25199:11;:22;;25191:83;;;;-1:-1:-1::0;;;25191:83:0::1;;;;;;;:::i;:::-;25285:12;:26:::0;;;25327:32:::1;::::0;16426:25:1;;;25327:32:0::1;::::0;16414:2:1;16399:18;25327:32:0::1;16381:76:1::0;3892:201:0;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3981:22:0;::::1;3973:73;;;::::0;-1:-1:-1;;;3973:73:0;;8140:2:1;3973:73:0::1;::::0;::::1;8122:21:1::0;8179:2;8159:18;;;8152:30;8218:34;8198:18;;;8191:62;-1:-1:-1;;;8269:18:1;;;8262:36;8315:19;;3973:73:0::1;8112:228:1::0;3973:73:0::1;4057:28;4076:8;4057:18;:28::i;24910:93::-:0;3543:6;;-1:-1:-1;;;;;3543:6:0;1217:10;3543:22;3535:67;;;;-1:-1:-1;;;3535:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24975:13:0::1;;::::0;;;:4:::1;:13;::::0;;;;:20;;-1:-1:-1;;24975:20:0::1;24991:4;24975:20;::::0;;24910:93::o;2726:132::-;2784:7;2811:39;2815:1;2818;2811:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2804:46;2726:132;-1:-1:-1;;;2726:132:0:o;15727:335::-;-1:-1:-1;;;;;15820:19:0;;15812:68;;;;-1:-1:-1;;;15812:68:0;;14885:2:1;15812:68:0;;;14867:21:1;14924:2;14904:18;;;14897:30;14963:34;14943:18;;;14936:62;-1:-1:-1;;;15014:18:1;;;15007:34;15058:19;;15812:68:0;14857:226:1;15812:68:0;-1:-1:-1;;;;;15899:21:0;;15891:68;;;;-1:-1:-1;;;15891:68:0;;8547:2:1;15891:68:0;;;8529:21:1;8586:2;8566:18;;;8559:30;8625:34;8605:18;;;8598:62;-1:-1:-1;;;8676:18:1;;;8669:32;8718:19;;15891:68:0;8519:224:1;15891:68:0;-1:-1:-1;;;;;15970:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;16022:32;;16426:25:1;;;16022:32:0;;16399:18:1;16022:32:0;;;;;;;15727:335;;;:::o;17028:3269::-;-1:-1:-1;;;;;17116:18:0;;17108:68;;;;-1:-1:-1;;;17108:68:0;;14479:2:1;17108:68:0;;;14461:21:1;14518:2;14498:18;;;14491:30;14557:34;14537:18;;;14530:62;-1:-1:-1;;;14608:18:1;;;14601:35;14653:19;;17108:68:0;14451:227:1;17108:68:0;-1:-1:-1;;;;;17195:16:0;;17187:64;;;;-1:-1:-1;;;17187:64:0;;6967:2:1;17187:64:0;;;6949:21:1;7006:2;6986:18;;;6979:30;7045:34;7025:18;;;7018:62;-1:-1:-1;;;7096:18:1;;;7089:33;7139:19;;17187:64:0;6939:225:1;17187:64:0;17279:1;17270:6;:10;17262:64;;;;-1:-1:-1;;;17262:64:0;;12474:2:1;17262:64:0;;;12456:21:1;12513:2;12493:18;;;12486:30;12552:34;12532:18;;;12525:62;-1:-1:-1;;;12603:18:1;;;12596:39;12652:19;;17262:64:0;12446:231:1;17262:64:0;17354:4;17383:7;3454;3481:6;-1:-1:-1;;;;;3481:6:0;;3416:79;17383:7;-1:-1:-1;;;;;17375:15:0;:4;-1:-1:-1;;;;;17375:15:0;;;:32;;;;-1:-1:-1;3454:7:0;3481:6;-1:-1:-1;;;;;17394:13:0;;;3481:6;;17394:13;;17375:32;:44;;;;-1:-1:-1;17412:7:0;;;;;;;17411:8;17375:44;:69;;;;-1:-1:-1;;;;;;17423:21:0;;17439:4;17423:21;;17375:69;:92;;;;-1:-1:-1;;;;;;17448:19:0;;17462:4;17448:19;;17375:92;:110;;;;-1:-1:-1;17479:6:0;;-1:-1:-1;;;;;17471:14:0;;;-1:-1:-1;;;17479:6:0;;;;17471:14;;17375:110;:126;;;;-1:-1:-1;17495:6:0;;-1:-1:-1;;;;;17489:12:0;;;-1:-1:-1;;;17495:6:0;;;;17489:12;;17375:126;17371:2437;;;17526:11;;;;17518:20;;;;;;17565:13;;-1:-1:-1;;;;;17557:21:0;;;17565:13;;17557:21;;;;:47;;-1:-1:-1;17590:14:0;;-1:-1:-1;;;;;17582:22:0;;;17590:14;;17582:22;;17557:47;17553:119;;;17643:12;;17633:6;:22;;17625:31;;;;;;17698:13;;-1:-1:-1;;;;;17690:21:0;;;17698:13;;17690:21;:55;;;;-1:-1:-1;17729:15:0;;-1:-1:-1;;;;;17715:30:0;;;17729:15;;17715:30;;17690:55;17686:609;;;17813:10;;17797:11;;:27;;:15;:27::i;:::-;17778:15;:46;;:71;;;;-1:-1:-1;17836:13:0;;-1:-1:-1;;;;;17828:21:0;;;17836:13;;17828:21;;17778:71;:97;;;;-1:-1:-1;17861:14:0;;-1:-1:-1;;;;;17853:22:0;;;17861:14;;17853:22;;17778:97;17774:161;;;-1:-1:-1;;;;;17900:8:0;;;;;;:4;:8;;;;;:15;;-1:-1:-1;;17900:15:0;17911:4;17900:15;;;17774:161;17991:29;;-1:-1:-1;;;17991:29:0;;;;;16426:25:1;;;17971:17:0;;17991:4;;:21;;16399:18:1;;17991:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17971:49;;18078:10;;18065:9;:23;;18057:80;;;;-1:-1:-1;;;18057:80:0;;11298:2:1;18057:80:0;;;11280:21:1;11337:2;11317:18;;;11310:30;11376:34;11356:18;;;11349:62;-1:-1:-1;;;11427:18:1;;;11420:42;11479:19;;18057:80:0;11270:234:1;18057:80:0;18193:16;;18164:25;18182:6;18164:13;18174:2;-1:-1:-1;;;;;13447:18:0;13420:7;13447:18;;;:9;:18;;;;;;;13354:119;18164:25;:45;;18156:123;;;;-1:-1:-1;;;18156:123:0;;;;;;;:::i;:::-;17686:609;;18328:6;;;;;;;18327:7;:32;;;;-1:-1:-1;18346:13:0;;-1:-1:-1;;;;;18338:21:0;;;18346:13;;18338:21;;18327:32;18323:1474;;;-1:-1:-1;;;;;18408:10:0;;;;;;:4;:10;;;;;;;;18407:11;:24;;;;-1:-1:-1;;;;;;18423:8:0;;;;;;:4;:8;;;;;;;;18422:9;18407:24;18399:33;;;;;;18489:29;;-1:-1:-1;;;18489:29:0;;;;;16426:25:1;;;18469:17:0;;18489:4;;:21;;16399:18:1;;18489:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18469:49;;18576:11;;18563:9;:24;;18555:86;;;;-1:-1:-1;;;18555:86:0;;6549:2:1;18555:86:0;;;6531:21:1;6588:2;6568:18;;;6561:30;6627:34;6607:18;;;6600:62;-1:-1:-1;;;6678:18:1;;;6671:47;6735:19;;18555:86:0;6521:239:1;18555:86:0;18666:20;;-1:-1:-1;;;18666:20:0;;;;18662:430;;;18754:17;;18741:9;:30;;18733:103;;;;-1:-1:-1;;;18733:103:0;;13633:2:1;18733:103:0;;;13615:21:1;13672:2;13652:18;;;13645:30;13711:34;13691:18;;;13684:62;13782:30;13762:18;;;13755:58;13830:19;;18733:103:0;13605:250:1;18733:103:0;18662:430;;;18903:28;;;;;;;18899:193;;;19025:12;;19006:13;;;-1:-1:-1;;;;;19006:13:0;13420:7;13447:18;;;:9;:18;;;;;;;18996:51;;19043:3;;18996:42;;19025:12;18996:24;:28;;:42::i;:51::-;18986:6;:61;;18978:70;;;;;;19137:13;;-1:-1:-1;;;;;19131:19:0;;;19137:13;;19131:19;19128:214;;19234:16;;19205:25;19223:6;19205:13;19215:2;-1:-1:-1;;;;;13447:18:0;13420:7;13447:18;;;:9;:18;;;;;;;13354:119;19205:25;:45;;19197:123;;;;-1:-1:-1;;;19197:123:0;;;;;;;:::i;:::-;19411:4;19362:28;13447:18;;;:9;:18;;;;;;19442:24;;19438:129;;19493:36;19508:20;19493:14;:36::i;:::-;19614:21;19658:22;;19654:106;;19705:35;19718:21;19705:12;:35::i;:::-;18323:1474;;;;-1:-1:-1;;;;;19824:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;19852:22:0;;;;;;:18;:22;;;;;;;;19824:50;:61;;;-1:-1:-1;19878:7:0;;;;;;;19824:61;:79;;;-1:-1:-1;19897:6:0;;-1:-1:-1;;;;;19889:14:0;;;-1:-1:-1;;;19897:6:0;;;;19889:14;19824:79;:95;;;-1:-1:-1;19913:6:0;;-1:-1:-1;;;;;19907:12:0;;;-1:-1:-1;;;19913:6:0;;;;19907:12;19824:95;19820:255;;;-1:-1:-1;19946:5:0;19820:255;;;-1:-1:-1;;;;;19984:10:0;;;;;;:4;:10;;;;;;;;;:22;;-1:-1:-1;;;;;;19998:8:0;;;;;;:4;:8;;;;;;;;19984:22;19980:95;;;20023:11;15105:13;;;15081:21;:37;15153:13;;;15129:21;:37;15196:8;;;15177:16;:27;15239:13;;;15215:21;:37;15282:8;;;15263:16;:27;15327:3;15311:19;;;;15341;;;;15371:13;;;;15395:18;;15424:14;15041:405;20023:11;-1:-1:-1;20059:4:0;19980:95;20091:7;;;;;;;20087:115;;;3454:7;3481:6;-1:-1:-1;;;;;20123:15:0;;;3481:6;;20123:15;;:40;;-1:-1:-1;20150:13:0;;-1:-1:-1;;;;;20142:21:0;;;20150:13;;20142:21;20123:40;:66;;;-1:-1:-1;20175:14:0;;-1:-1:-1;;;;;20167:22:0;;;20175:14;;20167:22;20123:66;20115:75;;;;;;20222:41;20237:4;20243:2;20247:6;20255:7;20222:14;:41::i;:::-;20274:15;15518:21;;15502:13;:37;15566:21;;15550:13;:37;15609:16;;15598:8;:27;15652:21;;15636:13;:37;15695:16;;15684:8;:27;15458:261;20274:15;17028:3269;;;;:::o;2274:190::-;2360:7;2396:12;2388:6;;;;2380:29;;;;-1:-1:-1;;;2380:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2420:9:0;2432:5;2436:1;2432;:5;:::i;:::-;2420:17;2274:190;-1:-1:-1;;;;;2274:190:0:o;1943:179::-;2001:7;;2033:5;2037:1;2033;:5;:::i;:::-;2021:17;;2062:1;2057;:6;;2049:46;;;;-1:-1:-1;;;2049:46:0;;8950:2:1;2049:46:0;;;8932:21:1;8989:2;8969:18;;;8962:30;9028:29;9008:18;;;9001:57;9075:18;;2049:46:0;8922:177:1;2472:246:0;2530:7;2554:6;2550:47;;-1:-1:-1;2584:1:0;2577:8;;2550:47;2607:9;2619:5;2623:1;2619;:5;:::i;:::-;2607:17;-1:-1:-1;2652:1:0;2643:5;2647:1;2607:17;2643:5;:::i;:::-;:10;2635:56;;;;-1:-1:-1;;;2635:56:0;;11711:2:1;2635:56:0;;;11693:21:1;11750:2;11730:18;;;11723:30;11789:34;11769:18;;;11762:62;-1:-1:-1;;;11840:18:1;;;11833:31;11881:19;;2635:56:0;11683:223:1;22290:275:0;22347:17;;22385;;-1:-1:-1;;;;;22347:17:0;;;;:66;;22374:38;;22408:3;;22374:29;;:6;;:10;:29::i;:38::-;22347:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22424:12:0;;22457;;-1:-1:-1;;;;;22424:12:0;;;;:56;;22446:33;;22475:3;;22446:24;;:6;;:10;:24::i;:33::-;22424:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22491:17:0;;22529;;-1:-1:-1;;;;;22491:17:0;;;;:66;;22518:38;;22552:3;;22518:29;;:6;;:10;:29::i;:38::-;22491:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4253:191;4327:16;4346:6;;-1:-1:-1;;;;;4363:17:0;;;-1:-1:-1;;;;;;4363:17:0;;;;;;4396:40;;4346:6;;;;;;;4396:40;;4327:16;4396:40;4253:191;;:::o;20305:407::-;11834:6;:13;;-1:-1:-1;;11834:13:0;;;;;20407:16:::1;::::0;;20421:1:::1;20407:16:::0;;;;;::::1;::::0;;-1:-1:-1;;20407:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;20407:16:0::1;20383:40;;20452:4;20434;20439:1;20434:7;;;;;;-1:-1:-1::0;;;20434:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;20434:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;20478:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;20478:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;20434:7;;20478:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20468:4;20473:1;20468:7;;;;;;-1:-1:-1::0;;;20468:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;20468:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;20543:15:::1;::::0;20511:62:::1;::::0;20528:4:::1;::::0;20543:15:::1;20561:11:::0;20511:8:::1;:62::i;:::-;20584:15;::::0;:120:::1;::::0;-1:-1:-1;;;20584:120:0;;-1:-1:-1;;;;;20584:15:0;;::::1;::::0;:66:::1;::::0;:120:::1;::::0;20651:11;;20584:15:::1;::::0;20667:4;;20681::::1;::::0;20688:15:::1;::::0;20584:120:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11870:6:0;:14;;-1:-1:-1;;11870:14:0;;;-1:-1:-1;;;;20305:407:0:o;2866:189::-;2952:7;2987:12;2980:5;2972:28;;;;-1:-1:-1;;;2972:28:0;;;;;;;;:::i;:::-;-1:-1:-1;3011:9:0;3023:5;3027:1;3023;:5;:::i;21194:1088::-;11834:6;:13;;-1:-1:-1;;11834:13:0;;;;;21397::::1;::::0;21378::::1;::::0;21364:8:::1;::::0;21346:13:::1;::::0;11834;;21302:110:::1;::::0;21346:65:::1;::::0;21397:13;;21346:46:::1;::::0;;;:13;:17:::1;:27::i;:65::-;21302:13;::::0;:39:::1;::::0;21320:20;21302:17:::1;:39::i;:110::-;21279:133:::0;-1:-1:-1;21476:12:0::1;21492:19;21279:133:::0;21509:1:::1;21492:16;:19::i;:::-;21476:35:::0;-1:-1:-1;21522:17:0::1;21542:30;:20:::0;21476:35;21542:24:::1;:30::i;:::-;21522:50:::0;-1:-1:-1;21875:21:0::1;21941:27;21522:50:::0;21941:16:::1;:27::i;:::-;22099:18;22120:70;22180:9:::0;22121:53:::1;22169:4:::0;22122:41:::1;:21;22148:14:::0;22122:25:::1;:41::i;22120:70::-;22099:91;;22244:30;22257:4;22263:10;22244:12;:30::i;23253:256::-:0;23366:7;23361:60;;23395:14;:12;:14::i;:::-;23431:44;23449:6;23457:9;23468:6;23431:17;:44::i;2130:136::-;2188:7;2215:43;2219:1;2222;2215:43;;;;;;;;;;;;;;;;;:3;:43::i;20724:460::-;20837:15;;20805:62;;20822:4;;-1:-1:-1;;;;;20837:15:0;20855:11;20805:8;:62::i;:::-;20910:15;;-1:-1:-1;;;;;20910:15:0;:31;20949:9;20984:4;21006:11;20910:15;;21124:7;3454;3481:6;-1:-1:-1;;;;;3481:6:0;;3416:79;21124:7;20910:266;;;;;;-1:-1:-1;;;;;;20910:266:0;;;-1:-1:-1;;;;;5294:15:1;;;20910:266:0;;;5276:34:1;5326:18;;;5319:34;;;;5369:18;;;5362:34;;;;5412:18;;;5405:34;5476:15;;;5455:19;;;5448:44;21148:15:0;5508:19:1;;;5501:35;5210:19;;20910:266:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20724:460;;:::o;14514:519::-;14561:13;;:18;:40;;;;-1:-1:-1;14583:13:0;;:18;14561:40;:57;;;;-1:-1:-1;14605:8:0;;:13;14561:57;:79;;;;-1:-1:-1;14622:13:0;;:18;14561:79;:96;;;;-1:-1:-1;14644:8:0;;:13;14561:96;14557:109;;;14514:519::o;14557:109::-;14700:13;;;14676:21;:37;14748:13;;;14724:21;:37;14791:8;;;14772:16;:27;14834:13;;;14810:21;:37;14877:8;;;14858:16;:27;-1:-1:-1;14906:17:0;;;;14934;;;;14962:12;;;;14985:17;;;15013:12;14514:519::o;23517:992::-;23614:24;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23614:24:0;23667:35;23697:4;23667:25;23678:13;;23667:6;:10;;:25;;;;:::i;:35::-;23649:15;;;:53;23742:13;;23731:35;;23761:4;;23731:25;;:6;;:10;:25::i;:35::-;23713:53;;23801:8;;23790:30;;23815:4;;23790:20;;:6;;:10;:20::i;:30::-;23777:10;;;:43;23860:13;;23849:35;;23879:4;;23849:25;;:6;;:10;:25::i;:35::-;23831:15;;;:53;23919:8;;23908:30;;23933:4;;23908:20;;:6;;:10;:20::i;:30::-;23895:10;;;:43;;;24043:15;;;;24027:10;;;;24006:15;;23985;;;;23974:101;;23895:43;23974:85;;24043:15;;23974:85;;;;24006:15;23974:85;;:6;;:10;:27::i;:::-;:31;;:48::i;:101::-;23959:12;;;:116;-1:-1:-1;;;;;24116:17:0;;;;;;:9;:17;;;;;;:29;;24138:6;24116:21;:29::i;:::-;-1:-1:-1;;;;;24096:17:0;;;;;;;:9;:17;;;;;;:49;;;;24204:12;;;;24179:20;;;;;;;;;;:38;;:24;:38::i;:::-;24156:9;:20;24166:9;-1:-1:-1;;;;;24156:20:0;-1:-1:-1;;;;;24156:20:0;;;;;;;;;;;;:61;;;;24255:103;24284:73;24341:4;:15;;;24284:52;24325:4;:10;;;24284:36;24304:4;:15;;;24284:4;:15;;;:19;;:36;;;;:::i;:73::-;24273:4;24255:24;;;;:9;:24;;;;;;;:28;:103::i;:::-;24246:4;24228:24;;;;:9;:24;;;;;:130;;;;24423:10;;;;10894:42;24395:23;;;;;:39;;:27;:39::i;:::-;10894:42;24369:23;;:9;:23;;;:65;24488:12;;;;24369:23;24460:41;-1:-1:-1;;;;;24460:41:0;;;;;;;;;;;;16426:25:1;;;16414:2;16399:18;;16381:76;24460:41:0;;;;;;;;23517:992;;;;:::o;14:188:1:-;93:13;;-1:-1:-1;;;;;135:42:1;;125:53;;115:2;;192:1;189;182:12;115:2;74:128;;;:::o;207:257::-;266:6;319:2;307:9;298:7;294:23;290:32;287:2;;;340:6;332;325:22;287:2;384:9;371:23;403:31;428:5;403:31;:::i;469:261::-;539:6;592:2;580:9;571:7;567:23;563:32;560:2;;;613:6;605;598:22;560:2;650:9;644:16;669:31;694:5;669:31;:::i;1005:398::-;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:2;;;1155:6;1147;1140:22;1102:2;1199:9;1186:23;1218:31;1243:5;1218:31;:::i;:::-;1268:5;-1:-1:-1;1325:2:1;1310:18;;1297:32;1338:33;1297:32;1338:33;:::i;:::-;1390:7;1380:17;;;1092:311;;;;;:::o;1408:466::-;1485:6;1493;1501;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1575:6;1567;1560:22;1522:2;1619:9;1606:23;1638:31;1663:5;1638:31;:::i;:::-;1688:5;-1:-1:-1;1745:2:1;1730:18;;1717:32;1758:33;1717:32;1758:33;:::i;:::-;1512:362;;1810:7;;-1:-1:-1;;;1864:2:1;1849:18;;;;1836:32;;1512:362::o;1879:325::-;1947:6;1955;2008:2;1996:9;1987:7;1983:23;1979:32;1976:2;;;2029:6;2021;2014:22;1976:2;2073:9;2060:23;2092:31;2117:5;2092:31;:::i;:::-;2142:5;2194:2;2179:18;;;;2166:32;;-1:-1:-1;;;1966:238:1:o;2209:293::-;2265:6;2318:2;2306:9;2297:7;2293:23;2289:32;2286:2;;;2339:6;2331;2324:22;2286:2;2383:9;2370:23;2436:5;2429:13;2422:21;2415:5;2412:32;2402:2;;2463:6;2455;2448:22;2507:470;2594:6;2602;2610;2663:2;2651:9;2642:7;2638:23;2634:32;2631:2;;;2684:6;2676;2669:22;2631:2;2712:40;2742:9;2712:40;:::i;:::-;2702:50;;2771:49;2816:2;2805:9;2801:18;2771:49;:::i;:::-;2761:59;;2863:2;2852:9;2848:18;2842:25;2907:10;2900:5;2896:22;2889:5;2886:33;2876:2;;2938:6;2930;2923:22;2876:2;2966:5;2956:15;;;2621:356;;;;;:::o;2982:190::-;3041:6;3094:2;3082:9;3073:7;3069:23;3065:32;3062:2;;;3115:6;3107;3100:22;3062:2;-1:-1:-1;3143:23:1;;3052:120;-1:-1:-1;3052:120:1:o;3177:194::-;3247:6;3300:2;3288:9;3279:7;3275:23;3271:32;3268:2;;;3321:6;3313;3306:22;3268:2;-1:-1:-1;3349:16:1;;3258:113;-1:-1:-1;3258:113:1:o;3376:258::-;3444:6;3452;3505:2;3493:9;3484:7;3480:23;3476:32;3473:2;;;3526:6;3518;3511:22;3473:2;-1:-1:-1;;3554:23:1;;;3624:2;3609:18;;;3596:32;;-1:-1:-1;3463:171:1:o;3639:316::-;3727:6;3735;3743;3796:2;3784:9;3775:7;3771:23;3767:32;3764:2;;;3817:6;3809;3802:22;3764:2;3851:9;3845:16;3835:26;;3901:2;3890:9;3886:18;3880:25;3870:35;;3945:2;3934:9;3930:18;3924:25;3914:35;;3754:201;;;;;:::o;3960:464::-;4055:6;4063;4071;4079;4087;4140:3;4128:9;4119:7;4115:23;4111:33;4108:2;;;4162:6;4154;4147:22;4108:2;-1:-1:-1;;4190:23:1;;;4260:2;4245:18;;4232:32;;-1:-1:-1;4311:2:1;4296:18;;4283:32;;4362:2;4347:18;;4334:32;;-1:-1:-1;4413:3:1;4398:19;4385:33;;-1:-1:-1;4098:326:1;-1:-1:-1;4098:326:1:o;4429:293::-;4497:6;4550:2;4538:9;4529:7;4525:23;4521:32;4518:2;;;4571:6;4563;4556:22;4518:2;4608:9;4602:16;4658:4;4651:5;4647:16;4640:5;4637:27;4627:2;;4683:6;4675;4668:22;5739:603;5851:4;5880:2;5909;5898:9;5891:21;5941:6;5935:13;5984:6;5979:2;5968:9;5964:18;5957:34;6009:4;6022:140;6036:6;6033:1;6030:13;6022:140;;;6131:14;;;6127:23;;6121:30;6097:17;;;6116:2;6093:26;6086:66;6051:10;;6022:140;;;6180:6;6177:1;6174:13;6171:2;;;6250:4;6245:2;6236:6;6225:9;6221:22;6217:31;6210:45;6171:2;-1:-1:-1;6326:2:1;6305:15;-1:-1:-1;;6301:29:1;6286:45;;;;6333:2;6282:54;;5860:482;-1:-1:-1;;;5860:482:1:o;7169:403::-;7371:2;7353:21;;;7410:2;7390:18;;;7383:30;7449:34;7444:2;7429:18;;7422:62;-1:-1:-1;;;7515:2:1;7500:18;;7493:37;7562:3;7547:19;;7343:229::o;9799:469::-;10001:2;9983:21;;;10040:2;10020:18;;;10013:30;10079:34;10074:2;10059:18;;10052:62;10150:34;10145:2;10130:18;;10123:62;-1:-1:-1;;;10216:3:1;10201:19;;10194:32;10258:3;10243:19;;9973:295::o;11911:356::-;12113:2;12095:21;;;12132:18;;;12125:30;12191:34;12186:2;12171:18;;12164:62;12258:2;12243:18;;12085:182::o;13860:412::-;14062:2;14044:21;;;14101:2;14081:18;;;14074:30;14140:34;14135:2;14120:18;;14113:62;-1:-1:-1;;;14206:2:1;14191:18;;14184:46;14262:3;14247:19;;14034:238::o;16462:983::-;16724:4;16772:3;16761:9;16757:19;16803:6;16792:9;16785:25;16829:2;16867:6;16862:2;16851:9;16847:18;16840:34;16910:3;16905:2;16894:9;16890:18;16883:31;16934:6;16969;16963:13;17000:6;16992;16985:22;17038:3;17027:9;17023:19;17016:26;;17077:2;17069:6;17065:15;17051:29;;17098:4;17111:195;17125:6;17122:1;17119:13;17111:195;;;17190:13;;-1:-1:-1;;;;;17186:39:1;17174:52;;17281:15;;;;17246:12;;;;17222:1;17140:9;17111:195;;;-1:-1:-1;;;;;;;17362:32:1;;;;17357:2;17342:18;;17335:60;-1:-1:-1;;;17426:3:1;17411:19;17404:35;17323:3;16733:712;-1:-1:-1;;;16733:712:1:o;18107:128::-;18147:3;18178:1;18174:6;18171:1;18168:13;18165:2;;;18184:18;;:::i;:::-;-1:-1:-1;18220:9:1;;18155:80::o;18240:217::-;18280:1;18306;18296:2;;-1:-1:-1;;;18331:31:1;;18385:4;18382:1;18375:15;18413:4;18338:1;18403:15;18296:2;-1:-1:-1;18442:9:1;;18286:171::o;18462:422::-;18551:1;18594:5;18551:1;18608:270;18629:7;18619:8;18616:21;18608:270;;;18688:4;18684:1;18680:6;18676:17;18670:4;18667:27;18664:2;;;18697:18;;:::i;:::-;18747:7;18737:8;18733:22;18730:2;;;18767:16;;;;18730:2;18846:22;;;;18806:15;;;;18608:270;;;18612:3;18526:358;;;;;:::o;18889:140::-;18947:5;18976:47;19017:4;19007:8;19003:19;18997:4;19083:5;19113:8;19103:2;;-1:-1:-1;19154:1:1;19168:5;;19103:2;19202:4;19192:2;;-1:-1:-1;19239:1:1;19253:5;;19192:2;19284:4;19302:1;19297:59;;;;19370:1;19365:130;;;;19277:218;;19297:59;19327:1;19318:10;;19341:5;;;19365:130;19402:3;19392:8;19389:17;19386:2;;;19409:18;;:::i;:::-;-1:-1:-1;;19465:1:1;19451:16;;19480:5;;19277:218;;19579:2;19569:8;19566:16;19560:3;19554:4;19551:13;19547:36;19541:2;19531:8;19528:16;19523:2;19517:4;19514:12;19510:35;19507:77;19504:2;;;-1:-1:-1;19616:19:1;;;19648:5;;19504:2;19695:34;19720:8;19714:4;19695:34;:::i;:::-;19765:6;19761:1;19757:6;19753:19;19744:7;19741:32;19738:2;;;19776:18;;:::i;:::-;19814:20;;19093:747;-1:-1:-1;;;19093:747:1:o;19845:168::-;19885:7;19951:1;19947;19943:6;19939:14;19936:1;19933:21;19928:1;19921:9;19914:17;19910:45;19907:2;;;19958:18;;:::i;:::-;-1:-1:-1;19998:9:1;;19897:116::o;20018:125::-;20058:4;20086:1;20083;20080:8;20077:2;;;20091:18;;:::i;:::-;-1:-1:-1;20128:9:1;;20067:76::o;20148:127::-;20209:10;20204:3;20200:20;20197:1;20190:31;20240:4;20237:1;20230:15;20264:4;20261:1;20254:15;20280:131;-1:-1:-1;;;;;20355:31:1;;20345:42;;20335:2;;20401:1;20398;20391:12

Swarm Source

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