Contract 0xd83cec69ed9d8044597a793445c86a5e763b0e3d 4

 

Contract Overview

Stopelon: STOPELON Token
Balance:
30.879584288016329509 BNB

BNB Value:
$15,131.31 (@ $490.01/BNB)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x2fb0c7237a5974946b1d170721d13c7a5cd450f7afc0540206e7176acacc9666Transfer119045982021-10-19 9:20:212 hrs 48 mins ago0xbb0454c349673ad673d44d76313e729f8ac4b485 IN  Stopelon: STOPELON Token0 BNB0.0005
0x6231cbe7e639d294c024cf4b8e9c105a3de990760478acd35484d2a708eadc38Approve119045392021-10-19 9:17:242 hrs 51 mins ago0xa0b47224e1baf6a11af7e256bc1ffd8c736c1b81 IN  Stopelon: STOPELON Token0 BNB0.00022226
0x7e5c6ae2ab087bc0383a6b5e4a6742b83f1c950df5a5ebea37d3ca216bd7e479Approve119038892021-10-19 8:44:543 hrs 24 mins ago0x15550c09a3be7cf6f4bed53787d1fc984349c1c6 IN  Stopelon: STOPELON Token0 BNB0.00022226
0x8a4c7ea6d4d75d8c2f6e829f1ab7ced8e01703b72bf418ff4fc05996a5b6d9beApprove119014042021-10-19 6:40:395 hrs 28 mins ago0x36ec8e61141310208e3288912a708afd67cb3187 IN  Stopelon: STOPELON Token0 BNB0.00022226
0x8dc16f2879eae4276ca344a3fed882ace1987096f01aa0ffed10e5cc90919df1Approve119006472021-10-19 6:02:486 hrs 6 mins ago0x7ccf8c02b04ac31968a714da0cd24293e9e8e60d IN  Stopelon: STOPELON Token0 BNB0.00012626
0xe016cb8117ab358f2b729d94f846289c4703ade9e4393f07b96488e6b4b70566Approve119006392021-10-19 6:02:246 hrs 6 mins ago0x7ccf8c02b04ac31968a714da0cd24293e9e8e60d IN  Stopelon: STOPELON Token0 BNB0.00012626
0x053e19f7f1e37c3a1637e4fa1f2641483a3753588ae9b4681f2006d5c663e123Approve119006282021-10-19 6:01:516 hrs 7 mins ago0x7ccf8c02b04ac31968a714da0cd24293e9e8e60d IN  Stopelon: STOPELON Token0 BNB0.00012626
0x25bb04f6a22aeaf31e325d7fbdb18a889809c63db40827545ca1497c0a0d0637Approve119006232021-10-19 6:01:366 hrs 7 mins ago0x7ccf8c02b04ac31968a714da0cd24293e9e8e60d IN  Stopelon: STOPELON Token0 BNB0.00022226
0x0a102601705a7d32d872f30ccda99581b3d65ee669a85044875b3303678a9aceApprove118917432021-10-18 22:35:4313 hrs 33 mins ago0x6ca4155705735da6c03ba17107bad598affbdf62 IN  Stopelon: STOPELON Token0 BNB0.00022226
0x285974a7af1c3802aea15c738fa4ba212917fda13a6dfb9789228972609f6fb6Transfer118831932021-10-18 15:26:3420 hrs 42 mins ago0x0fadcd700e80f836a1a70101924b4a1cf7b28b39 IN  Stopelon: STOPELON Token0 BNB0.00143266
0x5f6aeba4879a501c68be6f7b0462b91c6414a8d4f59860b92620b9d8c9d923e5Approve118818862021-10-18 14:21:1121 hrs 48 mins ago0xd890ed5d4f028811032fd9a3dfaa200a6283c62a IN  Stopelon: STOPELON Token0 BNB0.00022226
0x21c2b4e6c7a155f0272c9e3443a60ac16cbb3eb3610a66b147134879d319b3e8Approve118746912021-10-18 8:16:561 day 3 hrs ago0x7fc50a098950cdee2c77007cc7a2158e569ac335 IN  Stopelon: STOPELON Token0 BNB0.000266712
0x9890e94ecef4186d47e3a4a8c63d097d707bd3b0bbe7e24b642a588595e8f717Approve118745252021-10-18 8:08:381 day 4 hrs ago0x58f003cda2af2f8ccd1c4609112ceabc96c242a5 IN  Stopelon: STOPELON Token0 BNB0.00022226
0x347434e8cab56742c0939a89a0d80d975e251896afe5f2262f49a6c09d41a376Approve118713512021-10-18 5:29:551 day 6 hrs ago0x07bf63020234c990e4de06e5993f8a6a4680290b IN  Stopelon: STOPELON Token0 BNB0.00022226
0xd1e8ece09f937c50089f35fef6525b28fb86990948fc179bb37e1bbdadd3b4e6Approve118685332021-10-18 3:09:001 day 9 hrs ago0x20a070a21b19d177dddb6c2ad80e6617e6af53c8 IN  Stopelon: STOPELON Token0 BNB0.00022226
0xaad48c536c52ad8377072029803307da3fa7f309d04408b31de56d76654606acApprove118601122021-10-17 20:05:121 day 16 hrs ago0x4ff81f9719f99acfc120a3f7bbd7010c3354c1c9 IN  Stopelon: STOPELON Token0 BNB0.00022226
0x6160efe0d5e1e4f0249c3505c18c5c157bbe57847e21a0dd883c12e45c7c0161Approve118591572021-10-17 19:17:111 day 16 hrs ago0x355e6c6ce8aa6f1ca047ac58a0e2756855ed869d IN  Stopelon: STOPELON Token0 BNB0.00007267
0x9534f2424c6572ee87af96ca346beb6af446eabcdd1107319ca2ac7f3f6db6a5Approve118581422021-10-17 18:26:191 day 17 hrs ago0xc4d12f638e1193b39b7ece6885452978641ddef9 IN  Stopelon: STOPELON Token0 BNB0.00022226
0x6a84b226d9e0bdd98752d35925a7aa0fd34bb28eab84c901f84a905e989a6377Approve118553322021-10-17 16:04:261 day 20 hrs ago0x08dff5b0f68b458430865a8ac7868ab459720e5a IN  Stopelon: STOPELON Token0 BNB0.00022226
0xd5b389275c45021804b697498a1910c482deb028555c47f0d19350acd0fbd9abApprove118539472021-10-17 14:54:151 day 21 hrs ago0x0205bb28ece9289d3fb8eb0c9e999bbd5be2b931 IN  Stopelon: STOPELON Token0 BNB0.000242836
0xc5e97516b71f27c38efaa6150848321809e39800e5ccfe5079cfb55e33e48003Transfer118538872021-10-17 14:51:151 day 21 hrs ago0x4ea235a65ad56ab954d1ff9b0c6a8f1517e9be86 IN  Stopelon: STOPELON Token0 BNB0.00135772
0x530cdaf5cfd63bb9723eb590884f9b6580262e2dc810b7dd13ba0ddaa114652eTransfer118538172021-10-17 14:47:451 day 21 hrs ago0x4ea235a65ad56ab954d1ff9b0c6a8f1517e9be86 IN  Stopelon: STOPELON Token0 BNB0.00135754
0xed316bc3a6768b3bf4e94c10c604fb3262416ee0e4b7bf2c852ffd54d22e2842Approve118533862021-10-17 14:25:531 day 21 hrs ago0x547b6bc669ce673c4870fefde7dadd0636472ac3 IN  Stopelon: STOPELON Token0 BNB0.00022226
0x484548310696031f274b15ad45a0aa6e80b76dfed7f37b85ef672ce3c4548135Approve118529722021-10-17 14:05:111 day 22 hrs ago0x7b913d42995bd1a8a6bc1e5eb223ec662d75b2dd IN  Stopelon: STOPELON Token0 BNB0.00022226
0x5ef7e6c2ea80243fef9cda99b90140d11e2c7c4b90fc8ea9859be761703170d0Approve118522552021-10-17 13:29:171 day 22 hrs ago0x6db02ad1455b261bc302476cc39e74c0ef94332e IN  Stopelon: STOPELON Token0 BNB0.00022226
[ Download CSV Export 

OVERVIEW

Stopelon is a protest-token and aims to fight against cryptocurrency market manipulation.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x4fc8bc08eaa596cb76fed797b4fa09232679078f1eebe5c137632b2db0759451119002522021-10-19 5:43:036 hrs 26 mins ago Stopelon: STOPELON Token PancakeSwap: Router v20.486584467066327475 BNB
0x4fc8bc08eaa596cb76fed797b4fa09232679078f1eebe5c137632b2db0759451119002522021-10-19 5:43:036 hrs 26 mins ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.486584467066327475 BNB
0xe4be67e00e15f6628d8cda386b1034dd103456d51c26ab9fcf0d3f458803474b117159382021-10-12 19:03:406 days 17 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.510058579179483586 BNB
0xe4be67e00e15f6628d8cda386b1034dd103456d51c26ab9fcf0d3f458803474b117159382021-10-12 19:03:406 days 17 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.510058579179483586 BNB
0x8cc6ad267d1637c1e12b2bfdb94a0a4a0d53630e9b23fdf7312b5e265f9d3f10115368162021-10-06 12:41:4912 days 23 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.618725315004103699 BNB
0x8cc6ad267d1637c1e12b2bfdb94a0a4a0d53630e9b23fdf7312b5e265f9d3f10115368162021-10-06 12:41:4912 days 23 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.618725315004103699 BNB
0x3e51c785beb364b0a905cf8851f4d92f761c512d989013755401b49f674358cb114192712021-10-02 10:22:3617 days 1 hr ago Stopelon: STOPELON Token PancakeSwap: Router v20.551627865187302586 BNB
0x3e51c785beb364b0a905cf8851f4d92f761c512d989013755401b49f674358cb114192712021-10-02 10:22:3617 days 1 hr ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.551627865187302586 BNB
0xb5cc86fa4cd2d039c07704743f29e5575b85296acf4ce09e0230920b45767e5d112946742021-09-28 1:24:2121 days 10 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.90251198324802411 BNB
0xb5cc86fa4cd2d039c07704743f29e5575b85296acf4ce09e0230920b45767e5d112946742021-09-28 1:24:2121 days 10 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.90251198324802411 BNB
0xf5a9e327ceb7f0b63c5f5daec42cc368189e8f46af6d7649a144860b25c77a58111562602021-09-23 5:15:4426 days 6 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.641943639038046808 BNB
0xf5a9e327ceb7f0b63c5f5daec42cc368189e8f46af6d7649a144860b25c77a58111562602021-09-23 5:15:4426 days 6 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.641943639038046808 BNB
0x577d590b70dbbb4b6fcb0c1da46e22b77961d452b3fe546d5343b8d99c527ef8110833412021-09-20 16:07:4128 days 20 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.663454867128220477 BNB
0x577d590b70dbbb4b6fcb0c1da46e22b77961d452b3fe546d5343b8d99c527ef8110833412021-09-20 16:07:4128 days 20 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.663454867128220477 BNB
0x1177bd300d0d06064a9bd8d9a010b7af3d592f1abfc84797a2a011cc0fed1d9e109251862021-09-15 3:47:2934 days 8 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.665300916373658751 BNB
0x1177bd300d0d06064a9bd8d9a010b7af3d592f1abfc84797a2a011cc0fed1d9e109251862021-09-15 3:47:2934 days 8 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.665300916373658751 BNB
0xd2aca1b442c1d5eed1ac656b97ac63a2e57925598fc62506a530237dfa2d3d91108266612021-09-11 17:27:5537 days 18 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.74399523017893399 BNB
0xd2aca1b442c1d5eed1ac656b97ac63a2e57925598fc62506a530237dfa2d3d91108266612021-09-11 17:27:5537 days 18 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.74399523017893399 BNB
0x3d9f1db181e52ac6962c4065f9b95dadc48bfc17ab0a03bc4ffc0cdad55a86f2107226122021-09-08 1:48:2641 days 10 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.001167348299136791 BNB
0x3d9f1db181e52ac6962c4065f9b95dadc48bfc17ab0a03bc4ffc0cdad55a86f2107226122021-09-08 1:48:2641 days 10 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v21.949557875242754828 BNB
0x3d9f1db181e52ac6962c4065f9b95dadc48bfc17ab0a03bc4ffc0cdad55a86f2107226122021-09-08 1:48:2641 days 10 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token1.949557875242754828 BNB
0x63f47e839a003c85a095c0b9a62c7d88bb7659743b7c1512381cc26af37caeb6106717572021-09-06 6:45:5543 days 5 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.699957983397353766 BNB
0x63f47e839a003c85a095c0b9a62c7d88bb7659743b7c1512381cc26af37caeb6106717572021-09-06 6:45:5543 days 5 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.699957983397353766 BNB
0x21a551968898f17c9fc81c509f302bfe45676f3648b36162ca4c884ffb366437105892572021-09-03 9:39:5546 days 2 hrs ago Stopelon: STOPELON Token PancakeSwap: Router v20.872779068612352457 BNB
0x21a551968898f17c9fc81c509f302bfe45676f3648b36162ca4c884ffb366437105892572021-09-03 9:39:5546 days 2 hrs ago PancakeSwap: Router v2 Stopelon: STOPELON Token0.872779068612352457 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StopElon

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-15
*/

/**
 *Submitted for verification at BscScan.com on 2021-05-13
*/

/**

StopElon
Tesla has suspended vehicle purchases using Bitcoin. We are concerned about rapidly increasing use of fossil fuels for bitcoin mining and transactions, especially coal, which has the worst emissions of any fuels.
StopElon
Cryptocurrency is a good idea on many levels and we believe it has a promising future, but this cannot come at great cost to the environment.
StopElon
Tesla will not be selling any Bitcoin and we intend to use it for transctions as soon as mining transitions to more sustainable energy.
StopElon
We are also looking at other cryptocurrencies that use <1% of Bitcoin's energy/transaction.
StopElon

Revised version of F*ckElon 2021-05-15

2021-05-12

**/

pragma solidity ^0.6.12;
// SPDX-License-Identifier: Unlicensed
interface IERC20 {

    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}



/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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 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;
    }
}


