Contract 0x1B97713da0dea4B83E626d398219A6449c7ddb0b

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa8bd54a00c92ed5d30e89e0213210699ba90dc71c4422998273cea311a15f95eApprove98090922021-08-06 22:59:51175 days 2 hrs ago0x62eada8a9168c7ff666976dfc3c6326230b975e6 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.0000728
0x3a90b9d473d5ae1a8171fb3fa38526f2cae47051d3178f94cd6a78fd453ecfabApprove86154402021-06-25 21:36:23217 days 3 hrs ago0xbcbe9b878543b9d4098497c67f1e95bc44a0b34c IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.0000728
0x21bc97d79b4601d3a066d0da4855d50ed3e26cb37054836a5e5f24faee8f9039Approve86149572021-06-25 21:12:14217 days 4 hrs ago0xeefc42a4bcbdda6c53335249cd4e6f4851a8de67 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00022246
0xb296d18cab4f64a269f6e13bef9d356496d2b44de261daa187dbc76a492dd43aApprove86149532021-06-25 21:12:02217 days 4 hrs ago0xeefc42a4bcbdda6c53335249cd4e6f4851a8de67 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00022252
0x46cdf89f7aed5f39c78ed276924fc8c60f4841dbfc032a95dd9b66092c216058Approve86049592021-06-25 12:49:53217 days 12 hrs ago0x62eada8a9168c7ff666976dfc3c6326230b975e6 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00022252
0x767917b60a6a034cbd4c981b9632871743922ef01297a5238247151aebc34c98Claim Reward85568032021-06-23 20:36:36219 days 4 hrs ago0xce2d31851c194fae1ec800ca5aa56bd482dbb230 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x2e988c09e9aacf514c846b34f51697a736c382edb05e4a93b5ec9880e3ca3ff7Claim Reward85567802021-06-23 20:35:27219 days 4 hrs ago0xd1201ba2b28a5ba6896cd763796a3e6c8ab5bbd6 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0xa5af15c5e98dbe06ac95dfc206e394a77a2d7de1d60c9a60521a34b04b75a93cClaim Reward85567602021-06-23 20:34:27219 days 4 hrs ago0xfb7d96e5914ae75971187d33fe6e4710cae4ee8b IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x80c4d79bfe999b9572e20db15f0530f2975a3443163e6dc81ba5e2655ef493ceClaim Reward85567422021-06-23 20:33:33219 days 4 hrs ago0xe1452ff275f3591971209c4e2e1ab55ec80b97f6 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x2bdd28b7bb30b12894238660d4afb36c945bcdb2b89a4782e2ce778d161ad725Claim Reward85567092021-06-23 20:31:54219 days 4 hrs ago0x3e3fd437a51afb9b6308f1e76b26919ba3206e42 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x78b942346e3d2c85d056d075bf4d1b6ad2f9731b252078a67587700460d02e26Claim Reward85566902021-06-23 20:30:57219 days 4 hrs ago0xc21be6d1e25ac2c040171c94161d4e01e13ad64a IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0xe0932c8b9fa7014e0e796f3506836de5ee82e44c63dcd95397bffb129733f820Claim Reward85565502021-06-23 20:23:57219 days 5 hrs ago0x7d54ecd67a54e1730117271c5f8ceec5604ead01 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x57ff4239c38474873af2ba804361e33f70f9ced874bf86824861923b4b03a756Claim Reward85565312021-06-23 20:23:00219 days 5 hrs ago0xd1684c94f1e30dd851e08e957f7dae341d10e41c IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0xdd569c81839ca9039fad78c95325a0e939a6b3edbdf3dffcb08c8b1532a558f2Claim Reward85565122021-06-23 20:22:03219 days 5 hrs ago0x5ef14db2d652ae6f9c149ff9ab6e6e846e1eaf38 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0xc59b712c8265724a522f1d90780e65cdde7efb8ec5c83c72a81b9a46f24c68deClaim Reward85564892021-06-23 20:20:54219 days 5 hrs ago0xe7e9318cecb1fa28077d137e9abf79b1d1db4875 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x177c20fce40d4cd10227101ec3fa48d5806ac0b93466e1bdcf2400af7ec4e719Claim Reward85564712021-06-23 20:20:00219 days 5 hrs ago0x3df21143e7a33816d72b061e60df66b7f13caffb IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x0b3551473e62725471ed309d8cb8827113d5fa3c75d8cb6a2e187f6b549bb352Claim Reward85564532021-06-23 20:19:06219 days 5 hrs ago0xc0d9f7268e0e7f181c61032bfec16bb6cafff074 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x55683f0004abded831c9b6da8d92f01adba66df5f4b1b448e923b4f3ec9ad6f6Claim Reward85564292021-06-23 20:17:54219 days 5 hrs ago0x622543035b4cd6913d2634ea212e5cee8772395e IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x7c572a605e9b9a7840081306220f12f6b89978d6baf33858b94d8f9ee785f754Claim Reward85559892021-06-23 19:55:44219 days 5 hrs ago0x4de39d95bd52e6f4609f0b60524c72f49fdcab62 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x89327fa67f7424f061a6ceddd48f718a9914e13f4f3dc51e6bc90731190cc1dcClaim Reward85559512021-06-23 19:53:38219 days 5 hrs ago0x45b561e3d016d56918e487fdb65fbb0a4cf65153 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x2b1eb36f6a62105795a5534f318067f60818377f1565212641f4028a5d5829caClaim Reward85559332021-06-23 19:52:40219 days 5 hrs ago0x7a76d36f99fdd5dd52e3376c9f60cb566224ab37 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x1fc2a8a1f4bfc416e04caed047ef88c32acf4a338f73e0af4bdd6cdb77d72418Claim Reward85559062021-06-23 19:51:13219 days 5 hrs ago0x5bc5579fa5849f08fdb560c3db2683c7c430874b IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0xd5266f9f29f5b19a5fc99838623bb82d2c90688551f8d22d7be372bd747ae6deClaim Reward85558682021-06-23 19:49:08219 days 5 hrs ago0xabba6fd2a8607f6db1ec806214665a3ca3b8e511 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0x70ccf580d1ff87a423151338d8c3d630a92f52ee6a51a49b7caf03d6a2a3cbe6Claim Reward85558232021-06-23 19:46:50219 days 5 hrs ago0x9e32822b635f42a04bed45beb2010851144d43d2 IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
0xe93a98cdbf8fb817de5c6b31ac808023c2bc3bb2f885cc66f4c5bca82a9ecedeClaim Reward85558012021-06-23 19:45:44219 days 5 hrs ago0xf93cd6b05d5ac40012c856b7fcbae147e5b2423e IN  0x1b97713da0dea4b83e626d398219a6449c7ddb0b0 BNB0.00051464
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x767917b60a6a034cbd4c981b9632871743922ef01297a5238247151aebc34c9885568032021-06-23 20:36:36219 days 4 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xce2d31851c194fae1ec800ca5aa56bd482dbb2300.001 BNB
0x2e988c09e9aacf514c846b34f51697a736c382edb05e4a93b5ec9880e3ca3ff785567802021-06-23 20:35:27219 days 4 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xd1201ba2b28a5ba6896cd763796a3e6c8ab5bbd60.001 BNB
0xa5af15c5e98dbe06ac95dfc206e394a77a2d7de1d60c9a60521a34b04b75a93c85567602021-06-23 20:34:27219 days 4 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xfb7d96e5914ae75971187d33fe6e4710cae4ee8b0.001 BNB
0x80c4d79bfe999b9572e20db15f0530f2975a3443163e6dc81ba5e2655ef493ce85567422021-06-23 20:33:33219 days 4 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xe1452ff275f3591971209c4e2e1ab55ec80b97f60.001 BNB
0x2bdd28b7bb30b12894238660d4afb36c945bcdb2b89a4782e2ce778d161ad72585567092021-06-23 20:31:54219 days 4 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x3e3fd437a51afb9b6308f1e76b26919ba3206e420.001 BNB
0x78b942346e3d2c85d056d075bf4d1b6ad2f9731b252078a67587700460d02e2685566902021-06-23 20:30:57219 days 4 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xc21be6d1e25ac2c040171c94161d4e01e13ad64a0.001 BNB
0xe0932c8b9fa7014e0e796f3506836de5ee82e44c63dcd95397bffb129733f82085565502021-06-23 20:23:57219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x7d54ecd67a54e1730117271c5f8ceec5604ead010.001 BNB
0x57ff4239c38474873af2ba804361e33f70f9ced874bf86824861923b4b03a75685565312021-06-23 20:23:00219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xd1684c94f1e30dd851e08e957f7dae341d10e41c0.001 BNB
0xdd569c81839ca9039fad78c95325a0e939a6b3edbdf3dffcb08c8b1532a558f285565122021-06-23 20:22:03219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x5ef14db2d652ae6f9c149ff9ab6e6e846e1eaf380.001 BNB
0xc59b712c8265724a522f1d90780e65cdde7efb8ec5c83c72a81b9a46f24c68de85564892021-06-23 20:20:54219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xe7e9318cecb1fa28077d137e9abf79b1d1db48750.001 BNB
0x177c20fce40d4cd10227101ec3fa48d5806ac0b93466e1bdcf2400af7ec4e71985564712021-06-23 20:20:00219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x3df21143e7a33816d72b061e60df66b7f13caffb0.001 BNB
0x0b3551473e62725471ed309d8cb8827113d5fa3c75d8cb6a2e187f6b549bb35285564532021-06-23 20:19:06219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xc0d9f7268e0e7f181c61032bfec16bb6cafff0740.001 BNB
0x55683f0004abded831c9b6da8d92f01adba66df5f4b1b448e923b4f3ec9ad6f685564292021-06-23 20:17:54219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x622543035b4cd6913d2634ea212e5cee8772395e0.001 BNB
0x7c572a605e9b9a7840081306220f12f6b89978d6baf33858b94d8f9ee785f75485559892021-06-23 19:55:44219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x4de39d95bd52e6f4609f0b60524c72f49fdcab620.001 BNB
0x89327fa67f7424f061a6ceddd48f718a9914e13f4f3dc51e6bc90731190cc1dc85559512021-06-23 19:53:38219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x45b561e3d016d56918e487fdb65fbb0a4cf651530.001 BNB
0x2b1eb36f6a62105795a5534f318067f60818377f1565212641f4028a5d5829ca85559332021-06-23 19:52:40219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x7a76d36f99fdd5dd52e3376c9f60cb566224ab370.001 BNB
0x1fc2a8a1f4bfc416e04caed047ef88c32acf4a338f73e0af4bdd6cdb77d7241885559062021-06-23 19:51:13219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x5bc5579fa5849f08fdb560c3db2683c7c430874b0.001 BNB
0xd5266f9f29f5b19a5fc99838623bb82d2c90688551f8d22d7be372bd747ae6de85558682021-06-23 19:49:08219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xabba6fd2a8607f6db1ec806214665a3ca3b8e5110.001 BNB
0x70ccf580d1ff87a423151338d8c3d630a92f52ee6a51a49b7caf03d6a2a3cbe685558232021-06-23 19:46:50219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x9e32822b635f42a04bed45beb2010851144d43d20.001 BNB
0xe93a98cdbf8fb817de5c6b31ac808023c2bc3bb2f885cc66f4c5bca82a9ecede85558012021-06-23 19:45:44219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xf93cd6b05d5ac40012c856b7fcbae147e5b2423e0.001 BNB
0x86fc407d25781b8cc723b6ec91aeb5d01335d4b03e7841914d4864027f0faa2985557802021-06-23 19:44:41219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xe6743227e675aff7c5bf4c7d473bc90a0e083e7e0.001 BNB
0xf22f2535a4537b304d49db0304facb10bcbac0de08d5f90db28d64bc5510645185557552021-06-23 19:43:26219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x5010aa99e3a8b4b707a95d7492b4885b23c546940.001 BNB
0xcd0b93594d53962d32b47bcb7b6a12090b4342a5ff019f57e6d9af2b20d1433f85557292021-06-23 19:42:08219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x1984e9c4ea6871beb2aa09028eec54d5ef3b80780.001 BNB
0x1f5de35f32db1e261e0f0b9a9e091a22c619abb2dd262405b710227c0b36b7b485557122021-06-23 19:41:17219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0x4dc086179cb668670b40191630f5102e539b75b30.001 BNB
0x38064d9fc729cbbb1b1d8cd6a9589d03b347dce2cba9db84e1e9b6b1793c75e785556392021-06-23 19:37:38219 days 5 hrs ago 0x1b97713da0dea4b83e626d398219a6449c7ddb0b0xe3badc7d4ce04815a56ec7938720511355df74e30.001 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StellarDiamond

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-14
*/

