Sonic Blaze Testnet

Contract

0x3f84Ef44F8f8f6890AB14730578149A0972e18e5

Overview

S Balance

Sonic Blaze LogoSonic Blaze LogoSonic Blaze Logo0 S

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Enable Trading234201822025-02-27 12:29:244 days ago1740659364IN
0x3f84Ef44...0972e18e5
0 S0.000050581.1
Set Swap Thresho...234200042025-02-27 12:28:184 days ago1740659298IN
0x3f84Ef44...0972e18e5
0 S0.000032131.1
Set LP Pair234197472025-02-27 12:26:474 days ago1740659207IN
0x3f84Ef44...0972e18e5
0 S0.000029871.1
Set Reward Token234196192025-02-27 12:26:015 days ago1740659161IN
0x3f84Ef44...0972e18e5
0 S0.000029431.1
Set LP Pair234194882025-02-27 12:25:145 days ago1740659114IN
0x3f84Ef44...0972e18e5
0 S0.000051511.1

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SuperRain

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 1000 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : SuperRain.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

// Interface definitions
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

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

/**
 * @title RainToken
 * @dev A simplified ERC20 token with reflection rewards
 */
contract SuperRain {
    // Token setup
    string private _name = "SuperRain";
    string private _symbol = "SUPERRAIN";
    uint8 private constant _decimals = 18;
    uint256 private _totalSupply;
    
    // Reward token and router addresses
    address public REWARD_TOKEN;
    address constant private ROUTER = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3; // ROUTER
    address public LP_PAIR;
    
    // Ownership
    address private _owner;
    
    // Balances and allowances
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    
    // Fee configuration
    uint256 public taxPercentage = 5; // 5% default tax
    uint256 public swapThreshold;
    
    // Reward distribution
    uint256 public distributionInterval = 300; // 5 minutes (in seconds)
    uint256 public batchSize = 50;
    uint256 public lastProcessedTime;
    uint256 public currentIndex;
    
    // Holder management
    address[] private holders;
    mapping(address => uint256) public holderIndexes;
    
    struct HolderInfo {
        uint256 amount;
        uint256 pendingRewards;
        uint256 totalExcluded;
    }
    
    mapping(address => HolderInfo) public holderInfo;
    
    // Rewards accounting
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public dividendsPerShare;
    
    // Special addresses
    mapping(address => bool) public excluded;
    mapping(address => bool) public exempt;
    
    // Control flags
    bool private inSwap;
    bool public tradingEnabled;
    
    // Events
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event SwapAndDistribute(uint256 tokenAmount, uint256 rewardAmount);
    event Excluded(address indexed account, bool status);
    event TaxUpdated(uint256 newTaxPercentage);
    event IntervalUpdated(uint256 newDistributionInterval);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event RewardsProcessed(uint256 holderCount);
    
    // Modifiers
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    
    modifier onlyOwner() {
        require(msg.sender == _owner, "Caller is not the owner");
        _;
    }
    
    // Constructor
    constructor() {
        _owner = msg.sender;
        
        // Initial supply
        _totalSupply = 100000000 * 10**_decimals;
        _balances[msg.sender] = _totalSupply;
        
        // Set default parameters
        swapThreshold = _totalSupply * 5 / 10000; // 0.05%
        
        // Set initial reward token address
        REWARD_TOKEN = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; // WRAPPED_SONIC
        
        // Add owner to holders array
        _addHolder(_owner, _balances[_owner]);
        
        // Setup initial shares
        totalShares = _totalSupply;
        
        // Approve router for future swaps
        _approve(address(this), ROUTER, _totalSupply);
        
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    
    // External functions
    
    function setRewardToken(address newRewardToken) external onlyOwner {
        require(newRewardToken != address(0), "Reward token cannot be zero address");
        REWARD_TOKEN = newRewardToken;
    }
    
    function setLPPair(address newPair) external onlyOwner {
        require(newPair != address(0), "LP pair cannot be zero address");
        LP_PAIR = newPair;
    }
    
    function setTaxPercentage(uint256 newTaxPercentage) external onlyOwner {
        taxPercentage = newTaxPercentage;
        emit TaxUpdated(newTaxPercentage);
    }
    
    function setDistributionInterval(uint256 newInterval) external onlyOwner {
        require(newInterval >= 60, "Interval must be at least 60 seconds");
        distributionInterval = newInterval;
        emit IntervalUpdated(newInterval);
    }
    
    function setBatchSize(uint256 newBatchSize) external onlyOwner {
        require(newBatchSize >= 5 && newBatchSize <= 100, "Batch size must be between 5 and 100");
        batchSize = newBatchSize;
    }
    
    function setSwapThreshold(uint256 newThreshold) external onlyOwner {
        require(newThreshold > 0, "Threshold must be greater than 0");
        swapThreshold = newThreshold;
    }
    
    function setExcluded(address account, bool status) external onlyOwner {
        if (excluded[account] != status) {
            excluded[account] = status;
            if (status) {
                // If excluding an address, remove it from holders
                if (holderInfo[account].amount > 0) {
                    _removeHolder(account);
                }
            } else {
                // If including an address, add it to holders
                _setShare(account, balanceOf(account));
            }
        }
        emit Excluded(account, status);
    }
    
    function setExempt(address account, bool status) external onlyOwner {
        exempt[account] = status;
    }
    
    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        tradingEnabled = true;
    }
    
    function transferOwnership(address newOwner) external onlyOwner {
        require(newOwner != address(0), "New owner cannot be zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
    /**
     * @dev Manually swap a specified amount of tokens for rewards
     * @param amount Amount of tokens to swap (0 for custom calculation based on contract balance)
     * @return swapped Amount of tokens that were actually swapped
     * @return received Amount of reward tokens received from the swap
     */
    function manualSwap(uint256 amount) external onlyOwner returns (uint256 swapped, uint256 received) {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance > 0, "No tokens to swap");
        
        // Determine swap amount based on parameters and contract balance
        uint256 swapAmount;
        if (amount > 0 && amount <= contractBalance) {
            // Use specified amount
            swapAmount = amount;
        } else if (swapThreshold > 0 && contractBalance >= swapThreshold) {
            // Use threshold amount
            swapAmount = swapThreshold;
        } else {
            // Use entire balance
            swapAmount = contractBalance;
        }
        
        // Execute the swap and track results
        uint256 receivedAmount = _swapTokensForRewards(swapAmount);
        
        return (swapAmount, receivedAmount);
    }
    
    /**
     * @dev Returns the contract's current balance of RAIN tokens available for swapping
     */
    function getSwappableBalance() external view returns (uint256) {
        return balanceOf(address(this));
    }
    
    /**
     * @dev Returns the contract's current balance of reward tokens available for distribution
     */
    function getRewardBalance() external view returns (uint256) {
        return IERC20(REWARD_TOKEN).balanceOf(address(this));
    }
    
    function manualDistributeRewards(uint256 batchCount) external returns (uint256, uint256) {
        require(msg.sender == _owner, "Only owner can distribute rewards");
        
        uint256 batchToProcess = batchCount > 0 ? batchCount : batchSize;
        
        if (currentIndex + batchToProcess > holders.length) {
            batchToProcess = holders.length - currentIndex;
        }
        
        if (batchToProcess == 0) {
            currentIndex = 0;
            return (0, 0);
        }
        
        uint256 startIndex = currentIndex;
        
        for (uint256 i = 0; i < batchToProcess; i++) {
            if (currentIndex < holders.length) {
                _distributeRewards(holders[currentIndex]);
                currentIndex++;
            }
        }
        
        uint256 processedCount = currentIndex - startIndex;
        
        if (currentIndex >= holders.length) {
            currentIndex = 0;
            lastProcessedTime = block.timestamp;
            emit RewardsProcessed(holders.length);
        }
        
        return (processedCount, currentIndex);
    }
    
    // ERC20 Standard Functions
    
    function name() public view returns (string memory) {
        return _name;
    }
    
    function symbol() public view returns (string memory) {
        return _symbol;
    }
    
    function decimals() public pure returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }
    
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }
    
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    
    function allowance(address owner_, address spender) public view returns (uint256) {
        return _allowances[owner_][spender];
    }
    
    function approve(address spender, uint256 amount) public returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        uint256 currentAllowance = _allowances[sender][msg.sender];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            _approve(sender, msg.sender, currentAllowance - amount);
        }
        
        _transfer(sender, recipient, amount);
        return true;
    }
    
    // Information functions
    
    function owner() public view returns (address) {
        return _owner;
    }
    
    function getHolderCount() public view returns (uint256) {
        return holders.length;
    }
    
    function isRewardsReady() public view returns (bool) {
        return block.timestamp >= lastProcessedTime + distributionInterval;
    }
    
    function getTimeUntilRewards() public view returns (uint256) {
        if (isRewardsReady()) return 0;
        return lastProcessedTime + distributionInterval - block.timestamp;
    }
    
    function getUnpaidRewards(address account) public view returns (uint256) {
        if (holderInfo[account].amount == 0) return 0;
        
        uint256 earnedRewards = getSharesPercentage(account);
        uint256 alreadyPaid = holderInfo[account].totalExcluded;
        
        if (earnedRewards <= alreadyPaid) return 0;
        return earnedRewards - alreadyPaid;
    }
    
    function getDistributionStatus() public view returns (uint256, uint256, uint256) {
        if (holders.length == 0) return (0, 0, 100);
        
        uint256 percentage = currentIndex * 100 / holders.length;
        return (holders.length, currentIndex, percentage);
    }
    
    // Internal functions
    
    function _transfer(address from, address to, uint256 amount) internal {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        
        // Check if trading is enabled when interacting with LP
        if (!tradingEnabled && (from == LP_PAIR || to == LP_PAIR)) {
            require(from == _owner || to == _owner, "Trading not enabled yet");
        }
        
        // Auto-liquidity and swap
        bool canSwap = balanceOf(address(this)) >= swapThreshold;
        if (canSwap && !inSwap && from != LP_PAIR && from != _owner && to != _owner) {
            uint256 swapAmount = amount > swapThreshold ? swapThreshold : amount;
            _swapTokensForRewards(swapAmount);
        }
        
        // Fee system
        bool takeFee = !exempt[from] && !exempt[to];
        
        uint256 fees = 0;
        if (takeFee) {
            if (from == LP_PAIR || to == LP_PAIR) {
                fees = amount * taxPercentage / 100;
            }
            if (fees > 0) {
                _takeFee(from, address(this), fees);
                amount -= fees;
            }
        }
        
        // Standard transfer
        _balances[from] -= amount;
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        
        // Update holder tracking
        if (!excluded[from] && from != LP_PAIR) {
            _setShare(from, _balances[from]);
        }
        
        if (!excluded[to] && to != LP_PAIR) {
            _setShare(to, _balances[to]);
        }
    }
    
    function _approve(address owner_, address spender, uint256 amount) internal {
        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 _takeFee(address from, address to, uint256 amount) internal {
        _balances[to] += amount;
        emit Transfer(from, to, amount);
    }
    
    function _swapTokensForRewards(uint256 amount) internal lockTheSwap returns (uint256) {
        // Setup swap path
        address[] memory path = new address[](2);
        path[0] = address(this);      // RAIN token address
        path[1] = REWARD_TOKEN;       // WRAPPED_SONIC address
        
        // Approve router
        _approve(address(this), ROUTER, amount);
        
        // Get initial balance
        uint256 initialBalance = IERC20(REWARD_TOKEN).balanceOf(address(this));
        
        // Swap tokens for tokens
        IUniswapRouter(ROUTER).swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );
        
        // Calculate received tokens
        uint256 newContractBalance = IERC20(REWARD_TOKEN).balanceOf(address(this));
        uint256 swappedTokenAmount = newContractBalance - initialBalance;
        
        if (swappedTokenAmount > 0 && totalShares > 0) {
            // Update dividends per share
            totalDividends += swappedTokenAmount;
            dividendsPerShare = totalDividends * 10000 / totalShares;
            
            emit SwapAndDistribute(amount, swappedTokenAmount);
        }
        
        return swappedTokenAmount;
    }
    
    function processRewards() public {
        uint256 gas = 300000;
        
        uint256 iterations = 0;
        while (gas > 0 && iterations < batchSize && currentIndex < holders.length) {
            uint256 gasUsed = gasleft();
            _distributeRewards(holders[currentIndex]);
            
            gas -= (gasUsed - gasleft());
            currentIndex++;
            iterations++;
        }
        
        if (currentIndex >= holders.length) {
            currentIndex = 0;
        }
    }
    
    function _distributeRewards(address holder) internal {
        if (holderInfo[holder].amount == 0) return;
        
        uint256 amount = getUnpaidEarnings(holder);
        if (amount > 0) {
            uint256 contractBalance = IERC20(REWARD_TOKEN).balanceOf(address(this));
            
            if (amount <= contractBalance) {
                holderInfo[holder].totalExcluded = getSharesPercentage(holder);
                holderInfo[holder].pendingRewards = 0;
                
                IERC20(REWARD_TOKEN).transfer(holder, amount);
            }
        }
    }
    
    function getSharesPercentage(address account) internal view returns (uint256) {
        if (totalShares == 0) return 0;
        
        return dividendsPerShare * holderInfo[account].amount / 10000;
    }
    
    function getUnpaidEarnings(address account) internal view returns (uint256) {
        if (holderInfo[account].amount == 0) return 0;
        
        uint256 earnedDividends = getSharesPercentage(account);
        uint256 alreadyPaid = holderInfo[account].totalExcluded;
        
        if (earnedDividends <= alreadyPaid) return 0;
        return earnedDividends - alreadyPaid;
    }
    
    function _setShare(address holder, uint256 amount) internal {
        // Only consider meaningful balances
        if (amount < 1 * 10**_decimals) { // Minimum 1 token
            if (amount == 0 && holderInfo[holder].amount > 0) {
                _removeHolder(holder);
            }
            return;
        }
        
        if (holderInfo[holder].amount > 0) {
            if (amount == 0) {
                _removeHolder(holder);
            } else {
                totalShares = totalShares - holderInfo[holder].amount + amount;
                holderInfo[holder].amount = amount;
                holderInfo[holder].pendingRewards = getSharesPercentage(holder);
            }
        } else {
            _addHolder(holder, amount);
            holderInfo[holder].amount = amount;
            holderInfo[holder].pendingRewards = getSharesPercentage(holder);
            totalShares += amount;
        }
    }
    
    function _addHolder(address holder, uint256 amount) internal {
        // Check if holder already exists (safety check)
        if (holderIndexes[holder] > 0 || (holders.length > 0 && holders[0] == holder)) {
            return;
        }
        
        holders.push(holder);
        holderIndexes[holder] = holders.length - 1;
    }
    
    function _removeHolder(address holder) internal {
        // Make sure holder exists
        if (holders.length == 0 || 
            (holderIndexes[holder] == 0 && holders[0] != holder) || 
            holderIndexes[holder] >= holders.length) {
            return;
        }
        
        address lastHolder = holders[holders.length - 1];
        uint256 holderIndex = holderIndexes[holder];
        
        // Replace the removed holder with the last one
        holders[holderIndex] = lastHolder;
        holderIndexes[lastHolder] = holderIndex;
        
        // Remove the last element
        holders.pop();
        delete holderIndexes[holder];
        
        // Update totals
        totalShares -= holderInfo[holder].amount;
        delete holderInfo[holder];
    }
    
    // Rescue functions
    
    function rescueToken(address token, uint256 amount) external onlyOwner {
        require(token != REWARD_TOKEN, "Cannot rescue dividend token");
        IERC20(token).transfer(_owner, amount);
    }
    
    function withdrawETH() external onlyOwner {
        (bool success,) = _owner.call{value: address(this).balance}("");
        require(success, "ETH withdrawal failed");
    }
    
    // Receive function to accept ETH
    receive() external payable {}
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "viaIR": true,
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"Excluded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDistributionInterval","type":"uint256"}],"name":"IntervalUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"holderCount","type":"uint256"}],"name":"RewardsProcessed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardAmount","type":"uint256"}],"name":"SwapAndDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newTaxPercentage","type":"uint256"}],"name":"TaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"LP_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributionInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendsPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDistributionStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSwappableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTimeUntilRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getUnpaidRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderIndexes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"pendingRewards","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRewardsReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastProcessedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"batchCount","type":"uint256"}],"name":"manualDistributeRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[{"internalType":"uint256","name":"swapped","type":"uint256"},{"internalType":"uint256","name":"received","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBatchSize","type":"uint256"}],"name":"setBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newInterval","type":"uint256"}],"name":"setDistributionInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"}],"name":"setLPPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardToken","type":"address"}],"name":"setRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newTaxPercentage","type":"uint256"}],"name":"setTaxPercentage","outputs":[],"stateMutability":"nonpayable","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":"view","type":"function"},{"inputs":[],"name":"taxPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","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":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052346102ad576100146000546102b2565b601f8111610264575b507f53757065725261696e000000000000000000000000000000000000000000001260005560015461004e906102b2565b601f811161021a575b507f53555045525241494e00000000000000000000000000000000000000000000126001556005600881905561012c600a556032600b5580546001600160a01b03199081163390811783556a52b7d2dcc80cd2e40000006002819055600091825260066020526040822055690a968163f0a57b4000006009556003805490921673039e2fb66102314ce7b64ce5ce3e5183bc94ad381790915590546001600160a01b031690819052610108906102ec565b6002548060115530156101b3577395a7e403d7cf20f675ff9273d66e94d35ba49fa390306000526007602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203092a360025460405190815260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a36040516128a690816103e88239f35b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b634e487b7160e01b600052601160045260246000fd5b6001600052601f0160051c7fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6908101905b8181106102585750610057565b6000815560010161024b565b60008052601f0160051c7f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563908101905b8181106102a1575061001d565b60008155600101610294565b600080fd5b90600182811c921680156102e2575b60208310146102cc57565b634e487b7160e01b600052602260045260246000fd5b91607f16916102c1565b6001600160a01b03166000818152600f6020526040902054158015906103ac575b6103a957600e54680100000000000000008110156103935760018101600e556000600e5482101561037f57600e90819052600080516020612c8e8339815191529190910180546001600160a01b031916831790555460001981019190821161020457600052600f602052604060002055565b634e487b7160e01b81526032600452602490fd5b634e487b7160e01b600052604160045260246000fd5b50565b50600e541515801561030d57506000600e541561037f57600e9052600080516020612c8e833981519152546001600160a01b0316811461030d56fe608080604052600436101561001d575b50361561001b57600080fd5b005b600090813560e01c9081630445b667146116805750806306fdde03146115c5578063095ea7b31461159e57806318160ddd1461158057806323b872dd1461149057806326987b60146114725780632836be241461138b578063313ce5671461136f57806333f3d628146112755780633a98ef3914611257578063429cead11461121a5780634ada218b146111f4578063576f35e31461113f5780635e42b455146110a757806363c98ffa14611089578063699abb3c1461102d5780636d1d59a814610fd357806370a0823114610f9a57806371201a0e14610f7c5780637136982b14610f5e5780637a16a49e14610e905780638a8c523c14610e085780638aee812714610d5f5780638da5cb5b14610d385780638ef8ed3214610d0d5780638f1b0efc14610cdc57806393a013e014610cb557806395d89b4114610bb057806399248ea714610b89578063997664d714610b6b5780639d0014b114610af05780639fde54f514610aa5578063a1b140b614610a68578063a9059cbb14610a36578063aada9c3814610a12578063ae7b6d16146109f4578063b70143c91461065f578063c07fbb8c14610627578063cbdd9b3014610604578063dd62ed3e146105b4578063de1c24d014610517578063e086e5ec1461044a578063e2d2e2191461042c578063f1320af2146103ef578063f2fde38b1461032a578063f4daaba11461030c578063f74fe6be146102e75763f9fc0d070361000f57346102e457806003193601126102e45780620493e05b801515806102d9575b806102cc575b156102b55761029b6102af916102955a61028e6001600160a01b03610281600d5461180b565b90549060031b1c16612394565b5a90611778565b90611778565b926102a7600d5461186f565b600d5561186f565b9161024c565b50600d54600e5411156102c55780f35b80600d5580f35b50600d54600e541161025b565b50600b548310610255565b80fd5b50346102e457806003193601126102e4576020610302611ae5565b6040519015158152f35b50346102e457806003193601126102e4576020600b54604051908152f35b50346102e45760203660031901126102e4576103446116e5565b600554906001600160a01b038083169161035f83331461179b565b169182156103ab578273ffffffffffffffffffffffffffffffffffffffff19927f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08680a3161760055580f35b606460405162461bcd60e51b815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b50346102e45760203660031901126102e45760ff60406020926001600160a01b036104186116e5565b168152601584522054166040519015158152f35b50346102e457806003193601126102e4576020601354604051908152f35b50346102e457806003193601126102e457808080806001600160a01b036005541661047681331461179b565b47905af13d15610512573d67ffffffffffffffff81116104fe57604051906104a8601f8201601f191660200183611740565b81528260203d92013e5b156104ba5780f35b606460405162461bcd60e51b815260206004820152601560248201527f455448207769746864726177616c206661696c656400000000000000000000006044820152fd5b602483634e487b7160e01b81526041600452fd5b6104b2565b50346102e45760203660031901126102e4576001600160a01b036105396116e5565b6105488260055416331461179b565b1680156105705773ffffffffffffffffffffffffffffffffffffffff19600454161760045580f35b606460405162461bcd60e51b815260206004820152601e60248201527f4c5020706169722063616e6e6f74206265207a65726f206164647265737300006044820152fd5b50346102e45760403660031901126102e4576001600160a01b0360406105d86116e5565b92826105e26116fb565b9416815260076020522091166000526020526020604060002054604051908152f35b50346102e457806003193601126102e457602061061f611abb565b604051908152f35b50346102e45760203660031901126102e45760406020916001600160a01b0361064e6116e5565b168152600f83522054604051908152f35b50346102e45760203660031901126102e45760043561068a6001600160a01b0360055416331461179b565b3082526006602052604082205480156109b057811515806109a6575b1561097c57505b600160ff19601654161760165560246040516106ca606082611740565b60028152602081016040368237306106e1836127b8565b526001600160a01b03600354166106f7836127c5565b526107028430611afa565b60206001600160a01b0360035416604051948580926370a0823160e01b82523060048301525afa92831561097157859361093d575b507395a7e403d7cf20f675ff9273d66e94d35ba49fa33b156109395790846040518093635c11d79560e01b825260a482019387600484015283602484015260a060448401525180945260c482019093835b818110610914575050819293503060648301524260848301520381837395a7e403d7cf20f675ff9273d66e94d35ba49fa35af180156108f4576108ff575b5060249060206001600160a01b0360035416604051938480926370a0823160e01b82523060048301525afa80156108f45784906108bb575b6108089250611778565b801515806108b0575b610830575b6040925060ff196016541660165582519182526020820152f35b61083c816012546117fe565b9283601255612710840293808504612710149015171561089c575061086660409360115490611a0b565b6013557f10da9408d1358808fea34ded33d675db0ba8e618a2fb814298059b2a6b0a473f838051848152836020820152a1610816565b80634e487b7160e01b602492526011600452fd5b506011541515610811565b506020823d6020116108ec575b816108d560209383611740565b810103126108e75761080891516107fe565b600080fd5b3d91506108c8565b6040513d86823e3d90fd5b9261090d8160249395611740565b92906107c6565b85516001600160a01b031683526020958601958a955087945090920191600101610788565b8480fd5b9092506020813d602011610969575b8161095960209383611740565b8101031261093957519138610737565b3d915061094c565b6040513d87823e3d90fd5b60095491508115158061099c575b1561099557506106ad565b90506106ad565b508181101561098a565b50808211156106a6565b606460405162461bcd60e51b815260206004820152601160248201527f4e6f20746f6b656e7320746f20737761700000000000000000000000000000006044820152fd5b50346102e457806003193601126102e4576020600854604051908152f35b50346102e45760203660031901126102e457602061061f610a316116e5565b611a66565b50346102e45760403660031901126102e457610a5d610a536116e5565b6024359033611c9f565b602060405160018152f35b50346102e457806003193601126102e457610aa1610a84611a2b565b604080519384526020840192909252908201529081906060820190565b0390f35b50346102e457610aed6001600160a01b03610abf36611711565b9190610ad08260055416331461179b565b1683526015602052604083209060ff801983541691151516179055565b80f35b50346102e45760203660031901126102e457600435610b1b6001600160a01b0360055416331461179b565b8015610b275760095580f35b606460405162461bcd60e51b815260206004820152602060248201527f5468726573686f6c64206d7573742062652067726561746572207468616e20306044820152fd5b50346102e457806003193601126102e4576020601254604051908152f35b50346102e457806003193601126102e45760206001600160a01b0360035416604051908152f35b50346102e457806003193601126102e4576040519080600154908160011c91600181168015610cab575b602084108114610c9757838652908115610c705750600114610c13575b610aa184610c0781860382611740565b6040519182918261169c565b600181527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b808210610c5657509091508101602001610c0782610bf7565b919260018160209254838588010152019101909291610c3d565b60ff191660208087019190915292151560051b85019092019250610c079150839050610bf7565b602483634e487b7160e01b81526022600452fd5b92607f1692610bda565b50346102e457806003193601126102e45760206001600160a01b0360045416604051908152f35b50346102e457806003193601126102e457602061061f306001600160a01b0316600052600660205260406000205490565b50346102e45760203660031901126102e4576040610d2c60043561187e565b82519182526020820152f35b50346102e457806003193601126102e45760206001600160a01b0360055416604051908152f35b50346102e45760203660031901126102e4576001600160a01b03610d816116e5565b610d908260055416331461179b565b168015610db85773ffffffffffffffffffffffffffffffffffffffff19600354161760035580f35b608460405162461bcd60e51b815260206004820152602360248201527f52657761726420746f6b656e2063616e6e6f74206265207a65726f206164647260448201526265737360e81b6064820152fd5b50346102e457806003193601126102e457610e2f6001600160a01b0360055416331461179b565b60165460ff8160081c16610e4c5761ff0019166101001760165580f35b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152fd5b50346102e45760203660031901126102e457600435610ebb6001600160a01b0360055416331461179b565b603c8110610ef5576020817fc6f44473d25b86976ee7357c1339328224e349abc5486edc3007ef658a57608a92600a55604051908152a180f35b608460405162461bcd60e51b8152602060048201526024808201527f496e74657276616c206d757374206265206174206c656173742036302073656360448201527f6f6e6473000000000000000000000000000000000000000000000000000000006064820152fd5b50346102e457806003193601126102e4576020600e54604051908152f35b50346102e457806003193601126102e4576020600a54604051908152f35b50346102e45760203660031901126102e457602061061f610fb96116e5565b6001600160a01b0316600052600660205260406000205490565b50346102e45760203660031901126102e4576040906001600160a01b03610ff86116e5565b1681526010602052208054610aa160026001840154930154604051938493846040919493926060820195825260208201520152565b50346102e45760203660031901126102e4577f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c91602060043561107b6001600160a01b0360055416331461179b565b80600855604051908152a180f35b50346102e457806003193601126102e4576020600c54604051908152f35b50346102e457806003193601126102e457602460206001600160a01b0360035416604051928380926370a0823160e01b82523060048301525afa9081156111345782916110fa575b602082604051908152f35b90506020813d60201161112c575b8161111560209383611740565b81010312611128576020915051386110ef565b5080fd5b3d9150611108565b6040513d84823e3d90fd5b50346102e45760203660031901126102e45760043561116a6001600160a01b0360055416331461179b565b6005811015806111e9575b1561118057600b5580f35b608460405162461bcd60e51b8152602060048201526024808201527f42617463682073697a65206d757374206265206265747765656e203520616e6460448201527f20313030000000000000000000000000000000000000000000000000000000006064820152fd5b506064811115611175565b50346102e457806003193601126102e457602060ff60165460081c166040519015158152f35b50346102e45760203660031901126102e45760ff60406020926001600160a01b036112436116e5565b168152601484522054166040519015158152f35b50346102e457806003193601126102e4576020601154604051908152f35b50346102e45760403660031901126102e45761128f6116e5565b6001600160a01b0360055416906112a782331461179b565b6001600160a01b038060035416911690811461132b5760405163a9059cbb60e01b81526001600160a01b0392909216600483015260248035908301526020908290604490829086905af18015611134576112ff575080f35b6113209060203d602011611324575b6113188183611740565b8101906117e6565b5080f35b503d61130e565b606460405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f7420726573637565206469766964656e6420746f6b656e000000006044820152fd5b50346102e457806003193601126102e457602060405160128152f35b50346102e45760207ff3a7c8242f0708821ed31a47f066fc7fa42f2ae65ed3e4d1d7cb5b3765d2939c6113bd36611711565b6113d66001600160a01b0360059593955416331461179b565b6001600160a01b038416938486526014835260ff60408720541691801515809315150361140a575b5050604051908152a280f35b8587526014845261142a81604089209060ff801983541691151516179055565b1561145857848652601083526040862054611449575b505b38806113fe565b6114529061220f565b38611440565b84865260068352604086205461146d916120fb565b611442565b50346102e457806003193601126102e4576020600d54604051908152f35b50346102e45760603660031901126102e4576114aa6116e5565b906114b36116fb565b6040604435926001600160a01b038516815260076020528181206001600160a01b033316825260205220549260001984036114f3575b610a5d9350611c9f565b8284106115165761151161150a84610a5d96611778565b3383611bce565b6114e9565b608460405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152fd5b50346102e457806003193601126102e4576020600254604051908152f35b50346102e45760403660031901126102e457610a5d6115bb6116e5565b6024359033611bce565b50346102e457806003193601126102e45760405190808054908160011c91600181168015611676575b602084108114610c9757838652908115610c70575060011461161a57610aa184610c0781860382611740565b8080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061165c57509091508101602001610c0782610bf7565b919260018160209254838588010152019101909291611643565b92607f16926115ee565b9050346111285781600319360112611128576020906009548152f35b91909160208152825180602083015260005b8181106116cf575060409293506000838284010152601f8019910116010190565b80602080928701015160408286010152016116ae565b600435906001600160a01b03821682036108e757565b602435906001600160a01b03821682036108e757565b60409060031901126108e7576004356001600160a01b03811681036108e7579060243580151581036108e75790565b90601f8019910116810190811067ffffffffffffffff82111761176257604052565b634e487b7160e01b600052604160045260246000fd5b9190820391821161178557565b634e487b7160e01b600052601160045260246000fd5b156117a257565b606460405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b908160209103126108e7575180151581036108e75790565b9190820180921161178557565b600e5481101561182657600e60005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b600e541561182657600e60009081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd91565b60001981146117855760010190565b6001600160a01b0360055416330361198e57801561198457905b600d546118a583826117fe565b600e54809111611971575b5050811561196257600d549160005b8181106119235750506118d5600d549283611778565b91600e54809110156118e9575b50600d5490565b60207fcbb46d9b69e77a6b5011c11cd2bf9be0461c9a1920e9f42678661cec154cd2a8916000600d5542600c55604051908152a1386118e2565b600190600d54600e54811061193a575b50016118bf565b6001600160a01b0361028161194e9261180b565b611959600d5461186f565b600d5538611933565b90506000600d55600090600090565b61197c929350611778565b9038806118b0565b50600b5490611898565b608460405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e20646973747269627574652072657761726460448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b8181029291811591840414171561178557565b8115611a15570490565b634e487b7160e01b600052601260045260246000fd5b600e548015611a5a57600d549160648302838104606414841517156117855782611a5491611a0b565b91929190565b50600090600090606490565b6001600160a01b0381169081600052601060205260406000205415611ab457611a8e906124e7565b90600052601060205260026040600020015480821115611ab457611ab191611778565b90565b5050600090565b611ac3611ae5565b611ae057611ab1611ad9600c54600a54906117fe565b4290611778565b600090565b611af4600c54600a54906117fe565b42101590565b6001600160a01b03168015611b65577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560207395a7e403d7cf20f675ff9273d66e94d35ba49fa3938360005260078252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b0316908115611b65576001600160a01b0316918215611c355760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260078252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b038116908115612091576001600160a01b038316938415612041578015611fd75782859160165460ff8160081c161580611faf575b611f37575b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91602091306000526006835260406000205490600954809210159081611f2b575b5080611f16575b80611f01575b80611eec575b611eca575b50836000526015825260ff604060002054161580611eb2575b600090611e3b575b5083600052600682526040600020611d74828254611778565b905584600052600682526040600020611d8e8282546117fe565b9055604051908152a381600052601460205260ff604060002054161580611e26575b611e07575b505081600052601460205260ff604060002054161580611df2575b611dd8575050565b611df0916000526006602052604060002054906120fb565b565b506001600160a01b0360045416821415611dd0565b611e1f916000526006602052604060002054906120fb565b3880611db5565b506001600160a01b0360045416821415611db0565b6001600160a01b0360045416808614908115611ea8575b50611e93575b8015611d5b57611e8d9130600052600684526040600020611e7a8382546117fe565b90556040518281528686863093a3611778565b38611d5b565b506064611ea2600854836119f8565b04611e58565b9050861438611e52565b50846000526015825260ff6040600020541615611d53565b80821115611ee257611edb90612521565b5038611d3a565b50611edb81612521565b506001600160a01b0360055416861415611d35565b506001600160a01b0360055416851415611d2f565b506001600160a01b0360045416851415611d29565b60ff9150161538611d22565b915091506001600160a01b0360055416808514908115611fa5575b5015611f615785918491611ce0565b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152fd5b9050861438611f52565b506001600160a01b0360045416808414908115611fcd575b50611cdb565b9050841438611fc7565b608460405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152fd5b608460405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b670de0b6b3a764000082106121d7576001600160a01b038116918260005260106020526040600020541515600014612191578061213d5750611df0915061220f565b908161216661217d9361216160115487600052601060205260406000205490611778565b6117fe565b6011558360005260106020526040600020556124e7565b906000526010602052600160406000200155565b90916121b8836121a36121d2956127d5565b826000526010602052836040600020556124e7565b9060005260106020526001604060002001556011546117fe565b601155565b9015806121ef575b6121e65750565b611df09061220f565b506001600160a01b038116600052601060205260406000205415156121df565b600e548015801561234a575b8015612329575b612325576000198101908111611785576001600160a01b03612244819261180b565b90549060031b1c1691169081600052600f6020526040600020549061228b8161226c8461180b565b9091906001600160a01b038084549260031b9316831b921b1916179055565b600052600f602052604060002055600e54801561230f57600019016122af8161180b565b6001600160a01b0382549160031b1b19169055600e5580600052600f602052600060408120558060005260106020526122ef604060002054601154611778565b601155600052601060205260006002604082208281558260018201550155565b634e487b7160e01b600052603160045260246000fd5b5050565b506001600160a01b038216600052600f602052806040600020541015612222565b506001600160a01b03821680600052600f602052604060002054159081612372575b5061221b565b90506001600160a01b0361238461183c565b90549060031b1c1614153861236c565b6001600160a01b03811680600052601060205260406000205415612325576123bb82611a66565b806123c557505050565b602460206001600160a01b0360035416604051928380926370a0823160e01b82523060048301525afa9081156124a9576000916124b5575b5081111561240a57505050565b8260209261241a61247d956124e7565b816000526010855260026040600020015560005260108352600060016040822001556001600160a01b036003541690600060405180968195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af180156124a95761248e5750565b6124a69060203d602011611324576113188183611740565b50565b6040513d6000823e3d90fd5b90506020813d6020116124df575b816124d060209383611740565b810103126108e75751386123fd565b3d91506124c3565b6011541561251b57612517612710916001600160a01b0360135491166000526010602052604060002054906119f8565b0490565b50600090565b600090600160ff1960165416176016556024604051612541606082611740565b6002815260208101604036823730612558836127b8565b526001600160a01b036003541661256e836127c5565b526125798430611afa565b60206001600160a01b0360035416604051948580926370a0823160e01b82523060048301525afa928315610971578593612784575b507395a7e403d7cf20f675ff9273d66e94d35ba49fa33b156109395790846040518093635c11d79560e01b825260a482019387600484015283602484015260a060448401525180945260c482019093835b81811061275f575050819293503060648301524260848301520381837395a7e403d7cf20f675ff9273d66e94d35ba49fa35af180156108f45761274a575b5060249060206001600160a01b0360035416604051938480926370a0823160e01b82523060048301525afa80156108f4578490612716575b61267f9250611778565b918215158061270b575b61269d575b50509060ff1960165416601655565b6126a9836012546117fe565b9081601255612710820291808304612710149015171561089c57507f10da9408d1358808fea34ded33d675db0ba8e618a2fb814298059b2a6b0a473f916126f560409260115490611a0b565b6013558151908152836020820152a1388061268e565b506011541515612689565b506020823d602011612742575b8161273060209383611740565b810103126108e75761267f9151612675565b3d9150612723565b926127588160249395611740565b929061263d565b85516001600160a01b031683526020958601958a9550879450909201916001016125ff565b9092506020813d6020116127b0575b816127a060209383611740565b81010312610939575191386125ae565b3d9150612793565b8051156118265760200190565b8051600110156118265760400190565b6001600160a01b0381169081600052600f60205260406000205415801590612844575b61232557600e5490680100000000000000008210156117625761226c8260016128249401600e5561180b565b600e5460001981019190821161178557600052600f602052604060002055565b50600e54151580156127f85750816001600160a01b0361286261183c565b90549060031b1c16146127f856fea26469706673582212208e0859b6aacffce17364e01c3e9bcf0e9bf3e730acee42ec97c87431d5d452ba64736f6c634300081c0033bb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd

