ETH Price: $2,290.28 (-3.81%)

Token

FUR (FUR)
 

Overview

Max Total Supply

1,000,000,000 FUR

Holders

118

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
22,544,194.599654551 FUR

Value
$0.00
0x138feb32718ed2e23b75a73d5b1940d78178ab4d
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:
FURecosystem

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.19;

abstract contract Context {

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

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

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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 waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, 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 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 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 IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

contract FURecosystem is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "FUR";
    string private _symbol = "FUR";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x8b407a368C0825617e6d38496e2aFaa075DD339A); // Marketing Address  4%
    address payable public developmentWalletAddress = payable(0xd711347C87ec0eE4d53b6bCBD89db8b10DFb6855); // Utility development Address 1%
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 4;
    uint256 public _buyDevelopmentFee = 1;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 4;
    uint256 public _sellDevelopmentFee = 1;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 8;
    uint256 public _developmentShare = 2;

    uint256 public _totalTaxIfBuying = 5;
    uint256 public _totalTaxIfSelling = 5;
    uint256 public _totalDistributionShares = 10;

    uint256 private _totalSupply = 1000 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 20 * 10**6 * 10**9;
    uint256 public _walletMax = 20 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 750000 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[address(marketingWalletAddress)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevelopmentFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevelopmentFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_developmentShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[address(marketingWalletAddress)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[address(marketingWalletAddress)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

    function decimals() public view returns (uint8) {
        return _decimals;
    }

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyDevelopmentFee = newDevelopmentTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevelopmentFee);
        require(_totalTaxIfBuying <= 25, "Buy tax must be less than 25%");
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevelopmentTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellDevelopmentFee = newDevelopmentTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevelopmentFee);
        require(_totalTaxIfSelling <= 25, "Sell tax must be less than 25%");
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _developmentShare = newDevelopmentShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_developmentShare);
        require(_totalDistributionShares <=50, "Distribution Shares must be less than 50%");
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= _totalSupply / 200, "Cannot set MaxTxAmount lower than 0.5%");
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= _totalSupply / 200, "Cannot set MaxWallet lower than 0.5%");
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        require(newLimit > 1, "NumTokensBeforeSwap should be not 0");
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setDevelopmentWalletAddress(address newAddress) external onlyOwner() {
        developmentWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHDevelopment = amountReceived.mul(_developmentShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDevelopment);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHDevelopment > 0)
            transferToAddressETH(developmentWalletAddress, amountETHDevelopment);

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

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

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

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

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_developmentShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevelopmentWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600381526020017f4655520000000000000000000000000000000000000000000000000000000000815250600290816200004a919062000eca565b506040518060400160405280600381526020017f46555200000000000000000000000000000000000000000000000000000000008152506003908162000091919062000eca565b506009600460006101000a81548160ff021916908360ff160217905550738b407a368c0825617e6d38496e2afaa075dd339a600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d711347c87ec0ee4d53b6bcbd89db8b10dfb6855600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c556004600d556001600e556000600f556004601055600160115560006012556008601355600260145560056015556005601655600a601755670de0b6b3a764000060185566470de4df82000060195566470de4df820000601a556602aa1efb94e000601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200025457600080fd5b5060006200026762000bbc60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200036a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039091906200101b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e91906200101b565b6040518363ffffffff1660e01b81526004016200043d9291906200105e565b6020604051808303816000875af11580156200045d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048391906200101b565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620005bf62000bc460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000711600e5462000702600d54600c5462000bed60201b90919060201c565b62000bed60201b90919060201c565b6015819055506200074660115462000737601054600f5462000bed60201b90919060201c565b62000bed60201b90919060201c565b6016819055506200077b6014546200076c60135460125462000bed60201b90919060201c565b62000bed60201b90919060201c565b6017819055506001600960006200079762000bc460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60006200094a62000bc460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546006600062000afe62000bbc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000b4c62000bbc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000bad91906200109c565b60405180910390a350620011a6565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000bfe9190620010e8565b90508381101562000c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c3d9062001184565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000cd257607f821691505b60208210810362000ce85762000ce762000c8a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d13565b62000d5e868362000d13565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000dab62000da562000d9f8462000d76565b62000d80565b62000d76565b9050919050565b6000819050919050565b62000dc78362000d8a565b62000ddf62000dd68262000db2565b84845462000d20565b825550505050565b600090565b62000df662000de7565b62000e0381848462000dbc565b505050565b5b8181101562000e2b5762000e1f60008262000dec565b60018101905062000e09565b5050565b601f82111562000e7a5762000e448162000cee565b62000e4f8462000d03565b8101602085101562000e5f578190505b62000e7762000e6e8562000d03565b83018262000e08565b50505b505050565b600082821c905092915050565b600062000e9f6000198460080262000e7f565b1980831691505092915050565b600062000eba838362000e8c565b9150826002028217905092915050565b62000ed58262000c50565b67ffffffffffffffff81111562000ef15762000ef062000c5b565b5b62000efd825462000cb9565b62000f0a82828562000e2f565b600060209050601f83116001811462000f42576000841562000f2d578287015190505b62000f39858262000eac565b86555062000fa9565b601f19841662000f528662000cee565b60005b8281101562000f7c5784890151825560018201915060208501945060208101905062000f55565b8683101562000f9c578489015162000f98601f89168262000e8c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fe38262000fb6565b9050919050565b62000ff58162000fd6565b81146200100157600080fd5b50565b600081519050620010158162000fea565b92915050565b60006020828403121562001034576200103362000fb1565b5b6000620010448482850162001004565b91505092915050565b620010588162000fd6565b82525050565b60006040820190506200107560008301856200104d565b6200108460208301846200104d565b9392505050565b620010968162000d76565b82525050565b6000602082019050620010b360008301846200108b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620010f58262000d76565b9150620011028362000d76565b92508282019050808211156200111d576200111c620010b9565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200116c601b8362001123565b9150620011798262001134565b602082019050919050565b600060208201905081810360008301526200119f816200115d565b9050919050565b608051614af5620011c96000396000818161137b01526113a70152614af56000f3fe60806040526004361061037a5760003560e01c806388790a68116101d1578063c816841b11610102578063ec28438a116100a0578063f2fde38b1161006f578063f2fde38b14610d03578063f331c7b014610d2c578063f84ba65d14610d57578063f872858a14610d8057610381565b8063ec28438a14610c5d578063ef422a1814610c86578063f0cd1dac14610caf578063f1d5f51714610cda57610381565b8063d158272d116100dc578063d158272d14610b9f578063da00097d14610bca578063dc44b6a014610bf5578063dd62ed3e14610c2057610381565b8063c816841b14610b0c578063c860795214610b37578063c867d60b14610b6257610381565b8063a0dd80401161016f578063a9059cbb11610149578063a9059cbb14610a52578063c2d4640e14610a8f578063c49b9a8014610ab8578063c5d2418914610ae157610381565b8063a0dd8040146109c1578063a457c2d7146109ec578063a5d69d1f14610a2957610381565b8063914eb66a116101ab578063914eb66a1461092957806395d89b4114610940578063a073d37f1461096b578063a08e671f1461099657610381565b806388790a68146108965780638b42507f146108c15780638da5cb5b146108fe57610381565b806339509351116102ab57806361a23c69116102495780637d7846ff116102235780637d7846ff146107ee578063807c2d9c1461081757806382eefb4314610842578063844d591c1461086d57610381565b806361a23c691461075b57806370a08231146107865780637d1db4a5146107c357610381565b80634a74bb02116102855780634a74bb021461069f5780634cb80fd5146106ca5780635342acb4146106f357806357a5802f1461073057610381565b806339509351146105fc5780633b97084a146106395780633ecad2711461066257610381565b80632198cf6c1161031857806327c8f835116102f257806327c8f835146105505780632b112e491461057b578063313ce567146105a657806337249b65146105d157610381565b80632198cf6c146104c157806323b872dd146104ea5780632563ae831461052757610381565b80631694505e116103545780631694505e1461041757806318160ddd14610442578063182a47601461046d5780631870517a1461049857610381565b806306fdde031461038657806308733214146103b1578063095ea7b3146103da57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610dab565b6040516103a891906139ac565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613a09565b610e3d565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613aba565b610f63565b60405161040e9190613b15565b60405180910390f35b34801561042357600080fd5b5061042c610f81565b6040516104399190613b8f565b60405180910390f35b34801561044e57600080fd5b50610457610fa7565b6040516104649190613bb9565b60405180910390f35b34801561047957600080fd5b50610482610fb1565b60405161048f9190613bf5565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190613a09565b610fd7565b005b3480156104cd57600080fd5b506104e860048036038101906104e39190613c3c565b6110fd565b005b3480156104f657600080fd5b50610511600480360381019061050c9190613c7c565b6111ed565b60405161051e9190613b15565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190613ccf565b6112c7565b005b34801561055c57600080fd5b50610565611379565b6040516105729190613d0b565b60405180910390f35b34801561058757600080fd5b5061059061139d565b60405161059d9190613bb9565b60405180910390f35b3480156105b257600080fd5b506105bb6113e1565b6040516105c89190613d42565b60405180910390f35b3480156105dd57600080fd5b506105e66113f8565b6040516105f39190613bb9565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613aba565b6113fe565b6040516106309190613b15565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190613d5d565b6114b1565b005b34801561066e57600080fd5b5061068960048036038101906106849190613d8a565b611593565b6040516106969190613b15565b60405180910390f35b3480156106ab57600080fd5b506106b46115b3565b6040516106c19190613b15565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec9190613d8a565b6115c6565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613d8a565b61169f565b6040516107279190613b15565b60405180910390f35b34801561073c57600080fd5b506107456116bf565b6040516107529190613bb9565b60405180910390f35b34801561076757600080fd5b506107706116c5565b60405161077d9190613bb9565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613d8a565b6116cb565b6040516107ba9190613bb9565b60405180910390f35b3480156107cf57600080fd5b506107d8611714565b6040516107e59190613bb9565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190613d8a565b61171a565b005b34801561082357600080fd5b5061082c6117f3565b6040516108399190613bb9565b60405180910390f35b34801561084e57600080fd5b506108576117f9565b6040516108649190613bb9565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613c3c565b6117ff565b005b3480156108a257600080fd5b506108ab6118ef565b6040516108b89190613bb9565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e39190613d8a565b6118f5565b6040516108f59190613b15565b60405180910390f35b34801561090a57600080fd5b50610913611915565b6040516109209190613d0b565b60405180910390f35b34801561093557600080fd5b5061093e61193e565b005b34801561094c57600080fd5b50610955611a91565b60405161096291906139ac565b60405180910390f35b34801561097757600080fd5b50610980611b23565b60405161098d9190613bb9565b60405180910390f35b3480156109a257600080fd5b506109ab611b2d565b6040516109b89190613bb9565b60405180910390f35b3480156109cd57600080fd5b506109d6611b33565b6040516109e39190613bb9565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e9190613aba565b611b39565b604051610a209190613b15565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190613ccf565b611c06565b005b348015610a5e57600080fd5b50610a796004803603810190610a749190613aba565b611cb8565b604051610a869190613b15565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190613a09565b611cd7565b005b348015610ac457600080fd5b50610adf6004803603810190610ada9190613ccf565b611dfd565b005b348015610aed57600080fd5b50610af6611ee6565b604051610b039190613bb9565b60405180910390f35b348015610b1857600080fd5b50610b21611eec565b604051610b2e9190613d0b565b60405180910390f35b348015610b4357600080fd5b50610b4c611f12565b604051610b599190613bb9565b60405180910390f35b348015610b6e57600080fd5b50610b896004803603810190610b849190613d8a565b611f18565b604051610b969190613b15565b60405180910390f35b348015610bab57600080fd5b50610bb4611f38565b604051610bc19190613bf5565b60405180910390f35b348015610bd657600080fd5b50610bdf611f5e565b604051610bec9190613b15565b60405180910390f35b348015610c0157600080fd5b50610c0a611f71565b604051610c179190613bb9565b60405180910390f35b348015610c2c57600080fd5b50610c476004803603810190610c429190613db7565b611f77565b604051610c549190613bb9565b60405180910390f35b348015610c6957600080fd5b50610c846004803603810190610c7f9190613d5d565b611ffe565b005b348015610c9257600080fd5b50610cad6004803603810190610ca89190613c3c565b6120ee565b005b348015610cbb57600080fd5b50610cc46121de565b604051610cd19190613bb9565b60405180910390f35b348015610ce657600080fd5b50610d016004803603810190610cfc9190613d5d565b6121e4565b005b348015610d0f57600080fd5b50610d2a6004803603810190610d259190613d8a565b6122d4565b005b348015610d3857600080fd5b50610d41612495565b604051610d4e9190613bb9565b60405180910390f35b348015610d6357600080fd5b50610d7e6004803603810190610d799190613c3c565b61249b565b005b348015610d8c57600080fd5b50610d9561258b565b604051610da29190613b15565b60405180910390f35b606060028054610dba90613e26565b80601f0160208091040260200160405190810160405280929190818152602001828054610de690613e26565b8015610e335780601f10610e0857610100808354040283529160200191610e33565b820191906000526020600020905b815481529060010190602001808311610e1657829003601f168201915b5050505050905090565b610e4561259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613ea3565b60405180910390fd5b82600f819055508160108190555080601181905550610f12601154610f04601054600f546125a690919063ffffffff16565b6125a690919063ffffffff16565b60168190555060196016541115610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613f0f565b60405180910390fd5b505050565b6000610f77610f7061259e565b8484612604565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610fdf61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390613ea3565b60405180910390fd5b82600c8190555081600d8190555080600e819055506110ac600e5461109e600d54600c546125a690919063ffffffff16565b6125a690919063ffffffff16565b601581905550601960155411156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613f7b565b60405180910390fd5b505050565b61110561259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990613ea3565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111fa8484846127cd565b506112bc8461120761259e565b6112b785604051806060016040528060288152602001614a7360289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061126d61259e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db09092919063ffffffff16565b612604565b600190509392505050565b6112cf61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390613ea3565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006113dc6113cb7f00000000000000000000000000000000000000000000000000000000000000006116cb565b601854612e1490919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b60115481565b60006114a761140b61259e565b846114a2856007600061141c61259e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a690919063ffffffff16565b612604565b6001905092915050565b6114b961259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90613ea3565b60405180910390fd5b60018111611589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115809061400d565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b6115ce61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613ea3565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60125481565b60135481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b61172261259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690613ea3565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b61180761259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90613ea3565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61194661259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90613ea3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611aa090613e26565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90613e26565b8015611b195780601f10611aee57610100808354040283529160200191611b19565b820191906000526020600020905b815481529060010190602001808311611afc57829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b60145481565b6000611bfc611b4661259e565b84611bf785604051806060016040528060258152602001614a9b6025913960076000611b7061259e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db09092919063ffffffff16565b612604565b6001905092915050565b611c0e61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290613ea3565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611ccc611cc561259e565b84846127cd565b506001905092915050565b611cdf61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390613ea3565b60405180910390fd5b826012819055508160138190555080601481905550611dac601454611d9e6013546012546125a690919063ffffffff16565b6125a690919063ffffffff16565b60178190555060326017541115611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def9061409f565b60405180910390fd5b505050565b611e0561259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990613ea3565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611edb9190613b15565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61200661259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90613ea3565b60405180910390fd5b60c86018546120a2919061411d565b8110156120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db906141c0565b60405180910390fd5b8060198190555050565b6120f661259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a90613ea3565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b6121ec61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227090613ea3565b60405180910390fd5b60c8601854612288919061411d565b8110156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614252565b60405180910390fd5b80601a8190555050565b6122dc61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090613ea3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906142e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b6124a361259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252790613ea3565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600033905090565b60008082846125b59190614304565b9050838110156125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f190614384565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a90614416565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d9906144a8565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127c09190613bb9565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361283d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128349061453a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a3906145cc565b60405180910390fd5b601d60149054906101000a900460ff16156128d3576128cc848484612e5e565b9050612da9565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129775750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129c2576019548211156129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061465e565b60405180910390fd5b5b60006129cd306116cb565b90506000601b5482101590508080156129f35750601d60149054906101000a900460ff16155b8015612a495750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a615750601d60159054906101000a900460ff165b15612a8b57601d60169054906101000a900460ff1615612a8157601b5491505b612a8a82613031565b5b612b14846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db09092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bfa5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0e57612c09878787613222565b612c10565b845b9050601d60179054906101000a900460ff168015612c785750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ca757601a54612c9b82612c8d896116cb565b6125a690919063ffffffff16565b1115612ca657600080fd5b5b612cf981600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a690919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d999190613bb9565b60405180910390a3600193505050505b9392505050565b6000838311158290612df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612def91906139ac565b60405180910390fd5b5060008385612e07919061467e565b9050809150509392505050565b6000612e5683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612db0565b905092915050565b6000612ee9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db09092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f7e82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a690919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161301e9190613bb9565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061308a600261307c60175461306e6012548761344990919063ffffffff16565b6134c390919063ffffffff16565b6134c390919063ffffffff16565b905060006130a18284612e1490919063ffffffff16565b90506130ac8161350d565b600047905060006130dd6130cc60026012546134c390919063ffffffff16565b601754612e1490919063ffffffff16565b9050600061311b600261310d846130ff6012548861344990919063ffffffff16565b6134c390919063ffffffff16565b6134c390919063ffffffff16565b90506000613146836131386014548761344990919063ffffffff16565b6134c390919063ffffffff16565b9050600061316f826131618588612e1490919063ffffffff16565b612e1490919063ffffffff16565b905060008111156131a7576131a6600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613789565b5b60008211156131dd576131dc600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613789565b5b6000831180156131ed5750600087115b156131fd576131fc87846137d4565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132aa576132a360646132956015548661344990919063ffffffff16565b6134c390919063ffffffff16565b9050613328565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133275761332460646133166016548661344990919063ffffffff16565b6134c390919063ffffffff16565b90505b5b600081111561342c5761338381600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a690919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134239190613bb9565b60405180910390a35b61343f8184612e1490919063ffffffff16565b9150509392505050565b600080830361345b57600090506134bd565b6000828461346991906146b2565b9050828482613478919061411d565b146134b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134af90614766565b60405180910390fd5b809150505b92915050565b600061350583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138b9565b905092915050565b6000600267ffffffffffffffff81111561352a57613529614786565b5b6040519080825280602002602001820160405280156135585781602001602082028036833780820191505090505b50905030816000815181106135705761356f6147b5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b91906147f9565b8160018151811061364f5761364e6147b5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136b630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612604565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161371a95949392919061491f565b600060405180830381600087803b15801561373457600080fd5b505af1158015613748573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161377d929190614979565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156137cf573d6000803e3d6000fd5b505050565b61380130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612604565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061384d611915565b426040518863ffffffff1660e01b815260040161386f969594939291906149a9565b60606040518083038185885af115801561388d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138b29190614a1f565b5050505050565b60008083118290613900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f791906139ac565b60405180910390fd5b506000838561390f919061411d565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561395657808201518184015260208101905061393b565b60008484015250505050565b6000601f19601f8301169050919050565b600061397e8261391c565b6139888185613927565b9350613998818560208601613938565b6139a181613962565b840191505092915050565b600060208201905081810360008301526139c68184613973565b905092915050565b600080fd5b6000819050919050565b6139e6816139d3565b81146139f157600080fd5b50565b600081359050613a03816139dd565b92915050565b600080600060608486031215613a2257613a216139ce565b5b6000613a30868287016139f4565b9350506020613a41868287016139f4565b9250506040613a52868287016139f4565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a8782613a5c565b9050919050565b613a9781613a7c565b8114613aa257600080fd5b50565b600081359050613ab481613a8e565b92915050565b60008060408385031215613ad157613ad06139ce565b5b6000613adf85828601613aa5565b9250506020613af0858286016139f4565b9150509250929050565b60008115159050919050565b613b0f81613afa565b82525050565b6000602082019050613b2a6000830184613b06565b92915050565b6000819050919050565b6000613b55613b50613b4b84613a5c565b613b30565b613a5c565b9050919050565b6000613b6782613b3a565b9050919050565b6000613b7982613b5c565b9050919050565b613b8981613b6e565b82525050565b6000602082019050613ba46000830184613b80565b92915050565b613bb3816139d3565b82525050565b6000602082019050613bce6000830184613baa565b92915050565b6000613bdf82613a5c565b9050919050565b613bef81613bd4565b82525050565b6000602082019050613c0a6000830184613be6565b92915050565b613c1981613afa565b8114613c2457600080fd5b50565b600081359050613c3681613c10565b92915050565b60008060408385031215613c5357613c526139ce565b5b6000613c6185828601613aa5565b9250506020613c7285828601613c27565b9150509250929050565b600080600060608486031215613c9557613c946139ce565b5b6000613ca386828701613aa5565b9350506020613cb486828701613aa5565b9250506040613cc5868287016139f4565b9150509250925092565b600060208284031215613ce557613ce46139ce565b5b6000613cf384828501613c27565b91505092915050565b613d0581613a7c565b82525050565b6000602082019050613d206000830184613cfc565b92915050565b600060ff82169050919050565b613d3c81613d26565b82525050565b6000602082019050613d576000830184613d33565b92915050565b600060208284031215613d7357613d726139ce565b5b6000613d81848285016139f4565b91505092915050565b600060208284031215613da057613d9f6139ce565b5b6000613dae84828501613aa5565b91505092915050565b60008060408385031215613dce57613dcd6139ce565b5b6000613ddc85828601613aa5565b9250506020613ded85828601613aa5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e3e57607f821691505b602082108103613e5157613e50613df7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e8d602083613927565b9150613e9882613e57565b602082019050919050565b60006020820190508181036000830152613ebc81613e80565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e203235250000600082015250565b6000613ef9601e83613927565b9150613f0482613ec3565b602082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b7f42757920746178206d757374206265206c657373207468616e20323525000000600082015250565b6000613f65601d83613927565b9150613f7082613f2f565b602082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f60008201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b6000613ff7602383613927565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c65737360008201527f207468616e203530250000000000000000000000000000000000000000000000602082015250565b6000614089602983613927565b91506140948261402d565b604082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614128826139d3565b9150614133836139d3565b925082614143576141426140bf565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f7765722074686160008201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b60006141aa602683613927565b91506141b58261414e565b604082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061423c602483613927565b9150614247826141e0565b604082019050919050565b6000602082019050818103600083015261426b8161422f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142ce602683613927565b91506142d982614272565b604082019050919050565b600060208201905081810360008301526142fd816142c1565b9050919050565b600061430f826139d3565b915061431a836139d3565b9250828201905080821115614332576143316140ee565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061436e601b83613927565b915061437982614338565b602082019050919050565b6000602082019050818103600083015261439d81614361565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614400602483613927565b915061440b826143a4565b604082019050919050565b6000602082019050818103600083015261442f816143f3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614492602283613927565b915061449d82614436565b604082019050919050565b600060208201905081810360008301526144c181614485565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614524602583613927565b915061452f826144c8565b604082019050919050565b6000602082019050818103600083015261455381614517565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145b6602383613927565b91506145c18261455a565b604082019050919050565b600060208201905081810360008301526145e5816145a9565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614648602883613927565b9150614653826145ec565b604082019050919050565b600060208201905081810360008301526146778161463b565b9050919050565b6000614689826139d3565b9150614694836139d3565b92508282039050818111156146ac576146ab6140ee565b5b92915050565b60006146bd826139d3565b91506146c8836139d3565b92508282026146d6816139d3565b915082820484148315176146ed576146ec6140ee565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614750602183613927565b915061475b826146f4565b604082019050919050565b6000602082019050818103600083015261477f81614743565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147f381613a8e565b92915050565b60006020828403121561480f5761480e6139ce565b5b600061481d848285016147e4565b91505092915050565b6000819050919050565b600061484b61484661484184614826565b613b30565b6139d3565b9050919050565b61485b81614830565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61489681613a7c565b82525050565b60006148a8838361488d565b60208301905092915050565b6000602082019050919050565b60006148cc82614861565b6148d6818561486c565b93506148e18361487d565b8060005b838110156149125781516148f9888261489c565b9750614904836148b4565b9250506001810190506148e5565b5085935050505092915050565b600060a0820190506149346000830188613baa565b6149416020830187614852565b818103604083015261495381866148c1565b90506149626060830185613cfc565b61496f6080830184613baa565b9695505050505050565b600060408201905061498e6000830185613baa565b81810360208301526149a081846148c1565b90509392505050565b600060c0820190506149be6000830189613cfc565b6149cb6020830188613baa565b6149d86040830187614852565b6149e56060830186614852565b6149f26080830185613cfc565b6149ff60a0830184613baa565b979650505050505050565b600081519050614a19816139dd565b92915050565b600080600060608486031215614a3857614a376139ce565b5b6000614a4686828701614a0a565b9350506020614a5786828701614a0a565b9250506040614a6886828701614a0a565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220245fbf356ea922b34f1195f474280a5a86bf97801a7ca7d7cbc6a8407771e9c664736f6c63430008130033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c806388790a68116101d1578063c816841b11610102578063ec28438a116100a0578063f2fde38b1161006f578063f2fde38b14610d03578063f331c7b014610d2c578063f84ba65d14610d57578063f872858a14610d8057610381565b8063ec28438a14610c5d578063ef422a1814610c86578063f0cd1dac14610caf578063f1d5f51714610cda57610381565b8063d158272d116100dc578063d158272d14610b9f578063da00097d14610bca578063dc44b6a014610bf5578063dd62ed3e14610c2057610381565b8063c816841b14610b0c578063c860795214610b37578063c867d60b14610b6257610381565b8063a0dd80401161016f578063a9059cbb11610149578063a9059cbb14610a52578063c2d4640e14610a8f578063c49b9a8014610ab8578063c5d2418914610ae157610381565b8063a0dd8040146109c1578063a457c2d7146109ec578063a5d69d1f14610a2957610381565b8063914eb66a116101ab578063914eb66a1461092957806395d89b4114610940578063a073d37f1461096b578063a08e671f1461099657610381565b806388790a68146108965780638b42507f146108c15780638da5cb5b146108fe57610381565b806339509351116102ab57806361a23c69116102495780637d7846ff116102235780637d7846ff146107ee578063807c2d9c1461081757806382eefb4314610842578063844d591c1461086d57610381565b806361a23c691461075b57806370a08231146107865780637d1db4a5146107c357610381565b80634a74bb02116102855780634a74bb021461069f5780634cb80fd5146106ca5780635342acb4146106f357806357a5802f1461073057610381565b806339509351146105fc5780633b97084a146106395780633ecad2711461066257610381565b80632198cf6c1161031857806327c8f835116102f257806327c8f835146105505780632b112e491461057b578063313ce567146105a657806337249b65146105d157610381565b80632198cf6c146104c157806323b872dd146104ea5780632563ae831461052757610381565b80631694505e116103545780631694505e1461041757806318160ddd14610442578063182a47601461046d5780631870517a1461049857610381565b806306fdde031461038657806308733214146103b1578063095ea7b3146103da57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610dab565b6040516103a891906139ac565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613a09565b610e3d565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613aba565b610f63565b60405161040e9190613b15565b60405180910390f35b34801561042357600080fd5b5061042c610f81565b6040516104399190613b8f565b60405180910390f35b34801561044e57600080fd5b50610457610fa7565b6040516104649190613bb9565b60405180910390f35b34801561047957600080fd5b50610482610fb1565b60405161048f9190613bf5565b60405180910390f35b3480156104a457600080fd5b506104bf60048036038101906104ba9190613a09565b610fd7565b005b3480156104cd57600080fd5b506104e860048036038101906104e39190613c3c565b6110fd565b005b3480156104f657600080fd5b50610511600480360381019061050c9190613c7c565b6111ed565b60405161051e9190613b15565b60405180910390f35b34801561053357600080fd5b5061054e60048036038101906105499190613ccf565b6112c7565b005b34801561055c57600080fd5b50610565611379565b6040516105729190613d0b565b60405180910390f35b34801561058757600080fd5b5061059061139d565b60405161059d9190613bb9565b60405180910390f35b3480156105b257600080fd5b506105bb6113e1565b6040516105c89190613d42565b60405180910390f35b3480156105dd57600080fd5b506105e66113f8565b6040516105f39190613bb9565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190613aba565b6113fe565b6040516106309190613b15565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190613d5d565b6114b1565b005b34801561066e57600080fd5b5061068960048036038101906106849190613d8a565b611593565b6040516106969190613b15565b60405180910390f35b3480156106ab57600080fd5b506106b46115b3565b6040516106c19190613b15565b60405180910390f35b3480156106d657600080fd5b506106f160048036038101906106ec9190613d8a565b6115c6565b005b3480156106ff57600080fd5b5061071a60048036038101906107159190613d8a565b61169f565b6040516107279190613b15565b60405180910390f35b34801561073c57600080fd5b506107456116bf565b6040516107529190613bb9565b60405180910390f35b34801561076757600080fd5b506107706116c5565b60405161077d9190613bb9565b60405180910390f35b34801561079257600080fd5b506107ad60048036038101906107a89190613d8a565b6116cb565b6040516107ba9190613bb9565b60405180910390f35b3480156107cf57600080fd5b506107d8611714565b6040516107e59190613bb9565b60405180910390f35b3480156107fa57600080fd5b5061081560048036038101906108109190613d8a565b61171a565b005b34801561082357600080fd5b5061082c6117f3565b6040516108399190613bb9565b60405180910390f35b34801561084e57600080fd5b506108576117f9565b6040516108649190613bb9565b60405180910390f35b34801561087957600080fd5b50610894600480360381019061088f9190613c3c565b6117ff565b005b3480156108a257600080fd5b506108ab6118ef565b6040516108b89190613bb9565b60405180910390f35b3480156108cd57600080fd5b506108e860048036038101906108e39190613d8a565b6118f5565b6040516108f59190613b15565b60405180910390f35b34801561090a57600080fd5b50610913611915565b6040516109209190613d0b565b60405180910390f35b34801561093557600080fd5b5061093e61193e565b005b34801561094c57600080fd5b50610955611a91565b60405161096291906139ac565b60405180910390f35b34801561097757600080fd5b50610980611b23565b60405161098d9190613bb9565b60405180910390f35b3480156109a257600080fd5b506109ab611b2d565b6040516109b89190613bb9565b60405180910390f35b3480156109cd57600080fd5b506109d6611b33565b6040516109e39190613bb9565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e9190613aba565b611b39565b604051610a209190613b15565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190613ccf565b611c06565b005b348015610a5e57600080fd5b50610a796004803603810190610a749190613aba565b611cb8565b604051610a869190613b15565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190613a09565b611cd7565b005b348015610ac457600080fd5b50610adf6004803603810190610ada9190613ccf565b611dfd565b005b348015610aed57600080fd5b50610af6611ee6565b604051610b039190613bb9565b60405180910390f35b348015610b1857600080fd5b50610b21611eec565b604051610b2e9190613d0b565b60405180910390f35b348015610b4357600080fd5b50610b4c611f12565b604051610b599190613bb9565b60405180910390f35b348015610b6e57600080fd5b50610b896004803603810190610b849190613d8a565b611f18565b604051610b969190613b15565b60405180910390f35b348015610bab57600080fd5b50610bb4611f38565b604051610bc19190613bf5565b60405180910390f35b348015610bd657600080fd5b50610bdf611f5e565b604051610bec9190613b15565b60405180910390f35b348015610c0157600080fd5b50610c0a611f71565b604051610c179190613bb9565b60405180910390f35b348015610c2c57600080fd5b50610c476004803603810190610c429190613db7565b611f77565b604051610c549190613bb9565b60405180910390f35b348015610c6957600080fd5b50610c846004803603810190610c7f9190613d5d565b611ffe565b005b348015610c9257600080fd5b50610cad6004803603810190610ca89190613c3c565b6120ee565b005b348015610cbb57600080fd5b50610cc46121de565b604051610cd19190613bb9565b60405180910390f35b348015610ce657600080fd5b50610d016004803603810190610cfc9190613d5d565b6121e4565b005b348015610d0f57600080fd5b50610d2a6004803603810190610d259190613d8a565b6122d4565b005b348015610d3857600080fd5b50610d41612495565b604051610d4e9190613bb9565b60405180910390f35b348015610d6357600080fd5b50610d7e6004803603810190610d799190613c3c565b61249b565b005b348015610d8c57600080fd5b50610d9561258b565b604051610da29190613b15565b60405180910390f35b606060028054610dba90613e26565b80601f0160208091040260200160405190810160405280929190818152602001828054610de690613e26565b8015610e335780601f10610e0857610100808354040283529160200191610e33565b820191906000526020600020905b815481529060010190602001808311610e1657829003601f168201915b5050505050905090565b610e4561259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613ea3565b60405180910390fd5b82600f819055508160108190555080601181905550610f12601154610f04601054600f546125a690919063ffffffff16565b6125a690919063ffffffff16565b60168190555060196016541115610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613f0f565b60405180910390fd5b505050565b6000610f77610f7061259e565b8484612604565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610fdf61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461106c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106390613ea3565b60405180910390fd5b82600c8190555081600d8190555080600e819055506110ac600e5461109e600d54600c546125a690919063ffffffff16565b6125a690919063ffffffff16565b601581905550601960155411156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef90613f7b565b60405180910390fd5b505050565b61110561259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990613ea3565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111fa8484846127cd565b506112bc8461120761259e565b6112b785604051806060016040528060288152602001614a7360289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061126d61259e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db09092919063ffffffff16565b612604565b600190509392505050565b6112cf61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461135c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135390613ea3565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006113dc6113cb7f000000000000000000000000000000000000000000000000000000000000dead6116cb565b601854612e1490919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b60115481565b60006114a761140b61259e565b846114a2856007600061141c61259e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a690919063ffffffff16565b612604565b6001905092915050565b6114b961259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611546576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153d90613ea3565b60405180910390fd5b60018111611589576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115809061400d565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b6115ce61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165290613ea3565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60125481565b60135481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b61172261259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a690613ea3565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b61180761259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b90613ea3565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61194661259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ca90613ea3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060038054611aa090613e26565b80601f0160208091040260200160405190810160405280929190818152602001828054611acc90613e26565b8015611b195780601f10611aee57610100808354040283529160200191611b19565b820191906000526020600020905b815481529060010190602001808311611afc57829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b60145481565b6000611bfc611b4661259e565b84611bf785604051806060016040528060258152602001614a9b6025913960076000611b7061259e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db09092919063ffffffff16565b612604565b6001905092915050565b611c0e61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9290613ea3565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611ccc611cc561259e565b84846127cd565b506001905092915050565b611cdf61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6390613ea3565b60405180910390fd5b826012819055508160138190555080601481905550611dac601454611d9e6013546012546125a690919063ffffffff16565b6125a690919063ffffffff16565b60178190555060326017541115611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def9061409f565b60405180910390fd5b505050565b611e0561259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990613ea3565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611edb9190613b15565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61200661259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90613ea3565b60405180910390fd5b60c86018546120a2919061411d565b8110156120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db906141c0565b60405180910390fd5b8060198190555050565b6120f661259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217a90613ea3565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b6121ec61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227090613ea3565b60405180910390fd5b60c8601854612288919061411d565b8110156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614252565b60405180910390fd5b80601a8190555050565b6122dc61259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612369576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236090613ea3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906142e4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b6124a361259e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612530576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252790613ea3565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600033905090565b60008082846125b59190614304565b9050838110156125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f190614384565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612673576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a90614416565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d9906144a8565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127c09190613bb9565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361283d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128349061453a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a3906145cc565b60405180910390fd5b601d60149054906101000a900460ff16156128d3576128cc848484612e5e565b9050612da9565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129775750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129c2576019548211156129c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b89061465e565b60405180910390fd5b5b60006129cd306116cb565b90506000601b5482101590508080156129f35750601d60149054906101000a900460ff16155b8015612a495750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a615750601d60159054906101000a900460ff165b15612a8b57601d60169054906101000a900460ff1615612a8157601b5491505b612a8a82613031565b5b612b14846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db09092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bfa5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0e57612c09878787613222565b612c10565b845b9050601d60179054906101000a900460ff168015612c785750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ca757601a54612c9b82612c8d896116cb565b6125a690919063ffffffff16565b1115612ca657600080fd5b5b612cf981600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a690919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d999190613bb9565b60405180910390a3600193505050505b9392505050565b6000838311158290612df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612def91906139ac565b60405180910390fd5b5060008385612e07919061467e565b9050809150509392505050565b6000612e5683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612db0565b905092915050565b6000612ee9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612db09092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f7e82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a690919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161301e9190613bb9565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061308a600261307c60175461306e6012548761344990919063ffffffff16565b6134c390919063ffffffff16565b6134c390919063ffffffff16565b905060006130a18284612e1490919063ffffffff16565b90506130ac8161350d565b600047905060006130dd6130cc60026012546134c390919063ffffffff16565b601754612e1490919063ffffffff16565b9050600061311b600261310d846130ff6012548861344990919063ffffffff16565b6134c390919063ffffffff16565b6134c390919063ffffffff16565b90506000613146836131386014548761344990919063ffffffff16565b6134c390919063ffffffff16565b9050600061316f826131618588612e1490919063ffffffff16565b612e1490919063ffffffff16565b905060008111156131a7576131a6600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613789565b5b60008211156131dd576131dc600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613789565b5b6000831180156131ed5750600087115b156131fd576131fc87846137d4565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156132aa576132a360646132956015548661344990919063ffffffff16565b6134c390919063ffffffff16565b9050613328565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156133275761332460646133166016548661344990919063ffffffff16565b6134c390919063ffffffff16565b90505b5b600081111561342c5761338381600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125a690919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134239190613bb9565b60405180910390a35b61343f8184612e1490919063ffffffff16565b9150509392505050565b600080830361345b57600090506134bd565b6000828461346991906146b2565b9050828482613478919061411d565b146134b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134af90614766565b60405180910390fd5b809150505b92915050565b600061350583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138b9565b905092915050565b6000600267ffffffffffffffff81111561352a57613529614786565b5b6040519080825280602002602001820160405280156135585781602001602082028036833780820191505090505b50905030816000815181106135705761356f6147b5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b91906147f9565b8160018151811061364f5761364e6147b5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506136b630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612604565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161371a95949392919061491f565b600060405180830381600087803b15801561373457600080fd5b505af1158015613748573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161377d929190614979565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156137cf573d6000803e3d6000fd5b505050565b61380130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612604565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061384d611915565b426040518863ffffffff1660e01b815260040161386f969594939291906149a9565b60606040518083038185885af115801561388d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906138b29190614a1f565b5050505050565b60008083118290613900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f791906139ac565b60405180910390fd5b506000838561390f919061411d565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561395657808201518184015260208101905061393b565b60008484015250505050565b6000601f19601f8301169050919050565b600061397e8261391c565b6139888185613927565b9350613998818560208601613938565b6139a181613962565b840191505092915050565b600060208201905081810360008301526139c68184613973565b905092915050565b600080fd5b6000819050919050565b6139e6816139d3565b81146139f157600080fd5b50565b600081359050613a03816139dd565b92915050565b600080600060608486031215613a2257613a216139ce565b5b6000613a30868287016139f4565b9350506020613a41868287016139f4565b9250506040613a52868287016139f4565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613a8782613a5c565b9050919050565b613a9781613a7c565b8114613aa257600080fd5b50565b600081359050613ab481613a8e565b92915050565b60008060408385031215613ad157613ad06139ce565b5b6000613adf85828601613aa5565b9250506020613af0858286016139f4565b9150509250929050565b60008115159050919050565b613b0f81613afa565b82525050565b6000602082019050613b2a6000830184613b06565b92915050565b6000819050919050565b6000613b55613b50613b4b84613a5c565b613b30565b613a5c565b9050919050565b6000613b6782613b3a565b9050919050565b6000613b7982613b5c565b9050919050565b613b8981613b6e565b82525050565b6000602082019050613ba46000830184613b80565b92915050565b613bb3816139d3565b82525050565b6000602082019050613bce6000830184613baa565b92915050565b6000613bdf82613a5c565b9050919050565b613bef81613bd4565b82525050565b6000602082019050613c0a6000830184613be6565b92915050565b613c1981613afa565b8114613c2457600080fd5b50565b600081359050613c3681613c10565b92915050565b60008060408385031215613c5357613c526139ce565b5b6000613c6185828601613aa5565b9250506020613c7285828601613c27565b9150509250929050565b600080600060608486031215613c9557613c946139ce565b5b6000613ca386828701613aa5565b9350506020613cb486828701613aa5565b9250506040613cc5868287016139f4565b9150509250925092565b600060208284031215613ce557613ce46139ce565b5b6000613cf384828501613c27565b91505092915050565b613d0581613a7c565b82525050565b6000602082019050613d206000830184613cfc565b92915050565b600060ff82169050919050565b613d3c81613d26565b82525050565b6000602082019050613d576000830184613d33565b92915050565b600060208284031215613d7357613d726139ce565b5b6000613d81848285016139f4565b91505092915050565b600060208284031215613da057613d9f6139ce565b5b6000613dae84828501613aa5565b91505092915050565b60008060408385031215613dce57613dcd6139ce565b5b6000613ddc85828601613aa5565b9250506020613ded85828601613aa5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613e3e57607f821691505b602082108103613e5157613e50613df7565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e8d602083613927565b9150613e9882613e57565b602082019050919050565b60006020820190508181036000830152613ebc81613e80565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e203235250000600082015250565b6000613ef9601e83613927565b9150613f0482613ec3565b602082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b7f42757920746178206d757374206265206c657373207468616e20323525000000600082015250565b6000613f65601d83613927565b9150613f7082613f2f565b602082019050919050565b60006020820190508181036000830152613f9481613f58565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f60008201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b6000613ff7602383613927565b915061400282613f9b565b604082019050919050565b6000602082019050818103600083015261402681613fea565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c65737360008201527f207468616e203530250000000000000000000000000000000000000000000000602082015250565b6000614089602983613927565b91506140948261402d565b604082019050919050565b600060208201905081810360008301526140b88161407c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614128826139d3565b9150614133836139d3565b925082614143576141426140bf565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f7765722074686160008201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b60006141aa602683613927565b91506141b58261414e565b604082019050919050565b600060208201905081810360008301526141d98161419d565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061423c602483613927565b9150614247826141e0565b604082019050919050565b6000602082019050818103600083015261426b8161422f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006142ce602683613927565b91506142d982614272565b604082019050919050565b600060208201905081810360008301526142fd816142c1565b9050919050565b600061430f826139d3565b915061431a836139d3565b9250828201905080821115614332576143316140ee565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061436e601b83613927565b915061437982614338565b602082019050919050565b6000602082019050818103600083015261439d81614361565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614400602483613927565b915061440b826143a4565b604082019050919050565b6000602082019050818103600083015261442f816143f3565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614492602283613927565b915061449d82614436565b604082019050919050565b600060208201905081810360008301526144c181614485565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614524602583613927565b915061452f826144c8565b604082019050919050565b6000602082019050818103600083015261455381614517565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006145b6602383613927565b91506145c18261455a565b604082019050919050565b600060208201905081810360008301526145e5816145a9565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614648602883613927565b9150614653826145ec565b604082019050919050565b600060208201905081810360008301526146778161463b565b9050919050565b6000614689826139d3565b9150614694836139d3565b92508282039050818111156146ac576146ab6140ee565b5b92915050565b60006146bd826139d3565b91506146c8836139d3565b92508282026146d6816139d3565b915082820484148315176146ed576146ec6140ee565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614750602183613927565b915061475b826146f4565b604082019050919050565b6000602082019050818103600083015261477f81614743565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506147f381613a8e565b92915050565b60006020828403121561480f5761480e6139ce565b5b600061481d848285016147e4565b91505092915050565b6000819050919050565b600061484b61484661484184614826565b613b30565b6139d3565b9050919050565b61485b81614830565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61489681613a7c565b82525050565b60006148a8838361488d565b60208301905092915050565b6000602082019050919050565b60006148cc82614861565b6148d6818561486c565b93506148e18361487d565b8060005b838110156149125781516148f9888261489c565b9750614904836148b4565b9250506001810190506148e5565b5085935050505092915050565b600060a0820190506149346000830188613baa565b6149416020830187614852565b818103604083015261495381866148c1565b90506149626060830185613cfc565b61496f6080830184613baa565b9695505050505050565b600060408201905061498e6000830185613baa565b81810360208301526149a081846148c1565b90509392505050565b600060c0820190506149be6000830189613cfc565b6149cb6020830188613baa565b6149d86040830187614852565b6149e56060830186614852565b6149f26080830185613cfc565b6149ff60a0830184613baa565b979650505050505050565b600081519050614a19816139dd565b92915050565b600080600060608486031215614a3857614a376139ce565b5b6000614a4686828701614a0a565b9350506020614a5786828701614a0a565b9250506040614a6886828701614a0a565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220245fbf356ea922b34f1195f474280a5a86bf97801a7ca7d7cbc6a8407771e9c664736f6c63430008130033

