Contract 0x2f84a50f72f8f0f2bec340db2c758cbb335549c1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb4c605f18d888737c70146e96a5b560b8f52393b2189a2294f87573ccd9396d4Approve127799872021-11-19 13:47:3317 days 6 hrs ago0x7427ae8c884ddfc76bc9e465d350691d973a43ab IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.0000728
0x9608ac77c2b3d852120c7aab7b8a8a1210c46c2414634d7d8083944ef29b38e0Approve126677922021-11-15 11:07:4221 days 8 hrs ago0x321b8273ba9295b00883ee175684c245ffdc33e1 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.0000728
0xb133608102102fbd94d4cc5000a7ae8162daf4ad4210c1c95afe315d50083e91Approve125650322021-11-11 18:35:3425 days 1 hr ago0x49456404f74c4c4439f4240edf98028a7e01d1c7 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.000311528
0x4b3b462e6e42fb7a2cd7288ad400e8693b7afdcfa4baa40efee7c5d4bfcf9c9bApprove119669002021-10-21 14:21:2846 days 5 hrs ago0x79f78d587a7959ec491fd518895853e3f7ac074e IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.000311528
0x8db57abfb77161bffc5a34b99bd484ea278e05c9dac6bcbf279d24d240eb0f29Approve119171712021-10-19 20:17:4647 days 23 hrs ago0x2f184f797dd8451a3707bbabe50a6b0454d9c1b6 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.0000728
0xbb59570a79f92b5b6c3b6845cc3f132f8f1c931e2749dce8260c26f37b7fa637Approve111532162021-09-23 2:42:4474 days 17 hrs ago0x91c423ef43c2764988fc385dea6a661f1033aae9 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x1f26d3bc0e7147f3ba0edb362dcadad3609b02531fd4fc0909eee79c078addc3Approve111029302021-09-21 8:29:5276 days 11 hrs ago0x4a2093bfe0acac1fd5d05a130975381eef9135c8 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x79ee75fd54db24878e2ab2cdf19e6799219123bd75de5d4a57ec069e9426f2d2Approve110852442021-09-20 17:42:5377 days 2 hrs ago0xdb0a78bb127ca2fc14c0702d4925a675005e62af IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00012652
0xb9b6ff2af6dc511ad7f3b53c040a9e79d22cfbb8c2bad79052501540d7c1fffcApprove110852432021-09-20 17:42:5077 days 2 hrs ago0xdb0a78bb127ca2fc14c0702d4925a675005e62af IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00012652
0xace8e1b698c67029d49d3a49368fbba73a9abb2b7a4c3e4d203b969721dec455Approve110852432021-09-20 17:42:5077 days 2 hrs ago0xdb0a78bb127ca2fc14c0702d4925a675005e62af IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x58b3c308f505883c986b2e6945f4e7d3648b38b5aca51f071031f3a30df35801Approve110852232021-09-20 17:41:5077 days 2 hrs ago0x86aa46a3e9f5cafe4e32787102d7733c17bcbaf2 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x3f72b682a79a559c1a30e9a7573820d8921f6a49638ceb4ced506f9fcdfd2e71Approve110807552021-09-20 13:58:1177 days 5 hrs ago0xebcef3d3d47d16fba4407b23c6c954929f19fa4c IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0xa292f66753d13ff98bc591cd6693f0bc7a06189753f0478d33d4a8713032076cApprove110789022021-09-20 12:24:0877 days 7 hrs ago0x832c59bdb8e78a1822562ed2772cc00a36fb1e53 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x5b78d6003e7b6f2c474ccf429dc314622b896c4dd05aa95f83a7dbe8b9f1a614Approve110778722021-09-20 11:31:5677 days 8 hrs ago0xe28d972515b8016d4a52904a90408dddf9c84704 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x70906357f85e24bec449b89b18d74a99a02106cca3c9a56a3307f3db971d7306Approve110775592021-09-20 11:16:1777 days 8 hrs ago0xde1cc2baf28ef5ac11c4cabc8f46615c87e80908 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0xcf050d0a2ee825d7277e1681d396dfa8a3b9677bc9ae647064a1f720ae08868fApprove110770392021-09-20 10:50:1677 days 8 hrs ago0xc68446c2a2e03e932774c3353629b9979b380c72 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.0000728
0x22af9d4bbfcd8b3156b19922b4211cbddd93804c02114487c795873aa908d6b6Approve110770212021-09-20 10:49:2277 days 9 hrs ago0xc68446c2a2e03e932774c3353629b9979b380c72 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0xfdd0391c9db8dacdfc8d5ef336c8cc72278ead98cf2a3a2cec4b6bfccb9771caApprove110768722021-09-20 10:41:5577 days 9 hrs ago0x086b949661648e7893ec0cbf9ae1f17f8db453ef IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x6785de3563ac7fcf41f9d290af8986b1efdd0480c07e67cb8938ee7d1c280288Approve110768582021-09-20 10:41:1377 days 9 hrs ago0x7adf65c46de39a74ca05d984494f824792093c6b IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.000311528
0x8e1b584785ef0edae6ff2446fa941e26be982abea7fd7c21c84c92d1d08cf3e2Approve110768122021-09-20 10:38:5577 days 9 hrs ago0x514a1668578dfb0646b7f89fb1bffc62fd345836 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x90847cf972395f93d8fb61e1f2d0a7e3c9fded5b96fa46c9a708ec35f2b32fe8Approve110768102021-09-20 10:38:4977 days 9 hrs ago0x749b642cba2d31e1e64cf351564b813200b2f7ab IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x1373fd7eeb93d545cb15ddd6fd78f1915e5082c523723aaa4d657f63bbc18982Approve110768092021-09-20 10:38:4677 days 9 hrs ago0x89addac0892dd7c7818b9fb8e47b856da2553b03 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0xd9a7341ee38ffa94e8cd0911c955eab6f9cc638c70f4c2ad62f37c15d0fc18c6Approve110766752021-09-20 10:32:0477 days 9 hrs ago0x24e47eb90fbf6a753971b18320fdff4d63f70fa9 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.000311528
0xba5224b9d126f49bc4893a1286601b1147ff68800cc3ddb3fc3434efa0234805Approve110766372021-09-20 10:30:1077 days 9 hrs ago0x1a3e2275ce05dac7d481df62837857e17f5b259d IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.00022252
0x4ce3be4620a82af30254706e12552b576ef1bfed047a162a7d79b4538746eaf5Approve110764922021-09-20 10:22:5577 days 9 hrs ago0xf9b986dcc796fbd907aac0799852307b902cb551 IN  0x2f84a50f72f8f0f2bec340db2c758cbb335549c10 BNB0.000311528
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Testing

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-09-20
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/**
 * IERC20
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount)
        external
        returns (bool);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

/**
 * SafeMath
 * Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 */
library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

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

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

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

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

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

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

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

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

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

/**
 * Address
 * Collection of functions related to the address type
 */
library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );
        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

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

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");
        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

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

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }

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

/**
 * IUniswapV2Factory
 */
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;
}

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

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

/**
 * IUniswapV2Router01
 */
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);
}

/**
 * IUniswapV2Router02
 */
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;
}

library EnumerableSet {

    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = valueIndex;

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value)
        private
        view
        returns (bool)
    {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index)
        private
        view
        returns (bytes32)
    {
        require(
            set._values.length > index,
            "EnumerableSet: index out of bounds"
        );
        return set._values[index];
    }

    // Bytes32Set
    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index)
        internal
        view
        returns (bytes32)
    {
        return _at(set._inner, index);
    }

    // AddressSet
    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index)
        internal
        view
        returns (address)
    {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    // UintSet
    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index)
        internal
        view
        returns (uint256)
    {
        return uint256(_at(set._inner, index));
    }
}

