Contract 0x7a413a278c230e87858ca1cecf3036cd3d1808bf 2

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xea6e958b9e1d73f14b943e263e8b7eb8905d814d5b76356b981f5f04fff062f2Approve145466392022-01-21 2:22:583 hrs 10 mins ago0x8d3e02d4069aa79f06448b5367bc0ef04d7ec363 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000267024
0x8bec57e856fb44ae8e94faff5b552d51c4f2b7c6230053902b3b87f716439813Approve145429952022-01-20 23:20:246 hrs 13 mins ago0x2166bf39fcafa66d163f8006541b28a658b1592d IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.0001246
0xf4d6a13aa001d479347cb44fd1c7cc77cd0680b9b49784311bd0d0445b3923f5Approve145429792022-01-20 23:19:366 hrs 14 mins ago0x2166bf39fcafa66d163f8006541b28a658b1592d IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.0000728
0x1f6357e733db20fdbfea0c50faade808c89d7c0adfe3247168e17c2a823c8d84Approve145333662022-01-20 15:18:2414 hrs 15 mins ago0x1684f157e53df75606601297fccefa75b5912079 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.0000728
0xcf79b63287f96e0eb8a2aee0ab9843c5aa86d82c29cf84f06e916ed94b0845b7Approve145246652022-01-20 8:02:5121 hrs 31 mins ago0x6c2b7645aab558e0960089e23e0fa5bfa91d6007 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000267024
0xe25611ec99af08490371cfc145b1b3580faf15a2f3736ccc357986a2e847fbb3Approve145145322022-01-19 23:36:121 day 5 hrs ago0x6729f258bc9909fdad3e2f2b903ff11f0033be17 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000075712
0x94ae8815aad97bbf4dc18d58883795a1581200b7589ce980ee0d790aa9eb2cdbTransfer145120522022-01-19 21:32:081 day 8 hrs ago0xd9bb5f125310db1e00c528aae8d437f73f02c47b IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000381115
0x36622e66682e77efc78ff96f1665e1afff3318ce8e9b5f0efb730adffe7181edTransfer145120322022-01-19 21:31:081 day 8 hrs ago0xd9bb5f125310db1e00c528aae8d437f73f02c47b IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000381115
0x8b49c00dd7ad95319580bf2bf2655d8dabc11e1b59ba7f6b8530836081e1a874Transfer From145091322022-01-19 19:05:491 day 10 hrs ago0x5a322f57e91707900e0b509962e16289a2cde661 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000460416
0x0de51b22d2fb477d47df77413447b052fe9965984babcb224f10ca17dfaa36eeTransfer From145091262022-01-19 19:05:311 day 10 hrs ago0x5a322f57e91707900e0b509962e16289a2cde661 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000460416
0x3d9a3f120962ad787ccf732a4d408bf830b83482616d05d5c11a09dfe0e39518Approve144966572022-01-19 8:37:021 day 20 hrs ago0x8f14ca3e1d8dcb3bb2747d3b92f83299ba563b47 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00022252
0x2538194fd50b7791e8a387199f5b4ea83aa35edb2526cd745454e4f22b494359Transfer144880772022-01-19 1:26:102 days 4 hrs ago0xb1d11c90771bddc9a3d09fbf5f4d136adbabeeec IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000381175
0x53f650dfcb9c17a93a5759d3b471a5d9f200f7b9daf9c04109e01374b3f9731eApprove144784692022-01-18 17:25:392 days 12 hrs ago0x32499418fcfd05d3b3253e80f0bc3073300cd8b3 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00022252
0x4a10ac40eeda8a5d6ed128925062fcdb469c37cf9a39fd628326d51ccedaa298Approve144697412022-01-18 9:54:122 days 19 hrs ago0xc0dedefb502a47c9bad4ac04e03ecb6c1553f840 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.0000728
0x8253bca91adce63d8e7c4e95406d18c46c7828e1a5f1e3b592c2d11324e4b6afApprove144577412022-01-17 23:48:393 days 5 hrs ago0x9ed19c8210a31b1889ed1c3bf45e4f868d043ba4 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.0000728
0xdb01c4ab79efe353a32c2635945394e03013d362a2a19f1f52bef71f170be405Approve144539212022-01-17 20:36:493 days 8 hrs ago0x3751867c2f6a2a22b021acb73427bf91e3b30b54 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00022252
0x45ce3161ebffd0657328b4ce628724e7a96f2354f98ea5ec50e742ab4072c9d6Approve144536102022-01-17 20:21:163 days 9 hrs ago0x2fa9f1c4eedba1d05f2f36068c4bb284dbbbbb49 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00022252
0xc326ad5845f8dce9328435c5ee89b4d73dcdf31d30d3bbb33feba8c01c31f13aApprove144519272022-01-17 18:55:493 days 10 hrs ago0x0225b2101910d06316cd71c4c7a3359aebc3ea93 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00022252
0x9a22cefd0fd672690c80cd2b598bf96b3811e6f592f22b7a3f6ec03074c38a98Transfer144420072022-01-17 10:31:293 days 19 hrs ago0x88a43a9becab20cb4feabc1b76e781028d5ff0e6 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000381115
0xf1eaad5052ffdcf5629c1d26708ae0cbc910e570366a2ef70e27311f255f18e7Approve144297552022-01-17 0:13:554 days 5 hrs ago0xb1b9b4bbe8a92d535f5df2368e7fd2ecfb3a1950 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00012508
0x797d58cac75c092df0ba9c8dd1e7f2a4e0f6a69d1c3330f875eedbff5b797a55Approve144297502022-01-17 0:13:404 days 5 hrs ago0xb1b9b4bbe8a92d535f5df2368e7fd2ecfb3a1950 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00012508
0x0486d640f91197851c27a8cde2949c8283c79f7ea9fc134a14e7564f6d2ac288Transfer From144282052022-01-16 22:56:254 days 6 hrs ago0x5a322f57e91707900e0b509962e16289a2cde661 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000460416
0x6863c1dac69181981f31dfd40467bd59207bd24f27c81656a4ce6684bf0a43fcTransfer From144281982022-01-16 22:56:044 days 6 hrs ago0x5a322f57e91707900e0b509962e16289a2cde661 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.000460416
0xc04ae566e928c24dd73dff47868761bce0d5eaebebf5044e12b3fa3ac0b30342Approve144244062022-01-16 19:46:284 days 9 hrs ago0x07205b7a0389e5203bc4e4c10cb48e4716b0ce9e IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00022252
0x001016a9998d212f0f2c529e874ec70c6048bdd4c9a58cb514946a3b7cf9dd93Approve144183722022-01-16 14:42:294 days 14 hrs ago0x2850fc818a777e102f9b05d8605aa7ca53bb5eb6 IN  0x7a413a278c230e87858ca1cecf3036cd3d1808bf0 BNB0.00022252
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x6294d89cca65d8e96ca05041065ba791363c9eacdd6a890e7d592511913cc6fe137628122021-12-24 19:25:1927 days 10 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6adc2960f8d653217486993beff2dc95091a3b660.007433671192253094 BNB
0x6294d89cca65d8e96ca05041065ba791363c9eacdd6a890e7d592511913cc6fe137628122021-12-24 19:25:1927 days 10 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6c900655455ffdd937c0f3691b50a1102d1cbf000.007433671192253094 BNB
0x6294d89cca65d8e96ca05041065ba791363c9eacdd6a890e7d592511913cc6fe137628122021-12-24 19:25:1927 days 10 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf PancakeSwap: Router v20.004955780794835396 BNB
0x6294d89cca65d8e96ca05041065ba791363c9eacdd6a890e7d592511913cc6fe137628122021-12-24 19:25:1927 days 10 hrs ago PancakeSwap: Router v2 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0.019823123179341584 BNB
0x8d14296c47b691d3e87d517e99944e1d016efc3266a6ae5a4f4b5d60a50df403131369092021-12-02 17:54:0449 days 11 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6adc2960f8d653217486993beff2dc95091a3b660.007567263664634897 BNB
0x8d14296c47b691d3e87d517e99944e1d016efc3266a6ae5a4f4b5d60a50df403131369092021-12-02 17:54:0449 days 11 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6c900655455ffdd937c0f3691b50a1102d1cbf000.007567263664634897 BNB
0x8d14296c47b691d3e87d517e99944e1d016efc3266a6ae5a4f4b5d60a50df403131369092021-12-02 17:54:0449 days 11 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf PancakeSwap: Router v20.005044842443089931 BNB
0x8d14296c47b691d3e87d517e99944e1d016efc3266a6ae5a4f4b5d60a50df403131369092021-12-02 17:54:0449 days 11 hrs ago PancakeSwap: Router v2 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0.020179369772359724 BNB
0x1ea0ff021cf296ba1329c80c29019a5eb4ffda2507364f8994e6873e5bfc2c0a130730342021-11-30 9:27:4451 days 20 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6adc2960f8d653217486993beff2dc95091a3b660.031360690053078422 BNB
0x1ea0ff021cf296ba1329c80c29019a5eb4ffda2507364f8994e6873e5bfc2c0a130730342021-11-30 9:27:4451 days 20 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6c900655455ffdd937c0f3691b50a1102d1cbf000.031360690053078422 BNB
0x1ea0ff021cf296ba1329c80c29019a5eb4ffda2507364f8994e6873e5bfc2c0a130730342021-11-30 9:27:4451 days 20 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf PancakeSwap: Router v20.005046585335189113 BNB
0x1ea0ff021cf296ba1329c80c29019a5eb4ffda2507364f8994e6873e5bfc2c0a130730342021-11-30 9:27:4451 days 20 hrs ago PancakeSwap: Router v2 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0.020186341340756454 BNB
0x8574c1f7f3c0806d3b1f9908765454b88fc8837b2f9cc3ae6a678f65f3158402130565132021-11-29 18:37:0652 days 10 hrs ago PancakeSwap: Router v2 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0.019687667972549134 BNB
0x5fc2f3345a6ff3b661734769878aaf0b60c055d91ec2b2fb83c9779cd94a2256130547342021-11-29 16:58:0852 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6adc2960f8d653217486993beff2dc95091a3b660.061870449552237549 BNB
0x5fc2f3345a6ff3b661734769878aaf0b60c055d91ec2b2fb83c9779cd94a2256130547342021-11-29 16:58:0852 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6c900655455ffdd937c0f3691b50a1102d1cbf000.061870449552237549 BNB
0x5fc2f3345a6ff3b661734769878aaf0b60c055d91ec2b2fb83c9779cd94a2256130547342021-11-29 16:58:0852 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf PancakeSwap: Router v20.041246966368158365 BNB
0x5fc2f3345a6ff3b661734769878aaf0b60c055d91ec2b2fb83c9779cd94a2256130547342021-11-29 16:58:0852 days 12 hrs ago PancakeSwap: Router v2 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0.164987865472633462 BNB
0x713b9d542eaf9ceebdd711f33c9f77d216f7a0b79362d84f56b828786597a9fb130545602021-11-29 16:47:4752 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6adc2960f8d653217486993beff2dc95091a3b660.108699888383777701 BNB
0x713b9d542eaf9ceebdd711f33c9f77d216f7a0b79362d84f56b828786597a9fb130545602021-11-29 16:47:4752 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6c900655455ffdd937c0f3691b50a1102d1cbf000.108699888383777701 BNB
0x713b9d542eaf9ceebdd711f33c9f77d216f7a0b79362d84f56b828786597a9fb130545602021-11-29 16:47:4752 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf PancakeSwap: Router v20.0724665922558518 BNB
0x713b9d542eaf9ceebdd711f33c9f77d216f7a0b79362d84f56b828786597a9fb130545602021-11-29 16:47:4752 days 12 hrs ago PancakeSwap: Router v2 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0.289866369023407202 BNB
0x432658ae7f7eb327e0f90bd5314b44c5c2a9022b66f0b23fb386a4393c1d4f92130545452021-11-29 16:47:0252 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6adc2960f8d653217486993beff2dc95091a3b660.108838744676353965 BNB
0x432658ae7f7eb327e0f90bd5314b44c5c2a9022b66f0b23fb386a4393c1d4f92130545452021-11-29 16:47:0252 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0x6c900655455ffdd937c0f3691b50a1102d1cbf000.108838744676353965 BNB
0x432658ae7f7eb327e0f90bd5314b44c5c2a9022b66f0b23fb386a4393c1d4f92130545452021-11-29 16:47:0252 days 12 hrs ago 0x7a413a278c230e87858ca1cecf3036cd3d1808bf PancakeSwap: Router v20.07255916311756931 BNB
0x432658ae7f7eb327e0f90bd5314b44c5c2a9022b66f0b23fb386a4393c1d4f92130545452021-11-29 16:47:0252 days 12 hrs ago PancakeSwap: Router v2 0x7a413a278c230e87858ca1cecf3036cd3d1808bf0.290236652470277241 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KingFloki

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-11-19
*/

/*
King Floki 👑
*/

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

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

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

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

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

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    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);
    }
}

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

abstract contract IERC20Extented is IERC20 {
    function decimals() external view virtual returns (uint8);
    function name() external view virtual returns (string memory);
    function symbol() external view virtual returns (string memory);
}

