Contract 0xf6488205957f0b4497053d6422F49e27944eE3Dd 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xb0ea7c04391f9c585787b82906f8406f90f01fcc08499aa4b8f7a3ebf94717acApprove131415672021-12-02 21:47:203 hrs 37 mins ago0xbb524b14201f24eaf45b99e29c7aeb8f7f9db1ab IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.00007287
0xcb3f8765998681d584447c70f2a3eba52818b6a3d7a85f6d8b4683b7d4aae0f2Leave131378842021-12-02 18:42:526 hrs 41 mins ago0x242f451fee53e5b69d6693192b02614a03b1fa2e IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000679925
0xc4854be3d58c7282709515e4a8bef2529e494bbb4edceb160d92059c588d975dLeave131058372021-12-01 14:56:591 day 10 hrs ago0x9454f17a6bcc36cfbc8a07011b33dafcebe4050b IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000679985
0xed43725d5cabd02c0de9095ca72631b2a0a4930ba6efbbc952ba05113a3f65d5Leave130942432021-12-01 4:02:411 day 21 hrs ago0xabebdb7d35f38d519d1c3ed72d3975424f420417 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.001089081
0xf98ab4bd7e02519f471b4ac8c6e3aa93d6704d08839ec7e4ffae99a391a715d2Leave130831492021-11-30 18:27:442 days 6 hrs ago0x9ab8065a7b8480662ae2d9f9aa94be383540de0b IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000679985
0x539315248303ed5fa4dc3b8c9b3d57bcf4163d510420d9001bb705bfdba56f51Approve130664102021-11-30 3:30:592 days 21 hrs ago0x79968af9d8e4cabc7d860c9fc0c3933d3cce24c5 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.00022266
0xb88564d3e7b684d9bdcae22f902a638660894ac3981df16464763d58cc1ad804Approve130114912021-11-28 1:40:174 days 23 hrs ago0x7f75e3681506575e2e5338c6e3e78c9fad53b136 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000102018
0x9e3bdb425373272ad4d1e6c51e9c9bac2f3c61f614ae763596058da937568146Leave130057962021-11-27 20:38:125 days 4 hrs ago0x0282e055d3b2f7c0ad656952ac1bb989fb6d0086 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000530105
0x5a204b5eef2558385d83915901c25aee9ac90e0509add2ae1f72cab0cfafdc48Leave129749912021-11-26 16:58:066 days 8 hrs ago0x489b9fbd86cf528c3ecfecea22758e59d2b7a7d9 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000530045
0xf8d05e03970759e24809c7f394be137d73c3c2261f19f8fce7e21304ac86fe8dApprove129675492021-11-26 10:11:176 days 15 hrs ago0x171c80464aaf154ac5ab79fb58007f754a9bac9f IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.00012666
0xb510cb82c1ea31b3bf8d34c9ac1d4ea39b5f156954f029eb516757aa4292f642Approve129675392021-11-26 10:10:476 days 15 hrs ago0x171c80464aaf154ac5ab79fb58007f754a9bac9f IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.00022266
0x4741dc148092bef8dfa0fb0ddace544ffad9e61899b22160e34802f87145b1c0Approve129522042021-11-25 19:27:497 days 5 hrs ago0x7db218a9fdb81c7375b81d1b391a9df62c685022 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.00007287
0x62b77dfb1762a80bd5910b4777fc14373cfb9987d2e89f5771f3c8d71701c549Enter129512002021-11-25 18:33:567 days 6 hrs ago0x2dcf3613f8b28c8ac645f58bd1d8ee1c539306a0 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000471505
0x8b4b727718750c4eb9abad0f1382d197a65c5711b148612b6df2312b0b3ba0a5Approve129194012021-11-24 14:13:418 days 11 hrs ago0x0724c22ebe7a6784cbebd828e8f97427aafb70c6 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000174636
0x4b66ec572b4fb908144f4c1414db127e94dcc4f30ab33948b487317888bb59ffApprove129193692021-11-24 14:12:058 days 11 hrs ago0x0724c22ebe7a6784cbebd828e8f97427aafb70c6 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000102018
0xb77dd816449fb0661f619431600a5e9c0c2fadb472535dfba21a43e5213bc0fbApprove128634312021-11-22 13:39:5210 days 11 hrs ago0x8a0291360071e6f90745483848cd42826bcd62c4 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000267192
0x8b68a0447f3449ca4a13c7073ab515a510c0814a92205f656e46c78c64b4039aLeave128463722021-11-21 23:09:0011 days 2 hrs ago0x424bc167d5d2aec4d7a3b96e63bd0a5319049068 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000680045
0xbb9d5b8ac90cf534206aae524c8e25a0e0442b1dd473f56000df51e1139161e4Leave128417902021-11-21 19:18:2011 days 6 hrs ago0xcc06c448063774db4e8eb33e433e5904782ad80e IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000680045
0xc783a9d15d64a83a54cb65a7c887c4e17a15725fc615c2db9db81eebfc56e32dLeave128402492021-11-21 18:00:2911 days 7 hrs ago0xa1b342ef9cf077407c261d59bb481df0b92d5b54 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000679925
0x1b8bc00932add76060eb7b80a09b99d5c453b6fa3a73b6eb8147d66821fe12ecApprove127952352021-11-20 3:20:3912 days 22 hrs ago0xb41c42616ccfaf914daec660f0151eb4bc6c00fb IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.00007284
0x2e1168074bc2e152eeefed40b21c6fae25b52aa8c71899ac12929ff63c5d825cLeave127695472021-11-19 4:48:0713 days 20 hrs ago0x5f73913bebbe9658aa411084c0ef760332b98692 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000605045
0x2bbf43709cabd924892864cd62cb59b0c84f9157c47e2b40660128a844fe79e7Leave127583992021-11-18 19:15:4514 days 6 hrs ago0xa78761c5be334ae68a1afc518dc154e74b28170f IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000816054
0x023818f1de917fefa6890a34413a1697c3d8e34adc5cf1679d5d55f02760b21fLeave127446552021-11-18 7:11:5714 days 18 hrs ago0xe19d8dbe945e3d039c735d759525cc875e06b1b3 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000529985
0xac00385630cc60f8ff0f8946ec0d32484ddfd78520929124e64f145d9226aab7Enter127196952021-11-17 9:24:0415 days 16 hrs ago0xe19d8dbe945e3d039c735d759525cc875e06b1b3 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000546385
0x1f8dbf5415fd510cb91cfe863e7b8a3aeb4c7dcfedad719237a255822a6d1791Leave127163742021-11-17 6:23:1515 days 19 hrs ago0xd5bacec697f1597ad132304d981a93b9681f8df7 IN  0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB0.000605045
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xbd98b00457424c786616226ddcc9f287f74a76aebbbc3d80c9d320f9f556ffa354710252021-03-07 11:44:12270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0xbd98b00457424c786616226ddcc9f287f74a76aebbbc3d80c9d320f9f556ffa354710252021-03-07 11:44:12270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0x509ce95bad6ccf31a14cbc19ac2e5b93444ea6fc191c02d0388dd577ef70034554710152021-03-07 11:43:42270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x509ce95bad6ccf31a14cbc19ac2e5b93444ea6fc191c02d0388dd577ef70034554710152021-03-07 11:43:42270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x772480bbd584c3e85310365bad3ebf56b034583db82b52159de2283127a4255654710062021-03-07 11:43:15270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0x772480bbd584c3e85310365bad3ebf56b034583db82b52159de2283127a4255654710062021-03-07 11:43:15270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0xa2cee544f5be103d610059e8069cfddb0b52a5e0201c66896ba2edb1b226348a54708922021-03-07 11:37:33270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0xa2cee544f5be103d610059e8069cfddb0b52a5e0201c66896ba2edb1b226348a54708922021-03-07 11:37:33270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0xd789ab519e605392a001409a9109e77c8914ab516740138432510159565d2ea554708632021-03-07 11:36:06270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0xd789ab519e605392a001409a9109e77c8914ab516740138432510159565d2ea554708632021-03-07 11:36:06270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0x07285b7258d71a9efc36097de94628c03e6057417b4c23f6d9fa7a7acdbd7ef454708612021-03-07 11:36:00270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x07285b7258d71a9efc36097de94628c03e6057417b4c23f6d9fa7a7acdbd7ef454708612021-03-07 11:36:00270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x8dd4b7c5a38c35ce2bffa305c24d6bc0fc3736e6a064219ec87a19a7e464644454708482021-03-07 11:35:21270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x8dd4b7c5a38c35ce2bffa305c24d6bc0fc3736e6a064219ec87a19a7e464644454708482021-03-07 11:35:21270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x317ee236b9090ece3463bf06bb0e6e6aaed9f523ca92c41c151a33c25b9d4e0454708252021-03-07 11:34:12270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0x317ee236b9090ece3463bf06bb0e6e6aaed9f523ca92c41c151a33c25b9d4e0454708252021-03-07 11:34:12270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0xf41872944f01ff6d9e9930255d9680adf582cc4227fe6d642528702bda833e4254707882021-03-07 11:32:21270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0xf41872944f01ff6d9e9930255d9680adf582cc4227fe6d642528702bda833e4254707882021-03-07 11:32:21270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0xf41872944f01ff6d9e9930255d9680adf582cc4227fe6d642528702bda833e4254707882021-03-07 11:32:21270 days 13 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x9c40cba345e44c5f87bcbd0c80d7a56613bc60d13bf0e2cd48613c89bbb2a4d454706302021-03-07 11:24:27270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0x9c40cba345e44c5f87bcbd0c80d7a56613bc60d13bf0e2cd48613c89bbb2a4d454706302021-03-07 11:24:27270 days 13 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
0x4aaee5725dda847413b22b4036cd48e88c4100fc37d1d2ac9f24718615a375da54696022021-03-07 10:33:03270 days 14 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x4aaee5725dda847413b22b4036cd48e88c4100fc37d1d2ac9f24718615a375da54696022021-03-07 10:33:03270 days 14 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0x4aaee5725dda847413b22b4036cd48e88c4100fc37d1d2ac9f24718615a375da54696022021-03-07 10:33:03270 days 14 hrs ago 0xf6488205957f0b4497053d6422f49e27944ee3dd Jet Fuel: FUEL Token0 BNB
0xde00edcef232e039af6e3a37c58c1712a03d6528f170be57f010b8e07ecd872e54695732021-03-07 10:31:36270 days 14 hrs ago 0x86f4bc1ebf2c209d12d3587b7085aea5707d4b56 0xf6488205957f0b4497053d6422f49e27944ee3dd0 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JetBar

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2020-12-12
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.6.6;