// SPDX-License-Identifier: MIT
// STELLAR DIAMOND [XLD]

pragma solidity 0.8.4;

// File: contracts\base\token\ERC20\IERC20.sol


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

// File: contracts\base\token\ERC20\extensions\IERC20Metadata.sol


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

// File: contracts\base\utils\Context.sol


/*
 * @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 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.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: contracts\base\access\Ownable.sol


/**
 * @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.
 */
abstract 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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

    function onOwnershipRenounced(address previousOwner) internal virtual { }
}

// File: contracts\base\token\ERC20\PancakeSwap\IPancakeRouter01.sol


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

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

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

// File: contracts\base\token\ERC20\PancakeSwap\IPancakeRouter02.sol


interface IPancakeRouter02 is IPancakeRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

// File: contracts\base\token\ERC20\PancakeSwap\IPancakeFactory.sol


interface IPancakeFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: contracts\base\access\ReentrancyGuard.sol


/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    modifier isHuman() {
        require(tx.origin == msg.sender, "Humans only");
        _;
    }
}

// File: contracts\StellarDiamond.sol

contract StellarDiamond is Context, IERC20Metadata, Ownable, ReentrancyGuard {
	uint256 private constant MAX = ~uint256(0);
	
	// MAIN TOKEN PROPERTIES
	string private constant _name = "Stellar Diamond";
	string private constant _symbol = "XLD";
	uint8 private constant _decimals = 9;
	uint8 private _distributionFee; //% of each transaction that will be distributed to all holders
	uint8 private _liquidityFee; //% of each transaction that will be added as liquidity
	uint8 private _rewardFee; //% of each transaction that will be used for BNB reward pool
	uint8 private _poolFee; //The total fee to be taken and added to the pool, this includes both the liquidity fee and the reward fee

	uint256 private constant _totalTokens = 1000000000000000 * 10**_decimals;	//1 quadrillion total supply
	mapping (address => uint256) private _balances; //The balance of each address.  This is before applying distribution rate.  To get the actual balance, see balanceOf() method
	mapping (address => mapping (address => uint256)) private _allowances;

	// FEES & REWARDS
	bool private _isSwapEnabled; // True if the contract should swap for liquidity & reward pool, false otherwise
	bool private _isFeeEnabled; // True if fees should be applied on transactions, false otherwise
	address private constant _burnWallet = 0x000000000000000000000000000000000000dEaD; //The address that keeps track of all tokens burned
	uint256 private constant _tokenSwapThreshold = _totalTokens / 100000; //There should be at least 0.0001% of the total supply in the contract before triggering a swap
	uint256 private constant _rewardCyclePeriod = 1 days; // The duration of the reward cycle (e.g. can claim rewards once a day)
	uint256 private _rewardCycleExtensionThreshold; // If someone sends or receives more than a % of their balance in a transaction, their reward cycle date will increase accordingly
	uint256 private _totalFeesDistributed; // The total fees distributed (in number of tokens)
	uint256 private _totalFeesPooled; // The total fees pooled (in number of tokens)
	uint256 private _totalBNBLiquidityAddedFromFees; // The total number of BNB added to the pool through fees
	uint256 private _totalBNBClaimed; // The total number of BNB claimed by all addresses
	mapping (address => bool) private _addressesExcludedFromFees; // The list of addresses that do not pay a fee for transactions
	mapping(address => uint256) private _nextAvailableClaimDate; // The next available reward claim date for each address
	mapping(address => uint256) private _rewardsClaimed; // The amount of BNB claimed by each address
	uint256 private _totalDistributionAvailable = (MAX - (MAX % _totalTokens)); //Indicates the amount of distribution available. Min value is _totalTokens. This is divisible by _totalTokens without any remainder
	uint private _claimRewardGasFeeEstimation; // This is an estimated amount of gas fee for claiming a reward, so that the contract can refund the gas for small rewards. 
	uint256 private _claimRewardGasFeeRefundThreshold; // If someone has less tokens than this threshold, they will be refunded the gas fee when they claim a reward
	
	// CHARITY
	address payable private constant _charityAddress = payable(0x220fFf82900427d0ce6EE7fDE1BeB53cAD34E8E7); // A percentage of the BNB pool will go to the charity address
	uint256 private constant _charityThreshold = 1 ether; // The minimum number of BNB reward before triggering a charity call.  This means if reward is lower, it will not contribute to charity
	uint8 private constant _charityPercentage = 15; // In case charity is triggerred, this is the percentage to take out from the reward transaction

	// TRANSACTION LIMIT
	uint256 private _maxTransactionAmount = _totalTokens; // The amount of tokens that can be exchanged at once
	mapping (address => bool) private _addressesExcludedFromTransactionLimit; // The list of addresses that are not affected by the transaction limit

	// PANCAKESWAP INTERFACES (For swaps)
	address private _pancakeSwapRouterAddress;
	IPancakeRouter02 private _pancakeswapV2Router;
	address private _pancakeswapV2Pair;

	// EVENTS
	event Swapped(uint256 tokensSwapped, uint256 bnbReceived, uint256 tokensIntoLiqudity, uint256 bnbIntoLiquidity);
	event BNBClaimed(address recipient, uint256 bnbReceived, uint256 nextAvailableClaimDate);
	
	constructor (address routerAddress) {
		_balances[_msgSender()] = _totalDistributionAvailable;
		
		// Exclude addresses from fees
		_addressesExcludedFromFees[address(this)] = true;
		_addressesExcludedFromFees[owner()] = true;

		// Exclude addresses from transaction limits
		_addressesExcludedFromTransactionLimit[owner()] = true;
		_addressesExcludedFromTransactionLimit[address(this)] = true;
		_addressesExcludedFromTransactionLimit[_burnWallet] = true;
		
		// Initialize PancakeSwap V2 router and XLD <-> BNB pair.  Router address will be: 0x10ed43c718714eb63d5aa57b78b54704e256024e
		setPancakeSwapRouter(routerAddress);

		// 4% liquidity fee, 8% reward fee, 1% distribution fee
		setFees(4, 8, 1);

		// If someone sends or receives more than 20% of their balance in a transaction, their reward cycle date will increase accordingly
		setRewardCycleExtensionThreshold(20);

		// Gas fee options for claiming a reward: Balances with less than 0.01% of supply will have their gas fee refunded when claiming a reward
		setClaimRewardGasFeeOptions(_totalTokens / 10000, 1000000000000000);

		emit Transfer(address(0), _msgSender(), _totalTokens);

		// Allow pancakeSwap to spend the tokens of the address, no matter the amount
		doApprove(address(this), _pancakeSwapRouterAddress, MAX);
	}

	// This function is used to enable all functions of the contract, after the setup of the token sale (e.g. Liquidity) is completed
	function activate() public onlyOwner {
		_isSwapEnabled = true;
		_isFeeEnabled = true;
		setTransactionLimit(100); // only 1% of the total supply can be exchanged at once
	}


	function balanceOf(address account) public view override returns (uint256) {
		// Apply the distribution rate.  This rate decreases every time a distribution fee is applied, making the balance of every holder go up
		uint256 currentRate =  calculateDistributionRate();
		return _balances[account] / currentRate;
	}
	

	function transfer(address recipient, uint256 amount) public override returns (bool) {
		doTransfer(_msgSender(), recipient, amount);
		return true;
	}
	

	function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
		doTransfer(sender, recipient, amount);
		doApprove(sender, _msgSender(), _allowances[sender][_msgSender()] - amount); // Will fail when there is not enough allowance
		return true;
	}
	

	function approve(address spender, uint256 amount) public override returns (bool) {
		doApprove(_msgSender(), spender, amount);
		return true;
	}
	
	
	function doTransfer(address sender, address recipient, uint256 amount) private {
		require(sender != address(0), "Transfer from the zero address is not allowed");
		require(recipient != address(0), "Transfer to the zero address is not allowed");
		require(amount > 0, "Transfer amount must be greater than zero");
		
		
		// Ensure that amount is within the limit
		if (!_addressesExcludedFromTransactionLimit[sender] && !_addressesExcludedFromTransactionLimit[recipient]) {
			require(amount <= _maxTransactionAmount, "Transfer amount exceeds the maximum allowed");
		}

		// Perform a swap if needed.  A swap in the context of this contract is the process of swapping the contract's token balance with BNBs in order to provide liquidity and increase the reward pool
		executeSwapIfNeeded(sender, recipient);

		// Extend the reward cycle according to the amount transferred.  This is done so that users do not abuse the cycle (buy before it ends & sell after they claim the reward)
		_nextAvailableClaimDate[recipient] += calculateRewardCycleExtension(balanceOf(recipient), amount);
		_nextAvailableClaimDate[sender] += calculateRewardCycleExtension(balanceOf(sender), amount);
		
		// Calculate distribution & pool rates
		(uint256 distributionFeeRate, uint256 poolFeeRate) = calculateFeeRates(sender, recipient);
		
		uint256 distributionAmount = amount * distributionFeeRate / 100;
		uint256 poolAmount = amount * poolFeeRate / 100;
		uint256 transferAmount = amount - distributionAmount - poolAmount;

		// Update balances
		updateBalances(sender, recipient, amount, distributionAmount, poolAmount);

		// Update total fees, these are just counters provided for visibility
		_totalFeesDistributed += distributionAmount;
		_totalFeesPooled += poolAmount;

		emit Transfer(sender, recipient, transferAmount); 
	}


	function updateBalances(address sender, address recipient, uint256 amount, uint256 distributionAmount, uint256 poolAmount) private {
		// Calculate the current distribution rate.  Because the rate is inversely applied on the balances in the balanceOf method, we need to apply it when updating the balances
		uint256 currentRate = calculateDistributionRate();

		// Calculate amount to be sent by sender
		uint256 sentAmount = amount * currentRate;
		
		// Calculate amount to be received by recipient
		uint256 rDistributionAmount = distributionAmount * currentRate;
		uint256 rPoolAmount = poolAmount * currentRate;
		uint256 receivedAmount = sentAmount - rDistributionAmount - rPoolAmount;

		// Update balances
		_balances[sender] -= sentAmount;
		_balances[recipient] += receivedAmount;
		
		// Add pool to contract
		_balances[address(this)] += rPoolAmount;
		
		// Update the distribution available.  By doing so, we're reducing the rate therefore everyone's balance goes up accordingly
		_totalDistributionAvailable -= rDistributionAmount;

		// Note: Since we burned a big portion of the tokens during contract creation, the burn wallet will also receive a cut from the distribution
	}
	

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

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

	
	// Returns the current distribution rate, which is _totalDistributionAvailable/_totalTokens
	// This means that it starts high and goes down as time goes on (distribution available decreases).  Min value is 1
	function calculateDistributionRate() public view returns(uint256) {
		if (_totalDistributionAvailable < _totalTokens) {
			return 1;
		}
		
		return _totalDistributionAvailable / _totalTokens;
	}
	

	function calculateFeeRates(address sender, address recipient) private view returns(uint256, uint256) {
		bool applyFees = _isFeeEnabled && !_addressesExcludedFromFees[sender] && !_addressesExcludedFromFees[recipient];
		if (applyFees)
		{
			return (_distributionFee, _poolFee);
		}

		return (0, 0);
	}

	
	function executeSwapIfNeeded(address sender, address recipient) private {
		if (!_isSwapEnabled) {
			return;
		}

		// Check if it's time to swap for liquidity & reward pool
		uint256 tokensAvailableForSwap = balanceOf(address(this));
		if (tokensAvailableForSwap >= _tokenSwapThreshold) {

			// Limit to threshold & max transaction amount
			tokensAvailableForSwap = _tokenSwapThreshold;
			if (tokensAvailableForSwap > _maxTransactionAmount)
			{
				tokensAvailableForSwap = _maxTransactionAmount;
			}

			// Make sure that we are not stuck in a loop (Swap only once)
			bool isFromContractToPair = sender == address(this) && recipient == _pancakeswapV2Pair;
			if (!isFromContractToPair && sender != _pancakeswapV2Pair) {
				executeSwap(tokensAvailableForSwap);
			}
		}
	}
	

	function executeSwap(uint256 amount) private {
		// The amount parameter includes both the liquidity and the reward tokens, we need to find the correct portion for each one so that they are allocated accordingly
		uint256 tokensReservedForLiquidity = amount * _liquidityFee / _poolFee;
		uint256 tokensReservedForReward = amount - tokensReservedForLiquidity;

		// For the liquidity portion, half of it will be swapped for BNB and the other half will be used to add the BNB into the liquidity
		uint256 tokensToSwapForLiquidity = tokensReservedForLiquidity / 2;
		uint256 tokensToAddAsLiquidity = tokensToSwapForLiquidity;

		// Swap both reward tokens and liquidity tokens for BNB
		uint256 tokensToSwap = tokensReservedForReward + tokensToSwapForLiquidity;
		uint256 bnbSwapped = swapTokensForBNB(tokensToSwap);
		
		// Calculate what portion of the swapped BNB is for liquidity and supply it using the other half of the token liquidity portion.  The remaining BNBs in the contract represent the reward pool
		uint256 bnbToBeAddedToLiquidity = bnbSwapped * tokensToSwapForLiquidity / tokensToSwap;
		(,uint bnbAddedToLiquidity,) = _pancakeswapV2Router.addLiquidityETH{value: bnbToBeAddedToLiquidity}(address(this), tokensToAddAsLiquidity, 0, 0, owner(), block.timestamp + 360);

		// Keep track of how many BNB were added to liquidity this way
		_totalBNBLiquidityAddedFromFees += bnbAddedToLiquidity;
		
		emit Swapped(tokensToSwap, bnbSwapped, tokensToAddAsLiquidity, bnbToBeAddedToLiquidity);
	}
	
	
	// This function swaps a {tokenAmount} of XLD tokens for BNB and returns the total amount of BNB received
	function swapTokensForBNB(uint256 tokenAmount) private  returns(uint256) {
		uint256 initialBalance = address(this).balance;
		
		// Generate pair for XLD -> WBNB
		address[] memory path = new address[](2);
		path[0] = address(this);
		path[1] = _pancakeswapV2Router.WETH();

		// Swap
		_pancakeswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount, 0, path, address(this), block.timestamp + 360);
		
		// Return the amount received
		return address(this).balance - initialBalance;
	}


	function claimReward() isHuman nonReentrant public {
		require(_nextAvailableClaimDate[msg.sender] <= block.timestamp, "Claim date for this address has not passed yet");
		require(balanceOf(msg.sender) >= 0, "The address must own XLD before claiming a reward");

		uint256 reward = calculateBNBReward(msg.sender);

		// If reward is over the charity threshold
		if (reward >= _charityThreshold) {

			// Use a percentage of it to transfer it to charity wallet
			uint256 charityAmount = reward * _charityPercentage / 100;
			(bool success, ) = _charityAddress.call{ value: charityAmount }("");
			require(success, "Charity transaction failed");	
			
			reward -= charityAmount;
		}

		// Update the next claim date & the total amount claimed
		_nextAvailableClaimDate[msg.sender] = block.timestamp + rewardCyclePeriod();
		_rewardsClaimed[msg.sender] += reward;
		_totalBNBClaimed += reward;

		// Fire the event
		emit BNBClaimed(msg.sender, reward, _nextAvailableClaimDate[msg.sender]);

		// Send the reward to the caller
		(bool sent,) = msg.sender.call{value : reward}("");
		require(sent, "Reward transaction failed");
	}

	// This function calculates how much (and if) the reward cycle of an address should increase based on its current balance and the amount transferred in a transaction
	function calculateRewardCycleExtension(uint256 balance, uint256 amount) public view returns (uint256) {
		uint256 basePeriod = rewardCyclePeriod();

		if (balance == 0) {
			// Receiving $XLD on a zero balance address:
			// This means that either the address has never received tokens before (So its current reward date is 0) in which case we need to set its initial value
			// Or the address has transferred all of its tokens in the past and has now received some again, in which case we will set the reward date to a date very far in the future
			return block.timestamp + basePeriod;
		}

		uint256 rate = amount * 100 / balance;

		// Depending on the % of $XLD tokens transferred, relative to the balance, we might need to extend the period
		if (rate >= _rewardCycleExtensionThreshold) {

			// If new balance is X percent higher, then we will extend the reward date by X percent
			uint256 extension = basePeriod * rate / 100;

			// Cap to the base period
			if (extension >= basePeriod) {
				extension = basePeriod;
			}

			return extension;
		}

		return 0;
	}


	function calculateBNBReward(address ofAddress) public view returns (uint256) {
		uint256 holdersAmount = totalAmountOfTokensHeld();

		uint256 balance = balanceOf(ofAddress);
		uint256 bnbPool =  address(this).balance;

		// If an address is holding X percent of the supply, then it can claim up to X percent of the reward pool
		uint256 reward = bnbPool * balance / holdersAmount;

		// Low-balance addresses will have their fee refunded when claiming a reward
		if (balance < _claimRewardGasFeeRefundThreshold) 
		{
			uint256 estimatedGasFee = claimRewardGasFeeEstimation();
			if (bnbPool > reward + estimatedGasFee)
			{
				reward += estimatedGasFee;
			}
		}

		return reward;
	}


	function onOwnershipRenounced(address previousOwner) internal override {
		// This is to make sure that once ownership is renounced, the original owner is no longer excluded from fees and from the transaction limit
		_addressesExcludedFromFees[previousOwner] = false;
		_addressesExcludedFromTransactionLimit[previousOwner] = false;
	}


	// Returns how many more $XLD tokens are needed in the contract before triggering a swap
	function amountUntilSwap() public view returns (uint256) {
		uint256 balance = balanceOf(address(this));
		if (balance > _tokenSwapThreshold) {
			// Swap on next relevant transaction
			return 0;
		}

		return _tokenSwapThreshold - balance;
	}


	function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
		doApprove(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
		return true;
	}


	function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
		doApprove(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
		return true;
	}

	function setPancakeSwapRouter(address routerAddress) public onlyOwner {
		_pancakeSwapRouterAddress = routerAddress; 
		_pancakeswapV2Router = IPancakeRouter02(_pancakeSwapRouterAddress);
		_pancakeswapV2Pair = IPancakeFactory(_pancakeswapV2Router.factory()).createPair(address(this), _pancakeswapV2Router.WETH());
	}

	// This function can also be used in case the fees of the contract need to be adjusted later on as the volume grows
	function setFees(uint8 liquidityFee, uint8 rewardFee, uint8 distributionFee) public onlyOwner 
	{
		require(liquidityFee >= 1 && liquidityFee <= 6, "Liquidity fee must be between 1% and 6%");
		require(rewardFee >= 1 && rewardFee <= 15, "Reward fee must be between 1% and 15%");
		require(distributionFee >= 0 && distributionFee <= 2, "Distribution fee must be between 0% and 2%");
		require(liquidityFee + rewardFee + distributionFee <= 15, "Total fees cannot exceed 15%");

		_distributionFee = distributionFee;
		_liquidityFee = liquidityFee;
		_rewardFee = rewardFee;
		
		// Enforce invariant
		_poolFee = _rewardFee + _liquidityFee; 
	}

	// This function will be used to reduce the limit later on, according to the price of the token
	function setTransactionLimit(uint256 limit) public onlyOwner {
		require(limit >= 100, "Limit must be less than or equal to 1%");
		_maxTransactionAmount = _totalTokens / limit;
	}

	// This can be used for integration with other contracts after partnerships (e.g. reward claiming from sub-tokens)
	function setNextAvailableClaimDate(address ofAddress, uint256 date) public onlyOwner {
		require(date > block.timestamp, "Cannot be a date in the past");
		require(date < block.timestamp + 31 days, "Cannot be more than 31 days in the future");

		_nextAvailableClaimDate[ofAddress] = date;
	}

	function setRewardCycleExtensionThreshold(uint256 threshold) public onlyOwner {
		_rewardCycleExtensionThreshold = threshold;
	}


	function claimRewardGasFeeEstimation() public view returns (uint256) {
		return _claimRewardGasFeeEstimation;
	}


	function claimRewardGasFeeRefundThreshold() public view returns (uint256) {
		return _claimRewardGasFeeRefundThreshold;
	}


	function setClaimRewardGasFeeOptions(uint256 threshold, uint256 gasFee) public onlyOwner 
	{
		_claimRewardGasFeeRefundThreshold = threshold;
		_claimRewardGasFeeEstimation = gasFee;
	}


	function nextAvailableClaimDate(address ofAddress) public view returns (uint256) {
		return _nextAvailableClaimDate[ofAddress];
	}


	function rewardsClaimed(address byAddress) public view returns (uint256) {
		return _rewardsClaimed[byAddress];
	}


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


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


	function totalSupply() public override pure returns (uint256) {
		return _totalTokens;
	}
	

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

	function totalFeesDistributed() public view returns (uint256) {
		return _totalFeesDistributed;
	}
	

	function allowance(address owner, address spender) public view override returns (uint256) {
		return _allowances[owner][spender];
	}

	
	function maxTransactionAmount() public view returns (uint256) {
		return _maxTransactionAmount;
	}


	function pancakeSwapRouterAddress() public view returns (address) {
		return _pancakeSwapRouterAddress;
	}


	function pancakeSwapPairAddress() public view returns (address) {
		return _pancakeswapV2Pair;
	}


	function totalFeesPooled() public view returns (uint256) {
		return _totalFeesPooled;
	}


	function totalAmountOfTokensHeld() public view returns (uint256) {
		return _totalTokens - balanceOf(address(0)) - balanceOf(_burnWallet) - balanceOf(_pancakeswapV2Pair);
	}


	function totalBNBClaimed() public view returns (uint256) {
		return _totalBNBClaimed;
	}

	function totalBNBLiquidityAddedFromFees() public view returns (uint256) {
		return _totalBNBLiquidityAddedFromFees;
	}


	function rewardCyclePeriod() public pure returns (uint256) {
		return _rewardCyclePeriod;
	}

	function isSwapEnabled() public view returns (bool) {
		return _isSwapEnabled;
	}

	function isFeeEnabled() public view returns (bool) {
		return _isFeeEnabled;
	}

	// Ensures that the contract is able to receive BNB
	receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"routerAddress","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":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nextAvailableClaimDate","type":"uint256"}],"name":"BNBClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbIntoLiquidity","type":"uint256"}],"name":"Swapped","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":"activate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amountUntilSwap","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":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"calculateBNBReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateDistributionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateRewardCycleExtension","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRewardGasFeeEstimation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewardGasFeeRefundThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"isFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"}],"name":"nextAvailableClaimDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeSwapPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pancakeSwapRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardCyclePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"byAddress","type":"address"}],"name":"rewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"},{"internalType":"uint256","name":"gasFee","type":"uint256"}],"name":"setClaimRewardGasFeeOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"internalType":"uint8","name":"rewardFee","type":"uint8"},{"internalType":"uint8","name":"distributionFee","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ofAddress","type":"address"},{"internalType":"uint256","name":"date","type":"uint256"}],"name":"setNextAvailableClaimDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"routerAddress","type":"address"}],"name":"setPancakeSwapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setRewardCycleExtensionThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalAmountOfTokensHeld","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBNBClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBNBLiquidityAddedFromFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeesPooled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a62000981565b620000259066038d7ea4c6800062000a42565b620000339060001962000a7e565b620000419060001962000a64565b600e55620000526009600a62000981565b620000659066038d7ea4c6800062000a42565b6011553480156200007557600080fd5b5060405162002f6a38038062002f6a8339810160408190526200009891620008c9565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001808055600e543360009081526003602090815260408083209390935530808352600b8252838320805460ff19908116871790915583546001600160a01b03908116855285852080548316881790558454168452601290925283832080548316861790558252918120805483168417905561dead90527f1120e10407cab1193d7c5139d9aae5536deb3d83e855f25f8e42f811c01f56f78054909116909117905562000186816200025d565b6200019660046008600162000488565b620001a26014620006fb565b620001e4612710620001b76009600a62000981565b620001ca9066038d7ea4c6800062000a42565b620001d6919062000921565b66038d7ea4c680006200074b565b3360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620002166009600a62000981565b620002299066038d7ea4c6800062000a42565b60405190815260200160405180910390a3601354620002569030906001600160a01b0316600019620007a1565b5062000ac1565b6000546001600160a01b03163314620002ac5760405162461bcd60e51b8152602060048201819052602482015260008051602062002f4a83398151915260448201526064015b60405180910390fd5b601380546001600160a01b0383166001600160a01b0319918216811790925560148054909116821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200030d57600080fd5b505afa15801562000322573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003489190620008c9565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a657600080fd5b505afa158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e19190620008c9565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b1580156200042a57600080fd5b505af11580156200043f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004659190620008c9565b601580546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314620004d35760405162461bcd60e51b8152602060048201819052602482015260008051602062002f4a8339815191526044820152606401620002a3565b60018360ff1610158015620004ec575060068360ff1611155b6200054a5760405162461bcd60e51b815260206004820152602760248201527f4c697175696469747920666565206d757374206265206265747765656e20312560448201526620616e6420362560c81b6064820152608401620002a3565b60018260ff1610158015620005635750600f8260ff1611155b620005bf5760405162461bcd60e51b815260206004820152602560248201527f52657761726420666565206d757374206265206265747765656e20312520616e604482015264642031352560d81b6064820152608401620002a3565b60028160ff161115620006285760405162461bcd60e51b815260206004820152602a60248201527f446973747269627574696f6e20666565206d757374206265206265747765656e60448201526920302520616e6420322560b01b6064820152608401620002a3565b600f81620006378486620008f9565b620006439190620008f9565b60ff161115620006965760405162461bcd60e51b815260206004820152601c60248201527f546f74616c20666565732063616e6e6f742065786365656420313525000000006044820152606401620002a3565b6002805460ff8481166201000090810262ff00001988841661010090810261ffff199096168589161795909517161793849055620006dc939283048216920416620008f9565b600260036101000a81548160ff021916908360ff160217905550505050565b6000546001600160a01b03163314620007465760405162461bcd60e51b8152602060048201819052602482015260008051602062002f4a8339815191526044820152606401620002a3565b600655565b6000546001600160a01b03163314620007965760405162461bcd60e51b8152602060048201819052602482015260008051602062002f4a8339815191526044820152606401620002a3565b601091909155600f55565b6001600160a01b038316620008055760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401620002a3565b6001600160a01b038216620008685760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002a3565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600060208284031215620008db578081fd5b81516001600160a01b0381168114620008f2578182fd5b9392505050565b600060ff821660ff84168060ff0382111562000919576200091962000a95565b019392505050565b60008262000933576200093362000aab565b500490565b600181815b80851115620009795781600019048211156200095d576200095d62000a95565b808516156200096b57918102915b93841c93908002906200093d565b509250929050565b6000620008f260ff8416836000826200099d5750600162000a3c565b81620009ac5750600062000a3c565b8160018114620009c55760028114620009d057620009f0565b600191505062000a3c565b60ff841115620009e457620009e462000a95565b50506001821b62000a3c565b5060208310610133831016604e8410600b841016171562000a15575081810a62000a3c565b62000a21838362000938565b806000190482111562000a385762000a3862000a95565b0290505b92915050565b600081600019048311821515161562000a5f5762000a5f62000a95565b500290565b60008282101562000a795762000a7962000a95565b500390565b60008262000a905762000a9062000aab565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6124798062000ad16000396000f3fe60806040526004361061023f5760003560e01c80637a46dc8b1161012e578063b88a802f116100ab578063d8372d351161006f578063d8372d3514610692578063dd62ed3e146106b2578063df90edad146106f8578063e19b92ec14610718578063f6794fdb1461072e57600080fd5b8063b88a802f146105fd578063c38568f214610612578063c8c8ebe414610627578063cbbf238e1461063c578063d3f730fd1461065c57600080fd5b806395d89b41116100f257806395d89b41146105465780639f731e1814610572578063a457c2d714610587578063a9059cbb146105a7578063b47fd563146105c757600080fd5b80637a46dc8b146104c05780638582c913146104d5578063878f2ca3146104ea5780638da5cb5b1461050857806390ff21241461052657600080fd5b8063374061ba116101bc57806352bffe981161018057806352bffe981461044157806364bfa5461461045657806370a0823114610476578063715018a61461049657806372a53045146104ab57600080fd5b8063374061ba146103a557806339509351146103d757806339e55722146103f75780634a3dd27b1461040c5780634dd9584a1461042157600080fd5b80632060995e116102035780632060995e1461031c57806323b872dd1461033c5780633094375d1461035c578063313ce56714610371578063351a964d1461038d57600080fd5b806306fdde031461024b578063095ea7b3146102955780630e66dc69146102c55780630f15f4c0146102e257806318160ddd146102f957600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5060408051808201909152600f81526e14dd195b1b185c88111a585b5bdb99608a1b60208201525b60405161028c919061219c565b60405180910390f35b3480156102a157600080fd5b506102b56102b03660046120c9565b61074e565b604051901515815260200161028c565b3480156102d157600080fd5b50600554610100900460ff166102b5565b3480156102ee57600080fd5b506102f7610765565b005b34801561030557600080fd5b5061030e6107b3565b60405190815260200161028c565b34801561032857600080fd5b5061030e610337366004612019565b6107d7565b34801561034857600080fd5b506102b5610357366004612089565b61084b565b34801561036857600080fd5b5061030e61089d565b34801561037d57600080fd5b506040516009815260200161028c565b34801561039957600080fd5b5060055460ff166102b5565b3480156103b157600080fd5b506015546001600160a01b03165b6040516001600160a01b03909116815260200161028c565b3480156103e357600080fd5b506102b56103f23660046120c9565b610921565b34801561040357600080fd5b5061030e610958565b34801561041857600080fd5b50600a5461030e565b34801561042d57600080fd5b506102f761043c366004612019565b6109c0565b34801561044d57600080fd5b5060085461030e565b34801561046257600080fd5b506102f76104713660046120f4565b610bba565b34801561048257600080fd5b5061030e610491366004612019565b610c72565b3480156104a257600080fd5b506102f7610cab565b3480156104b757600080fd5b50600f5461030e565b3480156104cc57600080fd5b5060095461030e565b3480156104e157600080fd5b5060075461030e565b3480156104f657600080fd5b506013546001600160a01b03166103bf565b34801561051457600080fd5b506000546001600160a01b03166103bf565b34801561053257600080fd5b5061030e61054136600461210c565b610d51565b34801561055257600080fd5b5060408051808201909152600381526216131160ea1b602082015261027f565b34801561057e57600080fd5b5060105461030e565b34801561059357600080fd5b506102b56105a23660046120c9565b610dca565b3480156105b357600080fd5b506102b56105c23660046120c9565b610e01565b3480156105d357600080fd5b5061030e6105e2366004612019565b6001600160a01b03166000908152600c602052604090205490565b34801561060957600080fd5b506102f7610e0e565b34801561061e57600080fd5b5061030e6111c5565b34801561063357600080fd5b5060115461030e565b34801561064857600080fd5b506102f761065736600461210c565b61121d565b34801561066857600080fd5b5061030e610677366004612019565b6001600160a01b03166000908152600d602052604090205490565b34801561069e57600080fd5b506102f76106ad3660046120c9565b611252565b3480156106be57600080fd5b5061030e6106cd366004612051565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b34801561070457600080fd5b506102f76107133660046120f4565b611354565b34801561072457600080fd5b506201518061030e565b34801561073a57600080fd5b506102f761074936600461215a565b611383565b600061075b3384846115c5565b5060015b92915050565b6000546001600160a01b031633146107985760405162461bcd60e51b815260040161078f906121ef565b60405180910390fd5b6005805461ffff19166101011790556107b16064610bba565b565b60006107c16009600a612334565b6107d29066038d7ea4c680006123df565b905090565b6000806107e2610958565b905060006107ef84610c72565b9050476000836107ff84846123df565b61080991906122d1565b9050601054831015610842576000610820600f5490565b905061082c8183612294565b8311156108405761083d8183612294565b91505b505b95945050505050565b60006108588484846116e9565b6001600160a01b03841660009081526004602090815260408083203380855292529091205461089391869161088e9086906123fe565b6115c5565b5060019392505050565b6000806108a930610c72565b9050620186a06108bb6009600a612334565b6108cc9066038d7ea4c680006123df565b6108d691906122d1565b8111156108e557600091505090565b80620186a06108f66009600a612334565b6109079066038d7ea4c680006123df565b61091191906122d1565b61091b91906123fe565b91505090565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161075b91859061088e908690612294565b601554600090610970906001600160a01b0316610c72565b61097b61dead610c72565b6109856000610c72565b6109916009600a612334565b6109a29066038d7ea4c680006123df565b6109ac91906123fe565b6109b691906123fe565b6107d291906123fe565b6000546001600160a01b031633146109ea5760405162461bcd60e51b815260040161078f906121ef565b601380546001600160a01b0383166001600160a01b0319918216811790925560148054909116821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b158015610a4a57600080fd5b505afa158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a829190612035565b6001600160a01b031663c9c6539630601460009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015610adf57600080fd5b505afa158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b179190612035565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015610b5f57600080fd5b505af1158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b979190612035565b601580546001600160a01b0319166001600160a01b039290921691909117905550565b6000546001600160a01b03163314610be45760405162461bcd60e51b815260040161078f906121ef565b6064811015610c445760405162461bcd60e51b815260206004820152602660248201527f4c696d6974206d757374206265206c657373207468616e206f7220657175616c60448201526520746f20312560d01b606482015260840161078f565b80610c516009600a612334565b610c629066038d7ea4c680006123df565b610c6c91906122d1565b60115550565b600080610c7d6111c5565b6001600160a01b038416600090815260036020526040902054909150610ca49082906122d1565b9392505050565b6000546001600160a01b03163314610cd55760405162461bcd60e51b815260040161078f906121ef565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b03168152600b60209081526040808320805460ff19908116909155601290925282208054909116905580546001600160a01b0319169055565b60006201518083610d6e57610d668142612294565b91505061075f565b600084610d7c8560646123df565b610d8691906122d1565b90506006548110610dbf5760006064610d9f83856123df565b610da991906122d1565b9050828110610db55750815b925061075f915050565b506000949350505050565b3360008181526004602090815260408083206001600160a01b0387168452909152812054909161075b91859061088e9086906123fe565b600061075b3384846116e9565b323314610e4b5760405162461bcd60e51b815260206004820152600b60248201526a48756d616e73206f6e6c7960a81b604482015260640161078f565b60026001541415610e9e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161078f565b6002600155336000908152600c6020526040902054421015610f195760405162461bcd60e51b815260206004820152602e60248201527f436c61696d206461746520666f7220746869732061646472657373206861732060448201526d1b9bdd081c185cdcd959081e595d60921b606482015260840161078f565b6000610f2433610c72565b1015610f8c5760405162461bcd60e51b815260206004820152603160248201527f5468652061646472657373206d757374206f776e20584c44206265666f72652060448201527018db185a5b5a5b99c818481c995dd85c99607a1b606482015260840161078f565b6000610f97336107d7565b9050670de0b6b3a7640000811061107f5760006064610fb7600f846123df565b610fc191906122d1565b60405190915060009073220fff82900427d0ce6ee7fde1beb53cad34e8e79083908381818185875af1925050503d806000811461101a576040519150601f19603f3d011682016040523d82523d6000602084013e61101f565b606091505b50509050806110705760405162461bcd60e51b815260206004820152601a60248201527f43686172697479207472616e73616374696f6e206661696c6564000000000000604482015260640161078f565b61107a82846123fe565b925050505b61108c6201518042612294565b336000908152600c6020908152604080832093909355600d905290812080548392906110b9908490612294565b9250508190555080600a60008282546110d29190612294565b9091555050336000818152600c602090815260409182902054825193845290830184905282820152517fc10394a0cb12c24a9a3916f5fcce80bec09cbea556e47f00c731e16419ee003b9181900360600190a1604051600090339083908381818185875af1925050503d8060008114611167576040519150601f19603f3d011682016040523d82523d6000602084013e61116c565b606091505b50509050806111bd5760405162461bcd60e51b815260206004820152601960248201527f526577617264207472616e73616374696f6e206661696c656400000000000000604482015260640161078f565b505060018055565b60006111d36009600a612334565b6111e49066038d7ea4c680006123df565b600e5410156111f35750600190565b6111ff6009600a612334565b6112109066038d7ea4c680006123df565b600e546107d291906122d1565b6000546001600160a01b031633146112475760405162461bcd60e51b815260040161078f906121ef565b601091909155600f55565b6000546001600160a01b0316331461127c5760405162461bcd60e51b815260040161078f906121ef565b4281116112cb5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742062652061206461746520696e20746865207061737400000000604482015260640161078f565b6112d8426228de80612294565b81106113385760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74206265206d6f7265207468616e203331206461797320696e207460448201526868652066757475726560b81b606482015260840161078f565b6001600160a01b039091166000908152600c6020526040902055565b6000546001600160a01b0316331461137e5760405162461bcd60e51b815260040161078f906121ef565b600655565b6000546001600160a01b031633146113ad5760405162461bcd60e51b815260040161078f906121ef565b60018360ff16101580156113c5575060068360ff1611155b6114215760405162461bcd60e51b815260206004820152602760248201527f4c697175696469747920666565206d757374206265206265747765656e20312560448201526620616e6420362560c81b606482015260840161078f565b60018260ff16101580156114395750600f8260ff1611155b6114935760405162461bcd60e51b815260206004820152602560248201527f52657761726420666565206d757374206265206265747765656e20312520616e604482015264642031352560d81b606482015260840161078f565b60028160ff1611156114fa5760405162461bcd60e51b815260206004820152602a60248201527f446973747269627574696f6e20666565206d757374206265206265747765656e60448201526920302520616e6420322560b01b606482015260840161078f565b600f8161150784866122ac565b61151191906122ac565b60ff1611156115625760405162461bcd60e51b815260206004820152601c60248201527f546f74616c20666565732063616e6e6f74206578636565642031352500000000604482015260640161078f565b6002805460ff8481166201000090810262ff00001988841661010090810261ffff1990961685891617959095171617938490556115a69392830482169204166122ac565b600260036101000a81548160ff021916908360ff160217905550505050565b6001600160a01b0383166116275760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161078f565b6001600160a01b0382166116885760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161078f565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166117555760405162461bcd60e51b815260206004820152602d60248201527f5472616e736665722066726f6d20746865207a65726f2061646472657373206960448201526c1cc81b9bdd08185b1b1bddd959609a1b606482015260840161078f565b6001600160a01b0382166117bf5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220746f20746865207a65726f20616464726573732069732060448201526a1b9bdd08185b1b1bddd95960aa1b606482015260840161078f565b600081116118215760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b606482015260840161078f565b6001600160a01b03831660009081526012602052604090205460ff1615801561186357506001600160a01b03821660009081526012602052604090205460ff16155b156118ce576011548111156118ce5760405162461bcd60e51b815260206004820152602b60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61786960448201526a1b5d5b48185b1b1bddd95960aa1b606482015260840161078f565b6118d88383611a47565b6118ea6118e483610c72565b82610d51565b6001600160a01b0383166000908152600c602052604081208054909190611912908490612294565b9091555061192490506118e484610c72565b6001600160a01b0384166000908152600c60205260408120805490919061194c908490612294565b90915550600090508061195f8585611b29565b90925090506000606461197284866123df565b61197c91906122d1565b90506000606461198c84876123df565b61199691906122d1565b90506000816119a584886123fe565b6119af91906123fe565b90506119be8888888686611bba565b82600760008282546119d09190612294565b9250508190555081600860008282546119e99190612294565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611a3591815260200190565b60405180910390a35050505050505050565b60055460ff16611a55575050565b6000611a6030610c72565b9050620186a0611a726009600a612334565b611a839066038d7ea4c680006123df565b611a8d91906122d1565b8110611b2457620186a0611aa36009600a612334565b611ab49066038d7ea4c680006123df565b611abe91906122d1565b9050601154811115611acf57506011545b60006001600160a01b03841630148015611af657506015546001600160a01b038481169116145b905080158015611b1457506015546001600160a01b03858116911614155b15611b2257611b2282611caf565b505b505050565b6000806000600560019054906101000a900460ff168015611b6357506001600160a01b0385166000908152600b602052604090205460ff16155b8015611b8857506001600160a01b0384166000908152600b602052604090205460ff16155b90508015611baa57505060025460ff8082169250630100000090910416611bb3565b60008092509250505b9250929050565b6000611bc46111c5565b90506000611bd282866123df565b90506000611be083866123df565b90506000611bee84866123df565b9050600081611bfd84866123fe565b611c0791906123fe565b6001600160a01b038b16600090815260036020526040812080549293508692909190611c349084906123fe565b90915550506001600160a01b03891660009081526003602052604081208054839290611c61908490612294565b90915550503060009081526003602052604081208054849290611c85908490612294565b9250508190555082600e6000828254611c9e91906123fe565b909155505050505050505050505050565b60025460009060ff63010000008204811691611cd29161010090910416846123df565b611cdc91906122d1565b90506000611cea82846123fe565b90506000611cf96002846122d1565b9050806000611d088285612294565b90506000611d1582611e77565b9050600082611d2486846123df565b611d2e91906122d1565b6014549091506000906001600160a01b031663f305d7198330888580611d5c6000546001600160a01b031690565b611d6842610168612294565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c4016060604051808303818588803b158015611dd057600080fd5b505af1158015611de4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e09919061212d565b509150508060096000828254611e1f9190612294565b90915550506040805185815260208101859052908101869052606081018390527f1073c37866404dc5ccf364f61b6850f80619085a9a66bb67b4a9681c2ac614589060800160405180910390a1505050505050505050565b6040805160028082526060820183526000924792849290916020830190803683370190505090503081600081518110611ec057634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601454604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611f1457600080fd5b505afa158015611f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f4c9190612035565b81600181518110611f6d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526014541663791ac9478560008430611f9d42610168612294565b6040518663ffffffff1660e01b8152600401611fbd959493929190612224565b600060405180830381600087803b158015611fd757600080fd5b505af1158015611feb573d6000803e3d6000fd5b505050508147611ffb91906123fe565b949350505050565b803560ff8116811461201457600080fd5b919050565b60006020828403121561202a578081fd5b8135610ca48161242b565b600060208284031215612046578081fd5b8151610ca48161242b565b60008060408385031215612063578081fd5b823561206e8161242b565b9150602083013561207e8161242b565b809150509250929050565b60008060006060848603121561209d578081fd5b83356120a88161242b565b925060208401356120b88161242b565b929592945050506040919091013590565b600080604083850312156120db578182fd5b82356120e68161242b565b946020939093013593505050565b600060208284031215612105578081fd5b5035919050565b6000806040838503121561211e578182fd5b50508035926020909101359150565b600080600060608486031215612141578283fd5b8351925060208401519150604084015190509250925092565b60008060006060848603121561216e578283fd5b61217784612003565b925061218560208501612003565b915061219360408501612003565b90509250925092565b6000602080835283518082850152825b818110156121c8578581018301518582016040015282016121ac565b818111156121d95783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156122735784516001600160a01b03168352938301939183019160010161224e565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156122a7576122a7612415565b500190565b600060ff821660ff84168060ff038211156122c9576122c9612415565b019392505050565b6000826122ec57634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561232c57816000190482111561231257612312612415565b8085161561231f57918102915b93841c93908002906122f6565b509250929050565b6000610ca460ff84168360008261234d5750600161075f565b8161235a5750600061075f565b8160018114612370576002811461237a57612396565b600191505061075f565b60ff84111561238b5761238b612415565b50506001821b61075f565b5060208310610133831016604e8410600b84101617156123b9575081810a61075f565b6123c383836122f1565b80600019048211156123d7576123d7612415565b029392505050565b60008160001904831182151516156123f9576123f9612415565b500290565b60008282101561241057612410612415565b500390565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461244057600080fd5b5056fea2646970667358221220324b4f3c57dabab275c37e87e2e9de97d78811f5fb5350de43cfdcdadbecfd9464736f6c634300080400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657200000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

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

