ETH Price: $3,387.96 (+0.92%)

Token

PEPENOMICS (PEPENOMICS)
 

Overview

Max Total Supply

100,000,000 PEPENOMICS

Holders

343

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
24,921.165896624 PEPENOMICS

Value
$0.00
0xebd01b36df9d53ba9e8501aacdf8e3a09385e2dd
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:
Pepenomics

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-05-01
*/

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

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 Pepenomics is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "PEPENOMICS";
    string private _symbol = "PEPENOMICS";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0xb770A6BF0954C474C3f67F9189c9F80Cc687900A); // Marketing Address  2%
    address payable public developmentWalletAddress = payable(0xb8686a53eb0EC8e39506660746CA9885Da2EEdCc); // 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 = 2;
    uint256 public _buyDevelopmentFee = 1;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 2;
    uint256 public _sellDevelopmentFee = 1;

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

    uint256 public _totalTaxIfBuying = 3;
    uint256 public _totalTaxIfSelling = 3;
    uint256 public _totalDistributionShares = 6;

    uint256 private _totalSupply = 100 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 3 * 10**6 * 10**9;
    uint256 public _walletMax = 3 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 550000 * 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;
        isWalletLimitExempt[address(0x71B5759d73262FBb223956913ecF4ecC51057641)] = true; //Pinksale address
        isWalletLimitExempt[address(0xD152f549545093347A162Dce210e7293f1452150)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[address(marketingWalletAddress)] = true;
        isTxLimitExempt[address(0x71B5759d73262FBb223956913ecF4ecC51057641)] = true; //Pinksale address
        isTxLimitExempt[address(0xD152f549545093347A162Dce210e7293f1452150)] = 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 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 <= 40, "Sell tax must be less than 40%");
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newDevelopmentShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _developmentShare = newDevelopmentShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_developmentShare);
        require(_totalDistributionShares <=65, "Distribution Shares must be less than 65%");
    }
    
    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":"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":[],"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"}]

