ETH Price: $3,916.28 (+6.72%)

Token

GEMTOOLS (GEMS)
 

Overview

Max Total Supply

100,000,000 GEMS

Holders

213 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
yangyangyang.eth
Balance
493,179.584357873 GEMS

Value
$0.00
0xeaf7814cdf7236bc5992d19cc455f9c92b00aa9e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Your chart viewer with multiple network, the first DEX viewer with revenue sharing.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GEMTOOLS

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-06
*/

/**

Website     : https://gemtools.io/
Telegram    : https://t.me/GemtoolsOfficial
Twitter     : http://x.com/gemtoolsdex

*/

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

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) {
        
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        
        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;
    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 transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract GEMTOOLS is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "GEMTOOLS";
    string private _symbol = "GEMS";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress =
        payable(0x0D701aE496eB055DF8BE674016846c63e6A458dE);
    address payable public rndWalletAddress =
        payable(0xdDDc5BC5aF1d951405E7C0c35EBc8eA8dE9D0504);
    address public immutable deadAddress =
        0x000000000000000000000000000000000000dEaD;

    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) public isExcludedFromFee;
    mapping(address => bool) public isWalletLimitExempt;
    mapping(address => bool) public isTxLimitExempt;
    mapping(address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 15;
    uint256 public _buyRndFee = 15;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 15;
    uint256 public _sellRndFee = 15;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 5;
    uint256 public _rndShare = 5;

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

    uint256 private _totalSupply    = 100000000* 10**_decimals;
    uint256 public _maxTxAmount     = 1000000 * 10**_decimals;
    uint256 public _walletMax       = 2000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 1000000 * 10**_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(
            _buyRndFee
        );
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellRndFee
        );
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _rndShare
        );

        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 setMarketPairStatus(address account, bool newValue)
        public
        onlyOwner
    {
        isMarketPair[account] = newValue;
    }

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

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

    function GemtoolsSetFee(
        uint256 newBuyLiquidityTax,
        uint256 newBuyMarketingTax,
        uint256 newBuyRndTax,

        uint256 newSellLiquidityTax,
        uint256 newSellMarketingTax,
        uint256 newSellRndTax
    ) external onlyOwner {
        _buyLiquidityFee = newBuyLiquidityTax;
        _buyMarketingFee = newBuyMarketingTax;
        _buyRndFee = newBuyRndTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(
            _buyRndFee
        );

        _sellLiquidityFee = newSellLiquidityTax;
        _sellMarketingFee = newSellMarketingTax;
        _sellRndFee = newSellRndTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellRndFee
        );
    }

    function setDistributionSettings(
        uint256 newLiquidityShare,
        uint256 newMarketingShare,
        uint256 newRndShare
    ) external onlyOwner {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _rndShare = newRndShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _rndShare
        );
    }

    function GemtoolsSetMax(uint256 maxTxAmount, uint256 MaxLimit) external onlyOwner {
        _maxTxAmount = maxTxAmount;
        _walletMax = MaxLimit;
    }

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

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

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

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

    function GemtoolsRndWallet(address newAddress) external onlyOwner {
        rndWalletAddress = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function GemtoolsTransferTokenBalance(address _token, address _to, uint _value) external onlyOwner returns(bool _sent){
        if(_value == 0) {
            _value = IERC20(_token).balanceOf(address(this));
        } else {
            _sent = IERC20(_token).transfer(_to, _value);
        }
    }
    function GemtoolsSwapBalance() external onlyOwner {
        uint balance = address(this).balance;
        payable(owner()).transfer(balance);
    }

    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 _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) private returns (bool) {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

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

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >=
                minimumTokensBeforeSwap;

            if (
                overMinimumTokenBalance &&
                !inSwapAndLiquify &&
                !isMarketPair[sender] &&
                swapAndLiquifyEnabled
            ) {
                if (swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);
            }

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

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

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

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

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

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

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

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

        uint256 totalETHFee = _totalDistributionShares.sub(
            _liquidityShare.div(2)
        );

        uint256 amountETHLiquidity = amountReceived
            .mul(_liquidityShare)
            .div(totalETHFee)
            .div(2);
        uint256 amountETHRnd = amountReceived.mul(_rndShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(
            amountETHRnd
        );

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

        if (amountETHRnd > 0)
            transferToAddressETH(rndWalletAddress, amountETHRnd);

        if (amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }

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

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

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

        emit SwapTokensForETH(tokenAmount, path);
    }

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

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

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeAmount = 0;

        if (isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        } else if (isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

        if (feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"GemtoolsExcludeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"GemtoolsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"GemtoolsExludeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"GemtoolsMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"GemtoolsRndWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newBuyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newBuyRndTax","type":"uint256"},{"internalType":"uint256","name":"newSellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newSellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newSellRndTax","type":"uint256"}],"name":"GemtoolsSetFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"MaxLimit","type":"uint256"}],"name":"GemtoolsSetMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"GemtoolsSwapBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"GemtoolsTransferTokenBalance","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"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":"_buyRndFee","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":"_rndShare","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":"_sellRndFee","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rndWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newRndShare","type":"uint256"}],"name":"setDistributionSettings","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":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","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":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600881526020017f47454d544f4f4c53000000000000000000000000000000000000000000000000815250600290816200004a919062000e12565b506040518060400160405280600481526020017f47454d53000000000000000000000000000000000000000000000000000000008152506003908162000091919062000e12565b506009600460006101000a81548160ff021916908360ff160217905550730d701ae496eb055df8be674016846c63e6a458de600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073dddc5bc5af1d951405e7c0c35ebc8ea8de9d0504600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c55600f600d55600f600e556000600f55600f601055600f601155600060125560056013556005601455601e601555601e601655600a601755600460009054906101000a900460ff16600a620001e7919062001089565b6305f5e100620001f89190620010da565b601855600460009054906101000a900460ff16600a62000219919062001089565b620f4240620002299190620010da565b601955600460009054906101000a900460ff16600a6200024a919062001089565b621e84806200025a9190620010da565b601a55600460009054906101000a900460ff16600a6200027b919062001089565b620f42406200028b9190620010da565b601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002ec57600080fd5b506000620002ff62000b0460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042891906200118f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b691906200118f565b6040518363ffffffff1660e01b8152600401620004d5929190620011d2565b6020604051808303816000875af1158015620004f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051b91906200118f565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860006200065762000b0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000739600e5462000725600d54600c5462000b3560201b620029621790919060201c565b62000b3560201b620029621790919060201c565b6015819055506200077860115462000764601054600f5462000b3560201b620029621790919060201c565b62000b3560201b620029621790919060201c565b601681905550620007b7601454620007a360135460125462000b3560201b620029621790919060201c565b62000b3560201b620029621790919060201c565b601781905550600160096000620007d362000b0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60006200090c62000b0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546006600062000a4662000b0460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a9462000b0460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000af5919062001210565b60405180910390a350620012eb565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000b4691906200122d565b90508381101562000b8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8590620012c9565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c1a57607f821691505b60208210810362000c305762000c2f62000bd2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c9a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c5b565b62000ca6868362000c5b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cf362000ced62000ce78462000cbe565b62000cc8565b62000cbe565b9050919050565b6000819050919050565b62000d0f8362000cd2565b62000d2762000d1e8262000cfa565b84845462000c68565b825550505050565b600090565b62000d3e62000d2f565b62000d4b81848462000d04565b505050565b5b8181101562000d735762000d6760008262000d34565b60018101905062000d51565b5050565b601f82111562000dc25762000d8c8162000c36565b62000d978462000c4b565b8101602085101562000da7578190505b62000dbf62000db68562000c4b565b83018262000d50565b50505b505050565b600082821c905092915050565b600062000de76000198460080262000dc7565b1980831691505092915050565b600062000e02838362000dd4565b9150826002028217905092915050565b62000e1d8262000b98565b67ffffffffffffffff81111562000e395762000e3862000ba3565b5b62000e45825462000c01565b62000e5282828562000d77565b600060209050601f83116001811462000e8a576000841562000e75578287015190505b62000e81858262000df4565b86555062000ef1565b601f19841662000e9a8662000c36565b60005b8281101562000ec45784890151825560018201915060208501945060208101905062000e9d565b8683101562000ee4578489015162000ee0601f89168262000dd4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f875780860481111562000f5f5762000f5e62000ef9565b5b600185161562000f6f5780820291505b808102905062000f7f8562000f28565b945062000f3f565b94509492505050565b60008262000fa2576001905062001075565b8162000fb2576000905062001075565b816001811462000fcb576002811462000fd6576200100c565b600191505062001075565b60ff84111562000feb5762000fea62000ef9565b5b8360020a91508482111562001005576200100462000ef9565b5b5062001075565b5060208310610133831016604e8410600b8410161715620010465782820a90508381111562001040576200103f62000ef9565b5b62001075565b62001055848484600162000f35565b925090508184048111156200106f576200106e62000ef9565b5b81810290505b9392505050565b600060ff82169050919050565b6000620010968262000cbe565b9150620010a3836200107c565b9250620010d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f90565b905092915050565b6000620010e78262000cbe565b9150620010f48362000cbe565b9250828202620011048162000cbe565b915082820484148315176200111e576200111d62000ef9565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001157826200112a565b9050919050565b62001169816200114a565b81146200117557600080fd5b50565b60008151905062001189816200115e565b92915050565b600060208284031215620011a857620011a762001125565b5b6000620011b88482850162001178565b91505092915050565b620011cc816200114a565b82525050565b6000604082019050620011e96000830185620011c1565b620011f86020830184620011c1565b9392505050565b6200120a8162000cbe565b82525050565b6000602082019050620012276000830184620011ff565b92915050565b60006200123a8262000cbe565b9150620012478362000cbe565b925082820190508082111562001262576200126162000ef9565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012b1601b8362001268565b9150620012be8262001279565b602082019050919050565b60006020820190508181036000830152620012e481620012a2565b9050919050565b608051614d276200130e6000396000818161116801526111940152614d276000f3fe6080604052600436106103855760003560e01c80638b42507f116101d1578063c53a7cca11610102578063c867d60b116100a0578063dd62ed3e1161006f578063dd62ed3e14610d4d578063f0cd1dac14610d8a578063f2fde38b14610db5578063f872858a14610dde5761038c565b8063c867d60b14610c8f578063d158272d14610ccc578063da00097d14610cf7578063dc44b6a014610d225761038c565b8063c7484c9f116100dc578063c7484c9f14610be7578063c75c948214610c10578063c816841b14610c39578063c860795214610c645761038c565b8063c53a7cca14610b68578063c5d2418914610b91578063c6b2d7b614610bbc5761038c565b8063a457c2d71161016f578063b5a2098c11610149578063b5a2098c14610ab0578063bee6179a14610ad9578063c2d4640e14610b16578063c49b9a8014610b3f5761038c565b8063a457c2d714610a0d578063a5d69d1f14610a4a578063a9059cbb14610a735761038c565b80639c796cb9116101ab5780639c796cb9146109635780639f99e9bd1461098c578063a073d37f146109b7578063a08e671f146109e25761038c565b80638b42507f146108d05780638da5cb5b1461090d57806395d89b41146109385761038c565b80633ecad271116102b65780635881f3ef11610254578063807c2d9c11610223578063807c2d9c1461082657806382eefb4314610851578063844d591c1461087c57806388790a68146108a55761038c565b80635881f3ef1461075657806361a23c691461079357806370a08231146107be5780637d1db4a5146107fb5761038c565b806352c658971161029057806352c658971461069a5780635342acb4146106c3578063557ed1ba1461070057806357a5802f1461072b5761038c565b80633ecad271146106075780634428f105146106445780634a74bb021461066f5761038c565b80632563ae8311610323578063313ce567116102fd578063313ce5671461054d57806339509351146105785780633b97084a146105b55780633e9177e8146105de5761038c565b80632563ae83146104ce57806327c8f835146104f75780632b112e49146105225761038c565b806315c98a1e1161035f57806315c98a1e146104245780631694505e1461043b57806318160ddd1461046657806323b872dd146104915761038c565b806303d8e9541461039157806306fdde03146103bc578063095ea7b3146103e75761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610e09565b6040516103b39190613cf9565b60405180910390f35b3480156103c857600080fd5b506103d1610e0f565b6040516103de9190613da4565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190613e55565b610ea1565b60405161041b9190613eb0565b60405180910390f35b34801561043057600080fd5b50610439610ebf565b005b34801561044757600080fd5b50610450610faa565b60405161045d9190613f2a565b60405180910390f35b34801561047257600080fd5b5061047b610fd0565b6040516104889190613cf9565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190613f45565b610fda565b6040516104c59190613eb0565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190613fc4565b6110b4565b005b34801561050357600080fd5b5061050c611166565b6040516105199190614000565b60405180910390f35b34801561052e57600080fd5b5061053761118a565b6040516105449190613cf9565b60405180910390f35b34801561055957600080fd5b506105626111ce565b60405161056f9190614037565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613e55565b6111e5565b6040516105ac9190613eb0565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190614052565b611298565b005b3480156105ea57600080fd5b506106056004803603810190610600919061407f565b611337565b005b34801561061357600080fd5b5061062e600480360381019061062991906140bf565b611427565b60405161063b9190613eb0565b60405180910390f35b34801561065057600080fd5b50610659611447565b6040516106669190613cf9565b60405180910390f35b34801561067b57600080fd5b5061068461144d565b6040516106919190613eb0565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc91906140ec565b611460565b005b3480156106cf57600080fd5b506106ea60048036038101906106e591906140bf565b611589565b6040516106f79190613eb0565b60405180910390f35b34801561070c57600080fd5b506107156115a9565b6040516107229190613cf9565b60405180910390f35b34801561073757600080fd5b506107406115b1565b60405161074d9190613cf9565b60405180910390f35b34801561076257600080fd5b5061077d600480360381019061077891906140bf565b6115b7565b60405161078a9190614000565b60405180910390f35b34801561079f57600080fd5b506107a8611aba565b6040516107b59190613cf9565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e091906140bf565b611ac0565b6040516107f29190613cf9565b60405180910390f35b34801561080757600080fd5b50610810611b09565b60405161081d9190613cf9565b60405180910390f35b34801561083257600080fd5b5061083b611b0f565b6040516108489190613cf9565b60405180910390f35b34801561085d57600080fd5b50610866611b15565b6040516108739190613cf9565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e919061407f565b611b1b565b005b3480156108b157600080fd5b506108ba611c0b565b6040516108c79190613cf9565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f291906140bf565b611c11565b6040516109049190613eb0565b60405180910390f35b34801561091957600080fd5b50610922611c31565b60405161092f9190614000565b60405180910390f35b34801561094457600080fd5b5061094d611c5a565b60405161095a9190613da4565b60405180910390f35b34801561096f57600080fd5b5061098a6004803603810190610985919061407f565b611cec565b005b34801561099857600080fd5b506109a1611ddc565b6040516109ae919061419a565b60405180910390f35b3480156109c357600080fd5b506109cc611e02565b6040516109d99190613cf9565b60405180910390f35b3480156109ee57600080fd5b506109f7611e0c565b604051610a049190613cf9565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613e55565b611e12565b604051610a419190613eb0565b60405180910390f35b348015610a5657600080fd5b50610a716004803603810190610a6c9190613fc4565b611edf565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a959190613e55565b611f91565b604051610aa79190613eb0565b60405180910390f35b348015610abc57600080fd5b50610ad76004803603810190610ad291906140bf565b611fb0565b005b348015610ae557600080fd5b50610b006004803603810190610afb9190613f45565b612089565b604051610b0d9190613eb0565b60405180910390f35b348015610b2257600080fd5b50610b3d6004803603810190610b3891906141b5565b612231565b005b348015610b4b57600080fd5b50610b666004803603810190610b619190613fc4565b612311565b005b348015610b7457600080fd5b50610b8f6004803603810190610b8a9190614208565b6123fa565b005b348015610b9d57600080fd5b50610ba66124a1565b604051610bb39190613cf9565b60405180910390f35b348015610bc857600080fd5b50610bd16124a7565b604051610bde9190613cf9565b60405180910390f35b348015610bf357600080fd5b50610c0e6004803603810190610c0991906140bf565b6124ad565b005b348015610c1c57600080fd5b50610c376004803603810190610c32919061407f565b612586565b005b348015610c4557600080fd5b50610c4e612676565b604051610c5b9190614000565b60405180910390f35b348015610c7057600080fd5b50610c7961269c565b604051610c869190613cf9565b60405180910390f35b348015610c9b57600080fd5b50610cb66004803603810190610cb191906140bf565b6126a2565b604051610cc39190613eb0565b60405180910390f35b348015610cd857600080fd5b50610ce16126c2565b604051610cee919061419a565b60405180910390f35b348015610d0357600080fd5b50610d0c6126e8565b604051610d199190613eb0565b60405180910390f35b348015610d2e57600080fd5b50610d376126fb565b604051610d449190613cf9565b60405180910390f35b348015610d5957600080fd5b50610d746004803603810190610d6f9190614248565b612701565b604051610d819190613cf9565b60405180910390f35b348015610d9657600080fd5b50610d9f612788565b604051610dac9190613cf9565b60405180910390f35b348015610dc157600080fd5b50610ddc6004803603810190610dd791906140bf565b61278e565b005b348015610dea57600080fd5b50610df361294f565b604051610e009190613eb0565b60405180910390f35b60145481565b606060028054610e1e906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a906142b7565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b5050505050905090565b6000610eb5610eae6129c0565b84846129c8565b6001905092915050565b610ec76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90614334565b60405180910390fd5b6000479050610f61611c31565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fa6573d6000803e3d6000fd5b5050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b6000610fe7848484612b91565b506110a984610ff46129c0565b6110a485604051806060016040528060288152602001614ca560289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a6129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b6129c8565b600190509392505050565b6110bc6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090614334565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006111c96111b87f0000000000000000000000000000000000000000000000000000000000000000611ac0565b6018546131d890919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b600061128e6111f26129c0565b8461128985600760006112036129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b6129c8565b6001905092915050565b6112a06129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490614334565b60405180910390fd5b80601b8190555050565b61133f6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390614334565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b60115481565b601d60159054906101000a900460ff1681565b6114686129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec90614334565b60405180910390fd5b85600c8190555084600d8190555083600e81905550611535600e54611527600d54600c5461296290919063ffffffff16565b61296290919063ffffffff16565b60158190555082600f81905550816010819055508060118190555061157b60115461156d601054600f5461296290919063ffffffff16565b61296290919063ffffffff16565b601681905550505050505050565b60086020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60125481565b60006115c16129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614334565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c29190614369565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174d9190614369565b6040518363ffffffff1660e01b815260040161176a929190614396565b602060405180830381865afa158015611787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ab9190614369565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361193e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118509190614369565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db9190614369565b6040518363ffffffff1660e01b81526004016118f8929190614396565b6020604051808303816000875af1158015611917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193b9190614369565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60135481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b611b236129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba790614334565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611c69906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c95906142b7565b8015611ce25780601f10611cb757610100808354040283529160200191611ce2565b820191906000526020600020905b815481529060010190602001808311611cc557829003601f168201915b5050505050905090565b611cf46129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890614334565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b54905090565b60175481565b6000611ed5611e1f6129c0565b84611ed085604051806060016040528060258152602001614ccd6025913960076000611e496129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b6129c8565b6001905092915050565b611ee76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90614334565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611fa5611f9e6129c0565b8484612b91565b506001905092915050565b611fb86129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c90614334565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006120936129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790614334565b60405180910390fd5b600082036121a9578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121619190614000565b602060405180830381865afa15801561217e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a291906143d4565b915061222a565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016121e4929190614401565b6020604051808303816000875af1158015612203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612227919061443f565b90505b9392505050565b6122396129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614334565b60405180910390fd5b8260128190555081601381905550806014819055506123066014546122f860135460125461296290919063ffffffff16565b61296290919063ffffffff16565b601781905550505050565b6123196129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614334565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123ef9190613eb0565b60405180910390a150565b6124026129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461248f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248690614334565b60405180910390fd5b8160198190555080601a819055505050565b600d5481565b600e5481565b6124b56129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990614334565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61258e6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261290614334565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60155481565b6127966129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281a90614334565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612889906144de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b6000808284612971919061452d565b9050838110156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad906145ad565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e9061463f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d906146d1565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b849190613cf9565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf890614763565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c67906147f5565b60405180910390fd5b601d60149054906101000a900460ff1615612c9757612c90848484613222565b905061316d565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d3b5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8657601954821115612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c90614887565b60405180910390fd5b5b6000612d9130611ac0565b90506000601b548210159050808015612db75750601d60149054906101000a900460ff16155b8015612e0d5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e255750601d60159054906101000a900460ff165b15612e4f57601d60169054906101000a900460ff1615612e4557601b5491505b612e4e826133f5565b5b612ed8846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fbe5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fd257612fcd8787876135e6565b612fd4565b845b9050601d60179054906101000a900460ff16801561303c5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306b57601a5461305f8261305189611ac0565b61296290919063ffffffff16565b111561306a57600080fd5b5b6130bd81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161315d9190613cf9565b60405180910390a3600193505050505b9392505050565b60008383111582906131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b39190613da4565b60405180910390fd5b50600083856131cb91906148a7565b9050809150509392505050565b600061321a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613174565b905092915050565b60006132ad826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334282600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133e29190613cf9565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061344e60026134406017546134326012548761380d90919063ffffffff16565b61388790919063ffffffff16565b61388790919063ffffffff16565b9050600061346582846131d890919063ffffffff16565b9050613470816138d1565b600047905060006134a1613490600260125461388790919063ffffffff16565b6017546131d890919063ffffffff16565b905060006134df60026134d1846134c36012548861380d90919063ffffffff16565b61388790919063ffffffff16565b61388790919063ffffffff16565b9050600061350a836134fc6014548761380d90919063ffffffff16565b61388790919063ffffffff16565b905060006135338261352585886131d890919063ffffffff16565b6131d890919063ffffffff16565b9050600081111561356b5761356a600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b4d565b5b60008211156135a1576135a0600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b4d565b5b6000831180156135b15750600087115b156135c1576135c08784613b98565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561366e5761366760646136596015548661380d90919063ffffffff16565b61388790919063ffffffff16565b90506136ec565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136eb576136e860646136da6016548661380d90919063ffffffff16565b61388790919063ffffffff16565b90505b5b60008111156137f05761374781600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137e79190613cf9565b60405180910390a35b61380381846131d890919063ffffffff16565b9150509392505050565b600080830361381f5760009050613881565b6000828461382d91906148db565b905082848261383c919061494c565b1461387c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613873906149ef565b60405180910390fd5b809150505b92915050565b60006138c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c7d565b905092915050565b6000600267ffffffffffffffff8111156138ee576138ed614a0f565b5b60405190808252806020026020018201604052801561391c5781602001602082028036833780820191505090505b509050308160008151811061393457613933614a3e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ff9190614369565b81600181518110613a1357613a12614a3e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a7a30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c8565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ade959493929190614b66565b600060405180830381600087803b158015613af857600080fd5b505af1158015613b0c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613b41929190614bc0565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b93573d6000803e3d6000fd5b505050565b613bc530601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c8565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c11611c31565b426040518863ffffffff1660e01b8152600401613c3396959493929190614bf0565b60606040518083038185885af1158015613c51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c769190614c51565b5050505050565b60008083118290613cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbb9190613da4565b60405180910390fd5b5060008385613cd3919061494c565b9050809150509392505050565b6000819050919050565b613cf381613ce0565b82525050565b6000602082019050613d0e6000830184613cea565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d4e578082015181840152602081019050613d33565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d7682613d14565b613d808185613d1f565b9350613d90818560208601613d30565b613d9981613d5a565b840191505092915050565b60006020820190508181036000830152613dbe8184613d6b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613df682613dcb565b9050919050565b613e0681613deb565b8114613e1157600080fd5b50565b600081359050613e2381613dfd565b92915050565b613e3281613ce0565b8114613e3d57600080fd5b50565b600081359050613e4f81613e29565b92915050565b60008060408385031215613e6c57613e6b613dc6565b5b6000613e7a85828601613e14565b9250506020613e8b85828601613e40565b9150509250929050565b60008115159050919050565b613eaa81613e95565b82525050565b6000602082019050613ec56000830184613ea1565b92915050565b6000819050919050565b6000613ef0613eeb613ee684613dcb565b613ecb565b613dcb565b9050919050565b6000613f0282613ed5565b9050919050565b6000613f1482613ef7565b9050919050565b613f2481613f09565b82525050565b6000602082019050613f3f6000830184613f1b565b92915050565b600080600060608486031215613f5e57613f5d613dc6565b5b6000613f6c86828701613e14565b9350506020613f7d86828701613e14565b9250506040613f8e86828701613e40565b9150509250925092565b613fa181613e95565b8114613fac57600080fd5b50565b600081359050613fbe81613f98565b92915050565b600060208284031215613fda57613fd9613dc6565b5b6000613fe884828501613faf565b91505092915050565b613ffa81613deb565b82525050565b60006020820190506140156000830184613ff1565b92915050565b600060ff82169050919050565b6140318161401b565b82525050565b600060208201905061404c6000830184614028565b92915050565b60006020828403121561406857614067613dc6565b5b600061407684828501613e40565b91505092915050565b6000806040838503121561409657614095613dc6565b5b60006140a485828601613e14565b92505060206140b585828601613faf565b9150509250929050565b6000602082840312156140d5576140d4613dc6565b5b60006140e384828501613e14565b91505092915050565b60008060008060008060c0878903121561410957614108613dc6565b5b600061411789828a01613e40565b965050602061412889828a01613e40565b955050604061413989828a01613e40565b945050606061414a89828a01613e40565b935050608061415b89828a01613e40565b92505060a061416c89828a01613e40565b9150509295509295509295565b600061418482613dcb565b9050919050565b61419481614179565b82525050565b60006020820190506141af600083018461418b565b92915050565b6000806000606084860312156141ce576141cd613dc6565b5b60006141dc86828701613e40565b93505060206141ed86828701613e40565b92505060406141fe86828701613e40565b9150509250925092565b6000806040838503121561421f5761421e613dc6565b5b600061422d85828601613e40565b925050602061423e85828601613e40565b9150509250929050565b6000806040838503121561425f5761425e613dc6565b5b600061426d85828601613e14565b925050602061427e85828601613e14565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142cf57607f821691505b6020821081036142e2576142e1614288565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061431e602083613d1f565b9150614329826142e8565b602082019050919050565b6000602082019050818103600083015261434d81614311565b9050919050565b60008151905061436381613dfd565b92915050565b60006020828403121561437f5761437e613dc6565b5b600061438d84828501614354565b91505092915050565b60006040820190506143ab6000830185613ff1565b6143b86020830184613ff1565b9392505050565b6000815190506143ce81613e29565b92915050565b6000602082840312156143ea576143e9613dc6565b5b60006143f8848285016143bf565b91505092915050565b60006040820190506144166000830185613ff1565b6144236020830184613cea565b9392505050565b60008151905061443981613f98565b92915050565b60006020828403121561445557614454613dc6565b5b60006144638482850161442a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144c8602683613d1f565b91506144d38261446c565b604082019050919050565b600060208201905081810360008301526144f7816144bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061453882613ce0565b915061454383613ce0565b925082820190508082111561455b5761455a6144fe565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614597601b83613d1f565b91506145a282614561565b602082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614629602483613d1f565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146bb602283613d1f565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061474d602583613d1f565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147df602383613d1f565b91506147ea82614783565b604082019050919050565b6000602082019050818103600083015261480e816147d2565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614871602883613d1f565b915061487c82614815565b604082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b60006148b282613ce0565b91506148bd83613ce0565b92508282039050818111156148d5576148d46144fe565b5b92915050565b60006148e682613ce0565b91506148f183613ce0565b92508282026148ff81613ce0565b91508282048414831517614916576149156144fe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495782613ce0565b915061496283613ce0565b9250826149725761497161491d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d9602183613d1f565b91506149e48261497d565b604082019050919050565b60006020820190508181036000830152614a08816149cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614a92614a8d614a8884614a6d565b613ecb565b613ce0565b9050919050565b614aa281614a77565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614add81613deb565b82525050565b6000614aef8383614ad4565b60208301905092915050565b6000602082019050919050565b6000614b1382614aa8565b614b1d8185614ab3565b9350614b2883614ac4565b8060005b83811015614b59578151614b408882614ae3565b9750614b4b83614afb565b925050600181019050614b2c565b5085935050505092915050565b600060a082019050614b7b6000830188613cea565b614b886020830187614a99565b8181036040830152614b9a8186614b08565b9050614ba96060830185613ff1565b614bb66080830184613cea565b9695505050505050565b6000604082019050614bd56000830185613cea565b8181036020830152614be78184614b08565b90509392505050565b600060c082019050614c056000830189613ff1565b614c126020830188613cea565b614c1f6040830187614a99565b614c2c6060830186614a99565b614c396080830185613ff1565b614c4660a0830184613cea565b979650505050505050565b600080600060608486031215614c6a57614c69613dc6565b5b6000614c78868287016143bf565b9350506020614c89868287016143bf565b9250506040614c9a868287016143bf565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207085e98029676ae394eb1d1fa291db5be947826d7f57252a7586091f7c98ba6064736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638b42507f116101d1578063c53a7cca11610102578063c867d60b116100a0578063dd62ed3e1161006f578063dd62ed3e14610d4d578063f0cd1dac14610d8a578063f2fde38b14610db5578063f872858a14610dde5761038c565b8063c867d60b14610c8f578063d158272d14610ccc578063da00097d14610cf7578063dc44b6a014610d225761038c565b8063c7484c9f116100dc578063c7484c9f14610be7578063c75c948214610c10578063c816841b14610c39578063c860795214610c645761038c565b8063c53a7cca14610b68578063c5d2418914610b91578063c6b2d7b614610bbc5761038c565b8063a457c2d71161016f578063b5a2098c11610149578063b5a2098c14610ab0578063bee6179a14610ad9578063c2d4640e14610b16578063c49b9a8014610b3f5761038c565b8063a457c2d714610a0d578063a5d69d1f14610a4a578063a9059cbb14610a735761038c565b80639c796cb9116101ab5780639c796cb9146109635780639f99e9bd1461098c578063a073d37f146109b7578063a08e671f146109e25761038c565b80638b42507f146108d05780638da5cb5b1461090d57806395d89b41146109385761038c565b80633ecad271116102b65780635881f3ef11610254578063807c2d9c11610223578063807c2d9c1461082657806382eefb4314610851578063844d591c1461087c57806388790a68146108a55761038c565b80635881f3ef1461075657806361a23c691461079357806370a08231146107be5780637d1db4a5146107fb5761038c565b806352c658971161029057806352c658971461069a5780635342acb4146106c3578063557ed1ba1461070057806357a5802f1461072b5761038c565b80633ecad271146106075780634428f105146106445780634a74bb021461066f5761038c565b80632563ae8311610323578063313ce567116102fd578063313ce5671461054d57806339509351146105785780633b97084a146105b55780633e9177e8146105de5761038c565b80632563ae83146104ce57806327c8f835146104f75780632b112e49146105225761038c565b806315c98a1e1161035f57806315c98a1e146104245780631694505e1461043b57806318160ddd1461046657806323b872dd146104915761038c565b806303d8e9541461039157806306fdde03146103bc578063095ea7b3146103e75761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610e09565b6040516103b39190613cf9565b60405180910390f35b3480156103c857600080fd5b506103d1610e0f565b6040516103de9190613da4565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190613e55565b610ea1565b60405161041b9190613eb0565b60405180910390f35b34801561043057600080fd5b50610439610ebf565b005b34801561044757600080fd5b50610450610faa565b60405161045d9190613f2a565b60405180910390f35b34801561047257600080fd5b5061047b610fd0565b6040516104889190613cf9565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190613f45565b610fda565b6040516104c59190613eb0565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190613fc4565b6110b4565b005b34801561050357600080fd5b5061050c611166565b6040516105199190614000565b60405180910390f35b34801561052e57600080fd5b5061053761118a565b6040516105449190613cf9565b60405180910390f35b34801561055957600080fd5b506105626111ce565b60405161056f9190614037565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190613e55565b6111e5565b6040516105ac9190613eb0565b60405180910390f35b3480156105c157600080fd5b506105dc60048036038101906105d79190614052565b611298565b005b3480156105ea57600080fd5b506106056004803603810190610600919061407f565b611337565b005b34801561061357600080fd5b5061062e600480360381019061062991906140bf565b611427565b60405161063b9190613eb0565b60405180910390f35b34801561065057600080fd5b50610659611447565b6040516106669190613cf9565b60405180910390f35b34801561067b57600080fd5b5061068461144d565b6040516106919190613eb0565b60405180910390f35b3480156106a657600080fd5b506106c160048036038101906106bc91906140ec565b611460565b005b3480156106cf57600080fd5b506106ea60048036038101906106e591906140bf565b611589565b6040516106f79190613eb0565b60405180910390f35b34801561070c57600080fd5b506107156115a9565b6040516107229190613cf9565b60405180910390f35b34801561073757600080fd5b506107406115b1565b60405161074d9190613cf9565b60405180910390f35b34801561076257600080fd5b5061077d600480360381019061077891906140bf565b6115b7565b60405161078a9190614000565b60405180910390f35b34801561079f57600080fd5b506107a8611aba565b6040516107b59190613cf9565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e091906140bf565b611ac0565b6040516107f29190613cf9565b60405180910390f35b34801561080757600080fd5b50610810611b09565b60405161081d9190613cf9565b60405180910390f35b34801561083257600080fd5b5061083b611b0f565b6040516108489190613cf9565b60405180910390f35b34801561085d57600080fd5b50610866611b15565b6040516108739190613cf9565b60405180910390f35b34801561088857600080fd5b506108a3600480360381019061089e919061407f565b611b1b565b005b3480156108b157600080fd5b506108ba611c0b565b6040516108c79190613cf9565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f291906140bf565b611c11565b6040516109049190613eb0565b60405180910390f35b34801561091957600080fd5b50610922611c31565b60405161092f9190614000565b60405180910390f35b34801561094457600080fd5b5061094d611c5a565b60405161095a9190613da4565b60405180910390f35b34801561096f57600080fd5b5061098a6004803603810190610985919061407f565b611cec565b005b34801561099857600080fd5b506109a1611ddc565b6040516109ae919061419a565b60405180910390f35b3480156109c357600080fd5b506109cc611e02565b6040516109d99190613cf9565b60405180910390f35b3480156109ee57600080fd5b506109f7611e0c565b604051610a049190613cf9565b60405180910390f35b348015610a1957600080fd5b50610a346004803603810190610a2f9190613e55565b611e12565b604051610a419190613eb0565b60405180910390f35b348015610a5657600080fd5b50610a716004803603810190610a6c9190613fc4565b611edf565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a959190613e55565b611f91565b604051610aa79190613eb0565b60405180910390f35b348015610abc57600080fd5b50610ad76004803603810190610ad291906140bf565b611fb0565b005b348015610ae557600080fd5b50610b006004803603810190610afb9190613f45565b612089565b604051610b0d9190613eb0565b60405180910390f35b348015610b2257600080fd5b50610b3d6004803603810190610b3891906141b5565b612231565b005b348015610b4b57600080fd5b50610b666004803603810190610b619190613fc4565b612311565b005b348015610b7457600080fd5b50610b8f6004803603810190610b8a9190614208565b6123fa565b005b348015610b9d57600080fd5b50610ba66124a1565b604051610bb39190613cf9565b60405180910390f35b348015610bc857600080fd5b50610bd16124a7565b604051610bde9190613cf9565b60405180910390f35b348015610bf357600080fd5b50610c0e6004803603810190610c0991906140bf565b6124ad565b005b348015610c1c57600080fd5b50610c376004803603810190610c32919061407f565b612586565b005b348015610c4557600080fd5b50610c4e612676565b604051610c5b9190614000565b60405180910390f35b348015610c7057600080fd5b50610c7961269c565b604051610c869190613cf9565b60405180910390f35b348015610c9b57600080fd5b50610cb66004803603810190610cb191906140bf565b6126a2565b604051610cc39190613eb0565b60405180910390f35b348015610cd857600080fd5b50610ce16126c2565b604051610cee919061419a565b60405180910390f35b348015610d0357600080fd5b50610d0c6126e8565b604051610d199190613eb0565b60405180910390f35b348015610d2e57600080fd5b50610d376126fb565b604051610d449190613cf9565b60405180910390f35b348015610d5957600080fd5b50610d746004803603810190610d6f9190614248565b612701565b604051610d819190613cf9565b60405180910390f35b348015610d9657600080fd5b50610d9f612788565b604051610dac9190613cf9565b60405180910390f35b348015610dc157600080fd5b50610ddc6004803603810190610dd791906140bf565b61278e565b005b348015610dea57600080fd5b50610df361294f565b604051610e009190613eb0565b60405180910390f35b60145481565b606060028054610e1e906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a906142b7565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b5050505050905090565b6000610eb5610eae6129c0565b84846129c8565b6001905092915050565b610ec76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4b90614334565b60405180910390fd5b6000479050610f61611c31565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fa6573d6000803e3d6000fd5b5050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b6000610fe7848484612b91565b506110a984610ff46129c0565b6110a485604051806060016040528060288152602001614ca560289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061105a6129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b6129c8565b600190509392505050565b6110bc6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611149576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114090614334565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006111c96111b87f000000000000000000000000000000000000000000000000000000000000dead611ac0565b6018546131d890919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b600061128e6111f26129c0565b8461128985600760006112036129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b6129c8565b6001905092915050565b6112a06129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490614334565b60405180910390fd5b80601b8190555050565b61133f6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c390614334565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b60115481565b601d60159054906101000a900460ff1681565b6114686129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ec90614334565b60405180910390fd5b85600c8190555084600d8190555083600e81905550611535600e54611527600d54600c5461296290919063ffffffff16565b61296290919063ffffffff16565b60158190555082600f81905550816010819055508060118190555061157b60115461156d601054600f5461296290919063ffffffff16565b61296290919063ffffffff16565b601681905550505050505050565b60086020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60125481565b60006115c16129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461164e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164590614334565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561169e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116c29190614369565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174d9190614369565b6040518363ffffffff1660e01b815260040161176a929190614396565b602060405180830381865afa158015611787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ab9190614369565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361193e578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118509190614369565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118db9190614369565b6040518363ffffffff1660e01b81526004016118f8929190614396565b6020604051808303816000875af1158015611917573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193b9190614369565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60135481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b611b236129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba790614334565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611c69906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611c95906142b7565b8015611ce25780601f10611cb757610100808354040283529160200191611ce2565b820191906000526020600020905b815481529060010190602001808311611cc557829003601f168201915b5050505050905090565b611cf46129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7890614334565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601b54905090565b60175481565b6000611ed5611e1f6129c0565b84611ed085604051806060016040528060258152602001614ccd6025913960076000611e496129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b6129c8565b6001905092915050565b611ee76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6b90614334565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b6000611fa5611f9e6129c0565b8484612b91565b506001905092915050565b611fb86129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c90614334565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006120936129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790614334565b60405180910390fd5b600082036121a9578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121619190614000565b602060405180830381865afa15801561217e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a291906143d4565b915061222a565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b81526004016121e4929190614401565b6020604051808303816000875af1158015612203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612227919061443f565b90505b9392505050565b6122396129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90614334565b60405180910390fd5b8260128190555081601381905550806014819055506123066014546122f860135460125461296290919063ffffffff16565b61296290919063ffffffff16565b601781905550505050565b6123196129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614334565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123ef9190613eb0565b60405180910390a150565b6124026129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461248f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248690614334565b60405180910390fd5b8160198190555080601a819055505050565b600d5481565b600e5481565b6124b56129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990614334565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61258e6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261290614334565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60155481565b6127966129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281a90614334565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612889906144de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b6000808284612971919061452d565b9050838110156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad906145ad565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e9061463f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d906146d1565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b849190613cf9565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf890614763565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c67906147f5565b60405180910390fd5b601d60149054906101000a900460ff1615612c9757612c90848484613222565b905061316d565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d3b5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8657601954821115612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c90614887565b60405180910390fd5b5b6000612d9130611ac0565b90506000601b548210159050808015612db75750601d60149054906101000a900460ff16155b8015612e0d5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e255750601d60159054906101000a900460ff165b15612e4f57601d60169054906101000a900460ff1615612e4557601b5491505b612e4e826133f5565b5b612ed8846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fbe5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fd257612fcd8787876135e6565b612fd4565b845b9050601d60179054906101000a900460ff16801561303c5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306b57601a5461305f8261305189611ac0565b61296290919063ffffffff16565b111561306a57600080fd5b5b6130bd81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161315d9190613cf9565b60405180910390a3600193505050505b9392505050565b60008383111582906131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b39190613da4565b60405180910390fd5b50600083856131cb91906148a7565b9050809150509392505050565b600061321a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613174565b905092915050565b60006132ad826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334282600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133e29190613cf9565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061344e60026134406017546134326012548761380d90919063ffffffff16565b61388790919063ffffffff16565b61388790919063ffffffff16565b9050600061346582846131d890919063ffffffff16565b9050613470816138d1565b600047905060006134a1613490600260125461388790919063ffffffff16565b6017546131d890919063ffffffff16565b905060006134df60026134d1846134c36012548861380d90919063ffffffff16565b61388790919063ffffffff16565b61388790919063ffffffff16565b9050600061350a836134fc6014548761380d90919063ffffffff16565b61388790919063ffffffff16565b905060006135338261352585886131d890919063ffffffff16565b6131d890919063ffffffff16565b9050600081111561356b5761356a600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b4d565b5b60008211156135a1576135a0600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b4d565b5b6000831180156135b15750600087115b156135c1576135c08784613b98565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561366e5761366760646136596015548661380d90919063ffffffff16565b61388790919063ffffffff16565b90506136ec565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136eb576136e860646136da6016548661380d90919063ffffffff16565b61388790919063ffffffff16565b90505b5b60008111156137f05761374781600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137e79190613cf9565b60405180910390a35b61380381846131d890919063ffffffff16565b9150509392505050565b600080830361381f5760009050613881565b6000828461382d91906148db565b905082848261383c919061494c565b1461387c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613873906149ef565b60405180910390fd5b809150505b92915050565b60006138c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c7d565b905092915050565b6000600267ffffffffffffffff8111156138ee576138ed614a0f565b5b60405190808252806020026020018201604052801561391c5781602001602082028036833780820191505090505b509050308160008151811061393457613933614a3e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ff9190614369565b81600181518110613a1357613a12614a3e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a7a30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c8565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ade959493929190614b66565b600060405180830381600087803b158015613af857600080fd5b505af1158015613b0c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613b41929190614bc0565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b93573d6000803e3d6000fd5b505050565b613bc530601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c8565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c11611c31565b426040518863ffffffff1660e01b8152600401613c3396959493929190614bf0565b60606040518083038185885af1158015613c51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c769190614c51565b5050505050565b60008083118290613cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbb9190613da4565b60405180910390fd5b5060008385613cd3919061494c565b9050809150509392505050565b6000819050919050565b613cf381613ce0565b82525050565b6000602082019050613d0e6000830184613cea565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d4e578082015181840152602081019050613d33565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d7682613d14565b613d808185613d1f565b9350613d90818560208601613d30565b613d9981613d5a565b840191505092915050565b60006020820190508181036000830152613dbe8184613d6b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613df682613dcb565b9050919050565b613e0681613deb565b8114613e1157600080fd5b50565b600081359050613e2381613dfd565b92915050565b613e3281613ce0565b8114613e3d57600080fd5b50565b600081359050613e4f81613e29565b92915050565b60008060408385031215613e6c57613e6b613dc6565b5b6000613e7a85828601613e14565b9250506020613e8b85828601613e40565b9150509250929050565b60008115159050919050565b613eaa81613e95565b82525050565b6000602082019050613ec56000830184613ea1565b92915050565b6000819050919050565b6000613ef0613eeb613ee684613dcb565b613ecb565b613dcb565b9050919050565b6000613f0282613ed5565b9050919050565b6000613f1482613ef7565b9050919050565b613f2481613f09565b82525050565b6000602082019050613f3f6000830184613f1b565b92915050565b600080600060608486031215613f5e57613f5d613dc6565b5b6000613f6c86828701613e14565b9350506020613f7d86828701613e14565b9250506040613f8e86828701613e40565b9150509250925092565b613fa181613e95565b8114613fac57600080fd5b50565b600081359050613fbe81613f98565b92915050565b600060208284031215613fda57613fd9613dc6565b5b6000613fe884828501613faf565b91505092915050565b613ffa81613deb565b82525050565b60006020820190506140156000830184613ff1565b92915050565b600060ff82169050919050565b6140318161401b565b82525050565b600060208201905061404c6000830184614028565b92915050565b60006020828403121561406857614067613dc6565b5b600061407684828501613e40565b91505092915050565b6000806040838503121561409657614095613dc6565b5b60006140a485828601613e14565b92505060206140b585828601613faf565b9150509250929050565b6000602082840312156140d5576140d4613dc6565b5b60006140e384828501613e14565b91505092915050565b60008060008060008060c0878903121561410957614108613dc6565b5b600061411789828a01613e40565b965050602061412889828a01613e40565b955050604061413989828a01613e40565b945050606061414a89828a01613e40565b935050608061415b89828a01613e40565b92505060a061416c89828a01613e40565b9150509295509295509295565b600061418482613dcb565b9050919050565b61419481614179565b82525050565b60006020820190506141af600083018461418b565b92915050565b6000806000606084860312156141ce576141cd613dc6565b5b60006141dc86828701613e40565b93505060206141ed86828701613e40565b92505060406141fe86828701613e40565b9150509250925092565b6000806040838503121561421f5761421e613dc6565b5b600061422d85828601613e40565b925050602061423e85828601613e40565b9150509250929050565b6000806040838503121561425f5761425e613dc6565b5b600061426d85828601613e14565b925050602061427e85828601613e14565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142cf57607f821691505b6020821081036142e2576142e1614288565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061431e602083613d1f565b9150614329826142e8565b602082019050919050565b6000602082019050818103600083015261434d81614311565b9050919050565b60008151905061436381613dfd565b92915050565b60006020828403121561437f5761437e613dc6565b5b600061438d84828501614354565b91505092915050565b60006040820190506143ab6000830185613ff1565b6143b86020830184613ff1565b9392505050565b6000815190506143ce81613e29565b92915050565b6000602082840312156143ea576143e9613dc6565b5b60006143f8848285016143bf565b91505092915050565b60006040820190506144166000830185613ff1565b6144236020830184613cea565b9392505050565b60008151905061443981613f98565b92915050565b60006020828403121561445557614454613dc6565b5b60006144638482850161442a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144c8602683613d1f565b91506144d38261446c565b604082019050919050565b600060208201905081810360008301526144f7816144bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061453882613ce0565b915061454383613ce0565b925082820190508082111561455b5761455a6144fe565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614597601b83613d1f565b91506145a282614561565b602082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614629602483613d1f565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146bb602283613d1f565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061474d602583613d1f565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147df602383613d1f565b91506147ea82614783565b604082019050919050565b6000602082019050818103600083015261480e816147d2565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614871602883613d1f565b915061487c82614815565b604082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b60006148b282613ce0565b91506148bd83613ce0565b92508282039050818111156148d5576148d46144fe565b5b92915050565b60006148e682613ce0565b91506148f183613ce0565b92508282026148ff81613ce0565b91508282048414831517614916576149156144fe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495782613ce0565b915061496283613ce0565b9250826149725761497161491d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d9602183613d1f565b91506149e48261497d565b604082019050919050565b60006020820190508181036000830152614a08816149cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614a92614a8d614a8884614a6d565b613ecb565b613ce0565b9050919050565b614aa281614a77565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614add81613deb565b82525050565b6000614aef8383614ad4565b60208301905092915050565b6000602082019050919050565b6000614b1382614aa8565b614b1d8185614ab3565b9350614b2883614ac4565b8060005b83811015614b59578151614b408882614ae3565b9750614b4b83614afb565b925050600181019050614b2c565b5085935050505092915050565b600060a082019050614b7b6000830188613cea565b614b886020830187614a99565b8181036040830152614b9a8186614b08565b9050614ba96060830185613ff1565b614bb66080830184613cea565b9695505050505050565b6000604082019050614bd56000830185613cea565b8181036020830152614be78184614b08565b90509392505050565b600060c082019050614c056000830189613ff1565b614c126020830188613cea565b614c1f6040830187614a99565b614c2c6060830186614a99565b614c396080830185613ff1565b614c4660a0830184613cea565b979650505050505050565b600080600060608486031215614c6a57614c69613dc6565b5b6000614c78868287016143bf565b9350506020614c89868287016143bf565b9250506040614c9a868287016143bf565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207085e98029676ae394eb1d1fa291db5be947826d7f57252a7586091f7c98ba6064736f6c63430008120033

