Contract 0x85469cb22c5e8a063106c987c36c7587810e4bf1

 

Contract Overview

Island Girl: IGIRL Token
Balance:
1.351615842534020102 BNB

BNB Value:
$511.72 (@ $378.60/BNB)

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5e2bd0d3bb0a7f9cae14b9ebe2f28cd020730c951200c78eb3567d281c8c3205Transfer146762782022-01-25 14:39:482 hrs 51 mins ago0xa9ce2a58e2434c460cf804bd90cd6c9fd945167d IN  Island Girl: IGIRL Token0 BNB0.000691675
0x08c071686b042639fd8cc51f5ff400f9780f2e3ff11a8b4b83f5528d03d55b04Approve146752142022-01-25 13:46:363 hrs 44 mins ago0xe3803b0017e3199ca4d4177d0bc50c68a43ad0a5 IN  Island Girl: IGIRL Token0 BNB0.00022106
0x2c4c4e33df3de51f3b1ce3dc854004c9e953a38010a458642afba2a8833c4809Approve146746202022-01-25 13:16:524 hrs 14 mins ago0xd12287df839d09ec9d241bf00b3929816287bd4d IN  Island Girl: IGIRL Token0 BNB0.000311836
0x098330ec574114a0298a0e1c3c6f8c529746be09ce5369afe3589cc60c501ee7Approve146738622022-01-25 12:38:584 hrs 52 mins ago0xa5ab75dafc562ceb254bb8950be39e3b1b7557cf IN  Island Girl: IGIRL Token0 BNB0.00022274
0xe09cc13697b14bbd7b0c9123cccc1092eeff968dcff8914b82d4b269d0f0ef7eApprove146728172022-01-25 11:46:435 hrs 44 mins ago0x4bd6a301d70f8d78da2fd47f96e2faa437c39bd8 IN  Island Girl: IGIRL Token0 BNB0.00022274
0x102749e92dd30e2a9758dd00c2c835c482c75bb926bf57b781e6ecf8ecbba3b0Transfer146674872022-01-25 7:20:0310 hrs 11 mins ago0x497f07eae0cfc1d30102f112470038a324c789f6 IN  Island Girl: IGIRL Token0 BNB0.000691555
0xc3b38094dbe5da96504a7207c0cbdf23e3f0c5545aa78fd62734f8b4af989a13Transfer146673542022-01-25 7:13:2410 hrs 18 mins ago0x1c8c1483a5b13e0ed39f21c4dcc3abcb75ea3b1d IN  Island Girl: IGIRL Token0 BNB0.000691555
0xf4e6f069b74e14fbb251837e736ac4b4d4450aca2ed71c9dae775eea122f49e4Approve146667472022-01-25 6:43:0010 hrs 48 mins ago0x1c8c1483a5b13e0ed39f21c4dcc3abcb75ea3b1d IN  Island Girl: IGIRL Token0 BNB0.00022106
0x925d7c3bf37759d359b8609e28a059bc4bb833fae450eb05509ddb2264048fdaTransfer146666252022-01-25 6:36:5410 hrs 54 mins ago0xa5ca89e16b8fc02a1a9109359bcdb4dd2c10d92e IN  Island Girl: IGIRL Token0 BNB0.000766555
0xc6e36cee30fcc1aa0ebaf664a53d780eecb4d2f5a0882187f4a0ae9e4492a64bTransfer146656062022-01-25 5:45:5711 hrs 45 mins ago0xe38a255ff858249c14185c8965d8ce52b1e91417 IN  Island Girl: IGIRL Token0 BNB0.000691675
0x19ba2c740400716b7dbccba27a18ff08c1a83eab1f1fb7c496f7d60f1e39bf93Approve146655412022-01-25 5:42:4211 hrs 48 mins ago0xe38a255ff858249c14185c8965d8ce52b1e91417 IN  Island Girl: IGIRL Token0 BNB0.00022274
0xea2dcc353450c83803fad82f93e775f368237993472936aeb2a41f15d4fb7d0bTransfer146650412022-01-25 5:17:4212 hrs 13 mins ago0x49ad09df2c73cdfd92caf3edb8338f9e15dc05c9 IN  Island Girl: IGIRL Token0 BNB0.000691675
0xa3b7b72cd6aeb0508a276a4dccd21fb9ab104fb56c1e15234a84d4737063b42cTransfer146645132022-01-25 4:50:4212 hrs 40 mins ago0xe159e0de06ea9a9cc5c8a8c23d59ca4678110543 IN  Island Girl: IGIRL Token0 BNB0.000691615
0x510700f157ce467e709c178ec162fddd111090d8d2c6d55cf156cddc135e708aTransfer146643742022-01-25 4:43:4512 hrs 47 mins ago0x8c029f67bcea21257965745b4d8e1452376943eb IN  Island Girl: IGIRL Token0 BNB0.003483825
0x5aec4d8b2bc1321ef17014ed945dcf06d274b06b567aacd27751b4ad2c1dec5aApprove146641842022-01-25 4:34:1512 hrs 57 mins ago0x176ac29803a5fb6d1a7a35694f16ef01907d5680 IN  Island Girl: IGIRL Token0 BNB0.00022274
0x184c2af12ce267c327b1c8925af97d3db33362c3b6b5852c88cd75bca6654cedApprove146632532022-01-25 3:47:4113 hrs 43 mins ago0x09fbf4df1f348e8f3bc3527adc1d181f3253cea1 IN  Island Girl: IGIRL Token0 BNB0.00022106
0x0bf1831f902d26281447d9b0e680467f4d8b09ed4efeffddf44ea8f61bd50357Transfer146609912022-01-25 1:54:0815 hrs 37 mins ago0xe159e0de06ea9a9cc5c8a8c23d59ca4678110543 IN  Island Girl: IGIRL Token0 BNB0.000691615
0x949a098074e3194c22fe3cf8894fc599cf8053e958bae8b9c23f392865be9c95Transfer146609382022-01-25 1:51:2915 hrs 40 mins ago0x6379b5ec69fd112d43722376cd6b29665caf62c3 IN  Island Girl: IGIRL Token0 BNB0.000691615
0x2396436aa649395e9b60efe417116008444ff586e28ffbbc31ad7d01d19d0c57Approve146602132022-01-25 1:15:1416 hrs 16 mins ago0x09fbf4df1f348e8f3bc3527adc1d181f3253cea1 IN  Island Girl: IGIRL Token0 BNB0.00022106
0x49291283dcc4f052d386e346e2dc44502e670b2010eb73c530b424ced4236823Approve146589752022-01-25 0:13:2017 hrs 18 mins ago0x09fbf4df1f348e8f3bc3527adc1d181f3253cea1 IN  Island Girl: IGIRL Token0 BNB0.00022106
0xb23ccefcb5e59cd51909aea384b5079fc9a3cfd38b9cd2ac139af86766d8cdffApprove146589002022-01-25 0:09:3517 hrs 21 mins ago0x09fbf4df1f348e8f3bc3527adc1d181f3253cea1 IN  Island Girl: IGIRL Token0 BNB0.00012506
0xb0d39acb638483348cc563b0fe6739679b2250ddb2750b6e5f12c4ed020d90d3Approve146588992022-01-25 0:09:3217 hrs 21 mins ago0x09fbf4df1f348e8f3bc3527adc1d181f3253cea1 IN  Island Girl: IGIRL Token0 BNB0.00022106
0x81b1b565b3c556bc43a30ce41853653cbe5d4522e2c893ac9b64c1cbfaf74008Approve146588622022-01-25 0:07:4117 hrs 23 mins ago0x09fbf4df1f348e8f3bc3527adc1d181f3253cea1 IN  Island Girl: IGIRL Token0 BNB0.00022106
0xf41b7d2c38f2e4fd99ab63e6cd948bd661abb1bb223149d8bd6b2293b6ba499dApprove146588362022-01-25 0:06:2317 hrs 25 mins ago0x09fbf4df1f348e8f3bc3527adc1d181f3253cea1 IN  Island Girl: IGIRL Token0 BNB0.00022106
0x2ef398adba10cf1879b643811a16cec45de150106b5dff8229db3c718dc225dfApprove146585052022-01-24 23:49:5017 hrs 41 mins ago0x5e831b7687e5864489f764c18de39399d91f3ecd IN  Island Girl: IGIRL Token0 BNB0.00022274
[ Download CSV Export 

OVERVIEW

IslandGirl is a community-driven token on Binance Smart Chain. Users can simply hold to earn and watch $IGIRL grow with every transaction.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x510700f157ce467e709c178ec162fddd111090d8d2c6d55cf156cddc135e708a146643742022-01-25 4:43:4512 hrs 47 mins ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.000643514415142105 BNB
0x510700f157ce467e709c178ec162fddd111090d8d2c6d55cf156cddc135e708a146643742022-01-25 4:43:4512 hrs 47 mins ago Island Girl: IGIRL Token PancakeSwap: Router v20.261216490596198818 BNB
0x510700f157ce467e709c178ec162fddd111090d8d2c6d55cf156cddc135e708a146643742022-01-25 4:43:4512 hrs 47 mins ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.261216490596198818 BNB
0x8c9d2224f0a9cb73dd65616f56bba484e7bbee9a147e8a06118839870b750fe2145874932022-01-22 12:33:483 days 4 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.000891427670434365 BNB
0x8c9d2224f0a9cb73dd65616f56bba484e7bbee9a147e8a06118839870b750fe2145874932022-01-22 12:33:483 days 4 hrs ago Island Girl: IGIRL Token PancakeSwap: Router v20.30644976260585573 BNB
0x8c9d2224f0a9cb73dd65616f56bba484e7bbee9a147e8a06118839870b750fe2145874932022-01-22 12:33:483 days 4 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.30644976260585573 BNB
0x4b560057258b4572004e6c05e1c478fbbf6790d99c24d5e55979f2ea221a3ba0145311302022-01-20 13:26:105 days 4 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.000871085430375277 BNB
0x4b560057258b4572004e6c05e1c478fbbf6790d99c24d5e55979f2ea221a3ba0145311302022-01-20 13:26:105 days 4 hrs ago Island Girl: IGIRL Token PancakeSwap: Router v20.300973855335556969 BNB
0x4b560057258b4572004e6c05e1c478fbbf6790d99c24d5e55979f2ea221a3ba0145311302022-01-20 13:26:105 days 4 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.300973855335556969 BNB
0x15f3c4baf294993704a98b008577de0dc76844e0bcf37d0db7e28539574ca840144502712022-01-17 17:32:407 days 23 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.00127531713404365 BNB
0x15f3c4baf294993704a98b008577de0dc76844e0bcf37d0db7e28539574ca840144502712022-01-17 17:32:407 days 23 hrs ago Island Girl: IGIRL Token PancakeSwap: Router v20.365763881658212674 BNB
0x15f3c4baf294993704a98b008577de0dc76844e0bcf37d0db7e28539574ca840144502712022-01-17 17:32:407 days 23 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.365763881658212674 BNB
0x840ee31df640d4cca3276e62b3a74b19ad1cf2c0599c58280c68c420be691c5a143880402022-01-15 13:19:5910 days 4 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.001181356304830108 BNB
0x840ee31df640d4cca3276e62b3a74b19ad1cf2c0599c58280c68c420be691c5a143880402022-01-15 13:19:5910 days 4 hrs ago Island Girl: IGIRL Token PancakeSwap: Router v20.348933566190651891 BNB
0x840ee31df640d4cca3276e62b3a74b19ad1cf2c0599c58280c68c420be691c5a143880402022-01-15 13:19:5910 days 4 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.348933566190651891 BNB
0x30646a99161ab865af85dc9887a0660ef10bfd2de901f42cb47ede9e10d36dd4143554272022-01-14 10:07:0811 days 7 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.001135614050546669 BNB
0x30646a99161ab865af85dc9887a0660ef10bfd2de901f42cb47ede9e10d36dd4143554272022-01-14 10:07:0811 days 7 hrs ago Island Girl: IGIRL Token PancakeSwap: Router v20.34055319713024947 BNB
0x30646a99161ab865af85dc9887a0660ef10bfd2de901f42cb47ede9e10d36dd4143554272022-01-14 10:07:0811 days 7 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.34055319713024947 BNB
0xac275fde22d1744a7ec2afd9ee83c8d384eefe550b2d8b636db728cfff7e8e2f143184432022-01-13 3:13:5112 days 14 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.001120447219340819 BNB
0xac275fde22d1744a7ec2afd9ee83c8d384eefe550b2d8b636db728cfff7e8e2f143184432022-01-13 3:13:5112 days 14 hrs ago Island Girl: IGIRL Token PancakeSwap: Router v20.3359794606289634 BNB
0xac275fde22d1744a7ec2afd9ee83c8d384eefe550b2d8b636db728cfff7e8e2f143184432022-01-13 3:13:5112 days 14 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.3359794606289634 BNB
0xf2725f84f15e5eafbce0630b6b173a6022b41f0a03307cc64a258716e270e095142831412022-01-11 21:44:5313 days 19 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.001242368836279106 BNB
0xf2725f84f15e5eafbce0630b6b173a6022b41f0a03307cc64a258716e270e095142831412022-01-11 21:44:5313 days 19 hrs ago Island Girl: IGIRL Token PancakeSwap: Router v20.352838146271794319 BNB
0xf2725f84f15e5eafbce0630b6b173a6022b41f0a03307cc64a258716e270e095142831412022-01-11 21:44:5313 days 19 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.352838146271794319 BNB
0x9dee66ea68b8b353d765d550acad6469306463bf5f102a80af5c6f6d2c31e436142639172022-01-11 5:41:2114 days 11 hrs ago PancakeSwap: Router v2 Island Girl: IGIRL Token0.001581496109612813 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
IslandGirl

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 * 
 * 
#IGIRL


 ________  ______   __       ________   ___   __    ______       _______    ________  ______    __          
/_______/\/_____/\ /_/\     /_______/\ /__/\ /__/\ /_____/\     /______/\  /_______/\/_____/\  /_/\         
\__.::._\/\::::_\/_\:\ \    \::: _  \ \\::\_\\  \ \\:::_ \ \    \::::__\/__\__.::._\/\:::_ \ \ \:\ \        
   \::\ \  \:\/___/\\:\ \    \::(_)  \ \\:. `-\  \ \\:\ \ \ \    \:\ /____/\  \::\ \  \:(_) ) )_\:\ \       
   _\::\ \__\_::._\:\\:\ \____\:: __  \ \\:. _    \ \\:\ \ \ \    \:\\_  _\/  _\::\ \__\: __ `\ \\:\ \____  
  /__\::\__/\ /____\:\\:\/___/\\:.\ \  \ \\. \`-\  \ \\:\/.:| |    \:\_\ \ \ /__\::\__/\\ \ `\ \ \\:\/___/\ 
  \________\/ \_____\/ \_____\/ \__\/\__\/ \__\/ \__\/ \____/_/     \_____\/ \________\/ \_\/ \_\/ \_____\/ 
  

   2% REWARDS IN BUSD
   2% LIQUIDITY
   6% MARKETING 
  
   

   Stealth launched, Liquidity locked forever
   📱 Telegram: https://t.me/islandgirltoken



 */


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

interface IERC20 {

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


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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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


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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


library Address {
  
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }
    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        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 Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

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

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


// pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

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

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

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

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


  contract IslandGirl is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address public deadAddress = 0x000000000000000000000000000000000000dEaD;
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromMarketFee;
    mapping(address => bool) public _isBlacklisted;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000 * 10**6 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Island Girl";
    string private _symbol = "IGIRL";
    uint8 private _decimals = 9;
    
    //default fee
    uint256 public _taxFee = 2;
    uint256 public _liquidityFee = 2;
    uint256 public _marketFee = 6;
    uint256 public _burnFee = 0;
    uint256 private _previousTaxFee = _taxFee;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 private _previousMarketFee = _marketFee;
    uint256 private _previousBurnFee = _burnFee;
    
    //holders
    uint256 public _buyTaxFee = 2;
    uint256 public _sellTaxFee = 2;
    uint256 public _previousBuyTaxFee = _buyTaxFee;
    uint256 public _previousSellTaxFee = _sellTaxFee;
    
    //liquidity
    uint256 public _buyLiquidityFee = 2;
    uint256 public _sellLiquidityFee = 2;
    uint256 public _previousBuyLiquidityFee = _buyLiquidityFee;
    uint256 public _previousSellLiquidityFee = _sellLiquidityFee;
    
    //marketing wallet
    address public immutable BUSD = address(0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56); //Binance-pegged BUSD
    address public _marketingWalletAddress = 0xa9Ce2A58E2434C460cF804bd90cd6C9fD945167d;

    uint256 public _buyMarketFee = 6;
    uint256 public _sellMarketFee = 6;
    uint256 public _previousBuyMarketFee = _buyMarketFee;
    uint256 public _previousSellMarketFee = _sellMarketFee;
    
    //burn
    uint256 public _buyBurnFee  = 0;
    uint256 public _sellBurnFee = 0;
    uint256 public _previousBuyBurnFee = _sellBurnFee;
    uint256 public _previousSellBurnFee = _buyBurnFee;

    
    uint256 public _maxTxAmount = 10 * 10**6 * 10**9;   // 1% from tSupply
    uint256 private numTokensSellToAddToLiquidity = 10 * 10**5  * 10**9;   // 0.1% from tSupply
    

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        _rOwned[_msgSender()] = _rTotal;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);

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

        uniswapV2Router = _uniswapV2Router;
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
    function name() public view returns (string memory) {
        return _name;
    }
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    function decimals() public view returns (uint8) {
        return _decimals;
    }
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

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

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

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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    function excludeFromMarketFee(address account) public onlyOwner {
        _isExcludedFromMarketFee[account] = true;
    }
    function excludeFromMarketFeeList(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isExcludedFromMarketFee[addresses[i]] = true;
      }
    }
    function includeInMarketFee(address account) public onlyOwner {
        _isExcludedFromMarketFee[account] = false;
    }
    function includeFromMarketFeeList(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isExcludedFromMarketFee[addresses[i]] = false;
      }
    }
    function setBuyTaxFeePercent(uint256 buyTaxFee) external onlyOwner() {
        _buyTaxFee = buyTaxFee;
    }
    function setSellTaxFeePercent(uint256 sellTaxFee) external onlyOwner() {
        _sellTaxFee = sellTaxFee;
    }
    function setBuyLiquidityFeePercent(uint256 buyLiquidityFee) external onlyOwner() {
        _buyLiquidityFee = buyLiquidityFee;
    }
    function setSellLiquidityFeePercent(uint256 sellLiquidityFee) external onlyOwner() {
        _sellLiquidityFee = sellLiquidityFee;
    }
    function setBuyMarketFeePercent(uint256 buyMarketFee) external onlyOwner() {
        _buyMarketFee = buyMarketFee;
    }
    function setSellMarketFeePercent(uint256 sellMarketFee) external onlyOwner() {
        _sellMarketFee = sellMarketFee;
    }
    
    function setBuyBurnFeePercent(uint256 buyBurnFee) external onlyOwner() {
        _buyBurnFee = buyBurnFee;
    }
    
    function setMarketWallet(address marketWallet) external onlyOwner() {
        _marketingWalletAddress = marketWallet;
    }  
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**2
        );
    }
    function setBlacklistAddress(address account, bool value) external onlyOwner{
        _isBlacklisted[account] = value;
    }
    function addToBlackList(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isBlacklisted[addresses[i]] = true;
      }
    }
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    function disableAllBuyFees() external onlyOwner() {
        _buyMarketFee = 0;
        _buyBurnFee = 0;
        _buyTaxFee = 0;
        _buyLiquidityFee = 0;
    }
    function disableAllSellFees() external onlyOwner() {
        _sellMarketFee = 0;
        _sellBurnFee = 0;
        _sellTaxFee = 0;
        _sellLiquidityFee = 0;
    }
    function disableAllFees() external onlyOwner() {
        _taxFee = 0;
        _previousTaxFee = _taxFee;
        _liquidityFee = 0;
        _previousLiquidityFee = _liquidityFee;
        _burnFee = 0;
        _previousBurnFee = _taxFee;
        _marketFee = 0;
        _previousMarketFee = _marketFee;
        inSwapAndLiquify = false;
        emit SwapAndLiquifyEnabledUpdated(false);
    }

     //to recieve BNB from V2Router when swaping
    receive() external payable {}

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

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

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