60a06040526040518060400160405280600a81526020017f504550454e4f4d49435300000000000000000000000000000000000000000000815250600290816200004a91906200107a565b506040518060400160405280600a81526020017f504550454e4f4d49435300000000000000000000000000000000000000000000815250600390816200009191906200107a565b506009600460006101000a81548160ff021916908360ff16021790555073b770a6bf0954c474c3f67f9189c9f80cc687900a600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b8686a53eb0ec8e39506660746ca9885da2eedcc600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c556002600d556001600e556000600f556002601055600160115560006012556004601355600260145560036015556003601655600660175567016345785d8a0000601855660aa87bee538000601955660aa87bee538000601a556601f438daa06000601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200025457600080fd5b5060006200026762000d6c60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200036a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003909190620011cb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e9190620011cb565b6040518363ffffffff1660e01b81526004016200043d9291906200120e565b6020604051808303816000875af11580156200045d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004839190620011cb565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620005bf62000d7460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000711600e5462000702600d54600c5462000d9d60201b90919060201c565b62000d9d60201b90919060201c565b6015819055506200074660115462000737601054600f5462000d9d60201b90919060201c565b62000d9d60201b90919060201c565b6016819055506200077b6014546200076c60135460125462000d9d60201b90919060201c565b62000d9d60201b90919060201c565b6017819055506001600960006200079762000d7460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960007371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016009600073d152f549545093347a162dce210e7293f145215073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a600062000a2262000d7460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60007371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a600073d152f549545093347a162dce210e7293f145215073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546006600062000cae62000d6c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000cfc62000d6c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000d5d91906200124c565b60405180910390a35062001356565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000dae919062001298565b90508381101562000df6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ded9062001334565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e8257607f821691505b60208210810362000e985762000e9762000e3a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000f027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000ec3565b62000f0e868362000ec3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000f5b62000f5562000f4f8462000f26565b62000f30565b62000f26565b9050919050565b6000819050919050565b62000f778362000f3a565b62000f8f62000f868262000f62565b84845462000ed0565b825550505050565b600090565b62000fa662000f97565b62000fb381848462000f6c565b505050565b5b8181101562000fdb5762000fcf60008262000f9c565b60018101905062000fb9565b5050565b601f8211156200102a5762000ff48162000e9e565b62000fff8462000eb3565b810160208510156200100f578190505b620010276200101e8562000eb3565b83018262000fb8565b50505b505050565b600082821c905092915050565b60006200104f600019846008026200102f565b1980831691505092915050565b60006200106a83836200103c565b9150826002028217905092915050565b620010858262000e00565b67ffffffffffffffff811115620010a157620010a062000e0b565b5b620010ad825462000e69565b620010ba82828562000fdf565b600060209050601f831160018114620010f25760008415620010dd578287015190505b620010e985826200105c565b86555062001159565b601f198416620011028662000e9e565b60005b828110156200112c5784890151825560018201915060208501945060208101905062001105565b868310156200114c578489015162001148601f8916826200103c565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011938262001166565b9050919050565b620011a58162001186565b8114620011b157600080fd5b50565b600081519050620011c5816200119a565b92915050565b600060208284031215620011e457620011e362001161565b5b6000620011f484828501620011b4565b91505092915050565b620012088162001186565b82525050565b6000604082019050620012256000830185620011fd565b620012346020830184620011fd565b9392505050565b620012468162000f26565b82525050565b60006020820190506200126360008301846200123b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012a58262000f26565b9150620012b28362000f26565b9250828201905080821115620012cd57620012cc62001269565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200131c601b83620012d3565b91506200132982620012e4565b602082019050919050565b600060208201905081810360008301526200134f816200130d565b9050919050565b60805161473a6200137960003960008181611303015261132f015261473a6000f3fe6080604052600436106103545760003560e01c806388790a68116101c6578063c816841b116100f7578063ec28438a11610095578063f1d5f5171161006f578063f1d5f51714610c8b578063f331c7b014610cb4578063f84ba65d14610cdf578063f872858a14610d085761035b565b8063ec28438a14610c0e578063ef422a1814610c37578063f0cd1dac14610c605761035b565b8063d158272d116100d1578063d158272d14610b50578063da00097d14610b7b578063dc44b6a014610ba6578063dd62ed3e14610bd15761035b565b8063c816841b14610abd578063c860795214610ae8578063c867d60b14610b135761035b565b8063a0dd804011610164578063a9059cbb1161013e578063a9059cbb14610a03578063c2d4640e14610a40578063c49b9a8014610a69578063c5d2418914610a925761035b565b8063a0dd804014610972578063a457c2d71461099d578063a5d69d1f146109da5761035b565b8063914eb66a116101a0578063914eb66a146108da57806395d89b41146108f1578063a073d37f1461091c578063a08e671f146109475761035b565b806388790a68146108475780638b42507f146108725780638da5cb5b146108af5761035b565b806337249b65116102a057806357a5802f1161023e5780637d1db4a5116102185780637d1db4a51461079d5780637d7846ff146107c8578063807c2d9c146107f157806382eefb431461081c5761035b565b806357a5802f1461070a57806361a23c691461073557806370a08231146107605761035b565b80633ecad2711161027a5780633ecad2711461063c5780634a74bb02146106795780634cb80fd5146106a45780635342acb4146106cd5761035b565b806337249b65146105ab57806339509351146105d65780633b97084a146106135761035b565b80631870517a1161030d5780632563ae83116102e75780632563ae831461050157806327c8f8351461052a5780632b112e4914610555578063313ce567146105805761035b565b80631870517a146104725780632198cf6c1461049b57806323b872dd146104c45761035b565b806306fdde0314610360578063087332141461038b578063095ea7b3146103b45780631694505e146103f157806318160ddd1461041c578063182a4760146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d33565b6040516103829190613683565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad91906136e0565b610dc5565b005b3480156103c057600080fd5b506103db60048036038101906103d69190613791565b610eeb565b6040516103e891906137ec565b60405180910390f35b3480156103fd57600080fd5b50610406610f09565b6040516104139190613866565b60405180910390f35b34801561042857600080fd5b50610431610f2f565b60405161043e9190613890565b60405180910390f35b34801561045357600080fd5b5061045c610f39565b60405161046991906138cc565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906136e0565b610f5f565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190613913565b611085565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190613953565b611175565b6040516104f891906137ec565b60405180910390f35b34801561050d57600080fd5b50610528600480360381019061052391906139a6565b61124f565b005b34801561053657600080fd5b5061053f611301565b60405161054c91906139e2565b60405180910390f35b34801561056157600080fd5b5061056a611325565b6040516105779190613890565b60405180910390f35b34801561058c57600080fd5b50610595611369565b6040516105a29190613a19565b60405180910390f35b3480156105b757600080fd5b506105c0611380565b6040516105cd9190613890565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613791565b611386565b60405161060a91906137ec565b60405180910390f35b34801561061f57600080fd5b5061063a60048036038101906106359190613a34565b611439565b005b34801561064857600080fd5b50610663600480360381019061065e9190613a61565b61151b565b60405161067091906137ec565b60405180910390f35b34801561068557600080fd5b5061068e61153b565b60405161069b91906137ec565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613a61565b61154e565b005b3480156106d957600080fd5b506106f460048036038101906106ef9190613a61565b611627565b60405161070191906137ec565b60405180910390f35b34801561071657600080fd5b5061071f611647565b60405161072c9190613890565b60405180910390f35b34801561074157600080fd5b5061074a61164d565b6040516107579190613890565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190613a61565b611653565b6040516107949190613890565b60405180910390f35b3480156107a957600080fd5b506107b261169c565b6040516107bf9190613890565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613a61565b6116a2565b005b3480156107fd57600080fd5b5061080661177b565b6040516108139190613890565b60405180910390f35b34801561082857600080fd5b50610831611781565b60405161083e9190613890565b60405180910390f35b34801561085357600080fd5b5061085c611787565b6040516108699190613890565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613a61565b61178d565b6040516108a691906137ec565b60405180910390f35b3480156108bb57600080fd5b506108c46117ad565b6040516108d191906139e2565b60405180910390f35b3480156108e657600080fd5b506108ef6117d6565b005b3480156108fd57600080fd5b50610906611929565b6040516109139190613683565b60405180910390f35b34801561092857600080fd5b506109316119bb565b60405161093e9190613890565b60405180910390f35b34801561095357600080fd5b5061095c6119c5565b6040516109699190613890565b60405180910390f35b34801561097e57600080fd5b506109876119cb565b6040516109949190613890565b60405180910390f35b3480156109a957600080fd5b506109c460048036038101906109bf9190613791565b6119d1565b6040516109d191906137ec565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906139a6565b611a9e565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613791565b611b50565b604051610a3791906137ec565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a6291906136e0565b611b6f565b005b348015610a7557600080fd5b50610a906004803603810190610a8b91906139a6565b611c95565b005b348015610a9e57600080fd5b50610aa7611d7e565b604051610ab49190613890565b60405180910390f35b348015610ac957600080fd5b50610ad2611d84565b604051610adf91906139e2565b60405180910390f35b348015610af457600080fd5b50610afd611daa565b604051610b0a9190613890565b60405180910390f35b348015610b1f57600080fd5b50610b3a6004803603810190610b359190613a61565b611db0565b604051610b4791906137ec565b60405180910390f35b348015610b5c57600080fd5b50610b65611dd0565b604051610b7291906138cc565b60405180910390f35b348015610b8757600080fd5b50610b90611df6565b604051610b9d91906137ec565b60405180910390f35b348015610bb257600080fd5b50610bbb611e09565b604051610bc89190613890565b60405180910390f35b348015610bdd57600080fd5b50610bf86004803603810190610bf39190613a8e565b611e0f565b604051610c059190613890565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c309190613a34565b611e96565b005b348015610c4357600080fd5b50610c5e6004803603810190610c599190613913565b611f86565b005b348015610c6c57600080fd5b50610c75612076565b604051610c829190613890565b60405180910390f35b348015610c9757600080fd5b50610cb26004803603810190610cad9190613a34565b61207c565b005b348015610cc057600080fd5b50610cc961216c565b604051610cd69190613890565b60405180910390f35b348015610ceb57600080fd5b50610d066004803603810190610d019190613913565b612172565b005b348015610d1457600080fd5b50610d1d612262565b604051610d2a91906137ec565b60405180910390f35b606060028054610d4290613afd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6e90613afd565b8015610dbb5780601f10610d9057610100808354040283529160200191610dbb565b820191906000526020600020905b815481529060010190602001808311610d9e57829003601f168201915b5050505050905090565b610dcd612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613b7a565b60405180910390fd5b82600f819055508160108190555080601181905550610e9a601154610e8c601054600f5461227d90919063ffffffff16565b61227d90919063ffffffff16565b60168190555060286016541115610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd90613be6565b60405180910390fd5b505050565b6000610eff610ef8612275565b84846122db565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f67612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613b7a565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611034600e54611026600d54600c5461227d90919063ffffffff16565b61227d90919063ffffffff16565b60158190555060196015541115611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613c52565b60405180910390fd5b505050565b61108d612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613b7a565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111828484846124a4565b506112448461118f612275565b61123f856040518060600160405280602881526020016146b860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f5612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a879092919063ffffffff16565b6122db565b600190509392505050565b611257612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613b7a565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006113646113537f0000000000000000000000000000000000000000000000000000000000000000611653565b601854612aeb90919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b60115481565b600061142f611393612275565b8461142a85600760006113a4612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227d90919063ffffffff16565b6122db565b6001905092915050565b611441612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613b7a565b60405180910390fd5b60018111611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613ce4565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b611556612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90613b7a565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60125481565b60135481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b6116aa612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90613b7a565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117de612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186290613b7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606003805461193890613afd565b80601f016020809104026020016040519081016040528092919081815260200182805461196490613afd565b80156119b15780601f10611986576101008083540402835291602001916119b1565b820191906000526020600020905b81548152906001019060200180831161199457829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b60145481565b6000611a946119de612275565b84611a8f856040518060600160405280602581526020016146e06025913960076000611a08612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a879092919063ffffffff16565b6122db565b6001905092915050565b611aa6612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90613b7a565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611b64611b5d612275565b84846124a4565b506001905092915050565b611b77612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613b7a565b60405180910390fd5b826012819055508160138190555080601481905550611c44601454611c3660135460125461227d90919063ffffffff16565b61227d90919063ffffffff16565b60178190555060416017541115611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790613d76565b60405180910390fd5b505050565b611c9d612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613b7a565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611d7391906137ec565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9e612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613b7a565b60405180910390fd5b60c8601854611f3a9190613df4565b811015611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613e97565b60405180910390fd5b8060198190555050565b611f8e612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613b7a565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b612084612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890613b7a565b60405180910390fd5b60c86018546121209190613df4565b811015612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215990613f29565b60405180910390fd5b80601a8190555050565b600e5481565b61217a612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fe90613b7a565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600033905090565b600080828461228c9190613f49565b9050838110156122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890613fc9565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361234a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123419061405b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b0906140ed565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124979190613890565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250b9061417f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614211565b60405180910390fd5b601d60149054906101000a900460ff16156125aa576125a3848484612b35565b9050612a80565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561264e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561269957601954821115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906142a3565b60405180910390fd5b5b60006126a430611653565b90506000601b5482101590508080156126ca5750601d60149054906101000a900460ff16155b80156127205750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127385750601d60159054906101000a900460ff165b1561276257601d60169054906101000a900460ff161561275857601b5491505b61276182612d08565b5b6127eb846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a879092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128d15750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128e5576128e0878787612ef9565b6128e7565b845b9050601d60179054906101000a900460ff16801561294f5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561297e57601a546129728261296489611653565b61227d90919063ffffffff16565b111561297d57600080fd5b5b6129d081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227d90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a709190613890565b60405180910390a3600193505050505b9392505050565b6000838311158290612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac69190613683565b60405180910390fd5b5060008385612ade91906142c3565b9050809150509392505050565b6000612b2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a87565b905092915050565b6000612bc0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a879092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c5582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227d90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cf59190613890565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612d616002612d53601754612d456012548761312090919063ffffffff16565b61319a90919063ffffffff16565b61319a90919063ffffffff16565b90506000612d788284612aeb90919063ffffffff16565b9050612d83816131e4565b60004790506000612db4612da3600260125461319a90919063ffffffff16565b601754612aeb90919063ffffffff16565b90506000612df26002612de484612dd66012548861312090919063ffffffff16565b61319a90919063ffffffff16565b61319a90919063ffffffff16565b90506000612e1d83612e0f6014548761312090919063ffffffff16565b61319a90919063ffffffff16565b90506000612e4682612e388588612aeb90919063ffffffff16565b612aeb90919063ffffffff16565b90506000811115612e7e57612e7d600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613460565b5b6000821115612eb457612eb3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613460565b5b600083118015612ec45750600087115b15612ed457612ed387846134ab565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f8157612f7a6064612f6c6015548661312090919063ffffffff16565b61319a90919063ffffffff16565b9050612fff565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ffe57612ffb6064612fed6016548661312090919063ffffffff16565b61319a90919063ffffffff16565b90505b5b60008111156131035761305a81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227d90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130fa9190613890565b60405180910390a35b6131168184612aeb90919063ffffffff16565b9150509392505050565b60008083036131325760009050613194565b6000828461314091906142f7565b905082848261314f9190613df4565b1461318f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613186906143ab565b60405180910390fd5b809150505b92915050565b60006131dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613590565b905092915050565b6000600267ffffffffffffffff811115613201576132006143cb565b5b60405190808252806020026020018201604052801561322f5781602001602082028036833780820191505090505b5090503081600081518110613247576132466143fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613312919061443e565b81600181518110613326576133256143fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061338d30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122db565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133f1959493929190614564565b600060405180830381600087803b15801561340b57600080fd5b505af115801561341f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516134549291906145be565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156134a6573d6000803e3d6000fd5b505050565b6134d830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122db565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135246117ad565b426040518863ffffffff1660e01b8152600401613546969594939291906145ee565b60606040518083038185885af1158015613564573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135899190614664565b5050505050565b600080831182906135d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ce9190613683565b60405180910390fd5b50600083856135e69190613df4565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561362d578082015181840152602081019050613612565b60008484015250505050565b6000601f19601f8301169050919050565b6000613655826135f3565b61365f81856135fe565b935061366f81856020860161360f565b61367881613639565b840191505092915050565b6000602082019050818103600083015261369d818461364a565b905092915050565b600080fd5b6000819050919050565b6136bd816136aa565b81146136c857600080fd5b50565b6000813590506136da816136b4565b92915050565b6000806000606084860312156136f9576136f86136a5565b5b6000613707868287016136cb565b9350506020613718868287016136cb565b9250506040613729868287016136cb565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061375e82613733565b9050919050565b61376e81613753565b811461377957600080fd5b50565b60008135905061378b81613765565b92915050565b600080604083850312156137a8576137a76136a5565b5b60006137b68582860161377c565b92505060206137c7858286016136cb565b9150509250929050565b60008115159050919050565b6137e6816137d1565b82525050565b600060208201905061380160008301846137dd565b92915050565b6000819050919050565b600061382c61382761382284613733565b613807565b613733565b9050919050565b600061383e82613811565b9050919050565b600061385082613833565b9050919050565b61386081613845565b82525050565b600060208201905061387b6000830184613857565b92915050565b61388a816136aa565b82525050565b60006020820190506138a56000830184613881565b92915050565b60006138b682613733565b9050919050565b6138c6816138ab565b82525050565b60006020820190506138e160008301846138bd565b92915050565b6138f0816137d1565b81146138fb57600080fd5b50565b60008135905061390d816138e7565b92915050565b6000806040838503121561392a576139296136a5565b5b60006139388582860161377c565b9250506020613949858286016138fe565b9150509250929050565b60008060006060848603121561396c5761396b6136a5565b5b600061397a8682870161377c565b935050602061398b8682870161377c565b925050604061399c868287016136cb565b9150509250925092565b6000602082840312156139bc576139bb6136a5565b5b60006139ca848285016138fe565b91505092915050565b6139dc81613753565b82525050565b60006020820190506139f760008301846139d3565b92915050565b600060ff82169050919050565b613a13816139fd565b82525050565b6000602082019050613a2e6000830184613a0a565b92915050565b600060208284031215613a4a57613a496136a5565b5b6000613a58848285016136cb565b91505092915050565b600060208284031215613a7757613a766136a5565b5b6000613a858482850161377c565b91505092915050565b60008060408385031215613aa557613aa46136a5565b5b6000613ab38582860161377c565b9250506020613ac48582860161377c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b1557607f821691505b602082108103613b2857613b27613ace565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b646020836135fe565b9150613b6f82613b2e565b602082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e203430250000600082015250565b6000613bd0601e836135fe565b9150613bdb82613b9a565b602082019050919050565b60006020820190508181036000830152613bff81613bc3565b9050919050565b7f42757920746178206d757374206265206c657373207468616e20323525000000600082015250565b6000613c3c601d836135fe565b9150613c4782613c06565b602082019050919050565b60006020820190508181036000830152613c6b81613c2f565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f60008201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b6000613cce6023836135fe565b9150613cd982613c72565b604082019050919050565b60006020820190508181036000830152613cfd81613cc1565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c65737360008201527f207468616e203635250000000000000000000000000000000000000000000000602082015250565b6000613d606029836135fe565b9150613d6b82613d04565b604082019050919050565b60006020820190508181036000830152613d8f81613d53565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dff826136aa565b9150613e0a836136aa565b925082613e1a57613e19613d96565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f7765722074686160008201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b6000613e816026836135fe565b9150613e8c82613e25565b604082019050919050565b60006020820190508181036000830152613eb081613e74565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f136024836135fe565b9150613f1e82613eb7565b604082019050919050565b60006020820190508181036000830152613f4281613f06565b9050919050565b6000613f54826136aa565b9150613f5f836136aa565b9250828201905080821115613f7757613f76613dc5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613fb3601b836135fe565b9150613fbe82613f7d565b602082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140456024836135fe565b915061405082613fe9565b604082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140d76022836135fe565b91506140e28261407b565b604082019050919050565b60006020820190508181036000830152614106816140ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141696025836135fe565b91506141748261410d565b604082019050919050565b600060208201905081810360008301526141988161415c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141fb6023836135fe565b91506142068261419f565b604082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061428d6028836135fe565b915061429882614231565b604082019050919050565b600060208201905081810360008301526142bc81614280565b9050919050565b60006142ce826136aa565b91506142d9836136aa565b92508282039050818111156142f1576142f0613dc5565b5b92915050565b6000614302826136aa565b915061430d836136aa565b925082820261431b816136aa565b9150828204841483151761433257614331613dc5565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143956021836135fe565b91506143a082614339565b604082019050919050565b600060208201905081810360008301526143c481614388565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061443881613765565b92915050565b600060208284031215614454576144536136a5565b5b600061446284828501614429565b91505092915050565b6000819050919050565b600061449061448b6144868461446b565b613807565b6136aa565b9050919050565b6144a081614475565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144db81613753565b82525050565b60006144ed83836144d2565b60208301905092915050565b6000602082019050919050565b6000614511826144a6565b61451b81856144b1565b9350614526836144c2565b8060005b8381101561455757815161453e88826144e1565b9750614549836144f9565b92505060018101905061452a565b5085935050505092915050565b600060a0820190506145796000830188613881565b6145866020830187614497565b81810360408301526145988186614506565b90506145a760608301856139d3565b6145b46080830184613881565b9695505050505050565b60006040820190506145d36000830185613881565b81810360208301526145e58184614506565b90509392505050565b600060c08201905061460360008301896139d3565b6146106020830188613881565b61461d6040830187614497565b61462a6060830186614497565b61463760808301856139d3565b61464460a0830184613881565b979650505050505050565b60008151905061465e816136b4565b92915050565b60008060006060848603121561467d5761467c6136a5565b5b600061468b8682870161464f565b935050602061469c8682870161464f565b92505060406146ad8682870161464f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122006ee4ba0b01d142dcb646ae83203173d1cb170bd3919b45c3c1ab9bac4da09c864736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806388790a68116101c6578063c816841b116100f7578063ec28438a11610095578063f1d5f5171161006f578063f1d5f51714610c8b578063f331c7b014610cb4578063f84ba65d14610cdf578063f872858a14610d085761035b565b8063ec28438a14610c0e578063ef422a1814610c37578063f0cd1dac14610c605761035b565b8063d158272d116100d1578063d158272d14610b50578063da00097d14610b7b578063dc44b6a014610ba6578063dd62ed3e14610bd15761035b565b8063c816841b14610abd578063c860795214610ae8578063c867d60b14610b135761035b565b8063a0dd804011610164578063a9059cbb1161013e578063a9059cbb14610a03578063c2d4640e14610a40578063c49b9a8014610a69578063c5d2418914610a925761035b565b8063a0dd804014610972578063a457c2d71461099d578063a5d69d1f146109da5761035b565b8063914eb66a116101a0578063914eb66a146108da57806395d89b41146108f1578063a073d37f1461091c578063a08e671f146109475761035b565b806388790a68146108475780638b42507f146108725780638da5cb5b146108af5761035b565b806337249b65116102a057806357a5802f1161023e5780637d1db4a5116102185780637d1db4a51461079d5780637d7846ff146107c8578063807c2d9c146107f157806382eefb431461081c5761035b565b806357a5802f1461070a57806361a23c691461073557806370a08231146107605761035b565b80633ecad2711161027a5780633ecad2711461063c5780634a74bb02146106795780634cb80fd5146106a45780635342acb4146106cd5761035b565b806337249b65146105ab57806339509351146105d65780633b97084a146106135761035b565b80631870517a1161030d5780632563ae83116102e75780632563ae831461050157806327c8f8351461052a5780632b112e4914610555578063313ce567146105805761035b565b80631870517a146104725780632198cf6c1461049b57806323b872dd146104c45761035b565b806306fdde0314610360578063087332141461038b578063095ea7b3146103b45780631694505e146103f157806318160ddd1461041c578063182a4760146104475761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610d33565b6040516103829190613683565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad91906136e0565b610dc5565b005b3480156103c057600080fd5b506103db60048036038101906103d69190613791565b610eeb565b6040516103e891906137ec565b60405180910390f35b3480156103fd57600080fd5b50610406610f09565b6040516104139190613866565b60405180910390f35b34801561042857600080fd5b50610431610f2f565b60405161043e9190613890565b60405180910390f35b34801561045357600080fd5b5061045c610f39565b60405161046991906138cc565b60405180910390f35b34801561047e57600080fd5b50610499600480360381019061049491906136e0565b610f5f565b005b3480156104a757600080fd5b506104c260048036038101906104bd9190613913565b611085565b005b3480156104d057600080fd5b506104eb60048036038101906104e69190613953565b611175565b6040516104f891906137ec565b60405180910390f35b34801561050d57600080fd5b50610528600480360381019061052391906139a6565b61124f565b005b34801561053657600080fd5b5061053f611301565b60405161054c91906139e2565b60405180910390f35b34801561056157600080fd5b5061056a611325565b6040516105779190613890565b60405180910390f35b34801561058c57600080fd5b50610595611369565b6040516105a29190613a19565b60405180910390f35b3480156105b757600080fd5b506105c0611380565b6040516105cd9190613890565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f89190613791565b611386565b60405161060a91906137ec565b60405180910390f35b34801561061f57600080fd5b5061063a60048036038101906106359190613a34565b611439565b005b34801561064857600080fd5b50610663600480360381019061065e9190613a61565b61151b565b60405161067091906137ec565b60405180910390f35b34801561068557600080fd5b5061068e61153b565b60405161069b91906137ec565b60405180910390f35b3480156106b057600080fd5b506106cb60048036038101906106c69190613a61565b61154e565b005b3480156106d957600080fd5b506106f460048036038101906106ef9190613a61565b611627565b60405161070191906137ec565b60405180910390f35b34801561071657600080fd5b5061071f611647565b60405161072c9190613890565b60405180910390f35b34801561074157600080fd5b5061074a61164d565b6040516107579190613890565b60405180910390f35b34801561076c57600080fd5b5061078760048036038101906107829190613a61565b611653565b6040516107949190613890565b60405180910390f35b3480156107a957600080fd5b506107b261169c565b6040516107bf9190613890565b60405180910390f35b3480156107d457600080fd5b506107ef60048036038101906107ea9190613a61565b6116a2565b005b3480156107fd57600080fd5b5061080661177b565b6040516108139190613890565b60405180910390f35b34801561082857600080fd5b50610831611781565b60405161083e9190613890565b60405180910390f35b34801561085357600080fd5b5061085c611787565b6040516108699190613890565b60405180910390f35b34801561087e57600080fd5b5061089960048036038101906108949190613a61565b61178d565b6040516108a691906137ec565b60405180910390f35b3480156108bb57600080fd5b506108c46117ad565b6040516108d191906139e2565b60405180910390f35b3480156108e657600080fd5b506108ef6117d6565b005b3480156108fd57600080fd5b50610906611929565b6040516109139190613683565b60405180910390f35b34801561092857600080fd5b506109316119bb565b60405161093e9190613890565b60405180910390f35b34801561095357600080fd5b5061095c6119c5565b6040516109699190613890565b60405180910390f35b34801561097e57600080fd5b506109876119cb565b6040516109949190613890565b60405180910390f35b3480156109a957600080fd5b506109c460048036038101906109bf9190613791565b6119d1565b6040516109d191906137ec565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906139a6565b611a9e565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613791565b611b50565b604051610a3791906137ec565b60405180910390f35b348015610a4c57600080fd5b50610a676004803603810190610a6291906136e0565b611b6f565b005b348015610a7557600080fd5b50610a906004803603810190610a8b91906139a6565b611c95565b005b348015610a9e57600080fd5b50610aa7611d7e565b604051610ab49190613890565b60405180910390f35b348015610ac957600080fd5b50610ad2611d84565b604051610adf91906139e2565b60405180910390f35b348015610af457600080fd5b50610afd611daa565b604051610b0a9190613890565b60405180910390f35b348015610b1f57600080fd5b50610b3a6004803603810190610b359190613a61565b611db0565b604051610b4791906137ec565b60405180910390f35b348015610b5c57600080fd5b50610b65611dd0565b604051610b7291906138cc565b60405180910390f35b348015610b8757600080fd5b50610b90611df6565b604051610b9d91906137ec565b60405180910390f35b348015610bb257600080fd5b50610bbb611e09565b604051610bc89190613890565b60405180910390f35b348015610bdd57600080fd5b50610bf86004803603810190610bf39190613a8e565b611e0f565b604051610c059190613890565b60405180910390f35b348015610c1a57600080fd5b50610c356004803603810190610c309190613a34565b611e96565b005b348015610c4357600080fd5b50610c5e6004803603810190610c599190613913565b611f86565b005b348015610c6c57600080fd5b50610c75612076565b604051610c829190613890565b60405180910390f35b348015610c9757600080fd5b50610cb26004803603810190610cad9190613a34565b61207c565b005b348015610cc057600080fd5b50610cc961216c565b604051610cd69190613890565b60405180910390f35b348015610ceb57600080fd5b50610d066004803603810190610d019190613913565b612172565b005b348015610d1457600080fd5b50610d1d612262565b604051610d2a91906137ec565b60405180910390f35b606060028054610d4290613afd565b80601f0160208091040260200160405190810160405280929190818152602001828054610d6e90613afd565b8015610dbb5780601f10610d9057610100808354040283529160200191610dbb565b820191906000526020600020905b815481529060010190602001808311610d9e57829003601f168201915b5050505050905090565b610dcd612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5190613b7a565b60405180910390fd5b82600f819055508160108190555080601181905550610e9a601154610e8c601054600f5461227d90919063ffffffff16565b61227d90919063ffffffff16565b60168190555060286016541115610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd90613be6565b60405180910390fd5b505050565b6000610eff610ef8612275565b84846122db565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f67612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613b7a565b60405180910390fd5b82600c8190555081600d8190555080600e81905550611034600e54611026600d54600c5461227d90919063ffffffff16565b61227d90919063ffffffff16565b60158190555060196015541115611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613c52565b60405180910390fd5b505050565b61108d612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190613b7a565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006111828484846124a4565b506112448461118f612275565b61123f856040518060600160405280602881526020016146b860289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111f5612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a879092919063ffffffff16565b6122db565b600190509392505050565b611257612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90613b7a565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006113646113537f000000000000000000000000000000000000000000000000000000000000dead611653565b601854612aeb90919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b60115481565b600061142f611393612275565b8461142a85600760006113a4612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227d90919063ffffffff16565b6122db565b6001905092915050565b611441612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590613b7a565b60405180910390fd5b60018111611511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150890613ce4565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b611556612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90613b7a565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60125481565b60135481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b6116aa612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e90613b7a565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117de612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461186b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186290613b7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606003805461193890613afd565b80601f016020809104026020016040519081016040528092919081815260200182805461196490613afd565b80156119b15780601f10611986576101008083540402835291602001916119b1565b820191906000526020600020905b81548152906001019060200180831161199457829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b60145481565b6000611a946119de612275565b84611a8f856040518060600160405280602581526020016146e06025913960076000611a08612275565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a879092919063ffffffff16565b6122db565b6001905092915050565b611aa6612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2a90613b7a565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611b64611b5d612275565b84846124a4565b506001905092915050565b611b77612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfb90613b7a565b60405180910390fd5b826012819055508160138190555080601481905550611c44601454611c3660135460125461227d90919063ffffffff16565b61227d90919063ffffffff16565b60178190555060416017541115611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790613d76565b60405180910390fd5b505050565b611c9d612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613b7a565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611d7391906137ec565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e9e612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613b7a565b60405180910390fd5b60c8601854611f3a9190613df4565b811015611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390613e97565b60405180910390fd5b8060198190555050565b611f8e612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613b7a565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b612084612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890613b7a565b60405180910390fd5b60c86018546121209190613df4565b811015612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215990613f29565b60405180910390fd5b80601a8190555050565b600e5481565b61217a612275565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fe90613b7a565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600033905090565b600080828461228c9190613f49565b9050838110156122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890613fc9565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361234a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123419061405b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b0906140ed565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124979190613890565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612514576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250b9061417f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257a90614211565b60405180910390fd5b601d60149054906101000a900460ff16156125aa576125a3848484612b35565b9050612a80565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561264e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561269957601954821115612698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268f906142a3565b60405180910390fd5b5b60006126a430611653565b90506000601b5482101590508080156126ca5750601d60149054906101000a900460ff16155b80156127205750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127385750601d60159054906101000a900460ff165b1561276257601d60169054906101000a900460ff161561275857601b5491505b61276182612d08565b5b6127eb846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a879092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128d15750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128e5576128e0878787612ef9565b6128e7565b845b9050601d60179054906101000a900460ff16801561294f5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561297e57601a546129728261296489611653565b61227d90919063ffffffff16565b111561297d57600080fd5b5b6129d081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227d90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a709190613890565b60405180910390a3600193505050505b9392505050565b6000838311158290612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac69190613683565b60405180910390fd5b5060008385612ade91906142c3565b9050809150509392505050565b6000612b2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a87565b905092915050565b6000612bc0826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a879092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c5582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227d90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cf59190613890565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612d616002612d53601754612d456012548761312090919063ffffffff16565b61319a90919063ffffffff16565b61319a90919063ffffffff16565b90506000612d788284612aeb90919063ffffffff16565b9050612d83816131e4565b60004790506000612db4612da3600260125461319a90919063ffffffff16565b601754612aeb90919063ffffffff16565b90506000612df26002612de484612dd66012548861312090919063ffffffff16565b61319a90919063ffffffff16565b61319a90919063ffffffff16565b90506000612e1d83612e0f6014548761312090919063ffffffff16565b61319a90919063ffffffff16565b90506000612e4682612e388588612aeb90919063ffffffff16565b612aeb90919063ffffffff16565b90506000811115612e7e57612e7d600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613460565b5b6000821115612eb457612eb3600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613460565b5b600083118015612ec45750600087115b15612ed457612ed387846134ab565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f8157612f7a6064612f6c6015548661312090919063ffffffff16565b61319a90919063ffffffff16565b9050612fff565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ffe57612ffb6064612fed6016548661312090919063ffffffff16565b61319a90919063ffffffff16565b90505b5b60008111156131035761305a81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461227d90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130fa9190613890565b60405180910390a35b6131168184612aeb90919063ffffffff16565b9150509392505050565b60008083036131325760009050613194565b6000828461314091906142f7565b905082848261314f9190613df4565b1461318f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613186906143ab565b60405180910390fd5b809150505b92915050565b60006131dc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613590565b905092915050565b6000600267ffffffffffffffff811115613201576132006143cb565b5b60405190808252806020026020018201604052801561322f5781602001602082028036833780820191505090505b5090503081600081518110613247576132466143fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613312919061443e565b81600181518110613326576133256143fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061338d30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122db565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133f1959493929190614564565b600060405180830381600087803b15801561340b57600080fd5b505af115801561341f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516134549291906145be565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156134a6573d6000803e3d6000fd5b505050565b6134d830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846122db565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806135246117ad565b426040518863ffffffff1660e01b8152600401613546969594939291906145ee565b60606040518083038185885af1158015613564573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135899190614664565b5050505050565b600080831182906135d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ce9190613683565b60405180910390fd5b50600083856135e69190613df4565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561362d578082015181840152602081019050613612565b60008484015250505050565b6000601f19601f8301169050919050565b6000613655826135f3565b61365f81856135fe565b935061366f81856020860161360f565b61367881613639565b840191505092915050565b6000602082019050818103600083015261369d818461364a565b905092915050565b600080fd5b6000819050919050565b6136bd816136aa565b81146136c857600080fd5b50565b6000813590506136da816136b4565b92915050565b6000806000606084860312156136f9576136f86136a5565b5b6000613707868287016136cb565b9350506020613718868287016136cb565b9250506040613729868287016136cb565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061375e82613733565b9050919050565b61376e81613753565b811461377957600080fd5b50565b60008135905061378b81613765565b92915050565b600080604083850312156137a8576137a76136a5565b5b60006137b68582860161377c565b92505060206137c7858286016136cb565b9150509250929050565b60008115159050919050565b6137e6816137d1565b82525050565b600060208201905061380160008301846137dd565b92915050565b6000819050919050565b600061382c61382761382284613733565b613807565b613733565b9050919050565b600061383e82613811565b9050919050565b600061385082613833565b9050919050565b61386081613845565b82525050565b600060208201905061387b6000830184613857565b92915050565b61388a816136aa565b82525050565b60006020820190506138a56000830184613881565b92915050565b60006138b682613733565b9050919050565b6138c6816138ab565b82525050565b60006020820190506138e160008301846138bd565b92915050565b6138f0816137d1565b81146138fb57600080fd5b50565b60008135905061390d816138e7565b92915050565b6000806040838503121561392a576139296136a5565b5b60006139388582860161377c565b9250506020613949858286016138fe565b9150509250929050565b60008060006060848603121561396c5761396b6136a5565b5b600061397a8682870161377c565b935050602061398b8682870161377c565b925050604061399c868287016136cb565b9150509250925092565b6000602082840312156139bc576139bb6136a5565b5b60006139ca848285016138fe565b91505092915050565b6139dc81613753565b82525050565b60006020820190506139f760008301846139d3565b92915050565b600060ff82169050919050565b613a13816139fd565b82525050565b6000602082019050613a2e6000830184613a0a565b92915050565b600060208284031215613a4a57613a496136a5565b5b6000613a58848285016136cb565b91505092915050565b600060208284031215613a7757613a766136a5565b5b6000613a858482850161377c565b91505092915050565b60008060408385031215613aa557613aa46136a5565b5b6000613ab38582860161377c565b9250506020613ac48582860161377c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b1557607f821691505b602082108103613b2857613b27613ace565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b646020836135fe565b9150613b6f82613b2e565b602082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e203430250000600082015250565b6000613bd0601e836135fe565b9150613bdb82613b9a565b602082019050919050565b60006020820190508181036000830152613bff81613bc3565b9050919050565b7f42757920746178206d757374206265206c657373207468616e20323525000000600082015250565b6000613c3c601d836135fe565b9150613c4782613c06565b602082019050919050565b60006020820190508181036000830152613c6b81613c2f565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f60008201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b6000613cce6023836135fe565b9150613cd982613c72565b604082019050919050565b60006020820190508181036000830152613cfd81613cc1565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c65737360008201527f207468616e203635250000000000000000000000000000000000000000000000602082015250565b6000613d606029836135fe565b9150613d6b82613d04565b604082019050919050565b60006020820190508181036000830152613d8f81613d53565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613dff826136aa565b9150613e0a836136aa565b925082613e1a57613e19613d96565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f7765722074686160008201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b6000613e816026836135fe565b9150613e8c82613e25565b604082019050919050565b60006020820190508181036000830152613eb081613e74565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613f136024836135fe565b9150613f1e82613eb7565b604082019050919050565b60006020820190508181036000830152613f4281613f06565b9050919050565b6000613f54826136aa565b9150613f5f836136aa565b9250828201905080821115613f7757613f76613dc5565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613fb3601b836135fe565b9150613fbe82613f7d565b602082019050919050565b60006020820190508181036000830152613fe281613fa6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140456024836135fe565b915061405082613fe9565b604082019050919050565b6000602082019050818103600083015261407481614038565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006140d76022836135fe565b91506140e28261407b565b604082019050919050565b60006020820190508181036000830152614106816140ca565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006141696025836135fe565b91506141748261410d565b604082019050919050565b600060208201905081810360008301526141988161415c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006141fb6023836135fe565b91506142068261419f565b604082019050919050565b6000602082019050818103600083015261422a816141ee565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061428d6028836135fe565b915061429882614231565b604082019050919050565b600060208201905081810360008301526142bc81614280565b9050919050565b60006142ce826136aa565b91506142d9836136aa565b92508282039050818111156142f1576142f0613dc5565b5b92915050565b6000614302826136aa565b915061430d836136aa565b925082820261431b816136aa565b9150828204841483151761433257614331613dc5565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006143956021836135fe565b91506143a082614339565b604082019050919050565b600060208201905081810360008301526143c481614388565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061443881613765565b92915050565b600060208284031215614454576144536136a5565b5b600061446284828501614429565b91505092915050565b6000819050919050565b600061449061448b6144868461446b565b613807565b6136aa565b9050919050565b6144a081614475565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144db81613753565b82525050565b60006144ed83836144d2565b60208301905092915050565b6000602082019050919050565b6000614511826144a6565b61451b81856144b1565b9350614526836144c2565b8060005b8381101561455757815161453e88826144e1565b9750614549836144f9565b92505060018101905061452a565b5085935050505092915050565b600060a0820190506145796000830188613881565b6145866020830187614497565b81810360408301526145988186614506565b90506145a760608301856139d3565b6145b46080830184613881565b9695505050505050565b60006040820190506145d36000830185613881565b81810360208301526145e58184614506565b90509392505050565b600060c08201905061460360008301896139d3565b6146106020830188613881565b61461d6040830187614497565b61462a6060830186614497565b61463760808301856139d3565b61464460a0830184613881565b979650505050505050565b60008151905061465e816136b4565b92915050565b60008060006060848603121561467d5761467c6136a5565b5b600061468b8682870161464f565b935050602061469c8682870161464f565b92505060406146ad8682870161464f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122006ee4ba0b01d142dcb646ae83203173d1cb170bd3919b45c3c1ab9bac4da09c864736f6c63430008130033

