ETH Price: $3,422.62 (-2.15%)
Gas: 5 Gwei

Token

Matrix (MTX)
 

Overview

Max Total Supply

10,000,000 MTX

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
71,620.708824518 MTX

Value
$0.00
0x7a366fb3ba3e89e357ba9c23849bdf98ec1e51f9
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:
Matrix

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-12-30
*/

/**
*/
   //matrix, a set of numbers arranged in rows and columns so as to form a rectangular array. The numbers are called the elements, or entries, of the matrix. Matrices have wide applications in engineering, physics, economics, and statistics as well as in various branches of mathematics. Matrices also have important applications in computer graphics, where they have been used to represent rotations and other transformations of images.


/**

 Telegram : https://t.me/Matrix_ERC
 website  : https://www.matrixerc.tech/
 Twitter  : https://twitter.com/MatrixEthereum

*/

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

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;
    uint256 private _lockTime;

    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(0xdead));
        _owner = address(0xdead);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

    uint public launchedBlock;
    uint public killblock = 0;
    bool public isLaunch = true;
    address payable public marketingWalletAddress = payable(0xe4352a66C6dAa14aF21cba1E01f7076Db6d4Ba98); // Marketing Address
    address payable public teamWalletAddress = payable(0xe4352a66C6dAa14aF21cba1E01f7076Db6d4Ba98); // Team Address
    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;
    mapping (address => bool) private _isbclisted;

    uint256 public _buyLiquidityFee = 1;
    uint256 public _buyMarketingFee = 15;
    uint256 public _buyTeamFee = 4;
    
    uint256 public _sellLiquidityFee = 1;
    uint256 public _sellMarketingFee = 15;
    uint256 public _sellTeamFee = 4;
    
    uint256 public _sellReserveFee = 1;

    uint256 public _liquidityShare = 2;
    uint256 public _marketingShare = 25;
    uint256 public _teamShare = 8;

    uint256 public _totalTaxIfBuying = 20;
    uint256 public _totalTaxIfSelling = 20;
    uint256 public _totalDistributionShares = 35;

    uint256 private _totalSupply = 10000000  * 10**_decimals;
    uint256 public _maxTxAmount = 200000 * 10**_decimals; 
    uint256 public _walletMax = 200000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 10000 * 5 **_decimals; 

    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;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = 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 Launch() public onlyOwner {
        isLaunch = true;
        launchedBlock = block.number;
    }

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

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

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _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 {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

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

    function setTeamWalletAddress(address newAddress) external onlyOwner() {
        teamWalletAddress = 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);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //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 isbcList(address account) public view returns(bool) {
        return _isbclisted[account];
    }

    function addBot(address recipient) internal {
        if (!_isbclisted[recipient]) _isbclisted[recipient] = true;
    }

    function setKillBlock(uint num) public onlyOwner {
        killblock = num;
    }

    function writebcList(address recipient, bool isbc) public onlyOwner {
        _isbclisted[recipient] = isbc;
    }

    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");
        require(!_isbclisted[recipient] && !_isbclisted[sender], "bclisted address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if (!isExcludedFromFee[sender] && !isExcludedFromFee[recipient] && _sellReserveFee > 0) {
                uint _sellReserveFeeAmount = amount.div(100).mul(_sellReserveFee);
                amount = amount.sub(_sellReserveFeeAmount);
            }

            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;
            if (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) {
                finalAmount = amount;
            } else {
                require(isLaunch, "Swap not open");
                if(sender == uniswapPair) {
                    if (block.number <= launchedBlock + killblock) {                  
                        addBot(recipient);
                    }
                }
                finalAmount = 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 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

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

        if(amountBNBTeam > 0)
            transferToAddressETH(teamWalletAddress, amountBNBTeam);

        if(amountBNBLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountBNBLiquidity);
    }
    
    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
            deadAddress,
            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":"Launch","outputs":[],"stateMutability":"nonpayable","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":"_buyTeamFee","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":"_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":"_sellReserveFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","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":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","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":[{"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":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","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":[],"name":"isLaunch","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isbcList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","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":"uint256","name":"num","type":"uint256"}],"name":"setKillBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","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":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","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":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"bool","name":"isbc","type":"bool"}],"name":"writebcList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600681526020017f4d61747269780000000000000000000000000000000000000000000000000000815250600390805190602001906200005192919062000bfb565b506040518060400160405280600381526020017f4d54580000000000000000000000000000000000000000000000000000000000815250600490805190602001906200009f92919062000bfb565b506009600560006101000a81548160ff021916908360ff16021790555060006007556001600860006101000a81548160ff02191690831515021790555073e4352a66c6daa14af21cba1e01f7076db6d4ba98600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e4352a66c6daa14af21cba1e01f7076db6d4ba98600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152506001601155600f60125560046013556001601455600f601555600460165560016017556002601855601980556008601a556014601b556014601c556023601d55600560009054906101000a900460ff16600a6200021c919062000e72565b629896806200022c919062000faf565b601e55600560009054906101000a900460ff16600a6200024d919062000e72565b62030d406200025d919062000faf565b601f55600560009054906101000a900460ff16600a6200027e919062000e72565b62030d406200028e919062000faf565b602055600560009054906101000a900460ff166005620002af919062000e72565b612710620002be919062000faf565b6021556001602360156101000a81548160ff0219169083151502179055506000602360166101000a81548160ff0219169083151502179055506001602360176101000a81548160ff0219169083151502179055503480156200031f57600080fd5b5060006200033262000b6760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200043057600080fd5b505afa15801562000445573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046b919062000cc2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620004ce57600080fd5b505afa158015620004e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000509919062000cc2565b6040518363ffffffff1660e01b81526004016200052892919062000d3d565b602060405180830381600087803b1580156200054357600080fd5b505af115801562000558573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057e919062000cc2565b602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e54600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600c6000620006ba62000b6f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200079c6013546200078860125460115462000b9860201b6200326c1790919060201c565b62000b9860201b6200326c1790919060201c565b601b81905550620007db601654620007c760155460145462000b9860201b6200326c1790919060201c565b62000b9860201b6200326c1790919060201c565b601c819055506200081a601a546200080660195460185462000b9860201b6200326c1790919060201c565b62000b9860201b6200326c1790919060201c565b601d819055506001600d60006200083662000b6f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60006200096f62000b6f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601e54600a600062000aa962000b6760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000af762000b6760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601e5460405162000b58919062000d8c565b60405180910390a35062001144565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000ba9919062000dba565b90508381101562000bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be89062000d6a565b60405180910390fd5b8091505092915050565b82805462000c09906200105b565b90600052602060002090601f01602090048101928262000c2d576000855562000c79565b82601f1062000c4857805160ff191683800117855562000c79565b8280016001018555821562000c79579182015b8281111562000c7857825182559160200191906001019062000c5b565b5b50905062000c88919062000c8c565b5090565b5b8082111562000ca757600081600090555060010162000c8d565b5090565b60008151905062000cbc816200112a565b92915050565b60006020828403121562000cdb5762000cda620010ef565b5b600062000ceb8482850162000cab565b91505092915050565b62000cff8162001010565b82525050565b600062000d14601b8362000da9565b915062000d218262001101565b602082019050919050565b62000d378162001044565b82525050565b600060408201905062000d54600083018562000cf4565b62000d63602083018462000cf4565b9392505050565b6000602082019050818103600083015262000d858162000d05565b9050919050565b600060208201905062000da3600083018462000d2c565b92915050565b600082825260208201905092915050565b600062000dc78262001044565b915062000dd48362001044565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e0c5762000e0b62001091565b5b828201905092915050565b6000808291508390505b600185111562000e695780860481111562000e415762000e4062001091565b5b600185161562000e515780820291505b808102905062000e6185620010f4565b945062000e21565b94509492505050565b600062000e7f8262001044565b915062000e8c836200104e565b925062000ebb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ec3565b905092915050565b60008262000ed5576001905062000fa8565b8162000ee5576000905062000fa8565b816001811462000efe576002811462000f095762000f3f565b600191505062000fa8565b60ff84111562000f1e5762000f1d62001091565b5b8360020a91508482111562000f385762000f3762001091565b5b5062000fa8565b5060208310610133831016604e8410600b841016171562000f795782820a90508381111562000f735762000f7262001091565b5b62000fa8565b62000f88848484600162000e17565b9250905081840481111562000fa25762000fa162001091565b5b81810290505b9392505050565b600062000fbc8262001044565b915062000fc98362001044565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001005576200100462001091565b5b828202905092915050565b60006200101d8262001024565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600060028204905060018216806200107457607f821691505b602082108114156200108b576200108a620010c0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b60008160011c9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b620011358162001010565b81146200114157600080fd5b50565b60805160601c615a4162001171600039600081816117010152818161172d01526148df0152615a416000f3fe6080604052600436106104095760003560e01c80638b42507f11610213578063c5d2418911610123578063dd62ed3e116100ab578063f1d5f5171161007a578063f1d5f51714610f8e578063f2fde38b14610fb7578063f5d588f514610fe0578063f84ba65d1461100b578063f872858a1461103457610410565b8063dd62ed3e14610ed4578063ec28438a14610f11578063ef422a1814610f3a578063f0cd1dac14610f6357610410565b8063cab03471116100f2578063cab0347114610dff578063d158272d14610e2a578063da00097d14610e55578063dc44b6a014610e80578063dd46706414610eab57610410565b8063c5d2418914610d41578063c816841b14610d6c578063c860795214610d97578063c867d60b14610dc257610410565b8063a5d69d1f116101a6578063a9059cbb11610175578063a9059cbb14610c5e578063b0ce740014610c9b578063c2d4640e14610cc4578063c469b6dd14610ced578063c49b9a8014610d1857610410565b8063a5d69d1f14610bb6578063a69df4b514610bdf578063a83f53a714610bf6578063a85551f414610c2157610410565b806395d89b41116101e257806395d89b4114610af8578063a073d37f14610b23578063a08e671f14610b4e578063a457c2d714610b7957610410565b80638b42507f14610a4e5780638da5cb5b14610a8b578063914eb66a14610ab657806391b05ca314610acd57610410565b806339509351116103195780635881f3ef116102a15780637d1db4a5116102705780637d1db4a514610979578063807c2d9c146109a457806382eefb43146109cf578063844d591c146109fa57806388790a6814610a2357610410565b80635881f3ef146108a9578063602bc62b146108e657806361a23c691461091157806370a082311461093c57610410565b80634cb80fd5116102e85780634cb80fd5146107c25780635342acb4146107eb57806355724fc214610828578063557ed1ba1461085357806357a5802f1461087e57610410565b806339509351146106f45780633b97084a146107315780633ecad2711461075a5780634a74bb021461079757610410565b806318160ddd1161039c5780632563ae831161036b5780632563ae831461062157806327c8f8351461064a5780632b112e49146106755780632c4b2334146106a0578063313ce567146106c957610410565b806318160ddd146105675780631870517a146105925780632198cf6c146105bb57806323b872dd146105e457610410565b8063108c336d116103d8578063108c336d146104bd5780631245e347146104e65780631694505e14610511578063170e45f11461053c57610410565b806302ac81681461041557806306fdde031461042c5780630873321414610457578063095ea7b31461048057610410565b3661041057005b600080fd5b34801561042157600080fd5b5061042a61105f565b005b34801561043857600080fd5b50610441611118565b60405161044e9190615033565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190614ba9565b6111aa565b005b34801561048c57600080fd5b506104a760048036038101906104a29190614b0f565b61128a565b6040516104b49190614ffd565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190614b7c565b6112a8565b005b3480156104f257600080fd5b506104fb611347565b6040516105089190614f58565b60405180910390f35b34801561051d57600080fd5b5061052661136d565b6040516105339190615018565b60405180910390f35b34801561054857600080fd5b50610551611393565b60405161055e91906151f5565b60405180910390f35b34801561057357600080fd5b5061057c611399565b60405161058991906151f5565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190614ba9565b6113a3565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190614acf565b611483565b005b3480156105f057600080fd5b5061060b60048036038101906106069190614a7c565b611573565b6040516106189190614ffd565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614b4f565b61164d565b005b34801561065657600080fd5b5061065f6116ff565b60405161066c9190614f3d565b60405180910390f35b34801561068157600080fd5b5061068a611723565b60405161069791906151f5565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c291906149e2565b611767565b005b3480156106d557600080fd5b506106de611840565b6040516106eb919061529a565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190614b0f565b611857565b6040516107289190614ffd565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190614b7c565b61190a565b005b34801561076657600080fd5b50610781600480360381019061077c91906149e2565b6119a9565b60405161078e9190614ffd565b60405180910390f35b3480156107a357600080fd5b506107ac6119c9565b6040516107b99190614ffd565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e491906149e2565b6119dc565b005b3480156107f757600080fd5b50610812600480360381019061080d91906149e2565b611ab5565b60405161081f9190614ffd565b60405180910390f35b34801561083457600080fd5b5061083d611ad5565b60405161084a91906151f5565b60405180910390f35b34801561085f57600080fd5b50610868611adb565b60405161087591906151f5565b60405180910390f35b34801561088a57600080fd5b50610893611ae3565b6040516108a091906151f5565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb91906149e2565b611ae9565b6040516108dd9190614f3d565b60405180910390f35b3480156108f257600080fd5b506108fb612047565b60405161090891906151f5565b60405180910390f35b34801561091d57600080fd5b50610926612051565b60405161093391906151f5565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e91906149e2565b612057565b60405161097091906151f5565b60405180910390f35b34801561098557600080fd5b5061098e6120a0565b60405161099b91906151f5565b60405180910390f35b3480156109b057600080fd5b506109b96120a6565b6040516109c691906151f5565b60405180910390f35b3480156109db57600080fd5b506109e46120ac565b6040516109f191906151f5565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190614acf565b6120b2565b005b348015610a2f57600080fd5b50610a386121a2565b604051610a4591906151f5565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a7091906149e2565b6121a8565b604051610a829190614ffd565b60405180910390f35b348015610a9757600080fd5b50610aa06121c8565b604051610aad9190614f3d565b60405180910390f35b348015610ac257600080fd5b50610acb6121f1565b005b348015610ad957600080fd5b50610ae2612346565b604051610aef91906151f5565b60405180910390f35b348015610b0457600080fd5b50610b0d61234c565b604051610b1a9190615033565b60405180910390f35b348015610b2f57600080fd5b50610b386123de565b604051610b4591906151f5565b60405180910390f35b348015610b5a57600080fd5b50610b636123e8565b604051610b7091906151f5565b60405180910390f35b348015610b8557600080fd5b50610ba06004803603810190610b9b9190614b0f565b6123ee565b604051610bad9190614ffd565b60405180910390f35b348015610bc257600080fd5b50610bdd6004803603810190610bd89190614b4f565b6124bb565b005b348015610beb57600080fd5b50610bf461256d565b005b348015610c0257600080fd5b50610c0b612741565b604051610c1891906151f5565b60405180910390f35b348015610c2d57600080fd5b50610c486004803603810190610c4391906149e2565b612747565b604051610c559190614ffd565b60405180910390f35b348015610c6a57600080fd5b50610c856004803603810190610c809190614b0f565b61279d565b604051610c929190614ffd565b60405180910390f35b348015610ca757600080fd5b50610cc26004803603810190610cbd9190614acf565b6127bc565b005b348015610cd057600080fd5b50610ceb6004803603810190610ce69190614ba9565b6128ac565b005b348015610cf957600080fd5b50610d0261298c565b604051610d0f91906151f5565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a9190614b4f565b612992565b005b348015610d4d57600080fd5b50610d56612a7b565b604051610d6391906151f5565b60405180910390f35b348015610d7857600080fd5b50610d81612a81565b604051610d8e9190614f3d565b60405180910390f35b348015610da357600080fd5b50610dac612aa7565b604051610db991906151f5565b60405180910390f35b348015610dce57600080fd5b50610de96004803603810190610de491906149e2565b612aad565b604051610df69190614ffd565b60405180910390f35b348015610e0b57600080fd5b50610e14612acd565b604051610e2191906151f5565b60405180910390f35b348015610e3657600080fd5b50610e3f612ad3565b604051610e4c9190614f58565b60405180910390f35b348015610e6157600080fd5b50610e6a612af9565b604051610e779190614ffd565b60405180910390f35b348015610e8c57600080fd5b50610e95612b0c565b604051610ea291906151f5565b60405180910390f35b348015610eb757600080fd5b50610ed26004803603810190610ecd9190614b7c565b612b12565b005b348015610ee057600080fd5b50610efb6004803603810190610ef69190614a3c565b612cd9565b604051610f0891906151f5565b60405180910390f35b348015610f1d57600080fd5b50610f386004803603810190610f339190614b7c565b612d60565b005b348015610f4657600080fd5b50610f616004803603810190610f5c9190614acf565b612dff565b005b348015610f6f57600080fd5b50610f78612eef565b604051610f8591906151f5565b60405180910390f35b348015610f9a57600080fd5b50610fb56004803603810190610fb09190614b7c565b612ef5565b005b348015610fc357600080fd5b50610fde6004803603810190610fd991906149e2565b612f94565b005b348015610fec57600080fd5b50610ff5613156565b6040516110029190614ffd565b60405180910390f35b34801561101757600080fd5b50611032600480360381019061102d9190614acf565b613169565b005b34801561104057600080fd5b50611049613259565b6040516110569190614ffd565b60405180910390f35b6110676132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90615155565b60405180910390fd5b6001600860006101000a81548160ff02191690831515021790555043600681905550565b60606003805461112790615501565b80601f016020809104026020016040519081016040528092919081815260200182805461115390615501565b80156111a05780601f10611175576101008083540402835291602001916111a0565b820191906000526020600020905b81548152906001019060200180831161118357829003601f168201915b5050505050905090565b6111b26132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690615155565b60405180910390fd5b82601481905550816015819055508060168190555061127f60165461127160155460145461326c90919063ffffffff16565b61326c90919063ffffffff16565b601c81905550505050565b600061129e6112976132ca565b84846132d2565b6001905092915050565b6112b06132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133490615155565b60405180910390fd5b8060078190555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000601e54905090565b6113ab6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90615155565b60405180910390fd5b82601181905550816012819055508060138190555061147860135461146a60125460115461326c90919063ffffffff16565b61326c90919063ffffffff16565b601b81905550505050565b61148b6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90615155565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061158084848461349d565b506116428461158d6132ca565b61163d856040518060600160405280602881526020016159bf60289139600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006115f36132ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d289092919063ffffffff16565b6132d2565b600190509392505050565b6116556132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990615155565b60405180910390fd5b80602360176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006117626117517f0000000000000000000000000000000000000000000000000000000000000000612057565b601e54613d8c90919063ffffffff16565b905090565b61176f6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390615155565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b60006119006118646132ca565b846118fb85600b60006118756132ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326c90919063ffffffff16565b6132d2565b6001905092915050565b6119126132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690615155565b60405180910390fd5b8060218190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b602360159054906101000a900460ff1681565b6119e46132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890615155565b60405180910390fd5b80600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b60175481565b600042905090565b60185481565b6000611af36132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790615155565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bcb57600080fd5b505afa158015611bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c039190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6557600080fd5b505afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d9190614a0f565b6040518363ffffffff1660e01b8152600401611cba929190614f73565b60206040518083038186803b158015611cd257600080fd5b505afa158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190614a0f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ecb578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8757600080fd5b505afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf9190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2157600080fd5b505afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190614a0f565b6040518363ffffffff1660e01b8152600401611e76929190614f73565b602060405180830381600087803b158015611e9057600080fd5b505af1158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec89190614a0f565b91505b81602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6000600254905090565b60195481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601f5481565b60205481565b601c5481565b6120ba6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90615155565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b600e6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6121f96132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90615155565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60065481565b60606004805461235b90615501565b80601f016020809104026020016040519081016040528092919081815260200182805461238790615501565b80156123d45780601f106123a9576101008083540402835291602001916123d4565b820191906000526020600020905b8154815290600101906020018083116123b757829003601f168201915b5050505050905090565b6000602154905090565b601d5481565b60006124b16123fb6132ca565b846124ac856040518060600160405280602581526020016159e760259139600b60006124256132ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d289092919063ffffffff16565b6132d2565b6001905092915050565b6124c36132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790615155565b60405180910390fd5b80602360166101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f4906151d5565b60405180910390fd5b6002544211612641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612638906151b5565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006127b16127aa6132ca565b848461349d565b506001905092915050565b6127c46132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284890615155565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6128b46132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890615155565b60405180910390fd5b826018819055508160198190555080601a81905550612981601a5461297360195460185461326c90919063ffffffff16565b61326c90919063ffffffff16565b601d81905550505050565b60135481565b61299a6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90615155565b60405180910390fd5b80602360156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612a709190614ffd565b60405180910390a150565b60125481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b600d6020528060005260406000206000915054906101000a900460ff1681565b60165481565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602360169054906101000a900460ff1681565b60115481565b612b1a6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90615155565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042612c55919061530a565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612d686132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dec90615155565b60405180910390fd5b80601f8190555050565b612e076132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90615155565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b612efd6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8190615155565b60405180910390fd5b8060208190555050565b612f9c6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302090615155565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309090615095565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900460ff1681565b6131716132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f590615155565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602360179054906101000a900460ff1681565b600080828461327b919061530a565b9050838110156132c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b7906150d5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333990615195565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a9906150b5565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161349091906151f5565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561350e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350590615175565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561357e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357590615055565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136225750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613658906150f5565b60405180910390fd5b602360149054906101000a900460ff161561368857613681848484613dd6565b9050613d21565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561372c5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561373a57506000601754115b1561378257600061376960175461375b606486613fa990919063ffffffff16565b613ff390919063ffffffff16565b905061377e8184613d8c90919063ffffffff16565b9250505b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138265750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561387157601f54821115613870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386790615115565b60405180910390fd5b5b600061387c30612057565b9050600060215482101590508080156138a25750602360149054906101000a900460ff16155b80156138f85750600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139105750602360159054906101000a900460ff165b1561393a57602360169054906101000a900460ff16156139305760215491505b6139398261406e565b5b6139c3846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d289092919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613aa95750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ab657849050613b8a565b600860009054906101000a900460ff16613b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613afc90615075565b60405180910390fd5b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415613b7c57600754600654613b6b919061530a565b4311613b7b57613b7a8661425f565b5b5b613b8787878761430c565b90505b602360179054906101000a900460ff168015613bf05750600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c1f57602054613c1382613c0589612057565b61326c90919063ffffffff16565b1115613c1e57600080fd5b5b613c7181600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326c90919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d1191906151f5565b60405180910390a3600193505050505b9392505050565b6000838311158290613d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d679190615033565b60405180910390fd5b5060008385613d7f91906153eb565b9050809150509392505050565b6000613dce83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d28565b905092915050565b6000613e61826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d289092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef682600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326c90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f9691906151f5565b60405180910390a3600190509392505050565b6000613feb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614533565b905092915050565b6000808314156140065760009050614068565b600082846140149190615391565b90508284826140239190615360565b14614063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161405a90615135565b60405180910390fd5b809150505b92915050565b6001602360146101000a81548160ff02191690831515021790555060006140c760026140b9601d546140ab60185487613ff390919063ffffffff16565b613fa990919063ffffffff16565b613fa990919063ffffffff16565b905060006140de8284613d8c90919063ffffffff16565b90506140e981614596565b6000479050600061411a6141096002601854613fa990919063ffffffff16565b601d54613d8c90919063ffffffff16565b90506000614158600261414a8461413c60185488613ff390919063ffffffff16565b613fa990919063ffffffff16565b613fa990919063ffffffff16565b9050600061418383614175601a5487613ff390919063ffffffff16565b613fa990919063ffffffff16565b905060006141ac8261419e8588613d8c90919063ffffffff16565b613d8c90919063ffffffff16565b905060008111156141e4576141e3600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614821565b5b600082111561421a57614219600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614821565b5b60008311801561422a5750600087115b1561423a57614239878461486c565b5b505050505050506000602360146101000a81548160ff02191690831515021790555050565b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16614309576001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b60008060009050600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143945761438d606461437f601b5486613ff390919063ffffffff16565b613fa990919063ffffffff16565b9050614412565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144115761440e6064614400601c5486613ff390919063ffffffff16565b613fa990919063ffffffff16565b90505b5b60008111156145165761446d81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326c90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161450d91906151f5565b60405180910390a35b6145298184613d8c90919063ffffffff16565b9150509392505050565b6000808311829061457a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145719190615033565b60405180910390fd5b50600083856145899190615360565b9050809150509392505050565b6000600267ffffffffffffffff8111156145b3576145b26155ef565b5b6040519080825280602002602001820160405280156145e15781602001602082028036833780820191505090505b50905030816000815181106145f9576145f86155c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561469b57600080fd5b505afa1580156146af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146d39190614a0f565b816001815181106146e7576146e66155c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061474e30602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846132d2565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016147b2959493929190615240565b600060405180830381600087803b1580156147cc57600080fd5b505af11580156147e0573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051614815929190615210565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614867573d6000803e3d6000fd5b505050565b61489930602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846132d2565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f0000000000000000000000000000000000000000000000000000000000000000426040518863ffffffff1660e01b815260040161492096959493929190614f9c565b6060604051808303818588803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906149729190614bfc565b5050505050565b60008135905061498881615979565b92915050565b60008151905061499d81615979565b92915050565b6000813590506149b281615990565b92915050565b6000813590506149c7816159a7565b92915050565b6000815190506149dc816159a7565b92915050565b6000602082840312156149f8576149f761561e565b5b6000614a0684828501614979565b91505092915050565b600060208284031215614a2557614a2461561e565b5b6000614a338482850161498e565b91505092915050565b60008060408385031215614a5357614a5261561e565b5b6000614a6185828601614979565b9250506020614a7285828601614979565b9150509250929050565b600080600060608486031215614a9557614a9461561e565b5b6000614aa386828701614979565b9350506020614ab486828701614979565b9250506040614ac5868287016149b8565b9150509250925092565b60008060408385031215614ae657614ae561561e565b5b6000614af485828601614979565b9250506020614b05858286016149a3565b9150509250929050565b60008060408385031215614b2657614b2561561e565b5b6000614b3485828601614979565b9250506020614b45858286016149b8565b9150509250929050565b600060208284031215614b6557614b6461561e565b5b6000614b73848285016149a3565b91505092915050565b600060208284031215614b9257614b9161561e565b5b6000614ba0848285016149b8565b91505092915050565b600080600060608486031215614bc257614bc161561e565b5b6000614bd0868287016149b8565b9350506020614be1868287016149b8565b9250506040614bf2868287016149b8565b9150509250925092565b600080600060608486031215614c1557614c1461561e565b5b6000614c23868287016149cd565b9350506020614c34868287016149cd565b9250506040614c45868287016149cd565b9150509250925092565b6000614c5b8383614c76565b60208301905092915050565b614c7081615431565b82525050565b614c7f8161541f565b82525050565b614c8e8161541f565b82525050565b6000614c9f826152c5565b614ca981856152e8565b9350614cb4836152b5565b8060005b83811015614ce5578151614ccc8882614c4f565b9750614cd7836152db565b925050600181019050614cb8565b5085935050505092915050565b614cfb81615443565b82525050565b614d0a81615486565b82525050565b614d1981615498565b82525050565b6000614d2a826152d0565b614d3481856152f9565b9350614d448185602086016154ce565b614d4d81615623565b840191505092915050565b6000614d656023836152f9565b9150614d7082615634565b604082019050919050565b6000614d88600d836152f9565b9150614d9382615683565b602082019050919050565b6000614dab6026836152f9565b9150614db6826156ac565b604082019050919050565b6000614dce6022836152f9565b9150614dd9826156fb565b604082019050919050565b6000614df1601b836152f9565b9150614dfc8261574a565b602082019050919050565b6000614e146010836152f9565b9150614e1f82615773565b602082019050919050565b6000614e376028836152f9565b9150614e428261579c565b604082019050919050565b6000614e5a6021836152f9565b9150614e65826157eb565b604082019050919050565b6000614e7d6020836152f9565b9150614e888261583a565b602082019050919050565b6000614ea06025836152f9565b9150614eab82615863565b604082019050919050565b6000614ec36024836152f9565b9150614ece826158b2565b604082019050919050565b6000614ee6601f836152f9565b9150614ef182615901565b602082019050919050565b6000614f096023836152f9565b9150614f148261592a565b604082019050919050565b614f288161546f565b82525050565b614f3781615479565b82525050565b6000602082019050614f526000830184614c85565b92915050565b6000602082019050614f6d6000830184614c67565b92915050565b6000604082019050614f886000830185614c85565b614f956020830184614c85565b9392505050565b600060c082019050614fb16000830189614c85565b614fbe6020830188614f1f565b614fcb6040830187614d10565b614fd86060830186614d10565b614fe56080830185614c85565b614ff260a0830184614f1f565b979650505050505050565b60006020820190506150126000830184614cf2565b92915050565b600060208201905061502d6000830184614d01565b92915050565b6000602082019050818103600083015261504d8184614d1f565b905092915050565b6000602082019050818103600083015261506e81614d58565b9050919050565b6000602082019050818103600083015261508e81614d7b565b9050919050565b600060208201905081810360008301526150ae81614d9e565b9050919050565b600060208201905081810360008301526150ce81614dc1565b9050919050565b600060208201905081810360008301526150ee81614de4565b9050919050565b6000602082019050818103600083015261510e81614e07565b9050919050565b6000602082019050818103600083015261512e81614e2a565b9050919050565b6000602082019050818103600083015261514e81614e4d565b9050919050565b6000602082019050818103600083015261516e81614e70565b9050919050565b6000602082019050818103600083015261518e81614e93565b9050919050565b600060208201905081810360008301526151ae81614eb6565b9050919050565b600060208201905081810360008301526151ce81614ed9565b9050919050565b600060208201905081810360008301526151ee81614efc565b9050919050565b600060208201905061520a6000830184614f1f565b92915050565b60006040820190506152256000830185614f1f565b81810360208301526152378184614c94565b90509392505050565b600060a0820190506152556000830188614f1f565b6152626020830187614d10565b81810360408301526152748186614c94565b90506152836060830185614c85565b6152906080830184614f1f565b9695505050505050565b60006020820190506152af6000830184614f2e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006153158261546f565b91506153208361546f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561535557615354615533565b5b828201905092915050565b600061536b8261546f565b91506153768361546f565b92508261538657615385615562565b5b828204905092915050565b600061539c8261546f565b91506153a78361546f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153e0576153df615533565b5b828202905092915050565b60006153f68261546f565b91506154018361546f565b92508282101561541457615413615533565b5b828203905092915050565b600061542a8261544f565b9050919050565b600061543c8261544f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615491826154aa565b9050919050565b60006154a38261546f565b9050919050565b60006154b5826154bc565b9050919050565b60006154c78261544f565b9050919050565b60005b838110156154ec5780820151818401526020810190506154d1565b838111156154fb576000848401525b50505050565b6000600282049050600182168061551957607f821691505b6020821081141561552d5761552c615591565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f53776170206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f62636c6973746564206164647265737300000000000000000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6159828161541f565b811461598d57600080fd5b50565b61599981615443565b81146159a457600080fd5b50565b6159b08161546f565b81146159bb57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122033cce540868c814215c174a5cb4b337a1a9630add81bb0f7fe3a6baae7a610c964736f6c63430008070033