/**

Are you writing a book?....
-- (c) by N
 */


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

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

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllBuySellFee() private {
        _previousBuyTaxFee = _buyTaxFee;
        _previousBuyBurnFee = _buyBurnFee;
        _previousBuyMarketFee = _buyMarketFee;
        _previousBuyLiquidityFee = _buyLiquidityFee;
        
        _previousSellTaxFee = _sellTaxFee;
        _previousSellBurnFee = _sellBurnFee;
        _previousSellMarketFee = _sellMarketFee;
        _previousSellLiquidityFee = _sellLiquidityFee;
        
        _buyMarketFee = 0;
        _buyBurnFee = 0;
        _buyTaxFee = 0;
        _buyLiquidityFee = 0;
    
        _sellMarketFee = 0;
        _sellBurnFee = 0;
        _sellTaxFee = 0;
        _sellLiquidityFee = 0;
    }
    function restoreAllBuySellFee() private {
        _buyTaxFee = _previousBuyTaxFee;
        _buyBurnFee = _previousBuyBurnFee;
        _buyMarketFee = _previousBuyMarketFee;
        _buyLiquidityFee = _previousBuyLiquidityFee;
        
        _sellTaxFee = _previousSellTaxFee;
        _sellBurnFee = _previousSellBurnFee;
        _sellMarketFee = _previousSellMarketFee;
        _sellLiquidityFee = _previousSellLiquidityFee;
        
    }
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0 && _marketFee == 0 && _burnFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        _previousBurnFee = _burnFee;
        _previousMarketFee = _marketFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
        _marketFee = 0;
        _burnFee = 0;
    }
    function restoreAllFee() private {
       _taxFee = _previousTaxFee;
       _liquidityFee = _previousLiquidityFee;
       _burnFee = _previousBurnFee;
       _marketFee = _previousMarketFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    
    function swapAndSendToFeeBUSD(uint256 tokens) private  {
        uint256 initialBUSDBalance = IERC20(BUSD).balanceOf(address(this));
        swapTokensForBUSD(tokens);
        uint256 newBalance = (IERC20(BUSD).balanceOf(address(this))).sub(initialBUSDBalance);
        IERC20(BUSD).transfer(_marketingWalletAddress, newBalance);
    }  
    function swapTokensForBUSD(uint256 tokenAmount) private {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = BUSD;

        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    function swapAndSendToFeeBnb(uint256 tokens) private  {
        uint256 initialBNBBalance = address(this).balance;
        swapTokensForEth(tokens);
        uint256 newBalance = (address(this).balance).sub(initialBNBBalance);
        payable(_marketingWalletAddress).transfer(newBalance);
    }
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); 
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
    // This contract is dope! Isn't it ?
    
    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlacklisted[from] && !_isBlacklisted[to], 'Blacklisted address');
        if(from != owner() && to != owner() && ! _isExcludedFromFee[to] && ! _isExcludedFromFee[from]) {
          require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
      
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if(contractTokenBalance >= _maxTxAmount)
        {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            //add liquidity
            swapAndLiquify(contractTokenBalance);
        }
        _tokenTransfer(from,to,amount);
    }
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
         
        bool takeFee = true; 
         
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            takeFee = false;
        }
        if(!takeFee){
            removeAllBuySellFee();
        }
        else{
            // Buy
            if(sender == uniswapV2Pair){
                _taxFee = _buyTaxFee;
                _liquidityFee = _buyLiquidityFee;
                _burnFee = _buyBurnFee;
                if(!_isExcludedFromMarketFee[recipient]){
                    _marketFee = _buyMarketFee;
                }
            }
            // Sell
            if(recipient == uniswapV2Pair){
                _taxFee = _sellTaxFee;
                _liquidityFee = _sellLiquidityFee;
                _burnFee = _sellBurnFee;
                if(!_isExcludedFromMarketFee[sender]){
                    _marketFee = _sellMarketFee;
                }
            }
        }
        uint256 burnAmt = amount.mul(_burnFee).div(100);
        uint256 marketAmt = amount.mul(_marketFee).div(100);
        uint256 finalAmount = amount.sub(burnAmt).sub(marketAmt);
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, finalAmount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, finalAmount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, finalAmount);
        } else {
            _transferStandard(sender, recipient, finalAmount);
        }
        removeAllFee();
        _transferStandard(sender, address(0) ,burnAmt);
       _transferStandard(sender, _marketingWalletAddress,marketAmt);
        if(!takeFee){
           restoreAllBuySellFee();
        }
    }
 

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

     //New Pancakeswap router version? Not a problem!
     function setRouterAddress(address newRouter) public onlyOwner() {
         IUniswapV2Router02 _newPancakeRouter = IUniswapV2Router02(newRouter);
         uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH());
         uniswapV2Router = _newPancakeRouter;
     }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BUSD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousBuyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousBuyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousBuyMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousBuyTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousSellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousSellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousSellMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_previousSellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromMarketFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"excludeFromMarketFeeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"includeFromMarketFeeList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInMarketFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyBurnFee","type":"uint256"}],"name":"setBuyBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"}],"name":"setBuyLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketFee","type":"uint256"}],"name":"setBuyMarketFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxFee","type":"uint256"}],"name":"setBuyTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketWallet","type":"address"}],"name":"setMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"name":"setSellLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellMarketFee","type":"uint256"}],"name":"setSellMarketFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxFee","type":"uint256"}],"name":"setSellTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052600380546001600160a01b03191661dead179055670de0b6b3a7640000600c8190556200003490600019620005b8565b620000429060001962000555565b600d5560408051808201909152600b8082526a125cdb185b990811da5c9b60aa1b60209092019182526200007991600f916200047d565b50604080518082019091526005808252641251d2549360da1b6020909201918252620000a8916010916200047d565b506011805460ff1916600917905560026012819055601381905560066014819055600060158190556016839055601783905560188290556019819055601a839055601b839055601c839055601d839055601e839055601f83905560208390556021929092557fe9e7cea3dedca5984780bafc599bd69add087d56000000000000000000000000608052602280546001600160a01b03191673a9ce2a58e2434c460cf804bd90cd6c9fd945167d179055602381905560248190556025819055602655602781905560288190556029819055602a55662386f26fc10000602b5566038d7ea4c68000602c55602e805460ff60a81b1916600160a81b179055348015620001b157600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600d543360009081526004602081815260409283902093909355815163c45a015560e01b815291517310ed43c718714eb63d5aa57b78b54704e256024e93849363c45a0155938181019391829003018186803b1580156200025357600080fd5b505afa15801562000268573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028e919062000523565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d757600080fd5b505afa158015620002ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000312919062000523565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200035b57600080fd5b505af115801562000370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000396919062000523565b602e80546001600160a01b03199081166001600160a01b0393841617909155602d8054909116918316919091179055600160076000620003de6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526007909252902080549091166001179055620004263390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200046e91815260200190565b60405180910390a350620005db565b8280546200048b906200057b565b90600052602060002090601f016020900481019282620004af5760008555620004fa565b82601f10620004ca57805160ff1916838001178555620004fa565b82800160010185558215620004fa579182015b82811115620004fa578251825591602001919060010190620004dd565b50620005089291506200050c565b5090565b5b808211156200050857600081556001016200050d565b6000602082840312156200053657600080fd5b81516001600160a01b03811681146200054e57600080fd5b9392505050565b6000828210156200057657634e487b7160e01b600052601160045260246000fd5b500390565b600181811c908216806200059057607f821691505b60208210811415620005b257634e487b7160e01b600052602260045260246000fd5b50919050565b600082620005d657634e487b7160e01b600052601260045260246000fd5b500690565b60805160601c6136ee620005fa60003960006107f101526136ee6000f3fe60806040526004361061043f5760003560e01c80636bc87c3a11610234578063a457c2d71161012e578063d543dbeb116100b6578063ea2f0b371161007a578063ea2f0b3714610ca6578063efcc52de14610cc6578063f2fde38b14610cdc578063f87625a014610cfc578063ff89757014610d1257600080fd5b8063d543dbeb14610bea578063dc44b6a014610c0a578063dc7c40a914610c20578063dd46706414610c40578063dd62ed3e14610c6057600080fd5b8063b6c52324116100fd578063b6c5232414610b5f578063c0b0fda214610b74578063c49b9a8014610b8a578063d0e0352314610baa578063d400edc414610bca57600080fd5b8063a457c2d714610aea578063a69df4b514610b0a578063a755516014610b1f578063a9059cbb14610b3f57600080fd5b80637d1db4a5116101bc57806395d89b411161018057806395d89b4114610a6a578063996c398514610a7f5780639c1c38ff14610a9f5780639d41dfa314610abf578063a401683e14610ad557600080fd5b80637d1db4a5146109d157806384d6ff2f146109e757806388790a68146109fd57806388f8202014610a135780638da5cb5b14610a4c57600080fd5b806373707bd91161020357806373707bd914610964578063741af87f1461097a578063773e4d491461098f5780637abdc1ca146109a55780637c58ba70146109bb57600080fd5b80636bc87c3a14610903578063701cf6f41461091957806370a082311461092f578063715018a61461094f57600080fd5b80632d838119116103455780634549b039116102cd57806352390c021161029157806352390c02146108545780635342acb41461087457806354332266146108ad5780635876ccc5146108cd5780636ac8b465146108ed57600080fd5b80634549b0391461079f578063470409e1146107bf578063484f4ea9146107df57806349bd5a5e146108135780634a74bb021461083357600080fd5b80633b124fe7116103145780633b124fe7146107095780633bd5d1731461071f5780634144d9e41461073f57806341cb87fc1461075f578063437823ec1461077f57600080fd5b80632d83811914610687578063313ce567146106a75780633685d419146106c957806339509351146106e957600080fd5b806313114a9d116103c85780631cdd3be3116103975780631cdd3be3146105e1578063200a692d1461061157806323b872dd1461062757806324f7f21a1461064757806327c8f8351461066757600080fd5b806313114a9d146105695780631694505e1461057e57806316f2f1a8146105b657806318160ddd146105cc57600080fd5b806306d96fbf1161040f57806306d96fbf146104c157806306fdde03146104e1578063095ea7b3146105035780630fda33491461053357806311889b761461054957600080fd5b8062c719031461044b578063030b96261461047457806304da48e91461048a5780630523d35b146104ac57600080fd5b3661044657005b600080fd5b34801561045757600080fd5b50610461602a5481565b6040519081526020015b60405180910390f35b34801561048057600080fd5b5061046160295481565b34801561049657600080fd5b506104aa6104a5366004613221565b610d32565b005b3480156104b857600080fd5b506104aa610d86565b3480156104cd57600080fd5b506104aa6104dc366004613336565b610dc6565b3480156104ed57600080fd5b506104f6610e65565b60405161046b9190613430565b34801561050f57600080fd5b5061052361051e36600461330a565b610ef7565b604051901515815260200161046b565b34801561053f57600080fd5b5061046160235481565b34801561055557600080fd5b506104aa6105643660046133c6565b610f0e565b34801561057557600080fd5b50600e54610461565b34801561058a57600080fd5b50602d5461059e906001600160a01b031681565b6040516001600160a01b03909116815260200161046b565b3480156105c257600080fd5b5061046160275481565b3480156105d857600080fd5b50600c54610461565b3480156105ed57600080fd5b506105236105fc366004613221565b60096020526000908152604090205460ff1681565b34801561061d57600080fd5b50610461601b5481565b34801561063357600080fd5b50610523610642366004613294565b610f3d565b34801561065357600080fd5b506104aa6106623660046133c6565b610fa6565b34801561067357600080fd5b5060035461059e906001600160a01b031681565b34801561069357600080fd5b506104616106a23660046133c6565b610fd5565b3480156106b357600080fd5b5060115460405160ff909116815260200161046b565b3480156106d557600080fd5b506104aa6106e4366004613221565b611059565b3480156106f557600080fd5b5061052361070436600461330a565b611210565b34801561071557600080fd5b5061046160125481565b34801561072b57600080fd5b506104aa61073a3660046133c6565b611246565b34801561074b57600080fd5b5060225461059e906001600160a01b031681565b34801561076b57600080fd5b506104aa61077a366004613221565b611330565b34801561078b57600080fd5b506104aa61079a366004613221565b611502565b3480156107ab57600080fd5b506104616107ba3660046133df565b611550565b3480156107cb57600080fd5b506104aa6107da3660046133c6565b6115dd565b3480156107eb57600080fd5b5061059e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561081f57600080fd5b50602e5461059e906001600160a01b031681565b34801561083f57600080fd5b50602e5461052390600160a81b900460ff1681565b34801561086057600080fd5b506104aa61086f366004613221565b61160c565b34801561088057600080fd5b5061052361088f366004613221565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156108b957600080fd5b506104aa6108c8366004613221565b61175f565b3480156108d957600080fd5b506104aa6108e83660046133c6565b6117ab565b3480156108f957600080fd5b5061046160255481565b34801561090f57600080fd5b5061046160135481565b34801561092557600080fd5b5061046160245481565b34801561093b57600080fd5b5061046161094a366004613221565b6117da565b34801561095b57600080fd5b506104aa611839565b34801561097057600080fd5b50610461601c5481565b34801561098657600080fd5b506104aa61189b565b34801561099b57600080fd5b50610461601d5481565b3480156109b157600080fd5b5061046160285481565b3480156109c757600080fd5b5061046160205481565b3480156109dd57600080fd5b50610461602b5481565b3480156109f357600080fd5b5061046160145481565b348015610a0957600080fd5b50610461601f5481565b348015610a1f57600080fd5b50610523610a2e366004613221565b6001600160a01b03166000908152600a602052604090205460ff1690565b348015610a5857600080fd5b506000546001600160a01b031661059e565b348015610a7657600080fd5b506104f6611931565b348015610a8b57600080fd5b506104aa610a9a3660046133c6565b611940565b348015610aab57600080fd5b506104aa610aba3660046133c6565b61196f565b348015610acb57600080fd5b5061046160265481565b348015610ae157600080fd5b506104aa61199e565b348015610af657600080fd5b50610523610b0536600461330a565b6119de565b348015610b1657600080fd5b506104aa611a2d565b348015610b2b57600080fd5b506104aa610b3a3660046132d5565b611b33565b348015610b4b57600080fd5b50610523610b5a36600461330a565b611b88565b348015610b6b57600080fd5b50600254610461565b348015610b8057600080fd5b5061046160155481565b348015610b9657600080fd5b506104aa610ba53660046133ab565b611b95565b348015610bb657600080fd5b506104aa610bc53660046133c6565b611c17565b348015610bd657600080fd5b506104aa610be5366004613221565b611c46565b348015610bf657600080fd5b506104aa610c053660046133c6565b611c94565b348015610c1657600080fd5b50610461601e5481565b348015610c2c57600080fd5b506104aa610c3b366004613336565b611ce4565b348015610c4c57600080fd5b506104aa610c5b3660046133c6565b611d7e565b348015610c6c57600080fd5b50610461610c7b36600461325b565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610cb257600080fd5b506104aa610cc1366004613221565b611e03565b348015610cd257600080fd5b50610461601a5481565b348015610ce857600080fd5b506104aa610cf7366004613221565b611e4e565b348015610d0857600080fd5b5061046160215481565b348015610d1e57600080fd5b506104aa610d2d366004613336565b611f26565b6000546001600160a01b03163314610d655760405162461bcd60e51b8152600401610d5c90613485565b60405180910390fd5b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314610db05760405162461bcd60e51b8152600401610d5c90613485565b600060248190556028819055601b819055601f55565b6000546001600160a01b03163314610df05760405162461bcd60e51b8152600401610d5c90613485565b60005b81811015610e6057600060086000858585818110610e1357610e1361361d565b9050602002016020810190610e289190613221565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610e59816135d6565b9050610df3565b505050565b6060600f8054610e749061359b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea09061359b565b8015610eed5780601f10610ec257610100808354040283529160200191610eed565b820191906000526020600020905b815481529060010190602001808311610ed057829003601f168201915b5050505050905090565b6000610f04338484611fc0565b5060015b92915050565b6000546001600160a01b03163314610f385760405162461bcd60e51b8152600401610d5c90613485565b601a55565b6000610f4a8484846120e4565b610f9c8433610f978560405180606001604052806028815260200161364c602891396001600160a01b038a16600090815260066020908152604080832033845290915290205491906123fb565b611fc0565b5060019392505050565b6000546001600160a01b03163314610fd05760405162461bcd60e51b8152600401610d5c90613485565b602455565b6000600d5482111561103c5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610d5c565b6000611046612435565b90506110528382612458565b9392505050565b6000546001600160a01b031633146110835760405162461bcd60e51b8152600401610d5c90613485565b6001600160a01b0381166000908152600a602052604090205460ff166110eb5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d5c565b60005b600b5481101561120c57816001600160a01b0316600b82815481106111155761111561361d565b6000918252602090912001546001600160a01b031614156111fa57600b805461114090600190613584565b815481106111505761115061361d565b600091825260209091200154600b80546001600160a01b03909216918390811061117c5761117c61361d565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b8054806111d4576111d4613607565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80611204816135d6565b9150506110ee565b5050565b3360008181526006602090815260408083206001600160a01b03871684529091528120549091610f04918590610f97908661249a565b336000818152600a602052604090205460ff16156112bb5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610d5c565b60006112c6836124f9565b505050506001600160a01b0384166000908152600460205260409020549192506112f291905082612548565b6001600160a01b038316600090815260046020526040902055600d546113189082612548565b600d55600e54611328908461249a565b600e55505050565b6000546001600160a01b0316331461135a5760405162461bcd60e51b8152600401610d5c90613485565b6000819050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561139857600080fd5b505afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d0919061323e565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561141857600080fd5b505afa15801561142c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611450919061323e565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561149857600080fd5b505af11580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d0919061323e565b602e80546001600160a01b039283166001600160a01b031991821617909155602d805493909216921691909117905550565b6000546001600160a01b0316331461152c5760405162461bcd60e51b8152600401610d5c90613485565b6001600160a01b03166000908152600760205260409020805460ff19166001179055565b6000600c548311156115a45760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610d5c565b816115c35760006115b4846124f9565b50939550610f08945050505050565b60006115ce846124f9565b50929550610f08945050505050565b6000546001600160a01b031633146116075760405162461bcd60e51b8152600401610d5c90613485565b602755565b6000546001600160a01b031633146116365760405162461bcd60e51b8152600401610d5c90613485565b6001600160a01b0381166000908152600a602052604090205460ff161561169f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610d5c565b6001600160a01b038116600090815260046020526040902054156116f9576001600160a01b0381166000908152600460205260409020546116df90610fd5565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146117895760405162461bcd60e51b8152600401610d5c90613485565b602280546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146117d55760405162461bcd60e51b8152600401610d5c90613485565b601f55565b6001600160a01b0381166000908152600a602052604081205460ff161561181757506001600160a01b031660009081526005602052604090205490565b6001600160a01b038216600090815260046020526040902054610f0890610fd5565b6000546001600160a01b031633146118635760405162461bcd60e51b8152600401610d5c90613485565b600080546040516001600160a01b0390911690600080516020613674833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146118c55760405162461bcd60e51b8152600401610d5c90613485565b600060128190556016819055601381905560178190556015819055601981905560148190556018819055602e805460ff60a01b191690556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599060200160405180910390a1565b606060108054610e749061359b565b6000546001600160a01b0316331461196a5760405162461bcd60e51b8152600401610d5c90613485565b601e55565b6000546001600160a01b031633146119995760405162461bcd60e51b8152600401610d5c90613485565b602355565b6000546001600160a01b031633146119c85760405162461bcd60e51b8152600401610d5c90613485565b600060238190556027819055601a819055601e55565b6000610f043384610f9785604051806060016040528060258152602001613694602591393360009081526006602090815260408083206001600160a01b038d16845290915290205491906123fb565b6001546001600160a01b03163314611a935760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610d5c565b6002544211611ae45760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610d5c565b600154600080546040516001600160a01b03938416939091169160008051602061367483398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000546001600160a01b03163314611b5d5760405162461bcd60e51b8152600401610d5c90613485565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000610f043384846120e4565b6000546001600160a01b03163314611bbf5760405162461bcd60e51b8152600401610d5c90613485565b602e8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611c0c90831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611c415760405162461bcd60e51b8152600401610d5c90613485565b601b55565b6000546001600160a01b03163314611c705760405162461bcd60e51b8152600401610d5c90613485565b6001600160a01b03166000908152600860205260409020805460ff19166001179055565b6000546001600160a01b03163314611cbe5760405162461bcd60e51b8152600401610d5c90613485565b611cde6064611cd883600c5461258a90919063ffffffff16565b90612458565b602b5550565b6000546001600160a01b03163314611d0e5760405162461bcd60e51b8152600401610d5c90613485565b60005b81811015610e6057600160086000858585818110611d3157611d3161361d565b9050602002016020810190611d469190613221565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611d77816135d6565b9050611d11565b6000546001600160a01b03163314611da85760405162461bcd60e51b8152600401610d5c90613485565b60008054600180546001600160a01b03199081166001600160a01b03841617909155169055611dd7814261352b565b600255600080546040516001600160a01b0390911690600080516020613674833981519152908390a350565b6000546001600160a01b03163314611e2d5760405162461bcd60e51b8152600401610d5c90613485565b6001600160a01b03166000908152600760205260409020805460ff19169055565b6000546001600160a01b03163314611e785760405162461bcd60e51b8152600401610d5c90613485565b6001600160a01b038116611edd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610d5c565b600080546040516001600160a01b038085169392169160008051602061367483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611f505760405162461bcd60e51b8152600401610d5c90613485565b60005b81811015610e6057600160096000858585818110611f7357611f7361361d565b9050602002016020810190611f889190613221565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611fb9816135d6565b9050611f53565b6001600160a01b0383166120225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610d5c565b6001600160a01b0382166120835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610d5c565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166121485760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610d5c565b6001600160a01b0382166121aa5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610d5c565b6000811161220c5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610d5c565b6001600160a01b03831660009081526009602052604090205460ff1615801561224e57506001600160a01b03821660009081526009602052604090205460ff16155b6122905760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610d5c565b6000546001600160a01b038481169116148015906122bc57506000546001600160a01b03838116911614155b80156122e157506001600160a01b03821660009081526007602052604090205460ff16155b801561230657506001600160a01b03831660009081526007602052604090205460ff16155b1561236e57602b5481111561236e5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610d5c565b6000612379306117da565b9050602b5481106123895750602b545b602c54811080159081906123a75750602e54600160a01b900460ff16155b80156123c15750602e546001600160a01b03868116911614155b80156123d65750602e54600160a81b900460ff165b156123e957602c5491506123e982612609565b6123f48585856126b0565b5050505050565b6000818484111561241f5760405162461bcd60e51b8152600401610d5c9190613430565b50600061242c8486613584565b95945050505050565b60008060006124426129c4565b90925090506124518282612458565b9250505090565b600061105283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b46565b6000806124a7838561352b565b9050838110156110525760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610d5c565b60008060008060008060008060006125108a612b74565b925092509250600080600061252e8d8686612529612435565b612bb0565b919f909e50909c50959a5093985091965092945050505050565b600061105283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123fb565b60008261259957506000610f08565b60006125a58385613565565b9050826125b28583613543565b146110525760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610d5c565b602e805460ff60a01b1916600160a01b1790556000612629826002612458565b905060006126378383612548565b90504761264383612c00565b600061264f4783612548565b905061265b8382612d69565b60408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050602e805460ff60a01b19169055505050565b6001600160a01b03831660009081526007602052604090205460019060ff16806126f257506001600160a01b03831660009081526007602052604090205460ff165b156126fb575060005b806127605761275b601a8054601c556027805460295560238054602555601e8054602055601b8054601d5560288054602a5560248054602655601f8054602155600095869055958590559584905591839055938290558190559182905555565b6127fe565b602e546001600160a01b03858116911614156127af57601a54601255601e546013556027546015556001600160a01b03831660009081526008602052604090205460ff166127af576023546014555b602e546001600160a01b03848116911614156127fe57601b54601255601f546013556028546015556001600160a01b03841660009081526008602052604090205460ff166127fe576024546014555b600061281a6064611cd86015548661258a90919063ffffffff16565b905060006128386064611cd86014548761258a90919063ffffffff16565b905060006128508261284a8786612548565b90612548565b6001600160a01b0388166000908152600a602052604090205490915060ff16801561289457506001600160a01b0386166000908152600a602052604090205460ff16155b156128a9576128a4878783612e46565b612955565b6001600160a01b0387166000908152600a602052604090205460ff161580156128ea57506001600160a01b0386166000908152600a602052604090205460ff165b156128fa576128a4878783612f6c565b6001600160a01b0387166000908152600a602052604090205460ff16801561293a57506001600160a01b0386166000908152600a602052604090205460ff165b1561294a576128a4878783613015565b612955878783613088565b61295d6130cc565b61296987600085613088565b6022546129819088906001600160a01b031684613088565b836129bb576129bb601c54601a55602954602755602554602355602054601e55601d54601b55602a54602855602654602455602154601f55565b50505050505050565b600d54600c546000918291825b600b54811015612b16578260046000600b84815481106129f3576129f361361d565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612a5e57508160056000600b8481548110612a3757612a3761361d565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15612a7457600d54600c54945094505050509091565b612aba60046000600b8481548110612a8e57612a8e61361d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612548565b9250612b0260056000600b8481548110612ad657612ad661361d565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612548565b915080612b0e816135d6565b9150506129d1565b50600c54600d54612b2691612458565b821015612b3d57600d54600c549350935050509091565b90939092509050565b60008183612b675760405162461bcd60e51b8152600401610d5c9190613430565b50600061242c8486613543565b600080600080612b8385613128565b90506000612b9086613144565b90506000612ba28261284a8986612548565b979296509094509092505050565b6000808080612bbf888661258a565b90506000612bcd888761258a565b90506000612bdb888861258a565b90506000612bed8261284a8686612548565b939b939a50919850919650505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612c3557612c3561361d565b6001600160a01b03928316602091820292909201810191909152602d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612c8957600080fd5b505afa158015612c9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc1919061323e565b81600181518110612cd457612cd461361d565b6001600160a01b039283166020918202929092010152602d54612cfa9130911684611fc0565b602d5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612d339085906000908690309042906004016134ba565b600060405180830381600087803b158015612d4d57600080fd5b505af1158015612d61573d6000803e3d6000fd5b505050505050565b602d54612d819030906001600160a01b031684611fc0565b602d546001600160a01b031663f305d719823085600080612daa6000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c4016060604051808303818588803b158015612e0d57600080fd5b505af1158015612e21573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123f49190613402565b600080600080600080612e58876124f9565b6001600160a01b038f16600090815260056020526040902054959b50939950919750955093509150612e8a9088612548565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612eb99087612548565b6001600160a01b03808b1660009081526004602052604080822093909355908a1681522054612ee8908661249a565b6001600160a01b038916600090815260046020526040902055612f0a81613160565b612f1484836131e8565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612f5991815260200190565b60405180910390a3505050505050505050565b600080600080600080612f7e876124f9565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612fb09087612548565b6001600160a01b03808b16600090815260046020908152604080832094909455918b16815260059091522054612fe6908461249a565b6001600160a01b038916600090815260056020908152604080832093909355600490522054612ee8908661249a565b600080600080600080613027876124f9565b6001600160a01b038f16600090815260056020526040902054959b509399509197509550935091506130599088612548565b6001600160a01b038a16600090815260056020908152604080832093909355600490522054612fb09087612548565b60008060008060008061309a876124f9565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612eb99087612548565b6012541580156130dc5750601354155b80156130e85750601454155b80156130f45750601554155b156130fb57565b60128054601655601380546017556015805460195560148054601855600093849055918390559082905555565b6000610f086064611cd86012548561258a90919063ffffffff16565b6000610f086064611cd86013548561258a90919063ffffffff16565b600061316a612435565b90506000613178838361258a565b30600090815260046020526040902054909150613195908261249a565b30600090815260046020908152604080832093909355600a9052205460ff1615610e6057306000908152600560205260409020546131d3908461249a565b30600090815260056020526040902055505050565b600d546131f59083612548565b600d55600e54613205908261249a565b600e555050565b8035801515811461321c57600080fd5b919050565b60006020828403121561323357600080fd5b813561105281613633565b60006020828403121561325057600080fd5b815161105281613633565b6000806040838503121561326e57600080fd5b823561327981613633565b9150602083013561328981613633565b809150509250929050565b6000806000606084860312156132a957600080fd5b83356132b481613633565b925060208401356132c481613633565b929592945050506040919091013590565b600080604083850312156132e857600080fd5b82356132f381613633565b91506133016020840161320c565b90509250929050565b6000806040838503121561331d57600080fd5b823561332881613633565b946020939093013593505050565b6000806020838503121561334957600080fd5b823567ffffffffffffffff8082111561336157600080fd5b818501915085601f83011261337557600080fd5b81358181111561338457600080fd5b8660208260051b850101111561339957600080fd5b60209290920196919550909350505050565b6000602082840312156133bd57600080fd5b6110528261320c565b6000602082840312156133d857600080fd5b5035919050565b600080604083850312156133f257600080fd5b823591506133016020840161320c565b60008060006060848603121561341757600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b8181101561345d57858101830151858201604001528201613441565b8181111561346f576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561350a5784516001600160a01b0316835293830193918301916001016134e5565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561353e5761353e6135f1565b500190565b60008261356057634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561357f5761357f6135f1565b500290565b600082821015613596576135966135f1565b500390565b600181811c908216806135af57607f821691505b602082108114156135d057634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156135ea576135ea6135f1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461364857600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122090ee20392094a870a1fe950959dc0977d999f0c374c5031935dc37499858b8c564736f6c63430008070033