contract KingFloki is Context, IERC20, IERC20Extented, Ownable {
    using SafeMath for uint256;
    string private constant _name = "KingFloki";
    string private constant _symbol = "KING";
    uint8 private constant _decimals = 9;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;

    mapping(address => uint256) private sellcooldown;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isContract;
    mapping(address => bool) private _isExchange;
    mapping(address => uint256) private previousTransactionBlock;
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 1000000000000 * 10**9; // 1 Trillion
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _priceImpact = 2; // Max Price Impact
    uint256 private _firstBlock;
    uint256 private _botBlocks;
    uint256 public _maxWalletAmount;
    uint256 private _minBuyBNB = 10000000000000000; // 0.01 BNB
    uint256 private _minSellBNB = 10000000000000000; // 0.01 BNB
    uint256 public minTokensToSwap = 1300000000 * 10**9; // 1 BNB Worth

    //  buy fees
    uint256 public _buyMarketingFee = 6;
    uint256 private _previousBuyMarketingFee = _buyMarketingFee;
    uint256 public _buyReflectionFee = 2;
    uint256 private _previousBuyReflectionFee = _buyReflectionFee;
    uint256 public _buyLiquidityFee = 3;
    uint256 private _previousBuyLiquidityFee = _buyLiquidityFee;
    
    // sell fees
    uint256 public _sellMarketingFee = 8;
    uint256 private _previousSellMarketingFee = _sellMarketingFee;
    uint256 public _sellReflectionFee = 3;
    uint256 private _previousSellReflectionFee = _sellReflectionFee;
    uint256 public _sellLiquidityFee = 4;
    uint256 private _previousSellLiquidityFee = _sellLiquidityFee;
    
    // SCALPA FEE
    uint256 public _botBuyMarketingFee = 45;
    uint256 public _botBuyReflectionFee = 45;
    uint256 public _botBuyLiquidityFee = 0;
  
    struct DynamicTax {
        uint256 buyMarketingFee;
        uint256 buyReflectionFee;
        uint256 buyLiquidityFee;
        
        uint256 sellMarketingFee;
        uint256 sellReflectionFee;
        uint256 sellLiquidityFee;
    }
    
    uint256 constant private _projectLottoPercent = 50;
    uint256 private _marketingPercent = 50;

    struct BuyBreakdown {
        uint256 tTransferAmount;
        uint256 tMarketing;
        uint256 tReflection;
        uint256 tLiquidity;
    }

    struct SellBreakdown {
        uint256 tTransferAmount;
        uint256 tMarketing;
        uint256 tReflection;
        uint256 tLiquidity;
    }
    
    struct FinalFees {
        uint256 tTransferAmount;
        uint256 tMarketing;
        uint256 tReflection;
        uint256 tLiquidity;
        uint256 rReflection;
        uint256 rTransferAmount;
        uint256 rAmount;
    }

    mapping(address => bool) private bots;
    address payable private _marketingAddress = payable(0xb90020F9379964ed2cC136dA4183189C7CA4a5E2);
    address payable constant private _projectLotto = payable(0x6adC2960f8d653217486993bEFF2Dc95091A3B66);
    address payable constant private _burnAddress = payable(0x000000000000000000000000000000000000dEaD);
    address private presaleRouter;
    address private presaleAddress;
    IUniswapV2Router02 private uniswapV2Router;
    address public uniswapV2Pair;
    uint256 private _maxTxAmount;

    bool private tradingOpen = false;
    bool private inSwap = false;
    bool private presale = true;
    bool private pairSwapped = false;
    bool public _priceImpactSellLimitEnabled = true;
    bool public _BNBsellLimitEnabled = false;
    bool public swapAndLiquifyEnabled = true;

    event EndedPresale(bool presale);
    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    event PercentsUpdated(uint256 _marketingPercent, uint256 _buybackPercent, uint256 _devPercent);
    event FeesUpdated(uint256 _buyMarketingFee, uint256 _buyLiquidityFee, uint256 _buyReflectionFee, uint256 _sellMarketingFee, uint256 _sellLiquidityFee, uint256 _sellReflectionFee);
    event PriceImpactUpdated(uint256 _priceImpact);

    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router),type(uint256).max);

        _maxTxAmount = _tTotal;
        _maxWalletAmount = _tTotal.div(1);

        _rOwned[_msgSender()] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isContract[address(this)] = true;
        _isContract[_marketingAddress] = true;
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    
    function name() override external pure returns (string memory) {
        return _name;
    }

    function symbol() override external pure returns (string memory) {
        return _symbol;
    }

    function decimals() override external pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() external pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (account == _burnAddress) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function isBot(address account) public view returns (bool) {
        return bots[account];
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

    function removeAllFee() private {
        if (_buyMarketingFee == 0 && _buyReflectionFee == 0 && _buyLiquidityFee == 0 && _sellMarketingFee == 0 && _sellReflectionFee == 0 && _sellLiquidityFee == 0) return;
        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyReflectionFee = _buyReflectionFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        
        _previousSellMarketingFee = _sellMarketingFee;
        _previousSellReflectionFee = _sellReflectionFee;
        _previousSellLiquidityFee = _sellLiquidityFee;

        _buyMarketingFee = 0;
        _buyReflectionFee = 0;
        _buyLiquidityFee = 0;

        _sellMarketingFee = 0;
        _sellReflectionFee = 0;
        _sellLiquidityFee = 0;
    }

    function setBotFee() private {
        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyReflectionFee = _buyReflectionFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;

        _buyMarketingFee = _botBuyMarketingFee;
        _buyReflectionFee = _botBuyReflectionFee;
        _buyLiquidityFee = _botBuyLiquidityFee;
    }
    
    function restoreAllFee() private {
        _buyMarketingFee = _previousBuyMarketingFee;
        _buyReflectionFee = _previousBuyReflectionFee;
        _buyLiquidityFee = _previousBuyLiquidityFee;

        _sellMarketingFee = _previousSellMarketingFee;
        _sellReflectionFee = _previousSellReflectionFee;
        _sellLiquidityFee = _previousSellLiquidityFee;
    }

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

    // calculate price based on pair reserves
    function getTokenPriceBNB(uint256 amount) external view returns(uint256) {
        IERC20Extented token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());// tokens
        IERC20Extented token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());// bnb
        (uint112 Res0, uint112 Res1,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        if(pairSwapped) {
            token0 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token1());// tokens
            token1 = IERC20Extented(IUniswapV2Pair(uniswapV2Pair).token0());// bnb
            (Res1, Res0,) = IUniswapV2Pair(uniswapV2Pair).getReserves();
        }

        uint res1 = Res1*(10**token0.decimals());
        return((amount*res1)/(Res0*(10**token0.decimals()))); // return amount of bnb to buy tokens
    }
    
    function getFee() public view returns(DynamicTax memory) {
        
        DynamicTax memory currentTax;
        
        currentTax.buyMarketingFee = _buyMarketingFee;
        currentTax.buyLiquidityFee = _buyLiquidityFee;
        currentTax.buyReflectionFee = _buyReflectionFee;

        currentTax.sellMarketingFee = _sellMarketingFee;
        currentTax.sellLiquidityFee = _sellLiquidityFee;
        currentTax.sellReflectionFee = _sellReflectionFee;
        
        return currentTax;
    }
    
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        bool takeFee = true;
        
        DynamicTax memory currentTax;

        if (from != owner() && to != owner() && !presale && from != address(this) && to != address(this) && !_isContract[from] && !_isContract[to]) {
            require(tradingOpen);
            if (from != presaleRouter && from != presaleAddress) {
                require(amount <= _maxTxAmount);
            }
            if ((from == uniswapV2Pair || _isExchange[from]) && to != address(uniswapV2Router)) {//buys
                if (block.timestamp - previousTransactionBlock[to] <= _botBlocks) {
                    bots[to] = true;
                } else {
                    previousTransactionBlock[to] = block.timestamp;
                }

                if (block.timestamp <= _firstBlock.add(_botBlocks) && from != presaleRouter && from != presaleAddress) {
                    bots[to] = true;
                }
                
                uint256 bnbAmount = this.getTokenPriceBNB(amount);
                
                require(bnbAmount >= _minBuyBNB, "you must buy at least min BNB worth of token");
                require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");
                
                currentTax = getFee();
                
            }
            
            if (!inSwap && from != uniswapV2Pair && !_isExchange[from]) { //sells, transfers
                require(!bots[from] && !bots[to]);
                
                if (block.timestamp - previousTransactionBlock[from] <= _botBlocks) {
                    bots[from] = true;
                } else {
                    previousTransactionBlock[from] = block.timestamp;
                }
                
                uint256 bnbAmount = this.getTokenPriceBNB(amount);
                require(bnbAmount >= _minSellBNB, "you must buy at least the min BNB worth of token");
                
                if (_priceImpactSellLimitEnabled) {
                    
                    require(amount <= balanceOf(uniswapV2Pair).mul(_priceImpact).div(100)); // price impact limit

                }
                
                if(to != uniswapV2Pair) {
                    require(balanceOf(to).add(amount) <= _maxWalletAmount, "wallet balance after transfer must be less than max wallet amount");
                }

                currentTax = getFee();
                
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance > minTokensToSwap) {
                    contractTokenBalance = minTokensToSwap;
                }
                if (contractTokenBalance >= minTokensToSwap) {

                    swapAndLiquify(contractTokenBalance);
                
                }
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
                    
            }
        }

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to] || presale || _isContract[from] || _isContract[to]) {
            restoreAllFee();
            takeFee = false;
        }

        else if (bots[from] || bots[to]) {
            restoreAllFee();
            setBotFee();
            takeFee = true;
        }

        if (presale) {
            require(from == owner() || from == presaleRouter || from == presaleAddress || _isContract[from] || _isContract[to] || to == owner());
        }
        
        _tokenTransfer(from, to, amount, takeFee, currentTax);
        restoreAllFee();
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        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);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
              address(this),
              tokenAmount,
              0, // slippage is unavoidable
              0, // slippage is unavoidable
              owner(),
              block.timestamp
          );
    }
  
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 autoLPamount = _sellLiquidityFee.mul(contractTokenBalance).div(_sellMarketingFee.add(_sellLiquidityFee));

        // split the contract balance into halves
        uint256 half =  autoLPamount.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        // capture the contract's current BNB balance.
        // this is so that we can capture exactly the amount of BNB that the
        // swap creates, and not make the liquidity event include any BNB that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for BNB
        swapTokensForEth(otherHalf); // <- this breaks the BNB -> HATE swap when swap+liquify is triggered

        // how much BNB did we just swap into?
        uint256 newBalance = ((address(this).balance.sub(initialBalance)).mul(half)).div(half.add(otherHalf));

        // add liquidity to pancakeswap
        if (swapAndLiquifyEnabled) {
            addLiquidity(half, newBalance);
        }
    }

    function sendETHToFee(uint256 amount) private {
        if(block.timestamp < _firstBlock + (1 days)) {
            address payable addr = payable(0x6A6ce8E45a5F116B9Cd71e06d4E2161B44e94d81); 
            addr.transfer(amount.mul(uint256(20)).div(100));
            _marketingAddress.transfer(amount.mul(uint256(40)).div(100));
            _projectLotto.transfer(amount.mul(uint256(40)).div(100));
        }
        else {
            _marketingAddress.transfer(amount.mul(_marketingPercent).div(100));
            _projectLotto.transfer(amount.mul(_projectLottoPercent).div(100));
        }
    }

    function openTrading(uint256 botBlocks) private {
        _firstBlock = block.timestamp;
        _botBlocks = botBlocks;
        tradingOpen = true;
    }

    function manualswap() external onlyOwner() {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external onlyOwner() {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, DynamicTax memory currentTax) private {
        if (!takeFee) { 
                currentTax.buyMarketingFee = 0;
                currentTax.buyLiquidityFee = 0;
                currentTax.buyReflectionFee = 0;

                currentTax.sellMarketingFee = 0;
                currentTax.sellLiquidityFee = 0;
                currentTax.sellReflectionFee = 0;
        }
        if (sender == uniswapV2Pair){
            _transferStandardBuy(sender, recipient, amount, currentTax);
        }
        else {
            _transferStandardSell(sender, recipient, amount, currentTax);
        }
    }

    function _transferStandardBuy(address sender, address recipient, uint256 tAmount, DynamicTax memory currentTax) private {
        FinalFees memory buyFees;
        buyFees = _getValuesBuy(tAmount, currentTax);
        _rOwned[sender] = _rOwned[sender].sub(buyFees.rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(buyFees.rTransferAmount);
        _takeMarketing(buyFees.tMarketing);
        _reflectFee(buyFees.rReflection, buyFees.tReflection);
        _takeLiquidity(buyFees.tLiquidity);
        emit Transfer(sender, recipient, buyFees.tTransferAmount);
    }

    function _transferStandardSell(address sender, address recipient, uint256 tAmount, DynamicTax memory currentTax) private {
        FinalFees memory sellFees;
        sellFees = _getValuesSell(tAmount, currentTax);
        _rOwned[sender] = _rOwned[sender].sub(sellFees.rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(sellFees.rTransferAmount);
        if (recipient == _burnAddress) {
            _tOwned[recipient] = _tOwned[recipient].add(sellFees.tTransferAmount);
        }
        _takeMarketing(sellFees.tMarketing);
        _reflectFee(sellFees.rReflection, sellFees.tReflection);
        _takeLiquidity(sellFees.tLiquidity);
        emit Transfer(sender, recipient, sellFees.tTransferAmount);
    }

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

    function _takeMarketing(uint256 tMarketing) private {
        uint256 currentRate = _getRate();
        uint256 rMarketing = tMarketing.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
    }
    
    receive() external payable {}

    // Sell GetValues
    function _getValuesSell(uint256 tAmount, DynamicTax memory currentTax) private view returns (FinalFees memory) {
        SellBreakdown memory sellFees = _getTValuesSell(tAmount, currentTax.sellMarketingFee, currentTax.sellReflectionFee, currentTax.sellLiquidityFee);
        FinalFees memory finalFees;
        uint256 currentRate = _getRate();
        (finalFees.rAmount, finalFees.rTransferAmount, finalFees.rReflection) = _getRValuesSell(tAmount, sellFees.tMarketing, sellFees.tReflection, sellFees.tLiquidity, currentRate);
        finalFees.tMarketing = sellFees.tMarketing;
        finalFees.tReflection = sellFees.tReflection;
        finalFees.tLiquidity = sellFees.tLiquidity;
        finalFees.tTransferAmount = sellFees.tTransferAmount;
        return (finalFees);
    }

    function _getTValuesSell(uint256 tAmount, uint256 marketingFee, uint256 reflectionFee, uint256 liquidityFee) private pure returns (SellBreakdown memory) {
        SellBreakdown memory tsellFees;
        tsellFees.tMarketing = tAmount.mul(marketingFee).div(100);
        tsellFees.tReflection = tAmount.mul(reflectionFee).div(100);
        tsellFees.tLiquidity = tAmount.mul(liquidityFee).div(100);
        tsellFees.tTransferAmount = tAmount.sub(tsellFees.tMarketing);
        tsellFees.tTransferAmount -= tsellFees.tReflection;
        tsellFees.tTransferAmount -= tsellFees.tLiquidity;
        return (tsellFees);
    }

    function _getRValuesSell(uint256 tAmount, uint256 tMarketing, uint256 tReflection, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rReflection = tReflection.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rMarketing).sub(rReflection);
        rTransferAmount -= rLiquidity;
        return (rAmount, rTransferAmount, rReflection);
    }

    // Buy GetValues
    function _getValuesBuy(uint256 tAmount, DynamicTax memory currentTax) private view returns (FinalFees memory) {
        BuyBreakdown memory buyFees = _getTValuesBuy(tAmount, currentTax.buyMarketingFee, currentTax.buyReflectionFee, currentTax.buyLiquidityFee);
        FinalFees memory finalFees;
        uint256 currentRate = _getRate();
        (finalFees.rAmount, finalFees.rTransferAmount, finalFees.rReflection) = _getRValuesBuy(tAmount, buyFees.tMarketing, buyFees.tReflection, buyFees.tLiquidity, currentRate);
        finalFees.tMarketing = buyFees.tMarketing;
        finalFees.tReflection = buyFees.tReflection;
        finalFees.tLiquidity = buyFees.tLiquidity;
        finalFees.tTransferAmount = buyFees.tTransferAmount;
        return (finalFees);
    }

    function _getTValuesBuy(uint256 tAmount, uint256 marketingFee, uint256 reflectionFee, uint256 liquidityFee) private pure returns (BuyBreakdown memory) {
        BuyBreakdown memory tbuyFees;
        tbuyFees.tMarketing = tAmount.mul(marketingFee).div(100);
        tbuyFees.tReflection = tAmount.mul(reflectionFee).div(100);
        tbuyFees.tLiquidity = tAmount.mul(liquidityFee).div(100);
        tbuyFees.tTransferAmount = tAmount.sub(tbuyFees.tMarketing);
        tbuyFees.tTransferAmount -= tbuyFees.tReflection;
        tbuyFees.tTransferAmount -= tbuyFees.tLiquidity;
        return (tbuyFees);
    }

    function _getRValuesBuy(uint256 tAmount, uint256 tMarketing, uint256 tReflection, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rMarketing = tMarketing.mul(currentRate);
        uint256 rReflection = tReflection.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rMarketing).sub(rReflection);
        rTransferAmount -= rLiquidity;
        return (rAmount, rTransferAmount, rReflection);
    }

    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;
        if (_rOwned[_burnAddress] > rSupply || _tOwned[_burnAddress] > tSupply) return (_rTotal, _tTotal);
        rSupply = rSupply.sub(_rOwned[_burnAddress]);
        tSupply = tSupply.sub(_tOwned[_burnAddress]);
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

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

    function includeInFee(address account) external onlyOwner() {
        _isExcludedFromFee[account] = false;
    }
    
    function includeInContract(address account) external onlyOwner() {
        _isContract[account] = true;
    }
    
    function excludeFromContract(address account) external onlyOwner() {
        _isContract[account] = false;
    }
    
    function includeInExchange(address account) external onlyOwner() {
        _isExchange[account] = true;
    }
    
    function excludeFromExchange(address account) external onlyOwner() {
        _isExchange[account] = false;
    }    
    
    function removeBot(address account) external onlyOwner() {
        bots[account] = false;
    }

    function addBot(address account) external onlyOwner() {
        bots[account] = true;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount > _tTotal.div(10000), "Amount must be greater than 0.01% of supply");
        require(maxTxAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxTxAmount = maxTxAmount;
        emit MaxTxAmountUpdated(_maxTxAmount);
    }

    function setMaxWalletAmount(uint256 maxWalletAmount) external onlyOwner() {
        require(maxWalletAmount > 0, "Amount must be greater than 0");
        require(maxWalletAmount <= _tTotal, "Amount must be less than or equal to totalSupply");
        _maxWalletAmount = maxWalletAmount;
    }

    function setTaxes(uint256 buyMarketingFee, uint256 buyReflectionFee, uint256 buyLiquidityFee, uint256 sellMarketingFee, uint256 sellReflectionFee, uint256 sellLiquidityFee) external onlyOwner() {
        uint256 buyTax = buyMarketingFee.add(buyLiquidityFee).add(buyReflectionFee);
        uint256 sellTax = sellMarketingFee.add(sellLiquidityFee).add(sellReflectionFee);
        require(buyTax < 48, "Sum of sell fees must be less than 48");
        require(sellTax < 48, "Sum of buy fees must be less than 48");
        _buyMarketingFee = buyMarketingFee;
        _buyReflectionFee = buyReflectionFee;
        _buyLiquidityFee = buyLiquidityFee;
        _sellMarketingFee = sellMarketingFee;
        _sellReflectionFee = sellReflectionFee;
        _sellLiquidityFee = sellLiquidityFee;

        _previousBuyMarketingFee = _buyMarketingFee;
        _previousBuyReflectionFee = _buyReflectionFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        _previousSellMarketingFee = _sellMarketingFee;
        _previousSellReflectionFee = _sellReflectionFee;
        _previousSellLiquidityFee = _sellLiquidityFee;

        emit FeesUpdated(_buyMarketingFee, _buyLiquidityFee, _buyReflectionFee, _sellMarketingFee, _sellLiquidityFee, _sellReflectionFee);
    }

    function setPriceImpact(uint256 priceImpact) external onlyOwner() {
        require(priceImpact <= 100, "max price impact must be less than or equal to 100");
        require(priceImpact > 0, "cant prevent sells, choose value greater than 0");
        _priceImpact = priceImpact;
        emit PriceImpactUpdated(_priceImpact);
    }

    function setPresaleRouterAndAddress(address router, address wallet) external onlyOwner() {
        presaleRouter = router;
        presaleAddress = wallet;
        excludeFromFee(presaleRouter);
        excludeFromFee(presaleAddress);
    }

    function endPresale(uint256 botBlocks) external onlyOwner() {
        require(presale == true, "presale already ended");
        presale = false;
        openTrading(botBlocks);
        emit EndedPresale(presale);
    }

    function updatePairSwapped(bool swapped) external onlyOwner() {
        pairSwapped = swapped;
    }
    
    function updateMinBuySellBNB(uint256 minBuyBNB, uint256 minSellBNB) external onlyOwner() {
        require(minBuyBNB <= 100000000000000000, "cant make the limit higher than 0.1 BNB");
        require(minSellBNB <= 100000000000000000, "cant make the limit higher than 0.1 BNB");
        _minBuyBNB = minBuyBNB;
        _minSellBNB = minSellBNB;
    }
    
    function updateBotFees(uint256 buyMarketingFee, uint256 buyReflectionFee, uint256 buyLiquidityFee) external onlyOwner() {
        require(buyMarketingFee.add(buyReflectionFee).add(buyLiquidityFee) < 100, "bot fees must be less than 100");
        
        _botBuyLiquidityFee = buyLiquidityFee;
        _botBuyReflectionFee = buyReflectionFee;
        _botBuyMarketingFee = buyMarketingFee;
    }
    
    function updateBotBlocks(uint256 botBlocks) external onlyOwner() {
        require(botBlocks < 10, "must be less than 10");
        _botBlocks = botBlocks;
    }
    
    function updateMarketingAddress(address payable marketingAddress) external onlyOwner() {
        _marketingAddress = marketingAddress;
    }
    
    function enablePriceImpactSellLimit() external onlyOwner() {
        require(_priceImpactSellLimitEnabled == false, "already enabled");
        _priceImpactSellLimitEnabled = true;
    }
    
    function disablePriceImpactSellLimit() external onlyOwner() {
        require(_priceImpactSellLimitEnabled == true, "already disabled");
        _priceImpactSellLimitEnabled = false;
    }
    
    function disableSwapAndLiquify() external onlyOwner() {
        require(swapAndLiquifyEnabled == true, 'already disabled');
        swapAndLiquifyEnabled = false;
    }
    
    function enableSwapAndLiquify() external onlyOwner() {
        require(swapAndLiquifyEnabled == false, 'already enabled');
        swapAndLiquifyEnabled = true;
    }
    function updateMinTokensToSwap(uint256 _minTokenToSwap) external onlyOwner() {
        minTokensToSwap = _minTokenToSwap;
    }
}

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":"bool","name":"presale","type":"bool"}],"name":"EndedPresale","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buyReflectionFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_sellReflectionFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"_marketingPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_buybackPercent","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devPercent","type":"uint256"}],"name":"PercentsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_priceImpact","type":"uint256"}],"name":"PriceImpactUpdated","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":"_BNBsellLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_botBuyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_botBuyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_botBuyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_priceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_priceImpactSellLimitEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disablePriceImpactSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enablePriceImpactSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"components":[{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"internalType":"struct KingFloki.DynamicTax","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenPriceBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"wallet","type":"address"}],"name":"setPresaleRouterAndAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpact","type":"uint256"}],"name":"setPriceImpact","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellReflectionFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"name":"setTaxes","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":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"botBlocks","type":"uint256"}],"name":"updateBotBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyReflectionFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"}],"name":"updateBotFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minBuyBNB","type":"uint256"},{"internalType":"uint256","name":"minSellBNB","type":"uint256"}],"name":"updateMinBuySellBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokenToSwap","type":"uint256"}],"name":"updateMinTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapped","type":"bool"}],"name":"updatePairSwapped","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526200001b683635c9adc5dea0000060001962000706565b6200002990600019620006e2565b600a556002600c819055662386f26fc10000601081905560115567120a871cc002000060125560066013819055601455601581905560165560036017819055601881905560086019819055601a55601b819055601c556004601d819055601e55602d601f81905560205560006021556032602255602480546001600160a01b03191673b90020f9379964ed2cc136da4183189c7ca4a5e2179055602a8054660100010001000066ffffffffffffff19909116179055348015620000eb57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350602780546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e9081179091556200016c3082683635c9adc5dea0000062000471565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001a657600080fd5b505afa158015620001bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e191906200062a565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200022a57600080fd5b505afa1580156200023f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026591906200062a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002ae57600080fd5b505af1158015620002c3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e991906200062a565b602880546001600160a01b0319166001600160a01b0392831690811790915560275460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b390604401602060405180830381600087803b1580156200034c57600080fd5b505af115801562000361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000387919062000653565b50683635c9adc5dea00000602981905550620003bc6001683635c9adc5dea000006200059d60201b62001e031790919060201c565b600f55600a543360008181526002602090815260408083209490945581546001600160a01b039081168352600682528483208054600160ff1991821681179092553085528685208054821683179055600784528685208054821683179055602454909216845285842080549092161790559251683635c9adc5dea000008152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000733565b6001600160a01b038316620004d95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200053c5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620004d0565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000620005e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620005ee60201b60201c565b9392505050565b60008183620006125760405162461bcd60e51b8152600401620004d0919062000675565b506000620006218486620006cb565b95945050505050565b6000602082840312156200063c578081fd5b81516001600160a01b0381168114620005e7578182fd5b60006020828403121562000665578081fd5b81518015158114620005e7578182fd5b6000602080835283518082850152825b81811015620006a35785810183015185820160400152820162000685565b81811115620006b55783604083870101525b50601f01601f1916929092016040019392505050565b600082620006dd57620006dd6200071d565b500490565b6000828210156200070157634e487b7160e01b81526011600452602481fd5b500390565b6000826200071857620007186200071d565b500690565b634e487b7160e01b600052601260045260246000fd5b613cba80620007436000396000f3fe60806040526004361061036f5760003560e01c80637a6d4398116101c6578063c63d3671116100f7578063dd62ed3e11610095578063ec28438a1161006f578063ec28438a14610a2b578063f0b006e014610a4b578063fc7b6ff514610a61578063ffecf51614610a7757600080fd5b8063dd62ed3e146109a5578063e4924f18146109eb578063ea2f0b3714610a0b57600080fd5b8063cdda3e54116100d1578063cdda3e54146108f9578063ced72f871461090e578063d44fbfcd1461096f578063dc44b6a01461098f57600080fd5b8063c63d3671146108ab578063c690c00c146108c0578063c8607952146108e357600080fd5b8063a25b77fa11610164578063bfa91ba11161013e578063bfa91ba114610840578063c2f77e4114610860578063c3c8cd8014610880578063c5d241891461089557600080fd5b8063a25b77fa146107f4578063a9059cbb1461080a578063bfa31ff91461082a57600080fd5b80638da5cb5b116101a05780638da5cb5b146107735780639211b63a1461079157806395d89b41146107a75780639edf96cb146107d457600080fd5b80637a6d43981461071d57806388790a681461073d578063899c94691461075357600080fd5b8063401aa5c0116102a05780635fecd9261161023e5780636fc3eaec116102185780636fc3eaec146106bd57806370a08231146106d2578063715018a6146106f25780637598f8bc1461070757600080fd5b80635fecd926146106725780636ac56ced146106925780636c0a24eb146106a757600080fd5b806349bd5a5e1161027a57806349bd5a5e146105e25780634a74bb021461061a5780634b06ea531461063b5780635e3d30071461065057600080fd5b8063401aa5c01461058c578063437823ec146105a2578063476e185b146105c257600080fd5b806327a14fc21161030d578063313ce567116102e7578063313ce567146104f757806334596c16146105135780633bbac579146105335780633f5e0c051461056c57600080fd5b806327a14fc2146104975780632b929aa8146104b75780632e87fb6c146104d757600080fd5b8063095ea7b311610349578063095ea7b31461040157806318160ddd146104315780632369bf831461045757806323b872dd1461047757600080fd5b806304d4c9901461037b57806306fdde031461039d57806307f64dac146103e157600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b61039636600461387c565b610a97565b005b3480156103a957600080fd5b506040805180820190915260098152684b696e67466c6f6b6960b81b60208201525b6040516103d891906138df565b60405180910390f35b3480156103ed57600080fd5b5061039b6103fc366004613824565b610c4a565b34801561040d57600080fd5b5061042161041c36600461373a565b610cdc565b60405190151581526020016103d8565b34801561043d57600080fd5b50683635c9adc5dea000005b6040519081526020016103d8565b34801561046357600080fd5b5061039b61047236600461368a565b610cf3565b34801561048357600080fd5b506104216104923660046136fa565b610d3f565b3480156104a357600080fd5b5061039b6104b23660046137d3565b610da8565b3480156104c357600080fd5b5061039b6104d23660046137d3565b610e50565b3480156104e357600080fd5b5061039b6104f236600461368a565b610f8a565b34801561050357600080fd5b50604051600981526020016103d8565b34801561051f57600080fd5b5061039b61052e366004613765565b610fd5565b34801561053f57600080fd5b5061042161054e36600461368a565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561057857600080fd5b5061039b610587366004613803565b61101d565b34801561059857600080fd5b5061044960155481565b3480156105ae57600080fd5b5061039b6105bd36600461368a565b6110a2565b3480156105ce57600080fd5b5061039b6105dd3660046137d3565b6110f0565b3480156105ee57600080fd5b50602854610602906001600160a01b031681565b6040516001600160a01b0390911681526020016103d8565b34801561062657600080fd5b50602a5461042190600160301b900460ff1681565b34801561064757600080fd5b5061039b61111f565b34801561065c57600080fd5b50602a5461042190640100000000900460ff1681565b34801561067e57600080fd5b5061039b61068d36600461368a565b6111ac565b34801561069e57600080fd5b5061039b6111f7565b3480156106b357600080fd5b50610449600f5481565b3480156106c957600080fd5b5061039b611285565b3480156106de57600080fd5b506104496106ed36600461368a565b6112bc565b3480156106fe57600080fd5b5061039b61130f565b34801561071357600080fd5b50610449601b5481565b34801561072957600080fd5b5061039b6107383660046136c2565b611383565b34801561074957600080fd5b50610449601d5481565b34801561075f57600080fd5b5061039b61076e36600461368a565b6113fd565b34801561077f57600080fd5b506000546001600160a01b0316610602565b34801561079d57600080fd5b50610449601f5481565b3480156107b357600080fd5b506040805180820190915260048152634b494e4760e01b60208201526103cb565b3480156107e057600080fd5b5061039b6107ef3660046137d3565b61144b565b34801561080057600080fd5b5061044960215481565b34801561081657600080fd5b5061042161082536600461373a565b611520565b34801561083657600080fd5b50610449600c5481565b34801561084c57600080fd5b5061039b61085b36600461368a565b61152d565b34801561086c57600080fd5b5061044961087b3660046137d3565b611578565b34801561088c57600080fd5b5061039b611a0b565b3480156108a157600080fd5b5061044960135481565b3480156108b757600080fd5b5061039b611a4b565b3480156108cc57600080fd5b50602a546104219065010000000000900460ff1681565b3480156108ef57600080fd5b5061044960195481565b34801561090557600080fd5b5061039b611ad9565b34801561091a57600080fd5b50610923611b65565b6040516103d89190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b34801561097b57600080fd5b5061039b61098a36600461368a565b611ba7565b34801561099b57600080fd5b5061044960175481565b3480156109b157600080fd5b506104496109c03660046136c2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109f757600080fd5b5061039b610a063660046137d3565b611bf5565b348015610a1757600080fd5b5061039b610a2636600461368a565b611c6b565b348015610a3757600080fd5b5061039b610a463660046137d3565b611cb6565b348015610a5757600080fd5b5061044960125481565b348015610a6d57600080fd5b5061044960205481565b348015610a8357600080fd5b5061039b610a9236600461368a565b611db5565b6000546001600160a01b03163314610aca5760405162461bcd60e51b8152600401610ac1906139e0565b60405180910390fd5b6000610ae086610ada8988611e4c565b90611e4c565b90506000610af284610ada8786611e4c565b905060308210610b525760405162461bcd60e51b815260206004820152602560248201527f53756d206f662073656c6c2066656573206d757374206265206c6573732074686044820152640c2dc4068760db1b6064820152608401610ac1565b60308110610bae5760405162461bcd60e51b8152602060048201526024808201527f53756d206f66206275792066656573206d757374206265206c657373207468616044820152630dc4068760e31b6064820152608401610ac1565b6013889055601587905560178690556019859055601b849055601d839055601488905560168790556018869055601a859055601c849055601e8390556040805189815260208101889052908101889052606081018690526080810184905260a081018590527f2e494fbb5d1bda2269c90d7124ba22ca99044b61d2a920ece35a1a1726ff0c379060c00160405180910390a15050505050505050565b6000546001600160a01b03163314610c745760405162461bcd60e51b8152600401610ac1906139e0565b6064610c8482610ada8686611e4c565b10610cd15760405162461bcd60e51b815260206004820152601e60248201527f626f742066656573206d757374206265206c657373207468616e2031303000006044820152606401610ac1565b602155602055601f55565b6000610ce9338484611eab565b5060015b92915050565b6000546001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610ac1906139e0565b602480546001600160a01b0319166001600160a01b0392909216919091179055565b6000610d4c848484611fcf565b610d9e8433610d9985604051806060016040528060288152602001613c5d602891396001600160a01b038a1660009081526005602090815260408083203384529091529020549190612978565b611eab565b5060019392505050565b6000546001600160a01b03163314610dd25760405162461bcd60e51b8152600401610ac1906139e0565b60008111610e225760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ac1565b683635c9adc5dea00000811115610e4b5760405162461bcd60e51b8152600401610ac190613a15565b600f55565b6000546001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610ac1906139e0565b6064811115610ee65760405162461bcd60e51b815260206004820152603260248201527f6d617820707269636520696d70616374206d757374206265206c6573732074686044820152710616e206f7220657175616c20746f203130360741b6064820152608401610ac1565b60008111610f4e5760405162461bcd60e51b815260206004820152602f60248201527f63616e742070726576656e742073656c6c732c2063686f6f73652076616c756560448201526e02067726561746572207468616e203608c1b6064820152608401610ac1565b600c8190556040518181527f585981c0db15e25002a67c38e62f983f189bb219fae23eb213566640fbae5e3c906020015b60405180910390a150565b6000546001600160a01b03163314610fb45760405162461bcd60e51b8152600401610ac1906139e0565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610ac1906139e0565b602a805491151563010000000263ff00000019909216919091179055565b6000546001600160a01b031633146110475760405162461bcd60e51b8152600401610ac1906139e0565b67016345785d8a000082111561106f5760405162461bcd60e51b8152600401610ac190613932565b67016345785d8a00008111156110975760405162461bcd60e51b8152600401610ac190613932565b601091909155601155565b6000546001600160a01b031633146110cc5760405162461bcd60e51b8152600401610ac1906139e0565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000546001600160a01b0316331461111a5760405162461bcd60e51b8152600401610ac1906139e0565b601255565b6000546001600160a01b031633146111495760405162461bcd60e51b8152600401610ac1906139e0565b602a54600160301b900460ff16151560011461119a5760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610ac1565b602a805466ff00000000000019169055565b6000546001600160a01b031633146111d65760405162461bcd60e51b8152600401610ac1906139e0565b6001600160a01b03166000908152602360205260409020805460ff19169055565b6000546001600160a01b031633146112215760405162461bcd60e51b8152600401610ac1906139e0565b602a54640100000000900460ff161561126e5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610ac1565b602a805464ff000000001916640100000000179055565b6000546001600160a01b031633146112af5760405162461bcd60e51b8152600401610ac1906139e0565b476112b9816129b2565b50565b60006001600160a01b03821661dead14156112ed57506001600160a01b031660009081526003602052604090205490565b6001600160a01b038216600090815260026020526040902054610ced90612b59565b6000546001600160a01b031633146113395760405162461bcd60e51b8152600401610ac1906139e0565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146113ad5760405162461bcd60e51b8152600401610ac1906139e0565b602580546001600160a01b038085166001600160a01b0319928316811790935560268054918516919092161790556113e4906110a2565b6026546113f9906001600160a01b03166110a2565b5050565b6000546001600160a01b031633146114275760405162461bcd60e51b8152600401610ac1906139e0565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b031633146114755760405162461bcd60e51b8152600401610ac1906139e0565b602a5462010000900460ff1615156001146114ca5760405162461bcd60e51b81526020600482015260156024820152741c1c995cd85b1948185b1c9958591e48195b991959605a1b6044820152606401610ac1565b602a805442600d55600e83905562ff00ff19166001179055602a546040516201000090910460ff16151581527fbad30b8287730cfd8b6df18f878abbd745dc20365bfec848056cad8e6c17b91b90602001610f7f565b6000610ce9338484611fcf565b6000546001600160a01b031633146115575760405162461bcd60e51b8152600401610ac1906139e0565b6001600160a01b03166000908152600860205260409020805460ff19169055565b600080602860009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156115c957600080fd5b505afa1580156115dd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160191906136a6565b90506000602860009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561165357600080fd5b505afa158015611667573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168b91906136a6565b9050600080602860009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156116de57600080fd5b505afa1580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117169190613785565b50602a5491935091506301000000900460ff16156118ca57602860009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561177c57600080fd5b505afa158015611790573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b491906136a6565b9350602860009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561180457600080fd5b505afa158015611818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183c91906136a6565b9250602860009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561188c57600080fd5b505afa1580156118a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118c49190613785565b50925090505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561190557600080fd5b505afa158015611919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193d91906138be565b61194890600a613b50565b61195b906001600160701b038416613bfb565b9050846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561199657600080fd5b505afa1580156119aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ce91906138be565b6119d990600a613b50565b6119ec906001600160701b038516613bfb565b6119f68289613bfb565b611a009190613aed565b979650505050505050565b6000546001600160a01b03163314611a355760405162461bcd60e51b8152600401610ac1906139e0565b6000611a40306112bc565b90506112b981612bd6565b6000546001600160a01b03163314611a755760405162461bcd60e51b8152600401610ac1906139e0565b602a54600160301b900460ff1615611ac15760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e48195b98589b1959608a1b6044820152606401610ac1565b602a805466ff0000000000001916600160301b179055565b6000546001600160a01b03163314611b035760405162461bcd60e51b8152600401610ac1906139e0565b602a54640100000000900460ff161515600114611b555760405162461bcd60e51b815260206004820152601060248201526f185b1c9958591e48191a5cd8589b195960821b6044820152606401610ac1565b602a805464ff0000000019169055565b611b6d6135fb565b611b756135fb565b6013548152601754604082015260155460208201526019546060820152601d5460a0820152601b546080820152919050565b6000546001600160a01b03163314611bd15760405162461bcd60e51b8152600401610ac1906139e0565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000546001600160a01b03163314611c1f5760405162461bcd60e51b8152600401610ac1906139e0565b600a8110611c665760405162461bcd60e51b815260206004820152601460248201527306d757374206265206c657373207468616e2031360641b6044820152606401610ac1565b600e55565b6000546001600160a01b03163314611c955760405162461bcd60e51b8152600401610ac1906139e0565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b03163314611ce05760405162461bcd60e51b8152600401610ac1906139e0565b611cf5683635c9adc5dea00000612710611e03565b8111611d575760405162461bcd60e51b815260206004820152602b60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e303160448201526a25206f6620737570706c7960a81b6064820152608401610ac1565b683635c9adc5dea00000811115611d805760405162461bcd60e51b8152600401610ac190613a15565b60298190556040518181527f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf90602001610f7f565b6000546001600160a01b03163314611ddf5760405162461bcd60e51b8152600401610ac1906139e0565b6001600160a01b03166000908152602360205260409020805460ff19166001179055565b6000611e4583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612d75565b9392505050565b600080611e598385613ad5565b905083811015611e455760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610ac1565b6001600160a01b038316611f0d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac1565b6001600160a01b038216611f6e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ac1565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166120335760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ac1565b6001600160a01b0382166120955760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ac1565b600081116120f75760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610ac1565b60016121016135fb565b6000546001600160a01b0386811691161480159061212d57506000546001600160a01b03858116911614155b80156121425750602a5462010000900460ff16155b801561215757506001600160a01b0385163014155b801561216c57506001600160a01b0384163014155b801561219157506001600160a01b03851660009081526007602052604090205460ff16155b80156121b657506001600160a01b03841660009081526007602052604090205460ff16155b1561271757602a5460ff166121ca57600080fd5b6025546001600160a01b038681169116148015906121f657506026546001600160a01b03868116911614155b1561220a5760295483111561220a57600080fd5b6028546001600160a01b038681169116148061223e57506001600160a01b03851660009081526008602052604090205460ff165b801561225857506027546001600160a01b03858116911614155b1561245057600e546001600160a01b0385166000908152600960205260409020546122839042613c1a565b116122b0576001600160a01b0384166000908152602360205260409020805460ff191660011790556122cc565b6001600160a01b03841660009081526009602052604090204290555b600e54600d546122db91611e4c565b42111580156122f857506025546001600160a01b03868116911614155b801561231257506026546001600160a01b03868116911614155b1561233b576001600160a01b0384166000908152602360205260409020805460ff191660011790555b60405163c2f77e4160e01b815260048101849052600090309063c2f77e419060240160206040518083038186803b15801561237557600080fd5b505afa158015612389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ad91906137eb565b90506010548110156124165760405162461bcd60e51b815260206004820152602c60248201527f796f75206d75737420627579206174206c65617374206d696e20424e4220776f60448201526b393a341037b3103a37b5b2b760a11b6064820152608401610ac1565b600f5461242685610ada886112bc565b11156124445760405162461bcd60e51b8152600401610ac190613979565b61244c611b65565b9150505b602a54610100900460ff1615801561247657506028546001600160a01b03868116911614155b801561249b57506001600160a01b03851660009081526008602052604090205460ff16155b15612717576001600160a01b03851660009081526023602052604090205460ff161580156124e257506001600160a01b03841660009081526023602052604090205460ff16155b6124eb57600080fd5b600e546001600160a01b0386166000908152600960205260409020546125119042613c1a565b1161253e576001600160a01b0385166000908152602360205260409020805460ff1916600117905561255a565b6001600160a01b03851660009081526009602052604090204290555b60405163c2f77e4160e01b815260048101849052600090309063c2f77e419060240160206040518083038186803b15801561259457600080fd5b505afa1580156125a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cc91906137eb565b90506011548110156126395760405162461bcd60e51b815260206004820152603060248201527f796f75206d75737420627579206174206c6561737420746865206d696e20424e60448201526f21103bb7b93a341037b3103a37b5b2b760811b6064820152608401610ac1565b602a54640100000000900460ff161561268857600c5460285461267c916064916126769190612670906001600160a01b03166112bc565b90612da3565b90611e03565b84111561268857600080fd5b6028546001600160a01b038681169116146126cb57600f546126ad85610ada886112bc565b11156126cb5760405162461bcd60e51b8152600401610ac190613979565b6126d3611b65565b915060006126e0306112bc565b90506012548111156126f157506012545b60125481106127035761270381612e22565b47801561271357612713476129b2565b5050505b6001600160a01b03851660009081526006602052604090205460ff168061275657506001600160a01b03841660009081526006602052604090205460ff165b806127695750602a5462010000900460ff165b8061278c57506001600160a01b03851660009081526007602052604090205460ff165b806127af57506001600160a01b03841660009081526007602052604090205460ff165b156127e6576127dd601454601355601654601555601854601755601a54601955601c54601b55601e54601d55565b60009150612882565b6001600160a01b03851660009081526023602052604090205460ff168061282557506001600160a01b03841660009081526023602052604090205460ff165b1561288257612853601454601355601654601555601854601755601a54601955601c54601b55601e54601d55565b61287d601380546014556015805460165560178054601855601f5490925560205490556021549055565b600191505b602a5462010000900460ff161561293b576000546001600160a01b03868116911614806128bc57506025546001600160a01b038681169116145b806128d457506026546001600160a01b038681169116145b806128f757506001600160a01b03851660009081526007602052604090205460ff165b8061291a57506001600160a01b03841660009081526007602052604090205460ff165b8061293257506000546001600160a01b038581169116145b61293b57600080fd5b6129488585858585612eb9565b612971601454601355601654601555601854601755601a54601955601c54601b55601e54601d55565b5050505050565b6000818484111561299c5760405162461bcd60e51b8152600401610ac191906138df565b5060006129a98486613c1a565b95945050505050565b600d546129c29062015180613ad5565b421015612ab857736a6ce8e45a5f116b9cd71e06d4e2161b44e94d81806108fc6129f26064612676866014612da3565b6040518115909202916000818181858888f19350505050158015612a1a573d6000803e3d6000fd5b506024546001600160a01b03166108fc612a3a6064612676866028612da3565b6040518115909202916000818181858888f19350505050158015612a62573d6000803e3d6000fd5b50736adc2960f8d653217486993beff2dc95091a3b666108fc612a8b6064612676866028612da3565b6040518115909202916000818181858888f19350505050158015612ab3573d6000803e3d6000fd5b505050565b6024546022546001600160a01b03909116906108fc90612ae090606490612676908690612da3565b6040518115909202916000818181858888f19350505050158015612b08573d6000803e3d6000fd5b50736adc2960f8d653217486993beff2dc95091a3b666108fc612b316064612676856032612da3565b6040518115909202916000818181858888f193505050501580156113f9573d6000803e3d6000fd5b6000600a54821115612bc05760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610ac1565b6000612bca612f18565b9050611e458382611e03565b602a805461ff0019166101001790556040805160028082526060820183526000926020830190803683370190505090503081600081518110612c2857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c7c57600080fd5b505afa158015612c90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb491906136a6565b81600181518110612cd557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152602754612cfb9130911684611eab565b60275460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d34908590600090869030904290600401613a65565b600060405180830381600087803b158015612d4e57600080fd5b505af1158015612d62573d6000803e3d6000fd5b5050602a805461ff001916905550505050565b60008183612d965760405162461bcd60e51b8152600401610ac191906138df565b5060006129a98486613aed565b600082612db257506000610ced565b6000612dbe8385613bfb565b905082612dcb8583613aed565b14611e455760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ac1565b602a805461ff001916610100179055601d54601954600091612e5491612e4791611e4c565b601d546126769085612da3565b90506000612e63826002611e03565b90506000612e718483612f3b565b905047612e7d82612bd6565b6000612e9a612e8c8585611e4c565b612676866126704787612f3b565b602a54909150600160301b900460ff1615612d6257612d628482612f7d565b81612ee557600080825260408201819052602082018190526060820181905260a0820181905260808201525b6028546001600160a01b0386811691161415612f0c57612f078585858461305a565b612971565b6129718585858461316f565b6000806000612f25613252565b9092509050612f348282611e03565b9250505090565b6000611e4583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612978565b602754612f959030906001600160a01b031684611eab565b6027546001600160a01b031663f305d719823085600080612fbe6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b15801561302157600080fd5b505af1158015613035573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612971919061384f565b613062613631565b61306c8383613398565b60c08101516001600160a01b0387166000908152600260205260409020549192506130979190612f3b565b6001600160a01b038087166000908152600260205260408082209390935560a0840151918716815291909120546130cd91611e4c565b6001600160a01b0385166000908152600260209081526040909120919091558101516130f890613422565b61310a8160800151826040015161346c565b6131178160600151613422565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161316091815260200190565b60405180910390a35050505050565b613177613631565b6131818383613490565b60c08101516001600160a01b0387166000908152600260205260409020549192506131ac9190612f3b565b6001600160a01b038087166000908152600260205260408082209390935560a0840151918716815291909120546131e291611e4c565b6001600160a01b03851660008181526002602052604090209190915561dead14156132455780516001600160a01b03851660009081526003602052604090205461322b91611e4c565b6001600160a01b0385166000908152600360205260409020555b6130f88160200151613422565b600a5461dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5490918291683635c9adc5dea00000908210806132cb575061dead60005260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c5481105b156132e6575050600a5492683635c9adc5dea0000092509050565b61dead60005260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc5461331e908390612f3b565b61dead60005260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c54909250613359908290612f3b565b600a5490915061337290683635c9adc5dea00000611e03565b82101561338f575050600a5492683635c9adc5dea0000092509050565b90939092509050565b6133a0613631565b60006133ba848460000151856020015186604001516134ae565b90506133c4613631565b60006133ce612f18565b90506133e98684602001518560400151866060015185613589565b608085015260a084015260c083015250602082810151908201526040808301519082015260608083015190820152905181529392505050565b600061342c612f18565b9050600061343a8383612da3565b306000908152600260205260409020549091506134579082611e4c565b30600090815260026020526040902055505050565b600a546134799083612f3b565b600a55600b546134899082611e4c565b600b555050565b613498613631565b60006133ba84846060015185608001518660a001515b6134d96040518060800160405280600081526020016000815260200160008152602001600081525090565b6135046040518060800160405280600081526020016000815260200160008152602001600081525090565b61351360646126768888612da3565b602082015261352760646126768887612da3565b604082015261353b60646126768886612da3565b60608201526020810151613550908790612f3b565b8082526040820151908290613566908390613c1a565b90525060608101518151829061357d908390613c1a565b90525095945050505050565b60008080806135988986612da3565b905060006135a68987612da3565b905060006135b48988612da3565b905060006135c28989612da3565b905060006135da836135d48787612f3b565b90612f3b565b90506135e68282613c1a565b949d949c50919a509298505050505050505050565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b80516001600160701b038116811461368557600080fd5b919050565b60006020828403121561369b578081fd5b8135611e4581613c47565b6000602082840312156136b7578081fd5b8151611e4581613c47565b600080604083850312156136d4578081fd5b82356136df81613c47565b915060208301356136ef81613c47565b809150509250929050565b60008060006060848603121561370e578081fd5b833561371981613c47565b9250602084013561372981613c47565b929592945050506040919091013590565b6000806040838503121561374c578182fd5b823561375781613c47565b946020939093013593505050565b600060208284031215613776578081fd5b81358015158114611e45578182fd5b600080600060608486031215613799578283fd5b6137a28461366e565b92506137b06020850161366e565b9150604084015163ffffffff811681146137c8578182fd5b809150509250925092565b6000602082840312156137e4578081fd5b5035919050565b6000602082840312156137fc578081fd5b5051919050565b60008060408385031215613815578182fd5b50508035926020909101359150565b600080600060608486031215613838578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215613863578283fd5b8351925060208401519150604084015190509250925092565b60008060008060008060c08789031215613894578182fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000602082840312156138cf578081fd5b815160ff81168114611e45578182fd5b6000602080835283518082850152825b8181101561390b578581018301518582016040015282016138ef565b8181111561391c5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526027908201527f63616e74206d616b6520746865206c696d697420686967686572207468616e206040820152661817189021272160c91b606082015260800190565b60208082526041908201527f77616c6c65742062616c616e6365206166746572207472616e73666572206d7560408201527f7374206265206c657373207468616e206d61782077616c6c657420616d6f756e6060820152601d60fa1b608082015260a00190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526030908201527f416d6f756e74206d757374206265206c657373207468616e206f72206571756160408201526f6c20746f20746f74616c537570706c7960801b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015613ab45784516001600160a01b031683529383019391830191600101613a8f565b50506001600160a01b03969096166060850152505050608001529392505050565b60008219821115613ae857613ae8613c31565b500190565b600082613b0857634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115613b48578160001904821115613b2e57613b2e613c31565b80851615613b3b57918102915b93841c9390800290613b12565b509250929050565b6000611e4560ff841683600082613b6957506001610ced565b81613b7657506000610ced565b8160018114613b8c5760028114613b9657613bb2565b6001915050610ced565b60ff841115613ba757613ba7613c31565b50506001821b610ced565b5060208310610133831016604e8410600b8410161715613bd5575081810a610ced565b613bdf8383613b0d565b8060001904821115613bf357613bf3613c31565b029392505050565b6000816000190483118215151615613c1557613c15613c31565b500290565b600082821015613c2c57613c2c613c31565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146112b957600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122078148a0147cc52194d791fed533a1b92acdcf1e7e62120c33abc92db5d45465c64736f6c63430008040033