Deployed Bytecode

0x6080604052600436106104095760003560e01c80638b42507f11610213578063c5d2418911610123578063dd62ed3e116100ab578063f1d5f5171161007a578063f1d5f51714610f8e578063f2fde38b14610fb7578063f5d588f514610fe0578063f84ba65d1461100b578063f872858a1461103457610410565b8063dd62ed3e14610ed4578063ec28438a14610f11578063ef422a1814610f3a578063f0cd1dac14610f6357610410565b8063cab03471116100f2578063cab0347114610dff578063d158272d14610e2a578063da00097d14610e55578063dc44b6a014610e80578063dd46706414610eab57610410565b8063c5d2418914610d41578063c816841b14610d6c578063c860795214610d97578063c867d60b14610dc257610410565b8063a5d69d1f116101a6578063a9059cbb11610175578063a9059cbb14610c5e578063b0ce740014610c9b578063c2d4640e14610cc4578063c469b6dd14610ced578063c49b9a8014610d1857610410565b8063a5d69d1f14610bb6578063a69df4b514610bdf578063a83f53a714610bf6578063a85551f414610c2157610410565b806395d89b41116101e257806395d89b4114610af8578063a073d37f14610b23578063a08e671f14610b4e578063a457c2d714610b7957610410565b80638b42507f14610a4e5780638da5cb5b14610a8b578063914eb66a14610ab657806391b05ca314610acd57610410565b806339509351116103195780635881f3ef116102a15780637d1db4a5116102705780637d1db4a514610979578063807c2d9c146109a457806382eefb43146109cf578063844d591c146109fa57806388790a6814610a2357610410565b80635881f3ef146108a9578063602bc62b146108e657806361a23c691461091157806370a082311461093c57610410565b80634cb80fd5116102e85780634cb80fd5146107c25780635342acb4146107eb57806355724fc214610828578063557ed1ba1461085357806357a5802f1461087e57610410565b806339509351146106f45780633b97084a146107315780633ecad2711461075a5780634a74bb021461079757610410565b806318160ddd1161039c5780632563ae831161036b5780632563ae831461062157806327c8f8351461064a5780632b112e49146106755780632c4b2334146106a0578063313ce567146106c957610410565b806318160ddd146105675780631870517a146105925780632198cf6c146105bb57806323b872dd146105e457610410565b8063108c336d116103d8578063108c336d146104bd5780631245e347146104e65780631694505e14610511578063170e45f11461053c57610410565b806302ac81681461041557806306fdde031461042c5780630873321414610457578063095ea7b31461048057610410565b3661041057005b600080fd5b34801561042157600080fd5b5061042a61105f565b005b34801561043857600080fd5b50610441611118565b60405161044e9190615033565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190614ba9565b6111aa565b005b34801561048c57600080fd5b506104a760048036038101906104a29190614b0f565b61128a565b6040516104b49190614ffd565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df9190614b7c565b6112a8565b005b3480156104f257600080fd5b506104fb611347565b6040516105089190614f58565b60405180910390f35b34801561051d57600080fd5b5061052661136d565b6040516105339190615018565b60405180910390f35b34801561054857600080fd5b50610551611393565b60405161055e91906151f5565b60405180910390f35b34801561057357600080fd5b5061057c611399565b60405161058991906151f5565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190614ba9565b6113a3565b005b3480156105c757600080fd5b506105e260048036038101906105dd9190614acf565b611483565b005b3480156105f057600080fd5b5061060b60048036038101906106069190614a7c565b611573565b6040516106189190614ffd565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614b4f565b61164d565b005b34801561065657600080fd5b5061065f6116ff565b60405161066c9190614f3d565b60405180910390f35b34801561068157600080fd5b5061068a611723565b60405161069791906151f5565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c291906149e2565b611767565b005b3480156106d557600080fd5b506106de611840565b6040516106eb919061529a565b60405180910390f35b34801561070057600080fd5b5061071b60048036038101906107169190614b0f565b611857565b6040516107289190614ffd565b60405180910390f35b34801561073d57600080fd5b5061075860048036038101906107539190614b7c565b61190a565b005b34801561076657600080fd5b50610781600480360381019061077c91906149e2565b6119a9565b60405161078e9190614ffd565b60405180910390f35b3480156107a357600080fd5b506107ac6119c9565b6040516107b99190614ffd565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e491906149e2565b6119dc565b005b3480156107f757600080fd5b50610812600480360381019061080d91906149e2565b611ab5565b60405161081f9190614ffd565b60405180910390f35b34801561083457600080fd5b5061083d611ad5565b60405161084a91906151f5565b60405180910390f35b34801561085f57600080fd5b50610868611adb565b60405161087591906151f5565b60405180910390f35b34801561088a57600080fd5b50610893611ae3565b6040516108a091906151f5565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb91906149e2565b611ae9565b6040516108dd9190614f3d565b60405180910390f35b3480156108f257600080fd5b506108fb612047565b60405161090891906151f5565b60405180910390f35b34801561091d57600080fd5b50610926612051565b60405161093391906151f5565b60405180910390f35b34801561094857600080fd5b50610963600480360381019061095e91906149e2565b612057565b60405161097091906151f5565b60405180910390f35b34801561098557600080fd5b5061098e6120a0565b60405161099b91906151f5565b60405180910390f35b3480156109b057600080fd5b506109b96120a6565b6040516109c691906151f5565b60405180910390f35b3480156109db57600080fd5b506109e46120ac565b6040516109f191906151f5565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190614acf565b6120b2565b005b348015610a2f57600080fd5b50610a386121a2565b604051610a4591906151f5565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a7091906149e2565b6121a8565b604051610a829190614ffd565b60405180910390f35b348015610a9757600080fd5b50610aa06121c8565b604051610aad9190614f3d565b60405180910390f35b348015610ac257600080fd5b50610acb6121f1565b005b348015610ad957600080fd5b50610ae2612346565b604051610aef91906151f5565b60405180910390f35b348015610b0457600080fd5b50610b0d61234c565b604051610b1a9190615033565b60405180910390f35b348015610b2f57600080fd5b50610b386123de565b604051610b4591906151f5565b60405180910390f35b348015610b5a57600080fd5b50610b636123e8565b604051610b7091906151f5565b60405180910390f35b348015610b8557600080fd5b50610ba06004803603810190610b9b9190614b0f565b6123ee565b604051610bad9190614ffd565b60405180910390f35b348015610bc257600080fd5b50610bdd6004803603810190610bd89190614b4f565b6124bb565b005b348015610beb57600080fd5b50610bf461256d565b005b348015610c0257600080fd5b50610c0b612741565b604051610c1891906151f5565b60405180910390f35b348015610c2d57600080fd5b50610c486004803603810190610c4391906149e2565b612747565b604051610c559190614ffd565b60405180910390f35b348015610c6a57600080fd5b50610c856004803603810190610c809190614b0f565b61279d565b604051610c929190614ffd565b60405180910390f35b348015610ca757600080fd5b50610cc26004803603810190610cbd9190614acf565b6127bc565b005b348015610cd057600080fd5b50610ceb6004803603810190610ce69190614ba9565b6128ac565b005b348015610cf957600080fd5b50610d0261298c565b604051610d0f91906151f5565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a9190614b4f565b612992565b005b348015610d4d57600080fd5b50610d56612a7b565b604051610d6391906151f5565b60405180910390f35b348015610d7857600080fd5b50610d81612a81565b604051610d8e9190614f3d565b60405180910390f35b348015610da357600080fd5b50610dac612aa7565b604051610db991906151f5565b60405180910390f35b348015610dce57600080fd5b50610de96004803603810190610de491906149e2565b612aad565b604051610df69190614ffd565b60405180910390f35b348015610e0b57600080fd5b50610e14612acd565b604051610e2191906151f5565b60405180910390f35b348015610e3657600080fd5b50610e3f612ad3565b604051610e4c9190614f58565b60405180910390f35b348015610e6157600080fd5b50610e6a612af9565b604051610e779190614ffd565b60405180910390f35b348015610e8c57600080fd5b50610e95612b0c565b604051610ea291906151f5565b60405180910390f35b348015610eb757600080fd5b50610ed26004803603810190610ecd9190614b7c565b612b12565b005b348015610ee057600080fd5b50610efb6004803603810190610ef69190614a3c565b612cd9565b604051610f0891906151f5565b60405180910390f35b348015610f1d57600080fd5b50610f386004803603810190610f339190614b7c565b612d60565b005b348015610f4657600080fd5b50610f616004803603810190610f5c9190614acf565b612dff565b005b348015610f6f57600080fd5b50610f78612eef565b604051610f8591906151f5565b60405180910390f35b348015610f9a57600080fd5b50610fb56004803603810190610fb09190614b7c565b612ef5565b005b348015610fc357600080fd5b50610fde6004803603810190610fd991906149e2565b612f94565b005b348015610fec57600080fd5b50610ff5613156565b6040516110029190614ffd565b60405180910390f35b34801561101757600080fd5b50611032600480360381019061102d9190614acf565b613169565b005b34801561104057600080fd5b50611049613259565b6040516110569190614ffd565b60405180910390f35b6110676132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110eb90615155565b60405180910390fd5b6001600860006101000a81548160ff02191690831515021790555043600681905550565b60606003805461112790615501565b80601f016020809104026020016040519081016040528092919081815260200182805461115390615501565b80156111a05780601f10611175576101008083540402835291602001916111a0565b820191906000526020600020905b81548152906001019060200180831161118357829003601f168201915b5050505050905090565b6111b26132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123690615155565b60405180910390fd5b82601481905550816015819055508060168190555061127f60165461127160155460145461326c90919063ffffffff16565b61326c90919063ffffffff16565b601c81905550505050565b600061129e6112976132ca565b84846132d2565b6001905092915050565b6112b06132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133490615155565b60405180910390fd5b8060078190555050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60075481565b6000601e54905090565b6113ab6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142f90615155565b60405180910390fd5b82601181905550816012819055508060138190555061147860135461146a60125460115461326c90919063ffffffff16565b61326c90919063ffffffff16565b601b81905550505050565b61148b6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f90615155565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061158084848461349d565b506116428461158d6132ca565b61163d856040518060600160405280602881526020016159bf60289139600b60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006115f36132ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d289092919063ffffffff16565b6132d2565b600190509392505050565b6116556132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990615155565b60405180910390fd5b80602360176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006117626117517f000000000000000000000000000000000000000000000000000000000000dead612057565b601e54613d8c90919063ffffffff16565b905090565b61176f6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390615155565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900460ff16905090565b60006119006118646132ca565b846118fb85600b60006118756132ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326c90919063ffffffff16565b6132d2565b6001905092915050565b6119126132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690615155565b60405180910390fd5b8060218190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b602360159054906101000a900460ff1681565b6119e46132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890615155565b60405180910390fd5b80600860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b60175481565b600042905090565b60185481565b6000611af36132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7790615155565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611bcb57600080fd5b505afa158015611bdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c039190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6557600080fd5b505afa158015611c79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9d9190614a0f565b6040518363ffffffff1660e01b8152600401611cba929190614f73565b60206040518083038186803b158015611cd257600080fd5b505afa158015611ce6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0a9190614a0f565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ecb578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8757600080fd5b505afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf9190614a0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611e2157600080fd5b505afa158015611e35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e599190614a0f565b6040518363ffffffff1660e01b8152600401611e76929190614f73565b602060405180830381600087803b158015611e9057600080fd5b505af1158015611ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec89190614a0f565b91505b81602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6000600254905090565b60195481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601f5481565b60205481565b601c5481565b6120ba6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213e90615155565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b600e6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6121f96132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612286576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227d90615155565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a361dead6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60065481565b60606004805461235b90615501565b80601f016020809104026020016040519081016040528092919081815260200182805461238790615501565b80156123d45780601f106123a9576101008083540402835291602001916123d4565b820191906000526020600020905b8154815290600101906020018083116123b757829003601f168201915b5050505050905090565b6000602154905090565b601d5481565b60006124b16123fb6132ca565b846124ac856040518060600160405280602581526020016159e760259139600b60006124256132ca565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d289092919063ffffffff16565b6132d2565b6001905092915050565b6124c36132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790615155565b60405180910390fd5b80602360166101000a81548160ff02191690831515021790555050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f4906151d5565b60405180910390fd5b6002544211612641576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612638906151b5565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601a5481565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006127b16127aa6132ca565b848461349d565b506001905092915050565b6127c46132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284890615155565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6128b46132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293890615155565b60405180910390fd5b826018819055508160198190555080601a81905550612981601a5461297360195460185461326c90919063ffffffff16565b61326c90919063ffffffff16565b601d81905550505050565b60135481565b61299a6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e90615155565b60405180910390fd5b80602360156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051612a709190614ffd565b60405180910390a150565b60125481565b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b600d6020528060005260406000206000915054906101000a900460ff1681565b60165481565b600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602360169054906101000a900460ff1681565b60115481565b612b1a6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9e90615155565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508042612c55919061530a565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612d686132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dec90615155565b60405180910390fd5b80601f8190555050565b612e076132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e8b90615155565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601b5481565b612efd6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8190615155565b60405180910390fd5b8060208190555050565b612f9c6132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302090615155565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613099576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309090615095565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600860009054906101000a900460ff1681565b6131716132ca565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f590615155565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602360179054906101000a900460ff1681565b600080828461327b919061530a565b9050838110156132c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b7906150d5565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161333990615195565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a9906150b5565b60405180910390fd5b80600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161349091906151f5565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561350e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350590615175565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561357e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357590615055565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136225750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b613661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613658906150f5565b60405180910390fd5b602360149054906101000a900460ff161561368857613681848484613dd6565b9050613d21565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561372c5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561373a57506000601754115b1561378257600061376960175461375b606486613fa990919063ffffffff16565b613ff390919063ffffffff16565b905061377e8184613d8c90919063ffffffff16565b9250505b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138265750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561387157601f54821115613870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161386790615115565b60405180910390fd5b5b600061387c30612057565b9050600060215482101590508080156138a25750602360149054906101000a900460ff16155b80156138f85750600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156139105750602360159054906101000a900460ff165b1561393a57602360169054906101000a900460ff16156139305760215491505b6139398261406e565b5b6139c3846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d289092919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613aa95750600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613ab657849050613b8a565b600860009054906101000a900460ff16613b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613afc90615075565b60405180910390fd5b602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415613b7c57600754600654613b6b919061530a565b4311613b7b57613b7a8661425f565b5b5b613b8787878761430c565b90505b602360179054906101000a900460ff168015613bf05750600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c1f57602054613c1382613c0589612057565b61326c90919063ffffffff16565b1115613c1e57600080fd5b5b613c7181600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326c90919063ffffffff16565b600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d1191906151f5565b60405180910390a3600193505050505b9392505050565b6000838311158290613d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d679190615033565b60405180910390fd5b5060008385613d7f91906153eb565b9050809150509392505050565b6000613dce83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613d28565b905092915050565b6000613e61826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d289092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ef682600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326c90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f9691906151f5565b60405180910390a3600190509392505050565b6000613feb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614533565b905092915050565b6000808314156140065760009050614068565b600082846140149190615391565b90508284826140239190615360565b14614063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161405a90615135565b60405180910390fd5b809150505b92915050565b6001602360146101000a81548160ff02191690831515021790555060006140c760026140b9601d546140ab60185487613ff390919063ffffffff16565b613fa990919063ffffffff16565b613fa990919063ffffffff16565b905060006140de8284613d8c90919063ffffffff16565b90506140e981614596565b6000479050600061411a6141096002601854613fa990919063ffffffff16565b601d54613d8c90919063ffffffff16565b90506000614158600261414a8461413c60185488613ff390919063ffffffff16565b613fa990919063ffffffff16565b613fa990919063ffffffff16565b9050600061418383614175601a5487613ff390919063ffffffff16565b613fa990919063ffffffff16565b905060006141ac8261419e8588613d8c90919063ffffffff16565b613d8c90919063ffffffff16565b905060008111156141e4576141e3600860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614821565b5b600082111561421a57614219600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614821565b5b60008311801561422a5750600087115b1561423a57614239878461486c565b5b505050505050506000602360146101000a81548160ff02191690831515021790555050565b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16614309576001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b50565b60008060009050600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156143945761438d606461437f601b5486613ff390919063ffffffff16565b613fa990919063ffffffff16565b9050614412565b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156144115761440e6064614400601c5486613ff390919063ffffffff16565b613fa990919063ffffffff16565b90505b5b60008111156145165761446d81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326c90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161450d91906151f5565b60405180910390a35b6145298184613d8c90919063ffffffff16565b9150509392505050565b6000808311829061457a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145719190615033565b60405180910390fd5b50600083856145899190615360565b9050809150509392505050565b6000600267ffffffffffffffff8111156145b3576145b26155ef565b5b6040519080825280602002602001820160405280156145e15781602001602082028036833780820191505090505b50905030816000815181106145f9576145f86155c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561469b57600080fd5b505afa1580156146af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146d39190614a0f565b816001815181106146e7576146e66155c0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061474e30602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846132d2565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016147b2959493929190615240565b600060405180830381600087803b1580156147cc57600080fd5b505af11580156147e0573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051614815929190615210565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015614867573d6000803e3d6000fd5b505050565b61489930602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846132d2565b602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807f000000000000000000000000000000000000000000000000000000000000dead426040518863ffffffff1660e01b815260040161492096959493929190614f9c565b6060604051808303818588803b15801561493957600080fd5b505af115801561494d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906149729190614bfc565b5050505050565b60008135905061498881615979565b92915050565b60008151905061499d81615979565b92915050565b6000813590506149b281615990565b92915050565b6000813590506149c7816159a7565b92915050565b6000815190506149dc816159a7565b92915050565b6000602082840312156149f8576149f761561e565b5b6000614a0684828501614979565b91505092915050565b600060208284031215614a2557614a2461561e565b5b6000614a338482850161498e565b91505092915050565b60008060408385031215614a5357614a5261561e565b5b6000614a6185828601614979565b9250506020614a7285828601614979565b9150509250929050565b600080600060608486031215614a9557614a9461561e565b5b6000614aa386828701614979565b9350506020614ab486828701614979565b9250506040614ac5868287016149b8565b9150509250925092565b60008060408385031215614ae657614ae561561e565b5b6000614af485828601614979565b9250506020614b05858286016149a3565b9150509250929050565b60008060408385031215614b2657614b2561561e565b5b6000614b3485828601614979565b9250506020614b45858286016149b8565b9150509250929050565b600060208284031215614b6557614b6461561e565b5b6000614b73848285016149a3565b91505092915050565b600060208284031215614b9257614b9161561e565b5b6000614ba0848285016149b8565b91505092915050565b600080600060608486031215614bc257614bc161561e565b5b6000614bd0868287016149b8565b9350506020614be1868287016149b8565b9250506040614bf2868287016149b8565b9150509250925092565b600080600060608486031215614c1557614c1461561e565b5b6000614c23868287016149cd565b9350506020614c34868287016149cd565b9250506040614c45868287016149cd565b9150509250925092565b6000614c5b8383614c76565b60208301905092915050565b614c7081615431565b82525050565b614c7f8161541f565b82525050565b614c8e8161541f565b82525050565b6000614c9f826152c5565b614ca981856152e8565b9350614cb4836152b5565b8060005b83811015614ce5578151614ccc8882614c4f565b9750614cd7836152db565b925050600181019050614cb8565b5085935050505092915050565b614cfb81615443565b82525050565b614d0a81615486565b82525050565b614d1981615498565b82525050565b6000614d2a826152d0565b614d3481856152f9565b9350614d448185602086016154ce565b614d4d81615623565b840191505092915050565b6000614d656023836152f9565b9150614d7082615634565b604082019050919050565b6000614d88600d836152f9565b9150614d9382615683565b602082019050919050565b6000614dab6026836152f9565b9150614db6826156ac565b604082019050919050565b6000614dce6022836152f9565b9150614dd9826156fb565b604082019050919050565b6000614df1601b836152f9565b9150614dfc8261574a565b602082019050919050565b6000614e146010836152f9565b9150614e1f82615773565b602082019050919050565b6000614e376028836152f9565b9150614e428261579c565b604082019050919050565b6000614e5a6021836152f9565b9150614e65826157eb565b604082019050919050565b6000614e7d6020836152f9565b9150614e888261583a565b602082019050919050565b6000614ea06025836152f9565b9150614eab82615863565b604082019050919050565b6000614ec36024836152f9565b9150614ece826158b2565b604082019050919050565b6000614ee6601f836152f9565b9150614ef182615901565b602082019050919050565b6000614f096023836152f9565b9150614f148261592a565b604082019050919050565b614f288161546f565b82525050565b614f3781615479565b82525050565b6000602082019050614f526000830184614c85565b92915050565b6000602082019050614f6d6000830184614c67565b92915050565b6000604082019050614f886000830185614c85565b614f956020830184614c85565b9392505050565b600060c082019050614fb16000830189614c85565b614fbe6020830188614f1f565b614fcb6040830187614d10565b614fd86060830186614d10565b614fe56080830185614c85565b614ff260a0830184614f1f565b979650505050505050565b60006020820190506150126000830184614cf2565b92915050565b600060208201905061502d6000830184614d01565b92915050565b6000602082019050818103600083015261504d8184614d1f565b905092915050565b6000602082019050818103600083015261506e81614d58565b9050919050565b6000602082019050818103600083015261508e81614d7b565b9050919050565b600060208201905081810360008301526150ae81614d9e565b9050919050565b600060208201905081810360008301526150ce81614dc1565b9050919050565b600060208201905081810360008301526150ee81614de4565b9050919050565b6000602082019050818103600083015261510e81614e07565b9050919050565b6000602082019050818103600083015261512e81614e2a565b9050919050565b6000602082019050818103600083015261514e81614e4d565b9050919050565b6000602082019050818103600083015261516e81614e70565b9050919050565b6000602082019050818103600083015261518e81614e93565b9050919050565b600060208201905081810360008301526151ae81614eb6565b9050919050565b600060208201905081810360008301526151ce81614ed9565b9050919050565b600060208201905081810360008301526151ee81614efc565b9050919050565b600060208201905061520a6000830184614f1f565b92915050565b60006040820190506152256000830185614f1f565b81810360208301526152378184614c94565b90509392505050565b600060a0820190506152556000830188614f1f565b6152626020830187614d10565b81810360408301526152748186614c94565b90506152836060830185614c85565b6152906080830184614f1f565b9695505050505050565b60006020820190506152af6000830184614f2e565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006153158261546f565b91506153208361546f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561535557615354615533565b5b828201905092915050565b600061536b8261546f565b91506153768361546f565b92508261538657615385615562565b5b828204905092915050565b600061539c8261546f565b91506153a78361546f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153e0576153df615533565b5b828202905092915050565b60006153f68261546f565b91506154018361546f565b92508282101561541457615413615533565b5b828203905092915050565b600061542a8261544f565b9050919050565b600061543c8261544f565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000615491826154aa565b9050919050565b60006154a38261546f565b9050919050565b60006154b5826154bc565b9050919050565b60006154c78261544f565b9050919050565b60005b838110156154ec5780820151818401526020810190506154d1565b838111156154fb576000848401525b50505050565b6000600282049050600182168061551957607f821691505b6020821081141561552d5761552c615591565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f53776170206e6f74206f70656e00000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f62636c6973746564206164647265737300000000000000000000000000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b6159828161541f565b811461598d57600080fd5b50565b61599981615443565b81146159a457600080fd5b50565b6159b08161546f565b81146159bb57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122033cce540868c814215c174a5cb4b337a1a9630add81bb0f7fe3a6baae7a610c964736f6c63430008070033