contract Testing is Context, IERC20, Ownable {
    // Libraries
    using SafeMath for uint256;
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;

    // Mapping and addressSets
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    EnumerableSet.AddressSet private _excludedFromSellLock;
    mapping (address => uint256) private _sellLock;
    EnumerableSet.AddressSet private _excludedFromBuyLock;
    mapping (address => uint256) private _buyLock;

    // Addresses
    address private constant ROUTER_ADDRESS = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
    address public marketingWallet = 0xda0984019976607149dEf3965f011EDAb7C6aa55;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;

    // Token
    string private _name = "Floki FootBall";
    string private _symbol = "FFB";

    // Supply
    uint8 private _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    // Max TX in tokens
    uint256 public _maxSellTxAmount = (_tTotal / 100 * 1) * 10**18;
    uint256 public _maxBuyTxAmount = (_tTotal / 100 * 1) * 10**18;

    // Max Wallet in tokens
    uint256 public _maxWalletSize = (_tTotal / 100 * 4) * 10**18;

    // Cooldowns
    uint16 public constant MaxSellLockTime = 10 seconds;
    uint16 public constant MaxBuyLockTime = 10 seconds;

    // Max tax in percentage
    uint256 private maxTotalFee = 20;

    // Buy tax in percentage
    uint256 private liquidityFeeBuy = 5;
    uint256 private burnFeeBuy = 2;
    uint256 private taxFeeBuy = 0;
    uint256 private marketingFeeBuy = 5; 
    uint256 private totalFeeBuy = 12;

    // Sell tax in percentage
    uint256 private liquidityFeeSell = 5;
    uint256 private burnFeeSell = 2;
    uint256 private taxFeeSell = 0;
    uint256 private marketingFeeSell = 5;
    uint256 private totalFeeSell = 12;

    // Tax variables
    uint256 private _taxFee;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _liquidityFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 private _burnFee;
    uint256 private _previousBurnFee = _burnFee;
    uint256 private _marketingFee;
    uint256 private _previousmarketingFee = _marketingFee;

    // Liquidity
    // @note: Should be around 0.02% of total supply
    uint256 private numTokensSellToAddToLiquidity = (_tTotal / 1000 * 2) * 10**18; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    // Coin constructor
    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            ROUTER_ADDRESS
        );
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;

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

        sellLockTime=MaxSellLockTime;
        buyLockTime=MaxBuyLockTime;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    bool public sellLockDisabled;
    bool public buyLockDisabled;
    uint256 public sellLockTime;
    uint256 public buyLockTime;
    bool public tradingEnabled = false;

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

    // Get token ticker
    function symbol() public view returns (string memory) {
        return _symbol;
    }

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

    // Get total supply
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    // Get balance of address
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    // Get all the buy fees
    function getAllBuyFees() public view returns (uint256 _liquidityFeeBuy, uint256 _burnFeeBuy, uint256 _taxFeeBuy, uint256 _marketingFeeBuy){
        return (liquidityFeeBuy, burnFeeBuy, taxFeeBuy, marketingFeeBuy);
    }

    // Get all the sell fees
    function getAllSellFees() public view returns (uint256 _liquidityFeeSell, uint256 _burnFeeSell, uint256 _taxFeeSell, uint256 _marketingFeeSell){
        return (liquidityFeeSell, burnFeeSell, taxFeeSell, marketingFeeSell);
    }

    // Get amount of tokens burned
    function totalBurned() public view returns (uint256) {
        return balanceOf(address(0));
    }

    // Get sell lock in seconds
    function getSellLockTimeInSeconds() public view returns(uint256){
        return sellLockTime;
    }

    // Get buy lock in seconds
    function getBuyLockTimeInSeconds() public view returns(uint256){
        return buyLockTime;
    }


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

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

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

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

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        (uint256 rAmount, , , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

    function tokenFromReflection(uint256 rAmount)
        public
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function excludeFromReward(address account) public onlyOwner {
        require(
            account != 0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F,
            "We can not exclude Pancake router."
        );
        require(!_isExcluded[account], "Account is already excluded");
        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    receive() external payable {}

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tLiquidity,
            _getRate()
        );
        return (
            rAmount,
            rTransferAmount,
            rFee,
            tTransferAmount,
            tFee,
            tLiquidity
        );
    }

    function _getTValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = calculateTaxFee(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tLiquidity,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }

    function calculateLiquidityFee(uint256 _amount)
        private
        view
        returns (uint256)
    {
        return _amount.mul(_liquidityFee).div(10**2);
    }

    function setCorrectFees(bool isSell) private {
        if (isSell){
            // Set the fees to selling
            _liquidityFee = liquidityFeeSell;
            _taxFee = taxFeeSell;
            _burnFee = burnFeeSell;
            _marketingFee = marketingFeeSell;
        } else {
            // Set the fees to buying
            _liquidityFee = liquidityFeeBuy;
            _taxFee = taxFeeBuy;
            _burnFee = burnFeeBuy;
            _marketingFee = marketingFeeBuy;
        }
    }

    // Remove all the fees
    function removeAllFee() private {
        if (
            _taxFee == 0 &&
            _liquidityFee == 0 &&
            _marketingFee == 0 &&
            _burnFee == 0
        ) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        _previousmarketingFee = _marketingFee;

        _taxFee = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
        _burnFee = 0;
    }

    // Restore all the fees
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _burnFee = _previousBurnFee;
        _marketingFee = _previousmarketingFee;
    }

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {
            require(tradingEnabled, "trading not yet enabled");
        }

        if (from != owner() && to != owner()) {
            if (to != uniswapV2Pair && to != DEAD) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the bag size.");
            } 
        }

        bool isBuy=from==uniswapV2Pair|| from == ROUTER_ADDRESS;
        bool isSell=to==uniswapV2Pair|| to == ROUTER_ADDRESS;

        if (isSell && from != owner() && to != owner()){
            require(amount <= _maxSellTxAmount, "Transfer amount exceeds the maxTxAmount for selling.");
            if(!_excludedFromSellLock.contains(from)){   
                require(_sellLock[from]<=block.timestamp||sellLockDisabled,"Address in sellLock");
                _sellLock[from]=block.timestamp+sellLockTime;
            }
        }

        if (isBuy && from != owner() && to != owner()){
            require(amount <= _maxBuyTxAmount, "Transfer amount exceeds the maxTxAmount for buying.");
            if(!_excludedFromBuyLock.contains(to)){   
                require(_buyLock[to]<=block.timestamp||buyLockDisabled,"Address in buyLock");
                _buyLock[to]=block.timestamp+buyLockTime;
            }
        }

        setCorrectFees(isSell);

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }

        _tokenTransfer(from, to, amount);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    // Pre token transfer
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            removeAllFee();
        }

        uint256 burnAmt = amount.mul(_burnFee).div(100);
        uint256 marketingAmt = amount.mul(_marketingFee).div(100);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(
                sender,
                recipient,
                (amount.sub(burnAmt).sub(marketingAmt))
            );
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(
                sender,
                recipient,
                (amount.sub(burnAmt).sub(marketingAmt))
            );
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(
                sender,
                recipient,
                (amount.sub(burnAmt).sub(marketingAmt))
            );
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(
                sender,
                recipient,
                (amount.sub(burnAmt).sub(marketingAmt))
            );
        } else {
            _transferStandard(
                sender,
                recipient,
                (amount.sub(burnAmt).sub(marketingAmt))
            );
        }

        _taxFee = 0;
        _liquidityFee = 0;

        _transferStandard(sender, DEAD, burnAmt);
        _transferStandard(sender, marketingWallet, marketingAmt);

        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;

        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
            restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tLiquidity
        ) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }

    function openTheGates(bool canTrade) public onlyOwner {
        tradingEnabled = canTrade;
    }

    function DisableSellCooldown(bool disabled) public onlyOwner{
        sellLockDisabled=disabled;
    }

    function DisableBuyCooldown(bool disabled) public onlyOwner{
        buyLockDisabled=disabled;
    }

    function setBuyCooldownTime(uint256 buyLockSeconds)public onlyOwner{
        require(buyLockSeconds<=MaxBuyLockTime,"exceeds MaxBuyLockTime");
        buyLockTime=buyLockSeconds;
    } 

    function setSellCooldownTime(uint256 sellLockSeconds)public onlyOwner{
        require(sellLockSeconds<=MaxSellLockTime,"exceeds MaxSellLockTime");
        sellLockTime=sellLockSeconds;
    } 

    function disableAllFees() external onlyOwner {
        _taxFee = 0;
        _previousTaxFee = _taxFee;
        _liquidityFee = 0;
        _previousLiquidityFee = _liquidityFee;
        _burnFee = 0;
        _previousBurnFee = _taxFee;
        _marketingFee = 0;
        _previousmarketingFee = _marketingFee;
        inSwapAndLiquify = false;
        emit SwapAndLiquifyEnabledUpdated(false);
    }

    // Sets the marketing Wallet
    function setMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function setBuyFeesInPercentage(uint256 _liquidityFeeBuy, uint256 _burnFeeBuy, uint256 _taxFeeBuy, uint256 _marketingFeeBuy) external onlyOwner {
        liquidityFeeBuy = _liquidityFeeBuy;
        burnFeeBuy = _burnFeeBuy;
        taxFeeBuy = _taxFeeBuy;
        marketingFeeBuy = _marketingFeeBuy;
        totalFeeBuy = _liquidityFeeBuy.add(_burnFeeBuy).add(_taxFeeBuy).add(_marketingFeeBuy);
        require(totalFeeBuy <= maxTotalFee);
    }

    function setSellFeesInPercentage(uint256 _liquidityFeeSell, uint256 _burnFeeSell, uint256 _taxFeeSell, uint256 _marketingFeeSell) external onlyOwner {
        liquidityFeeSell = _liquidityFeeSell;
        burnFeeSell = _burnFeeSell;
        taxFeeSell = _taxFeeSell;
        marketingFeeSell = _marketingFeeSell;
        totalFeeSell = _liquidityFeeSell.add(_burnFeeSell).add(_taxFeeSell).add(_marketingFeeSell);
        require(totalFeeSell <= maxTotalFee);
    }

    function setMaxSellTxTokens(uint256 maxSellTxTokens) external onlyOwner {
        _maxSellTxAmount = maxSellTxTokens * 10**18;
    }

    function setMaxBuyTxTokens(uint256 maxBuyTxTokens) external onlyOwner {
       _maxBuyTxAmount = maxBuyTxTokens * 10**18;
    }

    function setMaxWalletPercent(uint256 maxWalletPercent) external onlyOwner {
        _maxWalletSize = _tTotal.mul(maxWalletPercent).div(10**2);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"DisableBuyCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"disabled","type":"bool"}],"name":"DisableSellCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MaxBuyLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxSellLockTime","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllBuyFees","outputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_burnFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_taxFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllSellFees","outputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_burnFeeSell","type":"uint256"},{"internalType":"uint256","name":"_taxFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSellLockTimeInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"canTrade","type":"bool"}],"name":"openTheGates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLockDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyLockSeconds","type":"uint256"}],"name":"setBuyCooldownTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_burnFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_taxFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"}],"name":"setBuyFeesInPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxTokens","type":"uint256"}],"name":"setMaxBuyTxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxTokens","type":"uint256"}],"name":"setMaxSellTxTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLockSeconds","type":"uint256"}],"name":"setSellCooldownTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_burnFeeSell","type":"uint256"},{"internalType":"uint256","name":"_taxFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"}],"name":"setSellFeesInPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600f80546001600160a01b031990811673da0984019976607149def3965f011edab7c6aa55179091556010805490911661dead17905560c0604052600e60808190526d119b1bdada48119bdbdd10985b1b60921b60a0908152620000679160119190620004f7565b506040805180820190915260038082526223232160e91b60209092019182526200009491601291620004f7565b506013805460ff1916601217905569d3c21bcecceda10000006014819055620000c0906000196200065d565b620000ce9060001962000606565b6015556064601454620000e29190620005cd565b620000ef906001620005e4565b6200010390670de0b6b3a7640000620005e4565b6017556064601454620001179190620005cd565b62000124906001620005e4565b6200013890670de0b6b3a7640000620005e4565b60185560646014546200014c9190620005cd565b62000159906004620005e4565b6200016d90670de0b6b3a7640000620005e4565b6019556014601a556005601b556002601c556000601d556005601e55600c601f556005602055600260215560006022556005602355600c602455602554602655602754602855602954602a55602b54602c556103e8601454620001d19190620005cd565b620001de906002620005e4565b620001f290670de0b6b3a7640000620005e4565b602d55602f805460ff60a81b1916600160a81b1790556032805460ff191690553480156200021f57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506015543360009081526003602090815260409182902092909255805163c45a015560e01b815290517310ed43c718714eb63d5aa57b78b54704e256024e92839263c45a01559260048083019392829003018186803b158015620002c357600080fd5b505afa158015620002d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fe91906200059d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200034757600080fd5b505afa1580156200035c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038291906200059d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003cb57600080fd5b505af1158015620003e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040691906200059d565b602f80546001600160a01b03199081166001600160a01b0393841617909155602e80549091169183169190911790556001600660006200044e6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055600a6030819055603155620004a03390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef601454604051620004e891815260200190565b60405180910390a350620006a0565b828054620005059062000620565b90600052602060002090601f01602090048101928262000529576000855562000574565b82601f106200054457805160ff191683800117855562000574565b8280016001018555821562000574579182015b828111156200057457825182559160200191906001019062000557565b506200058292915062000586565b5090565b5b8082111562000582576000815560010162000587565b600060208284031215620005af578081fd5b81516001600160a01b0381168114620005c6578182fd5b9392505050565b600082620005df57620005df6200068a565b500490565b600081600019048311821515161562000601576200060162000674565b500290565b6000828210156200061b576200061b62000674565b500390565b600181811c908216806200063557607f821691505b602082108114156200065757634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200066f576200066f6200068a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6134bd80620006b06000396000f3fe60806040526004361061039b5760003560e01c80635c69f690116101dc578063a69df4b511610102578063d89135cd116100a0578063e90a282a1161006f578063e90a282a14610aa1578063ea2f0b3714610ac1578063f2fde38b14610ae1578063f88b0e4614610b0157600080fd5b8063d89135cd14610a08578063dd46706414610a1d578063dd62ed3e14610a3d578063e4e5086814610a8357600080fd5b8063b6c52324116100dc578063b6c523241461099d578063bd7c0047146109b2578063c49b9a80146109d2578063cf4be394146109f257600080fd5b8063a69df4b514610948578063a9059cbb1461095d578063aee367bc1461097d57600080fd5b806383caabe41161017a5780638f9a55c0116101495780638f9a55c0146108dd5780639479528e146108f357806395d89b4114610913578063a457c2d71461092857600080fd5b806383caabe414610845578063887c60fb1461086557806388f82020146108865780638da5cb5b146108bf57600080fd5b8063715018a6116101b6578063715018a6146107db578063741af87f146107f057806375f0a8741461080557806382bf293c1461082557600080fd5b80635c69f6901461056f5780635d098b381461079b57806370a08231146107bb57600080fd5b80633685d419116102c15780634a74bb021161025f5780635342acb41161022e5780635342acb4146106e85780635ac6f717146107215780635b65b2c1146107415780635c1a1db21461076157600080fd5b80634a74bb021461066d5780634ada218b1461068e57806350074c1d146106a857806352390c02146106c857600080fd5b8063437823ec1161029b578063437823ec146105f757806344f3c83a146106175780634549b0391461062d57806349bd5a5e1461064d57600080fd5b80633685d4191461059757806339509351146105b75780633bd5d173146105d757600080fd5b80631694505e116103395780633054f8a3116103085780633054f8a314610516578063313ce5671461053757806333477327146105595780633478154b1461056f57600080fd5b80631694505e146104a157806318160ddd146104c157806323b872dd146104d65780632d838119146104f657600080fd5b8063095ea7b311610375578063095ea7b3146104285780631285073c1461045857806313114a9d1461047757806314ddc0951461048c57600080fd5b806303fd2a45146103a7578063058230f6146103e457806306fdde031461040657600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506010546103c7906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103f057600080fd5b506104046103ff366004613178565b610b17565b005b34801561041257600080fd5b5061041b610b5d565b6040516103db9190613233565b34801561043457600080fd5b5061044861044336600461314d565b610bef565b60405190151581526020016103db565b34801561046457600080fd5b506030545b6040519081526020016103db565b34801561048357600080fd5b50601654610469565b34801561049857600080fd5b50603154610469565b3480156104ad57600080fd5b50602e546103c7906001600160a01b031681565b3480156104cd57600080fd5b50601454610469565b3480156104e257600080fd5b506104486104f136600461310d565b610c06565b34801561050257600080fd5b50610469610511366004613192565b610c6f565b34801561052257600080fd5b50602f5461044890600160b81b900460ff1681565b34801561054357600080fd5b5060135460405160ff90911681526020016103db565b34801561056557600080fd5b5061046960185481565b34801561057b57600080fd5b50610584600a81565b60405161ffff90911681526020016103db565b3480156105a357600080fd5b506104046105b236600461309d565b610cf3565b3480156105c357600080fd5b506104486105d236600461314d565b610ee2565b3480156105e357600080fd5b506104046105f2366004613192565b610f18565b34801561060357600080fd5b5061040461061236600461309d565b611002565b34801561062357600080fd5b5061046960315481565b34801561063957600080fd5b506104696106483660046131aa565b611050565b34801561065957600080fd5b50602f546103c7906001600160a01b031681565b34801561067957600080fd5b50602f5461044890600160a81b900460ff1681565b34801561069a57600080fd5b506032546104489060ff1681565b3480156106b457600080fd5b506104046106c3366004613192565b6110dd565b3480156106d457600080fd5b506104046106e336600461309d565b61111f565b3480156106f457600080fd5b5061044861070336600461309d565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561072d57600080fd5b5061040461073c366004613192565b6112ea565b34801561074d57600080fd5b5061040461075c366004613202565b61132c565b34801561076d57600080fd5b506020546021546022546023545b6040805194855260208501939093529183015260608201526080016103db565b3480156107a757600080fd5b506104046107b636600461309d565b611399565b3480156107c757600080fd5b506104696107d636600461309d565b6113e5565b3480156107e757600080fd5b50610404611444565b3480156107fc57600080fd5b506104046114a6565b34801561081157600080fd5b50600f546103c7906001600160a01b031681565b34801561083157600080fd5b50610404610840366004613192565b61153c565b34801561085157600080fd5b50610404610860366004613178565b61158c565b34801561087157600080fd5b50602f5461044890600160b01b900460ff1681565b34801561089257600080fd5b506104486108a136600461309d565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108cb57600080fd5b506000546001600160a01b03166103c7565b3480156108e957600080fd5b5061046960195481565b3480156108ff57600080fd5b5061040461090e366004613192565b6115d4565b34801561091f57600080fd5b5061041b61164d565b34801561093457600080fd5b5061044861094336600461314d565b61165c565b34801561095457600080fd5b506104046116ab565b34801561096957600080fd5b5061044861097836600461314d565b6117b1565b34801561098957600080fd5b50610404610998366004613178565b6117be565b3480156109a957600080fd5b50600254610469565b3480156109be57600080fd5b506104046109cd366004613192565b611806565b3480156109de57600080fd5b506104046109ed366004613178565b611886565b3480156109fe57600080fd5b5061046960175481565b348015610a1457600080fd5b50610469611908565b348015610a2957600080fd5b50610404610a38366004613192565b611919565b348015610a4957600080fd5b50610469610a583660046130d5565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a8f57600080fd5b50601b54601c54601d54601e5461077b565b348015610aad57600080fd5b50610404610abc366004613202565b61199e565b348015610acd57600080fd5b50610404610adc36600461309d565b6119ff565b348015610aed57600080fd5b50610404610afc36600461309d565b611a4a565b348015610b0d57600080fd5b5061046960305481565b6000546001600160a01b03163314610b4a5760405162461bcd60e51b8152600401610b4190613286565b60405180910390fd5b6032805460ff1916911515919091179055565b606060118054610b6c90613399565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9890613399565b8015610be55780601f10610bba57610100808354040283529160200191610be5565b820191906000526020600020905b815481529060010190602001808311610bc857829003601f168201915b5050505050905090565b6000610bfc338484611b22565b5060015b92915050565b6000610c13848484611c46565b610c658433610c608560405180606001604052806028815260200161341b602891396001600160a01b038a166000908152600560209081526040808320338452909152902054919061220a565b611b22565b5060019392505050565b6000601554821115610cd65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b41565b6000610ce0612244565b9050610cec8382612267565b9392505050565b6000546001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610b4190613286565b6001600160a01b03811660009081526007602052604090205460ff16610d855760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b41565b60005b600854811015610ede57816001600160a01b031660088281548110610dbd57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b03161415610ecc5760088054610de890600190613382565b81548110610e0657634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600880546001600160a01b039092169183908110610e4057634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ea657634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ed6816133d4565b915050610d88565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bfc918590610c6090866122a9565b3360008181526007602052604090205460ff1615610f8d5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610b41565b6000610f9883612308565b505050506001600160a01b038416600090815260036020526040902054919250610fc491905082612357565b6001600160a01b038316600090815260036020526040902055601554610fea9082612357565b601555601654610ffa90846122a9565b601655505050565b6000546001600160a01b0316331461102c5760405162461bcd60e51b8152600401610b4190613286565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006014548311156110a45760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b41565b816110c35760006110b484612308565b50939550610c00945050505050565b60006110ce84612308565b50929550610c00945050505050565b6000546001600160a01b031633146111075760405162461bcd60e51b8152600401610b4190613286565b61111981670de0b6b3a7640000613363565b60175550565b6000546001600160a01b031633146111495760405162461bcd60e51b8152600401610b4190613286565b7305ff2b0db69458a0750badebc4f9e13add608c7f6001600160a01b03821614156111c15760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f74206578636c7564652050616e63616b6520726f757465604482015261391760f11b6064820152608401610b41565b6001600160a01b03811660009081526007602052604090205460ff161561122a5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b41565b6001600160a01b03811660009081526003602052604090205415611284576001600160a01b03811660009081526003602052604090205461126a90610c6f565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6000546001600160a01b031633146113145760405162461bcd60e51b8152600401610b4190613286565b61132681670de0b6b3a7640000613363565b60185550565b6000546001600160a01b031633146113565760405162461bcd60e51b8152600401610b4190613286565b60208490556021839055602282905560238190556113808161137a848188886122a9565b906122a9565b6024819055601a54101561139357600080fd5b50505050565b6000546001600160a01b031633146113c35760405162461bcd60e51b8152600401610b4190613286565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811660009081526007602052604081205460ff161561142257506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c0090610c6f565b6000546001600160a01b0316331461146e5760405162461bcd60e51b8152600401610b4190613286565b600080546040516001600160a01b0390911690600080516020613443833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146114d05760405162461bcd60e51b8152600401610b4190613286565b600060258190556026819055602781905560288190556029819055602a819055602b819055602c819055602f805460ff60a01b191690556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a1565b6000546001600160a01b031633146115665760405162461bcd60e51b8152600401610b4190613286565b61158660646115808360145461239990919063ffffffff16565b90612267565b60195550565b6000546001600160a01b031633146115b65760405162461bcd60e51b8152600401610b4190613286565b602f8054911515600160b81b0260ff60b81b19909216919091179055565b6000546001600160a01b031633146115fe5760405162461bcd60e51b8152600401610b4190613286565b600a8111156116485760405162461bcd60e51b815260206004820152601660248201527565786365656473204d61784275794c6f636b54696d6560501b6044820152606401610b41565b603155565b606060128054610b6c90613399565b6000610bfc3384610c6085604051806060016040528060258152602001613463602591393360009081526005602090815260408083206001600160a01b038d168452909152902054919061220a565b6001546001600160a01b031633146117115760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610b41565b60025442116117625760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610b41565b600154600080546040516001600160a01b03938416939091169160008051602061344383398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610bfc338484611c46565b6000546001600160a01b031633146117e85760405162461bcd60e51b8152600401610b4190613286565b602f8054911515600160b01b0260ff60b01b19909216919091179055565b6000546001600160a01b031633146118305760405162461bcd60e51b8152600401610b4190613286565b600a8111156118815760405162461bcd60e51b815260206004820152601760248201527f65786365656473204d617853656c6c4c6f636b54696d650000000000000000006044820152606401610b41565b603055565b6000546001600160a01b031633146118b05760405162461bcd60e51b8152600401610b4190613286565b602f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906118fd90831515815260200190565b60405180910390a150565b600061191460006113e5565b905090565b6000546001600160a01b031633146119435760405162461bcd60e51b8152600401610b4190613286565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611972814261332b565b600255600080546040516001600160a01b0390911690600080516020613443833981519152908390a350565b6000546001600160a01b031633146119c85760405162461bcd60e51b8152600401610b4190613286565b601b849055601c839055601d829055601e8190556119ec8161137a848188886122a9565b601f819055601a54101561139357600080fd5b6000546001600160a01b03163314611a295760405162461bcd60e51b8152600401610b4190613286565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611a745760405162461bcd60e51b8152600401610b4190613286565b6001600160a01b038116611ad95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b41565b600080546040516001600160a01b038085169392169160008051602061344383398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316611b845760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b41565b6001600160a01b038216611be55760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b41565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316611caa5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b41565b60008111611d0c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b41565b6000546001600160a01b03848116911614801590611d3857506000546001600160a01b03838116911614155b15611d8f5760325460ff16611d8f5760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610b41565b6000546001600160a01b03848116911614801590611dbb57506000546001600160a01b03838116911614155b15611e6457602f546001600160a01b03838116911614801590611dec57506010546001600160a01b03838116911614155b15611e645760195481611dfe846113e5565b611e08919061332b565b1115611e645760405162461bcd60e51b815260206004820152602560248201527f5472616e7366657220616d6f756e74206578636565647320746865206261672060448201526439b4bd329760d91b6064820152608401610b41565b602f546000906001600160a01b0385811691161480611e9f57506001600160a01b0384167310ed43c718714eb63d5aa57b78b54704e256024e145b602f549091506000906001600160a01b0385811691161480611edd57506001600160a01b0384167310ed43c718714eb63d5aa57b78b54704e256024e145b9050808015611efa57506000546001600160a01b03868116911614155b8015611f1457506000546001600160a01b03858116911614155b1561203057601754831115611f885760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152733c20b6b7bab73a103337b91039b2b63634b7339760611b6064820152608401610b41565b611f93600986612418565b612030576001600160a01b0385166000908152600b602052604090205442101580611fc75750602f54600160b01b900460ff165b6120095760405162461bcd60e51b81526020600482015260136024820152724164647265737320696e2073656c6c4c6f636b60681b6044820152606401610b41565b603054612016904261332b565b6001600160a01b0386166000908152600b60205260409020555b81801561204b57506000546001600160a01b03868116911614155b801561206557506000546001600160a01b03858116911614155b1561217f576018548311156120d85760405162461bcd60e51b815260206004820152603360248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152723c20b6b7bab73a103337b910313abcb4b7339760691b6064820152608401610b41565b6120e3600c85612418565b61217f576001600160a01b0384166000908152600e6020526040902054421015806121175750602f54600160b81b900460ff165b6121585760405162461bcd60e51b81526020600482015260126024820152714164647265737320696e206275794c6f636b60701b6044820152606401610b41565b603154612165904261332b565b6001600160a01b0385166000908152600e60205260409020555b6121888161243a565b6000612193306113e5565b602d54909150811080159081906121b45750602f54600160a01b900460ff16155b80156121ce5750602f546001600160a01b03888116911614155b80156121e35750602f54600160a81b900460ff165b156121f657602d5491506121f682612477565b61220187878761251e565b50505050505050565b6000818484111561222e5760405162461bcd60e51b8152600401610b419190613233565b50600061223b8486613382565b95945050505050565b60008060006122516127eb565b90925090506122608282612267565b9250505090565b6000610cec83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506129a5565b6000806122b6838561332b565b905083811015610cec5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b41565b600080600080600080600080600061231f8a6129d3565b925092509250600080600061233d8d8686612338612244565b612a0f565b919f909e50909c50959a5093985091965092945050505050565b6000610cec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061220a565b6000826123a857506000610c00565b60006123b48385613363565b9050826123c18583613343565b14610cec5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b41565b6001600160a01b03811660009081526001830160205260408120541515610cec565b801561245b57602054602755602254602555602154602955602354602b5550565b601b54602755601d54602555601c54602955601e54602b555b50565b602f805460ff60a01b1916600160a01b1790556000612497826002612267565b905060006124a58383612357565b9050476124b183612a5f565b60006124bd4783612357565b90506124c98382612be4565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602f805460ff60a01b19169055505050565b6001600160a01b03831660009081526006602052604090205460ff168061255d57506001600160a01b03821660009081526006602052604090205460ff165b1561256a5761256a612cc1565b600061258660646115806029548561239990919063ffffffff16565b905060006125a46064611580602b548661239990919063ffffffff16565b6001600160a01b03861660009081526007602052604090205490915060ff1680156125e857506001600160a01b03841660009081526007602052604090205460ff16155b156126105761260b8585612606846126008888612357565b90612357565b612d1d565b61273d565b6001600160a01b03851660009081526007602052604090205460ff1615801561265157506001600160a01b03841660009081526007602052604090205460ff165b1561266e5761260b8585612669846126008888612357565b612e43565b6001600160a01b03851660009081526007602052604090205460ff161580156126b057506001600160a01b03841660009081526007602052604090205460ff16155b156126cd5761260b85856126c8846126008888612357565b612eec565b6001600160a01b03851660009081526007602052604090205460ff16801561270d57506001600160a01b03841660009081526007602052604090205460ff165b1561272a5761260b8585612725846126008888612357565b612f30565b61273d85856126c8846126008888612357565b6000602581905560275560105461275f9086906001600160a01b031684612eec565b600f546127779086906001600160a01b031683612eec565b6026546025556028546027556001600160a01b03851660009081526006602052604090205460ff16806127c257506001600160a01b03841660009081526006602052604090205460ff165b156127e4576127e4602654602555602854602755602a54602955602c54602b55565b5050505050565b6015546014546000918291825b6008548110156129755782600360006008848154811061282857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128a1575081600460006008848154811061287a57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128b757601554601454945094505050509091565b61290b60036000600884815481106128df57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612357565b9250612961600460006008848154811061293557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612357565b91508061296d816133d4565b9150506127f8565b5060145460155461298591612267565b82101561299c576015546014549350935050509091565b90939092509050565b600081836129c65760405162461bcd60e51b8152600401610b419190613233565b50600061223b8486613343565b6000806000806129e285612fa3565b905060006129ef86612fbf565b90506000612a01826126008986612357565b979296509094509092505050565b6000808080612a1e8886612399565b90506000612a2c8887612399565b90506000612a3a8888612399565b90506000612a4c826126008686612357565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612aa257634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612af657600080fd5b505afa158015612b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b2e91906130b9565b81600181518110612b4f57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602e54612b759130911684611b22565b602e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612bae9085906000908690309042906004016132bb565b600060405180830381600087803b158015612bc857600080fd5b505af1158015612bdc573d6000803e3d6000fd5b505050505050565b602e54612bfc9030906001600160a01b031684611b22565b602e546001600160a01b031663f305d719823085600080612c256000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612c8857600080fd5b505af1158015612c9c573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127e491906131d5565b602554158015612cd15750602754155b8015612cdd5750602b54155b8015612ce95750602954155b15612cf057565b602580546026556027805460285560298054602a55602b8054602c55600093849055918390559082905555565b600080600080600080612d2f87612308565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612d619088612357565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612d909087612357565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612dbf90866122a9565b6001600160a01b038916600090815260036020526040902055612de181612fdb565b612deb8483613064565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612e3091815260200190565b60405180910390a3505050505050505050565b600080600080600080612e5587612308565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612e879087612357565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612ebd90846122a9565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612dbf90866122a9565b600080600080600080612efe87612308565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612d909087612357565b600080600080600080612f4287612308565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612f749088612357565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612e879087612357565b6000610c0060646115806025548561239990919063ffffffff16565b6000610c0060646115806027548561239990919063ffffffff16565b6000612fe5612244565b90506000612ff38383612399565b3060009081526003602052604090205490915061301090826122a9565b3060009081526003602090815260408083209390935560079052205460ff161561305f573060009081526004602052604090205461304e90846122a9565b306000908152600460205260409020555b505050565b6015546130719083612357565b60155560165461308190826122a9565b6016555050565b8035801515811461309857600080fd5b919050565b6000602082840312156130ae578081fd5b8135610cec81613405565b6000602082840312156130ca578081fd5b8151610cec81613405565b600080604083850312156130e7578081fd5b82356130f281613405565b9150602083013561310281613405565b809150509250929050565b600080600060608486031215613121578081fd5b833561312c81613405565b9250602084013561313c81613405565b929592945050506040919091013590565b6000806040838503121561315f578182fd5b823561316a81613405565b946020939093013593505050565b600060208284031215613189578081fd5b610cec82613088565b6000602082840312156131a3578081fd5b5035919050565b600080604083850312156131bc578182fd5b823591506131cc60208401613088565b90509250929050565b6000806000606084860312156131e9578283fd5b8351925060208401519150604084015190509250925092565b60008060008060808587031215613217578081fd5b5050823594602084013594506040840135936060013592509050565b6000602080835283518082850152825b8181101561325f57858101830151858201604001528201613243565b818111156132705783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561330a5784516001600160a01b0316835293830193918301916001016132e5565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561333e5761333e6133ef565b500190565b60008261335e57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561337d5761337d6133ef565b500290565b600082821015613394576133946133ef565b500390565b600181811c908216806133ad57607f821691505b602082108114156133ce57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156133e8576133e86133ef565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461247457600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208650ac4f4e833ed55a846115ab98cb34b8652e42ea8bc1438e80cc5568c1a20764736f6c63430008040033

