BNB Price: $565.48 (+1.05%)
Gas: 1 GWei
 

Overview

Max Total Supply

690,000,000,000BABYCATE

Holders

471

Total Transfers

-

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
BabyCate

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2024-09-17
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.25;

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;
}

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;
}

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

        (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
            functionCallWithValue(
            target,
            data,
            0,
            "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"
        );
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return
            verifyCallResultFromTarget(
            target,
            success,
            returndata,
            errorMessage
        );
    }

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return
            verifyCallResultFromTarget(
            target,
            success,
            returndata,
            errorMessage
        );
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return
            verifyCallResultFromTarget(
            target,
            success,
            returndata,
            errorMessage
        );
    }

    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(
        bytes memory returndata,
        string memory errorMessage
    ) private pure {
        if (returndata.length > 0) {
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

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

    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function totalSupply() external view returns (uint256);

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

    function transfer(address to, 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

library SafeERC20 {
    using Address for address;

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

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

    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

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

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

    function forceApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        bytes memory approvalCall = abi.encodeWithSelector(
            token.approve.selector,
            spender,
            value
        );

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(token.approve.selector, spender, 0)
            );
            _callOptionalReturn(token, approvalCall);
        }
    }

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

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        require(
            returndata.length == 0 || abi.decode(returndata, (bool)),
            "SafeERC20: ERC20 operation did not succeed"
        );
    }

    function _callOptionalReturnBool(
        IERC20 token,
        bytes memory data
    ) private returns (bool) {
        (bool success, bytes memory returndata) = address(token).call(data);
        return
            success &&
            (returndata.length == 0 || abi.decode(returndata, (bool))) &&
            Address.isContract(address(token));
    }
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    function decimals() external view returns (uint8);
}

abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        _status = _NOT_ENTERED;
    }

    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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 9;
    }

    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, allowance(owner, spender) + addedValue);
        return true;
    }

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

        return true;
    }

    function _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;
        unchecked {
            _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 {}
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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;

        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 SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        require(b != -1 || a != MIN_INT256);

        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

contract BabyCate is ERC20, Ownable, ReentrancyGuard {
    using SafeERC20 for IERC20;

    uint256 public liquidityFeeBuy;
    uint256 public liquidityFeeSell;
    uint256 public liquidityFeeTransfer;

    uint256 public marketingTaxBuy;
    uint256 public marketingTaxSell;
    uint256 public marketingTaxTransfer;

    uint256 public immutable denominator;

    address public marketingWallet;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isSwapBackEnabled;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isAutomatedMarketMakerPair;

    modifier inSwap() {
        swapping = true;
        _;
        swapping = false;
    }

    event UpdateMarketingWallet(address indexed marketingWallet);
    event UpdateSwapTokensAtAmount(uint256 swapTokensAtAmount);
    event UpdateSwapBackStatus(bool status);
    event UpdateExcludeFromFees(address indexed account, bool isExcluded);
    event UpdateAutomatedMarketMakerPair(address indexed pair, bool status);
    event UpdateBuyFees(
        uint256 liquidityFee,
        uint256 marketingTax

    );
    event UpdateSellFees(
        uint256 liquidityFee,
        uint256 marketingTax

    );
    event UpdateTransferFees(
        uint256 liquidityFee,
        uint256 marketingTax

    );

    constructor() ERC20("BabyCate", "BABYCATE") {
        initializeOwner();
        _mint(owner(), 690_000_000_000 * (10 ** 9));

        liquidityFeeBuy = 100;
        liquidityFeeSell = 100;
        liquidityFeeTransfer = 0;

        marketingTaxBuy = 400;
        marketingTaxSell = 400;
        marketingTaxTransfer = 0;

        denominator = 10_000;

        marketingWallet = 0xfa1bF3Fd68D5fFabcD7A5B6bC56B83601B16c56F;

        swapTokensAtAmount = (totalSupply() * 1) / 10_000;

        isSwapBackEnabled = true;

        address router = getRouterAddress();
        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
            address(this),
            uniswapV2Router.WETH()
        );

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        address DEAD = address(0xdead);
        address ZERO = address(0x0);


        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;
        _isExcludedFromFees[address(owner())] = true;
        _isExcludedFromFees[address(DEAD)] = true;
        _isExcludedFromFees[address(ZERO)] = true;

        _isAutomatedMarketMakerPair[address(uniswapV2Pair)] = true;
    }

    receive() external payable {}

    fallback() external payable {}

    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

    function getRouterAddress() public view returns (address) {
        if (block.chainid == 56) {
            return 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            return 0xD99D1c33F9fC3444f8101754aBC46c52416550D1;
        } else if (block.chainid == 1 || block.chainid == 5) {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            return 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        }
    }

    function initializeOwner() internal {
        if (block.chainid == 56 || block.chainid == 1 || block.chainid == 5) {
            _transferOwnership(0xfa1bF3Fd68D5fFabcD7A5B6bC56B83601B16c56F);
        }
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");

        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.safeTransfer(msg.sender, balance);
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        require(
            _marketingWallet != marketingWallet,
            "Marketing wallet is already that address"
        );
        require(
            _marketingWallet != address(0),
            "Marketing wallet cannot be the zero address"
        );
        require(
            !isContract(_marketingWallet),
            "Marketing wallet cannot be a contract"
        );

        marketingWallet = _marketingWallet;
        emit UpdateMarketingWallet(_marketingWallet);
    }


    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(
            swapTokensAtAmount != amount,
            "SwapTokensAtAmount already on that amount"
        );
        require(amount >= 1, "Amount must be equal or greater than 1 Wei");

        swapTokensAtAmount = amount;

        emit UpdateSwapTokensAtAmount(amount);
    }

    function toggleSwapBack(bool status) external onlyOwner {
        require(isSwapBackEnabled != status, "SwapBack already on status");

        isSwapBackEnabled = status;
        emit UpdateSwapBackStatus(status);
    }

    function setExcludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit UpdateExcludeFromFees(account, excluded);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool status
    ) public onlyOwner {
        require(
            _isAutomatedMarketMakerPair[pair] != status,
            "Pair address is already the value of 'status'"
        );
        _isAutomatedMarketMakerPair[pair] = status;

        emit UpdateAutomatedMarketMakerPair(pair, status);
    }

    function isAutomatedMarketMakerPair(
        address pair
    ) public view returns (bool) {
        return _isAutomatedMarketMakerPair[pair];
    }

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

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !_isAutomatedMarketMakerPair[from] &&
            isSwapBackEnabled &&
            liquidityFeeBuy +
            liquidityFeeSell +
            liquidityFeeTransfer +
            marketingTaxBuy +
            marketingTaxSell +
            marketingTaxTransfer >
            0
        ) {
            swapBack();
        }

        bool takeFee = true;

        if (
            _isExcludedFromFees[from] ||
            _isExcludedFromFees[to] ||
            swapping
        ) {
            takeFee = false;
        }

        if (takeFee) {
            uint256 liquidityTax = 0;
            uint256 marketingTax = 0;

            if (_isAutomatedMarketMakerPair[from]) {
                liquidityTax    = (liquidityFeeBuy * amount) / denominator;
                marketingTax    = (marketingTaxBuy * amount) / denominator;
            } else if (_isAutomatedMarketMakerPair[to]) {
                liquidityTax    = (liquidityFeeSell * amount) / denominator;
                marketingTax    = (marketingTaxSell * amount) / denominator;
            } else {
                liquidityTax    = (liquidityFeeTransfer * amount) / denominator;
                marketingTax    = (marketingTaxTransfer * amount) / denominator;
            }

            uint256 contractTax = liquidityTax + marketingTax;

            if (contractTax > 0) {
                amount -= contractTax;
                super._transfer(from, address(this), contractTax);
            }
        }

        super._transfer(from, to, amount);
    }

    function swapBack() internal inSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        uint256 contractTokenBalance = balanceOf(address(this));

        uint256 totalTax = marketingTaxBuy +
                    marketingTaxSell +
                    marketingTaxTransfer +
                    liquidityFeeBuy +
                    liquidityFeeSell +
                    liquidityFeeTransfer;


        uint256 amountForLiquidity = (contractTokenBalance *
            (liquidityFeeBuy + liquidityFeeSell + liquidityFeeTransfer)) / totalTax;
        if(amountForLiquidity > 0) swapAndLiquify(amountForLiquidity);

        contractTokenBalance -= amountForLiquidity;
        _approve(address(this), address(uniswapV2Router), contractTokenBalance);
        try
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractTokenBalance,
            0,
            path,
            address(this),
            block.timestamp
        )
        {} catch {}

        uint256 newBalance = address(this).balance;


        if (newBalance > 0) {
            sendBNB(marketingWallet, newBalance);
        }
    }

    function swapAndLiquify(uint256 amountToken) private {
        uint256 half = amountToken / 2;
        uint256 otherHalf = amountToken - half;

        _approve(address(this), address(uniswapV2Router), half);
        uint256 initialBalance = address(this).balance;
        address[] memory pathToBNB = new address[](2);
        pathToBNB[0] = address(this);
        pathToBNB[1] = uniswapV2Router.WETH();
        try
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            half,
            0,
            pathToBNB,
            address(this),
            block.timestamp
        )
        {} catch {}
        uint256 newBalance = address(this).balance - initialBalance;
        _approve(address(this), address(uniswapV2Router), otherHalf);


        try uniswapV2Router.addLiquidityETH{value: newBalance}(
            address(this),
            otherHalf,
            0,
            0,
            address(0),
            block.timestamp
        ) {} catch {}

    }

    function sendBNB(
        address _to,
        uint256 amount
    ) internal nonReentrant returns (bool) {
        if (address(this).balance < amount) return false;

        (bool success, ) = payable(_to).call{value: amount}("");

        return success;
    }

    function manualSwapBack() external {
        uint256 contractTokenBalance = balanceOf(address(this));

        require(contractTokenBalance > 0, "Cant Swap Back 0 Token!");

        swapBack();
    }

    function updateBuyFees(
        uint256 _liquidityFee,
        uint256 _marketingTax
    ) external onlyOwner {
        require(
            _liquidityFee + _marketingTax <= 1000,
            "Total fees cannot be more than 10%"
        );

        liquidityFeeBuy = _liquidityFee;
        marketingTaxBuy = _marketingTax;

        emit UpdateBuyFees(_liquidityFee, _marketingTax);
    }

    function updateSellFees(
        uint256 _liquidityFee,
        uint256 _marketingTax

    ) external onlyOwner {
        require(
            _liquidityFee + _marketingTax <= 1000,
            "Total fees cannot be more than 10%"
        );

        liquidityFeeSell = _liquidityFee;
        marketingTaxSell = _marketingTax;

        emit UpdateSellFees(_liquidityFee, _marketingTax);
    }

    function updateTransferFees(
        uint256 _liquidityFee,
        uint256 _marketingTax
    ) external onlyOwner {
        require(
            _liquidityFee + _marketingTax <= 1000,
            "Total fees cannot be more than 10%"
        );

        liquidityFeeTransfer = _liquidityFee;
        marketingTaxTransfer = _marketingTax;

        emit UpdateTransferFees(_liquidityFee, _marketingTax);
    }
}

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":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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTax","type":"uint256"}],"name":"UpdateBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"UpdateExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"UpdateMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTax","type":"uint256"}],"name":"UpdateSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"UpdateSwapBackStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"marketingTax","type":"uint256"}],"name":"UpdateTransferFees","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pair","type":"address"}],"name":"isAutomatedMarketMakerPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapBackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingTaxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"toggleSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingTax","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingTax","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingTax","type":"uint256"}],"name":"updateTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e060405234801561000f575f80fd5b5060405180604001604052806008815260200167426162794361746560c01b81525060405180604001604052806008815260200167424142594341544560c01b81525081600390816100619190610715565b50600461006e8282610715565b50505061008761008261037860201b60201c565b61037c565b60016006556100946103cd565b6100b86100a96005546001600160a01b031690565b682567ac70392b88000061040b565b606460078190556008555f6009819055610190600a819055600b55600c556127106080819052600d80546001600160a01b03191673fa1bf3fd68d5ffabcd7a5b6bc56b83601b16c56f17905561010d60025490565b6101189060016107e8565b6101229190610805565b600e55600f805460ff191660011790555f61013b6104cd565b9050806001600160a01b031660a0816001600160a01b03168152505060a0516001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610195573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101b99190610824565b6001600160a01b031663c9c653963060a0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610206573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061022a9190610824565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610274573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102989190610824565b6001600160a01b031660c05260a0516102b49030905f19610556565b305f9081526010602081905260408083208054600160ff19918216811790925560a0516001600160a01b031685529184208054909216811790915561dead9291826103076005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790559581168652601083528186208054851660019081179091559481168652818620805485168617905560c0511685526011909152909220805490921617905550610864565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b46603814806103dc5750466001145b806103e75750466005145b156104095761040973fa1bf3fd68d5ffabcd7a5b6bc56b83601b16c56f61037c565b565b6001600160a01b0382166104665760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060025f8282546104779190610851565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b5f466038036104ef57507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103610510575073d99d1c33f9fc3444f8101754abc46c52416550d190565b466001148061051f5750466005145b1561053d5750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b50737a250d5630b4cf539739df2c5dacb4c659f2488d90565b6001600160a01b0383166105b85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161045d565b6001600160a01b0382166106195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161045d565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806106a657607f821691505b6020821081036106c457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561067957805f5260205f20601f840160051c810160208510156106ef5750805b601f840160051c820191505b8181101561070e575f81556001016106fb565b5050505050565b81516001600160401b0381111561072e5761072e61067e565b6107428161073c8454610692565b846106ca565b602080601f831160018114610775575f841561075e5750858301515b5f19600386901b1c1916600185901b1785556107cc565b5f85815260208120601f198616915b828110156107a357888601518255948401946001909101908401610784565b50858210156107c057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107ff576107ff6107d4565b92915050565b5f8261081f57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215610834575f80fd5b81516001600160a01b038116811461084a575f80fd5b9392505050565b808201808211156107ff576107ff6107d4565b60805160a05160c0516125a36108f05f395f6103bc01525f81816102d001528181611787015281816118dc0152818161191801528181611b9d01528181611c1b01528181611cd101528181611d4c0152611da701525f81816105be015281816115640152818161159f015281816115ff0152818161163a0152818161166901526116a401526125a35ff3fe60806040526004361061021b575f3560e01c8063715018a611610121578063a457c2d7116100a4578063dd62ed3e1161006b578063dd62ed3e1461068f578063e2f45605146106ae578063f2fde38b146106c3578063f6b700c2146106e2578063f9d0831a146106f757005b8063a457c2d7146105ff578063a9059cbb1461061e578063afa4f3b21461063d578063d54f7d5e1461065c578063d63cad221461067057005b806384ec44d2116100e857806384ec44d2146105675780638da5cb5b1461057c57806395d89b411461059957806396ce0795146105ad5780639a7a23d6146105e057005b8063715018a6146104d3578063721e6233146104e757806375f0a874146104fc5780637949a4031461051b57806382d201161461055257005b806339509351116101a95780635d098b38116101705780635d098b381461042e578063625612251461044d57806366ca9b831461046c57806366eb37851461048b57806370a082311461049f57005b8063395093511461037757806342d0b0bc1461039657806349bd5a5e146103ab5780634fbee193146103de57806352dfc8d01461041557005b80631694505e116101ed5780631694505e146102bf57806318160ddd1461030a5780631f88a23e1461031e57806323b872dd1461033d578063313ce5671461035c57005b806302dbd8f81461022457806306fdde0314610243578063095ea7b31461026d5780631107b3a51461029c57005b3661022257005b005b34801561022f575f80fd5b5061022261023e366004612153565b610716565b34801561024e575f80fd5b5061025761079a565b6040516102649190612173565b60405180910390f35b348015610278575f80fd5b5061028c6102873660046121bc565b61082a565b6040519015158152602001610264565b3480156102a7575f80fd5b506102b160085481565b604051908152602001610264565b3480156102ca575f80fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610264565b348015610315575f80fd5b506002546102b1565b348015610329575f80fd5b506102226103383660046121f3565b610843565b348015610348575f80fd5b5061028c610357366004612215565b6108ed565b348015610367575f80fd5b5060405160098152602001610264565b348015610382575f80fd5b5061028c6103913660046121bc565b610910565b3480156103a1575f80fd5b506102b1600b5481565b3480156103b6575f80fd5b506102f27f000000000000000000000000000000000000000000000000000000000000000081565b3480156103e9575f80fd5b5061028c6103f8366004612253565b6001600160a01b03165f9081526010602052604090205460ff1690565b348015610420575f80fd5b50600f5461028c9060ff1681565b348015610439575f80fd5b50610222610448366004612253565b610931565b348015610458575f80fd5b50610222610467366004612153565b610ac1565b348015610477575f80fd5b50610222610486366004612153565b610b34565b348015610496575f80fd5b50610222610ba7565b3480156104aa575f80fd5b506102b16104b9366004612253565b6001600160a01b03165f9081526020819052604090205490565b3480156104de575f80fd5b50610222610c0e565b3480156104f2575f80fd5b506102b1600a5481565b348015610507575f80fd5b50600d546102f2906001600160a01b031681565b348015610526575f80fd5b5061028c610535366004612253565b6001600160a01b03165f9081526011602052604090205460ff1690565b34801561055d575f80fd5b506102b160075481565b348015610572575f80fd5b506102b1600c5481565b348015610587575f80fd5b506005546001600160a01b03166102f2565b3480156105a4575f80fd5b50610257610c21565b3480156105b8575f80fd5b506102b17f000000000000000000000000000000000000000000000000000000000000000081565b3480156105eb575f80fd5b506102226105fa36600461226e565b610c30565b34801561060a575f80fd5b5061028c6106193660046121bc565b610d1c565b348015610629575f80fd5b5061028c6106383660046121bc565b610d96565b348015610648575f80fd5b506102226106573660046122a5565b610da3565b348015610667575f80fd5b506102f2610ea7565b34801561067b575f80fd5b5061022261068a36600461226e565b610f30565b34801561069a575f80fd5b506102b16106a93660046122bc565b611011565b3480156106b9575f80fd5b506102b1600e5481565b3480156106ce575f80fd5b506102226106dd366004612253565b61103b565b3480156106ed575f80fd5b506102b160095481565b348015610702575f80fd5b50610222610711366004612253565b6110b1565b61071e6111d1565b6103e861072b82846122fc565b11156107525760405162461bcd60e51b81526004016107499061230f565b60405180910390fd5b6008829055600b81905560408051838152602081018390527f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c691015b60405180910390a15050565b6060600380546107a990612351565b80601f01602080910402602001604051908101604052809291908181526020018280546107d590612351565b80156108205780601f106107f757610100808354040283529160200191610820565b820191905f5260205f20905b81548152906001019060200180831161080357829003601f168201915b5050505050905090565b5f3361083781858561122b565b60019150505b92915050565b61084b6111d1565b600f5481151560ff9091161515036108a55760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610749565b600f805460ff19168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b5f336108fa85828561134e565b6109058585856113c6565b506001949350505050565b5f336108378185856109228383611011565b61092c91906122fc565b61122b565b6109396111d1565b600d546001600160a01b03908116908216036109a85760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610749565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610749565b6001600160a01b0381163b15610a785760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610749565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f0905f90a250565b610ac96111d1565b6103e8610ad682846122fc565b1115610af45760405162461bcd60e51b81526004016107499061230f565b6009829055600c81905560408051838152602081018390527f046df7ac2398968abb0367759da531cba653fb8353ab0edaadb40852dcde940b910161078e565b610b3c6111d1565b6103e8610b4982846122fc565b1115610b675760405162461bcd60e51b81526004016107499061230f565b6007829055600a81905560408051838152602081018390527fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50910161078e565b305f9081526020819052604090205480610c035760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610749565b610c0b61171f565b50565b610c166111d1565b610c1f5f6119b1565b565b6060600480546107a990612351565b610c386111d1565b6001600160a01b0382165f9081526011602052604090205481151560ff909116151503610cbd5760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201526c65206f6620277374617475732760981b6064820152608401610749565b6001600160a01b0382165f81815260116020908152604091829020805460ff191685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320591015b60405180910390a25050565b5f3381610d298286611011565b905083811015610d895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610749565b610905828686840361122b565b5f336108378185856113c6565b610dab6111d1565b80600e5403610e0e5760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e207468604482015268185d08185b5bdd5b9d60ba1b6064820152608401610749565b6001811015610e725760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d75737420626520657175616c206f722067726561746572206044820152697468616e20312057656960b01b6064820152608401610749565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e48906020016108e2565b5f46603803610ec957507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103610eea575073d99d1c33f9fc3444f8101754abc46c52416550d190565b4660011480610ef95750466005145b15610f175750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b50737a250d5630b4cf539739df2c5dacb4c659f2488d90565b610f386111d1565b6001600160a01b0382165f9081526010602052604090205481151560ff909116151503610fba5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610749565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101610d10565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6110436111d1565b6001600160a01b0381166110a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610749565b610c0b816119b1565b6110b96111d1565b306001600160a01b038216036111115760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610749565b6001600160a01b03811661114c5760405133904780156108fc02915f818181858888f19350505050158015611148573d5f803e3d5ffd5b5050565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b69190612389565b90506111cc6001600160a01b0383163383611a02565b505050565b6005546001600160a01b03163314610c1f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610749565b6001600160a01b03831661128d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610749565b6001600160a01b0382166112ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610749565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6113598484611011565b90505f1981146113c057818110156113b35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610749565b6113c0848484840361122b565b50505050565b6001600160a01b0383166113ec5760405162461bcd60e51b8152600401610749906123a0565b6001600160a01b0382166114125760405162461bcd60e51b8152600401610749906123e5565b805f03611424576111cc83835f611a54565b305f90815260208190526040902054600e54811080159081906114515750600d54600160a01b900460ff16155b801561147557506001600160a01b0385165f9081526011602052604090205460ff16155b80156114835750600f5460ff165b80156114d157505f600c54600b54600a546009546008546007546114a791906122fc565b6114b191906122fc565b6114bb91906122fc565b6114c591906122fc565b6114cf91906122fc565b115b156114de576114de61171f565b6001600160a01b0385165f9081526010602052604090205460019060ff168061151e57506001600160a01b0385165f9081526010602052604090205460ff165b806115325750600d54600160a01b900460ff165b1561153a57505f5b801561170c576001600160a01b0386165f90815260116020526040812054819060ff16156115dd577f0000000000000000000000000000000000000000000000000000000000000000866007546115919190612428565b61159b919061243f565b91507f000000000000000000000000000000000000000000000000000000000000000086600a546115cc9190612428565b6115d6919061243f565b90506116de565b6001600160a01b0387165f9081526011602052604090205460ff1615611667577f00000000000000000000000000000000000000000000000000000000000000008660085461162c9190612428565b611636919061243f565b91507f000000000000000000000000000000000000000000000000000000000000000086600b546115cc9190612428565b7f0000000000000000000000000000000000000000000000000000000000000000866009546116969190612428565b6116a0919061243f565b91507f000000000000000000000000000000000000000000000000000000000000000086600c546116d19190612428565b6116db919061243f565b90505b5f6116e982846122fc565b90508015611708576116fb818861245e565b9650611708893083611a54565b5050505b611717868686611a54565b505050505050565b600d805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061176557611765612471565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118059190612485565b8160018151811061181857611818612471565b6001600160a01b03909216602092830291909101820152305f90815290819052604081205490505f600954600854600754600c54600b54600a5461185c91906122fc565b61186691906122fc565b61187091906122fc565b61187a91906122fc565b61188491906122fc565b90505f8160095460085460075461189b91906122fc565b6118a591906122fc565b6118af9085612428565b6118b9919061243f565b905080156118ca576118ca81611b7c565b6118d4818461245e565b9250611901307f00000000000000000000000000000000000000000000000000000000000000008561122b565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906119559086905f908990309042906004016124a0565b5f604051808303815f87803b15801561196c575f80fd5b505af192505050801561197d575060015b5047801561199d57600d5461199b906001600160a01b031682611e26565b505b5050600d805460ff60a01b19169055505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526111cc908490611e9d565b6001600160a01b038316611a7a5760405162461bcd60e51b8152600401610749906123a0565b6001600160a01b038216611aa05760405162461bcd60e51b8152600401610749906123e5565b6001600160a01b0383165f9081526020819052604090205481811015611b175760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610749565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36113c0565b5f611b8860028361243f565b90505f611b95828461245e565b9050611bc2307f00000000000000000000000000000000000000000000000000000000000000008461122b565b60408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110611bf957611bf9612471565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c999190612485565b81600181518110611cac57611cac612471565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790611d109087905f908690309042906004016124a0565b5f604051808303815f87803b158015611d27575f80fd5b505af1925050508015611d38575060015b505f611d44834761245e565b9050611d71307f00000000000000000000000000000000000000000000000000000000000000008661122b565b60405163f305d71960e01b8152306004820152602481018590525f604482018190526064820181905260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611e16575060408051601f3d908101601f19168201909252611e1391810190612511565b60015b1561171757505050505050505050565b5f611e2f611f70565b81471015611e3e57505f611e93565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114611e87576040519150601f19603f3d011682016040523d82523d5f602084013e611e8c565b606091505b5090925050505b61083d6001600655565b5f611ef1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fc99092919063ffffffff16565b905080515f1480611f11575080806020019051810190611f11919061253c565b6111cc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610749565b600260065403611fc25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610749565b6002600655565b6060611fd784845f85611fdf565b949350505050565b6060824710156120405760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610749565b5f80866001600160a01b0316858760405161205b9190612557565b5f6040518083038185875af1925050503d805f8114612095576040519150601f19603f3d011682016040523d82523d5f602084013e61209a565b606091505b50915091506120ab878383876120b6565b979650505050505050565b606083156121245782515f0361211d576001600160a01b0385163b61211d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610749565b5081611fd7565b611fd783838151156121395781518083602001fd5b8060405162461bcd60e51b81526004016107499190612173565b5f8060408385031215612164575f80fd5b50508035926020909101359150565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610c0b575f80fd5b5f80604083850312156121cd575f80fd5b82356121d8816121a8565b946020939093013593505050565b8015158114610c0b575f80fd5b5f60208284031215612203575f80fd5b813561220e816121e6565b9392505050565b5f805f60608486031215612227575f80fd5b8335612232816121a8565b92506020840135612242816121a8565b929592945050506040919091013590565b5f60208284031215612263575f80fd5b813561220e816121a8565b5f806040838503121561227f575f80fd5b823561228a816121a8565b9150602083013561229a816121e6565b809150509250929050565b5f602082840312156122b5575f80fd5b5035919050565b5f80604083850312156122cd575f80fd5b82356122d8816121a8565b9150602083013561229a816121a8565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561083d5761083d6122e8565b60208082526022908201527f546f74616c20666565732063616e6e6f74206265206d6f7265207468616e2031604082015261302560f01b606082015260800190565b600181811c9082168061236557607f821691505b60208210810361238357634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612399575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761083d5761083d6122e8565b5f8261245957634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561083d5761083d6122e8565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612495575f80fd5b815161220e816121a8565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156124f05784516001600160a01b0316835293830193918301916001016124cb565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612523575f80fd5b8351925060208401519150604084015190509250925092565b5f6020828403121561254c575f80fd5b815161220e816121e6565b5f82518060208501845e5f92019182525091905056fea264697066735822122052032bf2f85f9ca86e90c5d798e5ba284da190fc781b5e9935e19f82779557fc64736f6c63430008190033