Deployed Bytecode

0x608080604052600436101561001d575b50361561001b57600080fd5b005b600090813560e01c9081630445b667146116805750806306fdde03146115c5578063095ea7b31461159e57806318160ddd1461158057806323b872dd1461149057806326987b60146114725780632836be241461138b578063313ce5671461136f57806333f3d628146112755780633a98ef3914611257578063429cead11461121a5780634ada218b146111f4578063576f35e31461113f5780635e42b455146110a757806363c98ffa14611089578063699abb3c1461102d5780636d1d59a814610fd357806370a0823114610f9a57806371201a0e14610f7c5780637136982b14610f5e5780637a16a49e14610e905780638a8c523c14610e085780638aee812714610d5f5780638da5cb5b14610d385780638ef8ed3214610d0d5780638f1b0efc14610cdc57806393a013e014610cb557806395d89b4114610bb057806399248ea714610b89578063997664d714610b6b5780639d0014b114610af05780639fde54f514610aa5578063a1b140b614610a68578063a9059cbb14610a36578063aada9c3814610a12578063ae7b6d16146109f4578063b70143c91461065f578063c07fbb8c14610627578063cbdd9b3014610604578063dd62ed3e146105b4578063de1c24d014610517578063e086e5ec1461044a578063e2d2e2191461042c578063f1320af2146103ef578063f2fde38b1461032a578063f4daaba11461030c578063f74fe6be146102e75763f9fc0d070361000f57346102e457806003193601126102e45780620493e05b801515806102d9575b806102cc575b156102b55761029b6102af916102955a61028e6001600160a01b03610281600d5461180b565b90549060031b1c16612394565b5a90611778565b90611778565b926102a7600d5461186f565b600d5561186f565b9161024c565b50600d54600e5411156102c55780f35b80600d5580f35b50600d54600e541161025b565b50600b548310610255565b80fd5b50346102e457806003193601126102e4576020610302611ae5565b6040519015158152f35b50346102e457806003193601126102e4576020600b54604051908152f35b50346102e45760203660031901126102e4576103446116e5565b600554906001600160a01b038083169161035f83331461179b565b169182156103ab578273ffffffffffffffffffffffffffffffffffffffff19927f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08680a3161760055580f35b606460405162461bcd60e51b815260206004820152602060248201527f4e6577206f776e65722063616e6e6f74206265207a65726f20616464726573736044820152fd5b50346102e45760203660031901126102e45760ff60406020926001600160a01b036104186116e5565b168152601584522054166040519015158152f35b50346102e457806003193601126102e4576020601354604051908152f35b50346102e457806003193601126102e457808080806001600160a01b036005541661047681331461179b565b47905af13d15610512573d67ffffffffffffffff81116104fe57604051906104a8601f8201601f191660200183611740565b81528260203d92013e5b156104ba5780f35b606460405162461bcd60e51b815260206004820152601560248201527f455448207769746864726177616c206661696c656400000000000000000000006044820152fd5b602483634e487b7160e01b81526041600452fd5b6104b2565b50346102e45760203660031901126102e4576001600160a01b036105396116e5565b6105488260055416331461179b565b1680156105705773ffffffffffffffffffffffffffffffffffffffff19600454161760045580f35b606460405162461bcd60e51b815260206004820152601e60248201527f4c5020706169722063616e6e6f74206265207a65726f206164647265737300006044820152fd5b50346102e45760403660031901126102e4576001600160a01b0360406105d86116e5565b92826105e26116fb565b9416815260076020522091166000526020526020604060002054604051908152f35b50346102e457806003193601126102e457602061061f611abb565b604051908152f35b50346102e45760203660031901126102e45760406020916001600160a01b0361064e6116e5565b168152600f83522054604051908152f35b50346102e45760203660031901126102e45760043561068a6001600160a01b0360055416331461179b565b3082526006602052604082205480156109b057811515806109a6575b1561097c57505b600160ff19601654161760165560246040516106ca606082611740565b60028152602081016040368237306106e1836127b8565b526001600160a01b03600354166106f7836127c5565b526107028430611afa565b60206001600160a01b0360035416604051948580926370a0823160e01b82523060048301525afa92831561097157859361093d575b507395a7e403d7cf20f675ff9273d66e94d35ba49fa33b156109395790846040518093635c11d79560e01b825260a482019387600484015283602484015260a060448401525180945260c482019093835b818110610914575050819293503060648301524260848301520381837395a7e403d7cf20f675ff9273d66e94d35ba49fa35af180156108f4576108ff575b5060249060206001600160a01b0360035416604051938480926370a0823160e01b82523060048301525afa80156108f45784906108bb575b6108089250611778565b801515806108b0575b610830575b6040925060ff196016541660165582519182526020820152f35b61083c816012546117fe565b9283601255612710840293808504612710149015171561089c575061086660409360115490611a0b565b6013557f10da9408d1358808fea34ded33d675db0ba8e618a2fb814298059b2a6b0a473f838051848152836020820152a1610816565b80634e487b7160e01b602492526011600452fd5b506011541515610811565b506020823d6020116108ec575b816108d560209383611740565b810103126108e75761080891516107fe565b600080fd5b3d91506108c8565b6040513d86823e3d90fd5b9261090d8160249395611740565b92906107c6565b85516001600160a01b031683526020958601958a955087945090920191600101610788565b8480fd5b9092506020813d602011610969575b8161095960209383611740565b8101031261093957519138610737565b3d915061094c565b6040513d87823e3d90fd5b60095491508115158061099c575b1561099557506106ad565b90506106ad565b508181101561098a565b50808211156106a6565b606460405162461bcd60e51b815260206004820152601160248201527f4e6f20746f6b656e7320746f20737761700000000000000000000000000000006044820152fd5b50346102e457806003193601126102e4576020600854604051908152f35b50346102e45760203660031901126102e457602061061f610a316116e5565b611a66565b50346102e45760403660031901126102e457610a5d610a536116e5565b6024359033611c9f565b602060405160018152f35b50346102e457806003193601126102e457610aa1610a84611a2b565b604080519384526020840192909252908201529081906060820190565b0390f35b50346102e457610aed6001600160a01b03610abf36611711565b9190610ad08260055416331461179b565b1683526015602052604083209060ff801983541691151516179055565b80f35b50346102e45760203660031901126102e457600435610b1b6001600160a01b0360055416331461179b565b8015610b275760095580f35b606460405162461bcd60e51b815260206004820152602060248201527f5468726573686f6c64206d7573742062652067726561746572207468616e20306044820152fd5b50346102e457806003193601126102e4576020601254604051908152f35b50346102e457806003193601126102e45760206001600160a01b0360035416604051908152f35b50346102e457806003193601126102e4576040519080600154908160011c91600181168015610cab575b602084108114610c9757838652908115610c705750600114610c13575b610aa184610c0781860382611740565b6040519182918261169c565b600181527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6939250905b808210610c5657509091508101602001610c0782610bf7565b919260018160209254838588010152019101909291610c3d565b60ff191660208087019190915292151560051b85019092019250610c079150839050610bf7565b602483634e487b7160e01b81526022600452fd5b92607f1692610bda565b50346102e457806003193601126102e45760206001600160a01b0360045416604051908152f35b50346102e457806003193601126102e457602061061f306001600160a01b0316600052600660205260406000205490565b50346102e45760203660031901126102e4576040610d2c60043561187e565b82519182526020820152f35b50346102e457806003193601126102e45760206001600160a01b0360055416604051908152f35b50346102e45760203660031901126102e4576001600160a01b03610d816116e5565b610d908260055416331461179b565b168015610db85773ffffffffffffffffffffffffffffffffffffffff19600354161760035580f35b608460405162461bcd60e51b815260206004820152602360248201527f52657761726420746f6b656e2063616e6e6f74206265207a65726f206164647260448201526265737360e81b6064820152fd5b50346102e457806003193601126102e457610e2f6001600160a01b0360055416331461179b565b60165460ff8160081c16610e4c5761ff0019166101001760165580f35b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e6720616c726561647920656e61626c65640000000000000000006044820152fd5b50346102e45760203660031901126102e457600435610ebb6001600160a01b0360055416331461179b565b603c8110610ef5576020817fc6f44473d25b86976ee7357c1339328224e349abc5486edc3007ef658a57608a92600a55604051908152a180f35b608460405162461bcd60e51b8152602060048201526024808201527f496e74657276616c206d757374206265206174206c656173742036302073656360448201527f6f6e6473000000000000000000000000000000000000000000000000000000006064820152fd5b50346102e457806003193601126102e4576020600e54604051908152f35b50346102e457806003193601126102e4576020600a54604051908152f35b50346102e45760203660031901126102e457602061061f610fb96116e5565b6001600160a01b0316600052600660205260406000205490565b50346102e45760203660031901126102e4576040906001600160a01b03610ff86116e5565b1681526010602052208054610aa160026001840154930154604051938493846040919493926060820195825260208201520152565b50346102e45760203660031901126102e4577f35ad15e7f5e4a16b548e8916bd02c51847dde8d106f334b4edaaacf140e43c91602060043561107b6001600160a01b0360055416331461179b565b80600855604051908152a180f35b50346102e457806003193601126102e4576020600c54604051908152f35b50346102e457806003193601126102e457602460206001600160a01b0360035416604051928380926370a0823160e01b82523060048301525afa9081156111345782916110fa575b602082604051908152f35b90506020813d60201161112c575b8161111560209383611740565b81010312611128576020915051386110ef565b5080fd5b3d9150611108565b6040513d84823e3d90fd5b50346102e45760203660031901126102e45760043561116a6001600160a01b0360055416331461179b565b6005811015806111e9575b1561118057600b5580f35b608460405162461bcd60e51b8152602060048201526024808201527f42617463682073697a65206d757374206265206265747765656e203520616e6460448201527f20313030000000000000000000000000000000000000000000000000000000006064820152fd5b506064811115611175565b50346102e457806003193601126102e457602060ff60165460081c166040519015158152f35b50346102e45760203660031901126102e45760ff60406020926001600160a01b036112436116e5565b168152601484522054166040519015158152f35b50346102e457806003193601126102e4576020601154604051908152f35b50346102e45760403660031901126102e45761128f6116e5565b6001600160a01b0360055416906112a782331461179b565b6001600160a01b038060035416911690811461132b5760405163a9059cbb60e01b81526001600160a01b0392909216600483015260248035908301526020908290604490829086905af18015611134576112ff575080f35b6113209060203d602011611324575b6113188183611740565b8101906117e6565b5080f35b503d61130e565b606460405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f7420726573637565206469766964656e6420746f6b656e000000006044820152fd5b50346102e457806003193601126102e457602060405160128152f35b50346102e45760207ff3a7c8242f0708821ed31a47f066fc7fa42f2ae65ed3e4d1d7cb5b3765d2939c6113bd36611711565b6113d66001600160a01b0360059593955416331461179b565b6001600160a01b038416938486526014835260ff60408720541691801515809315150361140a575b5050604051908152a280f35b8587526014845261142a81604089209060ff801983541691151516179055565b1561145857848652601083526040862054611449575b505b38806113fe565b6114529061220f565b38611440565b84865260068352604086205461146d916120fb565b611442565b50346102e457806003193601126102e4576020600d54604051908152f35b50346102e45760603660031901126102e4576114aa6116e5565b906114b36116fb565b6040604435926001600160a01b038516815260076020528181206001600160a01b033316825260205220549260001984036114f3575b610a5d9350611c9f565b8284106115165761151161150a84610a5d96611778565b3383611bce565b6114e9565b608460405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e63650000000000000000000000000000000000000000000000006064820152fd5b50346102e457806003193601126102e4576020600254604051908152f35b50346102e45760403660031901126102e457610a5d6115bb6116e5565b6024359033611bce565b50346102e457806003193601126102e45760405190808054908160011c91600181168015611676575b602084108114610c9757838652908115610c70575060011461161a57610aa184610c0781860382611740565b8080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061165c57509091508101602001610c0782610bf7565b919260018160209254838588010152019101909291611643565b92607f16926115ee565b9050346111285781600319360112611128576020906009548152f35b91909160208152825180602083015260005b8181106116cf575060409293506000838284010152601f8019910116010190565b80602080928701015160408286010152016116ae565b600435906001600160a01b03821682036108e757565b602435906001600160a01b03821682036108e757565b60409060031901126108e7576004356001600160a01b03811681036108e7579060243580151581036108e75790565b90601f8019910116810190811067ffffffffffffffff82111761176257604052565b634e487b7160e01b600052604160045260246000fd5b9190820391821161178557565b634e487b7160e01b600052601160045260246000fd5b156117a257565b606460405162461bcd60e51b815260206004820152601760248201527f43616c6c6572206973206e6f7420746865206f776e65720000000000000000006044820152fd5b908160209103126108e7575180151581036108e75790565b9190820180921161178557565b600e5481101561182657600e60005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b600e541561182657600e60009081527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd91565b60001981146117855760010190565b6001600160a01b0360055416330361198e57801561198457905b600d546118a583826117fe565b600e54809111611971575b5050811561196257600d549160005b8181106119235750506118d5600d549283611778565b91600e54809110156118e9575b50600d5490565b60207fcbb46d9b69e77a6b5011c11cd2bf9be0461c9a1920e9f42678661cec154cd2a8916000600d5542600c55604051908152a1386118e2565b600190600d54600e54811061193a575b50016118bf565b6001600160a01b0361028161194e9261180b565b611959600d5461186f565b600d5538611933565b90506000600d55600090600090565b61197c929350611778565b9038806118b0565b50600b5490611898565b608460405162461bcd60e51b815260206004820152602160248201527f4f6e6c79206f776e65722063616e20646973747269627574652072657761726460448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b8181029291811591840414171561178557565b8115611a15570490565b634e487b7160e01b600052601260045260246000fd5b600e548015611a5a57600d549160648302838104606414841517156117855782611a5491611a0b565b91929190565b50600090600090606490565b6001600160a01b0381169081600052601060205260406000205415611ab457611a8e906124e7565b90600052601060205260026040600020015480821115611ab457611ab191611778565b90565b5050600090565b611ac3611ae5565b611ae057611ab1611ad9600c54600a54906117fe565b4290611778565b600090565b611af4600c54600a54906117fe565b42101590565b6001600160a01b03168015611b65577f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560207395a7e403d7cf20f675ff9273d66e94d35ba49fa3938360005260078252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b0316908115611b65576001600160a01b0316918215611c355760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925918360005260078252604060002085600052825280604060002055604051908152a3565b608460405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b6001600160a01b038116908115612091576001600160a01b038316938415612041578015611fd75782859160165460ff8160081c161580611faf575b611f37575b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91602091306000526006835260406000205490600954809210159081611f2b575b5080611f16575b80611f01575b80611eec575b611eca575b50836000526015825260ff604060002054161580611eb2575b600090611e3b575b5083600052600682526040600020611d74828254611778565b905584600052600682526040600020611d8e8282546117fe565b9055604051908152a381600052601460205260ff604060002054161580611e26575b611e07575b505081600052601460205260ff604060002054161580611df2575b611dd8575050565b611df0916000526006602052604060002054906120fb565b565b506001600160a01b0360045416821415611dd0565b611e1f916000526006602052604060002054906120fb565b3880611db5565b506001600160a01b0360045416821415611db0565b6001600160a01b0360045416808614908115611ea8575b50611e93575b8015611d5b57611e8d9130600052600684526040600020611e7a8382546117fe565b90556040518281528686863093a3611778565b38611d5b565b506064611ea2600854836119f8565b04611e58565b9050861438611e52565b50846000526015825260ff6040600020541615611d53565b80821115611ee257611edb90612521565b5038611d3a565b50611edb81612521565b506001600160a01b0360055416861415611d35565b506001600160a01b0360055416851415611d2f565b506001600160a01b0360045416851415611d29565b60ff9150161538611d22565b915091506001600160a01b0360055416808514908115611fa5575b5015611f615785918491611ce0565b606460405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152fd5b9050861438611f52565b506001600160a01b0360045416808414908115611fcd575b50611cdb565b9050841438611fc7565b608460405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152fd5b608460405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152fd5b608460405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b670de0b6b3a764000082106121d7576001600160a01b038116918260005260106020526040600020541515600014612191578061213d5750611df0915061220f565b908161216661217d9361216160115487600052601060205260406000205490611778565b6117fe565b6011558360005260106020526040600020556124e7565b906000526010602052600160406000200155565b90916121b8836121a36121d2956127d5565b826000526010602052836040600020556124e7565b9060005260106020526001604060002001556011546117fe565b601155565b9015806121ef575b6121e65750565b611df09061220f565b506001600160a01b038116600052601060205260406000205415156121df565b600e548015801561234a575b8015612329575b612325576000198101908111611785576001600160a01b03612244819261180b565b90549060031b1c1691169081600052600f6020526040600020549061228b8161226c8461180b565b9091906001600160a01b038084549260031b9316831b921b1916179055565b600052600f602052604060002055600e54801561230f57600019016122af8161180b565b6001600160a01b0382549160031b1b19169055600e5580600052600f602052600060408120558060005260106020526122ef604060002054601154611778565b601155600052601060205260006002604082208281558260018201550155565b634e487b7160e01b600052603160045260246000fd5b5050565b506001600160a01b038216600052600f602052806040600020541015612222565b506001600160a01b03821680600052600f602052604060002054159081612372575b5061221b565b90506001600160a01b0361238461183c565b90549060031b1c1614153861236c565b6001600160a01b03811680600052601060205260406000205415612325576123bb82611a66565b806123c557505050565b602460206001600160a01b0360035416604051928380926370a0823160e01b82523060048301525afa9081156124a9576000916124b5575b5081111561240a57505050565b8260209261241a61247d956124e7565b816000526010855260026040600020015560005260108352600060016040822001556001600160a01b036003541690600060405180968195829463a9059cbb60e01b845260048401602090939291936001600160a01b0360408201951681520152565b03925af180156124a95761248e5750565b6124a69060203d602011611324576113188183611740565b50565b6040513d6000823e3d90fd5b90506020813d6020116124df575b816124d060209383611740565b810103126108e75751386123fd565b3d91506124c3565b6011541561251b57612517612710916001600160a01b0360135491166000526010602052604060002054906119f8565b0490565b50600090565b600090600160ff1960165416176016556024604051612541606082611740565b6002815260208101604036823730612558836127b8565b526001600160a01b036003541661256e836127c5565b526125798430611afa565b60206001600160a01b0360035416604051948580926370a0823160e01b82523060048301525afa928315610971578593612784575b507395a7e403d7cf20f675ff9273d66e94d35ba49fa33b156109395790846040518093635c11d79560e01b825260a482019387600484015283602484015260a060448401525180945260c482019093835b81811061275f575050819293503060648301524260848301520381837395a7e403d7cf20f675ff9273d66e94d35ba49fa35af180156108f45761274a575b5060249060206001600160a01b0360035416604051938480926370a0823160e01b82523060048301525afa80156108f4578490612716575b61267f9250611778565b918215158061270b575b61269d575b50509060ff1960165416601655565b6126a9836012546117fe565b9081601255612710820291808304612710149015171561089c57507f10da9408d1358808fea34ded33d675db0ba8e618a2fb814298059b2a6b0a473f916126f560409260115490611a0b565b6013558151908152836020820152a1388061268e565b506011541515612689565b506020823d602011612742575b8161273060209383611740565b810103126108e75761267f9151612675565b3d9150612723565b926127588160249395611740565b929061263d565b85516001600160a01b031683526020958601958a9550879450909201916001016125ff565b9092506020813d6020116127b0575b816127a060209383611740565b81010312610939575191386125ae565b3d9150612793565b8051156118265760200190565b8051600110156118265760400190565b6001600160a01b0381169081600052600f60205260406000205415801590612844575b61232557600e5490680100000000000000008210156117625761226c8260016128249401600e5561180b565b600e5460001981019190821161178557600052600f602052604060002055565b50600e54151580156127f85750816001600160a01b0361286261183c565b90549060031b1c16146127f856fea26469706673582212208e0859b6aacffce17364e01c3e9bcf0e9bf3e730acee42ec97c87431d5d452ba64736f6c634300081c0033

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.