Deployed Bytecode Sourcemap

14230:14882:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18153:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20825:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19447:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15951:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18430:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14603:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20380:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22111:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23810:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21990:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14745:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23271:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18339:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15405:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18816:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22454:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15137:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16066:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22657:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14966:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15452:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15493;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18538:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15777:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22804:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15832:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15622:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19961:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15319:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15082:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5769:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5994:145;;;;;;;;;;;;;:::i;:::-;;18244:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19319:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15666:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15534:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19042:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23134:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23635:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21284:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22955:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15233:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15999:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15362:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15023:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14472:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16113:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15191:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18665:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21776:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20237:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15579:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22254:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6147:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15275:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20098:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16165:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18153:83;18190:13;18223:5;18216:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18153:83;:::o;20825:447::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20976:15:::1;20956:17;:35;;;;21022:15;21002:17;:35;;;;21070:17;21048:19;:39;;;;21121:65;21166:19;;21121:40;21143:17;;21121;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;21100:18;:86;;;;21227:2;21205:18;;:24;;21197:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20825:447:::0;;;:::o;19447:161::-;19522:4;19539:39;19548:12;:10;:12::i;:::-;19562:7;19571:6;19539:8;:39::i;:::-;19596:4;19589:11;;19447:161;;;;:::o;15951:41::-;;;;;;;;;;;;;:::o;18430:100::-;18483:7;18510:12;;18503:19;;18430:100;:::o;14603:101::-;;;;;;;;;;;;;:::o;20380:437::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20529:15:::1;20510:16;:34;;;;20574:15;20555:16;:34;;;;20621:17;20600:18;:38;;;;20671:62;20714:18;;20671:38;20692:16;;20671;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;20651:17;:82;;;;20773:2;20752:17;;:23;;20744:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20380:437:::0;;;:::o;22111:135::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22232:6:::1;22202:19;:27;22222:6;22202:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22111:135:::0;;:::o;23810:313::-;23908:4;23925:36;23935:6;23943:9;23954:6;23925:9;:36::i;:::-;;23972:121;23981:6;23989:12;:10;:12::i;:::-;24003:89;24041:6;24003:89;;;;;;;;;;;;;;;;;:11;:19;24015:6;24003:19;;;;;;;;;;;;;;;:33;24023:12;:10;:12::i;:::-;24003:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23972:8;:121::i;:::-;24111:4;24104:11;;23810:313;;;;;:::o;21990:113::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22087:8:::1;22068:16;;:27;;;;;;;;;;;;;;;;;;21990:113:::0;:::o;14745:81::-;;;:::o;23271:128::-;23324:7;23351:40;23368:22;23378:11;23368:9;:22::i;:::-;23351:12;;:16;;:40;;;;:::i;:::-;23344:47;;23271:128;:::o;18339:83::-;18380:5;18405:9;;;;;;;;;;;18398:16;;18339:83;:::o;15405:38::-;;;;:::o;18816:218::-;18904:4;18921:83;18930:12;:10;:12::i;:::-;18944:7;18953:50;18992:10;18953:11;:25;18965:12;:10;:12::i;:::-;18953:25;;;;;;;;;;;;;;;:34;18979:7;18953:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18921:8;:83::i;:::-;19022:4;19015:11;;18816:218;;;;:::o;22454:195::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22555:1:::1;22544:8;:12;22536:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22633:8;22607:23;:34;;;;22454:195:::0;:::o;15137:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;16066:40::-;;;;;;;;;;;;;:::o;22657:139::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22777:10:::1;22744:22;;:44;;;;;;;;;;;;;;;;;;22657:139:::0;:::o;14966:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15452:34::-;;;;:::o;15493:::-;;;;:::o;18538:119::-;18604:7;18631:9;:18;18641:7;18631:18;;;;;;;;;;;;;;;;18624:25;;18538:119;;;:::o;15777:48::-;;;;:::o;22804:143::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22928:10:::1;22893:24;;:46;;;;;;;;;;;;;;;;;;22804:143:::0;:::o;15832:46::-;;;;:::o;15622:37::-;;;;:::o;19961:129::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20074:8:::1;20050:12;:21;20063:7;20050:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19961:129:::0;;:::o;15319:36::-;;;;:::o;15082:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5769:79::-;5807:7;5834:6;;;;;;;;;;;5827:13;;5769:79;:::o;5994:145::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6098:1:::1;6061:40;;6082:6;::::0;::::1;;;;;;;;6061:40;;;;;;;;;;;;6129:1;6112:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5994:145::o:0;18244:87::-;18283:13;18316:7;18309:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18244:87;:::o;19319:120::-;19381:7;19408:23;;19401:30;;19319:120;:::o;15666:44::-;;;;:::o;15534:36::-;;;;:::o;19042:269::-;19135:4;19152:129;19161:12;:10;:12::i;:::-;19175:7;19184:96;19223:15;19184:96;;;;;;;;;;;;;;;;;:11;:25;19196:12;:10;:12::i;:::-;19184:25;;;;;;;;;;;;;;;:34;19210:7;19184:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19152:8;:129::i;:::-;19299:4;19292:11;;19042:269;;;;:::o;23134:125::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23243:8:::1;23215:25;;:36;;;;;;;;;;;;;;;;;;23134:125:::0;:::o;23635:167::-;23713:4;23730:42;23740:12;:10;:12::i;:::-;23754:9;23765:6;23730:9;:42::i;:::-;;23790:4;23783:11;;23635:167;;;;:::o;21284:480::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21450:17:::1;21432:15;:35;;;;21496:17;21478:15;:35;;;;21544:19;21524:17;:39;;;;21603:59;21644:17;;21603:36;21623:15;;21603;;:19;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;21576:24;:86;;;;21708:2;21681:24;;:29;;21673:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21284:480:::0;;;:::o;22955:171::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23056:8:::1;23032:21;;:32;;;;;;;;;;;;;;;;;;23080:38;23109:8;23080:38;;;;;;:::i;:::-;;;;;;;;22955:171:::0;:::o;15233:35::-;;;;:::o;15999:26::-;;;;;;;;;;;;;:::o;15362:36::-;;;;:::o;15023:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14472:99::-;;;;;;;;;;;;;:::o;16113:45::-;;;;;;;;;;;;;:::o;15191:35::-;;;;:::o;18665:143::-;18746:7;18773:11;:18;18785:5;18773:18;;;;;;;;;;;;;;;:27;18792:7;18773:27;;;;;;;;;;;;;;;;18766:34;;18665:143;;;;:::o;21776:206::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21891:3:::1;21876:12;;:18;;;;:::i;:::-;21861:11;:33;;21853:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;21963:11;21948:12;:26;;;;21776:206:::0;:::o;20237:135::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20356:8:::1;20327:17;:26;20345:7;20327:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20237:135:::0;;:::o;15579:36::-;;;;:::o;22254:192::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22361:3:::1;22346:12;;:18;;;;:::i;:::-;22334:8;:30;;22326:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22430:8;22416:10;:22;;;;22254:192:::0;:::o;6147:244::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6256:1:::1;6236:22;;:8;:22;;::::0;6228:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6346:8;6317:38;;6338:6;::::0;::::1;;;;;;;;6317:38;;;;;;;;;;;;6375:8;6366:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6147:244:::0;:::o;15275:37::-;;;;:::o;20098:127::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20211:6:::1;20185:15;:23;20201:6;20185:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20098:127:::0;;:::o;16165:35::-;;;;;;;;;;;;;:::o;103:115::-;156:15;199:10;184:26;;103:115;:::o;1171:181::-;1229:7;1249:9;1265:1;1261;:5;;;;:::i;:::-;1249:17;;1290:1;1285;:6;;1277:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1343:1;1336:8;;;1171:181;;;;:::o;19616:337::-;19726:1;19709:19;;:5;:19;;;19701:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19807:1;19788:21;;:7;:21;;;19780:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19891:6;19861:11;:18;19873:5;19861:18;;;;;;;;;;;;;;;:27;19880:7;19861:27;;;;;;;;;;;;;;;:36;;;;19929:7;19913:32;;19922:5;19913:32;;;19938:6;19913:32;;;;;;:::i;:::-;;;;;;;;19616:337;;;:::o;24131:1707::-;24218:4;24263:1;24245:20;;:6;:20;;;24237:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24347:1;24326:23;;:9;:23;;;24318:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24405:16;;;;;;;;;;;24402:1429;;;24455:41;24470:6;24478:9;24489:6;24455:14;:41::i;:::-;24448:48;;;;24402:1429;24552:15;:23;24568:6;24552:23;;;;;;;;;;;;;;;;;;;;;;;;;24551:24;:55;;;;;24580:15;:26;24596:9;24580:26;;;;;;;;;;;;;;;;;;;;;;;;;24579:27;24551:55;24548:170;;;24645:12;;24635:6;:22;;24627:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24548:170;24746:28;24777:24;24795:4;24777:9;:24::i;:::-;24746:55;;24816:28;24871:23;;24847:20;:47;;24816:78;;24927:23;:44;;;;;24955:16;;;;;;;;;;;24954:17;24927:44;:69;;;;;24976:12;:20;24989:6;24976:20;;;;;;;;;;;;;;;;;;;;;;;;;24975:21;24927:69;:94;;;;;25000:21;;;;;;;;;;;24927:94;24923:305;;;25059:25;;;;;;;;;;;25056:97;;;25130:23;;25107:46;;25056:97;25172:36;25187:20;25172:14;:36::i;:::-;24923:305;25264:53;25286:6;25264:53;;;;;;;;;;;;;;;;;:9;:17;25274:6;25264:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25244:9;:17;25254:6;25244:17;;;;;;;;;;;;;;;:73;;;;25334:19;25357:17;:25;25375:6;25357:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;25386:17;:28;25404:9;25386:28;;;;;;;;;;;;;;;;;;;;;;;;;25357:57;25356:148;;25470:34;25478:6;25486:9;25497:6;25470:7;:34::i;:::-;25356:148;;;25461:6;25356:148;25334:170;;25524:16;;;;;;;;;;;:51;;;;;25545:19;:30;25565:9;25545:30;;;;;;;;;;;;;;;;;;;;;;;;;25544:31;25524:51;25521:133;;;25643:10;;25602:37;25627:11;25602:20;25612:9;25602;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25594:60;;;;;;25521:133;25694:37;25719:11;25694:9;:20;25704:9;25694:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25671:9;:20;25681:9;25671:20;;;;;;;;;;;;;;;:60;;;;25770:9;25753:40;;25762:6;25753:40;;;25781:11;25753:40;;;;;;:::i;:::-;;;;;;;;25815:4;25808:11;;;;;24131:1707;;;;;;:::o;1504:192::-;1590:7;1623:1;1618;:6;;1626:12;1610:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1650:9;1666:1;1662;:5;;;;:::i;:::-;1650:17;;1687:1;1680:8;;;1504:192;;;;;:::o;1360:136::-;1418:7;1445:43;1449:1;1452;1445:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1438:50;;1360:136;;;;:::o;25846:330::-;25939:4;25976:53;25998:6;25976:53;;;;;;;;;;;;;;;;;:9;:17;25986:6;25976:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25956:9;:17;25966:6;25956:17;;;;;;;;;;;;;;;:73;;;;26063:32;26088:6;26063:9;:20;26073:9;26063:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26040:9;:20;26050:9;26040:20;;;;;;;;;;;;;;;:55;;;;26128:9;26111:35;;26120:6;26111:35;;;26139:6;26111:35;;;;;;:::i;:::-;;;;;;;;26164:4;26157:11;;25846:330;;;;;:::o;26184:1090::-;16642:4;16623:16;;:23;;;;;;;;;;;;;;;;;;26266:19:::1;26288:65;26351:1;26288:58;26321:24;;26288:28;26300:15;;26288:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;26266:87;;26364:21;26388:24;26400:11;26388:7;:11;;:24;;;;:::i;:::-;26364:48;;26425:31;26442:13;26425:16;:31::i;:::-;26467:22;26492:21;26467:46;;26526:19;26548:52;26577:22;26597:1;26577:15;;:19;;:22;;;;:::i;:::-;26548:24;;:28;;:52;;;;:::i;:::-;26526:74;;26621:26;26650:59;26707:1;26650:52;26690:11;26650:35;26669:15;;26650:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;26621:88;;26720:28;26751:54;26793:11;26751:37;26770:17;;26751:14;:18;;:37;;;;:::i;:::-;:41;;:54;;;;:::i;:::-;26720:85;;26816:26;26845:64;26888:20;26845:38;26864:18;26845:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;26816:93;;26946:1;26925:18;:22;26922:104;;;26962:64;26983:22;;;;;;;;;;;27007:18;26962:20;:64::i;:::-;26922:104;27065:1;27042:20;:24;27039:110;;;27081:68;27102:24;;;;;;;;;;;27128:20;27081;:68::i;:::-;27039:110;27186:1;27165:18;:22;:41;;;;;27205:1;27191:11;:15;27165:41;27162:104;;;27221:45;27234:11;27247:18;27221:12;:45::i;:::-;27162:104;26245:1029;;;;;;;16688:5:::0;16669:16;;:24;;;;;;;;;;;;;;;;;;26184:1090;:::o;28481:622::-;28567:7;28597:17;28617:1;28597:21;;28642:12;:20;28655:6;28642:20;;;;;;;;;;;;;;;;;;;;;;;;;28639:223;;;28691:38;28725:3;28691:29;28702:17;;28691:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28679:50;;28639:223;;;28759:12;:23;28772:9;28759:23;;;;;;;;;;;;;;;;;;;;;;;;;28756:106;;;28811:39;28846:3;28811:30;28822:18;;28811:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;28799:51;;28756:106;28639:223;28897:1;28885:9;:13;28882:173;;;28942:39;28971:9;28942;:24;28960:4;28942:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28915:9;:24;28933:4;28915:24;;;;;;;;;;;;;;;:66;;;;29026:4;29001:42;;29010:6;29001:42;;;29033:9;29001:42;;;;;;:::i;:::-;;;;;;;;28882:173;29074:21;29085:9;29074:6;:10;;:21;;;;:::i;:::-;29067:28;;;28481:622;;;;;:::o;1704:250::-;1762:7;1791:1;1786;:6;1782:47;;1816:1;1809:8;;;;1782:47;1841:9;1857:1;1853;:5;;;;:::i;:::-;1841:17;;1886:1;1881;1877;:5;;;;:::i;:::-;:10;1869:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1945:1;1938:8;;;1704:250;;;;;:::o;1962:132::-;2020:7;2047:39;2051:1;2054;2047:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2040:46;;1962:132;;;;:::o;27286:666::-;27412:21;27450:1;27436:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27412:40;;27481:4;27463;27468:1;27463:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27507:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27497:4;27502:1;27497:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27542:62;27559:4;27574:15;;;;;;;;;;;27592:11;27542:8;:62::i;:::-;27643:15;;;;;;;;;;;:66;;;27724:11;27750:1;27794:4;27821;27857:15;27643:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27909:35;27926:11;27939:4;27909:35;;;;;;;:::i;:::-;;;;;;;;27341:611;27286:666;:::o;23407:126::-;23499:9;:18;;:26;23518:6;23499:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23407:126;;:::o;27960:513::-;28108:62;28125:4;28140:15;;;;;;;;;;;28158:11;28108:8;:62::i;:::-;28213:15;;;;;;;;;;;:31;;;28252:9;28285:4;28305:11;28331:1;28374;28417:7;:5;:7::i;:::-;28439:15;28213:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27960:513;;:::o;2102:278::-;2188:7;2220:1;2216;:5;2223:12;2208:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2247:9;2263:1;2259;:5;;;;:::i;:::-;2247:17;;2371:1;2364:8;;;2102:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:60::-;4099:3;4120:5;4113:12;;4071:60;;;:::o;4137:142::-;4187:9;4220:53;4238:34;4247:24;4265:5;4247:24;:::i;:::-;4238:34;:::i;:::-;4220:53;:::i;:::-;4207:66;;4137:142;;;:::o;4285:126::-;4335:9;4368:37;4399:5;4368:37;:::i;:::-;4355:50;;4285:126;;;:::o;4417:153::-;4494:9;4527:37;4558:5;4527:37;:::i;:::-;4514:50;;4417:153;;;:::o;4576:185::-;4690:64;4748:5;4690:64;:::i;:::-;4685:3;4678:77;4576:185;;:::o;4767:276::-;4887:4;4925:2;4914:9;4910:18;4902:26;;4938:98;5033:1;5022:9;5018:17;5009:6;4938:98;:::i;:::-;4767:276;;;;:::o;5049:118::-;5136:24;5154:5;5136:24;:::i;:::-;5131:3;5124:37;5049:118;;:::o;5173:222::-;5266:4;5304:2;5293:9;5289:18;5281:26;;5317:71;5385:1;5374:9;5370:17;5361:6;5317:71;:::i;:::-;5173:222;;;;:::o;5401:104::-;5446:7;5475:24;5493:5;5475:24;:::i;:::-;5464:35;;5401:104;;;:::o;5511:142::-;5614:32;5640:5;5614:32;:::i;:::-;5609:3;5602:45;5511:142;;:::o;5659:254::-;5768:4;5806:2;5795:9;5791:18;5783:26;;5819:87;5903:1;5892:9;5888:17;5879:6;5819:87;:::i;:::-;5659:254;;;;:::o;5919:116::-;5989:21;6004:5;5989:21;:::i;:::-;5982:5;5979:32;5969:60;;6025:1;6022;6015:12;5969:60;5919:116;:::o;6041:133::-;6084:5;6122:6;6109:20;6100:29;;6138:30;6162:5;6138:30;:::i;:::-;6041:133;;;;:::o;6180:468::-;6245:6;6253;6302:2;6290:9;6281:7;6277:23;6273:32;6270:119;;;6308:79;;:::i;:::-;6270:119;6428:1;6453:53;6498:7;6489:6;6478:9;6474:22;6453:53;:::i;:::-;6443:63;;6399:117;6555:2;6581:50;6623:7;6614:6;6603:9;6599:22;6581:50;:::i;:::-;6571:60;;6526:115;6180:468;;;;;:::o;6654:619::-;6731:6;6739;6747;6796:2;6784:9;6775:7;6771:23;6767:32;6764:119;;;6802:79;;:::i;:::-;6764:119;6922:1;6947:53;6992:7;6983:6;6972:9;6968:22;6947:53;:::i;:::-;6937:63;;6893:117;7049:2;7075:53;7120:7;7111:6;7100:9;7096:22;7075:53;:::i;:::-;7065:63;;7020:118;7177:2;7203:53;7248:7;7239:6;7228:9;7224:22;7203:53;:::i;:::-;7193:63;;7148:118;6654:619;;;;;:::o;7279:323::-;7335:6;7384:2;7372:9;7363:7;7359:23;7355:32;7352:119;;;7390:79;;:::i;:::-;7352:119;7510:1;7535:50;7577:7;7568:6;7557:9;7553:22;7535:50;:::i;:::-;7525:60;;7481:114;7279:323;;;;:::o;7608:118::-;7695:24;7713:5;7695:24;:::i;:::-;7690:3;7683:37;7608:118;;:::o;7732:222::-;7825:4;7863:2;7852:9;7848:18;7840:26;;7876:71;7944:1;7933:9;7929:17;7920:6;7876:71;:::i;:::-;7732:222;;;;:::o;7960:86::-;7995:7;8035:4;8028:5;8024:16;8013:27;;7960:86;;;:::o;8052:112::-;8135:22;8151:5;8135:22;:::i;:::-;8130:3;8123:35;8052:112;;:::o;8170:214::-;8259:4;8297:2;8286:9;8282:18;8274:26;;8310:67;8374:1;8363:9;8359:17;8350:6;8310:67;:::i;:::-;8170:214;;;;:::o;8390:329::-;8449:6;8498:2;8486:9;8477:7;8473:23;8469:32;8466:119;;;8504:79;;:::i;:::-;8466:119;8624:1;8649:53;8694:7;8685:6;8674:9;8670:22;8649:53;:::i;:::-;8639:63;;8595:117;8390:329;;;;:::o;8725:::-;8784:6;8833:2;8821:9;8812:7;8808:23;8804:32;8801:119;;;8839:79;;:::i;:::-;8801:119;8959:1;8984:53;9029:7;9020:6;9009:9;9005:22;8984:53;:::i;:::-;8974:63;;8930:117;8725:329;;;;:::o;9060:474::-;9128:6;9136;9185:2;9173:9;9164:7;9160:23;9156:32;9153:119;;;9191:79;;:::i;:::-;9153:119;9311:1;9336:53;9381:7;9372:6;9361:9;9357:22;9336:53;:::i;:::-;9326:63;;9282:117;9438:2;9464:53;9509:7;9500:6;9489:9;9485:22;9464:53;:::i;:::-;9454:63;;9409:118;9060:474;;;;;:::o;9540:180::-;9588:77;9585:1;9578:88;9685:4;9682:1;9675:15;9709:4;9706:1;9699:15;9726:320;9770:6;9807:1;9801:4;9797:12;9787:22;;9854:1;9848:4;9844:12;9875:18;9865:81;;9931:4;9923:6;9919:17;9909:27;;9865:81;9993:2;9985:6;9982:14;9962:18;9959:38;9956:84;;10012:18;;:::i;:::-;9956:84;9777:269;9726:320;;;:::o;10052:182::-;10192:34;10188:1;10180:6;10176:14;10169:58;10052:182;:::o;10240:366::-;10382:3;10403:67;10467:2;10462:3;10403:67;:::i;:::-;10396:74;;10479:93;10568:3;10479:93;:::i;:::-;10597:2;10592:3;10588:12;10581:19;;10240:366;;;:::o;10612:419::-;10778:4;10816:2;10805:9;10801:18;10793:26;;10865:9;10859:4;10855:20;10851:1;10840:9;10836:17;10829:47;10893:131;11019:4;10893:131;:::i;:::-;10885:139;;10612:419;;;:::o;11037:180::-;11177:32;11173:1;11165:6;11161:14;11154:56;11037:180;:::o;11223:366::-;11365:3;11386:67;11450:2;11445:3;11386:67;:::i;:::-;11379:74;;11462:93;11551:3;11462:93;:::i;:::-;11580:2;11575:3;11571:12;11564:19;;11223:366;;;:::o;11595:419::-;11761:4;11799:2;11788:9;11784:18;11776:26;;11848:9;11842:4;11838:20;11834:1;11823:9;11819:17;11812:47;11876:131;12002:4;11876:131;:::i;:::-;11868:139;;11595:419;;;:::o;12020:179::-;12160:31;12156:1;12148:6;12144:14;12137:55;12020:179;:::o;12205:366::-;12347:3;12368:67;12432:2;12427:3;12368:67;:::i;:::-;12361:74;;12444:93;12533:3;12444:93;:::i;:::-;12562:2;12557:3;12553:12;12546:19;;12205:366;;;:::o;12577:419::-;12743:4;12781:2;12770:9;12766:18;12758:26;;12830:9;12824:4;12820:20;12816:1;12805:9;12801:17;12794:47;12858:131;12984:4;12858:131;:::i;:::-;12850:139;;12577:419;;;:::o;13002:222::-;13142:34;13138:1;13130:6;13126:14;13119:58;13211:5;13206:2;13198:6;13194:15;13187:30;13002:222;:::o;13230:366::-;13372:3;13393:67;13457:2;13452:3;13393:67;:::i;:::-;13386:74;;13469:93;13558:3;13469:93;:::i;:::-;13587:2;13582:3;13578:12;13571:19;;13230:366;;;:::o;13602:419::-;13768:4;13806:2;13795:9;13791:18;13783:26;;13855:9;13849:4;13845:20;13841:1;13830:9;13826:17;13819:47;13883:131;14009:4;13883:131;:::i;:::-;13875:139;;13602:419;;;:::o;14027:228::-;14167:34;14163:1;14155:6;14151:14;14144:58;14236:11;14231:2;14223:6;14219:15;14212:36;14027:228;:::o;14261:366::-;14403:3;14424:67;14488:2;14483:3;14424:67;:::i;:::-;14417:74;;14500:93;14589:3;14500:93;:::i;:::-;14618:2;14613:3;14609:12;14602:19;;14261:366;;;:::o;14633:419::-;14799:4;14837:2;14826:9;14822:18;14814:26;;14886:9;14880:4;14876:20;14872:1;14861:9;14857:17;14850:47;14914:131;15040:4;14914:131;:::i;:::-;14906:139;;14633:419;;;:::o;15058:180::-;15106:77;15103:1;15096:88;15203:4;15200:1;15193:15;15227:4;15224:1;15217:15;15244:180;15292:77;15289:1;15282:88;15389:4;15386:1;15379:15;15413:4;15410:1;15403:15;15430:185;15470:1;15487:20;15505:1;15487:20;:::i;:::-;15482:25;;15521:20;15539:1;15521:20;:::i;:::-;15516:25;;15560:1;15550:35;;15565:18;;:::i;:::-;15550:35;15607:1;15604;15600:9;15595:14;;15430:185;;;;:::o;15621:225::-;15761:34;15757:1;15749:6;15745:14;15738:58;15830:8;15825:2;15817:6;15813:15;15806:33;15621:225;:::o;15852:366::-;15994:3;16015:67;16079:2;16074:3;16015:67;:::i;:::-;16008:74;;16091:93;16180:3;16091:93;:::i;:::-;16209:2;16204:3;16200:12;16193:19;;15852:366;;;:::o;16224:419::-;16390:4;16428:2;16417:9;16413:18;16405:26;;16477:9;16471:4;16467:20;16463:1;16452:9;16448:17;16441:47;16505:131;16631:4;16505:131;:::i;:::-;16497:139;;16224:419;;;:::o;16649:223::-;16789:34;16785:1;16777:6;16773:14;16766:58;16858:6;16853:2;16845:6;16841:15;16834:31;16649:223;:::o;16878:366::-;17020:3;17041:67;17105:2;17100:3;17041:67;:::i;:::-;17034:74;;17117:93;17206:3;17117:93;:::i;:::-;17235:2;17230:3;17226:12;17219:19;;16878:366;;;:::o;17250:419::-;17416:4;17454:2;17443:9;17439:18;17431:26;;17503:9;17497:4;17493:20;17489:1;17478:9;17474:17;17467:47;17531:131;17657:4;17531:131;:::i;:::-;17523:139;;17250:419;;;:::o;17675:225::-;17815:34;17811:1;17803:6;17799:14;17792:58;17884:8;17879:2;17871:6;17867:15;17860:33;17675:225;:::o;17906:366::-;18048:3;18069:67;18133:2;18128:3;18069:67;:::i;:::-;18062:74;;18145:93;18234:3;18145:93;:::i;:::-;18263:2;18258:3;18254:12;18247:19;;17906:366;;;:::o;18278:419::-;18444:4;18482:2;18471:9;18467:18;18459:26;;18531:9;18525:4;18521:20;18517:1;18506:9;18502:17;18495:47;18559:131;18685:4;18559:131;:::i;:::-;18551:139;;18278:419;;;:::o;18703:191::-;18743:3;18762:20;18780:1;18762:20;:::i;:::-;18757:25;;18796:20;18814:1;18796:20;:::i;:::-;18791:25;;18839:1;18836;18832:9;18825:16;;18860:3;18857:1;18854:10;18851:36;;;18867:18;;:::i;:::-;18851:36;18703:191;;;;:::o;18900:177::-;19040:29;19036:1;19028:6;19024:14;19017:53;18900:177;:::o;19083:366::-;19225:3;19246:67;19310:2;19305:3;19246:67;:::i;:::-;19239:74;;19322:93;19411:3;19322:93;:::i;:::-;19440:2;19435:3;19431:12;19424:19;;19083:366;;;:::o;19455:419::-;19621:4;19659:2;19648:9;19644:18;19636:26;;19708:9;19702:4;19698:20;19694:1;19683:9;19679:17;19672:47;19736:131;19862:4;19736:131;:::i;:::-;19728:139;;19455:419;;;:::o;19880:223::-;20020:34;20016:1;20008:6;20004:14;19997:58;20089:6;20084:2;20076:6;20072:15;20065:31;19880:223;:::o;20109:366::-;20251:3;20272:67;20336:2;20331:3;20272:67;:::i;:::-;20265:74;;20348:93;20437:3;20348:93;:::i;:::-;20466:2;20461:3;20457:12;20450:19;;20109:366;;;:::o;20481:419::-;20647:4;20685:2;20674:9;20670:18;20662:26;;20734:9;20728:4;20724:20;20720:1;20709:9;20705:17;20698:47;20762:131;20888:4;20762:131;:::i;:::-;20754:139;;20481:419;;;:::o;20906:221::-;21046:34;21042:1;21034:6;21030:14;21023:58;21115:4;21110:2;21102:6;21098:15;21091:29;20906:221;:::o;21133:366::-;21275:3;21296:67;21360:2;21355:3;21296:67;:::i;:::-;21289:74;;21372:93;21461:3;21372:93;:::i;:::-;21490:2;21485:3;21481:12;21474:19;;21133:366;;;:::o;21505:419::-;21671:4;21709:2;21698:9;21694:18;21686:26;;21758:9;21752:4;21748:20;21744:1;21733:9;21729:17;21722:47;21786:131;21912:4;21786:131;:::i;:::-;21778:139;;21505:419;;;:::o;21930:224::-;22070:34;22066:1;22058:6;22054:14;22047:58;22139:7;22134:2;22126:6;22122:15;22115:32;21930:224;:::o;22160:366::-;22302:3;22323:67;22387:2;22382:3;22323:67;:::i;:::-;22316:74;;22399:93;22488:3;22399:93;:::i;:::-;22517:2;22512:3;22508:12;22501:19;;22160:366;;;:::o;22532:419::-;22698:4;22736:2;22725:9;22721:18;22713:26;;22785:9;22779:4;22775:20;22771:1;22760:9;22756:17;22749:47;22813:131;22939:4;22813:131;:::i;:::-;22805:139;;22532:419;;;:::o;22957:222::-;23097:34;23093:1;23085:6;23081:14;23074:58;23166:5;23161:2;23153:6;23149:15;23142:30;22957:222;:::o;23185:366::-;23327:3;23348:67;23412:2;23407:3;23348:67;:::i;:::-;23341:74;;23424:93;23513:3;23424:93;:::i;:::-;23542:2;23537:3;23533:12;23526:19;;23185:366;;;:::o;23557:419::-;23723:4;23761:2;23750:9;23746:18;23738:26;;23810:9;23804:4;23800:20;23796:1;23785:9;23781:17;23774:47;23838:131;23964:4;23838:131;:::i;:::-;23830:139;;23557:419;;;:::o;23982:227::-;24122:34;24118:1;24110:6;24106:14;24099:58;24191:10;24186:2;24178:6;24174:15;24167:35;23982:227;:::o;24215:366::-;24357:3;24378:67;24442:2;24437:3;24378:67;:::i;:::-;24371:74;;24454:93;24543:3;24454:93;:::i;:::-;24572:2;24567:3;24563:12;24556:19;;24215:366;;;:::o;24587:419::-;24753:4;24791:2;24780:9;24776:18;24768:26;;24840:9;24834:4;24830:20;24826:1;24815:9;24811:17;24804:47;24868:131;24994:4;24868:131;:::i;:::-;24860:139;;24587:419;;;:::o;25012:194::-;25052:4;25072:20;25090:1;25072:20;:::i;:::-;25067:25;;25106:20;25124:1;25106:20;:::i;:::-;25101:25;;25150:1;25147;25143:9;25135:17;;25174:1;25168:4;25165:11;25162:37;;;25179:18;;:::i;:::-;25162:37;25012:194;;;;:::o;25212:410::-;25252:7;25275:20;25293:1;25275:20;:::i;:::-;25270:25;;25309:20;25327:1;25309:20;:::i;:::-;25304:25;;25364:1;25361;25357:9;25386:30;25404:11;25386:30;:::i;:::-;25375:41;;25565:1;25556:7;25552:15;25549:1;25546:22;25526:1;25519:9;25499:83;25476:139;;25595:18;;:::i;:::-;25476:139;25260:362;25212:410;;;;:::o;25628:220::-;25768:34;25764:1;25756:6;25752:14;25745:58;25837:3;25832:2;25824:6;25820:15;25813:28;25628:220;:::o;25854:366::-;25996:3;26017:67;26081:2;26076:3;26017:67;:::i;:::-;26010:74;;26093:93;26182:3;26093:93;:::i;:::-;26211:2;26206:3;26202:12;26195:19;;25854:366;;;:::o;26226:419::-;26392:4;26430:2;26419:9;26415:18;26407:26;;26479:9;26473:4;26469:20;26465:1;26454:9;26450:17;26443:47;26507:131;26633:4;26507:131;:::i;:::-;26499:139;;26226:419;;;:::o;26651:180::-;26699:77;26696:1;26689:88;26796:4;26793:1;26786:15;26820:4;26817:1;26810:15;26837:180;26885:77;26882:1;26875:88;26982:4;26979:1;26972:15;27006:4;27003:1;26996:15;27023:143;27080:5;27111:6;27105:13;27096:22;;27127:33;27154:5;27127:33;:::i;:::-;27023:143;;;;:::o;27172:351::-;27242:6;27291:2;27279:9;27270:7;27266:23;27262:32;27259:119;;;27297:79;;:::i;:::-;27259:119;27417:1;27442:64;27498:7;27489:6;27478:9;27474:22;27442:64;:::i;:::-;27432:74;;27388:128;27172:351;;;;:::o;27529:85::-;27574:7;27603:5;27592:16;;27529:85;;;:::o;27620:158::-;27678:9;27711:61;27729:42;27738:32;27764:5;27738:32;:::i;:::-;27729:42;:::i;:::-;27711:61;:::i;:::-;27698:74;;27620:158;;;:::o;27784:147::-;27879:45;27918:5;27879:45;:::i;:::-;27874:3;27867:58;27784:147;;:::o;27937:114::-;28004:6;28038:5;28032:12;28022:22;;27937:114;;;:::o;28057:184::-;28156:11;28190:6;28185:3;28178:19;28230:4;28225:3;28221:14;28206:29;;28057:184;;;;:::o;28247:132::-;28314:4;28337:3;28329:11;;28367:4;28362:3;28358:14;28350:22;;28247:132;;;:::o;28385:108::-;28462:24;28480:5;28462:24;:::i;:::-;28457:3;28450:37;28385:108;;:::o;28499:179::-;28568:10;28589:46;28631:3;28623:6;28589:46;:::i;:::-;28667:4;28662:3;28658:14;28644:28;;28499:179;;;;:::o;28684:113::-;28754:4;28786;28781:3;28777:14;28769:22;;28684:113;;;:::o;28833:732::-;28952:3;28981:54;29029:5;28981:54;:::i;:::-;29051:86;29130:6;29125:3;29051:86;:::i;:::-;29044:93;;29161:56;29211:5;29161:56;:::i;:::-;29240:7;29271:1;29256:284;29281:6;29278:1;29275:13;29256:284;;;29357:6;29351:13;29384:63;29443:3;29428:13;29384:63;:::i;:::-;29377:70;;29470:60;29523:6;29470:60;:::i;:::-;29460:70;;29316:224;29303:1;29300;29296:9;29291:14;;29256:284;;;29260:14;29556:3;29549:10;;28957:608;;;28833:732;;;;:::o;29571:831::-;29834:4;29872:3;29861:9;29857:19;29849:27;;29886:71;29954:1;29943:9;29939:17;29930:6;29886:71;:::i;:::-;29967:80;30043:2;30032:9;30028:18;30019:6;29967:80;:::i;:::-;30094:9;30088:4;30084:20;30079:2;30068:9;30064:18;30057:48;30122:108;30225:4;30216:6;30122:108;:::i;:::-;30114:116;;30240:72;30308:2;30297:9;30293:18;30284:6;30240:72;:::i;:::-;30322:73;30390:3;30379:9;30375:19;30366:6;30322:73;:::i;:::-;29571:831;;;;;;;;:::o;30408:483::-;30579:4;30617:2;30606:9;30602:18;30594:26;;30630:71;30698:1;30687:9;30683:17;30674:6;30630:71;:::i;:::-;30748:9;30742:4;30738:20;30733:2;30722:9;30718:18;30711:48;30776:108;30879:4;30870:6;30776:108;:::i;:::-;30768:116;;30408:483;;;;;:::o;30897:807::-;31146:4;31184:3;31173:9;31169:19;31161:27;;31198:71;31266:1;31255:9;31251:17;31242:6;31198:71;:::i;:::-;31279:72;31347:2;31336:9;31332:18;31323:6;31279:72;:::i;:::-;31361:80;31437:2;31426:9;31422:18;31413:6;31361:80;:::i;:::-;31451;31527:2;31516:9;31512:18;31503:6;31451:80;:::i;:::-;31541:73;31609:3;31598:9;31594:19;31585:6;31541:73;:::i;:::-;31624;31692:3;31681:9;31677:19;31668:6;31624:73;:::i;:::-;30897:807;;;;;;;;;:::o;31710:143::-;31767:5;31798:6;31792:13;31783:22;;31814:33;31841:5;31814:33;:::i;:::-;31710:143;;;;:::o;31859:663::-;31947:6;31955;31963;32012:2;32000:9;31991:7;31987:23;31983:32;31980:119;;;32018:79;;:::i;:::-;31980:119;32138:1;32163:64;32219:7;32210:6;32199:9;32195:22;32163:64;:::i;:::-;32153:74;;32109:128;32276:2;32302:64;32358:7;32349:6;32338:9;32334:22;32302:64;:::i;:::-;32292:74;;32247:129;32415:2;32441:64;32497:7;32488:6;32477:9;32473:22;32441:64;:::i;:::-;32431:74;;32386:129;31859:663;;;;;:::o

Swarm Source

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