Contract 0xa29e0ad37849e581ebd8ed13df443ae94eb938e6 1

Contract Overview

Phenix Finance: Referral Program
Balance:
4,063.277056336363969981 CRO

CRO Value:
$448.99 (@ $0.11/CRO)

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xfb7d863c1b361cbd0fbe4b0403e5579d20027a485671317e251e26d7d7756e55Claim Eth Reward...48567122022-09-29 11:21:5323 mins ago0x4c487dfb5b48d223d12c787fdb69432b69dbadbf IN  Phenix Finance: Referral Program0 CRO0.19926897920
0x3dc74e3731b1b189154a668596246f3a3902fba65343f6617db8d64634e64bf5Claim Eth Reward...48534932022-09-29 6:17:185 hrs 28 mins ago0x6638bf8a99111f1df8c95cf68a3e9997a1943658 IN  Phenix Finance: Referral Program0 CRO0.199335986069 4,910.116167932
0xcd5fff98e4d3737c04a82468dbcd2b7e25c06ac6754332f49caac675e36d9b06Swap Exact Eth F...48531652022-09-29 5:46:205 hrs 59 mins ago0x13b8136d36da43ed340ac7260ab8665264dce083 IN  Phenix Finance: Referral Program1,500 CRO1.7562053461410
0x0257a5f8c8dd82db261e42df17977557c09efd23c97772c7a126f08757b7fea7Claim Eth Reward...48527012022-09-29 5:02:336 hrs 43 mins ago0x58cf9b231aeef148e238df06394502667c9dcb4f IN  Phenix Finance: Referral Program0 CRO0.1992765913240
0xbe715ee3f90f302e5aa2c32b7e41017bbd6163655d0cbda7abe673dd2bd81bc7Swap Exact Eth F...48522832022-09-29 4:23:067 hrs 22 mins ago0xfb8e7d50a5057d68dc0469f058a6a364bd7b4ca6 IN  Phenix Finance: Referral Program200 CRO1.7022246402260
0xad45d3810b3b1599a12ef3a0af97ac693cf09bef27de610d39745dad37c2b6c3Claim Eth Reward...48507482022-09-29 1:58:059 hrs 47 mins ago0x469926bad1f19ea1d04ad65686f95a0ceddad80a IN  Phenix Finance: Referral Program0 CRO0.1992802895170
0xf368618d68fc5b7cdf1e007a66e95d4011c84a340426b39798ed8def652dee46Swap Exact Eth F...48505762022-09-29 1:41:5010 hrs 3 mins ago0x4f266e13280f8cac12b78d4863bfb76d86f829c4 IN  Phenix Finance: Referral Program125 CRO1.796405461703 4,911.177136204
0x80b8ddb652287fe6a621e7f2cadcf67d1cacbce8bd171cb1b7b03080ef0d7d5fSwap Exact Eth F...48501922022-09-29 1:05:3510 hrs 40 mins ago0x89aef366c2df9a4555267ce7f5b492ba1ca28d64 IN  Phenix Finance: Referral Program2,300 CRO1.796073676969 4,910.27007283
0x2deb7609d0367e1e31c2fae8a1b9b9edac23ac69354f9a32fd1169b53203a2f4Swap Exact Eth F...48501552022-09-29 1:02:0510 hrs 43 mins ago0x2168a5983df647cb3ae08b955d984e734ee7c7a3 IN  Phenix Finance: Referral Program4,500 CRO1.9195753145620
0x4dee8257e50cb193b96205d351167384159963ae60ba744915a29216ccb17d01Claim Eth Reward...48501272022-09-29 0:59:2610 hrs 46 mins ago0xf326bdf3074e151216536d3d352f22bff653e14b IN  Phenix Finance: Referral Program0 CRO0.1992814686450
0xf62daad59a99e483296792fcb158a82560820ece664018afd7ba8fc0d3139993Swap Exact Eth F...48498562022-09-29 0:33:5211 hrs 11 mins ago0xfa827021222002bc0fc64f3aa1843ceea5697979 IN  Phenix Finance: Referral Program70 CRO1.648561789820
0xf3f250fade85cc6351bd0867cc0dad2dc9c26b41f067c9c78f4cc202b1fbdfdeSwap Exact Eth F...48496782022-09-29 0:17:0211 hrs 28 mins ago0x850fe6a5af73900406baebe86be95035db0d08bc IN  Phenix Finance: Referral Program1 CRO1.7022667850430
0xf8ffc611ee00200638481029e2996f2602d854c1091fd565ddbca9f11e3f0557Swap Exact Eth F...48496682022-09-29 0:16:0611 hrs 29 mins ago0x850fe6a5af73900406baebe86be95035db0d08bc IN  Phenix Finance: Referral Program766 CRO1.7022669475630
0xd1b2109a6ab6dfa70f32cb0c9b3f17b3dc3be203ede52a1d4f1615dab845d350Swap Exact Eth F...48480062022-09-28 21:39:1614 hrs 6 mins ago0x8f5308c279ce8d9c353a50c282c3d1a688ea272d IN  Phenix Finance: Referral Program214 CRO1.7222240232480
0x122815dfd7da5ea66b61e9744a8e101f46fec0b50e6f121794dde871a5feebceSwap Exact Eth F...48449612022-09-28 16:50:5118 hrs 54 mins ago0x89aef366c2df9a4555267ce7f5b492ba1ca28d64 IN  Phenix Finance: Referral Program4,440 CRO1.722504175182 4,910.511105804
0xfaf8b4a61107a15682835fa34e1a7391b247044609b46393d9a81c20461642e6Join Referral Pr...48443592022-09-28 15:53:5619 hrs 51 mins ago0xcec3ad6df608d57d7752956faad37cc3f5c06761 IN  Phenix Finance: Referral Program0 CRO0.4536982580810
0xaa6d076bb66790bd22984a9b136226484bae3da379e8c58865d0f1359e9be43aSwap Exact Eth F...48438862022-09-28 15:09:1020 hrs 36 mins ago0xff0736d49a2fa5a658c504755d0a03de23bd151a IN  Phenix Finance: Referral Program2,300 CRO1.7219953749940
0xd8a321872443de26edb8b8e0dd9fb969b26960aad9d2395828032c56c7f52ca7Swap Exact Eth F...48416132022-09-28 11:33:271 day 12 mins ago0x7bfb3f05717ff8b7db0337fed240f461b71722f1 IN  Phenix Finance: Referral Program1,400 CRO1.802451938532 4,927.707546175
0xd9e7e845ed4d2ae23720c1e4c0862bb5177ffb539b31651fb826c7d6833bd9a3Swap Exact Eth F...48399842022-09-28 8:59:021 day 2 hrs ago0x469926bad1f19ea1d04ad65686f95a0ceddad80a IN  Phenix Finance: Referral Program0.0079 CRO1.7220588935110
0xa23acbcdee4de6f5810b4818617891ec3a4d068cbd668bd123a2c4c5a7d9d2d0Claim Eth Reward...48399372022-09-28 8:54:351 day 2 hrs ago0x469926bad1f19ea1d04ad65686f95a0ceddad80a IN  Phenix Finance: Referral Program0 CRO0.1993005839210
0xc4570bd3aa50402ad05ba4b371824f295428aad7305445bed4a13fd138cb62f7Swap Exact Eth F...48399292022-09-28 8:53:501 day 2 hrs ago0x469926bad1f19ea1d04ad65686f95a0ceddad80a IN  Phenix Finance: Referral Program0.1877 CRO1.7220597945360
0x95713a9ea48b15222baaf8bc26c7438d48f2c1c5c5a2597d00ed165eeb530b57Swap Exact Eth F...48398712022-09-28 8:48:211 day 2 hrs ago0xf6e1c470082f6f2b5235cfa0bd09309bfaff2202 IN  Phenix Finance: Referral Program678 CRO1.7223553275580
0x7625c02f637117b3f3c6b76137aca087165a67e4910db9d4eef4dd456ba69bdeSwap Exact Eth F...48337692022-09-27 23:09:581 day 12 hrs ago0x89aef366c2df9a4555267ce7f5b492ba1ca28d64 IN  Phenix Finance: Referral Program2,654 CRO1.722686553991 4,911.03103091
0xddc45b37af2b200fdd4a8e887107635aa11a394c54138ee6a180ddc9ac687bdfClaim Eth Reward...48327802022-09-27 21:35:581 day 14 hrs ago0xa5210613135ac1abfc1480082da7317659600c96 IN  Phenix Finance: Referral Program0 CRO0.1993140875090
0xcdb8c89e584dad3e326860689b2bb5b38ac229262fedb90580184e4369749b2aSwap Exact Eth F...48327102022-09-27 21:29:201 day 14 hrs ago0x14d79440656b528e3954f5d5adcf65d16d5056b0 IN  Phenix Finance: Referral Program1,375 CRO1.7958213434460
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xfb7d863c1b361cbd0fbe4b0403e5579d20027a485671317e251e26d7d7756e5548567122022-09-29 11:21:5323 mins ago Phenix Finance: Referral Program0x4c487dfb5b48d223d12c787fdb69432b69dbadbf26.76 CRO
0x3dc74e3731b1b189154a668596246f3a3902fba65343f6617db8d64634e64bf548534932022-09-29 6:17:185 hrs 28 mins ago Phenix Finance: Referral Program0x6638bf8a99111f1df8c95cf68a3e9997a194365870 CRO
0xcd5fff98e4d3737c04a82468dbcd2b7e25c06ac6754332f49caac675e36d9b0648531652022-09-29 5:46:205 hrs 59 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router1,455 CRO
0x0257a5f8c8dd82db261e42df17977557c09efd23c97772c7a126f08757b7fea748527012022-09-29 5:02:336 hrs 43 mins ago Phenix Finance: Referral Program0x58cf9b231aeef148e238df06394502667c9dcb4f90 CRO
0xbe715ee3f90f302e5aa2c32b7e41017bbd6163655d0cbda7abe673dd2bd81bc748522832022-09-29 4:23:067 hrs 22 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router196 CRO
0xad45d3810b3b1599a12ef3a0af97ac693cf09bef27de610d39745dad37c2b6c348507482022-09-29 1:58:059 hrs 47 mins ago Phenix Finance: Referral Program0x469926bad1f19ea1d04ad65686f95a0ceddad80a10.7 CRO
0xf368618d68fc5b7cdf1e007a66e95d4011c84a340426b39798ed8def652dee4648505762022-09-29 1:41:5010 hrs 3 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router123.75 CRO
0x80b8ddb652287fe6a621e7f2cadcf67d1cacbce8bd171cb1b7b03080ef0d7d5f48501922022-09-29 1:05:3510 hrs 40 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router2,277 CRO
0x2deb7609d0367e1e31c2fae8a1b9b9edac23ac69354f9a32fd1169b53203a2f448501552022-09-29 1:02:0510 hrs 43 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router4,410 CRO
0x4dee8257e50cb193b96205d351167384159963ae60ba744915a29216ccb17d0148501272022-09-29 0:59:2610 hrs 46 mins ago Phenix Finance: Referral Program0xf326bdf3074e151216536d3d352f22bff653e14b98.34 CRO
0xf62daad59a99e483296792fcb158a82560820ece664018afd7ba8fc0d313999348498562022-09-29 0:33:5211 hrs 11 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router66.5 CRO
0xf3f250fade85cc6351bd0867cc0dad2dc9c26b41f067c9c78f4cc202b1fbdfde48496782022-09-29 0:17:0211 hrs 28 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router0.98 CRO
0xf8ffc611ee00200638481029e2996f2602d854c1091fd565ddbca9f11e3f055748496682022-09-29 0:16:0611 hrs 29 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router750.68 CRO
0xd1b2109a6ab6dfa70f32cb0c9b3f17b3dc3be203ede52a1d4f1615dab845d35048480062022-09-28 21:39:1614 hrs 6 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router203.3 CRO
0x122815dfd7da5ea66b61e9744a8e101f46fec0b50e6f121794dde871a5feebce48449612022-09-28 16:50:5118 hrs 54 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router4,395.6 CRO
0xaa6d076bb66790bd22984a9b136226484bae3da379e8c58865d0f1359e9be43a48438862022-09-28 15:09:1020 hrs 36 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router2,277 CRO
0xd8a321872443de26edb8b8e0dd9fb969b26960aad9d2395828032c56c7f52ca748416132022-09-28 11:33:271 day 12 mins ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router1,386 CRO
0xd9e7e845ed4d2ae23720c1e4c0862bb5177ffb539b31651fb826c7d6833bd9a348399842022-09-28 8:59:021 day 2 hrs ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router0.007821 CRO
0xa23acbcdee4de6f5810b4818617891ec3a4d068cbd668bd123a2c4c5a7d9d2d048399372022-09-28 8:54:351 day 2 hrs ago Phenix Finance: Referral Program0x469926bad1f19ea1d04ad65686f95a0ceddad80a33.9 CRO
0xc4570bd3aa50402ad05ba4b371824f295428aad7305445bed4a13fd138cb62f748399292022-09-28 8:53:501 day 2 hrs ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router0.185823 CRO
0x95713a9ea48b15222baaf8bc26c7438d48f2c1c5c5a2597d00ed165eeb530b5748398712022-09-28 8:48:211 day 2 hrs ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router644.1 CRO
0x7625c02f637117b3f3c6b76137aca087165a67e4910db9d4eef4dd456ba69bde48337692022-09-27 23:09:581 day 12 hrs ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router2,627.46 CRO
0xddc45b37af2b200fdd4a8e887107635aa11a394c54138ee6a180ddc9ac687bdf48327802022-09-27 21:35:581 day 14 hrs ago Phenix Finance: Referral Program0xa5210613135ac1abfc1480082da7317659600c9613.75 CRO
0xcdb8c89e584dad3e326860689b2bb5b38ac229262fedb90580184e4369749b2a48327102022-09-27 21:29:201 day 14 hrs ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router1,361.25 CRO
0x8a9b86215e6f5b19e6ee3152998849e0026458c071399d1045ad183aff4613e748315492022-09-27 19:39:001 day 16 hrs ago Phenix Finance: Referral Program Mad Meerkat Finance: Master Meerkat & Router95 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PhenixReferral

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-04-27
*/

