ETH Price: $3,389.75 (+2.83%)

Token

Ladybot ($Lady)
 

Overview

Max Total Supply

2,000,000 $Lady

Holders

191

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
40,000 $Lady

Value
$0.00
0x0bb85abcd43554628787366d15fd9a885c730ce4
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DividendTokenWithAntibot

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-01
*/

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        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) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                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 {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

pragma solidity ^0.8.0;

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

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 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 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, 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;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _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 {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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);
    }
}

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

library SafeERC20 {
    using Address for address;
    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }
    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 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 {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

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

    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false
        // and not revert is the subcall reverts.

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

library Clones {
    function clone(address implementation) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create(0, 0x09, 0x37)
        }
        require(instance != address(0), "ERC1167: create failed");
    }
    function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
        /// @solidity memory-safe-assembly
        assembly {
            // Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
            // of the `implementation` address with the bytecode before the address.
            mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
            // Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
            mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
            instance := create2(0, 0x09, 0x37, salt)
        }
        require(instance != address(0), "ERC1167: create2 failed");
    }
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt,
        address deployer
    ) internal pure returns (address predicted) {
        /// @solidity memory-safe-assembly
        assembly {
            let ptr := mload(0x40)
            mstore(add(ptr, 0x38), deployer)
            mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
            mstore(add(ptr, 0x14), implementation)
            mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
            mstore(add(ptr, 0x58), salt)
            mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
            predicted := keccak256(add(ptr, 0x43), 0x55)
        }
    }
    function predictDeterministicAddress(
        address implementation,
        bytes32 salt
    ) internal view returns (address predicted) {
        return predictDeterministicAddress(implementation, salt, address(this));
    }
}

pragma solidity >=0.5.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

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

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

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

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

pragma solidity 0.8.19;

interface IUniswapV2Caller {
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        address router,
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        uint256 deadline
    ) external;
}
interface IFee {
    function payFee(
        uint256 _tokenType,
        address creator,
        bool isAntibot,
        address referrer
    ) external payable;
}
interface IGemAntiBot {
    function setTokenOwner(address owner) external;