Deployed Bytecode Sourcemap

15677:16321:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21359:108;;;;;;;;;;;;;:::i;:::-;;19551:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22235:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20845:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26106:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16141:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17574:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15948:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19828:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21894:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23198:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25541:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23077:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16258:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24183:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23730:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19737:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20214:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23451:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16650:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17689:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23583:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16479:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17015:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7199:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17058:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24457:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7097:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17099:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19936:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17384:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17444:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17223:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21475:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16884:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16595:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6457:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6682:155;;;;;;;;;;;;;:::i;:::-;;15916:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19642:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20717:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17268:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20440:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24046:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7535:305;;;;;;;;;;;;;:::i;:::-;;17141:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25862:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25366:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26197:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22588:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16841:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23867:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16798:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17622:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16927:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16536:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16971:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16014:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17736:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16756:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7297:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20063:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22958:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21751:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17179:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23341:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6845:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15980:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21612:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17788:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21359:108;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21416:4:::1;21405:8;;:15;;;;;;;;;;;;;;;;;;21447:12;21431:13;:28;;;;21359:108::o:0;19551:83::-;19588:13;19621:5;19614:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19551:83;:::o;22235:341::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22379:15:::1;22359:17;:35;;;;22425:15;22405:17;:35;;;;22466:10;22451:12;:25;;;;22510:58;22555:12;;22510:40;22532:17;;22510;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;22489:18;:79;;;;22235:341:::0;;;:::o;20845:161::-;20920:4;20937:39;20946:12;:10;:12::i;:::-;20960:7;20969:6;20937:8;:39::i;:::-;20994:4;20987:11;;20845:161;;;;:::o;26106:83::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26178:3:::1;26166:9;:15;;;;26106:83:::0;:::o;16141:94::-;;;;;;;;;;;;;:::o;17574:41::-;;;;;;;;;;;;;:::o;15948:25::-;;;;:::o;19828:100::-;19881:7;19908:12;;19901:19;;19828:100;:::o;21894:333::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22036:15:::1;22017:16;:34;;;;22081:15;22062:16;:34;;;;22121:10;22107:11;:24;;;;22164:55;22207:11;;22164:38;22185:16;;22164;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;22144:17;:75;;;;21894:333:::0;;;:::o;23198:135::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23319:6:::1;23289:19;:27;23309:6;23289:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23198:135:::0;;:::o;25541:313::-;25639:4;25656:36;25666:6;25674:9;25685:6;25656:9;:36::i;:::-;;25703:121;25712:6;25720:12;:10;:12::i;:::-;25734:89;25772:6;25734:89;;;;;;;;;;;;;;;;;:11;:19;25746:6;25734:19;;;;;;;;;;;;;;;:33;25754:12;:10;:12::i;:::-;25734:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25703:8;:121::i;:::-;25842:4;25835:11;;25541:313;;;;;:::o;23077:113::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23174:8:::1;23155:16;;:27;;;;;;;;;;;;;;;;;;23077:113:::0;:::o;16258:81::-;;;:::o;24183:128::-;24236:7;24263:40;24280:22;24290:11;24280:9;:22::i;:::-;24263:12;;:16;;:40;;;;:::i;:::-;24256:47;;24183:128;:::o;23730:129::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23840:10:::1;23812:17;;:39;;;;;;;;;;;;;;;;;;23730:129:::0;:::o;19737:83::-;19778:5;19803:9;;;;;;;;;;;19796:16;;19737:83;:::o;20214:218::-;20302:4;20319:83;20328:12;:10;:12::i;:::-;20342:7;20351:50;20390:10;20351:11;:25;20363:12;:10;:12::i;:::-;20351:25;;;;;;;;;;;;;;;:34;20377:7;20351:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20319:8;:83::i;:::-;20420:4;20413:11;;20214:218;;;;:::o;23451:124::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23559:8:::1;23533:23;:34;;;;23451:124:::0;:::o;16650:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;17689:40::-;;;;;;;;;;;;;:::o;23583:139::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23703:10:::1;23670:22;;:44;;;;;;;;;;;;;;;;;;23583:139:::0;:::o;16479:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;17015:34::-;;;;:::o;7199:90::-;7239:7;7266:15;7259:22;;7199:90;:::o;17058:34::-;;;;:::o;24457:807::-;24537:22;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24574:35:::1;24631:16;24574:74;;24697:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24679:53;;;24741:4;24748:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24679:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24662:110;;24814:1;24788:28;;:14;:28;;;24785:225;;;24902:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24884:74;;;24967:4;24974:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24884:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24867:131;;24785:225;25036:14;25022:11;;:28;;;;;;;;;;;;;;;;;;25102:16;25084:15;;:34;;;;;;;;;;;;;;;;;;25200:4;25156:19;:41;25184:11;;;;;;;;;;;25156:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;25252:4;25215:12;:34;25236:11;;;;;;;;;;;25215:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;24561:703;24457:807:::0;;;:::o;7097:90::-;7143:7;7170:9;;7163:16;;7097:90;:::o;17099:35::-;;;;:::o;19936:119::-;20002:7;20029:9;:18;20039:7;20029:18;;;;;;;;;;;;;;;;20022:25;;19936:119;;;:::o;17384:52::-;;;;:::o;17444:50::-;;;;:::o;17223:38::-;;;;:::o;21475:129::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21588:8:::1;21564:12;:21;21577:7;21564:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21475:129:::0;;:::o;16884:36::-;;;;:::o;16595:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;6457:79::-;6495:7;6522:6;;;;;;;;;;;6515:13;;6457:79;:::o;6682:155::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6786:6:::1;6749:45;;6770:6;::::0;::::1;;;;;;;;6749:45;;;;;;;;;;;;6822:6;6805;::::0;:24:::1;;;;;;;;;;;;;;;;;;6682:155::o:0;15916:25::-;;;;:::o;19642:87::-;19681:13;19714:7;19707:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19642:87;:::o;20717:120::-;20779:7;20806:23;;20799:30;;20717:120;:::o;17268:44::-;;;;:::o;20440:269::-;20533:4;20550:129;20559:12;:10;:12::i;:::-;20573:7;20582:96;20621:15;20582:96;;;;;;;;;;;;;;;;;:11;:25;20594:12;:10;:12::i;:::-;20582:25;;;;;;;;;;;;;;;:34;20608:7;20582:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;20550:8;:129::i;:::-;20697:4;20690:11;;20440:269;;;;:::o;24046:125::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24155:8:::1;24127:25;;:36;;;;;;;;;;;;;;;;;;24046:125:::0;:::o;7535:305::-;7605:10;7587:28;;:14;;;;;;;;;;;:28;;;7579:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7692:9;;7674:15;:27;7666:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7783:14;;;;;;;;;;;7754:44;;7775:6;;;;;;;;;;7754:44;;;;;;;;;;;;7818:14;;;;;;;;;;;7809:6;;:23;;;;;;;;;;;;;;;;;;7535:305::o;17141:29::-;;;;:::o;25862:107::-;25917:4;25941:11;:20;25953:7;25941:20;;;;;;;;;;;;;;;;;;;;;;;;;25934:27;;25862:107;;;:::o;25366:167::-;25444:4;25461:42;25471:12;:10;:12::i;:::-;25485:9;25496:6;25461:9;:42::i;:::-;;25521:4;25514:11;;25366:167;;;;:::o;26197:116::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26301:4:::1;26276:11;:22;26288:9;26276:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26197:116:::0;;:::o;22588:358::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22747:17:::1;22729:15;:35;;;;22793:17;22775:15;:35;;;;22834:12;22821:10;:25;;;;22886:52;22927:10;;22886:36;22906:15;;22886;;:19;;:36;;;;:::i;:::-;:40;;:52;;;;:::i;:::-;22859:24;:79;;;;22588:358:::0;;;:::o;16841:30::-;;;;:::o;23867:171::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23968:8:::1;23944:21;;:32;;;;;;;;;;;;;;;;;;23992:38;24021:8;23992:38;;;;;;:::i;:::-;;;;;;;;23867:171:::0;:::o;16798:36::-;;;;:::o;17622:26::-;;;;;;;;;;;;;:::o;16927:37::-;;;;:::o;16536:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;16971:31::-;;;;:::o;16014:99::-;;;;;;;;;;;;;:::o;17736:45::-;;;;;;;;;;;;;:::o;16756:35::-;;;;:::o;7297:226::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7378:6:::1;::::0;::::1;;;;;;;;7361:14;;:23;;;;;;;;;;;;;;;;;;7412:1;7395:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;7455:4;7437:15;:22;;;;:::i;:::-;7425:9;:34;;;;7512:1;7475:40;;7496:6;::::0;::::1;;;;;;;;7475:40;;;;;;;;;;;;7297:226:::0;:::o;20063:143::-;20144:7;20171:11;:18;20183:5;20171:18;;;;;;;;;;;;;;;:27;20190:7;20171:27;;;;;;;;;;;;;;;;20164:34;;20063:143;;;;:::o;22958:111::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23050:11:::1;23035:12;:26;;;;22958:111:::0;:::o;21751:135::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21870:8:::1;21841:17;:26;21859:7;21841:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;21751:135:::0;;:::o;17179:37::-;;;;:::o;23341:102::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23427:8:::1;23413:10;:22;;;;23341:102:::0;:::o;6845:244::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6954:1:::1;6934:22;;:8;:22;;;;6926:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7044:8;7015:38;;7036:6;::::0;::::1;;;;;;;;7015:38;;;;;;;;;;;;7073:8;7064:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6845:244:::0;:::o;15980:27::-;;;;;;;;;;;;;:::o;21612:127::-;6601:12;:10;:12::i;:::-;6591:22;;:6;;;;;;;;;;:22;;;6583:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21725:6:::1;21699:15;:23;21715:6;21699:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21612:127:::0;;:::o;17788:35::-;;;;;;;;;;;;;:::o;1827:181::-;1885:7;1905:9;1921:1;1917;:5;;;;:::i;:::-;1905:17;;1946:1;1941;:6;;1933:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1999:1;1992:8;;;1827:181;;;;:::o;759:115::-;812:15;855:10;840:26;;759:115;:::o;21014:337::-;21124:1;21107:19;;:5;:19;;;;21099:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21205:1;21186:21;;:7;:21;;;;21178:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21289:6;21259:11;:18;21271:5;21259:18;;;;;;;;;;;;;;;:27;21278:7;21259:27;;;;;;;;;;;;;;;:36;;;;21327:7;21311:32;;21320:5;21311:32;;;21336:6;21311:32;;;;;;:::i;:::-;;;;;;;;21014:337;;;:::o;26321:2441::-;26408:4;26453:1;26435:20;;:6;:20;;;;26427:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26537:1;26516:23;;:9;:23;;;;26508:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26599:11;:22;26611:9;26599:22;;;;;;;;;;;;;;;;;;;;;;;;;26598:23;:47;;;;;26626:11;:19;26638:6;26626:19;;;;;;;;;;;;;;;;;;;;;;;;;26625:20;26598:47;26590:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26682:16;;;;;;;;;;;26679:2076;;;26732:41;26747:6;26755:9;26766:6;26732:14;:41::i;:::-;26725:48;;;;26679:2076;26830:17;:25;26848:6;26830:25;;;;;;;;;;;;;;;;;;;;;;;;;26829:26;:59;;;;;26860:17;:28;26878:9;26860:28;;;;;;;;;;;;;;;;;;;;;;;;;26859:29;26829:59;:82;;;;;26910:1;26892:15;;:19;26829:82;26825:249;;;26932:26;26961:36;26981:15;;26961;26972:3;26961:6;:10;;:15;;;;:::i;:::-;:19;;:36;;;;:::i;:::-;26932:65;;27025:33;27036:21;27025:6;:10;;:33;;;;:::i;:::-;27016:42;;26913:161;26825:249;27094:15;:23;27110:6;27094:23;;;;;;;;;;;;;;;;;;;;;;;;;27093:24;:55;;;;;27122:15;:26;27138:9;27122:26;;;;;;;;;;;;;;;;;;;;;;;;;27121:27;27093:55;27090:170;;;27187:12;;27177:6;:22;;27169:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;27090:170;27316:28;27347:24;27365:4;27347:9;:24::i;:::-;27316:55;;27386:28;27441:23;;27417:20;:47;;27386:78;;27497:23;:44;;;;;27525:16;;;;;;;;;;;27524:17;27497:44;:69;;;;;27546:12;:20;27559:6;27546:20;;;;;;;;;;;;;;;;;;;;;;;;;27545:21;27497:69;:94;;;;;27570:21;;;;;;;;;;;27497:94;27493:305;;;27629:25;;;;;;;;;;;27626:97;;;27700:23;;27677:46;;27626:97;27742:36;27757:20;27742:14;:36::i;:::-;27493:305;27834:53;27856:6;27834:53;;;;;;;;;;;;;;;;;:9;:17;27844:6;27834:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;27814:9;:17;27824:6;27814:17;;;;;;;;;;;;;;;:73;;;;27902:19;27940:17;:25;27958:6;27940:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;27969:17;:28;27987:9;27969:28;;;;;;;;;;;;;;;;;;;;;;;;;27940:57;27936:479;;;28032:6;28018:20;;27936:479;;;28087:8;;;;;;;;;;;28079:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;28145:11;;;;;;;;;;;28135:21;;:6;:21;;;28132:201;;;28217:9;;28201:13;;:25;;;;:::i;:::-;28185:12;:41;28181:133;;28273:17;28280:9;28273:6;:17::i;:::-;28181:133;28132:201;28365:34;28373:6;28381:9;28392:6;28365:7;:34::i;:::-;28351:48;;27936:479;28434:16;;;;;;;;;;;:51;;;;;28455:19;:30;28475:9;28455:30;;;;;;;;;;;;;;;;;;;;;;;;;28454:31;28434:51;28431:133;;;28553:10;;28512:37;28537:11;28512:20;28522:9;28512;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;28504:60;;;;;;28431:133;28604:37;28629:11;28604:9;:20;28614:9;28604:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;28581:9;:20;28591:9;28581:20;;;;;;;;;;;;;;;:60;;;;28680:9;28663:40;;28672:6;28663:40;;;28691:11;28663:40;;;;;;:::i;:::-;;;;;;;;28725:4;28718:11;;;;;26321:2441;;;;;;:::o;2160:192::-;2246:7;2279:1;2274;:6;;2282:12;2266:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2306:9;2322:1;2318;:5;;;;:::i;:::-;2306:17;;2343:1;2336:8;;;2160:192;;;;;:::o;2016:136::-;2074:7;2101:43;2105:1;2108;2101:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2094:50;;2016:136;;;;:::o;28770:330::-;28863:4;28900:53;28922:6;28900:53;;;;;;;;;;;;;;;;;:9;:17;28910:6;28900:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;28880:9;:17;28890:6;28880:17;;;;;;;;;;;;;;;:73;;;;28987:32;29012:6;28987:9;:20;28997:9;28987:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;28964:9;:20;28974:9;28964:20;;;;;;;;;;;;;;;:55;;;;29052:9;29035:35;;29044:6;29035:35;;;29063:6;29035:35;;;;;;:::i;:::-;;;;;;;;29088:4;29081:11;;28770:330;;;;;:::o;2618:132::-;2676:7;2703:39;2707:1;2710;2703:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2696:46;;2618:132;;;;:::o;2360:250::-;2418:7;2447:1;2442;:6;2438:47;;;2472:1;2465:8;;;;2438:47;2497:9;2513:1;2509;:5;;;;:::i;:::-;2497:17;;2542:1;2537;2533;:5;;;;:::i;:::-;:10;2525:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2601:1;2594:8;;;2360:250;;;;;:::o;29108:1048::-;18265:4;18246:16;;:23;;;;;;;;;;;;;;;;;;29190:19:::1;29212:65;29275:1;29212:58;29245:24;;29212:28;29224:15;;29212:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;29190:87;;29288:21;29312:24;29324:11;29312:7;:11;;:24;;;;:::i;:::-;29288:48;;29349:31;29366:13;29349:16;:31::i;:::-;29391:22;29416:21;29391:46;;29450:19;29472:52;29501:22;29521:1;29501:15;;:19;;:22;;;;:::i;:::-;29472:24;;:28;;:52;;;;:::i;:::-;29450:74;;29545:26;29574:59;29631:1;29574:52;29614:11;29574:35;29593:15;;29574:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;29545:88;;29644:21;29668:47;29703:11;29668:30;29687:10;;29668:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;29644:71;;29726:26;29755:57;29798:13;29755:38;29774:18;29755:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;29726:86;;29849:1;29828:18;:22;29825:104;;;29865:64;29886:22;;;;;;;;;;;29910:18;29865:20;:64::i;:::-;29825:104;29961:1;29945:13;:17;29942:89;;;29977:54;29998:17;;;;;;;;;;;30017:13;29977:20;:54::i;:::-;29942:89;30068:1;30047:18;:22;:41;;;;;30087:1;30073:11;:15;30047:41;30044:104;;;30103:45;30116:11;30129:18;30103:12;:45::i;:::-;30044:104;29169:987;;;;;;;18311:5:::0;18292:16;;:24;;;;;;;;;;;;;;;;;;29108:1048;:::o;25977:121::-;26037:11;:22;26049:9;26037:22;;;;;;;;;;;;;;;;;;;;;;;;;26032:58;;26086:4;26061:11;:22;26073:9;26061:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;26032:58;25977:121;:::o;31367:622::-;31453:7;31483:17;31503:1;31483:21;;31528:12;:20;31541:6;31528:20;;;;;;;;;;;;;;;;;;;;;;;;;31525:223;;;31577:38;31611:3;31577:29;31588:17;;31577:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;31565:50;;31525:223;;;31645:12;:23;31658:9;31645:23;;;;;;;;;;;;;;;;;;;;;;;;;31642:106;;;31697:39;31732:3;31697:30;31708:18;;31697:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;31685:51;;31642:106;31525:223;31783:1;31771:9;:13;31768:173;;;31828:39;31857:9;31828;:24;31846:4;31828:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;31801:9;:24;31819:4;31801:24;;;;;;;;;;;;;;;:66;;;;31912:4;31887:42;;31896:6;31887:42;;;31919:9;31887:42;;;;;;:::i;:::-;;;;;;;;31768:173;31960:21;31971:9;31960:6;:10;;:21;;;;:::i;:::-;31953:28;;;31367:622;;;;;:::o;2758:278::-;2844:7;2876:1;2872;:5;2879:12;2864:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2903:9;2919:1;2915;:5;;;;:::i;:::-;2903:17;;3027:1;3020:8;;;2758:278;;;;;:::o;30168:666::-;30294:21;30332:1;30318:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30294:40;;30363:4;30345;30350:1;30345:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30389:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30379:4;30384:1;30379:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30424:62;30441:4;30456:15;;;;;;;;;;;30474:11;30424:8;:62::i;:::-;30525:15;;;;;;;;;;;:66;;;30606:11;30632:1;30676:4;30703;30739:15;30525:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30791:35;30808:11;30821:4;30791:35;;;;;;;:::i;:::-;;;;;;;;30223:611;30168:666;:::o;24319:126::-;24411:9;:18;;:26;24430:6;24411:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24319:126;;:::o;30842:517::-;30990:62;31007:4;31022:15;;;;;;;;;;;31040:11;30990:8;:62::i;:::-;31095:15;;;;;;;;;;;:31;;;31134:9;31167:4;31187:11;31213:1;31256;31299:11;31325:15;31095:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30842:517;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:468::-;2596:6;2604;2653:2;2641:9;2632:7;2628:23;2624:32;2621:119;;;2659:79;;:::i;:::-;2621:119;2779:1;2804:53;2849:7;2840:6;2829:9;2825:22;2804:53;:::i;:::-;2794:63;;2750:117;2906:2;2932:50;2974:7;2965:6;2954:9;2950:22;2932:50;:::i;:::-;2922:60;;2877:115;2531:468;;;;;:::o;3005:474::-;3073:6;3081;3130:2;3118:9;3109:7;3105:23;3101:32;3098:119;;;3136:79;;:::i;:::-;3098:119;3256:1;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3227:117;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;3005:474;;;;;:::o;3485:323::-;3541:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:119;;;3596:79;;:::i;:::-;3558:119;3716:1;3741:50;3783:7;3774:6;3763:9;3759:22;3741:50;:::i;:::-;3731:60;;3687:114;3485:323;;;;:::o;3814:329::-;3873:6;3922:2;3910:9;3901:7;3897:23;3893:32;3890:119;;;3928:79;;:::i;:::-;3890:119;4048:1;4073:53;4118:7;4109:6;4098:9;4094:22;4073:53;:::i;:::-;4063:63;;4019:117;3814:329;;;;:::o;4149:619::-;4226:6;4234;4242;4291:2;4279:9;4270:7;4266:23;4262:32;4259:119;;;4297:79;;:::i;:::-;4259:119;4417:1;4442:53;4487:7;4478:6;4467:9;4463:22;4442:53;:::i;:::-;4432:63;;4388:117;4544:2;4570:53;4615:7;4606:6;4595:9;4591:22;4570:53;:::i;:::-;4560:63;;4515:118;4672:2;4698:53;4743:7;4734:6;4723:9;4719:22;4698:53;:::i;:::-;4688:63;;4643:118;4149:619;;;;;:::o;4774:663::-;4862:6;4870;4878;4927:2;4915:9;4906:7;4902:23;4898:32;4895:119;;;4933:79;;:::i;:::-;4895:119;5053:1;5078:64;5134:7;5125:6;5114:9;5110:22;5078:64;:::i;:::-;5068:74;;5024:128;5191:2;5217:64;5273:7;5264:6;5253:9;5249:22;5217:64;:::i;:::-;5207:74;;5162:129;5330:2;5356:64;5412:7;5403:6;5392:9;5388:22;5356:64;:::i;:::-;5346:74;;5301:129;4774:663;;;;;:::o;5443:179::-;5512:10;5533:46;5575:3;5567:6;5533:46;:::i;:::-;5611:4;5606:3;5602:14;5588:28;;5443:179;;;;:::o;5628:142::-;5731:32;5757:5;5731:32;:::i;:::-;5726:3;5719:45;5628:142;;:::o;5776:108::-;5853:24;5871:5;5853:24;:::i;:::-;5848:3;5841:37;5776:108;;:::o;5890:118::-;5977:24;5995:5;5977:24;:::i;:::-;5972:3;5965:37;5890:118;;:::o;6044:732::-;6163:3;6192:54;6240:5;6192:54;:::i;:::-;6262:86;6341:6;6336:3;6262:86;:::i;:::-;6255:93;;6372:56;6422:5;6372:56;:::i;:::-;6451:7;6482:1;6467:284;6492:6;6489:1;6486:13;6467:284;;;6568:6;6562:13;6595:63;6654:3;6639:13;6595:63;:::i;:::-;6588:70;;6681:60;6734:6;6681:60;:::i;:::-;6671:70;;6527:224;6514:1;6511;6507:9;6502:14;;6467:284;;;6471:14;6767:3;6760:10;;6168:608;;;6044:732;;;;:::o;6782:109::-;6863:21;6878:5;6863:21;:::i;:::-;6858:3;6851:34;6782:109;;:::o;6897:185::-;7011:64;7069:5;7011:64;:::i;:::-;7006:3;6999:77;6897:185;;:::o;7088:147::-;7183:45;7222:5;7183:45;:::i;:::-;7178:3;7171:58;7088:147;;:::o;7241:364::-;7329:3;7357:39;7390:5;7357:39;:::i;:::-;7412:71;7476:6;7471:3;7412:71;:::i;:::-;7405:78;;7492:52;7537:6;7532:3;7525:4;7518:5;7514:16;7492:52;:::i;:::-;7569:29;7591:6;7569:29;:::i;:::-;7564:3;7560:39;7553:46;;7333:272;7241:364;;;;:::o;7611:366::-;7753:3;7774:67;7838:2;7833:3;7774:67;:::i;:::-;7767:74;;7850:93;7939:3;7850:93;:::i;:::-;7968:2;7963:3;7959:12;7952:19;;7611:366;;;:::o;7983:::-;8125:3;8146:67;8210:2;8205:3;8146:67;:::i;:::-;8139:74;;8222:93;8311:3;8222:93;:::i;:::-;8340:2;8335:3;8331:12;8324:19;;7983:366;;;:::o;8355:::-;8497:3;8518:67;8582:2;8577:3;8518:67;:::i;:::-;8511:74;;8594:93;8683:3;8594:93;:::i;:::-;8712:2;8707:3;8703:12;8696:19;;8355:366;;;:::o;8727:::-;8869:3;8890:67;8954:2;8949:3;8890:67;:::i;:::-;8883:74;;8966:93;9055:3;8966:93;:::i;:::-;9084:2;9079:3;9075:12;9068:19;;8727:366;;;:::o;9099:::-;9241:3;9262:67;9326:2;9321:3;9262:67;:::i;:::-;9255:74;;9338:93;9427:3;9338:93;:::i;:::-;9456:2;9451:3;9447:12;9440:19;;9099:366;;;:::o;9471:::-;9613:3;9634:67;9698:2;9693:3;9634:67;:::i;:::-;9627:74;;9710:93;9799:3;9710:93;:::i;:::-;9828:2;9823:3;9819:12;9812:19;;9471:366;;;:::o;9843:::-;9985:3;10006:67;10070:2;10065:3;10006:67;:::i;:::-;9999:74;;10082:93;10171:3;10082:93;:::i;:::-;10200:2;10195:3;10191:12;10184:19;;9843:366;;;:::o;10215:::-;10357:3;10378:67;10442:2;10437:3;10378:67;:::i;:::-;10371:74;;10454:93;10543:3;10454:93;:::i;:::-;10572:2;10567:3;10563:12;10556:19;;10215:366;;;:::o;10587:::-;10729:3;10750:67;10814:2;10809:3;10750:67;:::i;:::-;10743:74;;10826:93;10915:3;10826:93;:::i;:::-;10944:2;10939:3;10935:12;10928:19;;10587:366;;;:::o;10959:::-;11101:3;11122:67;11186:2;11181:3;11122:67;:::i;:::-;11115:74;;11198:93;11287:3;11198:93;:::i;:::-;11316:2;11311:3;11307:12;11300:19;;10959:366;;;:::o;11331:::-;11473:3;11494:67;11558:2;11553:3;11494:67;:::i;:::-;11487:74;;11570:93;11659:3;11570:93;:::i;:::-;11688:2;11683:3;11679:12;11672:19;;11331:366;;;:::o;11703:::-;11845:3;11866:67;11930:2;11925:3;11866:67;:::i;:::-;11859:74;;11942:93;12031:3;11942:93;:::i;:::-;12060:2;12055:3;12051:12;12044:19;;11703:366;;;:::o;12075:::-;12217:3;12238:67;12302:2;12297:3;12238:67;:::i;:::-;12231:74;;12314:93;12403:3;12314:93;:::i;:::-;12432:2;12427:3;12423:12;12416:19;;12075:366;;;:::o;12447:118::-;12534:24;12552:5;12534:24;:::i;:::-;12529:3;12522:37;12447:118;;:::o;12571:112::-;12654:22;12670:5;12654:22;:::i;:::-;12649:3;12642:35;12571:112;;:::o;12689:222::-;12782:4;12820:2;12809:9;12805:18;12797:26;;12833:71;12901:1;12890:9;12886:17;12877:6;12833:71;:::i;:::-;12689:222;;;;:::o;12917:254::-;13026:4;13064:2;13053:9;13049:18;13041:26;;13077:87;13161:1;13150:9;13146:17;13137:6;13077:87;:::i;:::-;12917:254;;;;:::o;13177:332::-;13298:4;13336:2;13325:9;13321:18;13313:26;;13349:71;13417:1;13406:9;13402:17;13393:6;13349:71;:::i;:::-;13430:72;13498:2;13487:9;13483:18;13474:6;13430:72;:::i;:::-;13177:332;;;;;:::o;13515:807::-;13764:4;13802:3;13791:9;13787:19;13779:27;;13816:71;13884:1;13873:9;13869:17;13860:6;13816:71;:::i;:::-;13897:72;13965:2;13954:9;13950:18;13941:6;13897:72;:::i;:::-;13979:80;14055:2;14044:9;14040:18;14031:6;13979:80;:::i;:::-;14069;14145:2;14134:9;14130:18;14121:6;14069:80;:::i;:::-;14159:73;14227:3;14216:9;14212:19;14203:6;14159:73;:::i;:::-;14242;14310:3;14299:9;14295:19;14286:6;14242:73;:::i;:::-;13515:807;;;;;;;;;:::o;14328:210::-;14415:4;14453:2;14442:9;14438:18;14430:26;;14466:65;14528:1;14517:9;14513:17;14504:6;14466:65;:::i;:::-;14328:210;;;;:::o;14544:276::-;14664:4;14702:2;14691:9;14687:18;14679:26;;14715:98;14810:1;14799:9;14795:17;14786:6;14715:98;:::i;:::-;14544:276;;;;:::o;14826:313::-;14939:4;14977:2;14966:9;14962:18;14954:26;;15026:9;15020:4;15016:20;15012:1;15001:9;14997:17;14990:47;15054:78;15127:4;15118:6;15054:78;:::i;:::-;15046:86;;14826:313;;;;:::o;15145:419::-;15311:4;15349:2;15338:9;15334:18;15326:26;;15398:9;15392:4;15388:20;15384:1;15373:9;15369:17;15362:47;15426:131;15552:4;15426:131;:::i;:::-;15418:139;;15145:419;;;:::o;15570:::-;15736:4;15774:2;15763:9;15759:18;15751:26;;15823:9;15817:4;15813:20;15809:1;15798:9;15794:17;15787:47;15851:131;15977:4;15851:131;:::i;:::-;15843:139;;15570:419;;;:::o;15995:::-;16161:4;16199:2;16188:9;16184:18;16176:26;;16248:9;16242:4;16238:20;16234:1;16223:9;16219:17;16212:47;16276:131;16402:4;16276:131;:::i;:::-;16268:139;;15995:419;;;:::o;16420:::-;16586:4;16624:2;16613:9;16609:18;16601:26;;16673:9;16667:4;16663:20;16659:1;16648:9;16644:17;16637:47;16701:131;16827:4;16701:131;:::i;:::-;16693:139;;16420:419;;;:::o;16845:::-;17011:4;17049:2;17038:9;17034:18;17026:26;;17098:9;17092:4;17088:20;17084:1;17073:9;17069:17;17062:47;17126:131;17252:4;17126:131;:::i;:::-;17118:139;;16845:419;;;:::o;17270:::-;17436:4;17474:2;17463:9;17459:18;17451:26;;17523:9;17517:4;17513:20;17509:1;17498:9;17494:17;17487:47;17551:131;17677:4;17551:131;:::i;:::-;17543:139;;17270:419;;;:::o;17695:::-;17861:4;17899:2;17888:9;17884:18;17876:26;;17948:9;17942:4;17938:20;17934:1;17923:9;17919:17;17912:47;17976:131;18102:4;17976:131;:::i;:::-;17968:139;;17695:419;;;:::o;18120:::-;18286:4;18324:2;18313:9;18309:18;18301:26;;18373:9;18367:4;18363:20;18359:1;18348:9;18344:17;18337:47;18401:131;18527:4;18401:131;:::i;:::-;18393:139;;18120:419;;;:::o;18545:::-;18711:4;18749:2;18738:9;18734:18;18726:26;;18798:9;18792:4;18788:20;18784:1;18773:9;18769:17;18762:47;18826:131;18952:4;18826:131;:::i;:::-;18818:139;;18545:419;;;:::o;18970:::-;19136:4;19174:2;19163:9;19159:18;19151:26;;19223:9;19217:4;19213:20;19209:1;19198:9;19194:17;19187:47;19251:131;19377:4;19251:131;:::i;:::-;19243:139;;18970:419;;;:::o;19395:::-;19561:4;19599:2;19588:9;19584:18;19576:26;;19648:9;19642:4;19638:20;19634:1;19623:9;19619:17;19612:47;19676:131;19802:4;19676:131;:::i;:::-;19668:139;;19395:419;;;:::o;19820:::-;19986:4;20024:2;20013:9;20009:18;20001:26;;20073:9;20067:4;20063:20;20059:1;20048:9;20044:17;20037:47;20101:131;20227:4;20101:131;:::i;:::-;20093:139;;19820:419;;;:::o;20245:::-;20411:4;20449:2;20438:9;20434:18;20426:26;;20498:9;20492:4;20488:20;20484:1;20473:9;20469:17;20462:47;20526:131;20652:4;20526:131;:::i;:::-;20518:139;;20245:419;;;:::o;20670:222::-;20763:4;20801:2;20790:9;20786:18;20778:26;;20814:71;20882:1;20871:9;20867:17;20858:6;20814:71;:::i;:::-;20670:222;;;;:::o;20898:483::-;21069:4;21107:2;21096:9;21092:18;21084:26;;21120:71;21188:1;21177:9;21173:17;21164:6;21120:71;:::i;:::-;21238:9;21232:4;21228:20;21223:2;21212:9;21208:18;21201:48;21266:108;21369:4;21360:6;21266:108;:::i;:::-;21258:116;;20898:483;;;;;:::o;21387:831::-;21650:4;21688:3;21677:9;21673:19;21665:27;;21702:71;21770:1;21759:9;21755:17;21746:6;21702:71;:::i;:::-;21783:80;21859:2;21848:9;21844:18;21835:6;21783:80;:::i;:::-;21910:9;21904:4;21900:20;21895:2;21884:9;21880:18;21873:48;21938:108;22041:4;22032:6;21938:108;:::i;:::-;21930:116;;22056:72;22124:2;22113:9;22109:18;22100:6;22056:72;:::i;:::-;22138:73;22206:3;22195:9;22191:19;22182:6;22138:73;:::i;:::-;21387:831;;;;;;;;:::o;22224:214::-;22313:4;22351:2;22340:9;22336:18;22328:26;;22364:67;22428:1;22417:9;22413:17;22404:6;22364:67;:::i;:::-;22224:214;;;;:::o;22525:132::-;22592:4;22615:3;22607:11;;22645:4;22640:3;22636:14;22628:22;;22525:132;;;:::o;22663:114::-;22730:6;22764:5;22758:12;22748:22;;22663:114;;;:::o;22783:99::-;22835:6;22869:5;22863:12;22853:22;;22783:99;;;:::o;22888:113::-;22958:4;22990;22985:3;22981:14;22973:22;;22888:113;;;:::o;23007:184::-;23106:11;23140:6;23135:3;23128:19;23180:4;23175:3;23171:14;23156:29;;23007:184;;;;:::o;23197:169::-;23281:11;23315:6;23310:3;23303:19;23355:4;23350:3;23346:14;23331:29;;23197:169;;;;:::o;23372:305::-;23412:3;23431:20;23449:1;23431:20;:::i;:::-;23426:25;;23465:20;23483:1;23465:20;:::i;:::-;23460:25;;23619:1;23551:66;23547:74;23544:1;23541:81;23538:107;;;23625:18;;:::i;:::-;23538:107;23669:1;23666;23662:9;23655:16;;23372:305;;;;:::o;23683:185::-;23723:1;23740:20;23758:1;23740:20;:::i;:::-;23735:25;;23774:20;23792:1;23774:20;:::i;:::-;23769:25;;23813:1;23803:35;;23818:18;;:::i;:::-;23803:35;23860:1;23857;23853:9;23848:14;;23683:185;;;;:::o;23874:348::-;23914:7;23937:20;23955:1;23937:20;:::i;:::-;23932:25;;23971:20;23989:1;23971:20;:::i;:::-;23966:25;;24159:1;24091:66;24087:74;24084:1;24081:81;24076:1;24069:9;24062:17;24058:105;24055:131;;;24166:18;;:::i;:::-;24055:131;24214:1;24211;24207:9;24196:20;;23874:348;;;;:::o;24228:191::-;24268:4;24288:20;24306:1;24288:20;:::i;:::-;24283:25;;24322:20;24340:1;24322:20;:::i;:::-;24317:25;;24361:1;24358;24355:8;24352:34;;;24366:18;;:::i;:::-;24352:34;24411:1;24408;24404:9;24396:17;;24228:191;;;;:::o;24425:96::-;24462:7;24491:24;24509:5;24491:24;:::i;:::-;24480:35;;24425:96;;;:::o;24527:104::-;24572:7;24601:24;24619:5;24601:24;:::i;:::-;24590:35;;24527:104;;;:::o;24637:90::-;24671:7;24714:5;24707:13;24700:21;24689:32;;24637:90;;;:::o;24733:126::-;24770:7;24810:42;24803:5;24799:54;24788:65;;24733:126;;;:::o;24865:77::-;24902:7;24931:5;24920:16;;24865:77;;;:::o;24948:86::-;24983:7;25023:4;25016:5;25012:16;25001:27;;24948:86;;;:::o;25040:153::-;25117:9;25150:37;25181:5;25150:37;:::i;:::-;25137:50;;25040:153;;;:::o;25199:121::-;25257:9;25290:24;25308:5;25290:24;:::i;:::-;25277:37;;25199:121;;;:::o;25326:126::-;25376:9;25409:37;25440:5;25409:37;:::i;:::-;25396:50;;25326:126;;;:::o;25458:113::-;25508:9;25541:24;25559:5;25541:24;:::i;:::-;25528:37;;25458:113;;;:::o;25577:307::-;25645:1;25655:113;25669:6;25666:1;25663:13;25655:113;;;25754:1;25749:3;25745:11;25739:18;25735:1;25730:3;25726:11;25719:39;25691:2;25688:1;25684:10;25679:15;;25655:113;;;25786:6;25783:1;25780:13;25777:101;;;25866:1;25857:6;25852:3;25848:16;25841:27;25777:101;25626:258;25577:307;;;:::o;25890:320::-;25934:6;25971:1;25965:4;25961:12;25951:22;;26018:1;26012:4;26008:12;26039:18;26029:81;;26095:4;26087:6;26083:17;26073:27;;26029:81;26157:2;26149:6;26146:14;26126:18;26123:38;26120:84;;;26176:18;;:::i;:::-;26120:84;25941:269;25890:320;;;:::o;26216:180::-;26264:77;26261:1;26254:88;26361:4;26358:1;26351:15;26385:4;26382:1;26375:15;26402:180;26450:77;26447:1;26440:88;26547:4;26544:1;26537:15;26571:4;26568:1;26561:15;26588:180;26636:77;26633:1;26626:88;26733:4;26730:1;26723:15;26757:4;26754:1;26747:15;26774:180;26822:77;26819:1;26812:88;26919:4;26916:1;26909:15;26943:4;26940:1;26933:15;26960:180;27008:77;27005:1;26998:88;27105:4;27102:1;27095:15;27129:4;27126:1;27119:15;27269:117;27378:1;27375;27368:12;27392:102;27433:6;27484:2;27480:7;27475:2;27468:5;27464:14;27460:28;27450:38;;27392:102;;;:::o;27500:222::-;27640:34;27636:1;27628:6;27624:14;27617:58;27709:5;27704:2;27696:6;27692:15;27685:30;27500:222;:::o;27728:163::-;27868:15;27864:1;27856:6;27852:14;27845:39;27728:163;:::o;27897:225::-;28037:34;28033:1;28025:6;28021:14;28014:58;28106:8;28101:2;28093:6;28089:15;28082:33;27897:225;:::o;28128:221::-;28268:34;28264:1;28256:6;28252:14;28245:58;28337:4;28332:2;28324:6;28320:15;28313:29;28128:221;:::o;28355:177::-;28495:29;28491:1;28483:6;28479:14;28472:53;28355:177;:::o;28538:166::-;28678:18;28674:1;28666:6;28662:14;28655:42;28538:166;:::o;28710:227::-;28850:34;28846:1;28838:6;28834:14;28827:58;28919:10;28914:2;28906:6;28902:15;28895:35;28710:227;:::o;28943:220::-;29083:34;29079:1;29071:6;29067:14;29060:58;29152:3;29147:2;29139:6;29135:15;29128:28;28943:220;:::o;29169:182::-;29309:34;29305:1;29297:6;29293:14;29286:58;29169:182;:::o;29357:224::-;29497:34;29493:1;29485:6;29481:14;29474:58;29566:7;29561:2;29553:6;29549:15;29542:32;29357:224;:::o;29587:223::-;29727:34;29723:1;29715:6;29711:14;29704:58;29796:6;29791:2;29783:6;29779:15;29772:31;29587:223;:::o;29816:181::-;29956:33;29952:1;29944:6;29940:14;29933:57;29816:181;:::o;30003:222::-;30143:34;30139:1;30131:6;30127:14;30120:58;30212:5;30207:2;30199:6;30195:15;30188:30;30003:222;:::o;30231:122::-;30304:24;30322:5;30304:24;:::i;:::-;30297:5;30294:35;30284:63;;30343:1;30340;30333:12;30284:63;30231:122;:::o;30359:116::-;30429:21;30444:5;30429:21;:::i;:::-;30422:5;30419:32;30409:60;;30465:1;30462;30455:12;30409:60;30359:116;:::o;30481:122::-;30554:24;30572:5;30554:24;:::i;:::-;30547:5;30544:35;30534:63;;30593:1;30590;30583:12;30534:63;30481:122;:::o

Swarm Source

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