Deployed Bytecode Sourcemap

13982:15143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18303:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20838:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19597:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15711:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18580:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14367:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20393:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22124:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23823:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22003:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14509:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23284:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18489:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15169:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18966:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22467:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14901:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15826:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22670:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14730:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15216:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15257;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18688:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15539:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22817:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15593:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15386:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15083:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14846:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5773:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5998:145;;;;;;;;;;;;;:::i;:::-;;18394:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19469:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15430:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15298:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19192:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23147:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23648:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21297:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22968:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14997:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15759:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15126:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14787:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14236:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15873:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14955:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18815:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21789:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20250:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15343:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22267:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15039:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20111:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15925:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18303:83;18340:13;18373:5;18366:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18303:83;:::o;20838:447::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20989:15:::1;20969:17;:35;;;;21035:15;21015:17;:35;;;;21083:17;21061:19;:39;;;;21134:65;21179:19;;21134:40;21156:17;;21134;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;21113:18;:86;;;;21240:2;21218:18;;:24;;21210:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20838:447:::0;;;:::o;19597:161::-;19672:4;19689:39;19698:12;:10;:12::i;:::-;19712:7;19721:6;19689:8;:39::i;:::-;19746:4;19739:11;;19597:161;;;;:::o;15711:41::-;;;;;;;;;;;;;:::o;18580:100::-;18633:7;18660:12;;18653:19;;18580:100;:::o;14367:101::-;;;;;;;;;;;;;:::o;20393:437::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20542:15:::1;20523:16;:34;;;;20587:15;20568:16;:34;;;;20634:17;20613:18;:38;;;;20684:62;20727:18;;20684:38;20705:16;;20684;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;20664:17;:82;;;;20786:2;20765:17;;:23;;20757:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20393:437:::0;;;:::o;22124:135::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22245:6:::1;22215:19;:27;22235:6;22215:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22124:135:::0;;:::o;23823:313::-;23921:4;23938:36;23948:6;23956:9;23967:6;23938:9;:36::i;:::-;;23985:121;23994:6;24002:12;:10;:12::i;:::-;24016:89;24054:6;24016:89;;;;;;;;;;;;;;;;;:11;:19;24028:6;24016:19;;;;;;;;;;;;;;;:33;24036:12;:10;:12::i;:::-;24016:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23985:8;:121::i;:::-;24124:4;24117:11;;23823:313;;;;;:::o;22003:113::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22100:8:::1;22081:16;;:27;;;;;;;;;;;;;;;;;;22003:113:::0;:::o;14509:81::-;;;:::o;23284:128::-;23337:7;23364:40;23381:22;23391:11;23381:9;:22::i;:::-;23364:12;;:16;;:40;;;;:::i;:::-;23357:47;;23284:128;:::o;18489:83::-;18530:5;18555:9;;;;;;;;;;;18548:16;;18489:83;:::o;15169:38::-;;;;:::o;18966:218::-;19054:4;19071:83;19080:12;:10;:12::i;:::-;19094:7;19103:50;19142:10;19103:11;:25;19115:12;:10;:12::i;:::-;19103:25;;;;;;;;;;;;;;;:34;19129:7;19103:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19071:8;:83::i;:::-;19172:4;19165:11;;18966:218;;;;:::o;22467:195::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22568:1:::1;22557:8;:12;22549:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22646:8;22620:23;:34;;;;22467:195:::0;:::o;14901:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15826:40::-;;;;;;;;;;;;;:::o;22670:139::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22790:10:::1;22757:22;;:44;;;;;;;;;;;;;;;;;;22670:139:::0;:::o;14730:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15216:34::-;;;;:::o;15257:::-;;;;:::o;18688:119::-;18754:7;18781:9;:18;18791:7;18781:18;;;;;;;;;;;;;;;;18774:25;;18688:119;;;:::o;15539:47::-;;;;:::o;22817:143::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22941:10:::1;22906:24;;:46;;;;;;;;;;;;;;;;;;22817:143:::0;:::o;15593:45::-;;;;:::o;15386:37::-;;;;:::o;15083:36::-;;;;:::o;14846:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5773:79::-;5811:7;5838:6;;;;;;;;;;;5831:13;;5773:79;:::o;5998:145::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6102:1:::1;6065:40;;6086:6;::::0;::::1;;;;;;;;6065:40;;;;;;;;;;;;6133:1;6116:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5998:145::o:0;18394:87::-;18433:13;18466:7;18459:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18394:87;:::o;19469:120::-;19531:7;19558:23;;19551:30;;19469:120;:::o;15430:43::-;;;;:::o;15298:36::-;;;;:::o;19192:269::-;19285:4;19302:129;19311:12;:10;:12::i;:::-;19325:7;19334:96;19373:15;19334:96;;;;;;;;;;;;;;;;;:11;:25;19346:12;:10;:12::i;:::-;19334:25;;;;;;;;;;;;;;;:34;19360:7;19334:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19302:8;:129::i;:::-;19449:4;19442:11;;19192:269;;;;:::o;23147:125::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23256:8:::1;23228:25;;:36;;;;;;;;;;;;;;;;;;23147:125:::0;:::o;23648:167::-;23726:4;23743:42;23753:12;:10;:12::i;:::-;23767:9;23778:6;23743:9;:42::i;:::-;;23803:4;23796:11;;23648:167;;;;:::o;21297:480::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21463:17:::1;21445:15;:35;;;;21509:17;21491:15;:35;;;;21557:19;21537:17;:39;;;;21616:59;21657:17;;21616:36;21636:15;;21616;;:19;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;21589:24;:86;;;;21721:2;21694:24;;:29;;21686:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21297:480:::0;;;:::o;22968:171::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23069:8:::1;23045:21;;:32;;;;;;;;;;;;;;;;;;23093:38;23122:8;23093:38;;;;;;:::i;:::-;;;;;;;;22968:171:::0;:::o;14997:35::-;;;;:::o;15759:26::-;;;;;;;;;;;;;:::o;15126:36::-;;;;:::o;14787:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14236:99::-;;;;;;;;;;;;;:::o;15873:45::-;;;;;;;;;;;;;:::o;14955:35::-;;;;:::o;18815:143::-;18896:7;18923:11;:18;18935:5;18923:18;;;;;;;;;;;;;;;:27;18942:7;18923:27;;;;;;;;;;;;;;;;18916:34;;18815:143;;;;:::o;21789:206::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21904:3:::1;21889:12;;:18;;;;:::i;:::-;21874:11;:33;;21866:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;21976:11;21961:12;:26;;;;21789:206:::0;:::o;20250:135::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20369:8:::1;20340:17;:26;20358:7;20340:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20250:135:::0;;:::o;15343:36::-;;;;:::o;22267:192::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22374:3:::1;22359:12;;:18;;;;:::i;:::-;22347:8;:30;;22339:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22443:8;22429:10;:22;;;;22267:192:::0;:::o;15039:37::-;;;;:::o;20111:127::-;5917:12;:10;:12::i;:::-;5907:22;;:6;;;;;;;;;;:22;;;5899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20224:6:::1;20198:15;:23;20214:6;20198:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20111:127:::0;;:::o;15925:35::-;;;;;;;;;;;;;:::o;107:115::-;160:15;203:10;188:26;;107:115;:::o;1175:181::-;1233:7;1253:9;1269:1;1265;:5;;;;:::i;:::-;1253:17;;1294:1;1289;:6;;1281:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1347:1;1340:8;;;1175:181;;;;:::o;19766:337::-;19876:1;19859:19;;:5;:19;;;19851:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19957:1;19938:21;;:7;:21;;;19930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20041:6;20011:11;:18;20023:5;20011:18;;;;;;;;;;;;;;;:27;20030:7;20011:27;;;;;;;;;;;;;;;:36;;;;20079:7;20063:32;;20072:5;20063:32;;;20088:6;20063:32;;;;;;:::i;:::-;;;;;;;;19766:337;;;:::o;24144:1707::-;24231:4;24276:1;24258:20;;:6;:20;;;24250:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24360:1;24339:23;;:9;:23;;;24331:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24418:16;;;;;;;;;;;24415:1429;;;24468:41;24483:6;24491:9;24502:6;24468:14;:41::i;:::-;24461:48;;;;24415:1429;24565:15;:23;24581:6;24565:23;;;;;;;;;;;;;;;;;;;;;;;;;24564:24;:55;;;;;24593:15;:26;24609:9;24593:26;;;;;;;;;;;;;;;;;;;;;;;;;24592:27;24564:55;24561:170;;;24658:12;;24648:6;:22;;24640:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24561:170;24759:28;24790:24;24808:4;24790:9;:24::i;:::-;24759:55;;24829:28;24884:23;;24860:20;:47;;24829:78;;24940:23;:44;;;;;24968:16;;;;;;;;;;;24967:17;24940:44;:69;;;;;24989:12;:20;25002:6;24989:20;;;;;;;;;;;;;;;;;;;;;;;;;24988:21;24940:69;:94;;;;;25013:21;;;;;;;;;;;24940:94;24936:305;;;25072:25;;;;;;;;;;;25069:97;;;25143:23;;25120:46;;25069:97;25185:36;25200:20;25185:14;:36::i;:::-;24936:305;25277:53;25299:6;25277:53;;;;;;;;;;;;;;;;;:9;:17;25287:6;25277:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25257:9;:17;25267:6;25257:17;;;;;;;;;;;;;;;:73;;;;25347:19;25370:17;:25;25388:6;25370:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;25399:17;:28;25417:9;25399:28;;;;;;;;;;;;;;;;;;;;;;;;;25370:57;25369:148;;25483:34;25491:6;25499:9;25510:6;25483:7;:34::i;:::-;25369:148;;;25474:6;25369:148;25347:170;;25537:16;;;;;;;;;;;:51;;;;;25558:19;:30;25578:9;25558:30;;;;;;;;;;;;;;;;;;;;;;;;;25557:31;25537:51;25534:133;;;25656:10;;25615:37;25640:11;25615:20;25625:9;25615;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25607:60;;;;;;25534:133;25707:37;25732:11;25707:9;:20;25717:9;25707:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25684:9;:20;25694:9;25684:20;;;;;;;;;;;;;;;:60;;;;25783:9;25766:40;;25775:6;25766:40;;;25794:11;25766:40;;;;;;:::i;:::-;;;;;;;;25828:4;25821:11;;;;;24144:1707;;;;;;:::o;1508:192::-;1594:7;1627:1;1622;:6;;1630:12;1614:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1654:9;1670:1;1666;:5;;;;:::i;:::-;1654:17;;1691:1;1684:8;;;1508:192;;;;;:::o;1364:136::-;1422:7;1449:43;1453:1;1456;1449:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1442:50;;1364:136;;;;:::o;25859:330::-;25952:4;25989:53;26011:6;25989:53;;;;;;;;;;;;;;;;;:9;:17;25999:6;25989:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25969:9;:17;25979:6;25969:17;;;;;;;;;;;;;;;:73;;;;26076:32;26101:6;26076:9;:20;26086:9;26076:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26053:9;:20;26063:9;26053:20;;;;;;;;;;;;;;;:55;;;;26141:9;26124:35;;26133:6;26124:35;;;26152:6;26124:35;;;;;;:::i;:::-;;;;;;;;26177:4;26170:11;;25859:330;;;;;:::o;26197:1090::-;16402:4;16383:16;;:23;;;;;;;;;;;;;;;;;;26279:19:::1;26301:65;26364:1;26301:58;26334:24;;26301:28;26313:15;;26301:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;26279:87;;26377:21;26401:24;26413:11;26401:7;:11;;:24;;;;:::i;:::-;26377:48;;26438:31;26455:13;26438:16;:31::i;:::-;26480:22;26505:21;26480:46;;26539:19;26561:52;26590:22;26610:1;26590:15;;:19;;:22;;;;:::i;:::-;26561:24;;:28;;:52;;;;:::i;:::-;26539:74;;26634:26;26663:59;26720:1;26663:52;26703:11;26663:35;26682:15;;26663:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;26634:88;;26733:28;26764:54;26806:11;26764:37;26783:17;;26764:14;:18;;:37;;;;:::i;:::-;:41;;:54;;;;:::i;:::-;26733:85;;26829:26;26858:64;26901:20;26858:38;26877:18;26858:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;26829:93;;26959:1;26938:18;:22;26935:104;;;26975:64;26996:22;;;;;;;;;;;27020:18;26975:20;:64::i;:::-;26935:104;27078:1;27055:20;:24;27052:110;;;27094:68;27115:24;;;;;;;;;;;27141:20;27094;:68::i;:::-;27052:110;27199:1;27178:18;:22;:41;;;;;27218:1;27204:11;:15;27178:41;27175:104;;;27234:45;27247:11;27260:18;27234:12;:45::i;:::-;27175:104;26258:1029;;;;;;;16448:5:::0;16429:16;;:24;;;;;;;;;;;;;;;;;;26197:1090;:::o;28494:622::-;28580:7;28610:17;28630:1;28610:21;;28655:12;:20;28668:6;28655:20;;;;;;;;;;;;;;;;;;;;;;;;;28652:223;;;28704:38;28738:3;28704:29;28715:17;;28704:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28692:50;;28652:223;;;28772:12;:23;28785:9;28772:23;;;;;;;;;;;;;;;;;;;;;;;;;28769:106;;;28824:39;28859:3;28824:30;28835:18;;28824:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;28812:51;;28769:106;28652:223;28910:1;28898:9;:13;28895:173;;;28955:39;28984:9;28955;:24;28973:4;28955:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28928:9;:24;28946:4;28928:24;;;;;;;;;;;;;;;:66;;;;29039:4;29014:42;;29023:6;29014:42;;;29046:9;29014:42;;;;;;:::i;:::-;;;;;;;;28895:173;29087:21;29098:9;29087:6;:10;;:21;;;;:::i;:::-;29080:28;;;28494:622;;;;;:::o;1708:250::-;1766:7;1795:1;1790;:6;1786:47;;1820:1;1813:8;;;;1786:47;1845:9;1861:1;1857;:5;;;;:::i;:::-;1845:17;;1890:1;1885;1881;:5;;;;:::i;:::-;:10;1873:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1949:1;1942:8;;;1708:250;;;;;:::o;1966:132::-;2024:7;2051:39;2055:1;2058;2051:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2044:46;;1966:132;;;;:::o;27299:666::-;27425:21;27463:1;27449:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27425:40;;27494:4;27476;27481:1;27476:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27520:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27510:4;27515:1;27510:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27555:62;27572:4;27587:15;;;;;;;;;;;27605:11;27555:8;:62::i;:::-;27656:15;;;;;;;;;;;:66;;;27737:11;27763:1;27807:4;27834;27870:15;27656:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27922:35;27939:11;27952:4;27922:35;;;;;;;:::i;:::-;;;;;;;;27354:611;27299:666;:::o;23420:126::-;23512:9;:18;;:26;23531:6;23512:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23420:126;;:::o;27973:513::-;28121:62;28138:4;28153:15;;;;;;;;;;;28171:11;28121:8;:62::i;:::-;28226:15;;;;;;;;;;;:31;;;28265:9;28298:4;28318:11;28344:1;28387;28430:7;:5;:7::i;:::-;28452:15;28226:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27973:513;;:::o;2106:278::-;2192:7;2224:1;2220;:5;2227:12;2212:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2251:9;2267:1;2263;:5;;;;:::i;:::-;2251:17;;2375:1;2368:8;;;2106: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:191::-;17715:3;17734:20;17752:1;17734:20;:::i;:::-;17729:25;;17768:20;17786:1;17768:20;:::i;:::-;17763:25;;17811:1;17808;17804:9;17797:16;;17832:3;17829:1;17826:10;17823:36;;;17839:18;;:::i;:::-;17823:36;17675:191;;;;:::o;17872:177::-;18012:29;18008:1;18000:6;17996:14;17989:53;17872:177;:::o;18055:366::-;18197:3;18218:67;18282:2;18277:3;18218:67;:::i;:::-;18211:74;;18294:93;18383:3;18294:93;:::i;:::-;18412:2;18407:3;18403:12;18396:19;;18055:366;;;:::o;18427:419::-;18593:4;18631:2;18620:9;18616:18;18608:26;;18680:9;18674:4;18670:20;18666:1;18655:9;18651:17;18644:47;18708:131;18834:4;18708:131;:::i;:::-;18700:139;;18427:419;;;:::o;18852:223::-;18992:34;18988:1;18980:6;18976:14;18969:58;19061:6;19056:2;19048:6;19044:15;19037:31;18852:223;:::o;19081:366::-;19223:3;19244:67;19308:2;19303:3;19244:67;:::i;:::-;19237:74;;19320:93;19409:3;19320:93;:::i;:::-;19438:2;19433:3;19429:12;19422:19;;19081:366;;;:::o;19453:419::-;19619:4;19657:2;19646:9;19642:18;19634:26;;19706:9;19700:4;19696:20;19692:1;19681:9;19677:17;19670:47;19734:131;19860:4;19734:131;:::i;:::-;19726:139;;19453:419;;;:::o;19878:221::-;20018:34;20014:1;20006:6;20002:14;19995:58;20087:4;20082:2;20074:6;20070:15;20063:29;19878:221;:::o;20105:366::-;20247:3;20268:67;20332:2;20327:3;20268:67;:::i;:::-;20261:74;;20344:93;20433:3;20344:93;:::i;:::-;20462:2;20457:3;20453:12;20446:19;;20105:366;;;:::o;20477:419::-;20643:4;20681:2;20670:9;20666:18;20658:26;;20730:9;20724:4;20720:20;20716:1;20705:9;20701:17;20694:47;20758:131;20884:4;20758:131;:::i;:::-;20750:139;;20477:419;;;:::o;20902:224::-;21042:34;21038:1;21030:6;21026:14;21019:58;21111:7;21106:2;21098:6;21094:15;21087:32;20902:224;:::o;21132:366::-;21274:3;21295:67;21359:2;21354:3;21295:67;:::i;:::-;21288:74;;21371:93;21460:3;21371:93;:::i;:::-;21489:2;21484:3;21480:12;21473:19;;21132:366;;;:::o;21504:419::-;21670:4;21708:2;21697:9;21693:18;21685:26;;21757:9;21751:4;21747:20;21743:1;21732:9;21728:17;21721:47;21785:131;21911:4;21785:131;:::i;:::-;21777:139;;21504:419;;;:::o;21929:222::-;22069:34;22065:1;22057:6;22053:14;22046:58;22138:5;22133:2;22125:6;22121:15;22114:30;21929:222;:::o;22157:366::-;22299:3;22320:67;22384:2;22379:3;22320:67;:::i;:::-;22313:74;;22396:93;22485:3;22396:93;:::i;:::-;22514:2;22509:3;22505:12;22498:19;;22157:366;;;:::o;22529:419::-;22695:4;22733:2;22722:9;22718:18;22710:26;;22782:9;22776:4;22772:20;22768:1;22757:9;22753:17;22746:47;22810:131;22936:4;22810:131;:::i;:::-;22802:139;;22529:419;;;:::o;22954:227::-;23094:34;23090:1;23082:6;23078:14;23071:58;23163:10;23158:2;23150:6;23146:15;23139:35;22954:227;:::o;23187:366::-;23329:3;23350:67;23414:2;23409:3;23350:67;:::i;:::-;23343:74;;23426:93;23515:3;23426:93;:::i;:::-;23544:2;23539:3;23535:12;23528:19;;23187:366;;;:::o;23559:419::-;23725:4;23763:2;23752:9;23748:18;23740:26;;23812:9;23806:4;23802:20;23798:1;23787:9;23783:17;23776:47;23840:131;23966:4;23840:131;:::i;:::-;23832:139;;23559:419;;;:::o;23984:194::-;24024:4;24044:20;24062:1;24044:20;:::i;:::-;24039:25;;24078:20;24096:1;24078:20;:::i;:::-;24073:25;;24122:1;24119;24115:9;24107:17;;24146:1;24140:4;24137:11;24134:37;;;24151:18;;:::i;:::-;24134:37;23984:194;;;;:::o;24184:410::-;24224:7;24247:20;24265:1;24247:20;:::i;:::-;24242:25;;24281:20;24299:1;24281:20;:::i;:::-;24276:25;;24336:1;24333;24329:9;24358:30;24376:11;24358:30;:::i;:::-;24347:41;;24537:1;24528:7;24524:15;24521:1;24518:22;24498:1;24491:9;24471:83;24448:139;;24567:18;;:::i;:::-;24448:139;24232:362;24184:410;;;;:::o;24600:220::-;24740:34;24736:1;24728:6;24724:14;24717:58;24809:3;24804:2;24796:6;24792:15;24785:28;24600:220;:::o;24826:366::-;24968:3;24989:67;25053:2;25048:3;24989:67;:::i;:::-;24982:74;;25065:93;25154:3;25065:93;:::i;:::-;25183:2;25178:3;25174:12;25167:19;;24826:366;;;:::o;25198:419::-;25364:4;25402:2;25391:9;25387:18;25379:26;;25451:9;25445:4;25441:20;25437:1;25426:9;25422:17;25415:47;25479:131;25605:4;25479:131;:::i;:::-;25471:139;;25198:419;;;:::o;25623:180::-;25671:77;25668:1;25661:88;25768:4;25765:1;25758:15;25792:4;25789:1;25782:15;25809:180;25857:77;25854:1;25847:88;25954:4;25951:1;25944:15;25978:4;25975:1;25968:15;25995:143;26052:5;26083:6;26077:13;26068:22;;26099:33;26126:5;26099:33;:::i;:::-;25995:143;;;;:::o;26144:351::-;26214:6;26263:2;26251:9;26242:7;26238:23;26234:32;26231:119;;;26269:79;;:::i;:::-;26231:119;26389:1;26414:64;26470:7;26461:6;26450:9;26446:22;26414:64;:::i;:::-;26404:74;;26360:128;26144:351;;;;:::o;26501:85::-;26546:7;26575:5;26564:16;;26501:85;;;:::o;26592:158::-;26650:9;26683:61;26701:42;26710:32;26736:5;26710:32;:::i;:::-;26701:42;:::i;:::-;26683:61;:::i;:::-;26670:74;;26592:158;;;:::o;26756:147::-;26851:45;26890:5;26851:45;:::i;:::-;26846:3;26839:58;26756:147;;:::o;26909:114::-;26976:6;27010:5;27004:12;26994:22;;26909:114;;;:::o;27029:184::-;27128:11;27162:6;27157:3;27150:19;27202:4;27197:3;27193:14;27178:29;;27029:184;;;;:::o;27219:132::-;27286:4;27309:3;27301:11;;27339:4;27334:3;27330:14;27322:22;;27219:132;;;:::o;27357:108::-;27434:24;27452:5;27434:24;:::i;:::-;27429:3;27422:37;27357:108;;:::o;27471:179::-;27540:10;27561:46;27603:3;27595:6;27561:46;:::i;:::-;27639:4;27634:3;27630:14;27616:28;;27471:179;;;;:::o;27656:113::-;27726:4;27758;27753:3;27749:14;27741:22;;27656:113;;;:::o;27805:732::-;27924:3;27953:54;28001:5;27953:54;:::i;:::-;28023:86;28102:6;28097:3;28023:86;:::i;:::-;28016:93;;28133:56;28183:5;28133:56;:::i;:::-;28212:7;28243:1;28228:284;28253:6;28250:1;28247:13;28228:284;;;28329:6;28323:13;28356:63;28415:3;28400:13;28356:63;:::i;:::-;28349:70;;28442:60;28495:6;28442:60;:::i;:::-;28432:70;;28288:224;28275:1;28272;28268:9;28263:14;;28228:284;;;28232:14;28528:3;28521:10;;27929:608;;;27805:732;;;;:::o;28543:831::-;28806:4;28844:3;28833:9;28829:19;28821:27;;28858:71;28926:1;28915:9;28911:17;28902:6;28858:71;:::i;:::-;28939:80;29015:2;29004:9;29000:18;28991:6;28939:80;:::i;:::-;29066:9;29060:4;29056:20;29051:2;29040:9;29036:18;29029:48;29094:108;29197:4;29188:6;29094:108;:::i;:::-;29086:116;;29212:72;29280:2;29269:9;29265:18;29256:6;29212:72;:::i;:::-;29294:73;29362:3;29351:9;29347:19;29338:6;29294:73;:::i;:::-;28543:831;;;;;;;;:::o;29380:483::-;29551:4;29589:2;29578:9;29574:18;29566:26;;29602:71;29670:1;29659:9;29655:17;29646:6;29602:71;:::i;:::-;29720:9;29714:4;29710:20;29705:2;29694:9;29690:18;29683:48;29748:108;29851:4;29842:6;29748:108;:::i;:::-;29740:116;;29380:483;;;;;:::o;29869:807::-;30118:4;30156:3;30145:9;30141:19;30133:27;;30170:71;30238:1;30227:9;30223:17;30214:6;30170:71;:::i;:::-;30251:72;30319:2;30308:9;30304:18;30295:6;30251:72;:::i;:::-;30333:80;30409:2;30398:9;30394:18;30385:6;30333:80;:::i;:::-;30423;30499:2;30488:9;30484:18;30475:6;30423:80;:::i;:::-;30513:73;30581:3;30570:9;30566:19;30557:6;30513:73;:::i;:::-;30596;30664:3;30653:9;30649:19;30640:6;30596:73;:::i;:::-;29869:807;;;;;;;;;:::o;30682:143::-;30739:5;30770:6;30764:13;30755:22;;30786:33;30813:5;30786:33;:::i;:::-;30682:143;;;;:::o;30831:663::-;30919:6;30927;30935;30984:2;30972:9;30963:7;30959:23;30955:32;30952:119;;;30990:79;;:::i;:::-;30952:119;31110:1;31135:64;31191:7;31182:6;31171:9;31167:22;31135:64;:::i;:::-;31125:74;;31081:128;31248:2;31274:64;31330:7;31321:6;31310:9;31306:22;31274:64;:::i;:::-;31264:74;;31219:129;31387:2;31413:64;31469:7;31460:6;31449:9;31445:22;31413:64;:::i;:::-;31403:74;;31358:129;30831:663;;;;;:::o

Swarm Source

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