ETH Price: $2,404.71 (+1.30%)

Token

Volt Inu DAO (Volt DAO)
 

Overview

Max Total Supply

69,000,000,000 Volt DAO

Holders

26

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
246,091,900.32 Volt DAO

Value
$0.00
0x23B65647CeB859239c98C0D53F391E53186BeE8d
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:
VoltDAO

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.7;

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

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


interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    

}

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

    function nonces(address owner) external view returns (uint256);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }


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

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

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

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

library Address {

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

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

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


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

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

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

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

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

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

library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

    function safePermit(
        IERC20Permit token,
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal {
        uint256 nonceBefore = token.nonces(owner);
        token.permit(owner, spender, value, deadline, v, r, s);
        uint256 nonceAfter = token.nonces(owner);
        require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

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

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


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

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

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

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

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


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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}


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

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

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}



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

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

contract VoltDAO is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using SafeERC20 for IERC20;
    
    address payable public rewardPoolAddress = payable(0x45f6E219a683c7560D71D0249Fc353F385301B51); // reward Pool Address
    address payable public devAddress = payable(0x45f6E219a683c7560D71D0249Fc353F385301B51); // Dev Address

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

    uint256 private _totalSupply = 69 * 10**9 * 10**9;  // 69 Bn tokens


    mapping (address => bool) private _isExcludedFromFee;

    string private _name = "Volt Inu DAO";
    string private _symbol = "Volt DAO";
    uint8 private _decimals = 9;
    
    uint256 public rewardPoolDivisor = 35;
    uint256 public devDivisor = 35;
    uint256 public autoLpDivisor = 10;

    uint256 public _totalFee = 80;  // rewardPoolDivisor + devDivisor + autoLpDivisor
    uint256 private _previousTotalFee = _totalFee;
    uint256 public sellFactor = 10; // divided by 10
    bool public isBuyTaxEnabled = true;

    uint256 public _maxTxAmount = 3 * 10**8 * 10**9;
    uint256 public _maxWalletAmount = 1 * 10**9 * 10**9;
    uint256 private minimumTokensBeforeSwap = 1 * 10**4 * 10**9; 

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    bool public tradingEnabled = false;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;

    mapping (address => bool) private automatedMarketMaker;

    event FeesUpdated(uint256 autoLpDivisor, uint256 devDivisor, uint256 rewardPoolDivisor);
    event SellFactorUpdated(uint256 previousSellFactor, uint256 newSellFactor);
    event BuyTaxEnabled(bool indexed enable, uint256 blockNumber);
    event AutomatedMarketMakerEnable(address indexed account, bool indexed enable);
    event AccountBlacklisted(address indexed account, bool indexed blacklist);

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );


    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        automatedMarketMaker[uniswapV2Pair] = true;

        _balances[owner()] = _totalSupply;
        
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), owner(), _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 transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

    function isBlacklisted(address account) external view returns(bool) {
        return _isBlacklisted[account];
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(!_isBlacklisted[from], "Not Allowed");
        require(!_isBlacklisted[to], "Not Allowed");

        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;

        } else {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            require(tradingEnabled, "Trading is not started");
            if (!automatedMarketMaker[to]) {
                require(_balances[to] + amount <= _maxWalletAmount, "Wallet amount exceeds limit");
            }

        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
        
        if (overMinimumTokenBalance && !inSwapAndLiquify && swapAndLiquifyEnabled && from != uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);    
            }
        }
        
        bool isSell = automatedMarketMaker[to];

        if(!automatedMarketMaker[from] && !isSell) {
            takeFee = false;
        }

        if(!isBuyTaxEnabled && !isSell) {
            takeFee = false;
        }
        _tokenTransfer(from,to,amount,takeFee,isSell);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
       
        uint256 amountToLiquify = contractTokenBalance.mul(autoLpDivisor).div(_totalFee).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        uint256 initialBalance = address(this).balance;
        swapTokensForEth(amountToSwap);
        uint256 transferredBalance = address(this).balance.sub(initialBalance);
        uint256 totalETHFee = _totalFee.sub(autoLpDivisor.div(2));

        // adding liquidity
        if(amountToLiquify > 0) // enabling to set autoLP tax to zero
            addLiquidity(amountToLiquify, transferredBalance.mul(autoLpDivisor).div(totalETHFee).div(2));

        //Send to rewardPool and dev address
        transferToAddressETH(rewardPoolAddress, transferredBalance.mul(rewardPoolDivisor).div(totalETHFee));
        transferToAddressETH(devAddress, transferredBalance.mul(devDivisor).div(totalETHFee));
        
    }
    
    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
            address(this),
            block.timestamp
        );
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee, bool isSell) private {
        if(!takeFee)
            removeAllFee();
        
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 fromBalance = _balances[sender];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        uint256 fees = calculateTotalFee(amount, isSell);
        uint256 amountToTransfer = amount - fees;
        unchecked {
            _balances[sender] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[recipient] += amountToTransfer;
            _balances[address(this)] += fees;
        }

        if(!takeFee)
            restoreAllFee();

        emit Transfer(sender, recipient, amountToTransfer);
        if(fees > 0) {
            emit Transfer(sender, address(this), fees);
        }

        _afterTokenTransfer(sender, recipient, amount);
        
        
    }
    
    function calculateTotalFee(uint256 _amount, bool _isSell) private view returns (uint256) {
        uint256 fees = _amount.mul(_totalFee).div(10**3);
        return _isSell ? fees.mul(sellFactor).div(10) : fees;
    }
    
    function removeAllFee() private {
        if(_totalFee == 0) return;
        
        _previousTotalFee = _totalFee; 
        _totalFee = 0;
    }
    
    function restoreAllFee() private {
        _totalFee = _previousTotalFee;
    }

    function isAutomatedMarketMaker(address account) external view returns(bool) {
        return automatedMarketMaker[account];
    }

    function enableAutomatedMarketMaker(address account, bool enable) external onlyOwner {
        require (automatedMarketMaker[account] != enable, "Already set");
        automatedMarketMaker[account] = enable;

        emit AutomatedMarketMakerEnable(account, enable);
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function updateFeeDivisor(uint256 newAutoLpDivisor, uint256 newDevDivisor, uint256 newrewardPoolDivisor) external onlyOwner {
        uint256 newTotalFee = newAutoLpDivisor.add(newDevDivisor).add(newrewardPoolDivisor);
        require( newTotalFee <= 200, "cant set fees to more than 20%");

        autoLpDivisor = newAutoLpDivisor;
        devDivisor = newDevDivisor;
        rewardPoolDivisor = newrewardPoolDivisor;

        _previousTotalFee = _totalFee;
        _totalFee = newTotalFee;

        emit FeesUpdated(newAutoLpDivisor, newDevDivisor, newrewardPoolDivisor);
    }
    
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }
    
    function setMaxWalletLimit(uint256 maxWalletLimit) external onlyOwner() {
        _maxWalletAmount = maxWalletLimit;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }
    
    function setRewardPoolAddress(address _rewardPoolAddress) external onlyOwner() {
        rewardPoolAddress = payable(_rewardPoolAddress);
    }

    function setDevAddress(address _devAddress) external onlyOwner() {
        devAddress = payable(_devAddress);
    }

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

    function updateSellFactor(uint256 _sellFactor) external onlyOwner {
        emit SellFactorUpdated(sellFactor, _sellFactor);

        sellFactor = _sellFactor;
    }

    function setBuyTaxEnabled(bool _enable) external onlyOwner {
        require(isBuyTaxEnabled != _enable, "Already set");
        isBuyTaxEnabled = _enable;

        emit BuyTaxEnabled(_enable, block.number);
    }

    function withdrawUnsupportedTokens(address token, address recipient) external onlyOwner {
        require(token != address(this), "Can not withdraw this token");
        uint256 contractBalance = IERC20(token).balanceOf(address(this));
        IERC20(token).safeTransfer(recipient, contractBalance);
    }

    function enableTrading() external onlyOwner {
        require (!tradingEnabled, "Already enabled");
        tradingEnabled = true;
    }

    function blacklistAccount(address account, bool blacklist) external onlyOwner {
        require (_isBlacklisted[account] != blacklist, "Already set");
        require(account != uniswapV2Pair, "can not blacklist uniswap pair");
        _isBlacklisted[account] = blacklist;

        emit AccountBlacklisted(account, blacklist);
    }

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

    function withdrawETH(address recipient) external onlyOwner {
        (bool success, ) = recipient.call{ value: address(this).balance }("");
        require(success, "unable to send value, recipient may have reverted");
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}


    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
    
     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"blacklist","type":"bool"}],"name":"AccountBlacklisted","type":"event"},{"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":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"enable","type":"bool"}],"name":"AutomatedMarketMakerEnable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"enable","type":"bool"},{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"BuyTaxEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"autoLpDivisor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devDivisor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardPoolDivisor","type":"uint256"}],"name":"FeesUpdated","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":"previousSellFactor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellFactor","type":"uint256"}],"name":"SellFactorUpdated","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":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFee","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":[],"name":"autoLpDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"account","type":"address"},{"internalType":"bool","name":"blacklist","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"enableAutomatedMarketMaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isAutomatedMarketMaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBuyTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPoolAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPoolDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"setBuyTaxEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddress","type":"address"}],"name":"setDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletLimit","type":"uint256"}],"name":"setMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardPoolAddress","type":"address"}],"name":"setRewardPoolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAutoLpDivisor","type":"uint256"},{"internalType":"uint256","name":"newDevDivisor","type":"uint256"},{"internalType":"uint256","name":"newrewardPoolDivisor","type":"uint256"}],"name":"updateFeeDivisor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellFactor","type":"uint256"}],"name":"updateSellFactor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawUnsupportedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600380547345f6e219a683c7560d71d0249fc353f385301b516001600160a01b031991821681179092556004805490911690911790556803bd913e6c1df4000060085560e0604052600c60a08190526b566f6c7420496e752044414f60a01b60c09081526200007291600a91906200044c565b5060408051808201909152600880825267566f6c742044414f60c01b6020909201918252620000a491600b916200044c565b50600c805460ff199081166009179091556023600d819055600e55600a600f81905560506010819055601155601255601380549091166001179055670429d069189e0000601455670de0b6b3a76400006015556509184e72a0006016556017805462ff00ff60a01b191690553480156200011d57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b257600080fd5b505afa158015620001c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ed9190620004f2565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023657600080fd5b505afa1580156200024b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002719190620004f2565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002ba57600080fd5b505af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f59190620004f2565b601780546001600160a01b0319166001600160a01b03929092169182179055606082901b6001600160601b0319166080526000908152601860205260408120805460ff1916600117905560085490600590620003596000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160096000620003936200043d60201b60201c565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009909252902080549091166001179055620003e66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200042e91815260200190565b60405180910390a35062000561565b6000546001600160a01b031690565b8280546200045a9062000524565b90600052602060002090601f0160209004810192826200047e5760008555620004c9565b82601f106200049957805160ff1916838001178555620004c9565b82800160010185558215620004c9579182015b82811115620004c9578251825591602001919060010190620004ac565b50620004d7929150620004db565b5090565b5b80821115620004d75760008155600101620004dc565b6000602082840312156200050557600080fd5b81516001600160a01b03811681146200051d57600080fd5b9392505050565b600181811c908216806200053957607f821691505b602082108114156200055b57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160601c612adf620005a36000396000818161037c0152818161216e01528181612236015281816122720152818161232501526123810152612adf6000f3fe6080604052600436106103035760003560e01c80637d1db4a511610190578063c5930482116100dc578063dee6a01611610095578063ef0658f21161006f578063ef0658f214610910578063f0f165af14610926578063f2fde38b14610946578063fe575a871461096657600080fd5b8063dee6a016146108b0578063ea2f0b37146108d0578063ec28438a146108f057600080fd5b8063c59304821461080a578063ca48dd7314610824578063cbff46171461083a578063d0d41fe114610850578063dd46706414610870578063dd62ed3e1461089057600080fd5b806395d89b4111610149578063a69df4b511610123578063a69df4b514610795578063a9059cbb146107aa578063b24cf5d7146107ca578063c49b9a80146107ea57600080fd5b806395d89b411461074b578063a073d37f14610760578063a457c2d71461077557600080fd5b80637d1db4a514610689578063842884171461069f578063845a51ec146106d85780638a8c523c146106f85780638da5cb5b1461070d578063929793911461072b57600080fd5b8063437823ec1161024f578063557ed1ba116102085780636c0a24eb116101e25780636c0a24eb1461060857806370a082311461061e578063715018a614610654578063728d41c91461066957600080fd5b8063557ed1ba146105c0578063602bc62b146105d3578063690d8320146105e857600080fd5b8063437823ec146104e557806349bd5a5e146105055780634a74bb02146105255780634ada218b146105465780634c14c0b3146105675780635342acb41461058757600080fd5b80632d5a5d34116102bc5780633950935111610296578063395093511461046f5780633a40799e1461048f5780633ad10ef6146104a55780634127bcc6146104c557600080fd5b80632d5a5d341461040b578063313ce5671461042d578063382e901d1461044f57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806323b872dd146103d5578063283f7820146103f557600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461099f565b604051610331919061287e565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461272c565b610a31565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506008545b604051908152602001610331565b3480156103e157600080fd5b5061035a6103f03660046126bd565b610a4b565b34801561040157600080fd5b506103c760105481565b34801561041757600080fd5b5061042b6104263660046126fe565b610a6f565b005b34801561043957600080fd5b50600c5460405160ff9091168152602001610331565b34801561045b57600080fd5b5061042b61046a366004612684565b610b93565b34801561047b57600080fd5b5061035a61048a36600461272c565b610cab565b34801561049b57600080fd5b506103c7600e5481565b3480156104b157600080fd5b5060045461039e906001600160a01b031681565b3480156104d157600080fd5b5061042b6104e03660046127c4565b610ccd565b3480156104f157600080fd5b5061042b61050036600461264a565b610dc0565b34801561051157600080fd5b5060175461039e906001600160a01b031681565b34801561053157600080fd5b5060175461035a90600160b01b900460ff1681565b34801561055257600080fd5b5060175461035a90600160a01b900460ff1681565b34801561057357600080fd5b5061042b6105823660046126fe565b610e0e565b34801561059357600080fd5b5061035a6105a236600461264a565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156105cc57600080fd5b50426103c7565b3480156105df57600080fd5b506002546103c7565b3480156105f457600080fd5b5061042b61060336600461264a565b610ecb565b34801561061457600080fd5b506103c760155481565b34801561062a57600080fd5b506103c761063936600461264a565b6001600160a01b031660009081526005602052604090205490565b34801561066057600080fd5b5061042b610fb6565b34801561067557600080fd5b5061042b610684366004612792565b611018565b34801561069557600080fd5b506103c760145481565b3480156106ab57600080fd5b5061035a6106ba36600461264a565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156106e457600080fd5b5060035461039e906001600160a01b031681565b34801561070457600080fd5b5061042b611047565b34801561071957600080fd5b506000546001600160a01b031661039e565b34801561073757600080fd5b5061042b610746366004612792565b6110d2565b34801561075757600080fd5b5061032461113d565b34801561076c57600080fd5b506016546103c7565b34801561078157600080fd5b5061035a61079036600461272c565b61114c565b3480156107a157600080fd5b5061042b6111c7565b3480156107b657600080fd5b5061035a6107c536600461272c565b6112cd565b3480156107d657600080fd5b5061042b6107e536600461264a565b6112db565b3480156107f657600080fd5b5061042b610805366004612758565b611327565b34801561081657600080fd5b5060135461035a9060ff1681565b34801561083057600080fd5b506103c7600f5481565b34801561084657600080fd5b506103c760125481565b34801561085c57600080fd5b5061042b61086b36600461264a565b6113a9565b34801561087c57600080fd5b5061042b61088b366004612792565b6113f5565b34801561089c57600080fd5b506103c76108ab366004612684565b61147a565b3480156108bc57600080fd5b5061042b6108cb366004612758565b6114a5565b3480156108dc57600080fd5b5061042b6108eb36600461264a565b61153f565b3480156108fc57600080fd5b5061042b61090b366004612792565b61158a565b34801561091c57600080fd5b506103c7600d5481565b34801561093257600080fd5b5061042b610941366004612792565b6115b9565b34801561095257600080fd5b5061042b61096136600461264a565b6115e8565b34801561097257600080fd5b5061035a61098136600461264a565b6001600160a01b031660009081526007602052604090205460ff1690565b6060600a80546109ae906129fc565b80601f01602080910402602001604051908101604052809291908181526020018280546109da906129fc565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b600033610a3f8185856116c0565b60019150505b92915050565b600033610a598582856117e4565b610a6485858561185e565b506001949350505050565b6000546001600160a01b03163314610aa25760405162461bcd60e51b8152600401610a99906128d6565b60405180910390fd5b6001600160a01b03821660009081526007602052604090205460ff1615158115151415610ae15760405162461bcd60e51b8152600401610a99906128b1565b6017546001600160a01b0383811691161415610b3f5760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6f7420626c61636b6c69737420756e6973776170207061697200006044820152606401610a99565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917f1d3a0f423a29cb00c6d792b5a695e34683386c493edbcf344426b5da5adf0e4491a35050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b038216301415610c165760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f74207769746864726177207468697320746f6b656e00000000006044820152606401610a99565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c5857600080fd5b505afa158015610c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9091906127ab565b9050610ca66001600160a01b0384168383611bef565b505050565b600033610a3f818585610cbe838361147a565b610cc89190612960565b6116c0565b6000546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610a99906128d6565b6000610d0d82610d078686611c41565b90611c41565b905060c8811115610d605760405162461bcd60e51b815260206004820152601e60248201527f63616e7420736574206665657320746f206d6f7265207468616e2032302500006044820152606401610a99565b600f849055600e839055600d8290556010805460115581905560408051858152602081018590529081018390527fcf8a1e1d5f09cf3c97dbb653cd9a4d7aace9292fbc1bb8211febf2d400febbdd9060600160405180910390a150505050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03821660009081526018602052604090205460ff1615158115151415610e775760405162461bcd60e51b8152600401610a99906128b1565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917f8c55f11b6d19d56c8b1800eb4e8b56441df993e14634fe86cd24b1c9bff545d391a35050565b6000546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610a99906128d6565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610f42576040519150601f19603f3d011682016040523d82523d6000602084013e610f47565b606091505b5050905080610fb25760405162461bcd60e51b815260206004820152603160248201527f756e61626c6520746f2073656e642076616c75652c20726563697069656e74206044820152701b585e481a185d99481c995d995c9d1959607a1b6064820152608401610a99565b5050565b6000546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610a99906128d6565b600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610a99906128d6565b601555565b6000546001600160a01b031633146110715760405162461bcd60e51b8152600401610a99906128d6565b601754600160a01b900460ff16156110bd5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610a99565b6017805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610a99906128d6565b60125460408051918252602082018390527fbd246d9b8c3d3843cdfe86c1eef754015151cca52383afcf47cfe2e30389233e910160405180910390a1601255565b6060600b80546109ae906129fc565b6000338161115a828661147a565b9050838110156111ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a99565b610a6482868684036116c0565b6001546001600160a01b0316331461122d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a99565b600254421161127e5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a99565b600154600080546040516001600160a01b039384169390911691600080516020612a8a83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600033610a3f81858561185e565b6000546001600160a01b031633146113055760405162461bcd60e51b8152600401610a99906128d6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113515760405162461bcd60e51b8152600401610a99906128d6565b60178054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061139e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113d35760405162461bcd60e51b8152600401610a99906128d6565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461141f5760405162461bcd60e51b8152600401610a99906128d6565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561144e8142612960565b600255600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a350565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000546001600160a01b031633146114cf5760405162461bcd60e51b8152600401610a99906128d6565b60135460ff16151581151514156114f85760405162461bcd60e51b8152600401610a99906128b1565b6013805460ff19168215159081179091556040514381527f0ca71f7802e05294b7e4e083e369742fd573c5868ff991712ae1ee8af26233159060200160405180910390a250565b6000546001600160a01b031633146115695760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610a99906128d6565b601455565b6000546001600160a01b031633146115e35760405162461bcd60e51b8152600401610a99906128d6565b601655565b6000546001600160a01b031633146116125760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b0381166116775760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a99565b600080546040516001600160a01b0380851693921691600080516020612a8a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a99565b6001600160a01b0382166117835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a99565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006117f0848461147a565b90506000198114611858578181101561184b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a99565b61185884848484036116c0565b50505050565b6001600160a01b0383166118c25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a99565b6001600160a01b03831660009081526007602052604090205460ff16156119195760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03821660009081526007602052604090205460ff16156119705760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03831660009081526009602052604090205460019060ff16806119b257506001600160a01b03831660009081526009602052604090205460ff165b156119bf57506000611b09565b601454821115611a225760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a99565b601754600160a01b900460ff16611a745760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd081cdd185c9d195960521b6044820152606401610a99565b6001600160a01b03831660009081526018602052604090205460ff16611b09576015546001600160a01b038416600090815260056020526040902054611abb908490612960565b1115611b095760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d697400000000006044820152606401610a99565b3060009081526005602052604090205460165481108015908190611b375750601754600160a81b900460ff16155b8015611b4c5750601754600160b01b900460ff165b8015611b6657506017546001600160a01b03878116911614155b15611b7f578015611b7f576016549150611b7f82611ca7565b6001600160a01b0380861660009081526018602052604080822054928916825290205460ff9182169116158015611bb4575080155b15611bbe57600093505b60135460ff16158015611bcf575080155b15611bd957600093505b611be68787878785611dbc565b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ca6908490611f42565b600080611c4e8385612960565b905083811015611ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a99565b9392505050565b6017805460ff60a81b1916600160a81b179055601054600f54600091611cdd91600291611cd79182908790612014565b90612093565b90506000611ceb83836120d5565b905047611cf782612117565b6000611d0347836120d5565b90506000611d29611d206002600f5461209390919063ffffffff16565b601054906120d5565b90508415611d5857611d5885611d536002611cd785611cd7600f548961201490919063ffffffff16565b61231f565b600354600d54611d82916001600160a01b031690611d7d908490611cd7908790612014565b61240e565b600454600e54611da7916001600160a01b031690611d7d908490611cd7908790612014565b50506017805460ff60a81b1916905550505050565b81611dc957611dc9612444565b6001600160a01b03851660009081526005602052604090205483811015611e415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a99565b6000611e4d858461245a565b90506000611e5b82876129b9565b6001600160a01b03808a166000908152600560205260408082208a88039055918a16815281812080548401905530815220805484019055905084611ea457611ea4601154601055565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ee991815260200190565b60405180910390a38115611f385760405182815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050505050505050565b6000611f97826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124a79092919063ffffffff16565b805190915015610ca65780806020019051810190611fb59190612775565b610ca65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a99565b60008261202357506000610a45565b600061202f838561299a565b90508261203c8583612978565b14611ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a99565b6000611ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124b6565b6000611ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ed565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061214c5761214c612a4d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c557600080fd5b505afa1580156121d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fd9190612667565b8160018151811061221057612210612a4d565b60200260200101906001600160a01b031690816001600160a01b03168152505061225b307f0000000000000000000000000000000000000000000000000000000000000000846116c0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906122b0908590600090869030904290600401612924565b600060405180830381600087803b1580156122ca57600080fd5b505af11580156122de573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161231392919061290b565b60405180910390a15050565b61234a307f0000000000000000000000000000000000000000000000000000000000000000846116c0565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156123ce57600080fd5b505af11580156123e2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061240791906127f0565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ca6573d6000803e3d6000fd5b60105461244d57565b6010805460115560009055565b6000806124786103e8611cd76010548761201490919063ffffffff16565b905082612485578061249f565b61249f600a611cd76012548461201490919063ffffffff16565b949350505050565b606061249f848460008561251e565b600081836124d75760405162461bcd60e51b8152600401610a99919061287e565b5060006124e48486612978565b95945050505050565b600081848411156125115760405162461bcd60e51b8152600401610a99919061287e565b5060006124e484866129b9565b606061252985612611565b6125755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a99565b600080866001600160a01b031685876040516125919190612862565b60006040518083038185875af1925050503d80600081146125ce576040519150601f19603f3d011682016040523d82523d6000602084013e6125d3565b606091505b509150915081156125e757915061249f9050565b8051156125f75780518082602001fd5b8360405162461bcd60e51b8152600401610a99919061287e565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061249f575050151592915050565b60006020828403121561265c57600080fd5b8135611ca081612a63565b60006020828403121561267957600080fd5b8151611ca081612a63565b6000806040838503121561269757600080fd5b82356126a281612a63565b915060208301356126b281612a63565b809150509250929050565b6000806000606084860312156126d257600080fd5b83356126dd81612a63565b925060208401356126ed81612a63565b929592945050506040919091013590565b6000806040838503121561271157600080fd5b823561271c81612a63565b915060208301356126b281612a7b565b6000806040838503121561273f57600080fd5b823561274a81612a63565b946020939093013593505050565b60006020828403121561276a57600080fd5b8135611ca081612a7b565b60006020828403121561278757600080fd5b8151611ca081612a7b565b6000602082840312156127a457600080fd5b5035919050565b6000602082840312156127bd57600080fd5b5051919050565b6000806000606084860312156127d957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561280557600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156128575781516001600160a01b031687529582019590820190600101612832565b509495945050505050565b600082516128748184602087016129d0565b9190910192915050565b602081526000825180602084015261289d8160408501602087016129d0565b601f01601f19169190910160400192915050565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061249f604083018461281e565b85815284602082015260a06040820152600061294360a083018661281e565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561297357612973612a37565b500190565b60008261299557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156129b4576129b4612a37565b500290565b6000828210156129cb576129cb612a37565b500390565b60005b838110156129eb5781810151838201526020016129d3565b838111156118585750506000910152565b600181811c90821680612a1057607f821691505b60208210811415612a3157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612a7857600080fd5b50565b8015158114612a7857600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220e7cfbcf2ab0b8302cbd4eb66ecad662c9d14fd93cb51d54ced969a7d4447e60364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103035760003560e01c80637d1db4a511610190578063c5930482116100dc578063dee6a01611610095578063ef0658f21161006f578063ef0658f214610910578063f0f165af14610926578063f2fde38b14610946578063fe575a871461096657600080fd5b8063dee6a016146108b0578063ea2f0b37146108d0578063ec28438a146108f057600080fd5b8063c59304821461080a578063ca48dd7314610824578063cbff46171461083a578063d0d41fe114610850578063dd46706414610870578063dd62ed3e1461089057600080fd5b806395d89b4111610149578063a69df4b511610123578063a69df4b514610795578063a9059cbb146107aa578063b24cf5d7146107ca578063c49b9a80146107ea57600080fd5b806395d89b411461074b578063a073d37f14610760578063a457c2d71461077557600080fd5b80637d1db4a514610689578063842884171461069f578063845a51ec146106d85780638a8c523c146106f85780638da5cb5b1461070d578063929793911461072b57600080fd5b8063437823ec1161024f578063557ed1ba116102085780636c0a24eb116101e25780636c0a24eb1461060857806370a082311461061e578063715018a614610654578063728d41c91461066957600080fd5b8063557ed1ba146105c0578063602bc62b146105d3578063690d8320146105e857600080fd5b8063437823ec146104e557806349bd5a5e146105055780634a74bb02146105255780634ada218b146105465780634c14c0b3146105675780635342acb41461058757600080fd5b80632d5a5d34116102bc5780633950935111610296578063395093511461046f5780633a40799e1461048f5780633ad10ef6146104a55780634127bcc6146104c557600080fd5b80632d5a5d341461040b578063313ce5671461042d578063382e901d1461044f57600080fd5b806306fdde031461030f578063095ea7b31461033a5780631694505e1461036a57806318160ddd146103b657806323b872dd146103d5578063283f7820146103f557600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b5061032461099f565b604051610331919061287e565b60405180910390f35b34801561034657600080fd5b5061035a61035536600461272c565b610a31565b6040519015158152602001610331565b34801561037657600080fd5b5061039e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610331565b3480156103c257600080fd5b506008545b604051908152602001610331565b3480156103e157600080fd5b5061035a6103f03660046126bd565b610a4b565b34801561040157600080fd5b506103c760105481565b34801561041757600080fd5b5061042b6104263660046126fe565b610a6f565b005b34801561043957600080fd5b50600c5460405160ff9091168152602001610331565b34801561045b57600080fd5b5061042b61046a366004612684565b610b93565b34801561047b57600080fd5b5061035a61048a36600461272c565b610cab565b34801561049b57600080fd5b506103c7600e5481565b3480156104b157600080fd5b5060045461039e906001600160a01b031681565b3480156104d157600080fd5b5061042b6104e03660046127c4565b610ccd565b3480156104f157600080fd5b5061042b61050036600461264a565b610dc0565b34801561051157600080fd5b5060175461039e906001600160a01b031681565b34801561053157600080fd5b5060175461035a90600160b01b900460ff1681565b34801561055257600080fd5b5060175461035a90600160a01b900460ff1681565b34801561057357600080fd5b5061042b6105823660046126fe565b610e0e565b34801561059357600080fd5b5061035a6105a236600461264a565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156105cc57600080fd5b50426103c7565b3480156105df57600080fd5b506002546103c7565b3480156105f457600080fd5b5061042b61060336600461264a565b610ecb565b34801561061457600080fd5b506103c760155481565b34801561062a57600080fd5b506103c761063936600461264a565b6001600160a01b031660009081526005602052604090205490565b34801561066057600080fd5b5061042b610fb6565b34801561067557600080fd5b5061042b610684366004612792565b611018565b34801561069557600080fd5b506103c760145481565b3480156106ab57600080fd5b5061035a6106ba36600461264a565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156106e457600080fd5b5060035461039e906001600160a01b031681565b34801561070457600080fd5b5061042b611047565b34801561071957600080fd5b506000546001600160a01b031661039e565b34801561073757600080fd5b5061042b610746366004612792565b6110d2565b34801561075757600080fd5b5061032461113d565b34801561076c57600080fd5b506016546103c7565b34801561078157600080fd5b5061035a61079036600461272c565b61114c565b3480156107a157600080fd5b5061042b6111c7565b3480156107b657600080fd5b5061035a6107c536600461272c565b6112cd565b3480156107d657600080fd5b5061042b6107e536600461264a565b6112db565b3480156107f657600080fd5b5061042b610805366004612758565b611327565b34801561081657600080fd5b5060135461035a9060ff1681565b34801561083057600080fd5b506103c7600f5481565b34801561084657600080fd5b506103c760125481565b34801561085c57600080fd5b5061042b61086b36600461264a565b6113a9565b34801561087c57600080fd5b5061042b61088b366004612792565b6113f5565b34801561089c57600080fd5b506103c76108ab366004612684565b61147a565b3480156108bc57600080fd5b5061042b6108cb366004612758565b6114a5565b3480156108dc57600080fd5b5061042b6108eb36600461264a565b61153f565b3480156108fc57600080fd5b5061042b61090b366004612792565b61158a565b34801561091c57600080fd5b506103c7600d5481565b34801561093257600080fd5b5061042b610941366004612792565b6115b9565b34801561095257600080fd5b5061042b61096136600461264a565b6115e8565b34801561097257600080fd5b5061035a61098136600461264a565b6001600160a01b031660009081526007602052604090205460ff1690565b6060600a80546109ae906129fc565b80601f01602080910402602001604051908101604052809291908181526020018280546109da906129fc565b8015610a275780601f106109fc57610100808354040283529160200191610a27565b820191906000526020600020905b815481529060010190602001808311610a0a57829003601f168201915b5050505050905090565b600033610a3f8185856116c0565b60019150505b92915050565b600033610a598582856117e4565b610a6485858561185e565b506001949350505050565b6000546001600160a01b03163314610aa25760405162461bcd60e51b8152600401610a99906128d6565b60405180910390fd5b6001600160a01b03821660009081526007602052604090205460ff1615158115151415610ae15760405162461bcd60e51b8152600401610a99906128b1565b6017546001600160a01b0383811691161415610b3f5760405162461bcd60e51b815260206004820152601e60248201527f63616e206e6f7420626c61636b6c69737420756e6973776170207061697200006044820152606401610a99565b6001600160a01b038216600081815260076020526040808220805460ff191685151590811790915590519092917f1d3a0f423a29cb00c6d792b5a695e34683386c493edbcf344426b5da5adf0e4491a35050565b6000546001600160a01b03163314610bbd5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b038216301415610c165760405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f74207769746864726177207468697320746f6b656e00000000006044820152606401610a99565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a082319060240160206040518083038186803b158015610c5857600080fd5b505afa158015610c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9091906127ab565b9050610ca66001600160a01b0384168383611bef565b505050565b600033610a3f818585610cbe838361147a565b610cc89190612960565b6116c0565b6000546001600160a01b03163314610cf75760405162461bcd60e51b8152600401610a99906128d6565b6000610d0d82610d078686611c41565b90611c41565b905060c8811115610d605760405162461bcd60e51b815260206004820152601e60248201527f63616e7420736574206665657320746f206d6f7265207468616e2032302500006044820152606401610a99565b600f849055600e839055600d8290556010805460115581905560408051858152602081018590529081018390527fcf8a1e1d5f09cf3c97dbb653cd9a4d7aace9292fbc1bb8211febf2d400febbdd9060600160405180910390a150505050565b6000546001600160a01b03163314610dea5760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314610e385760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03821660009081526018602052604090205460ff1615158115151415610e775760405162461bcd60e51b8152600401610a99906128b1565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917f8c55f11b6d19d56c8b1800eb4e8b56441df993e14634fe86cd24b1c9bff545d391a35050565b6000546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610a99906128d6565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610f42576040519150601f19603f3d011682016040523d82523d6000602084013e610f47565b606091505b5050905080610fb25760405162461bcd60e51b815260206004820152603160248201527f756e61626c6520746f2073656e642076616c75652c20726563697069656e74206044820152701b585e481a185d99481c995d995c9d1959607a1b6064820152608401610a99565b5050565b6000546001600160a01b03163314610fe05760405162461bcd60e51b8152600401610a99906128d6565b600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146110425760405162461bcd60e51b8152600401610a99906128d6565b601555565b6000546001600160a01b031633146110715760405162461bcd60e51b8152600401610a99906128d6565b601754600160a01b900460ff16156110bd5760405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606401610a99565b6017805460ff60a01b1916600160a01b179055565b6000546001600160a01b031633146110fc5760405162461bcd60e51b8152600401610a99906128d6565b60125460408051918252602082018390527fbd246d9b8c3d3843cdfe86c1eef754015151cca52383afcf47cfe2e30389233e910160405180910390a1601255565b6060600b80546109ae906129fc565b6000338161115a828661147a565b9050838110156111ba5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a99565b610a6482868684036116c0565b6001546001600160a01b0316331461122d5760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610a99565b600254421161127e5760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610a99565b600154600080546040516001600160a01b039384169390911691600080516020612a8a83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b600033610a3f81858561185e565b6000546001600160a01b031633146113055760405162461bcd60e51b8152600401610a99906128d6565b600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113515760405162461bcd60e51b8152600401610a99906128d6565b60178054821515600160b01b0260ff60b01b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061139e90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146113d35760405162461bcd60e51b8152600401610a99906128d6565b600480546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461141f5760405162461bcd60e51b8152600401610a99906128d6565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561144e8142612960565b600255600080546040516001600160a01b0390911690600080516020612a8a833981519152908390a350565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b6000546001600160a01b031633146114cf5760405162461bcd60e51b8152600401610a99906128d6565b60135460ff16151581151514156114f85760405162461bcd60e51b8152600401610a99906128b1565b6013805460ff19168215159081179091556040514381527f0ca71f7802e05294b7e4e083e369742fd573c5868ff991712ae1ee8af26233159060200160405180910390a250565b6000546001600160a01b031633146115695760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b031633146115b45760405162461bcd60e51b8152600401610a99906128d6565b601455565b6000546001600160a01b031633146115e35760405162461bcd60e51b8152600401610a99906128d6565b601655565b6000546001600160a01b031633146116125760405162461bcd60e51b8152600401610a99906128d6565b6001600160a01b0381166116775760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a99565b600080546040516001600160a01b0380851693921691600080516020612a8a83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166117225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a99565b6001600160a01b0382166117835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a99565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006117f0848461147a565b90506000198114611858578181101561184b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a99565b61185884848484036116c0565b50505050565b6001600160a01b0383166118c25760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a99565b6001600160a01b03831660009081526007602052604090205460ff16156119195760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03821660009081526007602052604090205460ff16156119705760405162461bcd60e51b815260206004820152600b60248201526a139bdd08105b1b1bddd95960aa1b6044820152606401610a99565b6001600160a01b03831660009081526009602052604090205460019060ff16806119b257506001600160a01b03831660009081526009602052604090205460ff165b156119bf57506000611b09565b601454821115611a225760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610a99565b601754600160a01b900460ff16611a745760405162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd081cdd185c9d195960521b6044820152606401610a99565b6001600160a01b03831660009081526018602052604090205460ff16611b09576015546001600160a01b038416600090815260056020526040902054611abb908490612960565b1115611b095760405162461bcd60e51b815260206004820152601b60248201527f57616c6c657420616d6f756e742065786365656473206c696d697400000000006044820152606401610a99565b3060009081526005602052604090205460165481108015908190611b375750601754600160a81b900460ff16155b8015611b4c5750601754600160b01b900460ff165b8015611b6657506017546001600160a01b03878116911614155b15611b7f578015611b7f576016549150611b7f82611ca7565b6001600160a01b0380861660009081526018602052604080822054928916825290205460ff9182169116158015611bb4575080155b15611bbe57600093505b60135460ff16158015611bcf575080155b15611bd957600093505b611be68787878785611dbc565b50505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610ca6908490611f42565b600080611c4e8385612960565b905083811015611ca05760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610a99565b9392505050565b6017805460ff60a81b1916600160a81b179055601054600f54600091611cdd91600291611cd79182908790612014565b90612093565b90506000611ceb83836120d5565b905047611cf782612117565b6000611d0347836120d5565b90506000611d29611d206002600f5461209390919063ffffffff16565b601054906120d5565b90508415611d5857611d5885611d536002611cd785611cd7600f548961201490919063ffffffff16565b61231f565b600354600d54611d82916001600160a01b031690611d7d908490611cd7908790612014565b61240e565b600454600e54611da7916001600160a01b031690611d7d908490611cd7908790612014565b50506017805460ff60a81b1916905550505050565b81611dc957611dc9612444565b6001600160a01b03851660009081526005602052604090205483811015611e415760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a99565b6000611e4d858461245a565b90506000611e5b82876129b9565b6001600160a01b03808a166000908152600560205260408082208a88039055918a16815281812080548401905530815220805484019055905084611ea457611ea4601154601055565b866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611ee991815260200190565b60405180910390a38115611f385760405182815230906001600160a01b038a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b5050505050505050565b6000611f97826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166124a79092919063ffffffff16565b805190915015610ca65780806020019051810190611fb59190612775565b610ca65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610a99565b60008261202357506000610a45565b600061202f838561299a565b90508261203c8583612978565b14611ca05760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610a99565b6000611ca083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124b6565b6000611ca083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506124ed565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061214c5761214c612a4d565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c557600080fd5b505afa1580156121d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121fd9190612667565b8160018151811061221057612210612a4d565b60200260200101906001600160a01b031690816001600160a01b03168152505061225b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116c0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906122b0908590600090869030904290600401612924565b600060405180830381600087803b1580156122ca57600080fd5b505af11580156122de573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161231392919061290b565b60405180910390a15050565b61234a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846116c0565b60405163f305d71960e01b8152306004820181905260248201849052600060448301819052606483015260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c4016060604051808303818588803b1580156123ce57600080fd5b505af11580156123e2573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061240791906127f0565b5050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015610ca6573d6000803e3d6000fd5b60105461244d57565b6010805460115560009055565b6000806124786103e8611cd76010548761201490919063ffffffff16565b905082612485578061249f565b61249f600a611cd76012548461201490919063ffffffff16565b949350505050565b606061249f848460008561251e565b600081836124d75760405162461bcd60e51b8152600401610a99919061287e565b5060006124e48486612978565b95945050505050565b600081848411156125115760405162461bcd60e51b8152600401610a99919061287e565b5060006124e484866129b9565b606061252985612611565b6125755760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a99565b600080866001600160a01b031685876040516125919190612862565b60006040518083038185875af1925050503d80600081146125ce576040519150601f19603f3d011682016040523d82523d6000602084013e6125d3565b606091505b509150915081156125e757915061249f9050565b8051156125f75780518082602001fd5b8360405162461bcd60e51b8152600401610a99919061287e565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081811480159061249f575050151592915050565b60006020828403121561265c57600080fd5b8135611ca081612a63565b60006020828403121561267957600080fd5b8151611ca081612a63565b6000806040838503121561269757600080fd5b82356126a281612a63565b915060208301356126b281612a63565b809150509250929050565b6000806000606084860312156126d257600080fd5b83356126dd81612a63565b925060208401356126ed81612a63565b929592945050506040919091013590565b6000806040838503121561271157600080fd5b823561271c81612a63565b915060208301356126b281612a7b565b6000806040838503121561273f57600080fd5b823561274a81612a63565b946020939093013593505050565b60006020828403121561276a57600080fd5b8135611ca081612a7b565b60006020828403121561278757600080fd5b8151611ca081612a7b565b6000602082840312156127a457600080fd5b5035919050565b6000602082840312156127bd57600080fd5b5051919050565b6000806000606084860312156127d957600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561280557600080fd5b8351925060208401519150604084015190509250925092565b600081518084526020808501945080840160005b838110156128575781516001600160a01b031687529582019590820190600101612832565b509495945050505050565b600082516128748184602087016129d0565b9190910192915050565b602081526000825180602084015261289d8160408501602087016129d0565b601f01601f19169190910160400192915050565b6020808252600b908201526a105b1c9958591e481cd95d60aa1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b82815260406020820152600061249f604083018461281e565b85815284602082015260a06040820152600061294360a083018661281e565b6001600160a01b0394909416606083015250608001529392505050565b6000821982111561297357612973612a37565b500190565b60008261299557634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156129b4576129b4612a37565b500290565b6000828210156129cb576129cb612a37565b500390565b60005b838110156129eb5781810151838201526020016129d3565b838111156118585750506000910152565b600181811c90821680612a1057607f821691505b60208210811415612a3157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114612a7857600080fd5b50565b8015158114612a7857600080fdfe8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a2646970667358221220e7cfbcf2ab0b8302cbd4eb66ecad662c9d14fd93cb51d54ced969a7d4447e60364736f6c63430008070033