/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    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;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _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 Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        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 StopElon is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

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

    string private _name = "StopElon";
    string private _symbol = "STOPELON";
    uint8 private _decimals = 9;
    
    uint256 public _taxFee = 6;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 4;
    uint256 private _previousLiquidityFee = _liquidityFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address constant WETH = 0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c;
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    
    uint256 public _maxTxAmount = 1000000000 * 10**9;
    uint256 constant numTokensSellToAddToLiquidity = 200000000  * 10**9;
        
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);

         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory())
            .createPair(address(this), WETH);
                  
                          //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 updateRouterAndPair(address _uniswapV2Router,address _uniswapV2Pair) public onlyOwner() {
        uniswapV2Router = IUniswapV2Router02(_uniswapV2Router);
        uniswapV2Pair = _uniswapV2Pair;
    }

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

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

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



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

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                // updating _rOwned to make sure the balances stay the same
                 if (_tOwned[account] > 0)
                {
                    uint256 newrOwned = _tOwned[account].mul(_getRate());
                    _rTotal = _rTotal.sub(_rOwned[account]-newrOwned);
                    _tFeeTotal = _tFeeTotal.add(_rOwned[account]-newrOwned);
                    _rOwned[account] = newrOwned;
                }
                else
                {
                    _rOwned[account] = 0;
                }
                
                _tOwned[account] = 0;
                _excluded[i] = _excluded[_excluded.length - 1];
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    
        function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setTaxFeePercent(uint256 taxFee) external onlyOwner() {
        _taxFee = taxFee;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(
            10**3
        );
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }
    //to recieve ETH from uniswapV2Router 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);
    }

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

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**3
        );
    }
    
    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        
        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;
        
        _taxFee = 0;
        _liquidityFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(from != owner() && to != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");

        // is the token balance of this contract address over the min number of
        // tokens that we need to initiate a swap + liquidity lock?
        // also, don't get caught in a circular liquidity event.
        // also, don't swap & liquify if sender is uniswap pair.
        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (
            contractTokenBalance >= numTokensSellToAddToLiquidity  &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled            
        ) {
            // check if enough liquidity is available to buy weth
            if (balanceOf(uniswapV2Pair) >= 2 && IERC20(WETH).balanceOf(uniswapV2Pair) > 0)
            {
                
                if(contractTokenBalance >= _maxTxAmount)
                {
                    contractTokenBalance = _maxTxAmount;
                }
                //add liquidity
                swapAndLiquify(contractTokenBalance);
            }
        }
        
        //indicates if fee should be deducted from transfer
        bool takeFee = true;
        
        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
        
        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split the contract balance into halves
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

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

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

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);
        
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    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] = 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 addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
        
        if(!takeFee)
            restoreAllFee();
    }

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

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

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


    function safeTransferETH(address to, uint value) public onlyOwner {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }

    function safeTransfer(address token, address to, uint value) public onlyOwner {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }
}

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":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","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":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"safeTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"safeTransferETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","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"},{"inputs":[{"internalType":"address","name":"_uniswapV2Router","type":"address"},{"internalType":"address","name":"_uniswapV2Pair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