Deployed ByteCode Sourcemap

15490:25015:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17853:49;;;;;;;;;;;;;;;;;;;12654:25:1;;;12642:2;12627:18;17853:49:0;;;;;;;;17797;;;;;;;;;;;;;;;;23833:122;;;;;;;;;;-1:-1:-1;23833:122:0;;;;;:::i;:::-;;:::i;:::-;;26066:173;;;;;;;;;;;;;:::i;23961:209::-;;;;;;;;;;-1:-1:-1;23961:209:0;;;;;:::i;:::-;;:::i;19239:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20137:161::-;;;;;;;;;;-1:-1:-1;20137:161:0;;;;;:::i;:::-;;:::i;:::-;;;5029:14:1;;5022:22;5004:41;;4992:2;4977:18;20137:161:0;4864:187:1;17504:32:0;;;;;;;;;;;;;;;;24176:110;;;;;;;;;;-1:-1:-1;24176:110:0;;;;;:::i;:::-;;:::i;21248:87::-;;;;;;;;;;-1:-1:-1;21317:10:0;;21248:87;;18098:42;;;;;;;;;;-1:-1:-1;18098:42:0;;;;-1:-1:-1;;;;;18098:42:0;;;;;;-1:-1:-1;;;;;3899:32:1;;;3881:51;;3869:2;3854:18;18098:42:0;3735:203:1;17721:31:0;;;;;;;;;;;;;;;;19510:95;;;;;;;;;;-1:-1:-1;19590:7:0;;19510:95;;15994:46;;;;;;;;;;-1:-1:-1;15994:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16885:30;;;;;;;;;;;;;;;;20304:313;;;;;;;;;;-1:-1:-1;20304:313:0;;;;;:::i;:::-;;:::i;24824:126::-;;;;;;;;;;-1:-1:-1;24824:126:0;;;;;:::i;:::-;;:::i;15612:71::-;;;;;;;;;;-1:-1:-1;15612:71:0;;;;-1:-1:-1;;;;;15612:71:0;;;22170:253;;;;;;;;;;-1:-1:-1;22170:253:0;;;;;:::i;:::-;;:::i;19421:83::-;;;;;;;;;;-1:-1:-1;19487:9:0;;19421:83;;19487:9;;;;14141:36:1;;14129:2;14114:18;19421:83:0;13999:184:1;22772:479:0;;;;;;;;;;-1:-1:-1;22772:479:0;;;;;:::i;:::-;;:::i;20623:218::-;;;;;;;;;;-1:-1:-1;20623:218:0;;;;;:::i;:::-;;:::i;16474:26::-;;;;;;;;;;;;;;;;21341:377;;;;;;;;;;-1:-1:-1;21341:377:0;;;;;:::i;:::-;;:::i;17412:83::-;;;;;;;;;;-1:-1:-1;17412:83:0;;;;-1:-1:-1;;;;;17412:83:0;;;40176:326;;;;;;;;;;-1:-1:-1;40176:326:0;;;;;:::i;:::-;;:::i;23257:111::-;;;;;;;;;;-1:-1:-1;23257:111:0;;;;;:::i;:::-;;:::i;21726:436::-;;;;;;;;;;-1:-1:-1;21726:436:0;;;;;:::i;:::-;;:::i;24962:114::-;;;;;;;;;;-1:-1:-1;24962:114:0;;;;;:::i;:::-;;:::i;17300:83::-;;;;;;;;;;;;;;;18147:29;;;;;;;;;;-1:-1:-1;18147:29:0;;;;-1:-1:-1;;;;;18147:29:0;;;18217:40;;;;;;;;;;-1:-1:-1;18217:40:0;;;;-1:-1:-1;;;18217:40:0;;;;;;22431:333;;;;;;;;;;-1:-1:-1;22431:333:0;;;;;:::i;:::-;;:::i;31386:123::-;;;;;;;;;;-1:-1:-1;31386:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;31474:27:0;31450:4;31474:27;;;:18;:27;;;;;;;;;31386:123;25088:125;;;;;;;;;;-1:-1:-1;25088:125:0;;;;;:::i;:::-;;:::i;24552:138::-;;;;;;;;;;-1:-1:-1;24552:138:0;;;;;:::i;:::-;;:::i;17583:52::-;;;;;;;;;;;;;;;;16507:32;;;;;;;;;;;;;;;;17543:33;;;;;;;;;;;;;;;;19611:198;;;;;;;;;;-1:-1:-1;19611:198:0;;;;;:::i;:::-;;:::i;6507:148::-;;;;;;;;;;;;;:::i;16922:46::-;;;;;;;;;;;;;;;;26245:402;;;;;;;;;;;;;:::i;16975:48::-;;;;;;;;;;;;;;;;17759:31;;;;;;;;;;;;;;;;17138:58;;;;;;;;;;;;;;;;17917:48;;;;;;;;;;;;;;;;16546:29;;;;;;;;;;;;;;;;17095:36;;;;;;;;;;;;;;;;21122:120;;;;;;;;;;-1:-1:-1;21122:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21214:20:0;21190:4;21214:20;;;:11;:20;;;;;;;;;21122:120;6297:79;;;;;;;;;;-1:-1:-1;6335:7:0;6362:6;-1:-1:-1;;;;;6362:6:0;6297:79;;19328:87;;;;;;;;;;;;;:::i;24412:134::-;;;;;;;;;;-1:-1:-1;24412:134:0;;;;;:::i;:::-;;:::i;24696:122::-;;;;;;;;;;-1:-1:-1;24696:122:0;;;;;:::i;:::-;;:::i;17642:54::-;;;;;;;;;;;;;;;;25892:168;;;;;;;;;;;;;:::i;20847:269::-;;;;;;;;;;-1:-1:-1;20847:269:0;;;;;:::i;:::-;;:::i;7240:305::-;;;;;;;;;;;;;:::i;25389:126::-;;;;;;;;;;-1:-1:-1;25389:126:0;;;;;:::i;:::-;;:::i;19815:167::-;;;;;;;;;;-1:-1:-1;19815:167:0;;;;;:::i;:::-;;:::i;6911:89::-;;;;;;;;;;-1:-1:-1;6983:9:0;;6911:89;;16582:27;;;;;;;;;;;;;;;;25715:171;;;;;;;;;;-1:-1:-1;25715:171:0;;;;;:::i;:::-;;:::i;24292:114::-;;;;;;;;;;-1:-1:-1;24292:114:0;;;;;:::i;:::-;;:::i;23490:123::-;;;;;;;;;;-1:-1:-1;23490:123:0;;;;;:::i;:::-;;:::i;25221:162::-;;;;;;;;;;-1:-1:-1;25221:162:0;;;;;:::i;:::-;;:::i;17053:35::-;;;;;;;;;;;;;;;;23619:208;;;;;;;;;;-1:-1:-1;23619:208:0;;;;;:::i;:::-;;:::i;7008:226::-;;;;;;;;;;-1:-1:-1;7008:226:0;;;;;:::i;:::-;;:::i;19988:143::-;;;;;;;;;;-1:-1:-1;19988:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20096:18:0;;;20069:7;20096:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19988:143;23374:110;;;;;;;;;;-1:-1:-1;23374:110:0;;;;;:::i;:::-;;:::i;16849:29::-;;;;;;;;;;;;;;;;6661:244;;;;;;;;;;-1:-1:-1;6661:244:0;;;;;:::i;:::-;;:::i;17203:60::-;;;;;;;;;;;;;;;;25521:188;;;;;;;;;;-1:-1:-1;25521:188:0;;;;;:::i;:::-;;:::i;23833:122::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;23906:33:0::1;23942:5;23906:33:::0;;;:24:::1;:33;::::0;;;;:41;;-1:-1:-1;;23906:41:0::1;::::0;;23833:122::o;26066:173::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;26145:1:::1;26128:14;:18:::0;;;26157:12:::1;:16:::0;;;26184:11:::1;:15:::0;;;26210:17:::1;:21:::0;26066:173::o;23961:209::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;24058:9:::1;24053:110;24069:20:::0;;::::1;24053:110;;;24148:5;24107:24;:38;24132:9;;24142:1;24132:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24107:38:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24107:38:0;:46;;-1:-1:-1;;24107:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24091:3:::1;::::0;::::1;:::i;:::-;;;24053:110;;;;23961:209:::0;;:::o;19239:83::-;19276:13;19309:5;19302:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19239:83;:::o;20137:161::-;20212:4;20229:39;3332:10;20252:7;20261:6;20229:8;:39::i;:::-;-1:-1:-1;20286:4:0;20137:161;;;;;:::o;24176:110::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;24256:10:::1;:22:::0;24176:110::o;20304:313::-;20402:4;20419:36;20429:6;20437:9;20448:6;20419:9;:36::i;:::-;20466:121;20475:6;3332:10;20497:89;20535:6;20497:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20497:19:0;;;;;;:11;:19;;;;;;;;3332:10;20497:33;;;;;;;;;;:37;:89::i;:::-;20466:8;:121::i;:::-;-1:-1:-1;20605:4:0;20304:313;;;;;:::o;24824:126::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;24912:14:::1;:30:::0;24824:126::o;22170:253::-;22236:7;22275;;22264;:18;;22256:73;;;;-1:-1:-1;;;22256:73:0;;6499:2:1;22256:73:0;;;6481:21:1;6538:2;6518:18;;;6511:30;6577:34;6557:18;;;6550:62;-1:-1:-1;;;6628:18:1;;;6621:40;6678:19;;22256:73:0;6297:406:1;22256:73:0;22340:19;22363:10;:8;:10::i;:::-;22340:33;-1:-1:-1;22391:24:0;:7;22340:33;22391:11;:24::i;:::-;22384:31;22170:253;-1:-1:-1;;;22170:253:0:o;22772:479::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22854:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22846:60;;;::::0;-1:-1:-1;;;22846:60:0;;8076:2:1;22846:60:0::1;::::0;::::1;8058:21:1::0;8115:2;8095:18;;;8088:30;8154:29;8134:18;;;8127:57;8201:18;;22846:60:0::1;7874:351:1::0;22846:60:0::1;22922:9;22917:327;22941:9;:16:::0;22937:20;::::1;22917:327;;;22999:7;-1:-1:-1::0;;;;;22983:23:0::1;:9;22993:1;22983:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22983:12:0::1;:23;22979:254;;;23042:9;23052:16:::0;;:20:::1;::::0;23071:1:::1;::::0;23052:20:::1;:::i;:::-;23042:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23027:9:::1;:12:::0;;-1:-1:-1;;;;;23042:31:0;;::::1;::::0;23037:1;;23027:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;23027:46:0::1;-1:-1:-1::0;;;;;23027:46:0;;::::1;;::::0;;23092:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;23131:11:::1;:20:::0;;;;:28;;-1:-1:-1;;23131:28:0::1;::::0;;23178:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;23178:15:0;;;;;-1:-1:-1;;;;;;23178:15:0::1;::::0;;;;;22917:327:::1;22772:479:::0;:::o;22979:254::-:1;22959:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22917:327;;;;22772:479:::0;:::o;20623:218::-;3332:10;20711:4;20760:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20760:34:0;;;;;;;;;;20711:4;;20728:83;;20751:7;;20760:50;;20799:10;20760:38;:50::i;21341:377::-;3332:10;21393:14;21442:19;;;:11;:19;;;;;;;;21441:20;21433:77;;;;-1:-1:-1;;;21433:77:0;;11893:2:1;21433:77:0;;;11875:21:1;11932:2;11912:18;;;11905:30;11971:34;11951:18;;;11944:62;-1:-1:-1;;;12022:18:1;;;12015:42;12074:19;;21433:77:0;11691:408:1;21433:77:0;21522:15;21546:19;21557:7;21546:10;:19::i;:::-;-1:-1:-1;;;;;;;;;21594:15:0;;;;;;:7;:15;;;;;;21521:44;;-1:-1:-1;21594:28:0;;:15;-1:-1:-1;21521:44:0;21594:19;:28::i;:::-;-1:-1:-1;;;;;21576:15:0;;;;;;:7;:15;;;;;:46;21643:7;;:20;;21655:7;21643:11;:20::i;:::-;21633:7;:30;21687:10;;:23;;21702:7;21687:14;:23::i;:::-;21674:10;:36;-1:-1:-1;;;21341:377:0:o;40176:326::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;40252:36:::1;40310:9;40252:68;;40366:17;-1:-1:-1::0;;;;;40366:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40348:57:0::1;;40414:4;40421:17;-1:-1:-1::0;;;;;40421:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40348:98;::::0;-1:-1:-1;;;;;;40348:98:0::1;::::0;;;;;;-1:-1:-1;;;;;4173:15:1;;;40348:98:0::1;::::0;::::1;4155:34:1::0;4225:15;;4205:18;;;4198:43;4090:18;;40348:98:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40332:13;:114:::0;;-1:-1:-1;;;;;40332:114:0;;::::1;-1:-1:-1::0;;;;;;40332:114:0;;::::1;;::::0;;;40458:15:::1;:35:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;40176:326:0:o;23257:111::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23326:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;23326:34:0::1;23356:4;23326:34;::::0;;23257:111::o;21726:436::-;21816:7;21855;;21844;:18;;21836:62;;;;-1:-1:-1;;;21836:62:0;;8432:2:1;21836:62:0;;;8414:21:1;8471:2;8451:18;;;8444:30;8510:33;8490:18;;;8483:61;8561:18;;21836:62:0;8230:355:1;21836:62:0;21914:17;21909:246;;21949:15;21973:19;21984:7;21973:10;:19::i;:::-;-1:-1:-1;21948:44:0;;-1:-1:-1;22007:14:0;;-1:-1:-1;;;;;22007:14:0;21909:246;22056:23;22087:19;22098:7;22087:10;:19::i;:::-;-1:-1:-1;22054:52:0;;-1:-1:-1;22121:22:0;;-1:-1:-1;;;;;22121:22:0;24962:114;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;25044:11:::1;:24:::0;24962:114::o;22431:333::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22514:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22513:21;22505:61;;;::::0;-1:-1:-1;;;22505:61:0;;8076:2:1;22505:61:0::1;::::0;::::1;8058:21:1::0;8115:2;8095:18;;;8088:30;8154:29;8134:18;;;8127:57;8201:18;;22505:61:0::1;7874:351:1::0;22505:61:0::1;-1:-1:-1::0;;;;;22580:16:0;::::1;22599:1;22580:16:::0;;;:7:::1;:16;::::0;;;;;:20;22577:108:::1;;-1:-1:-1::0;;;;;22656:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22636:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22617:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22577:108:::1;-1:-1:-1::0;;;;;22695:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22695:27:0::1;22718:4;22695:27:::0;;::::1;::::0;;;22733:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22733:23:0::1;::::0;;::::1;::::0;;22431:333::o;25088:125::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;25167:23:::1;:38:::0;;-1:-1:-1;;;;;;25167:38:0::1;-1:-1:-1::0;;;;;25167:38:0;;;::::1;::::0;;;::::1;::::0;;25088:125::o;24552:138::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;24646:17:::1;:36:::0;24552:138::o;19611:198::-;-1:-1:-1;;;;;19701:20:0;;19677:7;19701:20;;;:11;:20;;;;;;;;19697:49;;;-1:-1:-1;;;;;;19730:16:0;;;;;:7;:16;;;;;;;19611:198::o;19697:49::-;-1:-1:-1;;;;;19784:16:0;;;;;;:7;:16;;;;;;19764:37;;:19;:37::i;6507:148::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;6614:1:::1;6598:6:::0;;6577:40:::1;::::0;-1:-1:-1;;;;;6598:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6577:40:0;6614:1;;6577:40:::1;6645:1;6628:19:::0;;-1:-1:-1;;;;;;6628:19:0::1;::::0;;6507:148::o;26245:402::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;26313:1:::1;26303:7;:11:::0;;;26325:15:::1;:25:::0;;;26361:13:::1;:17:::0;;;26389:21:::1;:37:::0;;;26437:8:::1;:12:::0;;;26460:16:::1;:26:::0;;;26497:10:::1;:14:::0;;;26522:18:::1;:31:::0;;;26564:16:::1;:24:::0;;-1:-1:-1;;;;26564:24:0::1;::::0;;26604:35:::1;::::0;5004:41:1;;;26604:35:0::1;::::0;4992:2:1;4977:18;26604:35:0::1;;;;;;;26245:402::o:0;19328:87::-;19367:13;19400:7;19393:14;;;;;:::i;24412:134::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;24504:16:::1;:34:::0;24412:134::o;24696:122::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;24782:13:::1;:28:::0;24696:122::o;25892:168::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;25969:1:::1;25953:13;:17:::0;;;25981:11:::1;:15:::0;;;26007:10:::1;:14:::0;;;26032:16:::1;:20:::0;25892:168::o;20847:269::-;20940:4;20957:129;3332:10;20980:7;20989:96;21028:15;20989:96;;;;;;;;;;;;;;;;;3332:10;20989:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;20989:34:0;;;;;;;;;;;;:38;:96::i;7240:305::-;7292:14;;-1:-1:-1;;;;;7292:14:0;7310:10;7292:28;7284:76;;;;-1:-1:-1;;;7284:76:0;;12306:2:1;7284:76:0;;;12288:21:1;12345:2;12325:18;;;12318:30;12384:34;12364:18;;;12357:62;-1:-1:-1;;;12435:18:1;;;12428:33;12478:19;;7284:76:0;12104:399:1;7284:76:0;7397:9;;7379:15;:27;7371:72;;;;-1:-1:-1;;;7371:72:0;;11533:2:1;7371:72:0;;;11515:21:1;11572:2;11552:18;;;11545:30;11611:33;11591:18;;;11584:61;11662:18;;7371:72:0;11331:355:1;7371:72:0;7488:14;;;7480:6;;7459:44;;-1:-1:-1;;;;;7488:14:0;;;;7480:6;;;;-1:-1:-1;;;;;;;;;;;7459:44:0;;7523:14;;;7514:23;;-1:-1:-1;;;;;;7514:23:0;-1:-1:-1;;;;;7523:14:0;;;7514:23;;;;;;7240:305::o;25389:126::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25476:23:0;;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;25476:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25389:126::o;19815:167::-;19893:4;19910:42;3332:10;19934:9;19945:6;19910:9;:42::i;25715:171::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;25792:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;25792:32:0::1;-1:-1:-1::0;;;;25792:32:0;;::::1;;::::0;;25840:38:::1;::::0;::::1;::::0;::::1;::::0;25816:8;5029:14:1;5022:22;5004:41;;4992:2;4977:18;;4864:187;25840:38:0::1;;;;;;;;25715:171:::0;:::o;24292:114::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;24374:11:::1;:24:::0;24292:114::o;23490:123::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23565:33:0::1;;::::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;23565:40:0::1;23601:4;23565:40;::::0;;23490:123::o;25221:162::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;25315:60:::1;25359:5;25315:25;25327:12;25315:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;25300:12;:75:::0;-1:-1:-1;25221:162:0:o;23619:208::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;23716:9:::1;23711:109;23727:20:::0;;::::1;23711:109;;;23806:4;23765:24;:38;23790:9;;23800:1;23790:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23765:38:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23765:38:0;:45;;-1:-1:-1;;23765:45:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23749:3:::1;::::0;::::1;:::i;:::-;;;23711:109;;7008:226:::0;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;7089:6:::1;::::0;;;7072:23;;-1:-1:-1;;;;;;7072:23:0;;::::1;-1:-1:-1::0;;;;;7089:6:0;::::1;7072:23;::::0;;;7106:19:::1;::::0;;7148:22:::1;7166:4:::0;7148:15:::1;:22;:::i;:::-;7136:9;:34:::0;7223:1:::1;7207:6:::0;;7186:40:::1;::::0;-1:-1:-1;;;;;7207:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7186:40:0;7223:1;;7186:40:::1;7008:226:::0;:::o;23374:110::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23441:27:0::1;23471:5;23441:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;23441:35:0::1;::::0;;23374:110::o;6661:244::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6750:22:0;::::1;6742:73;;;::::0;-1:-1:-1;;;6742:73:0;;6910:2:1;6742:73:0::1;::::0;::::1;6892:21:1::0;6949:2;6929:18;;;6922:30;6988:34;6968:18;;;6961:62;-1:-1:-1;;;7039:18:1;;;7032:36;7085:19;;6742:73:0::1;6708:402:1::0;6742:73:0::1;6852:6;::::0;;6831:38:::1;::::0;-1:-1:-1;;;;;6831:38:0;;::::1;::::0;6852:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;6831:38:0;::::1;6880:6;:17:::0;;-1:-1:-1;;;;;;6880:17:0::1;-1:-1:-1::0;;;;;6880:17:0;;;::::1;::::0;;;::::1;::::0;;6661:244::o;25521:188::-;6422:6;;-1:-1:-1;;;;;6422:6:0;3332:10;6422:22;6414:67;;;;-1:-1:-1;;;6414:67:0;;;;;;;:::i;:::-;25608:9:::1;25603:99;25619:20:::0;;::::1;25603:99;;;25688:4;25657:14;:28;25672:9;;25682:1;25672:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25657:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;25657:28:0;:35;;-1:-1:-1;;25657:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25641:3:::1;::::0;::::1;:::i;:::-;;;25603:99;;31517:337:::0;-1:-1:-1;;;;;31610:19:0;;31602:68;;;;-1:-1:-1;;;31602:68:0;;11128:2:1;31602:68:0;;;11110:21:1;11167:2;11147:18;;;11140:30;11206:34;11186:18;;;11179:62;-1:-1:-1;;;11257:18:1;;;11250:34;11301:19;;31602:68:0;10926:400:1;31602:68:0;-1:-1:-1;;;;;31689:21:0;;31681:68;;;;-1:-1:-1;;;31681:68:0;;7317:2:1;31681:68:0;;;7299:21:1;7356:2;7336:18;;;7329:30;7395:34;7375:18;;;7368:62;-1:-1:-1;;;7446:18:1;;;7439:32;7488:19;;31681:68:0;7115:398:1;31681:68:0;-1:-1:-1;;;;;31762:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31814:32;;12654:25:1;;;31814:32:0;;12627:18:1;31814:32:0;;;;;;;31517:337;;;:::o;34561:1274::-;-1:-1:-1;;;;;34649:18:0;;34641:68;;;;-1:-1:-1;;;34641:68:0;;10722:2:1;34641:68:0;;;10704:21:1;10761:2;10741:18;;;10734:30;10800:34;10780:18;;;10773:62;-1:-1:-1;;;10851:18:1;;;10844:35;10896:19;;34641:68:0;10520:401:1;34641:68:0;-1:-1:-1;;;;;34728:16:0;;34720:64;;;;-1:-1:-1;;;34720:64:0;;6095:2:1;34720:64:0;;;6077:21:1;6134:2;6114:18;;;6107:30;6173:34;6153:18;;;6146:62;-1:-1:-1;;;6224:18:1;;;6217:33;6267:19;;34720:64:0;5893:399:1;34720:64:0;34812:1;34803:6;:10;34795:64;;;;-1:-1:-1;;;34795:64:0;;10312:2:1;34795:64:0;;;10294:21:1;10351:2;10331:18;;;10324:30;10390:34;10370:18;;;10363:62;-1:-1:-1;;;10441:18:1;;;10434:39;10490:19;;34795:64:0;10110:405:1;34795:64:0;-1:-1:-1;;;;;34879:20:0;;;;;;:14;:20;;;;;;;;34878:21;:44;;;;-1:-1:-1;;;;;;34904:18:0;;;;;;:14;:18;;;;;;;;34903:19;34878:44;34870:76;;;;-1:-1:-1;;;34870:76:0;;8792:2:1;34870:76:0;;;8774:21:1;8831:2;8811:18;;;8804:30;-1:-1:-1;;;8850:18:1;;;8843:49;8909:18;;34870:76:0;8590:343:1;34870:76:0;6335:7;6362:6;-1:-1:-1;;;;;34960:15:0;;;6362:6;;34960:15;;;;:32;;-1:-1:-1;6335:7:0;6362:6;-1:-1:-1;;;;;34979:13:0;;;6362:6;;34979:13;;34960:32;:60;;;;-1:-1:-1;;;;;;34998:22:0;;;;;;:18;:22;;;;;;;;34996:24;34960:60;:90;;;;-1:-1:-1;;;;;;35026:24:0;;;;;;:18;:24;;;;;;;;35024:26;34960:90;34957:195;;;35083:12;;35073:6;:22;;35065:75;;;;-1:-1:-1;;;35065:75:0;;9140:2:1;35065:75:0;;;9122:21:1;9179:2;9159:18;;;9152:30;9218:34;9198:18;;;9191:62;-1:-1:-1;;;9269:18:1;;;9262:38;9317:19;;35065:75:0;8938:404:1;35065:75:0;35170:28;35201:24;35219:4;35201:9;:24::i;:::-;35170:55;;35273:12;;35249:20;:36;35246:112;;-1:-1:-1;35334:12:0;;35246:112;35429:29;;35405:53;;;;;;;35487;;-1:-1:-1;35524:16:0;;-1:-1:-1;;;35524:16:0;;;;35523:17;35487:53;:91;;;;-1:-1:-1;35565:13:0;;-1:-1:-1;;;;;35557:21:0;;;35565:13;;35557:21;;35487:91;:129;;;;-1:-1:-1;35595:21:0;;-1:-1:-1;;;35595:21:0;;;;35487:129;35469:318;;;35666:29;;35643:52;;35739:36;35754:20;35739:14;:36::i;:::-;35797:30;35812:4;35817:2;35820:6;35797:14;:30::i;:::-;34630:1205;;34561:1274;;;:::o;2087:192::-;2173:7;2209:12;2201:6;;;;2193:29;;;;-1:-1:-1;;;2193:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2233:9:0;2245:5;2249:1;2245;:5;:::i;:::-;2233:17;2087:192;-1:-1:-1;;;;;2087:192:0:o;28157:163::-;28198:7;28219:15;28236;28255:19;:17;:19::i;:::-;28218:56;;-1:-1:-1;28218:56:0;-1:-1:-1;28292:20:0;28218:56;;28292:11;:20::i;:::-;28285:27;;;;28157:163;:::o;2545:132::-;2603:7;2630:39;2634:1;2637;2630:39;;;;;;;;;;;;;;;;;:3;:39::i;1758:181::-;1816:7;;1848:5;1852:1;1848;:5;:::i;:::-;1836:17;;1877:1;1872;:6;;1864:46;;;;-1:-1:-1;;;1864:46:0;;7720:2:1;1864:46:0;;;7702:21:1;7759:2;7739:18;;;7732:30;7798:29;7778:18;;;7771:57;7845:18;;1864:46:0;7518:351:1;26897:419:0;26956:7;26965;26974;26983;26992;27001;27022:23;27047:12;27061:18;27083:20;27095:7;27083:11;:20::i;:::-;27021:82;;;;;;27115:15;27132:23;27157:12;27173:50;27185:7;27194:4;27200:10;27212;:8;:10::i;:::-;27173:11;:50::i;:::-;27114:109;;;;-1:-1:-1;27114:109:0;;-1:-1:-1;27274:15:0;;-1:-1:-1;27291:4:0;;-1:-1:-1;27297:10:0;;-1:-1:-1;26897:419:0;;-1:-1:-1;;;;;26897:419:0:o;1945:136::-;2003:7;2030:43;2034:1;2037;2030:43;;;;;;;;;;;;;;;;;:3;:43::i;2287:250::-;2345:7;2369:6;2365:47;;-1:-1:-1;2399:1:0;2392:8;;2365:47;2424:9;2436:5;2440:1;2436;:5;:::i;:::-;2424:17;-1:-1:-1;2469:1:0;2460:5;2464:1;2424:17;2460:5;:::i;:::-;:10;2452:56;;;;-1:-1:-1;;;2452:56:0;;9549:2:1;2452:56:0;;;9531:21:1;9588:2;9568:18;;;9561:30;9627:34;9607:18;;;9600:62;-1:-1:-1;;;9678:18:1;;;9671:31;9719:19;;2452:56:0;9347:397:1;33622:465:0;18564:16;:23;;-1:-1:-1;;;;18564:23:0;-1:-1:-1;;;18564:23:0;;;;33722:27:::1;:20:::0;33747:1:::1;33722:24;:27::i;:::-;33707:42:::0;-1:-1:-1;33760:17:0::1;33780:30;:20:::0;33707:42;33780:24:::1;:30::i;:::-;33760:50:::0;-1:-1:-1;33846:21:0::1;33878:22;33895:4:::0;33878:16:::1;:22::i;:::-;33912:18;33933:41;:21;33959:14:::0;33933:25:::1;:41::i;:::-;33912:62;;33985:35;33998:9;34009:10;33985:12;:35::i;:::-;34036:43;::::0;;13877:25:1;;;13933:2;13918:18;;13911:34;;;13961:18;;;13954:34;;;34036:43:0::1;::::0;13865:2:1;13850:18;34036:43:0::1;;;;;;;-1:-1:-1::0;;18610:16:0;:24;;-1:-1:-1;;;;18610:24:0;;;-1:-1:-1;;;33622:465:0:o;35841:1946::-;-1:-1:-1;;;;;35991:26:0;;35946:12;35991:26;;;:18;:26;;;;;;35961:4;;35991:26;;;:59;;-1:-1:-1;;;;;;36021:29:0;;;;;;:18;:29;;;;;;;;35991:59;35988:105;;;-1:-1:-1;36076:5:0;35988:105;36107:7;36103:761;;36130:21;29679:10;;;29658:18;:31;29722:11;;;29700:19;:33;29768:13;;;29744:21;:37;29819:16;;;29792:24;:43;29878:11;;;29856:19;:33;29923:12;;;29900:20;:35;29971:14;;;29946:22;:39;30024:17;;;29996:25;:45;-1:-1:-1;30062:17:0;;;;30090:15;;;;30116:14;;;;30141:20;;;;30178:18;;;;30207:16;;;30234:15;;;;30260:21;29608:681;36130:21;36103:761;;;36225:13;;-1:-1:-1;;;;;36215:23:0;;;36225:13;;36215:23;36212:301;;;36268:10;;36258:7;:20;36313:16;;36297:13;:32;36359:11;;36348:8;:22;-1:-1:-1;;;;;36393:35:0;;-1:-1:-1;36393:35:0;;;-1:-1:-1;36393:35:0;;;;;;;;36389:109;;36465:13;;36452:10;:26;36389:109;36564:13;;-1:-1:-1;;;;;36551:26:0;;;36564:13;;36551:26;36548:305;;;36607:11;;36597:7;:21;36653:17;;36637:13;:33;36700:12;;36689:8;:23;-1:-1:-1;;;;;36735:32:0;;-1:-1:-1;36735:32:0;;;-1:-1:-1;36735:32:0;;;;;;;;36731:107;;36804:14;;36791:10;:27;36731:107;36874:15;36892:29;36917:3;36892:20;36903:8;;36892:6;:10;;:20;;;;:::i;:29::-;36874:47;;36932:17;36952:31;36979:3;36952:22;36963:10;;36952:6;:10;;:22;;;;:::i;:31::-;36932:51;-1:-1:-1;36994:19:0;37016:34;36932:51;37016:19;:6;37027:7;37016:10;:19::i;:::-;:23;;:34::i;:::-;-1:-1:-1;;;;;37075:19:0;;;;;;:11;:19;;;;;;36994:56;;-1:-1:-1;37075:19:0;;:46;;;;-1:-1:-1;;;;;;37099:22:0;;;;;;:11;:22;;;;;;;;37098:23;37075:46;37071:487;;;37138:53;37160:6;37168:9;37179:11;37138:21;:53::i;:::-;37071:487;;;-1:-1:-1;;;;;37214:19:0;;;;;;:11;:19;;;;;;;;37213:20;:46;;;;-1:-1:-1;;;;;;37237:22:0;;;;;;:11;:22;;;;;;;;37213:46;37209:349;;;37276:51;37296:6;37304:9;37315:11;37276:19;:51::i;37209:349::-;-1:-1:-1;;;;;37349:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;37372:22:0;;;;;;:11;:22;;;;;;;;37349:45;37345:213;;;37411:53;37433:6;37441:9;37452:11;37411:21;:53::i;37345:213::-;37497:49;37515:6;37523:9;37534:11;37497:17;:49::i;:::-;37568:14;:12;:14::i;:::-;37593:46;37611:6;37627:1;37631:7;37593:17;:46::i;:::-;37675:23;;37649:60;;37667:6;;-1:-1:-1;;;;;37675:23:0;37699:9;37649:17;:60::i;:::-;37724:7;37720:60;;37746:22;30359:18;;30346:10;:31;30402:19;;30388:11;:33;30448:21;;30432:13;:37;30499:24;;30480:16;:43;30558:19;;30544:11;:33;30603:20;;30588:12;:35;30651:22;;30634:14;:39;30704:25;;30684:17;:45;30295:452;37746:22;35924:1863;;;;35841:1946;;;:::o;28328:561::-;28425:7;;28461;;28378;;;;;28485:289;28509:9;:16;28505:20;;28485:289;;;28575:7;28551;:21;28559:9;28569:1;28559:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28559:12:0;28551:21;;;;;;;;;;;;;:31;;:66;;;28610:7;28586;:21;28594:9;28604:1;28594:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28594:12:0;28586:21;;;;;;;;;;;;;:31;28551:66;28547:97;;;28627:7;;28636;;28619:25;;;;;;;28328:561;;:::o;28547:97::-;28669:34;28681:7;:21;28689:9;28699:1;28689:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28689:12:0;28681:21;;;;;;;;;;;;;28669:7;;:11;:34::i;:::-;28659:44;;28728:34;28740:7;:21;28748:9;28758:1;28748:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;28748:12:0;28740:21;;;;;;;;;;;;;28728:7;;:11;:34::i;:::-;28718:44;-1:-1:-1;28527:3:0;;;;:::i;:::-;;;;28485:289;;;-1:-1:-1;28810:7:0;;28798;;:20;;:11;:20::i;:::-;28788:7;:30;28784:61;;;28828:7;;28837;;28820:25;;;;;;28328:561;;:::o;28784:61::-;28864:7;;28873;;-1:-1:-1;28328:561:0;-1:-1:-1;28328:561:0:o;2685:197::-;2771:7;2806:12;2799:5;2791:28;;;;-1:-1:-1;;;2791:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2830:9:0;2842:5;2846:1;2842;:5;:::i;27324:330::-;27384:7;27393;27402;27422:12;27437:24;27453:7;27437:15;:24::i;:::-;27422:39;;27472:18;27493:30;27515:7;27493:21;:30::i;:::-;27472:51;-1:-1:-1;27534:23:0;27560:33;27472:51;27560:17;:7;27572:4;27560:11;:17::i;:33::-;27534:59;27629:4;;-1:-1:-1;27635:10:0;;-1:-1:-1;27324:330:0;;-1:-1:-1;;;27324:330:0:o;27720:429::-;27835:7;;;;27891:24;:7;27903:11;27891;:24::i;:::-;27873:42;-1:-1:-1;27926:12:0;27941:21;:4;27950:11;27941:8;:21::i;:::-;27926:36;-1:-1:-1;27973:18:0;27994:27;:10;28009:11;27994:14;:27::i;:::-;27973:48;-1:-1:-1;28032:23:0;28058:33;27973:48;28058:17;:7;28070:4;28058:11;:17::i;:33::-;28110:7;;;;-1:-1:-1;28136:4:0;;-1:-1:-1;27720:429:0;;-1:-1:-1;;;;;;;27720:429:0:o;33027:589::-;33177:16;;;33191:1;33177:16;;;;;;;;33153:21;;33177:16;;;;;;;;;;-1:-1:-1;33177:16:0;33153:40;;33222:4;33204;33209:1;33204:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33204:23:0;;;:7;;;;;;;;;;:23;;;;33248:15;;:22;;;-1:-1:-1;;;33248:22:0;;;;:15;;;;;:20;;:22;;;;;33204:7;;33248:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33238:4;33243:1;33238:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;33238:32:0;;;:7;;;;;;;;;:32;33315:15;;33283:62;;33300:4;;33315:15;33333:11;33283:8;:62::i;:::-;33384:15;;:224;;-1:-1:-1;;;33384:224:0;;-1:-1:-1;;;;;33384:15:0;;;;:66;;:224;;33465:11;;33384:15;;33535:4;;33562;;33582:15;;33384:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33082:534;33027:589;:::o;34093:414::-;34206:15;;34174:62;;34191:4;;-1:-1:-1;;;;;34206:15:0;34224:11;34174:8;:62::i;:::-;34247:15;;-1:-1:-1;;;;;34247:15:0;:31;34286:9;34319:4;34339:11;34247:15;;34451:7;6335;6362:6;-1:-1:-1;;;;;6362:6:0;;6297:79;34451:7;34247:252;;;;;;-1:-1:-1;;;;;;34247:252:0;;;-1:-1:-1;;;;;4611:15:1;;;34247:252:0;;;4593:34:1;4643:18;;;4636:34;;;;4686:18;;;4679:34;;;;4729:18;;;4722:34;4793:15;;;4772:19;;;4765:44;34473:15:0;4825:19:1;;;4818:35;4527:19;;34247:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38898:566::-;39001:15;39018:23;39043:12;39057:23;39082:12;39096:18;39118:19;39129:7;39118:10;:19::i;:::-;-1:-1:-1;;;;;39166:15:0;;;;;;:7;:15;;;;;;39000:137;;-1:-1:-1;39000:137:0;;-1:-1:-1;39000:137:0;;-1:-1:-1;39000:137:0;-1:-1:-1;39000:137:0;-1:-1:-1;39000:137:0;-1:-1:-1;39166:28:0;;39186:7;39166:19;:28::i;:::-;-1:-1:-1;;;;;39148:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39223:7;:15;;;;:28;;39243:7;39223:19;:28::i;:::-;-1:-1:-1;;;;;39205:15:0;;;;;;;:7;:15;;;;;;:46;;;;39283:18;;;;;;;:39;;39306:15;39283:22;:39::i;:::-;-1:-1:-1;;;;;39262:18:0;;;;;;:7;:18;;;;;:60;39336:26;39351:10;39336:14;:26::i;:::-;39373:23;39385:4;39391;39373:11;:23::i;:::-;39429:9;-1:-1:-1;;;;;39412:44:0;39421:6;-1:-1:-1;;;;;39412:44:0;;39440:15;39412:44;;;;12654:25:1;;12642:2;12627:18;;12508:177;39412:44:0;;;;;;;;38989:475;;;;;;38898:566;;;:::o;38306:586::-;38407:15;38424:23;38449:12;38463:23;38488:12;38502:18;38524:19;38535:7;38524:10;:19::i;:::-;-1:-1:-1;;;;;38572:15:0;;;;;;:7;:15;;;;;;38406:137;;-1:-1:-1;38406:137:0;;-1:-1:-1;38406:137:0;;-1:-1:-1;38406:137:0;-1:-1:-1;38406:137:0;-1:-1:-1;38406:137:0;-1:-1:-1;38572:28:0;;38406:137;38572:19;:28::i;:::-;-1:-1:-1;;;;;38554:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;38632:18;;;;;:7;:18;;;;;:39;;38655:15;38632:22;:39::i;:::-;-1:-1:-1;;;;;38611:18:0;;;;;;:7;:18;;;;;;;;:60;;;;38703:7;:18;;;;:39;;38726:15;38703:22;:39::i;39470:642::-;39573:15;39590:23;39615:12;39629:23;39654:12;39668:18;39690:19;39701:7;39690:10;:19::i;:::-;-1:-1:-1;;;;;39738:15:0;;;;;;:7;:15;;;;;;39572:137;;-1:-1:-1;39572:137:0;;-1:-1:-1;39572:137:0;;-1:-1:-1;39572:137:0;-1:-1:-1;39572:137:0;-1:-1:-1;39572:137:0;-1:-1:-1;39738:28:0;;39758:7;39738:19;:28::i;:::-;-1:-1:-1;;;;;39720:15:0;;;;;;:7;:15;;;;;;;;:46;;;;39795:7;:15;;;;:28;;39815:7;39795:19;:28::i;37798:502::-;37897:15;37914:23;37939:12;37953:23;37978:12;37992:18;38014:19;38025:7;38014:10;:19::i;:::-;-1:-1:-1;;;;;38062:15:0;;;;;;:7;:15;;;;;;37896:137;;-1:-1:-1;37896:137:0;;-1:-1:-1;37896:137:0;;-1:-1:-1;37896:137:0;-1:-1:-1;37896:137:0;-1:-1:-1;37896:137:0;-1:-1:-1;38062:28:0;;37896:137;38062:19;:28::i;30753:414::-;30799:7;;:12;:34;;;;-1:-1:-1;30815:13:0;;:18;30799:34;:53;;;;-1:-1:-1;30837:10:0;;:15;30799:53;:70;;;;-1:-1:-1;30856:8:0;;:13;30799:70;30796:82;;;30753:414::o;30796:82::-;30916:7;;;30898:15;:25;30958:13;;;30934:21;:37;31001:8;;;30982:16;:27;31041:10;;;31020:18;:31;-1:-1:-1;31072:11:0;;;;31094:17;;;;31122:14;;;;31147:12;30753:414::o;29268:154::-;29332:7;29359:55;29398:5;29359:20;29371:7;;29359;:11;;:20;;;;:::i;29430:166::-;29500:7;29527:61;29572:5;29527:26;29539:13;;29527:7;:11;;:26;;;;:::i;28901:355::-;28964:19;28987:10;:8;:10::i;:::-;28964:33;-1:-1:-1;29008:18:0;29029:27;:10;28964:33;29029:14;:27::i;:::-;29108:4;29092:22;;;;:7;:22;;;;;;29008:48;;-1:-1:-1;29092:38:0;;29008:48;29092:26;:38::i;:::-;29083:4;29067:22;;;;:7;:22;;;;;;;;:63;;;;29144:11;:26;;;;;;29141:107;;;29226:4;29210:22;;;;:7;:22;;;;;;:38;;29237:10;29210:26;:38::i;:::-;29201:4;29185:22;;;;:7;:22;;;;;:63;28953:303;;28901:355;:::o;26742:147::-;26820:7;;:17;;26832:4;26820:11;:17::i;:::-;26810:7;:27;26861:10;;:20;;26876:4;26861:14;:20::i;:::-;26848:10;:33;-1:-1:-1;;26742:147:0:o;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;431:251::-;501:6;554:2;542:9;533:7;529:23;525:32;522:52;;;570:1;567;560:12;522:52;602:9;596:16;621:31;646:5;621:31;:::i;687:388::-;755:6;763;816:2;804:9;795:7;791:23;787:32;784:52;;;832:1;829;822:12;784:52;871:9;858:23;890:31;915:5;890:31;:::i;:::-;940:5;-1:-1:-1;997:2:1;982:18;;969:32;1010:33;969:32;1010:33;:::i;:::-;1062:7;1052:17;;;687:388;;;;;:::o;1080:456::-;1157:6;1165;1173;1226:2;1214:9;1205:7;1201:23;1197:32;1194:52;;;1242:1;1239;1232:12;1194:52;1281:9;1268:23;1300:31;1325:5;1300:31;:::i;:::-;1350:5;-1:-1:-1;1407:2:1;1392:18;;1379:32;1420:33;1379:32;1420:33;:::i;:::-;1080:456;;1472:7;;-1:-1:-1;;;1526:2:1;1511:18;;;;1498:32;;1080:456::o;1541:315::-;1606:6;1614;1667:2;1655:9;1646:7;1642:23;1638:32;1635:52;;;1683:1;1680;1673:12;1635:52;1722:9;1709:23;1741:31;1766:5;1741:31;:::i;:::-;1791:5;-1:-1:-1;1815:35:1;1846:2;1831:18;;1815:35;:::i;:::-;1805:45;;1541:315;;;;;:::o;1861:::-;1929:6;1937;1990:2;1978:9;1969:7;1965:23;1961:32;1958:52;;;2006:1;2003;1996:12;1958:52;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;2166:2;2151:18;;;;2138:32;;-1:-1:-1;;;1861:315:1:o;2181:615::-;2267:6;2275;2328:2;2316:9;2307:7;2303:23;2299:32;2296:52;;;2344:1;2341;2334:12;2296:52;2384:9;2371:23;2413:18;2454:2;2446:6;2443:14;2440:34;;;2470:1;2467;2460:12;2440:34;2508:6;2497:9;2493:22;2483:32;;2553:7;2546:4;2542:2;2538:13;2534:27;2524:55;;2575:1;2572;2565:12;2524:55;2615:2;2602:16;2641:2;2633:6;2630:14;2627:34;;;2657:1;2654;2647:12;2627:34;2710:7;2705:2;2695:6;2692:1;2688:14;2684:2;2680:23;2676:32;2673:45;2670:65;;;2731:1;2728;2721:12;2670:65;2762:2;2754:11;;;;;2784:6;;-1:-1:-1;2181:615:1;;-1:-1:-1;;;;2181:615:1:o;2801:180::-;2857:6;2910:2;2898:9;2889:7;2885:23;2881:32;2878:52;;;2926:1;2923;2916:12;2878:52;2949:26;2965:9;2949:26;:::i;2986:180::-;3045:6;3098:2;3086:9;3077:7;3073:23;3069:32;3066:52;;;3114:1;3111;3104:12;3066:52;-1:-1:-1;3137:23:1;;2986:180;-1:-1:-1;2986:180:1:o;3171:248::-;3236:6;3244;3297:2;3285:9;3276:7;3272:23;3268:32;3265:52;;;3313:1;3310;3303:12;3265:52;3349:9;3336:23;3326:33;;3378:35;3409:2;3398:9;3394:18;3378:35;:::i;3424:306::-;3512:6;3520;3528;3581:2;3569:9;3560:7;3556:23;3552:32;3549:52;;;3597:1;3594;3587:12;3549:52;3626:9;3620:16;3610:26;;3676:2;3665:9;3661:18;3655:25;3645:35;;3720:2;3709:9;3705:18;3699:25;3689:35;;3424:306;;;;;:::o;5291:597::-;5403:4;5432:2;5461;5450:9;5443:21;5493:6;5487:13;5536:6;5531:2;5520:9;5516:18;5509:34;5561:1;5571:140;5585:6;5582:1;5579:13;5571:140;;;5680:14;;;5676:23;;5670:30;5646:17;;;5665:2;5642:26;5635:66;5600:10;;5571:140;;;5729:6;5726:1;5723:13;5720:91;;;5799:1;5794:2;5785:6;5774:9;5770:22;5766:31;5759:42;5720:91;-1:-1:-1;5872:2:1;5851:15;-1:-1:-1;;5847:29:1;5832:45;;;;5879:2;5828:54;;5291:597;-1:-1:-1;;;5291:597:1:o;9749:356::-;9951:2;9933:21;;;9970:18;;;9963:30;10029:34;10024:2;10009:18;;10002:62;10096:2;10081:18;;9749:356::o;12690:980::-;12952:4;13000:3;12989:9;12985:19;13031:6;13020:9;13013:25;13057:2;13095:6;13090:2;13079:9;13075:18;13068:34;13138:3;13133:2;13122:9;13118:18;13111:31;13162:6;13197;13191:13;13228:6;13220;13213:22;13266:3;13255:9;13251:19;13244:26;;13305:2;13297:6;13293:15;13279:29;;13326:1;13336:195;13350:6;13347:1;13344:13;13336:195;;;13415:13;;-1:-1:-1;;;;;13411:39:1;13399:52;;13506:15;;;;13471:12;;;;13447:1;13365:9;13336:195;;;-1:-1:-1;;;;;;;13587:32:1;;;;13582:2;13567:18;;13560:60;-1:-1:-1;;;13651:3:1;13636:19;13629:35;13548:3;12690:980;-1:-1:-1;;;12690:980:1:o;14188:128::-;14228:3;14259:1;14255:6;14252:1;14249:13;14246:39;;;14265:18;;:::i;:::-;-1:-1:-1;14301:9:1;;14188:128::o;14321:217::-;14361:1;14387;14377:132;;14431:10;14426:3;14422:20;14419:1;14412:31;14466:4;14463:1;14456:15;14494:4;14491:1;14484:15;14377:132;-1:-1:-1;14523:9:1;;14321:217::o;14543:168::-;14583:7;14649:1;14645;14641:6;14637:14;14634:1;14631:21;14626:1;14619:9;14612:17;14608:45;14605:71;;;14656:18;;:::i;:::-;-1:-1:-1;14696:9:1;;14543:168::o;14716:125::-;14756:4;14784:1;14781;14778:8;14775:34;;;14789:18;;:::i;:::-;-1:-1:-1;14826:9:1;;14716:125::o;14846:380::-;14925:1;14921:12;;;;14968;;;14989:61;;15043:4;15035:6;15031:17;15021:27;;14989:61;15096:2;15088:6;15085:14;15065:18;15062:38;15059:161;;;15142:10;15137:3;15133:20;15130:1;15123:31;15177:4;15174:1;15167:15;15205:4;15202:1;15195:15;15059:161;;14846:380;;;:::o;15231:135::-;15270:3;-1:-1:-1;;15291:17:1;;15288:43;;;15311:18;;:::i;:::-;-1:-1:-1;15358:1:1;15347:13;;15231:135::o;15371:127::-;15432:10;15427:3;15423:20;15420:1;15413:31;15463:4;15460:1;15453:15;15487:4;15484:1;15477:15;15503:127;15564:10;15559:3;15555:20;15552:1;15545:31;15595:4;15592:1;15585:15;15619:4;15616:1;15609:15;15635:127;15696:10;15691:3;15687:20;15684:1;15677:31;15727:4;15724:1;15717:15;15751:4;15748:1;15741:15;15899:131;-1:-1:-1;;;;;15974:31:1;;15964:42;;15954:70;;16020:1;16017;16010:12;15954:70;15899:131;:::o

Swarm Source

ipfs://90ee20392094a870a1fe950959dc0977d999f0c374c5031935dc37499858b8c5
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.