00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e

-----Decoded View---------------
Arg [0] : routerAddress (address): 0x10ed43c718714eb63d5aa57b78b54704e256024e

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e


Deployed ByteCode Sourcemap

14870:22821:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35879:83;;;;;;;;;;-1:-1:-1;35952:5:0;;;;;;;;;;;;-1:-1:-1;;;35952:5:0;;;;35879:83;;;;;;;:::i;:::-;;;;;;;;21679:147;;;;;;;;;;-1:-1:-1;21679:147:0;;;;;:::i;:::-;;:::i;:::-;;;4877:14:1;;4870:22;4852:41;;4840:2;4825:18;21679:147:0;4807:92:1;37519:81:0;;;;;;;;;;-1:-1:-1;37582:13:0;;;;;;;37519:81;;20704:178;;;;;;;;;;;;;:::i;:::-;;36063:91;;;;;;;;;;;;;:::i;:::-;;;13473:25:1;;;13461:2;13446:18;36063:91:0;13428:76:1;31390:706:0;;;;;;;;;;-1:-1:-1;31390:706:0;;;;;:::i;:::-;;:::i;21376:295::-;;;;;;;;;;-1:-1:-1;21376:295:0;;;;;:::i;:::-;;:::i;32540:252::-;;;;;;;;;;;;;:::i;36162:83::-;;;;;;;;;;-1:-1:-1;36162:83:0;;15158:1;15035:36:1;;15023:2;15008:18;36162:83:0;14990:87:1;37431:83:0;;;;;;;;;;-1:-1:-1;37495:14:0;;;;37431:83;;36725:99;;;;;;;;;;-1:-1:-1;36801:18:0;;-1:-1:-1;;;;;36801:18:0;36725:99;;;-1:-1:-1;;;;;3397:32:1;;;3379:51;;3367:2;3352:18;36725:99:0;3334:102:1;32799:201:0;;;;;;;;;;-1:-1:-1;32799:201:0;;;;;:::i;:::-;;:::i;36928:175::-;;;;;;;;;;;;;:::i;37110:90::-;;;;;;;;;;-1:-1:-1;37179:16:0;;37110:90;;33223:321;;;;;;;;;;-1:-1:-1;33223:321:0;;;;;:::i;:::-;;:::i;36831:90::-;;;;;;;;;;-1:-1:-1;36900:16:0;;36831:90;;34425:183;;;;;;;;;;-1:-1:-1;34425:183:0;;;;;:::i;:::-;;:::i;20889:318::-;;;;;;;;;;-1:-1:-1;20889:318:0;;;;;:::i;:::-;;:::i;6110:187::-;;;;;;;;;;;;;:::i;35169:114::-;;;;;;;;;;-1:-1:-1;35250:28:0;;35169:114;;37205:120;;;;;;;;;;-1:-1:-1;37289:31:0;;37205:120;;36253:100;;;;;;;;;;-1:-1:-1;36327:21:0;;36253:100;;36610:108;;;;;;;;;;-1:-1:-1;36688:25:0;;-1:-1:-1;;;;;36688:25:0;36610:108;;5459:87;;;;;;;;;;-1:-1:-1;5505:7:0;5532:6;-1:-1:-1;;;;;5532:6:0;5459:87;;30282:1101;;;;;;;;;;-1:-1:-1;30282:1101:0;;;;;:::i;:::-;;:::i;35969:87::-;;;;;;;;;;-1:-1:-1;36044:7:0;;;;;;;;;;;;-1:-1:-1;;;36044:7:0;;;;35969:87;;35290:124;;;;;;;;;;-1:-1:-1;35376:33:0;;35290:124;;33007:211;;;;;;;;;;-1:-1:-1;33007:211:0;;;;;:::i;:::-;;:::i;21215:153::-;;;;;;;;;;-1:-1:-1;21215:153:0;;;;;:::i;:::-;;:::i;35617:132::-;;;;;;;;;;-1:-1:-1;35617:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;35710:34:0;35689:7;35710:34;;;:23;:34;;;;;;;35617:132;28954:1155;;;;;;;;;;;;;:::i;25450:201::-;;;;;;;;;;;;;:::i;36503:100::-;;;;;;;;;;-1:-1:-1;36577:21:0;;36503:100;;35421:189;;;;;;;;;;-1:-1:-1;35421:189:0;;;;;:::i;:::-;;:::i;35756:116::-;;;;;;;;;;-1:-1:-1;35756:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;35841:26:0;35820:7;35841:26;;;:15;:26;;;;;;;35756:116;34730:297;;;;;;;;;;-1:-1:-1;34730:297:0;;;;;:::i;:::-;;:::i;36361:134::-;;;;;;;;;;-1:-1:-1;36361:134:0;;;;;:::i;:::-;-1:-1:-1;;;;;36463:18:0;;;36442:7;36463:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;36361:134;35032:130;;;;;;;;;;-1:-1:-1;35032:130:0;;;;;:::i;:::-;;:::i;37332:94::-;;;;;;;;;;-1:-1:-1;16509:6:0;37332:94;;33667:655;;;;;;;;;;-1:-1:-1;33667:655:0;;;;;:::i;:::-;;:::i;21679:147::-;21754:4;21765:40;4135:10;21789:7;21798:6;21765:9;:40::i;:::-;-1:-1:-1;21817:4:0;21679:147;;;;;:::o;20704:178::-;5505:7;5532:6;-1:-1:-1;;;;;5532:6:0;4135:10;5679:23;5671:68;;;;-1:-1:-1;;;5671:68:0;;;;;;;:::i;:::-;;;;;;;;;20746:14:::1;:21:::0;;-1:-1:-1;;20772:20:0;;;;;20797:24:::1;20817:3;20797:19;:24::i;:::-;20704:178::o:0;36063:91::-;36116:7;15632:13;15158:1;15632:2;:13;:::i;:::-;15613:32;;:16;:32;:::i;:::-;36130:19;;36063:91;:::o;31390:706::-;31458:7;31472:21;31496:25;:23;:25::i;:::-;31472:49;;31528:15;31546:20;31556:9;31546;:20::i;:::-;31528:38;-1:-1:-1;31590:21:0;31571:15;31764:13;31744:17;31528:38;31590:21;31744:17;:::i;:::-;:33;;;;:::i;:::-;31727:50;;31878:33;;31868:7;:43;31864:208;;;31923:23;31949:29;35250:28;;;35169:114;31949:29;31923:55;-1:-1:-1;31998:24:0;31923:55;31998:6;:24;:::i;:::-;31988:7;:34;31984:83;;;32035:25;32045:15;32035:25;;:::i;:::-;;;31984:83;31864:208;;32085:6;31390:706;-1:-1:-1;;;;;31390:706:0:o;21376:295::-;21474:4;21485:37;21496:6;21504:9;21515:6;21485:10;:37::i;:::-;-1:-1:-1;;;;;21559:19:0;;;;;;:11;:19;;;;;;;;4135:10;21559:33;;;;;;;;;21527:75;;21537:6;;21559:42;;21595:6;;21559:42;:::i;:::-;21527:9;:75::i;:::-;-1:-1:-1;21662:4:0;21376:295;;;;;:::o;32540:252::-;32588:7;32602:15;32620:24;32638:4;32620:9;:24::i;:::-;32602:42;-1:-1:-1;16357:6:0;15632:13;15158:1;15632:2;:13;:::i;:::-;15613:32;;:16;:32;:::i;:::-;16342:21;;;;:::i;:::-;32653:7;:29;32649:96;;;32738:1;32731:8;;;32540:252;:::o;32649:96::-;32780:7;16357:6;15632:13;15158:1;15632:2;:13;:::i;:::-;15613:32;;:16;:32;:::i;:::-;16342:21;;;;:::i;:::-;32758:29;;;;:::i;:::-;32751:36;;;32540:252;:::o;32799:201::-;4135:10;32887:4;32931:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;32931:34:0;;;;;;;;;;32887:4;;32898:81;;32922:7;;32931:47;;32968:10;;32931:47;:::i;36928:175::-;37079:18;;36984:7;;37069:29;;-1:-1:-1;;;;;37079:18:0;37069:9;:29::i;:::-;37044:22;16197:42;37044:9;:22::i;:::-;37020:21;37038:1;37020:9;:21::i;:::-;15632:13;15158:1;15632:2;:13;:::i;:::-;15613:32;;:16;:32;:::i;:::-;37005:36;;;;:::i;:::-;:61;;;;:::i;:::-;:93;;;;:::i;33223:321::-;5505:7;5532:6;-1:-1:-1;;;;;5532:6:0;4135:10;5679:23;5671:68;;;;-1:-1:-1;;;5671:68:0;;;;;;;:::i;:::-;33298:25:::1;:41:::0;;-1:-1:-1;;;;;33298:41:0;::::1;-1:-1:-1::0;;;;;;33298:41:0;;::::1;::::0;::::1;::::0;;;33345:20:::1;:66:::0;;;;::::1;::::0;::::1;::::0;;33453:30:::1;::::0;;-1:-1:-1;;;33453:30:0;;;;:28:::1;::::0;:30:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;33298:41;33453:30;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;33437:58:0::1;;33504:4;33511:20;;;;;;;;;-1:-1:-1::0;;;;;33511:20:0::1;-1:-1:-1::0;;;;;33511:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33437:102;::::0;-1:-1:-1;;;;;;33437:102:0::1;::::0;;;;;;-1:-1:-1;;;;;3671:15:1;;;33437:102:0::1;::::0;::::1;3653:34:1::0;3723:15;;3703:18;;;3696:43;3588:18;;33437:102:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33416:18;:123:::0;;-1:-1:-1;;;;;;33416:123:0::1;-1:-1:-1::0;;;;;33416:123:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;33223:321:0:o;34425:183::-;5505:7;5532:6;-1:-1:-1;;;;;5532:6:0;4135:10;5679:23;5671:68;;;;-1:-1:-1;;;5671:68:0;;;;;;;:::i;:::-;34508:3:::1;34499:5;:12;;34491:63;;;::::0;-1:-1:-1;;;34491:63:0;;7300:2:1;34491:63:0::1;::::0;::::1;7282:21:1::0;7339:2;7319:18;;;7312:30;7378:34;7358:18;;;7351:62;-1:-1:-1;;;7429:18:1;;;7422:36;7475:19;;34491:63:0::1;7272:228:1::0;34491:63:0::1;34598:5:::0;15632:13:::1;15158:1;15632:2;:13;:::i;:::-;15613:32;::::0;:16:::1;:32;:::i;:::-;34583:20;;;;:::i;:::-;34559:21;:44:::0;-1:-1:-1;34425:183:0:o;20889:318::-;20955:7;21108:19;21131:27;:25;:27::i;:::-;-1:-1:-1;;;;;21170:18:0;;;;;;:9;:18;;;;;;21108:50;;-1:-1:-1;21170:32:0;;21108:50;;21170:32;:::i;:::-;21163:39;20889:318;-1:-1:-1;;;20889:318:0:o;6110:187::-;5505:7;5532:6;-1:-1:-1;;;;;5532:6:0;4135:10;5679:23;5671:68;;;;-1:-1:-1;;;5671:68:0;;;;;;;:::i;:::-;6217:1:::1;6201:6:::0;;6180:40:::1;::::0;-1:-1:-1;;;;;6201:6:0;;::::1;::::0;6180:40:::1;::::0;6217:1;;6180:40:::1;6252:6;::::0;;-1:-1:-1;;;;;6252:6:0::1;32322:41:::0;;:26;:41;;;;;;;;:49;;-1:-1:-1;;32322:49:0;;;;;;32376:38;:53;;;;;:61;;;;;;;6270:19;;-1:-1:-1;;;;;;6270:19:0::1;::::0;;6110:187::o;30282:1101::-;30375:7;16509:6;30440:12;30436:446;;30848:28;30866:10;30848:15;:28;:::i;:::-;30841:35;;;;;30436:446;30888:12;30918:7;30903:12;:6;30912:3;30903:12;:::i;:::-;:22;;;;:::i;:::-;30888:37;;31057:30;;31049:4;:38;31045:319;;31189:17;31229:3;31209:17;31222:4;31209:10;:17;:::i;:::-;:23;;;;:::i;:::-;31189:43;;31287:10;31274:9;:23;31270:65;;-1:-1:-1;31318:10:0;31270:65;31349:9;-1:-1:-1;31342:16:0;;-1:-1:-1;;31342:16:0;31045:319;-1:-1:-1;31377:1:0;;30282:1101;-1:-1:-1;;;;30282:1101:0:o;33007:211::-;4135:10;33100:4;33144:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;33144:34:0;;;;;;;;;;33100:4;;33111:86;;33135:7;;33144:52;;33181:15;;33144:52;:::i;21215:153::-;21293:4;21304:43;4135:10;21329:9;21340:6;21304:10;:43::i;28954:1155::-;14763:9;14776:10;14763:23;14755:47;;;;-1:-1:-1;;;14755:47:0;;11585:2:1;14755:47:0;;;11567:21:1;11624:2;11604:18;;;11597:30;-1:-1:-1;;;11643:18:1;;;11636:41;11694:18;;14755:47:0;11557:161:1;14755:47:0;13778:1:::1;14375:7;;:19;;14367:63;;;::::0;-1:-1:-1;;;14367:63:0;;13169:2:1;14367:63:0::1;::::0;::::1;13151:21:1::0;13208:2;13188:18;;;13181:30;13247:33;13227:18;;;13220:61;13298:18;;14367:63:0::1;13141:181:1::0;14367:63:0::1;13778:1;14508:7;:18:::0;29042:10:::2;29018:35;::::0;;;:23:::2;:35;::::0;;;;;29057:15:::2;-1:-1:-1::0;29018:54:0::2;29010:113;;;::::0;-1:-1:-1;;;29010:113:0;;6528:2:1;29010:113:0::2;::::0;::::2;6510:21:1::0;6567:2;6547:18;;;6540:30;6606:34;6586:18;;;6579:62;-1:-1:-1;;;6657:18:1;;;6650:44;6711:19;;29010:113:0::2;6500:236:1::0;29010:113:0::2;29161:1;29136:21;29146:10;29136:9;:21::i;:::-;:26;;29128:88;;;::::0;-1:-1:-1;;;29128:88:0;;12751:2:1;29128:88:0::2;::::0;::::2;12733:21:1::0;12790:2;12770:18;;;12763:30;12829:34;12809:18;;;12802:62;-1:-1:-1;;;12880:18:1;;;12873:47;12937:19;;29128:88:0::2;12723:239:1::0;29128:88:0::2;29223:14;29240:30;29259:10;29240:18;:30::i;:::-;29223:47;;18267:7;29327:6;:27;29323:327;;29427:21;29481:3;29451:27;18458:2;29451:6:::0;:27:::2;:::i;:::-;:33;;;;:::i;:::-;29509:48;::::0;29427:57;;-1:-1:-1;29491:12:0::2;::::0;18112:42:::2;::::0;29427:57;;29491:12;29509:48;29491:12;29509:48;29427:57;18112:42;29509:48:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29490:67;;;29571:7;29563:46;;;::::0;-1:-1:-1;;;29563:46:0;;10414:2:1;29563:46:0::2;::::0;::::2;10396:21:1::0;10453:2;10433:18;;;10426:30;10492:28;10472:18;;;10465:56;10538:18;;29563:46:0::2;10386:176:1::0;29563:46:0::2;29621:23;29631:13:::0;29621:23;::::2;:::i;:::-;;;29323:327;;;29754:37;16509:6:::0;29754:15:::2;:37;:::i;:::-;29740:10;29716:35;::::0;;;:23:::2;:35;::::0;;;;;;;:75;;;;29796:15:::2;:27:::0;;;;;:37;;29827:6;;29716:35;29796:37:::2;::::0;29827:6;;29796:37:::2;:::i;:::-;;;;;;;;29858:6;29838:16;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;29908:10:0::2;29928:35;::::0;;;:23:::2;:35;::::0;;;;;;;;;29897:67;;4564:51:1;;;4631:18;;;4624:34;;;4674:18;;;4667:34;29897:67:0;::::2;::::0;;;;4552:2:1;29897:67:0;;::::2;30022:35;::::0;30008:9:::2;::::0;30022:10:::2;::::0;30046:6;;30008:9;30022:35;30008:9;30022:35;30046:6;30022:10;:35:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30007:50;;;30070:4;30062:42;;;::::0;-1:-1:-1;;;30062:42:0;;8932:2:1;30062:42:0::2;::::0;::::2;8914:21:1::0;8971:2;8951:18;;;8944:30;9010:27;8990:18;;;8983:55;9055:18;;30062:42:0::2;8904:175:1::0;30062:42:0::2;-1:-1:-1::0;;13734:1:0::1;14687:22:::0;;28954:1155::o;25450:201::-;25507:7;15632:13;15158:1;15632:2;:13;:::i;:::-;15613:32;;:16;:32;:::i;:::-;25525:27;;:42;25521:68;;;-1:-1:-1;25582:1:0;;25450:201::o;25521:68::-;15632:13;15158:1;15632:2;:13;:::i;:::-;15613:32;;:16;:32;:::i;:::-;25604:27;;:42;;;;:::i;35421:189::-;5505:7;5532:6;-1:-1:-1;;;;;5532:6:0;4135:10;5679:23;5671:68;;;;-1:-1:-1;;;5671:68:0;;;;;;;:::i;:::-;35518:33:::1;:45:::0;;;;35568:28:::1;:37:::0;35421:189::o;34730:297::-;5505:7;5532:6;-1:-1:-1;;;;;5532:6:0;4135:10;5679:23;5671:68;;;;-1:-1:-1;;;5671:68:0;;;;;;;:::i;:::-;34835:15:::1;34828:4;:22;34820:63;;;::::0;-1:-1:-1;;;34820:63:0;;6943:2:1;34820:63:0::1;::::0;::::1;6925:21:1::0;6982:2;6962:18;;;6955:30;7021;7001:18;;;6994:58;7069:18;;34820:63:0::1;6915:178:1::0;34820:63:0::1;34903:25;:15;34921:7;34903:25;:::i;:::-;34896:4;:32;34888:86;;;::::0;-1:-1:-1;;;34888:86:0;;9643:2:1;34888:86:0::1;::::0;::::1;9625:21:1::0;9682:2;9662:18;;;9655:30;9721:34;9701:18;;;9694:62;-1:-1:-1;;;9772:18:1;;;9765:39;9821:19;;34888:86:0::1;9615:231:1::0;34888:86:0::1;-1:-1:-1::0;;;;;34981:34:0;;::::1;;::::0;;;:23:::1;:34;::::0;;;;:41;34730:297::o;35032:130::-;5505:7;5532:6;-1:-1:-1;;;;;5532:6:0;4135:10;5679:23;5671:68;;;;-1:-1:-1;;;5671:68:0;;;;;;;:::i;:::-;35115:30:::1;:42:::0;35032:130::o;33667:655::-;5505:7;5532:6;-1:-1:-1;;;;;5532:6:0;4135:10;5679:23;5671:68;;;;-1:-1:-1;;;5671:68:0;;;;;;;:::i;:::-;33793:1:::1;33777:12;:17;;;;:38;;;;;33814:1;33798:12;:17;;;;33777:38;33769:90;;;::::0;-1:-1:-1;;;33769:90:0;;8524:2:1;33769:90:0::1;::::0;::::1;8506:21:1::0;8563:2;8543:18;;;8536:30;8602:34;8582:18;;;8575:62;-1:-1:-1;;;8653:18:1;;;8646:37;8700:19;;33769:90:0::1;8496:229:1::0;33769:90:0::1;33885:1;33872:9;:14;;;;:33;;;;;33903:2;33890:9;:15;;;;33872:33;33864:83;;;::::0;-1:-1:-1;;;33864:83:0;;11179:2:1;33864:83:0::1;::::0;::::1;11161:21:1::0;11218:2;11198:18;;;11191:30;11257:34;11237:18;;;11230:62;-1:-1:-1;;;11308:18:1;;;11301:35;11353:19;;33864:83:0::1;11151:227:1::0;33864:83:0::1;34003:1;33984:15;:20;;;;33952:99;;;::::0;-1:-1:-1;;;33952:99:0;;6117:2:1;33952:99:0::1;::::0;::::1;6099:21:1::0;6156:2;6136:18;;;6129:30;6195:34;6175:18;;;6168:62;-1:-1:-1;;;6246:18:1;;;6239:40;6296:19;;33952:99:0::1;6089:232:1::0;33952:99:0::1;34110:2;34091:15:::0;34064:24:::1;34079:9:::0;34064:12;:24:::1;:::i;:::-;:42;;;;:::i;:::-;:48;;;;34056:89;;;::::0;-1:-1:-1;;;34056:89:0;;9286:2:1;34056:89:0::1;::::0;::::1;9268:21:1::0;9325:2;9305:18;;;9298:30;9364;9344:18;;;9337:58;9412:18;;34056:89:0::1;9258:178:1::0;34056:89:0::1;34152:16;:34:::0;;::::1;34224:22:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;34191:28:0;;::::1;34152:34;34191:28:::0;;::::1;-1:-1:-1::0;;34191:28:0;;;34152:34;;::::1;34191:28:::0;;;;::::1;34224:22;;::::0;;;;34290:26:::1;::::0;34303:13;;::::1;::::0;::::1;::::0;34290:10:::1;;:26;:::i;:::-;34279:8;;:37;;;;;;;;;;;;;;;;;;33667:655:::0;;;:::o;24915:315::-;-1:-1:-1;;;;;25003:19:0;;24995:68;;;;-1:-1:-1;;;24995:68:0;;8119:2:1;24995:68:0;;;8101:21:1;8158:2;8138:18;;;8131:30;8197:34;8177:18;;;8170:62;-1:-1:-1;;;8248:18:1;;;8241:34;8292:19;;24995:68:0;8091:226:1;24995:68:0;-1:-1:-1;;;;;25076:21:0;;25068:68;;;;-1:-1:-1;;;25068:68:0;;5714:2:1;25068:68:0;;;5696:21:1;5753:2;5733:18;;;5726:30;5792:34;5772:18;;;5765:62;-1:-1:-1;;;5843:18:1;;;5836:32;5885:19;;25068:68:0;5686:224:1;25068:68:0;-1:-1:-1;;;;;25143:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25193:32;;13473:25:1;;;25193:32:0;;13446:18:1;25193:32:0;;;;;;;24915:315;;;:::o;21835:1849::-;-1:-1:-1;;;;;21927:20:0;;21919:78;;;;-1:-1:-1;;;21919:78:0;;12337:2:1;21919:78:0;;;12319:21:1;12376:2;12356:18;;;12349:30;12415:34;12395:18;;;12388:62;-1:-1:-1;;;12466:18:1;;;12459:43;12519:19;;21919:78:0;12309:235:1;21919:78:0;-1:-1:-1;;;;;22010:23:0;;22002:79;;;;-1:-1:-1;;;22002:79:0;;7707:2:1;22002:79:0;;;7689:21:1;7746:2;7726:18;;;7719:30;7785:34;7765:18;;;7758:62;-1:-1:-1;;;7836:18:1;;;7829:41;7887:19;;22002:79:0;7679:233:1;22002:79:0;22103:1;22094:6;:10;22086:64;;;;-1:-1:-1;;;22086:64:0;;10769:2:1;22086:64:0;;;10751:21:1;10808:2;10788:18;;;10781:30;10847:34;10827:18;;;10820:62;-1:-1:-1;;;10898:18:1;;;10891:39;10947:19;;22086:64:0;10741:231:1;22086:64:0;-1:-1:-1;;;;;22213:46:0;;;;;;:38;:46;;;;;;;;22212:47;:101;;;;-1:-1:-1;;;;;;22264:49:0;;;;;;:38;:49;;;;;;;;22263:50;22212:101;22208:206;;;22339:21;;22329:6;:31;;22321:87;;;;-1:-1:-1;;;22321:87:0;;11925:2:1;22321:87:0;;;11907:21:1;11964:2;11944:18;;;11937:30;12003:34;11983:18;;;11976:62;-1:-1:-1;;;12054:18:1;;;12047:41;12105:19;;22321:87:0;11897:233:1;22321:87:0;22617:38;22637:6;22645:9;22617:19;:38::i;:::-;22874:59;22904:20;22914:9;22904;:20::i;:::-;22926:6;22874:29;:59::i;:::-;-1:-1:-1;;;;;22836:34:0;;;;;;:23;:34;;;;;:97;;:34;;;:97;;;;;:::i;:::-;;;;-1:-1:-1;22973:56:0;;-1:-1:-1;23003:17:0;23013:6;23003:9;:17::i;22973:56::-;-1:-1:-1;;;;;22938:31:0;;;;;;:23;:31;;;;;:91;;:31;;;:91;;;;;:::i;:::-;;;;-1:-1:-1;23081:27:0;;-1:-1:-1;23081:27:0;23133:36;23151:6;23159:9;23133:17;:36::i;:::-;23080:89;;-1:-1:-1;23080:89:0;-1:-1:-1;23178:26:0;23238:3;23207:28;23080:89;23207:6;:28;:::i;:::-;:34;;;;:::i;:::-;23178:63;-1:-1:-1;23246:18:0;23290:3;23267:20;23276:11;23267:6;:20;:::i;:::-;:26;;;;:::i;:::-;23246:47;-1:-1:-1;23298:22:0;23246:47;23323:27;23332:18;23323:6;:27;:::i;:::-;:40;;;;:::i;:::-;23298:65;;23392:73;23407:6;23415:9;23426:6;23434:18;23454:10;23392:14;:73::i;:::-;23570:18;23545:21;;:43;;;;;;;:::i;:::-;;;;;;;;23613:10;23593:16;;:30;;;;;;;:::i;:::-;;;;;;;;23652:9;-1:-1:-1;;;;;23635:43:0;23644:6;-1:-1:-1;;;;;23635:43:0;;23663:14;23635:43;;;;13473:25:1;;13461:2;13446:18;;13428:76;23635:43:0;;;;;;;;21835:1849;;;;;;;;:::o;25978:803::-;26060:14;;;;26055:39;;25978:803;;:::o;26055:39::-;26161:30;26194:24;26212:4;26194:9;:24::i;:::-;26161:57;-1:-1:-1;16357:6:0;15632:13;15158:1;15632:2;:13;:::i;:::-;15613:32;;:16;:32;:::i;:::-;16342:21;;;;:::i;:::-;26227:22;:45;26223:554;;16357:6;15632:13;15158:1;15632:2;:13;:::i;:::-;15613:32;;:16;:32;:::i;:::-;16342:21;;;;:::i;:::-;26333:44;;26412:21;;26387:22;:46;26383:116;;;-1:-1:-1;26471:21:0;;26383:116;26572:25;-1:-1:-1;;;;;26600:23:0;;26618:4;26600:23;:58;;;;-1:-1:-1;26640:18:0;;-1:-1:-1;;;;;26627:31:0;;;26640:18;;26627:31;26600:58;26572:86;;26669:20;26668:21;:53;;;;-1:-1:-1;26703:18:0;;-1:-1:-1;;;;;26693:28:0;;;26703:18;;26693:28;;26668:53;26664:108;;;26730:35;26742:22;26730:11;:35::i;:::-;26223:554;;25978:803;;;:::o;25659:311::-;25742:7;25751;25765:14;25782:13;;;;;;;;;;;:52;;;;-1:-1:-1;;;;;;25800:34:0;;;;;;:26;:34;;;;;;;;25799:35;25782:52;:94;;;;-1:-1:-1;;;;;;25839:37:0;;;;;;:26;:37;;;;;;;;25838:38;25782:94;25765:111;;25885:9;25881:65;;;-1:-1:-1;;25913:16:0;;;;;;;-1:-1:-1;25931:8:0;;;;;25905:35;;25881:65;25960:1;25963;25952:13;;;;;25659:311;;;;;;:::o;23691:1216::-;24001:19;24023:27;:25;:27::i;:::-;24001:49;-1:-1:-1;24101:18:0;24122:20;24001:49;24122:6;:20;:::i;:::-;24101:41;-1:-1:-1;24202:27:0;24232:32;24253:11;24232:18;:32;:::i;:::-;24202:62;-1:-1:-1;24269:19:0;24291:24;24304:11;24291:10;:24;:::i;:::-;24269:46;-1:-1:-1;24320:22:0;24269:46;24345:32;24358:19;24345:10;:32;:::i;:::-;:46;;;;:::i;:::-;-1:-1:-1;;;;;24420:17:0;;;;;;:9;:17;;;;;:31;;24320:71;;-1:-1:-1;24441:10:0;;24420:17;;;:31;;24441:10;;24420:31;:::i;:::-;;;;-1:-1:-1;;;;;;;24456:20:0;;;;;;:9;:20;;;;;:38;;24480:14;;24456:20;:38;;24480:14;;24456:38;:::i;:::-;;;;-1:-1:-1;;24548:4:0;24530:24;;;;:9;:24;;;;;:39;;24558:11;;24530:24;:39;;24558:11;;24530:39;:::i;:::-;;;;;;;;24737:19;24706:27;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;;23691:1216:0:o;26789:1521::-;27067:8;;27005:34;;27067:8;;;;;;;27042:22;;27067:8;27051:13;;;;27042:6;:22;:::i;:::-;:33;;;;:::i;:::-;27005:70;-1:-1:-1;27080:31:0;27114:35;27005:70;27114:6;:35;:::i;:::-;27080:69;-1:-1:-1;27290:32:0;27325:30;27354:1;27325:26;:30;:::i;:::-;27290:65;-1:-1:-1;27290:65:0;27360:30;27506:50;27290:65;27506:23;:50;:::i;:::-;27483:73;;27561:18;27582:30;27599:12;27582:16;:30::i;:::-;27561:51;-1:-1:-1;27815:31:0;27889:12;27849:37;27862:24;27561:51;27849:37;:::i;:::-;:52;;;;:::i;:::-;27937:20;;27815:86;;-1:-1:-1;27908:24:0;;-1:-1:-1;;;;;27937:20:0;:36;27815:86;28014:4;28021:22;27908:24;;28051:7;5505;5532:6;-1:-1:-1;;;;;5532:6:0;;5459:87;28051:7;28060:21;:15;28078:3;28060:21;:::i;:::-;27937:145;;;;;;-1:-1:-1;;;;;;27937:145:0;;;-1:-1:-1;;;;;4109:15:1;;;27937:145:0;;;4091:34:1;4141:18;;;4134:34;;;;4184:18;;;4177:34;;;;4227:18;;;4220:34;;;;4291:15;;;4270:19;;;4263:44;4323:19;;;4316:35;;;;4025:19;;27937:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27906:176;;;;28190:19;28155:31;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;28223:82:0;;;14728:25:1;;;14784:2;14769:18;;14762:34;;;14812:18;;;14805:34;;;14870:2;14855:18;;14848:34;;;28223:82:0;;14715:3:1;14700:19;28223:82:0;;;;;;;26789:1521;;;;;;;;;:::o;28427:520::-;28620:16;;;28634:1;28620:16;;;;;;;;28491:7;;28530:21;;28491:7;;28620:16;;;;;;;;;;;;-1:-1:-1;28620:16:0;28596:40;;28659:4;28641;28646:1;28641:7;;;;;;-1:-1:-1;;;28641:7:0;;;;;;;;;-1:-1:-1;;;;;28641:23:0;;;:7;;;;;;;;;;:23;;;;28679:20;;:27;;;-1:-1:-1;;;28679:27:0;;;;:20;;;;;:25;;:27;;;;;28641:7;;28679:27;;;;;:20;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28669:4;28674:1;28669:7;;;;;;-1:-1:-1;;;28669:7:0;;;;;;;;;-1:-1:-1;;;;;28669:37:0;;;:7;;;;;;;;;:37;28724:20;;;:71;28796:11;28724:20;28812:4;28826;28833:21;:15;28851:3;28833:21;:::i;:::-;28724:131;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28928:14;28904:21;:38;;;;:::i;:::-;28897:45;28427:520;-1:-1:-1;;;;28427:520:0:o;14:156:1:-;80:20;;140:4;129:16;;119:27;;109:2;;160:1;157;150:12;109:2;61:109;;;:::o;175:257::-;234:6;287:2;275:9;266:7;262:23;258:32;255:2;;;308:6;300;293:22;255:2;352:9;339:23;371:31;396:5;371:31;:::i;437:261::-;507:6;560:2;548:9;539:7;535:23;531:32;528:2;;;581:6;573;566:22;528:2;618:9;612:16;637:31;662:5;637:31;:::i;703:398::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:2;;;853:6;845;838:22;800:2;897:9;884:23;916:31;941:5;916:31;:::i;:::-;966:5;-1:-1:-1;1023:2:1;1008:18;;995:32;1036:33;995:32;1036:33;:::i;:::-;1088:7;1078:17;;;790:311;;;;;:::o;1106:466::-;1183:6;1191;1199;1252:2;1240:9;1231:7;1227:23;1223:32;1220:2;;;1273:6;1265;1258:22;1220:2;1317:9;1304:23;1336:31;1361:5;1336:31;:::i;:::-;1386:5;-1:-1:-1;1443:2:1;1428:18;;1415:32;1456:33;1415:32;1456:33;:::i;:::-;1210:362;;1508:7;;-1:-1:-1;;;1562:2:1;1547:18;;;;1534:32;;1210:362::o;1577:325::-;1645:6;1653;1706:2;1694:9;1685:7;1681:23;1677:32;1674:2;;;1727:6;1719;1712:22;1674:2;1771:9;1758:23;1790:31;1815:5;1790:31;:::i;:::-;1840:5;1892:2;1877:18;;;;1864:32;;-1:-1:-1;;;1664:238:1:o;1907:190::-;1966:6;2019:2;2007:9;1998:7;1994:23;1990:32;1987:2;;;2040:6;2032;2025:22;1987:2;-1:-1:-1;2068:23:1;;1977:120;-1:-1:-1;1977:120:1:o;2102:258::-;2170:6;2178;2231:2;2219:9;2210:7;2206:23;2202:32;2199:2;;;2252:6;2244;2237:22;2199:2;-1:-1:-1;;2280:23:1;;;2350:2;2335:18;;;2322:32;;-1:-1:-1;2189:171:1:o;2365:316::-;2453:6;2461;2469;2522:2;2510:9;2501:7;2497:23;2493:32;2490:2;;;2543:6;2535;2528:22;2490:2;2577:9;2571:16;2561:26;;2627:2;2616:9;2612:18;2606:25;2596:35;;2671:2;2660:9;2656:18;2650:25;2640:35;;2480:201;;;;;:::o;2686:332::-;2757:6;2765;2773;2826:2;2814:9;2805:7;2801:23;2797:32;2794:2;;;2847:6;2839;2832:22;2794:2;2875:27;2892:9;2875:27;:::i;:::-;2865:37;;2921:36;2953:2;2942:9;2938:18;2921:36;:::i;:::-;2911:46;;2976:36;3008:2;2997:9;2993:18;2976:36;:::i;:::-;2966:46;;2784:234;;;;;:::o;4904:603::-;5016:4;5045:2;5074;5063:9;5056:21;5106:6;5100:13;5149:6;5144:2;5133:9;5129:18;5122:34;5174:4;5187:140;5201:6;5198:1;5195:13;5187:140;;;5296:14;;;5292:23;;5286:30;5262:17;;;5281:2;5258:26;5251:66;5216:10;;5187:140;;;5345:6;5342:1;5339:13;5336:2;;;5415:4;5410:2;5401:6;5390:9;5386:22;5382:31;5375:45;5336:2;-1:-1:-1;5491:2:1;5470:15;-1:-1:-1;;5466:29:1;5451:45;;;;5498:2;5447:54;;5025:482;-1:-1:-1;;;5025:482:1:o;9851:356::-;10053:2;10035:21;;;10072:18;;;10065:30;10131:34;10126:2;10111:18;;10104:62;10198:2;10183:18;;10025:182::o;13509:983::-;13771:4;13819:3;13808:9;13804:19;13850:6;13839:9;13832:25;13876:2;13914:6;13909:2;13898:9;13894:18;13887:34;13957:3;13952:2;13941:9;13937:18;13930:31;13981:6;14016;14010:13;14047:6;14039;14032:22;14085:3;14074:9;14070:19;14063:26;;14124:2;14116:6;14112:15;14098:29;;14145:4;14158:195;14172:6;14169:1;14166:13;14158:195;;;14237:13;;-1:-1:-1;;;;;14233:39:1;14221:52;;14328:15;;;;14293:12;;;;14269:1;14187:9;14158:195;;;-1:-1:-1;;;;;;;14409:32:1;;;;14404:2;14389:18;;14382:60;-1:-1:-1;;;14473:3:1;14458:19;14451:35;14370:3;13780:712;-1:-1:-1;;;13780:712:1:o;15082:128::-;15122:3;15153:1;15149:6;15146:1;15143:13;15140:2;;;15159:18;;:::i;:::-;-1:-1:-1;15195:9:1;;15130:80::o;15215:204::-;15253:3;15289:4;15286:1;15282:12;15321:4;15318:1;15314:12;15356:3;15350:4;15346:14;15341:3;15338:23;15335:2;;;15364:18;;:::i;:::-;15400:13;;15261:158;-1:-1:-1;;;15261:158:1:o;15424:217::-;15464:1;15490;15480:2;;-1:-1:-1;;;15515:31:1;;15569:4;15566:1;15559:15;15597:4;15522:1;15587:15;15480:2;-1:-1:-1;15626:9:1;;15470:171::o;15646:422::-;15735:1;15778:5;15735:1;15792:270;15813:7;15803:8;15800:21;15792:270;;;15872:4;15868:1;15864:6;15860:17;15854:4;15851:27;15848:2;;;15881:18;;:::i;:::-;15931:7;15921:8;15917:22;15914:2;;;15951:16;;;;15914:2;16030:22;;;;15990:15;;;;15792:270;;;15796:3;15710:358;;;;;:::o;16073:140::-;16131:5;16160:47;16201:4;16191:8;16187:19;16181:4;16267:5;16297:8;16287:2;;-1:-1:-1;16338:1:1;16352:5;;16287:2;16386:4;16376:2;;-1:-1:-1;16423:1:1;16437:5;;16376:2;16468:4;16486:1;16481:59;;;;16554:1;16549:130;;;;16461:218;;16481:59;16511:1;16502:10;;16525:5;;;16549:130;16586:3;16576:8;16573:17;16570:2;;;16593:18;;:::i;:::-;-1:-1:-1;;16649:1:1;16635:16;;16664:5;;16461:218;;16763:2;16753:8;16750:16;16744:3;16738:4;16735:13;16731:36;16725:2;16715:8;16712:16;16707:2;16701:4;16698:12;16694:35;16691:77;16688:2;;;-1:-1:-1;16800:19:1;;;16832:5;;16688:2;16879:34;16904:8;16898:4;16879:34;:::i;:::-;16949:6;16945:1;16941:6;16937:19;16928:7;16925:32;16922:2;;;16960:18;;:::i;:::-;16998:20;;16277:747;-1:-1:-1;;;16277:747:1:o;17029:168::-;17069:7;17135:1;17131;17127:6;17123:14;17120:1;17117:21;17112:1;17105:9;17098:17;17094:45;17091:2;;;17142:18;;:::i;:::-;-1:-1:-1;17182:9:1;;17081:116::o;17202:125::-;17242:4;17270:1;17267;17264:8;17261:2;;;17275:18;;:::i;:::-;-1:-1:-1;17312:9:1;;17251:76::o;17332:127::-;17393:10;17388:3;17384:20;17381:1;17374:31;17424:4;17421:1;17414:15;17448:4;17445:1;17438:15;17464:131;-1:-1:-1;;;;;17539:31:1;;17529:42;;17519:2;;17585:1;17582;17575:12;17519:2;17509:86;:::o

Swarm Source

ipfs://324b4f3c57dabab275c37e87e2e9de97d78811f5fb5350de43cfdcdadbecfd94
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.