/**
 *Submitted for verification at cronoscan.com on 2022-04-25
 */

// File: contracts/SafeMath.sol

// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: contracts/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity >=0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with 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) {
        return msg.data;
    }
}

// File: contracts/Ownable.sol

// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity >=0.8.0;

/**
 * @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() {
        _transferOwnership(_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 {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/IERC20.sol

// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}
// File: contracts/IUniswapV2Router01.sol

pragma solidity >=0.8.0;

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// File: contracts/IUniswapV2Router02.sol

pragma solidity >=0.8.0;

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// File: contracts/PhenixReferral.sol

pragma solidity >=0.8.0;

contract PhenixReferral is Ownable {
    using SafeMath for uint256;

    address public routerAddress;
    address public tokenAddress;
    uint256 public totalEthSwapped;
    uint256 public totalEthRewards;
    uint256 public totalPendingEthRewards;
    uint256 public totalTokensSwapped;
    bool public referralModeActive;
    uint256 public minTokensRequired;
    uint256 public totalReferralLevels;
    uint256 public baseBuyAllocation;
    uint256 public baseBuyAllocationDenomiator;

    struct Referrer {
        uint256 totalReferredEth;
        uint256 totalReferredTokens;
        uint256 totalReferredEthRewards;
        uint256 pendingReferredEthRewards;
        uint256 referrerLevel;
        uint256 totalReferrals;
        bool referralStatus;
    }

    struct ReferrerLevel {
        uint256 referredEthRequirement;
        uint256 referrerFeeAllocationPercentage;
        uint256 feePercentageDenominator;
    }

    mapping(address => Referrer) private referrers;
    address[] referrerAddresses;
    mapping(uint256 => ReferrerLevel) referrerLevels;
    mapping(address => mapping(address => bool)) public hasReferred;

    modifier isEnabled() {
        require(referralModeActive == true, "Referral Mode is not active.");
        _;
    }

    modifier isJoined(address _referrerAddress) {
        require(
            referrers[_referrerAddress].referralStatus == true,
            "Address is not in referral program."
        );
        _;
    }

    modifier canJoin() {
        require(
            IERC20(tokenAddress).balanceOf(msg.sender) >= minTokensRequired &&
                referrers[msg.sender].referralStatus == false,
            "Not enough tokens to join referral program or already in the referral program."
        );
        _;
    }

    modifier canClaim() {
        require(
            (referrers[msg.sender].pendingReferredEthRewards > 0) &&
                (address(this).balance >=
                    referrers[msg.sender].pendingReferredEthRewards),
            "No rewards to claim or not enough ETH in contract."
        );
        _;
    }

    modifier referralAllowed(address _referrerAddress) {
        require(
            _referrerAddress != msg.sender,
            "Referrer and buyer cannot be the same."
        );
        _;
    }

    event UpdateReferralLevelFees(
        uint256 _referralLevel,
        uint256 _referredEthRequirement,
        uint256 indexed _referrerFeeAllocationPercentage,
        uint256 indexed _feePercentageDenominator
    );
    event SwapExactEthForTokensWithReferral(
        address indexed _referrerAddress,
        address indexed _buyerAddress,
        uint256 indexed _amountEthSwapped
    );
    event ClaimEthRewards(
        address indexed _referrerAddress,
        uint256 indexed _claimedEthAmount
    );
    event UpdateReferralActiveState(bool indexed _state);
    event JoinReferralProgram(address indexed _reffererAddress);
    event UpdateMinimumTokensRequired(uint256 indexed _amountTokens);
    event UpdateTokenAddress(address indexed _tokenAddress);
    event UpdateRouterAddress(address indexed _routerAddress);
    event UpdateBaseBuyAllocation(
        uint256 indexed _percentage,
        uint256 indexed _denominator
    );

    constructor(address _tokenAddress, address _routerAddress) {
        tokenAddress = _tokenAddress;
        routerAddress = _routerAddress;

        referrers[msg.sender].referralStatus = true;
        referrerAddresses.push(msg.sender);

        _addReferralLevel(0, 1, 100);
        _addReferralLevel(15000000000000000000000, 2, 100);
        _addReferralLevel(50000000000000000000000, 3, 100);
        _addReferralLevel(100000000000000000000000, 5, 100);

        baseBuyAllocation = 88;
        baseBuyAllocationDenomiator = 100;

        referralModeActive = false;
    }

    function updateReferralActiveState(bool _state) external onlyOwner {
        referralModeActive = _state;

        emit UpdateReferralActiveState(_state);
    }

    function updateMinimumTokensRequired(uint256 _minTokens)
        external
        onlyOwner
    {
        minTokensRequired = _minTokens;

        emit UpdateMinimumTokensRequired(_minTokens);
    }

    function updateBaseBuyAllocation(uint256 _percentage, uint256 _denominator)
        external
        onlyOwner
    {
        baseBuyAllocation = _percentage;
        baseBuyAllocationDenomiator = _denominator;

        emit UpdateBaseBuyAllocation(_percentage, _denominator);
    }


    function getTotalReferrers() external view returns(uint256) {
        return referrerAddresses.length;
    }

    function joinReferralProgram() external canJoin {
        referrers[msg.sender].referralStatus = true;
        referrerAddresses.push(msg.sender);

        emit JoinReferralProgram(msg.sender);
    }

    function getReferrerAddressByIndex(uint256 _index)
        external
        view
        returns (address)
    {
        return referrerAddresses[_index];
    }

    function getReferrerDetails(address _address)
        external
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            bool
        )
    {
        return (
            referrers[_address].totalReferredEth,
            referrers[_address].totalReferredTokens,
            referrers[_address].totalReferredEthRewards,
            referrers[_address].pendingReferredEthRewards,
            referrers[_address].referrerLevel,
            referrers[_address].totalReferrals,
            referrers[_address].referralStatus
        );
    }

    function getReferralLevelDetails(uint256 _level)
        external
        view
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        return (
            referrerLevels[_level].referredEthRequirement,
            referrerLevels[_level].referrerFeeAllocationPercentage,
            referrerLevels[_level].feePercentageDenominator
        );
    }

    function _getReferrerLevelAndUpdate(
        address _referrerAddress,
        uint256 _payableValue
    ) internal returns (uint256) {
        uint256 referrerLevel = referrers[_referrerAddress].referrerLevel;
        uint256 newTotalReferredEth = referrers[_referrerAddress]
            .totalReferredEth
            .add(_payableValue);

        // check if referrer needs to be upgraded to the next rank
        if (referrerLevel != (totalReferralLevels - 1)) {
            for (uint256 i = referrerLevel; i < totalReferralLevels; i++) {
                if (
                    newTotalReferredEth >=
                    referrerLevels[i].referredEthRequirement
                ) {
                    referrerLevel = i;
                }
            }
        }

        // check if referrer level has updated then apply new level to data
        if (referrerLevel != referrers[_referrerAddress].referrerLevel) {
            referrers[_referrerAddress].referrerLevel = referrerLevel;
        }

        return referrers[_referrerAddress].referrerLevel;
    }

    function _getPathForETHtoToken() internal view returns (address[] memory) {
        address[] memory path = new address[](2);
        path[0] = IUniswapV2Router02(routerAddress).WETH();
        path[1] = address(tokenAddress);
        return path;
    }

    function updateTokenAddress(address _tokenAddress) external onlyOwner {
        tokenAddress = _tokenAddress;

        emit UpdateTokenAddress(_tokenAddress);
    }

    function updateRouterAddress(address _routerAddress) external onlyOwner {
        routerAddress = _routerAddress;

        emit UpdateRouterAddress(_routerAddress);
    }

    function swapExactEthForTokensWithReferral(
        address _referrerAddress,
        uint256 _deadline
    )
        external
        payable
        isJoined(_referrerAddress)
        referralAllowed(_referrerAddress)
        isEnabled
    {
        require(msg.value > 0, "No ETH payed in transaction.");

        if (hasReferred[_referrerAddress][msg.sender] != true) {
            hasReferred[_referrerAddress][msg.sender] = true;
            referrers[_referrerAddress].totalReferrals = referrers[
                _referrerAddress
            ].totalReferrals.add(1);
        }

        uint256 referrerLevel = _getReferrerLevelAndUpdate(
            _referrerAddress,
            msg.value
        );
        ReferrerLevel memory currentReferrerLevel = referrerLevels[
            referrerLevel
        ];

        // update referrer allocation and update payable amount to router
        uint256 referrerFeeAllocation = uint256(msg.value)
            .mul(currentReferrerLevel.referrerFeeAllocationPercentage)
            .div(currentReferrerLevel.feePercentageDenominator);

        // update referrer eth reward values
        referrers[_referrerAddress].totalReferredEthRewards = referrers[
            _referrerAddress
        ].totalReferredEthRewards.add(referrerFeeAllocation);

        referrers[_referrerAddress].pendingReferredEthRewards = referrers[
            _referrerAddress
        ].pendingReferredEthRewards.add(referrerFeeAllocation);

        referrers[_referrerAddress].totalReferredEth = referrers[
            _referrerAddress
        ].totalReferredEth.add(msg.value);

        uint256 newPaybleAmount = uint256(msg.value).sub(referrerFeeAllocation);

        uint256[] memory amounts = new uint256[](2);
        uint256[] memory amountsFull = new uint256[](2);

        amounts = IUniswapV2Router02(routerAddress).swapExactETHForTokens{
            value: newPaybleAmount
        }(0, _getPathForETHtoToken(), address(this), _deadline);

        amountsFull = IUniswapV2Router02(routerAddress).getAmountsOut(
            msg.value,
            _getPathForETHtoToken()
        );

        referrers[_referrerAddress].totalReferredTokens = referrers[
            _referrerAddress
        ].totalReferredTokens.add(amounts[1]);

        uint256 buyerTokenAllocation = amountsFull[1]
            .mul(baseBuyAllocation)
            .div(baseBuyAllocationDenomiator);

        // send buyer token allocation
        IERC20(tokenAddress).transfer(msg.sender, buyerTokenAllocation);

        // update globals
        totalEthSwapped = totalEthSwapped.add(msg.value);
        totalTokensSwapped = totalTokensSwapped.add(amounts[1]);
        totalEthRewards = totalEthRewards.add(referrerFeeAllocation);
        totalPendingEthRewards = totalPendingEthRewards.add(
            referrerFeeAllocation
        );

        emit SwapExactEthForTokensWithReferral(
            _referrerAddress,
            msg.sender,
            msg.value
        );
    }

    function claimEthRewards() external isJoined(msg.sender) canClaim {
        uint256 rewardsToClaim = referrers[msg.sender]
            .pendingReferredEthRewards;
        referrers[msg.sender].pendingReferredEthRewards = 0;
        totalPendingEthRewards = totalPendingEthRewards.sub(rewardsToClaim);

        (bool sent, ) = address(msg.sender).call{value: rewardsToClaim}("");

        require(sent, "Claim failed.");

        emit ClaimEthRewards(msg.sender, rewardsToClaim);
    }

    function updateReferralLevelFees(
        uint256 _referralLevel,
        uint256 _referredEthRequirement,
        uint256 _referrerFeeAllocationPercentage,
        uint256 _feePercentageDenominator
    ) external onlyOwner {
        require(
            _referralLevel <= totalReferralLevels,
            "Referral level exceeds total referral levels"
        );

        referrerLevels[_referralLevel]
            .referredEthRequirement = _referredEthRequirement;
        referrerLevels[_referralLevel]
            .referrerFeeAllocationPercentage = _referrerFeeAllocationPercentage;
        referrerLevels[_referralLevel]
            .feePercentageDenominator = _feePercentageDenominator;

        emit UpdateReferralLevelFees(
            _referralLevel,
            _referredEthRequirement,
            _referrerFeeAllocationPercentage,
            _feePercentageDenominator
        );
    }

    function _addReferralLevel(
        uint256 _referredEthRequirement,
        uint256 _referrerFeeAllocationPercentage,
        uint256 _feePercentageDenominator
    ) internal {
        referrerLevels[totalReferralLevels] = ReferrerLevel(
            _referredEthRequirement,
            _referrerFeeAllocationPercentage,
            _feePercentageDenominator
        );

        totalReferralLevels = totalReferralLevels.add(1);
    }

    function addReferralLevel(
        uint256 _referredEthRequirement,
        uint256 _referrerFeeAllocationPercentage,
        uint256 _feePercentageDenominator
    ) external onlyOwner {
        _addReferralLevel(
            _referredEthRequirement,
            _referrerFeeAllocationPercentage,
            _feePercentageDenominator
        );
    }

    function removeLastReferralLevel() external onlyOwner {
        require(totalReferralLevels > 0, "Only one referral rank remains. Cannot remove anymore.");

        totalReferralLevels = totalReferralLevels.sub(1);
        referrerLevels[totalReferralLevels] = ReferrerLevel(
            0,
            0,
            0
        );
    }

    function emergencyRecoverTokens() external onlyOwner {
        IERC20(tokenAddress).transfer(
            owner(),
            IERC20(tokenAddress).balanceOf(address(this))
        );
    }

    function emergencyRecoverEth() external onlyOwner {
        uint256 amountToRecover = uint256(address(this).balance).sub(
            totalPendingEthRewards
        );

        require(amountToRecover > 0, "No ETH in contract to recover");

        (bool sent, ) = address(owner()).call{value: amountToRecover}("");

        require(sent, "Claim failed.");
    }

    receive() external payable {}
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_referrerAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_claimedEthAmount","type":"uint256"}],"name":"ClaimEthRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_reffererAddress","type":"address"}],"name":"JoinReferralProgram","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_referrerAddress","type":"address"},{"indexed":true,"internalType":"address","name":"_buyerAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amountEthSwapped","type":"uint256"}],"name":"SwapExactEthForTokensWithReferral","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_percentage","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"UpdateBaseBuyAllocation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_amountTokens","type":"uint256"}],"name":"UpdateMinimumTokensRequired","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_state","type":"bool"}],"name":"UpdateReferralActiveState","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_referralLevel","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_referredEthRequirement","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_referrerFeeAllocationPercentage","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_feePercentageDenominator","type":"uint256"}],"name":"UpdateReferralLevelFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_routerAddress","type":"address"}],"name":"UpdateRouterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"UpdateTokenAddress","type":"event"},{"inputs":[{"internalType":"uint256","name":"_referredEthRequirement","type":"uint256"},{"internalType":"uint256","name":"_referrerFeeAllocationPercentage","type":"uint256"},{"internalType":"uint256","name":"_feePercentageDenominator","type":"uint256"}],"name":"addReferralLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"baseBuyAllocation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseBuyAllocationDenomiator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimEthRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyRecoverEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyRecoverTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_level","type":"uint256"}],"name":"getReferralLevelDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getReferrerAddressByIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getReferrerDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalReferrers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"hasReferred","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"joinReferralProgram","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"minTokensRequired","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":"referralModeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLastReferralLevel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrerAddress","type":"address"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"swapExactEthForTokensWithReferral","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"tokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalEthSwapped","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPendingEthRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReferralLevels","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensSwapped","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_percentage","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"updateBaseBuyAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minTokens","type":"uint256"}],"name":"updateMinimumTokensRequired","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"updateReferralActiveState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referralLevel","type":"uint256"},{"internalType":"uint256","name":"_referredEthRequirement","type":"uint256"},{"internalType":"uint256","name":"_referrerFeeAllocationPercentage","type":"uint256"},{"internalType":"uint256","name":"_feePercentageDenominator","type":"uint256"}],"name":"updateReferralLevelFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"}],"name":"updateRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"updateTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50604051620020ea380380620020ea833981016040819052620000349162000220565b6200003f3362000137565b600280546001600160a01b038085166001600160a01b03199283161790925560018054928416928216929092178255336000818152600c60205260408120600601805460ff191685179055600d805480860182559082527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb5018054909316909117909155620000d091606462000187565b620000e969032d26d12e980b6000006002606462000187565b62000102690a968163f0a57b4000006003606462000187565b6200011b69152d02c7e14af68000006005606462000187565b50506058600a556064600b556007805460ff191690556200027f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516060810182528481526020808201858152828401858152600980546000908152600e85529590952093518455905160018085019190915590516002909301929092559154620001e6929091906200172b620001ee821b17901c565b600955505050565b6000620001fc828462000258565b9392505050565b80516001600160a01b03811681146200021b57600080fd5b919050565b600080604083850312156200023457600080fd5b6200023f8362000203565b91506200024f6020840162000203565b90509250929050565b600082198211156200027a57634e487b7160e01b600052601160045260246000fd5b500190565b611e5b806200028f6000396000f3fe6080604052600436106101e65760003560e01c80638da5cb5b11610102578063c75d869511610095578063cd218e3711610064578063cd218e37146105df578063e8d60082146105f2578063f2fde38b14610612578063fb1de4181461063257600080fd5b8063c75d8695146104f9578063ca4c20d014610519578063cbb897eb1461052f578063cbe0f32e1461054457600080fd5b8063aa5281b0116100d1578063aa5281b014610472578063af1366bb14610488578063b0e7331d146104c3578063c14190da146104e357600080fd5b80638da5cb5b14610409578063983c6ebb146104275780639d76ea581461043d5780639d9174451461045d57600080fd5b80632f05c9c01161017a5780636691461a116101495780636691461a146103aa5780636b5530cb146103ca578063715018a6146103df5780638135f5f2146103f457600080fd5b80632f05c9c0146103085780633268cc56146103405780634ed2989e14610360578063616e06251461038a57600080fd5b80631ae80d52116101b65780631ae80d52146102a857806327596fce146102bd57806327853283146102d25780632e8d0516146102e857600080fd5b8062e6be7b146101f2578063125f98391461021457806316c0bae41461023d578063195fbbfc1461025357600080fd5b366101ed57005b600080fd5b3480156101fe57600080fd5b5061021261020d3660046119f1565b610648565b005b34801561022057600080fd5b5061022a600b5481565b6040519081526020015b60405180910390f35b34801561024957600080fd5b5061022a60065481565b34801561025f57600080fd5b5061028d61026e366004611a0e565b6000908152600e60205260409020805460018201546002909201549092565b60408051938452602084019290925290820152606001610234565b3480156102b457600080fd5b506102126106c5565b3480156102c957600080fd5b506102126107b0565b3480156102de57600080fd5b5061022a600a5481565b3480156102f457600080fd5b50610212610303366004611a27565b610962565b34801561031457600080fd5b50610328610323366004611a0e565b6109c7565b6040516001600160a01b039091168152602001610234565b34801561034c57600080fd5b50600154610328906001600160a01b031681565b34801561036c57600080fd5b5060075461037a9060ff1681565b6040519015158152602001610234565b34801561039657600080fd5b506102126103a5366004611a0e565b6109f7565b3480156103b657600080fd5b506102126103c53660046119f1565b610a54565b3480156103d657600080fd5b50610212610ac8565b3480156103eb57600080fd5b50610212610bf2565b34801561040057600080fd5b50600d5461022a565b34801561041557600080fd5b506000546001600160a01b0316610328565b34801561043357600080fd5b5061022a60035481565b34801561044957600080fd5b50600254610328906001600160a01b031681565b34801561046957600080fd5b50610212610c28565b34801561047e57600080fd5b5061022a60095481565b34801561049457600080fd5b5061037a6104a3366004611a49565b600f60209081526000928352604080842090915290825290205460ff1681565b3480156104cf57600080fd5b506102126104de366004611a82565b610d53565b3480156104ef57600080fd5b5061022a60045481565b34801561050557600080fd5b50610212610514366004611ab4565b610e46565b34801561052557600080fd5b5061022a60085481565b34801561053b57600080fd5b50610212610e80565b34801561055057600080fd5b506105a861055f3660046119f1565b6001600160a01b03166000908152600c60205260409020805460018201546002830154600384015460048501546005860154600690960154949693959294919390929160ff1690565b604080519788526020880196909652948601939093526060850191909152608084015260a0830152151560c082015260e001610234565b6102126105ed366004611ae0565b61101e565b3480156105fe57600080fd5b5061021261060d366004611b1a565b61162c565b34801561061e57600080fd5b5061021261062d3660046119f1565b611693565b34801561063e57600080fd5b5061022a60055481565b6000546001600160a01b0316331461067b5760405162461bcd60e51b815260040161067290611b37565b60405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040517f4c1ea6a665aa2893f77530b6dd4565a3454e462913055056df640995424af0a290600090a250565b6000546001600160a01b031633146106ef5760405162461bcd60e51b815260040161067290611b37565b6000600954116107605760405162461bcd60e51b815260206004820152603660248201527f4f6e6c79206f6e6520726566657272616c2072616e6b2072656d61696e732e2060448201527521b0b73737ba103932b6b7bb329030b73cb6b7b9329760511b6064820152608401610672565b60095461076e90600161173e565b60098190556040805160608101825260008082526020808301828152838501838152958352600e90915292902090518155905160018201559051600290910155565b336000818152600c602052604090206006015460ff1615156001146107e75760405162461bcd60e51b815260040161067290611b6c565b336000908152600c60205260409020600301541580159061081a5750336000908152600c60205260409020600301544710155b6108815760405162461bcd60e51b815260206004820152603260248201527f4e6f207265776172647320746f20636c61696d206f72206e6f7420656e6f7567604482015271341022aa241034b71031b7b73a3930b1ba1760711b6064820152608401610672565b336000908152600c6020526040812060030180549190556005546108a5908261173e565b600555604051600090339083908381818185875af1925050503d80600081146108ea576040519150601f19603f3d011682016040523d82523d6000602084013e6108ef565b606091505b50509050806109305760405162461bcd60e51b815260206004820152600d60248201526c21b630b4b6903330b4b632b21760991b6044820152606401610672565b604051829033907fb21528c8d733dbaeab2fa73697d6548cb5a710652be04e324a23ae650ef5782c90600090a3505050565b6000546001600160a01b0316331461098c5760405162461bcd60e51b815260040161067290611b37565b600a829055600b819055604051819083907f53d2e431b5f67f2bc1e221441f390ace6e19ad523e6e99fc465154baf27a4e2b90600090a35050565b6000600d82815481106109dc576109dc611baf565b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b03163314610a215760405162461bcd60e51b815260040161067290611b37565b600881905560405181907f8488996fdf3ba9818259a1d3b3e55d6fce28f06f14adb6149323b5a0874c77a890600090a250565b6000546001600160a01b03163314610a7e5760405162461bcd60e51b815260040161067290611b37565b600280546001600160a01b0319166001600160a01b0383169081179091556040517ff9be437abc8da0c12d089b53e64ee42af5fc0b084d9d57095e51c925f9fe27b390600090a250565b6000546001600160a01b03163314610af25760405162461bcd60e51b815260040161067290611b37565b6000610b096005544761173e90919063ffffffff16565b905060008111610b5b5760405162461bcd60e51b815260206004820152601d60248201527f4e6f2045544820696e20636f6e747261637420746f207265636f7665720000006044820152606401610672565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ba8576040519150601f19603f3d011682016040523d82523d6000602084013e610bad565b606091505b5050905080610bee5760405162461bcd60e51b815260206004820152600d60248201526c21b630b4b6903330b4b632b21760991b6044820152606401610672565b5050565b6000546001600160a01b03163314610c1c5760405162461bcd60e51b815260040161067290611b37565b610c26600061174a565b565b6000546001600160a01b03163314610c525760405162461bcd60e51b815260040161067290611b37565b6002546001600160a01b031663a9059cbb610c756000546001600160a01b031690565b6002546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611bc5565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d509190611bde565b50565b6000546001600160a01b03163314610d7d5760405162461bcd60e51b815260040161067290611b37565b600954841115610de45760405162461bcd60e51b815260206004820152602c60248201527f526566657272616c206c6576656c206578636565647320746f74616c2072656660448201526b657272616c206c6576656c7360a01b6064820152608401610672565b6000848152600e6020908152604091829020858155600181018590556002018390558151868152908101859052829184917feb4f1cacebb31111fb09b8c3bbf7daa745e5af5718dd21fffeb78c9e9f0af813910160405180910390a350505050565b6000546001600160a01b03163314610e705760405162461bcd60e51b815260040161067290611b37565b610e7b83838361179a565b505050565b6008546002546040516370a0823160e01b81523360048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610ecb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eef9190611bc5565b10158015610f105750336000908152600c602052604090206006015460ff16155b610f995760405162461bcd60e51b815260206004820152604e60248201527f4e6f7420656e6f75676820746f6b656e7320746f206a6f696e2072656665727260448201527f616c2070726f6772616d206f7220616c726561647920696e207468652072656660648201526d32b93930b610383937b3b930b69760911b608482015260a401610672565b336000818152600c6020526040808220600601805460ff19166001908117909155600d8054918201815583527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b03191684179055517f1decc804a19dbfbda8e08af99565782c0f11baede5baecbc393ac626cd3bc8469190a2565b6001600160a01b0382166000908152600c6020526040902060060154829060ff1615156001146110605760405162461bcd60e51b815260040161067290611b6c565b82336001600160a01b038216036110c85760405162461bcd60e51b815260206004820152602660248201527f526566657272657220616e642062757965722063616e6e6f74206265207468656044820152651039b0b6b29760d11b6064820152608401610672565b60075460ff16151560011461111f5760405162461bcd60e51b815260206004820152601c60248201527f526566657272616c204d6f6465206973206e6f74206163746976652e000000006044820152606401610672565b6000341161116f5760405162461bcd60e51b815260206004820152601c60248201527f4e6f2045544820706179656420696e207472616e73616374696f6e2e000000006044820152606401610672565b6001600160a01b0384166000908152600f6020908152604080832033845290915290205460ff161515600114611204576001600160a01b0384166000818152600f602090815260408083203384528252808320805460ff19166001908117909155938352600c9091529020600501546111e79161172b565b6001600160a01b0385166000908152600c60205260409020600501555b600061121085346117f3565b6000818152600e60209081526040808320815160608101835281548152600182015493810184905260029091015491810182905293945061125c916112569034906118d1565b906118dd565b6001600160a01b0388166000908152600c6020526040902060020154909150611285908261172b565b6001600160a01b0388166000908152600c602052604090206002810191909155600301546112b3908261172b565b6001600160a01b0388166000908152600c602052604090206003810191909155546112de903461172b565b6001600160a01b0388166000908152600c6020526040812091909155611304348361173e565b60408051600280825260608201835292935060009290916020830190803683375050604080516002808252606082018352939450600093909250906020830190803683375050600154919250506001600160a01b0316637ff36ab584600061136a6118e9565b308e6040518663ffffffff1660e01b815260040161138b9493929190611c55565b60006040518083038185885af11580156113a9573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526113d29190810190611c8a565b6001549092506001600160a01b031663d06ca61f346113ef6118e9565b6040518363ffffffff1660e01b815260040161140c929190611d48565b600060405180830381865afa158015611429573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114519190810190611c8a565b90506114a88260018151811061146957611469611baf565b6020026020010151600c60008d6001600160a01b03166001600160a01b031681526020019081526020016000206001015461172b90919063ffffffff16565b600c60008c6001600160a01b03166001600160a01b0316815260200190815260200160002060010181905550600061150b600b54611256600a54856001815181106114f5576114f5611baf565b60200260200101516118d190919063ffffffff16565b60025460405163a9059cbb60e01b8152336004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561155d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115819190611bde565b5060035461158f903461172b565b6003819055506115c4836001815181106115ab576115ab611baf565b602002602001015160065461172b90919063ffffffff16565b6006556004546115d4908661172b565b6004556005546115e4908661172b565b600555604051349033906001600160a01b038e16907faaa6c47adfd0eabf82256a7376beff1d19e862aa4d0f02ee592c71d20addce2690600090a45050505050505050505050565b6000546001600160a01b031633146116565760405162461bcd60e51b815260040161067290611b37565b6007805460ff19168215159081179091556040517f27af17a3a4bf45ff3a00c09b6ad0637b46d216740e665818b89e1a048f34735390600090a250565b6000546001600160a01b031633146116bd5760405162461bcd60e51b815260040161067290611b37565b6001600160a01b0381166117225760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610672565b610d508161174a565b60006117378284611d7f565b9392505050565b60006117378284611d97565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516060810182528481526020808201858152828401858152600980546000908152600e909452949092209251835551600180840191909155905160029092019190915590546117eb9161172b565b600955505050565b6001600160a01b0382166000908152600c6020526040812060048101549054829061181e908561172b565b9050600160095461182f9190611d97565b821461186e57815b60095481101561186c576000818152600e6020526040902054821061185a578092505b8061186481611dae565b915050611837565b505b6001600160a01b0385166000908152600c602052604090206004015482146118af576001600160a01b0385166000908152600c602052604090206004018290555b505050506001600160a01b03166000908152600c602052604090206004015490565b60006117378284611dc7565b60006117378284611de6565b604080516002808252606080830184529260009291906020830190803683375050600154604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015611957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197b9190611e08565b8160008151811061198e5761198e611baf565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106119bf576119bf611baf565b6001600160a01b0390921660209283029190910190910152919050565b6001600160a01b0381168114610d5057600080fd5b600060208284031215611a0357600080fd5b8135611737816119dc565b600060208284031215611a2057600080fd5b5035919050565b60008060408385031215611a3a57600080fd5b50508035926020909101359150565b60008060408385031215611a5c57600080fd5b8235611a67816119dc565b91506020830135611a77816119dc565b809150509250929050565b60008060008060808587031215611a9857600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215611ac957600080fd5b505081359360208301359350604090920135919050565b60008060408385031215611af357600080fd5b8235611afe816119dc565b946020939093013593505050565b8015158114610d5057600080fd5b600060208284031215611b2c57600080fd5b813561173781611b0c565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526023908201527f41646472657373206973206e6f7420696e20726566657272616c2070726f677260408201526230b69760e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611bd757600080fd5b5051919050565b600060208284031215611bf057600080fd5b815161173781611b0c565b634e487b7160e01b600052604160045260246000fd5b600081518084526020808501945080840160005b83811015611c4a5781516001600160a01b031687529582019590820190600101611c25565b509495945050505050565b848152608060208201526000611c6e6080830186611c11565b6001600160a01b03949094166040830152506060015292915050565b60006020808385031215611c9d57600080fd5b825167ffffffffffffffff80821115611cb557600080fd5b818501915085601f830112611cc957600080fd5b815181811115611cdb57611cdb611bfb565b8060051b604051601f19603f83011681018181108582111715611d0057611d00611bfb565b604052918252848201925083810185019188831115611d1e57600080fd5b938501935b82851015611d3c57845184529385019392850192611d23565b98975050505050505050565b828152604060208201526000611d616040830184611c11565b949350505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115611d9257611d92611d69565b500190565b600082821015611da957611da9611d69565b500390565b600060018201611dc057611dc0611d69565b5060010190565b6000816000190483118215151615611de157611de1611d69565b500290565b600082611e0357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215611e1a57600080fd5b8151611737816119dc56fea26469706673582212202cea516f4d6c3895a2b7f683ab3084a9f0fcbcff22a26a4e03cfc58d97d4c38064736f6c634300080d003300000000000000000000000057d06bb1e3b60c875cd3a4445a53217f9b44d390000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30

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

00000000000000000000000057d06bb1e3b60c875cd3a4445a53217f9b44d390000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x57d06bb1e3b60c875cd3a4445a53217f9b44d390
Arg [1] : _routerAddress (address): 0x145677fc4d9b8f19b5d56d1820c48e0443049a30

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000057d06bb1e3b60c875cd3a4445a53217f9b44d390
Arg [1] : 000000000000000000000000145677fc4d9b8f19b5d56d1820c48e0443049a30


Deployed ByteCode Sourcemap

19464:14247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27239:174;;;;;;;;;;-1:-1:-1;27239:174:0;;;;;:::i;:::-;;:::i;:::-;;19924:42;;;;;;;;;;;;;;;;;;;548:25:1;;;536:2;521:18;19924:42:0;;;;;;;;19728:33;;;;;;;;;;;;;;;;25281:409;;;;;;;;;;-1:-1:-1;25281:409:0;;;;;:::i;:::-;25394:7;25495:22;;;:14;:22;;;;;:45;;25555:54;;;;25624:47;;;;;25495:45;;25281:409;;;;;971:25:1;;;1027:2;1012:18;;1005:34;;;;1055:18;;;1048:34;959:2;944:18;25281:409:0;769:319:1;32744:345:0;;;;;;;;;;;;;:::i;30488:495::-;;;;;;;;;;;;;:::i;19885:32::-;;;;;;;;;;;;;;;;23801:289;;;;;;;;;;-1:-1:-1;23801:289:0;;;;;:::i;:::-;;:::i;24430:166::-;;;;;;;;;;-1:-1:-1;24430:166:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1510:32:1;;;1492:51;;1480:2;1465:18;24430:166:0;1346:203:1;19541:28:0;;;;;;;;;;-1:-1:-1;19541:28:0;;;;-1:-1:-1;;;;;19541:28:0;;;19768:30;;;;;;;;;;-1:-1:-1;19768:30:0;;;;;;;;;;;1719:14:1;;1712:22;1694:41;;1682:2;1667:18;19768:30:0;1554:187:1;23588:205:0;;;;;;;;;;-1:-1:-1;23588:205:0;;;;;:::i;:::-;;:::i;27063:168::-;;;;;;;;;;-1:-1:-1;27063:168:0;;;;;:::i;:::-;;:::i;33299:372::-;;;;;;;;;;;;;:::i;9819:103::-;;;;;;;;;;;;;:::i;24100:110::-;;;;;;;;;;-1:-1:-1;24178:17:0;:24;24100:110;;9168:87;;;;;;;;;;-1:-1:-1;9214:7:0;9241:6;-1:-1:-1;;;;;9241:6:0;9168:87;;19610:30;;;;;;;;;;;;;;;;19576:27;;;;;;;;;;-1:-1:-1;19576:27:0;;;;-1:-1:-1;;;;;19576:27:0;;;33097:194;;;;;;;;;;;;;:::i;19844:34::-;;;;;;;;;;;;;;;;20574:63;;;;;;;;;;-1:-1:-1;20574:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;30991:921;;;;;;;;;;-1:-1:-1;30991:921:0;;;;;:::i;:::-;;:::i;19647:30::-;;;;;;;;;;;;;;;;32375:361;;;;;;;;;;-1:-1:-1;32375:361:0;;;;;:::i;:::-;;:::i;19805:32::-;;;;;;;;;;;;;;;;24218:204;;;;;;;;;;;;;:::i;24604:669::-;;;;;;;;;;-1:-1:-1;24604:669:0;;;;;:::i;:::-;-1:-1:-1;;;;;24900:19:0;24714:7;24900:19;;;:9;:19;;;;;:36;;24951:39;;;;25005:43;;;;25063:45;;;;25123:33;;;;25171:34;;;;25220;;;;;24900:36;;24951:39;;25005:43;;25063:45;;25123:33;;25171:34;25220;;;24604:669;;;;;3159:25:1;;;3215:2;3200:18;;3193:34;;;;3243:18;;;3236:34;;;;3301:2;3286:18;;3279:34;;;;3344:3;3329:19;;3322:35;3388:3;3373:19;;3366:35;3445:14;3438:22;3432:3;3417:19;;3410:51;3146:3;3131:19;24604:669:0;2850:617:1;27421:3059:0;;;;;;:::i;:::-;;:::i;23416:164::-;;;;;;;;;;-1:-1:-1;23416:164:0;;;;;:::i;:::-;;:::i;10077:238::-;;;;;;;;;;-1:-1:-1;10077:238:0;;;;;:::i;:::-;;:::i;19684:37::-;;;;;;;;;;;;;;;;27239:174;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;;;;;;;;;27322:13:::1;:30:::0;;-1:-1:-1;;;;;;27322:30:0::1;-1:-1:-1::0;;;;;27322:30:0;::::1;::::0;;::::1;::::0;;;27370:35:::1;::::0;::::1;::::0;-1:-1:-1;;27370:35:0::1;27239:174:::0;:::o;32744:345::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;32839:1:::1;32817:19;;:23;32809:90;;;::::0;-1:-1:-1;;;32809:90:0;;4724:2:1;32809:90:0::1;::::0;::::1;4706:21:1::0;4763:2;4743:18;;;4736:30;4802:34;4782:18;;;4775:62;-1:-1:-1;;;4853:18:1;;;4846:52;4915:19;;32809:90:0::1;4522:418:1::0;32809:90:0::1;32934:19;::::0;:26:::1;::::0;32958:1:::1;32934:23;:26::i;:::-;32912:19;:48:::0;;;33009:72:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;33009:72:0;;;::::1;::::0;;::::1;::::0;;;;;;;;;32971:35;;;:14:::1;:35:::0;;;;;;:110;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;32744:345::o;30488:495::-;30533:10;20850:27;;;;:9;:27;;;;;:42;;;;;:50;;:42;:50;20828:135;;;;-1:-1:-1;;;20828:135:0;;;;;;;:::i;:::-;21370:10:::1;21410:1;21360:21:::0;;;:9:::1;:21;::::0;;;;:47:::1;;::::0;:51;;;;21359:169:::1;;-1:-1:-1::0;21490:10:0::1;21480:21;::::0;;;:9:::1;:21;::::0;;;;:47:::1;;::::0;21434:21:::1;:93;;21359:169;21337:269;;;::::0;-1:-1:-1;;;21337:269:0;;5551:2:1;21337:269:0::1;::::0;::::1;5533:21:1::0;5590:2;5570:18;;;5563:30;5629:34;5609:18;;;5602:62;-1:-1:-1;;;5680:18:1;;;5673:48;5738:19;;21337:269:0::1;5349:414:1::0;21337:269:0::1;30600:10:::2;30565:22;30590:21:::0;;;:9:::2;:21;::::0;;;;:61:::2;;::::0;;30662:51;;;30749:22:::2;::::0;:42:::2;::::0;30590:61;30749:26:::2;:42::i;:::-;30724:22;:67:::0;30820:51:::2;::::0;30805:9:::2;::::0;30828:10:::2;::::0;30852:14;;30805:9;30820:51;30805:9;30820:51;30852:14;30828:10;30820:51:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30804:67;;;30892:4;30884:30;;;::::0;-1:-1:-1;;;30884:30:0;;6180:2:1;30884:30:0::2;::::0;::::2;6162:21:1::0;6219:2;6199:18;;;6192:30;-1:-1:-1;;;6238:18:1;;;6231:43;6291:18;;30884:30:0::2;5978:337:1::0;30884:30:0::2;30932:43;::::0;30960:14;;30948:10:::2;::::0;30932:43:::2;::::0;;;::::2;30554:429;;30488:495:::0;:::o;23801:289::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;23930:17:::1;:31:::0;;;23972:27:::1;:42:::0;;;24032:50:::1;::::0;24002:12;;23950:11;;24032:50:::1;::::0;-1:-1:-1;;24032:50:0::1;23801:289:::0;;:::o;24430:166::-;24531:7;24563:17;24581:6;24563:25;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24563:25:0;;24430:166;-1:-1:-1;;24430:166:0:o;23588:205::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;23698:17:::1;:30:::0;;;23746:39:::1;::::0;23718:10;;23746:39:::1;::::0;;;::::1;23588:205:::0;:::o;27063:168::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;27144:12:::1;:28:::0;;-1:-1:-1;;;;;;27144:28:0::1;-1:-1:-1::0;;;;;27144:28:0;::::1;::::0;;::::1;::::0;;;27190:33:::1;::::0;::::1;::::0;-1:-1:-1;;27190:33:0::1;27063:168:::0;:::o;33299:372::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;33360:23:::1;33386:82;33435:22;;33394:21;33386:34;;:82;;;;:::i;:::-;33360:108;;33507:1;33489:15;:19;33481:61;;;::::0;-1:-1:-1;;;33481:61:0;;6654:2:1;33481:61:0::1;::::0;::::1;6636:21:1::0;6693:2;6673:18;;;6666:30;6732:31;6712:18;;;6705:59;6781:18;;33481:61:0::1;6452:353:1::0;33481:61:0::1;33556:9;9241:6:::0;;33571:49:::1;::::0;-1:-1:-1;;;;;9241:6:0;;;;33600:15;;33556:9;33571:49;33556:9;33571:49;33600:15;9241:6;33571:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33555:65;;;33641:4;33633:30;;;::::0;-1:-1:-1;;;33633:30:0;;6180:2:1;33633:30:0::1;::::0;::::1;6162:21:1::0;6219:2;6199:18;;;6192:30;-1:-1:-1;;;6238:18:1;;;6231:43;6291:18;;33633:30:0::1;5978:337:1::0;33633:30:0::1;33349:322;;33299:372::o:0;9819:103::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;9884:30:::1;9911:1;9884:18;:30::i;:::-;9819:103::o:0;33097:194::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;33168:12:::1;::::0;-1:-1:-1;;;;;33168:12:0::1;33161:29;33205:7;9214::::0;9241:6;-1:-1:-1;;;;;9241:6:0;;9168:87;33205:7:::1;33234:12;::::0;33227:45:::1;::::0;-1:-1:-1;;;33227:45:0;;33266:4:::1;33227:45;::::0;::::1;1492:51:1::0;-1:-1:-1;;;;;33234:12:0;;::::1;::::0;33227:30:::1;::::0;1465:18:1;;33227:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33161:122;::::0;-1:-1:-1;;;;;;33161:122:0::1;::::0;;;;;;-1:-1:-1;;;;;7191:32:1;;;33161:122:0::1;::::0;::::1;7173:51:1::0;7240:18;;;7233:34;7146:18;;33161:122:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33097:194::o:0;30991:921::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;31271:19:::1;;31253:14;:37;;31231:131;;;::::0;-1:-1:-1;;;31231:131:0;;7730:2:1;31231:131:0::1;::::0;::::1;7712:21:1::0;7769:2;7749:18;;;7742:30;7808:34;7788:18;;;7781:62;-1:-1:-1;;;7859:18:1;;;7852:42;7911:19;;31231:131:0::1;7528:408:1::0;31231:131:0::1;31375:30;::::0;;;:14:::1;:30;::::0;;;;;;;;:93;;;31479:76:::1;::::0;::::1;:111:::0;;;31601:69:::1;;:97:::0;;;31716:188;;8115:25:1;;;8156:18;;;8149:34;;;31601:97:0;;31479:111;;31716:188:::1;::::0;8088:18:1;31716:188:0::1;;;;;;;30991:921:::0;;;;:::o;32375:361::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;32575:153:::1;32607:23;32645:32;32692:25;32575:17;:153::i;:::-;32375:361:::0;;;:::o;24218:204::-;21089:17;;21050:12;;21043:42;;-1:-1:-1;;;21043:42:0;;21074:10;21043:42;;;1492:51:1;-1:-1:-1;;;;;21050:12:0;;;;21043:30;;1465:18:1;;21043:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:63;;:129;;;;-1:-1:-1;21137:10:0;21127:21;;;;:9;:21;;;;;:36;;;;;:45;21043:129;21021:257;;;;-1:-1:-1;;;21021:257:0;;8396:2:1;21021:257:0;;;8378:21:1;8435:2;8415:18;;;8408:30;8474:34;8454:18;;;8447:62;8545:34;8525:18;;;8518:62;-1:-1:-1;;;8596:19:1;;;8589:45;8651:19;;21021:257:0;8194:482:1;21021:257:0;24287:10:::1;24277:21;::::0;;;:9:::1;:21;::::0;;;;;:36:::1;;:43:::0;;-1:-1:-1;;24277:43:0::1;24316:4;24277:43:::0;;::::1;::::0;;;24331:17:::1;:34:::0;;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24331:34:0::1;::::0;::::1;::::0;;24383:31;::::1;::::0;24277:21;24383:31:::1;24218:204::o:0;27421:3059::-;-1:-1:-1;;;;;20850:27:0;;;;;;:9;:27;;;;;:42;;;27587:16;;20850:42;;:50;;:42;:50;20828:135;;;;-1:-1:-1;;;20828:135:0;;;;;;;:::i;:::-;27630:16;21738:10:::1;-1:-1:-1::0;;;;;21718:30:0;::::1;::::0;21696:118:::1;;;::::0;-1:-1:-1;;;21696:118:0;;8883:2:1;21696:118:0::1;::::0;::::1;8865:21:1::0;8922:2;8902:18;;;8895:30;8961:34;8941:18;;;8934:62;-1:-1:-1;;;9012:18:1;;;9005:36;9058:19;;21696:118:0::1;8681:402:1::0;21696:118:0::1;20686:18:::2;::::0;::::2;;:26;;:18:::0;:26:::2;20678:67;;;::::0;-1:-1:-1;;;20678:67:0;;9290:2:1;20678:67:0::2;::::0;::::2;9272:21:1::0;9329:2;9309:18;;;9302:30;9368;9348:18;;;9341:58;9416:18;;20678:67:0::2;9088:352:1::0;20678:67:0::2;27703:1:::3;27691:9;:13;27683:54;;;::::0;-1:-1:-1;;;27683:54:0;;9647:2:1;27683:54:0::3;::::0;::::3;9629:21:1::0;9686:2;9666:18;;;9659:30;9725;9705:18;;;9698:58;9773:18;;27683:54:0::3;9445:352:1::0;27683:54:0::3;-1:-1:-1::0;;;;;27754:29:0;::::3;;::::0;;;:11:::3;:29;::::0;;;;;;;27784:10:::3;27754:41:::0;;;;;;;;::::3;;:49;;:41:::0;:49:::3;27750:271;;-1:-1:-1::0;;;;;27820:29:0;::::3;;::::0;;;:11:::3;:29;::::0;;;;;;;27850:10:::3;27820:41:::0;;;;;;;:48;;-1:-1:-1;;27820:48:0::3;27864:4;27820:48:::0;;::::3;::::0;;;27928:59;;;:9:::3;:59:::0;;;;;:74:::3;;::::0;:81:::3;::::0;:78:::3;:81::i;:::-;-1:-1:-1::0;;;;;27883:27:0;::::3;;::::0;;;:9:::3;:27;::::0;;;;:42:::3;;:126:::0;27750:271:::3;28033:21;28057:92;28098:16;28129:9;28057:26;:92::i;:::-;28160:41;28204:53:::0;;;:14:::3;:53;::::0;;;;;;;28160:97;;::::3;::::0;::::3;::::0;;;;;;::::3;::::0;::::3;::::0;;;::::3;::::0;;;::::3;::::0;;::::3;::::0;;;;;;;28033:116;;-1:-1:-1;28377:155:0::3;::::0;:90:::3;::::0;28385:9:::3;::::0;28377:36:::3;:90::i;:::-;:108:::0;::::3;:155::i;:::-;-1:-1:-1::0;;;;;28645:51:0;::::3;;::::0;;;:9:::3;:51;::::0;;;;:75:::3;;::::0;28345:187;;-1:-1:-1;28645:102:0::3;::::0;28345:187;28645:79:::3;:102::i;:::-;-1:-1:-1::0;;;;;28591:27:0;::::3;;::::0;;;:9:::3;:27;::::0;;;;:51:::3;::::0;::::3;:156:::0;;;;28816:77:::3;;::::0;:104:::3;::::0;28898:21;28816:81:::3;:104::i;:::-;-1:-1:-1::0;;;;;28760:27:0;::::3;;::::0;;;:9:::3;:27;::::0;;;;:53:::3;::::0;::::3;:160:::0;;;;28980:68;:83:::3;::::0;29053:9:::3;28980:72;:83::i;:::-;-1:-1:-1::0;;;;;28933:27:0;::::3;;::::0;;;:9:::3;:27;::::0;;;;:130;;;;29102:45:::3;29110:9;29125:21:::0;29102:22:::3;:45::i;:::-;29187:16;::::0;;29201:1:::3;29187:16:::0;;;;;::::3;::::0;;29076:71;;-1:-1:-1;29160:24:0::3;::::0;29187:16;;::::3;::::0;::::3;::::0;;::::3;::::0;::::3;-1:-1:-1::0;;29245:16:0::3;::::0;;29259:1:::3;29245:16:::0;;;;;::::3;::::0;;29160:43;;-1:-1:-1;29214:28:0::3;::::0;29245:16;;-1:-1:-1;29259:1:0;29245:16:::3;::::0;::::3;::::0;;::::3;::::0;::::3;-1:-1:-1::0;;29303:13:0::3;::::0;29214:47;;-1:-1:-1;;;;;;;29303:13:0::3;29284:55;29361:15:::0;29303:13:::3;29391:23;:21;:23::i;:::-;29424:4;29431:9;29284:157;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;::::0;;::::3;-1:-1:-1::0;;29284:157:0::3;::::0;::::3;;::::0;::::3;::::0;;;::::3;::::0;::::3;:::i;:::-;29487:13;::::0;29274:167;;-1:-1:-1;;;;;;29487:13:0::3;29468:47;29530:9;29554:23;:21;:23::i;:::-;29468:120;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;::::0;;::::3;-1:-1:-1::0;;29468:120:0::3;::::0;::::3;;::::0;::::3;::::0;;;::::3;::::0;::::3;:::i;:::-;29454:134;;29651:87;29727:7;29735:1;29727:10;;;;;;;;:::i;:::-;;;;;;;29651:9;:51;29675:16;-1:-1:-1::0;;;;;29651:51:0::3;-1:-1:-1::0;;;;;29651:51:0::3;;;;;;;;;;;;:71;;;:75;;:87;;;;:::i;:::-;29601:9;:27;29611:16;-1:-1:-1::0;;;;;29601:27:0::3;-1:-1:-1::0;;;;;29601:27:0::3;;;;;;;;;;;;:47;;:137;;;;29751:28;29782:98;29852:27;;29782:51;29815:17;;29782:11;29794:1;29782:14;;;;;;;;:::i;:::-;;;;;;;:32;;:51;;;;:::i;:98::-;29940:12;::::0;29933:63:::3;::::0;-1:-1:-1;;;29933:63:0;;29963:10:::3;29933:63;::::0;::::3;7173:51:1::0;7240:18;;;7233:34;;;29751:129:0;;-1:-1:-1;;;;;;29940:12:0::3;::::0;29933:29:::3;::::0;7146:18:1;;29933:63:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;30054:15:0::3;::::0;:30:::3;::::0;30074:9:::3;30054:19;:30::i;:::-;30036:15;:48;;;;30116:34;30139:7;30147:1;30139:10;;;;;;;;:::i;:::-;;;;;;;30116:18;;:22;;:34;;;;:::i;:::-;30095:18;:55:::0;30179:15:::3;::::0;:42:::3;::::0;30199:21;30179:19:::3;:42::i;:::-;30161:15;:60:::0;30257:22:::3;::::0;:73:::3;::::0;30298:21;30257:26:::3;:73::i;:::-;30232:22;:98:::0;30348:124:::3;::::0;30452:9:::3;::::0;30427:10:::3;::::0;-1:-1:-1;;;;;30348:124:0;::::3;::::0;::::3;::::0;;;::::3;27672:2808;;;;;;;20974:1:::1;27421:3059:::0;;;:::o;23416:164::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;23494:18:::1;:27:::0;;-1:-1:-1;;23494:27:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23539:33:::1;::::0;::::1;::::0;-1:-1:-1;;23539:33:0::1;23416:164:::0;:::o;10077:238::-;9214:7;9241:6;-1:-1:-1;;;;;9241:6:0;7971:10;9388:23;9380:68;;;;-1:-1:-1;;;9380:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10180:22:0;::::1;10158:110;;;::::0;-1:-1:-1;;;10158:110:0;;12564:2:1;10158:110:0::1;::::0;::::1;12546:21:1::0;12603:2;12583:18;;;12576:30;12642:34;12622:18;;;12615:62;-1:-1:-1;;;12693:18:1;;;12686:36;12739:19;;10158:110:0::1;12362:402:1::0;10158:110:0::1;10279:28;10298:8;10279:18;:28::i;3068:98::-:0;3126:7;3153:5;3157:1;3153;:5;:::i;:::-;3146:12;3068:98;-1:-1:-1;;;3068:98:0:o;3449:::-;3507:7;3534:5;3538:1;3534;:5;:::i;10475:191::-;10549:16;10568:6;;-1:-1:-1;;;;;10585:17:0;;;-1:-1:-1;;;;;;10585:17:0;;;;;;10618:40;;10568:6;;;;;;;10618:40;;10549:16;10618:40;10538:128;10475:191;:::o;31920:447::-;32149:149;;;;;;;;;;;;;;;;;;;;;;;;32126:19;;;-1:-1:-1;32111:35:0;;;:14;:35;;;;;;;:187;;;;;;;;;;;;;;;;;;;;;;;32333:19;;:26;;:23;:26::i;:::-;32311:19;:48;-1:-1:-1;;;31920:447:0:o;25698:1091::-;-1:-1:-1;;;;;25870:27:0;;25826:7;25870:27;;;:9;:27;;;;;:41;;;;25952:58;;25826:7;;25952:91;;26029:13;25952:76;:91::i;:::-;25922:121;;26168:1;26146:19;;:23;;;;:::i;:::-;26128:13;:42;26124:360;;26204:13;26187:286;26223:19;;26219:1;:23;26187:286;;;26338:17;;;;:14;:17;;;;;:40;26294:84;;26268:190;;26437:1;26421:17;;26268:190;26244:3;;;;:::i;:::-;;;;26187:286;;;;26124:360;-1:-1:-1;;;;;26594:27:0;;;;;;:9;:27;;;;;:41;;;26577:58;;26573:148;;-1:-1:-1;;;;;26652:27:0;;;;;;:9;:27;;;;;:41;;:57;;;26573:148;-1:-1:-1;;;;;;;;;26740:27:0;;;;;:9;:27;;;;;:41;;;;25698:1091::o;3806:98::-;3864:7;3891:5;3895:1;3891;:5;:::i;4205:98::-;4263:7;4290:5;4294:1;4290;:5;:::i;26797:258::-;26906:16;;;26920:1;26906:16;;;26853;26906;;;;;26853;26882:21;;26906:16;26920:1;26906:16;;;;;;;;-1:-1:-1;;26962:13:0;;26943:40;;;-1:-1:-1;;;26943:40:0;;;;26882;;-1:-1:-1;;;;;;26962:13:0;;;;26943:38;;-1:-1:-1;26943:40:0;;;;;;;;;;;;;;26962:13;26943:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26933:4;26938:1;26933:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;26933:50:0;;;:7;;;;;;;;;:50;27012:12;;26994:7;;27012:12;;;26994:4;;27012:12;;26994:7;;;;;;:::i;:::-;-1:-1:-1;;;;;26994:31:0;;;:7;;;;;;;;;;;:31;27043:4;26797:258;-1:-1:-1;26797:258:0:o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;584:180::-;643:6;696:2;684:9;675:7;671:23;667:32;664:52;;;712:1;709;702:12;664:52;-1:-1:-1;735:23:1;;584:180;-1:-1:-1;584:180:1:o;1093:248::-;1161:6;1169;1222:2;1210:9;1201:7;1197:23;1193:32;1190:52;;;1238:1;1235;1228:12;1190:52;-1:-1:-1;;1261:23:1;;;1331:2;1316:18;;;1303:32;;-1:-1:-1;1093:248:1:o;1746:388::-;1814:6;1822;1875:2;1863:9;1854:7;1850:23;1846:32;1843:52;;;1891:1;1888;1881:12;1843:52;1930:9;1917:23;1949:31;1974:5;1949:31;:::i;:::-;1999:5;-1:-1:-1;2056:2:1;2041:18;;2028:32;2069:33;2028:32;2069:33;:::i;:::-;2121:7;2111:17;;;1746:388;;;;;:::o;2139:385::-;2225:6;2233;2241;2249;2302:3;2290:9;2281:7;2277:23;2273:33;2270:53;;;2319:1;2316;2309:12;2270:53;-1:-1:-1;;2342:23:1;;;2412:2;2397:18;;2384:32;;-1:-1:-1;2463:2:1;2448:18;;2435:32;;2514:2;2499:18;2486:32;;-1:-1:-1;2139:385:1;-1:-1:-1;2139:385:1:o;2529:316::-;2606:6;2614;2622;2675:2;2663:9;2654:7;2650:23;2646:32;2643:52;;;2691:1;2688;2681:12;2643:52;-1:-1:-1;;2714:23:1;;;2784:2;2769:18;;2756:32;;-1:-1:-1;2835:2:1;2820:18;;;2807:32;;2529:316;-1:-1:-1;2529:316:1:o;3472:315::-;3540:6;3548;3601:2;3589:9;3580:7;3576:23;3572:32;3569:52;;;3617:1;3614;3607:12;3569:52;3656:9;3643:23;3675:31;3700:5;3675:31;:::i;:::-;3725:5;3777:2;3762:18;;;;3749:32;;-1:-1:-1;;;3472:315:1:o;3792:118::-;3878:5;3871:13;3864:21;3857:5;3854:32;3844:60;;3900:1;3897;3890:12;3915:241;3971:6;4024:2;4012:9;4003:7;3999:23;3995:32;3992:52;;;4040:1;4037;4030:12;3992:52;4079:9;4066:23;4098:28;4120:5;4098:28;:::i;4161:356::-;4363:2;4345:21;;;4382:18;;;4375:30;4441:34;4436:2;4421:18;;4414:62;4508:2;4493:18;;4161:356::o;4945:399::-;5147:2;5129:21;;;5186:2;5166:18;;;5159:30;5225:34;5220:2;5205:18;;5198:62;-1:-1:-1;;;5291:2:1;5276:18;;5269:33;5334:3;5319:19;;4945:399::o;6320:127::-;6381:10;6376:3;6372:20;6369:1;6362:31;6412:4;6409:1;6402:15;6436:4;6433:1;6426:15;6810:184;6880:6;6933:2;6921:9;6912:7;6908:23;6904:32;6901:52;;;6949:1;6946;6939:12;6901:52;-1:-1:-1;6972:16:1;;6810:184;-1:-1:-1;6810:184:1:o;7278:245::-;7345:6;7398:2;7386:9;7377:7;7373:23;7369:32;7366:52;;;7414:1;7411;7404:12;7366:52;7446:9;7440:16;7465:28;7487:5;7465:28;:::i;9802:127::-;9863:10;9858:3;9854:20;9851:1;9844:31;9894:4;9891:1;9884:15;9918:4;9915:1;9908:15;9934:461;9987:3;10025:5;10019:12;10052:6;10047:3;10040:19;10078:4;10107:2;10102:3;10098:12;10091:19;;10144:2;10137:5;10133:14;10165:1;10175:195;10189:6;10186:1;10183:13;10175:195;;;10254:13;;-1:-1:-1;;;;;10250:39:1;10238:52;;10310:12;;;;10345:15;;;;10286:1;10204:9;10175:195;;;-1:-1:-1;10386:3:1;;9934:461;-1:-1:-1;;;;;9934:461:1:o;10400:510::-;10671:6;10660:9;10653:25;10714:3;10709:2;10698:9;10694:18;10687:31;10634:4;10735:57;10787:3;10776:9;10772:19;10764:6;10735:57;:::i;:::-;-1:-1:-1;;;;;10828:32:1;;;;10823:2;10808:18;;10801:60;-1:-1:-1;10892:2:1;10877:18;10870:34;10727:65;10400:510;-1:-1:-1;;10400:510:1:o;10915:1105::-;11010:6;11041:2;11084;11072:9;11063:7;11059:23;11055:32;11052:52;;;11100:1;11097;11090:12;11052:52;11133:9;11127:16;11162:18;11203:2;11195:6;11192:14;11189:34;;;11219:1;11216;11209:12;11189:34;11257:6;11246:9;11242:22;11232:32;;11302:7;11295:4;11291:2;11287:13;11283:27;11273:55;;11324:1;11321;11314:12;11273:55;11353:2;11347:9;11375:2;11371;11368:10;11365:36;;;11381:18;;:::i;:::-;11427:2;11424:1;11420:10;11459:2;11453:9;11522:2;11518:7;11513:2;11509;11505:11;11501:25;11493:6;11489:38;11577:6;11565:10;11562:22;11557:2;11545:10;11542:18;11539:46;11536:72;;;11588:18;;:::i;:::-;11624:2;11617:22;11674:18;;;11708:15;;;;-1:-1:-1;11750:11:1;;;11746:20;;;11778:19;;;11775:39;;;11810:1;11807;11800:12;11775:39;11834:11;;;;11854:135;11870:6;11865:3;11862:15;11854:135;;;11936:10;;11924:23;;11887:12;;;;11967;;;;11854:135;;;12008:6;10915:1105;-1:-1:-1;;;;;;;;10915:1105:1:o;12025:332::-;12232:6;12221:9;12214:25;12275:2;12270;12259:9;12255:18;12248:30;12195:4;12295:56;12347:2;12336:9;12332:18;12324:6;12295:56;:::i;:::-;12287:64;12025:332;-1:-1:-1;;;;12025:332:1:o;12769:127::-;12830:10;12825:3;12821:20;12818:1;12811:31;12861:4;12858:1;12851:15;12885:4;12882:1;12875:15;12901:128;12941:3;12972:1;12968:6;12965:1;12962:13;12959:39;;;12978:18;;:::i;:::-;-1:-1:-1;13014:9:1;;12901:128::o;13034:125::-;13074:4;13102:1;13099;13096:8;13093:34;;;13107:18;;:::i;:::-;-1:-1:-1;13144:9:1;;13034:125::o;13164:135::-;13203:3;13224:17;;;13221:43;;13244:18;;:::i;:::-;-1:-1:-1;13291:1:1;13280:13;;13164:135::o;13304:168::-;13344:7;13410:1;13406;13402:6;13398:14;13395:1;13392:21;13387:1;13380:9;13373:17;13369:45;13366:71;;;13417:18;;:::i;:::-;-1:-1:-1;13457:9:1;;13304:168::o;13477:217::-;13517:1;13543;13533:132;;13587:10;13582:3;13578:20;13575:1;13568:31;13622:4;13619:1;13612:15;13650:4;13647:1;13640:15;13533:132;-1:-1:-1;13679:9:1;;13477:217::o;13699:251::-;13769:6;13822:2;13810:9;13801:7;13797:23;13793:32;13790:52;;;13838:1;13835;13828:12;13790:52;13870:9;13864:16;13889:31;13914:5;13889:31;:::i

Swarm Source

ipfs://2cea516f4d6c3895a2b7f683ab3084a9f0fcbcff22a26a4e03cfc58d97d4c380
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.