Deployed Bytecode

0x60806040526004361061021b575f3560e01c8063715018a611610121578063a457c2d7116100a4578063dd62ed3e1161006b578063dd62ed3e1461068f578063e2f45605146106ae578063f2fde38b146106c3578063f6b700c2146106e2578063f9d0831a146106f757005b8063a457c2d7146105ff578063a9059cbb1461061e578063afa4f3b21461063d578063d54f7d5e1461065c578063d63cad221461067057005b806384ec44d2116100e857806384ec44d2146105675780638da5cb5b1461057c57806395d89b411461059957806396ce0795146105ad5780639a7a23d6146105e057005b8063715018a6146104d3578063721e6233146104e757806375f0a874146104fc5780637949a4031461051b57806382d201161461055257005b806339509351116101a95780635d098b38116101705780635d098b381461042e578063625612251461044d57806366ca9b831461046c57806366eb37851461048b57806370a082311461049f57005b8063395093511461037757806342d0b0bc1461039657806349bd5a5e146103ab5780634fbee193146103de57806352dfc8d01461041557005b80631694505e116101ed5780631694505e146102bf57806318160ddd1461030a5780631f88a23e1461031e57806323b872dd1461033d578063313ce5671461035c57005b806302dbd8f81461022457806306fdde0314610243578063095ea7b31461026d5780631107b3a51461029c57005b3661022257005b005b34801561022f575f80fd5b5061022261023e366004612153565b610716565b34801561024e575f80fd5b5061025761079a565b6040516102649190612173565b60405180910390f35b348015610278575f80fd5b5061028c6102873660046121bc565b61082a565b6040519015158152602001610264565b3480156102a7575f80fd5b506102b160085481565b604051908152602001610264565b3480156102ca575f80fd5b506102f27f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e81565b6040516001600160a01b039091168152602001610264565b348015610315575f80fd5b506002546102b1565b348015610329575f80fd5b506102226103383660046121f3565b610843565b348015610348575f80fd5b5061028c610357366004612215565b6108ed565b348015610367575f80fd5b5060405160098152602001610264565b348015610382575f80fd5b5061028c6103913660046121bc565b610910565b3480156103a1575f80fd5b506102b1600b5481565b3480156103b6575f80fd5b506102f27f00000000000000000000000024c33ea3ca575974eeed8e4c890af133933c28ba81565b3480156103e9575f80fd5b5061028c6103f8366004612253565b6001600160a01b03165f9081526010602052604090205460ff1690565b348015610420575f80fd5b50600f5461028c9060ff1681565b348015610439575f80fd5b50610222610448366004612253565b610931565b348015610458575f80fd5b50610222610467366004612153565b610ac1565b348015610477575f80fd5b50610222610486366004612153565b610b34565b348015610496575f80fd5b50610222610ba7565b3480156104aa575f80fd5b506102b16104b9366004612253565b6001600160a01b03165f9081526020819052604090205490565b3480156104de575f80fd5b50610222610c0e565b3480156104f2575f80fd5b506102b1600a5481565b348015610507575f80fd5b50600d546102f2906001600160a01b031681565b348015610526575f80fd5b5061028c610535366004612253565b6001600160a01b03165f9081526011602052604090205460ff1690565b34801561055d575f80fd5b506102b160075481565b348015610572575f80fd5b506102b1600c5481565b348015610587575f80fd5b506005546001600160a01b03166102f2565b3480156105a4575f80fd5b50610257610c21565b3480156105b8575f80fd5b506102b17f000000000000000000000000000000000000000000000000000000000000271081565b3480156105eb575f80fd5b506102226105fa36600461226e565b610c30565b34801561060a575f80fd5b5061028c6106193660046121bc565b610d1c565b348015610629575f80fd5b5061028c6106383660046121bc565b610d96565b348015610648575f80fd5b506102226106573660046122a5565b610da3565b348015610667575f80fd5b506102f2610ea7565b34801561067b575f80fd5b5061022261068a36600461226e565b610f30565b34801561069a575f80fd5b506102b16106a93660046122bc565b611011565b3480156106b9575f80fd5b506102b1600e5481565b3480156106ce575f80fd5b506102226106dd366004612253565b61103b565b3480156106ed575f80fd5b506102b160095481565b348015610702575f80fd5b50610222610711366004612253565b6110b1565b61071e6111d1565b6103e861072b82846122fc565b11156107525760405162461bcd60e51b81526004016107499061230f565b60405180910390fd5b6008829055600b81905560408051838152602081018390527f12dd4f8337f0c236c7994706854cca8cd53921c0032cb0fba8cdb797e73f67c691015b60405180910390a15050565b6060600380546107a990612351565b80601f01602080910402602001604051908101604052809291908181526020018280546107d590612351565b80156108205780601f106107f757610100808354040283529160200191610820565b820191905f5260205f20905b81548152906001019060200180831161080357829003601f168201915b5050505050905090565b5f3361083781858561122b565b60019150505b92915050565b61084b6111d1565b600f5481151560ff9091161515036108a55760405162461bcd60e51b815260206004820152601a60248201527f537761704261636b20616c7265616479206f6e207374617475730000000000006044820152606401610749565b600f805460ff19168215159081179091556040519081527fc2385a9c5843e4cd7e987e979b22e4d4748ec5dbbfc325ee4023a8c1914809b7906020015b60405180910390a150565b5f336108fa85828561134e565b6109058585856113c6565b506001949350505050565b5f336108378185856109228383611011565b61092c91906122fc565b61122b565b6109396111d1565b600d546001600160a01b03908116908216036109a85760405162461bcd60e51b815260206004820152602860248201527f4d61726b6574696e672077616c6c657420697320616c72656164792074686174604482015267206164647265737360c01b6064820152608401610749565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152602b60248201527f4d61726b6574696e672077616c6c65742063616e6e6f7420626520746865207a60448201526a65726f206164647265737360a81b6064820152608401610749565b6001600160a01b0381163b15610a785760405162461bcd60e51b815260206004820152602560248201527f4d61726b6574696e672077616c6c65742063616e6e6f74206265206120636f6e6044820152641d1c9858dd60da1b6064820152608401610749565b600d80546001600160a01b0319166001600160a01b0383169081179091556040517f335aad0eda24dacfa324b3d651daa091864338cf7d4af9d5087ba1c5ee1174f0905f90a250565b610ac96111d1565b6103e8610ad682846122fc565b1115610af45760405162461bcd60e51b81526004016107499061230f565b6009829055600c81905560408051838152602081018390527f046df7ac2398968abb0367759da531cba653fb8353ab0edaadb40852dcde940b910161078e565b610b3c6111d1565b6103e8610b4982846122fc565b1115610b675760405162461bcd60e51b81526004016107499061230f565b6007829055600a81905560408051838152602081018390527fccd61cb5df2cb048d1a7af40a431d6f247af01b6cf048f7a3f2aa9d313e2bc50910161078e565b305f9081526020819052604090205480610c035760405162461bcd60e51b815260206004820152601760248201527f43616e742053776170204261636b203020546f6b656e210000000000000000006044820152606401610749565b610c0b61171f565b50565b610c166111d1565b610c1f5f6119b1565b565b6060600480546107a990612351565b610c386111d1565b6001600160a01b0382165f9081526011602052604090205481151560ff909116151503610cbd5760405162461bcd60e51b815260206004820152602d60248201527f50616972206164647265737320697320616c7265616479207468652076616c7560448201526c65206f6620277374617475732760981b6064820152608401610749565b6001600160a01b0382165f81815260116020908152604091829020805460ff191685151590811790915591519182527fb6f1aed3b1ced30ce666a8b7f2e12b02aed514cdab677738640be9937f13320591015b60405180910390a25050565b5f3381610d298286611011565b905083811015610d895760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610749565b610905828686840361122b565b5f336108378185856113c6565b610dab6111d1565b80600e5403610e0e5760405162461bcd60e51b815260206004820152602960248201527f53776170546f6b656e734174416d6f756e7420616c7265616479206f6e207468604482015268185d08185b5bdd5b9d60ba1b6064820152608401610749565b6001811015610e725760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d75737420626520657175616c206f722067726561746572206044820152697468616e20312057656960b01b6064820152608401610749565b600e8190556040518181527fe82283d0f679a15d3811ecbaa8b6a8afb1b110e22daa33b359c37bcae5a11e48906020016108e2565b5f46603803610ec957507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103610eea575073d99d1c33f9fc3444f8101754abc46c52416550d190565b4660011480610ef95750466005145b15610f175750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b50737a250d5630b4cf539739df2c5dacb4c659f2488d90565b610f386111d1565b6001600160a01b0382165f9081526010602052604090205481151560ff909116151503610fba5760405162461bcd60e51b815260206004820152602a60248201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604482015269276578636c756465642760b01b6064820152608401610749565b6001600160a01b0382165f81815260106020908152604091829020805460ff191685151590811790915591519182527fee48373bc01f03d5728ce4cf0b4e1c35d75d7da201d5b5d5013a94e50941efe19101610d10565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6110436111d1565b6001600160a01b0381166110a85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610749565b610c0b816119b1565b6110b96111d1565b306001600160a01b038216036111115760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610749565b6001600160a01b03811661114c5760405133904780156108fc02915f818181858888f19350505050158015611148573d5f803e3d5ffd5b5050565b6040516370a0823160e01b815230600482015281905f906001600160a01b038316906370a0823190602401602060405180830381865afa158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b69190612389565b90506111cc6001600160a01b0383163383611a02565b505050565b6005546001600160a01b03163314610c1f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610749565b6001600160a01b03831661128d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610749565b6001600160a01b0382166112ee5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610749565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f6113598484611011565b90505f1981146113c057818110156113b35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610749565b6113c0848484840361122b565b50505050565b6001600160a01b0383166113ec5760405162461bcd60e51b8152600401610749906123a0565b6001600160a01b0382166114125760405162461bcd60e51b8152600401610749906123e5565b805f03611424576111cc83835f611a54565b305f90815260208190526040902054600e54811080159081906114515750600d54600160a01b900460ff16155b801561147557506001600160a01b0385165f9081526011602052604090205460ff16155b80156114835750600f5460ff165b80156114d157505f600c54600b54600a546009546008546007546114a791906122fc565b6114b191906122fc565b6114bb91906122fc565b6114c591906122fc565b6114cf91906122fc565b115b156114de576114de61171f565b6001600160a01b0385165f9081526010602052604090205460019060ff168061151e57506001600160a01b0385165f9081526010602052604090205460ff165b806115325750600d54600160a01b900460ff165b1561153a57505f5b801561170c576001600160a01b0386165f90815260116020526040812054819060ff16156115dd577f0000000000000000000000000000000000000000000000000000000000002710866007546115919190612428565b61159b919061243f565b91507f000000000000000000000000000000000000000000000000000000000000271086600a546115cc9190612428565b6115d6919061243f565b90506116de565b6001600160a01b0387165f9081526011602052604090205460ff1615611667577f00000000000000000000000000000000000000000000000000000000000027108660085461162c9190612428565b611636919061243f565b91507f000000000000000000000000000000000000000000000000000000000000271086600b546115cc9190612428565b7f0000000000000000000000000000000000000000000000000000000000002710866009546116969190612428565b6116a0919061243f565b91507f000000000000000000000000000000000000000000000000000000000000271086600c546116d19190612428565b6116db919061243f565b90505b5f6116e982846122fc565b90508015611708576116fb818861245e565b9650611708893083611a54565b5050505b611717868686611a54565b505050505050565b600d805460ff60a01b1916600160a01b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061176557611765612471565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118059190612485565b8160018151811061181857611818612471565b6001600160a01b03909216602092830291909101820152305f90815290819052604081205490505f600954600854600754600c54600b54600a5461185c91906122fc565b61186691906122fc565b61187091906122fc565b61187a91906122fc565b61188491906122fc565b90505f8160095460085460075461189b91906122fc565b6118a591906122fc565b6118af9085612428565b6118b9919061243f565b905080156118ca576118ca81611b7c565b6118d4818461245e565b9250611901307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e8561122b565b60405163791ac94760e01b81526001600160a01b037f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e169063791ac947906119559086905f908990309042906004016124a0565b5f604051808303815f87803b15801561196c575f80fd5b505af192505050801561197d575060015b5047801561199d57600d5461199b906001600160a01b031682611e26565b505b5050600d805460ff60a01b19169055505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526111cc908490611e9d565b6001600160a01b038316611a7a5760405162461bcd60e51b8152600401610749906123a0565b6001600160a01b038216611aa05760405162461bcd60e51b8152600401610749906123e5565b6001600160a01b0383165f9081526020819052604090205481811015611b175760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610749565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36113c0565b5f611b8860028361243f565b90505f611b95828461245e565b9050611bc2307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e8461122b565b60408051600280825260608201835247925f92919060208301908036833701905050905030815f81518110611bf957611bf9612471565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c75573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c999190612485565b81600181518110611cac57611cac612471565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e9091169063791ac94790611d109087905f908690309042906004016124a0565b5f604051808303815f87803b158015611d27575f80fd5b505af1925050508015611d38575060015b505f611d44834761245e565b9050611d71307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e8661122b565b60405163f305d71960e01b8152306004820152602481018590525f604482018190526064820181905260848201524260a48201527f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b03169063f305d71990839060c40160606040518083038185885af193505050508015611e16575060408051601f3d908101601f19168201909252611e1391810190612511565b60015b1561171757505050505050505050565b5f611e2f611f70565b81471015611e3e57505f611e93565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f8114611e87576040519150601f19603f3d011682016040523d82523d5f602084013e611e8c565b606091505b5090925050505b61083d6001600655565b5f611ef1826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316611fc99092919063ffffffff16565b905080515f1480611f11575080806020019051810190611f11919061253c565b6111cc5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610749565b600260065403611fc25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610749565b6002600655565b6060611fd784845f85611fdf565b949350505050565b6060824710156120405760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610749565b5f80866001600160a01b0316858760405161205b9190612557565b5f6040518083038185875af1925050503d805f8114612095576040519150601f19603f3d011682016040523d82523d5f602084013e61209a565b606091505b50915091506120ab878383876120b6565b979650505050505050565b606083156121245782515f0361211d576001600160a01b0385163b61211d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610749565b5081611fd7565b611fd783838151156121395781518083602001fd5b8060405162461bcd60e51b81526004016107499190612173565b5f8060408385031215612164575f80fd5b50508035926020909101359150565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114610c0b575f80fd5b5f80604083850312156121cd575f80fd5b82356121d8816121a8565b946020939093013593505050565b8015158114610c0b575f80fd5b5f60208284031215612203575f80fd5b813561220e816121e6565b9392505050565b5f805f60608486031215612227575f80fd5b8335612232816121a8565b92506020840135612242816121a8565b929592945050506040919091013590565b5f60208284031215612263575f80fd5b813561220e816121a8565b5f806040838503121561227f575f80fd5b823561228a816121a8565b9150602083013561229a816121e6565b809150509250929050565b5f602082840312156122b5575f80fd5b5035919050565b5f80604083850312156122cd575f80fd5b82356122d8816121a8565b9150602083013561229a816121a8565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561083d5761083d6122e8565b60208082526022908201527f546f74616c20666565732063616e6e6f74206265206d6f7265207468616e2031604082015261302560f01b606082015260800190565b600181811c9082168061236557607f821691505b60208210810361238357634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612399575f80fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b808202811582820484141761083d5761083d6122e8565b5f8261245957634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561083d5761083d6122e8565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215612495575f80fd5b815161220e816121a8565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156124f05784516001600160a01b0316835293830193918301916001016124cb565b50506001600160a01b03969096166060850152505050608001529392505050565b5f805f60608486031215612523575f80fd5b8351925060208401519150604084015190509250925092565b5f6020828403121561254c575f80fd5b815161220e816121e6565b5f82518060208501845e5f92019182525091905056fea264697066735822122052032bf2f85f9ca86e90c5d798e5ba284da190fc781b5e9935e19f82779557fc64736f6c63430008190033