    function onPreTransferCheck(
        address from,
        address to,
        uint256 amount
    ) external;
}
interface DividendTokenDividendTrackerInterface {
    function initialize(
        address rewardToken_,
        uint256 minimumTokenBalanceForDividends_
    ) external;
    function excludeFromDividends(address account) external;
    function isExcludedFromDividends(address account)
        external
        view
        returns (bool);
    function owner() external view returns (address);
    function updateClaimWait(uint256 newClaimWait) external;
    function claimWait() external view returns (uint256);
    function updateMinimumTokenBalanceForDividends(uint256 amount)
        external;
    function minimumTokenBalanceForDividends() external view returns (uint256);
    function totalDividendsDistributed() external view returns (uint256);
    function withdrawableDividendOf(address _owner)
        external
        view
        returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function getAccount(address _account)
        external
        view
        returns (
            address account,
            int256 index,
            int256 iterationsUntilProcessed,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable
        );
    function getAccountAtIndex(uint256 index)
        external
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        );
    function process(uint256 gas)
        external
        returns (
            uint256,
            uint256,
            uint256
        );
    function processAccount(address payable account, bool automatic)
        external
        returns (bool);
    function getLastProcessedIndex() external view returns (uint256);
    function getNumberOfTokenHolders() external view returns (uint256);
    function setBalance(address payable account, uint256 newBalance)
        external;
    function distributeCAKEDividends(uint256 amount) external;
}
contract DividendTokenWithAntibot is ERC20, Ownable {
    using SafeERC20 for IERC20;
    struct Args {
        string name;
        string symbol;
        uint8 decimals;
        uint256 totalSupply;
        uint256 maxWallet;
        uint256 maxTransactionAmount;
        address rewardToken;
        address mainRouter;
        address marketingWallet;
        address dividendTracker;
        address baseTokenForMarket;        
        uint24 sellLiquidityFee;
        uint24 buyLiquidityFee;
        uint24 sellMarketingFee;
        uint24 buyMarketingFee;
        uint24 sellRewardFee;
        uint24 buyRewardFee;
        uint256 minimumTokenBalanceForDividends;
        address tokenForMarketingFee;
        address feeContract;
        address uniswapV2Caller;
    }
    uint256 private constant MAX = ~uint256(0);
    IUniswapV2Caller public uniswapV2Caller;

    address public tokenForMarketingFee;
    uint8 private _decimals;
    address public baseTokenForMarket;
    address public mainRouter;
    address public mainPair;

    bool private swapping;

    address public dividendTracker;

    address public rewardToken;

    uint256 public swapTokensAtAmount;

    uint24 public sellRewardFee;
    uint24 public buyRewardFee;

    uint24 public sellLiquidityFee;
    uint24 public buyLiquidityFee;

    uint24 public sellMarketingFee;
    uint24 public buyMarketingFee;

    address public marketingWallet;
    uint256 public gasForProcessing;
    uint256 public maxWallet;
    uint256 public maxTransactionAmount;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public isExcludedFromMaxTransactionAmount;
    uint256 private _liquidityFeeTokens;
    uint256 private _marketingFeeTokens;
    address public gemAntiBot;
    bool public antiBotEnabled;
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateDividendTracker(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event UpdateSwapTokensAtAmount(uint256 newSwapTokensAtAmount, uint256 oldSwapTokensAtAmount);
    event SetAutomatedMarketMakerPair(address indexed pair, bool value);
    event UpdateMaxWallet(uint256 newMaxWallet, uint256 oldMaxWallet);
    event UpdateMaxTransactionAmount(uint256 newMaxTransactionAmount, uint256 oldMaxTransactionAmount);

    event MarketingWalletUpdated(
        address indexed newMarketingWallet,
        address indexed oldMarketingWallet
    );
    event TokenForMarketingFeeUpdated(
        address indexed newTokenForMarketingFee,
        address indexed oldTokenForMarketingFee);
    event ExcludedFromMaxTransactionAmount(address indexed account, bool isExcluded);

    event MainRouterUpdated(address mainRouter, address mainPair, address baseTokenForMarket);
    event GasForProcessingUpdated(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SendDividends(uint256 tokensSwapped, uint256 amount);

    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );

    event UpdateLiquidityFee(
        uint24 newSellLiquidityFee,
        uint24 newBuyLiquidityFee,
        uint24 oldSellLiquidityFee,
        uint24 oldBuyLiquidityFee
    );
    event UpdateMarketingFee(
        uint24 newSellMarketingFee,
        uint24 newBuyMarketingFee,
        uint24 oldSellMarketingFee,
        uint24 oldBuyMarketingFee
    );
    event UpdateRewardFee(
        uint24 newSellRewardFee,
        uint24 newBuyRewardFee,
        uint24 oldSellRewardFee,
        uint24 oldBuyRewardFee
    );  

    constructor(
        Args memory args,
        address[] memory autoApproveAddressList,
        address _gemAntiBot,
        address referrer
    ) payable ERC20(args.name, args.symbol) {
        IFee(args.feeContract).payFee{value: msg.value}(3, _msgSender(), true, referrer);   
        uniswapV2Caller = IUniswapV2Caller(args.uniswapV2Caller);
        gemAntiBot = _gemAntiBot;
        IGemAntiBot(gemAntiBot).setTokenOwner(_msgSender());
        antiBotEnabled = true;
        _decimals = args.decimals;
        rewardToken = args.rewardToken;
        marketingWallet = args.marketingWallet;
        emit MarketingWalletUpdated(marketingWallet, address(0));
        baseTokenForMarket=args.baseTokenForMarket;
        sellLiquidityFee = args.sellLiquidityFee;
        buyLiquidityFee = args.buyLiquidityFee;
        emit UpdateLiquidityFee(
            sellLiquidityFee,
            buyLiquidityFee,
            0,
            0
        );
        sellMarketingFee = args.sellMarketingFee;
        buyMarketingFee = args.buyMarketingFee;
        emit UpdateMarketingFee(
            sellMarketingFee,
            buyMarketingFee,
            0,
            0
        );
        sellRewardFee = args.sellRewardFee;
        buyRewardFee = args.buyRewardFee;
        emit UpdateRewardFee(
            sellRewardFee,
            buyRewardFee,
            0,
            0
        );  
        require(sellLiquidityFee+sellMarketingFee+sellRewardFee <= 200000, "sell fee <= 20%");
        require(buyLiquidityFee+buyMarketingFee+buyRewardFee <= 200000, "buy fee <= 20%");
        if(args.tokenForMarketingFee!=args.rewardToken && args.tokenForMarketingFee!=args.baseTokenForMarket){
            tokenForMarketingFee=address(this);
        }else {
            tokenForMarketingFee=args.tokenForMarketingFee;
        }
        emit TokenForMarketingFeeUpdated(tokenForMarketingFee, address(0));
        swapTokensAtAmount = args.totalSupply/10000;
        emit UpdateSwapTokensAtAmount(swapTokensAtAmount, 0);
        gasForProcessing = 300000;
        emit GasForProcessingUpdated(gasForProcessing, 0);

        dividendTracker = payable(Clones.clone(args.dividendTracker));
        emit UpdateDividendTracker(
            dividendTracker,
            address(0)
        );
        DividendTokenDividendTrackerInterface(dividendTracker).initialize(
            rewardToken,
            args.minimumTokenBalanceForDividends
        );
        require(args.maxTransactionAmount>=args.totalSupply / 10000, "maxTransactionAmount >= totalSupply / 10000");
        require(args.maxWallet>=args.totalSupply / 10000, "maxWallet >= totalSupply / 10000");
        maxWallet=args.maxWallet;
        emit UpdateMaxWallet(maxWallet, 0);
        maxTransactionAmount=args.maxTransactionAmount;
        emit UpdateMaxTransactionAmount(maxTransactionAmount, 0);
        mainRouter = args.mainRouter;
        if(baseTokenForMarket != IUniswapV2Router02(mainRouter).WETH()){            
            IERC20(baseTokenForMarket).safeApprove(mainRouter, MAX);            
        }
        _approve(address(this), address(uniswapV2Caller), MAX);
        _approve(address(this), mainRouter, MAX);
        for(uint256 i=0;i<autoApproveAddressList.length;i++){
            _approve(_msgSender(), autoApproveAddressList[i], MAX);
            _isExcludedFromFees[autoApproveAddressList[i]] = true; 
            isExcludedFromMaxTransactionAmount[autoApproveAddressList[i]]=true;
        }
        mainPair = IUniswapV2Factory(IUniswapV2Router02(mainRouter).factory())
            .createPair(address(this), baseTokenForMarket);
        _setAutomatedMarketMakerPair(mainPair, true);
        emit MainRouterUpdated(mainRouter, mainPair, baseTokenForMarket);
        DividendTokenDividendTrackerInterface(dividendTracker).excludeFromDividends(dividendTracker);
        DividendTokenDividendTrackerInterface(dividendTracker).excludeFromDividends(address(this));
        DividendTokenDividendTrackerInterface(dividendTracker).excludeFromDividends(owner());
        DividendTokenDividendTrackerInterface(dividendTracker).excludeFromDividends(address(0xdead));
        DividendTokenDividendTrackerInterface(dividendTracker).excludeFromDividends(mainRouter);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[marketingWallet] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(0xdead)] = true; 
        isExcludedFromMaxTransactionAmount[address(0xdead)]=true;
        isExcludedFromMaxTransactionAmount[address(this)]=true;
        isExcludedFromMaxTransactionAmount[marketingWallet]=true;
        isExcludedFromMaxTransactionAmount[owner()]=true;     
        _mint(owner(), args.totalSupply);
    }

    function enableAntibot(bool enabled_) external onlyOwner {
        antiBotEnabled = enabled_;
    }
    receive() external payable {}

    function updateMainPair(
        address _mainRouter,
        address _baseTokenForMarket
    ) external onlyOwner
    {
        baseTokenForMarket = _baseTokenForMarket;
        if(mainRouter != _mainRouter){
            _approve(address(this), _mainRouter, MAX);
            if (!DividendTokenDividendTrackerInterface(dividendTracker).isExcludedFromDividends(_mainRouter))
                DividendTokenDividendTrackerInterface(dividendTracker).excludeFromDividends(_mainRouter);
            mainRouter = _mainRouter;
        } 
        mainPair = IUniswapV2Factory(IUniswapV2Router02(mainRouter).factory()).createPair(
            address(this),
            baseTokenForMarket
        );
        if(baseTokenForMarket != IUniswapV2Router02(mainRouter).WETH()){            
            IERC20(baseTokenForMarket).safeApprove(mainRouter, MAX);
        }
        
        emit MainRouterUpdated(mainRouter, mainPair, baseTokenForMarket);
        _setAutomatedMarketMakerPair(mainPair, true);

    }

    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        require(amount > 0, "swapTokensAtAmount > 0");
        emit UpdateSwapTokensAtAmount(amount, swapTokensAtAmount);
        swapTokensAtAmount = amount;        
    }

    function updateDividendTracker(address newAddress) public onlyOwner {
        require(
            newAddress != dividendTracker,
            "The dividend tracker already has that address"
        );

        address newDividendTracker =payable(newAddress);

        require(
            DividendTokenDividendTrackerInterface(newDividendTracker).owner() == address(this),
            "The new dividend tracker must be owned by the DIVIDENEDTOKEN token contract"
        );

        DividendTokenDividendTrackerInterface(newDividendTracker).excludeFromDividends(newDividendTracker);
        DividendTokenDividendTrackerInterface(newDividendTracker).excludeFromDividends(address(this));
        DividendTokenDividendTrackerInterface(newDividendTracker).excludeFromDividends(owner());
        DividendTokenDividendTrackerInterface(newDividendTracker).excludeFromDividends(mainRouter);
        DividendTokenDividendTrackerInterface(newDividendTracker).excludeFromDividends(mainPair);

        emit UpdateDividendTracker(newAddress, dividendTracker);

        dividendTracker = newDividendTracker;
    }

    function updateMaxWallet(uint256 _maxWallet) external onlyOwner {
        require(_maxWallet>=totalSupply() / 10000, "maxWallet >= total supply / 10000");
        emit UpdateMaxWallet(_maxWallet, maxWallet);
        maxWallet = _maxWallet;        
    }

    function updateMaxTransactionAmount(uint256 _maxTransactionAmount)
        external
        onlyOwner
    {
        require(_maxTransactionAmount>=totalSupply() / 10000, "maxTransactionAmount >= total supply / 10000");
        emit UpdateMaxTransactionAmount(_maxTransactionAmount, maxTransactionAmount);
        maxTransactionAmount = _maxTransactionAmount;        
    }   

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(_isExcludedFromFees[account] != excluded, "already");
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

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

    function setMarketingWallet(address payable wallet) external onlyOwner {
        require(marketingWallet!=wallet, "already");
        emit MarketingWalletUpdated(marketingWallet, wallet);
        marketingWallet = wallet;        
    }

    function updateTokenForMarketingFee(address _tokenForMarketingFee) external onlyOwner {        
        if(_tokenForMarketingFee!=rewardToken && _tokenForMarketingFee!=baseTokenForMarket){
            _tokenForMarketingFee=address(this);
        }
        require(tokenForMarketingFee!=_tokenForMarketingFee, "already");
        emit TokenForMarketingFeeUpdated(_tokenForMarketingFee, tokenForMarketingFee);
        tokenForMarketingFee = _tokenForMarketingFee; 
    }

    function updateLiquidityFee(
        uint24 _sellLiquidityFee,
        uint24 _buyLiquidityFee
    ) external onlyOwner {
        require(
            _sellLiquidityFee+sellMarketingFee+sellRewardFee <= 200000,
            "sell fee <= 20%"
        );
        require(
            _buyLiquidityFee+buyMarketingFee+buyRewardFee <= 200000,
            "buy fee <= 20%"
        );
        emit UpdateLiquidityFee(
            _sellLiquidityFee,
            _buyLiquidityFee,
            sellLiquidityFee,
            buyLiquidityFee
        );
        sellLiquidityFee = _sellLiquidityFee;
        buyLiquidityFee = _buyLiquidityFee;   
    }

    function updateMarketingFee(
        uint24 _sellMarketingFee,
        uint24 _buyMarketingFee
    ) external onlyOwner {
        require(
            _sellMarketingFee+sellLiquidityFee+sellRewardFee <= 200000,
            "sell fee <= 20%"
        );
        require(
            _buyMarketingFee+buyLiquidityFee+buyRewardFee <= 200000,
            "buy fee <= 20%"
        );       
        emit UpdateMarketingFee(
            _sellMarketingFee,
            _buyMarketingFee,
            sellMarketingFee,
            buyMarketingFee
        );  
        sellMarketingFee = _sellMarketingFee;
        buyMarketingFee = _buyMarketingFee;        
    }

    function updateRewardFee(
        uint24 _sellRewardFee,
        uint24 _buyRewardFee
    ) external onlyOwner {
        require(
            _sellRewardFee+sellLiquidityFee+sellMarketingFee <= 200000,
            "sell fee <= 20%"
        );
        require(
            _buyRewardFee+buyLiquidityFee+buyMarketingFee <= 200000,
            "buy fee <= 20%"
        );
        emit UpdateRewardFee(
            _sellRewardFee, 
            _buyRewardFee,
            sellRewardFee, 
            buyRewardFee);
        sellRewardFee = _sellRewardFee;
        buyRewardFee = _buyRewardFee;        
    }


    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != mainPair,
            "The main pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {        
        automatedMarketMakerPairs[pair] = value;
        isExcludedFromMaxTransactionAmount[pair] = value;
        if (value && !DividendTokenDividendTrackerInterface(dividendTracker).isExcludedFromDividends(pair)) {
            DividendTokenDividendTrackerInterface(dividendTracker).excludeFromDividends(pair);
        }

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function excludeFromMaxTransactionAmount(address account, bool isEx)
        external
        onlyOwner
    {
        require(isExcludedFromMaxTransactionAmount[account]!=isEx, "already");
        isExcludedFromMaxTransactionAmount[account] = isEx;
        emit ExcludedFromMaxTransactionAmount(account, isEx);
    }
    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(
            newValue >= 200000 && newValue <= 500000,
            "gasForProcessing must be between 200,000 and 500,000"
        );
        require(
            newValue != gasForProcessing,
            "Cannot update gasForProcessing to same value"
        );
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    function updateClaimWait(uint256 claimWait) external onlyOwner {
        DividendTokenDividendTrackerInterface(dividendTracker).updateClaimWait(claimWait);
    }

    function getClaimWait() external view returns (uint256) {
        return DividendTokenDividendTrackerInterface(dividendTracker).claimWait();
    }

    function updateMinimumTokenBalanceForDividends(uint256 amount)
        external
        onlyOwner
    {
        DividendTokenDividendTrackerInterface(dividendTracker).updateMinimumTokenBalanceForDividends(amount);
    }

    function getMinimumTokenBalanceForDividends()
        external
        view
        returns (uint256)
    {
        return DividendTokenDividendTrackerInterface(dividendTracker).minimumTokenBalanceForDividends();
    }

    function getTotalDividendsDistributed() external view returns (uint256) {
        return DividendTokenDividendTrackerInterface(dividendTracker).totalDividendsDistributed();
    }

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

    function withdrawableDividendOf(address account)
        public
        view
        returns (uint256)
    {
        return DividendTokenDividendTrackerInterface(dividendTracker).withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account)
        public
        view
        returns (uint256)
    {
        return DividendTokenDividendTrackerInterface(dividendTracker).balanceOf(account);
    }

    function excludeFromDividends(address account) external onlyOwner {
        DividendTokenDividendTrackerInterface(dividendTracker).excludeFromDividends(account);
    }

    function isExcludedFromDividends(address account)
        public
        view
        returns (bool)
    {
        return DividendTokenDividendTrackerInterface(dividendTracker).isExcludedFromDividends(account);
    }

    function getAccountDividendsInfo(address account)
        external
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return DividendTokenDividendTrackerInterface(dividendTracker).getAccount(account);
    }

    function getAccountDividendsInfoAtIndex(uint256 index)
        external
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return DividendTokenDividendTrackerInterface(dividendTracker).getAccountAtIndex(index);
    }

    function processDividendTracker(uint256 gas) external {
        (
            uint256 iterations,
            uint256 claims,
            uint256 lastProcessedIndex
        ) = DividendTokenDividendTrackerInterface(dividendTracker).process(gas);
        emit ProcessedDividendTracker(
            iterations,
            claims,
            lastProcessedIndex,
            false,
            gas,
            msg.sender
        );
    }

    function claim() external {
        DividendTokenDividendTrackerInterface(dividendTracker).processAccount(payable(msg.sender), false);
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return DividendTokenDividendTrackerInterface(dividendTracker).getLastProcessedIndex();
    }

    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return DividendTokenDividendTrackerInterface(dividendTracker).getNumberOfTokenHolders();
    }

    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");
        require(amount>0, "ERC20: transfer zero amount");
        if (antiBotEnabled) {
            IGemAntiBot(gemAntiBot).onPreTransferCheck(from, to, amount);
        }
        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) {
            swapping = true;
            if(_marketingFeeTokens>0)
                swapAndSendToFee(_marketingFeeTokens);
            if(_liquidityFeeTokens>0)
                swapAndLiquify(_liquidityFeeTokens);

            uint256 sellTokens = balanceOf(address(this));
            if(sellTokens>0)
                swapAndSendDividends(sellTokens);
            _marketingFeeTokens=0;
            _liquidityFeeTokens=0;
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        uint256 _liquidityFee;
        uint256 _marketingFee;
        uint256 _rewardFee;
        if (takeFee) {
            if (automatedMarketMakerPairs[from]) {
                _rewardFee = amount*buyRewardFee/1000000;
                _liquidityFee = amount*buyLiquidityFee/1000000;
                _marketingFee = amount*buyMarketingFee/1000000;
            }
            else if (automatedMarketMakerPairs[to]) {
                _rewardFee = amount*sellRewardFee/1000000;
                _liquidityFee = amount*sellLiquidityFee/1000000;
                _marketingFee = amount*sellMarketingFee/1000000;
            }
            _liquidityFeeTokens = _liquidityFeeTokens+_liquidityFee;
            _marketingFeeTokens = _marketingFeeTokens+_marketingFee;
            uint256 _feeTotal=_rewardFee+_liquidityFee+_marketingFee;
            amount=amount-_feeTotal;
            if(_feeTotal>0)
                super._transfer(from, address(this), _feeTotal);
        }
        
        super._transfer(from, to, amount);

        try
            DividendTokenDividendTrackerInterface(dividendTracker).setBalance(payable(from), balanceOf(from))
        {} catch {}
        try DividendTokenDividendTrackerInterface(dividendTracker).setBalance(payable(to), balanceOf(to)) {} catch {}

        if (!swapping) {
            if (!isExcludedFromMaxTransactionAmount[from]) {
                require(
                    amount <= maxTransactionAmount,
                    "ERC20: exceeds transfer limit"
                );
            }
            if (!isExcludedFromMaxTransactionAmount[to]) {
                require(
                    balanceOf(to) <= maxWallet,
                    "ERC20: exceeds max wallet limit"
                );
            }
            uint256 gas = gasForProcessing;

            try DividendTokenDividendTrackerInterface(dividendTracker).process(gas) returns (
                uint256 iterations,
                uint256 claims,
                uint256 lastProcessedIndex
            ) {
                emit ProcessedDividendTracker(
                    iterations,
                    claims,
                    lastProcessedIndex,
                    true,
                    gas,
                    msg.sender
                );
            } catch {}
        }
    }

    function swapAndSendToFee(uint256 tokens) private {
        if(tokenForMarketingFee==rewardToken){
            uint256 initialCAKEBalance = IERC20(rewardToken).balanceOf(
                address(this)
            );
            swapTokensForCake(tokens);
            uint256 newBalance = (IERC20(rewardToken).balanceOf(address(this)))-(
                initialCAKEBalance
            );
            IERC20(rewardToken).safeTransfer(marketingWallet, newBalance);
        }else if(tokenForMarketingFee==baseTokenForMarket){
            uint256 initialBalance = baseTokenForMarket==IUniswapV2Router02(mainRouter).WETH() ? address(this).balance 
                : IERC20(baseTokenForMarket).balanceOf(address(this));
            swapTokensForBaseToken(tokens);
            uint256 newBalance = baseTokenForMarket==IUniswapV2Router02(mainRouter).WETH() ? address(this).balance-initialBalance
                : IERC20(baseTokenForMarket).balanceOf(address(this))-initialBalance;
            if(baseTokenForMarket==IUniswapV2Router02(mainRouter).WETH()){
                (bool success, )=address(marketingWallet).call{value: newBalance}("");              
            }else{
                IERC20(baseTokenForMarket).safeTransfer(marketingWallet, newBalance);
            } 
        }else{
            _transfer(address(this), marketingWallet, tokens);
        }
        
    }

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

        uint256 initialBalance = baseTokenForMarket==IUniswapV2Router02(mainRouter).WETH() ? address(this).balance 
            : IERC20(baseTokenForMarket).balanceOf(address(this));

        swapTokensForBaseToken(half); 
        uint256 newBalance = baseTokenForMarket==IUniswapV2Router02(mainRouter).WETH() ? address(this).balance-initialBalance
            : IERC20(baseTokenForMarket).balanceOf(address(this))-initialBalance;

        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForBaseToken(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = baseTokenForMarket;

        if (path[1] == IUniswapV2Router02(mainRouter).WETH()){
            IUniswapV2Router02(mainRouter).swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0, // accept any amount of BaseToken
                path,
                address(this),
                block.timestamp
            );
        }else{
            uniswapV2Caller.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                    mainRouter,
                    tokenAmount,
                    0, // accept any amount of BaseToken
                    path,
                    block.timestamp
                );
        }
    }

    function swapTokensForCake(uint256 tokenAmount) private {
        if(baseTokenForMarket!=rewardToken){
            address[] memory path = new address[](3);
            path[0] = address(this);
            path[1] = baseTokenForMarket;
            path[2] = rewardToken;
            IUniswapV2Router02(mainRouter).swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokenAmount,
                0,
                path,
                address(this),
                block.timestamp
            );
        }else{
            address[] memory path = new address[](2);
            path[0] = address(this);
            path[1] = rewardToken;
            uniswapV2Caller.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                mainRouter,
                tokenAmount,
                0, // accept any amount of BaseToken
                path,
                block.timestamp
            );            
        }
        
    }

    function addLiquidity(uint256 tokenAmount, uint256 baseTokenAmount) private {
        if (baseTokenForMarket == IUniswapV2Router02(mainRouter).WETH()) 
            IUniswapV2Router02(mainRouter).addLiquidityETH{value: baseTokenAmount}(
                address(this),
                tokenAmount,
                0, // slippage is unavoidable
                0, // slippage is unavoidable
                address(0xdead),
                block.timestamp
            );
        else{
            IUniswapV2Router02(mainRouter).addLiquidity(
                address(this),
                baseTokenForMarket,
                tokenAmount,
                baseTokenAmount,
                0,
                0,
                address(0xdead),
                block.timestamp
            );    
        }
                
    }

    function swapAndSendDividends(uint256 tokens) private {
        swapTokensForCake(tokens);
        uint256 dividends = IERC20(rewardToken).balanceOf(address(this));
        IERC20(rewardToken).safeTransfer(
            dividendTracker,
            dividends
        );
        DividendTokenDividendTrackerInterface(dividendTracker).distributeCAKEDividends(dividends);
        emit SendDividends(tokens, dividends);
    }
    function withdrawETH() external onlyOwner {
        (bool success, )=address(owner()).call{value: address(this).balance}("");
        require(success, "Failed in withdrawal");
    }
    function withdrawToken(address token) external onlyOwner{
        require(address(this) != token, "Not allowed");
        IERC20(token).safeTransfer(owner(), IERC20(token).balanceOf(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint8","name":"decimals","type":"uint8"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"uint256","name":"maxTransactionAmount","type":"uint256"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"address","name":"mainRouter","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"},{"internalType":"address","name":"dividendTracker","type":"address"},{"internalType":"address","name":"baseTokenForMarket","type":"address"},{"internalType":"uint24","name":"sellLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"buyLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"sellMarketingFee","type":"uint24"},{"internalType":"uint24","name":"buyMarketingFee","type":"uint24"},{"internalType":"uint24","name":"sellRewardFee","type":"uint24"},{"internalType":"uint24","name":"buyRewardFee","type":"uint24"},{"internalType":"uint256","name":"minimumTokenBalanceForDividends","type":"uint256"},{"internalType":"address","name":"tokenForMarketingFee","type":"address"},{"internalType":"address","name":"feeContract","type":"address"},{"internalType":"address","name":"uniswapV2Caller","type":"address"}],"internalType":"struct DividendTokenWithAntibot.Args","name":"args","type":"tuple"},{"internalType":"address[]","name":"autoApproveAddressList","type":"address[]"},{"internalType":"address","name":"_gemAntiBot","type":"address"},{"internalType":"address","name":"referrer","type":"address"}],"stateMutability":"payable","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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"mainRouter","type":"address"},{"indexed":false,"internalType":"address","name":"mainPair","type":"address"},{"indexed":false,"internalType":"address","name":"baseTokenForMarket","type":"address"}],"name":"MainRouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newMarketingWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldMarketingWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newTokenForMarketingFee","type":"address"},{"indexed":true,"internalType":"address","name":"oldTokenForMarketingFee","type":"address"}],"name":"TokenForMarketingFeeUpdated","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"newSellLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"newBuyLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldSellLiquidityFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldBuyLiquidityFee","type":"uint24"}],"name":"UpdateLiquidityFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"newSellMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"newBuyMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldSellMarketingFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldBuyMarketingFee","type":"uint24"}],"name":"UpdateMarketingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxTransactionAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxTransactionAmount","type":"uint256"}],"name":"UpdateMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldMaxWallet","type":"uint256"}],"name":"UpdateMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint24","name":"newSellRewardFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"newBuyRewardFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldSellRewardFee","type":"uint24"},{"indexed":false,"internalType":"uint24","name":"oldBuyRewardFee","type":"uint24"}],"name":"UpdateRewardFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newSwapTokensAtAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"oldSwapTokensAtAmount","type":"uint256"}],"name":"UpdateSwapTokensAtAmount","type":"event"},{"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":[],"name":"antiBotEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenForMarket","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","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":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled_","type":"bool"}],"name":"enableAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gemAntiBot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountDividendsInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getAccountDividendsInfoAtIndex","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getClaimWait","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDividends","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":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint24","name":"","type":"uint24"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","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":[],"name":"tokenForMarketingFee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uniswapV2Caller","outputs":[{"internalType":"contract IUniswapV2Caller","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_sellLiquidityFee","type":"uint24"},{"internalType":"uint24","name":"_buyLiquidityFee","type":"uint24"}],"name":"updateLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mainRouter","type":"address"},{"internalType":"address","name":"_baseTokenForMarket","type":"address"}],"name":"updateMainPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_sellMarketingFee","type":"uint24"},{"internalType":"uint24","name":"_buyMarketingFee","type":"uint24"}],"name":"updateMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransactionAmount","type":"uint256"}],"name":"updateMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint24","name":"_sellRewardFee","type":"uint24"},{"internalType":"uint24","name":"_buyRewardFee","type":"uint24"}],"name":"updateRewardFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenForMarketingFee","type":"address"}],"name":"updateTokenForMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526040516200693838038062006938833981016040819052620000269162001953565b8351602085015160036200003b838262001c1d565b5060046200004a828262001c1d565b505050620000676200006162000f6160201b60201c565b62000f65565b6102608401516001600160a01b031663a5970b48346003336040516001600160e01b031960e086901b16815260048101929092526001600160a01b03908116602483015260016044830152851660648201526084016000604051808303818588803b158015620000d657600080fd5b505af1158015620000eb573d6000803e3d6000fd5b50505050610280850151600680546001600160a01b039283166001600160a01b03199182161790915560178054928616929091168217905590506318e02bd9336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200016d57600080fd5b505af115801562000182573d6000803e3d6000fd5b505060178054600160a01b60ff60a01b1991821681179092556040888101516007805490931660ff90911690930292909217905560c0870151600c80546001600160a01b03199081166001600160a01b0393841617909155610100890151600f8054909216921691821790559051600093509091507f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc67908390a3610140840151600880546001600160a01b0319166001600160a01b03909216919091179055610160840151600e805461018087015165ffffffffffff60301b19909116660100000000000062ffffff948516810262ffffff60481b1916919091176901000000000000000000928516830217928390556040805191840485168252919092049092166020820152600091810182905260608101919091527fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19060800160405180910390a16101a0840151600e80546101c087015165ffffffffffff60601b199091166c0100000000000000000000000062ffffff948516810262ffffff60781b191691909117600160781b928516830217928390556040805191840485168252919092049092166020820152600091810182905260608101919091527f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859060800160405180910390a16101e0840151600e805461020087015162ffffff93841665ffffffffffff1990921691909117630100000091841682021791829055604080518385168152919092049092166020830152600090820181905260608201527f2e7d9780ec398c47872eab5651ba43f0fa44ffed738321577e0db663fe8a05a59060800160405180910390a1600e5462030d409062ffffff8082169162000448916c010000000000000000000000008204811691660100000000000090041662001cff565b62000454919062001cff565b62ffffff1611156200049f5760405162461bcd60e51b815260206004820152600f60248201526e73656c6c20666565203c3d2032302560881b60448201526064015b60405180910390fd5b600e5462030d409062ffffff63010000008204811691620004d891600160781b8204811691690100000000000000000090041662001cff565b620004e4919062001cff565b62ffffff1611156200052a5760405162461bcd60e51b815260206004820152600e60248201526d62757920666565203c3d2032302560901b604482015260640162000496565b8360c001516001600160a01b03168461024001516001600160a01b0316141580156200057257508361014001516001600160a01b03168461024001516001600160a01b031614155b156200059057600780546001600160a01b03191630179055620005b6565b610240840151600780546001600160a01b0319166001600160a01b039092169190911790555b6007546040516000916001600160a01b0316907fe2b5774aa87aa100c6ec40513e7bc1d6f3c22e7abfdcd1e87401c3c791bde9ae908390a3612710846060015162000602919062001d25565b600d81905560408051918252600060208301527f1d3afd1a2942d06995fdb024306050a7b24ad00572be70ce8b1bea325780d28b910160405180910390a1620493e06010819055604051600091907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db7908390a3610120840151620006869062000fb7565b600b80546001600160a01b0319166001600160a01b03929092169182179055604051600091907f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a8908390a3600b54600c5461022086015160405163cd6dc68760e01b81526001600160a01b039283166004820152602481019190915291169063cd6dc68790604401600060405180830381600087803b1580156200072957600080fd5b505af11580156200073e573d6000803e3d6000fd5b50505050612710846060015162000756919062001d25565b8460a001511015620007bf5760405162461bcd60e51b815260206004820152602b60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c53757060448201526a0706c79202f2031303030360ac1b606482015260840162000496565b6127108460600151620007d3919062001d25565b84608001511015620008285760405162461bcd60e51b815260206004820181905260248201527f6d617857616c6c6574203e3d20746f74616c537570706c79202f203130303030604482015260640162000496565b6080840151601181905560408051918252600060208301527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a160a0840151601281905560408051918252600060208301527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a160e0840151600980546001600160a01b0319166001600160a01b039092169182179055604080516315ab88c960e31b8152905163ad5c4648916004808201926020929091908290030181865afa1580156200090d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000933919062001d48565b6008546001600160a01b039081169116146200096a576009546008546200096a916001600160a01b0391821691166000196200105a565b600654620009869030906001600160a01b0316600019620011a9565b600954620009a29030906001600160a01b0316600019620011a9565b60005b835181101562000a9c57620009e033858381518110620009c957620009c962001d6d565b6020026020010151600019620011a960201b60201c565b600160136000868481518110620009fb57620009fb62001d6d565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060016014600086848151811062000a555762000a5562001d6d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558062000a938162001d83565b915050620009a5565b50600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000af1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b17919062001d48565b6008546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801562000b69573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b8f919062001d48565b600a80546001600160a01b0319166001600160a01b0392909216918217905562000bbb906001620012d1565b600954600a54600854604080516001600160a01b039485168152928416602084015292168183015290517f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69181900360600190a1600b5460405163031e79db60e41b81526001600160a01b0390911660048201819052906331e79db090602401600060405180830381600087803b15801562000c5657600080fd5b505af115801562000c6b573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b15801562000cb557600080fd5b505af115801562000cca573d6000803e3d6000fd5b5050600b546001600160a01b031691506331e79db0905062000cf46005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801562000d3657600080fd5b505af115801562000d4b573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b15801562000d9757600080fd5b505af115801562000dac573d6000803e3d6000fd5b5050600b5460095460405163031e79db60e41b81526001600160a01b039182166004820152911692506331e79db09150602401600060405180830381600087803b15801562000dfa57600080fd5b505af115801562000e0f573d6000803e3d6000fd5b5050505060016013600062000e296200143e60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600f805483168252601385528382208054871660019081179091553080845285842080548916831790557f2264e2d7bacabe6058f5009f42467b9be28015e7760f87409562384c94ac271c80548916831790556014968790527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00805489168317905583528483208054881682179055905490921681529182208054909416811790935562000f0d6005546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905562000f5762000f4c6005546001600160a01b031690565b60608601516200144d565b5050505062001e4c565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008260601b60e81c176000526e5af43d82803e903d91602b57fd5bf38260781b17602052603760096000f090506001600160a01b038116620010555760405162461bcd60e51b815260206004820152601660248201527f455243313136373a20637265617465206661696c656400000000000000000000604482015260640162000496565b919050565b801580620010d85750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa158015620010b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620010d6919062001d9f565b155b6200114c5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e636500000000000000000000606482015260840162000496565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620011a49185916200151016565b505050565b6001600160a01b0383166200120d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000496565b6001600160a01b038216620012705760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000496565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216600090815260186020908152604080832080548515801560ff199283168117909355601490945291909320805490911690921790915581906200138c5750600b5460405163c705c56960e01b81526001600160a01b0384811660048301529091169063c705c56990602401602060405180830381865afa15801562001364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200138a919062001db9565b155b15620013f457600b5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b158015620013da57600080fd5b505af1158015620013ef573d6000803e3d6000fd5b505050505b816001600160a01b03167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab8260405162001432911515815260200190565b60405180910390a25050565b6005546001600160a01b031690565b6001600160a01b038216620014a55760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000496565b8060026000828254620014b9919062001ddd565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564908201526000906200155f906001600160a01b038516908490620015e4565b90508051600014806200158357508080602001905181019062001583919062001db9565b620011a45760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000496565b6060620015f58484600085620015fd565b949350505050565b606082471015620016605760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000496565b600080866001600160a01b031685876040516200167e919062001df9565b60006040518083038185875af1925050503d8060008114620016bd576040519150601f19603f3d011682016040523d82523d6000602084013e620016c2565b606091505b509092509050620016d687838387620016e1565b979650505050505050565b60608315620017555782516000036200174d576001600160a01b0385163b6200174d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000496565b5081620015f5565b620015f583838151156200176c5781518083602001fd5b8060405162461bcd60e51b815260040162000496919062001e17565b634e487b7160e01b600052604160045260246000fd5b6040516102a081016001600160401b0381118282101715620017c457620017c462001788565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620017f557620017f562001788565b604052919050565b60005b838110156200181a57818101518382015260200162001800565b50506000910152565b600082601f8301126200183557600080fd5b81516001600160401b0381111562001851576200185162001788565b62001866601f8201601f1916602001620017ca565b8181528460208386010111156200187c57600080fd5b620015f5826020830160208701620017fd565b805160ff811681146200105557600080fd5b80516001600160a01b03811681146200105557600080fd5b805162ffffff811681146200105557600080fd5b600082601f830112620018df57600080fd5b815160206001600160401b03821115620018fd57620018fd62001788565b8160051b6200190e828201620017ca565b92835284810182019282810190878511156200192957600080fd5b83870192505b84831015620016d6576200194383620018a1565b825291830191908301906200192f565b600080600080608085870312156200196a57600080fd5b84516001600160401b03808211156200198257600080fd5b908601906102a082890312156200199857600080fd5b620019a26200179e565b825182811115620019b257600080fd5b620019c08a82860162001823565b825250602083015182811115620019d657600080fd5b620019e48a82860162001823565b602083015250620019f8604084016200188f565b6040820152606083015160608201526080830151608082015260a083015160a082015262001a2960c08401620018a1565b60c082015262001a3c60e08401620018a1565b60e082015261010062001a51818501620018a1565b9082015261012062001a65848201620018a1565b9082015261014062001a79848201620018a1565b9082015261016062001a8d848201620018b9565b9082015261018062001aa1848201620018b9565b908201526101a062001ab5848201620018b9565b908201526101c062001ac9848201620018b9565b908201526101e062001add848201620018b9565b9082015261020062001af1848201620018b9565b90820152610220838101519082015261024062001b10818501620018a1565b9082015261026062001b24848201620018a1565b9082015261028062001b38848201620018a1565b90820152602088015190965091508082111562001b5457600080fd5b5062001b6387828801620018cd565b93505062001b7460408601620018a1565b915062001b8460608601620018a1565b905092959194509250565b600181811c9082168062001ba457607f821691505b60208210810362001bc557634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620011a457600081815260208120601f850160051c8101602086101562001bf45750805b601f850160051c820191505b8181101562001c155782815560010162001c00565b505050505050565b81516001600160401b0381111562001c395762001c3962001788565b62001c518162001c4a845462001b8f565b8462001bcb565b602080601f83116001811462001c89576000841562001c705750858301515b600019600386901b1c1916600185901b17855562001c15565b600085815260208120601f198616915b8281101562001cba5788860151825594840194600190910190840162001c99565b508582101562001cd95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b62ffffff81811683821601908082111562001d1e5762001d1e62001ce9565b5092915050565b60008262001d4357634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121562001d5b57600080fd5b62001d6682620018a1565b9392505050565b634e487b7160e01b600052603260045260246000fd5b60006001820162001d985762001d9862001ce9565b5060010190565b60006020828403121562001db257600080fd5b5051919050565b60006020828403121562001dcc57600080fd5b8151801515811462001d6657600080fd5b8082018082111562001df35762001df362001ce9565b92915050565b6000825162001e0d818460208701620017fd565b9190910192915050565b602081526000825180602084015262001e38816040850160208701620017fd565b601f01601f19169190910160400192915050565b614adc8062001e5c6000396000f3fe6080604052600436106103fe5760003560e01c80639213691311610213578063d5bf72b711610123578063ec44adc8116100ab578063f2fde38b1161007a578063f2fde38b14610c78578063f637434214610c98578063f7c618c114610cbb578063f8b45b0514610cdb578063fe49fc4114610cf157600080fd5b8063ec44adc814610bf5578063f0a568c014610c15578063f11a24d314610c35578063f27fd25414610c5857600080fd5b8063e086e5ec116100f2578063e086e5ec14610b65578063e2f4560514610b7a578063e7841ec014610b90578063e9481eee14610ba5578063e98030c714610bd557600080fd5b8063d5bf72b714610ae8578063d8c6404b14610b08578063dd62ed3e14610b29578063de0aad5314610b4957600080fd5b8063aa498023116101a6578063bdd4f29f11610175578063bdd4f29f14610a5d578063c024666814610a72578063c705c56914610a92578063c8c8ebe414610ab2578063cf188ad014610ac857600080fd5b8063aa49802314610988578063ad56c13c146109a8578063afa4f3b214610a0d578063b62496f514610a2d57600080fd5b8063a26579ad116101e2578063a26579ad14610913578063a457c2d714610928578063a8b9d24014610948578063a9059cbb1461096857600080fd5b806392136913146108a557806395d89b41146108c85780639a7a23d6146108dd5780639c1b8af5146108fd57600080fd5b80635d098b381161030e57806377ec7449116102a157806385af30c51161027057806385af30c514610807578063871c128d1461082757806388bdd9be1461084757806389476069146108675780638da5cb5b1461088757600080fd5b806377ec7449146107845780637bce5a04146107a45780637c75ad3a146107c757806382685df5146107e757600080fd5b8063700bb191116102dd578063700bb191146106f957806370a0823114610719578063715018a61461074f57806375f0a8741461076457600080fd5b80635d098b381461068457806364b0f653146106a45780636843cd84146106b95780636c516a70146106d957600080fd5b80632c1f521611610391578063395093511161036057806339509351146105d65780633ad3e6ff146105f657806348a5317e146106165780634e71d92d146106365780634fbee1931461064b57600080fd5b80632c1f52161461053d57806330bb4cff14610575578063313ce5671461058a57806331e79db0146105b657600080fd5b806318160ddd116103cd57806318160ddd146104be5780631c499ab0146104dd57806323b872dd146104fd5780632ae2f1211461051d57600080fd5b806306fdde031461040a578063095ea7b3146104355780630cfe2f3f146104655780630dcb2e891461049c57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061041f610d11565b60405161042c919061452f565b60405180910390f35b34801561044157600080fd5b50610455610450366004614577565b610da3565b604051901515815260200161042c565b34801561047157600080fd5b50600e54610488906301000000900462ffffff1681565b60405162ffffff909116815260200161042c565b3480156104a857600080fd5b506104bc6104b73660046145a3565b610dbd565b005b3480156104ca57600080fd5b506002545b60405190815260200161042c565b3480156104e957600080fd5b506104bc6104f83660046145a3565b610e27565b34801561050957600080fd5b506104556105183660046145bc565b610ee5565b34801561052957600080fd5b506104bc61053836600461460b565b610f09565b34801561054957600080fd5b50600b5461055d906001600160a01b031681565b6040516001600160a01b03909116815260200161042c565b34801561058157600080fd5b506104cf610fb1565b34801561059657600080fd5b50600754600160a01b900460ff1660405160ff909116815260200161042c565b3480156105c257600080fd5b506104bc6105d1366004614644565b611024565b3480156105e257600080fd5b506104556105f1366004614577565b61105e565b34801561060257600080fd5b5060075461055d906001600160a01b031681565b34801561062257600080fd5b5060085461055d906001600160a01b031681565b34801561064257600080fd5b506104bc611080565b34801561065757600080fd5b50610455610666366004614644565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561069057600080fd5b506104bc61069f366004614644565b6110f8565b3480156106b057600080fd5b506104cf611189565b3480156106c557600080fd5b506104cf6106d4366004614644565b6111d3565b3480156106e557600080fd5b506104bc6106f4366004614668565b611243565b34801561070557600080fd5b506104bc6107143660046145a3565b611584565b34801561072557600080fd5b506104cf610734366004614644565b6001600160a01b031660009081526020819052604090205490565b34801561075b57600080fd5b506104bc611656565b34801561077057600080fd5b50600f5461055d906001600160a01b031681565b34801561079057600080fd5b5060175461055d906001600160a01b031681565b3480156107b057600080fd5b50600e5461048890600160781b900462ffffff1681565b3480156107d357600080fd5b5060065461055d906001600160a01b031681565b3480156107f357600080fd5b506104bc6108023660046146ae565b61166a565b34801561081357600080fd5b50600a5461055d906001600160a01b031681565b34801561083357600080fd5b506104bc6108423660046145a3565b6117a4565b34801561085357600080fd5b506104bc610862366004614644565b6118c4565b34801561087357600080fd5b506104bc610882366004614644565b611c8b565b34801561089357600080fd5b506005546001600160a01b031661055d565b3480156108b157600080fd5b50600e5461048890600160601b900462ffffff1681565b3480156108d457600080fd5b5061041f611d67565b3480156108e957600080fd5b506104bc6108f836600461460b565b611d76565b34801561090957600080fd5b506104cf60105481565b34801561091f57600080fd5b506104cf611e0c565b34801561093457600080fd5b50610455610943366004614577565b611e56565b34801561095457600080fd5b506104cf610963366004614644565b611ed1565b34801561097457600080fd5b50610455610983366004614577565b611f04565b34801561099457600080fd5b506104bc6109a33660046145a3565b611f12565b3480156109b457600080fd5b506109c86109c3366004614644565b611fd6565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161042c565b348015610a1957600080fd5b506104bc610a283660046145a3565b612071565b348015610a3957600080fd5b50610455610a48366004614644565b60186020526000908152604090205460ff1681565b348015610a6957600080fd5b506104cf612104565b348015610a7e57600080fd5b506104bc610a8d36600461460b565b61214e565b348015610a9e57600080fd5b50610455610aad366004614644565b6121ee565b348015610abe57600080fd5b506104cf60125481565b348015610ad457600080fd5b5060095461055d906001600160a01b031681565b348015610af457600080fd5b506104bc610b033660046146ae565b61225d565b348015610b1457600080fd5b5060175461045590600160a01b900460ff1681565b348015610b3557600080fd5b506104cf610b44366004614668565b6123b0565b348015610b5557600080fd5b50600e546104889062ffffff1681565b348015610b7157600080fd5b506104bc6123db565b348015610b8657600080fd5b506104cf600d5481565b348015610b9c57600080fd5b506104cf61248e565b348015610bb157600080fd5b50610455610bc0366004614644565b60146020526000908152604090205460ff1681565b348015610be157600080fd5b506104bc610bf03660046145a3565b6124d8565b348015610c0157600080fd5b506104bc610c103660046146ae565b612511565b348015610c2157600080fd5b506104bc610c30366004614644565b61265b565b348015610c4157600080fd5b50600e5461048890600160481b900462ffffff1681565b348015610c6457600080fd5b506109c8610c733660046145a3565b612721565b348015610c8457600080fd5b506104bc610c93366004614644565b612763565b348015610ca457600080fd5b50600e5461048890600160301b900462ffffff1681565b348015610cc757600080fd5b50600c5461055d906001600160a01b031681565b348015610ce757600080fd5b506104cf60115481565b348015610cfd57600080fd5b506104bc610d0c3660046146e1565b6127d9565b606060038054610d20906146fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4c906146fe565b8015610d995780601f10610d6e57610100808354040283529160200191610d99565b820191906000526020600020905b815481529060010190602001808311610d7c57829003601f168201915b5050505050905090565b600033610db18185856127ff565b60019150505b92915050565b610dc5612923565b600b54604051630dcb2e8960e01b8152600481018390526001600160a01b0390911690630dcb2e89906024015b600060405180830381600087803b158015610e0c57600080fd5b505af1158015610e20573d6000803e3d6000fd5b5050505050565b610e2f612923565b612710610e3b60025490565b610e45919061474e565b811015610ea35760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b60648201526084015b60405180910390fd5b6011546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1601155565b600033610ef385828561297d565b610efe8585856129f7565b506001949350505050565b610f11612923565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610f515760405162461bcd60e51b8152600401610e9a90614770565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b600b54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190614791565b905090565b61102c612923565b600b5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401610df2565b600033610db181858561107183836123b0565b61107b91906147aa565b6127ff565b600b5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f591906147bd565b50565b611100612923565b600f546001600160a01b0380831691160361112d5760405162461bcd60e51b8152600401610e9a90614770565b600f546040516001600160a01b038084169216907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600b54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b600b546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561121f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db79190614791565b61124b612923565b600880546001600160a01b0319166001600160a01b03838116919091179091556009548382169116146113735761128530836000196127ff565b600b5460405163c705c56960e01b81526001600160a01b0384811660048301529091169063c705c56990602401602060405180830381865afa1580156112cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f391906147bd565b61135757600b5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561133e57600080fd5b505af1158015611352573d6000803e3d6000fd5b505050505b600980546001600160a01b0319166001600160a01b0384161790555b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea91906147da565b6008546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f91906147da565b600a80546001600160a01b0319166001600160a01b03928316179055600954604080516315ab88c960e31b81529051919092169163ad5c46489160048083019260209291908290030181865afa1580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e191906147da565b6008546001600160a01b0390811691161461151557600954600854611515916001600160a01b039182169116600019613108565b600954600a54600854604080516001600160a01b039485168152928416602084015292168183015290517f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69181900360600190a1600a54611580906001600160a01b03166001613255565b5050565b600b546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af11580156115d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fb91906147f7565b604080518481526020810184905290810182905260608101889052929550909350915033906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b61165e612923565b61166860006133ae565b565b611672612923565b600e5462030d409062ffffff600160601b820481169161169b91600160301b9091041685614825565b6116a59190614825565b62ffffff1611156116c85760405162461bcd60e51b8152600401610e9a90614848565b600e5462030d409062ffffff600160781b82048116916116f191600160481b9091041684614825565b6116fb9190614825565b62ffffff16111561171e5760405162461bcd60e51b8152600401610e9a90614871565b600e546040805162ffffff858116825284811660208301528084168284015263010000009093049092166060830152517f2e7d9780ec398c47872eab5651ba43f0fa44ffed738321577e0db663fe8a05a59181900360800190a1600e805462ffffff92831663010000000265ffffffffffff199091169290931691909117919091179055565b6117ac612923565b62030d4081101580156117c257506207a1208111155b61182b5760405162461bcd60e51b815260206004820152603460248201527f676173466f7250726f63657373696e67206d757374206265206265747765656e6044820152730203230302c30303020616e64203530302c3030360641b6064820152608401610e9a565b60105481036118915760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b6064820152608401610e9a565b60105460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601055565b6118cc612923565b600b546001600160a01b03908116908216036119405760405162461bcd60e51b815260206004820152602d60248201527f546865206469766964656e6420747261636b657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610e9a565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561198d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b191906147da565b6001600160a01b031614611a415760405162461bcd60e51b815260206004820152604b60248201527f546865206e6577206469766964656e6420747261636b6572206d75737420626560448201527f206f776e656420627920746865204449564944454e4544544f4b454e20746f6b60648201526a195b8818dbdb9d1c9858dd60aa1b608482015260a401610e9a565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b158015611a8357600080fd5b505af1158015611a97573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b158015611adc57600080fd5b505af1158015611af0573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db0611b156005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611b5657600080fd5b505af1158015611b6a573d6000803e3d6000fd5b505060095460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b158015611c1457600080fd5b505af1158015611c28573d6000803e3d6000fd5b5050600b546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600b80546001600160a01b0319166001600160a01b039290921691909117905550565b611c93612923565b6001600160a01b0381163003611cd95760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610e9a565b6110f5611cee6005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614791565b6001600160a01b0384169190613400565b606060048054610d20906146fe565b611d7e612923565b600a546001600160a01b0390811690831603611e025760405162461bcd60e51b815260206004820152603e60248201527f546865206d61696e20706169722063616e6e6f742062652072656d6f7665642060448201527f66726f6d206175746f6d617465644d61726b65744d616b6572506169727300006064820152608401610e9a565b6115808282613255565b600b5460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b60003381611e6482866123b0565b905083811015611ec45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e9a565b610efe82868684036127ff565b600b546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611202565b600033610db18185856129f7565b611f1a612923565b612710611f2660025490565b611f30919061474e565b811015611f945760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b6064820152608401610e9a565b6012546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1601255565b600b5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b61010060405180830381865afa158015612032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120569190614899565b97509750975097509750975097509750919395975091939597565b612079612923565b600081116120c25760405162461bcd60e51b8152602060048201526016602482015275073776170546f6b656e734174416d6f756e74203e20360541b6044820152606401610e9a565b600d546040805183815260208101929092527f1d3afd1a2942d06995fdb024306050a7b24ad00572be70ce8b1bea325780d28b910160405180910390a1600d55565b600b5460408051632f842d8560e21b815290516000926001600160a01b03169163be10b6149160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b612156612923565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036121965760405162461bcd60e51b8152600401610e9a90614770565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610fa5565b600b5460405163c705c56960e01b81526001600160a01b038381166004830152600092169063c705c56990602401602060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906147bd565b612265612923565b600e5462030d409062ffffff8082169161228891600160601b9091041685614825565b6122929190614825565b62ffffff1611156122b55760405162461bcd60e51b8152600401610e9a90614848565b600e5462030d409062ffffff630100000082048116916122de91600160781b9091041684614825565b6122e89190614825565b62ffffff16111561230b5760405162461bcd60e51b8152600401610e9a90614871565b600e546040805162ffffff85811682528481166020830152600160301b8404811682840152600160481b9093049092166060830152517fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19181900360800190a1600e80546bffffffffffff0000000000001916600160301b62ffffff948516026bffffff000000000000000000191617600160481b9290931691909102919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6123e3612923565b60006123f76005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114612441576040519150601f19603f3d011682016040523d82523d6000602084013e612446565b606091505b50509050806110f55760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b6044820152606401610e9a565b600b546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b6124e0612923565b600b5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610df2565b612519612923565b600e5462030d409062ffffff8082169161253c91600160301b9091041685614825565b6125469190614825565b62ffffff1611156125695760405162461bcd60e51b8152600401610e9a90614848565b600e5462030d409062ffffff6301000000820481169161259291600160481b9091041684614825565b61259c9190614825565b62ffffff1611156125bf5760405162461bcd60e51b8152600401610e9a90614871565b600e546040805162ffffff85811682528481166020830152600160601b8404811682840152600160781b9093049092166060830152517f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859181900360800190a1600e805465ffffffffffff60601b1916600160601b62ffffff9485160262ffffff60781b191617600160781b9290931691909102919091179055565b612663612923565b600c546001600160a01b0382811691161480159061268f57506008546001600160a01b03828116911614155b156126975750305b6007546001600160a01b038083169116036126c45760405162461bcd60e51b8152600401610e9a90614770565b6007546040516001600160a01b03918216918316907fe2b5774aa87aa100c6ec40513e7bc1d6f3c22e7abfdcd1e87401c3c791bde9ae90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600b54604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd90602401612014565b61276b612923565b6001600160a01b0381166127d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e9a565b6110f5816133ae565b6127e1612923565b60178054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b0383166128615760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e9a565b6001600160a01b0382166128c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e9a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146116685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e9a565b600061298984846123b0565b905060001981146129f157818110156129e45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e9a565b6129f184848484036127ff565b50505050565b6001600160a01b038316612a1d5760405162461bcd60e51b8152600401610e9a90614903565b6001600160a01b038216612a435760405162461bcd60e51b8152600401610e9a90614948565b60008111612a935760405162461bcd60e51b815260206004820152601b60248201527f45524332303a207472616e73666572207a65726f20616d6f756e7400000000006044820152606401610e9a565b601754600160a01b900460ff1615612b145760175460405163090ec10b60e31b81526001600160a01b03858116600483015284811660248301526044820184905290911690634876085890606401600060405180830381600087803b158015612afb57600080fd5b505af1158015612b0f573d6000803e3d6000fd5b505050505b30600090815260208190526040902054600d5481108015908190612b425750600a54600160a01b900460ff16155b8015612b6757506001600160a01b03851660009081526018602052604090205460ff16155b8015612b8157506005546001600160a01b03868116911614155b8015612b9b57506005546001600160a01b03858116911614155b15612c1157600a805460ff60a01b1916600160a01b17905560165415612bc657612bc6601654613430565b60155415612bd957612bd960155461389a565b306000908152602081905260409020548015612bf857612bf881613b1f565b5060006016819055601555600a805460ff60a01b191690555b600a546001600160a01b03861660009081526013602052604090205460ff600160a01b909204821615911680612c5f57506001600160a01b03851660009081526013602052604090205460ff165b15612c68575060005b60008060008315612e0e576001600160a01b03891660009081526018602052604090205460ff1615612d1957600e54620f424090612cb2906301000000900462ffffff168961498b565b612cbc919061474e565b600e54909150620f424090612cdd90600160481b900462ffffff168961498b565b612ce7919061474e565b600e54909350620f424090612d0890600160781b900462ffffff168961498b565b612d12919061474e565b9150612db4565b6001600160a01b03881660009081526018602052604090205460ff1615612db457600e54620f424090612d519062ffffff168961498b565b612d5b919061474e565b600e54909150620f424090612d7c90600160301b900462ffffff168961498b565b612d86919061474e565b600e54909350620f424090612da790600160601b900462ffffff168961498b565b612db1919061474e565b91505b82601554612dc291906147aa565b601555601654612dd39083906147aa565b601655600082612de385846147aa565b612ded91906147aa565b9050612df981896149a2565b97508015612e0c57612e0c8a3083613c51565b505b612e19898989613c51565b600b546001600160a01b031663e30443bc8a612e4a816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612e9057600080fd5b505af1925050508015612ea1575060015b50600b546001600160a01b031663e30443bc89612ed3816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612f1957600080fd5b505af1925050508015612f2a575060015b50600a54600160a01b900460ff166130fd576001600160a01b03891660009081526014602052604090205460ff16612fae57601254871115612fae5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d69740000006044820152606401610e9a565b6001600160a01b03881660009081526014602052604090205460ff16613038576011546001600160a01b03891660009081526020819052604090205411156130385760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d6974006044820152606401610e9a565b601054600b546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156130a5575060408051601f3d908101601f191682019092526130a2918101906147f7565b60015b156130fb5760408051848152602081018490529081018290526060810185905233906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b505050505050505050565b8015806131825750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561315c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131809190614791565b155b6131ed5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610e9a565b6040516001600160a01b03831660248201526044810182905261325090849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613d7b565b505050565b6001600160a01b038216600090815260186020908152604080832080548515801560ff1992831681179093556014909452919093208054909116909217909155819061330c5750600b5460405163c705c56960e01b81526001600160a01b0384811660048301529091169063c705c56990602401602060405180830381865afa1580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a91906147bd565b155b1561337157600b5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b505050505b816001600160a01b03167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab82604051610fa5911515815260200190565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905261325090849063a9059cbb60e01b90606401613219565b600c546007546001600160a01b0391821691160361355b57600c546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b59190614791565b90506134c082613e50565b600c546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561350d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135319190614791565b61353b91906149a2565b600f54600c54919250613250916001600160a01b03908116911683613400565b6008546007546001600160a01b0391821691160361388257600954604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156135bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e191906147da565b6008546001600160a01b03908116911614613667576008546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561363e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136629190614791565b613669565b475b90506136748261402f565b600954604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156136be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e291906147da565b6008546001600160a01b03908116911614613772576008546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561373f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137639190614791565b61376d91906149a2565b61377c565b61377c82476149a2565b9050600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f591906147da565b6008546001600160a01b0391821691160361386557600f546040516000916001600160a01b03169083908381818185875af1925050503d8060008114613857576040519150601f19603f3d011682016040523d82523d6000602084013e61385c565b606091505b50505050505050565b600f54600854613250916001600160a01b03918216911683613400565b600f546110f59030906001600160a01b0316836129f7565b60006138a760028361474e565b905060006138b582846149a2565b90506000600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561390c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393091906147da565b6008546001600160a01b039081169116146139b6576008546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561398d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b19190614791565b6139b8565b475b90506139c38361402f565b600954604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015613a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3191906147da565b6008546001600160a01b03908116911614613ac1576008546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015613a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab29190614791565b613abc91906149a2565b613acb565b613acb82476149a2565b9050613ad783826141ba565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b613b2881613e50565b600c546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b959190614791565b600b54600c54919250613bb5916001600160a01b03908116911683613400565b600b5460405163ba72a95560e01b8152600481018390526001600160a01b039091169063ba72a95590602401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b505060408051858152602081018590527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc3935001905060405180910390a15050565b6001600160a01b038316613c775760405162461bcd60e51b8152600401610e9a90614903565b6001600160a01b038216613c9d5760405162461bcd60e51b8152600401610e9a90614948565b6001600160a01b03831660009081526020819052604090205481811015613d155760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e9a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36129f1565b6000613dd0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661437b9092919063ffffffff16565b9050805160001480613df1575080806020019051810190613df191906147bd565b6132505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e9a565b600c546008546001600160a01b03908116911614613f7d5760408051600380825260808201909252600091602082016060803683370190505090503081600081518110613e9f57613e9f6149b5565b6001600160a01b039283166020918202929092010152600854825191169082906001908110613ed057613ed06149b5565b6001600160a01b039283166020918202929092010152600c54825191169082906002908110613f0157613f016149b5565b6001600160a01b039283166020918202929092010152600954604051635c11d79560e01b8152911690635c11d79590613f47908590600090869030904290600401614a0f565b600060405180830381600087803b158015613f6157600080fd5b505af1158015613f75573d6000803e3d6000fd5b505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613fb257613fb26149b5565b6001600160a01b039283166020918202929092010152600c54825191169082906001908110613fe357613fe36149b5565b6001600160a01b039283166020918202929092010152600654600954604051637274ca1b60e11b81529183169263e4e9943692613f479290911690869060009087904290600401614a4b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614064576140646149b5565b6001600160a01b039283166020918202929092010152600854825191169082906001908110614095576140956149b5565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156140ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411291906147da565b6001600160a01b03168160018151811061412e5761412e6149b5565b60200260200101516001600160a01b03160361417d5760095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613f47908590600090869030904290600401614a0f565b600654600954604051637274ca1b60e11b81526001600160a01b039283169263e4e9943692613f4792911690869060009087904290600401614a4b565b600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561420d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423191906147da565b6008546001600160a01b039182169116036142d95760095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156142b4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e2091906147f7565b60095460085460405162e8e33760e81b81523060048201526001600160a01b039182166024820152604481018590526064810184905260006084820181905260a482015261dead60c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1158015614357573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2091906147f7565b606061438a8484600085614392565b949350505050565b6060824710156143f35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e9a565b600080866001600160a01b0316858760405161440f9190614a8a565b60006040518083038185875af1925050503d806000811461444c576040519150601f19603f3d011682016040523d82523d6000602084013e614451565b606091505b50915091506144628783838761446d565b979650505050505050565b606083156144dc5782516000036144d5576001600160a01b0385163b6144d55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e9a565b508161438a565b61438a83838151156144f15781518083602001fd5b8060405162461bcd60e51b8152600401610e9a919061452f565b60005b8381101561452657818101518382015260200161450e565b50506000910152565b602081526000825180602084015261454e81604085016020870161450b565b601f01601f19169190910160400192915050565b6001600160a01b03811681146110f557600080fd5b6000806040838503121561458a57600080fd5b823561459581614562565b946020939093013593505050565b6000602082840312156145b557600080fd5b5035919050565b6000806000606084860312156145d157600080fd5b83356145dc81614562565b925060208401356145ec81614562565b929592945050506040919091013590565b80151581146110f557600080fd5b6000806040838503121561461e57600080fd5b823561462981614562565b91506020830135614639816145fd565b809150509250929050565b60006020828403121561465657600080fd5b813561466181614562565b9392505050565b6000806040838503121561467b57600080fd5b823561468681614562565b9150602083013561463981614562565b803562ffffff811681146146a957600080fd5b919050565b600080604083850312156146c157600080fd5b6146ca83614696565b91506146d860208401614696565b90509250929050565b6000602082840312156146f357600080fd5b8135614661816145fd565b600181811c9082168061471257607f821691505b60208210810361473257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008261476b57634e487b7160e01b600052601260045260246000fd5b500490565b602080825260079082015266616c726561647960c81b604082015260600190565b6000602082840312156147a357600080fd5b5051919050565b80820180821115610db757610db7614738565b6000602082840312156147cf57600080fd5b8151614661816145fd565b6000602082840312156147ec57600080fd5b815161466181614562565b60008060006060848603121561480c57600080fd5b8351925060208401519150604084015190509250925092565b62ffffff81811683821601908082111561484157614841614738565b5092915050565b6020808252600f908201526e73656c6c20666565203c3d2032302560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2032302560901b604082015260600190565b600080600080600080600080610100898b0312156148b657600080fd5b88516148c181614562565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610db757610db7614738565b81810381811115610db757610db7614738565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015614a045781516001600160a01b0316875295820195908201906001016149df565b509495945050505050565b85815284602082015260a060408201526000614a2e60a08301866149cb565b6001600160a01b0394909416606083015250608001529392505050565b60018060a01b038616815284602082015283604082015260a060608201526000614a7860a08301856149cb565b90508260808301529695505050505050565b60008251614a9c81846020870161450b565b919091019291505056fea26469706673582212201809c771636edbf78a140981dd48d0afe04c55f7fa6c1831117d053de1e670f764736f6c63430008130033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000065438378b3793c1184041cdfe42ee4efc7419361000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000071afd498d00000000000000000000000000000000000000000000000000000000246139ca8000000000000000000000000000000000000000000000000000000006d23ad5f800000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000958504a702840eea022cc59b02ddea9edfb855070000000000000000000000009cc421962fc72f11c5c2ddf79fe6b5fe5e7cd94e000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000004e20000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000002bf200000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c0dcc752af9be6a07a67934471d7cd901a6094e60000000000000000000000001ccfe8c40ef259566433716002e379dfffbf5a3e00000000000000000000000000000000000000000000000000000000000000074c616479626f74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005244c6164790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f041690d9cbe398d3d51f25c87902c1403affe66

Deployed Bytecode

0x6080604052600436106103fe5760003560e01c80639213691311610213578063d5bf72b711610123578063ec44adc8116100ab578063f2fde38b1161007a578063f2fde38b14610c78578063f637434214610c98578063f7c618c114610cbb578063f8b45b0514610cdb578063fe49fc4114610cf157600080fd5b8063ec44adc814610bf5578063f0a568c014610c15578063f11a24d314610c35578063f27fd25414610c5857600080fd5b8063e086e5ec116100f2578063e086e5ec14610b65578063e2f4560514610b7a578063e7841ec014610b90578063e9481eee14610ba5578063e98030c714610bd557600080fd5b8063d5bf72b714610ae8578063d8c6404b14610b08578063dd62ed3e14610b29578063de0aad5314610b4957600080fd5b8063aa498023116101a6578063bdd4f29f11610175578063bdd4f29f14610a5d578063c024666814610a72578063c705c56914610a92578063c8c8ebe414610ab2578063cf188ad014610ac857600080fd5b8063aa49802314610988578063ad56c13c146109a8578063afa4f3b214610a0d578063b62496f514610a2d57600080fd5b8063a26579ad116101e2578063a26579ad14610913578063a457c2d714610928578063a8b9d24014610948578063a9059cbb1461096857600080fd5b806392136913146108a557806395d89b41146108c85780639a7a23d6146108dd5780639c1b8af5146108fd57600080fd5b80635d098b381161030e57806377ec7449116102a157806385af30c51161027057806385af30c514610807578063871c128d1461082757806388bdd9be1461084757806389476069146108675780638da5cb5b1461088757600080fd5b806377ec7449146107845780637bce5a04146107a45780637c75ad3a146107c757806382685df5146107e757600080fd5b8063700bb191116102dd578063700bb191146106f957806370a0823114610719578063715018a61461074f57806375f0a8741461076457600080fd5b80635d098b381461068457806364b0f653146106a45780636843cd84146106b95780636c516a70146106d957600080fd5b80632c1f521611610391578063395093511161036057806339509351146105d65780633ad3e6ff146105f657806348a5317e146106165780634e71d92d146106365780634fbee1931461064b57600080fd5b80632c1f52161461053d57806330bb4cff14610575578063313ce5671461058a57806331e79db0146105b657600080fd5b806318160ddd116103cd57806318160ddd146104be5780631c499ab0146104dd57806323b872dd146104fd5780632ae2f1211461051d57600080fd5b806306fdde031461040a578063095ea7b3146104355780630cfe2f3f146104655780630dcb2e891461049c57600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061041f610d11565b60405161042c919061452f565b60405180910390f35b34801561044157600080fd5b50610455610450366004614577565b610da3565b604051901515815260200161042c565b34801561047157600080fd5b50600e54610488906301000000900462ffffff1681565b60405162ffffff909116815260200161042c565b3480156104a857600080fd5b506104bc6104b73660046145a3565b610dbd565b005b3480156104ca57600080fd5b506002545b60405190815260200161042c565b3480156104e957600080fd5b506104bc6104f83660046145a3565b610e27565b34801561050957600080fd5b506104556105183660046145bc565b610ee5565b34801561052957600080fd5b506104bc61053836600461460b565b610f09565b34801561054957600080fd5b50600b5461055d906001600160a01b031681565b6040516001600160a01b03909116815260200161042c565b34801561058157600080fd5b506104cf610fb1565b34801561059657600080fd5b50600754600160a01b900460ff1660405160ff909116815260200161042c565b3480156105c257600080fd5b506104bc6105d1366004614644565b611024565b3480156105e257600080fd5b506104556105f1366004614577565b61105e565b34801561060257600080fd5b5060075461055d906001600160a01b031681565b34801561062257600080fd5b5060085461055d906001600160a01b031681565b34801561064257600080fd5b506104bc611080565b34801561065757600080fd5b50610455610666366004614644565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561069057600080fd5b506104bc61069f366004614644565b6110f8565b3480156106b057600080fd5b506104cf611189565b3480156106c557600080fd5b506104cf6106d4366004614644565b6111d3565b3480156106e557600080fd5b506104bc6106f4366004614668565b611243565b34801561070557600080fd5b506104bc6107143660046145a3565b611584565b34801561072557600080fd5b506104cf610734366004614644565b6001600160a01b031660009081526020819052604090205490565b34801561075b57600080fd5b506104bc611656565b34801561077057600080fd5b50600f5461055d906001600160a01b031681565b34801561079057600080fd5b5060175461055d906001600160a01b031681565b3480156107b057600080fd5b50600e5461048890600160781b900462ffffff1681565b3480156107d357600080fd5b5060065461055d906001600160a01b031681565b3480156107f357600080fd5b506104bc6108023660046146ae565b61166a565b34801561081357600080fd5b50600a5461055d906001600160a01b031681565b34801561083357600080fd5b506104bc6108423660046145a3565b6117a4565b34801561085357600080fd5b506104bc610862366004614644565b6118c4565b34801561087357600080fd5b506104bc610882366004614644565b611c8b565b34801561089357600080fd5b506005546001600160a01b031661055d565b3480156108b157600080fd5b50600e5461048890600160601b900462ffffff1681565b3480156108d457600080fd5b5061041f611d67565b3480156108e957600080fd5b506104bc6108f836600461460b565b611d76565b34801561090957600080fd5b506104cf60105481565b34801561091f57600080fd5b506104cf611e0c565b34801561093457600080fd5b50610455610943366004614577565b611e56565b34801561095457600080fd5b506104cf610963366004614644565b611ed1565b34801561097457600080fd5b50610455610983366004614577565b611f04565b34801561099457600080fd5b506104bc6109a33660046145a3565b611f12565b3480156109b457600080fd5b506109c86109c3366004614644565b611fd6565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e08201526101000161042c565b348015610a1957600080fd5b506104bc610a283660046145a3565b612071565b348015610a3957600080fd5b50610455610a48366004614644565b60186020526000908152604090205460ff1681565b348015610a6957600080fd5b506104cf612104565b348015610a7e57600080fd5b506104bc610a8d36600461460b565b61214e565b348015610a9e57600080fd5b50610455610aad366004614644565b6121ee565b348015610abe57600080fd5b506104cf60125481565b348015610ad457600080fd5b5060095461055d906001600160a01b031681565b348015610af457600080fd5b506104bc610b033660046146ae565b61225d565b348015610b1457600080fd5b5060175461045590600160a01b900460ff1681565b348015610b3557600080fd5b506104cf610b44366004614668565b6123b0565b348015610b5557600080fd5b50600e546104889062ffffff1681565b348015610b7157600080fd5b506104bc6123db565b348015610b8657600080fd5b506104cf600d5481565b348015610b9c57600080fd5b506104cf61248e565b348015610bb157600080fd5b50610455610bc0366004614644565b60146020526000908152604090205460ff1681565b348015610be157600080fd5b506104bc610bf03660046145a3565b6124d8565b348015610c0157600080fd5b506104bc610c103660046146ae565b612511565b348015610c2157600080fd5b506104bc610c30366004614644565b61265b565b348015610c4157600080fd5b50600e5461048890600160481b900462ffffff1681565b348015610c6457600080fd5b506109c8610c733660046145a3565b612721565b348015610c8457600080fd5b506104bc610c93366004614644565b612763565b348015610ca457600080fd5b50600e5461048890600160301b900462ffffff1681565b348015610cc757600080fd5b50600c5461055d906001600160a01b031681565b348015610ce757600080fd5b506104cf60115481565b348015610cfd57600080fd5b506104bc610d0c3660046146e1565b6127d9565b606060038054610d20906146fe565b80601f0160208091040260200160405190810160405280929190818152602001828054610d4c906146fe565b8015610d995780601f10610d6e57610100808354040283529160200191610d99565b820191906000526020600020905b815481529060010190602001808311610d7c57829003601f168201915b5050505050905090565b600033610db18185856127ff565b60019150505b92915050565b610dc5612923565b600b54604051630dcb2e8960e01b8152600481018390526001600160a01b0390911690630dcb2e89906024015b600060405180830381600087803b158015610e0c57600080fd5b505af1158015610e20573d6000803e3d6000fd5b5050505050565b610e2f612923565b612710610e3b60025490565b610e45919061474e565b811015610ea35760405162461bcd60e51b815260206004820152602160248201527f6d617857616c6c6574203e3d20746f74616c20737570706c79202f20313030306044820152600360fc1b60648201526084015b60405180910390fd5b6011546040805183815260208101929092527fff64d41f60feb77d52f64ae64a9fc3929d57a89d0cc55728762468bae5e0fe52910160405180910390a1601155565b600033610ef385828561297d565b610efe8585856129f7565b506001949350505050565b610f11612923565b6001600160a01b03821660009081526014602052604090205481151560ff909116151503610f515760405162461bcd60e51b8152600401610e9a90614770565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f82170bbd72c16b30c410014b7382121a699ed119a182e48a0b6cadcc89104ac991015b60405180910390a25050565b600b54604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190614791565b905090565b61102c612923565b600b5460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db090602401610df2565b600033610db181858561107183836123b0565b61107b91906147aa565b6127ff565b600b5460405163bc4c4b3760e01b8152336004820152600060248201526001600160a01b039091169063bc4c4b37906044016020604051808303816000875af11580156110d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110f591906147bd565b50565b611100612923565b600f546001600160a01b0380831691160361112d5760405162461bcd60e51b8152600401610e9a90614770565b600f546040516001600160a01b038084169216907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600f80546001600160a01b0319166001600160a01b0392909216919091179055565b600b54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b600b546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa15801561121f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db79190614791565b61124b612923565b600880546001600160a01b0319166001600160a01b03838116919091179091556009548382169116146113735761128530836000196127ff565b600b5460405163c705c56960e01b81526001600160a01b0384811660048301529091169063c705c56990602401602060405180830381865afa1580156112cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f391906147bd565b61135757600b5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561133e57600080fd5b505af1158015611352573d6000803e3d6000fd5b505050505b600980546001600160a01b0319166001600160a01b0384161790555b600960009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea91906147da565b6008546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801561143b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145f91906147da565b600a80546001600160a01b0319166001600160a01b03928316179055600954604080516315ab88c960e31b81529051919092169163ad5c46489160048083019260209291908290030181865afa1580156114bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114e191906147da565b6008546001600160a01b0390811691161461151557600954600854611515916001600160a01b039182169116600019613108565b600954600a54600854604080516001600160a01b039485168152928416602084015292168183015290517f113a6e83812f48b2f83795e33cb009afb4ba6e240c9c643c5dc75791e4ce7ab69181900360600190a1600a54611580906001600160a01b03166001613255565b5050565b600b546040516001624d3b8760e01b0319815260048101839052600091829182916001600160a01b03169063ffb2c479906024016060604051808303816000875af11580156115d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fb91906147f7565b604080518481526020810184905290810182905260608101889052929550909350915033906000907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a350505050565b61165e612923565b61166860006133ae565b565b611672612923565b600e5462030d409062ffffff600160601b820481169161169b91600160301b9091041685614825565b6116a59190614825565b62ffffff1611156116c85760405162461bcd60e51b8152600401610e9a90614848565b600e5462030d409062ffffff600160781b82048116916116f191600160481b9091041684614825565b6116fb9190614825565b62ffffff16111561171e5760405162461bcd60e51b8152600401610e9a90614871565b600e546040805162ffffff858116825284811660208301528084168284015263010000009093049092166060830152517f2e7d9780ec398c47872eab5651ba43f0fa44ffed738321577e0db663fe8a05a59181900360800190a1600e805462ffffff92831663010000000265ffffffffffff199091169290931691909117919091179055565b6117ac612923565b62030d4081101580156117c257506207a1208111155b61182b5760405162461bcd60e51b815260206004820152603460248201527f676173466f7250726f63657373696e67206d757374206265206265747765656e6044820152730203230302c30303020616e64203530302c3030360641b6064820152608401610e9a565b60105481036118915760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f742075706461746520676173466f7250726f63657373696e67207460448201526b6f2073616d652076616c756560a01b6064820152608401610e9a565b60105460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601055565b6118cc612923565b600b546001600160a01b03908116908216036119405760405162461bcd60e51b815260206004820152602d60248201527f546865206469766964656e6420747261636b657220616c72656164792068617360448201526c2074686174206164647265737360981b6064820152608401610e9a565b6000819050306001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561198d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b191906147da565b6001600160a01b031614611a415760405162461bcd60e51b815260206004820152604b60248201527f546865206e6577206469766964656e6420747261636b6572206d75737420626560448201527f206f776e656420627920746865204449564944454e4544544f4b454e20746f6b60648201526a195b8818dbdb9d1c9858dd60aa1b608482015260a401610e9a565b60405163031e79db60e41b81526001600160a01b03821660048201819052906331e79db090602401600060405180830381600087803b158015611a8357600080fd5b505af1158015611a97573d6000803e3d6000fd5b505060405163031e79db60e41b81523060048201526001600160a01b03841692506331e79db09150602401600060405180830381600087803b158015611adc57600080fd5b505af1158015611af0573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db0611b156005546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b158015611b5657600080fd5b505af1158015611b6a573d6000803e3d6000fd5b505060095460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b158015611bb557600080fd5b505af1158015611bc9573d6000803e3d6000fd5b5050600a5460405163031e79db60e41b81526001600160a01b03918216600482015290841692506331e79db09150602401600060405180830381600087803b158015611c1457600080fd5b505af1158015611c28573d6000803e3d6000fd5b5050600b546040516001600160a01b03918216935090851691507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a3600b80546001600160a01b0319166001600160a01b039290921691909117905550565b611c93612923565b6001600160a01b0381163003611cd95760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b6044820152606401610e9a565b6110f5611cee6005546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614791565b6001600160a01b0384169190613400565b606060048054610d20906146fe565b611d7e612923565b600a546001600160a01b0390811690831603611e025760405162461bcd60e51b815260206004820152603e60248201527f546865206d61696e20706169722063616e6e6f742062652072656d6f7665642060448201527f66726f6d206175746f6d617465644d61726b65744d616b6572506169727300006064820152608401610e9a565b6115808282613255565b600b5460408051631bc9e27b60e21b815290516000926001600160a01b031691636f2789ec9160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b60003381611e6482866123b0565b905083811015611ec45760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e9a565b610efe82868684036127ff565b600b546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401611202565b600033610db18185856129f7565b611f1a612923565b612710611f2660025490565b611f30919061474e565b811015611f945760405162461bcd60e51b815260206004820152602c60248201527f6d61785472616e73616374696f6e416d6f756e74203e3d20746f74616c20737560448201526b070706c79202f2031303030360a41b6064820152608401610e9a565b6012546040805183815260208101929092527f35eec0711af6fbe3039535323be51b57996b6945b0d55862607c7a02e52e4507910160405180910390a1601255565b600b5460405163fbcbc0f160e01b81526001600160a01b038381166004830152600092839283928392839283928392839291169063fbcbc0f1906024015b61010060405180830381865afa158015612032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120569190614899565b97509750975097509750975097509750919395975091939597565b612079612923565b600081116120c25760405162461bcd60e51b8152602060048201526016602482015275073776170546f6b656e734174416d6f756e74203e20360541b6044820152606401610e9a565b600d546040805183815260208101929092527f1d3afd1a2942d06995fdb024306050a7b24ad00572be70ce8b1bea325780d28b910160405180910390a1600d55565b600b5460408051632f842d8560e21b815290516000926001600160a01b03169163be10b6149160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b612156612923565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036121965760405162461bcd60e51b8152600401610e9a90614770565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df79101610fa5565b600b5460405163c705c56960e01b81526001600160a01b038381166004830152600092169063c705c56990602401602060405180830381865afa158015612239573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db791906147bd565b612265612923565b600e5462030d409062ffffff8082169161228891600160601b9091041685614825565b6122929190614825565b62ffffff1611156122b55760405162461bcd60e51b8152600401610e9a90614848565b600e5462030d409062ffffff630100000082048116916122de91600160781b9091041684614825565b6122e89190614825565b62ffffff16111561230b5760405162461bcd60e51b8152600401610e9a90614871565b600e546040805162ffffff85811682528481166020830152600160301b8404811682840152600160481b9093049092166060830152517fdec183740138e3a28dfd6f973ecd3bf00cd5d9b2544f6763c0a87f721444c5d19181900360800190a1600e80546bffffffffffff0000000000001916600160301b62ffffff948516026bffffff000000000000000000191617600160481b9290931691909102919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6123e3612923565b60006123f76005546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114612441576040519150601f19603f3d011682016040523d82523d6000602084013e612446565b606091505b50509050806110f55760405162461bcd60e51b815260206004820152601460248201527311985a5b1959081a5b881dda5d1a191c985dd85b60621b6044820152606401610e9a565b600b546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610ffb573d6000803e3d6000fd5b6124e0612923565b600b5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401610df2565b612519612923565b600e5462030d409062ffffff8082169161253c91600160301b9091041685614825565b6125469190614825565b62ffffff1611156125695760405162461bcd60e51b8152600401610e9a90614848565b600e5462030d409062ffffff6301000000820481169161259291600160481b9091041684614825565b61259c9190614825565b62ffffff1611156125bf5760405162461bcd60e51b8152600401610e9a90614871565b600e546040805162ffffff85811682528481166020830152600160601b8404811682840152600160781b9093049092166060830152517f70748cb9cb3bcb4dfd4fff8f2a6f23f636067b33e0244631f9abd38159c1de859181900360800190a1600e805465ffffffffffff60601b1916600160601b62ffffff9485160262ffffff60781b191617600160781b9290931691909102919091179055565b612663612923565b600c546001600160a01b0382811691161480159061268f57506008546001600160a01b03828116911614155b156126975750305b6007546001600160a01b038083169116036126c45760405162461bcd60e51b8152600401610e9a90614770565b6007546040516001600160a01b03918216918316907fe2b5774aa87aa100c6ec40513e7bc1d6f3c22e7abfdcd1e87401c3c791bde9ae90600090a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b600b54604051635183d6fd60e01b81526004810183905260009182918291829182918291829182916001600160a01b0390911690635183d6fd90602401612014565b61276b612923565b6001600160a01b0381166127d05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e9a565b6110f5816133ae565b6127e1612923565b60178054911515600160a01b0260ff60a01b19909216919091179055565b6001600160a01b0383166128615760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e9a565b6001600160a01b0382166128c25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e9a565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b031633146116685760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e9a565b600061298984846123b0565b905060001981146129f157818110156129e45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610e9a565b6129f184848484036127ff565b50505050565b6001600160a01b038316612a1d5760405162461bcd60e51b8152600401610e9a90614903565b6001600160a01b038216612a435760405162461bcd60e51b8152600401610e9a90614948565b60008111612a935760405162461bcd60e51b815260206004820152601b60248201527f45524332303a207472616e73666572207a65726f20616d6f756e7400000000006044820152606401610e9a565b601754600160a01b900460ff1615612b145760175460405163090ec10b60e31b81526001600160a01b03858116600483015284811660248301526044820184905290911690634876085890606401600060405180830381600087803b158015612afb57600080fd5b505af1158015612b0f573d6000803e3d6000fd5b505050505b30600090815260208190526040902054600d5481108015908190612b425750600a54600160a01b900460ff16155b8015612b6757506001600160a01b03851660009081526018602052604090205460ff16155b8015612b8157506005546001600160a01b03868116911614155b8015612b9b57506005546001600160a01b03858116911614155b15612c1157600a805460ff60a01b1916600160a01b17905560165415612bc657612bc6601654613430565b60155415612bd957612bd960155461389a565b306000908152602081905260409020548015612bf857612bf881613b1f565b5060006016819055601555600a805460ff60a01b191690555b600a546001600160a01b03861660009081526013602052604090205460ff600160a01b909204821615911680612c5f57506001600160a01b03851660009081526013602052604090205460ff165b15612c68575060005b60008060008315612e0e576001600160a01b03891660009081526018602052604090205460ff1615612d1957600e54620f424090612cb2906301000000900462ffffff168961498b565b612cbc919061474e565b600e54909150620f424090612cdd90600160481b900462ffffff168961498b565b612ce7919061474e565b600e54909350620f424090612d0890600160781b900462ffffff168961498b565b612d12919061474e565b9150612db4565b6001600160a01b03881660009081526018602052604090205460ff1615612db457600e54620f424090612d519062ffffff168961498b565b612d5b919061474e565b600e54909150620f424090612d7c90600160301b900462ffffff168961498b565b612d86919061474e565b600e54909350620f424090612da790600160601b900462ffffff168961498b565b612db1919061474e565b91505b82601554612dc291906147aa565b601555601654612dd39083906147aa565b601655600082612de385846147aa565b612ded91906147aa565b9050612df981896149a2565b97508015612e0c57612e0c8a3083613c51565b505b612e19898989613c51565b600b546001600160a01b031663e30443bc8a612e4a816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612e9057600080fd5b505af1925050508015612ea1575060015b50600b546001600160a01b031663e30443bc89612ed3816001600160a01b031660009081526020819052604090205490565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015612f1957600080fd5b505af1925050508015612f2a575060015b50600a54600160a01b900460ff166130fd576001600160a01b03891660009081526014602052604090205460ff16612fae57601254871115612fae5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2065786365656473207472616e73666572206c696d69740000006044820152606401610e9a565b6001600160a01b03881660009081526014602052604090205460ff16613038576011546001600160a01b03891660009081526020819052604090205411156130385760405162461bcd60e51b815260206004820152601f60248201527f45524332303a2065786365656473206d61782077616c6c6574206c696d6974006044820152606401610e9a565b601054600b546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156130a5575060408051601f3d908101601f191682019092526130a2918101906147f7565b60015b156130fb5760408051848152602081018490529081018290526060810185905233906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a35050505b505b505050505050505050565b8015806131825750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561315c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131809190614791565b155b6131ed5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610e9a565b6040516001600160a01b03831660248201526044810182905261325090849063095ea7b360e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613d7b565b505050565b6001600160a01b038216600090815260186020908152604080832080548515801560ff1992831681179093556014909452919093208054909116909217909155819061330c5750600b5460405163c705c56960e01b81526001600160a01b0384811660048301529091169063c705c56990602401602060405180830381865afa1580156132e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330a91906147bd565b155b1561337157600b5460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801561335857600080fd5b505af115801561336c573d6000803e3d6000fd5b505050505b816001600160a01b03167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab82604051610fa5911515815260200190565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040516001600160a01b03831660248201526044810182905261325090849063a9059cbb60e01b90606401613219565b600c546007546001600160a01b0391821691160361355b57600c546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b59190614791565b90506134c082613e50565b600c546040516370a0823160e01b815230600482015260009183916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561350d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135319190614791565b61353b91906149a2565b600f54600c54919250613250916001600160a01b03908116911683613400565b6008546007546001600160a01b0391821691160361388257600954604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156135bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135e191906147da565b6008546001600160a01b03908116911614613667576008546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561363e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136629190614791565b613669565b475b90506136748261402f565b600954604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa1580156136be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e291906147da565b6008546001600160a01b03908116911614613772576008546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561373f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137639190614791565b61376d91906149a2565b61377c565b61377c82476149a2565b9050600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f591906147da565b6008546001600160a01b0391821691160361386557600f546040516000916001600160a01b03169083908381818185875af1925050503d8060008114613857576040519150601f19603f3d011682016040523d82523d6000602084013e61385c565b606091505b50505050505050565b600f54600854613250916001600160a01b03918216911683613400565b600f546110f59030906001600160a01b0316836129f7565b60006138a760028361474e565b905060006138b582846149a2565b90506000600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561390c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393091906147da565b6008546001600160a01b039081169116146139b6576008546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561398d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139b19190614791565b6139b8565b475b90506139c38361402f565b600954604080516315ab88c960e31b815290516000926001600160a01b03169163ad5c46489160048083019260209291908290030181865afa158015613a0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3191906147da565b6008546001600160a01b03908116911614613ac1576008546040516370a0823160e01b815230600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa158015613a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab29190614791565b613abc91906149a2565b613acb565b613acb82476149a2565b9050613ad783826141ba565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050505050565b613b2881613e50565b600c546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015613b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b959190614791565b600b54600c54919250613bb5916001600160a01b03908116911683613400565b600b5460405163ba72a95560e01b8152600481018390526001600160a01b039091169063ba72a95590602401600060405180830381600087803b158015613bfb57600080fd5b505af1158015613c0f573d6000803e3d6000fd5b505060408051858152602081018590527f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc3935001905060405180910390a15050565b6001600160a01b038316613c775760405162461bcd60e51b8152600401610e9a90614903565b6001600160a01b038216613c9d5760405162461bcd60e51b8152600401610e9a90614948565b6001600160a01b03831660009081526020819052604090205481811015613d155760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e9a565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36129f1565b6000613dd0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661437b9092919063ffffffff16565b9050805160001480613df1575080806020019051810190613df191906147bd565b6132505760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610e9a565b600c546008546001600160a01b03908116911614613f7d5760408051600380825260808201909252600091602082016060803683370190505090503081600081518110613e9f57613e9f6149b5565b6001600160a01b039283166020918202929092010152600854825191169082906001908110613ed057613ed06149b5565b6001600160a01b039283166020918202929092010152600c54825191169082906002908110613f0157613f016149b5565b6001600160a01b039283166020918202929092010152600954604051635c11d79560e01b8152911690635c11d79590613f47908590600090869030904290600401614a0f565b600060405180830381600087803b158015613f6157600080fd5b505af1158015613f75573d6000803e3d6000fd5b505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110613fb257613fb26149b5565b6001600160a01b039283166020918202929092010152600c54825191169082906001908110613fe357613fe36149b5565b6001600160a01b039283166020918202929092010152600654600954604051637274ca1b60e11b81529183169263e4e9943692613f479290911690869060009087904290600401614a4b565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614064576140646149b5565b6001600160a01b039283166020918202929092010152600854825191169082906001908110614095576140956149b5565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156140ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061411291906147da565b6001600160a01b03168160018151811061412e5761412e6149b5565b60200260200101516001600160a01b03160361417d5760095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613f47908590600090869030904290600401614a0f565b600654600954604051637274ca1b60e11b81526001600160a01b039283169263e4e9943692613f4792911690869060009087904290600401614a4b565b600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561420d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423191906147da565b6008546001600160a01b039182169116036142d95760095460405163f305d71960e01b815230600482015260248101849052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156142b4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610e2091906147f7565b60095460085460405162e8e33760e81b81523060048201526001600160a01b039182166024820152604481018590526064810184905260006084820181905260a482015261dead60c48201524260e482015291169063e8e3370090610104016060604051808303816000875af1158015614357573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2091906147f7565b606061438a8484600085614392565b949350505050565b6060824710156143f35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610e9a565b600080866001600160a01b0316858760405161440f9190614a8a565b60006040518083038185875af1925050503d806000811461444c576040519150601f19603f3d011682016040523d82523d6000602084013e614451565b606091505b50915091506144628783838761446d565b979650505050505050565b606083156144dc5782516000036144d5576001600160a01b0385163b6144d55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e9a565b508161438a565b61438a83838151156144f15781518083602001fd5b8060405162461bcd60e51b8152600401610e9a919061452f565b60005b8381101561452657818101518382015260200161450e565b50506000910152565b602081526000825180602084015261454e81604085016020870161450b565b601f01601f19169190910160400192915050565b6001600160a01b03811681146110f557600080fd5b6000806040838503121561458a57600080fd5b823561459581614562565b946020939093013593505050565b6000602082840312156145b557600080fd5b5035919050565b6000806000606084860312156145d157600080fd5b83356145dc81614562565b925060208401356145ec81614562565b929592945050506040919091013590565b80151581146110f557600080fd5b6000806040838503121561461e57600080fd5b823561462981614562565b91506020830135614639816145fd565b809150509250929050565b60006020828403121561465657600080fd5b813561466181614562565b9392505050565b6000806040838503121561467b57600080fd5b823561468681614562565b9150602083013561463981614562565b803562ffffff811681146146a957600080fd5b919050565b600080604083850312156146c157600080fd5b6146ca83614696565b91506146d860208401614696565b90509250929050565b6000602082840312156146f357600080fd5b8135614661816145fd565b600181811c9082168061471257607f821691505b60208210810361473257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008261476b57634e487b7160e01b600052601260045260246000fd5b500490565b602080825260079082015266616c726561647960c81b604082015260600190565b6000602082840312156147a357600080fd5b5051919050565b80820180821115610db757610db7614738565b6000602082840312156147cf57600080fd5b8151614661816145fd565b6000602082840312156147ec57600080fd5b815161466181614562565b60008060006060848603121561480c57600080fd5b8351925060208401519150604084015190509250925092565b62ffffff81811683821601908082111561484157614841614738565b5092915050565b6020808252600f908201526e73656c6c20666565203c3d2032302560881b604082015260600190565b6020808252600e908201526d62757920666565203c3d2032302560901b604082015260600190565b600080600080600080600080610100898b0312156148b657600080fd5b88516148c181614562565b809850506020890151965060408901519550606089015194506080890151935060a0890151925060c0890151915060e089015190509295985092959890939650565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8082028115828204841417610db757610db7614738565b81810381811115610db757610db7614738565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b83811015614a045781516001600160a01b0316875295820195908201906001016149df565b509495945050505050565b85815284602082015260a060408201526000614a2e60a08301866149cb565b6001600160a01b0394909416606083015250608001529392505050565b60018060a01b038616815284602082015283604082015260a060608201526000614a7860a08301856149cb565b90508260808301529695505050505050565b60008251614a9c81846020870161450b565b919091019291505056fea26469706673582212201809c771636edbf78a140981dd48d0afe04c55f7fa6c1831117d053de1e670f764736f6c63430008130033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000003a000000000000000000000000065438378b3793c1184041cdfe42ee4efc7419361000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000071afd498d00000000000000000000000000000000000000000000000000000000246139ca8000000000000000000000000000000000000000000000000000000006d23ad5f800000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000958504a702840eea022cc59b02ddea9edfb855070000000000000000000000009cc421962fc72f11c5c2ddf79fe6b5fe5e7cd94e000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000004e20000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000186a0000000000000000000000000000000000000000000000000000000000002bf200000000000000000000000000000000000000000000000000000000000000fa0000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000c0dcc752af9be6a07a67934471d7cd901a6094e60000000000000000000000001ccfe8c40ef259566433716002e379dfffbf5a3e00000000000000000000000000000000000000000000000000000000000000074c616479626f74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005244c6164790000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000f041690d9cbe398d3d51f25c87902c1403affe66

-----Decoded View---------------
Arg [0] : args (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
Arg [1] : autoApproveAddressList (address[]): 0xF041690D9cBE398d3D51F25C87902C1403AffE66
Arg [2] : _gemAntiBot (address): 0x65438378B3793C1184041cdfE42ee4EFc7419361
Arg [3] : referrer (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
31 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000003a0
Arg [2] : 00000000000000000000000065438378b3793c1184041cdfe42ee4efc7419361
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 00000000000000000000000000000000000000000000000000000000000002a0
Arg [5] : 00000000000000000000000000000000000000000000000000000000000002e0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [7] : 00000000000000000000000000000000000000000000000000071afd498d0000
Arg [8] : 0000000000000000000000000000000000000000000000000000246139ca8000
Arg [9] : 000000000000000000000000000000000000000000000000000006d23ad5f800
Arg [10] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [11] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [12] : 000000000000000000000000958504a702840eea022cc59b02ddea9edfb85507
Arg [13] : 0000000000000000000000009cc421962fc72f11c5c2ddf79fe6b5fe5e7cd94e
Arg [14] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [15] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [16] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [17] : 0000000000000000000000000000000000000000000000000000000000004e20
Arg [18] : 0000000000000000000000000000000000000000000000000000000000002710
Arg [19] : 00000000000000000000000000000000000000000000000000000000000186a0
Arg [20] : 000000000000000000000000000000000000000000000000000000000002bf20
Arg [21] : 0000000000000000000000000000000000000000000000000000000000000fa0
Arg [22] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [23] : 000000000000000000000000c0dcc752af9be6a07a67934471d7cd901a6094e6
Arg [24] : 0000000000000000000000001ccfe8c40ef259566433716002e379dfffbf5a3e
Arg [25] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [26] : 4c616479626f7400000000000000000000000000000000000000000000000000
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [28] : 244c616479000000000000000000000000000000000000000000000000000000
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [30] : 000000000000000000000000f041690d9cbe398d3d51f25c87902c1403affe66


Deployed Bytecode Sourcemap

30816:29891:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6025:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6943:201;;;;;;;;;;-1:-1:-1;6943:201:0;;;;;:::i;:::-;;:::i;:::-;;;1291:14:1;;1284:22;1266:41;;1254:2;1239:18;6943:201:0;1126:187:1;32075:26:0;;;;;;;;;;-1:-1:-1;32075:26:0;;;;;;;;;;;;;;1492:8:1;1480:21;;;1462:40;;1450:2;1435:18;32075:26:0;1318:190:1;47878:224:0;;;;;;;;;;-1:-1:-1;47878:224:0;;;;;:::i;:::-;;:::i;:::-;;6340:108;;;;;;;;;;-1:-1:-1;6428:12:0;;6340:108;;;1844:25:1;;;1832:2;1817:18;6340:108:0;1698:177:1;42229:257:0;;;;;;;;;;-1:-1:-1;42229:257:0;;;;;:::i;:::-;;:::i;7150:261::-;;;;;;;;;;-1:-1:-1;7150:261:0;;;;;:::i;:::-;;:::i;46748:323::-;;;;;;;;;;-1:-1:-1;46748:323:0;;;;;:::i;:::-;;:::i;31925:30::-;;;;;;;;;;-1:-1:-1;31925:30:0;;;;-1:-1:-1;;;;;31925:30:0;;;;;;-1:-1:-1;;;;;3015:32:1;;;2997:51;;2985:2;2970:18;31925:30:0;2851:203:1;48342:180:0;;;;;;;;;;;;;:::i;43147:92::-;;;;;;;;;;-1:-1:-1;43222:9:0;;-1:-1:-1;;;43222:9:0;;;;43147:92;;3231:4:1;3219:17;;;3201:36;;3189:2;3174:18;43147:92:0;3059:184:1;49113:169:0;;;;;;;;;;-1:-1:-1;49113:169:0;;;;;:::i;:::-;;:::i;7417:238::-;;;;;;;;;;-1:-1:-1;7417:238:0;;;;;:::i;:::-;;:::i;31719:35::-;;;;;;;;;;-1:-1:-1;31719:35:0;;;;-1:-1:-1;;;;;31719:35:0;;;31791:33;;;;;;;;;;-1:-1:-1;31791:33:0;;;;-1:-1:-1;;;;;31791:33:0;;;50784:142;;;;;;;;;;;;;:::i;48530:126::-;;;;;;;;;;-1:-1:-1;48530:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;48620:28:0;48596:4;48620:28;;;:19;:28;;;;;;;;;48530:126;43247:239;;;;;;;;;;-1:-1:-1;43247:239:0;;;;;:::i;:::-;;:::i;51111:181::-;;;;;;;;;;;;;:::i;48895:210::-;;;;;;;;;;-1:-1:-1;48895:210:0;;;;;:::i;:::-;;:::i;39820:1020::-;;;;;;;;;;-1:-1:-1;39820:1020:0;;;;;:::i;:::-;;:::i;50326:450::-;;;;;;;;;;-1:-1:-1;50326:450:0;;;;;:::i;:::-;;:::i;6454:127::-;;;;;;;;;;-1:-1:-1;6454:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;6555:18:0;6528:7;6555:18;;;;;;;;;;;;6454:127;11659:103;;;;;;;;;;;;;:::i;32260:30::-;;;;;;;;;;-1:-1:-1;32260:30:0;;;;-1:-1:-1;;;;;32260:30:0;;;32624:25;;;;;;;;;;-1:-1:-1;32624:25:0;;;;-1:-1:-1;;;;;32624:25:0;;;32222:29;;;;;;;;;;-1:-1:-1;32222:29:0;;;;-1:-1:-1;;;32222:29:0;;;;;;31671:39;;;;;;;;;;-1:-1:-1;31671:39:0;;;;-1:-1:-1;;;;;31671:39:0;;;45325:620;;;;;;;;;;-1:-1:-1;45325:620:0;;;;;:::i;:::-;;:::i;31863:23::-;;;;;;;;;;-1:-1:-1;31863:23:0;;;;-1:-1:-1;;;;;31863:23:0;;;47077:466;;;;;;;;;;-1:-1:-1;47077:466:0;;;;;:::i;:::-;;:::i;41100:1121::-;;;;;;;;;;-1:-1:-1;41100:1121:0;;;;;:::i;:::-;;:::i;60497:207::-;;;;;;;;;;-1:-1:-1;60497:207:0;;;;;:::i;:::-;;:::i;11428:87::-;;;;;;;;;;-1:-1:-1;11501:6:0;;-1:-1:-1;;;;;11501:6:0;11428:87;;32185:30;;;;;;;;;;-1:-1:-1;32185:30:0;;;;-1:-1:-1;;;32185:30:0;;;;;;6131:104;;;;;;;;;;;;;:::i;45955:304::-;;;;;;;;;;-1:-1:-1;45955:304:0;;;;;:::i;:::-;;:::i;32297:31::-;;;;;;;;;;;;;;;;47722:148;;;;;;;;;;;;;:::i;7661:436::-;;;;;;;;;;-1:-1:-1;7661:436:0;;;;;:::i;:::-;;:::i;48664:223::-;;;;;;;;;;-1:-1:-1;48664:223:0;;;;;:::i;:::-;;:::i;6587:193::-;;;;;;;;;;-1:-1:-1;6587:193:0;;;;;:::i;:::-;;:::i;42494:379::-;;;;;;;;;;-1:-1:-1;42494:379:0;;;;;:::i;:::-;;:::i;49520:390::-;;;;;;;;;;-1:-1:-1;49520:390:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;5170:32:1;;;5152:51;;5234:2;5219:18;;5212:34;;;;5262:18;;;5255:34;;;;5320:2;5305:18;;5298:34;;;;5363:3;5348:19;;5341:35;5190:3;5392:19;;5385:35;5451:3;5436:19;;5429:35;5495:3;5480:19;;5473:35;5139:3;5124:19;49520:390:0;4813:701:1;40848:244:0;;;;;;;;;;-1:-1:-1;40848:244:0;;;;;:::i;:::-;;:::i;32689:57::-;;;;;;;;;;-1:-1:-1;32689:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;48110:224;;;;;;;;;;;;;:::i;42884:255::-;;;;;;;;;;-1:-1:-1;42884:255:0;;;;;:::i;:::-;;:::i;49290:222::-;;;;;;;;;;-1:-1:-1;49290:222:0;;;;;:::i;:::-;;:::i;32366:35::-;;;;;;;;;;;;;;;;31831:25;;;;;;;;;;-1:-1:-1;31831:25:0;;;;-1:-1:-1;;;;;31831:25:0;;;43977:659;;;;;;;;;;-1:-1:-1;43977:659:0;;;;;:::i;:::-;;:::i;32656:26::-;;;;;;;;;;-1:-1:-1;32656:26:0;;;;-1:-1:-1;;;32656:26:0;;;;;;6786:151;;;;;;;;;;-1:-1:-1;6786:151:0;;;;;:::i;:::-;;:::i;32041:27::-;;;;;;;;;;-1:-1:-1;32041:27:0;;;;;;;;60307:184;;;;;;;;;;;;;:::i;31999:33::-;;;;;;;;;;;;;;;;50934:169;;;;;;;;;;;;;:::i;32467:66::-;;;;;;;;;;-1:-1:-1;32467:66:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;47551:163;;;;;;;;;;-1:-1:-1;47551:163:0;;;;;:::i;:::-;;:::i;44644:673::-;;;;;;;;;;-1:-1:-1;44644:673:0;;;;;:::i;:::-;;:::i;43494:475::-;;;;;;;;;;-1:-1:-1;43494:475:0;;;;;:::i;:::-;;:::i;32147:29::-;;;;;;;;;;-1:-1:-1;32147:29:0;;;;-1:-1:-1;;;32147:29:0;;;;;;49918:400;;;;;;;;;;-1:-1:-1;49918:400:0;;;;;:::i;:::-;;:::i;11768:201::-;;;;;;;;;;-1:-1:-1;11768:201:0;;;;;:::i;:::-;;:::i;32110:30::-;;;;;;;;;;-1:-1:-1;32110:30:0;;;;-1:-1:-1;;;32110:30:0;;;;;;31964:26;;;;;;;;;;-1:-1:-1;31964:26:0;;;;-1:-1:-1;;;;;31964:26:0;;;32335:24;;;;;;;;;;;;;;;;39676:101;;;;;;;;;;-1:-1:-1;39676:101:0;;;;;:::i;:::-;;:::i;6025:100::-;6079:13;6112:5;6105:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6025:100;:::o;6943:201::-;7026:4;5489:10;7082:32;5489:10;7098:7;7107:6;7082:8;:32::i;:::-;7132:4;7125:11;;;6943:201;;;;;:::o;47878:224::-;11389:13;:11;:13::i;:::-;48032:15:::1;::::0;47994:100:::1;::::0;-1:-1:-1;;;47994:100:0;;::::1;::::0;::::1;1844:25:1::0;;;-1:-1:-1;;;;;48032:15:0;;::::1;::::0;47994:92:::1;::::0;1817:18:1;;47994:100:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47878:224:::0;:::o;42229:257::-;11389:13;:11;:13::i;:::-;42340:5:::1;42324:13;6428:12:::0;;;6340:108;42324:13:::1;:21;;;;:::i;:::-;42312:10;:33;;42304:79;;;::::0;-1:-1:-1;;;42304:79:0;;6706:2:1;42304:79:0::1;::::0;::::1;6688:21:1::0;6745:2;6725:18;;;6718:30;6784:34;6764:18;;;6757:62;-1:-1:-1;;;6835:18:1;;;6828:31;6876:19;;42304:79:0::1;;;;;;;;;42427:9;::::0;42399:38:::1;::::0;;7080:25:1;;;7136:2;7121:18;;7114:34;;;;42399:38:0::1;::::0;7053:18:1;42399:38:0::1;;;;;;;42448:9;:22:::0;42229:257::o;7150:261::-;7247:4;5489:10;7305:38;7321:4;5489:10;7336:6;7305:15;:38::i;:::-;7354:27;7364:4;7370:2;7374:6;7354:9;:27::i;:::-;-1:-1:-1;7399:4:0;;7150:261;-1:-1:-1;;;;7150:261:0:o;46748:323::-;11389:13;:11;:13::i;:::-;-1:-1:-1;;;;;46878:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:49;::::1;;:43;::::0;;::::1;:49;;::::0;46870:69:::1;;;;-1:-1:-1::0;;;46870:69:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;46950:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:50;;-1:-1:-1;;46950:50:0::1;::::0;::::1;;::::0;;::::1;::::0;;;47016:47;;1266:41:1;;;47016:47:0::1;::::0;1239:18:1;47016:47:0::1;;;;;;;;46748:323:::0;;:::o;48342:180::-;48470:15;;48432:82;;;-1:-1:-1;;;48432:82:0;;;;48405:7;;-1:-1:-1;;;;;48470:15:0;;48432:80;;:82;;;;;;;;;;;;;;48470:15;48432:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48425:89;;48342:180;:::o;49113:169::-;11389:13;:11;:13::i;:::-;49228:15:::1;::::0;49190:84:::1;::::0;-1:-1:-1;;;49190:84:0;;-1:-1:-1;;;;;3015:32:1;;;49190:84:0::1;::::0;::::1;2997:51:1::0;49228:15:0;;::::1;::::0;49190:75:::1;::::0;2970:18:1;;49190:84:0::1;2851:203:1::0;7417:238:0;7505:4;5489:10;7561:64;5489:10;7577:7;7614:10;7586:25;5489:10;7577:7;7586:9;:25::i;:::-;:38;;;;:::i;:::-;7561:8;:64::i;50784:142::-;50859:15;;50821:97;;-1:-1:-1;;;50821:97:0;;50899:10;50821:97;;;7997:51:1;50859:15:0;8064:18:1;;;8057:50;-1:-1:-1;;;;;50859:15:0;;;;50821:69;;7970:18:1;;50821:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;50784:142::o;43247:239::-;11389:13;:11;:13::i;:::-;43337:15:::1;::::0;-1:-1:-1;;;;;43337:23:0;;::::1;:15:::0;::::1;:23:::0;43329:43:::1;;;;-1:-1:-1::0;;;43329:43:0::1;;;;;;;:::i;:::-;43411:15;::::0;43388:47:::1;::::0;-1:-1:-1;;;;;43388:47:0;;::::1;::::0;43411:15:::1;::::0;43388:47:::1;::::0;43411:15:::1;::::0;43388:47:::1;43446:15;:24:::0;;-1:-1:-1;;;;;;43446:24:0::1;-1:-1:-1::0;;;;;43446:24:0;;;::::1;::::0;;;::::1;::::0;;43247:239::o;51111:181::-;51242:15;;51204:80;;;-1:-1:-1;;;51204:80:0;;;;51177:7;;-1:-1:-1;;;;;51242:15:0;;51204:78;;:80;;;;;;;;;;;;;;51242:15;51204:80;;;;;;;;;;;;;;48895:210;49062:15;;49024:73;;-1:-1:-1;;;49024:73:0;;-1:-1:-1;;;;;3015:32:1;;;49024:73:0;;;2997:51:1;48992:7:0;;49062:15;;49024:64;;2970:18:1;;49024:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39820:1020::-;11389:13;:11;:13::i;:::-;39954:18:::1;:40:::0;;-1:-1:-1;;;;;;39954:40:0::1;-1:-1:-1::0;;;;;39954:40:0;;::::1;::::0;;;::::1;::::0;;;40008:10:::1;::::0;:25;;::::1;:10:::0;::::1;:25;40005:354;;40049:41;40066:4;40073:11:::0;-1:-1:-1;;40049:8:0::1;:41::i;:::-;40148:15;::::0;40110:91:::1;::::0;-1:-1:-1;;;40110:91:0;;-1:-1:-1;;;;;3015:32:1;;;40110:91:0::1;::::0;::::1;2997:51:1::0;40148:15:0;;::::1;::::0;40110:78:::1;::::0;2970:18:1;;40110:91:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40105:203;;40258:15;::::0;40220:88:::1;::::0;-1:-1:-1;;;40220:88:0;;-1:-1:-1;;;;;3015:32:1;;;40220:88:0::1;::::0;::::1;2997:51:1::0;40258:15:0;;::::1;::::0;40220:75:::1;::::0;2970:18:1;;40220:88:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;40105:203;40323:10;:24:::0;;-1:-1:-1;;;;;;40323:24:0::1;-1:-1:-1::0;;;;;40323:24:0;::::1;;::::0;;40005:354:::1;40418:10;;;;;;;;;-1:-1:-1::0;;;;;40418:10:0::1;-1:-1:-1::0;;;;;40399:38:0::1;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40494:18;::::0;40381:142:::1;::::0;-1:-1:-1;;;40381:142:0;;40474:4:::1;40381:142;::::0;::::1;8836:34:1::0;-1:-1:-1;;;;;40494:18:0;;::::1;8886::1::0;;;8879:43;40381:70:0;::::1;::::0;::::1;::::0;8771:18:1;;40381:142:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40370:8;:153:::0;;-1:-1:-1;;;;;;40370:153:0::1;-1:-1:-1::0;;;;;40370:153:0;;::::1;;::::0;;40578:10:::1;::::0;40559:37:::1;::::0;;-1:-1:-1;;;40559:37:0;;;;40578:10;;;::::1;::::0;40559:35:::1;::::0;:37:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;40578:10;40559:37:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40537:18;::::0;-1:-1:-1;;;;;40537:18:0;;::::1;:59:::0;::::1;;40534:157;;40663:10;::::0;40631:18:::1;::::0;40624:55:::1;::::0;-1:-1:-1;;;;;40631:18:0;;::::1;::::0;40663:10:::1;-1:-1:-1::0;;40624:38:0::1;:55::i;:::-;40734:10;::::0;40746:8:::1;::::0;40756:18:::1;::::0;40716:59:::1;::::0;;-1:-1:-1;;;;;40734:10:0;;::::1;9173:34:1::0;;40746:8:0;;::::1;9238:2:1::0;9223:18;;9216:43;40756:18:0;::::1;9275::1::0;;;9268:43;40716:59:0;;::::1;::::0;;;;9123:2:1;40716:59:0;;::::1;40815:8;::::0;40786:44:::1;::::0;-1:-1:-1;;;;;40815:8:0::1;::::0;40786:28:::1;:44::i;:::-;39820:1020:::0;;:::o;50326:450::-;50546:15;;50508:67;;-1:-1:-1;;;;;;50508:67:0;;;;;1844:25:1;;;50406:18:0;;;;;;-1:-1:-1;;;;;50546:15:0;;50508:62;;1817:18:1;;50508:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50591:177;;;9864:25:1;;;9920:2;9905:18;;9898:34;;;9948:18;;;9941:34;;;10006:2;9991:18;;9984:34;;;50391:184:0;;-1:-1:-1;50391:184:0;;-1:-1:-1;50391:184:0;-1:-1:-1;50747:10:0;;50709:5;;50591:177;;9851:3:1;9836:19;50591:177:0;;;;;;;50380:396;;;50326:450;:::o;11659:103::-;11389:13;:11;:13::i;:::-;11724:30:::1;11751:1;11724:18;:30::i;:::-;11659:103::o:0;45325:620::-;11389:13;:11;:13::i;:::-;45504:16:::1;::::0;45524:6:::1;::::0;45504:16:::1;-1:-1:-1::0;;;45504:16:0;::::1;::::0;::::1;::::0;45472:31:::1;::::0;-1:-1:-1;;;45487:16:0;;::::1;;45472:14:::0;:31:::1;:::i;:::-;:48;;;;:::i;:::-;:58;;;;45450:123;;;;-1:-1:-1::0;;;45450:123:0::1;;;;;;;:::i;:::-;45636:15;::::0;45655:6:::1;::::0;45636:15:::1;-1:-1:-1::0;;;45636:15:0;::::1;::::0;::::1;::::0;45606:29:::1;::::0;-1:-1:-1;;;45620:15:0;;::::1;;45606:13:::0;:29:::1;:::i;:::-;:45;;;;:::i;:::-;:55;;;;45584:119;;;;-1:-1:-1::0;;;45584:119:0::1;;;;;;;:::i;:::-;45807:13;::::0;45719:130:::1;::::0;;45807:13:::1;11159:15:1::0;;;11141:34;;11211:15;;;11206:2;11191:18;;11184:43;45807:13:0;;::::1;11243:18:1::0;;;11236:43;45836:12:0;;;::::1;::::0;;::::1;11310:2:1::0;11295:18;;11288:43;45719:130:0;::::1;::::0;;;;11101:3:1;45719:130:0;;::::1;45860:13;:30:::0;;::::1;45901:28:::0;;::::1;::::0;::::1;-1:-1:-1::0;;45901:28:0;;;45860:30;;;::::1;45901:28:::0;;;;;;;::::1;::::0;;45325:620::o;47077:466::-;11389:13;:11;:13::i;:::-;47189:6:::1;47177:8;:18;;:40;;;;;47211:6;47199:8;:18;;47177:40;47155:142;;;::::0;-1:-1:-1;;;47155:142:0;;11544:2:1;47155:142:0::1;::::0;::::1;11526:21:1::0;11583:2;11563:18;;;11556:30;11622:34;11602:18;;;11595:62;-1:-1:-1;;;11673:18:1;;;11666:50;11733:19;;47155:142:0::1;11342:416:1::0;47155:142:0::1;47342:16;;47330:8;:28:::0;47308:122:::1;;;::::0;-1:-1:-1;;;47308:122:0;;11965:2:1;47308:122:0::1;::::0;::::1;11947:21:1::0;12004:2;11984:18;;;11977:30;12043:34;12023:18;;;12016:62;-1:-1:-1;;;12094:18:1;;;12087:42;12146:19;;47308:122:0::1;11763:408:1::0;47308:122:0::1;47480:16;::::0;47446:51:::1;::::0;47470:8;;47446:51:::1;::::0;;;::::1;47508:16;:27:::0;47077:466::o;41100:1121::-;11389:13;:11;:13::i;:::-;41215:15:::1;::::0;-1:-1:-1;;;;;41215:15:0;;::::1;41201:29:::0;;::::1;::::0;41179:124:::1;;;::::0;-1:-1:-1;;;41179:124:0;;12378:2:1;41179:124:0::1;::::0;::::1;12360:21:1::0;12417:2;12397:18;;;12390:30;12456:34;12436:18;;;12429:62;-1:-1:-1;;;12507:18:1;;;12500:43;12560:19;;41179:124:0::1;12176:409:1::0;41179:124:0::1;41316:26;41352:10;41316:47;;41475:4;-1:-1:-1::0;;;;;41398:82:0::1;41436:18;-1:-1:-1::0;;;;;41398:63:0::1;;:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41398:82:0::1;;41376:207;;;::::0;-1:-1:-1;;;41376:207:0;;12792:2:1;41376:207:0::1;::::0;::::1;12774:21:1::0;12831:2;12811:18;;;12804:30;12870:34;12850:18;;;12843:62;12941:34;12921:18;;;12914:62;-1:-1:-1;;;12992:19:1;;;12985:42;13044:19;;41376:207:0::1;12590:479:1::0;41376:207:0::1;41596:98;::::0;-1:-1:-1;;;41596:98:0;;-1:-1:-1;;;;;41596:78:0;::::1;:98;::::0;::::1;2997:51:1::0;;;41596:78:0;::::1;::::0;2970:18:1;;41596:98:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41705:93:0::1;::::0;-1:-1:-1;;;41705:93:0;;41792:4:::1;41705:93;::::0;::::1;2997:51:1::0;-1:-1:-1;;;;;41705:78:0;::::1;::::0;-1:-1:-1;41705:78:0::1;::::0;-1:-1:-1;2970:18:1;;41705:93:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41847:18;-1:-1:-1::0;;;;;41809:78:0::1;;41888:7;11501:6:::0;;-1:-1:-1;;;;;11501:6:0;;11428:87;41888:7:::1;41809:87;::::0;-1:-1:-1;;;;;;41809:87:0::1;::::0;;;;;;-1:-1:-1;;;;;3015:32:1;;;41809:87:0::1;::::0;::::1;2997:51:1::0;2970:18;;41809:87:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;41986:10:0::1;::::0;41907:90:::1;::::0;-1:-1:-1;;;41907:90:0;;-1:-1:-1;;;;;41986:10:0;;::::1;41907:90;::::0;::::1;2997:51:1::0;41907:78:0;;::::1;::::0;-1:-1:-1;41907:78:0::1;::::0;-1:-1:-1;2970:18:1;;41907:90:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42087:8:0::1;::::0;42008:88:::1;::::0;-1:-1:-1;;;42008:88:0;;-1:-1:-1;;;;;42087:8:0;;::::1;42008:88;::::0;::::1;2997:51:1::0;42008:78:0;;::::1;::::0;-1:-1:-1;42008:78:0::1;::::0;-1:-1:-1;2970:18:1;;42008:88:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;42148:15:0::1;::::0;42114:50:::1;::::0;-1:-1:-1;;;;;42148:15:0;;::::1;::::0;-1:-1:-1;42114:50:0;;::::1;::::0;-1:-1:-1;42114:50:0::1;::::0;42148:15:::1;::::0;42114:50:::1;42177:15;:36:::0;;-1:-1:-1;;;;;;42177:36:0::1;-1:-1:-1::0;;;;;42177:36:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;41100:1121:0:o;60497:207::-;11389:13;:11;:13::i;:::-;-1:-1:-1;;;;;60572:22:0;::::1;60580:4;60572:22:::0;60564:46:::1;;;::::0;-1:-1:-1;;;60564:46:0;;13276:2:1;60564:46:0::1;::::0;::::1;13258:21:1::0;13315:2;13295:18;;;13288:30;-1:-1:-1;;;13334:18:1;;;13327:41;13385:18;;60564:46:0::1;13074:335:1::0;60564:46:0::1;60621:75;60648:7;11501:6:::0;;-1:-1:-1;;;;;11501:6:0;;11428:87;60648:7:::1;60657:38;::::0;-1:-1:-1;;;60657:38:0;;60689:4:::1;60657:38;::::0;::::1;2997:51:1::0;-1:-1:-1;;;;;60657:23:0;::::1;::::0;::::1;::::0;2970:18:1;;60657:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;60621:26:0;::::1;::::0;:75;:26:::1;:75::i;6131:104::-:0;6187:13;6220:7;6213:14;;;;;:::i;45955:304::-;11389:13;:11;:13::i;:::-;46099:8:::1;::::0;-1:-1:-1;;;;;46099:8:0;;::::1;46091:16:::0;;::::1;::::0;46069:128:::1;;;::::0;-1:-1:-1;;;46069:128:0;;13616:2:1;46069:128:0::1;::::0;::::1;13598:21:1::0;13655:2;13635:18;;;13628:30;13694:34;13674:18;;;13667:62;13765:32;13745:18;;;13738:60;13815:19;;46069:128:0::1;13414:426:1::0;46069:128:0::1;46210:41;46239:4;46245:5;46210:28;:41::i;47722:148::-:0;47834:15;;47796:66;;;-1:-1:-1;;;47796:66:0;;;;47769:7;;-1:-1:-1;;;;;47834:15:0;;47796:64;;:66;;;;;;;;;;;;;;47834:15;47796:66;;;;;;;;;;;;;;7661:436;7754:4;5489:10;7754:4;7837:25;5489:10;7854:7;7837:9;:25::i;:::-;7810:52;;7901:15;7881:16;:35;;7873:85;;;;-1:-1:-1;;;7873:85:0;;14047:2:1;7873:85:0;;;14029:21:1;14086:2;14066:18;;;14059:30;14125:34;14105:18;;;14098:62;-1:-1:-1;;;14176:18:1;;;14169:35;14221:19;;7873:85:0;13845:401:1;7873:85:0;7994:60;8003:5;8010:7;8038:15;8019:16;:34;7994:8;:60::i;48664:223::-;48831:15;;48793:86;;-1:-1:-1;;;48793:86:0;;-1:-1:-1;;;;;3015:32:1;;;48793:86:0;;;2997:51:1;48761:7:0;;48831:15;;48793:77;;2970:18:1;;48793:86:0;2851:203:1;6587:193:0;6666:4;5489:10;6722:28;5489:10;6739:2;6743:6;6722:9;:28::i;42494:379::-;11389:13;:11;:13::i;:::-;42661:5:::1;42645:13;6428:12:::0;;;6340:108;42645:13:::1;:21;;;;:::i;:::-;42622;:44;;42614:101;;;::::0;-1:-1:-1;;;42614:101:0;;14453:2:1;42614:101:0::1;::::0;::::1;14435:21:1::0;14492:2;14472:18;;;14465:30;14531:34;14511:18;;;14504:62;-1:-1:-1;;;14582:18:1;;;14575:42;14634:19;;42614:101:0::1;14251:408:1::0;42614:101:0::1;42781:20;::::0;42731:71:::1;::::0;;7080:25:1;;;7136:2;7121:18;;7114:34;;;;42731:71:0::1;::::0;7053:18:1;42731:71:0::1;;;;;;;42813:20;:44:::0;42494:379::o;49520:390::-;49866:15;;49828:74;;-1:-1:-1;;;49828:74:0;;-1:-1:-1;;;;;3015:32:1;;;49828:74:0;;;2997:51:1;49634:7:0;;;;;;;;;;;;;;;;49866:15;;;49828:65;;2970:18:1;;49828:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49821:81;;;;;;;;;;;;;;;;49520:390;;;;;;;;;:::o;40848:244::-;11389:13;:11;:13::i;:::-;40942:1:::1;40933:6;:10;40925:45;;;::::0;-1:-1:-1;;;40925:45:0;;15552:2:1;40925:45:0::1;::::0;::::1;15534:21:1::0;15591:2;15571:18;;;15564:30;-1:-1:-1;;;15610:18:1;;;15603:52;15672:18;;40925:45:0::1;15350:346:1::0;40925:45:0::1;41019:18;::::0;40986:52:::1;::::0;;7080:25:1;;;7136:2;7121:18;;7114:34;;;;40986:52:0::1;::::0;7053:18:1;40986:52:0::1;;;;;;;41049:18;:27:::0;40848:244::o;48110:224::-;48276:15;;48238:88;;;-1:-1:-1;;;48238:88:0;;;;48206:7;;-1:-1:-1;;;;;48276:15:0;;48238:86;;:88;;;;;;;;;;;;;;48276:15;48238:88;;;;;;;;;;;;;;42884:255;11389:13;:11;:13::i;:::-;-1:-1:-1;;;;;42977:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;42969:60:::1;;;;-1:-1:-1::0;;;42969:60:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;43040:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;43040:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;43097:34;;1266:41:1;;;43097:34:0::1;::::0;1239:18:1;43097:34:0::1;1126:187:1::0;49290:222:0;49455:15;;49417:87;;-1:-1:-1;;;49417:87:0;;-1:-1:-1;;;;;3015:32:1;;;49417:87:0;;;2997:51:1;49388:4:0;;49455:15;;49417:78;;2970:18:1;;49417:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43977:659::-;11389:13;:11;:13::i;:::-;44168::::1;::::0;44185:6:::1;::::0;44168:13:::1;::::0;;::::1;::::0;44133:34:::1;::::0;-1:-1:-1;;;44151:16:0;;::::1;;44133:17:::0;:34:::1;:::i;:::-;:48;;;;:::i;:::-;:58;;;;44111:123;;;;-1:-1:-1::0;;;44111:123:0::1;;;;;;;:::i;:::-;44300:12;::::0;44316:6:::1;::::0;44300:12:::1;::::0;;::::1;::::0;::::1;::::0;44267:32:::1;::::0;-1:-1:-1;;;44284:15:0;;::::1;;44267:16:::0;:32:::1;:::i;:::-;:45;;;;:::i;:::-;:55;;;;44245:119;;;;-1:-1:-1::0;;;44245:119:0::1;;;;;;;:::i;:::-;44476:16;::::0;44380:153:::1;::::0;;44476:16:::1;11159:15:1::0;;;11141:34;;11211:15;;;11206:2;11191:18;;11184:43;-1:-1:-1;;;44476:16:0;::::1;::::0;::::1;11243:18:1::0;;;11236:43;-1:-1:-1;;;44507:15:0;;::::1;::::0;;::::1;11310:2:1::0;11295:18;;11288:43;44380:153:0;::::1;::::0;;;;11101:3:1;44380:153:0;;::::1;44544:16;:36:::0;;-1:-1:-1;;44591:34:0;-1:-1:-1;;;44544:36:0::1;::::0;;::::1;;-1:-1:-1::0;;44591:34:0;;-1:-1:-1;;;44591:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;43977:659::o;6786:151::-;-1:-1:-1;;;;;6902:18:0;;;6875:7;6902:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;6786:151::o;60307:184::-;11389:13;:11;:13::i;:::-;60361:12:::1;60385:7;11501:6:::0;;-1:-1:-1;;;;;11501:6:0;;11428:87;60385:7:::1;-1:-1:-1::0;;;;;60377:21:0::1;60406;60377:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60360:72;;;60451:7;60443:40;;;::::0;-1:-1:-1;;;60443:40:0;;16113:2:1;60443:40:0::1;::::0;::::1;16095:21:1::0;16152:2;16132:18;;;16125:30;-1:-1:-1;;;16171:18:1;;;16164:50;16231:18;;60443:40:0::1;15911:344:1::0;50934:169:0;51055:15;;51017:78;;;-1:-1:-1;;;51017:78:0;;;;50990:7;;-1:-1:-1;;;;;51055:15:0;;51017:76;;:78;;;;;;;;;;;;;;51055:15;51017:78;;;;;;;;;;;;;;47551:163;11389:13;:11;:13::i;:::-;47663:15:::1;::::0;47625:81:::1;::::0;-1:-1:-1;;;47625:81:0;;::::1;::::0;::::1;1844:25:1::0;;;-1:-1:-1;;;;;47663:15:0;;::::1;::::0;47625:70:::1;::::0;1817:18:1;;47625:81:0::1;1698:177:1::0;44644:673:0;11389:13;:11;:13::i;:::-;44835::::1;::::0;44852:6:::1;::::0;44835:13:::1;::::0;;::::1;::::0;44800:34:::1;::::0;-1:-1:-1;;;44818:16:0;;::::1;;44800:17:::0;:34:::1;:::i;:::-;:48;;;;:::i;:::-;:58;;;;44778:123;;;;-1:-1:-1::0;;;44778:123:0::1;;;;;;;:::i;:::-;44967:12;::::0;44983:6:::1;::::0;44967:12:::1;::::0;;::::1;::::0;::::1;::::0;44934:32:::1;::::0;-1:-1:-1;;;44951:15:0;;::::1;;44934:16:::0;:32:::1;:::i;:::-;:45;;;;:::i;:::-;:55;;;;44912:119;;;;-1:-1:-1::0;;;44912:119:0::1;;;;;;;:::i;:::-;45150:16;::::0;45054:153:::1;::::0;;45150:16:::1;11159:15:1::0;;;11141:34;;11211:15;;;11206:2;11191:18;;11184:43;-1:-1:-1;;;45150:16:0;::::1;::::0;::::1;11243:18:1::0;;;11236:43;-1:-1:-1;;;45181:15:0;;::::1;::::0;;::::1;11310:2:1::0;11295:18;;11288:43;45054:153:0;::::1;::::0;;;;11101:3:1;45054:153:0;;::::1;45220:16;:36:::0;;-1:-1:-1;;;;45267:34:0;-1:-1:-1;;;45220:36:0::1;::::0;;::::1;;-1:-1:-1::0;;;;45267:34:0;;-1:-1:-1;;;45267:34:0;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;44644:673::o;43494:475::-;11389:13;:11;:13::i;:::-;43625:11:::1;::::0;-1:-1:-1;;;;;43602:34:0;;::::1;43625:11:::0;::::1;43602:34;::::0;::::1;::::0;:79:::1;;-1:-1:-1::0;43663:18:0::1;::::0;-1:-1:-1;;;;;43640:41:0;;::::1;43663:18:::0;::::1;43640:41;;43602:79;43599:145;;;-1:-1:-1::0;43727:4:0::1;43599:145;43762:20;::::0;-1:-1:-1;;;;;43762:43:0;;::::1;:20:::0;::::1;:43:::0;43754:63:::1;;;;-1:-1:-1::0;;;43754:63:0::1;;;;;;;:::i;:::-;43884:20;::::0;43833:72:::1;::::0;-1:-1:-1;;;;;43884:20:0;;::::1;::::0;43833:72;::::1;::::0;::::1;::::0;43884:20:::1;::::0;43833:72:::1;43916:20;:44:::0;;-1:-1:-1;;;;;;43916:44:0::1;-1:-1:-1::0;;;;;43916:44:0;;;::::1;::::0;;;::::1;::::0;;43494:475::o;49918:400::-;50269:15;;50231:79;;-1:-1:-1;;;50231:79:0;;;;;1844:25:1;;;50037:7:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;50269:15:0;;;;50231:72;;1817:18:1;;50231:79:0;1698:177:1;11768:201:0;11389:13;:11;:13::i;:::-;-1:-1:-1;;;;;11857:22:0;::::1;11849:73;;;::::0;-1:-1:-1;;;11849:73:0;;16462:2:1;11849:73:0::1;::::0;::::1;16444:21:1::0;16501:2;16481:18;;;16474:30;16540:34;16520:18;;;16513:62;-1:-1:-1;;;16591:18:1;;;16584:36;16637:19;;11849:73:0::1;16260:402:1::0;11849:73:0::1;11933:28;11952:8;11933:18;:28::i;39676:101::-:0;11389:13;:11;:13::i;:::-;39744:14:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;39744:25:0::1;-1:-1:-1::0;;;;39744:25:0;;::::1;::::0;;;::::1;::::0;;39676:101::o;10150:346::-;-1:-1:-1;;;;;10252:19:0;;10244:68;;;;-1:-1:-1;;;10244:68:0;;16869:2:1;10244:68:0;;;16851:21:1;16908:2;16888:18;;;16881:30;16947:34;16927:18;;;16920:62;-1:-1:-1;;;16998:18:1;;;16991:34;17042:19;;10244:68:0;16667:400:1;10244:68:0;-1:-1:-1;;;;;10331:21:0;;10323:68;;;;-1:-1:-1;;;10323:68:0;;17274:2:1;10323:68:0;;;17256:21:1;17313:2;17293:18;;;17286:30;17352:34;17332:18;;;17325:62;-1:-1:-1;;;17403:18:1;;;17396:32;17445:19;;10323:68:0;17072:398:1;10323:68:0;-1:-1:-1;;;;;10404:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10456:32;;1844:25:1;;;10456:32:0;;1817:18:1;10456:32:0;;;;;;;10150:346;;;:::o;11521:132::-;11501:6;;-1:-1:-1;;;;;11501:6:0;5489:10;11585:23;11577:68;;;;-1:-1:-1;;;11577:68:0;;17677:2:1;11577:68:0;;;17659:21:1;;;17696:18;;;17689:30;17755:34;17735:18;;;17728:62;17807:18;;11577:68:0;17475:356:1;10502:419:0;10603:24;10630:25;10640:5;10647:7;10630:9;:25::i;:::-;10603:52;;-1:-1:-1;;10670:16:0;:37;10666:248;;10752:6;10732:16;:26;;10724:68;;;;-1:-1:-1;;;10724:68:0;;18038:2:1;10724:68:0;;;18020:21:1;18077:2;18057:18;;;18050:30;18116:31;18096:18;;;18089:59;18165:18;;10724:68:0;17836:353:1;10724:68:0;10836:51;10845:5;10852:7;10880:6;10861:16;:25;10836:8;:51::i;:::-;10592:329;10502:419;;;:::o;51300:3754::-;-1:-1:-1;;;;;51432:18:0;;51424:68;;;;-1:-1:-1;;;51424:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51511:16:0;;51503:64;;;;-1:-1:-1;;;51503:64:0;;;;;;;:::i;:::-;51593:1;51586:6;:8;51578:48;;;;-1:-1:-1;;;51578:48:0;;19206:2:1;51578:48:0;;;19188:21:1;19245:2;19225:18;;;19218:30;19284:29;19264:18;;;19257:57;19331:18;;51578:48:0;19004:351:1;51578:48:0;51641:14;;-1:-1:-1;;;51641:14:0;;;;51637:107;;;51684:10;;51672:60;;-1:-1:-1;;;51672:60:0;;-1:-1:-1;;;;;19618:15:1;;;51672:60:0;;;19600:34:1;19670:15;;;19650:18;;;19643:43;19702:18;;;19695:34;;;51684:10:0;;;;51672:42;;19535:18:1;;51672:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51637:107;51803:4;51754:28;6555:18;;;;;;;;;;;51861;;51837:42;;;;;;;51910:33;;-1:-1:-1;51935:8:0;;-1:-1:-1;;;51935:8:0;;;;51934:9;51910:33;:82;;;;-1:-1:-1;;;;;;51961:31:0;;;;;;:25;:31;;;;;;;;51960:32;51910:82;:114;;;;-1:-1:-1;11501:6:0;;-1:-1:-1;;;;;52009:15:0;;;11501:6;;52009:15;;51910:114;:144;;;;-1:-1:-1;11501:6:0;;-1:-1:-1;;;;;52041:13:0;;;11501:6;;52041:13;;51910:144;51892:650;;;52081:8;:15;;-1:-1:-1;;;;52081:15:0;-1:-1:-1;;;52081:15:0;;;52114:19;;:21;52111:80;;52154:37;52171:19;;52154:16;:37::i;:::-;52209:19;;:21;52206:78;;52249:35;52264:19;;52249:14;:35::i;:::-;52340:4;52301:18;6555;;;;;;;;;;;52364:12;;52361:66;;52395:32;52416:10;52395:20;:32::i;:::-;-1:-1:-1;52462:1:0;52442:19;:21;;;52478:19;:21;52514:8;:16;;-1:-1:-1;;;;52514:16:0;;;51892:650;52570:8;;-1:-1:-1;;;;;52595:25:0;;52554:12;52595:25;;;:19;:25;;;;;;52570:8;-1:-1:-1;;;52570:8:0;;;;;52569:9;;52595:25;;:52;;-1:-1:-1;;;;;;52624:23:0;;;;;;:19;:23;;;;;;;;52595:52;52591:100;;;-1:-1:-1;52674:5:0;52591:100;52701:21;52733;52765:18;52798:7;52794:887;;;-1:-1:-1;;;;;52826:31:0;;;;;;:25;:31;;;;;;;;52822:504;;;52898:12;;52911:7;;52891:19;;52898:12;;;;;52891:6;:19;:::i;:::-;:27;;;;:::i;:::-;52960:15;;52878:40;;-1:-1:-1;52976:7:0;;52953:22;;-1:-1:-1;;;52960:15:0;;;;52953:6;:22;:::i;:::-;:30;;;;:::i;:::-;53025:15;;52937:46;;-1:-1:-1;53041:7:0;;53018:22;;-1:-1:-1;;;53025:15:0;;;;53018:6;:22;:::i;:::-;:30;;;;:::i;:::-;53002:46;;52822:504;;;-1:-1:-1;;;;;53087:29:0;;;;;;:25;:29;;;;;;;;53083:243;;;53157:13;;53171:7;;53150:20;;53157:13;;53150:6;:20;:::i;:::-;:28;;;;:::i;:::-;53220:16;;53137:41;;-1:-1:-1;53237:7:0;;53213:23;;-1:-1:-1;;;53220:16:0;;;;53213:6;:23;:::i;:::-;:31;;;;:::i;:::-;53286:16;;53197:47;;-1:-1:-1;53303:7:0;;53279:23;;-1:-1:-1;;;53286:16:0;;;;53279:6;:23;:::i;:::-;:31;;;;:::i;:::-;53263:47;;53083:243;53382:13;53362:19;;:33;;;;:::i;:::-;53340:19;:55;53432:19;;:33;;53452:13;;53432:33;:::i;:::-;53410:19;:55;53480:17;53523:13;53498:24;53509:13;53498:10;:24;:::i;:::-;:38;;;;:::i;:::-;53480:56;-1:-1:-1;53558:16:0;53480:56;53558:6;:16;:::i;:::-;53551:23;-1:-1:-1;53592:11:0;;53589:80;;53622:47;53638:4;53652;53659:9;53622:15;:47::i;:::-;52807:874;52794:887;53701:33;53717:4;53723:2;53727:6;53701:15;:33::i;:::-;53802:15;;-1:-1:-1;;;;;53802:15:0;53764:65;53838:4;53845:15;53838:4;-1:-1:-1;;;;;6555:18:0;6528:7;6555:18;;;;;;;;;;;;6454:127;53845:15;53764:97;;-1:-1:-1;;;;;;53764:97:0;;;;;;;-1:-1:-1;;;;;20254:32:1;;;53764:97:0;;;20236:51:1;20303:18;;;20296:34;20209:18;;53764:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53747:135;53934:15;;-1:-1:-1;;;;;53934:15:0;53896:65;53970:2;53975:13;53970:2;-1:-1:-1;;;;;6555:18:0;6528:7;6555:18;;;;;;;;;;;;6454:127;53975:13;53896:93;;-1:-1:-1;;;;;;53896:93:0;;;;;;;-1:-1:-1;;;;;20254:32:1;;;53896:93:0;;;20236:51:1;20303:18;;;20296:34;20209:18;;53896:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53892:109;54018:8;;-1:-1:-1;;;54018:8:0;;;;54013:1034;;-1:-1:-1;;;;;54048:40:0;;;;;;:34;:40;;;;;;;;54043:215;;54149:20;;54139:6;:30;;54109:133;;;;-1:-1:-1;;;54109:133:0;;20543:2:1;54109:133:0;;;20525:21:1;20582:2;20562:18;;;20555:30;20621:31;20601:18;;;20594:59;20670:18;;54109:133:0;20341:353:1;54109:133:0;-1:-1:-1;;;;;54277:38:0;;;;;;:34;:38;;;;;;;;54272:211;;54383:9;;-1:-1:-1;;;;;6555:18:0;;6528:7;6555:18;;;;;;;;;;;54366:26;;54336:131;;;;-1:-1:-1;;;54336:131:0;;20901:2:1;54336:131:0;;;20883:21:1;20940:2;20920:18;;;20913:30;20979:33;20959:18;;;20952:61;21030:18;;54336:131:0;20699:355:1;54336:131:0;54511:16;;54586:15;;54548:67;;-1:-1:-1;;;;;;54548:67:0;;;;;1844:25:1;;;-1:-1:-1;;;;;54586:15:0;;;;54548:62;;1817:18:1;;54548:67:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;54548:67:0;;;;;;;;-1:-1:-1;;54548:67:0;;;;;;;;;;;;:::i;:::-;;;54544:492;;;54779:232;;;9864:25:1;;;9920:2;9905:18;;9898:34;;;9948:18;;;9941:34;;;10006:2;9991:18;;9984:34;;;54982:10:0;;54929:4;;54779:232;;9851:3:1;9836:19;54779:232:0;;;;;;;54616:411;;;54544:492;54028:1019;54013:1034;51413:3641;;;;;;51300:3754;;;:::o;12987:582::-;13317:10;;;13316:62;;-1:-1:-1;13333:39:0;;-1:-1:-1;;;13333:39:0;;13357:4;13333:39;;;8836:34:1;-1:-1:-1;;;;;8906:15:1;;;8886:18;;;8879:43;13333:15:0;;;;;8771:18:1;;13333:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;13316:62;13294:166;;;;-1:-1:-1;;;13294:166:0;;21261:2:1;13294:166:0;;;21243:21:1;21300:2;21280:18;;;21273:30;21339:34;21319:18;;;21312:62;-1:-1:-1;;;21390:18:1;;;21383:52;21452:19;;13294:166:0;21059:418:1;13294:166:0;13498:62;;-1:-1:-1;;;;;20254:32:1;;13498:62:0;;;20236:51:1;20303:18;;;20296:34;;;13471:90:0;;13491:5;;-1:-1:-1;;;13521:22:0;20209:18:1;;13498:62:0;;;;-1:-1:-1;;13498:62:0;;;;;;;;;;;;;;-1:-1:-1;;;;;13498:62:0;-1:-1:-1;;;;;;13498:62:0;;;;;;;;;;13471:19;:90::i;:::-;12987:582;;;:::o;46267:473::-;-1:-1:-1;;;;;46358:31:0;;;;;;:25;:31;;;;;;;;:39;;;;;;-1:-1:-1;;46358:39:0;;;;;;;;46408:34;:40;;;;;;;:48;;;;;;;;;;;46392:5;;46471:94;;-1:-1:-1;46519:15:0;;46481:84;;-1:-1:-1;;;46481:84:0;;-1:-1:-1;;;;;3015:32:1;;;46481:84:0;;;2997:51:1;46519:15:0;;;;46481:78;;2970:18:1;;46481:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46480:85;46471:94;46467:208;;;46620:15;;46582:81;;-1:-1:-1;;;46582:81:0;;-1:-1:-1;;;;;3015:32:1;;;46582:81:0;;;2997:51:1;46620:15:0;;;;46582:75;;2970:18:1;;46582:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46467:208;46720:4;-1:-1:-1;;;;;46692:40:0;;46726:5;46692:40;;;;1291:14:1;1284:22;1266:41;;1254:2;1239:18;;1126:187;11975:191:0;12068:6;;;-1:-1:-1;;;;;12085:17:0;;;-1:-1:-1;;;;;;12085:17:0;;;;;;;12118:40;;12068:6;;;12085:17;12068:6;;12118:40;;12049:16;;12118:40;12038:128;11975:191;:::o;12593:177::-;12703:58;;-1:-1:-1;;;;;20254:32:1;;12703:58:0;;;20236:51:1;20303:18;;;20296:34;;;12676:86:0;;12696:5;;-1:-1:-1;;;12726:23:0;20209:18:1;;12703:58:0;20046:290:1;55062:1396:0;55148:11;;55126:20;;-1:-1:-1;;;;;55148:11:0;;;55126:20;;:33;55123:1318;;55211:11;;55204:76;;-1:-1:-1;;;55204:76:0;;55260:4;55204:76;;;2997:51:1;55175:26:0;;-1:-1:-1;;;;;55211:11:0;;55204:29;;2970:18:1;;55204:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55175:105;;55295:25;55313:6;55295:17;:25::i;:::-;55364:11;;55357:44;;-1:-1:-1;;;55357:44:0;;55395:4;55357:44;;;2997:51:1;55335:18:0;;55422;;-1:-1:-1;;;;;55364:11:0;;;;55357:29;;2970:18:1;;55357:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55356:99;;;;:::i;:::-;55503:15;;55477:11;;55335:120;;-1:-1:-1;55470:61:0;;-1:-1:-1;;;;;55477:11:0;;;;55503:15;55335:120;55470:32;:61::i;55123:1318::-;55573:18;;55551:20;;-1:-1:-1;;;;;55573:18:0;;;55551:20;;:40;55548:893;;55671:10;;55652:37;;;-1:-1:-1;;;55652:37:0;;;;55607:22;;-1:-1:-1;;;;;55671:10:0;;55652:35;;:37;;;;;;;;;;;;;;55671:10;55652:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55632:18;;-1:-1:-1;;;;;55632:18:0;;;:57;;;:153;;55741:18;;55734:51;;-1:-1:-1;;;55734:51:0;;55779:4;55734:51;;;2997::1;-1:-1:-1;;;;;55741:18:0;;;;55734:36;;2970:18:1;;55734:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55632:153;;;55692:21;55632:153;55607:178;;55800:30;55823:6;55800:22;:30::i;:::-;55905:10;;55886:37;;;-1:-1:-1;;;55886:37:0;;;;55845:18;;-1:-1:-1;;;;;55905:10:0;;55886:35;;:37;;;;;;;;;;;;;;55905:10;55886:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55866:18;;-1:-1:-1;;;;;55866:18:0;;;:57;;;:182;;55989:18;;55982:51;;-1:-1:-1;;;55982:51:0;;56027:4;55982:51;;;2997::1;56034:14:0;;-1:-1:-1;;;;;55989:18:0;;55982:36;;2970:18:1;;55982:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;55866:182;;;55926:36;55948:14;55926:21;:36;:::i;:::-;55845:203;;56105:10;;;;;;;;;-1:-1:-1;;;;;56105:10:0;-1:-1:-1;;;;;56086:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56066:18;;-1:-1:-1;;;;;56066:57:0;;;:18;;:57;56063:286;;56168:15;;56160:52;;56144:12;;-1:-1:-1;;;;;56168:15:0;;56197:10;;56144:12;56160:52;56144:12;56160:52;56197:10;56168:15;56160:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;12987:582:0:o;56063:286::-;56305:15;;56272:18;;56265:68;;-1:-1:-1;;;;;56272:18:0;;;;56305:15;56322:10;56265:39;:68::i;55548:893::-;56405:15;;56380:49;;56398:4;;-1:-1:-1;;;;;56405:15:0;56422:6;56380:9;:49::i;56466:684::-;56525:12;56540:10;56548:1;56540:6;:10;:::i;:::-;56525:25;-1:-1:-1;56561:17:0;56581:13;56525:25;56581:6;:13;:::i;:::-;56561:33;;56607:22;56671:10;;;;;;;;;-1:-1:-1;;;;;56671:10:0;-1:-1:-1;;;;;56652:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56632:18;;-1:-1:-1;;;;;56632:18:0;;;:57;;;:149;;56737:18;;56730:51;;-1:-1:-1;;;56730:51:0;;56775:4;56730:51;;;2997::1;-1:-1:-1;;;;;56737:18:0;;;;56730:36;;2970:18:1;;56730:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56632:149;;;56692:21;56632:149;56607:174;;56794:28;56817:4;56794:22;:28::i;:::-;56894:10;;56875:37;;;-1:-1:-1;;;56875:37:0;;;;56834:18;;-1:-1:-1;;;;;56894:10:0;;56875:35;;:37;;;;;;;;;;;;;;56894:10;56875:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56855:18;;-1:-1:-1;;;;;56855:18:0;;;:57;;;:178;;56974:18;;56967:51;;-1:-1:-1;;;56967:51:0;;57012:4;56967:51;;;2997::1;57019:14:0;;-1:-1:-1;;;;;56974:18:0;;56967:36;;2970:18:1;;56967:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:66;;;;:::i;:::-;56855:178;;;56915:36;56937:14;56915:21;:36;:::i;:::-;56834:199;;57046:35;57059:9;57070:10;57046:12;:35::i;:::-;57099:43;;;21963:25:1;;;22019:2;22004:18;;21997:34;;;22047:18;;;22040:34;;;57099:43:0;;21951:2:1;21936:18;57099:43:0;;;;;;;56514:636;;;;56466:684;:::o;59872:429::-;59937:25;59955:6;59937:17;:25::i;:::-;60000:11;;59993:44;;-1:-1:-1;;;59993:44:0;;60031:4;59993:44;;;2997:51:1;59973:17:0;;-1:-1:-1;;;;;60000:11:0;;59993:29;;2970:18:1;;59993:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60095:15;;60055:11;;59973:64;;-1:-1:-1;60048:97:0;;-1:-1:-1;;;;;60055:11:0;;;;60095:15;59973:64;60048:32;:97::i;:::-;60194:15;;60156:89;;-1:-1:-1;;;60156:89:0;;;;;1844:25:1;;;-1:-1:-1;;;;;60194:15:0;;;;60156:78;;1817:18:1;;60156:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;60261:32:0;;;7080:25:1;;;7136:2;7121:18;;7114:34;;;60261:32:0;;-1:-1:-1;7053:18:1;;-1:-1:-1;60261:32:0;;;;;;;59926:375;59872:429;:::o;8103:806::-;-1:-1:-1;;;;;8200:18:0;;8192:68;;;;-1:-1:-1;;;8192:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8279:16:0;;8271:64;;;;-1:-1:-1;;;8271:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8421:15:0;;8399:19;8421:15;;;;;;;;;;;8455:21;;;;8447:72;;;;-1:-1:-1;;;8447:72:0;;22287:2:1;8447:72:0;;;22269:21:1;22326:2;22306:18;;;22299:30;22365:34;22345:18;;;22338:62;-1:-1:-1;;;22416:18:1;;;22409:36;22462:19;;8447:72:0;22085:402:1;8447:72:0;-1:-1:-1;;;;;8555:15:0;;;:9;:15;;;;;;;;;;;8573:20;;;8555:38;;8773:13;;;;;;;;;;:23;;;;;;8825:26;;1844:25:1;;;8773:13:0;;8825:26;;1817:18:1;8825:26:0;;;;;;;8864:37;12987:582;15198:649;15622:23;15648:69;15676:4;15648:69;;;;;;;;;;;;;;;;;15656:5;-1:-1:-1;;;;;15648:27:0;;;:69;;;;;:::i;:::-;15622:95;;15736:10;:17;15757:1;15736:22;:56;;;;15773:10;15762:30;;;;;;;;;;;;:::i;:::-;15728:111;;;;-1:-1:-1;;;15728:111:0;;22694:2:1;15728:111:0;;;22676:21:1;22733:2;22713:18;;;22706:30;22772:34;22752:18;;;22745:62;-1:-1:-1;;;22823:18:1;;;22816:40;22873:19;;15728:111:0;22492:406:1;58029:982:0;58119:11;;58099:18;;-1:-1:-1;;;;;58099:18:0;;;58119:11;;58099:31;58096:898;;58170:16;;;58184:1;58170:16;;;;;;;;;58146:21;;58170:16;;;;;;;;;;-1:-1:-1;58170:16:0;58146:40;;58219:4;58201;58206:1;58201:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;58201:23:0;;;:7;;;;;;;;;:23;58249:18;;58239:7;;58249:18;;;58239:4;;58249:18;;58239:7;;;;;;:::i;:::-;-1:-1:-1;;;;;58239:28:0;;;:7;;;;;;;;;:28;58292:11;;58282:7;;58292:11;;;58282:4;;58287:1;;58282:7;;;;;;:::i;:::-;-1:-1:-1;;;;;58282:21:0;;;:7;;;;;;;;;:21;58337:10;;58318:238;;-1:-1:-1;;;58318:238:0;;58337:10;;;58318:84;;:238;;58421:11;;58337:10;;58471:4;;58502;;58526:15;;58318:238;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58131:437;50821:97;50784:142::o;58096:898::-;58611:16;;;58625:1;58611:16;;;;;;;;58587:21;;58611:16;;;;;;;;;;-1:-1:-1;58611:16:0;58587:40;;58660:4;58642;58647:1;58642:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;58642:23:0;;;:7;;;;;;;;;:23;58690:11;;58680:7;;58690:11;;;58680:4;;58690:11;;58680:7;;;;;;:::i;:::-;-1:-1:-1;;;;;58680:21:0;;;:7;;;;;;;;;:21;58716:15;;58804:10;;58716:254;;-1:-1:-1;;;58716:254:0;;:15;;;;:69;;:254;;58804:10;;;;58833:11;;58716:15;;58917:4;;58940:15;;58716:254;;;:::i;57158:863::-;57254:16;;;57268:1;57254:16;;;;;;;;57230:21;;57254:16;;;;;;;;;;-1:-1:-1;57254:16:0;57230:40;;57299:4;57281;57286:1;57281:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;57281:23:0;;;:7;;;;;;;;;:23;57325:18;;57315:7;;57325:18;;;57315:4;;57325:18;;57315:7;;;;;;:::i;:::-;-1:-1:-1;;;;;57315:28:0;;;:7;;;;;;;;;;:28;;;;57390:10;;57371:37;;;-1:-1:-1;;;57371:37:0;;;;57390:10;;;;;57371:35;;:37;;;;;57315:7;;57371:37;;;;;57390:10;57371:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;57360:48:0;:4;57365:1;57360:7;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;57360:48:0;;57356:658;;57443:10;;57424:269;;-1:-1:-1;;;57424:269:0;;-1:-1:-1;;;;;57443:10:0;;;;57424:81;;:269;;57524:11;;57443:10;;57608:4;;57639;;57663:15;;57424:269;;;:::i;57356:658::-;57724:15;;57816:10;;57724:278;;-1:-1:-1;;;57724:278:0;;-1:-1:-1;;;;;57724:15:0;;;;:69;;:278;;57816:10;;;57849:11;;57724:15;;57941:4;;57968:15;;57724:278;;;:::i;59019:845::-;59151:10;;;;;;;;;-1:-1:-1;;;;;59151:10:0;-1:-1:-1;;;;;59132:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59110:18;;-1:-1:-1;;;;;59110:59:0;;;:18;;:59;59106:733;;59204:10;;59185:309;;-1:-1:-1;;;59185:309:0;;59282:4;59185:309;;;25148:34:1;25198:18;;;25191:34;;;59204:10:0;25241:18:1;;;25234:34;;;25284:18;;;25277:34;59438:6:0;25327:19:1;;;25320:44;59464:15:0;25380:19:1;;;25373:35;-1:-1:-1;;;;;59204:10:0;;;;59185:46;;59239:15;;25082:19:1;;59185:309:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;59106:733::-;59543:10;;59618:18;;59524:299;;-1:-1:-1;;;59524:299:0;;59594:4;59524:299;;;25816:34:1;-1:-1:-1;;;;;59618:18:0;;;25866::1;;;25859:43;25918:18;;;25911:34;;;25961:18;;;25954:34;;;59543:10:0;26004:19:1;;;25997:35;;;26048:19;;;26041:35;59767:6:0;26092:19:1;;;26085:44;59793:15:0;26145:19:1;;;26138:35;59543:10:0;;;59524:43;;25750:19:1;;59524:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;931:229::-;1068:12;1100:52;1122:6;1130:4;1136:1;1139:12;1100:21;:52::i;:::-;1093:59;931:229;-1:-1:-1;;;;931:229:0:o;1398:455::-;1568:12;1626:5;1601:21;:30;;1593:81;;;;-1:-1:-1;;;1593:81:0;;26386:2:1;1593:81:0;;;26368:21:1;26425:2;26405:18;;;26398:30;26464:34;26444:18;;;26437:62;-1:-1:-1;;;26515:18:1;;;26508:36;26561:19;;1593:81:0;26184:402:1;1593:81:0;1686:12;1700:23;1727:6;-1:-1:-1;;;;;1727:11:0;1746:5;1753:4;1727:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1685:73;;;;1776:69;1803:6;1811:7;1820:10;1832:12;1776:26;:69::i;:::-;1769:76;1398:455;-1:-1:-1;;;;;;;1398:455:0:o;2947:644::-;3132:12;3161:7;3157:427;;;3189:10;:17;3210:1;3189:22;3185:290;;-1:-1:-1;;;;;378:19:0;;;3399:60;;;;-1:-1:-1;;;3399:60:0;;27085:2:1;3399:60:0;;;27067:21:1;27124:2;27104:18;;;27097:30;27163:31;27143:18;;;27136:59;27212:18;;3399:60:0;26883:353:1;3399:60:0;-1:-1:-1;3496:10:0;3489:17;;3157:427;3539:33;3547:10;3559:12;4069:17;;:21;4065:388;;4301:10;4295:17;4358:15;4345:10;4341:2;4337:19;4330:44;4065:388;4428:12;4421:20;;-1:-1:-1;;;4421:20:0;;;;;;;;:::i;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:131::-;-1:-1:-1;;;;;745:31:1;;735:42;;725:70;;791:1;788;781:12;806:315;874:6;882;935:2;923:9;914:7;910:23;906:32;903:52;;;951:1;948;941:12;903:52;990:9;977:23;1009:31;1034:5;1009:31;:::i;:::-;1059:5;1111:2;1096:18;;;;1083:32;;-1:-1:-1;;;806:315:1:o;1513:180::-;1572:6;1625:2;1613:9;1604:7;1600:23;1596:32;1593:52;;;1641:1;1638;1631:12;1593:52;-1:-1:-1;1664:23:1;;1513:180;-1:-1:-1;1513:180:1:o;1880:456::-;1957:6;1965;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2081:9;2068:23;2100:31;2125:5;2100:31;:::i;:::-;2150:5;-1:-1:-1;2207:2:1;2192:18;;2179:32;2220:33;2179:32;2220:33;:::i;:::-;1880:456;;2272:7;;-1:-1:-1;;;2326:2:1;2311:18;;;;2298:32;;1880:456::o;2341:118::-;2427:5;2420:13;2413:21;2406:5;2403:32;2393:60;;2449:1;2446;2439:12;2464:382;2529:6;2537;2590:2;2578:9;2569:7;2565:23;2561:32;2558:52;;;2606:1;2603;2596:12;2558:52;2645:9;2632:23;2664:31;2689:5;2664:31;:::i;:::-;2714:5;-1:-1:-1;2771:2:1;2756:18;;2743:32;2784:30;2743:32;2784:30;:::i;:::-;2833:7;2823:17;;;2464:382;;;;;:::o;3248:247::-;3307:6;3360:2;3348:9;3339:7;3335:23;3331:32;3328:52;;;3376:1;3373;3366:12;3328:52;3415:9;3402:23;3434:31;3459:5;3434:31;:::i;:::-;3484:5;3248:247;-1:-1:-1;;;3248:247:1:o;3760:388::-;3828:6;3836;3889:2;3877:9;3868:7;3864:23;3860:32;3857:52;;;3905:1;3902;3895:12;3857:52;3944:9;3931:23;3963:31;3988:5;3963:31;:::i;:::-;4013:5;-1:-1:-1;4070:2:1;4055:18;;4042:32;4083:33;4042:32;4083:33;:::i;4386:161::-;4453:20;;4513:8;4502:20;;4492:31;;4482:59;;4537:1;4534;4527:12;4482:59;4386:161;;;:::o;4552:256::-;4618:6;4626;4679:2;4667:9;4658:7;4654:23;4650:32;4647:52;;;4695:1;4692;4685:12;4647:52;4718:28;4736:9;4718:28;:::i;:::-;4708:38;;4765:37;4798:2;4787:9;4783:18;4765:37;:::i;:::-;4755:47;;4552:256;;;;;:::o;5519:241::-;5575:6;5628:2;5616:9;5607:7;5603:23;5599:32;5596:52;;;5644:1;5641;5634:12;5596:52;5683:9;5670:23;5702:28;5724:5;5702:28;:::i;5765:380::-;5844:1;5840:12;;;;5887;;;5908:61;;5962:4;5954:6;5950:17;5940:27;;5908:61;6015:2;6007:6;6004:14;5984:18;5981:38;5978:161;;6061:10;6056:3;6052:20;6049:1;6042:31;6096:4;6093:1;6086:15;6124:4;6121:1;6114:15;5978:161;;5765:380;;;:::o;6150:127::-;6211:10;6206:3;6202:20;6199:1;6192:31;6242:4;6239:1;6232:15;6266:4;6263:1;6256:15;6282:217;6322:1;6348;6338:132;;6392:10;6387:3;6383:20;6380:1;6373:31;6427:4;6424:1;6417:15;6455:4;6452:1;6445:15;6338:132;-1:-1:-1;6484:9:1;;6282:217::o;7159:330::-;7361:2;7343:21;;;7400:1;7380:18;;;7373:29;-1:-1:-1;;;7433:2:1;7418:18;;7411:37;7480:2;7465:18;;7159:330::o;7494:184::-;7564:6;7617:2;7605:9;7596:7;7592:23;7588:32;7585:52;;;7633:1;7630;7623:12;7585:52;-1:-1:-1;7656:16:1;;7494:184;-1:-1:-1;7494:184:1:o;7683:125::-;7748:9;;;7769:10;;;7766:36;;;7782:18;;:::i;8118:245::-;8185:6;8238:2;8226:9;8217:7;8213:23;8209:32;8206:52;;;8254:1;8251;8244:12;8206:52;8286:9;8280:16;8305:28;8327:5;8305:28;:::i;8368:251::-;8438:6;8491:2;8479:9;8470:7;8466:23;8462:32;8459:52;;;8507:1;8504;8497:12;8459:52;8539:9;8533:16;8558:31;8583:5;8558:31;:::i;9322:306::-;9410:6;9418;9426;9479:2;9467:9;9458:7;9454:23;9450:32;9447:52;;;9495:1;9492;9485:12;9447:52;9524:9;9518:16;9508:26;;9574:2;9563:9;9559:18;9553:25;9543:35;;9618:2;9607:9;9603:18;9597:25;9587:35;;9322:306;;;;;:::o;10029:170::-;10096:8;10124:10;;;10136;;;10120:27;;10159:11;;;10156:37;;;10173:18;;:::i;:::-;10156:37;10029:170;;;;:::o;10204:339::-;10406:2;10388:21;;;10445:2;10425:18;;;10418:30;-1:-1:-1;;;10479:2:1;10464:18;;10457:45;10534:2;10519:18;;10204:339::o;10548:338::-;10750:2;10732:21;;;10789:2;10769:18;;;10762:30;-1:-1:-1;;;10823:2:1;10808:18;;10801:44;10877:2;10862:18;;10548:338::o;14664:681::-;14795:6;14803;14811;14819;14827;14835;14843;14851;14904:3;14892:9;14883:7;14879:23;14875:33;14872:53;;;14921:1;14918;14911:12;14872:53;14953:9;14947:16;14972:31;14997:5;14972:31;:::i;:::-;15022:5;15012:15;;;15067:2;15056:9;15052:18;15046:25;15036:35;;15111:2;15100:9;15096:18;15090:25;15080:35;;15155:2;15144:9;15140:18;15134:25;15124:35;;15199:3;15188:9;15184:19;15178:26;15168:36;;15244:3;15233:9;15229:19;15223:26;15213:36;;15289:3;15278:9;15274:19;15268:26;15258:36;;15334:3;15323:9;15319:19;15313:26;15303:36;;14664:681;;;;;;;;;;;:::o;18194:401::-;18396:2;18378:21;;;18435:2;18415:18;;;18408:30;18474:34;18469:2;18454:18;;18447:62;-1:-1:-1;;;18540:2:1;18525:18;;18518:35;18585:3;18570:19;;18194:401::o;18600:399::-;18802:2;18784:21;;;18841:2;18821:18;;;18814:30;18880:34;18875:2;18860:18;;18853:62;-1:-1:-1;;;18946:2:1;18931:18;;18924:33;18989:3;18974:19;;18600:399::o;19740:168::-;19813:9;;;19844;;19861:15;;;19855:22;;19841:37;19831:71;;19882:18;;:::i;19913:128::-;19980:9;;;20001:11;;;19998:37;;;20015:18;;:::i;23035:127::-;23096:10;23091:3;23087:20;23084:1;23077:31;23127:4;23124:1;23117:15;23151:4;23148:1;23141:15;23167:461;23220:3;23258:5;23252:12;23285:6;23280:3;23273:19;23311:4;23340:2;23335:3;23331:12;23324:19;;23377:2;23370:5;23366:14;23398:1;23408:195;23422:6;23419:1;23416:13;23408:195;;;23487:13;;-1:-1:-1;;;;;23483:39:1;23471:52;;23543:12;;;;23578:15;;;;23519:1;23437:9;23408:195;;;-1:-1:-1;23619:3:1;;23167:461;-1:-1:-1;;;;;23167:461:1:o;23633:582::-;23932:6;23921:9;23914:25;23975:6;23970:2;23959:9;23955:18;23948:34;24018:3;24013:2;24002:9;23998:18;23991:31;23895:4;24039:57;24091:3;24080:9;24076:19;24068:6;24039:57;:::i;:::-;-1:-1:-1;;;;;24132:32:1;;;;24127:2;24112:18;;24105:60;-1:-1:-1;24196:3:1;24181:19;24174:35;24031:65;23633:582;-1:-1:-1;;;23633:582:1:o;24220:::-;24548:1;24544;24539:3;24535:11;24531:19;24523:6;24519:32;24508:9;24501:51;24588:6;24583:2;24572:9;24568:18;24561:34;24631:6;24626:2;24615:9;24611:18;24604:34;24674:3;24669:2;24658:9;24654:18;24647:31;24482:4;24695:57;24747:3;24736:9;24732:19;24724:6;24695:57;:::i;:::-;24687:65;;24789:6;24783:3;24772:9;24768:19;24761:35;24220:582;;;;;;;;:::o;26591:287::-;26720:3;26758:6;26752:13;26774:66;26833:6;26828:3;26821:4;26813:6;26809:17;26774:66;:::i;:::-;26856:16;;;;;26591:287;-1:-1:-1;;26591:287:1:o

Swarm Source

ipfs://1809c771636edbf78a140981dd48d0afe04c55f7fa6c1831117d053de1e670f7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.