Deployed Bytecode Sourcemap

16065:16339:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17296:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19713:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21261:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25013:150;;;;;;;;;;;;;:::i;:::-;;17742:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19990:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26662:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23694:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16523:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25171:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19899:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20417:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23983:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22001:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16910:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17174:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17853:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22330:771;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16742:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6771:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17214:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25455:899;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17255:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20098:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17540:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17604;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17377:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21841:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17087:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16856:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6268:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19804:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23816:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16414:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21133:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17422:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20725:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24566:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26455:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24256:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24703:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23109:410;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24387:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23527:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17005:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17048:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24113:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22161:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17790:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17130:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16798:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16299:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17900:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16963:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20225:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17333:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6482:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17952:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17296:28;;;;:::o;19713:83::-;19750:13;19783:5;19776:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19713:83;:::o;21261:193::-;21363:4;21385:39;21394:12;:10;:12::i;:::-;21408:7;21417:6;21385:8;:39::i;:::-;21442:4;21435:11;;21261:193;;;;:::o;25013:150::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25074:12:::1;25089:21;25074:36;;25129:7;:5;:7::i;:::-;25121:25;;:34;25147:7;25121:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25063:100;25013:150::o:0;17742:41::-;;;;;;;;;;;;;:::o;19990:100::-;20043:7;20070:12;;20063:19;;19990:100;:::o;26662:446::-;26794:4;26811:36;26821:6;26829:9;26840:6;26811:9;:36::i;:::-;;26858:220;26881:6;26902:12;:10;:12::i;:::-;26929:138;26985:6;26929:138;;;;;;;;;;;;;;;;;:11;:19;26941:6;26929:19;;;;;;;;;;;;;;;:33;26949:12;:10;:12::i;:::-;26929:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;26858:8;:220::i;:::-;27096:4;27089:11;;26662:446;;;;;:::o;23694:114::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23792:8:::1;23773:16;;:27;;;;;;;;;;;;;;;;;;23694:114:::0;:::o;16523:90::-;;;:::o;25171:128::-;25224:7;25251:40;25268:22;25278:11;25268:9;:22::i;:::-;25251:12;;:16;;:40;;;;:::i;:::-;25244:47;;25171:128;:::o;19899:83::-;19940:5;19965:9;;;;;;;;;;;19958:16;;19899:83;:::o;20417:300::-;20532:4;20554:133;20577:12;:10;:12::i;:::-;20604:7;20626:50;20665:10;20626:11;:25;20638:12;:10;:12::i;:::-;20626:25;;;;;;;;;;;;;;;:34;20652:7;20626:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20554:8;:133::i;:::-;20705:4;20698:11;;20417:300;;;;:::o;23983:122::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24089:8:::1;24063:23;:34;;;;23983:122:::0;:::o;22001:152::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22139:6:::1;22113:15;:23;22129:6;22113:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;22001:152:::0;;:::o;16910:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;17174:31::-;;;;:::o;17853:40::-;;;;;;;;;;;;;:::o;22330:771::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22625:18:::1;22606:16;:37;;;;22673:18;22654:16;:37;;;;22715:12;22702:10;:25;;;;22760:78;22817:10;;22760:38;22781:16;;22760;;:20;;:38;;;;:::i;:::-;:42;;:78;;;;:::i;:::-;22740:17;:98;;;;22871:19;22851:17;:39;;;;22921:19;22901:17;:39;;;;22965:13;22951:11;:27;;;;23012:81;23071:11;;23012:40;23034:17;;23012;;:21;;:40;;;;:::i;:::-;:44;;:81;;;;:::i;:::-;22991:18;:102;;;;22330:771:::0;;;;;;:::o;16742:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;6771:90::-;6811:7;6838:15;6831:22;;6771:90;:::o;17214:34::-;;;;:::o;25455:899::-;25563:22;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25603:35:::1;25674:16;25603:98;;25749:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25731:53;;;25807:4;25827:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25731:130;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25714:147;;25904:1;25878:28;;:14;:28;;::::0;25874:226:::1;;25992:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25974:74;;;26057:4;26064:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25974:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25957:131;;25874:226;26126:14;26112:11;;:28;;;;;;;;;;;;;;;;;;26192:16;26174:15;;:34;;;;;;;;;;;;;;;;;;26290:4;26246:19;:41;26274:11;;;;;;;;;;;26246:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;26342:4;26305:12;:34;26326:11;;;;;;;;;;;26305:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;25592:762;25455:899:::0;;;:::o;17255:34::-;;;;:::o;20098:119::-;20164:7;20191:9;:18;20201:7;20191:18;;;;;;;;;;;;;;;;20184:25;;20098:119;;;:::o;17540:57::-;;;;:::o;17604:::-;;;;:::o;17377:38::-;;;;:::o;21841:152::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21977:8:::1;21953:12;:21;21966:7;21953:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21841:152:::0;;:::o;17087:36::-;;;;:::o;16856:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;6268:79::-;6306:7;6333:6;;;;;;;;;;;6326:13;;6268:79;:::o;19804:87::-;19843:13;19876:7;19869:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19804:87;:::o;23816:159::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23961:6:::1;23931:19;:27;23951:6;23931:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23816:159:::0;;:::o;16414:102::-;;;;;;;;;;;;;:::o;21133:120::-;21195:7;21222:23;;21215:30;;21133:120;:::o;17422:44::-;;;;:::o;20725:400::-;20845:4;20867:228;20890:12;:10;:12::i;:::-;20917:7;20939:145;20996:15;20939:145;;;;;;;;;;;;;;;;;:11;:25;20951:12;:10;:12::i;:::-;20939:25;;;;;;;;;;;;;;;:34;20965:7;20939:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;20867:8;:228::i;:::-;21113:4;21106:11;;20725:400;;;;:::o;24566:125::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24675:8:::1;24647:25;;:36;;;;;;;;;;;;;;;;;;24566:125:::0;:::o;26455:199::-;26560:4;26582:42;26592:12;:10;:12::i;:::-;26606:9;26617:6;26582:9;:42::i;:::-;;26642:4;26635:11;;26455:199;;;;:::o;24256:123::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24360:10:::1;24333:16;;:38;;;;;;;;;;;;;;;;;;24256:123:::0;:::o;24703:304::-;24810:10;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24845:1:::1;24835:6;:11:::0;24832:168:::1;;24879:6;24872:24;;;24905:4;24872:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24863:48;;24832:168;;;24959:6;24952:23;;;24976:3;24981:6;24952:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24944:44;;24832:168;24703:304:::0;;;;;:::o;23109:410::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23299:17:::1;23281:15;:35;;;;23345:17;23327:15;:35;;;;23385:11;23373:9;:23;;;;23436:75;23491:9;;23436:36;23456:15;;23436;;:19;;:36;;;;:::i;:::-;:40;;:75;;;;:::i;:::-;23409:24;:102;;;;23109:410:::0;;;:::o;24387:171::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24488:8:::1;24464:21;;:32;;;;;;;;;;;;;;;;;;24512:38;24541:8;24512:38;;;;;;:::i;:::-;;;;;;;;24387:171:::0;:::o;23527:159::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23635:11:::1;23620:12;:26;;;;23670:8;23657:10;:21;;;;23527:159:::0;;:::o;17005:36::-;;;;:::o;17048:30::-;;;;:::o;24113:135::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24229:10:::1;24196:22;;:44;;;;;;;;;;;;;;;;;;24113:135:::0;:::o;22161:161::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22306:8:::1;22277:17;:26;22295:7;22277:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;22161:161:::0;;:::o;17790:26::-;;;;;;;;;;;;;:::o;17130:37::-;;;;:::o;16798:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;16299:108::-;;;;;;;;;;;;;:::o;17900:45::-;;;;;;;;;;;;;:::o;16963:35::-;;;;:::o;20225:184::-;20342:7;20374:11;:18;20386:5;20374:18;;;;;;;;;;;;;;;:27;20393:7;20374:27;;;;;;;;;;;;;;;;20367:34;;20225:184;;;;:::o;17333:37::-;;;;:::o;6482:281::-;6405:12;:10;:12::i;:::-;6395:22;;:6;;;;;;;;;;:22;;;6387:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6605:1:::1;6585:22;;:8;:22;;::::0;6563:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6718:8;6689:38;;6710:6;::::0;::::1;;;;;;;;6689:38;;;;;;;;;;;;6747:8;6738:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6482:281:::0;:::o;17952:35::-;;;;;;;;;;;;;:::o;1419:181::-;1477:7;1497:9;1513:1;1509;:5;;;;:::i;:::-;1497:17;;1538:1;1533;:6;;1525:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1591:1;1584:8;;;1419:181;;;;:::o;230:115::-;283:15;326:10;311:26;;230:115;:::o;21462:371::-;21606:1;21589:19;;:5;:19;;;21581:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21687:1;21668:21;;:7;:21;;;21660:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21771:6;21741:11;:18;21753:5;21741:18;;;;;;;;;;;;;;;:27;21760:7;21741:27;;;;;;;;;;;;;;;:36;;;;21809:7;21793:32;;21802:5;21793:32;;;21818:6;21793:32;;;;;;:::i;:::-;;;;;;;;21462:371;;;:::o;27116:1890::-;27237:4;27280:1;27262:20;;:6;:20;;;27254:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27364:1;27343:23;;:9;:23;;;27335:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27423:16;;;;;;;;;;;27419:1580;;;27463:41;27478:6;27486:9;27497:6;27463:14;:41::i;:::-;27456:48;;;;27419:1580;27542:15;:23;27558:6;27542:23;;;;;;;;;;;;;;;;;;;;;;;;;27541:24;:55;;;;;27570:15;:26;27586:9;27570:26;;;;;;;;;;;;;;;;;;;;;;;;;27569:27;27541:55;27537:232;;;27657:12;;27647:6;:22;;27617:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;27537:232;27785:28;27816:24;27834:4;27816:9;:24::i;:::-;27785:55;;27855:28;27927:23;;27886:20;:64;;27855:95;;27989:23;:61;;;;;28034:16;;;;;;;;;;;28033:17;27989:61;:103;;;;;28072:12;:20;28085:6;28072:20;;;;;;;;;;;;;;;;;;;;;;;;;28071:21;27989:103;:145;;;;;28113:21;;;;;;;;;;;27989:145;27967:371;;;28173:25;;;;;;;;;;;28169:98;;;28244:23;;28221:46;;28169:98;28286:36;28301:20;28286:14;:36::i;:::-;27967:371;28374:102;28414:6;28374:102;;;;;;;;;;;;;;;;;:9;:17;28384:6;28374:17;;;;;;;;;;;;;;;;:21;;:102;;;;;:::i;:::-;28354:9;:17;28364:6;28354:17;;;;;;;;;;;;;;;:122;;;;28493:19;28516:17;:25;28534:6;28516:25;;;;;;;;;;;;;;;;;;;;;;;;;:74;;;;28562:17;:28;28580:9;28562:28;;;;;;;;;;;;;;;;;;;;;;;;;28516:74;28515:156;;28637:34;28645:6;28653:9;28664:6;28637:7;:34::i;:::-;28515:156;;;28611:6;28515:156;28493:178;;28692:16;;;;;;;;;;;:51;;;;;28713:19;:30;28733:9;28713:30;;;;;;;;;;;;;;;;;;;;;;;;;28712:31;28692:51;28688:134;;;28811:10;;28770:37;28795:11;28770:20;28780:9;28770;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;28762:60;;;;;;28688:134;28862:37;28887:11;28862:9;:20;28872:9;28862:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;28839:9;:20;28849:9;28839:20;;;;;;;;;;;;;;;:60;;;;28938:9;28921:40;;28930:6;28921:40;;;28949:11;28921:40;;;;;;:::i;:::-;;;;;;;;28983:4;28976:11;;;;;27116:1890;;;;;;:::o;1752:226::-;1872:7;1905:1;1900;:6;;1908:12;1892:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1932:9;1948:1;1944;:5;;;;:::i;:::-;1932:17;;1969:1;1962:8;;;1752:226;;;;;:::o;1608:136::-;1666:7;1693:43;1697:1;1700;1693:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1686:50;;1608:136;;;;:::o;29014:401::-;29141:4;29178:90;29214:6;29178:90;;;;;;;;;;;;;;;;;:9;:17;29188:6;29178:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;29158:9;:17;29168:6;29158:17;;;;;;;;;;;;;;;:110;;;;29302:32;29327:6;29302:9;:20;29312:9;29302:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;29279:9;:20;29289:9;29279:20;;;;;;;;;;;;;;;:55;;;;29367:9;29350:35;;29359:6;29350:35;;;29378:6;29350:35;;;;;;:::i;:::-;;;;;;;;29403:4;29396:11;;29014:401;;;;;:::o;29423:1159::-;18369:4;18350:16;;:23;;;;;;;;;;;;;;;;;;29495:19:::1;29517:107;29622:1;29517:86;29578:24;;29517:42;29543:15;;29517:7;:25;;:42;;;;:::i;:::-;:60;;:86;;;;:::i;:::-;:104;;:107;;;;:::i;:::-;29495:129;;29635:21;29659:24;29671:11;29659:7;:11;;:24;;;;:::i;:::-;29635:48;;29696:31;29713:13;29696:16;:31::i;:::-;29738:22;29763:21;29738:46;;29797:19;29819:76;29862:22;29882:1;29862:15;;:19;;:22;;;;:::i;:::-;29819:24;;:28;;:76;;;;:::i;:::-;29797:98;;29908:26;29937:101;30036:1;29937:80;30005:11;29937:49;29970:15;;29937:14;:32;;:49;;;;:::i;:::-;:67;;:80;;;;:::i;:::-;:98;;:101;;;;:::i;:::-;29908:130;;30049:20;30072:46;30106:11;30072:29;30091:9;;30072:14;:18;;:29;;;;:::i;:::-;:33;;:46;;;;:::i;:::-;30049:69;;30129:26;30158:80;30215:12;30158:38;30177:18;30158:14;:18;;:38;;;;:::i;:::-;:42;;:80;;;;:::i;:::-;30129:109;;30276:1;30255:18;:22;30251:105;;;30292:64;30313:22;;;;;;;;;;;30337:18;30292:20;:64::i;:::-;30251:105;30388:1;30373:12;:16;30369:87;;;30404:52;30425:16;;;;;;;;;;;30443:12;30404:20;:52::i;:::-;30369:87;30494:1;30473:18;:22;:41;;;;;30513:1;30499:11;:15;30473:41;30469:105;;;30529:45;30542:11;30555:18;30529:12;:45::i;:::-;30469:105;29484:1098;;;;;;;18415:5:::0;18396:16;;:24;;;;;;;;;;;;;;;;;;29423:1159;:::o;31777:624::-;31897:7;31917:17;31937:1;31917:21;;31955:12;:20;31968:6;31955:20;;;;;;;;;;;;;;;;;;;;;;;;;31951:216;;;32004:38;32038:3;32004:29;32015:17;;32004:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;31992:50;;31951:216;;;32064:12;:23;32077:9;32064:23;;;;;;;;;;;;;;;;;;;;;;;;;32060:107;;;32116:39;32151:3;32116:30;32127:18;;32116:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;32104:51;;32060:107;31951:216;32195:1;32183:9;:13;32179:174;;;32240:39;32269:9;32240;:24;32258:4;32240:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;32213:9;:24;32231:4;32213:24;;;;;;;;;;;;;;;:66;;;;32324:4;32299:42;;32308:6;32299:42;;;32331:9;32299:42;;;;;;:::i;:::-;;;;;;;;32179:174;32372:21;32383:9;32372:6;:10;;:21;;;;:::i;:::-;32365:28;;;31777:624;;;;;:::o;1986:250::-;2044:7;2073:1;2068;:6;2064:47;;2098:1;2091:8;;;;2064:47;2123:9;2139:1;2135;:5;;;;:::i;:::-;2123:17;;2168:1;2163;2159;:5;;;;:::i;:::-;:10;2151:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2227:1;2220:8;;;1986:250;;;;;:::o;2244:132::-;2302:7;2329:39;2333:1;2336;2329:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2322:46;;2244:132;;;;:::o;30590:658::-;30716:21;30754:1;30740:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30716:40;;30785:4;30767;30772:1;30767:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30811:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30801:4;30806:1;30801:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30846:62;30863:4;30878:15;;;;;;;;;;;30896:11;30846:8;:62::i;:::-;30947:15;;;;;;;;;;;:66;;;31028:11;31054:1;31098:4;31125;31161:15;30947:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31205:35;31222:11;31235:4;31205:35;;;;;;;:::i;:::-;;;;;;;;30645:603;30590:658;:::o;25307:140::-;25413:9;:18;;:26;25432:6;25413:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25307:140;;:::o;31256:513::-;31404:62;31421:4;31436:15;;;;;;;;;;;31454:11;31404:8;:62::i;:::-;31509:15;;;;;;;;;;;:31;;;31548:9;31581:4;31601:11;31627:1;31670;31713:7;:5;:7::i;:::-;31735:15;31509:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31256:513;;:::o;2384:312::-;2504:7;2536:1;2532;:5;2539:12;2524:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2563:9;2579:1;2575;:5;;;;:::i;:::-;2563:17;;2687:1;2680:8;;;2384:312;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:153::-;4221:9;4254:37;4285:5;4254:37;:::i;:::-;4241:50;;4144:153;;;:::o;4303:185::-;4417:64;4475:5;4417:64;:::i;:::-;4412:3;4405:77;4303:185;;:::o;4494:276::-;4614:4;4652:2;4641:9;4637:18;4629:26;;4665:98;4760:1;4749:9;4745:17;4736:6;4665:98;:::i;:::-;4494:276;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:116::-;5471:21;5486:5;5471:21;:::i;:::-;5464:5;5461:32;5451:60;;5507:1;5504;5497:12;5451:60;5401:116;:::o;5523:133::-;5566:5;5604:6;5591:20;5582:29;;5620:30;5644:5;5620:30;:::i;:::-;5523:133;;;;:::o;5662:323::-;5718:6;5767:2;5755:9;5746:7;5742:23;5738:32;5735:119;;;5773:79;;:::i;:::-;5735:119;5893:1;5918:50;5960:7;5951:6;5940:9;5936:22;5918:50;:::i;:::-;5908:60;;5864:114;5662:323;;;;:::o;5991:118::-;6078:24;6096:5;6078:24;:::i;:::-;6073:3;6066:37;5991:118;;:::o;6115:222::-;6208:4;6246:2;6235:9;6231:18;6223:26;;6259:71;6327:1;6316:9;6312:17;6303:6;6259:71;:::i;:::-;6115:222;;;;:::o;6343:86::-;6378:7;6418:4;6411:5;6407:16;6396:27;;6343:86;;;:::o;6435:112::-;6518:22;6534:5;6518:22;:::i;:::-;6513:3;6506:35;6435:112;;:::o;6553:214::-;6642:4;6680:2;6669:9;6665:18;6657:26;;6693:67;6757:1;6746:9;6742:17;6733:6;6693:67;:::i;:::-;6553:214;;;;:::o;6773:329::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:53;7077:7;7068:6;7057:9;7053:22;7032:53;:::i;:::-;7022:63;;6978:117;6773:329;;;;:::o;7108:468::-;7173:6;7181;7230:2;7218:9;7209:7;7205:23;7201:32;7198:119;;;7236:79;;:::i;:::-;7198:119;7356:1;7381:53;7426:7;7417:6;7406:9;7402:22;7381:53;:::i;:::-;7371:63;;7327:117;7483:2;7509:50;7551:7;7542:6;7531:9;7527:22;7509:50;:::i;:::-;7499:60;;7454:115;7108:468;;;;;:::o;7582:329::-;7641:6;7690:2;7678:9;7669:7;7665:23;7661:32;7658:119;;;7696:79;;:::i;:::-;7658:119;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7582:329;;;;:::o;7917:1057::-;8021:6;8029;8037;8045;8053;8061;8110:3;8098:9;8089:7;8085:23;8081:33;8078:120;;;8117:79;;:::i;:::-;8078:120;8237:1;8262:53;8307:7;8298:6;8287:9;8283:22;8262:53;:::i;:::-;8252:63;;8208:117;8364:2;8390:53;8435:7;8426:6;8415:9;8411:22;8390:53;:::i;:::-;8380:63;;8335:118;8492:2;8518:53;8563:7;8554:6;8543:9;8539:22;8518:53;:::i;:::-;8508:63;;8463:118;8620:2;8646:53;8691:7;8682:6;8671:9;8667:22;8646:53;:::i;:::-;8636:63;;8591:118;8748:3;8775:53;8820:7;8811:6;8800:9;8796:22;8775:53;:::i;:::-;8765:63;;8719:119;8877:3;8904:53;8949:7;8940:6;8929:9;8925:22;8904:53;:::i;:::-;8894:63;;8848:119;7917:1057;;;;;;;;:::o;8980:104::-;9025:7;9054:24;9072:5;9054:24;:::i;:::-;9043:35;;8980:104;;;:::o;9090:142::-;9193:32;9219:5;9193:32;:::i;:::-;9188:3;9181:45;9090:142;;:::o;9238:254::-;9347:4;9385:2;9374:9;9370:18;9362:26;;9398:87;9482:1;9471:9;9467:17;9458:6;9398:87;:::i;:::-;9238:254;;;;:::o;9498:619::-;9575:6;9583;9591;9640:2;9628:9;9619:7;9615:23;9611:32;9608:119;;;9646:79;;:::i;:::-;9608:119;9766:1;9791:53;9836:7;9827:6;9816:9;9812:22;9791:53;:::i;:::-;9781:63;;9737:117;9893:2;9919:53;9964:7;9955:6;9944:9;9940:22;9919:53;:::i;:::-;9909:63;;9864:118;10021:2;10047:53;10092:7;10083:6;10072:9;10068:22;10047:53;:::i;:::-;10037:63;;9992:118;9498:619;;;;;:::o;10123:474::-;10191:6;10199;10248:2;10236:9;10227:7;10223:23;10219:32;10216:119;;;10254:79;;:::i;:::-;10216:119;10374:1;10399:53;10444:7;10435:6;10424:9;10420:22;10399:53;:::i;:::-;10389:63;;10345:117;10501:2;10527:53;10572:7;10563:6;10552:9;10548:22;10527:53;:::i;:::-;10517:63;;10472:118;10123:474;;;;;:::o;10603:::-;10671:6;10679;10728:2;10716:9;10707:7;10703:23;10699:32;10696:119;;;10734:79;;:::i;:::-;10696:119;10854:1;10879:53;10924:7;10915:6;10904:9;10900:22;10879:53;:::i;:::-;10869:63;;10825:117;10981:2;11007:53;11052:7;11043:6;11032:9;11028:22;11007:53;:::i;:::-;10997:63;;10952:118;10603:474;;;;;:::o;11083:180::-;11131:77;11128:1;11121:88;11228:4;11225:1;11218:15;11252:4;11249:1;11242:15;11269:320;11313:6;11350:1;11344:4;11340:12;11330:22;;11397:1;11391:4;11387:12;11418:18;11408:81;;11474:4;11466:6;11462:17;11452:27;;11408:81;11536:2;11528:6;11525:14;11505:18;11502:38;11499:84;;11555:18;;:::i;:::-;11499:84;11320:269;11269:320;;;:::o;11595:182::-;11735:34;11731:1;11723:6;11719:14;11712:58;11595:182;:::o;11783:366::-;11925:3;11946:67;12010:2;12005:3;11946:67;:::i;:::-;11939:74;;12022:93;12111:3;12022:93;:::i;:::-;12140:2;12135:3;12131:12;12124:19;;11783:366;;;:::o;12155:419::-;12321:4;12359:2;12348:9;12344:18;12336:26;;12408:9;12402:4;12398:20;12394:1;12383:9;12379:17;12372:47;12436:131;12562:4;12436:131;:::i;:::-;12428:139;;12155:419;;;:::o;12580:143::-;12637:5;12668:6;12662:13;12653:22;;12684:33;12711:5;12684:33;:::i;:::-;12580:143;;;;:::o;12729:351::-;12799:6;12848:2;12836:9;12827:7;12823:23;12819:32;12816:119;;;12854:79;;:::i;:::-;12816:119;12974:1;12999:64;13055:7;13046:6;13035:9;13031:22;12999:64;:::i;:::-;12989:74;;12945:128;12729:351;;;;:::o;13086:332::-;13207:4;13245:2;13234:9;13230:18;13222:26;;13258:71;13326:1;13315:9;13311:17;13302:6;13258:71;:::i;:::-;13339:72;13407:2;13396:9;13392:18;13383:6;13339:72;:::i;:::-;13086:332;;;;;:::o;13424:143::-;13481:5;13512:6;13506:13;13497:22;;13528:33;13555:5;13528:33;:::i;:::-;13424:143;;;;:::o;13573:351::-;13643:6;13692:2;13680:9;13671:7;13667:23;13663:32;13660:119;;;13698:79;;:::i;:::-;13660:119;13818:1;13843:64;13899:7;13890:6;13879:9;13875:22;13843:64;:::i;:::-;13833:74;;13789:128;13573:351;;;;:::o;13930:332::-;14051:4;14089:2;14078:9;14074:18;14066:26;;14102:71;14170:1;14159:9;14155:17;14146:6;14102:71;:::i;:::-;14183:72;14251:2;14240:9;14236:18;14227:6;14183:72;:::i;:::-;13930:332;;;;;:::o;14268:137::-;14322:5;14353:6;14347:13;14338:22;;14369:30;14393:5;14369:30;:::i;:::-;14268:137;;;;:::o;14411:345::-;14478:6;14527:2;14515:9;14506:7;14502:23;14498:32;14495:119;;;14533:79;;:::i;:::-;14495:119;14653:1;14678:61;14731:7;14722:6;14711:9;14707:22;14678:61;:::i;:::-;14668:71;;14624:125;14411:345;;;;:::o;14762:225::-;14902:34;14898:1;14890:6;14886:14;14879:58;14971:8;14966:2;14958:6;14954:15;14947:33;14762:225;:::o;14993:366::-;15135:3;15156:67;15220:2;15215:3;15156:67;:::i;:::-;15149:74;;15232:93;15321:3;15232:93;:::i;:::-;15350:2;15345:3;15341:12;15334:19;;14993:366;;;:::o;15365:419::-;15531:4;15569:2;15558:9;15554:18;15546:26;;15618:9;15612:4;15608:20;15604:1;15593:9;15589:17;15582:47;15646:131;15772:4;15646:131;:::i;:::-;15638:139;;15365:419;;;:::o;15790:180::-;15838:77;15835:1;15828:88;15935:4;15932:1;15925:15;15959:4;15956:1;15949:15;15976:191;16016:3;16035:20;16053:1;16035:20;:::i;:::-;16030:25;;16069:20;16087:1;16069:20;:::i;:::-;16064:25;;16112:1;16109;16105:9;16098:16;;16133:3;16130:1;16127:10;16124:36;;;16140:18;;:::i;:::-;16124:36;15976:191;;;;:::o;16173:177::-;16313:29;16309:1;16301:6;16297:14;16290:53;16173:177;:::o;16356:366::-;16498:3;16519:67;16583:2;16578:3;16519:67;:::i;:::-;16512:74;;16595:93;16684:3;16595:93;:::i;:::-;16713:2;16708:3;16704:12;16697:19;;16356:366;;;:::o;16728:419::-;16894:4;16932:2;16921:9;16917:18;16909:26;;16981:9;16975:4;16971:20;16967:1;16956:9;16952:17;16945:47;17009:131;17135:4;17009:131;:::i;:::-;17001:139;;16728:419;;;:::o;17153:223::-;17293:34;17289:1;17281:6;17277:14;17270:58;17362:6;17357:2;17349:6;17345:15;17338:31;17153:223;:::o;17382:366::-;17524:3;17545:67;17609:2;17604:3;17545:67;:::i;:::-;17538:74;;17621:93;17710:3;17621:93;:::i;:::-;17739:2;17734:3;17730:12;17723:19;;17382:366;;;:::o;17754:419::-;17920:4;17958:2;17947:9;17943:18;17935:26;;18007:9;18001:4;17997:20;17993:1;17982:9;17978:17;17971:47;18035:131;18161:4;18035:131;:::i;:::-;18027:139;;17754:419;;;:::o;18179:221::-;18319:34;18315:1;18307:6;18303:14;18296:58;18388:4;18383:2;18375:6;18371:15;18364:29;18179:221;:::o;18406:366::-;18548:3;18569:67;18633:2;18628:3;18569:67;:::i;:::-;18562:74;;18645:93;18734:3;18645:93;:::i;:::-;18763:2;18758:3;18754:12;18747:19;;18406:366;;;:::o;18778:419::-;18944:4;18982:2;18971:9;18967:18;18959:26;;19031:9;19025:4;19021:20;19017:1;19006:9;19002:17;18995:47;19059:131;19185:4;19059:131;:::i;:::-;19051:139;;18778:419;;;:::o;19203:224::-;19343:34;19339:1;19331:6;19327:14;19320:58;19412:7;19407:2;19399:6;19395:15;19388:32;19203:224;:::o;19433:366::-;19575:3;19596:67;19660:2;19655:3;19596:67;:::i;:::-;19589:74;;19672:93;19761:3;19672:93;:::i;:::-;19790:2;19785:3;19781:12;19774:19;;19433:366;;;:::o;19805:419::-;19971:4;20009:2;19998:9;19994:18;19986:26;;20058:9;20052:4;20048:20;20044:1;20033:9;20029:17;20022:47;20086:131;20212:4;20086:131;:::i;:::-;20078:139;;19805:419;;;:::o;20230:222::-;20370:34;20366:1;20358:6;20354:14;20347:58;20439:5;20434:2;20426:6;20422:15;20415:30;20230:222;:::o;20458:366::-;20600:3;20621:67;20685:2;20680:3;20621:67;:::i;:::-;20614:74;;20697:93;20786:3;20697:93;:::i;:::-;20815:2;20810:3;20806:12;20799:19;;20458:366;;;:::o;20830:419::-;20996:4;21034:2;21023:9;21019:18;21011:26;;21083:9;21077:4;21073:20;21069:1;21058:9;21054:17;21047:47;21111:131;21237:4;21111:131;:::i;:::-;21103:139;;20830:419;;;:::o;21255:227::-;21395:34;21391:1;21383:6;21379:14;21372:58;21464:10;21459:2;21451:6;21447:15;21440:35;21255:227;:::o;21488:366::-;21630:3;21651:67;21715:2;21710:3;21651:67;:::i;:::-;21644:74;;21727:93;21816:3;21727:93;:::i;:::-;21845:2;21840:3;21836:12;21829:19;;21488:366;;;:::o;21860:419::-;22026:4;22064:2;22053:9;22049:18;22041:26;;22113:9;22107:4;22103:20;22099:1;22088:9;22084:17;22077:47;22141:131;22267:4;22141:131;:::i;:::-;22133:139;;21860:419;;;:::o;22285:194::-;22325:4;22345:20;22363:1;22345:20;:::i;:::-;22340:25;;22379:20;22397:1;22379:20;:::i;:::-;22374:25;;22423:1;22420;22416:9;22408:17;;22447:1;22441:4;22438:11;22435:37;;;22452:18;;:::i;:::-;22435:37;22285:194;;;;:::o;22485:410::-;22525:7;22548:20;22566:1;22548:20;:::i;:::-;22543:25;;22582:20;22600:1;22582:20;:::i;:::-;22577:25;;22637:1;22634;22630:9;22659:30;22677:11;22659:30;:::i;:::-;22648:41;;22838:1;22829:7;22825:15;22822:1;22819:22;22799:1;22792:9;22772:83;22749:139;;22868:18;;:::i;:::-;22749:139;22533:362;22485:410;;;;:::o;22901:180::-;22949:77;22946:1;22939:88;23046:4;23043:1;23036:15;23070:4;23067:1;23060:15;23087:185;23127:1;23144:20;23162:1;23144:20;:::i;:::-;23139:25;;23178:20;23196:1;23178:20;:::i;:::-;23173:25;;23217:1;23207:35;;23222:18;;:::i;:::-;23207:35;23264:1;23261;23257:9;23252:14;;23087:185;;;;:::o;23278:220::-;23418:34;23414:1;23406:6;23402:14;23395:58;23487:3;23482:2;23474:6;23470:15;23463:28;23278:220;:::o;23504:366::-;23646:3;23667:67;23731:2;23726:3;23667:67;:::i;:::-;23660:74;;23743:93;23832:3;23743:93;:::i;:::-;23861:2;23856:3;23852:12;23845:19;;23504:366;;;:::o;23876:419::-;24042:4;24080:2;24069:9;24065:18;24057:26;;24129:9;24123:4;24119:20;24115:1;24104:9;24100:17;24093:47;24157:131;24283:4;24157:131;:::i;:::-;24149:139;;23876:419;;;:::o;24301:180::-;24349:77;24346:1;24339:88;24446:4;24443:1;24436:15;24470:4;24467:1;24460:15;24487:180;24535:77;24532:1;24525:88;24632:4;24629:1;24622:15;24656:4;24653:1;24646:15;24673:85;24718:7;24747:5;24736:16;;24673:85;;;:::o;24764:158::-;24822:9;24855:61;24873:42;24882:32;24908:5;24882:32;:::i;:::-;24873:42;:::i;:::-;24855:61;:::i;:::-;24842:74;;24764:158;;;:::o;24928:147::-;25023:45;25062:5;25023:45;:::i;:::-;25018:3;25011:58;24928:147;;:::o;25081:114::-;25148:6;25182:5;25176:12;25166:22;;25081:114;;;:::o;25201:184::-;25300:11;25334:6;25329:3;25322:19;25374:4;25369:3;25365:14;25350:29;;25201:184;;;;:::o;25391:132::-;25458:4;25481:3;25473:11;;25511:4;25506:3;25502:14;25494:22;;25391:132;;;:::o;25529:108::-;25606:24;25624:5;25606:24;:::i;:::-;25601:3;25594:37;25529:108;;:::o;25643:179::-;25712:10;25733:46;25775:3;25767:6;25733:46;:::i;:::-;25811:4;25806:3;25802:14;25788:28;;25643:179;;;;:::o;25828:113::-;25898:4;25930;25925:3;25921:14;25913:22;;25828:113;;;:::o;25977:732::-;26096:3;26125:54;26173:5;26125:54;:::i;:::-;26195:86;26274:6;26269:3;26195:86;:::i;:::-;26188:93;;26305:56;26355:5;26305:56;:::i;:::-;26384:7;26415:1;26400:284;26425:6;26422:1;26419:13;26400:284;;;26501:6;26495:13;26528:63;26587:3;26572:13;26528:63;:::i;:::-;26521:70;;26614:60;26667:6;26614:60;:::i;:::-;26604:70;;26460:224;26447:1;26444;26440:9;26435:14;;26400:284;;;26404:14;26700:3;26693:10;;26101:608;;;25977:732;;;;:::o;26715:831::-;26978:4;27016:3;27005:9;27001:19;26993:27;;27030:71;27098:1;27087:9;27083:17;27074:6;27030:71;:::i;:::-;27111:80;27187:2;27176:9;27172:18;27163:6;27111:80;:::i;:::-;27238:9;27232:4;27228:20;27223:2;27212:9;27208:18;27201:48;27266:108;27369:4;27360:6;27266:108;:::i;:::-;27258:116;;27384:72;27452:2;27441:9;27437:18;27428:6;27384:72;:::i;:::-;27466:73;27534:3;27523:9;27519:19;27510:6;27466:73;:::i;:::-;26715:831;;;;;;;;:::o;27552:483::-;27723:4;27761:2;27750:9;27746:18;27738:26;;27774:71;27842:1;27831:9;27827:17;27818:6;27774:71;:::i;:::-;27892:9;27886:4;27882:20;27877:2;27866:9;27862:18;27855:48;27920:108;28023:4;28014:6;27920:108;:::i;:::-;27912:116;;27552:483;;;;;:::o;28041:807::-;28290:4;28328:3;28317:9;28313:19;28305:27;;28342:71;28410:1;28399:9;28395:17;28386:6;28342:71;:::i;:::-;28423:72;28491:2;28480:9;28476:18;28467:6;28423:72;:::i;:::-;28505:80;28581:2;28570:9;28566:18;28557:6;28505:80;:::i;:::-;28595;28671:2;28660:9;28656:18;28647:6;28595:80;:::i;:::-;28685:73;28753:3;28742:9;28738:19;28729:6;28685:73;:::i;:::-;28768;28836:3;28825:9;28821:19;28812:6;28768:73;:::i;:::-;28041:807;;;;;;;;;:::o;28854:663::-;28942:6;28950;28958;29007:2;28995:9;28986:7;28982:23;28978:32;28975:119;;;29013:79;;:::i;:::-;28975:119;29133:1;29158:64;29214:7;29205:6;29194:9;29190:22;29158:64;:::i;:::-;29148:74;;29104:128;29271:2;29297:64;29353:7;29344:6;29333:9;29329:22;29297:64;:::i;:::-;29287:74;;29242:129;29410:2;29436:64;29492:7;29483:6;29472:9;29468:22;29436:64;:::i;:::-;29426:74;;29381:129;28854:663;;;;;:::o

Swarm Source

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