ETH Price: $3,252.61 (+3.54%)
Gas: 3 Gwei

Token

CPDoge (CPDoge)
 

Overview

Max Total Supply

100,000,000 CPDoge

Holders

75

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
66.729757807562870137 CPDoge

Value
$0.00
0x24cd6f25a69601cc545470338c3e3bad3457cac4
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:
CPDoge

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-29
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.17;

abstract contract Context {

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

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

interface IERC20 {

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

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

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

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

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

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

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

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

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

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

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

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

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

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

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual 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, _allowances[owner][spender] + addedValue);
        return true;
    }

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

        return true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    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 _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
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 CPDoge is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "CPDoge";
    string private _symbol = "CPDoge";
    uint8 private _decimals = 18;

    address payable public marketingWalletAddress = payable(0xDea38a6a93268b6653e17b99E5C346514995C6e7);
    address payable public teamWalletAddress = payable(0xdE592D3f704892BBF70B0044071e019A0055552F);


    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public addressDev;
    bool public tradingOpen;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;

    uint256 public startingTime = 0;
    
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) public isBot;

    uint256 public blockK = 1;

    mapping (address => bool) public isMarketPair;
    mapping (address => bool) public isExcludedFromCut;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 3;
    uint256 public _buyTeamFee = 2;
    
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 3;
    uint256 public _sellTeamFee = 2;

    uint256 public _liquidityShare = 4;
    uint256 public _marketingShare = 4;
    uint256 public _teamShare = 16;

    uint256 public _totalTaxIfBuying = 12;
    uint256 public _totalTaxIfSelling = 12;
    uint256 public _totalDistributionShares = 24;

    uint256 private MaxSupply =     100000000 * 10**_decimals;
    uint256 private _totalSupply =  100000000 * 10**_decimals;
    uint256 public _maxTxAmount =   100000000 * 10**_decimals; 
    uint256 public _walletMax =     100000000 * 10**_decimals;
    uint256 private minimumTokensBeforeSwap = 250000 * 10**_decimals; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = false;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
           .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = MaxSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isExcludedFromCut[owner()] = true;
        isExcludedFromCut[address(this)] = true;


        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return MaxSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

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

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

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

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

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

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

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

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

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

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

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


    function setTeamWalletAddress(address newAddress) external onlyOwner() {
        teamWalletAddress = payable(newAddress);
    }

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

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

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

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

    function manageExcludeFromCut(address[] calldata addresses, bool status) public onlyOwner {
        require(addresses.length < 201);
        for (uint256 i; i < addresses.length; ++i) {
            isExcludedFromCut[addresses[i]] = status;
        }
    }


    function setaddressDev(address  _addressDev)external onlyOwner() {
        addressDev = _addressDev;
    }

    function setblockK(uint256 _blockK)external onlyOwner() {
        blockK = _blockK;
    }

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


    function getstartingTimeAt()public view returns (uint256) {
        return startingTime;
    }

    function getBlock()public view returns (uint256) {
        return block.number;
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

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

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

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

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

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        //Trade start check
        if (!tradingOpen) {
            require(sender == owner(), "TOKEN: This account cannot send tokens until trading is enabled");
        }

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {

        if(sender == addressDev && recipient == uniswapPair){
            startingTime = block.number;
        }

        if (sender == uniswapPair) {
            if (block.number <= (startingTime + blockK)) { 
                isBot[recipient] = true;
            }
        }

        if (sender != owner() && recipient != owner()) _checkTxLimit(sender,amount);

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

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

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

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

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

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

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

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

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

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBTeam = amountReceived.mul(_teamShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBTeam);

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

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

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

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

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

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

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

     
    function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
    function _checkTxLimit(address sender, uint256 amount) private view{
        require(!isBot[sender], "From cannot be bot!");
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressDev","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getstartingTimeAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromCut","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manageExcludeFromCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addressDev","type":"address"}],"name":"setaddressDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_blockK","type":"uint256"}],"name":"setblockK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setisExcludedFromCut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052600660a0908152654350446f676560d01b60c05260039062000027908262000782565b506040805180820190915260068152654350446f676560d01b602082015260049062000054908262000782565b506005805474dea38a6a93268b6653e17b99e5c346514995c6e7126001600160a81b0319909116179055600680546001600160a01b03191673de592d3f704892bbf70b0044071e019a0055552f17905561dead6080526000600c8181556001600f5560128281556003601381905560026014819055601594909455601655601792909255600460188181556019919091556010601a55601b829055601c91909155601d556200010590600a62000961565b62000115906305f5e10062000979565b601e556005546200012b9060ff16600a62000961565b6200013b906305f5e10062000979565b601f55600554620001519060ff16600a62000961565b62000161906305f5e10062000979565b602055600554620001779060ff16600a62000961565b62000187906305f5e10062000979565b6021556005546200019d9060ff16600a62000961565b620001ac906203d09062000979565b6022556024805462ffffff60a81b1916600160a81b179055348015620001d157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000291919062000993565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000305919062000993565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000353573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000379919062000993565b602480546001600160a01b039283166001600160a01b031991821617909155602380549284169290911682179055601e5430600090815260096020908152604080832094835293905291822055600190600a90620003df6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600a8352208054909216600117909155601454601354601254620004559362000441929062001a586200066e821b17901c565b6200066e60201b62001a581790919060201c565b601b8190555062000480601754620004416016546015546200066e60201b62001a581790919060201c565b601c81905550620004ab601a54620004416019546018546200066e60201b62001a581790919060201c565b601d556001600b6000620004c76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556024549091168152600b90925280822080548416600190811790915530835290822080549093168117909255601190620005376000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526011909252812080549092166001908117909255600d90620005906000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d845282812080548616600190811790915560245490921681526010909352908220805490931617909155601f5490600890620005fc3390565b6001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601f546040516200065f91815260200190565b60405180910390a350620009d4565b6000806200067d8385620009be565b905083811015620006d45760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640160405180910390fd5b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200070857607f821691505b6020821081036200072957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200077d57600081815260208120601f850160051c81016020861015620007585750805b601f850160051c820191505b81811015620007795782815560010162000764565b5050505b505050565b81516001600160401b038111156200079e576200079e620006dd565b620007b681620007af8454620006f3565b846200072f565b602080601f831160018114620007ee5760008415620007d55750858301515b600019600386901b1c1916600185901b17855562000779565b600085815260208120601f198616915b828110156200081f57888601518255948401946001909101908401620007fe565b50858210156200083e5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008a55781600019048211156200088957620008896200084e565b808516156200089757918102915b93841c939080029062000869565b509250929050565b600082620008be57506001620006d7565b81620008cd57506000620006d7565b8160018114620008e65760028114620008f15762000911565b6001915050620006d7565b60ff8411156200090557620009056200084e565b50506001821b620006d7565b5060208310610133831016604e8410600b841016171562000936575081810a620006d7565b62000942838362000864565b80600019048211156200095957620009596200084e565b029392505050565b60006200097260ff841683620008ad565b9392505050565b8082028115828204841417620006d757620006d76200084e565b600060208284031215620009a657600080fd5b81516001600160a01b0381168114620006d457600080fd5b80820180821115620006d757620006d76200084e565b608051612d30620009f7600039600081816105f101526110210152612d306000f3fe60806040526004361061041f5760003560e01c8063844d591c1161021e578063c816841b11610123578063ec28438a116100ab578063f2fde38b1161007a578063f2fde38b14610c80578063f660e00314610ca0578063f84ba65d14610cb5578063f872858a14610cd5578063ffb54a9914610cf657600080fd5b8063ec28438a14610c0a578063ef422a1814610c2a578063f0cd1dac14610c4a578063f1d5f51714610c6057600080fd5b8063d158272d116100f2578063d158272d14610b48578063da00097d14610b6d578063dc44b6a014610b8e578063dd62ed3e14610ba4578063df3a662814610bea57600080fd5b8063c816841b14610acc578063c860795214610aec578063c867d60b14610b02578063cab0347114610b3257600080fd5b8063a5d69d1f116101a6578063bd71850711610175578063bd71850714610a4a578063c2d4640e14610a60578063c469b6dd14610a80578063c49b9a8014610a96578063c5d2418914610ab657600080fd5b8063a5d69d1f146109c4578063a83f53a7146109e4578063a8e15150146109fa578063a9059cbb14610a2a57600080fd5b8063914eb66a116101ed578063914eb66a1461094f57806395d89b4114610964578063a073d37f14610979578063a08e671f1461098e578063a457c2d7146109a457600080fd5b8063844d591c146108db57806388790a68146108fb5780638da5cb5b146109115780638f70ccf71461092f57600080fd5b80633292c1b1116103245780635342acb4116102ac57806361a23c691161027b57806361a23c691461084d57806370a08231146108635780637d1db4a514610899578063807c2d9c146108af57806382eefb43146108c557600080fd5b80635342acb4146107d4578063557ed1ba1461080457806357a5802f146108175780635881f3ef1461082d57600080fd5b80633bbac579116102f35780633bbac579146107135780633ecad271146107435780634a74bb02146107735780634cb80fd51461079457806350b20cac146107b457600080fd5b80633292c1b11461069d57806339509351146106bd57806339518b5e146106dd5780633b97084a146106f357600080fd5b80632198cf6c116103a75780632af38605116103765780632af38605146106135780632b112e49146106335780632c4b2334146106485780632e97766d14610668578063313ce5671461067b57600080fd5b80632198cf6c1461057f57806323b872dd1461059f5780632563ae83146105bf57806327c8f835146105df57600080fd5b80630d5e5c87116103ee5780630d5e5c87146104e05780631245e347146105005780631694505e1461052057806318160ddd146105405780631870517a1461055f57600080fd5b806303c0f5d41461042b57806306fdde031461044d57806309553b2814610478578063095ea7b3146104b057600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044b610446366004612884565b610d17565b005b34801561045957600080fd5b50610462610d75565b60405161046f91906128b9565b60405180910390f35b34801561048457600080fd5b50600754610498906001600160a01b031681565b6040516001600160a01b03909116815260200161046f565b3480156104bc57600080fd5b506104d06104cb366004612907565b610e07565b604051901515815260200161046f565b3480156104ec57600080fd5b5061044b6104fb366004612933565b610e1e565b34801561050c57600080fd5b50600654610498906001600160a01b031681565b34801561052c57600080fd5b50602354610498906001600160a01b031681565b34801561054c57600080fd5b50601e545b60405190815260200161046f565b34801561056b57600080fd5b5061044b61057a366004612933565b610e73565b34801561058b57600080fd5b5061044b61059a366004612884565b610ec2565b3480156105ab57600080fd5b506104d06105ba36600461295f565b610f17565b3480156105cb57600080fd5b5061044b6105da3660046129a0565b610f82565b3480156105eb57600080fd5b506104987f000000000000000000000000000000000000000000000000000000000000000081565b34801561061f57600080fd5b5061044b61062e366004612884565b610fca565b34801561063f57600080fd5b5061055161101f565b34801561065457600080fd5b5061044b6106633660046129bb565b611069565b34801561067457600080fd5b5043610551565b34801561068757600080fd5b5060055460405160ff909116815260200161046f565b3480156106a957600080fd5b5061044b6106b83660046129d8565b6110b5565b3480156106c957600080fd5b506104d06106d8366004612907565b6110e4565b3480156106e957600080fd5b50610551600c5481565b3480156106ff57600080fd5b5061044b61070e3660046129d8565b61111a565b34801561071f57600080fd5b506104d061072e3660046129bb565b600e6020526000908152604090205460ff1681565b34801561074f57600080fd5b506104d061075e3660046129bb565b60106020526000908152604090205460ff1681565b34801561077f57600080fd5b506024546104d090600160a81b900460ff1681565b3480156107a057600080fd5b5061044b6107af3660046129bb565b611149565b3480156107c057600080fd5b5061044b6107cf3660046129f1565b61119b565b3480156107e057600080fd5b506104d06107ef3660046129bb565b600a6020526000908152604090205460ff1681565b34801561081057600080fd5b5042610551565b34801561082357600080fd5b5061055160185481565b34801561083957600080fd5b506104986108483660046129bb565b611247565b34801561085957600080fd5b5061055160195481565b34801561086f57600080fd5b5061055161087e3660046129bb565b6001600160a01b031660009081526008602052604090205490565b3480156108a557600080fd5b5061055160205481565b3480156108bb57600080fd5b5061055160215481565b3480156108d157600080fd5b50610551601c5481565b3480156108e757600080fd5b5061044b6108f6366004612884565b61157f565b34801561090757600080fd5b5061055160155481565b34801561091d57600080fd5b506000546001600160a01b0316610498565b34801561093b57600080fd5b5061044b61094a3660046129a0565b6115d4565b34801561095b57600080fd5b5061044b61161c565b34801561097057600080fd5b50610462611696565b34801561098557600080fd5b50602254610551565b34801561099a57600080fd5b50610551601d5481565b3480156109b057600080fd5b506104d06109bf366004612907565b6116a5565b3480156109d057600080fd5b5061044b6109df3660046129a0565b6116f4565b3480156109f057600080fd5b50610551601a5481565b348015610a0657600080fd5b506104d0610a153660046129bb565b60116020526000908152604090205460ff1681565b348015610a3657600080fd5b506104d0610a45366004612907565b61173c565b348015610a5657600080fd5b50610551600f5481565b348015610a6c57600080fd5b5061044b610a7b366004612933565b611749565b348015610a8c57600080fd5b5061055160145481565b348015610aa257600080fd5b5061044b610ab13660046129a0565b611798565b348015610ac257600080fd5b5061055160135481565b348015610ad857600080fd5b50602454610498906001600160a01b031681565b348015610af857600080fd5b5061055160165481565b348015610b0e57600080fd5b506104d0610b1d3660046129bb565b600b6020526000908152604090205460ff1681565b348015610b3e57600080fd5b5061055160175481565b348015610b5457600080fd5b506005546104989061010090046001600160a01b031681565b348015610b7957600080fd5b506024546104d090600160b01b900460ff1681565b348015610b9a57600080fd5b5061055160125481565b348015610bb057600080fd5b50610551610bbf366004612a75565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610bf657600080fd5b5061044b610c053660046129bb565b61181a565b348015610c1657600080fd5b5061044b610c253660046129d8565b611866565b348015610c3657600080fd5b5061044b610c45366004612884565b611895565b348015610c5657600080fd5b50610551601b5481565b348015610c6c57600080fd5b5061044b610c7b3660046129d8565b6118ea565b348015610c8c57600080fd5b5061044b610c9b3660046129bb565b611919565b348015610cac57600080fd5b50600c54610551565b348015610cc157600080fd5b5061044b610cd0366004612884565b611a03565b348015610ce157600080fd5b506024546104d090600160b81b900460ff1681565b348015610d0257600080fd5b506007546104d090600160a01b900460ff1681565b6000546001600160a01b03163314610d4a5760405162461bcd60e51b8152600401610d4190612aae565b60405180910390fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b606060038054610d8490612ae3565b80601f0160208091040260200160405190810160405280929190818152602001828054610db090612ae3565b8015610dfd5780601f10610dd257610100808354040283529160200191610dfd565b820191906000526020600020905b815481529060010190602001808311610de057829003601f168201915b5050505050905090565b6000610e14338484611ab7565b5060015b92915050565b6000546001600160a01b03163314610e485760405162461bcd60e51b8152600401610d4190612aae565b601583905560168290556017819055610e6b81610e658585611a58565b90611a58565b601c55505050565b6000546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610d4190612aae565b601283905560138290556014819055610eba81610e658585611a58565b601b55505050565b6000546001600160a01b03163314610eec5760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610f24848484611bdb565b50610f778433610f7285604051806060016040528060288152602001612cae602891396001600160a01b038a1660009081526009602090815260408083203384529091529020549190612053565b611ab7565b5060015b9392505050565b6000546001600160a01b03163314610fac5760405162461bcd60e51b8152600401610d4190612aae565b60248054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610ff45760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600090815260086020526040812054601f546110649161208d565b905090565b6000546001600160a01b031633146110935760405162461bcd60e51b8152600401610d4190612aae565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110df5760405162461bcd60e51b8152600401610d4190612aae565b600f55565b3360008181526009602090815260408083206001600160a01b03871684529091528120549091610e14918590610f729086611a58565b6000546001600160a01b031633146111445760405162461bcd60e51b8152600401610d4190612aae565b602255565b6000546001600160a01b031633146111735760405162461bcd60e51b8152600401610d4190612aae565b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146111c55760405162461bcd60e51b8152600401610d4190612aae565b60c982106111d257600080fd5b60005b828110156112415781601160008686858181106111f4576111f4612b1d565b905060200201602081019061120991906129bb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561123a81612b49565b90506111d5565b50505050565b600080546001600160a01b031633146112725760405162461bcd60e51b8152600401610d4190612aae565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d99190612b62565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190612b62565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b99190612b62565b91506001600160a01b03821661151057806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142b9190612b62565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190612b62565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156114e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150d9190612b62565b91505b602480546001600160a01b03199081166001600160a01b03858116918217845560238054909316948116949094179091556000908152600b60209081526040808320805460ff199081166001908117909255945490951683526010909152902080549091169091179055919050565b6000546001600160a01b031633146115a95760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610d4190612aae565b60078054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146116465760405162461bcd60e51b8152600401610d4190612aae565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b606060048054610d8490612ae3565b6000610e143384610f7285604051806060016040528060258152602001612cd6602591393360009081526009602090815260408083206001600160a01b038d1684529091529020549190612053565b6000546001600160a01b0316331461171e5760405162461bcd60e51b8152600401610d4190612aae565b60248054911515600160b01b0260ff60b01b19909216919091179055565b6000610f77338484611bdb565b6000546001600160a01b031633146117735760405162461bcd60e51b8152600401610d4190612aae565b60188390556019829055601a81905561179081610e658585611a58565b601d55505050565b6000546001600160a01b031633146117c25760405162461bcd60e51b8152600401610d4190612aae565b60248054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061180f90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118445760405162461bcd60e51b8152600401610d4190612aae565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118905760405162461bcd60e51b8152600401610d4190612aae565b602055565b6000546001600160a01b031633146118bf5760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119145760405162461bcd60e51b8152600401610d4190612aae565b602155565b6000546001600160a01b031633146119435760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b0381166119a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d41565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a2d5760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080611a658385612b7f565b905083811015610f7b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d41565b6001600160a01b038316611b195760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d41565b6001600160a01b038216611b7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d41565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611c415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d41565b6001600160a01b038316611ca35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d41565b600754600160a01b900460ff16611d37576000546001600160a01b03858116911614611d375760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610d41565b602454600160a01b900460ff1615611d5b57611d548484846120cf565b9050610f7b565b6007546001600160a01b038581169116148015611d8557506024546001600160a01b038481169116145b15611d8f5743600c555b6024546001600160a01b0390811690851603611ddf57600f54600c54611db59190612b7f565b4311611ddf576001600160a01b0383166000908152600e60205260409020805460ff191660011790555b6000546001600160a01b03858116911614801590611e0b57506000546001600160a01b03848116911614155b15611e1a57611e1a84836121b5565b3060009081526008602052604090205460225481108015908190611e485750602454600160a01b900460ff16155b8015611e6d57506001600160a01b03861660009081526010602052604090205460ff16155b8015611e825750602454600160a81b900460ff165b15611ea857602454600160b01b900460ff1615611e9f5760225491505b611ea882612281565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260089091529190912054611efa918690612053565b6001600160a01b038716600090815260086020908152604080832093909355600a90529081205460ff1680611f4757506001600160a01b0386166000908152600a602052604090205460ff165b611f5b57611f568787876123bc565b611f5d565b845b602454909150600160b81b900460ff168015611f9257506001600160a01b0386166000908152600b602052604090205460ff16155b15611fc857602154611fbd82610e65896001600160a01b031660009081526008602052604090205490565b1115611fc857600080fd5b6001600160a01b038616600090815260086020526040902054611feb9082611a58565b6001600160a01b0380881660008181526008602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061203f9085815260200190565b60405180910390a360019350505050610f7b565b600081848411156120775760405162461bcd60e51b8152600401610d4191906128b9565b5060006120848486612b92565b95945050505050565b6000610f7b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612053565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054612120918490612053565b6001600160a01b03808616600090815260086020526040808220939093559085168152205461214f9083611a58565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121a39086815260200190565b60405180910390a35060019392505050565b6001600160a01b0382166000908152600e602052604090205460ff16156122145760405162461bcd60e51b815260206004820152601360248201527246726f6d2063616e6e6f7420626520626f742160681b6044820152606401610d41565b6020548111158061223d57506001600160a01b0382166000908152600d602052604090205460ff165b61227d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610d41565b5050565b6024805460ff60a01b1916600160a01b179055601d546018546000916122b7916002916122b191829087906124c2565b90612544565b905060006122c5838361208d565b90506122d081612586565b60185447906000906122f0906122e7906002612544565b601d549061208d565b9050600061231260026122b1846122b1601854886124c290919063ffffffff16565b9050600061232f836122b1601a54876124c290919063ffffffff16565b9050600061234782612341878661208d565b9061208d565b9050801561236a5760055461236a9061010090046001600160a01b031682612719565b811561238657600654612386906001600160a01b031683612719565b6000831180156123965750600087115b156123a5576123a58784612754565b50506024805460ff60a01b19169055505050505050565b6001600160a01b038316600090815260106020526040812054819060ff1615612400576123f960646122b1601b54866124c290919063ffffffff16565b905061243e565b6001600160a01b03841660009081526010602052604090205460ff161561243e5761243b60646122b1601c54866124c290919063ffffffff16565b90505b80156124b8573060009081526008602052604090205461245e9082611a58565b30600081815260086020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124af9085815260200190565b60405180910390a35b612084838261208d565b6000826000036124d457506000610e18565b60006124e08385612ba5565b9050826124ed8583612bbc565b14610f7b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d41565b6000610f7b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612829565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125bb576125bb612b1d565b6001600160a01b03928316602091820292909201810191909152602354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126389190612b62565b8160018151811061264b5761264b612b1d565b6001600160a01b0392831660209182029290920101526023546126719130911684611ab7565b60235460405163791ac94760e01b81526001600160a01b039091169063791ac947906126aa908590600090869030904290600401612c22565b600060405180830381600087803b1580156126c457600080fd5b505af11580156126d8573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161270d929190612c5e565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561274f573d6000803e3d6000fd5b505050565b60235461276c9030906001600160a01b031684611ab7565b6023546001600160a01b031663f305d7198230856000806127956000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156127fd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128229190612c7f565b5050505050565b6000818361284a5760405162461bcd60e51b8152600401610d4191906128b9565b5060006120848486612bbc565b6001600160a01b038116811461286c57600080fd5b50565b8035801515811461287f57600080fd5b919050565b6000806040838503121561289757600080fd5b82356128a281612857565b91506128b06020840161286f565b90509250929050565b600060208083528351808285015260005b818110156128e6578581018301518582016040015282016128ca565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561291a57600080fd5b823561292581612857565b946020939093013593505050565b60008060006060848603121561294857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561297457600080fd5b833561297f81612857565b9250602084013561298f81612857565b929592945050506040919091013590565b6000602082840312156129b257600080fd5b610f7b8261286f565b6000602082840312156129cd57600080fd5b8135610f7b81612857565b6000602082840312156129ea57600080fd5b5035919050565b600080600060408486031215612a0657600080fd5b833567ffffffffffffffff80821115612a1e57600080fd5b818601915086601f830112612a3257600080fd5b813581811115612a4157600080fd5b8760208260051b8501011115612a5657600080fd5b602092830195509350612a6c918601905061286f565b90509250925092565b60008060408385031215612a8857600080fd5b8235612a9381612857565b91506020830135612aa381612857565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612af757607f821691505b602082108103612b1757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612b5b57612b5b612b33565b5060010190565b600060208284031215612b7457600080fd5b8151610f7b81612857565b80820180821115610e1857610e18612b33565b81810381811115610e1857610e18612b33565b8082028115828204841417610e1857610e18612b33565b600082612bd957634e487b7160e01b600052601260045260246000fd5b500490565b600081518084526020808501945080840160005b83811015612c175781516001600160a01b031687529582019590820190600101612bf2565b509495945050505050565b85815284602082015260a060408201526000612c4160a0830186612bde565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612c776040830184612bde565b949350505050565b600080600060608486031215612c9457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220836148274a02e2737e077fcf9cc6878bfff8a22dcb2943e9c0301ea3349d75d564736f6c63430008110033

Deployed Bytecode

0x60806040526004361061041f5760003560e01c8063844d591c1161021e578063c816841b11610123578063ec28438a116100ab578063f2fde38b1161007a578063f2fde38b14610c80578063f660e00314610ca0578063f84ba65d14610cb5578063f872858a14610cd5578063ffb54a9914610cf657600080fd5b8063ec28438a14610c0a578063ef422a1814610c2a578063f0cd1dac14610c4a578063f1d5f51714610c6057600080fd5b8063d158272d116100f2578063d158272d14610b48578063da00097d14610b6d578063dc44b6a014610b8e578063dd62ed3e14610ba4578063df3a662814610bea57600080fd5b8063c816841b14610acc578063c860795214610aec578063c867d60b14610b02578063cab0347114610b3257600080fd5b8063a5d69d1f116101a6578063bd71850711610175578063bd71850714610a4a578063c2d4640e14610a60578063c469b6dd14610a80578063c49b9a8014610a96578063c5d2418914610ab657600080fd5b8063a5d69d1f146109c4578063a83f53a7146109e4578063a8e15150146109fa578063a9059cbb14610a2a57600080fd5b8063914eb66a116101ed578063914eb66a1461094f57806395d89b4114610964578063a073d37f14610979578063a08e671f1461098e578063a457c2d7146109a457600080fd5b8063844d591c146108db57806388790a68146108fb5780638da5cb5b146109115780638f70ccf71461092f57600080fd5b80633292c1b1116103245780635342acb4116102ac57806361a23c691161027b57806361a23c691461084d57806370a08231146108635780637d1db4a514610899578063807c2d9c146108af57806382eefb43146108c557600080fd5b80635342acb4146107d4578063557ed1ba1461080457806357a5802f146108175780635881f3ef1461082d57600080fd5b80633bbac579116102f35780633bbac579146107135780633ecad271146107435780634a74bb02146107735780634cb80fd51461079457806350b20cac146107b457600080fd5b80633292c1b11461069d57806339509351146106bd57806339518b5e146106dd5780633b97084a146106f357600080fd5b80632198cf6c116103a75780632af38605116103765780632af38605146106135780632b112e49146106335780632c4b2334146106485780632e97766d14610668578063313ce5671461067b57600080fd5b80632198cf6c1461057f57806323b872dd1461059f5780632563ae83146105bf57806327c8f835146105df57600080fd5b80630d5e5c87116103ee5780630d5e5c87146104e05780631245e347146105005780631694505e1461052057806318160ddd146105405780631870517a1461055f57600080fd5b806303c0f5d41461042b57806306fdde031461044d57806309553b2814610478578063095ea7b3146104b057600080fd5b3661042657005b600080fd5b34801561043757600080fd5b5061044b610446366004612884565b610d17565b005b34801561045957600080fd5b50610462610d75565b60405161046f91906128b9565b60405180910390f35b34801561048457600080fd5b50600754610498906001600160a01b031681565b6040516001600160a01b03909116815260200161046f565b3480156104bc57600080fd5b506104d06104cb366004612907565b610e07565b604051901515815260200161046f565b3480156104ec57600080fd5b5061044b6104fb366004612933565b610e1e565b34801561050c57600080fd5b50600654610498906001600160a01b031681565b34801561052c57600080fd5b50602354610498906001600160a01b031681565b34801561054c57600080fd5b50601e545b60405190815260200161046f565b34801561056b57600080fd5b5061044b61057a366004612933565b610e73565b34801561058b57600080fd5b5061044b61059a366004612884565b610ec2565b3480156105ab57600080fd5b506104d06105ba36600461295f565b610f17565b3480156105cb57600080fd5b5061044b6105da3660046129a0565b610f82565b3480156105eb57600080fd5b506104987f000000000000000000000000000000000000000000000000000000000000dead81565b34801561061f57600080fd5b5061044b61062e366004612884565b610fca565b34801561063f57600080fd5b5061055161101f565b34801561065457600080fd5b5061044b6106633660046129bb565b611069565b34801561067457600080fd5b5043610551565b34801561068757600080fd5b5060055460405160ff909116815260200161046f565b3480156106a957600080fd5b5061044b6106b83660046129d8565b6110b5565b3480156106c957600080fd5b506104d06106d8366004612907565b6110e4565b3480156106e957600080fd5b50610551600c5481565b3480156106ff57600080fd5b5061044b61070e3660046129d8565b61111a565b34801561071f57600080fd5b506104d061072e3660046129bb565b600e6020526000908152604090205460ff1681565b34801561074f57600080fd5b506104d061075e3660046129bb565b60106020526000908152604090205460ff1681565b34801561077f57600080fd5b506024546104d090600160a81b900460ff1681565b3480156107a057600080fd5b5061044b6107af3660046129bb565b611149565b3480156107c057600080fd5b5061044b6107cf3660046129f1565b61119b565b3480156107e057600080fd5b506104d06107ef3660046129bb565b600a6020526000908152604090205460ff1681565b34801561081057600080fd5b5042610551565b34801561082357600080fd5b5061055160185481565b34801561083957600080fd5b506104986108483660046129bb565b611247565b34801561085957600080fd5b5061055160195481565b34801561086f57600080fd5b5061055161087e3660046129bb565b6001600160a01b031660009081526008602052604090205490565b3480156108a557600080fd5b5061055160205481565b3480156108bb57600080fd5b5061055160215481565b3480156108d157600080fd5b50610551601c5481565b3480156108e757600080fd5b5061044b6108f6366004612884565b61157f565b34801561090757600080fd5b5061055160155481565b34801561091d57600080fd5b506000546001600160a01b0316610498565b34801561093b57600080fd5b5061044b61094a3660046129a0565b6115d4565b34801561095b57600080fd5b5061044b61161c565b34801561097057600080fd5b50610462611696565b34801561098557600080fd5b50602254610551565b34801561099a57600080fd5b50610551601d5481565b3480156109b057600080fd5b506104d06109bf366004612907565b6116a5565b3480156109d057600080fd5b5061044b6109df3660046129a0565b6116f4565b3480156109f057600080fd5b50610551601a5481565b348015610a0657600080fd5b506104d0610a153660046129bb565b60116020526000908152604090205460ff1681565b348015610a3657600080fd5b506104d0610a45366004612907565b61173c565b348015610a5657600080fd5b50610551600f5481565b348015610a6c57600080fd5b5061044b610a7b366004612933565b611749565b348015610a8c57600080fd5b5061055160145481565b348015610aa257600080fd5b5061044b610ab13660046129a0565b611798565b348015610ac257600080fd5b5061055160135481565b348015610ad857600080fd5b50602454610498906001600160a01b031681565b348015610af857600080fd5b5061055160165481565b348015610b0e57600080fd5b506104d0610b1d3660046129bb565b600b6020526000908152604090205460ff1681565b348015610b3e57600080fd5b5061055160175481565b348015610b5457600080fd5b506005546104989061010090046001600160a01b031681565b348015610b7957600080fd5b506024546104d090600160b01b900460ff1681565b348015610b9a57600080fd5b5061055160125481565b348015610bb057600080fd5b50610551610bbf366004612a75565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610bf657600080fd5b5061044b610c053660046129bb565b61181a565b348015610c1657600080fd5b5061044b610c253660046129d8565b611866565b348015610c3657600080fd5b5061044b610c45366004612884565b611895565b348015610c5657600080fd5b50610551601b5481565b348015610c6c57600080fd5b5061044b610c7b3660046129d8565b6118ea565b348015610c8c57600080fd5b5061044b610c9b3660046129bb565b611919565b348015610cac57600080fd5b50600c54610551565b348015610cc157600080fd5b5061044b610cd0366004612884565b611a03565b348015610ce157600080fd5b506024546104d090600160b81b900460ff1681565b348015610d0257600080fd5b506007546104d090600160a01b900460ff1681565b6000546001600160a01b03163314610d4a5760405162461bcd60e51b8152600401610d4190612aae565b60405180910390fd5b6001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b606060038054610d8490612ae3565b80601f0160208091040260200160405190810160405280929190818152602001828054610db090612ae3565b8015610dfd5780601f10610dd257610100808354040283529160200191610dfd565b820191906000526020600020905b815481529060010190602001808311610de057829003601f168201915b5050505050905090565b6000610e14338484611ab7565b5060015b92915050565b6000546001600160a01b03163314610e485760405162461bcd60e51b8152600401610d4190612aae565b601583905560168290556017819055610e6b81610e658585611a58565b90611a58565b601c55505050565b6000546001600160a01b03163314610e9d5760405162461bcd60e51b8152600401610d4190612aae565b601283905560138290556014819055610eba81610e658585611a58565b601b55505050565b6000546001600160a01b03163314610eec5760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000610f24848484611bdb565b50610f778433610f7285604051806060016040528060288152602001612cae602891396001600160a01b038a1660009081526009602090815260408083203384529091529020549190612053565b611ab7565b5060015b9392505050565b6000546001600160a01b03163314610fac5760405162461bcd60e51b8152600401610d4190612aae565b60248054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b03163314610ff45760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b7f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316600090815260086020526040812054601f546110649161208d565b905090565b6000546001600160a01b031633146110935760405162461bcd60e51b8152600401610d4190612aae565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146110df5760405162461bcd60e51b8152600401610d4190612aae565b600f55565b3360008181526009602090815260408083206001600160a01b03871684529091528120549091610e14918590610f729086611a58565b6000546001600160a01b031633146111445760405162461bcd60e51b8152600401610d4190612aae565b602255565b6000546001600160a01b031633146111735760405162461bcd60e51b8152600401610d4190612aae565b600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6000546001600160a01b031633146111c55760405162461bcd60e51b8152600401610d4190612aae565b60c982106111d257600080fd5b60005b828110156112415781601160008686858181106111f4576111f4612b1d565b905060200201602081019061120991906129bb565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561123a81612b49565b90506111d5565b50505050565b600080546001600160a01b031633146112725760405162461bcd60e51b8152600401610d4190612aae565b6000829050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d99190612b62565b6001600160a01b031663e6a4390530836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611326573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061134a9190612b62565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b99190612b62565b91506001600160a01b03821661151057806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611407573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142b9190612b62565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190612b62565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156114e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150d9190612b62565b91505b602480546001600160a01b03199081166001600160a01b03858116918217845560238054909316948116949094179091556000908152600b60209081526040808320805460ff199081166001908117909255945490951683526010909152902080549091169091179055919050565b6000546001600160a01b031633146115a95760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610d4190612aae565b60078054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031633146116465760405162461bcd60e51b8152600401610d4190612aae565b6000805460405161dead926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191661dead179055565b606060048054610d8490612ae3565b6000610e143384610f7285604051806060016040528060258152602001612cd6602591393360009081526009602090815260408083206001600160a01b038d1684529091529020549190612053565b6000546001600160a01b0316331461171e5760405162461bcd60e51b8152600401610d4190612aae565b60248054911515600160b01b0260ff60b01b19909216919091179055565b6000610f77338484611bdb565b6000546001600160a01b031633146117735760405162461bcd60e51b8152600401610d4190612aae565b60188390556019829055601a81905561179081610e658585611a58565b601d55505050565b6000546001600160a01b031633146117c25760405162461bcd60e51b8152600401610d4190612aae565b60248054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061180f90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118445760405162461bcd60e51b8152600401610d4190612aae565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146118905760405162461bcd60e51b8152600401610d4190612aae565b602055565b6000546001600160a01b031633146118bf5760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146119145760405162461bcd60e51b8152600401610d4190612aae565b602155565b6000546001600160a01b031633146119435760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b0381166119a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d41565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611a2d5760405162461bcd60e51b8152600401610d4190612aae565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080611a658385612b7f565b905083811015610f7b5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d41565b6001600160a01b038316611b195760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d41565b6001600160a01b038216611b7a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d41565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416611c415760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d41565b6001600160a01b038316611ca35760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d41565b600754600160a01b900460ff16611d37576000546001600160a01b03858116911614611d375760405162461bcd60e51b815260206004820152603f60248201527f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060448201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c6564006064820152608401610d41565b602454600160a01b900460ff1615611d5b57611d548484846120cf565b9050610f7b565b6007546001600160a01b038581169116148015611d8557506024546001600160a01b038481169116145b15611d8f5743600c555b6024546001600160a01b0390811690851603611ddf57600f54600c54611db59190612b7f565b4311611ddf576001600160a01b0383166000908152600e60205260409020805460ff191660011790555b6000546001600160a01b03858116911614801590611e0b57506000546001600160a01b03848116911614155b15611e1a57611e1a84836121b5565b3060009081526008602052604090205460225481108015908190611e485750602454600160a01b900460ff16155b8015611e6d57506001600160a01b03861660009081526010602052604090205460ff16155b8015611e825750602454600160a81b900460ff165b15611ea857602454600160b01b900460ff1615611e9f5760225491505b611ea882612281565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038916600090815260089091529190912054611efa918690612053565b6001600160a01b038716600090815260086020908152604080832093909355600a90529081205460ff1680611f4757506001600160a01b0386166000908152600a602052604090205460ff165b611f5b57611f568787876123bc565b611f5d565b845b602454909150600160b81b900460ff168015611f9257506001600160a01b0386166000908152600b602052604090205460ff16155b15611fc857602154611fbd82610e65896001600160a01b031660009081526008602052604090205490565b1115611fc857600080fd5b6001600160a01b038616600090815260086020526040902054611feb9082611a58565b6001600160a01b0380881660008181526008602052604090819020939093559151908916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061203f9085815260200190565b60405180910390a360019350505050610f7b565b600081848411156120775760405162461bcd60e51b8152600401610d4191906128b9565b5060006120848486612b92565b95945050505050565b6000610f7b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612053565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054612120918490612053565b6001600160a01b03808616600090815260086020526040808220939093559085168152205461214f9083611a58565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121a39086815260200190565b60405180910390a35060019392505050565b6001600160a01b0382166000908152600e602052604090205460ff16156122145760405162461bcd60e51b815260206004820152601360248201527246726f6d2063616e6e6f7420626520626f742160681b6044820152606401610d41565b6020548111158061223d57506001600160a01b0382166000908152600d602052604090205460ff165b61227d5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610d41565b5050565b6024805460ff60a01b1916600160a01b179055601d546018546000916122b7916002916122b191829087906124c2565b90612544565b905060006122c5838361208d565b90506122d081612586565b60185447906000906122f0906122e7906002612544565b601d549061208d565b9050600061231260026122b1846122b1601854886124c290919063ffffffff16565b9050600061232f836122b1601a54876124c290919063ffffffff16565b9050600061234782612341878661208d565b9061208d565b9050801561236a5760055461236a9061010090046001600160a01b031682612719565b811561238657600654612386906001600160a01b031683612719565b6000831180156123965750600087115b156123a5576123a58784612754565b50506024805460ff60a01b19169055505050505050565b6001600160a01b038316600090815260106020526040812054819060ff1615612400576123f960646122b1601b54866124c290919063ffffffff16565b905061243e565b6001600160a01b03841660009081526010602052604090205460ff161561243e5761243b60646122b1601c54866124c290919063ffffffff16565b90505b80156124b8573060009081526008602052604090205461245e9082611a58565b30600081815260086020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906124af9085815260200190565b60405180910390a35b612084838261208d565b6000826000036124d457506000610e18565b60006124e08385612ba5565b9050826124ed8583612bbc565b14610f7b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d41565b6000610f7b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612829565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106125bb576125bb612b1d565b6001600160a01b03928316602091820292909201810191909152602354604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612614573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126389190612b62565b8160018151811061264b5761264b612b1d565b6001600160a01b0392831660209182029290920101526023546126719130911684611ab7565b60235460405163791ac94760e01b81526001600160a01b039091169063791ac947906126aa908590600090869030904290600401612c22565b600060405180830381600087803b1580156126c457600080fd5b505af11580156126d8573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161270d929190612c5e565b60405180910390a15050565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561274f573d6000803e3d6000fd5b505050565b60235461276c9030906001600160a01b031684611ab7565b6023546001600160a01b031663f305d7198230856000806127956000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156127fd573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128229190612c7f565b5050505050565b6000818361284a5760405162461bcd60e51b8152600401610d4191906128b9565b5060006120848486612bbc565b6001600160a01b038116811461286c57600080fd5b50565b8035801515811461287f57600080fd5b919050565b6000806040838503121561289757600080fd5b82356128a281612857565b91506128b06020840161286f565b90509250929050565b600060208083528351808285015260005b818110156128e6578581018301518582016040015282016128ca565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561291a57600080fd5b823561292581612857565b946020939093013593505050565b60008060006060848603121561294857600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561297457600080fd5b833561297f81612857565b9250602084013561298f81612857565b929592945050506040919091013590565b6000602082840312156129b257600080fd5b610f7b8261286f565b6000602082840312156129cd57600080fd5b8135610f7b81612857565b6000602082840312156129ea57600080fd5b5035919050565b600080600060408486031215612a0657600080fd5b833567ffffffffffffffff80821115612a1e57600080fd5b818601915086601f830112612a3257600080fd5b813581811115612a4157600080fd5b8760208260051b8501011115612a5657600080fd5b602092830195509350612a6c918601905061286f565b90509250925092565b60008060408385031215612a8857600080fd5b8235612a9381612857565b91506020830135612aa381612857565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612af757607f821691505b602082108103612b1757634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612b5b57612b5b612b33565b5060010190565b600060208284031215612b7457600080fd5b8151610f7b81612857565b80820180821115610e1857610e18612b33565b81810381811115610e1857610e18612b33565b8082028115828204841417610e1857610e18612b33565b600082612bd957634e487b7160e01b600052601260045260246000fd5b500490565b600081518084526020808501945080840160005b83811015612c175781516001600160a01b031687529582019590820190600101612bf2565b509495945050505050565b85815284602082015260a060408201526000612c4160a0830186612bde565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612c776040830184612bde565b949350505050565b600080600060608486031215612c9457600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220836148274a02e2737e077fcf9cc6878bfff8a22dcb2943e9c0301ea3349d75d564736f6c63430008110033

Deployed Bytecode Sourcemap

19999:16840:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29339:109;;;;;;;;;;-1:-1:-1;29339:109:0;;;;;:::i;:::-;;:::i;:::-;;24051:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20541:25;;;;;;;;;;-1:-1:-1;20541:25:0;;;;-1:-1:-1;;;;;20541:25:0;;;;;;-1:-1:-1;;;;;1352:32:1;;;1334:51;;1322:2;1307:18;20541:25:0;1188:203:1;25342:161:0;;;;;;;;;;-1:-1:-1;25342:161:0;;;;;:::i;:::-;;:::i;:::-;;;1881:14:1;;1874:22;1856:41;;1844:2;1829:18;25342:161:0;1716:187:1;26616:340:0;;;;;;;;;;-1:-1:-1;26616:340:0;;;;;:::i;:::-;;:::i;20348:94::-;;;;;;;;;;-1:-1:-1;20348:94:0;;;;-1:-1:-1;;;;;20348:94:0;;;21981:41;;;;;;;;;;-1:-1:-1;21981:41:0;;;;-1:-1:-1;;;;;21981:41:0;;;24328:97;;;;;;;;;;-1:-1:-1;24408:9:0;;24328:97;;;2834:25:1;;;2822:2;2807:18;24328:97:0;2688:177:1;26275:333:0;;;;;;;;;;-1:-1:-1;26275:333:0;;;;;:::i;:::-;;:::i;27578:135::-;;;;;;;;;;-1:-1:-1;27578:135:0;;;;;:::i;:::-;;:::i;30879:313::-;;;;;;;;;;-1:-1:-1;30879:313:0;;;;;:::i;:::-;;:::i;27457:113::-;;;;;;;;;;-1:-1:-1;27457:113:0;;;;;:::i;:::-;;:::i;20453:81::-;;;;;;;;;;;;;;;28711:135;;;;;;;;;;-1:-1:-1;28711:135:0;;;;;:::i;:::-;;:::i;28565:128::-;;;;;;;;;;;;;:::i;27965:129::-;;;;;;;;;;-1:-1:-1;27965:129:0;;;;;:::i;:::-;;:::i;29562:87::-;;;;;;;;;;-1:-1:-1;29629:12:0;29562:87;;24237:83;;;;;;;;;;-1:-1:-1;24303:9:0;;24237:83;;24303:9;;;;3910:36:1;;3898:2;3883:18;24237:83:0;3768:184:1;29240:91:0;;;;;;;;;;-1:-1:-1;29240:91:0;;;;;:::i;:::-;;:::i;24711:218::-;;;;;;;;;;-1:-1:-1;24711:218:0;;;;;:::i;:::-;;:::i;20850:31::-;;;;;;;;;;;;;;;;27831:124;;;;;;;;;;-1:-1:-1;27831:124:0;;;;;:::i;:::-;;:::i;20942:38::-;;;;;;;;;;-1:-1:-1;20942:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21023:45;;;;;;;;;;-1:-1:-1;21023:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22096:40;;;;;;;;;;-1:-1:-1;22096:40:0;;;;-1:-1:-1;;;22096:40:0;;;;;;28102:139;;;;;;;;;;-1:-1:-1;28102:139:0;;;;;:::i;:::-;;:::i;28854:260::-;;;;;;;;;;-1:-1:-1;28854:260:0;;;;;:::i;:::-;;:::i;20732:50::-;;;;;;;;;;-1:-1:-1;20732:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;6509:90;;;;;;;;;;-1:-1:-1;6576:15:0;6509:90;;21387:34;;;;;;;;;;;;;;;;29795:807;;;;;;;;;;-1:-1:-1;29795:807:0;;;;;:::i;:::-;;:::i;21428:34::-;;;;;;;;;;;;;;;;24433:119;;;;;;;;;;-1:-1:-1;24433:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;24526:18:0;24499:7;24526:18;;;:9;:18;;;;;;;24433:119;21778:57;;;;;;;;;;;;;;;;21843;;;;;;;;;;;;;;;;21552:38;;;;;;;;;;;;;;;;25856:129;;;;;;;;;;-1:-1:-1;25856:129:0;;;;;:::i;:::-;;:::i;21261:36::-;;;;;;;;;;;;;;;;5793:79;;;;;;;;;;-1:-1:-1;5831:7:0;5858:6;-1:-1:-1;;;;;5858:6:0;5793:79;;35871:101;;;;;;;;;;-1:-1:-1;35871:101:0;;;;;:::i;:::-;;:::i;6018:227::-;;;;;;;;;;;;;:::i;24142:87::-;;;;;;;;;;;;;:::i;25214:120::-;;;;;;;;;;-1:-1:-1;25303:23:0;;25214:120;;21597:44;;;;;;;;;;;;;;;;24937:269;;;;;;;;;;-1:-1:-1;24937:269:0;;;;;:::i;:::-;;:::i;28428:125::-;;;;;;;;;;-1:-1:-1;28428:125:0;;;;;:::i;:::-;;:::i;21469:30::-;;;;;;;;;;;;;;;;21075:50;;;;;;;;;;-1:-1:-1;21075:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30704:167;;;;;;;;;;-1:-1:-1;30704:167:0;;;;;:::i;:::-;;:::i;20989:25::-;;;;;;;;;;;;;;;;26968:358;;;;;;;;;;-1:-1:-1;26968:358:0;;;;;:::i;:::-;;:::i;21218:30::-;;;;;;;;;;;;;;;;28249:171;;;;;;;;;;-1:-1:-1;28249:171:0;;;;;:::i;:::-;;:::i;21176:35::-;;;;;;;;;;;;;;;;22029:26;;;;;;;;;;-1:-1:-1;22029:26:0;;;;-1:-1:-1;;;;;22029:26:0;;;21304:36;;;;;;;;;;;;;;;;20789:52;;;;;;;;;;-1:-1:-1;20789:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21347:31;;;;;;;;;;;;;;;;20242:99;;;;;;;;;;-1:-1:-1;20242:99:0;;;;;;;-1:-1:-1;;;;;20242:99:0;;;22143:45;;;;;;;;;;-1:-1:-1;22143:45:0;;;;-1:-1:-1;;;22143:45:0;;;;;;21134:35;;;;;;;;;;;;;;;;24560:143;;;;;;;;;;-1:-1:-1;24560:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;24668:18:0;;;24641:7;24668:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24560:143;29124:108;;;;;;;;;;-1:-1:-1;29124:108:0;;;;;:::i;:::-;;:::i;27338:111::-;;;;;;;;;;-1:-1:-1;27338:111:0;;;;;:::i;:::-;;:::i;26132:135::-;;;;;;;;;;-1:-1:-1;26132:135:0;;;;;:::i;:::-;;:::i;21508:37::-;;;;;;;;;;;;;;;;27721:102;;;;;;;;;;-1:-1:-1;27721:102:0;;;;;:::i;:::-;;:::i;6253:244::-;;;;;;;;;;-1:-1:-1;6253:244:0;;;;;:::i;:::-;;:::i;29458:96::-;;;;;;;;;;-1:-1:-1;29534:12:0;;29458:96;;25993:127;;;;;;;;;;-1:-1:-1;25993:127:0;;;;;:::i;:::-;;:::i;22195:36::-;;;;;;;;;;-1:-1:-1;22195:36:0;;;;-1:-1:-1;;;22195:36:0;;;;;;20573:23;;;;;;;;;;-1:-1:-1;20573:23:0;;;;-1:-1:-1;;;20573:23:0;;;;;;29339:109;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;29418:13:0;;;::::1;;::::0;;;:5:::1;:13;::::0;;;;:22;;-1:-1:-1;;29418:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29339:109::o;24051:83::-;24088:13;24121:5;24114:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24051:83;:::o;25342:161::-;25417:4;25434:39;199:10;25457:7;25466:6;25434:8;:39::i;:::-;-1:-1:-1;25491:4:0;25342:161;;;;;:::o;26616:340::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;26739:17:::1;:35:::0;;;26785:17:::1;:35:::0;;;26831:12:::1;:25:::0;;;26890:58:::1;26846:10:::0;26890:40:::1;26759:15:::0;26805;26890:21:::1;:40::i;:::-;:44:::0;::::1;:58::i;:::-;26869:18;:79:::0;-1:-1:-1;;;26616:340:0:o;26275:333::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;26398:16:::1;:34:::0;;;26443:16:::1;:34:::0;;;26488:11:::1;:24:::0;;;26545:55:::1;26502:10:::0;26545:38:::1;26417:15:::0;26462;26545:20:::1;:38::i;:55::-;26525:17;:75:::0;-1:-1:-1;;;26275:333:0:o;27578:135::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27669:27:0;;;::::1;;::::0;;;:19:::1;:27;::::0;;;;:36;;-1:-1:-1;;27669:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27578:135::o;30879:313::-;30977:4;30994:36;31004:6;31012:9;31023:6;30994:9;:36::i;:::-;-1:-1:-1;31041:121:0;31050:6;199:10;31072:89;31110:6;31072:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31072:19:0;;;;;;:11;:19;;;;;;;;199:10;31072:33;;;;;;;;;;:37;:89::i;:::-;31041:8;:121::i;:::-;-1:-1:-1;31180:4:0;30879:313;;;;;;:::o;27457:113::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;27535:16:::1;:27:::0;;;::::1;;-1:-1:-1::0;;;27535:27:0::1;-1:-1:-1::0;;;;27535:27:0;;::::1;::::0;;;::::1;::::0;;27457:113::o;28711:135::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28801:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;28801:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28711:135::o;28565:128::-;28672:11;-1:-1:-1;;;;;24526:18:0;28618:7;24526:18;;;:9;:18;;;;;;28645:12;;:40;;:16;:40::i;:::-;28638:47;;28565:128;:::o;27965:129::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;28047:17:::1;:39:::0;;-1:-1:-1;;;;;;28047:39:0::1;-1:-1:-1::0;;;;;28047:39:0;;;::::1;::::0;;;::::1;::::0;;27965:129::o;29240:91::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;29307:6:::1;:16:::0;29240:91::o;24711:218::-;199:10;24799:4;24848:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;24848:34:0;;;;;;;;;;24799:4;;24816:83;;24839:7;;24848:50;;24887:10;24848:38;:50::i;27831:124::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;27913:23:::1;:34:::0;27831:124::o;28102:139::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;28189:22:::1;:44:::0;;-1:-1:-1;;;;;28189:44:0;;::::1;;;-1:-1:-1::0;;;;;;28189:44:0;;::::1;::::0;;;::::1;::::0;;28102:139::o;28854:260::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;28982:3:::1;28963:22:::0;::::1;28955:31;;;::::0;::::1;;29002:9;28997:110;29013:20:::0;;::::1;28997:110;;;29089:6;29055:17;:31;29073:9;;29083:1;29073:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29055:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29055:31:0;:40;;-1:-1:-1;;29055:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29035:3:::1;::::0;::::1;:::i;:::-;;;28997:110;;;;28854:260:::0;;;:::o;29795:807::-;29875:22;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;29912:35:::1;29969:16;29912:74;;30035:16;-1:-1:-1::0;;;;;30035:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30017:53:0::1;;30079:4;30086:16;-1:-1:-1::0;;;;;30086:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30017:93;::::0;-1:-1:-1;;;;;;30017:93:0::1;::::0;;;;;;-1:-1:-1;;;;;6865:15:1;;;30017:93:0::1;::::0;::::1;6847:34:1::0;6917:15;;6897:18;;;6890:43;6782:18;;30017:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30000:110:::0;-1:-1:-1;;;;;;30126:28:0;::::1;30123:225;;30240:16;-1:-1:-1::0;;;;;30240:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30222:74:0::1;;30305:4;30312:16;-1:-1:-1::0;;;;;30312:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30222:114;::::0;-1:-1:-1;;;;;;30222:114:0::1;::::0;;;;;;-1:-1:-1;;;;;6865:15:1;;;30222:114:0::1;::::0;::::1;6847:34:1::0;6917:15;;6897:18;;;6890:43;6782:18;;30222:114:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30205:131;;30123:225;30360:11;:28:::0;;-1:-1:-1;;;;;;30360:28:0;;::::1;-1:-1:-1::0;;;;;30360:28:0;;::::1;::::0;;::::1;::::0;;30422:15:::1;:34:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;30494:41:0;;;:19:::1;:41;::::0;;;;;;;:48;;-1:-1:-1;;30494:48:0;;::::1;-1:-1:-1::0;30494:48:0;;::::1;::::0;;;30574:11;;;;::::1;30553:34:::0;;:12:::1;:34:::0;;;;;:41;;;;::::1;::::0;;::::1;::::0;;30360:28;30374:14;-1:-1:-1;29795:807:0:o;25856:129::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25945:21:0;;;::::1;;::::0;;;:12:::1;:21;::::0;;;;:32;;-1:-1:-1;;25945:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25856:129::o;35871:101::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;35938:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;35938:26:0::1;-1:-1:-1::0;;;;35938:26:0;;::::1;::::0;;;::::1;::::0;;35871:101::o;6018:227::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;6106:6:::1;::::0;;6085:81:::1;::::0;6122:42:::1;::::0;-1:-1:-1;;;;;6106:6:0;;::::1;::::0;6085:81:::1;::::0;::::1;6177:6;:60:::0;;-1:-1:-1;;;;;;6177:60:0::1;6194:42;6177:60;::::0;;6018:227::o;24142:87::-;24181:13;24214:7;24207:14;;;;;:::i;24937:269::-;25030:4;25047:129;199:10;25070:7;25079:96;25118:15;25079:96;;;;;;;;;;;;;;;;;199:10;25079:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25079:34:0;;;;;;;;;;;;:38;:96::i;28428:125::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;28509:25:::1;:36:::0;;;::::1;;-1:-1:-1::0;;;28509:36:0::1;-1:-1:-1::0;;;;28509:36:0;;::::1;::::0;;;::::1;::::0;;28428:125::o;30704:167::-;30782:4;30799:42;199:10;30823:9;30834:6;30799:9;:42::i;26968:358::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;27109:15:::1;:35:::0;;;27155:15:::1;:35:::0;;;27201:10:::1;:25:::0;;;27266:52:::1;27214:12:::0;27266:36:::1;27127:17:::0;27173;27266:19:::1;:36::i;:52::-;27239:24;:79:::0;-1:-1:-1;;;26968:358:0:o;28249:171::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;28326:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;28326:32:0::1;-1:-1:-1::0;;;;28326:32:0;;::::1;;::::0;;28374:38:::1;::::0;::::1;::::0;::::1;::::0;28350:8;1881:14:1;1874:22;1856:41;;1844:2;1829:18;;1716:187;28374:38:0::1;;;;;;;;28249:171:::0;:::o;29124:108::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;29200:10:::1;:24:::0;;-1:-1:-1;;;;;;29200:24:0::1;-1:-1:-1::0;;;;;29200:24:0;;;::::1;::::0;;;::::1;::::0;;29124:108::o;27338:111::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;27415:12:::1;:26:::0;27338:111::o;26132:135::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26222:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;26222:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26132:135::o;27721:102::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;27793:10:::1;:22:::0;27721:102::o;6253:244::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6342:22:0;::::1;6334:73;;;::::0;-1:-1:-1;;;6334:73:0;;7146:2:1;6334:73:0::1;::::0;::::1;7128:21:1::0;7185:2;7165:18;;;7158:30;7224:34;7204:18;;;7197:62;-1:-1:-1;;;7275:18:1;;;7268:36;7321:19;;6334:73:0::1;6944:402:1::0;6334:73:0::1;6444:6;::::0;;6423:38:::1;::::0;-1:-1:-1;;;;;6423:38:0;;::::1;::::0;6444:6;::::1;::::0;6423:38:::1;::::0;::::1;6472:6;:17:::0;;-1:-1:-1;;;;;;6472:17:0::1;-1:-1:-1::0;;;;;6472:17:0;;;::::1;::::0;;;::::1;::::0;;6253:244::o;25993:127::-;5927:6;;-1:-1:-1;;;;;5927:6:0;199:10;5927:22;5919:67;;;;-1:-1:-1;;;5919:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26080:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;26080:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25993:127::o;1171:181::-;1229:7;;1261:5;1265:1;1261;:5;:::i;:::-;1249:17;;1290:1;1285;:6;;1277:46;;;;-1:-1:-1;;;1277:46:0;;7683:2:1;1277:46:0;;;7665:21:1;7722:2;7702:18;;;7695:30;7761:29;7741:18;;;7734:57;7808:18;;1277:46:0;7481:351:1;25511:337:0;-1:-1:-1;;;;;25604:19:0;;25596:68;;;;-1:-1:-1;;;25596:68:0;;8039:2:1;25596:68:0;;;8021:21:1;8078:2;8058:18;;;8051:30;8117:34;8097:18;;;8090:62;-1:-1:-1;;;8168:18:1;;;8161:34;8212:19;;25596:68:0;7837:400:1;25596:68:0;-1:-1:-1;;;;;25683:21:0;;25675:68;;;;-1:-1:-1;;;25675:68:0;;8444:2:1;25675:68:0;;;8426:21:1;8483:2;8463:18;;;8456:30;8522:34;8502:18;;;8495:62;-1:-1:-1;;;8573:18:1;;;8566:32;8615:19;;25675:68:0;8242:398:1;25675:68:0;-1:-1:-1;;;;;25756:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25808:32;;2834:25:1;;;25808:32:0;;2807:18:1;25808:32:0;;;;;;;25511:337;;;:::o;31200:2063::-;31287:4;-1:-1:-1;;;;;31314:20:0;;31306:70;;;;-1:-1:-1;;;31306:70:0;;8847:2:1;31306:70:0;;;8829:21:1;8886:2;8866:18;;;8859:30;8925:34;8905:18;;;8898:62;-1:-1:-1;;;8976:18:1;;;8969:35;9021:19;;31306:70:0;8645:401:1;31306:70:0;-1:-1:-1;;;;;31395:23:0;;31387:71;;;;-1:-1:-1;;;31387:71:0;;9253:2:1;31387:71:0;;;9235:21:1;9292:2;9272:18;;;9265:30;9331:34;9311:18;;;9304:62;-1:-1:-1;;;9382:18:1;;;9375:33;9425:19;;31387:71:0;9051:399:1;31387:71:0;31503:11;;-1:-1:-1;;;31503:11:0;;;;31498:138;;5831:7;5858:6;-1:-1:-1;;;;;31539:17:0;;;5858:6;;31539:17;31531:93;;;;-1:-1:-1;;;31531:93:0;;9657:2:1;31531:93:0;;;9639:21:1;9696:2;9676:18;;;9669:30;9735:34;9715:18;;;9708:62;9806:33;9786:18;;;9779:61;9857:19;;31531:93:0;9455:427:1;31531:93:0;31651:16;;-1:-1:-1;;;31651:16:0;;;;31648:1608;;;31701:41;31716:6;31724:9;31735:6;31701:14;:41::i;:::-;31694:48;;;;31648:1608;31805:10;;-1:-1:-1;;;;;31795:20:0;;;31805:10;;31795:20;:48;;;;-1:-1:-1;31832:11:0;;-1:-1:-1;;;;;31819:24:0;;;31832:11;;31819:24;31795:48;31792:106;;;31874:12;31859;:27;31792:106;31924:11;;-1:-1:-1;;;;;31924:11:0;;;31914:21;;;;31910:157;;31988:6;;31973:12;;:21;;;;:::i;:::-;31956:12;:39;31952:104;;-1:-1:-1;;;;;32017:16:0;;;;;;:5;:16;;;;;:23;;-1:-1:-1;;32017:23:0;32036:4;32017:23;;;31952:104;5831:7;5858:6;-1:-1:-1;;;;;32083:17:0;;;5858:6;;32083:17;;;;:41;;-1:-1:-1;5831:7:0;5858:6;-1:-1:-1;;;;;32104:20:0;;;5858:6;;32104:20;;32083:41;32079:75;;;32126:28;32140:6;32147;32126:13;:28::i;:::-;32220:4;32171:28;24526:18;;;:9;:18;;;;;;32296:23;;32272:47;;;;;;;32352:44;;-1:-1:-1;32380:16:0;;-1:-1:-1;;;32380:16:0;;;;32379:17;32352:44;:69;;;;-1:-1:-1;;;;;;32401:20:0;;;;;;:12;:20;;;;;;;;32400:21;32352:69;:94;;;;-1:-1:-1;32425:21:0;;-1:-1:-1;;;32425:21:0;;;;32352:94;32348:305;;;32484:25;;-1:-1:-1;;;32484:25:0;;;;32481:97;;;32555:23;;32532:46;;32481:97;32597:36;32612:20;32597:14;:36::i;:::-;32689:53;;;;;;;;;;;-1:-1:-1;;;32689:53:0;;;;;;;;-1:-1:-1;;;;;32689:17:0;;-1:-1:-1;32689:17:0;;;:9;:17;;;;;;;;:53;;32711:6;;32689:21;:53::i;:::-;-1:-1:-1;;;;;32669:17:0;;;;;;:9;:17;;;;;;;;:73;;;;32782:17;:25;;;;;;;;;:57;;-1:-1:-1;;;;;;32811:28:0;;;;;;:17;:28;;;;;;;;32782:57;32781:148;;32895:34;32903:6;32911:9;32922:6;32895:7;:34::i;:::-;32781:148;;;32886:6;32781:148;32949:16;;32759:170;;-1:-1:-1;;;;32949:16:0;;;;:51;;;;-1:-1:-1;;;;;;32970:30:0;;;;;;:19;:30;;;;;;;;32969:31;32949:51;32946:133;;;33068:10;;33027:37;33052:11;33027:20;33037:9;-1:-1:-1;;;;;24526:18:0;24499:7;24526:18;;;:9;:18;;;;;;;24433:119;33027:37;:51;;33019:60;;;;;;-1:-1:-1;;;;;33119:20:0;;;;;;:9;:20;;;;;;:37;;33144:11;33119:24;:37::i;:::-;-1:-1:-1;;;;;33096:20:0;;;;;;;:9;:20;;;;;;;:60;;;;33178:40;;;;;;;;;;33206:11;2834:25:1;;2822:2;2807:18;;2688:177;33178:40:0;;;;;;;;33240:4;33233:11;;;;;;;1504:192;1590:7;1626:12;1618:6;;;;1610:29;;;;-1:-1:-1;;;1610:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1650:9:0;1662:5;1666:1;1662;:5;:::i;:::-;1650:17;1504:192;-1:-1:-1;;;;;1504:192:0:o;1360:136::-;1418:7;1445:43;1449:1;1452;1445:43;;;;;;;;;;;;;;;;;:3;:43::i;33271:330::-;33401:53;;;;;;;;;;;-1:-1:-1;;;33401:53:0;;;;;;;;-1:-1:-1;;;;;33401:17:0;;33364:4;33401:17;;;:9;:17;;;;;;;:53;;33423:6;;33401:21;:53::i;:::-;-1:-1:-1;;;;;33381:17:0;;;;;;;:9;:17;;;;;;:73;;;;33488:20;;;;;;;:32;;33513:6;33488:24;:32::i;:::-;-1:-1:-1;;;;;33465:20:0;;;;;;;:9;:20;;;;;;;:55;;;;33536:35;;;;;;;;;;33564:6;2834:25:1;;2822:2;2807:18;;2688:177;33536:35:0;;;;;;;;-1:-1:-1;33589:4:0;33271:330;;;;;:::o;36614:222::-;-1:-1:-1;;;;;36701:13:0;;;;;;:5;:13;;;;;;;;36700:14;36692:46;;;;-1:-1:-1;;;36692:46:0;;10222:2:1;36692:46:0;;;10204:21:1;10261:2;10241:18;;;10234:30;-1:-1:-1;;;10280:18:1;;;10273:49;10339:18;;36692:46:0;10020:343:1;36692:46:0;36767:12;;36757:6;:22;;:49;;;-1:-1:-1;;;;;;36783:23:0;;;;;;:15;:23;;;;;;;;36757:49;36749:79;;;;-1:-1:-1;;;36749:79:0;;10570:2:1;36749:79:0;;;10552:21:1;10609:2;10589:18;;;10582:30;-1:-1:-1;;;10628:18:1;;;10621:47;10685:18;;36749:79:0;10368:341:1;36749:79:0;36614:222;;:::o;33609:1048::-;22654:16;:23;;-1:-1:-1;;;;22654:23:0;-1:-1:-1;;;22654:23:0;;;33746:24:::1;::::0;33725:15:::1;::::0;22654:23;;33713:65:::1;::::0;33776:1:::1;::::0;33713:58:::1;::::0;;;:7;;:11:::1;:28::i;:::-;:32:::0;::::1;:58::i;:65::-;33691:87:::0;-1:-1:-1;33789:21:0::1;33813:24;:7:::0;33691:87;33813:11:::1;:24::i;:::-;33789:48;;33850:31;33867:13;33850:16;:31::i;:::-;34002:15;::::0;33917:21:::1;::::0;33892:22:::1;::::0;33973:52:::1;::::0;34002:22:::1;::::0;34022:1:::1;34002:19;:22::i;:::-;33973:24;::::0;;:28:::1;:52::i;:::-;33951:74;;34046:26;34075:59;34132:1;34075:52;34115:11;34075:35;34094:15;;34075:14;:18;;:35;;;;:::i;:59::-;34046:88;;34145:21;34169:47;34204:11;34169:30;34188:10;;34169:14;:18;;:30;;;;:::i;:47::-;34145:71:::0;-1:-1:-1;34227:26:0::1;34256:57;34145:71:::0;34256:38:::1;:14:::0;34275:18;34256::::1;:38::i;:::-;:42:::0;::::1;:57::i;:::-;34227:86:::0;-1:-1:-1;34329:22:0;;34326:104:::1;;34387:22;::::0;34366:64:::1;::::0;34387:22:::1;::::0;::::1;-1:-1:-1::0;;;;;34387:22:0::1;34411:18:::0;34366:20:::1;:64::i;:::-;34446:17:::0;;34443:89:::1;;34499:17;::::0;34478:54:::1;::::0;-1:-1:-1;;;;;34499:17:0::1;34518:13:::0;34478:20:::1;:54::i;:::-;34569:1;34548:18;:22;:41;;;;;34588:1;34574:11;:15;34548:41;34545:104;;;34604:45;34617:11;34630:18;34604:12;:45::i;:::-;-1:-1:-1::0;;22700:16:0;:24;;-1:-1:-1;;;;22700:24:0;;;-1:-1:-1;;;;;;33609:1048:0:o;35980:622::-;-1:-1:-1;;;;;36141:20:0;;36066:7;36141:20;;;:12;:20;;;;;;36066:7;;36141:20;;36138:223;;;36190:38;36224:3;36190:29;36201:17;;36190:6;:10;;:29;;;;:::i;:38::-;36178:50;;36138:223;;;-1:-1:-1;;;;;36258:23:0;;;;;;:12;:23;;;;;;;;36255:106;;;36310:39;36345:3;36310:30;36321:18;;36310:6;:10;;:30;;;;:::i;:39::-;36298:51;;36255:106;36384:13;;36381:173;;36459:4;36441:24;;;;:9;:24;;;;;;:39;;36470:9;36441:28;:39::i;:::-;36432:4;36414:24;;;;:9;:24;;;;;;;:66;;;;36500:42;;-1:-1:-1;;;;;36500:42:0;;;;;;;36532:9;2834:25:1;;2822:2;2807:18;;2688:177;36500:42:0;;;;;;;;36381:173;36573:21;:6;36584:9;36573:10;:21::i;1704:250::-;1762:7;1786:1;1791;1786:6;1782:47;;-1:-1:-1;1816:1:0;1809:8;;1782:47;1841:9;1853:5;1857:1;1853;:5;:::i;:::-;1841:17;-1:-1:-1;1886:1:0;1877:5;1881:1;1841:17;1877:5;:::i;:::-;:10;1869:56;;;;-1:-1:-1;;;1869:56:0;;11311:2:1;1869:56:0;;;11293:21:1;11350:2;11330:18;;;11323:30;11389:34;11369:18;;;11362:62;-1:-1:-1;;;11440:18:1;;;11433:31;11481:19;;1869:56:0;11109:397:1;1962:132:0;2020:7;2047:39;2051:1;2054;2047:39;;;;;;;;;;;;;;;;;:3;:39::i;34669:666::-;34819:16;;;34833:1;34819:16;;;;;;;;34795:21;;34819:16;;;;;;;;;;-1:-1:-1;34819:16:0;34795:40;;34864:4;34846;34851:1;34846:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34846:23:0;;;:7;;;;;;;;;;:23;;;;34890:15;;:22;;;-1:-1:-1;;;34890:22:0;;;;:15;;;;;:20;;:22;;;;;34846:7;;34890:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34880:4;34885:1;34880:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;34880:32:0;;;:7;;;;;;;;;:32;34957:15;;34925:62;;34942:4;;34957:15;34975:11;34925:8;:62::i;:::-;35026:15;;:240;;-1:-1:-1;;;35026:240:0;;-1:-1:-1;;;;;35026:15:0;;;;:66;;:240;;35107:11;;35026:15;;35177:4;;35204;;35240:15;;35026:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35292:35;35309:11;35322:4;35292:35;;;;;;;:::i;:::-;;;;;;;;34724:611;34669:666;:::o;29657:126::-;29749:26;;-1:-1:-1;;;;;29749:18:0;;;:26;;;;;29768:6;;29749:26;;;;29768:6;29749:18;:26;;;;;;;;;;;;;;;;;;;;;29657:126;;:::o;35343:513::-;35523:15;;35491:62;;35508:4;;-1:-1:-1;;;;;35523:15:0;35541:11;35491:8;:62::i;:::-;35596:15;;-1:-1:-1;;;;;35596:15:0;:31;35635:9;35668:4;35688:11;35596:15;;35800:7;5831;5858:6;-1:-1:-1;;;;;5858:6:0;;5793:79;35800:7;35596:252;;;;;;-1:-1:-1;;;;;;35596:252:0;;;-1:-1:-1;;;;;13392:15:1;;;35596:252:0;;;13374:34:1;13424:18;;;13417:34;;;;13467:18;;;13460:34;;;;13510:18;;;13503:34;13574:15;;;13553:19;;;13546:44;35822:15:0;13606:19:1;;;13599:35;13308:19;;35596:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35343:513;;:::o;2102:278::-;2188:7;2223:12;2216:5;2208:28;;;;-1:-1:-1;;;2208:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2247:9:0;2259:5;2263:1;2259;:5;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:160::-;215:20;;271:13;;264:21;254:32;;244:60;;300:1;297;290:12;244:60;150:160;;;:::o;315:315::-;380:6;388;441:2;429:9;420:7;416:23;412:32;409:52;;;457:1;454;447:12;409:52;496:9;483:23;515:31;540:5;515:31;:::i;:::-;565:5;-1:-1:-1;589:35:1;620:2;605:18;;589:35;:::i;:::-;579:45;;315:315;;;;;:::o;635:548::-;747:4;776:2;805;794:9;787:21;837:6;831:13;880:6;875:2;864:9;860:18;853:34;905:1;915:140;929:6;926:1;923:13;915:140;;;1024:14;;;1020:23;;1014:30;990:17;;;1009:2;986:26;979:66;944:10;;915:140;;;919:3;1104:1;1099:2;1090:6;1079:9;1075:22;1071:31;1064:42;1174:2;1167;1163:7;1158:2;1150:6;1146:15;1142:29;1131:9;1127:45;1123:54;1115:62;;;;635:548;;;;:::o;1396:315::-;1464:6;1472;1525:2;1513:9;1504:7;1500:23;1496:32;1493:52;;;1541:1;1538;1531:12;1493:52;1580:9;1567:23;1599:31;1624:5;1599:31;:::i;:::-;1649:5;1701:2;1686:18;;;;1673:32;;-1:-1:-1;;;1396:315:1:o;1908:316::-;1985:6;1993;2001;2054:2;2042:9;2033:7;2029:23;2025:32;2022:52;;;2070:1;2067;2060:12;2022:52;-1:-1:-1;;2093:23:1;;;2163:2;2148:18;;2135:32;;-1:-1:-1;2214:2:1;2199:18;;;2186:32;;1908:316;-1:-1:-1;1908:316:1:o;2870:456::-;2947:6;2955;2963;3016:2;3004:9;2995:7;2991:23;2987:32;2984:52;;;3032:1;3029;3022:12;2984:52;3071:9;3058:23;3090:31;3115:5;3090:31;:::i;:::-;3140:5;-1:-1:-1;3197:2:1;3182:18;;3169:32;3210:33;3169:32;3210:33;:::i;:::-;2870:456;;3262:7;;-1:-1:-1;;;3316:2:1;3301:18;;;;3288:32;;2870:456::o;3331:180::-;3387:6;3440:2;3428:9;3419:7;3415:23;3411:32;3408:52;;;3456:1;3453;3446:12;3408:52;3479:26;3495:9;3479:26;:::i;3516:247::-;3575:6;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3683:9;3670:23;3702:31;3727:5;3702:31;:::i;3957:180::-;4016:6;4069:2;4057:9;4048:7;4044:23;4040:32;4037:52;;;4085:1;4082;4075:12;4037:52;-1:-1:-1;4108:23:1;;3957:180;-1:-1:-1;3957:180:1:o;4142:689::-;4234:6;4242;4250;4303:2;4291:9;4282:7;4278:23;4274:32;4271:52;;;4319:1;4316;4309:12;4271:52;4359:9;4346:23;4388:18;4429:2;4421:6;4418:14;4415:34;;;4445:1;4442;4435:12;4415:34;4483:6;4472:9;4468:22;4458:32;;4528:7;4521:4;4517:2;4513:13;4509:27;4499:55;;4550:1;4547;4540:12;4499:55;4590:2;4577:16;4616:2;4608:6;4605:14;4602:34;;;4632:1;4629;4622:12;4602:34;4687:7;4680:4;4670:6;4667:1;4663:14;4659:2;4655:23;4651:34;4648:47;4645:67;;;4708:1;4705;4698:12;4645:67;4739:4;4731:13;;;;-1:-1:-1;4763:6:1;-1:-1:-1;4788:37:1;;4804:20;;;-1:-1:-1;4788:37:1;:::i;:::-;4778:47;;4142:689;;;;;:::o;4836:388::-;4904:6;4912;4965:2;4953:9;4944:7;4940:23;4936:32;4933:52;;;4981:1;4978;4971:12;4933:52;5020:9;5007:23;5039:31;5064:5;5039:31;:::i;:::-;5089:5;-1:-1:-1;5146:2:1;5131:18;;5118:32;5159:33;5118:32;5159:33;:::i;:::-;5211:7;5201:17;;;4836:388;;;;;:::o;5229:356::-;5431:2;5413:21;;;5450:18;;;5443:30;5509:34;5504:2;5489:18;;5482:62;5576:2;5561:18;;5229:356::o;5590:380::-;5669:1;5665:12;;;;5712;;;5733:61;;5787:4;5779:6;5775:17;5765:27;;5733:61;5840:2;5832:6;5829:14;5809:18;5806:38;5803:161;;5886:10;5881:3;5877:20;5874:1;5867:31;5921:4;5918:1;5911:15;5949:4;5946:1;5939:15;5803:161;;5590:380;;;:::o;5975:127::-;6036:10;6031:3;6027:20;6024:1;6017:31;6067:4;6064:1;6057:15;6091:4;6088:1;6081:15;6107:127;6168:10;6163:3;6159:20;6156:1;6149:31;6199:4;6196:1;6189:15;6223:4;6220:1;6213:15;6239:135;6278:3;6299:17;;;6296:43;;6319:18;;:::i;:::-;-1:-1:-1;6366:1:1;6355:13;;6239:135::o;6379:251::-;6449:6;6502:2;6490:9;6481:7;6477:23;6473:32;6470:52;;;6518:1;6515;6508:12;6470:52;6550:9;6544:16;6569:31;6594:5;6569:31;:::i;7351:125::-;7416:9;;;7437:10;;;7434:36;;;7450:18;;:::i;9887:128::-;9954:9;;;9975:11;;;9972:37;;;9989:18;;:::i;10714:168::-;10787:9;;;10818;;10835:15;;;10829:22;;10815:37;10805:71;;10856:18;;:::i;10887:217::-;10927:1;10953;10943:132;;10997:10;10992:3;10988:20;10985:1;10978:31;11032:4;11029:1;11022:15;11060:4;11057:1;11050:15;10943:132;-1:-1:-1;11089:9:1;;10887:217::o;11643:461::-;11696:3;11734:5;11728:12;11761:6;11756:3;11749:19;11787:4;11816:2;11811:3;11807:12;11800:19;;11853:2;11846:5;11842:14;11874:1;11884:195;11898:6;11895:1;11892:13;11884:195;;;11963:13;;-1:-1:-1;;;;;11959:39:1;11947:52;;12019:12;;;;12054:15;;;;11995:1;11913:9;11884:195;;;-1:-1:-1;12095:3:1;;11643:461;-1:-1:-1;;;;;11643:461:1:o;12109:582::-;12408:6;12397:9;12390:25;12451:6;12446:2;12435:9;12431:18;12424:34;12494:3;12489:2;12478:9;12474:18;12467:31;12371:4;12515:57;12567:3;12556:9;12552:19;12544:6;12515:57;:::i;:::-;-1:-1:-1;;;;;12608:32:1;;;;12603:2;12588:18;;12581:60;-1:-1:-1;12672:3:1;12657:19;12650:35;12507:65;12109:582;-1:-1:-1;;;12109:582:1:o;12696:332::-;12903:6;12892:9;12885:25;12946:2;12941;12930:9;12926:18;12919:30;12866:4;12966:56;13018:2;13007:9;13003:18;12995:6;12966:56;:::i;:::-;12958:64;12696:332;-1:-1:-1;;;;12696:332:1:o;13645:306::-;13733:6;13741;13749;13802:2;13790:9;13781:7;13777:23;13773:32;13770:52;;;13818:1;13815;13808:12;13770:52;13847:9;13841:16;13831:26;;13897:2;13886:9;13882:18;13876:25;13866:35;;13941:2;13930:9;13926:18;13920:25;13910:35;;13645:306;;;;;:::o

Swarm Source

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