ETH Price: $3,176.22 (+1.33%)
Gas: 8 Gwei

Token

rbasx.finance (RBASX)
 

Overview

Max Total Supply

41,520.902204704 RBASX

Holders

293

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.421446444 RBASX

Value
$0.00
0x505920cf689dc11bc0fb6013c4d0ec5c59ebb7c1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RBASX

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-14
*/

pragma solidity ^0.6.0;


/**
 * @dev Wrappers over Solidity's uintXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and then downcasting.
 */
library SafeCast {

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits.
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        require(value < 2**255, "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

// File: @openzeppelin/contracts-ethereum-package/contracts/Initializable.sol

pragma solidity >=0.4.24 <0.7.0;


/**
 * @title Initializable
 *
 * @dev Helper contract to support initializer functions. To use it, replace
 * the constructor with a function that has the `initializer` modifier.
 * WARNING: Unlike constructors, initializer functions must be manually
 * invoked. This applies both to deploying an Initializable contract, as well
 * as extending an Initializable contract via inheritance.
 * WARNING: When used with inheritance, manual care must be taken to not invoke
 * a parent initializer twice, or ensure that all initializers are idempotent,
 * because this is not dealt with automatically as with constructors.
 */
contract Initializable {

  /**
   * @dev Indicates that the contract has been initialized.
   */
  bool private initialized;

  /**
   * @dev Indicates that the contract is in the process of being initialized.
   */
  bool private initializing;

  /**
   * @dev Modifier to use in the initializer function of a contract.
   */
  modifier initializer() {
    require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized");

    bool isTopLevelCall = !initializing;
    if (isTopLevelCall) {
      initializing = true;
      initialized = true;
    }

    _;

    if (isTopLevelCall) {
      initializing = false;
    }
  }

  /// @dev Returns true if and only if the function is running in the constructor
  function isConstructor() private view returns (bool) {
    // extcodesize checks the size of the code stored in an address, and
    // address returns the current address. Since the code is still not
    // deployed when running a constructor, any checks on its code size will
    // yield zero, making it an effective way to detect if a contract is
    // under construction or not.
    address self = address(this);
    uint256 cs;
    assembly { cs := extcodesize(self) }
    return cs == 0;
  }

  // Reserved storage space to allow for layout changes in the future.
  uint256[50] private ______gap;
}

// File: @openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol

pragma solidity ^0.6.0;


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

    function __Context_init() internal initializer {
        __Context_init_unchained();
    }

    function __Context_init_unchained() internal initializer {


    }


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

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

    uint256[50] private __gap;
}

// File: @openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol

pragma solidity ^0.6.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.
 */
contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */

    function __Ownable_init() internal initializer {
        __Context_init_unchained();
        __Ownable_init_unchained();
    }

    function __Ownable_init_unchained() internal initializer {


        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);

    }


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

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

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

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

    uint256[49] private __gap;
}

// File: @openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol

pragma solidity ^0.6.0;

/**
 * @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: @openzeppelin/contracts-ethereum-package/contracts/math/SafeMath.sol

pragma solidity ^0.6.0;

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

// File: @openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol

pragma solidity ^0.6.2;

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

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

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

    mapping (address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for {name} and {symbol}, initializes {decimals} with
     * a default value of 18.
     *
     * To select a different value for {decimals}, use {_setupDecimals}.
     *
     * All three of these values are immutable: they can only be set once during
     * construction.
     */

    function __ERC20_init(string memory name, string memory symbol) internal initializer {
        __Context_init_unchained();
        __ERC20_init_unchained(name, symbol);
    }

    function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer {


        _name = name;
        _symbol = symbol;
        _decimals = 18;

    }


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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Sets {decimals} to a value other than the default one of 18.
     *
     * WARNING: This function should only be called from the constructor. Most
     * applications that interact with token contracts will not expect
     * {decimals} to ever change, and may work incorrectly if it does.
     */
    function _setupDecimals(uint8 decimals_) internal {
        _decimals = decimals_;
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { }

    uint256[44] private __gap;
}