Deployed Bytecode Sourcemap

18615:15974:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21708:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22580:201;;;;;;;;;;-1:-1:-1;22580:201:0;;;;;:::i;:::-;;:::i;:::-;;;6028:14:1;;6021:22;6003:41;;5991:2;5976:18;22580:201:0;5863:187:1;19995:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4704:32:1;;;4686:51;;4674:2;4659:18;19995:51:0;4540:203:1;21985:100:0;;;;;;;;;;-1:-1:-1;22065:12:0;;21985:100;;;15900:25:1;;;15888:2;15873:18;21985:100:0;15754:177:1;22789:295:0;;;;;;;;;;-1:-1:-1;22789:295:0;;;;;:::i;:::-;;:::i;19578:29::-;;;;;;;;;;;;;;;;33514:338;;;;;;;;;;-1:-1:-1;33514:338:0;;;;;:::i;:::-;;:::i;:::-;;21894:83;;;;;;;;;;-1:-1:-1;21960:9:0;;21894:83;;21960:9;;;;17579:36:1;;17567:2;17552:18;21894:83:0;17437:184:1;33050:309:0;;;;;;;;;;-1:-1:-1;33050:309:0;;;;;:::i;:::-;;:::i;23092:238::-;;;;;;;;;;-1:-1:-1;23092:238:0;;;;;:::i;:::-;;:::i;19499:30::-;;;;;;;;;;;;;;;;18895:87;;;;;;;;;;-1:-1:-1;18895:87:0;;;;-1:-1:-1;;;;;18895:87:0;;;31147:592;;;;;;;;;;-1:-1:-1;31147:592:0;;;;;:::i;:::-;;:::i;30906:111::-;;;;;;;;;;-1:-1:-1;30906:111:0;;;;;:::i;:::-;;:::i;20053:28::-;;;;;;;;;;-1:-1:-1;20053:28:0;;;;-1:-1:-1;;;;;20053:28:0;;;20163:41;;;;;;;;;;-1:-1:-1;20163:41:0;;;;-1:-1:-1;;;20163:41:0;;;;;;20088:34;;;;;;;;;;-1:-1:-1;20088:34:0;;;;-1:-1:-1;;;20088:34:0;;;;;;30485:278;;;;;;;;;;-1:-1:-1;30485:278:0;;;;;:::i;:::-;;:::i;30771:123::-;;;;;;;;;;-1:-1:-1;30771:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;30859:27:0;30835:4;30859:27;;;:18;:27;;;;;;;;;30771:123;10125:90;;;;;;;;;;-1:-1:-1;10192:15:0;10125:90;;10023;;;;;;;;;;-1:-1:-1;10096:9:0;;10023:90;;33994:227;;;;;;;;;;-1:-1:-1;33994:227:0;;;;;:::i;:::-;;:::i;19868:51::-;;;;;;;;;;;;;;;;22093:119;;;;;;;;;;-1:-1:-1;22093:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;22186:18:0;22159:7;22186:18;;;:9;:18;;;;;;;22093:119;9615:148;;;;;;;;;;;;;:::i;31880:124::-;;;;;;;;;;-1:-1:-1;31880:124:0;;;;;:::i;:::-;;:::i;19814:47::-;;;;;;;;;;;;;;;;30345:132;;;;;;;;;;-1:-1:-1;30345:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;30440:29:0;30416:4;30440:29;;;:20;:29;;;;;;;;;30345:132;18771:94;;;;;;;;;;-1:-1:-1;18771:94:0;;;;-1:-1:-1;;;;;18771:94:0;;;33367:139;;;;;;;;;;;;;:::i;9390:79::-;;;;;;;;;;-1:-1:-1;9428:7:0;9455:6;-1:-1:-1;;;;;9455:6:0;9390:79;;32647:169;;;;;;;;;;-1:-1:-1;32647:169:0;;;;;:::i;:::-;;:::i;21799:87::-;;;;;;;;;;;;;:::i;23782:120::-;;;;;;;;;;-1:-1:-1;23871:23:0;;23782:120;;23338:436;;;;;;;;;;-1:-1:-1;23338:436:0;;;;;:::i;:::-;;:::i;10461:305::-;;;;;;;;;;;;;:::i;22220:193::-;;;;;;;;;;-1:-1:-1;22220:193:0;;;;;:::i;:::-;;:::i;32190:145::-;;;;;;;;;;-1:-1:-1;32190:145:0;;;;;:::i;:::-;;:::i;32468:171::-;;;;;;;;;;-1:-1:-1;32468:171:0;;;;;:::i;:::-;;:::i;19771:34::-;;;;;;;;;;-1:-1:-1;19771:34:0;;;;;;;;19536:33;;;;;;;;;;;;;;;;19717:30;;;;;;;;;;;;;;;;32343:117;;;;;;;;;;-1:-1:-1;32343:117:0;;;;;:::i;:::-;;:::i;10223:226::-;;;;;;;;;;-1:-1:-1;10223:226:0;;;;;:::i;:::-;;:::i;22421:151::-;;;;;;;;;;-1:-1:-1;22421:151:0;;;;;:::i;:::-;;:::i;32824:218::-;;;;;;;;;;-1:-1:-1;32824:218:0;;;;;:::i;:::-;;:::i;31029:110::-;;;;;;;;;;-1:-1:-1;31029:110:0;;;;;:::i;:::-;;:::i;31757:111::-;;;;;;;;;;-1:-1:-1;31757:111:0;;;;;:::i;:::-;;:::i;19455:37::-;;;;;;;;;;;;;;;;32012:166;;;;;;;;;;-1:-1:-1;32012:166:0;;;;;:::i;:::-;;:::i;9771:244::-;;;;;;;;;;-1:-1:-1;9771:244:0;;;;;:::i;:::-;;:::i;23910:117::-;;;;;;;;;;-1:-1:-1;23910:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;23996:23:0;23972:4;23996:23;;;:14;:23;;;;;;;;;23910:117;21708:83;21745:13;21778:5;21771:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21708:83;:::o;22580:201::-;22663:4;198:10;22719:32;198:10;22735:7;22744:6;22719:8;:32::i;:::-;22769:4;22762:11;;;22580:201;;;;;:::o;22789:295::-;22920:4;198:10;22978:38;22994:4;198:10;23009:6;22978:15;:38::i;:::-;23027:27;23037:4;23043:2;23047:6;23027:9;:27::i;:::-;-1:-1:-1;23072:4:0;;22789:295;-1:-1:-1;;;;22789:295:0:o;33514:338::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;33612:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;::::1;;:36;;::::0;::::1;;;;33603:61;;;;-1:-1:-1::0;;;33603:61:0::1;;;;;;;:::i;:::-;33694:13;::::0;-1:-1:-1;;;;;33683:24:0;;::::1;33694:13:::0;::::1;33683:24;;33675:67;;;::::0;-1:-1:-1;;;33675:67:0;;8046:2:1;33675:67:0::1;::::0;::::1;8028:21:1::0;8085:2;8065:18;;;8058:30;8124:32;8104:18;;;8097:60;8174:18;;33675:67:0::1;7844:354:1::0;33675:67:0::1;-1:-1:-1::0;;;;;33753:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;:35;;-1:-1:-1;;33753:35:0::1;::::0;::::1;;::::0;;::::1;::::0;;;33806:38;;33753:35;;:23;33806:38:::1;::::0;::::1;33514:338:::0;;:::o;33050:309::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33157:22:0;::::1;33174:4;33157:22;;33149:62;;;::::0;-1:-1:-1;;;33149:62:0;;8763:2:1;33149:62:0::1;::::0;::::1;8745:21:1::0;8802:2;8782:18;;;8775:30;8841:29;8821:18;;;8814:57;8888:18;;33149:62:0::1;8561:351:1::0;33149:62:0::1;33248:38;::::0;-1:-1:-1;;;33248:38:0;;33280:4:::1;33248:38;::::0;::::1;4686:51:1::0;33222:23:0::1;::::0;-1:-1:-1;;;;;33248:23:0;::::1;::::0;::::1;::::0;4659:18:1;;33248:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33222:64:::0;-1:-1:-1;33297:54:0::1;-1:-1:-1::0;;;;;33297:26:0;::::1;33324:9:::0;33222:64;33297:26:::1;:54::i;:::-;33138:221;33050:309:::0;;:::o;23092:238::-;23180:4;198:10;23236:64;198:10;23252:7;23289:10;23261:25;198:10;23252:7;23261:9;:25::i;:::-;:38;;;;:::i;:::-;23236:8;:64::i;31147:592::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;31282:19:::1;31304:61;31344:20:::0;31304:35:::1;:16:::0;31325:13;31304:20:::1;:35::i;:::-;:39:::0;::::1;:61::i;:::-;31282:83;;31400:3;31385:11;:18;;31376:62;;;::::0;-1:-1:-1;;;31376:62:0;;11807:2:1;31376:62:0::1;::::0;::::1;11789:21:1::0;11846:2;11826:18;;;11819:30;11885:32;11865:18;;;11858:60;11935:18;;31376:62:0::1;11605:354:1::0;31376:62:0::1;31451:13;:32:::0;;;31494:10:::1;:26:::0;;;31531:17:::1;:40:::0;;;31604:9:::1;::::0;;31584:17:::1;:29:::0;31624:23;;;31665:66:::1;::::0;;17315:25:1;;;17371:2;17356:18;;17349:34;;;17399:18;;;17392:34;;;31665:66:0::1;::::0;17303:2:1;17288:18;31665:66:0::1;;;;;;;31271:468;31147:592:::0;;;:::o;30906:111::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30975:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;30975:34:0::1;31005:4;30975:34;::::0;;30906:111::o;30485:278::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;30590:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;::::1;;:39;;::::0;::::1;;;;30581:64;;;;-1:-1:-1::0;;;30581:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30656:29:0;::::1;;::::0;;;:20:::1;:29;::::0;;;;;:38;;-1:-1:-1;;30656:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30712:43;;30656:38;;:29;30712:43:::1;::::0;::::1;30485:278:::0;;:::o;33994:227::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;34065:12:::1;34083:9;-1:-1:-1::0;;;;;34083:14:0::1;34106:21;34083:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34064:69;;;34152:7;34144:69;;;::::0;-1:-1:-1;;;34144:69:0;;9526:2:1;34144:69:0::1;::::0;::::1;9508:21:1::0;9565:2;9545:18;;;9538:30;9604:34;9584:18;;;9577:62;-1:-1:-1;;;9655:18:1;;;9648:47;9712:19;;34144:69:0::1;9324:413:1::0;34144:69:0::1;34053:168;33994:227:::0;:::o;9615:148::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;9722:1:::1;9706:6:::0;;9685:40:::1;::::0;-1:-1:-1;;;;;9706:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9685:40:0;9722:1;;9685:40:::1;9753:1;9736:19:::0;;-1:-1:-1;;;;;;9736:19:0::1;::::0;;9615:148::o;31880:124::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;31963:16:::1;:33:::0;31880:124::o;33367:139::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;33432:14:::1;::::0;-1:-1:-1;;;33432:14:0;::::1;;;33431:15;33422:44;;;::::0;-1:-1:-1;;;33422:44:0;;12166:2:1;33422:44:0::1;::::0;::::1;12148:21:1::0;12205:2;12185:18;;;12178:30;-1:-1:-1;;;12224:18:1;;;12217:45;12279:18;;33422:44:0::1;11964:339:1::0;33422:44:0::1;33477:14;:21:::0;;-1:-1:-1;;;;33477:21:0::1;-1:-1:-1::0;;;33477:21:0::1;::::0;;33367:139::o;32647:169::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32747:10:::1;::::0;32729:42:::1;::::0;;17034:25:1;;;17090:2;17075:18;;17068:34;;;32729:42:0::1;::::0;17007:18:1;32729:42:0::1;;;;;;;32784:10;:24:::0;32647:169::o;21799:87::-;21838:13;21871:7;21864:14;;;;;:::i;23338:436::-;23431:4;198:10;23431:4;23514:25;198:10;23531:7;23514:9;:25::i;:::-;23487:52;;23578:15;23558:16;:35;;23550:85;;;;-1:-1:-1;;;23550:85:0;;15550:2:1;23550:85:0;;;15532:21:1;15589:2;15569:18;;;15562:30;15628:34;15608:18;;;15601:62;-1:-1:-1;;;15679:18:1;;;15672:35;15724:19;;23550:85:0;15348:401:1;23550:85:0;23671:60;23680:5;23687:7;23715:15;23696:16;:34;23671:8;:60::i;10461:305::-;10513:14;;-1:-1:-1;;;;;10513:14:0;10531:10;10513:28;10505:76;;;;-1:-1:-1;;;10505:76:0;;15146:2:1;10505:76:0;;;15128:21:1;15185:2;15165:18;;;15158:30;15224:34;15204:18;;;15197:62;-1:-1:-1;;;15275:18:1;;;15268:33;15318:19;;10505:76:0;14944:399:1;10505:76:0;10618:9;;10600:15;:27;10592:72;;;;-1:-1:-1;;;10592:72:0;;14375:2:1;10592:72:0;;;14357:21:1;14414:2;14394:18;;;14387:30;14453:33;14433:18;;;14426:61;14504:18;;10592:72:0;14173:355:1;10592:72:0;10709:14;;;10701:6;;10680:44;;-1:-1:-1;;;;;10709:14:0;;;;10701:6;;;;-1:-1:-1;;;;;;;;;;;10680:44:0;;10744:14;;;10735:23;;-1:-1:-1;;;;;;10735:23:0;-1:-1:-1;;;;;10744:14:0;;;10735:23;;;;;;10461:305::o;22220:193::-;22299:4;198:10;22355:28;198:10;22372:2;22376:6;22355:9;:28::i;32190:145::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32280:17:::1;:47:::0;;-1:-1:-1;;;;;;32280:47:0::1;-1:-1:-1::0;;;;;32280:47:0;;;::::1;::::0;;;::::1;::::0;;32190:145::o;32468:171::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32545:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;32545:32:0::1;-1:-1:-1::0;;;;32545:32:0;;::::1;;::::0;;32593:38:::1;::::0;::::1;::::0;::::1;::::0;32569:8;6028:14:1;6021:22;6003:41;;5991:2;5976:18;;5863:187;32593:38:0::1;;;;;;;;32468:171:::0;:::o;32343:117::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32419:10:::1;:33:::0;;-1:-1:-1;;;;;;32419:33:0::1;-1:-1:-1::0;;;;;32419:33:0;;;::::1;::::0;;;::::1;::::0;;32343:117::o;10223:226::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;10304:6:::1;::::0;;;10287:23;;-1:-1:-1;;;;;;10287:23:0;;::::1;-1:-1:-1::0;;;;;10304:6:0;::::1;10287:23;::::0;;;10321:19:::1;::::0;;10363:22:::1;10381:4:::0;10363:15:::1;:22;:::i;:::-;10351:9;:34:::0;10438:1:::1;10422:6:::0;;10401:40:::1;::::0;-1:-1:-1;;;;;10422:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;10401:40:0;10438:1;;10401:40:::1;10223:226:::0;:::o;22421:151::-;-1:-1:-1;;;;;22537:18:0;;;22510:7;22537:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22421:151::o;32824:218::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32902:15:::1;::::0;::::1;;:26;;::::0;::::1;;;;32894:50;;;;-1:-1:-1::0;;;32894:50:0::1;;;;;;;:::i;:::-;32955:15;:25:::0;;-1:-1:-1;;32955:25:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32998:36:::1;::::0;33021:12:::1;15900:25:1::0;;32998:36:0::1;::::0;15888:2:1;15873:18;32998:36:0::1;;;;;;;32824:218:::0;:::o;31029:110::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31096:27:0::1;31126:5;31096:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;31096:35:0::1;::::0;;31029:110::o;31757:111::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;31834:12:::1;:26:::0;31757:111::o;32012:166::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;32120:23:::1;:50:::0;32012:166::o;9771:244::-;9524:6;;-1:-1:-1;;;;;9524:6:0;198:10;9524:22;9516:67;;;;-1:-1:-1;;;9516:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9860:22:0;::::1;9852:73;;;::::0;-1:-1:-1;;;9852:73:0;;6880:2:1;9852:73:0::1;::::0;::::1;6862:21:1::0;6919:2;6899:18;;;6892:30;6958:34;6938:18;;;6931:62;-1:-1:-1;;;7009:18:1;;;7002:36;7055:19;;9852:73:0::1;6678:402:1::0;9852:73:0::1;9962:6;::::0;;9941:38:::1;::::0;-1:-1:-1;;;;;9941:38:0;;::::1;::::0;9962:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;9941:38:0;::::1;9990:6;:17:::0;;-1:-1:-1;;;;;;9990:17:0::1;-1:-1:-1::0;;;;;9990:17:0;;;::::1;::::0;;;::::1;::::0;;9771:244::o;24035:380::-;-1:-1:-1;;;;;24171:19:0;;24163:68;;;;-1:-1:-1;;;24163:68:0;;13272:2:1;24163:68:0;;;13254:21:1;13311:2;13291:18;;;13284:30;13350:34;13330:18;;;13323:62;-1:-1:-1;;;13401:18:1;;;13394:34;13445:19;;24163:68:0;13070:400:1;24163:68:0;-1:-1:-1;;;;;24250:21:0;;24242:68;;;;-1:-1:-1;;;24242:68:0;;7287:2:1;24242:68:0;;;7269:21:1;7326:2;7306:18;;;7299:30;7365:34;7345:18;;;7338:62;-1:-1:-1;;;7416:18:1;;;7409:32;7458:19;;24242:68:0;7085:398:1;24242:68:0;-1:-1:-1;;;;;24323:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24375:32;;15900:25:1;;;24375:32:0;;15873:18:1;24375:32:0;;;;;;;24035:380;;;:::o;24423:453::-;24558:24;24585:25;24595:5;24602:7;24585:9;:25::i;:::-;24558:52;;-1:-1:-1;;24625:16:0;:37;24621:248;;24707:6;24687:16;:26;;24679:68;;;;-1:-1:-1;;;24679:68:0;;8405:2:1;24679:68:0;;;8387:21:1;8444:2;8424:18;;;8417:30;8483:31;8463:18;;;8456:59;8532:18;;24679:68:0;8203:353:1;24679:68:0;24791:51;24800:5;24807:7;24835:6;24816:16;:25;24791:8;:51::i;:::-;24547:329;24423:453;;;:::o;24884:1636::-;-1:-1:-1;;;;;25006:18:0;;24998:68;;;;-1:-1:-1;;;24998:68:0;;12866:2:1;24998:68:0;;;12848:21:1;12905:2;12885:18;;;12878:30;12944:34;12924:18;;;12917:62;-1:-1:-1;;;12995:18:1;;;12988:35;13040:19;;24998:68:0;12664:401:1;24998:68:0;-1:-1:-1;;;;;25086:20:0;;;;;;:14;:20;;;;;;;;25085:21;25077:45;;;;-1:-1:-1;;;25077:45:0;;14035:2:1;25077:45:0;;;14017:21:1;14074:2;14054:18;;;14047:30;-1:-1:-1;;;14093:18:1;;;14086:41;14144:18;;25077:45:0;13833:335:1;25077:45:0;-1:-1:-1;;;;;25142:18:0;;;;;;:14;:18;;;;;;;;25141:19;25133:43;;;;-1:-1:-1;;;25133:43:0;;14035:2:1;25133:43:0;;;14017:21:1;14074:2;14054:18;;;14047:30;-1:-1:-1;;;14093:18:1;;;14086:41;14144:18;;25133:43:0;13833:335:1;25133:43:0;-1:-1:-1;;;;;25316:24:0;;25189:12;25316:24;;;:18;:24;;;;;;25204:4;;25316:24;;;:50;;-1:-1:-1;;;;;;25344:22:0;;;;;;:18;:22;;;;;;;;25316:50;25313:434;;;-1:-1:-1;25392:5:0;25313:434;;;25450:12;;25440:6;:22;;25432:75;;;;-1:-1:-1;;;25432:75:0;;9944:2:1;25432:75:0;;;9926:21:1;9983:2;9963:18;;;9956:30;10022:34;10002:18;;;9995:62;-1:-1:-1;;;10073:18:1;;;10066:38;10121:19;;25432:75:0;9742:404:1;25432:75:0;25530:14;;-1:-1:-1;;;25530:14:0;;;;25522:49;;;;-1:-1:-1;;;25522:49:0;;10353:2:1;25522:49:0;;;10335:21:1;10392:2;10372:18;;;10365:30;-1:-1:-1;;;10411:18:1;;;10404:52;10473:18;;25522:49:0;10151:346:1;25522:49:0;-1:-1:-1;;;;;25591:24:0;;;;;;:20;:24;;;;;;;;25586:148;;25670:16;;-1:-1:-1;;;;;25644:13:0;;;;;;:9;:13;;;;;;:22;;25660:6;;25644:22;:::i;:::-;:42;;25636:82;;;;-1:-1:-1;;;25636:82:0;;12510:2:1;25636:82:0;;;12492:21:1;12549:2;12529:18;;;12522:30;12588:29;12568:18;;;12561:57;12635:18;;25636:82:0;12308:351:1;25636:82:0;25808:4;25759:28;22186:18;;;:9;:18;;;;;;25880:23;;25856:47;;;;;;;25928:44;;-1:-1:-1;25956:16:0;;-1:-1:-1;;;25956:16:0;;;;25955:17;25928:44;:69;;;;-1:-1:-1;25976:21:0;;-1:-1:-1;;;25976:21:0;;;;25928:69;:94;;;;-1:-1:-1;26009:13:0;;-1:-1:-1;;;;;26001:21:0;;;26009:13;;26001:21;;25928:94;25924:291;;;26043:23;26039:165;;;26110:23;;26087:46;;26152:32;26163:20;26152:10;:32::i;:::-;-1:-1:-1;;;;;26249:24:0;;;26235:11;26249:24;;;:20;:24;;;;;;;26290:26;;;;;;;;26249:24;;;;;26290:26;26289:27;:38;;;;;26321:6;26320:7;26289:38;26286:85;;;26354:5;26344:15;;26286:85;26387:15;;;;26386:16;:27;;;;;26407:6;26406:7;26386:27;26383:74;;;26440:5;26430:15;;26383:74;26467:45;26482:4;26487:2;26490:6;26497:7;26505:6;26467:14;:45::i;:::-;24987:1533;;;;24884:1636;;;:::o;5855:211::-;5999:58;;;-1:-1:-1;;;;;5164:32:1;;5999:58:0;;;5146:51:1;5213:18;;;;5206:34;;;5999:58:0;;;;;;;;;;5119:18:1;;;;5999:58:0;;;;;;;;-1:-1:-1;;;;;5999:58:0;-1:-1:-1;;;5999:58:0;;;5972:86;;5992:5;;5972:19;:86::i;1551:181::-;1609:7;;1641:5;1645:1;1641;:5;:::i;:::-;1629:17;;1670:1;1665;:6;;1657:46;;;;-1:-1:-1;;;1657:46:0;;7690:2:1;1657:46:0;;;7672:21:1;7729:2;7709:18;;;7702:30;7768:29;7748:18;;;7741:57;7815:18;;1657:46:0;7488:351:1;1657:46:0;1723:1;1551:181;-1:-1:-1;;;1551:181:0:o;26528:982::-;21010:16;:23;;-1:-1:-1;;;;21010:23:0;-1:-1:-1;;;21010:23:0;;;26688:9:::1;::::0;26669:13:::1;::::0;21010:23;;26644:61:::1;::::0;26703:1:::1;::::0;26644:54:::1;::::0;;;:20;;:24:::1;:39::i;:::-;:43:::0;::::1;:54::i;:61::-;26618:87:::0;-1:-1:-1;26716:20:0::1;26739:41;:20:::0;26618:87;26739:24:::1;:41::i;:::-;26716:64:::0;-1:-1:-1;26818:21:0::1;26850:30;26716:64:::0;26850:16:::1;:30::i;:::-;26891:26;26920:41;:21;26946:14:::0;26920:25:::1;:41::i;:::-;26891:70;;26972:19;26994:35;27008:20;27026:1;27008:13;;:17;;:20;;;;:::i;:::-;26994:9;::::0;;:13:::1;:35::i;:::-;26972:57:::0;-1:-1:-1;27074:19:0;;27071:167:::1;;27146:92;27159:15;27176:61;27235:1;27176:54;27218:11;27176:37;27199:13;;27176:18;:22;;:37;;;;:::i;:61::-;27146:12;:92::i;:::-;27318:17;::::0;27360::::1;::::0;27297:99:::1;::::0;-1:-1:-1;;;;;27318:17:0::1;::::0;27337:58:::1;::::0;27383:11;;27337:41:::1;::::0;:18;;:22:::1;:41::i;:58::-;27297:20;:99::i;:::-;27428:10;::::0;27463::::1;::::0;27407:85:::1;::::0;-1:-1:-1;;;;;27428:10:0::1;::::0;27440:51:::1;::::0;27479:11;;27440:34:::1;::::0;:18;;:22:::1;:34::i;27407:85::-;-1:-1:-1::0;;21056:16:0;:24;;-1:-1:-1;;;;21056:24:0;;;-1:-1:-1;;;;26528:982:0:o;28727:1123::-;28851:7;28847:40;;28873:14;:12;:14::i;:::-;-1:-1:-1;;;;;28990:17:0;;28968:19;28990:17;;;:9;:17;;;;;;29026:21;;;;29018:72;;;;-1:-1:-1;;;29018:72:0;;9119:2:1;29018:72:0;;;9101:21:1;9158:2;9138:18;;;9131:30;9197:34;9177:18;;;9170:62;-1:-1:-1;;;9248:18:1;;;9241:36;9294:19;;29018:72:0;8917:402:1;29018:72:0;29101:12;29116:33;29134:6;29142;29116:17;:33::i;:::-;29101:48;-1:-1:-1;29160:24:0;29187:13;29101:48;29187:6;:13;:::i;:::-;-1:-1:-1;;;;;29236:17:0;;;;;;;:9;:17;;;;;;29256:20;;;29236:40;;29456:20;;;;;;;;:40;;;;;;29529:4;29511:24;;;:32;;;;;;29160:40;-1:-1:-1;29571:7:0;29567:41;;29593:15;30312:17;;30300:9;:29;30256:81;29593:15;29643:9;-1:-1:-1;;;;;29626:45:0;29635:6;-1:-1:-1;;;;;29626:45:0;;29654:16;29626:45;;;;15900:25:1;;15888:2;15873:18;;15754:177;29626:45:0;;;;;;;;29685:8;;29682:82;;29715:37;;15900:25:1;;;29740:4:0;;-1:-1:-1;;;;;29715:37:0;;;;;15888:2:1;15873:18;29715:37:0;;;;;;;29682:82;28836:1014;;;28727:1123;;;;;:::o;8278:716::-;8702:23;8728:69;8756:4;8728:69;;;;;;;;;;;;;;;;;8736:5;-1:-1:-1;;;;;8728:27:0;;;:69;;;;;:::i;:::-;8812:17;;8702:95;;-1:-1:-1;8812:21:0;8808:179;;8909:10;8898:30;;;;;;;;;;;;:::i;:::-;8890:85;;;;-1:-1:-1;;;8890:85:0;;14735:2:1;8890:85:0;;;14717:21:1;14774:2;14754:18;;;14747:30;14813:34;14793:18;;;14786:62;-1:-1:-1;;;14864:18:1;;;14857:40;14914:19;;8890:85:0;14533:406:1;2084:250:0;2142:7;2166:6;2162:47;;-1:-1:-1;2196:1:0;2189:8;;2162:47;2221:9;2233:5;2237:1;2233;:5;:::i;:::-;2221:17;-1:-1:-1;2266:1:0;2257:5;2261:1;2221:17;2257:5;:::i;:::-;:10;2249:56;;;;-1:-1:-1;;;2249:56:0;;11044:2:1;2249:56:0;;;11026:21:1;11083:2;11063:18;;;11056:30;11122:34;11102:18;;;11095:62;-1:-1:-1;;;11173:18:1;;;11166:31;11214:19;;2249:56:0;10842:397:1;2344:132:0;2402:7;2429:39;2433:1;2436;2429:39;;;;;;;;;;;;;;;;;:3;:39::i;1740:136::-;1798:7;1825:43;1829:1;1832;1825:43;;;;;;;;;;;;;;;;;:3;:43::i;27522:666::-;27672:16;;;27686:1;27672:16;;;;;;;;27648:21;;27672:16;;;;;;;;;;-1:-1:-1;27672:16:0;27648:40;;27717:4;27699;27704:1;27699:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;27699:23:0;;;-1:-1:-1;;;;;27699:23:0;;;;;27743:15;-1:-1:-1;;;;;27743:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27733:4;27738:1;27733:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;27733:32:0;;;-1:-1:-1;;;;;27733:32:0;;;;;27778:62;27795:4;27810:15;27828:11;27778:8;:62::i;:::-;27879:240;;-1:-1:-1;;;27879:240:0;;-1:-1:-1;;;;;27879:15:0;:66;;;;:240;;27960:11;;27986:1;;28030:4;;28057;;28093:15;;27879:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28145:35;28162:11;28175:4;28145:35;;;;;;;:::i;:::-;;;;;;;;27577:611;27522:666;:::o;28200:519::-;28348:62;28365:4;28380:15;28398:11;28348:8;:62::i;:::-;28453:258;;-1:-1:-1;;;28453:258:0;;28525:4;28453:258;;;5592:34:1;;;5642:18;;;5635:34;;;28571:1:0;5685:18:1;;;5678:34;;;5728:18;;;5721:34;5771:19;;;5764:44;28685:15:0;5824:19:1;;;5817:35;28453:15:0;-1:-1:-1;;;;;28453:31:0;;;;28492:9;;5526:19:1;;28453:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28200:519;;:::o;33860:126::-;33952:26;;-1:-1:-1;;;;;33952:18:0;;;:26;;;;;33971:6;;33952:26;;;;33971:6;33952:18;:26;;;;;;;;;;;;;;;;;;;30093:151;30139:9;;30136:26;;30093:151::o;30136:26::-;30202:9;;;30182:17;:29;-1:-1:-1;30223:13:0;;30093:151::o;29862:219::-;29942:7;29962:12;29977:33;30004:5;29977:22;29989:9;;29977:7;:11;;:22;;;;:::i;:33::-;29962:48;;30028:7;:45;;30069:4;30028:45;;;30038:28;30063:2;30038:20;30047:10;;30038:4;:8;;:20;;;;:::i;:28::-;30021:52;29862:219;-1:-1:-1;;;;29862:219:0:o;4321:196::-;4424:12;4456:53;4479:6;4487:4;4493:1;4496:12;4456:22;:53::i;2484:278::-;2570:7;2605:12;2598:5;2590:28;;;;-1:-1:-1;;;2590:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2629:9:0;2641:5;2645:1;2641;:5;:::i;:::-;2629:17;2484:278;-1:-1:-1;;;;;2484:278:0:o;1884:192::-;1970:7;2006:12;1998:6;;;;1990:29;;;;-1:-1:-1;;;1990:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2030:9:0;2042:5;2046:1;2042;:5;:::i;5083:706::-;5213:12;5246:18;5257:6;5246:10;:18::i;:::-;5238:60;;;;-1:-1:-1;;;5238:60:0;;13677:2:1;5238:60:0;;;13659:21:1;13716:2;13696:18;;;13689:30;13755:31;13735:18;;;13728:59;13804:18;;5238:60:0;13475:353:1;5238:60:0;5312:12;5326:23;5353:6;-1:-1:-1;;;;;5353:11:0;5373:8;5384:4;5353:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5311:78;;;;5404:7;5400:382;;;5435:10;-1:-1:-1;5428:17:0;;-1:-1:-1;5428:17:0;5400:382;5496:17;;:21;5492:279;;5599:10;5593:17;5660:15;5647:10;5643:2;5639:19;5632:44;5492:279;5742:12;5735:20;;-1:-1:-1;;;5735:20:0;;;;;;;;:::i;3106:619::-;3166:4;3634:20;;3477:66;3674:23;;;;;;:42;;-1:-1:-1;;3701:15:0;;;3666:51;-1:-1:-1;;3106:619:0:o;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:52;;;667:1;664;657:12;619:52;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;522:388;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:52;;;1077:1;1074;1067:12;1029:52;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;915:456;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;915:456::o;1376:382::-;1441:6;1449;1502:2;1490:9;1481:7;1477:23;1473:32;1470:52;;;1518:1;1515;1508:12;1470:52;1557:9;1544:23;1576:31;1601:5;1576:31;:::i;:::-;1626:5;-1:-1:-1;1683:2:1;1668:18;;1655:32;1696:30;1655:32;1696:30;:::i;1763:315::-;1831:6;1839;1892:2;1880:9;1871:7;1867:23;1863:32;1860:52;;;1908:1;1905;1898:12;1860:52;1947:9;1934:23;1966:31;1991:5;1966:31;:::i;:::-;2016:5;2068:2;2053:18;;;;2040:32;;-1:-1:-1;;;1763:315:1:o;2083:241::-;2139:6;2192:2;2180:9;2171:7;2167:23;2163:32;2160:52;;;2208:1;2205;2198:12;2160:52;2247:9;2234:23;2266:28;2288:5;2266:28;:::i;2329:245::-;2396:6;2449:2;2437:9;2428:7;2424:23;2420:32;2417:52;;;2465:1;2462;2455:12;2417:52;2497:9;2491:16;2516:28;2538:5;2516:28;:::i;2579:180::-;2638:6;2691:2;2679:9;2670:7;2666:23;2662:32;2659:52;;;2707:1;2704;2697:12;2659:52;-1:-1:-1;2730:23:1;;2579:180;-1:-1:-1;2579:180:1:o;2764:184::-;2834:6;2887:2;2875:9;2866:7;2862:23;2858:32;2855:52;;;2903:1;2900;2893:12;2855:52;-1:-1:-1;2926:16:1;;2764:184;-1:-1:-1;2764:184:1:o;2953:316::-;3030:6;3038;3046;3099:2;3087:9;3078:7;3074:23;3070:32;3067:52;;;3115:1;3112;3105:12;3067:52;-1:-1:-1;;3138:23:1;;;3208:2;3193:18;;3180:32;;-1:-1:-1;3259:2:1;3244:18;;;3231:32;;2953:316;-1:-1:-1;2953:316:1:o;3274:306::-;3362:6;3370;3378;3431:2;3419:9;3410:7;3406:23;3402:32;3399:52;;;3447:1;3444;3437:12;3399:52;3476:9;3470:16;3460:26;;3526:2;3515:9;3511:18;3505:25;3495:35;;3570:2;3559:9;3555:18;3549:25;3539:35;;3274:306;;;;;:::o;3585:461::-;3638:3;3676:5;3670:12;3703:6;3698:3;3691:19;3729:4;3758:2;3753:3;3749:12;3742:19;;3795:2;3788:5;3784:14;3816:1;3826:195;3840:6;3837:1;3834:13;3826:195;;;3905:13;;-1:-1:-1;;;;;3901:39:1;3889:52;;3961:12;;;;3996:15;;;;3937:1;3855:9;3826:195;;;-1:-1:-1;4037:3:1;;3585:461;-1:-1:-1;;;;;3585:461:1:o;4051:274::-;4180:3;4218:6;4212:13;4234:53;4280:6;4275:3;4268:4;4260:6;4256:17;4234:53;:::i;:::-;4303:16;;;;;4051:274;-1:-1:-1;;4051:274:1:o;6290:383::-;6439:2;6428:9;6421:21;6402:4;6471:6;6465:13;6514:6;6509:2;6498:9;6494:18;6487:34;6530:66;6589:6;6584:2;6573:9;6569:18;6564:2;6556:6;6552:15;6530:66;:::i;:::-;6657:2;6636:15;-1:-1:-1;;6632:29:1;6617:45;;;;6664:2;6613:54;;6290:383;-1:-1:-1;;6290:383:1:o;10502:335::-;10704:2;10686:21;;;10743:2;10723:18;;;10716:30;-1:-1:-1;;;10777:2:1;10762:18;;10755:41;10828:2;10813:18;;10502:335::o;11244:356::-;11446:2;11428:21;;;11465:18;;;11458:30;11524:34;11519:2;11504:18;;11497:62;11591:2;11576:18;;11244:356::o;15936:332::-;16143:6;16132:9;16125:25;16186:2;16181;16170:9;16166:18;16159:30;16106:4;16206:56;16258:2;16247:9;16243:18;16235:6;16206:56;:::i;16273:582::-;16572:6;16561:9;16554:25;16615:6;16610:2;16599:9;16595:18;16588:34;16658:3;16653:2;16642:9;16638:18;16631:31;16535:4;16679:57;16731:3;16720:9;16716:19;16708:6;16679:57;:::i;:::-;-1:-1:-1;;;;;16772:32:1;;;;16767:2;16752:18;;16745:60;-1:-1:-1;16836:3:1;16821:19;16814:35;16671:65;16273:582;-1:-1:-1;;;16273:582:1:o;17626:128::-;17666:3;17697:1;17693:6;17690:1;17687:13;17684:39;;;17703:18;;:::i;:::-;-1:-1:-1;17739:9:1;;17626:128::o;17759:217::-;17799:1;17825;17815:132;;17869:10;17864:3;17860:20;17857:1;17850:31;17904:4;17901:1;17894:15;17932:4;17929:1;17922:15;17815:132;-1:-1:-1;17961:9:1;;17759:217::o;17981:168::-;18021:7;18087:1;18083;18079:6;18075:14;18072:1;18069:21;18064:1;18057:9;18050:17;18046:45;18043:71;;;18094:18;;:::i;:::-;-1:-1:-1;18134:9:1;;17981:168::o;18154:125::-;18194:4;18222:1;18219;18216:8;18213:34;;;18227:18;;:::i;:::-;-1:-1:-1;18264:9:1;;18154:125::o;18284:258::-;18356:1;18366:113;18380:6;18377:1;18374:13;18366:113;;;18456:11;;;18450:18;18437:11;;;18430:39;18402:2;18395:10;18366:113;;;18497:6;18494:1;18491:13;18488:48;;;-1:-1:-1;;18532:1:1;18514:16;;18507:27;18284:258::o;18547:380::-;18626:1;18622:12;;;;18669;;;18690:61;;18744:4;18736:6;18732:17;18722:27;;18690:61;18797:2;18789:6;18786:14;18766:18;18763:38;18760:161;;;18843:10;18838:3;18834:20;18831:1;18824:31;18878:4;18875:1;18868:15;18906:4;18903:1;18896:15;18760:161;;18547:380;;;:::o;18932:127::-;18993:10;18988:3;18984:20;18981:1;18974:31;19024:4;19021:1;19014:15;19048:4;19045:1;19038:15;19064:127;19125:10;19120:3;19116:20;19113:1;19106:31;19156:4;19153:1;19146:15;19180:4;19177:1;19170:15;19328:131;-1:-1:-1;;;;;19403:31:1;;19393:42;;19383:70;;19449:1;19446;19439:12;19383:70;19328:131;:::o;19464:118::-;19550:5;19543:13;19536:21;19529:5;19526:32;19516:60;;19572:1;19569;19562:12

Swarm Source

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