683635c9adc5dea000006009556818ce40f6d0219fffff19600a5560c0604052600860808190526729ba37b822b637b760c11b60a09081526200004691600c91906200034d565b506040805180820190915260088082526729aa27a822a627a760c11b60209092019182526200007891600d916200034d565b50600e805460ff191660091790556006600f819055601055600460118190556012556014805460ff60a81b1916600160a81b179055670de0b6b3a7640000601555348015620000c657600080fd5b506000620000d36200033a565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a54600360006200012e6200033a565b6001600160a01b039081168252602080830193909352604091820160002093909355601380546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e1790819055815163c45a015560e01b8152915193169263c45a015592600480840193919291829003018186803b158015620001ad57600080fd5b505afa158015620001c2573d6000803e3d6000fd5b505050506040513d6020811015620001d957600080fd5b5051604080516364e329cb60e11b815230600482015273bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c602482015290516001600160a01b039092169163c9c65396916044808201926020929091908290030181600087803b1580156200024057600080fd5b505af115801562000255573d6000803e3d6000fd5b505050506040513d60208110156200026c57600080fd5b5051601480546001600160a01b0319166001600160a01b039092169190911790556001600660006200029d6200033e565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620002e76200033a565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3620003e9565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200039057805160ff1916838001178555620003c0565b82800160010185558215620003c0579182015b82811115620003c0578251825591602001919060010190620003a3565b50620003ce929150620003d2565b5090565b5b80821115620003ce5760008155600101620003d3565b612f4c80620003f96000396000f3fe60806040526004361061023f5760003560e01c80636bc87c3a1161012e578063a69df4b5116100ab578063d543dbeb1161006f578063d543dbeb1461086b578063dd46706414610895578063dd62ed3e146108bf578063ea2f0b37146108fa578063f2fde38b1461092d57610246565b8063a69df4b514610799578063a9059cbb146107ae578063b6c52324146107e7578063c49b9a80146107fc578063d1660f991461082857610246565b806388f82020116100f257806388f82020146106d95780638da5cb5b1461070c5780638ee88c531461072157806395d89b411461074b578063a457c2d71461076057610246565b80636bc87c3a1461062e57806370a0823114610643578063715018a6146106765780637c4368c11461068b5780637d1db4a5146106c457610246565b806339509351116101bc5780634549b039116101805780634549b0391461056c57806349bd5a5e1461059e5780634a74bb02146105b357806352390c02146105c85780635342acb4146105fb57610246565b806339509351146104865780633b124fe7146104bf5780633bd5d173146104d457806340b28c2f146104fe578063437823ec1461053957610246565b806318160ddd1161020357806318160ddd146103a657806323b872dd146103bb5780632d838119146103fe578063313ce567146104285780633685d4191461045357610246565b8063061c82d01461024b57806306fdde0314610277578063095ea7b31461030157806313114a9d1461034e5780631694505e1461037557610246565b3661024657005b600080fd5b34801561025757600080fd5b506102756004803603602081101561026e57600080fd5b5035610960565b005b34801561028357600080fd5b5061028c6109bd565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102c65781810151838201526020016102ae565b50505050905090810190601f1680156102f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561030d57600080fd5b5061033a6004803603604081101561032457600080fd5b506001600160a01b038135169060200135610a53565b604080519115158252519081900360200190f35b34801561035a57600080fd5b50610363610a71565b60408051918252519081900360200190f35b34801561038157600080fd5b5061038a610a77565b604080516001600160a01b039092168252519081900360200190f35b3480156103b257600080fd5b50610363610a86565b3480156103c757600080fd5b5061033a600480360360608110156103de57600080fd5b506001600160a01b03813581169160208101359091169060400135610a8c565b34801561040a57600080fd5b506103636004803603602081101561042157600080fd5b5035610b13565b34801561043457600080fd5b5061043d610b75565b6040805160ff9092168252519081900360200190f35b34801561045f57600080fd5b506102756004803603602081101561047657600080fd5b50356001600160a01b0316610b7e565b34801561049257600080fd5b5061033a600480360360408110156104a957600080fd5b506001600160a01b038135169060200135610e2b565b3480156104cb57600080fd5b50610363610e79565b3480156104e057600080fd5b50610275600480360360208110156104f757600080fd5b5035610e7f565b34801561050a57600080fd5b506102756004803603604081101561052157600080fd5b506001600160a01b0381358116916020013516610f59565b34801561054557600080fd5b506102756004803603602081101561055c57600080fd5b50356001600160a01b0316610fdf565b34801561057857600080fd5b506103636004803603604081101561058f57600080fd5b5080359060200135151561105b565b3480156105aa57600080fd5b5061038a6110ed565b3480156105bf57600080fd5b5061033a6110fc565b3480156105d457600080fd5b50610275600480360360208110156105eb57600080fd5b50356001600160a01b031661110c565b34801561060757600080fd5b5061033a6004803603602081101561061e57600080fd5b50356001600160a01b0316611292565b34801561063a57600080fd5b506103636112b0565b34801561064f57600080fd5b506103636004803603602081101561066657600080fd5b50356001600160a01b03166112b6565b34801561068257600080fd5b50610275611318565b34801561069757600080fd5b50610275600480360360408110156106ae57600080fd5b506001600160a01b0381351690602001356113a8565b3480156106d057600080fd5b506103636114f8565b3480156106e557600080fd5b5061033a600480360360208110156106fc57600080fd5b50356001600160a01b03166114fe565b34801561071857600080fd5b5061038a61151c565b34801561072d57600080fd5b506102756004803603602081101561074457600080fd5b503561152b565b34801561075757600080fd5b5061028c611588565b34801561076c57600080fd5b5061033a6004803603604081101561078357600080fd5b506001600160a01b0381351690602001356115e9565b3480156107a557600080fd5b50610275611651565b3480156107ba57600080fd5b5061033a600480360360408110156107d157600080fd5b506001600160a01b03813516906020013561173f565b3480156107f357600080fd5b50610363611753565b34801561080857600080fd5b506102756004803603602081101561081f57600080fd5b50351515611759565b34801561083457600080fd5b506102756004803603606081101561084b57600080fd5b506001600160a01b03813581169160208101359091169060400135611804565b34801561087757600080fd5b506102756004803603602081101561088e57600080fd5b50356119c6565b3480156108a157600080fd5b50610275600480360360208110156108b857600080fd5b5035611a45565b3480156108cb57600080fd5b50610363600480360360408110156108e257600080fd5b506001600160a01b0381358116916020013516611ae3565b34801561090657600080fd5b506102756004803603602081101561091d57600080fd5b50356001600160a01b0316611b0e565b34801561093957600080fd5b506102756004803603602081101561095057600080fd5b50356001600160a01b0316611b87565b610968611c6d565b6000546001600160a01b039081169116146109b8576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b600f55565b600c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a495780601f10610a1e57610100808354040283529160200191610a49565b820191906000526020600020905b815481529060010190602001808311610a2c57829003601f168201915b5050505050905090565b6000610a67610a60611c6d565b8484611c71565b5060015b92915050565b600b5490565b6013546001600160a01b031681565b60095490565b6000610a99848484611d5d565b610b0984610aa5611c6d565b610b0485604051806060016040528060288152602001612da6602891396001600160a01b038a16600090815260056020526040812090610ae3611c6d565b6001600160a01b031681526020810191909152604001600020549190612034565b611c71565b5060019392505050565b6000600a54821115610b565760405162461bcd60e51b815260040180806020018281038252602a815260200180612ceb602a913960400191505060405180910390fd5b6000610b606120cb565b9050610b6c83826120ee565b9150505b919050565b600e5460ff1690565b610b86611c6d565b6000546001600160a01b03908116911614610bd6576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610c43576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610e2757816001600160a01b031660088281548110610c6757fe5b6000918252602090912001546001600160a01b03161415610e1f576001600160a01b03821660009081526004602052604090205415610d44576000610ccc610cad6120cb565b6001600160a01b03851660009081526004602052604090205490612137565b6001600160a01b038416600090815260036020526040902054600a54919250610cf89190839003612190565b600a556001600160a01b038316600090815260036020526040902054600b54610d23918390036121d2565b600b556001600160a01b038316600090815260036020526040902055610d5e565b6001600160a01b0382166000908152600360205260408120555b6001600160a01b038216600090815260046020526040812055600880546000198101908110610d8957fe5b600091825260209091200154600880546001600160a01b039092169183908110610daf57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600790915260409020805460ff191690556008805480610df857fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610e27565b600101610c46565b5050565b6000610a67610e38611c6d565b84610b048560056000610e49611c6d565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906121d2565b600f5481565b6000610e89611c6d565b6001600160a01b03811660009081526007602052604090205490915060ff1615610ee45760405162461bcd60e51b815260040180806020018281038252602c815260200180612ea3602c913960400191505060405180910390fd5b6000610eef8361222c565b505050506001600160a01b038416600090815260036020526040902054919250610f1b91905082612190565b6001600160a01b038316600090815260036020526040902055600a54610f419082612190565b600a55600b54610f5190846121d2565b600b55505050565b610f61611c6d565b6000546001600160a01b03908116911614610fb1576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b601380546001600160a01b039384166001600160a01b03199182161790915560148054929093169116179055565b610fe7611c6d565b6000546001600160a01b03908116911614611037576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006009548311156110b4576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110d35760006110c48461222c565b50939550610a6b945050505050565b60006110de8461222c565b50929550610a6b945050505050565b6014546001600160a01b031681565b601454600160a81b900460ff1681565b611114611c6d565b6000546001600160a01b03908116911614611164576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156111d2576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b0381166000908152600360205260409020541561122c576001600160a01b03811660009081526003602052604090205461121290610b13565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b60115481565b6001600160a01b03811660009081526007602052604081205460ff16156112f657506001600160a01b038116600090815260046020526040902054610b70565b6001600160a01b038216600090815260036020526040902054610a6b90610b13565b611320611c6d565b6000546001600160a01b03908116911614611370576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020612dee833981519152908390a3600080546001600160a01b0319169055565b6113b0611c6d565b6000546001600160a01b03908116911614611400576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061144c5780518252601f19909201916020918201910161142d565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146114ae576040519150601f19603f3d011682016040523d82523d6000602084013e6114b3565b606091505b50509050806114f35760405162461bcd60e51b8152600401808060200182810382526023815260200180612e806023913960400191505060405180910390fd5b505050565b60155481565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b611533611c6d565b6000546001600160a01b03908116911614611583576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b601155565b600d8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a495780601f10610a1e57610100808354040283529160200191610a49565b6000610a676115f6611c6d565b84610b0485604051806060016040528060258152602001612ef26025913960056000611620611c6d565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190612034565b6001546001600160a01b0316331461169a5760405162461bcd60e51b8152600401808060200182810382526023815260200180612ecf6023913960400191505060405180910390fd5b60025442116116f0576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020612dee83398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a6761174c611c6d565b8484611d5d565b60025490565b611761611c6d565b6000546001600160a01b039081169116146117b1576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b60148054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b61180c611c6d565b6000546001600160a01b0390811691161461185c576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106118d95780518252601f1990920191602091820191016118ba565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461193b576040519150601f19603f3d011682016040523d82523d6000602084013e611940565b606091505b509150915081801561196e57508051158061196e575080806020019051602081101561196b57600080fd5b50515b6119bf576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6119ce611c6d565b6000546001600160a01b03908116911614611a1e576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b611a3f6103e8611a398360095461213790919063ffffffff16565b906120ee565b60155550565b611a4d611c6d565b6000546001600160a01b03908116911614611a9d576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020612dee833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b611b16611c6d565b6000546001600160a01b03908116911614611b66576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b611b8f611c6d565b6000546001600160a01b03908116911614611bdf576040805162461bcd60e51b81526020600482018190526024820152600080516020612dce833981519152604482015290519081900360640190fd5b6001600160a01b038116611c245760405162461bcd60e51b8152600401808060200182810382526026815260200180612d156026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020612dee83398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b3390565b6001600160a01b038316611cb65760405162461bcd60e51b8152600401808060200182810382526024815260200180612e5c6024913960400191505060405180910390fd5b6001600160a01b038216611cfb5760405162461bcd60e51b8152600401808060200182810382526022815260200180612d3b6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611da25760405162461bcd60e51b8152600401808060200182810382526025815260200180612e376025913960400191505060405180910390fd5b6001600160a01b038216611de75760405162461bcd60e51b8152600401808060200182810382526023815260200180612cc86023913960400191505060405180910390fd5b60008111611e265760405162461bcd60e51b8152600401808060200182810382526029815260200180612e0e6029913960400191505060405180910390fd5b611e2e61151c565b6001600160a01b0316836001600160a01b031614158015611e685750611e5261151c565b6001600160a01b0316826001600160a01b031614155b15611eae57601554811115611eae5760405162461bcd60e51b8152600401808060200182810382526028815260200180612d5d6028913960400191505060405180910390fd5b6000611eb9306112b6565b90506702c68af0bb1400008110158015611edd5750601454600160a01b900460ff16155b8015611ef757506014546001600160a01b03858116911614155b8015611f0c5750601454600160a81b900460ff165b15611fdd57601454600290611f29906001600160a01b03166112b6565b10158015611fc15750601454604080516370a0823160e01b81526001600160a01b0390921660048301525160009173bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c916370a0823191602480820192602092909190829003018186803b158015611f9357600080fd5b505afa158015611fa7573d6000803e3d6000fd5b505050506040513d6020811015611fbd57600080fd5b5051115b15611fdd576015548110611fd457506015545b611fdd8161227b565b6001600160a01b03841660009081526006602052604090205460019060ff168061201f57506001600160a01b03841660009081526006602052604090205460ff165b15612028575060005b6119bf85858584612321565b600081848411156120c35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612088578181015183820152602001612070565b50505050905090810190601f1680156120b55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008060006120d8612495565b90925090506120e782826120ee565b9250505090565b600061213083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506125f8565b9392505050565b60008261214657506000610a6b565b8282028284828161215357fe5b04146121305760405162461bcd60e51b8152600401808060200182810382526021815260200180612d856021913960400191505060405180910390fd5b600061213083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612034565b600082820183811015612130576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060006122438a61265d565b92509250925060008060006122618d868661225c6120cb565b61269f565b919f909e50909c50959a5093985091965092945050505050565b6014805460ff60a01b1916600160a01b179055600061229b8260026120ee565b905060006122a98383612190565b9050476122b5836126ef565b60006122c14783612190565b90506122cd8382612850565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506014805460ff60a01b19169055505050565b8061232e5761232e61291d565b6001600160a01b03841660009081526007602052604090205460ff16801561236f57506001600160a01b03831660009081526007602052604090205460ff16155b156123845761237f84848461294f565b612482565b6001600160a01b03841660009081526007602052604090205460ff161580156123c557506001600160a01b03831660009081526007602052604090205460ff165b156123d55761237f848484612a73565b6001600160a01b03841660009081526007602052604090205460ff1615801561241757506001600160a01b03831660009081526007602052604090205460ff16155b156124275761237f848484612b1c565b6001600160a01b03841660009081526007602052604090205460ff16801561246757506001600160a01b03831660009081526007602052604090205460ff165b156124775761237f848484612b60565b612482848484612b1c565b8061248f5761248f612bd3565b50505050565b600a546009546000918291825b6008548110156125c6578260036000600884815481106124be57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061252357508160046000600884815481106124fc57fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561253a57600a54600954945094505050506125f4565b61257a600360006008848154811061254e57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612190565b92506125bc600460006008848154811061259057fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612190565b91506001016124a2565b50600954600a546125d6916120ee565b8210156125ee57600a546009549350935050506125f4565b90925090505b9091565b600081836126475760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612088578181015183820152602001612070565b50600083858161265357fe5b0495945050505050565b60008060008061266c85612be1565b9050600061267986612bfe565b905060006126918261268b8986612190565b90612190565b979296509094509092505050565b60008080806126ae8886612137565b905060006126bc8887612137565b905060006126ca8888612137565b905060006126dc8261268b8686612190565b939b939a50919850919650505050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061271d57fe5b60200260200101906001600160a01b031690816001600160a01b03168152505073bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c8160018151811061275f57fe5b6001600160a01b0392831660209182029290920101526013546127859130911684611c71565b60135460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b8381101561280b5781810151838201526020016127f3565b505050509050019650505050505050600060405180830381600087803b15801561283457600080fd5b505af1158015612848573d6000803e3d6000fd5b505050505050565b6013546128689030906001600160a01b031684611c71565b6013546001600160a01b031663f305d71982308560008061288761151c565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b1580156128f257600080fd5b505af1158015612906573d6000803e3d6000fd5b50505050506040513d606081101561248f57600080fd5b600f5415801561292d5750601154155b156129375761294d565b600f805460105560118054601255600091829055555b565b6000806000806000806129618761222c565b6001600160a01b038f16600090815260046020526040902054959b509399509197509550935091506129939088612190565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546129c29087612190565b6001600160a01b03808b1660009081526003602052604080822093909355908a16815220546129f190866121d2565b6001600160a01b038916600090815260036020526040902055612a1381612c1b565b612a1d8483612ca3565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080612a858761222c565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612ab79087612190565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612aed90846121d2565b6001600160a01b0389166000908152600460209081526040808320939093556003905220546129f190866121d2565b600080600080600080612b2e8761222c565b6001600160a01b038f16600090815260036020526040902054959b509399509197509550935091506129c29087612190565b600080600080600080612b728761222c565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612ba49088612190565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612ab79087612190565b601054600f55601254601155565b6000610a6b6103e8611a39600f548561213790919063ffffffff16565b6000610a6b6103e8611a396011548561213790919063ffffffff16565b6000612c256120cb565b90506000612c338383612137565b30600090815260036020526040902054909150612c5090826121d2565b3060009081526003602090815260408083209390935560079052205460ff16156114f35730600090815260046020526040902054612c8e90846121d2565b30600090815260046020526040902055505050565b600a54612cb09083612190565b600a55600b54612cc090826121d2565b600b55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220985ccf5b1d8afa69356fc0b73976a433186bdde7d225104c4b4a355a8cd3384964736f6c634300060c0033