Deployed Bytecode Sourcemap

26749:12633:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38545:406;;;;;;;;;;-1:-1:-1;38545:406:0;;;;;:::i;:::-;;:::i;17439:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18436:226;;;;;;;;;;-1:-1:-1;18436:226:0;;;;;:::i;:::-;;:::i;:::-;;;1311:14:1;;1304:22;1286:41;;1274:2;1259:18;18436:226:0;1146:187:1;26881:31:0;;;;;;;;;;;;;;;;;;;1484:25:1;;;1472:2;1457:18;26881:31:0;1338:177:1;27272:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1710:32:1;;;1692:51;;1680:2;1665:18;27272:51:0;1520:229:1;17759:108:0;;;;;;;;;;-1:-1:-1;17847:12:0;;17759:108;;31902:224;;;;;;;;;;-1:-1:-1;31902:224:0;;;;;:::i;:::-;;:::i;18670:295::-;;;;;;;;;;-1:-1:-1;18670:295:0;;;;;:::i;:::-;;:::i;17659:92::-;;;;;;;;;;-1:-1:-1;17659:92:0;;17742:1;2726:36:1;;2714:2;2699:18;17659:92:0;2584:184:1;18973:263:0;;;;;;;;;;-1:-1:-1;18973:263:0;;;;;:::i;:::-;;:::i;27000:31::-;;;;;;;;;;;;;;;;27330:38;;;;;;;;;;;;;;;32505:126;;;;;;;;;;-1:-1:-1;32505:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;32595:28:0;32571:4;32595:28;;;:19;:28;;;;;;;;;32505:126;27234:29;;;;;;;;;;-1:-1:-1;27234:29:0;;;;;;;;30933:580;;;;;;;;;;-1:-1:-1;30933:580:0;;;;;:::i;:::-;;:::i;38959:420::-;;;;;;;;;;-1:-1:-1;38959:420:0;;;;;:::i;:::-;;:::i;38137:400::-;;;;;;;;;;-1:-1:-1;38137:400:0;;;;;:::i;:::-;;:::i;37924:205::-;;;;;;;;;;;;;:::i;17875:143::-;;;;;;;;;;-1:-1:-1;17875:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;17992:18:0;17965:7;17992:18;;;;;;;;;;;;17875:143;23255:103;;;;;;;;;;;;;:::i;26963:30::-;;;;;;;;;;;;;;;;27127;;;;;;;;;;-1:-1:-1;27127:30:0;;;;-1:-1:-1;;;;;27127:30:0;;;33025:152;;;;;;;;;;-1:-1:-1;33025:152:0;;;;;:::i;:::-;-1:-1:-1;;;;;33136:33:0;33112:4;33136:33;;;:27;:33;;;;;;;;;33025:152;26844:30;;;;;;;;;;;;;;;;27038:35;;;;;;;;;;;;;;;;23020:87;;;;;;;;;;-1:-1:-1;23093:6:0;;-1:-1:-1;;;;;23093:6:0;23020:87;;17547:104;;;;;;;;;;;;;:::i;27082:36::-;;;;;;;;;;;;;;;32639:378;;;;;;;;;;-1:-1:-1;32639:378:0;;;;;:::i;:::-;;:::i;19244:498::-;;;;;;;;;;-1:-1:-1;19244:498:0;;;;;:::i;:::-;;:::i;18026:218::-;;;;;;;;;;-1:-1:-1;18026:218:0;;;;;:::i;:::-;;:::i;31523:371::-;;;;;;;;;;-1:-1:-1;31523:371:0;;;;;:::i;:::-;;:::i;29756:494::-;;;;;;;;;;;;;:::i;32134:363::-;;;;;;;;;;-1:-1:-1;32134:363:0;;;;;:::i;:::-;;:::i;18252:176::-;;;;;;;;;;-1:-1:-1;18252:176:0;;;;;:::i;:::-;;:::i;27194:33::-;;;;;;;;;;;;;;;;23366:238;;;;;;;;;;-1:-1:-1;23366:238:0;;;;;:::i;:::-;;:::i;26919:35::-;;;;;;;;;;;;;;;;30478:447;;;;;;;;;;-1:-1:-1;30478:447:0;;;;;:::i;:::-;;:::i;38545:406::-;22979:13;:11;:13::i;:::-;38727:4:::1;38694:29;38710:13:::0;38694;:29:::1;:::i;:::-;:37;;38672:121;;;;-1:-1:-1::0;;;38672:121:0::1;;;;;;;:::i;:::-;;;;;;;;;38806:16;:32:::0;;;38849:16:::1;:32:::0;;;38899:44:::1;::::0;;5037:25:1;;;5093:2;5078:18;;5071:34;;;38899:44:0::1;::::0;5010:18:1;38899:44:0::1;;;;;;;;38545:406:::0;;:::o;17439:100::-;17493:13;17526:5;17519:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17439:100;:::o;18436:226::-;18544:4;16899:10;18600:32;16899:10;18616:7;18625:6;18600:8;:32::i;:::-;18650:4;18643:11;;;18436:226;;;;;:::o;31902:224::-;22979:13;:11;:13::i;:::-;31977:17:::1;::::0;:27;::::1;;:17;::::0;;::::1;:27;;::::0;31969:66:::1;;;::::0;-1:-1:-1;;;31969:66:0;;5703:2:1;31969:66:0::1;::::0;::::1;5685:21:1::0;5742:2;5722:18;;;5715:30;5781:28;5761:18;;;5754:56;5827:18;;31969:66:0::1;5501:350:1::0;31969:66:0::1;32048:17;:26:::0;;-1:-1:-1;;32048:26:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32090:28:::1;::::0;1286:41:1;;;32090:28:0::1;::::0;1274:2:1;1259:18;32090:28:0::1;;;;;;;;31902:224:::0;:::o;18670:295::-;18801:4;16899:10;18859:38;18875:4;16899:10;18890:6;18859:15;:38::i;:::-;18908:27;18918:4;18924:2;18928:6;18908:9;:27::i;:::-;-1:-1:-1;18953:4:0;;18670:295;-1:-1:-1;;;;18670:295:0:o;18973:263::-;19086:4;16899:10;19142:64;16899:10;19158:7;19195:10;19167:25;16899:10;19158:7;19167:9;:25::i;:::-;:38;;;;:::i;:::-;19142:8;:64::i;30933:580::-;22979:13;:11;:13::i;:::-;31059:15:::1;::::0;-1:-1:-1;;;;;31059:15:0;;::::1;31039:35:::0;;::::1;::::0;31017:125:::1;;;::::0;-1:-1:-1;;;31017:125:0;;6058:2:1;31017:125:0::1;::::0;::::1;6040:21:1::0;6097:2;6077:18;;;6070:30;6136:34;6116:18;;;6109:62;-1:-1:-1;;;6187:18:1;;;6180:38;6235:19;;31017:125:0::1;5856:404:1::0;31017:125:0::1;-1:-1:-1::0;;;;;31175:30:0;::::1;31153:123;;;::::0;-1:-1:-1;;;31153:123:0;;6467:2:1;31153:123:0::1;::::0;::::1;6449:21:1::0;6506:2;6486:18;;;6479:30;6545:34;6525:18;;;6518:62;-1:-1:-1;;;6596:18:1;;;6589:41;6647:19;;31153:123:0::1;6265:407:1::0;31153:123:0::1;-1:-1:-1::0;;;;;29717:19:0;;;:23;31287:116:::1;;;::::0;-1:-1:-1;;;31287:116:0;;6879:2:1;31287:116:0::1;::::0;::::1;6861:21:1::0;6918:2;6898:18;;;6891:30;6957:34;6937:18;;;6930:62;-1:-1:-1;;;7008:18:1;;;7001:35;7053:19;;31287:116:0::1;6677:401:1::0;31287:116:0::1;31416:15;:34:::0;;-1:-1:-1;;;;;;31416:34:0::1;-1:-1:-1::0;;;;;31416:34:0;::::1;::::0;;::::1;::::0;;;31466:39:::1;::::0;::::1;::::0;-1:-1:-1;;31466:39:0::1;30933:580:::0;:::o;38959:420::-;22979:13;:11;:13::i;:::-;39143:4:::1;39110:29;39126:13:::0;39110;:29:::1;:::i;:::-;:37;;39088:121;;;;-1:-1:-1::0;;;39088:121:0::1;;;;;;;:::i;:::-;39222:20;:36:::0;;;39269:20:::1;:36:::0;;;39323:48:::1;::::0;;5037:25:1;;;5093:2;5078:18;;5071:34;;;39323:48:0::1;::::0;5010:18:1;39323:48:0::1;4863:248:1::0;38137:400:0;22979:13;:11;:13::i;:::-;38316:4:::1;38283:29;38299:13:::0;38283;:29:::1;:::i;:::-;:37;;38261:121;;;;-1:-1:-1::0;;;38261:121:0::1;;;;;;;:::i;:::-;38395:15;:31:::0;;;38437:15:::1;:31:::0;;;38486:43:::1;::::0;;5037:25:1;;;5093:2;5078:18;;5071:34;;;38486:43:0::1;::::0;5010:18:1;38486:43:0::1;4863:248:1::0;37924:205:0;38019:4;37970:28;17992:18;;;;;;;;;;;38046:24;38038:60;;;;-1:-1:-1;;;38038:60:0;;7285:2:1;38038:60:0;;;7267:21:1;7324:2;7304:18;;;7297:30;7363:25;7343:18;;;7336:53;7406:18;;38038:60:0;7083:347:1;38038:60:0;38111:10;:8;:10::i;:::-;37959:170;37924:205::o;23255:103::-;22979:13;:11;:13::i;:::-;23320:30:::1;23347:1;23320:18;:30::i;:::-;23255:103::o:0;17547:104::-;17603:13;17636:7;17629:14;;;;;:::i;32639:378::-;22979:13;:11;:13::i;:::-;-1:-1:-1;;;;;32778:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;:43;::::1;;:33;::::0;;::::1;:43;;::::0;32756:138:::1;;;::::0;-1:-1:-1;;;32756:138:0;;7637:2:1;32756:138:0::1;::::0;::::1;7619:21:1::0;7676:2;7656:18;;;7649:30;7715:34;7695:18;;;7688:62;-1:-1:-1;;;7766:18:1;;;7759:43;7819:19;;32756:138:0::1;7435:409:1::0;32756:138:0::1;-1:-1:-1::0;;;;;32905:33:0;::::1;;::::0;;;:27:::1;:33;::::0;;;;;;;;:42;;-1:-1:-1;;32905:42:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32965:44;;1286:41:1;;;32965:44:0::1;::::0;1259:18:1;32965:44:0::1;;;;;;;;32639:378:::0;;:::o;19244:498::-;19362:4;16899:10;19362:4;19445:25;16899:10;19462:7;19445:9;:25::i;:::-;19418:52;;19523:15;19503:16;:35;;19481:122;;;;-1:-1:-1;;;19481:122:0;;8051:2:1;19481:122:0;;;8033:21:1;8090:2;8070:18;;;8063:30;8129:34;8109:18;;;8102:62;-1:-1:-1;;;8180:18:1;;;8173:35;8225:19;;19481:122:0;7849:401:1;19481:122:0;19639:60;19648:5;19655:7;19683:15;19664:16;:34;19639:8;:60::i;18026:218::-;18130:4;16899:10;18186:28;16899:10;18203:2;18207:6;18186:9;:28::i;31523:371::-;22979:13;:11;:13::i;:::-;31644:6:::1;31622:18;;:28:::0;31600:119:::1;;;::::0;-1:-1:-1;;;31600:119:0;;8457:2:1;31600:119:0::1;::::0;::::1;8439:21:1::0;8496:2;8476:18;;;8469:30;8535:34;8515:18;;;8508:62;-1:-1:-1;;;8586:18:1;;;8579:39;8635:19;;31600:119:0::1;8255:405:1::0;31600:119:0::1;31748:1;31738:6;:11;;31730:66;;;::::0;-1:-1:-1;;;31730:66:0;;8867:2:1;31730:66:0::1;::::0;::::1;8849:21:1::0;8906:2;8886:18;;;8879:30;8945:34;8925:18;;;8918:62;-1:-1:-1;;;8996:18:1;;;8989:40;9046:19;;31730:66:0::1;8665:406:1::0;31730:66:0::1;31809:18;:27:::0;;;31854:32:::1;::::0;1484:25:1;;;31854:32:0::1;::::0;1472:2:1;1457:18;31854:32:0::1;1338:177:1::0;29756:494:0;29805:7;29829:13;29846:2;29829:19;29825:418;;-1:-1:-1;29872:42:0;;29756:494::o;29825:418::-;29936:13;29953:2;29936:19;29932:311;;-1:-1:-1;29979:42:0;;29756:494::o;29932:311::-;30043:13;30060:1;30043:18;:40;;;;30065:13;30082:1;30065:18;30043:40;30039:204;;;-1:-1:-1;30107:42:0;;29756:494::o;30039:204::-;-1:-1:-1;30189:42:0;;29756:494::o;32134:363::-;22979:13;:11;:13::i;:::-;-1:-1:-1;;;;;32271:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;32249:132:::1;;;::::0;-1:-1:-1;;;32249:132:0;;9278:2:1;32249:132:0::1;::::0;::::1;9260:21:1::0;9317:2;9297:18;;;9290:30;9356:34;9336:18;;;9329:62;-1:-1:-1;;;9407:18:1;;;9400:40;9457:19;;32249:132:0::1;9076:406:1::0;32249:132:0::1;-1:-1:-1::0;;;;;32392:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;32392:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;32449:40;;1286:41:1;;;32449:40:0::1;::::0;1259:18:1;32449:40:0::1;1146:187:1::0;18252:176:0;-1:-1:-1;;;;;18393:18:0;;;18366:7;18393:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18252:176::o;23366:238::-;22979:13;:11;:13::i;:::-;-1:-1:-1;;;;;23469:22:0;::::1;23447:110;;;::::0;-1:-1:-1;;;23447:110:0;;9689:2:1;23447:110:0::1;::::0;::::1;9671:21:1::0;9728:2;9708:18;;;9701:30;9767:34;9747:18;;;9740:62;-1:-1:-1;;;9818:18:1;;;9811:36;9864:19;;23447:110:0::1;9487:402:1::0;23447:110:0::1;23568:28;23587:8;23568:18;:28::i;30478:447::-:0;22979:13;:11;:13::i;:::-;30574:4:::1;-1:-1:-1::0;;;;;30557:22:0;::::1;::::0;30549:67:::1;;;::::0;-1:-1:-1;;;30549:67:0;;10096:2:1;30549:67:0::1;::::0;::::1;10078:21:1::0;;;10115:18;;;10108:30;10174:34;10154:18;;;10147:62;10226:18;;30549:67:0::1;9894:356:1::0;30549:67:0::1;-1:-1:-1::0;;;;;30633:21:0;::::1;30629:126;;30671:51;::::0;30679:10:::1;::::0;30700:21:::1;30671:51:::0;::::1;;;::::0;::::1;::::0;;;30700:21;30679:10;30671:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;37959:170:::0;37924:205::o;30629:126::-:1;30827:35;::::0;-1:-1:-1;;;30827:35:0;;30856:4:::1;30827:35;::::0;::::1;1692:51:1::0;30792:5:0;;30765:17:::1;::::0;-1:-1:-1;;;;;30827:20:0;::::1;::::0;::::1;::::0;1665:18:1;;30827:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30809:53:::0;-1:-1:-1;30873:44:0::1;-1:-1:-1::0;;;;;30873:23:0;::::1;30897:10;30809:53:::0;30873:23:::1;:44::i;:::-;30538:387;;30478:447:::0;:::o;23115:132::-;23093:6;;-1:-1:-1;;;;;23093:6:0;16899:10;23179:23;23171:68;;;;-1:-1:-1;;;23171:68:0;;10646:2:1;23171:68:0;;;10628:21:1;;;10665:18;;;10658:30;10724:34;10704:18;;;10697:62;10776:18;;23171:68:0;10444:356:1;21520:380:0;-1:-1:-1;;;;;21656:19:0;;21648:68;;;;-1:-1:-1;;;21648:68:0;;11007:2:1;21648:68:0;;;10989:21:1;11046:2;11026:18;;;11019:30;11085:34;11065:18;;;11058:62;-1:-1:-1;;;11136:18:1;;;11129:34;11180:19;;21648:68:0;10805:400:1;21648:68:0;-1:-1:-1;;;;;21735:21:0;;21727:68;;;;-1:-1:-1;;;21727:68:0;;11412:2:1;21727:68:0;;;11394:21:1;11451:2;11431:18;;;11424:30;11490:34;11470:18;;;11463:62;-1:-1:-1;;;11541:18:1;;;11534:32;11583:19;;21727:68:0;11210:398:1;21727:68:0;-1:-1:-1;;;;;21808:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21860:32;;1484:25:1;;;21860:32:0;;1457:18:1;21860:32:0;;;;;;;21520:380;;;:::o;21908:502::-;22043:24;22070:25;22080:5;22087:7;22070:9;:25::i;:::-;22043:52;;-1:-1:-1;;22110:16:0;:37;22106:297;;22210:6;22190:16;:26;;22164:117;;;;-1:-1:-1;;;22164:117:0;;11815:2:1;22164:117:0;;;11797:21:1;11854:2;11834:18;;;11827:30;11893:31;11873:18;;;11866:59;11942:18;;22164:117:0;11613:353:1;22164:117:0;22325:51;22334:5;22341:7;22369:6;22350:16;:25;22325:8;:51::i;:::-;22032:378;21908:502;;;:::o;33185:2151::-;-1:-1:-1;;;;;33317:18:0;;33309:68;;;;-1:-1:-1;;;33309:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33396:16:0;;33388:64;;;;-1:-1:-1;;;33388:64:0;;;;;;;:::i;:::-;33469:6;33479:1;33469:11;33465:93;;33497:28;33513:4;33519:2;33523:1;33497:15;:28::i;33465:93::-;33619:4;33570:28;17992:18;;;;;;;;;;;33677;;33653:42;;;;;;;33726:33;;-1:-1:-1;33751:8:0;;-1:-1:-1;;;33751:8:0;;;;33750:9;33726:33;:84;;;;-1:-1:-1;;;;;;33777:33:0;;;;;;:27;:33;;;;;;;;33776:34;33726:84;:118;;;;-1:-1:-1;33827:17:0;;;;33726:118;:334;;;;;34059:1;34023:20;;33991:16;;33960:15;;33924:20;;33892:16;;33861:15;;:47;;;;:::i;:::-;:83;;;;:::i;:::-;:114;;;;:::i;:::-;:146;;;;:::i;:::-;:182;;;;:::i;:::-;:199;33726:334;33708:401;;;34087:10;:8;:10::i;:::-;-1:-1:-1;;;;;34171:25:0;;34121:12;34171:25;;;:19;:25;;;;;;34136:4;;34171:25;;;:65;;-1:-1:-1;;;;;;34213:23:0;;;;;;:19;:23;;;;;;;;34171:65;:90;;;-1:-1:-1;34253:8:0;;-1:-1:-1;;;34253:8:0;;;;34171:90;34153:162;;;-1:-1:-1;34298:5:0;34153:162;34331:7;34327:956;;;-1:-1:-1;;;;;34439:33:0;;34355:20;34439:33;;;:27;:33;;;;;;34355:20;;34439:33;;34435:610;;;34540:11;34530:6;34512:15;;:24;;;;:::i;:::-;34511:40;;;;:::i;:::-;34493:58;;34617:11;34607:6;34589:15;;:24;;;;:::i;:::-;34588:40;;;;:::i;:::-;34570:58;;34435:610;;;-1:-1:-1;;;;;34654:31:0;;;;;;:27;:31;;;;;;;;34650:395;;;34754:11;34744:6;34725:16;;:25;;;;:::i;:::-;34724:41;;;;:::i;:::-;34706:59;;34832:11;34822:6;34803:16;;:25;;;;:::i;34650:395::-;34936:11;34926:6;34903:20;;:29;;;;:::i;:::-;34902:45;;;;:::i;:::-;34884:63;;35018:11;35008:6;34985:20;;:29;;;;:::i;:::-;34984:45;;;;:::i;:::-;34966:63;;34650:395;35061:19;35083:27;35098:12;35083;:27;:::i;:::-;35061:49;-1:-1:-1;35131:15:0;;35127:145;;35167:21;35177:11;35167:21;;:::i;:::-;;;35207:49;35223:4;35237;35244:11;35207:15;:49::i;:::-;34340:943;;;34327:956;35295:33;35311:4;35317:2;35321:6;35295:15;:33::i;:::-;33298:2038;;;33185:2151;;;:::o;35344:1256::-;27534:8;:15;;-1:-1:-1;;;;27534:15:0;-1:-1:-1;;;27534:15:0;;;35415:16:::1;::::0;;35429:1:::1;35415:16:::0;;;;;::::1;::::0;;-1:-1:-1;;35415:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;35415:16:0::1;35391:40;;35460:4;35442;35447:1;35442:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;35442:23:0::1;;;-1:-1:-1::0;;;;;35442:23:0::1;;;::::0;::::1;35486:15;-1:-1:-1::0;;;;;35486:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35476:4;35481:1;35476:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35476:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:32;35570:4:::1;35521:28;17992:18:::0;;;;;;;;;;;35521:55:::1;;35589:16;35810:20;;35770:16;;35731:15;;35687:20;;35647:16;;35608:15;;:55;;;;:::i;:::-;:99;;;;:::i;:::-;:138;;;;:::i;:::-;:178;;;;:::i;:::-;:222;;;;:::i;:::-;35589:241;;35845:26;35974:8;35949:20;;35930:16;;35912:15;;:34;;;;:::i;:::-;:57;;;;:::i;:::-;35875:95;::::0;:20;:95:::1;:::i;:::-;35874:108;;;;:::i;:::-;35845:137:::0;-1:-1:-1;35996:22:0;;35993:61:::1;;36020:34;36035:18;36020:14;:34::i;:::-;36067:42;36091:18:::0;36067:42;::::1;:::i;:::-;;;36120:71;36137:4;36152:15;36170:20;36120:8;:71::i;:::-;36215:205;::::0;-1:-1:-1;;;36215:205:0;;-1:-1:-1;;;;;36215:15:0::1;:66;::::0;::::1;::::0;:205:::1;::::0;36296:20;;36331:1:::1;::::0;36347:4;;36374::::1;::::0;36394:15:::1;::::0;36215:205:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;36202:239:::0;36474:21:::1;36514:14:::0;;36510:83:::1;;36553:15;::::0;36545:36:::1;::::0;-1:-1:-1;;;;;36553:15:0::1;36570:10:::0;36545:7:::1;:36::i;:::-;;36510:83;-1:-1:-1::0;;27572:8:0;:16;;-1:-1:-1;;;;27572:16:0;;;-1:-1:-1;;;35344:1256:0:o;23612:191::-;23705:6;;;-1:-1:-1;;;;;23722:17:0;;;-1:-1:-1;;;;;;23722:17:0;;;;;;;23755:40;;23705:6;;;23722:17;23705:6;;23755:40;;23686:16;;23755:40;23675:128;23612:191;:::o;11986:214::-;12123:58;;;-1:-1:-1;;;;;15006:32:1;;12123:58:0;;;14988:51:1;15055:18;;;;15048:34;;;12123:58:0;;;;;;;;;;14961:18:1;;;;12123:58:0;;;;;;;;-1:-1:-1;;;;;12123:58:0;-1:-1:-1;;;12123:58:0;;;12069:123;;12103:5;;12069:19;:123::i;19750:714::-;-1:-1:-1;;;;;19881:18:0;;19873:68;;;;-1:-1:-1;;;19873:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19960:16:0;;19952:64;;;;-1:-1:-1;;;19952:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20102:15:0;;20080:19;20102:15;;;;;;;;;;;20150:21;;;;20128:109;;;;-1:-1:-1;;;20128:109:0;;15295:2:1;20128:109:0;;;15277:21:1;15334:2;15314:18;;;15307:30;15373:34;15353:18;;;15346:62;-1:-1:-1;;;15424:18:1;;;15417:36;15470:19;;20128:109:0;15093:402:1;20128:109:0;-1:-1:-1;;;;;20273:15:0;;;:9;:15;;;;;;;;;;;20291:20;;;20273:38;;20328:13;;;;;;;;;;:23;;;;;;20380:26;;1484:25:1;;;20328:13:0;;20380:26;;1457:18:1;20380:26:0;;;;;;;20419:37;30478:447;36608:1030;36672:12;36687:15;36701:1;36687:11;:15;:::i;:::-;36672:30;-1:-1:-1;36713:17:0;36733:18;36672:30;36733:11;:18;:::i;:::-;36713:38;;36764:55;36781:4;36796:15;36814:4;36764:8;:55::i;:::-;36916:16;;;36930:1;36916:16;;;;;;;;36855:21;;36830:22;;36916:16;36930:1;36916:16;;;;;;;;;;-1:-1:-1;36916:16:0;36887:45;;36966:4;36943:9;36953:1;36943:12;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;36943:28:0;;;-1:-1:-1;;;;;36943:28:0;;;;;36997:15;-1:-1:-1;;;;;36997:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36982:9;36992:1;36982:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36982:37:0;;;:12;;;;;;;;;:37;37043:194;;-1:-1:-1;;;37043:194:0;;:15;:66;;;;;;:194;;37124:4;;37143:1;;37159:9;;37191:4;;37211:15;;37043:194;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37030:228;37268:18;37289:38;37313:14;37289:21;:38;:::i;:::-;37268:59;;37338:60;37355:4;37370:15;37388:9;37338:8;:60::i;:::-;37417:200;;-1:-1:-1;;;37417:200:0;;37490:4;37417:200;;;15841:34:1;15891:18;;;15884:34;;;37534:1:0;15934:18:1;;;15927:34;;;15977:18;;;15970:34;;;16020:19;;;16013:44;37591:15:0;16073:19:1;;;16066:35;37417:15:0;-1:-1:-1;;;;;37417:31:0;;;;37456:10;;15775:19:1;;37417:200:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37417:200:0;;;;;;;;-1:-1:-1;;37417:200:0;;;;;;;;;;;;:::i;:::-;;;37413:216;;;;;;36661:977;;;;;36608:1030;:::o;37646:270::-;37748:4;16343:21;:19;:21::i;:::-;37793:6:::1;37769:21;:30;37765:48;;;-1:-1:-1::0;37808:5:0::1;37801:12;;37765:48;37827:12;37853:3;-1:-1:-1::0;;;;;37845:17:0::1;37870:6;37845:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;37826:55:0;;-1:-1:-1;;;16375:1:0::1;16387:20:::0;16159:1;16632:7;:22;16583:79;15094:380;15175:23;15201:106;15243:4;15201:106;;;;;;;;;;;;;;;;;15209:5;-1:-1:-1;;;;;15201:27:0;;;:106;;;;;:::i;:::-;15175:132;;15340:10;:17;15361:1;15340:22;:56;;;;15377:10;15366:30;;;;;;;;;;;;:::i;:::-;15318:148;;;;-1:-1:-1;;;15318:148:0;;17085:2:1;15318:148:0;;;17067:21:1;17124:2;17104:18;;;17097:30;17163:34;17143:18;;;17136:62;-1:-1:-1;;;17214:18:1;;;17207:40;17264:19;;15318:148:0;16883:406:1;16423:152:0;16203:1;16481:7;;:19;16473:63;;;;-1:-1:-1;;;16473:63:0;;17496:2:1;16473:63:0;;;17478:21:1;17535:2;17515:18;;;17508:30;17574:33;17554:18;;;17547:61;17625:18;;16473:63:0;17294:355:1;16473:63:0;16203:1;16549:7;:18;16423:152::o;6903:229::-;7040:12;7072:52;7094:6;7102:4;7108:1;7111:12;7072:21;:52::i;:::-;7065:59;6903:229;-1:-1:-1;;;;6903:229:0:o;7484:592::-;7654:12;7726:5;7701:21;:30;;7679:118;;;;-1:-1:-1;;;7679:118:0;;17856:2:1;7679:118:0;;;17838:21:1;17895:2;17875:18;;;17868:30;17934:34;17914:18;;;17907:62;-1:-1:-1;;;17985:18:1;;;17978:36;18031:19;;7679:118:0;17654:402:1;7679:118:0;7809:12;7823:23;7850:6;-1:-1:-1;;;;;7850:11:0;7869:5;7890:4;7850:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7808:97;;;;7936:132;7977:6;7998:7;8020:10;8045:12;7936:26;:132::i;:::-;7916:152;7484:592;-1:-1:-1;;;;;;;7484:592:0:o;9508:477::-;9693:12;9722:7;9718:260;;;9750:10;:17;9771:1;9750:22;9746:123;;-1:-1:-1;;;;;29717:19:0;;;9793:60;;;;-1:-1:-1;;;9793:60:0;;18569:2:1;9793:60:0;;;18551:21:1;18608:2;18588:18;;;18581:30;18647:31;18627:18;;;18620:59;18696:18;;9793:60:0;18367:353:1;9793:60:0;-1:-1:-1;9890:10:0;9883:17;;9718:260;9933:33;9941:10;9953:12;10429:17;;:21;10425:299;;10572:10;10566:17;10629:15;10616:10;10612:2;10608:19;10601:44;10425:299;10699:12;10692:20;;-1:-1:-1;;;10692:20:0;;;;;;;;:::i;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:418::-;416:2;405:9;398:21;379:4;448:6;442:13;491:6;486:2;475:9;471:18;464:34;550:6;545:2;537:6;533:15;528:2;517:9;513:18;507:50;606:1;601:2;592:6;581:9;577:22;573:31;566:42;676:2;669;665:7;660:2;652:6;648:15;644:29;633:9;629:45;625:54;617:62;;;267:418;;;;:::o;690:131::-;-1:-1:-1;;;;;765:31:1;;755:42;;745:70;;811:1;808;801:12;826:315;894:6;902;955:2;943:9;934:7;930:23;926:32;923:52;;;971:1;968;961:12;923:52;1010:9;997:23;1029:31;1054:5;1029:31;:::i;:::-;1079:5;1131:2;1116:18;;;;1103:32;;-1:-1:-1;;;826:315:1:o;1754:118::-;1840:5;1833:13;1826:21;1819:5;1816:32;1806:60;;1862:1;1859;1852:12;1877:241;1933:6;1986:2;1974:9;1965:7;1961:23;1957:32;1954:52;;;2002:1;1999;1992:12;1954:52;2041:9;2028:23;2060:28;2082:5;2060:28;:::i;:::-;2107:5;1877:241;-1:-1:-1;;;1877:241:1:o;2123:456::-;2200:6;2208;2216;2269:2;2257:9;2248:7;2244:23;2240:32;2237:52;;;2285:1;2282;2275:12;2237:52;2324:9;2311:23;2343:31;2368:5;2343:31;:::i;:::-;2393:5;-1:-1:-1;2450:2:1;2435:18;;2422:32;2463:33;2422:32;2463:33;:::i;:::-;2123:456;;2515:7;;-1:-1:-1;;;2569:2:1;2554:18;;;;2541:32;;2123:456::o;2981:247::-;3040:6;3093:2;3081:9;3072:7;3068:23;3064:32;3061:52;;;3109:1;3106;3099:12;3061:52;3148:9;3135:23;3167:31;3192:5;3167:31;:::i;3233:382::-;3298:6;3306;3359:2;3347:9;3338:7;3334:23;3330:32;3327:52;;;3375:1;3372;3365:12;3327:52;3414:9;3401:23;3433:31;3458:5;3433:31;:::i;:::-;3483:5;-1:-1:-1;3540:2:1;3525:18;;3512:32;3553:30;3512:32;3553:30;:::i;:::-;3602:7;3592:17;;;3233:382;;;;;:::o;3620:180::-;3679:6;3732:2;3720:9;3711:7;3707:23;3703:32;3700:52;;;3748:1;3745;3738:12;3700:52;-1:-1:-1;3771:23:1;;3620:180;-1:-1:-1;3620:180:1:o;3805:388::-;3873:6;3881;3934:2;3922:9;3913:7;3909:23;3905:32;3902:52;;;3950:1;3947;3940:12;3902:52;3989:9;3976:23;4008:31;4033:5;4008:31;:::i;:::-;4058:5;-1:-1:-1;4115:2:1;4100:18;;4087:32;4128:33;4087:32;4128:33;:::i;4198:127::-;4259:10;4254:3;4250:20;4247:1;4240:31;4290:4;4287:1;4280:15;4314:4;4311:1;4304:15;4330:125;4395:9;;;4416:10;;;4413:36;;;4429:18;;:::i;4460:398::-;4662:2;4644:21;;;4701:2;4681:18;;;4674:30;4740:34;4735:2;4720:18;;4713:62;-1:-1:-1;;;4806:2:1;4791:18;;4784:32;4848:3;4833:19;;4460:398::o;5116:380::-;5195:1;5191:12;;;;5238;;;5259:61;;5313:4;5305:6;5301:17;5291:27;;5259:61;5366:2;5358:6;5355:14;5335:18;5332:38;5329:161;;5412:10;5407:3;5403:20;5400:1;5393:31;5447:4;5444:1;5437:15;5475:4;5472:1;5465:15;5329:161;;5116:380;;;:::o;10255:184::-;10325:6;10378:2;10366:9;10357:7;10353:23;10349:32;10346:52;;;10394:1;10391;10384:12;10346:52;-1:-1:-1;10417:16:1;;10255:184;-1:-1:-1;10255:184:1:o;11971:401::-;12173:2;12155:21;;;12212:2;12192:18;;;12185:30;12251:34;12246:2;12231:18;;12224:62;-1:-1:-1;;;12317:2:1;12302:18;;12295:35;12362:3;12347:19;;11971:401::o;12377:399::-;12579:2;12561:21;;;12618:2;12598:18;;;12591:30;12657:34;12652:2;12637:18;;12630:62;-1:-1:-1;;;12723:2:1;12708:18;;12701:33;12766:3;12751:19;;12377:399::o;12781:168::-;12854:9;;;12885;;12902:15;;;12896:22;;12882:37;12872:71;;12923:18;;:::i;12954:217::-;12994:1;13020;13010:132;;13064:10;13059:3;13055:20;13052:1;13045:31;13099:4;13096:1;13089:15;13127:4;13124:1;13117:15;13010:132;-1:-1:-1;13156:9:1;;12954:217::o;13176:128::-;13243:9;;;13264:11;;;13261:37;;;13278:18;;:::i;13441:127::-;13502:10;13497:3;13493:20;13490:1;13483:31;13533:4;13530:1;13523:15;13557:4;13554:1;13547:15;13573:251;13643:6;13696:2;13684:9;13675:7;13671:23;13667:32;13664:52;;;13712:1;13709;13702:12;13664:52;13744:9;13738:16;13763:31;13788:5;13763:31;:::i;13829:980::-;14091:4;14139:3;14128:9;14124:19;14170:6;14159:9;14152:25;14196:2;14234:6;14229:2;14218:9;14214:18;14207:34;14277:3;14272:2;14261:9;14257:18;14250:31;14301:6;14336;14330:13;14367:6;14359;14352:22;14405:3;14394:9;14390:19;14383:26;;14444:2;14436:6;14432:15;14418:29;;14465:1;14475:195;14489:6;14486:1;14483:13;14475:195;;;14554:13;;-1:-1:-1;;;;;14550:39:1;14538:52;;14645:15;;;;14610:12;;;;14586:1;14504:9;14475:195;;;-1:-1:-1;;;;;;;14726:32:1;;;;14721:2;14706:18;;14699:60;-1:-1:-1;;;14790:3:1;14775:19;14768:35;14687:3;13829:980;-1:-1:-1;;;13829:980:1:o;16112:306::-;16200:6;16208;16216;16269:2;16257:9;16248:7;16244:23;16240:32;16237:52;;;16285:1;16282;16275:12;16237:52;16314:9;16308:16;16298:26;;16364:2;16353:9;16349:18;16343:25;16333:35;;16408:2;16397:9;16393:18;16387:25;16377:35;;16112:306;;;;;:::o;16633:245::-;16700:6;16753:2;16741:9;16732:7;16728:23;16724:32;16721:52;;;16769:1;16766;16759:12;16721:52;16801:9;16795:16;16820:28;16842:5;16820:28;:::i;18061:301::-;18190:3;18228:6;18222:13;18274:6;18267:4;18259:6;18255:17;18250:3;18244:37;18336:1;18300:16;;18325:13;;;-1:-1:-1;18300:16:1;18061:301;-1:-1:-1;18061:301:1:o

Swarm Source

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