Contract 0xff96ce2cc0d20da0250a63bdca2b568f52a5bc71 5

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x63b94aa62b315b6c70448694d4a570113b33a7d4d53d4676467a2ff7a063cbfbTransfer110839502021-09-20 16:38:101 hr 40 mins ago0xf56f1d0150dfd0f698642a2b07b7bfbb29977e7e IN  RushMoon: RUSH Token0 BNB0.000384125
0x8409956b0f842de9b75e8720dc5f629522f42db612d75ced40ac38785d4e2bb1Approve110819702021-09-20 14:59:083 hrs 19 mins ago0x70b6848dbb00ad2eb9c44b48f035968477efc709 IN  RushMoon: RUSH Token0 BNB0.000072555
0xb7bc104f3be56f72e62b1a4f967f4362b5d3d90a538096aa7a4e25a7e0222b8dTransfer110807672021-09-20 13:58:474 hrs 19 mins ago0x562023c448fa4869adc610408171987e46f6a60d IN  RushMoon: RUSH Token0 BNB0.000384125
0x343fecd81f9bb6235d880ad808e846d26f412dfe81d3964e7eb23626150b8d00Approve110659822021-09-20 1:37:2016 hrs 41 mins ago0xa1a8482148c813668da5c17f48cb6c3bba9e469f IN  RushMoon: RUSH Token0 BNB0.000072555
0x7e75f19659278dbce0cf6b45243e9ca535659fc0f48802d2f36c1c90129b514fApprove110534742021-09-19 15:11:481 day 3 hrs ago0x592f0e642f7451a5a055e1f80f45617bf024309e IN  RushMoon: RUSH Token0 BNB0.000072555
0xe871e6e51b59f9208750af947f885e6ce4a27f2290a45ffd283a5d1f17e52ff9Approve110466922021-09-19 9:19:071 day 8 hrs ago0x28c486b5b2792f1b34f0f43ac367e2e74b7406ba IN  RushMoon: RUSH Token0 BNB0.000072555
0xe6a35a6a6fc92a668ad8c6609bc199cf7108af8de0761d99f12528d19c71529bRebalance Liquid...110419982021-09-19 5:24:191 day 12 hrs ago0x904e157a4107dac2e0a06e470456cf71a904a0bf IN  RushMoon: RUSH Token0 BNB0.00231605
0x223e8af1b112b21855942512036326954f1a9930ca37cb848b23d30cd50b0ea7Approve110260512021-09-18 16:05:072 days 2 hrs ago0x5fb033f38159aa5cbc5c279e966c2a02023f7c2e IN  RushMoon: RUSH Token0 BNB0.000310835
0x55423d626475b2d219065b8dbcf7531d9704bad5481ef09ecc3b615268f7084eApprove110236562021-09-18 14:03:452 days 4 hrs ago0x8fbac079c1d4cea7914e253eb6040003ea20c9a8 IN  RushMoon: RUSH Token0 BNB0.000124105
0xad84b10f4942fe7788899da26b559e1853999a04c88a4d92c7f1985084f782ddApprove110236082021-09-18 14:01:212 days 4 hrs ago0x8fbac079c1d4cea7914e253eb6040003ea20c9a8 IN  RushMoon: RUSH Token0 BNB0.000072555
0xe600a0f3245abd68b09252ed054a2f3e8583cd6d25ab0aa81686d38023b17c74Approve110222142021-09-18 12:51:392 days 5 hrs ago0x1612bdeb70fc50a5fc291e992007e6aa583dc95a IN  RushMoon: RUSH Token0 BNB0.000072555
0xfdf1bf7b3504c132fd5f955a01a35df934e0d9db9f6ef02b999f807b18b131f5Approve110182832021-09-18 9:34:552 days 8 hrs ago0x67ebe9a369c2f9509b93f7fa7fa8a7d874e01b57 IN  RushMoon: RUSH Token0 BNB0.000222025
0x628420a6b65713624e7456b84c45c4270dc7461ab26aa971f0526d6be79ef137Transfer110157982021-09-18 7:30:192 days 10 hrs ago0x0831b3443665f3f309256c74092b18654b0e2a1a IN  RushMoon: RUSH Token0 BNB0.000363125
0xdecec86826a8e5b08b39abfbc81d62f808f9cd4628af0addc21f478c88d1e012Transfer110150282021-09-18 6:51:492 days 11 hrs ago0x283bab7a3c94abfc5bbcd27caec675550f68afe5 IN  RushMoon: RUSH Token0 BNB0.000384245
0x109058506d7cd64085ea442e7e5ba6d59968aa32602d8257efbd5bf1b493e9aeTransfer109983832021-09-17 16:58:163 days 1 hr ago0xbe590c6c6951d46f837f050b4925872130b67317 IN  RushMoon: RUSH Token0 BNB0.000458885
0x6feff374c1e9b402fc124399b888d085209c1bdd201736c0755077706860ff10Approve109920152021-09-17 11:39:113 days 6 hrs ago0x1b6a71163ac03bdf1a6d0bee815cdec1a04c5bb1 IN  RushMoon: RUSH Token0 BNB0.000310835
0xae15135bd916957b3b7a7a4018ab1409d5e093d5bfa4ac0eb872722c36e922ddApprove109870502021-09-17 7:30:513 days 10 hrs ago0x8c14bc75966d18b3e27dcaef6e751b08106572c6 IN  RushMoon: RUSH Token0 BNB0.000222025
0xd5b2c62afff2e4c43b60e500374c342e14eeda20c9dce4b0b5f7a3c6e5c846efApprove109800592021-09-17 1:40:473 days 16 hrs ago0x87f7c24b65f4fa5465a086df6e6d4f5ca6ff6593 IN  RushMoon: RUSH Token0 BNB0.000072555
0x363c0f5ede79e66accde71064b8e97815b98a4c53f0c30418ec99420dceb6cd8Transfer109725442021-09-16 19:24:593 days 22 hrs ago0x2016ccac0ecd9dd7572e85f7cd7f4de4f2302662 IN  RushMoon: RUSH Token0 BNB0.000384245
0x0faf68e79c4b983babbb38e7ef829b02e81956d85344293f8b4fcbf29baa6aceTransfer109725202021-09-16 19:23:473 days 22 hrs ago0xbe48e7b253bba6581b961915840ee900c15148b5 IN  RushMoon: RUSH Token0 BNB0.000309305
0x62551e5c2c589053d9cdae5f1fb21fb5833b967d5a39548a4fe6f7225afac127Approve109687062021-09-16 16:12:184 days 2 hrs ago0xfe1ce665acf72d6bc1a0322e9f0de9b07a0d6f13 IN  RushMoon: RUSH Token0 BNB0.000222025
0x9df812ba96ef393c186b6d6a05c0b4d6f195be2bd481d392df1e1d74f5c649ddTransfer109649542021-09-16 13:04:194 days 5 hrs ago0x31e4c0aa2d439f5804c4af53743c3d595414fdb5 IN  RushMoon: RUSH Token0 BNB0.000384125
0x4de90c53d3e4e13495e618c9e709e1fb006e6ba1b3f78f7e5aca86c985e766c8Approve109634642021-09-16 11:48:594 days 6 hrs ago0x4af30d4a4ec3c7c4a539cb016172ddc2f4d6c1d3 IN  RushMoon: RUSH Token0 BNB0.000222025
0x50b7f6d33fe044654710d117dc7ba654c14b4d619d4b493db08675514e9fed3aTransfer109576322021-09-16 6:56:204 days 11 hrs ago0x54a1fbd137467344a84b58be094ea7152ea1ea37 IN  RushMoon: RUSH Token0 BNB0.000461238
0xcd52dc26f0ae295f4d0c2da41854d54e70ff13914599fc81a67bb50dd72eda0dApprove109552172021-09-16 4:55:314 days 13 hrs ago0xb0a666ec46785631a07d34f03e10760e005fc67f IN  RushMoon: RUSH Token0 BNB0.000222025
[ Download CSV Export 

OVERVIEW

RushMoon is an automatic Liquidity acquisition yield farm & AMM on Binance Smart Chain With unique rewards lockup & buyback mechanism.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x83c37d6f3256f0e643b5cf7e668ea386548c1035187aedd389c8c1d0a92cbfa276585832021-05-23 12:06:35120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.000000456 BNB
0x4b71ce6e50f54ea4982fa15099354fd7a7a215ce1e5b7da971fbf24abea4f8fc76584732021-05-23 12:01:05120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.00061743084 BNB
0x29721b5fb209282d06e0f3e9c43823646e21a8fe2f8b2fc04497b08f6378963a76584662021-05-23 12:00:44120 days 6 hrs ago RushMoon: RUSH Token PancakeSwap: Router v2206.413740096431127063 BNB
0xd71bc7d5cc1c6e54975fadd5460066ceacbe12e71f9a4362f8fea8716e8c034676584642021-05-23 12:00:38120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.00121905216 BNB
0x9b5e423a8453d983ae6f5724a66a8b4f642ed805a84c13d4a9e7a1d3c83bacbd76584602021-05-23 12:00:26120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.00228 BNB
0xd4bb8464b6047f0b4dbaf4eaa233953b4ab344d15156a3bf46b7595df09ad93776584592021-05-23 12:00:23120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.00456 BNB
0x525ed34c4020bfe924c807d1f6e2987614b49f2f91f7ad24c8eb70a3806ca3fe76584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.046512 BNB
0xb1203ade74b7420598fd343648c0b67fd753c03480d994735ba1605b7cbac70c76584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.05928 BNB
0x0acf872f920ece64265ca508e72cb3adad2ee99241d70d841d1455e43374cf1a76584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.0228 BNB
0xab7151d9406d94a198990f13bb784c3c3b2c4b7960d97e9dfbf298bc09cbedf276584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.01596 BNB
0x7cb1b7d6298a014e3e1f64cd244c84fb5daa5eadb91b1148d4fa146637e2544776584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.09576 BNB
0x095e3cd93b7d821cbd5ca55c14fd2a7ce0507324da5b89a78fbdb0052e59dd3676584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.1824 BNB
0xad3ee9f91cf0ed7f4077d96ad34cf6d8be9f316db2d85bbfcfa5b41300a4565b76584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.228 BNB
0x3284ee3fb66cb77c1d279507002d2fa4e9db440632db7455c02a2ca041c64b1c76584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.44688 BNB
0x7aff55ace87cfe5ed5ed6599889c2f4948d0280dc56afb6b0fd482015bb645d276584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.1368 BNB
0x2f9d6d8d5bfa3d0297c137e676795ace385c4f01fd6fd0daf022699e976c81ce76584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.003174104158031459 BNB
0xefe40b73115c6fa0c5ad4fb059f0e20c62ae809495f21c4a6edc1a3948acb1b776584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token1.260499952925985061 BNB
0x7a0fcd29452ae125bbb97cc6323ba3288dc80a03c69e660b7ad0453106f4773f76584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.17328 BNB
0x4cb173f7e9ae5ca1b1270758d2cc42bc762c495594e1790e3a2df2cc7a531c0376584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.456 BNB
0x1cc87f57455d7c6e9f8ed843fd2f91ce80daf3b15ce3a6f524ccea994b55946076584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.06224529847831131 BNB
0x10863d87c6df6e15c011edd4bbd15e5d31a549b19508363c312d9320087e709176584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token1.057775457576 BNB
0x2b02eea50c4e192958c8949fbc5d1e56db31657c36c8cd0a7bd5d2f1b50dabc676584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.228 BNB
0xd1738120688b401d3ca8a60465a52345b3090d262831e77db82d1a7743810a6f76584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.048285164197111961 BNB
0x2ae81985c71eafec8737ccc7df73bc1b0f52b741665f65e2f5fb08b6983aabf076584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.24168 BNB
0xdb688e6dbdc557154db0808f000dd1cb7e47c87ce4e0a3528f819c0ed11d92c976584582021-05-23 12:00:20120 days 6 hrs ago 0x1e6ed78e511d5588b7309073a7d8eae74ebc3247 RushMoon: RUSH Token0.014592 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
RushMoon

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// RushMoon PROJECT , https://rushmoon.finance

// File: @openzeppelin/contracts/GSN/Context.sol

pragma solidity ^0.5.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see {ERC20Detailed}.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    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);
}

// File: @openzeppelin/contracts/math/SafeMath.sol

pragma solidity ^0.5.0;

/**
 * @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.
     *
     * _Available since v2.4.0._
     */
    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.
     *
     * _Available since v2.4.0._
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        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.
     *
     * _Available since v2.4.0._
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol

pragma solidity ^0.5.0;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20Mintable}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-ERC20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;
    constructor (uint256 totalSupply) public {
        _mint(_msgSender(),totalSupply);
    }
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20};
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal {
        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);
    }

    /**
     * @dev Destroys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See {_burn} and {_approve}.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }
}

contract MinterRole is Context {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(_msgSender());
    }

    modifier onlyMinter() {
        require(isMinter(_msgSender()), "MinterRole: caller does not have the Minter role");
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(_msgSender());
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

contract ERC20Burnable is Context, ERC20 {

    function burn(uint256 amount) public {
        _burn(_msgSender(), amount);
    }

    function burnFrom(address account, uint256 amount) public {
        _burnFrom(account, amount);
    }
}
pragma solidity ^0.5.0;

/**
 * @dev Extension of {ERC20} that adds a set of accounts with the {MinterRole},
 * which have permission to mint (create) new tokens as they see fit.
 *
 * At construction, the deployer of the contract is the only minter.
 */
contract ERC20Mintable is ERC20, MinterRole {
    /**
     * @dev See {ERC20-_mint}.
     *
     * Requirements:
     *
     * - the caller must have the {MinterRole}.
     */
    function mint(address account, uint256 amount) public onlyMinter returns (bool) {
        _mint(account, amount);
        return true;
    }
}

// File: @openzeppelin/contracts/access/Roles.sol

pragma solidity ^0.5.0;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "Roles: account already has role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "Roles: account does not have role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "Roles: account is the zero address");
        return role.bearer[account];
    }
}

// File: @openzeppelin/contracts/token/ERC20/ERC20Detailed.sol

pragma solidity ^0.5.0;

/**
 * @dev Optional functions from the ERC20 standard.
 */
contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of
     * these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

// File: @openzeppelin/contracts/access/roles/WhitelistAdminRole.sol

pragma solidity ^0.5.0;

/**
 * @title WhitelistAdminRole
 * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
 */
contract WhitelistAdminRole is Context {
    using Roles for Roles.Role;

    event WhitelistAdminAdded(address indexed account);
    event WhitelistAdminRemoved(address indexed account);

    Roles.Role private _whitelistAdmins;

    constructor () internal {
        _addWhitelistAdmin(_msgSender());
    }

    modifier onlyWhitelistAdmin() {
        require(isWhitelistAdmin(_msgSender()), "WhitelistAdminRole: caller does not have the WhitelistAdmin role");
        _;
    }

    function isWhitelistAdmin(address account) public view returns (bool) {
        return _whitelistAdmins.has(account);
    }

    function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
        _addWhitelistAdmin(account);
    }

    function renounceWhitelistAdmin() public {
        _removeWhitelistAdmin(_msgSender());
    }

    function _addWhitelistAdmin(address account) internal {
        _whitelistAdmins.add(account);
        emit WhitelistAdminAdded(account);
    }

    function _removeWhitelistAdmin(address account) internal {
        _whitelistAdmins.remove(account);
        emit WhitelistAdminRemoved(account);
    }
}

// File: contracts/ERC20/ERC20TransferLiquidityLock.sol

contract ERC20TransferLiquidityLock is ERC20 {
    using SafeMath for uint256;

    event Rebalance(uint256 tokenBurnt);
    event RewardLiquidityProviders(uint256 liquidityRewards);
    
    address public pancakeswapV2Router;
    address public pancakeswapV2Pair; 
    address public presaleAddress;
    address payable public treasury;
    mapping(address => bool) public feelessAddr;
    mapping(address => bool) public unlocked;
    mapping(address => bool) public blacklist; 
    
    uint256 public rebalanceRewardDivisor;
    uint256 public rebalanceDivisor; 
    uint256 public burnTxFee;    
    uint256 public taxFee;       
    uint256 public minRebalanceAmount;
    uint256 public lastRebalance;
    uint256 public rebalanceInterval;
    uint256 public lpUnlocked;
    address public burnAddr = 0x000000000000000000000000000000000000dEaD;
    uint256 public lpPool = 0;
    
    bool public locked;
    Balancer balancer;
    
    constructor() public {
        lastRebalance = block.timestamp;
        burnTxFee = 100;                 // the amount of tokens to burned , i.e. 100 = 1%, 50 = 2%, 40 = 2.5%
        taxFee = 25;                    // the amount of tokens to lock for liquidity during every transfer, i.e. 100 = 1%, 50 = 2%, 40 = 2.5%
        rebalanceRewardDivisor = 100;  // caller reward divisor , %1 of rebalance tokens send to caller
        rebalanceDivisor = 50;        // %2 of total liquidity removed ,i.e. 25 = 4% , 50 = 2% , 100 = 1%
        rebalanceInterval = 6 hours; // set rebalance time in seconds
        minRebalanceAmount = 1e24; 
        treasury = msg.sender;
        balancer = new Balancer(treasury);
        feelessAddr[address(this)] = true;
        feelessAddr[address(treasury)] = true;
        feelessAddr[address(balancer)] = true;
        feelessAddr[address(pancakeswapV2Router)] = true; 
        feelessAddr[address(presaleAddress)] = true;
        locked = true;
        lpUnlocked = block.timestamp + 90 days;
        unlocked[msg.sender] = true;
        unlocked[address(this)] = true;
        unlocked[address(balancer)] = true; 
        unlocked[address(balancer)] = true; 
        unlocked[address(pancakeswapV2Router)] = true;
        unlocked[address(presaleAddress)] = true;
    } 
    
    function calculateFees(address from, address to, uint256 amount) public view returns(uint256  Burntx, uint256  selltx){
    
    }
    
    function isContract(address _addr) public view returns (bool _isContract){
        uint32 size;
        assembly {
        size := extcodesize(_addr)}
        
        return (size > 0);
    }

    function _transfer(address from, address to, uint256 amount) internal {
        
        if(locked && unlocked[from] != true && unlocked[to] != true)
            revert("Transfers are locked until after presale.");

        if(blacklist [from] == true || blacklist [to] == true) 
            revert("Address is blacklisted");
          
    uint256  Burntx = 0;
        
    if(feelessAddr[from] == false && feelessAddr[to] == false){    
        
       if (burnTxFee != 0) { 
           Burntx = amount.div(burnTxFee); 
           amount = amount.sub(Burntx);
         super._transfer(from, address(burnAddr), Burntx); 
        } 
        if (taxFee != 0) {
           uint256 selltx = amount.div(taxFee); 
           lpPool += selltx;
           amount = amount.sub(selltx);
         super._transfer(from, address(this), selltx);
        }
        
         super._transfer(from, to, amount);
        }
    
        else {
         super._transfer(from, to, amount);   
        }
    }
    // Receive bnb from pancakeswap
    function () external payable {

    }

    function RebalanceLiquidity() public {
        require(balanceOf(msg.sender) >= minRebalanceAmount, "You do not have the required amount of RUSH.");
        require(block.timestamp > lastRebalance + rebalanceInterval, "It is too early to use this function."); 
        lastRebalance = block.timestamp;
        uint256 _lockableSupply = balanceOf(address(this));
        _rewardLiquidityProviders(_lockableSupply);
        
        uint256 amountToRemove = ERC20(pancakeswapV2Pair).balanceOf(address(this)).div(rebalanceDivisor);
        
        remLiquidity(amountToRemove);
        uint _locked = balancer.rebalance(rebalanceRewardDivisor);

        emit Rebalance(_locked);
    }

    function _rewardLiquidityProviders(uint256 liquidityRewards) private {
             // avoid burn by calling super._transfer directly
            super._transfer(address(this), pancakeswapV2Pair, liquidityRewards);
            IPancakeswapV2Pair(pancakeswapV2Pair).sync();
            lpPool= 0;
            emit RewardLiquidityProviders(liquidityRewards);
    }

    function remLiquidity(uint256 lpAmount) private returns(uint ETHAmount) {
        ERC20(pancakeswapV2Pair).approve(pancakeswapV2Router, lpAmount);
        (ETHAmount) = IPancakeswaoRouter02(pancakeswapV2Router)
            .removeLiquidityETHSupportingFeeOnTransferTokens(
                address(this),
                lpAmount,
                0,
                0,
                address(balancer),
                block.timestamp);
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), pancakeswapV2Router, tokenAmount);

        IPancakeswaoRouter02(pancakeswapV2Router)
            .addLiquidityETH
            .value(ethAmount)(
                address(this),
                tokenAmount,
                0,
                0,
                address(this),
                block.timestamp
            );
    }
    
    // returns token amount
    function lockableSupply() external view returns (uint256) {
        return balanceOf(address(this));
    }
    // returns token amount
    function lockedSupply() external view returns (uint256) {
        uint256 lpTotalSupply = ERC20(pancakeswapV2Pair).totalSupply();
        uint256 lpBalance = lockedLiquidity();
        uint256 percentOfLpTotalSupply = lpBalance.mul(1e12).div(lpTotalSupply);

        uint256 pancakeswapBalance = balanceOf(pancakeswapV2Pair);
        uint256 _lockedSupply = pancakeswapBalance.mul(percentOfLpTotalSupply).div(1e12);
        return _lockedSupply;
    }
    // returns token amount
    function burnedSupply() external view returns (uint256) {
        uint256 lpTotalSupply = ERC20(pancakeswapV2Pair).totalSupply();
        uint256 lpBalance = burnedLiquidity();
        uint256 percentOfLpTotalSupply = lpBalance.mul(1e12).div(lpTotalSupply);

        uint256 pancakeswapBalance = balanceOf(pancakeswapV2Pair);
        uint256 _burnedSupply = pancakeswapBalance.mul(percentOfLpTotalSupply).div(1e12);
        return _burnedSupply;
    }
    // returns LP amount, not token amount
    function burnableLiquidity() public view returns (uint256) {
        return ERC20(pancakeswapV2Pair).balanceOf(address(this));
    }
    // returns LP amount, not token amount
    function burnedLiquidity() public view returns (uint256) {
        return ERC20(pancakeswapV2Pair).balanceOf(address(0));
    }
    // returns LP amount, not token amount
    function lockedLiquidity() public view returns (uint256) {
        return burnableLiquidity().add(burnedLiquidity());
    }
}

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

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IPancakeswaoRouter02 {
    function WETH() external pure returns (address);
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
      uint amountOutMin,
      address[] calldata path,
      address to,
      uint deadline
    ) external payable;
    function removeLiquidityETH(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);   
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IPancakeswapV2Pair {
    function sync() external;
}

// File: contracts/ERC20/ERC20Governance.sol

pragma solidity ^0.5.17;