Deployed ByteCode Sourcemap

21439:26462:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22399:64;;;;;;;;;;-1:-1:-1;22399:64:0;;;;-1:-1:-1;;;;;22399:64:0;;;;;;-1:-1:-1;;;;;3449:32:1;;;3431:51;;3419:2;3404:18;22399:64:0;;;;;;;;45053:98;;;;;;;;;;-1:-1:-1;45053:98:0;;;;;:::i;:::-;;:::i;:::-;;25642:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;27684:193::-;;;;;;;;;;-1:-1:-1;27684:193:0;;;;;:::i;:::-;;:::i;:::-;;;4270:14:1;;4263:22;4245:41;;4233:2;4218:18;27684:193:0;4200:92:1;27033:102:0;;;;;;;;;;-1:-1:-1;27115:12:0;;27033:102;;;14333:25:1;;;14321:2;14306:18;27033:102:0;14288:76:1;29183:87:0;;;;;;;;;;-1:-1:-1;29252:10:0;;29183:87;;27175:100;;;;;;;;;;-1:-1:-1;27256:11:0;;27175:100;;24275:41;;;;;;;;;;-1:-1:-1;24275:41:0;;;;-1:-1:-1;;;;;24275:41:0;;;25990:95;;;;;;;;;;-1:-1:-1;26070:7:0;;25990:95;;27885:446;;;;;;;;;;-1:-1:-1;27885:446:0;;;;;:::i;:::-;;:::i;30192:322::-;;;;;;;;;;-1:-1:-1;30192:322:0;;;;;:::i;:::-;;:::i;25475:27::-;;;;;;;;;;-1:-1:-1;25475:27:0;;;;-1:-1:-1;;;25475:27:0;;;;;;25874:83;;;;;;;;;;-1:-1:-1;25940:9:0;;25874:83;;25940:9;;;;16219:36:1;;16207:2;16192:18;25874:83:0;16174:87:1;22904:61:0;;;;;;;;;;;;;;;;23090:51;;;;;;;;;;;;23131:10;23090:51;;;;;14168:6:1;14156:19;;;14138:38;;14126:2;14111:18;23090:51:0;14093:89:1;31010:477:0;;;;;;;;;;-1:-1:-1;31010:477:0;;;;;:::i;:::-;;:::i;28339:300::-;;;;;;;;;;-1:-1:-1;28339:300:0;;;;;:::i;:::-;;:::i;29278:419::-;;;;;;;;;;-1:-1:-1;29278:419:0;;;;;:::i;:::-;;:::i;44816:111::-;;;;;;;;;;-1:-1:-1;44816:111:0;;;;;:::i;:::-;;:::i;25543:26::-;;;;;;;;;;;;;;;;29705:479;;;;;;;;;;-1:-1:-1;29705:479:0;;;;;:::i;:::-;;:::i;24323:28::-;;;;;;;;;;-1:-1:-1;24323:28:0;;;;-1:-1:-1;;;;;24323:28:0;;;24386:40;;;;;;;;;;-1:-1:-1;24386:40:0;;;;-1:-1:-1;;;24386:40:0;;;;;;25576:34;;;;;;;;;;-1:-1:-1;25576:34:0;;;;;;;;47290:134;;;;;;;;;;-1:-1:-1;47290:134:0;;;;;:::i;:::-;;:::i;30522:480::-;;;;;;;;;;-1:-1:-1;30522:480:0;;;;;:::i;:::-;;:::i;36929:124::-;;;;;;;;;;-1:-1:-1;36929:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;37018:27:0;36994:4;37018:27;;;:18;:27;;;;;;;;;36929:124;47432:129;;;;;;;;;;-1:-1:-1;47432:129:0;;;;;:::i;:::-;;:::i;46811:471::-;;;;;;;;;;-1:-1:-1;46811:471:0;;;;;:::i;:::-;;:::i;26618:230::-;;;;;;;;;;-1:-1:-1;26780:16:0;;26798:11;;26811:10;;26823:16;;26618:230;;;;15912:25:1;;;15968:2;15953:18;;15946:34;;;;15996:18;;;15989:34;16054:2;16039:18;;16032:34;15899:3;15884:19;26618:230:0;15866:206:1;46231:112:0;;;;;;;;;;-1:-1:-1;46231:112:0;;;;;:::i;:::-;;:::i;26124:198::-;;;;;;;;;;-1:-1:-1;26124:198:0;;;;;:::i;:::-;;:::i;6536:148::-;;;;;;;;;;;;;:::i;45780:409::-;;;;;;;;;;;;;:::i;22317:75::-;;;;;;;;;;-1:-1:-1;22317:75:0;;;;-1:-1:-1;;;;;22317:75:0;;;47569:150;;;;;;;;;;-1:-1:-1;47569:150:0;;;;;:::i;:::-;;:::i;45271:102::-;;;;;;;;;;-1:-1:-1;45271:102:0;;;;;:::i;:::-;;:::i;25440:28::-;;;;;;;;;;-1:-1:-1;25440:28:0;;;;-1:-1:-1;;;25440:28:0;;;;;;29055:120;;;;;;;;;;-1:-1:-1;29055:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;29147:20:0;29123:4;29147:20;;;:11;:20;;;;;;;;;29055:120;6322:79;;;;;;;;;;-1:-1:-1;6360:7:0;6387:6;-1:-1:-1;;;;;6387:6:0;6322:79;;23003:60;;;;;;;;;;;;;;;;45381:187;;;;;;;;;;-1:-1:-1;45381:187:0;;;;;:::i;:::-;;:::i;25758:87::-;;;;;;;;;;;;;:::i;28647:400::-;;;;;;;;;;-1:-1:-1;28647:400:0;;;;;:::i;:::-;;:::i;7312:341::-;;;;;;;;;;;;;:::i;27285:199::-;;;;;;;;;;-1:-1:-1;27285:199:0;;;;;:::i;:::-;;:::i;45159:104::-;;;;;;;;;;-1:-1:-1;45159:104:0;;;;;:::i;:::-;;:::i;6981:89::-;;;;;;;;;;-1:-1:-1;7053:9:0;;6981:89;;45577:194;;;;;;;;;;-1:-1:-1;45577:194:0;;;;;:::i;:::-;;:::i;47727:171::-;;;;;;;;;;-1:-1:-1;47727:171:0;;;;;:::i;:::-;;:::i;22835:62::-;;;;;;;;;;;;;;;;26892:100;;;;;;;;;;;;;:::i;7078:226::-;;;;;;;;;;-1:-1:-1;7078:226:0;;;;;:::i;:::-;;:::i;27492:184::-;;;;;;;;;;-1:-1:-1;27492:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;27641:18:0;;;27609:7;27641:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;27492:184;26359:221;;;;;;;;;;-1:-1:-1;26516:15:0;;26533:10;;26545:9;;26556:15;;26359:221;;46351:452;;;;;;;;;;-1:-1:-1;46351:452:0;;;;;:::i;:::-;;:::i;44935:110::-;;;;;;;;;;-1:-1:-1;44935:110:0;;;;;:::i;:::-;;:::i;6692:281::-;;;;;;;;;;-1:-1:-1;6692:281:0;;;;;:::i;:::-;;:::i;25509:27::-;;;;;;;;;;;;;;;;45053:98;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;;;;;;;;;45118:14:::1;:25:::0;;-1:-1:-1;;45118:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45053:98::o;25642:83::-;25679:13;25712:5;25705:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25642:83;:::o;27684:193::-;27786:4;27808:39;2685:10;27831:7;27840:6;27808:8;:39::i;:::-;-1:-1:-1;27865:4:0;27684:193;;;;;:::o;27885:446::-;28017:4;28034:36;28044:6;28052:9;28063:6;28034:9;:36::i;:::-;28081:220;28104:6;2685:10;28152:138;28208:6;28152:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28152:19:0;;;;;;:11;:19;;;;;;;;2685:10;28152:33;;;;;;;;;;:37;:138::i;:::-;28081:8;:220::i;:::-;-1:-1:-1;28319:4:0;27885:446;;;;;:::o;30192:322::-;30286:7;30344;;30333;:18;;30311:110;;;;-1:-1:-1;;;30311:110:0;;5748:2:1;30311:110:0;;;5730:21:1;5787:2;5767:18;;;5760:30;5826:34;5806:18;;;5799:62;-1:-1:-1;;;5877:18:1;;;5870:40;5927:19;;30311:110:0;5720:232:1;30311:110:0;30432:19;30454:10;:8;:10::i;:::-;30432:32;-1:-1:-1;30482:24:0;:7;30432:32;30482:11;:24::i;:::-;30475:31;30192:322;-1:-1:-1;;;30192:322:0:o;31010:477::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31090:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;31082:60;;;::::0;-1:-1:-1;;;31082:60:0;;7325:2:1;31082:60:0::1;::::0;::::1;7307:21:1::0;7364:2;7344:18;;;7337:30;7403:29;7383:18;;;7376:57;7450:18;;31082:60:0::1;7297:177:1::0;31082:60:0::1;31158:9;31153:327;31177:9;:16:::0;31173:20;::::1;31153:327;;;31235:7;-1:-1:-1::0;;;;;31219:23:0::1;:9;31229:1;31219:12;;;;;;-1:-1:-1::0;;;31219:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;31219:12:0::1;:23;31215:254;;;31278:9;31288:16:::0;;:20:::1;::::0;31307:1:::1;::::0;31288:20:::1;:::i;:::-;31278:31;;;;;;-1:-1:-1::0;;;31278:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;31263:9:::1;:12:::0;;-1:-1:-1;;;;;31278:31:0;;::::1;::::0;31273:1;;31263:12;::::1;;;-1:-1:-1::0;;;31263:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;31263:46:0::1;-1:-1:-1::0;;;;;31263:46:0;;::::1;;::::0;;31328:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;31367:11:::1;:20:::0;;;;:28;;-1:-1:-1;;31367:28:0::1;::::0;;31414:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;31414:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;31414:15:0;;;;;-1:-1:-1;;;;;;31414:15:0::1;::::0;;;;;31153:327:::1;31010:477:::0;:::o;31215:254::-:1;31195:3:::0;::::1;::::0;::::1;:::i;:::-;;;;31153:327;;;;31010:477:::0;:::o;28339:300::-;2685:10;28454:4;28548:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28548:34:0;;;;;;;;;;28454:4;;28476:133;;28526:7;;28548:50;;28587:10;28548:38;:50::i;29278:419::-;2685:10;29330:14;29393:19;;;:11;:19;;;;;;;;29392:20;29370:114;;;;-1:-1:-1;;;29370:114:0;;13379:2:1;29370:114:0;;;13361:21:1;13418:2;13398:18;;;13391:30;13457:34;13437:18;;;13430:62;-1:-1:-1;;;13508:18:1;;;13501:42;13560:19;;29370:114:0;13351:234:1;29370:114:0;29496:15;29525:19;29536:7;29525:10;:19::i;:::-;-1:-1:-1;;;;;;;;;29573:15:0;;;;;;:7;:15;;;;;;29495:49;;-1:-1:-1;29573:28:0;;:15;-1:-1:-1;29495:49:0;29573:19;:28::i;:::-;-1:-1:-1;;;;;29555:15:0;;;;;;:7;:15;;;;;:46;29622:7;;:20;;29634:7;29622:11;:20::i;:::-;29612:7;:30;29666:10;;:23;;29681:7;29666:14;:23::i;:::-;29653:10;:36;-1:-1:-1;;;29278:419:0:o;44816:111::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44885:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;44885:34:0::1;44915:4;44885:34;::::0;;44816:111::o;29705:479::-;29823:7;29867;;29856;:18;;29848:62;;;;-1:-1:-1;;;29848:62:0;;8032:2:1;29848:62:0;;;8014:21:1;8071:2;8051:18;;;8044:30;8110:33;8090:18;;;8083:61;8161:18;;29848:62:0;8004:181:1;29848:62:0;29926:17;29921:256;;29961:15;29990:19;30001:7;29990:10;:19::i;:::-;-1:-1:-1;29960:49:0;;-1:-1:-1;30024:14:0;;-1:-1:-1;;;;;30024:14:0;29921:256;30074:23;30109:19;30120:7;30109:10;:19::i;:::-;-1:-1:-1;30071:57:0;;-1:-1:-1;30143:22:0;;-1:-1:-1;;;;;30143:22:0;47290:134;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;47392:24:::1;:15:::0;47410:6:::1;47392:24;:::i;:::-;47373:16;:43:::0;-1:-1:-1;47290:134:0:o;30522:480::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;30627:42:::1;-1:-1:-1::0;;;;;30616:53:0;::::1;;;30594:137;;;::::0;-1:-1:-1;;;30594:137:0;;12195:2:1;30594:137:0::1;::::0;::::1;12177:21:1::0;12234:2;12214:18;;;12207:30;12273:34;12253:18;;;12246:62;-1:-1:-1;;;12324:18:1;;;12317:32;12366:19;;30594:137:0::1;12167:224:1::0;30594:137:0::1;-1:-1:-1::0;;;;;30751:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;30750:21;30742:61;;;::::0;-1:-1:-1;;;30742:61:0;;7325:2:1;30742:61:0::1;::::0;::::1;7307:21:1::0;7364:2;7344:18;;;7337:30;7403:29;7383:18;;;7376:57;7450:18;;30742:61:0::1;7297:177:1::0;30742:61:0::1;-1:-1:-1::0;;;;;30818:16:0;::::1;30837:1;30818:16:::0;;;:7:::1;:16;::::0;;;;;:20;30814:109:::1;;-1:-1:-1::0;;;;;30894:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;30874:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;30855:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;30814:109:::1;-1:-1:-1::0;;;;;30933:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;30933:27:0::1;30956:4;30933:27:::0;;::::1;::::0;;;30971:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;30971:23:0::1;::::0;;::::1;::::0;;30522:480::o;47432:129::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;47530:23:::1;:14:::0;47547:6:::1;47530:23;:::i;:::-;47512:15;:41:::0;-1:-1:-1;47432:129:0:o;46811:471::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;46971:16:::1;:36:::0;;;47018:11:::1;:26:::0;;;47055:10:::1;:24:::0;;;47090:16:::1;:36:::0;;;47152:75:::1;47109:17:::0;47152:52:::1;47068:11:::0;47152:52;46990:17;47032:12;47152:21:::1;:35::i;:::-;:39:::0;::::1;:52::i;:75::-;47137:12;:90:::0;;;47262:11:::1;::::0;-1:-1:-1;47246:27:0::1;47238:36;;;::::0;::::1;;46811:471:::0;;;;:::o;46231:112::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;46308:15:::1;:27:::0;;-1:-1:-1;;;;;;46308:27:0::1;-1:-1:-1::0;;;;;46308:27:0;;;::::1;::::0;;;::::1;::::0;;46231:112::o;26124:198::-;-1:-1:-1;;;;;26214:20:0;;26190:7;26214:20;;;:11;:20;;;;;;;;26210:49;;;-1:-1:-1;;;;;;26243:16:0;;;;;:7;:16;;;;;;;26124:198::o;26210:49::-;-1:-1:-1;;;;;26297:16:0;;;;;;:7;:16;;;;;;26277:37;;:19;:37::i;6536:148::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;6643:1:::1;6627:6:::0;;6606:40:::1;::::0;-1:-1:-1;;;;;6627:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6606:40:0;6643:1;;6606:40:::1;6674:1;6657:19:::0;;-1:-1:-1;;;;;;6657:19:0::1;::::0;;6536:148::o;45780:409::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;45846:1:::1;45836:7;:11:::0;;;45858:15:::1;:25:::0;;;45894:13:::1;:17:::0;;;45922:21:::1;:37:::0;;;45970:8:::1;:12:::0;;;45993:16:::1;:26:::0;;;46030:13:::1;:17:::0;;;46058:21:::1;:37:::0;;;46106:16:::1;:24:::0;;-1:-1:-1;;;;46106:24:0::1;::::0;;46146:35:::1;::::0;4245:41:1;;;46146:35:0::1;::::0;4233:2:1;4218:18;46146:35:0::1;;;;;;;45780:409::o:0;47569:150::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;47671:40:::1;47705:5;47671:29;47683:16;47671:7;;:11;;:29;;;;:::i;:::-;:33:::0;::::1;:40::i;:::-;47654:14;:57:::0;-1:-1:-1;47569:150:0:o;45271:102::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;45341:15:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;45341:24:0::1;-1:-1:-1::0;;;;45341:24:0;;::::1;::::0;;;::::1;::::0;;45271:102::o;45381:187::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;23188:10:::1;45467:30:::0;::::1;;45459:64;;;::::0;-1:-1:-1;;;45459:64:0;;7681:2:1;45459:64:0::1;::::0;::::1;7663:21:1::0;7720:2;7700:18;;;7693:30;-1:-1:-1;;;7739:18:1;;;7732:52;7801:18;;45459:64:0::1;7653:172:1::0;45459:64:0::1;45534:11;:26:::0;45381:187::o;25758:87::-;25797:13;25830:7;25823:14;;;;;:::i;28647:400::-;28767:4;28789:228;2685:10;28839:7;28861:145;28918:15;28861:145;;;;;;;;;;;;;;;;;2685:10;28861:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;28861:34:0;;;;;;;;;;;;:38;:145::i;7312:341::-;7378:14;;-1:-1:-1;;;;;7378:14:0;7396:10;7378:28;7356:113;;;;-1:-1:-1;;;7356:113:0;;13792:2:1;7356:113:0;;;13774:21:1;13831:2;13811:18;;;13804:30;13870:34;13850:18;;;13843:62;-1:-1:-1;;;13921:18:1;;;13914:33;13964:19;;7356:113:0;13764:225:1;7356:113:0;7506:9;;7488:15;:27;7480:71;;;;-1:-1:-1;;;7480:71:0;;12598:2:1;7480:71:0;;;12580:21:1;12637:2;12617:18;;;12610:30;12676:33;12656:18;;;12649:61;12727:18;;7480:71:0;12570:181:1;7480:71:0;7596:14;;;7588:6;;7567:44;;-1:-1:-1;;;;;7596:14:0;;;;7588:6;;;;-1:-1:-1;;;;;;;;;;;7567:44:0;;7631:14;;;7622:23;;-1:-1:-1;;;;;;7622:23:0;-1:-1:-1;;;;;7631:14:0;;;7622:23;;;;;;7312:341::o;27285:199::-;27390:4;27412:42;2685:10;27436:9;27447:6;27412:9;:42::i;45159:104::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;45230:16:::1;:25:::0;;;::::1;;-1:-1:-1::0;;;45230:25:0::1;-1:-1:-1::0;;;;45230:25:0;;::::1;::::0;;;::::1;::::0;;45159:104::o;45577:194::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;23131:10:::1;45665:32:::0;::::1;;45657:67;;;::::0;-1:-1:-1;;;45657:67:0;;11032:2:1;45657:67:0::1;::::0;::::1;11014:21:1::0;11071:2;11051:18;;;11044:30;11110:25;11090:18;;;11083:53;11153:18;;45657:67:0::1;11004:173:1::0;45657:67:0::1;45735:12;:28:::0;45577:194::o;47727:171::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;47804:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;47804:32:0::1;-1:-1:-1::0;;;;47804:32:0;;::::1;;::::0;;47852:38:::1;::::0;::::1;::::0;::::1;::::0;47828:8;4270:14:1;4263:22;4245:41;;4233:2;4218:18;;4200:92;47852:38:0::1;;;;;;;;47727:171:::0;:::o;26892:100::-;26936:7;26963:21;26981:1;26963:9;:21::i;:::-;26956:28;;26892:100;:::o;7078:226::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;7159:6:::1;::::0;;;7142:23;;-1:-1:-1;;;;;;7142:23:0;;::::1;-1:-1:-1::0;;;;;7159:6:0;::::1;7142:23;::::0;;;7176:19:::1;::::0;;7218:22:::1;7236:4:::0;7218:15:::1;:22;:::i;:::-;7206:9;:34:::0;7293:1:::1;7277:6:::0;;7256:40:::1;::::0;-1:-1:-1;;;;;7277:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7256:40:0;7293:1;;7256:40:::1;7078:226:::0;:::o;46351:452::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;46506:15:::1;:34:::0;;;46551:10:::1;:24:::0;;;46586:9:::1;:22:::0;;;46619:15:::1;:34:::0;;;46678:71:::1;46637:16:::0;46678:49:::1;46598:10:::0;46678:49;46524:16;46564:11;46678:20:::1;:33::i;:71::-;46664:11;:85:::0;;;46783:11:::1;::::0;-1:-1:-1;46768:26:0::1;46760:35;;;::::0;::::1;44935:110:::0;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45002:27:0::1;45032:5;45002:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;45002:35:0::1;::::0;;44935:110::o;6692:281::-;6449:6;;-1:-1:-1;;;;;6449:6:0;2685:10;6449:22;6441:67;;;;-1:-1:-1;;;6441:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6795:22:0;::::1;6773:110;;;::::0;-1:-1:-1;;;6773:110:0;;6159:2:1;6773:110:0::1;::::0;::::1;6141:21:1::0;6198:2;6178:18;;;6171:30;6237:34;6217:18;;;6210:62;-1:-1:-1;;;6288:18:1;;;6281:36;6334:19;;6773:110:0::1;6131:228:1::0;6773:110:0::1;6920:6;::::0;;6899:38:::1;::::0;-1:-1:-1;;;;;6899:38:0;;::::1;::::0;6920:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6899:38:0;::::1;6948:6;:17:::0;;-1:-1:-1;;;;;;6948:17:0::1;-1:-1:-1::0;;;;;6948:17:0;;;::::1;::::0;;;::::1;::::0;;6692:281::o;37061:371::-;-1:-1:-1;;;;;37188:19:0;;37180:68;;;;-1:-1:-1;;;37180:68:0;;11790:2:1;37180:68:0;;;11772:21:1;11829:2;11809:18;;;11802:30;11868:34;11848:18;;;11841:62;-1:-1:-1;;;11919:18:1;;;11912:34;11963:19;;37180:68:0;11762:226:1;37180:68:0;-1:-1:-1;;;;;37267:21:0;;37259:68;;;;-1:-1:-1;;;37259:68:0;;6566:2:1;37259:68:0;;;6548:21:1;6605:2;6585:18;;;6578:30;6644:34;6624:18;;;6617:62;-1:-1:-1;;;6695:18:1;;;6688:32;6737:19;;37259:68:0;6538:224:1;37259:68:0;-1:-1:-1;;;;;37340:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37392:32;;14333:25:1;;;37392:32:0;;14306:18:1;37392:32:0;;;;;;;37061:371;;;:::o;37440:2128::-;-1:-1:-1;;;;;37562:18:0;;37554:68;;;;-1:-1:-1;;;37554:68:0;;11384:2:1;37554:68:0;;;11366:21:1;11423:2;11403:18;;;11396:30;11462:34;11442:18;;;11435:62;-1:-1:-1;;;11513:18:1;;;11506:35;11558:19;;37554:68:0;11356:227:1;37554:68:0;37650:1;37641:6;:10;37633:64;;;;-1:-1:-1;;;37633:64:0;;10622:2:1;37633:64:0;;;10604:21:1;10661:2;10641:18;;;10634:30;10700:34;10680:18;;;10673:62;-1:-1:-1;;;10751:18:1;;;10744:39;10800:19;;37633:64:0;10594:231:1;37633:64:0;6360:7;6387:6;-1:-1:-1;;;;;37714:15:0;;;6387:6;;37714:15;;;;:32;;-1:-1:-1;6360:7:0;6387:6;-1:-1:-1;;;;;37733:13:0;;;6387:6;;37733:13;;37714:32;37710:115;;;37771:14;;;;37763:50;;;;-1:-1:-1;;;37763:50:0;;10270:2:1;37763:50:0;;;10252:21:1;10309:2;10289:18;;;10282:30;10348:25;10328:18;;;10321:53;10391:18;;37763:50:0;10242:173:1;37763:50:0;6360:7;6387:6;-1:-1:-1;;;;;37841:15:0;;;6387:6;;37841:15;;;;:32;;-1:-1:-1;6360:7:0;6387:6;-1:-1:-1;;;;;37860:13:0;;;6387:6;;37860:13;;37841:32;37837:229;;;37900:13;;-1:-1:-1;;;;;37894:19:0;;;37900:13;;37894:19;;;;:33;;-1:-1:-1;37923:4:0;;-1:-1:-1;;;;;37917:10:0;;;37923:4;;37917:10;;37894:33;37890:164;;;37982:14;;37972:6;37956:13;37966:2;37956:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;37948:90;;;;-1:-1:-1;;;37948:90:0;;5342:2:1;37948:90:0;;;5324:21:1;5381:2;5361:18;;;5354:30;5420:34;5400:18;;;5393:62;-1:-1:-1;;;5471:18:1;;;5464:35;5516:19;;37948:90:0;5314:227:1;37948:90:0;38095:13;;38078:10;;-1:-1:-1;;;;;38089:19:0;;;38095:13;;38089:19;;:44;;-1:-1:-1;;;;;;38111:22:0;;22268:42;38111:22;38089:44;38160:13;;38078:55;;-1:-1:-1;38144:11:0;;-1:-1:-1;;;;;38156:17:0;;;38160:13;;38156:17;;:40;;-1:-1:-1;;;;;;38176:20:0;;22268:42;38176:20;38156:40;38144:52;;38213:6;:25;;;;-1:-1:-1;6360:7:0;6387:6;-1:-1:-1;;;;;38223:15:0;;;6387:6;;38223:15;;38213:25;:42;;;;-1:-1:-1;6360:7:0;6387:6;-1:-1:-1;;;;;38242:13:0;;;6387:6;;38242:13;;38213:42;38209:402;;;38289:16;;38279:6;:26;;38271:91;;;;-1:-1:-1;;;38271:91:0;;12958:2:1;38271:91:0;;;12940:21:1;12997:2;12977:18;;;12970:30;13036:34;13016:18;;;13009:62;-1:-1:-1;;;13087:18:1;;;13080:50;13147:19;;38271:91:0;12930:242:1;38271:91:0;38381:36;:21;38412:4;38381:30;:36::i;:::-;38377:223;;-1:-1:-1;;;;;38448:15:0;;;;;;:9;:15;;;;;;38465;-1:-1:-1;38448:32:0;;:50;;-1:-1:-1;38482:16:0;;-1:-1:-1;;;38482:16:0;;;;38448:50;38440:81;;;;-1:-1:-1;;;38440:81:0;;8739:2:1;38440:81:0;;;8721:21:1;8778:2;8758:18;;;8751:30;-1:-1:-1;;;8797:18:1;;;8790:49;8856:18;;38440:81:0;8711:169:1;38440:81:0;38572:12;;38556:28;;:15;:28;:::i;:::-;-1:-1:-1;;;;;38540:15:0;;;;;;:9;:15;;;;;:44;38377:223;38627:5;:24;;;;-1:-1:-1;6360:7:0;6387:6;-1:-1:-1;;;;;38636:15:0;;;6387:6;;38636:15;;38627:24;:41;;;;-1:-1:-1;6360:7:0;6387:6;-1:-1:-1;;;;;38655:13:0;;;6387:6;;38655:13;;38627:41;38623:387;;;38702:15;;38692:6;:25;;38684:89;;;;-1:-1:-1;;;38684:89:0;;9087:2:1;38684:89:0;;;9069:21:1;9126:2;9106:18;;;9099:30;9165:34;9145:18;;;9138:62;-1:-1:-1;;;9216:18:1;;;9209:49;9275:19;;38684:89:0;9059:241:1;38684:89:0;38792:33;:20;38822:2;38792:29;:33::i;:::-;38788:211;;-1:-1:-1;;;;;38856:12:0;;;;;;:8;:12;;;;;;38870:15;-1:-1:-1;38856:29:0;;:46;;-1:-1:-1;38887:15:0;;-1:-1:-1;;;38887:15:0;;;;38856:46;38848:76;;;;-1:-1:-1;;;38848:76:0;;8392:2:1;38848:76:0;;;8374:21:1;8431:2;8411:18;;;8404:30;-1:-1:-1;;;8450:18:1;;;8443:48;8508:18;;38848:76:0;8364:168:1;38848:76:0;38972:11;;38956:27;;:15;:27;:::i;:::-;-1:-1:-1;;;;;38943:12:0;;;;;;:8;:12;;;;;:40;38788:211;39022:22;39037:6;39022:14;:22::i;:::-;39057:28;39088:24;39106:4;39088:9;:24::i;:::-;39187:29;;39057:55;;-1:-1:-1;39150:66:0;;;;;;;39245:53;;-1:-1:-1;39282:16:0;;-1:-1:-1;;;39282:16:0;;;;39281:17;39245:53;:91;;;;-1:-1:-1;39323:13:0;;-1:-1:-1;;;;;39315:21:0;;;39323:13;;39315:21;;39245:91;:129;;;;-1:-1:-1;39353:21:0;;-1:-1:-1;;;39353:21:0;;;;39245:129;39227:289;;;39424:29;;39401:52;;39468:36;39483:20;39468:14;:36::i;:::-;39528:32;39543:4;39549:2;39553:6;39528:14;:32::i;:::-;37440:2128;;;;;;;:::o;1346:224::-;1466:7;1502:12;1494:6;;;;1486:29;;;;-1:-1:-1;;;1486:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1526:9:0;1538:5;1542:1;1538;:5;:::i;:::-;1526:17;1346:224;-1:-1:-1;;;;;1346:224:0:o;34184:164::-;34226:7;34247:15;34264;34283:19;:17;:19::i;:::-;34246:56;;-1:-1:-1;34246:56:0;-1:-1:-1;34320:20:0;34246:56;;34320:11;:20::i;:::-;34313:27;;;;34184:164;:::o;1834:132::-;1892:7;1919:39;1923:1;1926;1919:39;;;;;;;;;;;;;;;;;:3;:39::i;1015:179::-;1073:7;;1105:5;1109:1;1105;:5;:::i;:::-;1093:17;;1134:1;1129;:6;;1121:46;;;;-1:-1:-1;;;1121:46:0;;6969:2:1;1121:46:0;;;6951:21:1;7008:2;6988:18;;;6981:30;7047:29;7027:18;;;7020:57;7094:18;;1121:46:0;6941:177:1;32452:742:0;32552:7;32574;32596;32618;32640;32662;32712:23;32750:12;32777:18;32809:20;32821:7;32809:11;:20::i;:::-;32697:132;;;;;;32841:15;32858:23;32883:12;32899:113;32925:7;32947:4;32966:10;32991;:8;:10::i;:::-;32899:11;:113::i;:::-;32840:172;;;;-1:-1:-1;32840:172:0;;-1:-1:-1;33116:15:0;;-1:-1:-1;33146:4:0;;-1:-1:-1;33165:10:0;;-1:-1:-1;32452:742:0;;-1:-1:-1;;;;;32452:742:0:o;1202:136::-;1260:7;1287:43;1291:1;1294;1287:43;;;;;;;;;;;;;;;;;:3;:43::i;1578:248::-;1636:7;1660:6;1656:47;;-1:-1:-1;1690:1:0;1683:8;;1656:47;1715:9;1727:5;1731:1;1727;:5;:::i;:::-;1715:17;-1:-1:-1;1760:1:0;1751:5;1755:1;1715:17;1751:5;:::i;:::-;:10;1743:56;;;;-1:-1:-1;;;1743:56:0;;9507:2:1;1743:56:0;;;9489:21:1;9546:2;9526:18;;;9519:30;9585:34;9565:18;;;9558:62;-1:-1:-1;;;9636:18:1;;;9629:31;9677:19;;1743:56:0;9479:223:1;20050:199:0;-1:-1:-1;;;;;20216:23:0;;20157:4;18298:19;;;:12;;;:19;;;;;;:24;;20186:55;18169:161;35652:511;35712:6;35708:448;;;35790:16;;35774:13;:32;35831:10;;35821:7;:20;35867:11;;35856:8;:22;35909:16;;35893:13;:32;35652:511;:::o;35708:448::-;36013:15;;35997:13;:31;36053:9;;36043:7;:19;36088:10;;36077:8;:21;36129:15;;36113:13;:31;35708:448;35652:511;:::o;39576:474::-;24727:16;:23;;-1:-1:-1;;;;24727:23:0;-1:-1:-1;;;24727:23:0;;;;39676:27:::1;:20:::0;39701:1:::1;39676:24;:27::i;:::-;39661:42:::0;-1:-1:-1;39714:17:0::1;39734:30;:20:::0;39661:42;39734:24:::1;:30::i;:::-;39714:50:::0;-1:-1:-1;39802:21:0::1;39836:22;39853:4:::0;39836:16:::1;:22::i;:::-;39871:18;39892:41;:21;39918:14:::0;39892:25:::1;:41::i;:::-;39871:62;;39946:35;39959:9;39970:10;39946:12;:35::i;:::-;39999:43;::::0;;15559:25:1;;;15615:2;15600:18;;15593:34;;;15643:18;;;15636:34;;;39999:43:0::1;::::0;15547:2:1;15532:18;39999:43:0::1;;;;;;;-1:-1:-1::0;;24773:16:0;:24;;-1:-1:-1;;;;24773:24:0;;;-1:-1:-1;;;39576:474:0:o;40938:1837::-;-1:-1:-1;;;;;41070:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;41100:29:0;;;;;;:18;:29;;;;;;;;41070:59;41066:106;;;41146:14;:12;:14::i;:::-;41184:15;41202:29;41227:3;41202:20;41213:8;;41202:6;:10;;:20;;;;:::i;:29::-;41184:47;;41242:20;41265:34;41295:3;41265:25;41276:13;;41265:6;:10;;:25;;;;:::i;:34::-;-1:-1:-1;;;;;41316:19:0;;;;;;:11;:19;;;;;;41242:57;;-1:-1:-1;41316:19:0;;:46;;;;-1:-1:-1;;;;;;41340:22:0;;;;;;:11;:22;;;;;;;;41339:23;41316:46;41312:1092;;;41379:147;41419:6;41444:9;41473:37;41497:12;41473:19;:6;41484:7;41473:10;:19::i;:::-;:23;;:37::i;:::-;41379:21;:147::i;:::-;41312:1092;;;-1:-1:-1;;;;;41549:19:0;;;;;;:11;:19;;;;;;;;41548:20;:46;;;;-1:-1:-1;;;;;;41572:22:0;;;;;;:11;:22;;;;;;;;41548:46;41544:860;;;41611:145;41649:6;41674:9;41703:37;41727:12;41703:19;:6;41714:7;41703:10;:19::i;:37::-;41611:19;:145::i;41544:860::-;-1:-1:-1;;;;;41779:19:0;;;;;;:11;:19;;;;;;;;41778:20;:47;;;;-1:-1:-1;;;;;;41803:22:0;;;;;;:11;:22;;;;;;;;41802:23;41778:47;41774:630;;;41842:143;41878:6;41903:9;41932:37;41956:12;41932:19;:6;41943:7;41932:10;:19::i;:37::-;41842:17;:143::i;41774:630::-;-1:-1:-1;;;;;42007:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;42030:22:0;;;;;;:11;:22;;;;;;;;42007:45;42003:401;;;42069:147;42109:6;42134:9;42163:37;42187:12;42163:19;:6;42174:7;42163:10;:19::i;:37::-;42069:21;:147::i;42003:401::-;42249:143;42285:6;42310:9;42339:37;42363:12;42339:19;:6;42350:7;42339:10;:19::i;42249:143::-;42426:1;42416:7;:11;;;42438:13;:17;42494:4;;42468:40;;42486:6;;-1:-1:-1;;;;;42494:4:0;42500:7;42468:17;:40::i;:::-;42545:15;;42519:56;;42537:6;;-1:-1:-1;;;;;42545:15:0;42562:12;42519:17;:56::i;:::-;42598:15;;42588:7;:25;42640:21;;42624:13;:37;-1:-1:-1;;;;;42678:26:0;;-1:-1:-1;42678:26:0;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;42708:29:0;;;;;;:18;:29;;;;;;;;42678:59;42674:93;;;42752:15;36764;;36754:7;:25;36806:21;;36790:13;:37;36849:16;;36838:8;:27;36892:21;;36876:13;:37;36710:211;42752:15;40938:1837;;;;;:::o;34356:605::-;34454:7;;34490;;34407;;;;;34508:338;34532:9;:16;34528:20;;34508:338;;;34616:7;34592;:21;34600:9;34610:1;34600:12;;;;;;-1:-1:-1;;;34600:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34600:12:0;34592:21;;;;;;;;;;;;;:31;;:83;;;34668:7;34644;:21;34652:9;34662:1;34652:12;;;;;;-1:-1:-1;;;34652:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34652:12:0;34644:21;;;;;;;;;;;;;:31;34592:83;34570:146;;;34699:7;;34708;;34691:25;;;;;;;34356:605;;:::o;34570:146::-;34741:34;34753:7;:21;34761:9;34771:1;34761:12;;;;;;-1:-1:-1;;;34761:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34761:12:0;34753:21;;;;;;;;;;;;;34741:7;;:11;:34::i;:::-;34731:44;;34800:34;34812:7;:21;34820:9;34830:1;34820:12;;;;;;-1:-1:-1;;;34820:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34820:12:0;34812:21;;;;;;;;;;;;;34800:7;;:11;:34::i;:::-;34790:44;-1:-1:-1;34550:3:0;;;;:::i;:::-;;;;34508:338;;;-1:-1:-1;34882:7:0;;34870;;:20;;:11;:20::i;:::-;34860:7;:30;34856:61;;;34900:7;;34909;;34892:25;;;;;;34356:605;;:::o;34856:61::-;34936:7;;34945;;-1:-1:-1;34356:605:0;-1:-1:-1;34356:605:0:o;1974:223::-;2094:7;2129:12;2122:5;2114:28;;;;-1:-1:-1;;;2114:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2153:9:0;2165:5;2169:1;2165;:5;:::i;33202:412::-;33303:7;33325;33347;33382:12;33397:24;33413:7;33397:15;:24::i;:::-;33382:39;;33432:18;33453:30;33475:7;33453:21;:30::i;:::-;33432:51;-1:-1:-1;33494:23:0;33520:33;33432:51;33520:17;:7;33532:4;33520:11;:17::i;:33::-;33494:59;33589:4;;-1:-1:-1;33595:10:0;;-1:-1:-1;33202:412:0;;-1:-1:-1;;;33202:412:0:o;33622:554::-;33821:7;;;;33918:24;:7;33930:11;33918;:24::i;:::-;33900:42;-1:-1:-1;33953:12:0;33968:21;:4;33977:11;33968:8;:21::i;:::-;33953:36;-1:-1:-1;34000:18:0;34021:27;:10;34036:11;34021:14;:27::i;:::-;34000:48;-1:-1:-1;34059:23:0;34085:33;34000:48;34085:17;:7;34097:4;34085:11;:17::i;:33::-;34137:7;;;;-1:-1:-1;34163:4:0;;-1:-1:-1;33622:554:0;;-1:-1:-1;;;;;;;33622:554:0:o;40058:475::-;40148:16;;;40162:1;40148:16;;;;;;;;40124:21;;40148:16;;;;;;;;;;-1:-1:-1;40148:16:0;40124:40;;40193:4;40175;40180:1;40175:7;;;;;;-1:-1:-1;;;40175:7:0;;;;;;;;;-1:-1:-1;;;;;40175:23:0;;;:7;;;;;;;;;;:23;;;;40219:15;;:22;;;-1:-1:-1;;;40219:22:0;;;;:15;;;;;:20;;:22;;;;;40175:7;;40219:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40209:4;40214:1;40209:7;;;;;;-1:-1:-1;;;40209:7:0;;;;;;;;;-1:-1:-1;;;;;40209:32:0;;;:7;;;;;;;;;:32;40286:15;;40254:62;;40271:4;;40286:15;40304:11;40254:8;:62::i;:::-;40329:15;;:196;;-1:-1:-1;;;40329:196:0;;-1:-1:-1;;;;;40329:15:0;;;;:66;;:196;;40410:11;;40329:15;;40452:4;;40479;;40499:15;;40329:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40058:475;;:::o;40541:362::-;40654:15;;40622:62;;40639:4;;-1:-1:-1;;;;;40654:15:0;40672:11;40622:8;:62::i;:::-;40697:15;;-1:-1:-1;;;;;40697:15:0;:31;40736:9;40769:4;40789:11;40697:15;;40847:7;6360;6387:6;-1:-1:-1;;;;;6387:6:0;;6322:79;40847:7;40697:198;;;;;;-1:-1:-1;;;;;;40697:198:0;;;-1:-1:-1;;;;;3852:15:1;;;40697:198:0;;;3834:34:1;3884:18;;;3877:34;;;;3927:18;;;3920:34;;;;3970:18;;;3963:34;4034:15;;;4013:19;;;4006:44;40869:15:0;4066:19:1;;;4059:35;3768:19;;40697:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36199:474::-;36260:7;;:12;:47;;;;-1:-1:-1;36289:13:0;;:18;36260:47;:82;;;;-1:-1:-1;36324:13:0;;:18;36260:82;:112;;;;-1:-1:-1;36359:8:0;;:13;36260:112;36242:149;;;36199:474::o;36242:149::-;36421:7;;;36403:15;:25;36463:13;;;36439:21;:37;36506:8;;;36487:16;:27;36549:13;;;36525:21;:37;-1:-1:-1;36575:11:0;;;;36597:17;;;;36625;;;;36653:12;36199:474::o;44122:686::-;44273:15;44303:23;44341:12;44368:23;44406:12;44433:18;44465:19;44476:7;44465:10;:19::i;:::-;-1:-1:-1;;;;;44513:15:0;;;;;;:7;:15;;;;;;44258:226;;-1:-1:-1;44258:226:0;;-1:-1:-1;44258:226:0;;-1:-1:-1;44258:226:0;-1:-1:-1;44258:226:0;-1:-1:-1;44258:226:0;-1:-1:-1;44513:28:0;;44533:7;44513:19;:28::i;:::-;-1:-1:-1;;;;;44495:15:0;;;;;;:7;:15;;;;;;;;:46;;;;44570:7;:15;;;;:28;;44590:7;44570:19;:28::i;:::-;-1:-1:-1;;;;;44552:15:0;;;;;;;:7;:15;;;;;;:46;;;;44630:18;;;;;;;:39;;44653:15;44630:22;:39::i;:::-;-1:-1:-1;;;;;44609:18:0;;;;;;:7;:18;;;;;:60;44680:26;44695:10;44680:14;:26::i;:::-;44717:23;44729:4;44735;44717:11;:23::i;:::-;44773:9;-1:-1:-1;;;;;44756:44:0;44765:6;-1:-1:-1;;;;;44756:44:0;;44784:15;44756:44;;;;14333:25:1;;14321:2;14306:18;;14288:76;44756:44:0;;;;;;;;44122:686;;;;;;;;;:::o;43416:698::-;43565:15;43595:23;43633:12;43660:23;43698:12;43725:18;43757:19;43768:7;43757:10;:19::i;:::-;-1:-1:-1;;;;;43805:15:0;;;;;;:7;:15;;;;;;43550:226;;-1:-1:-1;43550:226:0;;-1:-1:-1;43550:226:0;;-1:-1:-1;43550:226:0;-1:-1:-1;43550:226:0;-1:-1:-1;43550:226:0;-1:-1:-1;43805:28:0;;43550:226;43805:19;:28::i;:::-;-1:-1:-1;;;;;43787:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;43865:18;;;;;:7;:18;;;;;:39;;43888:15;43865:22;:39::i;:::-;-1:-1:-1;;;;;43844:18:0;;;;;;:7;:18;;;;;;;;:60;;;;43936:7;:18;;;;:39;;43959:15;43936:22;:39::i;42783:625::-;42930:15;42960:23;42998:12;43025:23;43063:12;43090:18;43122:19;43133:7;43122:10;:19::i;:::-;-1:-1:-1;;;;;43170:15:0;;;;;;:7;:15;;;;;;42915:226;;-1:-1:-1;42915:226:0;;-1:-1:-1;42915:226:0;;-1:-1:-1;42915:226:0;-1:-1:-1;42915:226:0;-1:-1:-1;42915:226:0;-1:-1:-1;43170:28:0;;42915:226;43170:19;:28::i;31495:757::-;31646:15;31676:23;31714:12;31741:23;31779:12;31806:18;31838:19;31849:7;31838:10;:19::i;:::-;-1:-1:-1;;;;;31886:15:0;;;;;;:7;:15;;;;;;31631:226;;-1:-1:-1;31631:226:0;;-1:-1:-1;31631:226:0;;-1:-1:-1;31631:226:0;-1:-1:-1;31631:226:0;-1:-1:-1;31631:226:0;-1:-1:-1;31886:28:0;;31906:7;31886:19;:28::i;:::-;-1:-1:-1;;;;;31868:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31943:7;:15;;;;:28;;31963:7;31943:19;:28::i;35332:130::-;35396:7;35423:31;35448:5;35423:20;35435:7;;35423;:11;;:20;;;;:::i;35470:174::-;35567:7;35599:37;35630:5;35599:26;35611:13;;35599:7;:11;;:26;;;;:::i;34969:355::-;35032:19;35054:10;:8;:10::i;:::-;35032:32;-1:-1:-1;35075:18:0;35096:27;:10;35032:32;35096:14;:27::i;:::-;35175:4;35159:22;;;;:7;:22;;;;;;35075:48;;-1:-1:-1;35159:38:0;;35075:48;35159:26;:38::i;:::-;35150:4;35134:22;;;;:7;:22;;;;;;;;:63;;;;35212:11;:26;;;;;;35208:108;;;35294:4;35278:22;;;;:7;:22;;;;;;:38;;35305:10;35278:26;:38::i;:::-;35269:4;35253:22;;;;:7;:22;;;;;:63;35208:108;34969:355;;;:::o;32297:147::-;32375:7;;:17;;32387:4;32375:11;:17::i;:::-;32365:7;:27;32416:10;;:20;;32431:4;32416:14;:20::i;:::-;32403:10;:33;-1:-1:-1;;32297:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:2;;164:1;161;154:12;108:2;60:114;;;:::o;179:257::-;238:6;291:2;279:9;270:7;266:23;262:32;259:2;;;312:6;304;297:22;259:2;356:9;343:23;375:31;400:5;375:31;:::i;441:261::-;511:6;564:2;552:9;543:7;539:23;535:32;532:2;;;585:6;577;570:22;532:2;622:9;616:16;641:31;666:5;641:31;:::i;707:398::-;775:6;783;836:2;824:9;815:7;811:23;807:32;804:2;;;857:6;849;842:22;804:2;901:9;888:23;920:31;945:5;920:31;:::i;:::-;970:5;-1:-1:-1;1027:2:1;1012:18;;999:32;1040:33;999:32;1040:33;:::i;:::-;1092:7;1082:17;;;794:311;;;;;:::o;1110:466::-;1187:6;1195;1203;1256:2;1244:9;1235:7;1231:23;1227:32;1224:2;;;1277:6;1269;1262:22;1224:2;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;-1:-1:-1;1447:2:1;1432:18;;1419:32;1460:33;1419:32;1460:33;:::i;:::-;1214:362;;1512:7;;-1:-1:-1;;;1566:2:1;1551:18;;;;1538:32;;1214:362::o;1581:325::-;1649:6;1657;1710:2;1698:9;1689:7;1685:23;1681:32;1678:2;;;1731:6;1723;1716:22;1678:2;1775:9;1762:23;1794:31;1819:5;1794:31;:::i;:::-;1844:5;1896:2;1881:18;;;;1868:32;;-1:-1:-1;;;1668:238:1:o;1911:190::-;1967:6;2020:2;2008:9;1999:7;1995:23;1991:32;1988:2;;;2041:6;2033;2026:22;1988:2;2069:26;2085:9;2069:26;:::i;2106:190::-;2165:6;2218:2;2206:9;2197:7;2193:23;2189:32;2186:2;;;2239:6;2231;2224:22;2186:2;-1:-1:-1;2267:23:1;;2176:120;-1:-1:-1;2176:120:1:o;2301:258::-;2366:6;2374;2427:2;2415:9;2406:7;2402:23;2398:32;2395:2;;;2448:6;2440;2433:22;2395:2;2489:9;2476:23;2466:33;;2518:35;2549:2;2538:9;2534:18;2518:35;:::i;:::-;2508:45;;2385:174;;;;;:::o;2564:316::-;2652:6;2660;2668;2721:2;2709:9;2700:7;2696:23;2692:32;2689:2;;;2742:6;2734;2727:22;2689:2;2776:9;2770:16;2760:26;;2826:2;2815:9;2811:18;2805:25;2795:35;;2870:2;2859:9;2855:18;2849:25;2839:35;;2679:201;;;;;:::o;2885:395::-;2971:6;2979;2987;2995;3048:3;3036:9;3027:7;3023:23;3019:33;3016:2;;;3070:6;3062;3055:22;3016:2;-1:-1:-1;;3098:23:1;;;3168:2;3153:18;;3140:32;;-1:-1:-1;3219:2:1;3204:18;;3191:32;;3270:2;3255:18;3242:32;;-1:-1:-1;3006:274:1;-1:-1:-1;3006:274:1:o;4532:603::-;4644:4;4673:2;4702;4691:9;4684:21;4734:6;4728:13;4777:6;4772:2;4761:9;4757:18;4750:34;4802:4;4815:140;4829:6;4826:1;4823:13;4815:140;;;4924:14;;;4920:23;;4914:30;4890:17;;;4909:2;4886:26;4879:66;4844:10;;4815:140;;;4973:6;4970:1;4967:13;4964:2;;;5043:4;5038:2;5029:6;5018:9;5014:22;5010:31;5003:45;4964:2;-1:-1:-1;5119:2:1;5098:15;-1:-1:-1;;5094:29:1;5079:45;;;;5126:2;5075:54;;4653:482;-1:-1:-1;;;4653:482:1:o;9707:356::-;9909:2;9891:21;;;9928:18;;;9921:30;9987:34;9982:2;9967:18;;9960:62;10054:2;10039:18;;9881:182::o;14369:983::-;14631:4;14679:3;14668:9;14664:19;14710:6;14699:9;14692:25;14736:2;14774:6;14769:2;14758:9;14754:18;14747:34;14817:3;14812:2;14801:9;14797:18;14790:31;14841:6;14876;14870:13;14907:6;14899;14892:22;14945:3;14934:9;14930:19;14923:26;;14984:2;14976:6;14972:15;14958:29;;15005:4;15018:195;15032:6;15029:1;15026:13;15018:195;;;15097:13;;-1:-1:-1;;;;;15093:39:1;15081:52;;15188:15;;;;15153:12;;;;15129:1;15047:9;15018:195;;;-1:-1:-1;;;;;;;15269:32:1;;;;15264:2;15249:18;;15242:60;-1:-1:-1;;;15333:3:1;15318:19;15311:35;15230:3;14640:712;-1:-1:-1;;;14640:712:1:o;16266:128::-;16306:3;16337:1;16333:6;16330:1;16327:13;16324:2;;;16343:18;;:::i;:::-;-1:-1:-1;16379:9:1;;16314:80::o;16399:217::-;16439:1;16465;16455:2;;-1:-1:-1;;;16490:31:1;;16544:4;16541:1;16534:15;16572:4;16497:1;16562:15;16455:2;-1:-1:-1;16601:9:1;;16445:171::o;16621:168::-;16661:7;16727:1;16723;16719:6;16715:14;16712:1;16709:21;16704:1;16697:9;16690:17;16686:45;16683:2;;;16734:18;;:::i;:::-;-1:-1:-1;16774:9:1;;16673:116::o;16794:125::-;16834:4;16862:1;16859;16856:8;16853:2;;;16867:18;;:::i;:::-;-1:-1:-1;16904:9:1;;16843:76::o;16924:380::-;17003:1;16999:12;;;;17046;;;17067:2;;17121:4;17113:6;17109:17;17099:27;;17067:2;17174;17166:6;17163:14;17143:18;17140:38;17137:2;;;17220:10;17215:3;17211:20;17208:1;17201:31;17255:4;17252:1;17245:15;17283:4;17280:1;17273:15;17137:2;;16979:325;;;:::o;17309:135::-;17348:3;-1:-1:-1;;17369:17:1;;17366:2;;;17389:18;;:::i;:::-;-1:-1:-1;17436:1:1;17425:13;;17356:88::o;17449:127::-;17510:10;17505:3;17501:20;17498:1;17491:31;17541:4;17538:1;17531:15;17565:4;17562:1;17555:15;17581:131;-1:-1:-1;;;;;17656:31:1;;17646:42;;17636:2;;17702:1;17699;17692:12

Swarm Source

ipfs://8650ac4f4e833ed55a846115ab98cb34b8652e42ea8bc1438e80cc5568c1a207
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.