ETH Price: $2,484.53 (-1.16%)

Token

AIMIX (AMX)
 

Overview

Max Total Supply

100,000,000 AMX

Holders

108

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.781870276 AMX

Value
$0.00
0xc2afa4499ba702cc508e350a2e843661fc177dd5
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
AIMIX

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

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

/**

Website     : https://ai-mix.io/
Telegram    : https://t.me/aimixio
Twitter     : https://twitter.com/aimixio

*/

// 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 AIMIX is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "AIMIX";
    string private _symbol = "AMX";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress =
        payable(0x6fE160A56BB1daF398aB85F75eED9A6ea282C610);
    address payable public DeployerWalletAddress =
        payable(0x1D7d472eD930e6Df992Eb7F75183f0275E90Df32);
    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 = 25;
    uint256 public _buyDeployerFee = 0;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 25;
    uint256 public _sellDeployerFee = 0;

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

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

    uint256 private _totalSupply    = 100000000* 10**_decimals;
    uint256 public _maxTxAmount     = 1000000 * 10**_decimals;
    uint256 public _walletMax       = 1000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 300000 * 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(
            _buyDeployerFee
        );
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(
            _sellDeployerFee
        );
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(
            _deployerShare
        );

        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 AimixExcludeMaxTx(address holder, bool exempt)
        external
        onlyOwner
    {
        isTxLimitExempt[holder] = exempt;
    }

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

    function AimixSetFee(
        uint256 newBuyLiquidityTax,
        uint256 newBuyMarketingTax,
        uint256 newBuyOwnerTax,

        uint256 newSellLiquidityTax,
        uint256 newSellMarketingTax,
        uint256 newSellOwnerTax
    ) external onlyOwner {
        _buyLiquidityFee = newBuyLiquidityTax;
        _buyMarketingFee = newBuyMarketingTax;
        _buyDeployerFee = newBuyOwnerTax;

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

        _sellLiquidityFee = newSellLiquidityTax;
        _sellMarketingFee = newSellMarketingTax;
        _sellDeployerFee = newSellOwnerTax;

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

    function setDistributionSettings(
        uint256 newLiquidityShare,
        uint256 newMarketingShare,
        uint256 newOwnerShare
    ) external onlyOwner {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _deployerShare = newOwnerShare;

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

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

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

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

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

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

    function AimixOwnerWallet(address newAddress) external onlyOwner {
        DeployerWalletAddress = payable(newAddress);
    }

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function AimixTransferTokenBalance(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 AimixSwapBalance() 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 amountETHOwner = amountReceived.mul(_deployerShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(
            amountETHOwner
        );

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

        if (amountETHOwner > 0)
            transferToAddressETH(DeployerWalletAddress, amountETHOwner);

        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":"AimixExcludeMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"AimixExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"AimixExludeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"AimixMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"AimixOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newBuyMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newBuyOwnerTax","type":"uint256"},{"internalType":"uint256","name":"newSellLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newSellMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newSellOwnerTax","type":"uint256"}],"name":"AimixSetFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"MaxLimit","type":"uint256"}],"name":"AimixSetMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"AimixSwapBalance","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":"AimixTransferTokenBalance","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DeployerWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDeployerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_deployerShare","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":"_sellDeployerFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newOwnerShare","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"}]

60a06040526040518060400160405280600581526020017f41494d4958000000000000000000000000000000000000000000000000000000815250600290816200004a919062000e12565b506040518060400160405280600381526020017f414d5800000000000000000000000000000000000000000000000000000000008152506003908162000091919062000e12565b506009600460006101000a81548160ff021916908360ff160217905550736fe160a56bb1daf398ab85f75eed9a6ea282c610600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731d7d472ed930e6df992eb7f75183f0275e90df32600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c556019600d556000600e556000600f556019601055600060115560006012556005601355600560145560196015556019601655600a601755600460009054906101000a900460ff16600a620001e7919062001089565b6305f5e100620001f89190620010da565b601855600460009054906101000a900460ff16600a62000219919062001089565b620f4240620002299190620010da565b601955600460009054906101000a900460ff16600a6200024a919062001089565b620f42406200025a9190620010da565b601a55600460009054906101000a900460ff16600a6200027b919062001089565b620493e06200028b9190620010da565b601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff021916908315150217905550348015620002ec57600080fd5b506000620002ff62000b0460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042891906200118f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000490573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b691906200118f565b6040518363ffffffff1660e01b8152600401620004d5929190620011d2565b6020604051808303816000875af1158015620004f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200051b91906200118f565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860006200065762000b0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000739600e5462000725600d54600c5462000b3560201b620029621790919060201c565b62000b3560201b620029621790919060201c565b6015819055506200077860115462000764601054600f5462000b3560201b620029621790919060201c565b62000b3560201b620029621790919060201c565b601681905550620007b7601454620007a360135460125462000b3560201b620029621790919060201c565b62000b3560201b620029621790919060201c565b601781905550600160096000620007d362000b0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60006200090c62000b0c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506018546006600062000a4662000b0460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a9462000b0460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000af5919062001210565b60405180910390a350620012eb565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000b4691906200122d565b90508381101562000b8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8590620012c9565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c1a57607f821691505b60208210810362000c305762000c2f62000bd2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c9a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c5b565b62000ca6868362000c5b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cf362000ced62000ce78462000cbe565b62000cc8565b62000cbe565b9050919050565b6000819050919050565b62000d0f8362000cd2565b62000d2762000d1e8262000cfa565b84845462000c68565b825550505050565b600090565b62000d3e62000d2f565b62000d4b81848462000d04565b505050565b5b8181101562000d735762000d6760008262000d34565b60018101905062000d51565b5050565b601f82111562000dc25762000d8c8162000c36565b62000d978462000c4b565b8101602085101562000da7578190505b62000dbf62000db68562000c4b565b83018262000d50565b50505b505050565b600082821c905092915050565b600062000de76000198460080262000dc7565b1980831691505092915050565b600062000e02838362000dd4565b9150826002028217905092915050565b62000e1d8262000b98565b67ffffffffffffffff81111562000e395762000e3862000ba3565b5b62000e45825462000c01565b62000e5282828562000d77565b600060209050601f83116001811462000e8a576000841562000e75578287015190505b62000e81858262000df4565b86555062000ef1565b601f19841662000e9a8662000c36565b60005b8281101562000ec45784890151825560018201915060208501945060208101905062000e9d565b8683101562000ee4578489015162000ee0601f89168262000dd4565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f875780860481111562000f5f5762000f5e62000ef9565b5b600185161562000f6f5780820291505b808102905062000f7f8562000f28565b945062000f3f565b94509492505050565b60008262000fa2576001905062001075565b8162000fb2576000905062001075565b816001811462000fcb576002811462000fd6576200100c565b600191505062001075565b60ff84111562000feb5762000fea62000ef9565b5b8360020a91508482111562001005576200100462000ef9565b5b5062001075565b5060208310610133831016604e8410600b8410161715620010465782820a90508381111562001040576200103f62000ef9565b5b62001075565b62001055848484600162000f35565b925090508184048111156200106f576200106e62000ef9565b5b81810290505b9392505050565b600060ff82169050919050565b6000620010968262000cbe565b9150620010a3836200107c565b9250620010d27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f90565b905092915050565b6000620010e78262000cbe565b9150620010f48362000cbe565b9250828202620011048162000cbe565b915082820484148315176200111e576200111d62000ef9565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001157826200112a565b9050919050565b62001169816200114a565b81146200117557600080fd5b50565b60008151905062001189816200115e565b92915050565b600060208284031215620011a857620011a762001125565b5b6000620011b88482850162001178565b91505092915050565b620011cc816200114a565b82525050565b6000604082019050620011e96000830185620011c1565b620011f86020830184620011c1565b9392505050565b6200120a8162000cbe565b82525050565b6000602082019050620012276000830184620011ff565b92915050565b60006200123a8262000cbe565b9150620012478362000cbe565b925082820190508082111562001262576200126162000ef9565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620012b1601b8362001268565b9150620012be8262001279565b602082019050919050565b60006020820190508181036000830152620012e481620012a2565b9050919050565b608051614d276200130e6000396000818161107701526110a30152614d276000f3fe6080604052600436106103855760003560e01c806388790a68116101d1578063c816841b11610102578063da00097d116100a0578063f0cd1dac1161006f578063f0cd1dac14610d5f578063f2fde38b14610d8a578063f872858a14610db3578063fd05e4df14610dde5761038c565b8063da00097d14610ca3578063dc44b6a014610cce578063dd1b2b9714610cf9578063dd62ed3e14610d225761038c565b8063cb5f6d05116100dc578063cb5f6d0514610bf9578063d01edad014610c24578063d158272d14610c4f578063d3ff79d614610c7a5761038c565b8063c816841b14610b66578063c860795214610b91578063c867d60b14610bbc5761038c565b8063a5d69d1f1161016f578063b70b649a11610149578063b70b649a14610ac0578063c2d4640e14610ae9578063c49b9a8014610b12578063c5d2418914610b3b5761038c565b8063a5d69d1f14610a1d578063a9059cbb14610a46578063b03024a614610a835761038c565b806395d89b41116101ab57806395d89b411461095f578063a073d37f1461098a578063a08e671f146109b5578063a457c2d7146109e05761038c565b806388790a68146108cc5780638b42507f146108f75780638da5cb5b146109345761038c565b80635342acb4116102b657806370a08231116102545780637d1db4a5116102235780637d1db4a514610822578063807c2d9c1461084d57806382eefb4314610878578063844d591c146108a35761038c565b806370a082311461077c57806375ca9b0c146107b957806378271f2b146107e25780637b26ac6c1461080b5761038c565b80635881f3ef116102905780635881f3ef146106c0578063611fcea0146106fd57806361a23c691461072657806363b52db4146107515761038c565b80635342acb41461062d578063557ed1ba1461066a57806357a5802f146106955761038c565b80632b112e49116103235780633b97084a116102fd5780633b97084a146105735780633ecad2711461059c578063468b66d7146105d95780634a74bb02146106025761038c565b80632b112e49146104e0578063313ce5671461050b57806339509351146105365761038c565b806318160ddd1161035f57806318160ddd1461042457806323b872dd1461044f5780632563ae831461048c57806327c8f835146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc5780631694505e146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610e09565b6040516103b39190613d70565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613e2b565b610e9b565b6040516103f09190613e86565b60405180910390f35b34801561040557600080fd5b5061040e610eb9565b60405161041b9190613f00565b60405180910390f35b34801561043057600080fd5b50610439610edf565b6040516104469190613f2a565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190613f45565b610ee9565b6040516104839190613e86565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613fc4565b610fc3565b005b3480156104c157600080fd5b506104ca611075565b6040516104d79190614000565b60405180910390f35b3480156104ec57600080fd5b506104f5611099565b6040516105029190613f2a565b60405180910390f35b34801561051757600080fd5b506105206110dd565b60405161052d9190614037565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613e2b565b6110f4565b60405161056a9190613e86565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190614052565b6111a7565b005b3480156105a857600080fd5b506105c360048036038101906105be919061407f565b611246565b6040516105d09190613e86565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb91906140ac565b611266565b005b34801561060e57600080fd5b5061061761130d565b6040516106249190613e86565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f919061407f565b611320565b6040516106619190613e86565b60405180910390f35b34801561067657600080fd5b5061067f611340565b60405161068c9190613f2a565b60405180910390f35b3480156106a157600080fd5b506106aa611348565b6040516106b79190613f2a565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e2919061407f565b61134e565b6040516106f49190614000565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f91906140ec565b611851565b005b34801561073257600080fd5b5061073b61197a565b6040516107489190613f2a565b60405180910390f35b34801561075d57600080fd5b50610766611980565b6040516107739190613f2a565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e919061407f565b611986565b6040516107b09190613f2a565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db9190614179565b6119cf565b005b3480156107ee57600080fd5b5061080960048036038101906108049190614179565b611abf565b005b34801561081757600080fd5b50610820611baf565b005b34801561082e57600080fd5b50610837611c9a565b6040516108449190613f2a565b60405180910390f35b34801561085957600080fd5b50610862611ca0565b60405161086f9190613f2a565b60405180910390f35b34801561088457600080fd5b5061088d611ca6565b60405161089a9190613f2a565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190614179565b611cac565b005b3480156108d857600080fd5b506108e1611d9c565b6040516108ee9190613f2a565b60405180910390f35b34801561090357600080fd5b5061091e6004803603810190610919919061407f565b611da2565b60405161092b9190613e86565b60405180910390f35b34801561094057600080fd5b50610949611dc2565b6040516109569190614000565b60405180910390f35b34801561096b57600080fd5b50610974611deb565b6040516109819190613d70565b60405180910390f35b34801561099657600080fd5b5061099f611e7d565b6040516109ac9190613f2a565b60405180910390f35b3480156109c157600080fd5b506109ca611e87565b6040516109d79190613f2a565b60405180910390f35b3480156109ec57600080fd5b50610a076004803603810190610a029190613e2b565b611e8d565b604051610a149190613e86565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f9190613fc4565b611f5a565b005b348015610a5257600080fd5b50610a6d6004803603810190610a689190613e2b565b61200c565b604051610a7a9190613e86565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613f45565b61202b565b604051610ab79190613e86565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614179565b6121d3565b005b348015610af557600080fd5b50610b106004803603810190610b0b91906141b9565b6122c3565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190613fc4565b6123a3565b005b348015610b4757600080fd5b50610b5061248c565b604051610b5d9190613f2a565b60405180910390f35b348015610b7257600080fd5b50610b7b612492565b604051610b889190614000565b60405180910390f35b348015610b9d57600080fd5b50610ba66124b8565b604051610bb39190613f2a565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde919061407f565b6124be565b604051610bf09190613e86565b60405180910390f35b348015610c0557600080fd5b50610c0e6124de565b604051610c1b9190613f2a565b60405180910390f35b348015610c3057600080fd5b50610c396124e4565b604051610c46919061422d565b60405180910390f35b348015610c5b57600080fd5b50610c6461250a565b604051610c71919061422d565b60405180910390f35b348015610c8657600080fd5b50610ca16004803603810190610c9c919061407f565b612530565b005b348015610caf57600080fd5b50610cb8612609565b604051610cc59190613e86565b60405180910390f35b348015610cda57600080fd5b50610ce361261c565b604051610cf09190613f2a565b60405180910390f35b348015610d0557600080fd5b50610d206004803603810190610d1b919061407f565b612622565b005b348015610d2e57600080fd5b50610d496004803603810190610d449190614248565b6126fb565b604051610d569190613f2a565b60405180910390f35b348015610d6b57600080fd5b50610d74612782565b604051610d819190613f2a565b60405180910390f35b348015610d9657600080fd5b50610db16004803603810190610dac919061407f565b612788565b005b348015610dbf57600080fd5b50610dc8612949565b604051610dd59190613e86565b60405180910390f35b348015610dea57600080fd5b50610df361295c565b604051610e009190613f2a565b60405180910390f35b606060028054610e18906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e44906142b7565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b6000610eaf610ea86129c0565b84846129c8565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b6000610ef6848484612b91565b50610fb884610f036129c0565b610fb385604051806060016040528060288152602001614ca560289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f696129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b6129c8565b600190509392505050565b610fcb6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614334565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006110d86110c77f0000000000000000000000000000000000000000000000000000000000000000611986565b6018546131d890919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b600061119d6111016129c0565b8461119885600760006111126129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b6129c8565b6001905092915050565b6111af6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390614334565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b61126e6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614334565b60405180910390fd5b8160198190555080601a819055505050565b601d60159054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60125481565b60006113586129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc90614334565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114599190614369565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e49190614369565b6040518363ffffffff1660e01b8152600401611501929190614396565b602060405180830381865afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190614369565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d5578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e79190614369565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190614369565b6040518363ffffffff1660e01b815260040161168f929190614396565b6020604051808303816000875af11580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190614369565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6118596129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd90614334565b60405180910390fd5b85600c8190555084600d8190555083600e81905550611926600e54611918600d54600c5461296290919063ffffffff16565b61296290919063ffffffff16565b60158190555082600f81905550816010819055508060118190555061196c60115461195e601054600f5461296290919063ffffffff16565b61296290919063ffffffff16565b601681905550505050505050565b60135481565b60145481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119d76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614334565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ac76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90614334565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bb76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b90614334565b60405180910390fd5b6000479050611c51611dc2565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c96573d6000803e3d6000fd5b5050565b60195481565b601a5481565b60165481565b611cb46129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614334565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611dfa906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e26906142b7565b8015611e735780601f10611e4857610100808354040283529160200191611e73565b820191906000526020600020905b815481529060010190602001808311611e5657829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b6000611f50611e9a6129c0565b84611f4b85604051806060016040528060258152602001614ccd6025913960076000611ec46129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b6129c8565b6001905092915050565b611f626129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614334565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006120206120196129c0565b8484612b91565b506001905092915050565b60006120356129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990614334565b60405180910390fd5b6000820361214b578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121039190614000565b602060405180830381865afa158015612120573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214491906143d4565b91506121cc565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401612186929190614401565b6020604051808303816000875af11580156121a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c9919061443f565b90505b9392505050565b6121db6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225f90614334565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6122cb6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f90614334565b60405180910390fd5b82601281905550816013819055508060148190555061239860145461238a60135460125461296290919063ffffffff16565b61296290919063ffffffff16565b601781905550505050565b6123ab6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f90614334565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124819190613e86565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b60115481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125386129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc90614334565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60169054906101000a900460ff1681565b600c5481565b61262a6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614334565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60155481565b6127906129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614334565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361288c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612883906144de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b600e5481565b6000808284612971919061452d565b9050838110156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad906145ad565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e9061463f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d906146d1565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b849190613f2a565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf890614763565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c67906147f5565b60405180910390fd5b601d60149054906101000a900460ff1615612c9757612c90848484613222565b905061316d565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d3b5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8657601954821115612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c90614887565b60405180910390fd5b5b6000612d9130611986565b90506000601b548210159050808015612db75750601d60149054906101000a900460ff16155b8015612e0d5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e255750601d60159054906101000a900460ff165b15612e4f57601d60169054906101000a900460ff1615612e4557601b5491505b612e4e826133f5565b5b612ed8846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fbe5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fd257612fcd8787876135e6565b612fd4565b845b9050601d60179054906101000a900460ff16801561303c5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306b57601a5461305f8261305189611986565b61296290919063ffffffff16565b111561306a57600080fd5b5b6130bd81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161315d9190613f2a565b60405180910390a3600193505050505b9392505050565b60008383111582906131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b39190613d70565b60405180910390fd5b50600083856131cb91906148a7565b9050809150509392505050565b600061321a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613174565b905092915050565b60006132ad826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334282600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133e29190613f2a565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061344e60026134406017546134326012548761380d90919063ffffffff16565b61388790919063ffffffff16565b61388790919063ffffffff16565b9050600061346582846131d890919063ffffffff16565b9050613470816138d1565b600047905060006134a1613490600260125461388790919063ffffffff16565b6017546131d890919063ffffffff16565b905060006134df60026134d1846134c36012548861380d90919063ffffffff16565b61388790919063ffffffff16565b61388790919063ffffffff16565b9050600061350a836134fc6014548761380d90919063ffffffff16565b61388790919063ffffffff16565b905060006135338261352585886131d890919063ffffffff16565b6131d890919063ffffffff16565b9050600081111561356b5761356a600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b4d565b5b60008211156135a1576135a0600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b4d565b5b6000831180156135b15750600087115b156135c1576135c08784613b98565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561366e5761366760646136596015548661380d90919063ffffffff16565b61388790919063ffffffff16565b90506136ec565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136eb576136e860646136da6016548661380d90919063ffffffff16565b61388790919063ffffffff16565b90505b5b60008111156137f05761374781600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137e79190613f2a565b60405180910390a35b61380381846131d890919063ffffffff16565b9150509392505050565b600080830361381f5760009050613881565b6000828461382d91906148db565b905082848261383c919061494c565b1461387c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613873906149ef565b60405180910390fd5b809150505b92915050565b60006138c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c7d565b905092915050565b6000600267ffffffffffffffff8111156138ee576138ed614a0f565b5b60405190808252806020026020018201604052801561391c5781602001602082028036833780820191505090505b509050308160008151811061393457613933614a3e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ff9190614369565b81600181518110613a1357613a12614a3e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a7a30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c8565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ade959493929190614b66565b600060405180830381600087803b158015613af857600080fd5b505af1158015613b0c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613b41929190614bc0565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b93573d6000803e3d6000fd5b505050565b613bc530601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c8565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c11611dc2565b426040518863ffffffff1660e01b8152600401613c3396959493929190614bf0565b60606040518083038185885af1158015613c51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c769190614c51565b5050505050565b60008083118290613cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbb9190613d70565b60405180910390fd5b5060008385613cd3919061494c565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d1a578082015181840152602081019050613cff565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d4282613ce0565b613d4c8185613ceb565b9350613d5c818560208601613cfc565b613d6581613d26565b840191505092915050565b60006020820190508181036000830152613d8a8184613d37565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613dc282613d97565b9050919050565b613dd281613db7565b8114613ddd57600080fd5b50565b600081359050613def81613dc9565b92915050565b6000819050919050565b613e0881613df5565b8114613e1357600080fd5b50565b600081359050613e2581613dff565b92915050565b60008060408385031215613e4257613e41613d92565b5b6000613e5085828601613de0565b9250506020613e6185828601613e16565b9150509250929050565b60008115159050919050565b613e8081613e6b565b82525050565b6000602082019050613e9b6000830184613e77565b92915050565b6000819050919050565b6000613ec6613ec1613ebc84613d97565b613ea1565b613d97565b9050919050565b6000613ed882613eab565b9050919050565b6000613eea82613ecd565b9050919050565b613efa81613edf565b82525050565b6000602082019050613f156000830184613ef1565b92915050565b613f2481613df5565b82525050565b6000602082019050613f3f6000830184613f1b565b92915050565b600080600060608486031215613f5e57613f5d613d92565b5b6000613f6c86828701613de0565b9350506020613f7d86828701613de0565b9250506040613f8e86828701613e16565b9150509250925092565b613fa181613e6b565b8114613fac57600080fd5b50565b600081359050613fbe81613f98565b92915050565b600060208284031215613fda57613fd9613d92565b5b6000613fe884828501613faf565b91505092915050565b613ffa81613db7565b82525050565b60006020820190506140156000830184613ff1565b92915050565b600060ff82169050919050565b6140318161401b565b82525050565b600060208201905061404c6000830184614028565b92915050565b60006020828403121561406857614067613d92565b5b600061407684828501613e16565b91505092915050565b60006020828403121561409557614094613d92565b5b60006140a384828501613de0565b91505092915050565b600080604083850312156140c3576140c2613d92565b5b60006140d185828601613e16565b92505060206140e285828601613e16565b9150509250929050565b60008060008060008060c0878903121561410957614108613d92565b5b600061411789828a01613e16565b965050602061412889828a01613e16565b955050604061413989828a01613e16565b945050606061414a89828a01613e16565b935050608061415b89828a01613e16565b92505060a061416c89828a01613e16565b9150509295509295509295565b600080604083850312156141905761418f613d92565b5b600061419e85828601613de0565b92505060206141af85828601613faf565b9150509250929050565b6000806000606084860312156141d2576141d1613d92565b5b60006141e086828701613e16565b93505060206141f186828701613e16565b925050604061420286828701613e16565b9150509250925092565b600061421782613d97565b9050919050565b6142278161420c565b82525050565b6000602082019050614242600083018461421e565b92915050565b6000806040838503121561425f5761425e613d92565b5b600061426d85828601613de0565b925050602061427e85828601613de0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142cf57607f821691505b6020821081036142e2576142e1614288565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061431e602083613ceb565b9150614329826142e8565b602082019050919050565b6000602082019050818103600083015261434d81614311565b9050919050565b60008151905061436381613dc9565b92915050565b60006020828403121561437f5761437e613d92565b5b600061438d84828501614354565b91505092915050565b60006040820190506143ab6000830185613ff1565b6143b86020830184613ff1565b9392505050565b6000815190506143ce81613dff565b92915050565b6000602082840312156143ea576143e9613d92565b5b60006143f8848285016143bf565b91505092915050565b60006040820190506144166000830185613ff1565b6144236020830184613f1b565b9392505050565b60008151905061443981613f98565b92915050565b60006020828403121561445557614454613d92565b5b60006144638482850161442a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144c8602683613ceb565b91506144d38261446c565b604082019050919050565b600060208201905081810360008301526144f7816144bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061453882613df5565b915061454383613df5565b925082820190508082111561455b5761455a6144fe565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614597601b83613ceb565b91506145a282614561565b602082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614629602483613ceb565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146bb602283613ceb565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061474d602583613ceb565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147df602383613ceb565b91506147ea82614783565b604082019050919050565b6000602082019050818103600083015261480e816147d2565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614871602883613ceb565b915061487c82614815565b604082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b60006148b282613df5565b91506148bd83613df5565b92508282039050818111156148d5576148d46144fe565b5b92915050565b60006148e682613df5565b91506148f183613df5565b92508282026148ff81613df5565b91508282048414831517614916576149156144fe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495782613df5565b915061496283613df5565b9250826149725761497161491d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d9602183613ceb565b91506149e48261497d565b604082019050919050565b60006020820190508181036000830152614a08816149cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614a92614a8d614a8884614a6d565b613ea1565b613df5565b9050919050565b614aa281614a77565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614add81613db7565b82525050565b6000614aef8383614ad4565b60208301905092915050565b6000602082019050919050565b6000614b1382614aa8565b614b1d8185614ab3565b9350614b2883614ac4565b8060005b83811015614b59578151614b408882614ae3565b9750614b4b83614afb565b925050600181019050614b2c565b5085935050505092915050565b600060a082019050614b7b6000830188613f1b565b614b886020830187614a99565b8181036040830152614b9a8186614b08565b9050614ba96060830185613ff1565b614bb66080830184613f1b565b9695505050505050565b6000604082019050614bd56000830185613f1b565b8181036020830152614be78184614b08565b90509392505050565b600060c082019050614c056000830189613ff1565b614c126020830188613f1b565b614c1f6040830187614a99565b614c2c6060830186614a99565b614c396080830185613ff1565b614c4660a0830184613f1b565b979650505050505050565b600080600060608486031215614c6a57614c69613d92565b5b6000614c78868287016143bf565b9350506020614c89868287016143bf565b9250506040614c9a868287016143bf565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220877f6a14f1fea4224b40d824ade3e7f3ffe4a618dbf34d776a9edc6975438dde64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103855760003560e01c806388790a68116101d1578063c816841b11610102578063da00097d116100a0578063f0cd1dac1161006f578063f0cd1dac14610d5f578063f2fde38b14610d8a578063f872858a14610db3578063fd05e4df14610dde5761038c565b8063da00097d14610ca3578063dc44b6a014610cce578063dd1b2b9714610cf9578063dd62ed3e14610d225761038c565b8063cb5f6d05116100dc578063cb5f6d0514610bf9578063d01edad014610c24578063d158272d14610c4f578063d3ff79d614610c7a5761038c565b8063c816841b14610b66578063c860795214610b91578063c867d60b14610bbc5761038c565b8063a5d69d1f1161016f578063b70b649a11610149578063b70b649a14610ac0578063c2d4640e14610ae9578063c49b9a8014610b12578063c5d2418914610b3b5761038c565b8063a5d69d1f14610a1d578063a9059cbb14610a46578063b03024a614610a835761038c565b806395d89b41116101ab57806395d89b411461095f578063a073d37f1461098a578063a08e671f146109b5578063a457c2d7146109e05761038c565b806388790a68146108cc5780638b42507f146108f75780638da5cb5b146109345761038c565b80635342acb4116102b657806370a08231116102545780637d1db4a5116102235780637d1db4a514610822578063807c2d9c1461084d57806382eefb4314610878578063844d591c146108a35761038c565b806370a082311461077c57806375ca9b0c146107b957806378271f2b146107e25780637b26ac6c1461080b5761038c565b80635881f3ef116102905780635881f3ef146106c0578063611fcea0146106fd57806361a23c691461072657806363b52db4146107515761038c565b80635342acb41461062d578063557ed1ba1461066a57806357a5802f146106955761038c565b80632b112e49116103235780633b97084a116102fd5780633b97084a146105735780633ecad2711461059c578063468b66d7146105d95780634a74bb02146106025761038c565b80632b112e49146104e0578063313ce5671461050b57806339509351146105365761038c565b806318160ddd1161035f57806318160ddd1461042457806323b872dd1461044f5780632563ae831461048c57806327c8f835146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc5780631694505e146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610e09565b6040516103b39190613d70565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613e2b565b610e9b565b6040516103f09190613e86565b60405180910390f35b34801561040557600080fd5b5061040e610eb9565b60405161041b9190613f00565b60405180910390f35b34801561043057600080fd5b50610439610edf565b6040516104469190613f2a565b60405180910390f35b34801561045b57600080fd5b5061047660048036038101906104719190613f45565b610ee9565b6040516104839190613e86565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae9190613fc4565b610fc3565b005b3480156104c157600080fd5b506104ca611075565b6040516104d79190614000565b60405180910390f35b3480156104ec57600080fd5b506104f5611099565b6040516105029190613f2a565b60405180910390f35b34801561051757600080fd5b506105206110dd565b60405161052d9190614037565b60405180910390f35b34801561054257600080fd5b5061055d60048036038101906105589190613e2b565b6110f4565b60405161056a9190613e86565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190614052565b6111a7565b005b3480156105a857600080fd5b506105c360048036038101906105be919061407f565b611246565b6040516105d09190613e86565b60405180910390f35b3480156105e557600080fd5b5061060060048036038101906105fb91906140ac565b611266565b005b34801561060e57600080fd5b5061061761130d565b6040516106249190613e86565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f919061407f565b611320565b6040516106619190613e86565b60405180910390f35b34801561067657600080fd5b5061067f611340565b60405161068c9190613f2a565b60405180910390f35b3480156106a157600080fd5b506106aa611348565b6040516106b79190613f2a565b60405180910390f35b3480156106cc57600080fd5b506106e760048036038101906106e2919061407f565b61134e565b6040516106f49190614000565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f91906140ec565b611851565b005b34801561073257600080fd5b5061073b61197a565b6040516107489190613f2a565b60405180910390f35b34801561075d57600080fd5b50610766611980565b6040516107739190613f2a565b60405180910390f35b34801561078857600080fd5b506107a3600480360381019061079e919061407f565b611986565b6040516107b09190613f2a565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db9190614179565b6119cf565b005b3480156107ee57600080fd5b5061080960048036038101906108049190614179565b611abf565b005b34801561081757600080fd5b50610820611baf565b005b34801561082e57600080fd5b50610837611c9a565b6040516108449190613f2a565b60405180910390f35b34801561085957600080fd5b50610862611ca0565b60405161086f9190613f2a565b60405180910390f35b34801561088457600080fd5b5061088d611ca6565b60405161089a9190613f2a565b60405180910390f35b3480156108af57600080fd5b506108ca60048036038101906108c59190614179565b611cac565b005b3480156108d857600080fd5b506108e1611d9c565b6040516108ee9190613f2a565b60405180910390f35b34801561090357600080fd5b5061091e6004803603810190610919919061407f565b611da2565b60405161092b9190613e86565b60405180910390f35b34801561094057600080fd5b50610949611dc2565b6040516109569190614000565b60405180910390f35b34801561096b57600080fd5b50610974611deb565b6040516109819190613d70565b60405180910390f35b34801561099657600080fd5b5061099f611e7d565b6040516109ac9190613f2a565b60405180910390f35b3480156109c157600080fd5b506109ca611e87565b6040516109d79190613f2a565b60405180910390f35b3480156109ec57600080fd5b50610a076004803603810190610a029190613e2b565b611e8d565b604051610a149190613e86565b60405180910390f35b348015610a2957600080fd5b50610a446004803603810190610a3f9190613fc4565b611f5a565b005b348015610a5257600080fd5b50610a6d6004803603810190610a689190613e2b565b61200c565b604051610a7a9190613e86565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613f45565b61202b565b604051610ab79190613e86565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae29190614179565b6121d3565b005b348015610af557600080fd5b50610b106004803603810190610b0b91906141b9565b6122c3565b005b348015610b1e57600080fd5b50610b396004803603810190610b349190613fc4565b6123a3565b005b348015610b4757600080fd5b50610b5061248c565b604051610b5d9190613f2a565b60405180910390f35b348015610b7257600080fd5b50610b7b612492565b604051610b889190614000565b60405180910390f35b348015610b9d57600080fd5b50610ba66124b8565b604051610bb39190613f2a565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde919061407f565b6124be565b604051610bf09190613e86565b60405180910390f35b348015610c0557600080fd5b50610c0e6124de565b604051610c1b9190613f2a565b60405180910390f35b348015610c3057600080fd5b50610c396124e4565b604051610c46919061422d565b60405180910390f35b348015610c5b57600080fd5b50610c6461250a565b604051610c71919061422d565b60405180910390f35b348015610c8657600080fd5b50610ca16004803603810190610c9c919061407f565b612530565b005b348015610caf57600080fd5b50610cb8612609565b604051610cc59190613e86565b60405180910390f35b348015610cda57600080fd5b50610ce361261c565b604051610cf09190613f2a565b60405180910390f35b348015610d0557600080fd5b50610d206004803603810190610d1b919061407f565b612622565b005b348015610d2e57600080fd5b50610d496004803603810190610d449190614248565b6126fb565b604051610d569190613f2a565b60405180910390f35b348015610d6b57600080fd5b50610d74612782565b604051610d819190613f2a565b60405180910390f35b348015610d9657600080fd5b50610db16004803603810190610dac919061407f565b612788565b005b348015610dbf57600080fd5b50610dc8612949565b604051610dd59190613e86565b60405180910390f35b348015610dea57600080fd5b50610df361295c565b604051610e009190613f2a565b60405180910390f35b606060028054610e18906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054610e44906142b7565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b6000610eaf610ea86129c0565b84846129c8565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b6000610ef6848484612b91565b50610fb884610f036129c0565b610fb385604051806060016040528060288152602001614ca560289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f696129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b6129c8565b600190509392505050565b610fcb6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90614334565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006110d86110c77f000000000000000000000000000000000000000000000000000000000000dead611986565b6018546131d890919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b600061119d6111016129c0565b8461119885600760006111126129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b6129c8565b6001905092915050565b6111af6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123390614334565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b61126e6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f290614334565b60405180910390fd5b8160198190555080601a819055505050565b601d60159054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b600042905090565b60125481565b60006113586129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113dc90614334565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611435573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114599190614369565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e49190614369565b6040518363ffffffff1660e01b8152600401611501929190614396565b602060405180830381865afa15801561151e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115429190614369565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116d5578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e79190614369565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561164e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116729190614369565b6040518363ffffffff1660e01b815260040161168f929190614396565b6020604051808303816000875af11580156116ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d29190614369565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b6118596129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118dd90614334565b60405180910390fd5b85600c8190555084600d8190555083600e81905550611926600e54611918600d54600c5461296290919063ffffffff16565b61296290919063ffffffff16565b60158190555082600f81905550816010819055508060118190555061196c60115461195e601054600f5461296290919063ffffffff16565b61296290919063ffffffff16565b601681905550505050505050565b60135481565b60145481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6119d76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614334565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ac76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90614334565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611bb76129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3b90614334565b60405180910390fd5b6000479050611c51611dc2565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611c96573d6000803e3d6000fd5b5050565b60195481565b601a5481565b60165481565b611cb46129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614334565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060038054611dfa906142b7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e26906142b7565b8015611e735780601f10611e4857610100808354040283529160200191611e73565b820191906000526020600020905b815481529060010190602001808311611e5657829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b6000611f50611e9a6129c0565b84611f4b85604051806060016040528060258152602001614ccd6025913960076000611ec46129c0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b6129c8565b6001905092915050565b611f626129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614334565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006120206120196129c0565b8484612b91565b506001905092915050565b60006120356129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990614334565b60405180910390fd5b6000820361214b578373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121039190614000565b602060405180830381865afa158015612120573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061214491906143d4565b91506121cc565b8373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401612186929190614401565b6020604051808303816000875af11580156121a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c9919061443f565b90505b9392505050565b6121db6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225f90614334565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6122cb6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f90614334565b60405180910390fd5b82601281905550816013819055508060148190555061239860145461238a60135460125461296290919063ffffffff16565b61296290919063ffffffff16565b601781905550505050565b6123ab6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242f90614334565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516124819190613e86565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b60115481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125386129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125bc90614334565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60169054906101000a900460ff1681565b600c5481565b61262a6129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ae90614334565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60155481565b6127906129c0565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281490614334565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361288c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612883906144de565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60179054906101000a900460ff1681565b600e5481565b6000808284612971919061452d565b9050838110156129b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ad906145ad565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2e9061463f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d906146d1565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b849190613f2a565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf890614763565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c67906147f5565b60405180910390fd5b601d60149054906101000a900460ff1615612c9757612c90848484613222565b905061316d565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d3b5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8657601954821115612d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7c90614887565b60405180910390fd5b5b6000612d9130611986565b90506000601b548210159050808015612db75750601d60149054906101000a900460ff16155b8015612e0d5750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e255750601d60159054906101000a900460ff165b15612e4f57601d60169054906101000a900460ff1615612e4557601b5491505b612e4e826133f5565b5b612ed8846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fbe5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fd257612fcd8787876135e6565b612fd4565b845b9050601d60179054906101000a900460ff16801561303c5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306b57601a5461305f8261305189611986565b61296290919063ffffffff16565b111561306a57600080fd5b5b6130bd81600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161315d9190613f2a565b60405180910390a3600193505050505b9392505050565b60008383111582906131bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b39190613d70565b60405180910390fd5b50600083856131cb91906148a7565b9050809150509392505050565b600061321a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613174565b905092915050565b60006132ad826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131749092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061334282600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133e29190613f2a565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff021916908315150217905550600061344e60026134406017546134326012548761380d90919063ffffffff16565b61388790919063ffffffff16565b61388790919063ffffffff16565b9050600061346582846131d890919063ffffffff16565b9050613470816138d1565b600047905060006134a1613490600260125461388790919063ffffffff16565b6017546131d890919063ffffffff16565b905060006134df60026134d1846134c36012548861380d90919063ffffffff16565b61388790919063ffffffff16565b61388790919063ffffffff16565b9050600061350a836134fc6014548761380d90919063ffffffff16565b61388790919063ffffffff16565b905060006135338261352585886131d890919063ffffffff16565b6131d890919063ffffffff16565b9050600081111561356b5761356a600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b4d565b5b60008211156135a1576135a0600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b4d565b5b6000831180156135b15750600087115b156135c1576135c08784613b98565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561366e5761366760646136596015548661380d90919063ffffffff16565b61388790919063ffffffff16565b90506136ec565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136eb576136e860646136da6016548661380d90919063ffffffff16565b61388790919063ffffffff16565b90505b5b60008111156137f05761374781600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461296290919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137e79190613f2a565b60405180910390a35b61380381846131d890919063ffffffff16565b9150509392505050565b600080830361381f5760009050613881565b6000828461382d91906148db565b905082848261383c919061494c565b1461387c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613873906149ef565b60405180910390fd5b809150505b92915050565b60006138c983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c7d565b905092915050565b6000600267ffffffffffffffff8111156138ee576138ed614a0f565b5b60405190808252806020026020018201604052801561391c5781602001602082028036833780820191505090505b509050308160008151811061393457613933614a3e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ff9190614369565b81600181518110613a1357613a12614a3e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a7a30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c8565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613ade959493929190614b66565b600060405180830381600087803b158015613af857600080fd5b505af1158015613b0c573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613b41929190614bc0565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613b93573d6000803e3d6000fd5b505050565b613bc530601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846129c8565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c11611dc2565b426040518863ffffffff1660e01b8152600401613c3396959493929190614bf0565b60606040518083038185885af1158015613c51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c769190614c51565b5050505050565b60008083118290613cc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbb9190613d70565b60405180910390fd5b5060008385613cd3919061494c565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d1a578082015181840152602081019050613cff565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d4282613ce0565b613d4c8185613ceb565b9350613d5c818560208601613cfc565b613d6581613d26565b840191505092915050565b60006020820190508181036000830152613d8a8184613d37565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613dc282613d97565b9050919050565b613dd281613db7565b8114613ddd57600080fd5b50565b600081359050613def81613dc9565b92915050565b6000819050919050565b613e0881613df5565b8114613e1357600080fd5b50565b600081359050613e2581613dff565b92915050565b60008060408385031215613e4257613e41613d92565b5b6000613e5085828601613de0565b9250506020613e6185828601613e16565b9150509250929050565b60008115159050919050565b613e8081613e6b565b82525050565b6000602082019050613e9b6000830184613e77565b92915050565b6000819050919050565b6000613ec6613ec1613ebc84613d97565b613ea1565b613d97565b9050919050565b6000613ed882613eab565b9050919050565b6000613eea82613ecd565b9050919050565b613efa81613edf565b82525050565b6000602082019050613f156000830184613ef1565b92915050565b613f2481613df5565b82525050565b6000602082019050613f3f6000830184613f1b565b92915050565b600080600060608486031215613f5e57613f5d613d92565b5b6000613f6c86828701613de0565b9350506020613f7d86828701613de0565b9250506040613f8e86828701613e16565b9150509250925092565b613fa181613e6b565b8114613fac57600080fd5b50565b600081359050613fbe81613f98565b92915050565b600060208284031215613fda57613fd9613d92565b5b6000613fe884828501613faf565b91505092915050565b613ffa81613db7565b82525050565b60006020820190506140156000830184613ff1565b92915050565b600060ff82169050919050565b6140318161401b565b82525050565b600060208201905061404c6000830184614028565b92915050565b60006020828403121561406857614067613d92565b5b600061407684828501613e16565b91505092915050565b60006020828403121561409557614094613d92565b5b60006140a384828501613de0565b91505092915050565b600080604083850312156140c3576140c2613d92565b5b60006140d185828601613e16565b92505060206140e285828601613e16565b9150509250929050565b60008060008060008060c0878903121561410957614108613d92565b5b600061411789828a01613e16565b965050602061412889828a01613e16565b955050604061413989828a01613e16565b945050606061414a89828a01613e16565b935050608061415b89828a01613e16565b92505060a061416c89828a01613e16565b9150509295509295509295565b600080604083850312156141905761418f613d92565b5b600061419e85828601613de0565b92505060206141af85828601613faf565b9150509250929050565b6000806000606084860312156141d2576141d1613d92565b5b60006141e086828701613e16565b93505060206141f186828701613e16565b925050604061420286828701613e16565b9150509250925092565b600061421782613d97565b9050919050565b6142278161420c565b82525050565b6000602082019050614242600083018461421e565b92915050565b6000806040838503121561425f5761425e613d92565b5b600061426d85828601613de0565b925050602061427e85828601613de0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142cf57607f821691505b6020821081036142e2576142e1614288565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061431e602083613ceb565b9150614329826142e8565b602082019050919050565b6000602082019050818103600083015261434d81614311565b9050919050565b60008151905061436381613dc9565b92915050565b60006020828403121561437f5761437e613d92565b5b600061438d84828501614354565b91505092915050565b60006040820190506143ab6000830185613ff1565b6143b86020830184613ff1565b9392505050565b6000815190506143ce81613dff565b92915050565b6000602082840312156143ea576143e9613d92565b5b60006143f8848285016143bf565b91505092915050565b60006040820190506144166000830185613ff1565b6144236020830184613f1b565b9392505050565b60008151905061443981613f98565b92915050565b60006020828403121561445557614454613d92565b5b60006144638482850161442a565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006144c8602683613ceb565b91506144d38261446c565b604082019050919050565b600060208201905081810360008301526144f7816144bb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061453882613df5565b915061454383613df5565b925082820190508082111561455b5761455a6144fe565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614597601b83613ceb565b91506145a282614561565b602082019050919050565b600060208201905081810360008301526145c68161458a565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614629602483613ceb565b9150614634826145cd565b604082019050919050565b600060208201905081810360008301526146588161461c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146bb602283613ceb565b91506146c68261465f565b604082019050919050565b600060208201905081810360008301526146ea816146ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061474d602583613ceb565b9150614758826146f1565b604082019050919050565b6000602082019050818103600083015261477c81614740565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147df602383613ceb565b91506147ea82614783565b604082019050919050565b6000602082019050818103600083015261480e816147d2565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614871602883613ceb565b915061487c82614815565b604082019050919050565b600060208201905081810360008301526148a081614864565b9050919050565b60006148b282613df5565b91506148bd83613df5565b92508282039050818111156148d5576148d46144fe565b5b92915050565b60006148e682613df5565b91506148f183613df5565b92508282026148ff81613df5565b91508282048414831517614916576149156144fe565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495782613df5565b915061496283613df5565b9250826149725761497161491d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006149d9602183613ceb565b91506149e48261497d565b604082019050919050565b60006020820190508181036000830152614a08816149cc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614a92614a8d614a8884614a6d565b613ea1565b613df5565b9050919050565b614aa281614a77565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614add81613db7565b82525050565b6000614aef8383614ad4565b60208301905092915050565b6000602082019050919050565b6000614b1382614aa8565b614b1d8185614ab3565b9350614b2883614ac4565b8060005b83811015614b59578151614b408882614ae3565b9750614b4b83614afb565b925050600181019050614b2c565b5085935050505092915050565b600060a082019050614b7b6000830188613f1b565b614b886020830187614a99565b8181036040830152614b9a8186614b08565b9050614ba96060830185613ff1565b614bb66080830184613f1b565b9695505050505050565b6000604082019050614bd56000830185613f1b565b8181036020830152614be78184614b08565b90509392505050565b600060c082019050614c056000830189613ff1565b614c126020830188613f1b565b614c1f6040830187614a99565b614c2c6060830186614a99565b614c396080830185613ff1565b614c4660a0830184613f1b565b979650505050505050565b600080600060608486031215614c6a57614c69613d92565b5b6000614c78868287016143bf565b9350506020614c89868287016143bf565b9250506040614c9a868287016143bf565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220877f6a14f1fea4224b40d824ade3e7f3ffe4a618dbf34d776a9edc6975438dde64736f6c63430008120033

Deployed Bytecode Sourcemap

16057:16404:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19730:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21278:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17744:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20007:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26701:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23741:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16513:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25210:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19916:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20434:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24027:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16900:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23577:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17855:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16732:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6763:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17212:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25494:899;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22341:796;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17253:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17294:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20115:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22175:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23863:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25055:147;;;;;;;;;;;;;:::i;:::-;;17543:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17607;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17380:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21858:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17081:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16846:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6260:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19821:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21150:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17425:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20742:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24611:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26494:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24748:301;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22018:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23145:424;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24432:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16995:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17792:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17124:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16788:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17168:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16399:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16284:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24157:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17902:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16953:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24297:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20242:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17336:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6474:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17954:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17038:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19730:83;19767:13;19800:5;19793:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19730:83;:::o;21278:193::-;21380:4;21402:39;21411:12;:10;:12::i;:::-;21425:7;21434:6;21402:8;:39::i;:::-;21459:4;21452:11;;21278:193;;;;:::o;17744:41::-;;;;;;;;;;;;;:::o;20007:100::-;20060:7;20087:12;;20080:19;;20007:100;:::o;26701:446::-;26833:4;26850:36;26860:6;26868:9;26879:6;26850:9;:36::i;:::-;;26897:220;26920:6;26941:12;:10;:12::i;:::-;26968:138;27024:6;26968:138;;;;;;;;;;;;;;;;;:11;:19;26980:6;26968:19;;;;;;;;;;;;;;;:33;26988:12;:10;:12::i;:::-;26968:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;26897:8;:220::i;:::-;27135:4;27128:11;;26701:446;;;;;:::o;23741:114::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23839:8:::1;23820:16;;:27;;;;;;;;;;;;;;;;;;23741:114:::0;:::o;16513:90::-;;;:::o;25210:128::-;25263:7;25290:40;25307:22;25317:11;25307:9;:22::i;:::-;25290:12;;:16;;:40;;;;:::i;:::-;25283:47;;25210:128;:::o;19916:83::-;19957:5;19982:9;;;;;;;;;;;19975:16;;19916:83;:::o;20434:300::-;20549:4;20571:133;20594:12;:10;:12::i;:::-;20621:7;20643:50;20682:10;20643:11;:25;20655:12;:10;:12::i;:::-;20643:25;;;;;;;;;;;;;;;:34;20669:7;20643:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;20571:8;:133::i;:::-;20722:4;20715:11;;20434:300;;;;:::o;24027:122::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24133:8:::1;24107:23;:34;;;;24027:122:::0;:::o;16900:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;23577:156::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23682:11:::1;23667:12;:26;;;;23717:8;23704:10;:21;;;;23577:156:::0;;:::o;17855:40::-;;;;;;;;;;;;;:::o;16732:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;6763:90::-;6803:7;6830:15;6823:22;;6763:90;:::o;17212:34::-;;;;:::o;25494:899::-;25602:22;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25642:35:::1;25713:16;25642:98;;25788:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25770:53;;;25846:4;25866:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25770:130;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25753:147;;25943:1;25917:28;;:14;:28;;::::0;25913:226:::1;;26031:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26013:74;;;26096:4;26103:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26013:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25996:131;;25913:226;26165:14;26151:11;;:28;;;;;;;;;;;;;;;;;;26231:16;26213:15;;:34;;;;;;;;;;;;;;;;;;26329:4;26285:19;:41;26313:11;;;;;;;;;;;26285:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;26381:4;26344:12;:34;26365:11;;;;;;;;;;;26344:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;25631:762;25494:899:::0;;;:::o;22341:796::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22637:18:::1;22618:16;:37;;;;22685:18;22666:16;:37;;;;22732:14;22714:15;:32;;;;22779:83;22836:15;;22779:38;22800:16;;22779;;:20;;:38;;;;:::i;:::-;:42;;:83;;;;:::i;:::-;22759:17;:103;;;;22895:19;22875:17;:39;;;;22945:19;22925:17;:39;;;;22994:15;22975:16;:34;;;;23043:86;23102:16;;23043:40;23065:17;;23043;;:21;;:40;;;;:::i;:::-;:44;;:86;;;;:::i;:::-;23022:18;:107;;;;22341:796:::0;;;;;;:::o;17253:34::-;;;;:::o;17294:33::-;;;;:::o;20115:119::-;20181:7;20208:9;:18;20218:7;20208:18;;;;;;;;;;;;;;;;20201:25;;20115:119;;;:::o;22175:158::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22317:8:::1;22288:17;:26;22306:7;22288:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;22175:158:::0;;:::o;23863:156::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24005:6:::1;23975:19;:27;23995:6;23975:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23863:156:::0;;:::o;25055:147::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25113:12:::1;25128:21;25113:36;;25168:7;:5;:7::i;:::-;25160:25;;:34;25186:7;25160:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25102:100;25055:147::o:0;17543:57::-;;;;:::o;17607:::-;;;;:::o;17380:38::-;;;;:::o;21858:152::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21994:8:::1;21970:12;:21;21983:7;21970:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21858:152:::0;;:::o;17081:36::-;;;;:::o;16846:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;6260:79::-;6298:7;6325:6;;;;;;;;;;;6318:13;;6260:79;:::o;19821:87::-;19860:13;19893:7;19886:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19821:87;:::o;21150:120::-;21212:7;21239:23;;21232:30;;21150:120;:::o;17425:44::-;;;;:::o;20742:400::-;20862:4;20884:228;20907:12;:10;:12::i;:::-;20934:7;20956:145;21013:15;20956:145;;;;;;;;;;;;;;;;;:11;:25;20968:12;:10;:12::i;:::-;20956:25;;;;;;;;;;;;;;;:34;20982:7;20956:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;20884:8;:228::i;:::-;21130:4;21123:11;;20742:400;;;;:::o;24611:125::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24720:8:::1;24692:25;;:36;;;;;;;;;;;;;;;;;;24611:125:::0;:::o;26494:199::-;26599:4;26621:42;26631:12;:10;:12::i;:::-;26645:9;26656:6;26621:9;:42::i;:::-;;26681:4;26674:11;;26494:199;;;;:::o;24748:301::-;24852:10;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24887:1:::1;24877:6;:11:::0;24874:168:::1;;24921:6;24914:24;;;24947:4;24914:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24905:48;;24874:168;;;25001:6;24994:23;;;25018:3;25023:6;24994:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24986:44;;24874:168;24748:301:::0;;;;;:::o;22018:149::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22153:6:::1;22127:15;:23;22143:6;22127:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;22018:149:::0;;:::o;23145:424::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23337:17:::1;23319:15;:35;;;;23383:17;23365:15;:35;;;;23428:13;23411:14;:30;;;;23481:80;23536:14;;23481:36;23501:15;;23481;;:19;;:36;;;;:::i;:::-;:40;;:80;;;;:::i;:::-;23454:24;:107;;;;23145:424:::0;;;:::o;24432:171::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24533:8:::1;24509:21;;:32;;;;;;;;;;;;;;;;;;24557:38;24586:8;24557:38;;;;;;:::i;:::-;;;;;;;;24432:171:::0;:::o;16995:36::-;;;;:::o;17792:26::-;;;;;;;;;;;;;:::o;17124:37::-;;;;:::o;16788:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;17168:35::-;;;;:::o;16399:107::-;;;;;;;;;;;;;:::o;16284:108::-;;;;;;;;;;;;;:::o;24157:132::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24270:10:::1;24237:22;;:44;;;;;;;;;;;;;;;;;;24157:132:::0;:::o;17902:45::-;;;;;;;;;;;;;:::o;16953:35::-;;;;:::o;24297:127::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24405:10:::1;24373:21;;:43;;;;;;;;;;;;;;;;;;24297:127:::0;:::o;20242:184::-;20359:7;20391:11;:18;20403:5;20391:18;;;;;;;;;;;;;;;:27;20410:7;20391:27;;;;;;;;;;;;;;;;20384:34;;20242:184;;;;:::o;17336:37::-;;;;:::o;6474:281::-;6397:12;:10;:12::i;:::-;6387:22;;:6;;;;;;;;;;:22;;;6379:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6597:1:::1;6577:22;;:8;:22;;::::0;6555:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6710:8;6681:38;;6702:6;::::0;::::1;;;;;;;;6681:38;;;;;;;;;;;;6739:8;6730:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6474:281:::0;:::o;17954:35::-;;;;;;;;;;;;;:::o;17038:34::-;;;;:::o;1411:181::-;1469:7;1489:9;1505:1;1501;:5;;;;:::i;:::-;1489:17;;1530:1;1525;:6;;1517:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1583:1;1576:8;;;1411:181;;;;:::o;222:115::-;275:15;318:10;303:26;;222:115;:::o;21479:371::-;21623:1;21606:19;;:5;:19;;;21598:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21704:1;21685:21;;:7;:21;;;21677:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21788:6;21758:11;:18;21770:5;21758:18;;;;;;;;;;;;;;;:27;21777:7;21758:27;;;;;;;;;;;;;;;:36;;;;21826:7;21810:32;;21819:5;21810:32;;;21835:6;21810:32;;;;;;:::i;:::-;;;;;;;;21479:371;;;:::o;27155:1890::-;27276:4;27319:1;27301:20;;:6;:20;;;27293:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;27403:1;27382:23;;:9;:23;;;27374:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27462:16;;;;;;;;;;;27458:1580;;;27502:41;27517:6;27525:9;27536:6;27502:14;:41::i;:::-;27495:48;;;;27458:1580;27581:15;:23;27597:6;27581:23;;;;;;;;;;;;;;;;;;;;;;;;;27580:24;:55;;;;;27609:15;:26;27625:9;27609:26;;;;;;;;;;;;;;;;;;;;;;;;;27608:27;27580:55;27576:232;;;27696:12;;27686:6;:22;;27656:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;27576:232;27824:28;27855:24;27873:4;27855:9;:24::i;:::-;27824:55;;27894:28;27966:23;;27925:20;:64;;27894:95;;28028:23;:61;;;;;28073:16;;;;;;;;;;;28072:17;28028:61;:103;;;;;28111:12;:20;28124:6;28111:20;;;;;;;;;;;;;;;;;;;;;;;;;28110:21;28028:103;:145;;;;;28152:21;;;;;;;;;;;28028:145;28006:371;;;28212:25;;;;;;;;;;;28208:98;;;28283:23;;28260:46;;28208:98;28325:36;28340:20;28325:14;:36::i;:::-;28006:371;28413:102;28453:6;28413:102;;;;;;;;;;;;;;;;;:9;:17;28423:6;28413:17;;;;;;;;;;;;;;;;:21;;:102;;;;;:::i;:::-;28393:9;:17;28403:6;28393:17;;;;;;;;;;;;;;;:122;;;;28532:19;28555:17;:25;28573:6;28555:25;;;;;;;;;;;;;;;;;;;;;;;;;:74;;;;28601:17;:28;28619:9;28601:28;;;;;;;;;;;;;;;;;;;;;;;;;28555:74;28554:156;;28676:34;28684:6;28692:9;28703:6;28676:7;:34::i;:::-;28554:156;;;28650:6;28554:156;28532:178;;28731:16;;;;;;;;;;;:51;;;;;28752:19;:30;28772:9;28752:30;;;;;;;;;;;;;;;;;;;;;;;;;28751:31;28731:51;28727:134;;;28850:10;;28809:37;28834:11;28809:20;28819:9;28809;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;28801:60;;;;;;28727:134;28901:37;28926:11;28901:9;:20;28911:9;28901:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;28878:9;:20;28888:9;28878:20;;;;;;;;;;;;;;;:60;;;;28977:9;28960:40;;28969:6;28960:40;;;28988:11;28960:40;;;;;;:::i;:::-;;;;;;;;29022:4;29015:11;;;;;27155:1890;;;;;;:::o;1744:226::-;1864:7;1897:1;1892;:6;;1900:12;1884:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1924:9;1940:1;1936;:5;;;;:::i;:::-;1924:17;;1961:1;1954:8;;;1744:226;;;;;:::o;1600:136::-;1658:7;1685:43;1689:1;1692;1685:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1678:50;;1600:136;;;;:::o;29053:401::-;29180:4;29217:90;29253:6;29217:90;;;;;;;;;;;;;;;;;:9;:17;29227:6;29217:17;;;;;;;;;;;;;;;;:21;;:90;;;;;:::i;:::-;29197:9;:17;29207:6;29197:17;;;;;;;;;;;;;;;:110;;;;29341:32;29366:6;29341:9;:20;29351:9;29341:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;29318:9;:20;29328:9;29318:20;;;;;;;;;;;;;;;:55;;;;29406:9;29389:35;;29398:6;29389:35;;;29417:6;29389:35;;;;;;:::i;:::-;;;;;;;;29442:4;29435:11;;29053:401;;;;;:::o;29462:1177::-;18371:4;18352:16;;:23;;;;;;;;;;;;;;;;;;29534:19:::1;29556:107;29661:1;29556:86;29617:24;;29556:42;29582:15;;29556:7;:25;;:42;;;;:::i;:::-;:60;;:86;;;;:::i;:::-;:104;;:107;;;;:::i;:::-;29534:129;;29674:21;29698:24;29710:11;29698:7;:11;;:24;;;;:::i;:::-;29674:48;;29735:31;29752:13;29735:16;:31::i;:::-;29777:22;29802:21;29777:46;;29836:19;29858:76;29901:22;29921:1;29901:15;;:19;;:22;;;;:::i;:::-;29858:24;;:28;;:76;;;;:::i;:::-;29836:98;;29947:26;29976:101;30075:1;29976:80;30044:11;29976:49;30009:15;;29976:14;:32;;:49;;;;:::i;:::-;:67;;:80;;;;:::i;:::-;:98;;:101;;;;:::i;:::-;29947:130;;30088:22;30113:51;30152:11;30113:34;30132:14;;30113;:18;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;30088:76;;30175:26;30204:82;30261:14;30204:38;30223:18;30204:14;:18;;:38;;;;:::i;:::-;:42;;:82;;;;:::i;:::-;30175:111;;30324:1;30303:18;:22;30299:105;;;30340:64;30361:22;;;;;;;;;;;30385:18;30340:20;:64::i;:::-;30299:105;30438:1;30421:14;:18;30417:96;;;30454:59;30475:21;;;;;;;;;;;30498:14;30454:20;:59::i;:::-;30417:96;30551:1;30530:18;:22;:41;;;;;30570:1;30556:11;:15;30530:41;30526:105;;;30586:45;30599:11;30612:18;30586:12;:45::i;:::-;30526:105;29523:1116;;;;;;;18417:5:::0;18398:16;;:24;;;;;;;;;;;;;;;;;;29462:1177;:::o;31834:624::-;31954:7;31974:17;31994:1;31974:21;;32012:12;:20;32025:6;32012:20;;;;;;;;;;;;;;;;;;;;;;;;;32008:216;;;32061:38;32095:3;32061:29;32072:17;;32061:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;32049:50;;32008:216;;;32121:12;:23;32134:9;32121:23;;;;;;;;;;;;;;;;;;;;;;;;;32117:107;;;32173:39;32208:3;32173:30;32184:18;;32173:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;32161:51;;32117:107;32008:216;32252:1;32240:9;:13;32236:174;;;32297:39;32326:9;32297;:24;32315:4;32297:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;32270:9;:24;32288:4;32270:24;;;;;;;;;;;;;;;:66;;;;32381:4;32356:42;;32365:6;32356:42;;;32388:9;32356:42;;;;;;:::i;:::-;;;;;;;;32236:174;32429:21;32440:9;32429:6;:10;;:21;;;;:::i;:::-;32422:28;;;31834:624;;;;;:::o;1978:250::-;2036:7;2065:1;2060;:6;2056:47;;2090:1;2083:8;;;;2056:47;2115:9;2131:1;2127;:5;;;;:::i;:::-;2115:17;;2160:1;2155;2151;:5;;;;:::i;:::-;:10;2143:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2219:1;2212:8;;;1978:250;;;;;:::o;2236:132::-;2294:7;2321:39;2325:1;2328;2321:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2314:46;;2236:132;;;;:::o;30647:658::-;30773:21;30811:1;30797:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30773:40;;30842:4;30824;30829:1;30824:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30868:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30858:4;30863:1;30858:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;30903:62;30920:4;30935:15;;;;;;;;;;;30953:11;30903:8;:62::i;:::-;31004:15;;;;;;;;;;;:66;;;31085:11;31111:1;31155:4;31182;31218:15;31004:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31262:35;31279:11;31292:4;31262:35;;;;;;;:::i;:::-;;;;;;;;30702:603;30647:658;:::o;25346:140::-;25452:9;:18;;:26;25471:6;25452:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25346:140;;:::o;31313:513::-;31461:62;31478:4;31493:15;;;;;;;;;;;31511:11;31461:8;:62::i;:::-;31566:15;;;;;;;;;;;:31;;;31605:9;31638:4;31658:11;31684:1;31727;31770:7;:5;:7::i;:::-;31792:15;31566:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31313:513;;:::o;2376:312::-;2496:7;2528:1;2524;:5;2531:12;2516:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2555:9;2571:1;2567;:5;;;;:::i;:::-;2555:17;;2679:1;2672:8;;;2376:312;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::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:::-;7167:6;7216:2;7204:9;7195:7;7191:23;7187:32;7184:119;;;7222:79;;:::i;:::-;7184:119;7342:1;7367:53;7412:7;7403:6;7392:9;7388:22;7367:53;:::i;:::-;7357:63;;7313:117;7108:329;;;;:::o;7443:474::-;7511:6;7519;7568:2;7556:9;7547:7;7543:23;7539:32;7536:119;;;7574:79;;:::i;:::-;7536:119;7694:1;7719:53;7764:7;7755:6;7744:9;7740:22;7719:53;:::i;:::-;7709:63;;7665:117;7821:2;7847:53;7892:7;7883:6;7872:9;7868:22;7847:53;:::i;:::-;7837:63;;7792:118;7443:474;;;;;:::o;7923:1057::-;8027:6;8035;8043;8051;8059;8067;8116:3;8104:9;8095:7;8091:23;8087:33;8084:120;;;8123:79;;:::i;:::-;8084:120;8243:1;8268:53;8313:7;8304:6;8293:9;8289:22;8268:53;:::i;:::-;8258:63;;8214:117;8370:2;8396:53;8441:7;8432:6;8421:9;8417:22;8396:53;:::i;:::-;8386:63;;8341:118;8498:2;8524:53;8569:7;8560:6;8549:9;8545:22;8524:53;:::i;:::-;8514:63;;8469:118;8626:2;8652:53;8697:7;8688:6;8677:9;8673:22;8652:53;:::i;:::-;8642:63;;8597:118;8754:3;8781:53;8826:7;8817:6;8806:9;8802:22;8781:53;:::i;:::-;8771:63;;8725:119;8883:3;8910:53;8955:7;8946:6;8935:9;8931:22;8910:53;:::i;:::-;8900:63;;8854:119;7923:1057;;;;;;;;:::o;8986:468::-;9051:6;9059;9108:2;9096:9;9087:7;9083:23;9079:32;9076:119;;;9114:79;;:::i;:::-;9076:119;9234:1;9259:53;9304:7;9295:6;9284:9;9280:22;9259:53;:::i;:::-;9249:63;;9205:117;9361:2;9387:50;9429:7;9420:6;9409:9;9405:22;9387:50;:::i;:::-;9377:60;;9332:115;8986:468;;;;;:::o;9460:619::-;9537:6;9545;9553;9602:2;9590:9;9581:7;9577:23;9573:32;9570:119;;;9608:79;;:::i;:::-;9570:119;9728:1;9753:53;9798:7;9789:6;9778:9;9774:22;9753:53;:::i;:::-;9743:63;;9699:117;9855:2;9881:53;9926:7;9917:6;9906:9;9902:22;9881:53;:::i;:::-;9871:63;;9826:118;9983:2;10009:53;10054:7;10045:6;10034:9;10030:22;10009:53;:::i;:::-;9999:63;;9954:118;9460:619;;;;;:::o;10085:104::-;10130:7;10159:24;10177:5;10159:24;:::i;:::-;10148:35;;10085:104;;;:::o;10195:142::-;10298:32;10324:5;10298:32;:::i;:::-;10293:3;10286:45;10195:142;;:::o;10343:254::-;10452:4;10490:2;10479:9;10475:18;10467:26;;10503:87;10587:1;10576:9;10572:17;10563:6;10503:87;:::i;:::-;10343:254;;;;:::o;10603:474::-;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://877f6a14f1fea4224b40d824ade3e7f3ffe4a618dbf34d776a9edc6975438dde
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.