contract ERC20Governance is ERC20, ERC20Detailed {
    using SafeMath for uint256;

    function _transfer(address from, address to, uint256 amount) internal {
        _moveDelegates(_delegates[from], _delegates[to], amount);
        super._transfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal {
        _moveDelegates(address(0), _delegates[account], amount);
        super._mint(account, amount);
    }

    function _burn(address account, uint256 amount) internal {
        _moveDelegates(_delegates[account], address(0), amount);
        super._burn(account, amount);
    }

    // Copied and modified from YAM code:
    // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernanceStorage.sol
    // https://github.com/yam-finance/yam-protocol/blob/master/contracts/token/YAMGovernance.sol
    // Which is copied and modified from COMPOUND:
    // https://github.com/compound-finance/compound-protocol/blob/master/contracts/Governance/Comp.sol

    /// @notice A record of each accounts delegate
    mapping (address => address) internal _delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping (address => mapping (uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping (address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH = keccak256("EIP712Domain(string name,uint256 chainId,address verifyingContract)");

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH = keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping (address => uint) public nonces;

      /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate);

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(address indexed delegate, uint previousBalance, uint newBalance);

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegator The address to get delegatee for
     */
    function delegates(address delegator)
        external
        view
        returns (address)
    {
        return _delegates[delegator];
    }

   /**
    * @notice Delegate votes from `msg.sender` to `delegatee`
    * @param delegatee The address to delegate votes to
    */
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(
        address delegatee,
        uint nonce,
        uint expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
    {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(
                DELEGATION_TYPEHASH,
                delegatee,
                nonce,
                expiry
            )
        );

        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                domainSeparator,
                structHash
            )
        );

        address signatory = ecrecover(digest, v, r, s);
        require(signatory != address(0), "ERC20Governance::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "ERC20Governance::delegateBySig: invalid nonce");
        require(now <= expiry, "ERC20Governance::delegateBySig: signature expired");
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account)
        external
        view
        returns (uint256)
    {
        uint32 nCheckpoints = numCheckpoints[account];
        return nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint blockNumber)
        external
        view
        returns (uint256)
    {
        require(blockNumber < block.number, "ERC20Governance::getPriorVotes: not yet determined");

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee)
        internal
    {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); // balance of underlying ERC20Governances (not scaled);
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(address srcRep, address dstRep, uint256 amount) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0 ? checkpoints[srcRep][srcRepNum - 1].votes : 0;
                uint256 srcRepNew = srcRepOld.sub(amount);
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0 ? checkpoints[dstRep][dstRepNum - 1].votes : 0;
                uint256 dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    )
        internal
    {
        uint32 blockNumber = safe32(block.number, "ERC20Governance::_writeCheckpoint: block number exceeds 32 bits");

        if (nCheckpoints > 0 && checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(blockNumber, newVotes);
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function getChainId() internal pure returns (uint) {
        uint256 chainId;
        assembly { chainId := chainid() }
        return chainId;
    }
}

contract Balancer {
    using SafeMath for uint256;    
    RushMoon token;
    address public burnAddr = 0x000000000000000000000000000000000000dEaD;
    address payable public treasury;
  
    constructor(address payable treasury_) public {
        token = RushMoon(msg.sender);
        treasury = treasury_;
    }
    
    // Receive bnb from pancakeswap
    function () external payable {}
    
    function rebalance(uint rebalanceRewardDivisor) external returns (uint256) { 
        require(msg.sender == address(token), "only token contract can perform this function");
        swapEthForTokens(address(this).balance, rebalanceRewardDivisor);
        uint256 lockableBalance = token.balanceOf(address(this));
        uint256 callerReward = lockableBalance.div(rebalanceRewardDivisor);
        token.transfer(tx.origin, callerReward);
        token.transfer(burnAddr, lockableBalance.sub(callerReward));  
        return lockableBalance.sub(callerReward);
    }
    function swapEthForTokens(uint256 EthAmount, uint rebalanceRewardDivisor) private {
        address[] memory pancakeswapPairPath = new address[](2);
        pancakeswapPairPath[0] = IPancakeswaoRouter02(token.pancakeswapV2Router()).WETH();
        pancakeswapPairPath[1] = address(token);
        uint256 treasuryAmount = EthAmount.div(rebalanceRewardDivisor);
        treasury.transfer(treasuryAmount);
        
        token.approve(token.pancakeswapV2Router(), EthAmount);
        
        IPancakeswaoRouter02(token.pancakeswapV2Router())
            .swapExactETHForTokensSupportingFeeOnTransferTokens.value(EthAmount.sub(treasuryAmount))(
                0,
                pancakeswapPairPath,
                address(this),
                block.timestamp);
    }        
}

contract RushMoon is 
    ERC20(1e27),
    ERC20Detailed("RushMoon", "RUSH", 18), 
    ERC20Burnable, 
    // governance must be before transfer liquidity lock
    // or delegates are not updated correctly
    ERC20Governance,
    ERC20Mintable,
    ERC20TransferLiquidityLock,
    WhitelistAdminRole
{

    function setPancakeV2Router(address _pancakeswapV2Router) public onlyWhitelistAdmin {
        pancakeswapV2Router = _pancakeswapV2Router;
    }

    function setPancakeV2Pair(address _pancakeswapV2Pair) public onlyWhitelistAdmin {
        pancakeswapV2Pair = _pancakeswapV2Pair;  
    }
    
    function unlockLP() public onlyWhitelistAdmin {
        require(now > lpUnlocked, "Not unlocked yet");
        uint256 amount = IERC20(pancakeswapV2Pair).balanceOf(address(this));
        IERC20(pancakeswapV2Pair).transfer(msg.sender, amount);
    }
    
    function setRebalanceDivisor(uint256 _rebalanceDivisor) public onlyWhitelistAdmin {
        if (_rebalanceDivisor != 0) {
            require(_rebalanceDivisor >= 10, "Cannot set rebalanceDivisor over 10%");
            require(_rebalanceDivisor <= 100, "Cannot set rebalanceDivisor under 1%");
        }        
        rebalanceDivisor = _rebalanceDivisor;
    }

    function setRebalanceInterval(uint256 _interval) public onlyWhitelistAdmin {
        rebalanceInterval = _interval;
    }
     
    function setRebalanceRewardDivisior(uint256 _rDivisor) public onlyWhitelistAdmin {
        if (_rDivisor != 0) {
            require(_rDivisor <= 100, "Cannot set rebalanceRewardDivisor under 1%");
            require(_rDivisor >= 10, "Cannot set rebalanceRewardDivisor over 10%");
        }        
        rebalanceRewardDivisor = _rDivisor;
    }
    
    function setPresaleAddress(address _presaleAddress) public onlyWhitelistAdmin {
        require(presaleAddress == address(0), "RUSHToken::PresaleAddress: already set");
        presaleAddress = _presaleAddress;
        unlocked[_presaleAddress] = !unlocked[_presaleAddress];
        feelessAddr[_presaleAddress] = !feelessAddr[_presaleAddress];
        uint256 presaleAmount = 475e24;
        _transfer(address(treasury), address(_presaleAddress), presaleAmount);
    }
    
    // Recover lost BNB and send it to the treasury
    function recoverLostBNB() public onlyWhitelistAdmin {
         address payable _owner = treasury;
        _owner.transfer(address(this).balance);
    }
    
   // Ensure requested tokens aren't users LP or RUSH tokens
   function recoverLostTokensExceptOurTokens(address _token, uint256 amount) public onlyWhitelistAdmin {
         require(_token != pancakeswapV2Pair, "Cannot recover LP tokens");
         require(_token != address(this), "Cannot recover RUSH tokens");
        IERC20(_token).transfer(msg.sender, amount);
    }
    
    // Create pancakeswap pair or adding liquidity
    function createPancakeSwapPair() public onlyWhitelistAdmin {
        uint256 amountTokenDesired = IERC20(address(this)).balanceOf(address(this));
        uint amountETH = address(this).balance;
        _approve(address(this),address(pancakeswapV2Router), amountTokenDesired);
        IPancakeV2Router01(pancakeswapV2Router).addLiquidityETH.value(amountETH)(
            address(this),
            amountTokenDesired,
            0,
            0,
            address(this),
            now); 
    }
    // returns token amount not lp
    function userBalanceInPancake(address _user) public view returns (uint256) {
        uint256 PancakeswapPairBalance = balanceOf(address(pancakeswapV2Pair));
        if (PancakeswapPairBalance == 0) {
            return 0;
        }
        uint256 userLpBalance = ERC20(pancakeswapV2Pair).balanceOf(_user);
        if (userLpBalance == 0) {
            return 0;
        }
        uint256 userPercentOfLpOwned = userLpBalance.mul(1e12).div(ERC20(pancakeswapV2Pair).totalSupply());
        return PancakeswapPairBalance.mul(userPercentOfLpOwned).div(1e12);
    }
    
    function toggleFeeless(address _addr) public onlyWhitelistAdmin {
        feelessAddr[_addr] = true;
    }
    
    function toggleFees(address _addr) public onlyWhitelistAdmin {
        feelessAddr[_addr] = false;
    }
    
    function toggleUnlocked(address _addr) public onlyWhitelistAdmin {
        unlocked[_addr] = !unlocked[_addr];
    } 
    
    function setBlackListAddress(address _addr, bool _bool) public onlyWhitelistAdmin { 
        blacklist[_addr] = _bool; 
    } 
    // After activating cannot lock again
    function activateTrading() public onlyWhitelistAdmin {
        locked = false;
    }   
 
    function setMinRebalanceAmount(uint256 _amount) public onlyWhitelistAdmin {
        require(_amount <= 5e24, "Cannot set over 5000000 MOON tokens");
        require(_amount >= 5e21, "Cannot set under 5000 MOON tokens");
        minRebalanceAmount = _amount;
    }
    // %5 max burn fee
    function setBurnTxFee(uint256 _amount) public onlyWhitelistAdmin {
        require(_amount <= 500, "Cannot set over 5% burnTxFee"); 
        burnTxFee = _amount;
    }
    // %1 min tax fee
    function setTaxFee(uint256 _amount) public onlyWhitelistAdmin {
        require(_amount <= 100, "Cannot set under 1% taxFee"); 
        taxFee = _amount;
    }
}

Contract Security Audit

Contract ABI

[{"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":true,"internalType":"address","name":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenBurnt","type":"uint256"}],"name":"Rebalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"liquidityRewards","type":"uint256"}],"name":"RewardLiquidityProviders","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":true,"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"RebalanceLiquidity","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"activateTrading","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"burnAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"burnTxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burnableLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burnedLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"burnedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateFees","outputs":[{"internalType":"uint256","name":"Burntx","type":"uint256"},{"internalType":"uint256","name":"selltx","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"createPancakeSwapPair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feelessAddr","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"_isContract","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastRebalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockableSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"locked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockedLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lockedSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lpPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lpUnlocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"minRebalanceAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pancakeswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"pancakeswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rebalanceDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rebalanceInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rebalanceRewardDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"recoverLostBNB","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverLostTokensExceptOurTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBlackListAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setBurnTxFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMinRebalanceAmount","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_pancakeswapV2Pair","type":"address"}],"name":"setPancakeV2Pair","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_pancakeswapV2Router","type":"address"}],"name":"setPancakeV2Router","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_presaleAddress","type":"address"}],"name":"setPresaleAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_rebalanceDivisor","type":"uint256"}],"name":"setRebalanceDivisor","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setRebalanceInterval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_rDivisor","type":"uint256"}],"name":"setRebalanceRewardDivisior","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setTaxFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"toggleFeeless","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"toggleFees","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"toggleUnlocked","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"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"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"treasury","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unlockLP","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"unlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"userBalanceInPancake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

601a80546001600160a01b03191661dead1790556000601b556008608090815267293ab9b426b7b7b760c11b60a052610100604052600460c0908152630a4aaa6960e31b60e05260126b033b2e3c9fd0803ce80000006200007c6200006c6001600160e01b036200029c16565b826001600160e01b03620002a116565b5082516200009290600390602086019062000a27565b508151620000a890600490602085019062000a27565b506005805460ff191660ff9290921691909117905550620000dd9050620000ce6200029c565b6001600160e01b03620002ec16565b42601755606460148190556019601555601255603260135561546060185569d3c21bcecceda1000000601655600e80546001600160a01b0319163317908190556040516001600160a01b039190911690620001389062000aac565b6001600160a01b03909116815260405190819003602001906000f08015801562000166573d6000803e3d6000fd5b50601c8054610100600160a81b0319166101006001600160a01b039384168102919091178255306000818152600f60209081526040808320805460ff199081166001908117909255600e548916855282852080548216831790558754879004891685528285208054821683179055600b80548a1686528386208054831684179055600d80548b16875284872080548416851790558954831684178a55426276a70001601955338752601090955283862080548316841790559585528285208054821683179055875487900489168552828520805482168317905596549590950487168352808320805487168617905592548616825282822080548616851790555490941684529092208054909116909117905562000296620002876200029c565b6001600160e01b036200033e16565b62000ad7565b335b90565b6001600160a01b03808316600090815260066020526040812054620002d19216836001600160e01b036200039016565b620002e882826200051460201b620048ec1760201c565b5050565b6200030781600a6200061560201b62004c921790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6200035981601d6200061560201b62004c921790919060201c565b6040516001600160a01b038216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b816001600160a01b0316836001600160a01b031614158015620003b35750600081115b156200050f576001600160a01b0383161562000464576001600160a01b03831660009081526008602052604081205463ffffffff169081620003f757600062000429565b6001600160a01b038516600090815260076020908152604080832063ffffffff60001987011684529091529020600101545b90506000620004478483620006a260201b620046731790919060201c565b905062000460868484846001600160e01b03620006f316565b5050505b6001600160a01b038216156200050f576001600160a01b03821660009081526008602052604081205463ffffffff169081620004a2576000620004d4565b6001600160a01b038416600090815260076020908152604080832063ffffffff60001987011684529091529020600101545b90506000620004f284836200086760201b62003f5a1790919060201c565b90506200050b858484846001600160e01b03620006f316565b5050505b505050565b6001600160a01b03821662000570576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6200058c816002546200086760201b62003f5a1790919060201c565b6002556001600160a01b03821660009081526020818152604090912054620005bf91839062003f5a62000867821b17901c565b6001600160a01b0383166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6200062a82826001600160e01b03620008c216565b156200067d576040805162461bcd60e51b815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b6000620006ec83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200092b60201b60201c565b9392505050565b600062000723436040518060600160405280603f815260200162006d40603f91396001600160e01b03620009c616565b905060008463ffffffff161180156200076d57506001600160a01b038516600090815260076020908152604080832063ffffffff6000198901811685529252909120548282169116145b15620007ac576001600160a01b038516600090815260076020908152604080832063ffffffff600019890116845290915290206001018290556200081d565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600784528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260089092529390208054928801909116919092161790555b604080518481526020810184905281516001600160a01b038816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b600082820183811015620006ec576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60006001600160a01b0382166200090b5760405162461bcd60e51b815260040180806020018281038252602281526020018062006d7f6022913960400191505060405180910390fd5b506001600160a01b03166000908152602091909152604090205460ff1690565b60008184841115620009be5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200098257818101518382015260200162000968565b50505050905090810190601f168015620009b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081640100000000841062000a1f5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156200098257818101518382015260200162000968565b509192915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000a6a57805160ff191683800117855562000a9a565b8280016001018555821562000a9a579182015b8281111562000a9a57825182559160200191906001019062000a7d565b5062000aa892915062000aba565b5090565b610b4380620061fd83390190565b6200029e91905b8082111562000aa8576000815560010162000ac1565b6157168062000ae76000396000f3fe6080604052600436106105075760003560e01c8063858750ab11610294578063bdb9f28d1161015e578063db14c5d5116100d6578063e84354c51161008a578063f3db188c1161006f578063f3db188c146112f3578063f9f92be41461131d578063fd7310c41461135d57610507565b8063e84354c514611272578063f1127ed81461128757610507565b8063e161eb56116100bb578063e161eb5614611233578063e5dffed314611248578063e7a324dc1461125d57610507565b8063db14c5d5146111c1578063dd62ed3e146111eb57610507565b8063ca5c7b911161012d578063cf30901211610112578063cf30901214611157578063d1846d0c1461116c578063d246d411146111ac57610507565b8063ca5c7b911461112d578063cafab2891461114257610507565b8063bdb9f28d1461101a578063bedd0d331461105a578063c3cda520146110a2578063c4081a4c1461110357610507565b8063a0f364e41161020c578063b4398244116101c0578063b6833c59116101a5578063b6833c5914610f9b578063b91f3f9714610fc5578063bb5f747b14610fda57610507565b8063b439824414610f46578063b4b5ea5714610f5b57610507565b8063a8a5550e116101f1578063a8a5550e14610eab578063a9059cbb14610ec0578063aa271e1a14610f0657610507565b8063a0f364e414610e25578063a457c2d714610e6557610507565b8063983b2d561161026357806399ac70071161024857806399ac700714610dbb5780639a8fec8714610dfb578063a071dcf414610e1057610507565b8063983b2d5614610d665780639865027514610da657610507565b8063858750ab14610ce757806385ceacda14610cfc57806395d89b4114610d3c57806397e3b78114610d5157610507565b80634c5a628c116103d557806370709a7c1161034d57806379cc6790116103015780637d57ab96116102e65780637d57ab9614610c3d5780637e0d943e14610c7d5780637ecebe0014610ca757610507565b806379cc679014610be25780637c411c1a14610c2857610507565b806373352ad31161033257806373352ad314610af35780637362d9c814610b5c578063782d6fe114610b9c57610507565b806370709a7c14610a7357806370a0823114610ab357610507565b80635b7dcaed116103a45780635faa31e3116103895780635faa31e3146109c557806361d027b314610a055780636fcfff4514610a1a57610507565b80635b7dcaed1461095b5780635c19a95c1461098557610507565b80634c5a628c146108dc57806352892884146108f157806355d0a1d014610906578063587cde1e1461091b57610507565b806320606b70116104835780633737bcb41161043757806340c10f191161041c57806340c10f191461085757806342966c681461089d5780634b7ebe33146108c757610507565b80633737bcb4146107fc578063395093511461081157610507565b80632898cafa116104685780632898cafa146107765780632a81bebb1461078b578063313ce567146107d157610507565b806320606b701461071157806323b872dd1461072657610507565b806312283a39116104da57806316279055116104bf57806316279055146106a757806316d1d916146106e757806318160ddd146106fc57610507565b806312283a3914610629578063122fe6851461066957610507565b806306fdde0314610509578063095ea7b3146105935780630bd05b69146105ed578063106b9ca114610602575b005b34801561051557600080fd5b5061051e611372565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610558578181015183820152602001610540565b50505050905090810190601f1680156105855780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561059f57600080fd5b506105d9600480360360408110156105b657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611426565b604080519115158252519081900360200190f35b3480156105f957600080fd5b50610507611444565b34801561060e57600080fd5b506106176114d3565b60408051918252519081900360200190f35b34801561063557600080fd5b506105076004803603602081101561064c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166114d9565b34801561067557600080fd5b5061067e611585565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b3480156106b357600080fd5b506105d9600480360360208110156106ca57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166115a1565b3480156106f357600080fd5b506106176115b1565b34801561070857600080fd5b506106176115b7565b34801561071d57600080fd5b506106176115bd565b34801561073257600080fd5b506105d96004803603606081101561074957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013590911690604001356115d8565b34801561078257600080fd5b5061061761167f565b34801561079757600080fd5b50610507600480360360408110156107ae57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611724565b3480156107dd57600080fd5b506107e6611938565b6040805160ff9092168252519081900360200190f35b34801561080857600080fd5b50610617611941565b34801561081d57600080fd5b506105d96004803603604081101561083457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611947565b34801561086357600080fd5b506105d96004803603604081101561087a57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356119a8565b3480156108a957600080fd5b50610507600480360360208110156108c057600080fd5b5035611a19565b3480156108d357600080fd5b50610507611a2d565b3480156108e857600080fd5b50610507611bfd565b3480156108fd57600080fd5b5061067e611c0f565b34801561091257600080fd5b50610617611c2b565b34801561092757600080fd5b5061067e6004803603602081101561093e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611d46565b34801561096757600080fd5b506105076004803603602081101561097e57600080fd5b5035611d71565b34801561099157600080fd5b50610507600480360360208110156109a857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611dd6565b3480156109d157600080fd5b50610507600480360360208110156109e857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611de0565b348015610a1157600080fd5b5061067e611e87565b348015610a2657600080fd5b50610a5a60048036036020811015610a3d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ea3565b6040805163ffffffff9092168252519081900360200190f35b348015610a7f57600080fd5b5061050760048036036020811015610a9657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611ebb565b348015610abf57600080fd5b5061061760048036036020811015610ad657600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611f6a565b348015610aff57600080fd5b50610b4360048036036060811015610b1657600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611f92565b6040805192835260208301919091528051918290030190f35b348015610b6857600080fd5b5061050760048036036020811015610b7f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611f9d565b348015610ba857600080fd5b5061061760048036036040811015610bbf57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612006565b348015610bee57600080fd5b5061050760048036036040811015610c0557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356122d0565b348015610c3457600080fd5b506105076122de565b348015610c4957600080fd5b5061050760048036036020811015610c6057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661255d565b348015610c8957600080fd5b5061050760048036036020811015610ca057600080fd5b5035612611565b348015610cb357600080fd5b5061061760048036036020811015610cca57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612730565b348015610cf357600080fd5b50610617612742565b348015610d0857600080fd5b5061061760048036036020811015610d1f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166127b3565b348015610d4857600080fd5b5061051e612972565b348015610d5d57600080fd5b506105076129f1565b348015610d7257600080fd5b5061050760048036036020811015610d8957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612a99565b348015610db257600080fd5b50610507612b02565b348015610dc757600080fd5b5061050760048036036020811015610dde57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612b12565b348015610e0757600080fd5b50610617612bb9565b348015610e1c57600080fd5b50610617612bbf565b348015610e3157600080fd5b506105d960048036036020811015610e4857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612bc5565b348015610e7157600080fd5b506105d960048036036040811015610e8857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612bda565b348015610eb757600080fd5b50610617612c55565b348015610ecc57600080fd5b506105d960048036036040811015610ee357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135612c65565b348015610f1257600080fd5b506105d960048036036020811015610f2957600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612c79565b348015610f5257600080fd5b50610617612c8c565b348015610f6757600080fd5b5061061760048036036020811015610f7e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16612cad565b348015610fa757600080fd5b5061050760048036036020811015610fbe57600080fd5b5035612d49565b348015610fd157600080fd5b50610507612e75565b348015610fe657600080fd5b506105d960048036036020811015610ffd57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661308e565b34801561102657600080fd5b506105076004803603602081101561103d57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166130a1565b34801561106657600080fd5b506105076004803603604081101561107d57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001351515613229565b3480156110ae57600080fd5b50610507600480360360c08110156110c557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359060408101359060ff6060820135169060808101359060a001356132df565b34801561110f57600080fd5b506105076004803603602081101561112657600080fd5b503561363b565b34801561113957600080fd5b50610617613710565b34801561114e57600080fd5b506106176137b3565b34801561116357600080fd5b506105d96137b9565b34801561117857600080fd5b506105d96004803603602081101561118f57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166137c2565b3480156111b857600080fd5b5061067e6137d7565b3480156111cd57600080fd5b50610507600480360360208110156111e457600080fd5b50356137f3565b3480156111f757600080fd5b506106176004803603604081101561120e57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166138c9565b34801561123f57600080fd5b50610617613901565b34801561125457600080fd5b5061067e613907565b34801561126957600080fd5b50610617613923565b34801561127e57600080fd5b5061061761393e565b34801561129357600080fd5b506112d3600480360360408110156112aa57600080fd5b50803573ffffffffffffffffffffffffffffffffffffffff16906020013563ffffffff16613944565b6040805163ffffffff909316835260208301919091528051918290030190f35b3480156112ff57600080fd5b506105076004803603602081101561131657600080fd5b5035613971565b34801561132957600080fd5b506105d96004803603602081101561134057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16613a90565b34801561136957600080fd5b50610617613aa5565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561141c5780601f106113f15761010080835404028352916020019161141c565b820191906000526020600020905b8154815290600101906020018083116113ff57829003601f168201915b5050505050905090565b600061143a611433613aab565b8484613aaf565b5060015b92915050565b61145461144f613aab565b61308e565b6114a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b601c80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60175481565b6114e461144f613aab565b611539576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b600d5473ffffffffffffffffffffffffffffffffffffffff1681565b63ffffffff813b1615155b919050565b60185481565b60025490565b60405180604361540a82396043019050604051809103902081565b60006115e5848484613bf6565b611675846115f1613aab565b6116708560405180606001604052806028815260200161546e6028913973ffffffffffffffffffffffffffffffffffffffff8a1660009081526001602052604081209061163c613aab565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002054919063ffffffff613ea916565b613aaf565b5060019392505050565b600c54604080517f70a082310000000000000000000000000000000000000000000000000000000081526000600482018190529151919273ffffffffffffffffffffffffffffffffffffffff16916370a0823191602480820192602092909190829003018186803b1580156116f357600080fd5b505afa158015611707573d6000803e3d6000fd5b505050506040513d602081101561171d57600080fd5b5051905090565b61172f61144f613aab565b611784576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b600c5473ffffffffffffffffffffffffffffffffffffffff8381169116141561180e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43616e6e6f74207265636f766572204c5020746f6b656e730000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff821630141561189357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f43616e6e6f74207265636f766572205255534820746f6b656e73000000000000604482015290519081900360640190fd5b604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905173ffffffffffffffffffffffffffffffffffffffff84169163a9059cbb9160448083019260209291908290030181600087803b15801561190857600080fd5b505af115801561191c573d6000803e3d6000fd5b505050506040513d602081101561193257600080fd5b50505050565b60055460ff1690565b601b5481565b600061143a611954613aab565b846116708560016000611965613aab565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff613f5a16565b60006119ba6119b5613aab565b612c79565b611a0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061537a6030913960400191505060405180910390fd5b61143a8383613fce565b611a2a611a24613aab565b8261400a565b50565b611a3861144f613aab565b611a8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482018190529151600092916370a08231916024808301926020929190829003018186803b158015611ae757600080fd5b505afa158015611afb573d6000803e3d6000fd5b505050506040513d6020811015611b1157600080fd5b5051600b549091504790611b3d90309073ffffffffffffffffffffffffffffffffffffffff1684613aaf565b600b54604080517ff305d719000000000000000000000000000000000000000000000000000000008152306004820181905260248201869052600060448301819052606483015260848201524260a4820152905173ffffffffffffffffffffffffffffffffffffffff9092169163f305d71991849160c480830192606092919082900301818588803b158015611bd257600080fd5b505af1158015611be6573d6000803e3d6000fd5b50505050506040513d606081101561193257600080fd5b611c0d611c08613aab565b614047565b565b600c5473ffffffffffffffffffffffffffffffffffffffff1681565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c9657600080fd5b505afa158015611caa573d6000803e3d6000fd5b505050506040513d6020811015611cc057600080fd5b505190506000611cce61167f565b90506000611cf783611ceb8464e8d4a5100063ffffffff61409c16565b9063ffffffff61410f16565b600c54909150600090611d1f9073ffffffffffffffffffffffffffffffffffffffff16611f6a565b90506000611d3c64e8d4a51000611ceb848663ffffffff61409c16565b9550505050505090565b73ffffffffffffffffffffffffffffffffffffffff9081166000908152600660205260409020541690565b611d7c61144f613aab565b611dd1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b601855565b611a2a3382614151565b611deb61144f613aab565b611e40576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b600c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600e5473ffffffffffffffffffffffffffffffffffffffff1681565b60086020526000908152604090205463ffffffff1681565b611ec661144f613aab565b611f1b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152600f6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b600080935093915050565b611fa861144f613aab565b611ffd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b611a2a81614212565b6000438210612060576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806155dd6032913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604090205463ffffffff168061209b57600091505061143e565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260076020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8601811685529252909120541683106121605773ffffffffffffffffffffffffffffffffffffffff841660009081526007602090815260408083207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9490940163ffffffff1683529290522060010154905061143e565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260076020908152604080832083805290915290205463ffffffff168310156121a857600091505061143e565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015b8163ffffffff168163ffffffff16111561228c57600282820363ffffffff160481036121f8615191565b5073ffffffffffffffffffffffffffffffffffffffff8716600090815260076020908152604080832063ffffffff8086168552908352928190208151808301909252805490931680825260019093015491810191909152908714156122675760200151945061143e9350505050565b805163ffffffff1687111561227e57819350612285565b6001820392505b50506121ce565b5073ffffffffffffffffffffffffffffffffffffffff8516600090815260076020908152604080832063ffffffff9094168352929052206001015491505092915050565b6122da8282614267565b5050565b6016546122ea33611f6a565b1015612341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c81526020018061528c602c913960400191505060405180910390fd5b60185460175401421161239f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806152b86025913960400191505060405180910390fd5b4260175560006123ae30611f6a565b90506123b9816142c8565b601354600c54604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009361246e93909273ffffffffffffffffffffffffffffffffffffffff909116916370a0823191602480820192602092909190829003018186803b15801561243657600080fd5b505afa15801561244a573d6000803e3d6000fd5b505050506040513d602081101561246057600080fd5b50519063ffffffff61410f16565b9050612479816143aa565b50601c54601254604080517ff4993018000000000000000000000000000000000000000000000000000000008152600481019290925251600092610100900473ffffffffffffffffffffffffffffffffffffffff169163f499301891602480830192602092919082900301818787803b1580156124f557600080fd5b505af1158015612509573d6000803e3d6000fd5b505050506040513d602081101561251f57600080fd5b50516040805182815290519192507f811d4760f1a92875eb76dbd3dc2359544b2f6a000ba5b78784c0b105b3469bd0919081900360200190a1505050565b61256861144f613aab565b6125bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff16600090815260106020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b61261c61144f613aab565b612671576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b801561272b57600a8110156126d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061532d6024913960400191505060405180910390fd5b606481111561272b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155946024913960400191505060405180910390fd5b601355565b60096020526000908152604090205481565b600c54604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b1580156116f357600080fd5b600c5460009081906127da9073ffffffffffffffffffffffffffffffffffffffff16611f6a565b9050806127eb5760009150506115ac565b600c54604080517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561286257600080fd5b505afa158015612876573d6000803e3d6000fd5b505050506040513d602081101561288c57600080fd5b50519050806128a0576000925050506115ac565b600061294e600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561290d57600080fd5b505afa158015612921573d6000803e3d6000fd5b505050506040513d602081101561293757600080fd5b5051611ceb8464e8d4a5100063ffffffff61409c16565b905061296964e8d4a51000611ceb858463ffffffff61409c16565b95945050505050565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561141c5780601f106113f15761010080835404028352916020019161141c565b6129fc61144f613aab565b612a51576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b600e5460405173ffffffffffffffffffffffffffffffffffffffff9091169081904780156108fc02916000818181858888f193505050501580156122da573d6000803e3d6000fd5b612aa46119b5613aab565b612af9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603081526020018061537a6030913960400191505060405180910390fd5b611a2a8161452a565b611c0d612b0d613aab565b61457f565b612b1d61144f613aab565b612b72576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b600b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60125481565b60155481565b600f6020526000908152604090205460ff1681565b600061143a612be7613aab565b84611670856040518060600160405280602581526020016156bd6025913960016000612c11613aab565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff613ea916565b6000612c6030611f6a565b905090565b600061143a612c72613aab565b8484613bf6565b600061143e600a8363ffffffff6145d416565b6000612c60612c9961167f565b612ca1612742565b9063ffffffff613f5a16565b73ffffffffffffffffffffffffffffffffffffffff811660009081526008602052604081205463ffffffff1680612ce5576000612d42565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260076020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86011684529091529020600101545b9392505050565b612d5461144f613aab565b612da9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b6a0422ca8b0a00a425000000811115612e0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806156336023913960400191505060405180910390fd5b69010f0cf064dd59200000811015612e70576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806152186021913960400191505060405180910390fd5b601655565b612e8061144f613aab565b612ed5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b6019544211612f4557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4e6f7420756e6c6f636b65642079657400000000000000000000000000000000604482015290519081900360640190fd5b600c54604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009273ffffffffffffffffffffffffffffffffffffffff16916370a08231916024808301926020929190829003018186803b158015612fb657600080fd5b505afa158015612fca573d6000803e3d6000fd5b505050506040513d6020811015612fe057600080fd5b5051600c54604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815233600482015260248101849052905192935073ffffffffffffffffffffffffffffffffffffffff9091169163a9059cbb916044808201926020929091908290030181600087803b15801561305f57600080fd5b505af1158015613073573d6000803e3d6000fd5b505050506040513d602081101561308957600080fd5b505050565b600061143e601d8363ffffffff6145d416565b6130ac61144f613aab565b613101576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b600d5473ffffffffffffffffffffffffffffffffffffffff1615613170576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154966026913960400191505060405180910390fd5b600d80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092556000908152601060209081526040808320805460ff808216157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0092831617909255600f909352922080549283161592909116919091179055600e546b0188e92998b63ce9bb000000916122da91168383613bf6565b61323461144f613aab565b613289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff91909116600090815260116020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000604051808061540a6043913960430190506040518091039020613302611372565b8051906020012061331161466f565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060006040518080615683603a91396040805191829003603a01822060208084019190915273ffffffffffffffffffffffffffffffffffffffff8c1683830152606083018b905260808084018b90528251808503909101815260a0840183528051908201207f190100000000000000000000000000000000000000000000000000000000000060c085015260c2840187905260e2808501829052835180860390910181526101028501808552815191840191909120600091829052610122860180865281905260ff8c1661014287015261016286018b905261018286018a9052935191965092945091926001926101a280830193927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08301929081900390910190855afa1580156134af573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116613546576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806152396031913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116600090815260096020526040902080546001810190915589146135cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180615656602d913960400191505060405180910390fd5b87421115613624576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806155426031913960400191505060405180910390fd5b61362e818b614151565b505050505b505050505050565b61364661144f613aab565b61369b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b606481111561370b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f43616e6e6f742073657420756e64657220312520746178466565000000000000604482015290519081900360640190fd5b601555565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561377b57600080fd5b505afa15801561378f573d6000803e3d6000fd5b505050506040513d60208110156137a557600080fd5b505190506000611cce612c8c565b60195481565b601c5460ff1681565b60106020526000908152604090205460ff1681565b601a5473ffffffffffffffffffffffffffffffffffffffff1681565b6137fe61144f613aab565b613853576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b6101f48111156138c457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43616e6e6f7420736574206f766572203525206275726e547846656500000000604482015290519081900360640190fd5b601455565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60135481565b600b5473ffffffffffffffffffffffffffffffffffffffff1681565b60405180603a6156838239603a019050604051809103902081565b60165481565b60076020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b61397c61144f613aab565b6139d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806154de6040913960400191505060405180910390fd5b8015613a8b576064811115613a31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615303602a913960400191505060405180910390fd5b600a811015613a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806151ee602a913960400191505060405180910390fd5b601255565b60116020526000908152604090205460ff1681565b60145481565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316613b1b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061560f6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018061526a6022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b601c5460ff168015613c33575073ffffffffffffffffffffffffffffffffffffffff831660009081526010602052604090205460ff161515600114155b8015613c6a575073ffffffffffffffffffffffffffffffffffffffff821660009081526010602052604090205460ff161515600114155b15613cc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153516029913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831660009081526011602052604090205460ff16151560011480613d23575073ffffffffffffffffffffffffffffffffffffffff821660009081526011602052604090205460ff1615156001145b15613d8f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4164647265737320697320626c61636b6c697374656400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604081205460ff16158015613deb575073ffffffffffffffffffffffffffffffffffffffff83166000908152600f602052604090205460ff16155b15613e9e5760145415613e4657601454613e0c90839063ffffffff61410f16565b9050613e1e828263ffffffff61467316565b601a54909250613e4690859073ffffffffffffffffffffffffffffffffffffffff16836146b5565b60155415613e8e576000613e656015548461410f90919063ffffffff16565b601b8054820190559050613e7f838263ffffffff61467316565b9250613e8c8530836146b5565b505b613e998484846146b5565b611932565b6119328484846146b5565b60008184841115613f52576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613f17578181015183820152602001613eff565b50505050905090810190601f168015613f445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015612d4257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600660205260408120546140009216836146ff565b6122da82826148ec565b73ffffffffffffffffffffffffffffffffffffffff80831660009081526006602052604081205461403d921690836146ff565b6122da8282614a1d565b614058601d8263ffffffff614b6716565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16590600090a250565b6000826140ab5750600061143e565b828202828482816140b857fe5b0414612d42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061544d6021913960400191505060405180910390fd5b6000612d4283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614c13565b73ffffffffffffffffffffffffffffffffffffffff8083166000908152600660205260408120549091169061418584611f6a565b73ffffffffffffffffffffffffffffffffffffffff85811660008181526006602052604080822080547fffffffffffffffffffffffff000000000000000000000000000000000000000016898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46119328284836146ff565b614223601d8263ffffffff614c9216565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129990600090a250565b614271828261400a565b6122da8261427d613aab565b6116708460405180606001604052806024815260200161551e6024913973ffffffffffffffffffffffffffffffffffffffff881660009081526001602052604081209061163c613aab565b600c546142ed90309073ffffffffffffffffffffffffffffffffffffffff16836146b5565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561435757600080fd5b505af115801561436b573d6000803e3d6000fd5b50506000601b5550506040805182815290517f8765d2bb982ed6ee74d2b03c76c9c129aa4a4e3e6b17bd7cf7830088e9d490549181900360200190a150565b600c54600b54604080517f095ea7b300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152602481018590529051600093929092169163095ea7b39160448082019260209290919082900301818787803b15801561442c57600080fd5b505af1158015614440573d6000803e3d6000fd5b505050506040513d602081101561445657600080fd5b5050600b54601c54604080517faf2979eb000000000000000000000000000000000000000000000000000000008152306004820152602481018690526000604482018190526064820181905273ffffffffffffffffffffffffffffffffffffffff610100909404841660848301524260a48301529151929093169263af2979eb9260c48083019360209383900390910190829087803b1580156144f857600080fd5b505af115801561450c573d6000803e3d6000fd5b505050506040513d602081101561452257600080fd5b505192915050565b61453b600a8263ffffffff614c9216565b60405173ffffffffffffffffffffffffffffffffffffffff8216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b614590600a8263ffffffff614b6716565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b600073ffffffffffffffffffffffffffffffffffffffff8216614642576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154bc6022913960400191505060405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff166000908152602091909152604090205460ff1690565b4690565b6000612d4283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613ea9565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600660205260408082205485841683529120546146f4929182169116836146ff565b613089838383614d58565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561473b5750600081115b156130895773ffffffffffffffffffffffffffffffffffffffff8316156148185773ffffffffffffffffffffffffffffffffffffffff831660009081526008602052604081205463ffffffff1690816147955760006147f2565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260076020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87011684529091529020600101545b90506000614806828563ffffffff61467316565b905061481486848484614f29565b5050505b73ffffffffffffffffffffffffffffffffffffffff8216156130895773ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604081205463ffffffff16908161486d5760006148ca565b73ffffffffffffffffffffffffffffffffffffffff8416600090815260076020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff87011684529091529020600101545b905060006148de828563ffffffff613f5a16565b905061363385848484614f29565b73ffffffffffffffffffffffffffffffffffffffff821661496e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b600254614981908263ffffffff613f5a16565b60025573ffffffffffffffffffffffffffffffffffffffff82166000908152602081905260409020546149ba908263ffffffff613f5a16565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff8216614a89576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155736021913960400191505060405180910390fd5b614ad9816040518060600160405280602281526020016151cc6022913973ffffffffffffffffffffffffffffffffffffffff8516600090815260208190526040902054919063ffffffff613ea916565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254614b12908263ffffffff61467316565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b614b7182826145d4565b614bc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806153aa6021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b60008183614c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315613f17578181015183820152602001613eff565b506000838581614c8857fe5b0495945050505050565b614c9c82826145d4565b15614d0857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f526f6c65733a206163636f756e7420616c72656164792068617320726f6c6500604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff1660009081526020919091526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b73ffffffffffffffffffffffffffffffffffffffff8316614dc4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155b86025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216614e30576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806151a96023913960400191505060405180910390fd5b614e80816040518060600160405280602681526020016152dd6026913973ffffffffffffffffffffffffffffffffffffffff8616600090815260208190526040902054919063ffffffff613ea916565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054614ec2908263ffffffff613f5a16565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b6000614f4d436040518060600160405280603f81526020016153cb603f9139615119565b905060008463ffffffff16118015614fc1575073ffffffffffffffffffffffffffffffffffffffff8516600090815260076020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8901811685529252909120548282169116145b156150295773ffffffffffffffffffffffffffffffffffffffff8516600090815260076020908152604080832063ffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff890116845290915290206001018290556150c2565b60408051808201825263ffffffff8084168252602080830186815273ffffffffffffffffffffffffffffffffffffffff8a166000818152600784528681208b861682528452868120955186549086167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000918216178755925160019687015590815260089092529390208054928801909116919092161790555b6040805184815260208101849052815173ffffffffffffffffffffffffffffffffffffffff8816927fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724928290030190a25050505050565b6000816401000000008410615189576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201818152835160248401528351909283926044909101919085019080838360008315613f17578181015183820152602001613eff565b509192915050565b60408051808201909152600080825260208201529056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e636543616e6e6f742073657420726562616c616e636552657761726444697669736f72206f7665722031302543616e6e6f742073657420756e6465722035303030204d4f4f4e20746f6b656e734552433230476f7665726e616e63653a3a64656c656761746542795369673a20696e76616c6964207369676e617475726545524332303a20617070726f766520746f20746865207a65726f2061646472657373596f7520646f206e6f7420686176652074686520726571756972656420616d6f756e74206f6620525553482e497420697320746f6f206561726c7920746f2075736520746869732066756e6374696f6e2e45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636543616e6e6f742073657420726562616c616e636552657761726444697669736f7220756e64657220312543616e6e6f742073657420726562616c616e636544697669736f72206f766572203130255472616e736665727320617265206c6f636b656420756e74696c2061667465722070726573616c652e4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c654552433230476f7665726e616e63653a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636552555348546f6b656e3a3a50726573616c65416464726573733a20616c726561647920736574526f6c65733a206163636f756e7420697320746865207a65726f206164647265737357686974656c69737441646d696e526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c69737441646d696e20726f6c6545524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e63654552433230476f7665726e616e63653a3a64656c656761746542795369673a207369676e6174757265206578706972656445524332303a206275726e2066726f6d20746865207a65726f206164647265737343616e6e6f742073657420726562616c616e636544697669736f7220756e64657220312545524332303a207472616e736665722066726f6d20746865207a65726f20616464726573734552433230476f7665726e616e63653a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e656445524332303a20617070726f76652066726f6d20746865207a65726f206164647265737343616e6e6f7420736574206f7665722035303030303030204d4f4f4e20746f6b656e734552433230476f7665726e616e63653a3a64656c656761746542795369673a20696e76616c6964206e6f6e636544656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e74323536206578706972792945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa265627a7a7231582041fd66602da6d934593dbfaba5380c2767bbf50328e5f38e4a940e5e219e5d7d64736f6c634300051100326080604052600180546001600160a01b03191661dead17905534801561002457600080fd5b50604051610b43380380610b438339818101604052602081101561004757600080fd5b5051600080546001600160a01b03199081163317909155600280546001600160a01b0390931692909116919091179055610abd806100866000396000f3fe6080604052600436106100345760003560e01c806361d027b314610036578063d246d41114610074578063f499301814610089575b005b34801561004257600080fd5b5061004b6100c5565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561008057600080fd5b5061004b6100e1565b34801561009557600080fd5b506100b3600480360360208110156100ac57600080fd5b50356100fd565b60408051918252519081900360200190f35b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b6000805473ffffffffffffffffffffffffffffffffffffffff16331461016e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180610a5c602d913960400191505060405180910390fd5b61017847836103b9565b60008054604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905173ffffffffffffffffffffffffffffffffffffffff909216916370a0823191602480820192602092909190829003018186803b1580156101ea57600080fd5b505afa1580156101fe573d6000803e3d6000fd5b505050506040513d602081101561021457600080fd5b50519050600061022a828563ffffffff6108a016565b60008054604080517fa9059cbb00000000000000000000000000000000000000000000000000000000815232600482015260248101859052905193945073ffffffffffffffffffffffffffffffffffffffff9091169263a9059cbb92604480840193602093929083900390910190829087803b1580156102a957600080fd5b505af11580156102bd573d6000803e3d6000fd5b505050506040513d60208110156102d357600080fd5b505060005460015473ffffffffffffffffffffffffffffffffffffffff9182169163a9059cbb911661030b858563ffffffff6108e916565b6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561037457600080fd5b505af1158015610388573d6000803e3d6000fd5b505050506040513d602081101561039e57600080fd5b506103b19050828263ffffffff6108e916565b949350505050565b60408051600280825260608083018452926020830190803883395050600054604080517fe5dffed3000000000000000000000000000000000000000000000000000000008152905193945073ffffffffffffffffffffffffffffffffffffffff9091169263e5dffed392506004808301926020929190829003018186803b15801561044357600080fd5b505afa158015610457573d6000803e3d6000fd5b505050506040513d602081101561046d57600080fd5b5051604080517fad5c4648000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163ad5c464891600480820192602092909190829003018186803b1580156104d757600080fd5b505afa1580156104eb573d6000803e3d6000fd5b505050506040513d602081101561050157600080fd5b50518151829060009061051057fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201015260005482519116908290600190811061054857fe5b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152600061057f848463ffffffff6108a016565b60025460405191925073ffffffffffffffffffffffffffffffffffffffff169082156108fc029083906000818181858888f193505050501580156105c7573d6000803e3d6000fd5b50600054604080517fe5dffed3000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163095ea7b391839163e5dffed391600480820192602092909190829003018186803b15801561063b57600080fd5b505afa15801561064f573d6000803e3d6000fd5b505050506040513d602081101561066557600080fd5b5051604080517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482018890525160448083019260209291908290030181600087803b1580156106da57600080fd5b505af11580156106ee573d6000803e3d6000fd5b505050506040513d602081101561070457600080fd5b5050600054604080517fe5dffed3000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9092169163e5dffed391600480820192602092909190829003018186803b15801561077157600080fd5b505afa158015610785573d6000803e3d6000fd5b505050506040513d602081101561079b57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663b6f9de956107c8868463ffffffff6108e916565b60008530426040518663ffffffff1660e01b815260040180858152602001806020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561085a578181015183820152602001610842565b50505050905001955050505050506000604051808303818588803b15801561088157600080fd5b505af1158015610895573d6000803e3d6000fd5b505050505050505050565b60006108e283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061092b565b9392505050565b60006108e283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506109e7565b600081836109d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561099657818101518382015260200161097e565b50505050905090810190601f1680156109c35780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816109dd57fe5b0495945050505050565b60008184841115610a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561099657818101518382015260200161097e565b50505090039056fe6f6e6c7920746f6b656e20636f6e74726163742063616e20706572666f726d20746869732066756e6374696f6ea265627a7a723158207984227f9438c4f4a84a0e19653b89f1d36f172e2daa5a0ed4b04065b502c6dd64736f6c634300051100324552433230476f7665726e616e63653a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373

Deployed ByteCode Sourcemap

44764:5354:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21653:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21653:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;21653:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12275:152;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12275:152:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12275:152:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;49359:86;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49359:86:0;;;:::i;24758:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24758:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;48933:106;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48933:106:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48933:106:0;;;;:::i;24339:29::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24339:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26517:198;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26517:198:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26517:198:0;;;;:::i;24793:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24793:32:0;;;:::i;11296:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11296:91:0;;;:::i;35321:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35321:122:0;;;:::i;12899:304::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12899:304:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12899:304:0;;;;;;;;;;;;;;;;;;:::i;31189:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31189:129:0;;;:::i;47302:312::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47302:312:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47302:312:0;;;;;;;;;:::i;22505:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22505:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24939:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24939:25:0;;;:::i;13612:210::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13612:210:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13612:210:0;;;;;;;;;:::i;19720:143::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19720:143:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19720:143:0;;;;;;;;;:::i;19070:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19070:83:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19070:83:0;;:::i;47678:509::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47678:509:0;;;:::i;23583:95::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23583:95:0;;;:::i;24299:32::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24299:32:0;;;:::i;30496:459::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30496:459:0;;;:::i;36304:149::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36304:149:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36304:149:0;;;;:::i;46031:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46031:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46031:123:0;;:::i;36597:104::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36597:104:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;36597:104:0;;;;:::i;45237:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45237:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45237:139:0;;;;:::i;24375:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24375:31:0;;;:::i;35199:49::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35199:49:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35199:49:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48813:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48813:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48813:108:0;;;;:::i;11450:110::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11450:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11450:110:0;;;;:::i;26373:132::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26373:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26373:132:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23459:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23459:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23459:116:0;;;;:::i;39233:1264::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39233:1264:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39233:1264:0;;;;;;;;;:::i;19161:103::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19161:103:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19161:103:0;;;;;;;;;:::i;27831:695::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27831:695:0;;;:::i;49051:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49051:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49051:118:0;;;;:::i;45653:370::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45653:370:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45653:370:0;;:::i;35735:39::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35735:39:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35735:39:0;;;;:::i;31005:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31005:134:0;;;:::i;48229:572::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48229:572:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48229:572:0;;;;:::i;21855:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21855:87:0;;;:::i;47075:154::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47075:154:0;;;:::i;18566:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18566:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18566:92:0;;;;:::i;18666:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18666:79:0;;;:::i;45084:145::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45084:145:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45084:145:0;;;;:::i;24565:37::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24565:37:0;;;:::i;24683:21::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24683:21:0;;;:::i;24413:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24413:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24413:43:0;;;;:::i;14325:261::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14325:261:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14325:261:0;;;;;;;;;:::i;29859:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29859:108:0;;;:::i;11773:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11773:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11773:158:0;;;;;;;;;:::i;18449:109::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18449:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18449:109:0;;;;:::i;31368:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31368:125:0;;;:::i;38547:255::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;38547:255:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38547:255:0;;;;:::i;49457:267::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49457:267:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49457:267:0;;:::i;45388:253::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;45388:253:0;;;:::i;23326:125::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23326:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23326:125:0;;;;:::i;46534:476::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46534:476:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46534:476:0;;;;:::i;49182:127::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49182:127:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49182:127:0;;;;;;;;;;;:::i;37135:1211::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37135:1211:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;37135:1211:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;49953:162::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49953:162:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49953:162:0;;:::i;30002:459::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30002:459:0;;;:::i;24832:25::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24832:25:0;;;:::i;24977:18::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24977:18:0;;;:::i;24463:40::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24463:40:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24463:40:0;;;;:::i;24864:68::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24864:68:0;;;:::i;49754:170::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49754:170:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49754:170:0;;:::i;11994:134::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11994:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11994:134:0;;;;;;;;;;;:::i;24609:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24609:31:0;;;:::i;24258:34::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24258:34:0;;;:::i;35537:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35537:117:0;;;:::i;24718:33::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24718:33:0;;;:::i;35060:70::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35060:70:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;35060:70:0;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;46167:355;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46167:355:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46167:355:0;;:::i;24510:41::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24510:41:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24510:41:0;;;;:::i;24648:24::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24648:24:0;;;:::i;21653:83::-;21723:5;21716:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21690:13;;21716:12;;21723:5;;21716:12;;21723:5;21716:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21653:83;:::o;12275:152::-;12341:4;12358:39;12367:12;:10;:12::i;:::-;12381:7;12390:6;12358:8;:39::i;:::-;-1:-1:-1;12415:4:0;12275:152;;;;;:::o;49359:86::-;23199:30;23216:12;:10;:12::i;:::-;23199:16;:30::i;:::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49423:6;:14;;;;;;49359:86::o;24758:28::-;;;;:::o;48933:106::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49005:18;;49026:5;49005:18;;;:11;:18;;;;;:26;;;;;;48933:106::o;24339:29::-;;;;;;:::o;26517:198::-;26698:8;26651:18;;26698:8;;;26517:198;;;;:::o;24793:32::-;;;;:::o;11296:91::-;11367:12;;11296:91;:::o;35321:122::-;35363:80;;;;;;;;;;;;;;;;;;35321:122;:::o;12899:304::-;12988:4;13005:36;13015:6;13023:9;13034:6;13005:9;:36::i;:::-;13052:121;13061:6;13069:12;:10;:12::i;:::-;13083:89;13121:6;13083:89;;;;;;;;;;;;;;;;;:19;;;;;;;:11;:19;;;;;;13103:12;:10;:12::i;:::-;13083:33;;;;;;;;;;;;;-1:-1:-1;13083:33:0;;;:89;;:37;:89;:::i;:::-;13052:8;:121::i;:::-;-1:-1:-1;13191:4:0;12899:304;;;;;:::o;31189:129::-;31270:17;;31264:46;;;;;;31237:7;31264:46;;;;;;;;31237:7;;31270:17;;;31264:34;;:46;;;;;;;;;;;;;;;31270:17;31264:46;;;5:2:-1;;;;30:1;27;20:12;5:2;31264:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31264:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31264:46:0;;-1:-1:-1;31189:129:0;:::o;47302:312::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47432:17;;;47422:27;;;47432:17;;47422:27;;47414:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47498:23;;;47516:4;47498:23;;47490:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47563:43;;;;;;47587:10;47563:43;;;;;;;;;;;;:23;;;;;;:43;;;;;;;;;;;;;;-1:-1:-1;47563:23:0;:43;;;5:2:-1;;;;30:1;27;20:12;5:2;47563:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47563:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;47302:312:0:o;22505:83::-;22571:9;;;;22505:83;:::o;24939:25::-;;;;:::o;13612:210::-;13692:4;13709:83;13718:12;:10;:12::i;:::-;13732:7;13741:50;13780:10;13741:11;:25;13753:12;:10;:12::i;:::-;13741:25;;;;;;;;;;;;;;;;;;-1:-1:-1;13741:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;19720:143::-;19794:4;18346:22;18355:12;:10;:12::i;:::-;18346:8;:22::i;:::-;18338:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19811:22;19817:7;19826:6;19811:5;:22::i;19070:83::-;19118:27;19124:12;:10;:12::i;:::-;19138:6;19118:5;:27::i;:::-;19070:83;:::o;47678:509::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47777:46;;;;;;47792:4;47777:46;;;;;;;;47748:26;;47792:4;47777:31;;:46;;;;;;;;;;;;;;47792:4;47777:46;;;5:2:-1;;;;30:1;27;20:12;5:2;47777:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47777:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47777:46:0;47914:19;;47777:46;;-1:-1:-1;47851:21:0;;47883:72;;47900:4;;47914:19;;47777:46;47883:8;:72::i;:::-;47985:19;;47966:212;;;;;;48061:4;47966:212;;;;;;;;;;;;47985:19;47966:212;;;;;;;;;;;;;;48174:3;47966:212;;;;;;47985:19;;;;;47966:55;;48028:9;;47966:212;;;;;;;;;;;;;;48028:9;47985:19;47966:212;;;5:2:-1;;;;30:1;27;20:12;5:2;47966:212:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47966:212:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;23583:95:0;23635:35;23657:12;:10;:12::i;:::-;23635:21;:35::i;:::-;23583:95::o;24299:32::-;;;;;;:::o;30496:459::-;30543:7;30563:21;30593:17;;;;;;;;;;;30587:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30587:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30587:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30587:38:0;;-1:-1:-1;30636:17:0;30656;:15;:17::i;:::-;30636:37;-1:-1:-1;30684:30:0;30717:38;30741:13;30717:19;30636:37;30731:4;30717:19;:13;:19;:::i;:::-;:23;:38;:23;:38;:::i;:::-;30807:17;;30684:71;;-1:-1:-1;30768:26:0;;30797:28;;30807:17;;30797:9;:28::i;:::-;30768:57;-1:-1:-1;30836:21:0;30860:56;30911:4;30860:46;30768:57;30883:22;30860:46;:22;:46;:::i;:56::-;30836:80;-1:-1:-1;;;;;;30496:459:0;:::o;36304:149::-;36424:21;;;;36392:7;36424:21;;;:10;:21;;;;;;;;36304:149::o;46031:123::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46117:17;:29;46031:123::o;36597:104::-;36661:32;36671:10;36683:9;36661;:32::i;45237:139::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45328:17;:38;;;;;;;;;;;;;;;45237:139::o;24375:31::-;;;;;;:::o;35199:49::-;;;;;;;;;;;;;;;:::o;48813:108::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48888:18;;;;;;:11;:18;;;;;:25;;;;48909:4;48888:25;;;48813:108::o;11450:110::-;11534:18;;11507:7;11534:18;;;;;;;;;;;;11450:110::o;26373:132::-;26458:15;26475;26373:132;;;;;;:::o;23459:116::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23540:27;23559:7;23540:18;:27::i;39233:1264::-;39341:7;39388:12;39374:11;:26;39366:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39490:23;;;39468:19;39490:23;;;:14;:23;;;;;;;;39528:17;39524:58;;39569:1;39562:8;;;;;39524:58;39642:20;;;;;;;:11;:20;;;;;;;;:38;39663:16;;;39642:38;;;;;;;;;:48;;:63;-1:-1:-1;39638:147:0;;39729:20;;;;;;;:11;:20;;;;;;;;39750:16;;;;;39729:38;;;;;;;;39765:1;39729:44;;;-1:-1:-1;39722:51:0;;39638:147;39846:20;;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;39842:88:0;;;39917:1;39910:8;;;;;39842:88;39942:12;39984:16;;;40011:428;40026:5;40018:13;;:5;:13;;;40011:428;;;40090:1;40073:13;;;40072:19;;;40064:27;;40133:20;;:::i;:::-;-1:-1:-1;40156:20:0;;;;;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;40133:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40203:27;;40199:229;;;40258:8;;;;-1:-1:-1;40251:15:0;;-1:-1:-1;;;;40251:15:0;40199:229;40292:12;;:26;;;-1:-1:-1;40288:140:0;;;40347:6;40339:14;;40288:140;;;40411:1;40402:6;:10;40394:18;;40288:140;40011:428;;;;;-1:-1:-1;40456:20:0;;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;39233:1264:0;;;;:::o;19161:103::-;19230:26;19240:7;19249:6;19230:9;:26::i;:::-;19161:103;;:::o;27831:695::-;27912:18;;27887:21;27897:10;27887:9;:21::i;:::-;:43;;27879:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28032:17;;28016:13;;:33;27998:15;:51;27990:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28119:15;28103:13;:31;28145:23;28171:24;28189:4;28171:9;:24::i;:::-;28145:50;;28206:42;28232:15;28206:25;:42::i;:::-;28348:16;;28300:17;;28294:49;;;;;;28337:4;28294:49;;;;;;28269:22;;28294:71;;28348:16;;28300:17;;;;;28294:34;;:49;;;;;;;;;;;;;;;28300:17;28294:49;;;5:2:-1;;;;30:1;27;20:12;5:2;28294:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28294:49:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28294:49:0;;:71;:53;:71;:::i;:::-;28269:96;;28386:28;28399:14;28386:12;:28::i;:::-;-1:-1:-1;28440:8:0;;28459:22;;28440:42;;;;;;;;;;;;;;-1:-1:-1;;28440:8:0;;;;;;:18;;:42;;;;;;;;;;;;;;-1:-1:-1;28440:8:0;:42;;;5:2:-1;;;;30:1;27;20:12;5:2;28440:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28440:42:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;28440:42:0;28500:18;;;;;;;;28440:42;;-1:-1:-1;28500:18:0;;;;;;28440:42;28500:18;;;27831:695;;;:::o;49051:118::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49146:15;;;;;;:8;:15;;;;;;;49127:34;;;49146:15;;;;49145:16;49127:34;;;49051:118::o;45653:370::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45750:22;;45746:215;;45818:2;45797:17;:23;;45789:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45905:3;45884:17;:24;;45876:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45979:16;:36;45653:370::o;35735:39::-;;;;;;;;;;;;;:::o;31005:134::-;31088:17;;31082:49;;;;;;31125:4;31082:49;;;;;;31055:7;;31088:17;;;31082:34;;:49;;;;;;;;;;;;;;31088:17;31082:49;;;5:2:-1;;;;30:1;27;20:12;48229:572:0;48366:17;;48295:7;;;;48348:37;;48366:17;;48348:9;:37::i;:::-;48315:70;-1:-1:-1;48400:27:0;48396:68;;48451:1;48444:8;;;;;48396:68;48504:17;;48498:41;;;;;;48504:17;48498:41;;;;;;;;;48474:21;;48504:17;;;;;48498:34;;:41;;;;;;;;;;;;;;;48504:17;48498:41;;;5:2:-1;;;;30:1;27;20:12;5:2;48498:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48498:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48498:41:0;;-1:-1:-1;48554:18:0;48550:59;;48596:1;48589:8;;;;;;48550:59;48619:28;48650:67;48684:17;;;;;;;;;;;48678:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48678:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48678:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48678:38:0;48650:23;:13;48668:4;48650:23;:17;:23;:::i;:67::-;48619:98;-1:-1:-1;48735:58:0;48788:4;48735:48;:22;48619:98;48735:48;:26;:48;:::i;:58::-;48728:65;48229:572;-1:-1:-1;;;;;48229:572:0:o;21855:87::-;21927:7;21920:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21894:13;;21920:14;;21927:7;;21920:14;;21927:7;21920:14;;;;;;;;;;;;;;;;;;;;;;;;47075:154;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47164:8;;47183:38;;47164:8;;;;;;;47199:21;47183:38;;;;;47139:22;47183:38;47139:22;47183:38;47199:21;47164:8;47183:38;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;18566:92:0;18346:22;18355:12;:10;:12::i;18346:22::-;18338:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18631:19;18642:7;18631:10;:19::i;18666:79::-;18710:27;18724:12;:10;:12::i;:::-;18710:13;:27::i;45084:145::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45179:19;:42;;;;;;;;;;;;;;;45084:145::o;24565:37::-;;;;:::o;24683:21::-;;;;:::o;24413:43::-;;;;;;;;;;;;;;;:::o;14325:261::-;14410:4;14427:129;14436:12;:10;:12::i;:::-;14450:7;14459:96;14498:15;14459:96;;;;;;;;;;;;;;;;;:11;:25;14471:12;:10;:12::i;:::-;14459:25;;;;;;;;;;;;;;;;;;-1:-1:-1;14459:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;29859:108::-;29908:7;29935:24;29953:4;29935:9;:24::i;:::-;29928:31;;29859:108;:::o;11773:158::-;11842:4;11859:42;11869:12;:10;:12::i;:::-;11883:9;11894:6;11859:9;:42::i;18449:109::-;18505:4;18529:21;:8;18542:7;18529:21;:12;:21;:::i;31368:125::-;31416:7;31443:42;31467:17;:15;:17::i;:::-;31443:19;:17;:19::i;:::-;:23;:42;:23;:42;:::i;38547:255::-;38686:23;;;38639:7;38686:23;;;:14;:23;;;;;;;;38727:16;:67;;38793:1;38727:67;;;38746:20;;;;;;;:11;:20;;;;;;;;:38;38767:16;;;38746:38;;;;;;;;38782:1;38746:44;;38727:67;38720:74;38547:255;-1:-1:-1;;;38547:255:0:o;49457:267::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49561:4;49550:7;:15;;49542:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49635:4;49624:7;:15;;49616:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49688:18;:28;49457:267::o;45388:253::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45459:10;;45453:3;:16;45445:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45525:17;;45518:50;;;;;;45562:4;45518:50;;;;;;45501:14;;45525:17;;;45518:35;;:50;;;;;;;;;;;;;;45525:17;45518:50;;;5:2:-1;;;;30:1;27;20:12;5:2;45518:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45518:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;45518:50:0;45586:17;;45579:54;;;;;;45614:10;45579:54;;;;;;;;;;;;45518:50;;-1:-1:-1;45586:17:0;;;;;45579:34;;:54;;;;;45518:50;;45579:54;;;;;;;;45586:17;;45579:54;;;5:2:-1;;;;30:1;27;20:12;5:2;45579:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45579:54:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;45388:253:0:o;23326:125::-;23390:4;23414:29;:16;23435:7;23414:29;:20;:29;:::i;46534:476::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46631:14;;:28;:14;:28;46623:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46713:14;:32;;;;;;;;;;;;;;-1:-1:-1;46785:25:0;;;:8;:25;;;;;;;;;;;;;;46784:26;46756:54;;;;;;;;46853:11;:28;;;;;;;;;;46852:29;46821:60;;;;;;;;;;46951:8;;46916:6;;46933:69;;46951:8;46713:32;46916:6;46933:9;:69::i;49182:127::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49276:16;;;;;;;;;:9;:16;;;;;:24;;;;;;;;;;;;;49182:127::o;37135:1211::-;37328:23;35363:80;;;;;;;;;;;;;;;;;;;37457:6;:4;:6::i;:::-;37441:24;;;;;;37484:12;:10;:12::i;:::-;37523:4;37378:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;37378:165:0;;;37354:200;;;;;;37328:226;;37567:18;35583:71;;;;;;;;;;;;;;;;;;;37612:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;37612:140:0;;;;;37588:175;;;;;;37817:123;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;37817:123:0;;;;;;37793:158;;;;;;;;;-1:-1:-1;37984:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37588:175;;-1:-1:-1;37793:158:0;;-1:-1:-1;;;37984:26:0;;;;;;;37612:140;-1:-1:-1;37984:26:0;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;37984:26:0;;;;;;-1:-1:-1;;38029:23:0;;;38021:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38134:17;;;;;;;:6;:17;;;;;:19;;;;;;;;38125:28;;38117:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38229:6;38222:3;:13;;38214:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38307:31;38317:9;38328;38307;:31::i;:::-;38300:38;;;;37135:1211;;;;;;;:::o;49953:162::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50045:3;50034:7;:14;;50026:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50091:6;:16;49953:162::o;30002:459::-;30049:7;30069:21;30099:17;;;;;;;;;;;30093:36;;;:38;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30093:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30093:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30093:38:0;;-1:-1:-1;30142:17:0;30162;:15;:17::i;24832:25::-;;;;:::o;24977:18::-;;;;;;:::o;24463:40::-;;;;;;;;;;;;;;;:::o;24864:68::-;;;;;;:::o;49754:170::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49849:3;49838:7;:14;;49830:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49897:9;:19;49754:170::o;11994:134::-;12093:18;;;;12066:7;12093:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11994:134::o;24609:31::-;;;;:::o;24258:34::-;;;;;;:::o;35537:117::-;35583:71;;;;;;;;;;;;;;;;;;35537:117;:::o;24718:33::-;;;;:::o;35060:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46167:355::-;23199:30;23216:12;:10;:12::i;23199:30::-;23191:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46263:14;;46259:203;;46315:3;46302:9;:16;;46294:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46401:2;46388:9;:15;;46380:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46480:22;:34;46167:355::o;24510:41::-;;;;;;;;;;;;;;;:::o;24648:24::-;;;;:::o;908:98::-;988:10;908:98;:::o;17256:338::-;17350:19;;;17342:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17429:21;;;17421:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17502:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;17554:32;;;;;;;;;;;;;;;;;17256:338;;;:::o;26723:1018::-;26817:6;;;;:32;;;;-1:-1:-1;26827:14:0;;;;;;;:8;:14;;;;;;;;:22;;:14;:22;;26817:32;:56;;;;-1:-1:-1;26853:12:0;;;;;;;:8;:12;;;;;;;;:20;;:12;:20;;26817:56;26814:125;;;26888:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26814:125;26955:16;;;;;;;:9;:16;;;;;;;;:24;;:16;:24;;:50;;-1:-1:-1;26983:14:0;;;;;;;:9;:14;;;;;;;;:22;;:14;:22;26955:50;26952:101;;;27021:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26952:101;27111:17;;;27072:15;27111:17;;;:11;:17;;;;;;;;:26;;;:54;;-1:-1:-1;27141:15:0;;;;;;;:11;:15;;;;;;;;:24;27111:54;27108:626;;;27194:9;;:14;27190:180;;27245:9;;27234:21;;:6;;:21;:10;:21;:::i;:::-;27225:30;-1:-1:-1;27279:18:0;:6;27225:30;27279:18;:10;:18;:::i;:::-;27339:8;;27270:27;;-1:-1:-1;27309:48:0;;27325:4;;27339:8;;27350:6;27309:15;:48::i;:::-;27385:6;;:11;27381:206;;27412:14;27429:18;27440:6;;27429;:10;;:18;;;;:::i;:::-;27462:6;:16;;;;;;27412:35;-1:-1:-1;27501:18:0;:6;27412:35;27501:18;:10;:18;:::i;:::-;27492:27;;27531:44;27547:4;27561;27568:6;27531:15;:44::i;:::-;27381:206;;27608:33;27624:4;27630:2;27634:6;27608:15;:33::i;:::-;27108:626;;;27686:33;27702:4;27708:2;27712:6;27686:15;:33::i;5968:192::-;6054:7;6090:12;6082:6;;;;6074:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;6074:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6126:5:0;;;5968:192::o;5039:181::-;5097:7;5129:5;;;5153:6;;;;5145:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33955:170;34050:19;;;;34046:1;34050:19;;;:10;:19;;;;;;34023:55;;34050:19;34071:6;34023:14;:55::i;:::-;34089:28;34101:7;34110:6;34089:11;:28::i;34133:170::-;34216:19;;;;;;;;:10;:19;;;;;;34201:55;;34216:19;;34249:6;34201:14;:55::i;:::-;34267:28;34279:7;34288:6;34267:11;:28::i;23840:154::-;23908:32;:16;23932:7;23908:32;:23;:32;:::i;:::-;23956:30;;;;;;;;;;;23840:154;:::o;6411:471::-;6469:7;6714:6;6710:47;;-1:-1:-1;6744:1:0;6737:8;;6710:47;6781:5;;;6785:1;6781;:5;:1;6805:5;;;;;:10;6797:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7350:132;7408:7;7435:39;7439:1;7442;7435:39;;;;;;;;;;;;;;;;;:3;:39::i;40505:449::-;40622:21;;;;40596:23;40622:21;;;:10;:21;;;;;;;;;;40681:20;40633:9;40681;:20::i;:::-;40768:21;;;;;;;;:10;:21;;;;;;:33;;;;;;;;;;;;;40819:54;;40654:47;;-1:-1:-1;40768:33:0;40819:54;;;;;;40768:21;40819:54;40886:60;40901:15;40918:9;40929:16;40886:14;:60::i;23686:146::-;23751:29;:16;23772:7;23751:29;:20;:29;:::i;:::-;23796:28;;;;;;;;;;;23686:146;:::o;17780:232::-;17852:22;17858:7;17867:6;17852:5;:22::i;:::-;17885:119;17894:7;17903:12;:10;:12::i;:::-;17917:86;17956:6;17917:86;;;;;;;;;;;;;;;;;:20;;;;;;;:11;:20;;;;;;17938:12;:10;:12::i;28534:368::-;28713:17;;28682:67;;28706:4;;28713:17;;28732:16;28682:15;:67::i;:::-;28783:17;;;;;;;;;;;28764:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28764:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28831:1:0;28823:6;:9;-1:-1:-1;;28852:42:0;;;;;;;;;;;;;;;;;28534:368;:::o;28910:452::-;28999:17;;29026:19;;28993:63;;;;;;28999:17;29026:19;;;28993:63;;;;;;;;;;;;28966:14;;28999:17;;;;;28993:32;;:63;;;;;;;;;;;;;;;28966:14;28999:17;28993:63;;;5:2:-1;;;;30:1;27;20:12;5:2;28993:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28993:63:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;29102:19:0;;29310:8;;29081:273;;;;;;29211:4;29081:273;;;;;;;;;;-1:-1:-1;29081:273:0;;;;;;;;;;;;29102:19;;29310:8;;;;;29081:273;;;;29338:15;29081:273;;;;;;29102:19;;;;;29081:103;;:273;;;;;28993:63;;29081:273;;;;;;;;;29102:19;29081:273;;;5:2:-1;;;;30:1;27;20:12;5:2;29081:273:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29081:273:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29081:273:0;;28910:452;-1:-1:-1;;28910:452:0:o;18753:122::-;18810:21;:8;18823:7;18810:21;:12;:21;:::i;:::-;18847:20;;;;;;;;;;;18753:122;:::o;18883:130::-;18943:24;:8;18959:7;18943:24;:15;:24;:::i;:::-;18983:22;;;;;;;;;;;18883:130;:::o;20733:203::-;20805:4;20830:21;;;20822:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20908:20:0;;:11;:20;;;;;;;;;;;;;;;20733:203::o;42809:153::-;42919:9;42809:153;:::o;5495:136::-;5553:7;5580:43;5584:1;5587;5580:43;;;;;;;;;;;;;;;;;:3;:43::i;33758:189::-;33854:16;;;;;;;;:10;:16;;;;;;;33872:14;;;;;;;;33839:56;;33854:16;;;;33872:14;33888:6;33839:14;:56::i;:::-;33906:33;33922:4;33928:2;33932:6;33906:15;:33::i;40962:947::-;41068:6;41058:16;;:6;:16;;;;:30;;;;;41087:1;41078:6;:10;41058:30;41054:848;;;41109:20;;;;41105:385;;41217:22;;;41198:16;41217:22;;;:14;:22;;;;;;;;;41278:13;:60;;41337:1;41278:60;;;41294:19;;;;;;;:11;:19;;;;;;;;:34;41314:13;;;41294:34;;;;;;;;41326:1;41294:40;;41278:60;41258:80;-1:-1:-1;41357:17:0;41377:21;41258:80;41391:6;41377:21;:13;:21;:::i;:::-;41357:41;;41417:57;41434:6;41442:9;41453;41464;41417:16;:57::i;:::-;41105:385;;;;41510:20;;;;41506:385;;41618:22;;;41599:16;41618:22;;;:14;:22;;;;;;;;;41679:13;:60;;41738:1;41679:60;;;41695:19;;;;;;;:11;:19;;;;;;;;:34;41715:13;;;41695:34;;;;;;;;41727:1;41695:40;;41679:60;41659:80;-1:-1:-1;41758:17:0;41778:21;41659:80;41792:6;41778:21;:13;:21;:::i;:::-;41758:41;;41818:57;41835:6;41843:9;41854;41865;41818:16;:57::i;15828:308::-;15904:21;;;15896:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15989:12;;:24;;16006:6;15989:24;:16;:24;:::i;:::-;15974:12;:39;16045:18;;;:9;:18;;;;;;;;;;;:30;;16068:6;16045:30;:22;:30;:::i;:::-;16024:18;;;:9;:18;;;;;;;;;;;:51;;;;16091:37;;;;;;;16024:18;;:9;;16091:37;;;;;;;;;;15828:308;;:::o;16468:348::-;16544:21;;;16536:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16637:68;16660:6;16637:68;;;;;;;;;;;;;;;;;:18;;;:9;:18;;;;;;;;;;;;:68;;:22;:68;:::i;:::-;16616:18;;;:9;:18;;;;;;;;;;:89;16731:12;;:24;;16748:6;16731:24;:16;:24;:::i;:::-;16716:12;:39;16771:37;;;;;;;;16797:1;;16771:37;;;;;;;;;;;;;16468:348;;:::o;20455:183::-;20535:18;20539:4;20545:7;20535:3;:18::i;:::-;20527:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20602:20;;20625:5;20602:20;;;;;;;;;;;:28;;;;;;20455:183::o;8012:345::-;8098:7;8200:12;8193:5;8185:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;8185:28:0;;8224:9;8240:1;8236;:5;;;;;;;8012:345;-1:-1:-1;;;;;8012:345:0:o;20197:178::-;20275:18;20279:4;20285:7;20275:3;:18::i;:::-;20274:19;20266:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20340:20;;:11;:20;;;;;;;;;;;:27;;;;20363:4;20340:27;;;20197:178::o;15076:471::-;15174:20;;;15166:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15255:23;;;15247:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15351;15373:6;15351:71;;;;;;;;;;;;;;;;;:17;;;:9;:17;;;;;;;;;;;;:71;;:21;:71;:::i;:::-;15331:17;;;;:9;:17;;;;;;;;;;;:91;;;;15456:20;;;;;;;:32;;15481:6;15456:32;:24;:32;:::i;:::-;15433:20;;;;:9;:20;;;;;;;;;;;;:55;;;;15504:35;;;;;;;15433:20;;15504:35;;;;;;;;;;;;;15076:471;;;:::o;41917:715::-;42096:18;42117:87;42124:12;42117:87;;;;;;;;;;;;;;;;;:6;:87::i;:::-;42096:108;;42236:1;42221:12;:16;;;:85;;;;-1:-1:-1;42241:22:0;;;;;;;:11;:22;;;;;;;;:65;42264:16;;;42241:40;;;;;;;;;:50;:65;;;:50;;:65;42221:85;42217:339;;;42323:22;;;;;;;:11;:22;;;;;;;;:40;42346:16;;;42323:40;;;;;;;;42361:1;42323:46;:57;;;42217:339;;;42452:33;;;;;;;;;;;;;;;;;;;;;42413:22;;;-1:-1:-1;42413:22:0;;;:11;:22;;;;;:36;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;42500:25;;;:14;:25;;;;;;:44;;42528:16;;;42500:44;;;;;;;;;;42217:339;42573:51;;;;;;;;;;;;;;;;;;;;;;;;;;41917:715;;;;;:::o;42640:161::-;42715:6;42753:12;42746:5;42742:9;;42734:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;42734:32:0;-1:-1:-1;42791:1:0;;42640:161;-1:-1:-1;;42640:161:0:o;44764:5354::-;;;;;;;;;;-1:-1:-1;44764:5354:0;;;;;;;;:::o

Swarm Source

bzzr://7984227f9438c4f4a84a0e19653b89f1d36f172e2daa5a0ed4b04065b502c6dd
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.