ETH Price: $3,415.81 (+0.32%)
Gas: 7 Gwei

Token

Moontopia (TOPIA)
 

Overview

Max Total Supply

1,000,000,000 TOPIA

Holders

454

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
142.164682186885944373 TOPIA

Value
$0.00
0xa30b673453694396844e743ba038735679fecf3c
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:
Moontopia

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-27
*/

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @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://consensys.net/diligence/blog/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.8.0/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");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

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


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: moontopia.sol


pragma solidity 0.8.19;



 
interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
}
 
interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}
 
 
contract Moontopia is IERC20, Ownable {
    using Address for address payable;
 
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
 
    address[] private _excluded;
 
    bool public swapEnabled;
    bool private swapping;
    bool public tradingEnabled;
 
    IRouter public router;
    address public pair;
    address public devWallet;
    address public buybackWallet;
 
    uint8 private constant _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
 
    uint256 private _tTotal = 1_000_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
 
    uint256 public totalRfi;
    uint256 public swapThreshold = 2_000_000 * 10**_decimals;
    uint256 public maxTxAmount = 20_000_000 * 10**_decimals;
    uint256 public maxWalletAmount = 20_000_000 * 10**_decimals;
    uint256 public buyThreshold = 1_000_000 * 10**_decimals;
    uint256 public startBlock;
    uint256 public offlineBlocks = 5;
 
    uint256 public buyTax = 150; // 15% - For First 5 Blocks
    uint256 public sellTax = 200; // 20%
    uint256 public dynamicTax = 20; // 2%
    uint256 public maxSellTax = 200; // 20%
 
    string private constant _name = "Moontopia";
    string private constant _symbol = "TOPIA";
 
    struct TaxesPercentage {
      uint256 rfi;
      uint256 dev;
      uint256 buyBack;
    }
 
    TaxesPercentage public taxesPercentage = TaxesPercentage(35,30,35);
 
    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rSwap;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tSwap;
    }
 
 
    modifier lockTheSwap {
        swapping = true;
        _;
        swapping = false;
    }
 
    constructor (address _routerAddress, address _devWallet, address _buybackWallet) {
 
        IRouter _router = IRouter(_routerAddress);
        address _pair = IFactory(_router.factory())
            .createPair(address(this), _router.WETH());
 
        router = _router;
        pair = _pair;
 
        excludeFromReward(pair);
        excludeFromReward(address(0xdead));
 
        _rOwned[msg.sender] = _rTotal;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_devWallet]=true;
        _isExcludedFromFee[_buybackWallet] = true;
 
        devWallet = _devWallet;
        buybackWallet = _buybackWallet;
 
        emit Transfer(address(0), msg.sender, _tTotal);
    }
 
    function name() public pure returns (string memory) {
        return _name;
    }
    function symbol() public pure returns (string memory) {
        return _symbol;
    }
    function decimals() public pure returns (uint8) {
        return _decimals;
    }
 
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
 
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_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 virtual override returns (bool) {
        _transfer(sender, recipient, amount);
 
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);
 
        return true;
    }
 
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
 
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);
 
        return true;
    }
 
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
 
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }
 
    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
 
    function includeInReward(address account) external 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 excludeFromFee(address account, bool status) public onlyOwner {
        _isExcludedFromFee[account] = status;
    }
 
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
 
    function setTaxesPercentage(uint256 _rfi, uint256 _dev, uint256 _buyback) public onlyOwner {
        require(_rfi + _dev + _buyback == 100, "Total must be 100");
        taxesPercentage = TaxesPercentage(_rfi, _dev, _buyback);
    }
 
    function _reflectRfi(uint256 rRfi, uint256 tRfi) private {
        _rTotal -=rRfi;
        totalRfi +=tRfi;
    }
 
    function _takeSwapFees(uint256 rValue, uint256 tValue) private {
        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tValue;
        }
        _rOwned[address(this)] +=rValue;
    }
 
    function _getValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSell);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rSwap) = _getRValues(to_return, tAmount, takeFee, _getRate());
        return to_return;
    }
 
    function _getTValues(uint256 tAmount, bool takeFee, bool isSell) private view returns (valuesFromGetValues memory s) {
 
        if(!takeFee) {
          s.tTransferAmount = tAmount;
          return s;
        }
 
        uint256 tempTax = isSell ? sellTax : buyTax;
        uint256 rfiTax = tempTax * taxesPercentage.rfi / 100;
        uint256 swapTax = tempTax * (100 - taxesPercentage.rfi) / 100;
        s.tRfi = tAmount * rfiTax / 1000;
        s.tSwap = tAmount * swapTax / 1000;
        s.tTransferAmount = tAmount - s.tRfi - s.tSwap;
        return s;
    }
 
    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rSwap) {
        rAmount = tAmount*currentRate;
 
        if(!takeFee) {
          return(rAmount, rAmount, 0,0);
        }
 
        rRfi = s.tRfi*currentRate;
        rSwap = s.tSwap*currentRate;
        rTransferAmount =  rAmount-rRfi-rSwap;
        return (rAmount, rTransferAmount, rRfi,rSwap);
    }
 
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }
 
    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
 
    function _approve(address owner, address spender, uint256 amount) private {
        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 from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(amount <= balanceOf(from),"You are trying to transfer more than your balance");
 
        if(buyTax != 0 && tradingEnabled){
            if(startBlock + offlineBlocks < block.number) buyTax = 0;
        }
 
        bool takeFee = false;
 
        if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            require(tradingEnabled ,"Liquidity has not been added yet");
            require(amount <= maxTxAmount, "You are exceeding maxTxAmount");
            if(to != pair) require(balanceOf(to) + amount <= maxWalletAmount, "You are exceeding maxWalletAmount");
            takeFee = true;
            if(from == pair && startBlock + offlineBlocks < block.number){
                takeFee = false;
                if(amount >= buyThreshold){
                    if(sellTax >= dynamicTax) sellTax -= dynamicTax;
                    else sellTax = 0;
                }
            }
        }
 
        bool canSwap = balanceOf(address(this)) >= swapThreshold;
        if(!swapping && swapEnabled && canSwap && from != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){
            swapTokensForFees(swapThreshold);
        }
 
        _tokenTransfer(from, to, amount, takeFee);
    }
 
 
    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private {
 
        bool isSell = recipient == pair ? true : false;
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSell);
 
        if(isSell && takeFee && startBlock + offlineBlocks < block.number){
            if(sellTax + dynamicTax > maxSellTax) sellTax = maxSellTax;
            else sellTax += dynamicTax;
        }
 
        if (_isExcluded[sender] ) {  //from excluded
                _tOwned[sender] = _tOwned[sender]-tAmount;
        }
        if (_isExcluded[recipient]) { //to excluded
                _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;
        }
 
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
 
        if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi);
        if(s.rSwap > 0 || s.tSwap > 0) _takeSwapFees(s.rSwap, s.tSwap);
 
        emit Transfer(sender, recipient, s.tTransferAmount);
        emit Transfer(sender, address(this), s.tSwap);
 
    }
 
    function swapTokensForFees(uint256 tokens) private lockTheSwap{
 
        uint256 initialBalance = address(this).balance;
 
        swapTokensForETH(tokens);
 
        uint256 deltaBalance = address(this).balance - initialBalance;
 
        uint256 totalPercent = 100 - taxesPercentage.rfi;
        if(totalPercent == 0) return;
 
        uint256 devAmt = deltaBalance * taxesPercentage.dev / totalPercent;
        if(devAmt > 0) payable(devWallet).sendValue(devAmt);
 
        uint256 buybackAmt = deltaBalance - devAmt;
        if(buybackAmt > 0) payable(buybackWallet).sendValue(buybackAmt);
    }
 
    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
 
        _approve(address(this), address(router), tokenAmount);
 
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }
 
    function enableTrading() external onlyOwner{
        tradingEnabled = true;
        swapEnabled = true;
        startBlock = block.number;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner{
        devWallet = newWallet;
        _isExcludedFromFee[devWallet] = true;
    }
 
    function updateBuybackWallet(address newWallet) external onlyOwner{
        buybackWallet = newWallet;
        _isExcludedFromFee[buybackWallet] = true;
    }
 
    function updateBuyThreshold(uint256 amount) external onlyOwner{
        buyThreshold = amount * 10**_decimals;
    }
 
    function updateMaxTx(uint256 amount) external onlyOwner{
        maxTxAmount = amount * 10**_decimals;
    }
 
    function updateMaxWallet(uint256 amount) external onlyOwner{
        maxWalletAmount = amount * 10**_decimals;
    }
 
    function updateSwapThreshold(uint256 amount) external onlyOwner{
        swapThreshold = amount * 10**_decimals;
    }
 
    function updateSwapEnabled(bool _enabled) external onlyOwner{
        swapEnabled = _enabled;
    }
 
    function updateRouterAndPair(address newRouter, address newPair) external onlyOwner{
        //Thanks
        router = IRouter(newRouter);
        pair = newPair;
    }
 
    function updateDynamicTax(uint256 amount) external onlyOwner{
        dynamicTax = amount;
    }
 
    function updateMaxSellTax(uint256 amount) external onlyOwner{
        maxSellTax = amount;
    }
 
    function rescueETH(uint256 weiAmount) external onlyOwner{
        payable(msg.sender).transfer(weiAmount);
    }
 
    function rescueTokens(address _tokenAddr, address _to, uint _amount) external onlyOwner {
        IERC20(_tokenAddr).transfer(_to, _amount);
    }
 
    receive() external payable{
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_routerAddress","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_buybackWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"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":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"offlineBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_buyback","type":"uint256"}],"name":"setTaxesPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxesPercentage","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"},{"internalType":"uint256","name":"buyBack","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRfi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateBuyThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateDynamicTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126012600a62000911565b6200002290633b9aca0062000922565b600b819055620000359060001962000952565b620000439060001962000969565b600c55620000546012600a62000911565b6200006390621e848062000922565b600e55620000746012600a62000911565b62000084906301312d0062000922565b600f55620000956012600a62000911565b620000a5906301312d0062000922565b601055620000b66012600a62000911565b620000c590620f424062000922565b60115560056013556096601490815560c86015819055601691909155601755604080516060810182526023808252601e60208301819052919092018290526018829055601955601a553480156200011b57600080fd5b50604051620031c2380380620031c28339810160408190526200013e916200099c565b6200014933620003c6565b60008390506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b59190620009e6565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000203573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002299190620009e6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000277573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029d9190620009e6565b600780546001600160a01b038086166301000000026301000000600160b81b031990921691909117909155600880549183166001600160a01b031990921682179055909150620002ed9062000416565b620002fa61dead62000416565b600c543360008181526001602081815260408084209590955560048152848320805460ff19908116841790915530845285842080548216841790556001600160a01b038a81168086528786208054841686179055908a168086528786208054909316909417909155600980546001600160a01b03199081169092179055600a8054909116909217909155600b549351938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050505062000a4d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6200042062000552565b6001600160a01b03811660009081526005602052604090205460ff16156200048f5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064015b60405180910390fd5b6001600160a01b03811660009081526001602052604090205415620004ec576001600160a01b038116600090815260016020526040902054620004d290620005b0565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314620005ae5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000486565b565b6000600c54821115620006195760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000486565b6000620006256200063a565b905062000633818462000a04565b9392505050565b600080806200064862000660565b909250905062000659818362000a04565b9250505090565b600c54600b546000918291825b600654811015620007c85782600160006006848154811062000693576200069362000a1b565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620007025750816002600060068481548110620006db57620006db62000a1b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200071957600c54600b54945094505050509091565b600160006006838154811062000733576200073362000a1b565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000764908462000969565b9250600260006006838154811062000780576200078062000a1b565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620007b1908362000969565b915080620007bf8162000a31565b9150506200066d565b50600b54600c54620007db919062000a04565b821015620007f357600c54600b549350935050509091565b90939092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000853578160001904821115620008375762000837620007fc565b808516156200084557918102915b93841c939080029062000817565b509250929050565b6000826200086c575060016200090b565b816200087b575060006200090b565b81600181146200089457600281146200089f57620008bf565b60019150506200090b565b60ff841115620008b357620008b3620007fc565b50506001821b6200090b565b5060208310610133831016604e8410600b8410161715620008e4575081810a6200090b565b620008f0838362000812565b8060001904821115620009075762000907620007fc565b0290505b92915050565b60006200063360ff8416836200085b565b80820281158282048414176200090b576200090b620007fc565b634e487b7160e01b600052601260045260246000fd5b6000826200096457620009646200093c565b500690565b818103818111156200090b576200090b620007fc565b80516001600160a01b03811681146200099757600080fd5b919050565b600080600060608486031215620009b257600080fd5b620009bd846200097f565b9250620009cd602085016200097f565b9150620009dd604085016200097f565b90509250925092565b600060208284031215620009f957600080fd5b62000633826200097f565b60008262000a165762000a166200093c565b500490565b634e487b7160e01b600052603260045260246000fd5b60006001820162000a465762000a46620007fc565b5060010190565b6127658062000a5d6000396000f3fe6080604052600436106103035760003560e01c8063715018a611610190578063a8aa1b31116100dc578063cea9d26f11610095578063df8408fe1161006f578063df8408fe14610952578063f13cff4114610972578063f2fde38b14610988578063f887ea40146109a857600080fd5b8063cea9d26f146108cc578063dd62ed3e146108ec578063deab8aea1461093257600080fd5b8063a8aa1b3114610820578063a9059cbb14610840578063aa4bde2814610860578063c2d0ffca14610876578063cc1776d314610896578063cc274b29146108ac57600080fd5b80638ea5220f11610149578063963fbc5011610123578063963fbc50146107aa5780639e252f00146107ca578063a411209a146107ea578063a457c2d71461080057600080fd5b80638ea5220f1461073c578063924de9b71461075c57806395d89b411461077c57600080fd5b8063715018a614610671578063799754d71461068657806388f82020146106a65780638a8c523c146106df5780638c0b5e22146106f45780638da5cb5b1461070a57600080fd5b8063313ce5671161024f5780634da86156116102085780635342acb4116101e25780635342acb4146105e8578063649011c8146106215780636ddd17131461063757806370a082311461065157600080fd5b80634da861561461059c5780634f7041a5146105b257806352390c02146105c857600080fd5b8063313ce567146104ea5780633685d41914610506578063395093511461052657806340b28c2f1461054657806348cd4cb1146105665780634ada218b1461057c57600080fd5b8063095ea7b3116102bc5780631a661181116102965780631a661181146104745780631c499ab01461048a57806323b872dd146104aa5780632d838119146104ca57600080fd5b8063095ea7b31461040f57806318160ddd1461043f5780631816467f1461045457600080fd5b8063029514f71461030f5780630445b6671461034e57806304dacd501461037257806306fdde0314610394578063079bf867146103cf5780630858fa35146103ef57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50601854601954601a5461032e92919083565b604080519384526020840192909252908201526060015b60405180910390f35b34801561035a57600080fd5b50610364600e5481565b604051908152602001610345565b34801561037e57600080fd5b5061039261038d366004612328565b6109cf565b005b3480156103a057600080fd5b506040805180820190915260098152684d6f6f6e746f70696160b81b60208201525b6040516103459190612345565b3480156103db57600080fd5b506103926103ea366004612393565b610a11565b3480156103fb57600080fd5b5061039261040a3660046123ac565b610a1e565b34801561041b57600080fd5b5061042f61042a3660046123d8565b610aa9565b6040519015158152602001610345565b34801561044b57600080fd5b50600b54610364565b34801561046057600080fd5b5061039261046f366004612328565b610ac0565b34801561048057600080fd5b50610364600d5481565b34801561049657600080fd5b506103926104a5366004612393565b610b02565b3480156104b657600080fd5b5061042f6104c5366004612404565b610b26565b3480156104d657600080fd5b506103646104e5366004612393565b610bd9565b3480156104f657600080fd5b5060405160128152602001610345565b34801561051257600080fd5b50610392610521366004612328565b610c56565b34801561053257600080fd5b5061042f6105413660046123d8565b610dea565b34801561055257600080fd5b50610392610561366004612445565b610e21565b34801561057257600080fd5b5061036460125481565b34801561058857600080fd5b5060075461042f9062010000900460ff1681565b3480156105a857600080fd5b5061036460165481565b3480156105be57600080fd5b5061036460145481565b3480156105d457600080fd5b506103926105e3366004612328565b610e65565b3480156105f457600080fd5b5061042f610603366004612328565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062d57600080fd5b5061036460135481565b34801561064357600080fd5b5060075461042f9060ff1681565b34801561065d57600080fd5b5061036461066c366004612328565b610f96565b34801561067d57600080fd5b50610392610ff5565b34801561069257600080fd5b506103926106a1366004612393565b611009565b3480156106b257600080fd5b5061042f6106c1366004612328565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106eb57600080fd5b5061039261102d565b34801561070057600080fd5b50610364600f5481565b34801561071657600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610345565b34801561074857600080fd5b50600954610724906001600160a01b031681565b34801561076857600080fd5b5061039261077736600461248c565b61104c565b34801561078857600080fd5b50604080518082019091526005815264544f50494160d81b60208201526103c2565b3480156107b657600080fd5b506103926107c5366004612393565b611067565b3480156107d657600080fd5b506103926107e5366004612393565b611074565b3480156107f657600080fd5b5061036460175481565b34801561080c57600080fd5b5061042f61081b3660046123d8565b6110a9565b34801561082c57600080fd5b50600854610724906001600160a01b031681565b34801561084c57600080fd5b5061042f61085b3660046123d8565b611144565b34801561086c57600080fd5b5061036460105481565b34801561088257600080fd5b50610392610891366004612393565b611151565b3480156108a257600080fd5b5061036460155481565b3480156108b857600080fd5b506103926108c7366004612393565b611175565b3480156108d857600080fd5b506103926108e7366004612404565b611199565b3480156108f857600080fd5b50610364610907366004612445565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561093e57600080fd5b50600a54610724906001600160a01b031681565b34801561095e57600080fd5b5061039261096d3660046124a9565b61121a565b34801561097e57600080fd5b5061036460115481565b34801561099457600080fd5b506103926109a3366004612328565b61124d565b3480156109b457600080fd5b5060075461072490630100000090046001600160a01b031681565b6109d76112c6565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610a196112c6565b601755565b610a266112c6565b80610a3183856124ed565b610a3b91906124ed565b606414610a835760405162461bcd60e51b81526020600482015260116024820152700546f74616c206d7573742062652031303607c1b60448201526064015b60405180910390fd5b604080516060810182528481526020810184905201819052601892909255601955601a55565b6000610ab6338484611320565b5060015b92915050565b610ac86112c6565b600980546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610b0a6112c6565b610b166012600a6125e4565b610b2090826125f3565b60105550565b6000610b33848484611444565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610bb85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a7a565b610bcc8533610bc7868561260a565b611320565b60019150505b9392505050565b6000600c54821115610c405760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a7a565b6000610c4a61185a565b9050610bd2818461261d565b610c5e6112c6565b6001600160a01b03811660009081526005602052604090205460ff16610cc65760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a7a565b60005b600654811015610de657816001600160a01b031660068281548110610cf057610cf061263f565b6000918252602090912001546001600160a01b031603610dd45760068054610d1a9060019061260a565b81548110610d2a57610d2a61263f565b600091825260209091200154600680546001600160a01b039092169183908110610d5657610d5661263f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610dae57610dae612655565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dde8161266b565b915050610cc9565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ab6918590610bc79086906124ed565b610e296112c6565b600780546301000000600160b81b03191663010000006001600160a01b0394851602179055600880546001600160a01b03191691909216179055565b610e6d6112c6565b6001600160a01b03811660009081526005602052604090205460ff1615610ed65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a7a565b6001600160a01b03811660009081526001602052604090205415610f30576001600160a01b038116600090815260016020526040902054610f1690610bd9565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610fd357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610aba90610bd9565b610ffd6112c6565b611007600061187d565b565b6110116112c6565b61101d6012600a6125e4565b61102790826125f3565b60115550565b6110356112c6565b6007805462ff00ff19166201000117905543601255565b6110546112c6565b6007805460ff1916911515919091179055565b61106f6112c6565b601655565b61107c6112c6565b604051339082156108fc029083906000818181858888f19350505050158015610de6573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b03861684529091528120548281101561112b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a7a565b61113a3385610bc7868561260a565b5060019392505050565b6000610ab6338484611444565b6111596112c6565b6111656012600a6125e4565b61116f90826125f3565b600f5550565b61117d6112c6565b6111896012600a6125e4565b61119390826125f3565b600e5550565b6111a16112c6565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156111f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112149190612684565b50505050565b6112226112c6565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6112556112c6565b6001600160a01b0381166112ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7a565b6112c38161187d565b50565b6000546001600160a01b031633146110075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a7a565b6001600160a01b0383166113825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7a565b6001600160a01b0382166113e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a7a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a7a565b6000811161150a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a7a565b61151383610f96565b81111561157c5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a7a565b60145415801590611595575060075462010000900460ff165b156115b757436013546012546115ab91906124ed565b10156115b75760006014555b6001600160a01b03831660009081526004602052604081205460ff161580156115f957506001600160a01b03831660009081526004602052604090205460ff16155b1561179d5760075462010000900460ff166116565760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152606401610a7a565b600f548211156116a85760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610a7a565b6008546001600160a01b0384811691161461172c57601054826116ca85610f96565b6116d491906124ed565b111561172c5760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610a7a565b506008546001906001600160a01b03858116911614801561175b57504360135460125461175991906124ed565b105b1561179d5760009050601154821061179d5760165460155410611797576016546015600082825461178c919061260a565b9091555061179d9050565b60006015555b6000600e546117ab30610f96565b6007549111159150610100900460ff161580156117ca575060075460ff165b80156117d35750805b80156117ed57506008546001600160a01b03868116911614155b801561181257506001600160a01b03851660009081526004602052604090205460ff16155b801561183757506001600160a01b03841660009081526004602052604090205460ff16155b1561184757611847600e546118cd565b61185385858585611990565b5050505050565b6000806000611867611c69565b9092509050611876818361261d565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6007805461ff001916610100179055476118e682611dec565b60006118f2824761260a565b60185490915060009061190690606461260a565b90508060000361191857505050611982565b601954600090829061192a90856125f3565b611934919061261d565b9050801561195257600954611952906001600160a01b031682611f6d565b600061195e828561260a565b9050801561197c57600a5461197c906001600160a01b031682611f6d565b50505050505b506007805461ff0019169055565b6008546000906001600160a01b038581169116146119af5760006119b2565b60015b905060006119c184848461208b565b90508180156119cd5750825b80156119e75750436013546012546119e591906124ed565b105b15611a2a576017546016546015546119ff91906124ed565b1115611a1057601754601555611a2a565b60165460156000828254611a2491906124ed565b90915550505b6001600160a01b03861660009081526005602052604090205460ff1615611a89576001600160a01b038616600090815260026020526040902054611a6f90859061260a565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615611aec5760808101516001600160a01b038616600090815260026020526040902054611ad291906124ed565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054611b11919061260a565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054611b4891906124ed565b6001600160a01b0386166000908152600160205260409081902091909155810151151580611b7a575060008160a00151115b15611b9157611b9181604001518260a00151612103565b600081606001511180611ba8575060008160c00151115b15611bbf57611bbf81606001518260c00151612137565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611c0891815260200190565b60405180910390a3306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611c5991815260200190565b60405180910390a3505050505050565b600c54600b546000918291825b600654811015611dbb57826001600060068481548110611c9857611c9861263f565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d035750816002600060068481548110611cdc57611cdc61263f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d1957600c54600b54945094505050509091565b6001600060068381548110611d3057611d3061263f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d5f908461260a565b92506002600060068381548110611d7857611d7861263f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611da7908361260a565b915080611db38161266b565b915050611c76565b50600b54600c54611dcc919061261d565b821015611de357600c54600b549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e2157611e2161263f565b60200260200101906001600160a01b031690816001600160a01b031681525050600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb891906126a1565b81600181518110611ecb57611ecb61263f565b6001600160a01b039283166020918202929092010152600754611ef8913091630100000090041684611320565b60075460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790611f379085906000908690309042906004016126be565b600060405180830381600087803b158015611f5157600080fd5b505af1158015611f65573d6000803e3d6000fd5b505050505050565b80471015611fbd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a7a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461200a576040519150601f19603f3d011682016040523d82523d6000602084013e61200f565b606091505b50509050806120865760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a7a565b505050565b6120cb6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6120d6848484612193565b90506120eb8185856120e661185a565b6122a8565b60608501526040840152602083015281529392505050565b81600c6000828254612115919061260a565b9250508190555080600d600082825461212e91906124ed565b90915550505050565b3060009081526005602052604090205460ff161561217457306000908152600260205260408120805483929061216e9084906124ed565b90915550505b306000908152600160205260408120805484929061212e9084906124ed565b6121d36040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b826121e45760808101849052610bd2565b6000826121f3576014546121f7565b6015545b9050600060646018600001548361220e91906125f3565b612218919061261d565b9050600060646018600001546064612230919061260a565b61223a90856125f3565b612244919061261d565b90506103e861225383896125f3565b61225d919061261d565b60a08501526103e861226f82896125f3565b612279919061261d565b60c0850181905260a085015161228f908961260a565b612299919061260a565b60808501525050509392505050565b60008080806122b785886125f3565b9350856122cc57508291506000905080612308565b848860a001516122dc91906125f3565b9150848860c001516122ee91906125f3565b9050806122fb838661260a565b612305919061260a565b92505b945094509450949050565b6001600160a01b03811681146112c357600080fd5b60006020828403121561233a57600080fd5b8135610bd281612313565b600060208083528351808285015260005b8181101561237257858101830151858201604001528201612356565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156123a557600080fd5b5035919050565b6000806000606084860312156123c157600080fd5b505081359360208301359350604090920135919050565b600080604083850312156123eb57600080fd5b82356123f681612313565b946020939093013593505050565b60008060006060848603121561241957600080fd5b833561242481612313565b9250602084013561243481612313565b929592945050506040919091013590565b6000806040838503121561245857600080fd5b823561246381612313565b9150602083013561247381612313565b809150509250929050565b80151581146112c357600080fd5b60006020828403121561249e57600080fd5b8135610bd28161247e565b600080604083850312156124bc57600080fd5b82356124c781612313565b915060208301356124738161247e565b634e487b7160e01b600052601160045260246000fd5b80820180821115610aba57610aba6124d7565b600181815b8085111561253b578160001904821115612521576125216124d7565b8085161561252e57918102915b93841c9390800290612505565b509250929050565b60008261255257506001610aba565b8161255f57506000610aba565b8160018114612575576002811461257f5761259b565b6001915050610aba565b60ff841115612590576125906124d7565b50506001821b610aba565b5060208310610133831016604e8410600b84101617156125be575081810a610aba565b6125c88383612500565b80600019048211156125dc576125dc6124d7565b029392505050565b6000610bd260ff841683612543565b8082028115828204841417610aba57610aba6124d7565b81810381811115610aba57610aba6124d7565b60008261263a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820161267d5761267d6124d7565b5060010190565b60006020828403121561269657600080fd5b8151610bd28161247e565b6000602082840312156126b357600080fd5b8151610bd281612313565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561270e5784516001600160a01b0316835293830193918301916001016126e9565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e5e0c3838d5dfb9994c43226125a88c106e47304d383f4b3afa6d0a2fef4182464736f6c634300081300330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000025febccfb87fb48e567776c48feba746b08541c8000000000000000000000000d8ce3e235a3fa0109764aa18e13c3150001ee083

Deployed Bytecode

0x6080604052600436106103035760003560e01c8063715018a611610190578063a8aa1b31116100dc578063cea9d26f11610095578063df8408fe1161006f578063df8408fe14610952578063f13cff4114610972578063f2fde38b14610988578063f887ea40146109a857600080fd5b8063cea9d26f146108cc578063dd62ed3e146108ec578063deab8aea1461093257600080fd5b8063a8aa1b3114610820578063a9059cbb14610840578063aa4bde2814610860578063c2d0ffca14610876578063cc1776d314610896578063cc274b29146108ac57600080fd5b80638ea5220f11610149578063963fbc5011610123578063963fbc50146107aa5780639e252f00146107ca578063a411209a146107ea578063a457c2d71461080057600080fd5b80638ea5220f1461073c578063924de9b71461075c57806395d89b411461077c57600080fd5b8063715018a614610671578063799754d71461068657806388f82020146106a65780638a8c523c146106df5780638c0b5e22146106f45780638da5cb5b1461070a57600080fd5b8063313ce5671161024f5780634da86156116102085780635342acb4116101e25780635342acb4146105e8578063649011c8146106215780636ddd17131461063757806370a082311461065157600080fd5b80634da861561461059c5780634f7041a5146105b257806352390c02146105c857600080fd5b8063313ce567146104ea5780633685d41914610506578063395093511461052657806340b28c2f1461054657806348cd4cb1146105665780634ada218b1461057c57600080fd5b8063095ea7b3116102bc5780631a661181116102965780631a661181146104745780631c499ab01461048a57806323b872dd146104aa5780632d838119146104ca57600080fd5b8063095ea7b31461040f57806318160ddd1461043f5780631816467f1461045457600080fd5b8063029514f71461030f5780630445b6671461034e57806304dacd501461037257806306fdde0314610394578063079bf867146103cf5780630858fa35146103ef57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50601854601954601a5461032e92919083565b604080519384526020840192909252908201526060015b60405180910390f35b34801561035a57600080fd5b50610364600e5481565b604051908152602001610345565b34801561037e57600080fd5b5061039261038d366004612328565b6109cf565b005b3480156103a057600080fd5b506040805180820190915260098152684d6f6f6e746f70696160b81b60208201525b6040516103459190612345565b3480156103db57600080fd5b506103926103ea366004612393565b610a11565b3480156103fb57600080fd5b5061039261040a3660046123ac565b610a1e565b34801561041b57600080fd5b5061042f61042a3660046123d8565b610aa9565b6040519015158152602001610345565b34801561044b57600080fd5b50600b54610364565b34801561046057600080fd5b5061039261046f366004612328565b610ac0565b34801561048057600080fd5b50610364600d5481565b34801561049657600080fd5b506103926104a5366004612393565b610b02565b3480156104b657600080fd5b5061042f6104c5366004612404565b610b26565b3480156104d657600080fd5b506103646104e5366004612393565b610bd9565b3480156104f657600080fd5b5060405160128152602001610345565b34801561051257600080fd5b50610392610521366004612328565b610c56565b34801561053257600080fd5b5061042f6105413660046123d8565b610dea565b34801561055257600080fd5b50610392610561366004612445565b610e21565b34801561057257600080fd5b5061036460125481565b34801561058857600080fd5b5060075461042f9062010000900460ff1681565b3480156105a857600080fd5b5061036460165481565b3480156105be57600080fd5b5061036460145481565b3480156105d457600080fd5b506103926105e3366004612328565b610e65565b3480156105f457600080fd5b5061042f610603366004612328565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561062d57600080fd5b5061036460135481565b34801561064357600080fd5b5060075461042f9060ff1681565b34801561065d57600080fd5b5061036461066c366004612328565b610f96565b34801561067d57600080fd5b50610392610ff5565b34801561069257600080fd5b506103926106a1366004612393565b611009565b3480156106b257600080fd5b5061042f6106c1366004612328565b6001600160a01b031660009081526005602052604090205460ff1690565b3480156106eb57600080fd5b5061039261102d565b34801561070057600080fd5b50610364600f5481565b34801561071657600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610345565b34801561074857600080fd5b50600954610724906001600160a01b031681565b34801561076857600080fd5b5061039261077736600461248c565b61104c565b34801561078857600080fd5b50604080518082019091526005815264544f50494160d81b60208201526103c2565b3480156107b657600080fd5b506103926107c5366004612393565b611067565b3480156107d657600080fd5b506103926107e5366004612393565b611074565b3480156107f657600080fd5b5061036460175481565b34801561080c57600080fd5b5061042f61081b3660046123d8565b6110a9565b34801561082c57600080fd5b50600854610724906001600160a01b031681565b34801561084c57600080fd5b5061042f61085b3660046123d8565b611144565b34801561086c57600080fd5b5061036460105481565b34801561088257600080fd5b50610392610891366004612393565b611151565b3480156108a257600080fd5b5061036460155481565b3480156108b857600080fd5b506103926108c7366004612393565b611175565b3480156108d857600080fd5b506103926108e7366004612404565b611199565b3480156108f857600080fd5b50610364610907366004612445565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561093e57600080fd5b50600a54610724906001600160a01b031681565b34801561095e57600080fd5b5061039261096d3660046124a9565b61121a565b34801561097e57600080fd5b5061036460115481565b34801561099457600080fd5b506103926109a3366004612328565b61124d565b3480156109b457600080fd5b5060075461072490630100000090046001600160a01b031681565b6109d76112c6565b600a80546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610a196112c6565b601755565b610a266112c6565b80610a3183856124ed565b610a3b91906124ed565b606414610a835760405162461bcd60e51b81526020600482015260116024820152700546f74616c206d7573742062652031303607c1b60448201526064015b60405180910390fd5b604080516060810182528481526020810184905201819052601892909255601955601a55565b6000610ab6338484611320565b5060015b92915050565b610ac86112c6565b600980546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610b0a6112c6565b610b166012600a6125e4565b610b2090826125f3565b60105550565b6000610b33848484611444565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610bb85760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610a7a565b610bcc8533610bc7868561260a565b611320565b60019150505b9392505050565b6000600c54821115610c405760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610a7a565b6000610c4a61185a565b9050610bd2818461261d565b610c5e6112c6565b6001600160a01b03811660009081526005602052604090205460ff16610cc65760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610a7a565b60005b600654811015610de657816001600160a01b031660068281548110610cf057610cf061263f565b6000918252602090912001546001600160a01b031603610dd45760068054610d1a9060019061260a565b81548110610d2a57610d2a61263f565b600091825260209091200154600680546001600160a01b039092169183908110610d5657610d5661263f565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600590925220805460ff191690556006805480610dae57610dae612655565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610dde8161266b565b915050610cc9565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610ab6918590610bc79086906124ed565b610e296112c6565b600780546301000000600160b81b03191663010000006001600160a01b0394851602179055600880546001600160a01b03191691909216179055565b610e6d6112c6565b6001600160a01b03811660009081526005602052604090205460ff1615610ed65760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610a7a565b6001600160a01b03811660009081526001602052604090205415610f30576001600160a01b038116600090815260016020526040902054610f1690610bd9565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600560205260408120805460ff191660019081179091556006805491820181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526005602052604081205460ff1615610fd357506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610aba90610bd9565b610ffd6112c6565b611007600061187d565b565b6110116112c6565b61101d6012600a6125e4565b61102790826125f3565b60115550565b6110356112c6565b6007805462ff00ff19166201000117905543601255565b6110546112c6565b6007805460ff1916911515919091179055565b61106f6112c6565b601655565b61107c6112c6565b604051339082156108fc029083906000818181858888f19350505050158015610de6573d6000803e3d6000fd5b3360009081526003602090815260408083206001600160a01b03861684529091528120548281101561112b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a7a565b61113a3385610bc7868561260a565b5060019392505050565b6000610ab6338484611444565b6111596112c6565b6111656012600a6125e4565b61116f90826125f3565b600f5550565b61117d6112c6565b6111896012600a6125e4565b61119390826125f3565b600e5550565b6111a16112c6565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303816000875af11580156111f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112149190612684565b50505050565b6112226112c6565b6001600160a01b03919091166000908152600460205260409020805460ff1916911515919091179055565b6112556112c6565b6001600160a01b0381166112ba5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a7a565b6112c38161187d565b50565b6000546001600160a01b031633146110075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a7a565b6001600160a01b0383166113825760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a7a565b6001600160a01b0382166113e35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a7a565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166114a85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a7a565b6000811161150a5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610a7a565b61151383610f96565b81111561157c5760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610a7a565b60145415801590611595575060075462010000900460ff165b156115b757436013546012546115ab91906124ed565b10156115b75760006014555b6001600160a01b03831660009081526004602052604081205460ff161580156115f957506001600160a01b03831660009081526004602052604090205460ff16155b1561179d5760075462010000900460ff166116565760405162461bcd60e51b815260206004820181905260248201527f4c697175696469747920686173206e6f74206265656e206164646564207965746044820152606401610a7a565b600f548211156116a85760405162461bcd60e51b815260206004820152601d60248201527f596f752061726520657863656564696e67206d61785478416d6f756e740000006044820152606401610a7a565b6008546001600160a01b0384811691161461172c57601054826116ca85610f96565b6116d491906124ed565b111561172c5760405162461bcd60e51b815260206004820152602160248201527f596f752061726520657863656564696e67206d617857616c6c6574416d6f756e6044820152601d60fa1b6064820152608401610a7a565b506008546001906001600160a01b03858116911614801561175b57504360135460125461175991906124ed565b105b1561179d5760009050601154821061179d5760165460155410611797576016546015600082825461178c919061260a565b9091555061179d9050565b60006015555b6000600e546117ab30610f96565b6007549111159150610100900460ff161580156117ca575060075460ff165b80156117d35750805b80156117ed57506008546001600160a01b03868116911614155b801561181257506001600160a01b03851660009081526004602052604090205460ff16155b801561183757506001600160a01b03841660009081526004602052604090205460ff16155b1561184757611847600e546118cd565b61185385858585611990565b5050505050565b6000806000611867611c69565b9092509050611876818361261d565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6007805461ff001916610100179055476118e682611dec565b60006118f2824761260a565b60185490915060009061190690606461260a565b90508060000361191857505050611982565b601954600090829061192a90856125f3565b611934919061261d565b9050801561195257600954611952906001600160a01b031682611f6d565b600061195e828561260a565b9050801561197c57600a5461197c906001600160a01b031682611f6d565b50505050505b506007805461ff0019169055565b6008546000906001600160a01b038581169116146119af5760006119b2565b60015b905060006119c184848461208b565b90508180156119cd5750825b80156119e75750436013546012546119e591906124ed565b105b15611a2a576017546016546015546119ff91906124ed565b1115611a1057601754601555611a2a565b60165460156000828254611a2491906124ed565b90915550505b6001600160a01b03861660009081526005602052604090205460ff1615611a89576001600160a01b038616600090815260026020526040902054611a6f90859061260a565b6001600160a01b0387166000908152600260205260409020555b6001600160a01b03851660009081526005602052604090205460ff1615611aec5760808101516001600160a01b038616600090815260026020526040902054611ad291906124ed565b6001600160a01b0386166000908152600260205260409020555b80516001600160a01b038716600090815260016020526040902054611b11919061260a565b6001600160a01b0380881660009081526001602090815260408083209490945584015191881681529190912054611b4891906124ed565b6001600160a01b0386166000908152600160205260409081902091909155810151151580611b7a575060008160a00151115b15611b9157611b9181604001518260a00151612103565b600081606001511180611ba8575060008160c00151115b15611bbf57611bbf81606001518260c00151612137565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611c0891815260200190565b60405180910390a3306001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611c5991815260200190565b60405180910390a3505050505050565b600c54600b546000918291825b600654811015611dbb57826001600060068481548110611c9857611c9861263f565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611d035750816002600060068481548110611cdc57611cdc61263f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611d1957600c54600b54945094505050509091565b6001600060068381548110611d3057611d3061263f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611d5f908461260a565b92506002600060068381548110611d7857611d7861263f565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611da7908361260a565b915080611db38161266b565b915050611c76565b50600b54600c54611dcc919061261d565b821015611de357600c54600b549350935050509091565b90939092509050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e2157611e2161263f565b60200260200101906001600160a01b031690816001600160a01b031681525050600760039054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb891906126a1565b81600181518110611ecb57611ecb61263f565b6001600160a01b039283166020918202929092010152600754611ef8913091630100000090041684611320565b60075460405163791ac94760e01b815263010000009091046001600160a01b03169063791ac94790611f379085906000908690309042906004016126be565b600060405180830381600087803b158015611f5157600080fd5b505af1158015611f65573d6000803e3d6000fd5b505050505050565b80471015611fbd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610a7a565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461200a576040519150601f19603f3d011682016040523d82523d6000602084013e61200f565b606091505b50509050806120865760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610a7a565b505050565b6120cb6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6120d6848484612193565b90506120eb8185856120e661185a565b6122a8565b60608501526040840152602083015281529392505050565b81600c6000828254612115919061260a565b9250508190555080600d600082825461212e91906124ed565b90915550505050565b3060009081526005602052604090205460ff161561217457306000908152600260205260408120805483929061216e9084906124ed565b90915550505b306000908152600160205260408120805484929061212e9084906124ed565b6121d36040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b826121e45760808101849052610bd2565b6000826121f3576014546121f7565b6015545b9050600060646018600001548361220e91906125f3565b612218919061261d565b9050600060646018600001546064612230919061260a565b61223a90856125f3565b612244919061261d565b90506103e861225383896125f3565b61225d919061261d565b60a08501526103e861226f82896125f3565b612279919061261d565b60c0850181905260a085015161228f908961260a565b612299919061260a565b60808501525050509392505050565b60008080806122b785886125f3565b9350856122cc57508291506000905080612308565b848860a001516122dc91906125f3565b9150848860c001516122ee91906125f3565b9050806122fb838661260a565b612305919061260a565b92505b945094509450949050565b6001600160a01b03811681146112c357600080fd5b60006020828403121561233a57600080fd5b8135610bd281612313565b600060208083528351808285015260005b8181101561237257858101830151858201604001528201612356565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156123a557600080fd5b5035919050565b6000806000606084860312156123c157600080fd5b505081359360208301359350604090920135919050565b600080604083850312156123eb57600080fd5b82356123f681612313565b946020939093013593505050565b60008060006060848603121561241957600080fd5b833561242481612313565b9250602084013561243481612313565b929592945050506040919091013590565b6000806040838503121561245857600080fd5b823561246381612313565b9150602083013561247381612313565b809150509250929050565b80151581146112c357600080fd5b60006020828403121561249e57600080fd5b8135610bd28161247e565b600080604083850312156124bc57600080fd5b82356124c781612313565b915060208301356124738161247e565b634e487b7160e01b600052601160045260246000fd5b80820180821115610aba57610aba6124d7565b600181815b8085111561253b578160001904821115612521576125216124d7565b8085161561252e57918102915b93841c9390800290612505565b509250929050565b60008261255257506001610aba565b8161255f57506000610aba565b8160018114612575576002811461257f5761259b565b6001915050610aba565b60ff841115612590576125906124d7565b50506001821b610aba565b5060208310610133831016604e8410600b84101617156125be575081810a610aba565b6125c88383612500565b80600019048211156125dc576125dc6124d7565b029392505050565b6000610bd260ff841683612543565b8082028115828204841417610aba57610aba6124d7565b81810381811115610aba57610aba6124d7565b60008261263a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006001820161267d5761267d6124d7565b5060010190565b60006020828403121561269657600080fd5b8151610bd28161247e565b6000602082840312156126b357600080fd5b8151610bd281612313565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561270e5784516001600160a01b0316835293830193918301916001016126e9565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220e5e0c3838d5dfb9994c43226125a88c106e47304d383f4b3afa6d0a2fef4182464736f6c63430008130033

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

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000025febccfb87fb48e567776c48feba746b08541c8000000000000000000000000d8ce3e235a3fa0109764aa18e13c3150001ee083

-----Decoded View---------------
Arg [0] : _routerAddress (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _devWallet (address): 0x25FEbCcFb87fb48e567776c48FEba746B08541c8
Arg [2] : _buybackWallet (address): 0xD8ce3E235a3Fa0109764aa18e13C3150001Ee083

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 00000000000000000000000025febccfb87fb48e567776c48feba746b08541c8
Arg [2] : 000000000000000000000000d8ce3e235a3fa0109764aa18e13c3150001ee083


Deployed Bytecode Sourcemap

16595:15204:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18203:66;;;;;;;;;;-1:-1:-1;18203:66:0;;;;;;;;;;;;;;;;216:25:1;;;272:2;257:18;;250:34;;;;300:18;;;293:34;204:2;189:18;18203:66:0;;;;;;;;17476:56;;;;;;;;;;;;;;;;;;;484:25:1;;;472:2;457:18;17476:56:0;338:177:1;30305:161:0;;;;;;;;;;-1:-1:-1;30305:161:0;;;;;:::i;:::-;;:::i;:::-;;19377:83;;;;;;;;;;-1:-1:-1;19447:5:0;;;;;;;;;;;;-1:-1:-1;;;19447:5:0;;;;19377:83;;;;;;;:::i;31375:98::-;;;;;;;;;;-1:-1:-1;31375:98:0;;;;;:::i;:::-;;:::i;22979:235::-;;;;;;;;;;-1:-1:-1;22979:235:0;;;;;:::i;:::-;;:::i;20290:161::-;;;;;;;;;;-1:-1:-1;20290:161:0;;;;;:::i;:::-;;:::i;:::-;;;2452:14:1;;2445:22;2427:41;;2415:2;2400:18;20290:161:0;2287:187:1;19651:95:0;;;;;;;;;;-1:-1:-1;19731:7:0;;19651:95;;30147:149;;;;;;;;;;-1:-1:-1;30147:149:0;;;;;:::i;:::-;;:::i;17446:23::-;;;;;;;;;;;;;;;;30721:118;;;;;;;;;;-1:-1:-1;30721:118:0;;;;;:::i;:::-;;:::i;20460:424::-;;;;;;;;;;-1:-1:-1;20460:424:0;;;;;:::i;:::-;;:::i;21633:248::-;;;;;;;;;;-1:-1:-1;21633:248:0;;;;;:::i;:::-;;:::i;19559:83::-;;;;;;;;;;-1:-1:-1;19559:83:0;;17264:2;3082:36:1;;3070:2;3055:18;19559:83:0;2940:184:1;22230:473:0;;;;;;;;;;-1:-1:-1;22230:473:0;;;;;:::i;:::-;;:::i;20893:215::-;;;;;;;;;;-1:-1:-1;20893:215:0;;;;;:::i;:::-;;:::i;31087:172::-;;;;;;;;;;-1:-1:-1;31087:172:0;;;;;:::i;:::-;;:::i;17729:25::-;;;;;;;;;;;;;;;;17070:26;;;;;;;;;;-1:-1:-1;17070:26:0;;;;;;;;;;;17907:30;;;;;;;;;;;;;;;;17803:27;;;;;;;;;;;;;;;;21890:331;;;;;;;;;;-1:-1:-1;21890:331:0;;;;;:::i;:::-;;:::i;22847:123::-;;;;;;;;;;-1:-1:-1;22847:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;22935:27:0;22911:4;22935:27;;;:18;:27;;;;;;;;;22847:123;17761:32;;;;;;;;;;;;;;;;17012:23;;;;;;;;;;-1:-1:-1;17012:23:0;;;;;;;;19755:198;;;;;;;;;;-1:-1:-1;19755:198:0;;;;;:::i;:::-;;:::i;15247:103::-;;;;;;;;;;;;;:::i;30475:118::-;;;;;;;;;;-1:-1:-1;30475:118:0;;;;;:::i;:::-;;:::i;21504:120::-;;;;;;;;;;-1:-1:-1;21504:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;21596:20:0;21572:4;21596:20;;;:11;:20;;;;;;;;;21504:120;29990:148;;;;;;;;;;;;;:::i;17539:55::-;;;;;;;;;;;;;;;;14606:87;;;;;;;;;;-1:-1:-1;14652:7:0;14679:6;-1:-1:-1;;;;;14679:6:0;14606:87;;;-1:-1:-1;;;;;3686:32:1;;;3668:51;;3656:2;3641:18;14606:87:0;3522:203:1;17160:24:0;;;;;;;;;;-1:-1:-1;17160:24:0;;;;-1:-1:-1;;;;;17160:24:0;;;30977:101;;;;;;;;;;-1:-1:-1;30977:101:0;;;;;:::i;:::-;;:::i;19466:87::-;;;;;;;;;;-1:-1:-1;19538:7:0;;;;;;;;;;;;-1:-1:-1;;;19538:7:0;;;;19466:87;;31268:98;;;;;;;;;;-1:-1:-1;31268:98:0;;;;;:::i;:::-;;:::i;31482:114::-;;;;;;;;;;-1:-1:-1;31482:114:0;;;;;:::i;:::-;;:::i;17950:31::-;;;;;;;;;;;;;;;;21117:378;;;;;;;;;;-1:-1:-1;21117:378:0;;;;;:::i;:::-;;:::i;17134:19::-;;;;;;;;;;-1:-1:-1;17134:19:0;;;;-1:-1:-1;;;;;17134:19:0;;;19962:167;;;;;;;;;;-1:-1:-1;19962:167:0;;;;;:::i;:::-;;:::i;17601:59::-;;;;;;;;;;;;;;;;30602:110;;;;;;;;;;-1:-1:-1;30602:110:0;;;;;:::i;:::-;;:::i;17865:28::-;;;;;;;;;;;;;;;;30848:120;;;;;;;;;;-1:-1:-1;30848:120:0;;;;;:::i;:::-;;:::i;31605:148::-;;;;;;;;;;-1:-1:-1;31605:148:0;;;;;:::i;:::-;;:::i;20138:143::-;;;;;;;;;;-1:-1:-1;20138:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20246:18:0;;;20219:7;20246:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20138:143;17191:28;;;;;;;;;;-1:-1:-1;17191:28:0;;;;-1:-1:-1;;;;;17191:28:0;;;22712:126;;;;;;;;;;-1:-1:-1;22712:126:0;;;;;:::i;:::-;;:::i;17667:55::-;;;;;;;;;;;;;;;;15505:201;;;;;;;;;;-1:-1:-1;15505:201:0;;;;;:::i;:::-;;:::i;17106:21::-;;;;;;;;;;-1:-1:-1;17106:21:0;;;;;;;-1:-1:-1;;;;;17106:21:0;;;30305:161;14492:13;:11;:13::i;:::-;30382::::1;:25:::0;;-1:-1:-1;;;;;30382:25:0;;::::1;-1:-1:-1::0;;;;;;30382:25:0;;::::1;::::0;::::1;::::0;;:13:::1;30418:33:::0;;;:18:::1;:33;::::0;;;;:40;;-1:-1:-1;;30418:40:0::1;30382:25:::0;30418:40:::1;::::0;;30305:161::o;31375:98::-;14492:13;:11;:13::i;:::-;31446:10:::1;:19:::0;31375:98::o;22979:235::-;14492:13;:11;:13::i;:::-;23103:8;23089:11:::1;23096:4:::0;23089;:11:::1;:::i;:::-;:22;;;;:::i;:::-;23115:3;23089:29;23081:59;;;::::0;-1:-1:-1;;;23081:59:0;;5173:2:1;23081:59:0::1;::::0;::::1;5155:21:1::0;5212:2;5192:18;;;5185:30;-1:-1:-1;;;5231:18:1;;;5224:47;5288:18;;23081:59:0::1;;;;;;;;;23169:37;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;23151:15:::1;:55:::0;;;;;;;;22979:235::o;20290:161::-;20365:4;20382:39;13237:10;20405:7;20414:6;20382:8;:39::i;:::-;-1:-1:-1;20439:4:0;20290:161;;;;;:::o;30147:149::-;14492:13;:11;:13::i;:::-;30220:9:::1;:21:::0;;-1:-1:-1;;;;;30220:21:0;;::::1;-1:-1:-1::0;;;;;;30220:21:0;;::::1;::::0;::::1;::::0;;:9:::1;30252:29:::0;;;:18:::1;:29;::::0;;;;:36;;-1:-1:-1;;30252:36:0::1;30220:21:::0;30252:36:::1;::::0;;30147:149::o;30721:118::-;14492:13;:11;:13::i;:::-;30818::::1;17264:2;30818;:13;:::i;:::-;30809:22;::::0;:6;:22:::1;:::i;:::-;30791:15;:40:::0;-1:-1:-1;30721:118:0:o;20460:424::-;20566:4;20583:36;20593:6;20601:9;20612:6;20583:9;:36::i;:::-;-1:-1:-1;;;;;20660:19:0;;20633:24;20660:19;;;:11;:19;;;;;;;;13237:10;20660:33;;;;;;;;20712:26;;;;20704:79;;;;-1:-1:-1;;;20704:79:0;;7075:2:1;20704:79:0;;;7057:21:1;7114:2;7094:18;;;7087:30;7153:34;7133:18;;;7126:62;-1:-1:-1;;;7204:18:1;;;7197:38;7252:19;;20704:79:0;6873:404:1;20704:79:0;20794:57;20803:6;13237:10;20825:25;20844:6;20825:16;:25;:::i;:::-;20794:8;:57::i;:::-;20872:4;20865:11;;;20460:424;;;;;;:::o;21633:248::-;21699:7;21738;;21727;:18;;21719:73;;;;-1:-1:-1;;;21719:73:0;;7617:2:1;21719:73:0;;;7599:21:1;7656:2;7636:18;;;7629:30;7695:34;7675:18;;;7668:62;-1:-1:-1;;;7746:18:1;;;7739:40;7796:19;;21719:73:0;7415:406:1;21719:73:0;21803:19;21826:10;:8;:10::i;:::-;21803:33;-1:-1:-1;21854:19:0;21803:33;21854:7;:19;:::i;22230:473::-;14492:13;:11;:13::i;:::-;-1:-1:-1;;;;;22310:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22302:56;;;::::0;-1:-1:-1;;;22302:56:0;;8250:2:1;22302:56:0::1;::::0;::::1;8232:21:1::0;8289:2;8269:18;;;8262:30;8328:25;8308:18;;;8301:53;8371:18;;22302:56:0::1;8048:347:1::0;22302:56:0::1;22374:9;22369:327;22393:9;:16:::0;22389:20;::::1;22369:327;;;22451:7;-1:-1:-1::0;;;;;22435:23:0::1;:9;22445:1;22435:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22435:12:0::1;:23:::0;22431:254:::1;;22494:9;22504:16:::0;;:20:::1;::::0;22523:1:::1;::::0;22504:20:::1;:::i;:::-;22494:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22479:9:::1;:12:::0;;-1:-1:-1;;;;;22494:31:0;;::::1;::::0;22489:1;;22479:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22479:46:0::1;-1:-1:-1::0;;;;;22479:46:0;;::::1;;::::0;;22544:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22583:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22583:28:0::1;::::0;;22630:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22630:15:0;;;;;-1:-1:-1;;;;;;22630:15:0::1;::::0;;;;;22369:327:::1;22230:473:::0;:::o;22431:254::-:1;22411:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22369:327;;;;22230:473:::0;:::o;20893:215::-;13237:10;20981:4;21030:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21030:34:0;;;;;;;;;;20981:4;;20998:80;;21021:7;;21030:47;;21067:10;;21030:47;:::i;31087:172::-;14492:13;:11;:13::i;:::-;31199:6:::1;:27:::0;;-1:-1:-1;;;;;;31199:27:0::1;::::0;-1:-1:-1;;;;;31199:27:0;;::::1;;;::::0;;31237:4:::1;:14:::0;;-1:-1:-1;;;;;;31237:14:0::1;::::0;;;::::1;;::::0;;31087:172::o;21890:331::-;14492:13;:11;:13::i;:::-;-1:-1:-1;;;;;21971:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21970:21;21962:61;;;::::0;-1:-1:-1;;;21962:61:0;;9006:2:1;21962:61:0::1;::::0;::::1;8988:21:1::0;9045:2;9025:18;;;9018:30;9084:29;9064:18;;;9057:57;9131:18;;21962:61:0::1;8804:351:1::0;21962:61:0::1;-1:-1:-1::0;;;;;22037:16:0;::::1;22056:1;22037:16:::0;;;:7:::1;:16;::::0;;;;;:20;22034:108:::1;;-1:-1:-1::0;;;;;22113:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;22093:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;22074:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;22034:108:::1;-1:-1:-1::0;;;;;22152:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22152:27:0::1;22175:4;22152:27:::0;;::::1;::::0;;;22190:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22190:23:0::1;::::0;;::::1;::::0;;21890:331::o;19755:198::-;-1:-1:-1;;;;;19845:20:0;;19821:7;19845:20;;;:11;:20;;;;;;;;19841:49;;;-1:-1:-1;;;;;;19874:16:0;;;;;:7;:16;;;;;;;19755:198::o;19841:49::-;-1:-1:-1;;;;;19928:16:0;;;;;;:7;:16;;;;;;19908:37;;:19;:37::i;15247:103::-;14492:13;:11;:13::i;:::-;15312:30:::1;15339:1;15312:18;:30::i;:::-;15247:103::o:0;30475:118::-;14492:13;:11;:13::i;:::-;30572::::1;17264:2;30572;:13;:::i;:::-;30563:22;::::0;:6;:22:::1;:::i;:::-;30548:12;:37:::0;-1:-1:-1;30475:118:0:o;29990:148::-;14492:13;:11;:13::i;:::-;30044:14:::1;:21:::0;;-1:-1:-1;;30076:18:0;;;;;30118:12:::1;30105:10;:25:::0;29990:148::o;30977:101::-;14492:13;:11;:13::i;:::-;31048:11:::1;:22:::0;;-1:-1:-1;;31048:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30977:101::o;31268:98::-;14492:13;:11;:13::i;:::-;31339:10:::1;:19:::0;31268:98::o;31482:114::-;14492:13;:11;:13::i;:::-;31549:39:::1;::::0;31557:10:::1;::::0;31549:39;::::1;;;::::0;31578:9;;31549:39:::1;::::0;;;31578:9;31557:10;31549:39;::::1;;;;;;;;;;;;;::::0;::::1;;;;21117:378:::0;13237:10;21210:4;21254:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;21254:34:0;;;;;;;;;;21307:35;;;;21299:85;;;;-1:-1:-1;;;21299:85:0;;9362:2:1;21299:85:0;;;9344:21:1;9401:2;9381:18;;;9374:30;9440:34;9420:18;;;9413:62;-1:-1:-1;;;9491:18:1;;;9484:35;9536:19;;21299:85:0;9160:401:1;21299:85:0;21395:67;13237:10;21418:7;21427:34;21446:15;21427:16;:34;:::i;21395:67::-;-1:-1:-1;21483:4:0;;21117:378;-1:-1:-1;;;21117:378:0:o;19962:167::-;20040:4;20057:42;13237:10;20081:9;20092:6;20057:9;:42::i;30602:110::-;14492:13;:11;:13::i;:::-;30691::::1;17264:2;30691;:13;:::i;:::-;30682:22;::::0;:6;:22:::1;:::i;:::-;30668:11;:36:::0;-1:-1:-1;30602:110:0:o;30848:120::-;14492:13;:11;:13::i;:::-;30947::::1;17264:2;30947;:13;:::i;:::-;30938:22;::::0;:6;:22:::1;:::i;:::-;30922:13;:38:::0;-1:-1:-1;30848:120:0:o;31605:148::-;14492:13;:11;:13::i;:::-;31704:41:::1;::::0;-1:-1:-1;;;31704:41:0;;-1:-1:-1;;;;;9758:32:1;;;31704:41:0::1;::::0;::::1;9740:51:1::0;9807:18;;;9800:34;;;31704:27:0;::::1;::::0;::::1;::::0;9713:18:1;;31704:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31605:148:::0;;;:::o;22712:126::-;14492:13;:11;:13::i;:::-;-1:-1:-1;;;;;22794:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;22794:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22712:126::o;15505:201::-;14492:13;:11;:13::i;:::-;-1:-1:-1;;;;;15594:22:0;::::1;15586:73;;;::::0;-1:-1:-1;;;15586:73:0;;10297:2:1;15586:73:0::1;::::0;::::1;10279:21:1::0;10336:2;10316:18;;;10309:30;10375:34;10355:18;;;10348:62;-1:-1:-1;;;10426:18:1;;;10419:36;10472:19;;15586:73:0::1;10095:402:1::0;15586:73:0::1;15670:28;15689:8;15670:18;:28::i;:::-;15505:201:::0;:::o;14771:132::-;14652:7;14679:6;-1:-1:-1;;;;;14679:6:0;13237:10;14835:23;14827:68;;;;-1:-1:-1;;;14827:68:0;;10704:2:1;14827:68:0;;;10686:21:1;;;10723:18;;;10716:30;10782:34;10762:18;;;10755:62;10834:18;;14827:68:0;10502:356:1;25769:335:0;-1:-1:-1;;;;;25862:19:0;;25854:68;;;;-1:-1:-1;;;25854:68:0;;11065:2:1;25854:68:0;;;11047:21:1;11104:2;11084:18;;;11077:30;11143:34;11123:18;;;11116:62;-1:-1:-1;;;11194:18:1;;;11187:34;11238:19;;25854:68:0;10863:400:1;25854:68:0;-1:-1:-1;;;;;25941:21:0;;25933:68;;;;-1:-1:-1;;;25933:68:0;;11470:2:1;25933:68:0;;;11452:21:1;11509:2;11489:18;;;11482:30;11548:34;11528:18;;;11521:62;-1:-1:-1;;;11599:18:1;;;11592:32;11641:19;;25933:68:0;11268:398:1;25933:68:0;-1:-1:-1;;;;;26012:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26064:32;;484:25:1;;;26064:32:0;;457:18:1;26064:32:0;;;;;;;25769:335;;;:::o;26116:1473::-;-1:-1:-1;;;;;26204:18:0;;26196:68;;;;-1:-1:-1;;;26196:68:0;;11873:2:1;26196:68:0;;;11855:21:1;11912:2;11892:18;;;11885:30;11951:34;11931:18;;;11924:62;-1:-1:-1;;;12002:18:1;;;11995:35;12047:19;;26196:68:0;11671:401:1;26196:68:0;26292:1;26283:6;:10;26275:64;;;;-1:-1:-1;;;26275:64:0;;12279:2:1;26275:64:0;;;12261:21:1;12318:2;12298:18;;;12291:30;12357:34;12337:18;;;12330:62;-1:-1:-1;;;12408:18:1;;;12401:39;12457:19;;26275:64:0;12077:405:1;26275:64:0;26368:15;26378:4;26368:9;:15::i;:::-;26358:6;:25;;26350:86;;;;-1:-1:-1;;;26350:86:0;;12689:2:1;26350:86:0;;;12671:21:1;12728:2;12708:18;;;12701:30;12767:34;12747:18;;;12740:62;-1:-1:-1;;;12818:18:1;;;12811:47;12875:19;;26350:86:0;12487:413:1;26350:86:0;26453:6;;:11;;;;:29;;-1:-1:-1;26468:14:0;;;;;;;26453:29;26450:116;;;26530:12;26514:13;;26501:10;;:26;;;;:::i;:::-;:41;26498:56;;;26553:1;26544:6;:10;26498:56;-1:-1:-1;;;;;26617:24:0;;26579:12;26617:24;;;:18;:24;;;;;;;;26616:25;:52;;;;-1:-1:-1;;;;;;26646:22:0;;;;;;:18;:22;;;;;;;;26645:23;26616:52;26613:664;;;26692:14;;;;;;;26684:59;;;;-1:-1:-1;;;26684:59:0;;13107:2:1;26684:59:0;;;13089:21:1;;;13126:18;;;13119:30;13185:34;13165:18;;;13158:62;13237:18;;26684:59:0;12905:356:1;26684:59:0;26776:11;;26766:6;:21;;26758:63;;;;-1:-1:-1;;;26758:63:0;;13468:2:1;26758:63:0;;;13450:21:1;13507:2;13487:18;;;13480:30;13546:31;13526:18;;;13519:59;13595:18;;26758:63:0;13266:353:1;26758:63:0;26845:4;;-1:-1:-1;;;;;26839:10:0;;;26845:4;;26839:10;26836:102;;26885:15;;26875:6;26859:13;26869:2;26859:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;26851:87;;;;-1:-1:-1;;;26851:87:0;;13826:2:1;26851:87:0;;;13808:21:1;13865:2;13845:18;;;13838:30;13904:34;13884:18;;;13877:62;-1:-1:-1;;;13955:18:1;;;13948:31;13996:19;;26851:87:0;13624:397:1;26851:87:0;-1:-1:-1;26993:4:0;;26963;;-1:-1:-1;;;;;26985:12:0;;;26993:4;;26985:12;:57;;;;;27030:12;27014:13;;27001:10;;:26;;;;:::i;:::-;:41;26985:57;26982:284;;;27072:5;27062:15;;27109:12;;27099:6;:22;27096:155;;27159:10;;27148:7;;:21;27145:86;;27182:10;;27171:7;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;27145:86:0;;-1:-1:-1;27145:86:0;;27230:1;27220:7;:11;27145:86;27290:12;27333:13;;27305:24;27323:4;27305:9;:24::i;:::-;27361:8;;-1:-1:-1;;27305:41:0;;-1:-1:-1;27361:8:0;;;;;27360:9;:24;;;;-1:-1:-1;27373:11:0;;;;27360:24;:35;;;;;27388:7;27360:35;:51;;;;-1:-1:-1;27407:4:0;;-1:-1:-1;;;;;27399:12:0;;;27407:4;;27399:12;;27360:51;:80;;;;-1:-1:-1;;;;;;27416:24:0;;;;;;:18;:24;;;;;;;;27415:25;27360:80;:107;;;;-1:-1:-1;;;;;;27445:22:0;;;;;;:18;:22;;;;;;;;27444:23;27360:107;27357:170;;;27483:32;27501:13;;27483:17;:32::i;:::-;27540:41;27555:4;27561:2;27565:6;27573:7;27540:14;:41::i;:::-;26185:1404;;26116:1473;;;:::o;25053:158::-;25094:7;25115:15;25132;25151:19;:17;:19::i;:::-;25114:56;;-1:-1:-1;25114:56:0;-1:-1:-1;25188:15:0;25114:56;;25188:15;:::i;:::-;25181:22;;;;25053:158;:::o;15866:191::-;15940:16;15959:6;;-1:-1:-1;;;;;15976:17:0;;;-1:-1:-1;;;;;;15976:17:0;;;;;;16009:40;;15959:6;;;;;;;16009:40;;15940:16;16009:40;15929:128;15866:191;:::o;28792:616::-;18531:8;:15;;-1:-1:-1;;18531:15:0;;;;;28893:21:::1;28928:24;28945:6:::0;28928:16:::1;:24::i;:::-;28966:20;28989:38;29013:14:::0;28989:21:::1;:38;:::i;:::-;29070:15;:19:::0;28966:61;;-1:-1:-1;29041:20:0::1;::::0;29064:25:::1;::::0;:3:::1;:25;:::i;:::-;29041:48;;29103:12;29119:1;29103:17:::0;29100:29:::1;;29122:7;;;;;29100:29;29174:19:::0;;29142:14:::1;::::0;29196:12;;29159:34:::1;::::0;:12;:34:::1;:::i;:::-;:49;;;;:::i;:::-;29142:66:::0;-1:-1:-1;29222:10:0;;29219:51:::1;;29242:9;::::0;29234:36:::1;::::0;-1:-1:-1;;;;;29242:9:0::1;29263:6:::0;29234:28:::1;:36::i;:::-;29284:18;29305:21;29320:6:::0;29305:12;:21:::1;:::i;:::-;29284:42:::0;-1:-1:-1;29340:14:0;;29337:63:::1;;29364:13;::::0;29356:44:::1;::::0;-1:-1:-1;;;;;29364:13:0::1;29389:10:::0;29356:32:::1;:44::i;:::-;28854:554;;;;;18557:1;-1:-1:-1::0;18569:8:0;:16;;-1:-1:-1;;18569:16:0;;;28792:616::o;27674:1109::-;27813:4;;27786:11;;-1:-1:-1;;;;;27800:17:0;;;27813:4;;27800:17;:32;;27827:5;27800:32;;;27820:4;27800:32;27786:46;;27843:28;27874:36;27885:7;27894;27903:6;27874:10;:36::i;:::-;27843:67;;27927:6;:17;;;;;27937:7;27927:17;:62;;;;;27977:12;27961:13;;27948:10;;:26;;;;:::i;:::-;:41;27927:62;27924:192;;;28031:10;;28018;;28008:7;;:20;;;;:::i;:::-;:33;28005:99;;;28053:10;;28043:7;:20;28005:99;;;28094:10;;28083:7;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;28005:99:0;-1:-1:-1;;;;;28133:19:0;;;;;;:11;:19;;;;;;;;28129:115;;;-1:-1:-1;;;;;28209:15:0;;;;;;:7;:15;;;;;;:23;;28225:7;;28209:23;:::i;:::-;-1:-1:-1;;;;;28191:15:0;;;;;;:7;:15;;;;;:41;28129:115;-1:-1:-1;;;;;28258:22:0;;;;;;:11;:22;;;;;;;;28254:130;;;28355:17;;;;-1:-1:-1;;;;;28336:18:0;;;;;;:7;:18;;;;;;:36;;28355:17;28336:36;:::i;:::-;-1:-1:-1;;;;;28315:18:0;;;;;;:7;:18;;;;;:57;28254:130;28431:9;;-1:-1:-1;;;;;28415:15:0;;28431:9;28415:15;;;:7;:15;;;;;;:25;;28431:9;28415:25;:::i;:::-;-1:-1:-1;;;;;28397:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;28491:17;;;28472:18;;;;;;;;;;:36;;28491:17;28472:36;:::i;:::-;-1:-1:-1;;;;;28451:18:0;;;;;;:7;:18;;;;;;;:57;;;;28525:6;;;:10;;;:24;;;28548:1;28539;:6;;;:10;28525:24;28522:56;;;28551:27;28563:1;:6;;;28571:1;:6;;;28551:11;:27::i;:::-;28602:1;28592;:7;;;:11;:26;;;;28617:1;28607;:7;;;:11;28592:26;28589:62;;;28620:31;28634:1;:7;;;28643:1;:7;;;28620:13;:31::i;:::-;28687:9;-1:-1:-1;;;;;28670:46:0;28679:6;-1:-1:-1;;;;;28670:46:0;;28698:1;:17;;;28670:46;;;;484:25:1;;472:2;457:18;;338:177;28670:46:0;;;;;;;;28757:4;-1:-1:-1;;;;;28732:40:0;28741:6;-1:-1:-1;;;;;28732:40:0;;28764:1;:7;;;28732:40;;;;484:25:1;;472:2;457:18;;338:177;28732:40:0;;;;;;;;27772:1011;;27674:1109;;;;:::o;25220:540::-;25317:7;;25353;;25270;;;;;25371:279;25395:9;:16;25391:20;;25371:279;;;25461:7;25437;:21;25445:9;25455:1;25445:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25445:12:0;25437:21;;;;;;;;;;;;;:31;;:66;;;25496:7;25472;:21;25480:9;25490:1;25480:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25480:12:0;25472:21;;;;;;;;;;;;;:31;25437:66;25433:97;;;25513:7;;25522;;25505:25;;;;;;;25220:540;;:::o;25433:97::-;25563:7;:21;25571:9;25581:1;25571:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25571:12:0;25563:21;;;;;;;;;;;;;25555:29;;:7;:29;:::i;:::-;25545:39;;25617:7;:21;25625:9;25635:1;25625:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;25625:12:0;25617:21;;;;;;;;;;;;;25609:29;;:7;:29;:::i;:::-;25599:39;-1:-1:-1;25413:3:0;;;;:::i;:::-;;;;25371:279;;;;25682:7;;25674;;:15;;;;:::i;:::-;25664:7;:25;25660:56;;;25699:7;;25708;;25691:25;;;;;;25220:540;;:::o;25660:56::-;25735:7;;25744;;-1:-1:-1;25220:540:0;-1:-1:-1;25220:540:0:o;29417:564::-;29567:16;;;29581:1;29567:16;;;;;;;;29543:21;;29567:16;;;;;;;;;;-1:-1:-1;29567:16:0;29543:40;;29612:4;29594;29599:1;29594:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29594:23:0;;;-1:-1:-1;;;;;29594:23:0;;;;;29638:6;;;;;;;;;-1:-1:-1;;;;;29638:6:0;-1:-1:-1;;;;;29638:11:0;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29628:4;29633:1;29628:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29628:23:0;;;:7;;;;;;;;;:23;29697:6;;29665:53;;29682:4;;29697:6;;;;29706:11;29665:8;:53::i;:::-;29758:6;;:215;;-1:-1:-1;;;29758:215:0;;:6;;;;-1:-1:-1;;;;;29758:6:0;;:57;;:215;;29830:11;;29856:1;;29900:4;;29927;;29947:15;;29758:215;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29472:509;29417:564;:::o;2733:317::-;2848:6;2823:21;:31;;2815:73;;;;-1:-1:-1;;;2815:73:0;;15601:2:1;2815:73:0;;;15583:21:1;15640:2;15620:18;;;15613:30;15679:31;15659:18;;;15652:59;15728:18;;2815:73:0;15399:353:1;2815:73:0;2902:12;2920:9;-1:-1:-1;;;;;2920:14:0;2942:6;2920:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2901:52;;;2972:7;2964:78;;;;-1:-1:-1;;;2964:78:0;;16169:2:1;2964:78:0;;;16151:21:1;16208:2;16188:18;;;16181:30;16247:34;16227:18;;;16220:62;16318:28;16298:18;;;16291:56;16364:19;;2964:78:0;15967:422:1;2964:78:0;2804:246;2733:317;;:::o;23577:364::-;23663:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23663:36:0;23724:37;23736:7;23745;23754:6;23724:11;:37::i;:::-;23712:49;;23854:52;23866:9;23877:7;23886;23895:10;:8;:10::i;:::-;23854:11;:52::i;:::-;23835:15;;;23772:134;23819:14;;;23772:134;23792:25;;;23772:134;;;23577:364;;;;;:::o;23223:116::-;23301:4;23291:7;;:14;;;;;;;:::i;:::-;;;;;;;;23327:4;23316:8;;:15;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;23223:116:0:o;23348:220::-;23445:4;23425:26;;;;:11;:26;;;;;;;;23422:97;;;23493:4;23477:22;;;;:7;:22;;;;;:30;;23501:6;;23477:22;:30;;23501:6;;23477:30;:::i;:::-;;;;-1:-1:-1;;23422:97:0;23545:4;23529:22;;;;:7;:22;;;;;:31;;23554:6;;23529:22;:31;;23554:6;;23529:31;:::i;23950:580::-;24037:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24037:28:0;24085:7;24081:86;;24107:17;;;:27;;;24147:8;;24081:86;24180:15;24198:6;:25;;24217:6;;24198:25;;;24207:7;;24198:25;24180:43;;24234:14;24283:3;24261:15;:19;;;24251:7;:29;;;;:::i;:::-;:35;;;;:::i;:::-;24234:52;;24297:15;24355:3;24332:15;:19;;;24326:3;:25;;;;:::i;:::-;24315:37;;:7;:37;:::i;:::-;:43;;;;:::i;:::-;24297:61;-1:-1:-1;24397:4:0;24378:16;24388:6;24378:7;:16;:::i;:::-;:23;;;;:::i;:::-;24369:6;;;:32;24442:4;24422:17;24432:7;24422;:17;:::i;:::-;:24;;;;:::i;:::-;24412:7;;;:34;;;24487:6;;;;24477:16;;:7;:16;:::i;:::-;:26;;;;:::i;:::-;24457:17;;;:46;-1:-1:-1;;;23950:580:0;;;;;:::o;24539:505::-;24664:15;;;;24756:19;24764:11;24756:7;:19;:::i;:::-;24746:29;;24793:7;24789:67;;-1:-1:-1;24822:7:0;;-1:-1:-1;24840:1:0;;-1:-1:-1;24840:1:0;24815:29;;24789:67;24883:11;24876:1;:6;;;:18;;;;:::i;:::-;24869:25;;24921:11;24913:1;:7;;;:19;;;;:::i;:::-;24905:27;-1:-1:-1;24905:27:0;24962:12;24970:4;24962:7;:12;:::i;:::-;:18;;;;:::i;:::-;24943:37;;24539:505;;;;;;;;;;:::o;520:131:1:-;-1:-1:-1;;;;;595:31:1;;585:42;;575:70;;641:1;638;631:12;656:247;715:6;768:2;756:9;747:7;743:23;739:32;736:52;;;784:1;781;774:12;736:52;823:9;810:23;842:31;867:5;842:31;:::i;908:548::-;1020:4;1049:2;1078;1067:9;1060:21;1110:6;1104:13;1153:6;1148:2;1137:9;1133:18;1126:34;1178:1;1188:140;1202:6;1199:1;1196:13;1188:140;;;1297:14;;;1293:23;;1287:30;1263:17;;;1282:2;1259:26;1252:66;1217:10;;1188:140;;;1192:3;1377:1;1372:2;1363:6;1352:9;1348:22;1344:31;1337:42;1447:2;1440;1436:7;1431:2;1423:6;1419:15;1415:29;1404:9;1400:45;1396:54;1388:62;;;;908:548;;;;:::o;1461:180::-;1520:6;1573:2;1561:9;1552:7;1548:23;1544:32;1541:52;;;1589:1;1586;1579:12;1541:52;-1:-1:-1;1612:23:1;;1461:180;-1:-1:-1;1461:180:1:o;1646:316::-;1723:6;1731;1739;1792:2;1780:9;1771:7;1767:23;1763:32;1760:52;;;1808:1;1805;1798:12;1760:52;-1:-1:-1;;1831:23:1;;;1901:2;1886:18;;1873:32;;-1:-1:-1;1952:2:1;1937:18;;;1924:32;;1646:316;-1:-1:-1;1646:316:1:o;1967:315::-;2035:6;2043;2096:2;2084:9;2075:7;2071:23;2067:32;2064:52;;;2112:1;2109;2102:12;2064:52;2151:9;2138:23;2170:31;2195:5;2170:31;:::i;:::-;2220:5;2272:2;2257:18;;;;2244:32;;-1:-1:-1;;;1967:315:1:o;2479:456::-;2556:6;2564;2572;2625:2;2613:9;2604:7;2600:23;2596:32;2593:52;;;2641:1;2638;2631:12;2593:52;2680:9;2667:23;2699:31;2724:5;2699:31;:::i;:::-;2749:5;-1:-1:-1;2806:2:1;2791:18;;2778:32;2819:33;2778:32;2819:33;:::i;:::-;2479:456;;2871:7;;-1:-1:-1;;;2925:2:1;2910:18;;;;2897:32;;2479:456::o;3129:388::-;3197:6;3205;3258:2;3246:9;3237:7;3233:23;3229:32;3226:52;;;3274:1;3271;3264:12;3226:52;3313:9;3300:23;3332:31;3357:5;3332:31;:::i;:::-;3382:5;-1:-1:-1;3439:2:1;3424:18;;3411:32;3452:33;3411:32;3452:33;:::i;:::-;3504:7;3494:17;;;3129:388;;;;;:::o;3730:118::-;3816:5;3809:13;3802:21;3795:5;3792:32;3782:60;;3838:1;3835;3828:12;3853:241;3909:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4017:9;4004:23;4036:28;4058:5;4036:28;:::i;4099:382::-;4164:6;4172;4225:2;4213:9;4204:7;4200:23;4196:32;4193:52;;;4241:1;4238;4231:12;4193:52;4280:9;4267:23;4299:31;4324:5;4299:31;:::i;:::-;4349:5;-1:-1:-1;4406:2:1;4391:18;;4378:32;4419:30;4378:32;4419:30;:::i;4709:127::-;4770:10;4765:3;4761:20;4758:1;4751:31;4801:4;4798:1;4791:15;4825:4;4822:1;4815:15;4841:125;4906:9;;;4927:10;;;4924:36;;;4940:18;;:::i;5317:422::-;5406:1;5449:5;5406:1;5463:270;5484:7;5474:8;5471:21;5463:270;;;5543:4;5539:1;5535:6;5531:17;5525:4;5522:27;5519:53;;;5552:18;;:::i;:::-;5602:7;5592:8;5588:22;5585:55;;;5622:16;;;;5585:55;5701:22;;;;5661:15;;;;5463:270;;;5467:3;5317:422;;;;;:::o;5744:806::-;5793:5;5823:8;5813:80;;-1:-1:-1;5864:1:1;5878:5;;5813:80;5912:4;5902:76;;-1:-1:-1;5949:1:1;5963:5;;5902:76;5994:4;6012:1;6007:59;;;;6080:1;6075:130;;;;5987:218;;6007:59;6037:1;6028:10;;6051:5;;;6075:130;6112:3;6102:8;6099:17;6096:43;;;6119:18;;:::i;:::-;-1:-1:-1;;6175:1:1;6161:16;;6190:5;;5987:218;;6289:2;6279:8;6276:16;6270:3;6264:4;6261:13;6257:36;6251:2;6241:8;6238:16;6233:2;6227:4;6224:12;6220:35;6217:77;6214:159;;;-1:-1:-1;6326:19:1;;;6358:5;;6214:159;6405:34;6430:8;6424:4;6405:34;:::i;:::-;6475:6;6471:1;6467:6;6463:19;6454:7;6451:32;6448:58;;;6486:18;;:::i;:::-;6524:20;;5744:806;-1:-1:-1;;;5744:806:1:o;6555:140::-;6613:5;6642:47;6683:4;6673:8;6669:19;6663:4;6642:47;:::i;6700:168::-;6773:9;;;6804;;6821:15;;;6815:22;;6801:37;6791:71;;6842:18;;:::i;7282:128::-;7349:9;;;7370:11;;;7367:37;;;7384:18;;:::i;7826:217::-;7866:1;7892;7882:132;;7936:10;7931:3;7927:20;7924:1;7917:31;7971:4;7968:1;7961:15;7999:4;7996:1;7989:15;7882:132;-1:-1:-1;8028:9:1;;7826:217::o;8400:127::-;8461:10;8456:3;8452:20;8449:1;8442:31;8492:4;8489:1;8482:15;8516:4;8513:1;8506:15;8532:127;8593:10;8588:3;8584:20;8581:1;8574:31;8624:4;8621:1;8614:15;8648:4;8645:1;8638:15;8664:135;8703:3;8724:17;;;8721:43;;8744:18;;:::i;:::-;-1:-1:-1;8791:1:1;8780:13;;8664:135::o;9845:245::-;9912:6;9965:2;9953:9;9944:7;9940:23;9936:32;9933:52;;;9981:1;9978;9971:12;9933:52;10013:9;10007:16;10032:28;10054:5;10032:28;:::i;14158:251::-;14228:6;14281:2;14269:9;14260:7;14256:23;14252:32;14249:52;;;14297:1;14294;14287:12;14249:52;14329:9;14323:16;14348:31;14373:5;14348:31;:::i;14414:980::-;14676:4;14724:3;14713:9;14709:19;14755:6;14744:9;14737:25;14781:2;14819:6;14814:2;14803:9;14799:18;14792:34;14862:3;14857:2;14846:9;14842:18;14835:31;14886:6;14921;14915:13;14952:6;14944;14937:22;14990:3;14979:9;14975:19;14968:26;;15029:2;15021:6;15017:15;15003:29;;15050:1;15060:195;15074:6;15071:1;15068:13;15060:195;;;15139:13;;-1:-1:-1;;;;;15135:39:1;15123:52;;15230:15;;;;15195:12;;;;15171:1;15089:9;15060:195;;;-1:-1:-1;;;;;;;15311:32:1;;;;15306:2;15291:18;;15284:60;-1:-1:-1;;;15375:3:1;15360:19;15353:35;15272:3;14414:980;-1:-1:-1;;;14414:980:1:o

Swarm Source

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