/*
 * @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 {}

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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), 'Ownable: new owner is the zero address');
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IBEP20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the token decimals.
     */
    function decimals() external view returns (uint8);

    /**
     * @dev Returns the token symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the token name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external view returns (address);

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

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

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, 'Address: low-level call with value failed');
    }

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

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

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

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

/**
 * @dev Implementation of the {IBEP20} 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 {BEP20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-BEP20-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 BEP20 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 {IBEP20-approve}.
 */
contract BEP20 is Context, IBEP20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;
    uint256 private _burntSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _burntSupply = 0;
        _decimals = 18;
    }

    /**
     * @dev Returns the bep token owner.
     */
    function getOwner() external override view returns (address) {
        return owner();
    }

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

    /**
     * @dev Returns the token decimals.
     */
    function decimals() public override view returns (uint8) {
        return _decimals;
    }

    /**
     * @dev Returns the token symbol.
     */
    function symbol() public override view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {BEP20-totalSupply}.
     */
    function totalSupply() public override view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {BEP20-burnedSupply}.
     */
     function burntFuel() public view returns (uint256) {
       return _burntSupply;
     }

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

    /**
     * @dev See {BEP20-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 virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    /**
     * @dev See {BEP20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {BEP20};
     *
     * 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 override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(amount, 'BEP20: 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 {BEP20-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 {BEP20-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, 'BEP20: 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 virtual {
        require(sender != address(0), 'BEP20: transfer from the zero address');
        require(recipient != address(0), 'BEP20: transfer to the zero address');

        _balances[sender] = _balances[sender].sub(amount, 'BEP20: 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), 'BEP20: 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), 'BEP20: burn from the zero address');

        _balances[account] = _balances[account].sub(amount, 'BEP20: burn amount exceeds balance');
        _totalSupply = _totalSupply.sub(amount);
        _burntSupply = _burntSupply.add(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), 'BEP20: approve from the zero address');
        require(spender != address(0), 'BEP20: 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, 'BEP20: burn amount exceeds allowance')
        );
    }
}

contract FuelToken is BEP20('Fuel Token', 'Fuel') {

    // fuel reserve
    address public hangerReserve;

    constructor (address _hangerReserve) public {
        hangerReserve = _hangerReserve;
    }

    /// @dev Creates `_amount` token to `_to`. Must only be called by the owner.
    function mintTo(address _to, uint256 _amount) public onlyOwner {
        _mint(_to, _amount);
        _moveDelegates(address(0), _delegates[_to], _amount);
    }

    //@dev overrides transfer function to meet tokenomics of FUEL - burn rate + fuel for hanger
    function _transfer(address sender, address recipient, uint256 amount)
        internal
        virtual
        override{
          uint256 rateAmount = 1;
          uint256 burnAmount = amount.mul(rateAmount).div(100); // 1% of every transfer burnt
          uint256 hanger = burnAmount; // 1% of every transfer sent to hanger
          uint256 sendAmount = amount.sub(burnAmount.add(hanger)); // 98% of transfer sent to recipient
          require(amount == sendAmount + burnAmount + hanger, "Burn value invalid");
          super._burn(sender, burnAmount);
          super._transfer(sender, hangerReserve, hanger);
          super._transfer(sender, recipient, sendAmount);
          amount = sendAmount;
    }

    // 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

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

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

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

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

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

    /// @dev 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)'
    );

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

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

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

    /**
     * @dev 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];
    }

    /**
     * @dev 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);
    }

    /**
     * @dev 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,
        uint256 nonce,
        uint256 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), 'FUEL::delegateBySig: invalid signature');
        require(nonce == nonces[signatory]++, 'FUEL::delegateBySig: invalid nonce');
        require(now <= expiry, 'FUEL::delegateBySig: signature expired');
        return _delegate(signatory, delegatee);
    }

    /**
     * @dev 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;
    }

    /**
     * @dev 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, uint256 blockNumber) external view returns (uint256) {
        require(blockNumber < block.number, 'FUEL::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 FUEL (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);
            }
        }
    }

    /**
     * @dev Changes hanger reserve address- only be owner
     */
    function changeHanger(address hangerNewAddress) public onlyOwner {
        hangerReserve = hangerNewAddress;
    }


    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    ) internal {
        uint32 blockNumber = safe32(block.number, 'FUEL::_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(uint256 n, string memory errorMessage) internal pure returns (uint32) {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

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

contract JetBar is BEP20('JetBar', 'JETS') {
    
    // The FUEL token 
    FuelToken public fuel;
    // Devs address.
    address public devAddr;

    constructor(
        FuelToken _fuel,
        address _devAddr
    ) public {
        fuel = _fuel;
        devAddr = _devAddr;
    }

    // Safe fuel transfer function, just in case if rounding error causes pool to not have enough FUEL
    function safeFuelTransfer(address _to, uint256 _amount) public onlyOwner {
        uint256 fuelBal = fuel.balanceOf(address(this));
        if (_amount > fuelBal) {
            fuel.transfer(_to, fuelBal);
        } else {
            fuel.transfer(_to, _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;
    }
    
    // @keep track of players blockNumber on entry
    mapping (address => uint256) public entryBlock;

    /// @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), "FUEL::delegateBySig: invalid signature");
        require(nonce == nonces[signatory]++, "FUEL::delegateBySig: invalid nonce");
        require(now <= expiry, "FUEL::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, "FUEL::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 Fuel (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, "FUEL::_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;
    }
    
    
    // Enter the staking pool. Stake some FUEL. Earn some extra fuel from hangerReserve, farming pools, and vaults.
    function enter(uint256 _amount) public {
        uint256 totalFuel = fuel.balanceOf(address(this));
        uint256 totalShares = totalSupply();
        
        uint256 totalMinusBurn = _amount.mul(98).div(100); // amount minus 2% burn. accounts fuel burn. *fix for v2
         
        if (totalShares == 0 || totalFuel == 0) {
            _mint(msg.sender, totalMinusBurn);
        } else {
            uint256 what = totalMinusBurn.mul(totalShares).div(totalFuel);
            _mint(msg.sender, what);
        }
        fuel.transferFrom(msg.sender, address(this), _amount);
    }
    
    // Leave the staking pool. Earn Fuel back 
    function leave(uint256 _share) public {
        uint256 totalShares = totalSupply();
        uint256 what = _share.mul(fuel.balanceOf(address(this))).div(totalShares);
        _burn(msg.sender, _share);
        uint256 fee = what.mul(25).div(1000); // 2.5% dev fee to sustain project 
        uint256 stakerAmount = what.sub(fee); // staker - dev fee
        fuel.transfer(devAddr, fee); 
        fuel.transfer(msg.sender, stakerAmount);
    }
    
    // Update dev address by the previous dev.
    function dev(address _devAddr) public {
        require(msg.sender == devAddr, 'you no fuel dev: wut?');
        devAddr = _devAddr;
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract FuelToken","name":"_fuel","type":"address"},{"internalType":"address","name":"_devAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burntFuel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_devAddr","type":"address"}],"name":"dev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"enter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entryBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fuel","outputs":[{"internalType":"contract FuelToken","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_share","type":"uint256"}],"name":"leave","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"safeFuelTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200425738038062004257833981810160405260408110156200003757600080fd5b8101908080519060200190929190805190602001909291905050506040518060400160405280600681526020017f4a657442617200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4a455453000000000000000000000000000000000000000000000000000000008152506000620000d06200025060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35081600590805190602001906200018692919062000258565b5080600690805190602001906200019f92919062000258565b5060006004819055506012600760006101000a81548160ff021916908360ff160217905550505081600760016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505062000307565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200029b57805160ff1916838001178555620002cc565b82800160010185558215620002cc579182015b82811115620002cb578251825591602001919060010190620002ae565b5b509050620002db9190620002df565b5090565b6200030491905b8082111562000300576000816000905550600101620002e6565b5090565b90565b613f4080620003176000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063782d6fe11161011a578063a9059cbb116100ad578063da09c72c1161007c578063da09c72c14610adf578063dd62ed3e14610b29578063e7a324dc14610ba1578063f1127ed814610bbf578063f2fde38b14610c3a576101fb565b8063a9059cbb1461095a578063b4b5ea57146109c0578063c3cda52014610a18578063d44a650f14610a91576101fb565b80638da5cb5b116100e95780638da5cb5b146107f957806395d89b4114610843578063a457c2d7146108c6578063a59f3e0c1461092c576101fb565b8063782d6fe1146106b15780637ecebe0014610713578063893d20e81461076b5780638d88a90e146107b5576101fb565b80634bab58b7116101925780636fcfff45116101615780636fcfff45146105cd57806370a0823114610631578063715018a61461068957806377c97fa514610693576101fb565b80634bab58b71461047f578063587cde1e146104d75780635c19a95c1461055b57806367dfd4c91461059f576101fb565b806323b872dd116101ce57806323b872dd14610325578063279bad16146103ab578063313ce567146103f55780633950935114610419576101fb565b806306fdde0314610200578063095ea7b31461028357806318160ddd146102e957806320606b7014610307575b600080fd5b610208610c7e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561024857808201518184015260208101905061022d565b50505050905090810190601f1680156102755780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102cf6004803603604081101561029957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d20565b604051808215151515815260200191505060405180910390f35b6102f1610d3e565b6040518082815260200191505060405180910390f35b61030f610d48565b6040518082815260200191505060405180910390f35b6103916004803603606081101561033b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d64565b604051808215151515815260200191505060405180910390f35b6103b3610e3d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103fd610e63565b604051808260ff1660ff16815260200191505060405180910390f35b6104656004803603604081101561042f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610e7a565b604051808215151515815260200191505060405180910390f35b6104c16004803603602081101561049557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f2d565b6040518082815260200191505060405180910390f35b610519600480360360208110156104ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f45565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61059d6004803603602081101561057157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fae565b005b6105cb600480360360208110156105b557600080fd5b8101908080359060200190929190505050610fbb565b005b61060f600480360360208110156105e357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611309565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b6106736004803603602081101561064757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061132c565b6040518082815260200191505060405180910390f35b610691611375565b005b61069b6114fd565b6040518082815260200191505060405180910390f35b6106fd600480360360408110156106c757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611507565b6040518082815260200191505060405180910390f35b6107556004803603602081101561072957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118cc565b6040518082815260200191505060405180910390f35b6107736118e4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107f7600480360360208110156107cb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506118f3565b005b6108016119fa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61084b611a23565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088b578082015181840152602081019050610870565b50505050905090810190601f1680156108b85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610912600480360360408110156108dc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ac5565b604051808215151515815260200191505060405180910390f35b6109586004803603602081101561094257600080fd5b8101908080359060200190929190505050611b92565b005b6109a66004803603604081101561097057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e1e565b604051808215151515815260200191505060405180910390f35b610a02600480360360208110156109d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e3c565b6040518082815260200191505060405180910390f35b610a8f600480360360c0811015610a2e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050611f12565b005b610add60048036036040811015610aa757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612295565b005b610ae7612619565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b8b60048036036040811015610b3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061263f565b6040518082815260200191505060405180910390f35b610ba96126c6565b6040518082815260200191505060405180910390f35b610c1160048036036040811015610bd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff1690602001909291905050506126e2565b604051808363ffffffff1663ffffffff1681526020018281526020019250505060405180910390f35b610c7c60048036036020811015610c5057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612723565b005b606060058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d165780601f10610ceb57610100808354040283529160200191610d16565b820191906000526020600020905b815481529060010190602001808311610cf957829003601f168201915b5050505050905090565b6000610d34610d2d6127f8565b8484612800565b6001905092915050565b6000600354905090565b6040518080613d51604391396043019050604051809103902081565b6000610d718484846129f7565b610e3284610d7d6127f8565b610e2d85604051806060016040528060288152602001613cdd60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610de36127f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb19092919063ffffffff16565b612800565b600190509392505050565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600760009054906101000a900460ff16905090565b6000610f23610e876127f8565b84610f1e8560026000610e986127f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7190919063ffffffff16565b612800565b6001905092915050565b600a6020528060005260406000206000915090505481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610fb83382612df9565b50565b6000610fc5610d3e565b905060006110c7826110b9600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561106f57600080fd5b505afa158015611083573d6000803e3d6000fd5b505050506040513d602081101561109957600080fd5b810190808051906020019092919050505086612f6a90919063ffffffff16565b612ff090919063ffffffff16565b90506110d3338461303a565b60006110fd6103e86110ef601985612f6a90919063ffffffff16565b612ff090919063ffffffff16565b90506000611114828461320f90919063ffffffff16565b9050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111e157600080fd5b505af11580156111f5573d6000803e3d6000fd5b505050506040513d602081101561120b57600080fd5b810190808051906020019092919050505050600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156112c657600080fd5b505af11580156112da573d6000803e3d6000fd5b505050506040513d60208110156112f057600080fd5b8101908080519060200190929190505050505050505050565b600c6020528060005260406000206000915054906101000a900463ffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61137d6127f8565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600454905090565b6000438210611561576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526027815260200180613e666027913960400191505060405180910390fd5b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1614156115ce5760009150506118c6565b82600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16116116b857600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101549150506118c6565b82600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008063ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff1611156117395760009150506118c6565b600080905060006001830390505b8163ffffffff168163ffffffff161115611860576000600283830363ffffffff168161176f57fe5b048203905061177c613c19565b600b60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001600182015481525050905086816000015163ffffffff161415611838578060200151955050505050506118c6565b86816000015163ffffffff16101561185257819350611859565b6001820392505b5050611747565b600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008363ffffffff1663ffffffff1681526020019081526020016000206001015493505050505b92915050565b600d6020528060005260406000206000915090505481565b60006118ee6119fa565b905090565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f796f75206e6f206675656c206465763a207775743f000000000000000000000081525060200191505060405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611abb5780601f10611a9057610100808354040283529160200191611abb565b820191906000526020600020905b815481529060010190602001808311611a9e57829003601f168201915b5050505050905090565b6000611b88611ad26127f8565b84611b8385604051806060016040528060258152602001613e206025913960026000611afc6127f8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb19092919063ffffffff16565b612800565b6001905092915050565b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c3357600080fd5b505afa158015611c47573d6000803e3d6000fd5b505050506040513d6020811015611c5d57600080fd5b810190808051906020019092919050505090506000611c7a610d3e565b90506000611ca56064611c97606287612f6a90919063ffffffff16565b612ff090919063ffffffff16565b90506000821480611cb65750600083145b15611cca57611cc53382613259565b611cff565b6000611cf184611ce38585612f6a90919063ffffffff16565b612ff090919063ffffffff16565b9050611cfd3382613259565b505b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ddc57600080fd5b505af1158015611df0573d6000803e3d6000fd5b505050506040513d6020811015611e0657600080fd5b81019080805190602001909291905050505050505050565b6000611e32611e2b6127f8565b84846129f7565b6001905092915050565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff16905060008163ffffffff1611611ea6576000611f0a565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001830363ffffffff1663ffffffff168152602001908152602001600020600101545b915050919050565b60006040518080613d516043913960430190506040518091039020611f35610c7e565b80519060200120611f44613416565b30604051602001808581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200194505050505060405160208183030381529060405280519060200120905060006040518080613eaf603a9139603a0190506040518091039020888888604051602001808581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018381526020018281526020019450505050506040516020818303038152906040528051906020012090506000828260405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156120ef573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613d2b6026913960400191505060405180910390fd5b600d60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558914612226576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ddb6022913960400191505060405180910390fd5b8742111561227f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613d056026913960400191505060405180910390fd5b612289818b612df9565b50505050505050505050565b61229d6127f8565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461235e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123ff57600080fd5b505afa158015612413573d6000803e3d6000fd5b505050506040513d602081101561242957600080fd5b810190808051906020019092919050505090508082111561252e57600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124ed57600080fd5b505af1158015612501573d6000803e3d6000fd5b505050506040513d602081101561251757600080fd5b810190808051906020019092919050505050612614565b600760019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156125d757600080fd5b505af11580156125eb573d6000803e3d6000fd5b505050506040513d602081101561260157600080fd5b8101908080519060200190929190505050505b505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6040518080613eaf603a9139603a019050604051809103902081565b600b602052816000526040600020602052806000526040600020600091509150508060000160009054906101000a900463ffffffff16908060010154905082565b61272b6127f8565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6127f581613423565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612886576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613c5f6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ee96022913960400191505060405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613c3a6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613dfd6023913960400191505060405180910390fd5b612b6f81604051806060016040528060268152602001613db560269139600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb19092919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c0481600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612d5e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d23578082015181840152602081019050612d08565b50505050905090810190601f168015612d505780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015612def576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000612e688461132c565b905082600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4612f64828483613567565b50505050565b600080831415612f7d5760009050612fea565b6000828402905082848281612f8e57fe5b0414612fe5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613d946021913960400191505060405180910390fd5b809150505b92915050565b600061303283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613804565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613e456021913960400191505060405180910390fd5b61312c81604051806060016040528060228152602001613e8d60229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cb19092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131848160035461320f90919063ffffffff16565b60038190555061319f81600454612d7190919063ffffffff16565b600481905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061325183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cb1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f42455032303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b61331181600354612d7190919063ffffffff16565b60038190555061336981600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d7190919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000804690508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156134a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c836026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156135a35750600081115b156137ff57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146136d3576000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116136465760006136aa565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b905060006136c1848361320f90919063ffffffff16565b90506136cf868484846138ca565b5050505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146137fe576000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900463ffffffff1690506000808263ffffffff16116137715760006137d5565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001840363ffffffff1663ffffffff168152602001908152602001600020600101545b905060006137ec8483612d7190919063ffffffff16565b90506137fa858484846138ca565b5050505b5b505050565b600080831182906138b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561387557808201518184015260208101905061385a565b50505050905090810190601f1680156138a25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816138bc57fe5b049050809150509392505050565b60006138ee43604051806060016040528060348152602001613ca960349139613b5e565b905060008463ffffffff1611801561398357508063ffffffff16600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060000160009054906101000a900463ffffffff1663ffffffff16145b156139f45781600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006001870363ffffffff1663ffffffff16815260200190815260200160002060010181905550613b01565b60405180604001604052808263ffffffff16815260200183815250600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008663ffffffff1663ffffffff16815260200190815260200160002060008201518160000160006101000a81548163ffffffff021916908363ffffffff1602179055506020820151816001015590505060018401600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548163ffffffff021916908363ffffffff1602179055505b8473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248484604051808381526020018281526020019250505060405180910390a25050505050565b600064010000000083108290613c0f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613bd4578082015181840152602081019050613bb9565b50505050905090810190601f168015613c015780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5082905092915050565b6040518060400160405280600063ffffffff16815260200160008152509056fe42455032303a207472616e736665722066726f6d20746865207a65726f206164647265737342455032303a20617070726f76652066726f6d20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734655454c3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d6265722065786365656473203332206269747342455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654655454c3a3a64656c656761746542795369673a207369676e617475726520657870697265644655454c3a3a64656c656761746542795369673a20696e76616c6964207369676e6174757265454950373132446f6d61696e28737472696e67206e616d652c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7742455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654655454c3a3a64656c656761746542795369673a20696e76616c6964206e6f6e636542455032303a207472616e7366657220746f20746865207a65726f206164647265737342455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f42455032303a206275726e2066726f6d20746865207a65726f20616464726573734655454c3a3a6765745072696f72566f7465733a206e6f74207965742064657465726d696e656442455032303a206275726e20616d6f756e7420657863656564732062616c616e636544656c65676174696f6e28616464726573732064656c6567617465652c75696e74323536206e6f6e63652c75696e74323536206578706972792942455032303a20617070726f766520746f20746865207a65726f2061646472657373a26469706673582212204624da6b53ebb50514904593dc51e930c85886a7640982fa5b0ad9096da9e49b64736f6c634300060600330000000000000000000000002090c8295769791ab7a3cf1cc6e0aa19f35e441a000000000000000000000000305b0ecf72634825f7231058444c65d885e1f327

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002090c8295769791ab7a3cf1cc6e0aa19f35e441a000000000000000000000000305b0ecf72634825f7231058444c65d885e1f327

-----Decoded View---------------
Arg [0] : _fuel (address): 0x2090c8295769791ab7a3cf1cc6e0aa19f35e441a
Arg [1] : _devAddr (address): 0x305b0ecf72634825f7231058444c65d885e1f327

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002090c8295769791ab7a3cf1cc6e0aa19f35e441a
Arg [1] : 000000000000000000000000305b0ecf72634825f7231058444c65d885e1f327


Deployed ByteCode Sourcemap

38735:10854:0:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38735:10854:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;21272:92:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;21272:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22922:161;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;22922:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21748:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40562:122;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23554:397;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;23554:397:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38815:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21431:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24359:210;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;24359:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;40172:46;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40172:46:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41545:149;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;41545:149:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;41838:104;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;41838:104:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;48928:451;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;48928:451:0;;;;;;;;;;;;;;;;;:::i;:::-;;40440:49;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40440:49:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22065:119;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;22065:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2786:140;;;:::i;:::-;;21914:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44441:1253;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;44441:1253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40976:39;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40976:39:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21115:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;49439:141;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;49439:141:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;2144:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21588:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;21588:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25071:311;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;25071:311:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;48271:597;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;48271:597:0;;;;;;;;;;;;;;;;;:::i;:::-;;22396:175;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;22396:175:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;43755:255;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;43755:255:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42376:1178;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;42376:1178:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39147:286;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;39147:286:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38865:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22633:143;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;22633:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40778:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40301:70;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;40301:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3081:109;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;3081:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;21272:92;21318:13;21351:5;21344:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21272:92;:::o;22922:161::-;22997:4;23014:39;23023:12;:10;:12::i;:::-;23037:7;23046:6;23014:8;:39::i;:::-;23071:4;23064:11;;22922:161;;;;:::o;21748:100::-;21801:7;21828:12;;21821:19;;21748:100;:::o;40562:122::-;40604:80;;;;;;;;;;;;;;;;;;;40562:122;:::o;23554:397::-;23686:4;23703:36;23713:6;23721:9;23732:6;23703:9;:36::i;:::-;23750:171;23773:6;23794:12;:10;:12::i;:::-;23821:89;23859:6;23821:89;;;;;;;;;;;;;;;;;:11;:19;23833:6;23821:19;;;;;;;;;;;;;;;:33;23841:12;:10;:12::i;:::-;23821:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23750:8;:171::i;:::-;23939:4;23932:11;;23554:397;;;;;:::o;38815:21::-;;;;;;;;;;;;;:::o;21431:92::-;21481:5;21506:9;;;;;;;;;;;21499:16;;21431:92;:::o;24359:210::-;24439:4;24456:83;24465:12;:10;:12::i;:::-;24479:7;24488:50;24527:10;24488:11;:25;24500:12;:10;:12::i;:::-;24488:25;;;;;;;;;;;;;;;:34;24514:7;24488:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;24456:8;:83::i;:::-;24557:4;24550:11;;24359:210;;;;:::o;40172:46::-;;;;;;;;;;;;;;;;;:::o;41545:149::-;41633:7;41665:10;:21;41676:9;41665:21;;;;;;;;;;;;;;;;;;;;;;;;;41658:28;;41545:149;;;:::o;41838:104::-;41902:32;41912:10;41924:9;41902;:32::i;:::-;41838:104;:::o;48928:451::-;48977:19;48999:13;:11;:13::i;:::-;48977:35;;49023:12;49038:58;49084:11;49038:41;49049:4;;;;;;;;;;;:14;;;49072:4;49049:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;49049:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49049:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;49049:29:0;;;;;;;;;;;;;;;;49038:6;:10;;:41;;;;:::i;:::-;:45;;:58;;;;:::i;:::-;49023:73;;49107:25;49113:10;49125:6;49107:5;:25::i;:::-;49143:11;49157:22;49174:4;49157:12;49166:2;49157:4;:8;;:12;;;;:::i;:::-;:16;;:22;;;;:::i;:::-;49143:36;;49226:20;49249:13;49258:3;49249:4;:8;;:13;;;;:::i;:::-;49226:36;;49293:4;;;;;;;;;;;:13;;;49307:7;;;;;;;;;;;49316:3;49293:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;49293:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49293:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;49293:27:0;;;;;;;;;;;;;;;;;49332:4;;;;;;;;;;;:13;;;49346:10;49358:12;49332:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;49332:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;49332:39:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;49332:39:0;;;;;;;;;;;;;;;;;48928:451;;;;;:::o;40440:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;22065:119::-;22131:7;22158:9;:18;22168:7;22158:18;;;;;;;;;;;;;;;;22151:25;;22065:119;;;:::o;2786:140::-;2366:12;:10;:12::i;:::-;2356:22;;:6;;;;;;;;;;;:22;;;2348:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2885:1:::1;2848:40;;2869:6;::::0;::::1;;;;;;;;;2848:40;;;;;;;;;;;;2916:1;2899:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2786:140::o:0;21914:89::-;21956:7;21982:12;;21975:19;;21914:89;:::o;44441:1253::-;44549:7;44596:12;44582:11;:26;44574:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44665:19;44687:14;:23;44702:7;44687:23;;;;;;;;;;;;;;;;;;;;;;;;;44665:45;;44741:1;44725:12;:17;;;44721:58;;;44766:1;44759:8;;;;;44721:58;44891:11;44839;:20;44851:7;44839:20;;;;;;;;;;;;;;;:38;44875:1;44860:12;:16;44839:38;;;;;;;;;;;;;;;:48;;;;;;;;;;;;:63;;;44835:147;;44926:11;:20;44938:7;44926:20;;;;;;;;;;;;;;;:38;44962:1;44947:12;:16;44926:38;;;;;;;;;;;;;;;:44;;;44919:51;;;;;44835:147;45079:11;45043;:20;45055:7;45043:20;;;;;;;;;;;;;;;:23;45064:1;45043:23;;;;;;;;;;;;;:33;;;;;;;;;;;;:47;;;45039:88;;;45114:1;45107:8;;;;;45039:88;45139:12;45154:1;45139:16;;45166:12;45196:1;45181:12;:16;45166:31;;45208:428;45223:5;45215:13;;:5;:13;;;45208:428;;;45245:13;45287:1;45278:5;45270;:13;45269:19;;;;;;;;45261:5;:27;45245:43;;45330:20;;:::i;:::-;45353:11;:20;45365:7;45353:20;;;;;;;;;;;;;;;:28;45374:6;45353:28;;;;;;;;;;;;;;;45330:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45416:11;45400:2;:12;;;:27;;;45396:229;;;45455:2;:8;;;45448:15;;;;;;;;;45396:229;45504:11;45489:2;:12;;;:26;;;45485:140;;;45544:6;45536:14;;45485:140;;;45608:1;45599:6;:10;45591:18;;45485:140;45208:428;;;;;45653:11;:20;45665:7;45653:20;;;;;;;;;;;;;;;:27;45674:5;45653:27;;;;;;;;;;;;;;;:33;;;45646:40;;;;;44441:1253;;;;;:::o;40976:39::-;;;;;;;;;;;;;;;;;:::o;21115:94::-;21167:7;21194;:5;:7::i;:::-;21187:14;;21115:94;:::o;49439:141::-;49510:7;;;;;;;;;;;49496:21;;:10;:21;;;49488:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49564:8;49554:7;;:18;;;;;;;;;;;;;;;;;;49439:141;:::o;2144:79::-;2182:7;2209:6;;;;;;;;;;;2202:13;;2144:79;:::o;21588:96::-;21636:13;21669:7;21662:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21588:96;:::o;25071:311::-;25156:4;25173:179;25196:12;:10;:12::i;:::-;25223:7;25245:96;25284:15;25245:96;;;;;;;;;;;;;;;;;:11;:25;25257:12;:10;:12::i;:::-;25245:25;;;;;;;;;;;;;;;:34;25271:7;25245:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;25173:8;:179::i;:::-;25370:4;25363:11;;25071:311;;;;:::o;48271:597::-;48321:17;48341:4;;;;;;;;;;;:14;;;48364:4;48341:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48341:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48341:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;48341:29:0;;;;;;;;;;;;;;;;48321:49;;48381:19;48403:13;:11;:13::i;:::-;48381:35;;48437:22;48462:24;48482:3;48462:15;48474:2;48462:7;:11;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;48437:49;;48584:1;48569:11;:16;:34;;;;48602:1;48589:9;:14;48569:34;48565:232;;;48620:33;48626:10;48638:14;48620:5;:33::i;:::-;48565:232;;;48686:12;48701:46;48737:9;48701:31;48720:11;48701:14;:18;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;48686:61;;48762:23;48768:10;48780:4;48762:5;:23::i;:::-;48565:232;;48807:4;;;;;;;;;;;:17;;;48825:10;48845:4;48852:7;48807:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;48807:53:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48807:53:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;48807:53:0;;;;;;;;;;;;;;;;;48271:597;;;;:::o;22396:175::-;22482:4;22499:42;22509:12;:10;:12::i;:::-;22523:9;22534:6;22499:9;:42::i;:::-;22559:4;22552:11;;22396:175;;;;:::o;43755:255::-;43847:7;43872:19;43894:14;:23;43909:7;43894:23;;;;;;;;;;;;;;;;;;;;;;;;;43872:45;;43950:1;43935:12;:16;;;:67;;44001:1;43935:67;;;43954:11;:20;43966:7;43954:20;;;;;;;;;;;;;;;:38;43990:1;43975:12;:16;43954:38;;;;;;;;;;;;;;;:44;;;43935:67;43928:74;;;43755:255;;;:::o;42376:1178::-;42569:23;40604:80;;;;;;;;;;;;;;;;;;;42698:6;:4;:6::i;:::-;42682:24;;;;;;42725:12;:10;:12::i;:::-;42764:4;42619:165;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42619:165:0;;;42595:200;;;;;;42569:226;;42808:18;40824:71;;;;;;;;;;;;;;;;;;;42920:9;42948:5;42972:6;42853:140;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;42853:140:0;;;42829:175;;;;;;42808:196;;43017:14;43122:15;43156:10;43058:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;43058:123:0;;;43034:158;;;;;;43017:175;;43205:17;43225:26;43235:6;43243:1;43246;43249;43225:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43225:26:0;;;;;;;;43205:46;;43291:1;43270:23;;:9;:23;;;;43262:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43364:6;:17;43371:9;43364:17;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;43355:5;:28;43347:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43448:6;43441:3;:13;;43433:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43515:31;43525:9;43536;43515;:31::i;:::-;43508:38;;;;42376:1178;;;;;;:::o;39147:286::-;2366:12;:10;:12::i;:::-;2356:22;;:6;;;;;;;;;;;:22;;;2348:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39231:15:::1;39249:4;;;;;;;;;;;:14;;;39272:4;39249:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39249:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39249:29:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;39249:29:0;;;;;;;;;;;;;;;;39231:47;;39303:7;39293;:17;39289:137;;;39327:4;;;;;;;;;;;:13;;;39341:3;39346:7;39327:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39327:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39327:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;39327:27:0;;;;;;;;;;;;;;;;;39289:137;;;39387:4;;;;;;;;;;;:13;;;39401:3;39406:7;39387:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;39387:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39387:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;39387:27:0;;;;;;;;;;;;;;;;;39289:137;2426:1;39147:286:::0;;:::o;38865:22::-;;;;;;;;;;;;;:::o;22633:143::-;22714:7;22741:11;:18;22753:5;22741:18;;;;;;;;;;;;;;;:27;22760:7;22741:27;;;;;;;;;;;;;;;;22734:34;;22633:143;;;;:::o;40778:117::-;40824:71;;;;;;;;;;;;;;;;;;;40778:117;:::o;40301:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3081:109::-;2366:12;:10;:12::i;:::-;2356:22;;:6;;;;;;;;;;;:22;;;2348:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3154:28:::1;3173:8;3154:18;:28::i;:::-;3081:109:::0;:::o;799:98::-;844:15;879:10;872:17;;799:98;:::o;28144:372::-;28289:1;28272:19;;:5;:19;;;;28264:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28370:1;28351:21;;:7;:21;;;;28343:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28454:6;28424:11;:18;28436:5;28424:18;;;;;;;;;;;;;;;:27;28443:7;28424:27;;;;;;;;;;;;;;;:36;;;;28492:7;28476:32;;28485:5;28476:32;;;28501:6;28476:32;;;;;;;;;;;;;;;;;;28144:372;;;:::o;25872:513::-;26030:1;26012:20;;:6;:20;;;;26004:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26114:1;26093:23;;:9;:23;;;;26085:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26189;26211:6;26189:71;;;;;;;;;;;;;;;;;:9;:17;26199:6;26189:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;26169:9;:17;26179:6;26169:17;;;;;;;;;;;;;;;:91;;;;26294:32;26319:6;26294:9;:20;26304:9;26294:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26271:9;:20;26281:9;26271:20;;;;;;;;;;;;;;;:55;;;;26359:9;26342:35;;26351:6;26342:35;;;26370:6;26342:35;;;;;;;;;;;;;;;;;;25872:513;;;:::o;8424:226::-;8544:7;8577:1;8572;:6;;8580:12;8564:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8564:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8604:9;8620:1;8616;:5;8604:17;;8641:1;8634:8;;;8424:226;;;;;:::o;7521:181::-;7579:7;7599:9;7615:1;7611;:5;7599:17;;7640:1;7635;:6;;7627:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7693:1;7686:8;;;7521:181;;;;:::o;45702:437::-;45793:23;45819:10;:21;45830:9;45819:21;;;;;;;;;;;;;;;;;;;;;;;;;45793:47;;45851:24;45878:20;45888:9;45878;:20::i;:::-;45851:47;;45977:9;45953:10;:21;45964:9;45953:21;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;46048:9;46004:54;;46031:15;46004:54;;46020:9;46004:54;;;;;;;;;;;;46071:60;46086:15;46103:9;46114:16;46071:14;:60::i;:::-;45702:437;;;;:::o;8909:471::-;8967:7;9217:1;9212;:6;9208:47;;;9242:1;9235:8;;;;9208:47;9267:9;9283:1;9279;:5;9267:17;;9312:1;9307;9303;:5;;;;;;:10;9295:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9371:1;9364:8;;;8909:471;;;;;:::o;9856:132::-;9914:7;9941:39;9945:1;9948;9941:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9934:46;;9856:132;;;;:::o;27306:398::-;27401:1;27382:21;;:7;:21;;;;27374:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27475:68;27498:6;27475:68;;;;;;;;;;;;;;;;;:9;:18;27485:7;27475:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;27454:9;:18;27464:7;27454:18;;;;;;;;;;;;;;;:89;;;;27569:24;27586:6;27569:12;;:16;;:24;;;;:::i;:::-;27554:12;:39;;;;27619:24;27636:6;27619:12;;:16;;:24;;;;:::i;:::-;27604:12;:39;;;;27685:1;27659:37;;27668:7;27659:37;;;27689:6;27659:37;;;;;;;;;;;;;;;;;;27306:398;;:::o;7985:136::-;8043:7;8070:43;8074:1;8077;8070:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8063:50;;7985:136;;;;:::o;26666:308::-;26761:1;26742:21;;:7;:21;;;;26734:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26827:24;26844:6;26827:12;;:16;;:24;;;;:::i;:::-;26812:12;:39;;;;26883:30;26906:6;26883:9;:18;26893:7;26883:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;26862:9;:18;26872:7;26862:18;;;;;;;;;;;;;;;:51;;;;26950:7;26929:37;;26946:1;26929:37;;;26959:6;26929:37;;;;;;;;;;;;;;;;;;26666:308;;:::o;47983:153::-;48028:4;48045:15;48093:9;48082:20;;48121:7;48114:14;;;47983:153;:::o;3296:229::-;3390:1;3370:22;;:8;:22;;;;3362:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3480:8;3451:38;;3472:6;;;;;;;;;;;3451:38;;;;;;;;;;;;3509:8;3500:6;;:17;;;;;;;;;;;;;;;;;;3296:229;:::o;46147:947::-;46253:6;46243:16;;:6;:16;;;;:30;;;;;46272:1;46263:6;:10;46243:30;46239:848;;;46312:1;46294:20;;:6;:20;;;46290:385;;46383:16;46402:14;:22;46417:6;46402:22;;;;;;;;;;;;;;;;;;;;;;;;;46383:41;;46443:17;46475:1;46463:9;:13;;;:60;;46522:1;46463:60;;;46479:11;:19;46491:6;46479:19;;;;;;;;;;;;;;;:34;46511:1;46499:9;:13;46479:34;;;;;;;;;;;;;;;:40;;;46463:60;46443:80;;46542:17;46562:21;46576:6;46562:9;:13;;:21;;;;:::i;:::-;46542:41;;46602:57;46619:6;46627:9;46638;46649;46602:16;:57::i;:::-;46290:385;;;;46713:1;46695:20;;:6;:20;;;46691:385;;46784:16;46803:14;:22;46818:6;46803:22;;;;;;;;;;;;;;;;;;;;;;;;;46784:41;;46844:17;46876:1;46864:9;:13;;;:60;;46923:1;46864:60;;;46880:11;:19;46892:6;46880:19;;;;;;;;;;;;;;;:34;46912:1;46900:9;:13;46880:34;;;;;;;;;;;;;;;:40;;;46864:60;46844:80;;46943:17;46963:21;46977:6;46963:9;:13;;:21;;;;:::i;:::-;46943:41;;47003:57;47020:6;47028:9;47039;47050;47003:16;:57::i;:::-;46691:385;;;;46239:848;46147:947;;;:::o;10484:312::-;10604:7;10636:1;10632;:5;10639:12;10624:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;10624:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10663:9;10679:1;10675;:5;;;;;;10663:17;;10787:1;10780:8;;;10484:312;;;;;:::o;47102:704::-;47281:18;47302:76;47309:12;47302:76;;;;;;;;;;;;;;;;;:6;:76::i;:::-;47281:97;;47410:1;47395:12;:16;;;:85;;;;;47469:11;47415:65;;:11;:22;47427:9;47415:22;;;;;;;;;;;;;;;:40;47453:1;47438:12;:16;47415:40;;;;;;;;;;;;;;;:50;;;;;;;;;;;;:65;;;47395:85;47391:339;;;47546:8;47497:11;:22;47509:9;47497:22;;;;;;;;;;;;;;;:40;47535:1;47520:12;:16;47497:40;;;;;;;;;;;;;;;:46;;:57;;;;47391:339;;;47626:33;;;;;;;;47637:11;47626:33;;;;;;47650:8;47626:33;;;47587:11;:22;47599:9;47587:22;;;;;;;;;;;;;;;:36;47610:12;47587:36;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47717:1;47702:12;:16;47674:14;:25;47689:9;47674:25;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;47391:339;47768:9;47747:51;;;47779:8;47789;47747:51;;;;;;;;;;;;;;;;;;;;;;;;47102:704;;;;;:::o;47814:161::-;47889:6;47920:5;47916:1;:9;47927:12;47908:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;47908:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47965:1;47951:16;;47814:161;;;;:::o;38735:10854::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://4624da6b53ebb50514904593dc51e930c85886a7640982fa5b0ad9096da9e49b
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.