Deployed ByteCode Sourcemap

7040:30863:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33667:1280;;;;;;;;;;-1:-1:-1;33667:1280:0;;;;;:::i;:::-;;:::i;:::-;;12338:94;;;;;;;;;;-1:-1:-1;12419:5:0;;;;;;;;;;;;-1:-1:-1;;;12419:5:0;;;;12338:94;;;;;;;:::i;:::-;;;;;;;;36265:402;;;;;;;;;;-1:-1:-1;36265:402:0;;;;;:::i;:::-;;:::i;13402:163::-;;;;;;;;;;-1:-1:-1;13402:163:0;;;;;:::i;:::-;;:::i;:::-;;;6112:14:1;;6105:22;6087:41;;6075:2;6060:18;13402:163:0;6042:92:1;12648:97:0;;;;;;;;;;-1:-1:-1;7825:21:0;12648:97;;;17302:25:1;;;17290:2;17275:18;12648:97:0;17257:76:1;36855:142:0;;;;;;;;;;-1:-1:-1;36855:142:0;;;;;:::i;:::-;;:::i;13573:312::-;;;;;;;;;;-1:-1:-1;13573:312:0;;;;;:::i;:::-;;:::i;33362:297::-;;;;;;;;;;-1:-1:-1;33362:297:0;;;;;:::i;:::-;;:::i;34955:337::-;;;;;;;;;;-1:-1:-1;34955:337:0;;;;;:::i;:::-;;:::i;32413:114::-;;;;;;;;;;-1:-1:-1;32413:114:0;;;;;:::i;:::-;;:::i;12546:94::-;;;;;;;;;;-1:-1:-1;12546:94:0;;7275:1;19008:36:1;;18996:2;18981:18;12546:94:0;18963:87:1;35785:102:0;;;;;;;;;;-1:-1:-1;35785:102:0;;;;;:::i;:::-;;:::i;12962:98::-;;;;;;;;;;-1:-1:-1;12962:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;13039:13:0;13015:4;13039:13;;;:4;:13;;;;;;;;;12962:98;35899:354;;;;;;;;;;-1:-1:-1;35899:354:0;;;;;:::i;:::-;;:::i;8451:36::-;;;;;;;;;;;;;;;;32043:113;;;;;;;;;;-1:-1:-1;32043:113:0;;;;;:::i;:::-;;:::i;37771:129::-;;;;;;;;;;-1:-1:-1;37771:129:0;;;;;:::i;:::-;;:::i;10605:28::-;;;;;;;;;;-1:-1:-1;10605:28:0;;;;-1:-1:-1;;;;;10605:28:0;;;;;;-1:-1:-1;;;;;5291:32:1;;;5273:51;;5261:2;5246:18;10605:28:0;5228:102:1;10924:40:0;;;;;;;;;;-1:-1:-1;10924:40:0;;;;-1:-1:-1;;;10924:40:0;;;;;;37413:171;;;;;;;;;;;;;:::i;10823:47::-;;;;;;;;;;-1:-1:-1;10823:47:0;;;;;;;;;;;32792:97;;;;;;;;;;-1:-1:-1;32792:97:0;;;;;:::i;:::-;;:::i;37009:189::-;;;;;;;;;;;;;:::i;8081:31::-;;;;;;;;;;;;;;;;24395:155;;;;;;;;;;;;;:::i;12753:201::-;;;;;;;;;;-1:-1:-1;12753:201:0;;;;;:::i;:::-;;:::i;2613:148::-;;;;;;;;;;;;;:::i;8805:37::-;;;;;;;;;;;;;;;;35300:245;;;;;;;;;;-1:-1:-1;35300:245:0;;;;;:::i;:::-;;:::i;8919:36::-;;;;;;;;;;;;;;;;32539:111;;;;;;;;;;-1:-1:-1;32539:111:0;;;;;:::i;:::-;;:::i;2399:79::-;;;;;;;;;;-1:-1:-1;2437:7:0;2464:6;-1:-1:-1;;;;;2464:6:0;2399:79;;9055:39;;;;;;;;;;;;;;;;12440:98;;;;;;;;;;-1:-1:-1;12523:7:0;;;;;;;;;;;;-1:-1:-1;;;12523:7:0;;;;12440:98;;35553:224;;;;;;;;;;-1:-1:-1;35553:224:0;;;;;:::i;:::-;;:::i;9148:38::-;;;;;;;;;;;;;;;;13072:169;;;;;;;;;;-1:-1:-1;13072:169:0;;;;;:::i;:::-;;:::i;7956:31::-;;;;;;;;;;;;;;;;32662:114;;;;;;;;;;-1:-1:-1;32662:114:0;;;;;:::i;:::-;;:::i;16054:797::-;;;;;;;;;;-1:-1:-1;16054:797:0;;;;;:::i;:::-;;:::i;24231:156::-;;;;;;;;;;;;;:::i;8343:35::-;;;;;;;;;;;;;;;;37596:169;;;;;;;;;;;;;:::i;10877:40::-;;;;;;;;;;-1:-1:-1;10877:40:0;;;;;;;;;;;8694:36;;;;;;;;;;;;;;;;37210:191;;;;;;;;;;;;;:::i;16863:510::-;;;;;;;;;;;;;:::i;:::-;;;;;;16743:4:1;16785:3;16774:9;16770:19;16762:27;;16822:6;16816:13;16805:9;16798:32;16886:4;16878:6;16874:17;16868:24;16861:4;16850:9;16846:20;16839:54;16949:4;16941:6;16937:17;16931:24;16924:4;16913:9;16909:20;16902:54;17012:4;17004:6;17000:17;16994:24;16987:4;16976:9;16972:20;16965:54;17075:4;17067:6;17063:17;17057:24;17050:4;17039:9;17035:20;17028:54;17138:4;17130:6;17126:17;17120:24;17113:4;17102:9;17098:20;17091:54;16752:399;;;;;32290:111:0;;;;;;;;;;-1:-1:-1;32290:111:0;;;;;:::i;:::-;;:::i;8562:35::-;;;;;;;;;;;;;;;;13249:145;;;;;;;;;;-1:-1:-1;13249:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;13359:18:0;;;13332:7;13359:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;13249:145;36679:164;;;;;;;;;;-1:-1:-1;36679:164:0;;;;;:::i;:::-;;:::i;32164:114::-;;;;;;;;;;-1:-1:-1;32164:114:0;;;;;:::i;:::-;;:::i;33002:352::-;;;;;;;;;;-1:-1:-1;33002:352:0;;;;;:::i;:::-;;:::i;8250:51::-;;;;;;;;;;;;;;;;9101:40;;;;;;;;;;;;;;;;32897:93;;;;;;;;;;-1:-1:-1;32897:93:0;;;;;:::i;:::-;;:::i;33667:1280::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;;;;;;;;;33872:14:::1;33889:58;33930:16:::0;33889:36:::1;:15:::0;33909;33889:19:::1;:36::i;:::-;:40:::0;::::1;:58::i;:::-;33872:75:::0;-1:-1:-1;33958:15:0::1;33976:61;34019:17:::0;33976:38:::1;:16:::0;33997;33976:20:::1;:38::i;:61::-;33958:79;;34065:2;34056:6;:11;34048:61;;;::::0;-1:-1:-1;;;34048:61:0;;9635:2:1;34048:61:0::1;::::0;::::1;9617:21:1::0;9674:2;9654:18;;;9647:30;9713:34;9693:18;;;9686:62;-1:-1:-1;;;9764:18:1;;;9757:35;9809:19;;34048:61:0::1;9607:227:1::0;34048:61:0::1;34138:2;34128:7;:12;34120:61;;;::::0;-1:-1:-1;;;34120:61:0;;10749:2:1;34120:61:0::1;::::0;::::1;10731:21:1::0;10788:2;10768:18;;;10761:30;10827:34;10807:18;;;10800:62;-1:-1:-1;;;10878:18:1;;;10871:34;10922:19;;34120:61:0::1;10721:226:1::0;34120:61:0::1;34192:16;:34:::0;;;34237:17:::1;:36:::0;;;34284:16:::1;:34:::0;;;34329:17:::1;:36:::0;;;34376:18:::1;:38:::0;;;34425:17:::1;:36:::0;;;34474:24:::1;:43:::0;;;34528:25:::1;:45:::0;;;34584:24:::1;:43:::0;;;34638:25:::1;:45:::0;;;34694:26:::1;:47:::0;;;34752:25:::1;:45:::0;;;34815:124:::1;::::0;;18613:25:1;;;18669:2;18654:18;;18647:34;;;18697:18;;;18690:34;;;18755:2;18740:18;;18733:34;;;18798:3;18783:19;;18776:35;;;18842:3;18827:19;;18820:35;;;34815:124:0::1;::::0;18600:3:1;18585:19;34815:124:0::1;;;;;;;2596:1;;33667:1280:::0;;;;;;:::o;36265:402::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;36465:3:::1;36404:58;36446:15:::0;36404:37:::1;:15:::0;36424:16;36404:19:::1;:37::i;:58::-;:64;36396:107;;;::::0;-1:-1:-1;;;36396:107:0;;8575:2:1;36396:107:0::1;::::0;::::1;8557:21:1::0;8614:2;8594:18;;;8587:30;8653:32;8633:18;;;8626:60;8703:18;;36396:107:0::1;8547:180:1::0;36396:107:0::1;36524:19;:37:::0;36572:20:::1;:39:::0;36622:19:::1;:37:::0;36265:402::o;13402:163::-;13479:4;13496:39;200:10;13519:7;13528:6;13496:8;:39::i;:::-;-1:-1:-1;13553:4:0;13402:163;;;;;:::o;36855:142::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;36953:17:::1;:36:::0;;-1:-1:-1;;;;;;36953:36:0::1;-1:-1:-1::0;;;;;36953:36:0;;;::::1;::::0;;;::::1;::::0;;36855:142::o;13573:312::-;13673:4;13690:36;13700:6;13708:9;13719:6;13690:9;:36::i;:::-;13737:118;13746:6;200:10;13766:88;13804:6;13766:88;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13766:19:0;;;;;;:11;:19;;;;;;;;200:10;13766:33;;;;;;;;;;:37;:88::i;:::-;13737:8;:118::i;:::-;-1:-1:-1;13873:4:0;13573:312;;;;;:::o;33362:297::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;33473:1:::1;33455:15;:19;33447:61;;;::::0;-1:-1:-1;;;33447:61:0;;10041:2:1;33447:61:0::1;::::0;::::1;10023:21:1::0;10080:2;10060:18;;;10053:30;10119:31;10099:18;;;10092:59;10168:18;;33447:61:0::1;10013:179:1::0;33447:61:0::1;7825:21;33527:15;:26;;33519:87;;;;-1:-1:-1::0;;;33519:87:0::1;;;;;;;:::i;:::-;33617:16;:34:::0;33362:297::o;34955:337::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;35055:3:::1;35040:11;:18;;35032:81;;;::::0;-1:-1:-1;;;35032:81:0;;15964:2:1;35032:81:0::1;::::0;::::1;15946:21:1::0;16003:2;15983:18;;;15976:30;16042:34;16022:18;;;16015:62;-1:-1:-1;;;16093:18:1;;;16086:48;16151:19;;35032:81:0::1;15936:240:1::0;35032:81:0::1;35146:1;35132:11;:15;35124:75;;;::::0;-1:-1:-1;;;35124:75:0;;16383:2:1;35124:75:0::1;::::0;::::1;16365:21:1::0;16422:2;16402:18;;;16395:30;16461:34;16441:18;;;16434:62;-1:-1:-1;;;16512:18:1;;;16505:45;16567:19;;35124:75:0::1;16355:237:1::0;35124:75:0::1;35210:12;:26:::0;;;35252:32:::1;::::0;17302:25:1;;;35252:32:0::1;::::0;17290:2:1;17275:18;35252:32:0::1;;;;;;;;34955:337:::0;:::o;32413:114::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32491:20:0::1;32514:5;32491:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;32491:28:0::1;::::0;;32413:114::o;35785:102::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;35858:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;35858:21:0;;::::1;::::0;;;::::1;::::0;;35785:102::o;35899:354::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;36020:18:::1;36007:9;:31;;35999:83;;;;-1:-1:-1::0;;;35999:83:0::1;;;;;;;:::i;:::-;36115:18;36101:10;:32;;36093:84;;;;-1:-1:-1::0;;;36093:84:0::1;;;;;;;:::i;:::-;36188:10;:22:::0;;;;36221:11:::1;:24:::0;35899:354::o;32043:113::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32114:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32114:34:0::1;32144:4;32114:34;::::0;;32043:113::o;37771:129::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;37859:15:::1;:33:::0;37771:129::o;37413:171::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;37486:21:::1;::::0;-1:-1:-1;;;37486:21:0;::::1;;;:29;;37511:4;37486:29;37478:58;;;::::0;-1:-1:-1;;;37478:58:0;;9290:2:1;37478:58:0::1;::::0;::::1;9272:21:1::0;9329:2;9309:18;;;9302:30;-1:-1:-1;;;9348:18:1;;;9341:46;9404:18;;37478:58:0::1;9262:166:1::0;37478:58:0::1;37547:21;:29:::0;;-1:-1:-1;;37547:29:0::1;::::0;;37413:171::o;32792:97::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32860:13:0::1;32876:5;32860:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;32860:21:0::1;::::0;;32792:97::o;37009:189::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;37087:28:::1;::::0;;;::::1;;;:37;37079:65;;;::::0;-1:-1:-1;;;37079:65:0;;13975:2:1;37079:65:0::1;::::0;::::1;13957:21:1::0;14014:2;13994:18;;;13987:30;-1:-1:-1;;;14033:18:1;;;14026:45;14088:18;;37079:65:0::1;13947:165:1::0;37079:65:0::1;37155:28;:35:::0;;-1:-1:-1;;37155:35:0::1;::::0;::::1;::::0;;37009:189::o;24395:155::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;24478:21:::1;24510:32;24478:21:::0;24510:12:::1;:32::i;:::-;2596:1;24395:155::o:0;12753:201::-;12819:7;-1:-1:-1;;;;;12843:23:0;;10433:42;12843:23;12839:52;;;-1:-1:-1;;;;;;12875:16:0;;;;;:7;:16;;;;;;;12753:201::o;12839:52::-;-1:-1:-1;;;;;12929:16:0;;;;;;:7;:16;;;;;;12909:37;;:19;:37::i;2613:148::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;2720:1:::1;2704:6:::0;;2683:40:::1;::::0;-1:-1:-1;;;;;2704:6:0;;::::1;::::0;2683:40:::1;::::0;2720:1;;2683:40:::1;2751:1;2734:19:::0;;-1:-1:-1;;;;;;2734:19:0::1;::::0;;2613:148::o;35300:245::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;35400:13:::1;:22:::0;;-1:-1:-1;;;;;35400:22:0;;::::1;-1:-1:-1::0;;;;;;35400:22:0;;::::1;::::0;::::1;::::0;;;35433:14:::1;:23:::0;;;;::::1;::::0;;;::::1;;::::0;;35467:29:::1;::::0;:14:::1;:29::i;:::-;35522:14;::::0;35507:30:::1;::::0;-1:-1:-1;;;;;35522:14:0::1;35507;:30::i;:::-;35300:245:::0;;:::o;32539:111::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32615:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32615:27:0::1;32638:4;32615:27;::::0;;32539:111::o;35553:224::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;35632:7:::1;::::0;;;::::1;;;:15;;35643:4;35632:15;35624:49;;;::::0;-1:-1:-1;;;35624:49:0;;10399:2:1;35624:49:0::1;::::0;::::1;10381:21:1::0;10438:2;10418:18;;;10411:30;-1:-1:-1;;;10457:18:1;;;10450:51;10518:18;;35624:49:0::1;10371:171:1::0;35624:49:0::1;35684:7;:15:::0;;24138;24124:11;:29;24164:10;:22;;;-1:-1:-1;;24197:18:0;-1:-1:-1;24197:18:0;;;35761:7:::1;::::0;35748:21:::1;::::0;35761:7;;;::::1;;;6112:14:1::0;6105:22;6087:41;;35748:21:0::1;::::0;6075:2:1;6060:18;35748:21:0::1;6042:92:1::0;13072:169:0;13152:4;13169:42;200:10;13193:9;13204:6;13169:9;:42::i;32662:114::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32740:20:0::1;32763:5;32740:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;32740:28:0::1;::::0;;32662:114::o;16054:797::-;16118:7;16138:21;16192:13;;;;;;;;;-1:-1:-1;;;;;16192:13:0;-1:-1:-1;;;;;16177:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16138:78;;16236:21;16290:13;;;;;;;;;-1:-1:-1;;;;;16290:13:0;-1:-1:-1;;;;;16275:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16236:78;;16332:12;16346;16378:13;;;;;;;;;-1:-1:-1;;;;;16378:13:0;-1:-1:-1;;;;;16363:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16420:11:0;;16331:75;;-1:-1:-1;16331:75:0;-1:-1:-1;16420:11:0;;;;;16417:273;;;16487:13;;;;;;;;;-1:-1:-1;;;;;16487:13:0;-1:-1:-1;;;;;16472:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16448:63;;16574:13;;;;;;;;;-1:-1:-1;;;;;16574:13:0;-1:-1:-1;;;;;16559:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16535:63;;16650:13;;;;;;;;;-1:-1:-1;;;;;16650:13:0;-1:-1:-1;;;;;16635:41:0;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16619:59:0;-1:-1:-1;16619:59:0;-1:-1:-1;16417:273:0;16702:9;16724:6;-1:-1:-1;;;;;16724:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16720:21;;:2;:21;:::i;:::-;16714:28;;-1:-1:-1;;;;;16714:28:0;;;:::i;:::-;16702:40;;16785:6;-1:-1:-1;;;;;16785:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16781:21;;:2;:21;:::i;:::-;16775:28;;-1:-1:-1;;;;;16775:28:0;;;:::i;:::-;16761:11;16768:4;16761:6;:11;:::i;:::-;16760:44;;;;:::i;:::-;16753:52;16054:797;-1:-1:-1;;;;;;;16054:797:0:o;24231:156::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;24285:23:::1;24311:24;24329:4;24311:9;:24::i;:::-;24285:50;;24346:33;24363:15;24346:16;:33::i;37596:169::-:0;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;37668:21:::1;::::0;-1:-1:-1;;;37668:21:0;::::1;;;:30;37660:58;;;::::0;-1:-1:-1;;;37660:58:0;;13975:2:1;37660:58:0::1;::::0;::::1;13957:21:1::0;14014:2;13994:18;;;13987:30;-1:-1:-1;;;14033:18:1;;;14026:45;14088:18;;37660:58:0::1;13947:165:1::0;37660:58:0::1;37729:21;:28:::0;;-1:-1:-1;;37729:28:0::1;-1:-1:-1::0;;;37729:28:0::1;::::0;;37596:169::o;37210:191::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;37289:28:::1;::::0;;;::::1;;;:36;;37321:4;37289:36;37281:65;;;::::0;-1:-1:-1;;;37281:65:0;;9290:2:1;37281:65:0::1;::::0;::::1;9272:21:1::0;9329:2;9309:18;;;9302:30;-1:-1:-1;;;9348:18:1;;;9341:46;9404:18;;37281:65:0::1;9262:166:1::0;37281:65:0::1;37357:28;:36:::0;;-1:-1:-1;;37357:36:0::1;::::0;;37210:191::o;16863:510::-;16901:17;;:::i;:::-;16941:28;;:::i;:::-;17019:16;;16990:45;;17075:16;;17046:26;;;:45;17132:17;;17102:27;;;:47;17192:17;;17162:27;;;:47;17250:17;;17220:27;;;:47;17309:18;;17278:28;;;:49;16990:10;16863:510;-1:-1:-1;16863:510:0:o;32290:111::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32366:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32366:27:0::1;32389:4;32366:27;::::0;;32290:111::o;36679:164::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;36775:2:::1;36763:9;:14;36755:47;;;::::0;-1:-1:-1;;;36755:47:0;;13216:2:1;36755:47:0::1;::::0;::::1;13198:21:1::0;13255:2;13235:18;;;13228:30;-1:-1:-1;;;13274:18:1;;;13267:50;13334:18;;36755:47:0::1;13188:170:1::0;36755:47:0::1;36813:10;:22:::0;36679:164::o;32164:114::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32235:27:0::1;32265:5;32235:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32235:35:0::1;::::0;;32164:114::o;33002:352::-;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;33101:18:::1;7825:21;33113:5;33101:11;:18::i;:::-;33087:11;:32;33079:88;;;::::0;-1:-1:-1;;;33079:88:0;;11628:2:1;33079:88:0::1;::::0;::::1;11610:21:1::0;11667:2;11647:18;;;11640:30;11706:34;11686:18;;;11679:62;-1:-1:-1;;;11757:18:1;;;11750:41;11808:19;;33079:88:0::1;11600:233:1::0;33079:88:0::1;7825:21;33186:11;:22;;33178:83;;;;-1:-1:-1::0;;;33178:83:0::1;;;;;;;:::i;:::-;33272:12;:26:::0;;;33314:32:::1;::::0;17302:25:1;;;33314:32:0::1;::::0;17290:2:1;17275:18;33314:32:0::1;17257:76:1::0;32897:93:0;2526:6;;-1:-1:-1;;;;;2526:6:0;200:10;2526:22;2518:67;;;;-1:-1:-1;;;2518:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32962:13:0::1;;::::0;;;:4:::1;:13;::::0;;;;:20;;-1:-1:-1;;32962:20:0::1;32978:4;32962:20;::::0;;32897:93::o;1709:132::-;1767:7;1794:39;1798:1;1801;1794:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1787:46;1709:132;-1:-1:-1;;;1709:132:0:o;926:179::-;984:7;;1016:5;1020:1;1016;:5;:::i;:::-;1004:17;;1045:1;1040;:6;;1032:46;;;;-1:-1:-1;;;1032:46:0;;8934:2:1;1032:46:0;;;8916:21:1;8973:2;8953:18;;;8946:30;9012:29;8992:18;;;8985:57;9059:18;;1032:46:0;8906:177:1;15664:335:0;-1:-1:-1;;;;;15757:19:0;;15749:68;;;;-1:-1:-1;;;15749:68:0;;15559:2:1;15749:68:0;;;15541:21:1;15598:2;15578:18;;;15571:30;15637:34;15617:18;;;15610:62;-1:-1:-1;;;15688:18:1;;;15681:34;15732:19;;15749:68:0;15531:226:1;15749:68:0;-1:-1:-1;;;;;15836:21:0;;15828:68;;;;-1:-1:-1;;;15828:68:0;;8172:2:1;15828:68:0;;;8154:21:1;8211:2;8191:18;;;8184:30;8250:34;8230:18;;;8223:62;-1:-1:-1;;;8301:18:1;;;8294:32;8343:19;;15828:68:0;8144:224:1;15828:68:0;-1:-1:-1;;;;;15907:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15959:32;;17302:25:1;;;15959:32:0;;17275:18:1;15959:32:0;;;;;;;15664:335;;;:::o;17385:4030::-;-1:-1:-1;;;;;17473:18:0;;17465:68;;;;-1:-1:-1;;;17465:68:0;;15153:2:1;17465:68:0;;;15135:21:1;15192:2;15172:18;;;15165:30;15231:34;15211:18;;;15204:62;-1:-1:-1;;;15282:18:1;;;15275:35;15327:19;;17465:68:0;15125:227:1;17465:68:0;-1:-1:-1;;;;;17552:16:0;;17544:64;;;;-1:-1:-1;;;17544:64:0;;6949:2:1;17544:64:0;;;6931:21:1;6988:2;6968:18;;;6961:30;7027:34;7007:18;;;7000:62;-1:-1:-1;;;7078:18:1;;;7071:33;7121:19;;17544:64:0;6921:225:1;17544:64:0;17636:1;17627:6;:10;17619:64;;;;-1:-1:-1;;;17619:64:0;;13565:2:1;17619:64:0;;;13547:21:1;13604:2;13584:18;;;13577:30;13643:34;13623:18;;;13616:62;-1:-1:-1;;;13694:18:1;;;13687:39;13743:19;;17619:64:0;13537:231:1;17619:64:0;17711:4;17736:28;;:::i;:::-;2437:7;2464:6;-1:-1:-1;;;;;17781:15:0;;;2464:6;;17781:15;;;;:32;;-1:-1:-1;2437:7:0;2464:6;-1:-1:-1;;;;;17800:13:0;;;2464:6;;17800:13;;17781:32;:44;;;;-1:-1:-1;17818:7:0;;;;;;;17817:8;17781:44;:69;;;;-1:-1:-1;;;;;;17829:21:0;;17845:4;17829:21;;17781:69;:92;;;;-1:-1:-1;;;;;;17854:19:0;;17868:4;17854:19;;17781:92;:114;;;;-1:-1:-1;;;;;;17878:17:0;;;;;;:11;:17;;;;;;;;17877:18;17781:114;:134;;;;-1:-1:-1;;;;;;17900:15:0;;;;;;:11;:15;;;;;;;;17899:16;17781:134;17777:3014;;;17940:11;;;;17932:20;;;;;;17979:13;;-1:-1:-1;;;;;17971:21:0;;;17979:13;;17971:21;;;;:47;;-1:-1:-1;18004:14:0;;-1:-1:-1;;;;;17996:22:0;;;18004:14;;17996:22;;17971:47;17967:119;;;18057:12;;18047:6;:22;;18039:31;;;;;;18113:13;;-1:-1:-1;;;;;18105:21:0;;;18113:13;;18105:21;;:42;;-1:-1:-1;;;;;;18130:17:0;;;;;;:11;:17;;;;;;;;18105:42;18104:78;;;;-1:-1:-1;18166:15:0;;-1:-1:-1;;;;;18152:30:0;;;18166:15;;18152:30;;18104:78;18100:945;;;18263:10;;-1:-1:-1;;;;;18231:28:0;;;;;;:24;:28;;;;;;18213:46;;:15;:46;:::i;:::-;:60;18209:219;;-1:-1:-1;;;;;18298:8:0;;;;;;:4;:8;;;;;:15;;-1:-1:-1;;18298:15:0;18309:4;18298:15;;;18209:219;;;-1:-1:-1;;;;;18362:28:0;;;;;;:24;:28;;;;;18393:15;18362:46;;18209:219;18487:10;;18471:11;;:27;;:15;:27::i;:::-;18452:15;:46;;:71;;;;-1:-1:-1;18510:13:0;;-1:-1:-1;;;;;18502:21:0;;;18510:13;;18502:21;;18452:71;:97;;;;-1:-1:-1;18535:14:0;;-1:-1:-1;;;;;18527:22:0;;;18535:14;;18527:22;;18452:97;18448:161;;;-1:-1:-1;;;;;18574:8:0;;;;;;:4;:8;;;;;:15;;-1:-1:-1;;18574:15:0;18585:4;18574:15;;;18448:161;18665:29;;-1:-1:-1;;;18665:29:0;;;;;17302:25:1;;;18645:17:0;;18665:4;;:21;;17275:18:1;;18665:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18645:49;;18752:10;;18739:9;:23;;18731:80;;;;-1:-1:-1;;;18731:80:0;;12040:2:1;18731:80:0;;;12022:21:1;12079:2;12059:18;;;12052:30;12118:34;12098:18;;;12091:62;-1:-1:-1;;;12169:18:1;;;12162:42;12221:19;;18731:80:0;12012:234:1;18731:80:0;18867:16;;18838:25;18856:6;18838:13;18848:2;18838:9;:13::i;:25::-;:45;;18830:123;;;;-1:-1:-1;;;18830:123:0;;;;;;;:::i;:::-;19003:8;:6;:8::i;:::-;18990:21;;18100:945;;19078:6;;;;;;;19077:7;:32;;;;-1:-1:-1;19096:13:0;;-1:-1:-1;;;;;19088:21:0;;;19096:13;;19088:21;;19077:32;:54;;;;-1:-1:-1;;;;;;19114:17:0;;;;;;:11;:17;;;;;;;;19113:18;19077:54;19073:1707;;;-1:-1:-1;;;;;19180:10:0;;;;;;:4;:10;;;;;;;;19179:11;:24;;;;-1:-1:-1;;;;;;19195:8:0;;;;;;:4;:8;;;;;;;;19194:9;19179:24;19171:33;;;;;;19297:10;;-1:-1:-1;;;;;19263:30:0;;;;;;:24;:30;;;;;;19245:48;;:15;:48;:::i;:::-;:62;19241:225;;-1:-1:-1;;;;;19332:10:0;;;;;;:4;:10;;;;;:17;;-1:-1:-1;;19332:17:0;19345:4;19332:17;;;19241:225;;;-1:-1:-1;;;;;19398:30:0;;;;;;:24;:30;;;;;19431:15;19398:48;;19241:225;19522:29;;-1:-1:-1;;;19522:29:0;;;;;17302:25:1;;;19502:17:0;;19522:4;;:21;;17275:18:1;;19522:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19502:49;;19591:11;;19578:9;:24;;19570:85;;;;-1:-1:-1;;;19570:85:0;;14736:2:1;19570:85:0;;;14718:21:1;14775:2;14755:18;;;14748:30;14814:34;14794:18;;;14787:62;-1:-1:-1;;;14865:18:1;;;14858:46;14921:19;;19570:85:0;14708:238:1;19570:85:0;19696:28;;;;;;;19692:193;;;19818:12;;19799:13;;19789:51;;19836:3;;19789:42;;19818:12;19789:24;;-1:-1:-1;;;;;19799:13:0;19789:9;:24::i;:::-;:28;;:42::i;:::-;:46;;:51::i;:::-;19779:6;:61;;19771:70;;;;;;19930:13;;-1:-1:-1;;;;;19924:19:0;;;19930:13;;19924:19;19921:190;;20005:16;;19976:25;19994:6;19976:13;19986:2;19976:9;:13::i;:25::-;:45;;19968:123;;;;-1:-1:-1;;;19968:123:0;;;;;;;:::i;:::-;20144:8;:6;:8::i;:::-;20131:21;;20189:28;20220:24;20238:4;20220:9;:24::i;:::-;20189:55;;20290:15;;20267:20;:38;20263:125;;;-1:-1:-1;20353:15:0;;20263:125;20434:15;;20410:20;:39;20406:144;;20476:36;20491:20;20476:14;:36::i;:::-;20597:21;20641:22;;20637:106;;20688:35;20701:21;20688:12;:35::i;:::-;19073:1707;;;;-1:-1:-1;;;;;20807:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;20835:22:0;;;;;;:18;:22;;;;;;;;20807:50;:61;;;-1:-1:-1;20861:7:0;;;;;;;20807:61;:82;;;-1:-1:-1;;;;;;20872:17:0;;;;;;:11;:17;;;;;;;;20807:82;:101;;;-1:-1:-1;;;;;;20893:15:0;;;;;;:11;:15;;;;;;;;20807:101;20803:321;;;20925:15;15342:24;;15323:16;:43;15397:25;;15377:17;:45;15452:24;;15433:16;:43;15509:25;;15489:17;:45;15566:26;;15545:18;:47;15623:25;;15603:17;:45;15279:377;20925:15;20965:5;20955:15;;20803:321;;;-1:-1:-1;;;;;21003:10:0;;;;;;:4;:10;;;;;;;;;:22;;-1:-1:-1;;;;;;21017:8:0;;;;;;:4;:8;;;;;;;;21003:22;20999:125;;;21042:15;15342:24;;15323:16;:43;15397:25;;15377:17;:45;15452:24;;15433:16;:43;15509:25;;15489:17;:45;15566:26;;15545:18;:47;15623:25;;15603:17;:45;15279:377;21042:15;21072:11;14982:16;;;14955:24;:43;15037:17;;;15009:25;:45;15092:16;;;15065:24;:43;15140:19;;15121:38;;;15190:20;;15170:40;;15240:19;;15221:38;;14915:352;21072:11;21108:4;21098:14;;20999:125;21140:7;;;;;;;21136:172;;;2437:7;2464:6;-1:-1:-1;;;;;21172:15:0;;;2464:6;;21172:15;;:40;;-1:-1:-1;21199:13:0;;-1:-1:-1;;;;;21191:21:0;;;21199:13;;21191:21;21172:40;:66;;;-1:-1:-1;21224:14:0;;-1:-1:-1;;;;;21216:22:0;;;21224:14;;21216:22;21172:66;:87;;;-1:-1:-1;;;;;;21242:17:0;;;;;;:11;:17;;;;;;;;21172:87;:106;;;-1:-1:-1;;;;;;21263:15:0;;;;;;:11;:15;;;;;;;;21172:106;:123;;;-1:-1:-1;2437:7:0;2464:6;-1:-1:-1;;;;;21282:13:0;;;2464:6;;21282:13;21172:123;21164:132;;;;;;21328:53;21343:4;21349:2;21353:6;21361:7;21370:10;21328:14;:53::i;:::-;21392:15;15342:24;;15323:16;:43;15397:25;;15377:17;:45;15452:24;;15433:16;:43;15509:25;;15489:17;:45;15566:26;;15545:18;:47;15623:25;;15603:17;:45;15279:377;21392:15;17385:4030;;;;;:::o;1257:190::-;1343:7;1379:12;1371:6;;;;1363:29;;;;-1:-1:-1;;;1363:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1403:9:0;1415:5;1419:1;1415;:5;:::i;:::-;1403:17;1257:190;-1:-1:-1;;;;;1257:190:0:o;23450:607::-;23528:11;;:22;;23543:6;23528:22;:::i;:::-;23510:15;:40;23507:543;;;23598:42;;23657:47;23671:32;23699:3;23671:23;:6;23690:2;23671:10;:23::i;:32::-;23657:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23719:17:0;;-1:-1:-1;;;;;23719:17:0;:60;23746:32;23774:3;23746:23;:6;23765:2;23746:10;:23::i;:32::-;23719:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10327:42:0;23794:56;23817:32;23845:3;23817:23;:6;23836:2;23817:10;:23::i;:32::-;23794:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23507:543;2596:1:::1;24395:155::o:0;23507:543::-;23892:17;;23930;;-1:-1:-1;;;;;23892:17:0;;;;:66;;23919:38;;23953:3;;23919:29;;:6;;:10;:29::i;:38::-;23892:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10327:42:0;23973:65;23996:41;24033:3;23996:32;:6;9502:2;23996:10;:32::i;:41::-;23973:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13893:253;13961:7;14000;;13989;:18;;13981:72;;;;-1:-1:-1;;;13981:72:0;;7761:2:1;13981:72:0;;;7743:21:1;7800:2;7780:18;;;7773:30;7839:34;7819:18;;;7812:62;-1:-1:-1;;;7890:18:1;;;7883:40;7940:19;;13981:72:0;7733:232:1;13981:72:0;14064:19;14086:10;:8;:10::i;:::-;14064:32;-1:-1:-1;14114:24:0;:7;14064:32;14114:11;:24::i;21423:407::-;11438:6;:13;;-1:-1:-1;;11438:13:0;;;;;21525:16:::1;::::0;;21539:1:::1;21525:16:::0;;;;;::::1;::::0;;-1:-1:-1;;21525:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21525:16:0::1;21501:40;;21570:4;21552;21557:1;21552:7;;;;;;-1:-1:-1::0;;;21552:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;21552:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;21596:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;21596:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;21552:7;;21596:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21586:4;21591:1;21586:7;;;;;;-1:-1:-1::0;;;21586:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;21586:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;21661:15:::1;::::0;21629:62:::1;::::0;21646:4:::1;::::0;21661:15:::1;21679:11:::0;21629:8:::1;:62::i;:::-;21702:15;::::0;:120:::1;::::0;-1:-1:-1;;;21702:120:0;;-1:-1:-1;;;;;21702:15:0;;::::1;::::0;:66:::1;::::0;:120:::1;::::0;21769:11;;21702:15:::1;::::0;21785:4;;21799::::1;::::0;21806:15:::1;::::0;21702:120:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;11474:6:0;:14;;-1:-1:-1;;11474:14:0;;;-1:-1:-1;;;;21423:407:0:o;1849:189::-;1935:7;1970:12;1963:5;1955:28;;;;-1:-1:-1;;;1955:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1994:9:0;2006:5;2010:1;2006;:5;:::i;1455:246::-;1513:7;1537:6;1533:47;;-1:-1:-1;1567:1:0;1560:8;;1533:47;1590:9;1602:5;1606:1;1602;:5;:::i;:::-;1590:17;-1:-1:-1;1635:1:0;1626:5;1630:1;1590:17;1626:5;:::i;:::-;:10;1618:56;;;;-1:-1:-1;;;1618:56:0;;12453:2:1;1618:56:0;;;12435:21:1;12492:2;12472:18;;;12465:30;12531:34;12511:18;;;12504:62;-1:-1:-1;;;12582:18:1;;;12575:31;12623:19;;1618:56:0;12425:223:1;22312:1130:0;11438:6;:13;;-1:-1:-1;;11438:13:0;;;;;22490:17:::1;::::0;22468::::1;::::0;11438:13;;22420:89:::1;::::0;22468:40:::1;::::0;:21:::1;:40::i;:::-;22420:17;::::0;:43:::1;::::0;22442:20;22420:21:::1;:43::i;:89::-;22397:112:::0;-1:-1:-1;22573:12:0::1;22589:19;22397:112:::0;22606:1:::1;22589:16;:19::i;:::-;22573:35:::0;-1:-1:-1;22619:17:0::1;22639:30;:20:::0;22573:35;22639:24:::1;:30::i;:::-;22619:50:::0;-1:-1:-1;22972:21:0::1;23038:27;22619:50:::0;23038:16:::1;:27::i;:::-;23196:18;23217:80;23277:19;:4:::0;23286:9;23277:8:::1;:19::i;:::-;23218:53;23266:4:::0;23219:41:::1;:21;23245:14:::0;23219:25:::1;:41::i;23217:80::-;23355:21;::::0;23196:101;;-1:-1:-1;;;;23355:21:0;::::1;;;23351:84;;;23393:30;23406:4;23412:10;23393:12;:30::i;24558:699::-:0;24701:7;24696:328;;24759:1;24730:30;;;24779:26;;;:30;;;24828:27;;;:31;;;24880:27;;;:31;;;24930:27;;;:31;;;24980:28;;;:32;24696:328;25048:13;;-1:-1:-1;;;;;25038:23:0;;;25048:13;;25038:23;25034:216;;;25077:59;25098:6;25106:9;25117:6;25125:10;25077:20;:59::i;:::-;25034:216;;;25178:60;25200:6;25208:9;25219:6;25227:10;25178:21;:60::i;31388:164::-;31430:7;31451:15;31468;31487:19;:17;:19::i;:::-;31450:56;;-1:-1:-1;31450:56:0;-1:-1:-1;31524:20:0;31450:56;;31524:11;:20::i;:::-;31517:27;;;;31388:164;:::o;1113:136::-;1171:7;1198:43;1202:1;1205;1198:43;;;;;;;;;;;;;;;;;:3;:43::i;21842:460::-;21955:15;;21923:62;;21940:4;;-1:-1:-1;;;;;21955:15:0;21973:11;21923:8;:62::i;:::-;22028:15;;-1:-1:-1;;;;;22028:15:0;:31;22067:9;22102:4;22124:11;22028:15;;22242:7;2437;2464:6;-1:-1:-1;;;;;2464:6:0;;2399:79;22242:7;22028:266;;;;;;-1:-1:-1;;;;;;22028:266:0;;;-1:-1:-1;;;;;5694:15:1;;;22028:266:0;;;5676:34:1;5726:18;;;5719:34;;;;5769:18;;;5762:34;;;;5812:18;;;5805:34;5876:15;;;5855:19;;;5848:44;22266:15:0;5908:19:1;;;5901:35;5610:19;;22028:266:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25265:584::-;25396:24;;:::i;:::-;25441:34;25455:7;25464:10;25441:13;:34::i;:::-;25524:15;;;;-1:-1:-1;;;;;25504:15:0;;;;;;:7;:15;;;;;;25431:44;;-1:-1:-1;25504:36:0;;:15;:19;:36::i;:::-;-1:-1:-1;;;;;25486:15:0;;;;;;;:7;:15;;;;;;:54;;;;25595:23;;;;25572:18;;;;;;;;;;:47;;:22;:47::i;:::-;-1:-1:-1;;;;;25551:18:0;;;;;;:7;:18;;;;;;;;:68;;;;25645:18;;;25630:34;;:14;:34::i;:::-;25675:53;25687:7;:19;;;25708:7;:19;;;25675:11;:53::i;:::-;25739:34;25754:7;:18;;;25739:14;:34::i;:::-;25806:9;-1:-1:-1;;;;;25789:52:0;25798:6;-1:-1:-1;;;;;25789:52:0;;25817:7;:23;;;25789:52;;;;17302:25:1;;17290:2;17275:18;;17257:76;25789:52:0;;;;;;;;25265:584;;;;;:::o;25857:732::-;25989:25;;:::i;:::-;26036:35;26051:7;26060:10;26036:14;:35::i;:::-;26120:16;;;;-1:-1:-1;;;;;26100:15:0;;;;;;:7;:15;;;;;;26025:46;;-1:-1:-1;26100:37:0;;:15;:19;:37::i;:::-;-1:-1:-1;;;;;26082:15:0;;;;;;;:7;:15;;;;;;:55;;;;26192:24;;;;26169:18;;;;;;;;;;:48;;:22;:48::i;:::-;-1:-1:-1;;;;;26148:18:0;;;;;;:7;:18;;;;;:69;;;;10433:42;26232:25;26228:127;;;26318:24;;-1:-1:-1;;;;;26295:18:0;;26318:24;26295:18;;;:7;:18;;;;;;:48;;:22;:48::i;:::-;-1:-1:-1;;;;;26274:18:0;;;;;;:7;:18;;;;;:69;26228:127;26365:35;26380:8;:19;;;26365:14;:35::i;31560:475::-;31658:7;;10433:42;31611:7;31716:21;;;:7;:21;;;;31611:7;;;;7825:21;;31716:31;-1:-1:-1;31716:31:0;:66;;-1:-1:-1;10433:42:0;31751:21;;:7;:21;;;;:31;-1:-1:-1;31716:66:0;31712:97;;;-1:-1:-1;;31792:7:0;;;7825:21;;-1:-1:-1;31560:475:0;-1:-1:-1;31560:475:0:o;31712:97::-;10433:42;31842:21;;:7;:21;;;;31830:34;;:7;;:11;:34::i;:::-;10433:42;31897:21;;:7;:21;;;;31820:44;;-1:-1:-1;31885:34:0;;:7;;:11;:34::i;:::-;31944:7;;31875:44;;-1:-1:-1;31944:20:0;;7825:21;31944:11;:20::i;:::-;31934:7;:30;31930:61;;;-1:-1:-1;;31974:7:0;;;7825:21;;-1:-1:-1;31560:475:0;-1:-1:-1;31560:475:0:o;31930:61::-;32010:7;;32019;;-1:-1:-1;31560:475:0;-1:-1:-1;31560:475:0:o;29386:776::-;29478:16;;:::i;:::-;29507:27;29537:108;29552:7;29561:10;:26;;;29589:10;:27;;;29618:10;:26;;;29537:14;:108::i;:::-;29507:138;;29656:26;;:::i;:::-;29693:19;29715:10;:8;:10::i;:::-;29693:32;;29808:97;29823:7;29832;:18;;;29852:7;:19;;;29873:7;:18;;;29893:11;29808:14;:97::i;:::-;29783:21;;;29736:169;29756:25;;;29736:169;29737:17;;;29736:169;-1:-1:-1;29939:18:0;;;;;29916:20;;;:41;29992:19;;;;;29968:21;;;:43;-1:-1:-1;30045:18:0;;;;30022:20;;;:41;30102:23;;30074:51;;29783:21;29386:776;-1:-1:-1;;;29386:776:0:o;26780:236::-;26843:19;26865:10;:8;:10::i;:::-;26843:32;-1:-1:-1;26886:18:0;26907:27;:10;26843:32;26907:14;:27::i;:::-;26986:4;26970:22;;;;:7;:22;;;;;;26886:48;;-1:-1:-1;26970:38:0;;26886:48;26970:26;:38::i;:::-;26961:4;26945:22;;;;:7;:22;;;;;:63;-1:-1:-1;;;26780:236:0:o;26597:175::-;26689:7;;:24;;26701:11;26689;:24::i;:::-;26679:7;:34;26737:10;;:27;;26752:11;26737:14;:27::i;:::-;26724:10;:40;-1:-1:-1;;26597:175:0:o;27332:791::-;27425:16;;:::i;:::-;27454:29;27486:112;27502:7;27511:10;:27;;;27540:10;:28;;;27570:10;:27;;;30170:616;30300:19;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30300:19:0;30332:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30332:28:0;30393:34;30423:3;30393:25;:7;30405:12;30393:11;:25::i;:34::-;30371:19;;;:56;30461:35;30492:3;30461:26;:7;30473:13;30461:11;:26::i;:35::-;30438:20;;;:58;30529:34;30559:3;30529:25;:7;30541:12;30529:11;:25::i;:34::-;30507:19;;;:56;30613:19;;;;30601:32;;:7;;:11;:32::i;:::-;30574:59;;;30672:20;;;;;30574:8;;30644:48;;30672:20;;30644:48;:::i;:::-;;;-1:-1:-1;30731:19:0;;;;30703:47;;30731:8;;30703:47;;30731:19;;30703:47;:::i;:::-;;;-1:-1:-1;30769:8:0;30170:616;-1:-1:-1;;;;;30170:616:0:o;30794:586::-;30939:7;;;;30995:24;:7;31007:11;30995;:24::i;:::-;30977:42;-1:-1:-1;31030:18:0;31051:27;:10;31066:11;31051:14;:27::i;:::-;31030:48;-1:-1:-1;31089:19:0;31111:28;:11;31127;31111:15;:28::i;:::-;31089:50;-1:-1:-1;31150:18:0;31171:27;:10;31186:11;31171:14;:27::i;:::-;31150:48;-1:-1:-1;31209:23:0;31235:40;31263:11;31235:23;:7;31247:10;31235:11;:23::i;:::-;:27;;:40::i;:::-;31209:66;-1:-1:-1;31286:29:0;31305:10;31209:66;31286:29;:::i;:::-;31334:7;;;;-1:-1:-1;31360:11:0;;-1:-1:-1;30794:586:0;;-1:-1:-1;;;;;;;;;30794:586:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:188:1:-;93:13;;-1:-1:-1;;;;;135:42:1;;125:53;;115:2;;192:1;189;182:12;115:2;74:128;;;:::o;207:257::-;266:6;319:2;307:9;298:7;294:23;290:32;287:2;;;340:6;332;325:22;287:2;384:9;371:23;403:31;428:5;403:31;:::i;469:261::-;539:6;592:2;580:9;571:7;567:23;563:32;560:2;;;613:6;605;598:22;560:2;650:9;644:16;669:31;694:5;669:31;:::i;1005:398::-;1073:6;1081;1134:2;1122:9;1113:7;1109:23;1105:32;1102:2;;;1155:6;1147;1140:22;1102:2;1199:9;1186:23;1218:31;1243:5;1218:31;:::i;:::-;1268:5;-1:-1:-1;1325:2:1;1310:18;;1297:32;1338:33;1297:32;1338:33;:::i;:::-;1390:7;1380:17;;;1092:311;;;;;:::o;1408:466::-;1485:6;1493;1501;1554:2;1542:9;1533:7;1529:23;1525:32;1522:2;;;1575:6;1567;1560:22;1522:2;1619:9;1606:23;1638:31;1663:5;1638:31;:::i;:::-;1688:5;-1:-1:-1;1745:2:1;1730:18;;1717:32;1758:33;1717:32;1758:33;:::i;:::-;1512:362;;1810:7;;-1:-1:-1;;;1864:2:1;1849:18;;;;1836:32;;1512:362::o;1879:325::-;1947:6;1955;2008:2;1996:9;1987:7;1983:23;1979:32;1976:2;;;2029:6;2021;2014:22;1976:2;2073:9;2060:23;2092:31;2117:5;2092:31;:::i;:::-;2142:5;2194:2;2179:18;;;;2166:32;;-1:-1:-1;;;1966:238:1:o;2209:293::-;2265:6;2318:2;2306:9;2297:7;2293:23;2289:32;2286:2;;;2339:6;2331;2324:22;2286:2;2383:9;2370:23;2436:5;2429:13;2422:21;2415:5;2412:32;2402:2;;2463:6;2455;2448:22;2507:470;2594:6;2602;2610;2663:2;2651:9;2642:7;2638:23;2634:32;2631:2;;;2684:6;2676;2669:22;2631:2;2712:40;2742:9;2712:40;:::i;:::-;2702:50;;2771:49;2816:2;2805:9;2801:18;2771:49;:::i;:::-;2761:59;;2863:2;2852:9;2848:18;2842:25;2907:10;2900:5;2896:22;2889:5;2886:33;2876:2;;2938:6;2930;2923:22;2876:2;2966:5;2956:15;;;2621:356;;;;;:::o;2982:190::-;3041:6;3094:2;3082:9;3073:7;3069:23;3065:32;3062:2;;;3115:6;3107;3100:22;3062:2;-1:-1:-1;3143:23:1;;3052:120;-1:-1:-1;3052:120:1:o;3177:194::-;3247:6;3300:2;3288:9;3279:7;3275:23;3271:32;3268:2;;;3321:6;3313;3306:22;3268:2;-1:-1:-1;3349:16:1;;3258:113;-1:-1:-1;3258:113:1:o;3376:258::-;3444:6;3452;3505:2;3493:9;3484:7;3480:23;3476:32;3473:2;;;3526:6;3518;3511:22;3473:2;-1:-1:-1;;3554:23:1;;;3624:2;3609:18;;;3596:32;;-1:-1:-1;3463:171:1:o;3639:326::-;3716:6;3724;3732;3785:2;3773:9;3764:7;3760:23;3756:32;3753:2;;;3806:6;3798;3791:22;3753:2;-1:-1:-1;;3834:23:1;;;3904:2;3889:18;;3876:32;;-1:-1:-1;3955:2:1;3940:18;;;3927:32;;3743:222;-1:-1:-1;3743:222:1:o;3970:316::-;4058:6;4066;4074;4127:2;4115:9;4106:7;4102:23;4098:32;4095:2;;;4148:6;4140;4133:22;4095:2;4182:9;4176:16;4166:26;;4232:2;4221:9;4217:18;4211:25;4201:35;;4276:2;4265:9;4261:18;4255:25;4245:35;;4085:201;;;;;:::o;4291:533::-;4395:6;4403;4411;4419;4427;4435;4488:3;4476:9;4467:7;4463:23;4459:33;4456:2;;;4510:6;4502;4495:22;4456:2;-1:-1:-1;;4538:23:1;;;4608:2;4593:18;;4580:32;;-1:-1:-1;4659:2:1;4644:18;;4631:32;;4710:2;4695:18;;4682:32;;-1:-1:-1;4761:3:1;4746:19;;4733:33;;-1:-1:-1;4813:3:1;4798:19;4785:33;;-1:-1:-1;4446:378:1;-1:-1:-1;4446:378:1:o;4829:293::-;4897:6;4950:2;4938:9;4929:7;4925:23;4921:32;4918:2;;;4971:6;4963;4956:22;4918:2;5008:9;5002:16;5058:4;5051:5;5047:16;5040:5;5037:27;5027:2;;5083:6;5075;5068:22;6139:603;6251:4;6280:2;6309;6298:9;6291:21;6341:6;6335:13;6384:6;6379:2;6368:9;6364:18;6357:34;6409:4;6422:140;6436:6;6433:1;6430:13;6422:140;;;6531:14;;;6527:23;;6521:30;6497:17;;;6516:2;6493:26;6486:66;6451:10;;6422:140;;;6580:6;6577:1;6574:13;6571:2;;;6650:4;6645:2;6636:6;6625:9;6621:22;6617:31;6610:45;6571:2;-1:-1:-1;6726:2:1;6705:15;-1:-1:-1;;6701:29:1;6686:45;;;;6733:2;6682:54;;6260:482;-1:-1:-1;;;6260:482:1:o;7151:403::-;7353:2;7335:21;;;7392:2;7372:18;;;7365:30;7431:34;7426:2;7411:18;;7404:62;-1:-1:-1;;;7497:2:1;7482:18;;7475:37;7544:3;7529:19;;7325:229::o;10952:469::-;11154:2;11136:21;;;11193:2;11173:18;;;11166:30;11232:34;11227:2;11212:18;;11205:62;11303:34;11298:2;11283:18;;11276:62;-1:-1:-1;;;11369:3:1;11354:19;;11347:32;11411:3;11396:19;;11126:295::o;12653:356::-;12855:2;12837:21;;;12874:18;;;12867:30;12933:34;12928:2;12913:18;;12906:62;13000:2;12985:18;;12827:182::o;14117:412::-;14319:2;14301:21;;;14358:2;14338:18;;;14331:30;14397:34;14392:2;14377:18;;14370:62;-1:-1:-1;;;14463:2:1;14448:18;;14441:46;14519:3;14504:19;;14291:238::o;17338:983::-;17600:4;17648:3;17637:9;17633:19;17679:6;17668:9;17661:25;17705:2;17743:6;17738:2;17727:9;17723:18;17716:34;17786:3;17781:2;17770:9;17766:18;17759:31;17810:6;17845;17839:13;17876:6;17868;17861:22;17914:3;17903:9;17899:19;17892:26;;17953:2;17945:6;17941:15;17927:29;;17974:4;17987:195;18001:6;17998:1;17995:13;17987:195;;;18066:13;;-1:-1:-1;;;;;18062:39:1;18050:52;;18157:15;;;;18122:12;;;;18098:1;18016:9;17987:195;;;-1:-1:-1;;;;;;;18238:32:1;;;;18233:2;18218:18;;18211:60;-1:-1:-1;;;18302:3:1;18287:19;18280:35;18199:3;17609:712;-1:-1:-1;;;17609:712:1:o;19055:128::-;19095:3;19126:1;19122:6;19119:1;19116:13;19113:2;;;19132:18;;:::i;:::-;-1:-1:-1;19168:9:1;;19103:80::o;19188:217::-;19228:1;19254;19244:2;;-1:-1:-1;;;19279:31:1;;19333:4;19330:1;19323:15;19361:4;19286:1;19351:15;19244:2;-1:-1:-1;19390:9:1;;19234:171::o;19410:422::-;19499:1;19542:5;19499:1;19556:270;19577:7;19567:8;19564:21;19556:270;;;19636:4;19632:1;19628:6;19624:17;19618:4;19615:27;19612:2;;;19645:18;;:::i;:::-;19695:7;19685:8;19681:22;19678:2;;;19715:16;;;;19678:2;19794:22;;;;19754:15;;;;19556:270;;;19560:3;19474:358;;;;;:::o;19837:140::-;19895:5;19924:47;19965:4;19955:8;19951:19;19945:4;20031:5;20061:8;20051:2;;-1:-1:-1;20102:1:1;20116:5;;20051:2;20150:4;20140:2;;-1:-1:-1;20187:1:1;20201:5;;20140:2;20232:4;20250:1;20245:59;;;;20318:1;20313:130;;;;20225:218;;20245:59;20275:1;20266:10;;20289:5;;;20313:130;20350:3;20340:8;20337:17;20334:2;;;20357:18;;:::i;:::-;-1:-1:-1;;20413:1:1;20399:16;;20428:5;;20225:218;;20527:2;20517:8;20514:16;20508:3;20502:4;20499:13;20495:36;20489:2;20479:8;20476:16;20471:2;20465:4;20462:12;20458:35;20455:77;20452:2;;;-1:-1:-1;20564:19:1;;;20596:5;;20452:2;20643:34;20668:8;20662:4;20643:34;:::i;:::-;20713:6;20709:1;20705:6;20701:19;20692:7;20689:32;20686:2;;;20724:18;;:::i;:::-;20762:20;;20041:747;-1:-1:-1;;;20041:747:1:o;20793:168::-;20833:7;20899:1;20895;20891:6;20887:14;20884:1;20881:21;20876:1;20869:9;20862:17;20858:45;20855:2;;;20906:18;;:::i;:::-;-1:-1:-1;20946:9:1;;20845:116::o;20966:125::-;21006:4;21034:1;21031;21028:8;21025:2;;;21039:18;;:::i;:::-;-1:-1:-1;21076:9:1;;21015:76::o;21096:127::-;21157:10;21152:3;21148:20;21145:1;21138:31;21188:4;21185:1;21178:15;21212:4;21209:1;21202:15;21228:131;-1:-1:-1;;;;;21303:31:1;;21293:42;;21283:2;;21349:1;21346;21339:12

Swarm Source

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