contract RBASX is ERC20UpgradeSafe, OwnableUpgradeSafe {
    
    using SafeCast for int256;
    using SafeMath for uint256;
    using Address for address;
    
    struct Transaction {
        bool enabled;
        address destination;
        bytes data;
    }

    event TransactionFailed(address indexed destination, uint index, bytes data);
	
	// Stable ordering is not guaranteed.

    Transaction[] public transactions;

    uint256 private _epoch;
    event LogRebase(uint256 indexed epoch, uint256 totalSupply);

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

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
	
	uint256 private _totalSupply;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _rTotal;
    uint256 private _tFeeTotal;
    
    uint256 private constant DECIMALS = 9;
    uint256 private constant RATE_PRECISION = 10 ** DECIMALS;
    
    uint256 public _tFeePercent;
    uint256 public _tFeeTimestamp;
    
    address public _rebaser;
    
    uint256 public _limitExpiresTimestamp;
    uint256 public _limitTransferAmount;
    uint256 public _limitMaxBalance;
    uint256 public _limitSellFeePercent;
    
    uint256 public _limitTimestamp;
    
    constructor() public{
        initialize(30000000000000);
    }
    
    function initialize(uint256 initialSupply)
        public
        initializer
    {
        __ERC20_init("rbasx.finance", "RBASX");
        _setupDecimals(uint8(DECIMALS));
        __Ownable_init();
        
        _totalSupply = initialSupply;
        _rTotal = (MAX - (MAX % _totalSupply));
        
        _rebaser = _msgSender();
        
        _tFeePercent = 300; 
        _tFeeTimestamp = now;

        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _totalSupply);
        
        excludeAccount(_msgSender());
    }
    
    function setRebaser(address rebaser) external onlyOwner() {
        _rebaser = rebaser;
    }
    
    
    
    function setLimit(uint256 expiresTimestamp, uint256 transferAmount, uint256 maxBalance, uint256 sellFeePercent) external onlyOwner() {
        require(_limitTimestamp == 0, "Limit changes not allowed");
        
        _limitExpiresTimestamp = expiresTimestamp;
        _limitTransferAmount = transferAmount;
        _limitMaxBalance = maxBalance;
        _limitSellFeePercent = sellFeePercent;

        _limitTimestamp = now;
    }
    
    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }
    
    function rebase(int256 supplyDelta)
        external
        returns (uint256)
    {
        require(_msgSender() == owner() || _msgSender() == _rebaser, "Sender not authorized");
        
        _epoch = _epoch.add(1);
		
        if (supplyDelta == 0) {
            emit LogRebase(_epoch, _totalSupply);
            return _totalSupply;
        }
        
        uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256();
        uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_totalSupply);
        uint256 multiplier;
        
        if (supplyDelta < 0) {
            multiplier = RATE_PRECISION.sub(rate);
        } else {
            multiplier = RATE_PRECISION.add(rate);
        }
        
        if (supplyDelta < 0) {
            _totalSupply = _totalSupply.sub(uSupplyDelta);
        } else {
            _totalSupply = _totalSupply.add(uSupplyDelta);
        }
        
        if (_totalSupply > MAX) {
            _totalSupply = MAX;
        }
        
        for (uint256 i = 0; i < _excluded.length; i++) {
            if(_tOwned[_excluded[i]] > 0) {
                _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION);
            }
        }
        
        emit LogRebase(_epoch, _totalSupply);

		for (uint i = 0; i < transactions.length; i++) {
            Transaction storage t = transactions[i];
            if (t.enabled) {
                bool result = externalCall(t.destination, t.data);
                if (!result) {
                    emit TransactionFailed(t.destination, i, t.data);
                    revert("Transaction Failed");
                }
            }
        }

        return _totalSupply;
    }
    
    /**
     * @notice Adds a transaction that gets called for a downstream receiver of rebases
     * @param destination Address of contract destination
     * @param data Transaction data payload
     */
	
    function addTransaction(address destination, bytes memory data)
        external
        onlyOwner
    {
        transactions.push(Transaction({
            enabled: true,
            destination: destination,
            data: data
        }));
    }
	
	/**
     * @param index Index of transaction to remove.
     *              Transaction ordering may have changed since adding.
     */

    function removeTransaction(uint index)
        external
        onlyOwner
    {
        require(index < transactions.length, "index out of bounds");

        if (index < transactions.length - 1) {
            transactions[index] = transactions[transactions.length - 1];
        }

        transactions.pop();
    }
	
	/**
     * @param index Index of transaction. Transaction ordering may have changed since adding.
     * @param enabled True for enabled, false for disabled.
     */

    function setTransactionEnabled(uint index, bool enabled)
        external
        onlyOwner
    {
        require(index < transactions.length, "index must be in range of stored tx list");
        transactions[index].enabled = enabled;
    }
	
	/**
     * @return Number of transactions, both enabled and disabled, in transactions list.
     */

    function transactionsSize()
        external
        view
        returns (uint256)
    {
        return transactions.length;
    }
	
	/**
     * @dev wrapper to call the encoded transactions on downstream consumers.
     * @param destination Address of destination contract.
     * @param data The encoded data payload.
     * @return True on success
     */

    function externalCall(address destination, bytes memory data)
        internal
        returns (bool)
    {
        bool result;
        assembly {  // solhint-disable-line no-inline-assembly
            // "Allocate" memory for output
            // (0x40 is where "free memory" pointer is stored by convention)
            let outputAddress := mload(0x40)

            // First 32 bytes are the padded length of data, so exclude that
            let dataAddress := add(data, 32)

            result := call(
                // 34710 is the value that solidity is currently emitting
                // It includes callGas (700) + callVeryLow (3, to pay for SUB)
                // + callValueTransferGas (9000) + callNewAccountGas
                // (25000, in case the destination address does not exist and needs creating)
                sub(gas(), 34710),


                destination,
                0, // transfer value in wei
                dataAddress,
                mload(data),  // Size of the input, in bytes. Stored in position 0 of the array.
                outputAddress,
                0  // Output is ignored, therefore the output size is zero
            )
        }
        return result;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromRefraction(_rOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual override returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual override returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

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

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

    function excludeAccount(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromRefraction(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) public onlyOwner() {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(address sender, address recipient, uint256 amount) internal override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        
        if(_isExcluded[sender] && !_isExcluded[recipient]) {
            
            if(_limitExpiresTimestamp >= now) {
                require(amount <= _limitTransferAmount, "Initial Uniswap listing - amount exceeds transfer limit");
                require(balanceOf(recipient).add(amount) <= _limitMaxBalance, "Initial Uniswap listing - max balance limit");
            }
            
            _transferFromExcluded(sender, recipient, amount, _tFeePercent);
            
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            
            if(_limitExpiresTimestamp >= now) {
                _transferToExcluded(sender, recipient, amount, _limitSellFeePercent);
            } else {
                _transferToExcluded(sender, recipient, amount, _tFeePercent);
            }

        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            require(_limitExpiresTimestamp < now, "Initial Uniswap listing - Wallet to Wallet transfers temporarily disabled");
            _transferStandard(sender, recipient, amount, _tFeePercent);
            
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount, 0);
            
        } else {
            require(_limitExpiresTimestamp < now, "Initial Uniswap listing - Wallet to Wallet transfers temporarily disabled");
            _transferStandard(sender, recipient, amount, _tFeePercent);
            
        }
    }
    

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

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

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

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

    function _refractFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount, uint256 tFeePercent) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount, tFeePercent);
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(uint256 tAmount, uint256 tFeePercent) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.mul(tFeePercent).div(10000);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _totalSupply;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _totalSupply);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_totalSupply)) return (_rTotal, _totalSupply);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","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":"destination","type":"address"},{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransactionFailed","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":"_limitExpiresTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitMaxBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitSellFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitTransferAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tFeeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"addTransaction","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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"initialSupply","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"refract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"refractionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"removeTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"expiresTimestamp","type":"uint256"},{"internalType":"uint256","name":"transferAmount","type":"uint256"},{"internalType":"uint256","name":"maxBalance","type":"uint256"},{"internalType":"uint256","name":"sellFeePercent","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setTransactionEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromRefraction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"address","name":"destination","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionsSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5062000029651b48eb57e0006200002f60201b60201c565b6200138c565b600060019054906101000a900460ff1680620000575750620000566200034660201b60201c565b5b806200006e575060008054906101000a900460ff16155b620000c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006b29602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000116576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620001926040518060400160405280600d81526020017f72626173782e66696e616e6365000000000000000000000000000000000000008152506040518060400160405280600581526020017f52424153580000000000000000000000000000000000000000000000000000008152506200035d60201b60201c565b620001a460096200048d60201b60201c565b620001b4620004ab60201b60201c565b8160d08190555060d05460001981620001c957fe5b066000190360d181905550620001e4620005d760201b60201c565b60d560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c60d3819055504260d48190555060d15460cb60006200024b620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000299620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d0546040518082815260200191505060405180910390a36200032062000314620005d760201b60201c565b620005df60201b60201c565b8015620003425760008060016101000a81548160ff0219169083151502179055505b5050565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680620003855750620003846200034660201b60201c565b5b806200039c575060008054906101000a900460ff16155b620003f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006b29602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000444576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620004546200090e60201b60201c565b62000466838362000a1a60201b60201c565b8015620004885760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff1680620004d35750620004d26200034660201b60201c565b5b80620004ea575060008054906101000a900460ff16155b62000541576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006b29602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000592576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620005a26200090e60201b60201c565b620005b262000b7660201b60201c565b8015620005d45760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b620005ef620005d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60ce60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111562000850576200080c60cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d3360201b60201c565b60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060cf819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600060019054906101000a900460ff1680620009365750620009356200034660201b60201c565b5b806200094d575060008054906101000a900460ff16155b620009a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006b29602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015620009f5576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b801562000a175760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000a42575062000a416200034660201b60201c565b5b8062000a59575060008054906101000a900460ff16155b62000ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006b29602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000b01576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019062000b19929190620012e6565b50816069908051906020019062000b32929190620012e6565b506012606a60006101000a81548160ff021916908360ff160217905550801562000b715760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff168062000b9e575062000b9d6200034660201b60201c565b5b8062000bb5575060008054906101000a900460ff16155b62000c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018062006b29602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801562000c5d576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b600062000c6f620005d760201b60201c565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801562000d305760008060016101000a81548160ff0219169083151502179055505b50565b600060d15482111562000d92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062006b57602a913960400191505060405180910390fd5b600062000da462000dc860201b60201c565b905062000dc0818462000e0260201b6200334f1790919060201c565b915050919050565b600080600062000ddd62000e5460201b60201c565b9150915062000dfb818362000e0260201b6200334f1790919060201c565b9250505090565b600062000e4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200110560201b60201c565b905092915050565b600080600060d1549050600060d054905060005b60cf80549050811015620010bf578260cb600060cf848154811062000e8957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000f7257508160cc600060cf848154811062000f0a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000f8b5760d15460d0549450945050505062001101565b6200101c60cb600060cf848154811062000fa157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484620011d060201b620033991790919060201c565b9250620010af60cc600060cf84815481106200103457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483620011d060201b620033991790919060201c565b9150808060010191505062000e68565b50620010de60d05460d15462000e0260201b6200334f1790919060201c565b821015620010f85760d15460d05493509350505062001101565b81819350935050505b9091565b60008083118290620011b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620011795780820151818401526020810190506200115c565b50505050905090810190601f168015620011a75780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620011c257fe5b049050809150509392505050565b60006200121a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506200122260201b60201c565b905092915050565b6000838311158290620012d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620012975780820151818401526020810190506200127a565b50505050905090810190601f168015620012c55780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200132957805160ff19168380011785556200135a565b828001600101855582156200135a579182015b82811115620013595782518255916020019190600101906200133c565b5b5090506200136991906200136d565b5090565b5b80821115620013885760008160009055506001016200136e565b5090565b61578d806200139c6000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80636e9dde9911610130578063a457c2d7116100b8578063e46adf621161007c578063e46adf6214610b96578063f2cc0c1814610bda578063f2fde38b14610c1e578063f84354f114610c62578063fe4b84df14610ca657610232565b8063a457c2d7146109de578063a9059cbb14610a42578063aef7f99e14610aa6578063cba0e99614610ac4578063dd62ed3e14610b1e57610232565b80638da5cb5b116100ff5780638da5cb5b146107ee57806391d4ec181461082257806395d89b411461084057806397d0677b146108c35780639ace38c21461091157610232565b80636e9dde991461073457806370a082311461076e578063715018a6146107c65780637d449789146107d057610232565b80632ae427dc116101be578063395093511161018257806339509351146106045780633aa8d4be14610668578063456e0a5d1461069c57806346c3bd1f146106ba5780635c1eca84146106e857610232565b80632ae427dc146105475780632bc1281e14610565578063303bb0b614610583578063313ce567146105c557806338a9ad1d146105e657610232565b8063126e19be11610205578063126e19be1461037e57806313114a9d1461045957806314f43f7e1461047757806318160ddd146104a557806323b872dd146104c357610232565b806306fdde031461023757806308d1dd8a146102ba578063095ea7b3146102d85780630ab114f91461033c575b600080fd5b61023f610cd4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2610d76565b6040518082815260200191505060405180910390f35b610324600480360360408110156102ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d7c565b60405180821515815260200191505060405180910390f35b6103686004803603602081101561035257600080fd5b8101908080359060200190929190505050610d9a565b6040518082815260200191505060405180910390f35b6104576004803603604081101561039457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103d157600080fd5b8201836020820111156103e357600080fd5b8035906020019184600183028401116401000000008311171561040557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611498565b005b61046161164b565b6040518082815260200191505060405180910390f35b6104a36004803603602081101561048d57600080fd5b8101908080359060200190929190505050611655565b005b6104ad6117e8565b6040518082815260200191505060405180910390f35b61052f600480360360608110156104d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117f2565b60405180821515815260200191505060405180910390f35b61054f6118cb565b6040518082815260200191505060405180910390f35b61056d6118d1565b6040518082815260200191505060405180910390f35b6105af6004803603602081101561059957600080fd5b81019080803590602001909291905050506118d7565b6040518082815260200191505060405180910390f35b6105cd61195b565b604051808260ff16815260200191505060405180910390f35b6105ee611972565b6040518082815260200191505060405180910390f35b6106506004803603604081101561061a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611978565b60405180821515815260200191505060405180910390f35b610670611a2b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106a4611a51565b6040518082815260200191505060405180910390f35b6106e6600480360360208110156106d057600080fd5b8101908080359060200190929190505050611a57565b005b610732600480360360808110156106fe57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611d1b565b005b61076c6004803603604081101561074a57600080fd5b8101908080359060200190929190803515159060200190929190505050611e86565b005b6107b06004803603602081101561078457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe7565b6040518082815260200191505060405180910390f35b6107ce6120d2565b005b6107d861225d565b6040518082815260200191505060405180910390f35b6107f6612263565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61082a61228d565b6040518082815260200191505060405180910390f35b61084861229a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088857808201518184015260208101905061086d565b50505050905090810190601f1680156108b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108fb600480360360408110156108d957600080fd5b810190808035906020019092919080351515906020019092919050505061233c565b6040518082815260200191505060405180910390f35b61093d6004803603602081101561092757600080fd5b81019080803590602001909291905050506123f7565b6040518084151581526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156109a1578082015181840152602081019050610986565b50505050905090810190601f1680156109ce5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610a2a600480360360408110156109f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124f3565b60405180821515815260200191505060405180910390f35b610a8e60048036036040811015610a5857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125c0565b60405180821515815260200191505060405180910390f35b610aae6125de565b6040518082815260200191505060405180910390f35b610b0660048036036020811015610ada57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125e4565b60405180821515815260200191505060405180910390f35b610b8060048036036040811015610b3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061263a565b6040518082815260200191505060405180910390f35b610bd860048036036020811015610bac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126c1565b005b610c1c60048036036020811015610bf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127cf565b005b610c6060048036036020811015610c3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aeb565b005b610ca460048036036020811015610c7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cfb565b005b610cd260048036036020811015610cbc57600080fd5b8101908080359060200190929190505050613087565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d6c5780601f10610d4157610100808354040283529160200191610d6c565b820191906000526020600020905b815481529060010190602001808311610d4f57829003601f168201915b5050505050905090565b60da5481565b6000610d90610d896133e3565b84846133eb565b6001905092915050565b6000610da4612263565b73ffffffffffffffffffffffffffffffffffffffff16610dc26133e3565b73ffffffffffffffffffffffffffffffffffffffff161480610e38575060d560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e206133e3565b73ffffffffffffffffffffffffffffffffffffffff16145b610eaa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610ec0600160ca546135e290919063ffffffff16565b60ca819055506000821415610f155760ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d0546040518082815260200191505060405180910390a260d0549050611493565b6000610f3260008412610f285783610f2d565b836000035b61366a565b90506000610f6160d054610f536009600a0a856136ea90919063ffffffff16565b61334f90919063ffffffff16565b9050600080851215610f8b57610f84826009600a0a61339990919063ffffffff16565b9050610fa5565b610fa2826009600a0a6135e290919063ffffffff16565b90505b6000851215610fce57610fc38360d05461339990919063ffffffff16565b60d081905550610fea565b610fe38360d0546135e290919063ffffffff16565b60d0819055505b60001960d05411156110005760001960d0819055505b60005b60cf805490508110156111b657600060cc600060cf848154811061102357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111a95761112e6009600a0a6111208460cc600060cf87815481106110ac57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ea90919063ffffffff16565b61334f90919063ffffffff16565b60cc600060cf848154811061113f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050611003565b5060ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d0546040518082815260200191505060405180910390a260005b60c98054905081101561148957600060c9828154811061121257fe5b906000526020600020906002020190508060000160009054906101000a900460ff161561147b5760006113058260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112fb5780601f106112d0576101008083540402835291602001916112fb565b820191906000526020600020905b8154815290600101906020018083116112de57829003601f168201915b5050505050613770565b905080611479578160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263848460010160405180838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113fc5780601f106113d1576101008083540402835291602001916113fc565b820191906000526020600020905b8154815290600101906020018083116113df57829003601f168201915b5050935050505060405180910390a26040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5472616e73616374696f6e204661696c6564000000000000000000000000000081525060200191505060405180910390fd5b505b5080806001019150506111f6565b5060d05493505050505b919050565b6114a06133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c960405180606001604052806001151581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010190805190602001906116449291906152c9565b5050505050565b600060d254905090565b600061165f6133e3565b905060ce60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615707602c913960400191505060405180910390fd5b60006117128360d354613797565b50505050905061176a8160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117c28160d15461339990919063ffffffff16565b60d1819055506117dd8360d2546135e290919063ffffffff16565b60d281905550505050565b600060d054905090565b60006117ff8484846137f1565b6118c08461180b6133e3565b6118bb856040518060600160405280602881526020016155ea6028913960cd60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006118716133e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e039092919063ffffffff16565b6133eb565b600190509392505050565b60d35481565b60d75481565b600060d154821115611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615694602a913960400191505060405180910390fd5b600061193e613ec3565b9050611953818461334f90919063ffffffff16565b915050919050565b6000606a60009054906101000a900460ff16905090565b60d65481565b6000611a216119856133e3565b84611a1c8560cd60006119966133e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b6133eb565b6001905092915050565b60d560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60d85481565b611a5f6133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508110611b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e646578206f7574206f6620626f756e64730000000000000000000000000081525060200191505060405180910390fd5b600160c98054905003811015611ca95760c9600160c9805490500381548110611bc057fe5b906000526020600020906002020160c98281548110611bdb57fe5b90600052602060002090600202016000820160009054906101000a900460ff168160000160006101000a81548160ff0219169083151502179055506000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019080546001816001161561010002031660029004611ca4929190615349565b509050505b60c9805480611cb457fe5b6001900381819060005260206000209060020201600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611d1491906153d0565b5050905550565b611d236133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060da5414611e5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c696d6974206368616e676573206e6f7420616c6c6f7765640000000000000081525060200191505060405180910390fd5b8360d6819055508260d7819055508160d8819055508060d9819055504260da8190555050505050565b611e8e6133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508210611fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806155216028913960400191505060405180910390fd5b8060c98381548110611fbb57fe5b906000526020600020906002020160000160006101000a81548160ff0219169083151502179055505050565b600060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120825760cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506120cd565b6120ca60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d7565b90505b919050565b6120da6133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60d95481565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060c980549050905090565b606060698054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123325780601f1061230757610100808354040283529160200191612332565b820191906000526020600020905b81548152906001019060200180831161231557829003601f168201915b5050505050905090565b600060d0548311156123b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816123d85760006123c98460d354613797565b505050509050809150506123f1565b60006123e68460d354613797565b505050915050809150505b92915050565b60c9818154811061240457fe5b90600052602060002090600202016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124e95780601f106124be576101008083540402835291602001916124e9565b820191906000526020600020905b8154815290600101906020018083116124cc57829003601f168201915b5050505050905083565b60006125b66125006133e3565b846125b1856040518060600160405280602581526020016157336025913960cd600061252a6133e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e039092919063ffffffff16565b6133eb565b6001905092915050565b60006125d46125cd6133e3565b84846137f1565b6001905092915050565b60d45481565b600060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060cd60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126c96133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461278b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060d560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127d76133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60ce60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612a2d576129e960cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d7565b60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060cf819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612af36133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154d96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612d036133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60ce60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60005b60cf80549050811015613083578173ffffffffffffffffffffffffffffffffffffffff1660cf8281548110612eb857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130765760cf600160cf805490500381548110612f1457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660cf8281548110612f4c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060cc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060cf80548061303c57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613083565b8080600101915050612e87565b5050565b600060019054906101000a900460ff16806130a657506130a5613eee565b5b806130bc575060008054906101000a900460ff16155b613111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613161576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6131d56040518060400160405280600d81526020017f72626173782e66696e616e6365000000000000000000000000000000000000008152506040518060400160405280600581526020017f5242415358000000000000000000000000000000000000000000000000000000815250613f05565b6131df6009614017565b6131e7614035565b8160d08190555060d054600019816131fb57fe5b066000190360d18190555061320e6133e3565b60d560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c60d3819055504260d48190555060d15460cb600061326d6133e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b36133e3565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d0546040518082815260200191505060405180910390a361332a6133256133e3565b6127cf565b801561334b5760008060016101000a81548160ff0219169083151502179055505b5050565b600061339183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614143565b905092915050565b60006133db83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613e03565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613471576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156e36024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154ff6022913960400191505060405180910390fd5b8060cd60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600080828401905083811015613660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808212156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b6000808314156136fd576000905061376a565b600082840290508284828161370e57fe5b0414613765576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155c96021913960400191505060405180910390fd5b809150505b92915050565b6000806040516020840160008286518360008a6187965a03f1925050508091505092915050565b60008060008060008060006137ac8989614209565b9150915060006137ba613ec3565b905060008060006137cc8d868661425d565b92509250925082828288889a509a509a509a509a505050505050509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613877576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806156be6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154b66023913960400191505060405180910390fd5b60008111613956576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806156126029913960400191505060405180910390fd5b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139f9575060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613aeb574260d65410613ad85760d754811115613a62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806155926037913960400191505060405180910390fd5b60d854613a8082613a7285611fe7565b6135e290919063ffffffff16565b1115613ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615669602b913960400191505060405180910390fd5b5b613ae683838360d3546142bb565b613dfe565b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b8e575060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bc3574260d65410613baf57613baa83838360d954614510565b613bbe565b613bbd83838360d354614510565b5b613dfd565b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613c67575060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cd9574260d65410613cc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260498152602001806155496049913960600191505060405180910390fd5b613cd483838360d354614765565b613dfc565b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d7b575060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d9257613d8d8383836000614925565b613dfb565b4260d65410613dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260498152602001806155496049913960600191505060405180910390fd5b613dfa83838360d354614765565b5b5b5b5b505050565b6000838311158290613eb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e75578082015181840152602081019050613e5a565b50505050905090810190601f168015613ea25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613ed0614c0f565b91509150613ee7818361334f90919063ffffffff16565b9250505090565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680613f245750613f23613eee565b5b80613f3a575060008054906101000a900460ff16155b613f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613fdf576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613fe7614ea0565b613ff18383614f9e565b80156140125760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff16806140545750614053613eee565b5b8061406a575060008054906101000a900460ff16155b6140bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561410f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b614117614ea0565b61411f6150e8565b80156141405760008060016101000a81548160ff0219169083151502179055505b50565b600080831182906141ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141b4578082015181840152602081019050614199565b50505050905090810190601f1680156141e15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816141fb57fe5b049050809150509392505050565b600080600061423561271061422786886136ea90919063ffffffff16565b61334f90919063ffffffff16565b9050600061424c828761339990919063ffffffff16565b905080829350935050509250929050565b60008060008061427685886136ea90919063ffffffff16565b9050600061428d86886136ea90919063ffffffff16565b905060006142a4828461339990919063ffffffff16565b905082818395509550955050505093509350939050565b60008060008060006142cd8787613797565b945094509450945094506143298760cc60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cc60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143be8560cb60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144538460cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cb60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144a0838261528f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b60008060008060006145228787613797565b9450945094509450945061457e8560cb60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146138260cc60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cc60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146a88460cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cb60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146f5838261528f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b60008060008060006147778787613797565b945094509450945094506147d38560cb60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148688460cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cb60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148b5838261528f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b60008060008060006149378787613797565b945094509450945094506149938760cc60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cc60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a288560cb60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614abd8260cc60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cc60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b528460cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cb60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9f838261528f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b600080600060d1549050600060d054905060005b60cf80549050811015614e63578260cb600060cf8481548110614c4257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614d2957508160cc600060cf8481548110614cc157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614d405760d15460d05494509450505050614e9c565b614dc960cb600060cf8481548110614d5457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461339990919063ffffffff16565b9250614e5460cc600060cf8481548110614ddf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361339990919063ffffffff16565b91508080600101915050614c23565b50614e7b60d05460d15461334f90919063ffffffff16565b821015614e935760d15460d054935093505050614e9c565b81819350935050505b9091565b600060019054906101000a900460ff1680614ebf5750614ebe613eee565b5b80614ed5575060008054906101000a900460ff16155b614f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614f7a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015614f9b5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680614fbd5750614fbc613eee565b5b80614fd3575060008054906101000a900460ff16155b615028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015615078576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019061508e929190615418565b5081606990805190602001906150a5929190615418565b506012606a60006101000a81548160ff021916908360ff16021790555080156150e35760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff16806151075750615106613eee565b5b8061511d575060008054906101000a900460ff16155b615172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156151c2576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b60006151cc6133e3565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801561528c5760008060016101000a81548160ff0219169083151502179055505b50565b6152a48260d15461339990919063ffffffff16565b60d1819055506152bf8160d2546135e290919063ffffffff16565b60d2819055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061530a57805160ff1916838001178555615338565b82800160010185558215615338579182015b8281111561533757825182559160200191906001019061531c565b5b5090506153459190615498565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061538257805485556153bf565b828001600101855582156153bf57600052602060002091601f016020900482015b828111156153be5782548255916001019190600101906153a3565b5b5090506153cc9190615498565b5090565b50805460018160011615610100020316600290046000825580601f106153f65750615415565b601f0160209004906000526020600020908101906154149190615498565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061545957805160ff1916838001178555615487565b82800160010185558215615487579182015b8281111561548657825182559160200191906001019061546b565b5b5090506154949190615498565b5090565b5b808211156154b1576000816000905550600101615499565b509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c697374496e697469616c20556e6973776170206c697374696e67202d2057616c6c657420746f2057616c6c6574207472616e73666572732074656d706f726172696c792064697361626c6564496e697469616c20556e6973776170206c697374696e67202d20616d6f756e742065786365656473207472616e73666572206c696d6974536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564496e697469616c20556e6973776170206c697374696e67202d206d61782062616c616e6365206c696d6974416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220be5e16d05b703f6db9453d5e5647f88fd5c62c8e620b5e5fa770ca8dd65df77a64736f6c634300060c0033436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e73

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102325760003560e01c80636e9dde9911610130578063a457c2d7116100b8578063e46adf621161007c578063e46adf6214610b96578063f2cc0c1814610bda578063f2fde38b14610c1e578063f84354f114610c62578063fe4b84df14610ca657610232565b8063a457c2d7146109de578063a9059cbb14610a42578063aef7f99e14610aa6578063cba0e99614610ac4578063dd62ed3e14610b1e57610232565b80638da5cb5b116100ff5780638da5cb5b146107ee57806391d4ec181461082257806395d89b411461084057806397d0677b146108c35780639ace38c21461091157610232565b80636e9dde991461073457806370a082311461076e578063715018a6146107c65780637d449789146107d057610232565b80632ae427dc116101be578063395093511161018257806339509351146106045780633aa8d4be14610668578063456e0a5d1461069c57806346c3bd1f146106ba5780635c1eca84146106e857610232565b80632ae427dc146105475780632bc1281e14610565578063303bb0b614610583578063313ce567146105c557806338a9ad1d146105e657610232565b8063126e19be11610205578063126e19be1461037e57806313114a9d1461045957806314f43f7e1461047757806318160ddd146104a557806323b872dd146104c357610232565b806306fdde031461023757806308d1dd8a146102ba578063095ea7b3146102d85780630ab114f91461033c575b600080fd5b61023f610cd4565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561027f578082015181840152602081019050610264565b50505050905090810190601f1680156102ac5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c2610d76565b6040518082815260200191505060405180910390f35b610324600480360360408110156102ee57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d7c565b60405180821515815260200191505060405180910390f35b6103686004803603602081101561035257600080fd5b8101908080359060200190929190505050610d9a565b6040518082815260200191505060405180910390f35b6104576004803603604081101561039457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156103d157600080fd5b8201836020820111156103e357600080fd5b8035906020019184600183028401116401000000008311171561040557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611498565b005b61046161164b565b6040518082815260200191505060405180910390f35b6104a36004803603602081101561048d57600080fd5b8101908080359060200190929190505050611655565b005b6104ad6117e8565b6040518082815260200191505060405180910390f35b61052f600480360360608110156104d957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506117f2565b60405180821515815260200191505060405180910390f35b61054f6118cb565b6040518082815260200191505060405180910390f35b61056d6118d1565b6040518082815260200191505060405180910390f35b6105af6004803603602081101561059957600080fd5b81019080803590602001909291905050506118d7565b6040518082815260200191505060405180910390f35b6105cd61195b565b604051808260ff16815260200191505060405180910390f35b6105ee611972565b6040518082815260200191505060405180910390f35b6106506004803603604081101561061a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611978565b60405180821515815260200191505060405180910390f35b610670611a2b565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106a4611a51565b6040518082815260200191505060405180910390f35b6106e6600480360360208110156106d057600080fd5b8101908080359060200190929190505050611a57565b005b610732600480360360808110156106fe57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611d1b565b005b61076c6004803603604081101561074a57600080fd5b8101908080359060200190929190803515159060200190929190505050611e86565b005b6107b06004803603602081101561078457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fe7565b6040518082815260200191505060405180910390f35b6107ce6120d2565b005b6107d861225d565b6040518082815260200191505060405180910390f35b6107f6612263565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61082a61228d565b6040518082815260200191505060405180910390f35b61084861229a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088857808201518184015260208101905061086d565b50505050905090810190601f1680156108b55780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108fb600480360360408110156108d957600080fd5b810190808035906020019092919080351515906020019092919050505061233c565b6040518082815260200191505060405180910390f35b61093d6004803603602081101561092757600080fd5b81019080803590602001909291905050506123f7565b6040518084151581526020018373ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b838110156109a1578082015181840152602081019050610986565b50505050905090810190601f1680156109ce5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390f35b610a2a600480360360408110156109f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506124f3565b60405180821515815260200191505060405180910390f35b610a8e60048036036040811015610a5857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506125c0565b60405180821515815260200191505060405180910390f35b610aae6125de565b6040518082815260200191505060405180910390f35b610b0660048036036020811015610ada57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506125e4565b60405180821515815260200191505060405180910390f35b610b8060048036036040811015610b3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061263a565b6040518082815260200191505060405180910390f35b610bd860048036036020811015610bac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126c1565b005b610c1c60048036036020811015610bf057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127cf565b005b610c6060048036036020811015610c3457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aeb565b005b610ca460048036036020811015610c7857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cfb565b005b610cd260048036036020811015610cbc57600080fd5b8101908080359060200190929190505050613087565b005b606060688054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610d6c5780601f10610d4157610100808354040283529160200191610d6c565b820191906000526020600020905b815481529060010190602001808311610d4f57829003601f168201915b5050505050905090565b60da5481565b6000610d90610d896133e3565b84846133eb565b6001905092915050565b6000610da4612263565b73ffffffffffffffffffffffffffffffffffffffff16610dc26133e3565b73ffffffffffffffffffffffffffffffffffffffff161480610e38575060d560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610e206133e3565b73ffffffffffffffffffffffffffffffffffffffff16145b610eaa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610ec0600160ca546135e290919063ffffffff16565b60ca819055506000821415610f155760ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d0546040518082815260200191505060405180910390a260d0549050611493565b6000610f3260008412610f285783610f2d565b836000035b61366a565b90506000610f6160d054610f536009600a0a856136ea90919063ffffffff16565b61334f90919063ffffffff16565b9050600080851215610f8b57610f84826009600a0a61339990919063ffffffff16565b9050610fa5565b610fa2826009600a0a6135e290919063ffffffff16565b90505b6000851215610fce57610fc38360d05461339990919063ffffffff16565b60d081905550610fea565b610fe38360d0546135e290919063ffffffff16565b60d0819055505b60001960d05411156110005760001960d0819055505b60005b60cf805490508110156111b657600060cc600060cf848154811061102357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156111a95761112e6009600a0a6111208460cc600060cf87815481106110ac57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136ea90919063ffffffff16565b61334f90919063ffffffff16565b60cc600060cf848154811061113f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050611003565b5060ca547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f260d0546040518082815260200191505060405180910390a260005b60c98054905081101561148957600060c9828154811061121257fe5b906000526020600020906002020190508060000160009054906101000a900460ff161561147b5760006113058260000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112fb5780601f106112d0576101008083540402835291602001916112fb565b820191906000526020600020905b8154815290600101906020018083116112de57829003601f168201915b5050505050613770565b905080611479578160000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8091ecaaa54ebb82e02d36c2c336528e0fcb9b3430fc1291ac88295032b9c263848460010160405180838152602001806020018281038252838181546001816001161561010002031660029004815260200191508054600181600116156101000203166002900480156113fc5780601f106113d1576101008083540402835291602001916113fc565b820191906000526020600020905b8154815290600101906020018083116113df57829003601f168201915b5050935050505060405180910390a26040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5472616e73616374696f6e204661696c6564000000000000000000000000000081525060200191505060405180910390fd5b505b5080806001019150506111f6565b5060d05493505050505b919050565b6114a06133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611562576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c960405180606001604052806001151581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010190805190602001906116449291906152c9565b5050505050565b600060d254905090565b600061165f6133e3565b905060ce60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615707602c913960400191505060405180910390fd5b60006117128360d354613797565b50505050905061176a8160cb60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117c28160d15461339990919063ffffffff16565b60d1819055506117dd8360d2546135e290919063ffffffff16565b60d281905550505050565b600060d054905090565b60006117ff8484846137f1565b6118c08461180b6133e3565b6118bb856040518060600160405280602881526020016155ea6028913960cd60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006118716133e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e039092919063ffffffff16565b6133eb565b600190509392505050565b60d35481565b60d75481565b600060d154821115611934576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615694602a913960400191505060405180910390fd5b600061193e613ec3565b9050611953818461334f90919063ffffffff16565b915050919050565b6000606a60009054906101000a900460ff16905090565b60d65481565b6000611a216119856133e3565b84611a1c8560cd60006119966133e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b6133eb565b6001905092915050565b60d560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60d85481565b611a5f6133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b21576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508110611b9b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f696e646578206f7574206f6620626f756e64730000000000000000000000000081525060200191505060405180910390fd5b600160c98054905003811015611ca95760c9600160c9805490500381548110611bc057fe5b906000526020600020906002020160c98281548110611bdb57fe5b90600052602060002090600202016000820160009054906101000a900460ff168160000160006101000a81548160ff0219169083151502179055506000820160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018201816001019080546001816001161561010002031660029004611ca4929190615349565b509050505b60c9805480611cb457fe5b6001900381819060005260206000209060020201600080820160006101000a81549060ff02191690556000820160016101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182016000611d1491906153d0565b5050905550565b611d236133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611de5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600060da5414611e5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f4c696d6974206368616e676573206e6f7420616c6c6f7765640000000000000081525060200191505060405180910390fd5b8360d6819055508260d7819055508160d8819055508060d9819055504260da8190555050505050565b611e8e6133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f50576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60c9805490508210611fad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806155216028913960400191505060405180910390fd5b8060c98381548110611fbb57fe5b906000526020600020906002020160000160006101000a81548160ff0219169083151502179055505050565b600060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156120825760cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506120cd565b6120ca60cb60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d7565b90505b919050565b6120da6133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461219c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60d95481565b6000609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060c980549050905090565b606060698054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123325780601f1061230757610100808354040283529160200191612332565b820191906000526020600020905b81548152906001019060200180831161231557829003601f168201915b5050505050905090565b600060d0548311156123b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b816123d85760006123c98460d354613797565b505050509050809150506123f1565b60006123e68460d354613797565b505050915050809150505b92915050565b60c9818154811061240457fe5b90600052602060002090600202016000915090508060000160009054906101000a900460ff16908060000160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156124e95780601f106124be576101008083540402835291602001916124e9565b820191906000526020600020905b8154815290600101906020018083116124cc57829003601f168201915b5050505050905083565b60006125b66125006133e3565b846125b1856040518060600160405280602581526020016157336025913960cd600061252a6133e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613e039092919063ffffffff16565b6133eb565b6001905092915050565b60006125d46125cd6133e3565b84846137f1565b6001905092915050565b60d45481565b600060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600060cd60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126c96133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461278b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060d560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6127d76133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612899576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60ce60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b600060cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612a2d576129e960cb60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118d7565b60cc60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600160ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060cf819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612af36133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612bb5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154d96026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612d036133e3565b73ffffffffffffffffffffffffffffffffffffffff16609760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dc5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60ce60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e84576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f4163636f756e74206973206e6f74206578636c7564656400000000000000000081525060200191505060405180910390fd5b60005b60cf80549050811015613083578173ffffffffffffffffffffffffffffffffffffffff1660cf8281548110612eb857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156130765760cf600160cf805490500381548110612f1457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660cf8281548110612f4c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060cc60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600060ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060cf80548061303c57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613083565b8080600101915050612e87565b5050565b600060019054906101000a900460ff16806130a657506130a5613eee565b5b806130bc575060008054906101000a900460ff16155b613111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613161576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6131d56040518060400160405280600d81526020017f72626173782e66696e616e6365000000000000000000000000000000000000008152506040518060400160405280600581526020017f5242415358000000000000000000000000000000000000000000000000000000815250613f05565b6131df6009614017565b6131e7614035565b8160d08190555060d054600019816131fb57fe5b066000190360d18190555061320e6133e3565b60d560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c60d3819055504260d48190555060d15460cb600061326d6133e3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132b36133e3565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60d0546040518082815260200191505060405180910390a361332a6133256133e3565b6127cf565b801561334b5760008060016101000a81548160ff0219169083151502179055505b5050565b600061339183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614143565b905092915050565b60006133db83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613e03565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613471576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156e36024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806154ff6022913960400191505060405180910390fd5b8060cd60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600080828401905083811015613660576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000808212156136e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b6000808314156136fd576000905061376a565b600082840290508284828161370e57fe5b0414613765576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806155c96021913960400191505060405180910390fd5b809150505b92915050565b6000806040516020840160008286518360008a6187965a03f1925050508091505092915050565b60008060008060008060006137ac8989614209565b9150915060006137ba613ec3565b905060008060006137cc8d868661425d565b92509250925082828288889a509a509a509a509a505050505050509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613877576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806156be6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156138fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154b66023913960400191505060405180910390fd5b60008111613956576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806156126029913960400191505060405180910390fd5b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139f9575060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613aeb574260d65410613ad85760d754811115613a62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806155926037913960400191505060405180910390fd5b60d854613a8082613a7285611fe7565b6135e290919063ffffffff16565b1115613ad7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180615669602b913960400191505060405180910390fd5b5b613ae683838360d3546142bb565b613dfe565b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613b8e575060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bc3574260d65410613baf57613baa83838360d954614510565b613bbe565b613bbd83838360d354614510565b5b613dfd565b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613c67575060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cd9574260d65410613cc6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260498152602001806155496049913960600191505060405180910390fd5b613cd483838360d354614765565b613dfc565b60ce60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d7b575060ce60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613d9257613d8d8383836000614925565b613dfb565b4260d65410613dec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260498152602001806155496049913960600191505060405180910390fd5b613dfa83838360d354614765565b5b5b5b5b505050565b6000838311158290613eb0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613e75578082015181840152602081019050613e5a565b50505050905090810190601f168015613ea25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000613ed0614c0f565b91509150613ee7818361334f90919063ffffffff16565b9250505090565b6000803090506000813b9050600081149250505090565b600060019054906101000a900460ff1680613f245750613f23613eee565b5b80613f3a575060008054906101000a900460ff16155b613f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015613fdf576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613fe7614ea0565b613ff18383614f9e565b80156140125760008060016101000a81548160ff0219169083151502179055505b505050565b80606a60006101000a81548160ff021916908360ff16021790555050565b600060019054906101000a900460ff16806140545750614053613eee565b5b8061406a575060008054906101000a900460ff16155b6140bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff16159050801561410f576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b614117614ea0565b61411f6150e8565b80156141405760008060016101000a81548160ff0219169083151502179055505b50565b600080831182906141ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156141b4578082015181840152602081019050614199565b50505050905090810190601f1680156141e15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816141fb57fe5b049050809150509392505050565b600080600061423561271061422786886136ea90919063ffffffff16565b61334f90919063ffffffff16565b9050600061424c828761339990919063ffffffff16565b905080829350935050509250929050565b60008060008061427685886136ea90919063ffffffff16565b9050600061428d86886136ea90919063ffffffff16565b905060006142a4828461339990919063ffffffff16565b905082818395509550955050505093509350939050565b60008060008060006142cd8787613797565b945094509450945094506143298760cc60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cc60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143be8560cb60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144538460cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cb60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144a0838261528f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b60008060008060006145228787613797565b9450945094509450945061457e8560cb60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146138260cc60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cc60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146a88460cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cb60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146f5838261528f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b60008060008060006147778787613797565b945094509450945094506147d38560cb60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148688460cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cb60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148b5838261528f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b60008060008060006149378787613797565b945094509450945094506149938760cc60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cc60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a288560cb60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461339990919063ffffffff16565b60cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614abd8260cc60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cc60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b528460cb60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135e290919063ffffffff16565b60cb60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9f838261528f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3505050505050505050565b600080600060d1549050600060d054905060005b60cf80549050811015614e63578260cb600060cf8481548110614c4257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180614d2957508160cc600060cf8481548110614cc157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15614d405760d15460d05494509450505050614e9c565b614dc960cb600060cf8481548110614d5457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461339990919063ffffffff16565b9250614e5460cc600060cf8481548110614ddf57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361339990919063ffffffff16565b91508080600101915050614c23565b50614e7b60d05460d15461334f90919063ffffffff16565b821015614e935760d15460d054935093505050614e9c565b81819350935050505b9091565b600060019054906101000a900460ff1680614ebf5750614ebe613eee565b5b80614ed5575060008054906101000a900460ff16155b614f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015614f7a576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8015614f9b5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff1680614fbd5750614fbc613eee565b5b80614fd3575060008054906101000a900460ff16155b615028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015615078576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b826068908051906020019061508e929190615418565b5081606990805190602001906150a5929190615418565b506012606a60006101000a81548160ff021916908360ff16021790555080156150e35760008060016101000a81548160ff0219169083151502179055505b505050565b600060019054906101000a900460ff16806151075750615106613eee565b5b8061511d575060008054906101000a900460ff16155b615172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e81526020018061563b602e913960400191505060405180910390fd5b60008060019054906101000a900460ff1615905080156151c2576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b60006151cc6133e3565b905080609760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350801561528c5760008060016101000a81548160ff0219169083151502179055505b50565b6152a48260d15461339990919063ffffffff16565b60d1819055506152bf8160d2546135e290919063ffffffff16565b60d2819055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061530a57805160ff1916838001178555615338565b82800160010185558215615338579182015b8281111561533757825182559160200191906001019061531c565b5b5090506153459190615498565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061538257805485556153bf565b828001600101855582156153bf57600052602060002091601f016020900482015b828111156153be5782548255916001019190600101906153a3565b5b5090506153cc9190615498565b5090565b50805460018160011615610100020316600290046000825580601f106153f65750615415565b601f0160209004906000526020600020908101906154149190615498565b5b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061545957805160ff1916838001178555615487565b82800160010185558215615487579182015b8281111561548657825182559160200191906001019061546b565b5b5090506154949190615498565b5090565b5b808211156154b1576000816000905550600101615499565b509056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373696e646578206d75737420626520696e2072616e6765206f662073746f726564207478206c697374496e697469616c20556e6973776170206c697374696e67202d2057616c6c657420746f2057616c6c6574207472616e73666572732074656d706f726172696c792064697361626c6564496e697469616c20556e6973776170206c697374696e67202d20616d6f756e742065786365656473207472616e73666572206c696d6974536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564496e697469616c20556e6973776170206c697374696e67202d206d61782062616c616e6365206c696d6974416d6f756e74206d757374206265206c657373207468616e20746f74616c2072656672616374696f6e7345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220be5e16d05b703f6db9453d5e5647f88fd5c62c8e620b5e5fa770ca8dd65df77a64736f6c634300060c0033

Deployed Bytecode Sourcemap

30819:17829:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23359:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32187:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39022:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;33585:1761;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35572:260;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40151:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40246:390;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33473:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39191:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31903:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32059:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41119:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24286:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32015:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;39512:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31979:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32101:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35984:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33019:442;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36491:246;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38490:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9373:148;;;:::i;:::-;;32139:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8731:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;36852:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23561:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40644:467;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31227:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39747:278;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38696:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31937:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40033:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38871:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32900:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41380:330;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9676:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41718:472;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32307:581;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23359:83;23396:13;23429:5;23422:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23359:83;:::o;32187:30::-;;;;:::o;39022:161::-;39097:4;39114:39;39123:12;:10;:12::i;:::-;39137:7;39146:6;39114:8;:39::i;:::-;39171:4;39164:11;;39022:161;;;;:::o;33585:1761::-;33657:7;33706;:5;:7::i;:::-;33690:23;;:12;:10;:12::i;:::-;:23;;;:51;;;;33733:8;;;;;;;;;;;33717:24;;:12;:10;:12::i;:::-;:24;;;33690:51;33682:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33797:13;33808:1;33797:6;;:10;;:13;;;;:::i;:::-;33788:6;:22;;;;33844:1;33829:11;:16;33825:119;;;33877:6;;33867:31;33885:12;;33867:31;;;;;;;;;;;;;;;;;;33920:12;;33913:19;;;;33825:119;33964:20;33987:58;34002:1;33988:11;:15;:44;;34021:11;33988:44;;;34007:11;34006:12;;33988:44;33987:56;:58::i;:::-;33964:81;;34056:12;34071:50;34108:12;;34071:32;31826:1;31876:2;:14;34071:12;:16;;:32;;;;:::i;:::-;:36;;:50;;;;:::i;:::-;34056:65;;34132:18;34189:1;34175:11;:15;34171:155;;;34220:24;34239:4;31826:1;31876:2;:14;34220:18;;:24;;;;:::i;:::-;34207:37;;34171:155;;;34290:24;34309:4;31826:1;31876:2;:14;34290:18;;:24;;;;:::i;:::-;34277:37;;34171:155;34364:1;34350:11;:15;34346:171;;;34397:30;34414:12;34397;;:16;;:30;;;;:::i;:::-;34382:12;:45;;;;34346:171;;;34475:30;34492:12;34475;;:16;;:30;;;;:::i;:::-;34460:12;:45;;;;34346:171;31712:1;31703:11;34541:12;;:18;34537:69;;;31712:1;31703:11;34576:12;:18;;;;34537:69;34631:9;34626:219;34650:9;:16;;;;34646:1;:20;34626:219;;;34715:1;34691:7;:21;34699:9;34709:1;34699:12;;;;;;;;;;;;;;;;;;;;;;;;;34691:21;;;;;;;;;;;;;;;;:25;34688:146;;;34761:57;31826:1;31876:2;:14;34761:37;34787:10;34761:7;:21;34769:9;34779:1;34769:12;;;;;;;;;;;;;;;;;;;;;;;;;34761:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;34737:7;:21;34745:9;34755:1;34745:12;;;;;;;;;;;;;;;;;;;;;;;;;34737:21;;;;;;;;;;;;;;;:81;;;;34688:146;34668:3;;;;;;;34626:219;;;;34880:6;;34870:31;34888:12;;34870:31;;;;;;;;;;;;;;;;;;34913:6;34908:399;34929:12;:19;;;;34925:1;:23;34908:399;;;34970:21;34994:12;35007:1;34994:15;;;;;;;;;;;;;;;;;;34970:39;;35028:1;:9;;;;;;;;;;;;35024:272;;;35058:11;35072:35;35085:1;:13;;;;;;;;;;;;35100:1;:6;;35072:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:12;:35::i;:::-;35058:49;;35131:6;35126:155;;35185:1;:13;;;;;;;;;;;;35167:43;;;35200:1;35203;:6;;35167:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35233:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35126:155;35024:272;;34908:399;34950:3;;;;;;;34908:399;;;;35326:12;;35319:19;;;;;33585:1761;;;;:::o;35572:260::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35689:12:::1;35707:116;;;;;;;;35743:4;35707:116;;;;;;35775:11;35707:116;;;;;;35807:4;35707:116;;::::0;35689:135:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35572:260:::0;;:::o;40151:87::-;40193:7;40220:10;;40213:17;;40151:87;:::o;40246:390::-;40298:14;40315:12;:10;:12::i;:::-;40298:29;;40347:11;:19;40359:6;40347:19;;;;;;;;;;;;;;;;;;;;;;;;;40346:20;40338:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40427:15;40450:33;40461:7;40470:12;;40450:10;:33::i;:::-;40426:57;;;;;;40512:28;40532:7;40512;:15;40520:6;40512:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;40494:7;:15;40502:6;40494:15;;;;;;;;;;;;;;;:46;;;;40561:20;40573:7;40561;;:11;;:20;;;;:::i;:::-;40551:7;:30;;;;40605:23;40620:7;40605:10;;:14;;:23;;;;:::i;:::-;40592:10;:36;;;;40246:390;;;:::o;33473:100::-;33526:7;33553:12;;33546:19;;33473:100;:::o;39191:313::-;39289:4;39306:36;39316:6;39324:9;39335:6;39306:9;:36::i;:::-;39353:121;39362:6;39370:12;:10;:12::i;:::-;39384:89;39422:6;39384:89;;;;;;;;;;;;;;;;;:11;:19;39396:6;39384:19;;;;;;;;;;;;;;;:33;39404:12;:10;:12::i;:::-;39384:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;39353:8;:121::i;:::-;39492:4;39485:11;;39191:313;;;;;:::o;31903:27::-;;;;:::o;32059:35::-;;;;:::o;41119:253::-;41185:7;41224;;41213;:18;;41205:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41289:19;41312:10;:8;:10::i;:::-;41289:33;;41340:24;41352:11;41340:7;:11;;:24;;;;:::i;:::-;41333:31;;;41119:253;;;:::o;24286:83::-;24327:5;24352:9;;;;;;;;;;;24345:16;;24286:83;:::o;32015:37::-;;;;:::o;39512:227::-;39609:4;39626:83;39635:12;:10;:12::i;:::-;39649:7;39658:50;39697:10;39658:11;:25;39670:12;:10;:12::i;:::-;39658:25;;;;;;;;;;;;;;;:34;39684:7;39658:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;39626:8;:83::i;:::-;39727:4;39720:11;;39512:227;;;;:::o;31979:23::-;;;;;;;;;;;;;:::o;32101:31::-;;;;:::o;35984:325::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36092:12:::1;:19;;;;36084:5;:27;36076:59;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;36182:1;36160:12;:19;;;;:23;36152:5;:31;36148:123;;;36222:12;36257:1;36235:12;:19;;;;:23;36222:37;;;;;;;;;;;;;;;;;;36200:12;36213:5;36200:19;;;;;;;;;;;;;;;;;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;36148:123;36283:12;:18;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;35984:325:::0;:::o;33019:442::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33190:1:::1;33171:15;;:20;33163:58;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;33267:16;33242:22;:41;;;;33317:14;33294:20;:37;;;;33361:10;33342:16;:29;;;;33405:14;33382:20;:37;;;;33450:3;33432:15;:21;;;;33019:442:::0;;;;:::o;36491:246::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36617:12:::1;:19;;;;36609:5;:27;36601:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36722:7;36692:12;36705:5;36692:19;;;;;;;;;;;;;;;;;;:27;;;:37;;;;;;;;;;;;;;;;;;36491:246:::0;;:::o;38490:198::-;38556:7;38580:11;:20;38592:7;38580:20;;;;;;;;;;;;;;;;;;;;;;;;;38576:49;;;38609:7;:16;38617:7;38609:16;;;;;;;;;;;;;;;;38602:23;;;;38576:49;38643:37;38663:7;:16;38671:7;38663:16;;;;;;;;;;;;;;;;38643:19;:37::i;:::-;38636:44;;38490:198;;;;:::o;9373:148::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9480:1:::1;9443:40;;9464:6;;;;;;;;;;;9443:40;;;;;;;;;;;;9511:1;9494:6;;:19;;;;;;;;;;;;;;;;;;9373:148::o:0;32139:35::-;;;;:::o;8731:79::-;8769:7;8796:6;;;;;;;;;;;8789:13;;8731:79;:::o;36852:137::-;36930:7;36962:12;:19;;;;36955:26;;36852:137;:::o;23561:87::-;23600:13;23633:7;23626:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23561:87;:::o;40644:467::-;40734:7;40773:12;;40762:7;:23;;40754:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40837:17;40832:272;;40872:15;40895:33;40906:7;40915:12;;40895:10;:33::i;:::-;40871:57;;;;;;40950:7;40943:14;;;;;40832:272;40992:23;41022:33;41033:7;41042:12;;41022:10;:33::i;:::-;40990:65;;;;;;41077:15;41070:22;;;40644:467;;;;;:::o;31227:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39747:278::-;39849:4;39866:129;39875:12;:10;:12::i;:::-;39889:7;39898:96;39937:15;39898:96;;;;;;;;;;;;;;;;;:11;:25;39910:12;:10;:12::i;:::-;39898:25;;;;;;;;;;;;;;;:34;39924:7;39898:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;39866:8;:129::i;:::-;40013:4;40006:11;;39747:278;;;;:::o;38696:167::-;38774:4;38791:42;38801:12;:10;:12::i;:::-;38815:9;38826:6;38791:9;:42::i;:::-;38851:4;38844:11;;38696:167;;;;:::o;31937:29::-;;;;:::o;40033:110::-;40091:4;40115:11;:20;40127:7;40115:20;;;;;;;;;;;;;;;;;;;;;;;;;40108:27;;40033:110;;;:::o;38871:143::-;38952:7;38979:11;:18;38991:5;38979:18;;;;;;;;;;;;;;;:27;38998:7;38979:27;;;;;;;;;;;;;;;;38972:34;;38871:143;;;;:::o;32900:95::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32980:7:::1;32969:8;;:18;;;;;;;;;;;;;;;;;;32900:95:::0;:::o;41380:330::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41460:11:::1;:20;41472:7;41460:20;;;;;;;;;;;;;;;;;;;;;;;;;41459:21;41451:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41545:1;41526:7;:16;41534:7;41526:16;;;;;;;;;;;;;;;;:20;41523:108;;;41582:37;41602:7;:16;41610:7;41602:16;;;;;;;;;;;;;;;;41582:19;:37::i;:::-;41563:7;:16;41571:7;41563:16;;;;;;;;;;;;;;;:56;;;;41523:108;41664:4;41641:11;:20;41653:7;41641:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;41679:9;41694:7;41679:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41380:330:::0;:::o;9676:244::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9785:1:::1;9765:22;;:8;:22;;;;9757:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9875:8;9846:38;;9867:6;;;;;;;;;;;9846:38;;;;;;;;;;;;9904:8;9895:6;;:17;;;;;;;;;;;;;;;;;;9676:244:::0;:::o;41718:472::-;8953:12;:10;:12::i;:::-;8943:22;;:6;;;;;;;;;;;:22;;;8935:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41797:11:::1;:20;41809:7;41797:20;;;;;;;;;;;;;;;;;;;;;;;;;41789:56;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;41861:9;41856:327;41880:9;:16;;;;41876:1;:20;41856:327;;;41938:7;41922:23;;:9;41932:1;41922:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;41918:254;;;41981:9;42010:1;41991:9;:16;;;;:20;41981:31;;;;;;;;;;;;;;;;;;;;;;;;;41966:9;41976:1;41966:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42050:1;42031:7;:16;42039:7;42031:16;;;;;;;;;;;;;;;:20;;;;42093:5;42070:11;:20;42082:7;42070:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;42117:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42151:5;;41918:254;41898:3;;;;;;;41856:327;;;;41718:472:::0;:::o;32307:581::-;4976:12;;;;;;;;;;;:31;;;;4992:15;:13;:15::i;:::-;4976:31;:47;;;;5012:11;;;;;;;;;;5011:12;4976:47;4968:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:19;5106:12;;;;;;;;;;;5105:13;5083:35;;5129:14;5125:83;;;5169:4;5154:12;;:19;;;;;;;;;;;;;;;;;;5196:4;5182:11;;:18;;;;;;;;;;;;;;;;;;5125:83;32403:38:::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;::::0;:12:::1;:38::i;:::-;32452:31;31826:1;32452:14;:31::i;:::-;32494:16;:14;:16::i;:::-;32546:13;32531:12;:28;;;;32594:12;;31712:1;31703:11;32588:18;;;;;;31712:1;31703:11;32581:26;32570:7;:38;;;;32640:12;:10;:12::i;:::-;32629:8;;:23;;;;;;;;;;;;;;;;;;32688:3;32673:12;:18;;;;32720:3;32703:14;:20;;;;32760:7;;32736;:21;32744:12;:10;:12::i;:::-;32736:21;;;;;;;;;;;;;;;:31;;;;32804:12;:10;:12::i;:::-;32783:48;;32800:1;32783:48;;;32818:12;;32783:48;;;;;;;;;;;;;;;;;;32852:28;32867:12;:10;:12::i;:::-;32852:14;:28::i;:::-;5230:14:::0;5226:57;;;5270:5;5255:12;;:20;;;;;;;;;;;;;;;;;;5226:57;32307:581;;:::o;15996:132::-;16054:7;16081:39;16085:1;16088;16081:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;16074:46;;15996:132;;;;:::o;14183:136::-;14241:7;14268:43;14272:1;14275;14268:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;14261:50;;14183:136;;;;:::o;7007:106::-;7060:15;7095:10;7088:17;;7007:106;:::o;42198:347::-;42318:1;42301:19;;:5;:19;;;;42293:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42399:1;42380:21;;:7;:21;;;;42372:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42483:6;42453:11;:18;42465:5;42453:18;;;;;;;;;;;;;;;:27;42472:7;42453:27;;;;;;;;;;;;;;;:36;;;;42521:7;42505:32;;42514:5;42505:32;;;42530:6;42505:32;;;;;;;;;;;;;;;;;;42198:347;;;:::o;13727:181::-;13785:7;13805:9;13821:1;13817;:5;13805:17;;13846:1;13841;:6;;13833:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13899:1;13892:8;;;13727:181;;;;:::o;3296:171::-;3352:7;3389:1;3380:5;:10;;3372:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3453:5;3438:21;;3296:171;;;:::o;15057:471::-;15115:7;15365:1;15360;:6;15356:47;;;15390:1;15383:8;;;;15356:47;15415:9;15431:1;15427;:5;15415:17;;15460:1;15455;15451;:5;;;;;;:10;15443:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15519:1;15512:8;;;15057:471;;;;;:::o;37232:1250::-;37330:4;37352:11;37592:4;37586:11;37720:2;37714:4;37710:13;38367:1;38335:13;38243:4;38237:11;38207;38162:1;38132:11;38103:5;38096;38092:17;37749:691;37739:701;;37383:1068;;38468:6;38461:13;;;37232:1250;;;;:::o;46827:445::-;46907:7;46916;46925;46934;46943;46964:23;46989:12;47005:33;47017:7;47026:11;47005;:33::i;:::-;46963:75;;;;47049:19;47072:10;:8;:10::i;:::-;47049:33;;47094:15;47111:23;47136:12;47152:39;47164:7;47173:4;47179:11;47152;:39::i;:::-;47093:98;;;;;;47210:7;47219:15;47236:4;47242:15;47259:4;47202:62;;;;;;;;;;;;;;;;46827:445;;;;;;;;:::o;42553:1862::-;42678:1;42660:20;;:6;:20;;;;42652:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42762:1;42741:23;;:9;:23;;;;42733:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42832:1;42823:6;:10;42815:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42913:11;:19;42925:6;42913:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;42937:11;:22;42949:9;42937:22;;;;;;;;;;;;;;;;;;;;;;;;;42936:23;42913:46;42910:1498;;;43019:3;42993:22;;:29;42990:294;;43061:20;;43051:6;:30;;43043:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43204:16;;43168:32;43193:6;43168:20;43178:9;43168;:20::i;:::-;:24;;:32;;;;:::i;:::-;:52;;43160:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42990:294;43312:62;43334:6;43342:9;43353:6;43361:12;;43312:21;:62::i;:::-;42910:1498;;;43411:11;:19;43423:6;43411:19;;;;;;;;;;;;;;;;;;;;;;;;;43410:20;:46;;;;;43434:11;:22;43446:9;43434:22;;;;;;;;;;;;;;;;;;;;;;;;;43410:46;43406:1002;;;43516:3;43490:22;;:29;43487:238;;43540:68;43560:6;43568:9;43579:6;43587:20;;43540:19;:68::i;:::-;43487:238;;;43649:60;43669:6;43677:9;43688:6;43696:12;;43649:19;:60::i;:::-;43487:238;43406:1002;;;43749:11;:19;43761:6;43749:19;;;;;;;;;;;;;;;;;;;;;;;;;43748:20;:47;;;;;43773:11;:22;43785:9;43773:22;;;;;;;;;;;;;;;;;;;;;;;;;43772:23;43748:47;43744:664;;;43845:3;43820:22;;:28;43812:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43941:58;43959:6;43967:9;43978:6;43986:12;;43941:17;:58::i;:::-;43744:664;;;44035:11;:19;44047:6;44035:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;44058:11;:22;44070:9;44058:22;;;;;;;;;;;;;;;;;;;;;;;;;44035:45;44031:377;;;44097:51;44119:6;44127:9;44138:6;44146:1;44097:21;:51::i;:::-;44031:377;;;44228:3;44203:22;;:28;44195:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44324:58;44342:6;44350:9;44361:6;44369:12;;44324:17;:58::i;:::-;44031:377;43744:664;43406:1002;42910:1498;42553:1862;;;:::o;14614:192::-;14700:7;14733:1;14728;:6;;14736:12;14720:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14760:9;14776:1;14772;:5;14760:17;;14797:1;14790:8;;;14614:192;;;;;:::o;47893:163::-;47934:7;47955:15;47972;47991:19;:17;:19::i;:::-;47954:56;;;;48028:20;48040:7;48028;:11;;:20;;;;:::i;:::-;48021:27;;;;47893:163;:::o;5377:508::-;5424:4;5771:12;5794:4;5771:28;;5806:10;5852:4;5840:17;5834:23;;5878:1;5872:2;:7;5865:14;;;;5377:508;:::o;22918:177::-;4976:12;;;;;;;;;;;:31;;;;4992:15;:13;:15::i;:::-;4976:31;:47;;;;5012:11;;;;;;;;;;5011:12;4976:47;4968:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:19;5106:12;;;;;;;;;;;5105:13;5083:35;;5129:14;5125:83;;;5169:4;5154:12;;:19;;;;;;;;;;;;;;;;;;5196:4;5182:11;;:18;;;;;;;;;;;;;;;;;;5125:83;23014:26:::1;:24;:26::i;:::-;23051:36;23074:4;23080:6;23051:22;:36::i;:::-;5230:14:::0;5226:57;;;5270:5;5255:12;;:20;;;;;;;;;;;;;;;;;;5226:57;22918:177;;;:::o;29991:90::-;30064:9;30052;;:21;;;;;;;;;;;;;;;;;;29991:90;:::o;8309:129::-;4976:12;;;;;;;;;;;:31;;;;4992:15;:13;:15::i;:::-;4976:31;:47;;;;5012:11;;;;;;;;;;5011:12;4976:47;4968:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:19;5106:12;;;;;;;;;;;5105:13;5083:35;;5129:14;5125:83;;;5169:4;5154:12;;:19;;;;;;;;;;;;;;;;;;5196:4;5182:11;;:18;;;;;;;;;;;;;;;;;;5125:83;8367:26:::1;:24;:26::i;:::-;8404;:24;:26::i;:::-;5230:14:::0;5226:57;;;5270:5;5255:12;;:20;;;;;;;;;;;;;;;;;;5226:57;8309:129;:::o;16616:345::-;16702:7;16801:1;16797;:5;16804:12;16789:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16828:9;16844:1;16840;:5;;;;;;16828:17;;16952:1;16945:8;;;16616:345;;;;;:::o;47280:263::-;47361:7;47370;47390:12;47405:35;47434:5;47405:24;47417:11;47405:7;:11;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;47390:50;;47451:23;47477:17;47489:4;47477:7;:11;;:17;;;;:::i;:::-;47451:43;;47513:15;47530:4;47505:30;;;;;;47280:263;;;;;:::o;47551:334::-;47646:7;47655;47664;47684:15;47702:24;47714:11;47702:7;:11;;:24;;;;:::i;:::-;47684:42;;47737:12;47752:21;47761:11;47752:4;:8;;:21;;;;:::i;:::-;47737:36;;47784:23;47810:17;47822:4;47810:7;:11;;:17;;;;:::i;:::-;47784:43;;47846:7;47855:15;47872:4;47838:39;;;;;;;;;47551:334;;;;;;;:::o;45494:543::-;45618:15;45635:23;45660:12;45674:23;45699:12;45715:32;45726:7;45735:11;45715:10;:32::i;:::-;45617:130;;;;;;;;;;45776:28;45796:7;45776;:15;45784:6;45776:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45758:7;:15;45766:6;45758:15;;;;;;;;;;;;;;;:46;;;;45833:28;45853:7;45833;:15;45841:6;45833:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45815:7;:15;45823:6;45815:15;;;;;;;;;;;;;;;:46;;;;45893:39;45916:15;45893:7;:18;45901:9;45893:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45872:7;:18;45880:9;45872:18;;;;;;;;;;;;;;;:60;;;;45946:23;45958:4;45964;45946:11;:23::i;:::-;46002:9;45985:44;;45994:6;45985:44;;;46013:15;45985:44;;;;;;;;;;;;;;;;;;45494:543;;;;;;;;;:::o;44923:563::-;45045:15;45062:23;45087:12;45101:23;45126:12;45142:32;45153:7;45162:11;45142:10;:32::i;:::-;45044:130;;;;;;;;;;45203:28;45223:7;45203;:15;45211:6;45203:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;45185:7;:15;45193:6;45185:15;;;;;;;;;;;;;;;:46;;;;45263:39;45286:15;45263:7;:18;45271:9;45263:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45242:7;:18;45250:9;45242:18;;;;;;;;;;;;;;;:60;;;;45334:39;45357:15;45334:7;:18;45342:9;45334:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;45313:7;:18;45321:9;45313:18;;;;;;;;;;;;;;;:60;;;;45395:23;45407:4;45413;45395:11;:23::i;:::-;45451:9;45434:44;;45443:6;45434:44;;;45462:15;45434:44;;;;;;;;;;;;;;;;;;44923:563;;;;;;;;;:::o;44429:486::-;44549:15;44566:23;44591:12;44605:23;44630:12;44646:32;44657:7;44666:11;44646:10;:32::i;:::-;44548:130;;;;;;;;;;44707:28;44727:7;44707;:15;44715:6;44707:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44689:7;:15;44697:6;44689:15;;;;;;;;;;;;;;;:46;;;;44767:39;44790:15;44767:7;:18;44775:9;44767:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44746:7;:18;44754:9;44746:18;;;;;;;;;;;;;;;:60;;;;44824:23;44836:4;44842;44824:11;:23::i;:::-;44880:9;44863:44;;44872:6;44863:44;;;44891:15;44863:44;;;;;;;;;;;;;;;;;;44429:486;;;;;;;;;:::o;46045:619::-;46169:15;46186:23;46211:12;46225:23;46250:12;46266:32;46277:7;46286:11;46266:10;:32::i;:::-;46168:130;;;;;;;;;;46327:28;46347:7;46327;:15;46335:6;46327:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46309:7;:15;46317:6;46309:15;;;;;;;;;;;;;;;:46;;;;46384:28;46404:7;46384;:15;46392:6;46384:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;46366:7;:15;46374:6;46366:15;;;;;;;;;;;;;;;:46;;;;46444:39;46467:15;46444:7;:18;46452:9;46444:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46423:7;:18;46431:9;46423:18;;;;;;;;;;;;;;;:60;;;;46515:39;46538:15;46515:7;:18;46523:9;46515:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;46494:7;:18;46502:9;46494:18;;;;;;;;;;;;;;;:60;;;;46573:23;46585:4;46591;46573:11;:23::i;:::-;46629:9;46612:44;;46621:6;46612:44;;;46640:15;46612:44;;;;;;;;;;;;;;;;;;46045:619;;;;;;;;;:::o;48064:581::-;48114:7;48123;48143:15;48161:7;;48143:25;;48179:15;48197:12;;48179:30;;48231:9;48226:294;48250:9;:16;;;;48246:1;:20;48226:294;;;48316:7;48292;:21;48300:9;48310:1;48300:12;;;;;;;;;;;;;;;;;;;;;;;;;48292:21;;;;;;;;;;;;;;;;:31;:66;;;;48351:7;48327;:21;48335:9;48345:1;48335:12;;;;;;;;;;;;;;;;;;;;;;;;;48327:21;;;;;;;;;;;;;;;;:31;48292:66;48288:102;;;48368:7;;48377:12;;48360:30;;;;;;;;;48288:102;48415:34;48427:7;:21;48435:9;48445:1;48435:12;;;;;;;;;;;;;;;;;;;;;;;;;48427:21;;;;;;;;;;;;;;;;48415:7;:11;;:34;;;;:::i;:::-;48405:44;;48474:34;48486:7;:21;48494:9;48504:1;48494:12;;;;;;;;;;;;;;;;;;;;;;;;;48486:21;;;;;;;;;;;;;;;;48474:7;:11;;:34;;;;:::i;:::-;48464:44;;48268:3;;;;;;;48226:294;;;;48544:25;48556:12;;48544:7;;:11;;:25;;;;:::i;:::-;48534:7;:35;48530:71;;;48579:7;;48588:12;;48571:30;;;;;;;;48530:71;48620:7;48629;48612:25;;;;;;48064:581;;;:::o;6928:69::-;4976:12;;;;;;;;;;;:31;;;;4992:15;:13;:15::i;:::-;4976:31;:47;;;;5012:11;;;;;;;;;;5011:12;4976:47;4968:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:19;5106:12;;;;;;;;;;;5105:13;5083:35;;5129:14;5125:83;;;5169:4;5154:12;;:19;;;;;;;;;;;;;;;;;;5196:4;5182:11;;:18;;;;;;;;;;;;;;;;;;5125:83;5230:14;5226:57;;;5270:5;5255:12;;:20;;;;;;;;;;;;;;;;;;5226:57;6928:69;:::o;23103:184::-;4976:12;;;;;;;;;;;:31;;;;4992:15;:13;:15::i;:::-;4976:31;:47;;;;5012:11;;;;;;;;;;5011:12;4976:47;4968:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:19;5106:12;;;;;;;;;;;5105:13;5083:35;;5129:14;5125:83;;;5169:4;5154:12;;:19;;;;;;;;;;;;;;;;;;5196:4;5182:11;;:18;;;;;;;;;;;;;;;;;;5125:83;23221:4:::1;23213:5;:12;;;;;;;;;;;;:::i;:::-;;23246:6;23236:7;:16;;;;;;;;;;;;:::i;:::-;;23275:2;23263:9;;:14;;;;;;;;;;;;;;;;;;5230::::0;5226:57;;;5270:5;5255:12;;:20;;;;;;;;;;;;;;;;;;5226:57;23103:184;;;:::o;8446:202::-;4976:12;;;;;;;;;;;:31;;;;4992:15;:13;:15::i;:::-;4976:31;:47;;;;5012:11;;;;;;;;;;5011:12;4976:47;4968:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5083:19;5106:12;;;;;;;;;;;5105:13;5083:35;;5129:14;5125:83;;;5169:4;5154:12;;:19;;;;;;;;;;;;;;;;;;5196:4;5182:11;;:18;;;;;;;;;;;;;;;;;;5125:83;8518:17:::1;8538:12;:10;:12::i;:::-;8518:32;;8570:9;8561:6;;:18;;;;;;;;;;;;;;;;;;8628:9;8595:43;;8624:1;8595:43;;;;;;;;;;;;5216:1;5230:14:::0;5226:57;;;5270:5;5255:12;;:20;;;;;;;;;;;;;;;;;;5226:57;8446:202;:::o;46672:147::-;46750:17;46762:4;46750:7;;:11;;:17;;;;:::i;:::-;46740:7;:27;;;;46791:20;46806:4;46791:10;;:14;;:20;;;;:::i;:::-;46778:10;:33;;;;46672:147;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://be5e16d05b703f6db9453d5e5647f88fd5c62c8e620b5e5fa770ca8dd65df77a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.