Deployed ByteCode Sourcemap

26392:19756:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34559:98;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34559:98:0;;:::i;:::-;;28717:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29629:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29629:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;30750:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27348:41;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;27348:41:0;;;;;;;;;;;;;;28994:95;;;;;;;;;;;;;:::i;29798:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29798:313:0;;;;;;;;;;;;;;;;;:::i;31893:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31893:253:0;;:::i;28903:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32613:1035;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32613:1035:0;-1:-1:-1;;;;;32613:1035:0;;:::i;30119:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30119:218:0;;;;;;;;:::i;27160:26::-;;;;;;;;;;;;;:::i;31064:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31064:377:0;;:::i;30845:211::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30845:211:0;;;;;;;;;;:::i;34314:111::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34314:111:0;-1:-1:-1;;;;;34314:111:0;;:::i;31449:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31449:436:0;;;;;;;;;:::i;27396:28::-;;;;;;;;;;;;;:::i;27532:40::-;;;;;;;;;;;;;:::i;32158:447::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32158:447:0;-1:-1:-1;;;;;32158:447:0;;:::i;38453:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38453:123:0;-1:-1:-1;;;;;38453:123:0;;:::i;27247:32::-;;;;;;;;;;;;;:::i;29097:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29097:198:0;-1:-1:-1;;;;;29097:198:0;;:::i;16987:148::-;;;;;;;;;;;;;:::i;45565:203::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45565:203:0;;;;;;;;:::i;27585:48::-;;;;;;;;;;;;;:::i;30622:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30622:120:0;-1:-1:-1;;;;;30622:120:0;;:::i;16344:79::-;;;;;;;;;;;;;:::i;34669:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34669:122:0;;:::i;28808:87::-;;;;;;;;;;;;;:::i;30345:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30345:269:0;;;;;;;;:::i;17997:293::-;;;;;;;;;;;;;:::i;29303:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29303:167:0;;;;;;;;:::i;17542:89::-;;;;;;;;;;;;;:::i;34972:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34972:171:0;;;;:::i;45776:369::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;45776:369:0;;;;;;;;;;;;;;;;;:::i;34802:162::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34802:162:0;;:::i;17707:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17707:214:0;;:::i;29478:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29478:143:0;;;;;;;;;;:::i;34437:110::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34437:110:0;-1:-1:-1;;;;;34437:110:0;;:::i;17290:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17290:244:0;-1:-1:-1;;;;;17290:244:0;;:::i;34559:98::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;34633:7:::1;:16:::0;34559:98::o;28717:83::-;28787:5;28780:12;;;;;;;;-1:-1:-1;;28780:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28754:13;;28780:12;;28787:5;;28780:12;;28787:5;28780:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28717:83;:::o;29629:161::-;29704:4;29721:39;29730:12;:10;:12::i;:::-;29744:7;29753:6;29721:8;:39::i;:::-;-1:-1:-1;29778:4:0;29629:161;;;;;:::o;30750:87::-;30819:10;;30750:87;:::o;27348:41::-;;;-1:-1:-1;;;;;27348:41:0;;:::o;28994:95::-;29074:7;;28994:95;:::o;29798:313::-;29896:4;29913:36;29923:6;29931:9;29942:6;29913:9;:36::i;:::-;29960:121;29969:6;29977:12;:10;:12::i;:::-;29991:89;30029:6;29991:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29991:19:0;;;;;;:11;:19;;;;;;30011:12;:10;:12::i;:::-;-1:-1:-1;;;;;29991:33:0;;;;;;;;;;;;-1:-1:-1;29991:33:0;;;:89;:37;:89::i;:::-;29960:8;:121::i;:::-;-1:-1:-1;30099:4:0;29798:313;;;;;:::o;31893:253::-;31959:7;31998;;31987;:18;;31979:73;;;;-1:-1:-1;;;31979:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32063:19;32086:10;:8;:10::i;:::-;32063:33;-1:-1:-1;32114:24:0;:7;32063:33;32114:11;:24::i;:::-;32107:31;;;31893:253;;;;:::o;28903:83::-;28969:9;;;;28903:83;:::o;32613:1035::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32695:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32687:60;;;::::0;;-1:-1:-1;;;32687:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32763:9;32758:883;32782:9;:16:::0;32778:20;::::1;32758:883;;;32840:7;-1:-1:-1::0;;;;;32824:23:0::1;:9;32834:1;32824:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;32824:12:0::1;:23;32820:810;;;-1:-1:-1::0;;;;;32950:16:0;::::1;32969:1;32950:16:::0;;;:7:::1;:16;::::0;;;;;:20;32946:442:::1;;33012:17;33032:32;33053:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;33032:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;:20:::1;:32::i;:::-;-1:-1:-1::0;;;;;33109:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33097:7:::1;::::0;33012:52;;-1:-1:-1;33097:39:0::1;::::0;:7;33109:26;;::::1;33097:11;:39::i;:::-;33087:7;:49:::0;-1:-1:-1;;;;;33187:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;33172:10:::1;::::0;:42:::1;::::0;33187:26;;::::1;33172:14;:42::i;:::-;33159:10;:55:::0;-1:-1:-1;;;;;33237:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:28;32946:442:::1;;;-1:-1:-1::0;;;;;33348:16:0;::::1;33367:1;33348:16:::0;;;:7:::1;:16;::::0;;;;:20;32946:442:::1;-1:-1:-1::0;;;;;33424:16:0;::::1;33443:1;33424:16:::0;;;:7:::1;:16;::::0;;;;:20;33478:9:::1;33488:16:::0;;-1:-1:-1;;33488:20:0;;;33478:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;33463:9:::1;:12:::0;;-1:-1:-1;;;;;33478:31:0;;::::1;::::0;33473:1;;33463:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;33463:46:0::1;-1:-1:-1::0;;;;;33463:46:0;;::::1;;::::0;;33528:20;;::::1;::::0;;:11:::1;:20:::0;;;;;;:28;;-1:-1:-1;;33528:28:0::1;::::0;;33575:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;33575:15:0;;;;;-1:-1:-1;;;;;;33575:15:0::1;::::0;;;;;33609:5:::1;;32820:810;32800:3;;32758:883;;;;32613:1035:::0;:::o;30119:218::-;30207:4;30224:83;30233:12;:10;:12::i;:::-;30247:7;30256:50;30295:10;30256:11;:25;30268:12;:10;:12::i;:::-;-1:-1:-1;;;;;30256:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30256:25:0;;;:34;;;;;;;;;;;:38;:50::i;27160:26::-;;;;:::o;31064:377::-;31116:14;31133:12;:10;:12::i;:::-;-1:-1:-1;;;;;31165:19:0;;;;;;:11;:19;;;;;;31116:29;;-1:-1:-1;31165:19:0;;31164:20;31156:77;;;;-1:-1:-1;;;31156:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31245:15;31269:19;31280:7;31269:10;:19::i;:::-;-1:-1:-1;;;;;;;;;31317:15:0;;;;;;:7;:15;;;;;;31244:44;;-1:-1:-1;31317:28:0;;:15;-1:-1:-1;31244:44:0;31317:19;:28::i;:::-;-1:-1:-1;;;;;31299:15:0;;;;;;:7;:15;;;;;:46;31366:7;;:20;;31378:7;31366:11;:20::i;:::-;31356:7;:30;31410:10;;:23;;31425:7;31410:14;:23::i;:::-;31397:10;:36;-1:-1:-1;;;31064:377:0:o;30845:211::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;30953:15:::1;:54:::0;;-1:-1:-1;;;;;30953:54:0;;::::1;-1:-1:-1::0;;;;;;30953:54:0;;::::1;;::::0;;;31018:13:::1;:30:::0;;;;;::::1;::::0;::::1;;::::0;;30845:211::o;34314:111::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34383:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;34383:34:0::1;34413:4;34383:34;::::0;;34314:111::o;31449:436::-;31539:7;31578;;31567;:18;;31559:62;;;;;-1:-1:-1;;;31559:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;31637:17;31632:246;;31672:15;31696:19;31707:7;31696:10;:19::i;:::-;-1:-1:-1;31671:44:0;;-1:-1:-1;31730:14:0;;-1:-1:-1;;;;;31730:14:0;31632:246;31779:23;31810:19;31821:7;31810:10;:19::i;:::-;-1:-1:-1;31777:52:0;;-1:-1:-1;31844:22:0;;-1:-1:-1;;;;;31844:22:0;27396:28;;;-1:-1:-1;;;;;27396:28:0;;:::o;27532:40::-;;;-1:-1:-1;;;27532:40:0;;;;;:::o;32158:447::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32355:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;32354:21;32346:61;;;::::0;;-1:-1:-1;;;32346:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32421:16:0;::::1;32440:1;32421:16:::0;;;:7:::1;:16;::::0;;;;;:20;32418:108:::1;;-1:-1:-1::0;;;;;32497:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;32477:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;32458:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;32418:108:::1;-1:-1:-1::0;;;;;32536:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;32536:27:0::1;32559:4;32536:27:::0;;::::1;::::0;;;32574:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;32574:23:0::1;::::0;;::::1;::::0;;32158:447::o;38453:123::-;-1:-1:-1;;;;;38541:27:0;38517:4;38541:27;;;:18;:27;;;;;;;;;38453:123::o;27247:32::-;;;;:::o;29097:198::-;-1:-1:-1;;;;;29187:20:0;;29163:7;29187:20;;;:11;:20;;;;;;;;29183:49;;;-1:-1:-1;;;;;;29216:16:0;;;;;;:7;:16;;;;;;29209:23;;29183:49;-1:-1:-1;;;;;29270:16:0;;;;;;:7;:16;;;;;;29250:37;;:19;:37::i;16987:148::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;17094:1:::1;17078:6:::0;;17057:40:::1;::::0;-1:-1:-1;;;;;17078:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;17057:40:0;17094:1;;17057:40:::1;17125:1;17108:19:::0;;-1:-1:-1;;;;;;17108:19:0::1;::::0;;16987:148::o;45565:203::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;45681:12:::1;::::0;;45643::::1;45681::::0;;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;45660:7:0;::::1;::::0;45674:5;;45660:34:::1;;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;45660:34:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45642:52;;;45713:7;45705:55;;;;-1:-1:-1::0;;;45705:55:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16626:1;45565:203:::0;;:::o;27585:48::-;;;;:::o;30622:120::-;-1:-1:-1;;;;;30714:20:0;30690:4;30714:20;;;:11;:20;;;;;;;;;30622:120::o;16344:79::-;16382:7;16409:6;-1:-1:-1;;;;;16409:6:0;16344:79;:::o;34669:122::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;34755:13:::1;:28:::0;34669:122::o;28808:87::-;28880:7;28873:14;;;;;;;;-1:-1:-1;;28873:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28847:13;;28873:14;;28880:7;;28873:14;;28880:7;28873:14;;;;;;;;;;;;;;;;;;;;;;;;30345:269;30438:4;30455:129;30464:12;:10;:12::i;:::-;30478:7;30487:96;30526:15;30487:96;;;;;;;;;;;;;;;;;:11;:25;30499:12;:10;:12::i;:::-;-1:-1:-1;;;;;30487:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;30487:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;17997:293::-;18049:14;;-1:-1:-1;;;;;18049:14:0;18067:10;18049:28;18041:76;;;;-1:-1:-1;;;18041:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18142:9;;18136:3;:15;18128:60;;;;;-1:-1:-1;;;18128:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18233:14;;;18225:6;;18204:44;;-1:-1:-1;;;;;18233:14:0;;;;18225:6;;;;-1:-1:-1;;;;;;;;;;;18204:44:0;;18268:14;;;18259:23;;-1:-1:-1;;;;;;18259:23:0;-1:-1:-1;;;;;18268:14:0;;;18259:23;;;;;;17997:293::o;29303:167::-;29381:4;29398:42;29408:12;:10;:12::i;:::-;29422:9;29433:6;29398:9;:42::i;17542:89::-;17614:9;;17542:89;:::o;34972:171::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;35049:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;35049:32:0;::::1;-1:-1:-1::0;;;;35049:32:0;;::::1;::::0;;;::::1;::::0;;;35097:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;34972:171:::0;:::o;45776:369::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;45979:45:::1;::::0;;-1:-1:-1;;;;;45979:45:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;45979:45:0::1;-1:-1:-1::0;;;45979:45:0::1;::::0;;45968:57;;;;45933:12:::1;::::0;45947:17:::1;::::0;45968:10;;::::1;::::0;45979:45;45968:57;;;45979:45;45968:57;;45979:45;45968:57:::1;;;;;;::::0;;;;-1:-1:-1;;45968:57:0;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45932:93;;;;46044:7;:57;;;;-1:-1:-1::0;46056:11:0;;:16;;:44:::1;;;46087:4;46076:24;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;46076:24:0;46056:44:::1;46036:101;;;::::0;;-1:-1:-1;;;46036:101:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;16626:1;;45776:369:::0;;;:::o;34802:162::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;34896:60:::1;34940:5;34896:25;34908:12;34896:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:60::i;:::-;34881:12;:75:::0;-1:-1:-1;34802:162:0:o;17707:214::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;17788:6:::1;::::0;;;17771:23;;-1:-1:-1;;;;;;17771:23:0;;::::1;-1:-1:-1::0;;;;;17788:6:0;::::1;17771:23;::::0;;;17805:19:::1;::::0;;17847:3:::1;:10:::0;::::1;17835:9;:22:::0;17873:40:::1;::::0;17788:6;;-1:-1:-1;;;;;;;;;;;17873:40:0;17788:6;;17873:40:::1;17707:214:::0;:::o;29478:143::-;-1:-1:-1;;;;;29586:18:0;;;29559:7;29586:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29478:143::o;34437:110::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34504:27:0::1;34534:5;34504:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;34504:35:0::1;::::0;;34437:110::o;17290:244::-;16566:12;:10;:12::i;:::-;16556:6;;-1:-1:-1;;;;;16556:6:0;;;:22;;;16548:67;;;;;-1:-1:-1;;;16548:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;16548:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;17379:22:0;::::1;17371:73;;;;-1:-1:-1::0;;;17371:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17481:6;::::0;;17460:38:::1;::::0;-1:-1:-1;;;;;17460:38:0;;::::1;::::0;17481:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;17460:38:0;::::1;17509:6;:17:::0;;-1:-1:-1;;;;;;17509:17:0::1;-1:-1:-1::0;;;;;17509:17:0;;;::::1;::::0;;;::::1;::::0;;17290:244::o;8752:106::-;8840:10;8752:106;:::o;38584:337::-;-1:-1:-1;;;;;38677:19:0;;38669:68;;;;-1:-1:-1;;;38669:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38756:21:0;;38748:68;;;;-1:-1:-1;;;38748:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38829:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;38881:32;;;;;;;;;;;;;;;;;38584:337;;;:::o;38929:1940::-;-1:-1:-1;;;;;39051:18:0;;39043:68;;;;-1:-1:-1;;;39043:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39130:16:0;;39122:64;;;;-1:-1:-1;;;39122:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39214:1;39205:6;:10;39197:64;;;;-1:-1:-1;;;39197:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39283:7;:5;:7::i;:::-;-1:-1:-1;;;;;39275:15:0;:4;-1:-1:-1;;;;;39275:15:0;;;:32;;;;;39300:7;:5;:7::i;:::-;-1:-1:-1;;;;;39294:13:0;:2;-1:-1:-1;;;;;39294:13:0;;;39275:32;39272:125;;;39340:12;;39330:6;:22;;39322:75;;;;-1:-1:-1;;;39322:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39692:28;39723:24;39741:4;39723:9;:24::i;:::-;39692:55;;27689:18;39786:20;:53;;:88;;;;-1:-1:-1;39858:16:0;;-1:-1:-1;;;39858:16:0;;;;39857:17;39786:88;:126;;;;-1:-1:-1;39899:13:0;;-1:-1:-1;;;;;39891:21:0;;;39899:13;;39891:21;;39786:126;:164;;;;-1:-1:-1;39929:21:0;;-1:-1:-1;;;39929:21:0;;;;39786:164;39768:668;;;40070:13;;40088:1;;40060:24;;-1:-1:-1;;;;;40070:13:0;40060:9;:24::i;:::-;:29;;:74;;;;-1:-1:-1;40116:13:0;;40093:37;;;-1:-1:-1;;;40093:37:0;;-1:-1:-1;;;;;40116:13:0;;;40093:37;;;;;-1:-1:-1;;27455:42:0;;40093:22;;:37;;;;;;;;;;;;;;;27455:42;40093:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40093:37:0;:41;40060:74;40056:369;;;40213:12;;40189:20;:36;40186:136;;-1:-1:-1;40290:12:0;;40186:136;40373:36;40388:20;40373:14;:36::i;:::-;-1:-1:-1;;;;;40644:24:0;;40517:12;40644:24;;;:18;:24;;;;;;40532:4;;40644:24;;;:50;;-1:-1:-1;;;;;;40672:22:0;;;;;;:18;:22;;;;;;;;40644:50;40641:96;;;-1:-1:-1;40720:5:0;40641:96;40823:38;40838:4;40843:2;40846:6;40853:7;40823:14;:38::i;5162:192::-;5248:7;5284:12;5276:6;;;;5268:29;;;;-1:-1:-1;;;5268:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;5320:5:0;;;5162:192::o;36603:163::-;36644:7;36665:15;36682;36701:19;:17;:19::i;:::-;36664:56;;-1:-1:-1;36664:56:0;-1:-1:-1;36738:20:0;36664:56;;36738:11;:20::i;:::-;36731:27;;;;36603:163;:::o;6560:132::-;6618:7;6645:39;6649:1;6652;6645:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6638:46;6560:132;-1:-1:-1;;;6560:132:0:o;5613:471::-;5671:7;5916:6;5912:47;;-1:-1:-1;5946:1:0;5939:8;;5912:47;5983:5;;;5987:1;5983;:5;:1;6007:5;;;;;:10;5999:56;;;;-1:-1:-1;;;5999:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4723:136;4781:7;4808:43;4812:1;4815;4808:43;;;;;;;;;;;;;;;;;:3;:43::i;4259:181::-;4317:7;4349:5;;;4373:6;;;;4365:46;;;;;-1:-1:-1;;;4365:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;35401:419;35460:7;35469;35478;35487;35496;35505;35526:23;35551:12;35565:18;35587:20;35599:7;35587:11;:20::i;:::-;35525:82;;;;;;35619:15;35636:23;35661:12;35677:50;35689:7;35698:4;35704:10;35716;:8;:10::i;:::-;35677:11;:50::i;:::-;35618:109;;;;-1:-1:-1;35618:109:0;;-1:-1:-1;35778:15:0;;-1:-1:-1;35795:4:0;;-1:-1:-1;35801:10:0;;-1:-1:-1;35401:419:0;;-1:-1:-1;;;;;35401:419:0:o;40877:985::-;28018:16;:23;;-1:-1:-1;;;;28018:23:0;-1:-1:-1;;;28018:23:0;;;;41028:27:::1;:20:::0;41053:1:::1;41028:24;:27::i;:::-;41013:42:::0;-1:-1:-1;41066:17:0::1;41086:30;:20:::0;41013:42;41086:24:::1;:30::i;:::-;41066:50:::0;-1:-1:-1;41419:21:0::1;41485:22;41502:4:::0;41485:16:::1;:22::i;:::-;41638:18;41659:41;:21;41685:14:::0;41659:25:::1;:41::i;:::-;41638:62;;41750:35;41763:9;41774:10;41750:12;:35::i;:::-;41811:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;28064:16:0;:24;;-1:-1:-1;;;;28064:24:0;;;-1:-1:-1;;;40877:985:0:o;43043:834::-;43154:7;43150:40;;43176:14;:12;:14::i;:::-;-1:-1:-1;;;;;43215:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;43239:22:0;;;;;;:11;:22;;;;;;;;43238:23;43215:46;43211:597;;;43278:48;43300:6;43308:9;43319:6;43278:21;:48::i;:::-;43211:597;;;-1:-1:-1;;;;;43349:19:0;;;;;;:11;:19;;;;;;;;43348:20;:46;;;;-1:-1:-1;;;;;;43372:22:0;;;;;;:11;:22;;;;;;;;43348:46;43344:464;;;43411:46;43431:6;43439:9;43450:6;43411:19;:46::i;43344:464::-;-1:-1:-1;;;;;43480:19:0;;;;;;:11;:19;;;;;;;;43479:20;:47;;;;-1:-1:-1;;;;;;43504:22:0;;;;;;:11;:22;;;;;;;;43503:23;43479:47;43475:333;;;43543:44;43561:6;43569:9;43580:6;43543:17;:44::i;43475:333::-;-1:-1:-1;;;;;43609:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;43632:22:0;;;;;;:11;:22;;;;;;;;43609:45;43605:203;;;43671:48;43693:6;43701:9;43712:6;43671:21;:48::i;43605:203::-;43752:44;43770:6;43778:9;43789:6;43752:17;:44::i;:::-;43832:7;43828:41;;43854:15;:13;:15::i;:::-;43043:834;;;;:::o;36774:561::-;36871:7;;36907;;36824;;;;;36931:289;36955:9;:16;36951:20;;36931:289;;;37021:7;36997;:21;37005:9;37015:1;37005:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37005:12:0;36997:21;;;;;;;;;;;;;:31;;:66;;;37056:7;37032;:21;37040:9;37050:1;37040:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37040:12:0;37032:21;;;;;;;;;;;;;:31;36997:66;36993:97;;;37073:7;;37082;;37065:25;;;;;;;;;36993:97;37115:34;37127:7;:21;37135:9;37145:1;37135:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37135:12:0;37127:21;;;;;;;;;;;;;37115:7;;:11;:34::i;:::-;37105:44;;37174:34;37186:7;:21;37194:9;37204:1;37194:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37194:12:0;37186:21;;;;;;;;;;;;;37174:7;;:11;:34::i;:::-;37164:44;-1:-1:-1;36973:3:0;;36931:289;;;-1:-1:-1;37256:7:0;;37244;;:20;;:11;:20::i;:::-;37234:7;:30;37230:61;;;37274:7;;37283;;37266:25;;;;;;;;37230:61;37310:7;;-1:-1:-1;37319:7:0;-1:-1:-1;36774:561:0;;;:::o;7188:278::-;7274:7;7309:12;7302:5;7294:28;;;;-1:-1:-1;;;7294:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7333:9;7349:1;7345;:5;;;;;;;7188:278;-1:-1:-1;;;;;7188:278:0:o;35828:330::-;35888:7;35897;35906;35926:12;35941:24;35957:7;35941:15;:24::i;:::-;35926:39;;35976:18;35997:30;36019:7;35997:21;:30::i;:::-;35976:51;-1:-1:-1;36038:23:0;36064:33;35976:51;36064:17;:7;36076:4;36064:11;:17::i;:::-;:21;;:33::i;:::-;36038:59;36133:4;;-1:-1:-1;36139:10:0;;-1:-1:-1;35828:330:0;;-1:-1:-1;;;35828:330:0:o;36166:429::-;36281:7;;;;36337:24;:7;36349:11;36337;:24::i;:::-;36319:42;-1:-1:-1;36372:12:0;36387:21;:4;36396:11;36387:8;:21::i;:::-;36372:36;-1:-1:-1;36419:18:0;36440:27;:10;36455:11;36440:14;:27::i;:::-;36419:48;-1:-1:-1;36478:23:0;36504:33;36419:48;36504:17;:7;36516:4;36504:11;:17::i;:33::-;36556:7;;;;-1:-1:-1;36582:4:0;;-1:-1:-1;36166:429:0;;-1:-1:-1;;;;;;;36166:429:0:o;41870:571::-;42020:16;;;42034:1;42020:16;;;41996:21;42020:16;;;;;41996:21;42020:16;;;;;;;;;;-1:-1:-1;42020:16:0;41996:40;;42065:4;42047;42052:1;42047:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;42047:23:0;;;-1:-1:-1;;;;;42047:23:0;;;;;27455:42;42081:4;42086:1;42081:7;;;;;;;;-1:-1:-1;;;;;42081:14:0;;;:7;;;;;;;;;:14;42140:15;;42108:62;;42125:4;;42140:15;42158:11;42108:8;:62::i;:::-;42209:15;;:224;;-1:-1:-1;;;42209:224:0;;;;;;;;:15;:224;;;;;;42387:4;42209:224;;;;;;42407:15;42209:224;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42209:15:0;;;;:66;;42290:11;;42360:4;;42387;42407:15;42209:224;;;;;;;;;;;;;;;;:15;:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41870:571;;:::o;42449:513::-;42629:15;;42597:62;;42614:4;;-1:-1:-1;;;;;42629:15:0;42647:11;42597:8;:62::i;:::-;42702:15;;-1:-1:-1;;;;;42702:15:0;:31;42741:9;42774:4;42794:11;42702:15;;42906:7;:5;:7::i;:::-;42928:15;42702:252;;;;;;;;;;;;;-1:-1:-1;;;;;42702:252:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42702:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38054:250;38100:7;;:12;:34;;;;-1:-1:-1;38116:13:0;;:18;38100:34;38097:46;;;38136:7;;38097:46;38181:7;;;38163:15;:25;38223:13;;;38199:21;:37;-1:-1:-1;38257:11:0;;;;38279:17;38054:250;:::o;44989:566::-;45092:15;45109:23;45134:12;45148:23;45173:12;45187:18;45209:19;45220:7;45209:10;:19::i;:::-;-1:-1:-1;;;;;45257:15:0;;;;;;:7;:15;;;;;;45091:137;;-1:-1:-1;45091:137:0;;-1:-1:-1;45091:137:0;;-1:-1:-1;45091:137:0;-1:-1:-1;45091:137:0;-1:-1:-1;45091:137:0;-1:-1:-1;45257:28:0;;45277:7;45257:19;:28::i;:::-;-1:-1:-1;;;;;45239:15:0;;;;;;:7;:15;;;;;;;;:46;;;;45314:7;:15;;;;:28;;45334:7;45314:19;:28::i;:::-;-1:-1:-1;;;;;45296:15:0;;;;;;;:7;:15;;;;;;:46;;;;45374:18;;;;;;;:39;;45397:15;45374:22;:39::i;:::-;-1:-1:-1;;;;;45353:18:0;;;;;;:7;:18;;;;;:60;45427:26;45442:10;45427:14;:26::i;:::-;45464:23;45476:4;45482;45464:11;:23::i;:::-;45520:9;-1:-1:-1;;;;;45503:44:0;45512:6;-1:-1:-1;;;;;45503:44:0;;45531:15;45503:44;;;;;;;;;;;;;;;;;;44989:566;;;;;;;;;:::o;44395:586::-;44496:15;44513:23;44538:12;44552:23;44577:12;44591:18;44613:19;44624:7;44613:10;:19::i;:::-;-1:-1:-1;;;;;44661:15:0;;;;;;:7;:15;;;;;;44495:137;;-1:-1:-1;44495:137:0;;-1:-1:-1;44495:137:0;;-1:-1:-1;44495:137:0;-1:-1:-1;44495:137:0;-1:-1:-1;44495:137:0;-1:-1:-1;44661:28:0;;44495:137;44661:19;:28::i;:::-;-1:-1:-1;;;;;44643:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;44721:18;;;;;:7;:18;;;;;:39;;44744:15;44721:22;:39::i;:::-;-1:-1:-1;;;;;44700:18:0;;;;;;:7;:18;;;;;;;;:60;;;;44792:7;:18;;;;:39;;44815:15;44792:22;:39::i;43885:502::-;43984:15;44001:23;44026:12;44040:23;44065:12;44079:18;44101:19;44112:7;44101:10;:19::i;:::-;-1:-1:-1;;;;;44149:15:0;;;;;;:7;:15;;;;;;43983:137;;-1:-1:-1;43983:137:0;;-1:-1:-1;43983:137:0;;-1:-1:-1;43983:137:0;-1:-1:-1;43983:137:0;-1:-1:-1;43983:137:0;-1:-1:-1;44149:28:0;;43983:137;44149:19;:28::i;33656:642::-;33759:15;33776:23;33801:12;33815:23;33840:12;33854:18;33876:19;33887:7;33876:10;:19::i;:::-;-1:-1:-1;;;;;33924:15:0;;;;;;:7;:15;;;;;;33758:137;;-1:-1:-1;33758:137:0;;-1:-1:-1;33758:137:0;;-1:-1:-1;33758:137:0;-1:-1:-1;33758:137:0;-1:-1:-1;33758:137:0;-1:-1:-1;33924:28:0;;33944:7;33924:19;:28::i;:::-;-1:-1:-1;;;;;33906:15:0;;;;;;:7;:15;;;;;;;;:46;;;;33981:7;:15;;;;:28;;34001:7;33981:19;:28::i;38316:125::-;38370:15;;38360:7;:25;38412:21;;38396:13;:37;38316:125::o;37714:154::-;37778:7;37805:55;37844:5;37805:20;37817:7;;37805;:11;;:20;;;;:::i;37876:166::-;37946:7;37973:61;38018:5;37973:26;37985:13;;37973:7;:11;;:26;;;;:::i;37347:355::-;37410:19;37433:10;:8;:10::i;:::-;37410:33;-1:-1:-1;37454:18:0;37475:27;:10;37410:33;37475:14;:27::i;:::-;37554:4;37538:22;;;;:7;:22;;;;;;37454:48;;-1:-1:-1;37538:38:0;;37454:48;37538:26;:38::i;:::-;37529:4;37513:22;;;;:7;:22;;;;;;;;:63;;;;37590:11;:26;;;;;;37587:107;;;37672:4;37656:22;;;;:7;:22;;;;;;:38;;37683:10;37656:26;:38::i;:::-;37647:4;37631:22;;;;:7;:22;;;;;:63;37347:355;;;:::o;35246:147::-;35324:7;;:17;;35336:4;35324:11;:17::i;:::-;35314:7;:27;35365:10;;:20;;35380:4;35365:14;:20::i;:::-;35352:10;:33;-1:-1:-1;;35246:147:0:o

Swarm Source

ipfs://985ccf5b1d8afa69356fc0b73976a433186bdde7d225104c4b4a355a8cd33849
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.