FRAX Price: $0.85 (-16.48%)

Contract

0x0F08e02b36E0546A6a440f3205f6ADc2AED21c03

Overview

FRAX Balance | FXTL Balance

0 FRAX | 0 FXTL

FRAX Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Set Contract Nam...11610252024-02-28 15:06:01697 days ago1709132761IN
0x0F08e02b...2AED21c03
0 FRAX0.000277871.50000025
Setup11610172024-02-28 15:05:45697 days ago1709132745IN
0x0F08e02b...2AED21c03
0 FRAX0.000225151.50000025

Advanced mode:
Parent Transaction Hash Block From To
View All Internal Transactions

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TimeBasedStaking

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at fraxscan.com on 2024-02-28
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

interface IERC20 {
    /**
     * @dev Allows for the transfer of a specified amount of tokens from a sender to a recipient.
     * @param sender The address sending the tokens.
     * @param recipient The address receiving the tokens.
     * @param amount The amount of tokens to be transferred.
     * @return Returns true if the transfer was successful.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    /**
     * @dev Returns the balance of the specified account.
     * @param account The address to check the balance of.
     * @return The balance of the specified account.
     */
    function balanceOf(address account) external view returns (uint256);
}

library Strings {
    /**
     * @dev Converts a uint256 value to its string representation.
     * @param value The uint256 value to convert.
     * @return The string representation of the uint256 value.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Edge case when the value is 0
        if (value == 0) {
            return "0";
        }

        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }

        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }

        return string(buffer);
    }

    /**
     * @dev Converts an address to its hexadecimal string representation.
     * @param addr The address to convert.
     * @return The hexadecimal string representation of the address.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), 20);
    }

    /**
     * @dev Converts a uint256 value to its hexadecimal string representation with a specified length.
     * @param value The uint256 value to convert.
     * @param length The desired length of the hexadecimal string.
     * @return The hexadecimal string representation of the uint256 value.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = bytes1(uint8(48 + value % 16 + (value % 16 > 9 ? 7 : 0)));
            value /= 16;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

contract TimeBasedStaking {
    // Importing the Strings library to enable string manipulation for uint256 and address types.
    using Strings for uint256;
    using Strings for address;

    // Event emitted when the setup is completed.
    event SetupCompleted(address indexed owner, uint setupBlock);

    // Event emitted when a token is approved for staking.
    event TokenApprovedForStaking(address indexed tokenAddress);

    // Event emitted when a token is disapproved for staking.
    event TokenDisapprovedForStaking(address indexed tokenAddress);

    // Event emitted when the minimum staking time is set for a token.
    event MinimumStakingTimeSet(address indexed tokenAddress, uint256 time);

    // Event emitted when tokens are staked.
    event TokensStaked(address indexed tokenAddress, address staker, uint256 stakeID, uint256 amount);

    // Event emitted when staked tokens are transferred between addresses.
    event StakedTokensTransferred(address indexed tokenAddress, uint256 stakeID, address from, address to, uint256 amount);

    // Event emitted when tokens are unstaked.
    event TokensUnstaked(address indexed tokenAddress, uint256 stakeID, address staker, uint256 amount);

    // Event emitted when the ownership of the contract is transferred
    event OwnershipTransferred(address newOwner);

    // The address of the owner.
    address private owner;

    // Stores the block number at which the contract was setup.
    uint private setupBlock;

    // Flag indicating if the contract setup is completed.
    bool private isSetup;

    // Variable representing the contract's paused state
    bool private _paused;

    // Flag to prevent reentrant calls.
    bool private locked;

    // The name of the contract
    string private contractName;

    // Mapping to track approved tokens for staking.
    mapping(address => bool) private approvedTokenStaking;

    // Mapping to store the next available stake ID for each user.
    mapping(address => uint256) private nextStakeID;

    // Mapping to specify the minimum staking time required for each user.
    mapping(address => uint256) private minimumStakingTime;

    // Mapping to store stake information for each user.
    mapping(address => mapping(uint256 => StakeInfo)) private stakes;

    // Mapping to track the staking amount for each user and token.
    mapping(address => mapping(address => uint256)) private stakingAmount;

    // Mapping to track staking points for each user and token.
    mapping(address => mapping(address => uint256)) private stakingPoints;

    // Modifier that allows function execution only when the contract is not paused
    modifier whenNotPaused() {
        require(!_paused, "Contract is paused"); // Checks if the contract is not paused
        _; // Continues execution of the modified function
    }

    // Modifier that allows function execution only when the contract is paused
    modifier whenPaused() {
        require(_paused, "Contract is not paused"); // Checks if the contract is paused
        _; // Continues execution of the modified function
    }

    /**
     * @dev Modifier to prevent a contract from calling itself, directly or indirectly.
     */
    modifier nonReentrant() {
        require(!locked, "Reentrant call detected");
        locked = true;
        _;
        locked = false;
    }

    /**
     * @dev Modifier to restrict function access to only the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "Msg.sender is not the owner!");
        _;
    }

    /**
     * @dev Modifier to ensure a function is called only once during the contract's lifetime.
     */
    modifier setupOnce() {
        require(!isSetup, "Setup already called!");
        _;
        isSetup = true;
    }

    // Function to pause the contract
    function pause() public onlyOwner whenNotPaused {
        _paused = true; // Sets the contract state to paused
    }

    // Function to resume the contract's operations
    function unpause() public onlyOwner whenPaused {
        _paused = false; // Sets the contract state to not paused
    }

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

    /**
     * @dev Returns the boolean status indicating if the contract setup is completed.
     * @return True if setup is completed, false otherwise.
     */
    function getSetupBlock() public view returns (uint) {
        return setupBlock;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function isPaused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Retrieves the name of this contract.
     * @return The name of the contract as a string.
     */
    function getContractName() public view returns (string memory) {
        return contractName;
    }

    /**
     * @dev Returns the boolean status indicating if the contract setup is completed.
     * @return True if setup is completed, false otherwise.
     */
    function getIsSetup() public view returns (bool) {
        return isSetup;
    }

    /**
     * @dev Retrieves the stake IDs of a specific user for a given token.
     * @param tokenAddress The address of the token.
     * @param staker The address of the staker.
     * @return A string containing the stake IDs and associated token addresses.
     */
    function getStakerStakeIDs(address tokenAddress, address staker) external view returns (string memory) {
        string memory result = "";

        for (uint256 i = 0; i < nextStakeID[tokenAddress]; i++) {
            StakeInfo memory stakeInfo = stakes[tokenAddress][i];
            if (stakeInfo.owner == staker && stakeInfo.isActive) {
                result = string(abi.encodePacked(result, "ID: ", Strings.toString(i), " | Token: ", Strings.toHexString(uint160(tokenAddress), 20), "\n"));
            }
        }

        return result;
    }

    /**
     * @dev Retrieves the details of a specific stake in a string format.
     * @param tokenAddress The address of the token.
     * @param stakeID The ID of the stake.
     * @return A string containing the detailed information of the stake.
     */
    function getStakeDetailsAsString(address tokenAddress, uint256 stakeID) public view returns (string memory) {
        require(stakeID < nextStakeID[tokenAddress], "Invalid stake ID");
        StakeInfo memory stake = stakes[tokenAddress][stakeID];

        return string(abi.encodePacked(
            "Owner: ", stake.owner.toHexString(), "\n",
            "Stake ID: ", stake.stakeID.toString(), "\n",
            "Timestamp: ", stake.timestamp.toString(), "\n",
            "Is Active: ", stake.isActive ? "Yes" : "No", "\n"
        ));
    }

    /**
     * @dev Returns the staking amount for a given token address by a specific user.
     * @param userAddress The address of the user whose staking amount is to be checked.
     * @param tokenAddress The address of the token.
     * @return amount The amount of tokens staked by the specified user for the specified token.
     * @return message A message indicating whether the specified user has staked tokens for the given token address.
     */
    function getStakingAmountForUserAndToken(address userAddress, address tokenAddress) public view returns (uint256 amount, string memory message) {
        amount = stakingAmount[tokenAddress][userAddress];
        if (amount == 0) {
            message = "This user does not have this token in staking.";
        } else {
            message = "This user has this token in staking.";
        }
        return (amount, message);
    }

    /**
     * @dev Checks if a specific stake ID is active.
     * @param tokenAddress The address of the token.
     * @param stakeID The ID of the stake to check.
     * @return bool True if the stake ID is active, false otherwise.
     */
    function isStakeIDActive(address tokenAddress, uint256 stakeID) public view returns (bool) {
        require(stakeID < nextStakeID[tokenAddress], "Invalid stake ID");
        StakeInfo memory stake = stakes[tokenAddress][stakeID];
        return stake.isActive;
    }

    /**
     * @dev Retrieves the staking points for a specific token and staker address.
     * @param tokenAddress The address of the token.
     * @param staker The address of the staker.
     * @return A string message indicating the number of staking points or informing that the staker has no staking points for the token.
     */
    function getStakingPoints(address tokenAddress, address staker) public view returns (string memory) {
        uint256 points = stakingPoints[tokenAddress][staker];
        if (points == 0) {
            return "The staker has no staking points for this token.";
        } else {
            return Strings.toString(points);
        }
    }

    /**
     * @dev Retrieves all addresses and their staking points for a given token.
     * @param tokenAddress The address of the token.
     * @return A string containing addresses and their corresponding staking points.
     */
    function getAllStakingPoints(address tokenAddress) external view returns (string memory) {
        string memory result = "";

        for (uint256 i = 0; i < nextStakeID[tokenAddress]; i++) {
            StakeInfo memory stake = stakes[tokenAddress][i];
            if (stake.isActive) {
                uint256 points = stakingPoints[tokenAddress][stake.owner];
                result = string(abi.encodePacked(result, "Address: ", Strings.toHexString(uint160(stake.owner), 20), " | Points: ", Strings.toString(points), "\n"));
            }
        }

        return result;
    }

    /**
     * @dev Sets up initial configuration of the contract.
     * This function can only be called once.
     * It initializes the owner and specifies the block number concerning the initiation of the setup function.
     */
    function setup() public setupOnce {
        owner = msg.sender;
        setupBlock = block.number;
        emit SetupCompleted(owner, setupBlock);
    }

    /**
     * @dev Change the ownership of the contract.
     * Can only be called by the current owner.
     * @param newOwner The address of the new owner.
     */
    function changeOwnership(address newOwner) public onlyOwner whenNotPaused {
        require(newOwner != address(0), "New owner cannot be the zero address");
        owner = newOwner;
        emit OwnershipTransferred(newOwner);
    }

    /**
     * @dev Sets a new name for the contract.
     * @param _name The new name to be set.
     */
    function setContractName(string calldata _name) public onlyOwner whenNotPaused {
        require(keccak256(bytes(_name)) != keccak256(bytes(contractName)), "New name must be different from the current name"); // Checks if the new name is different from the current one
        contractName = _name;
    }

    /**
     * @dev Approves a token for staking.
     * @param tokenAddress The address of the token to be approved.
     */
    function approveTokenForStaking(address tokenAddress) external onlyOwner whenNotPaused {
        require(tokenAddress != address(0), "Token address cannot be the zero address");
        approvedTokenStaking[tokenAddress] = true;
        emit TokenApprovedForStaking(tokenAddress);
    }

    /**
     * @dev Disapproves a token for staking.
     * @param tokenAddress The address of the token to be disapproved.
     */
    function disapproveTokenForStaking(address tokenAddress) external onlyOwner whenNotPaused {
        require(tokenAddress != address(0), "Token address cannot be the zero address");
        approvedTokenStaking[tokenAddress] = false;
        emit TokenDisapprovedForStaking(tokenAddress);
    }

    /**
     * @dev Struct representing staking information.
     */
    struct StakeInfo {
        address owner; // The address of the stake owner.
        uint256 stakeID; // Unique identifier for the stake.
        uint256 timestamp; // Timestamp when the stake was created.
        bool isActive; // Indicates whether the stake is active or not.
    }

    /**
     * @dev Set the minimum staking time for a specific token.
     *
     * This function allows the contract owner to set the minimum staking time required
     * for a particular token. Users will need to stake their tokens for at least this
     * duration to be eligible for staking rewards.
     *
     * @param tokenAddress The address of the token for which the minimum staking time is being set.
     * @param time The minimum staking time duration in seconds.
     *
     * Requirements:
     * - Only the contract owner can call this function.
     *
     * Emits a MinimumStakingTimeSet event upon successful setting of the minimum staking time.
     */
    function setMinimumStakingTime(address tokenAddress, uint256 time) external onlyOwner whenNotPaused {
        minimumStakingTime[tokenAddress] = time;
        emit MinimumStakingTimeSet(tokenAddress, time);
    }

    /**
     * @dev Stake tokens and assign staking points.
     *
     * This function allows the user to stake tokens and earn staking points.
     * The staked tokens must be approved for staking beforehand.
     *
     * @param tokenAddress The address of the token being staked.
     * @param amount The amount of tokens to stake.
     *
     * Requirements:
     * - The token must be approved for staking.
     * - The sender must have a sufficient token balance.
     *
     * Emits a TokensStaked event upon successful staking.
     */
    function stakeTokens(address tokenAddress, uint256 amount) external nonReentrant whenNotPaused {
        require(approvedTokenStaking[tokenAddress], "Token not approved for staking");
        require(IERC20(tokenAddress).balanceOf(msg.sender) >= amount, "Insufficient token balance");
        require(IERC20(tokenAddress).transferFrom(msg.sender, address(this), amount), "Token transfer failed");

        uint256 stakeID = nextStakeID[tokenAddress]++;
        stakes[tokenAddress][stakeID] = StakeInfo(msg.sender, stakeID, block.timestamp, true);
        stakingAmount[tokenAddress][msg.sender] += amount;
        stakingPoints[tokenAddress][msg.sender] += amount;
        emit TokensStaked(tokenAddress, msg.sender, nextStakeID[tokenAddress] - 1, amount);
    }

    /**
     * @dev Transfer staked tokens to another address.
     *
     * This function allows the owner of a staked amount to transfer the stake to another address.
     * The stake must be active and the sender must be the owner of the stake.
     *
     * @param tokenAddress The address of the token being staked.
     * @param stakeID The ID of the stake being transferred.
     * @param to The address to which the stake is being transferred.
     *
     * Requirements:
     * - The token must be approved for staking.
     * - The stake must be active and owned by the sender.
     * - The 'to' address must not be the zero address.
     *
     * Emits a StakedTokensTransferred event upon successful transfer.
     */
    function transferStakedTokens(address tokenAddress, uint256 stakeID, address to) external nonReentrant whenNotPaused {
        require(approvedTokenStaking[tokenAddress], "Token not approved for staking");
        StakeInfo storage stake = stakes[tokenAddress][stakeID];
        require(stake.isActive, "Stake is not active");
        require(stake.owner == msg.sender, "Only the owner can transfer the stake");
        require(to != address(0), "Cannot transfer to the zero address");

        // Transfer ilości zastakowanych tokenów i punktów stakingu
        uint256 amount = stakingAmount[tokenAddress][msg.sender];
        uint256 points = stakingPoints[tokenAddress][msg.sender];
        stakingAmount[tokenAddress][msg.sender] -= amount;
        stakingPoints[tokenAddress][msg.sender] -= points;
        stakingAmount[tokenAddress][to] += amount;
        stakingPoints[tokenAddress][to] += points;

        stake.owner = to;
        emit StakedTokensTransferred(tokenAddress, stakeID, msg.sender, to, stakingAmount[tokenAddress][msg.sender]);
    }

    /**
     * @dev Unstake tokens.
     *
     * This function allows the owner of a staked amount to unstake their tokens,
     * provided that the stake is active and the minimum staking time has elapsed.
     *
     * @param tokenAddress The address of the token being unstaked.
     * @param stakeID The ID of the stake being unstaked.
     *
     * Requirements:
     * - The token must be approved for staking.
     * - The stake must be active and owned by the sender.
     * - The minimum staking time must have elapsed.
     * - The sender must have tokens staked.
     *
     * Effects:
     * - The staked amount is deducted from the sender's staking balance.
     * - The stake is marked as inactive.
     * - The staked tokens are transferred back to the sender.
     *
     * Emits a TokensUnstaked event upon successful unstaking.
     */
    function unstake(address tokenAddress, uint256 stakeID) external nonReentrant whenNotPaused {
        require(approvedTokenStaking[tokenAddress], "Token not approved for staking");
        StakeInfo storage stake = stakes[tokenAddress][stakeID];
        require(stake.isActive, "Stake is not active");
        require(stake.owner == msg.sender, "Only the owner can unstake");
        require(block.timestamp >= stake.timestamp + minimumStakingTime[tokenAddress], "Minimum staking time has not elapsed");

        uint256 amount = stakingAmount[tokenAddress][msg.sender];
        require(amount > 0, "No tokens staked");

        stakingAmount[tokenAddress][msg.sender] -= amount;

        stake.isActive = false;

        require(IERC20(tokenAddress).transferFrom(address(this), msg.sender, amount), "Token transfer failed");
        emit TokensUnstaked(tokenAddress, stakeID, msg.sender, stakingAmount[tokenAddress][msg.sender]);
    }
}

Contract Security Audit

Contract ABI

API
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"MinimumStakingTimeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"setupBlock","type":"uint256"}],"name":"SetupCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakedTokensTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"TokenApprovedForStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"TokenDisapprovedForStaking","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"stakeID","type":"uint256"},{"indexed":false,"internalType":"address","name":"staker","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensUnstaked","type":"event"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"approveTokenForStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"disapproveTokenForStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getAllStakingPoints","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getIsSetup","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSetupBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"stakeID","type":"uint256"}],"name":"getStakeDetailsAsString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"staker","type":"address"}],"name":"getStakerStakeIDs","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getStakingAmountForUserAndToken","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"message","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"staker","type":"address"}],"name":"getStakingPoints","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"stakeID","type":"uint256"}],"name":"isStakeIDActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"}],"name":"setContractName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setMinimumStakingTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"stakeID","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"transferStakedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"stakeID","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561000f575f80fd5b506123a78061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061013d575f3560e01c806392e9c2db116100b4578063c2a672e011610079578063c2a672e014610280578063e18e025d14610293578063e233ad75146102a6578063f2295733146102b9578063f5f5ba72146102cc578063ffcad157146102d4575f80fd5b806392e9c2db146102275780639f40d0cd1461024a578063b187bd2614610255578063b59b933c14610265578063ba0bba4014610278575f80fd5b80634959cf99116101055780634959cf99146101ad5780635a737f13146101c057806379a83f5a146101d15780637e36ea2c146101e45780638456cb5914610205578063893d20e81461020d575f80fd5b80630b5ee00614610141578063178501f7146101565780632af4c31e1461017f5780633f4ba83a14610192578063478349f81461019a575b5f80fd5b61015461014f366004611b8a565b6102e7565b005b610169610164366004611c11565b6103e8565b6040516101769190611c86565b60405180910390f35b61015461018d366004611c98565b610535565b61015461063b565b6101546101a8366004611c98565b6106c1565b6101546101bb366004611cb1565b610780565b600154604051908152602001610176565b6101546101df366004611c11565b610add565b6101f76101f2366004611cea565b610e6f565b604051610176929190611d1b565b610154610ee4565b5f546040516001600160a01b039091168152602001610176565b61023a610235366004611c11565b610f46565b6040519015158152602001610176565b60025460ff1661023a565b600254610100900460ff1661023a565b610169610273366004611cea565b611000565b6101546110f6565b61015461028e366004611c11565b61119d565b6101546102a1366004611c11565b611551565b6101546102b4366004611c98565b6115fa565b6101696102c7366004611c98565b6116bc565b6101696117c4565b6101696102e2366004611cea565b611854565b5f546001600160a01b031633146103195760405162461bcd60e51b815260040161031090611d33565b60405180910390fd5b600254610100900460ff16156103415760405162461bcd60e51b815260040161031090611d6a565b60036040516103509190611dce565b60405180910390208282604051610368929190611e40565b6040518091039020036103d65760405162461bcd60e51b815260206004820152603060248201527f4e6577206e616d65206d75737420626520646966666572656e742066726f6d2060448201526f7468652063757272656e74206e616d6560801b6064820152608401610310565b60036103e3828483611eae565b505050565b6001600160a01b0382165f9081526005602052604090205460609082106104445760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081cdd185ad948125160821b6044820152606401610310565b6001600160a01b038084165f9081526007602090815260408083208684528252918290208251608081018452815490941680855260018201549285019290925260028101549284019290925260039091015460ff16151560608301526104a9906118b7565b6104b682602001516118cd565b6104c383604001516118cd565b83606001516104ec57604051806040016040528060028152602001614e6f60f01b815250610509565b6040518060400160405280600381526020016259657360e81b8152505b60405160200161051c9493929190611f68565b6040516020818303038152906040529150505b92915050565b5f546001600160a01b0316331461055e5760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff16156105865760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0381166105e85760405162461bcd60e51b8152602060048201526024808201527f4e6577206f776e65722063616e6e6f7420626520746865207a65726f206164646044820152637265737360e01b6064820152608401610310565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b5f546001600160a01b031633146106645760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff166106b45760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd081a5cc81b9bdd081c185d5cd95960521b6044820152606401610310565b6002805461ff0019169055565b5f546001600160a01b031633146106ea5760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff16156107125760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0381166107385760405162461bcd60e51b815260040161031090612041565b6001600160a01b0381165f81815260046020526040808220805460ff19169055517f10255e2ac11d67622b1b47888617822abe5564acbaa9b34cae8a678a0a780d589190a250565b60025462010000900460ff16156107a95760405162461bcd60e51b815260040161031090612089565b6002805462ff00001916620100001790819055610100900460ff16156107e15760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0383165f9081526004602052604090205460ff166108185760405162461bcd60e51b8152600401610310906120c0565b6001600160a01b0383165f9081526007602090815260408083208584529091529020600381015460ff166108845760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610310565b80546001600160a01b031633146108eb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920746865206f776e65722063616e207472616e7366657220746865206044820152647374616b6560d81b6064820152608401610310565b6001600160a01b03821661094d5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610310565b6001600160a01b0384165f818152600860209081526040808320338085528184528285208054968652600985528386209186529084529184205492529091839190610998838061210b565b90915550506001600160a01b0386165f908152600960209081526040808320338452909152812080548392906109cf90849061210b565b90915550506001600160a01b038087165f90815260086020908152604080832093881683529290529081208054849290610a0a90849061211e565b90915550506001600160a01b038087165f90815260096020908152604080832093881683529290529081208054839290610a4590849061211e565b909155505082546001600160a01b0319166001600160a01b03858116918217855587165f81815260086020908152604080832033808552908352928190205481518b8152928301939093528101939093526060830152907f87d40198d627592e4eb297d4184f6c02d450663a49410694dcda272a9ccf5d3f9060800160405180910390a250506002805462ff00001916905550505050565b60025462010000900460ff1615610b065760405162461bcd60e51b815260040161031090612089565b6002805462ff00001916620100001790819055610100900460ff1615610b3e5760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0382165f9081526004602052604090205460ff16610b755760405162461bcd60e51b8152600401610310906120c0565b6040516370a0823160e01b815233600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa158015610bb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdd9190612131565b1015610c2b5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e63650000000000006044820152606401610310565b6040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b038316906323b872dd906064016020604051808303815f875af1158015610c7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9f9190612148565b610ce35760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610310565b6001600160a01b0382165f90815260056020526040812080549082610d0783612167565b9091555060408051608081018252338082526020808301858152428486019081526001606086018181526001600160a01b038c81165f818152600788528a81208c825288528a812099518a546001600160a01b03191693169290921789559451928801929092559151600287015590516003909501805460ff1916951515959095179094558352600881528383209183525290812080549293508492909190610db190849061211e565b90915550506001600160a01b0383165f90815260096020908152604080832033845290915281208054849290610de890849061211e565b90915550506001600160a01b0383165f818152600560205260409020547f9b68f01b80e516179521925c1a690f13d1fe61c92ac2f10fc202fb1252d7f111903390610e359060019061210b565b604080516001600160a01b0390931683526020830191909152810185905260600160405180910390a250506002805462ff00001916905550565b6001600160a01b038082165f90815260086020908152604080832093861683529290529081205490606090829003610ec1576040518060600160405280602e8152602001612344602e91399050610edd565b6040518060600160405280602481526020016122f06024913990505b9250929050565b5f546001600160a01b03163314610f0d5760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff1615610f355760405162461bcd60e51b815260040161031090611d6a565b6002805461ff001916610100179055565b6001600160a01b0382165f908152600560205260408120548210610f9f5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081cdd185ad948125160821b6044820152606401610310565b506001600160a01b039182165f908152600760209081526040808320938352928152908290208251608081018452815490941684526001810154918401919091526002810154918301919091526003015460ff161515606090910181905290565b60408051602081019091525f808252606091905b6001600160a01b0385165f908152600560205260409020548110156110ee576001600160a01b038086165f9081526007602090815260408083208584528252918290208251608081018452815485168082526001830154938201939093526002820154938101939093526003015460ff16151560608301529091861614801561109e575080606001515b156110e557826110ad836118cd565b6110c1886001600160a01b031660146119d2565b6040516020016110d39392919061217f565b60405160208183030381529060405292505b50600101611014565b509392505050565b60025460ff16156111415760405162461bcd60e51b8152602060048201526015602482015274536574757020616c72656164792063616c6c65642160581b6044820152606401610310565b5f80546001600160a01b031916339081179091554360018190556040519081527f9e4bd02b115dd3cb5ad86085de76fc3f2d3f9ea0b557c054c2d9cbdce10390139060200160405180910390a26002805460ff19166001179055565b60025462010000900460ff16156111c65760405162461bcd60e51b815260040161031090612089565b6002805462ff00001916620100001790819055610100900460ff16156111fe5760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0382165f9081526004602052604090205460ff166112355760405162461bcd60e51b8152600401610310906120c0565b6001600160a01b0382165f9081526007602090815260408083208484529091529020600381015460ff166112a15760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610310565b80546001600160a01b031633146112fa5760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c7920746865206f776e65722063616e20756e7374616b650000000000006044820152606401610310565b6001600160a01b0383165f908152600660205260409020546002820154611321919061211e565b42101561137c5760405162461bcd60e51b8152602060048201526024808201527f4d696e696d756d207374616b696e672074696d6520686173206e6f7420656c616044820152631c1cd95960e21b6064820152608401610310565b6001600160a01b0383165f908152600860209081526040808320338452909152902054806113df5760405162461bcd60e51b815260206004820152601060248201526f139bc81d1bdad95b9cc81cdd185ad95960821b6044820152606401610310565b6001600160a01b0384165f9081526008602090815260408083203384529091528120805483929061141190849061210b565b909155505060038201805460ff191690556040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038516906323b872dd906064016020604051808303815f875af1158015611472573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114969190612148565b6114da5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610310565b6001600160a01b0384165f8181526008602090815260408083203380855290835292819020548151888152928301939093528101919091527ff6fba9a88a5110665e21aef3d4559593138f26d04b09c02afacad1e7e7fc6a419060600160405180910390a250506002805462ff0000191690555050565b5f546001600160a01b0316331461157a5760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff16156115a25760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0382165f8181526006602052604090819020839055517f092ee382e0672267975d7f91e9e9b0bd89fdfa489d86bbac79ba2e353988aa66906115ee9084815260200190565b60405180910390a25050565b5f546001600160a01b031633146116235760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff161561164b5760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0381166116715760405162461bcd60e51b815260040161031090612041565b6001600160a01b0381165f81815260046020526040808220805460ff19166001179055517f01a223948ec8d3591d2f4ae7cf53e8139689940db47159700eb008e8e1b3bba79190a250565b60408051602081019091525f808252606091905b6001600160a01b0384165f908152600560205260409020548110156117bd576001600160a01b038085165f9081526007602090815260408083208584528252918290208251608081018452815490941684526001810154918401919091526002810154918301919091526003015460ff1615801560608301526117b4576001600160a01b038086165f908152600960209081526040808320855185168452909152902054825190918591611786911660146119d2565b61178f836118cd565b6040516020016117a1939291906121f7565b6040516020818303038152906040529350505b506001016116d0565b5092915050565b6060600380546117d390611d96565b80601f01602080910402602001604051908101604052809291908181526020018280546117ff90611d96565b801561184a5780601f106118215761010080835404028352916020019161184a565b820191905f5260205f20905b81548152906001019060200180831161182d57829003601f168201915b5050505050905090565b6001600160a01b038083165f9081526009602090815260408083209385168352929052908120546060918190036118a6576040518060600160405280603081526020016123146030913991505061052f565b6118af816118cd565b91505061052f565b606061052f826001600160a01b031660146119d2565b6060815f036118f35750506040805180820190915260018152600360fc1b602082015290565b815f5b811561191c578061190681612167565b91506119159050600a83612289565b91506118f6565b5f8167ffffffffffffffff81111561193657611936611e4f565b6040519080825280601f01601f191660200182016040528015611960576020820181803683370190505b5090505b84156119ca5761197560018361210b565b9150611982600a8661229c565b61198d90603061211e565b60f81b8183815181106119a2576119a26122af565b60200101906001600160f81b03191690815f1a9053506119c3600a86612289565b9450611964565b949350505050565b60605f6119e08360026122c3565b6119eb90600261211e565b67ffffffffffffffff811115611a0357611a03611e4f565b6040519080825280601f01601f191660200182016040528015611a2d576020820181803683370190505b509050600360fc1b815f81518110611a4757611a476122af565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a7557611a756122af565b60200101906001600160f81b03191690815f1a9053505f611a978460026122c3565b611aa290600161211e565b90505b6001811115611b34576009611abb60108761229c565b11611ac6575f611ac9565b60075b60ff16611ad760108761229c565b611ae290603061211e565b611aec919061211e565b60f81b828281518110611b0157611b016122af565b60200101906001600160f81b03191690815f1a905350611b22601086612289565b9450611b2d816122da565b9050611aa5565b508315611b835760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610310565b9392505050565b5f8060208385031215611b9b575f80fd5b823567ffffffffffffffff80821115611bb2575f80fd5b818501915085601f830112611bc5575f80fd5b813581811115611bd3575f80fd5b866020828501011115611be4575f80fd5b60209290920196919550909350505050565b80356001600160a01b0381168114611c0c575f80fd5b919050565b5f8060408385031215611c22575f80fd5b611c2b83611bf6565b946020939093013593505050565b5f5b83811015611c53578181015183820152602001611c3b565b50505f910152565b5f8151808452611c72816020860160208601611c39565b601f01601f19169290920160200192915050565b602081525f611b836020830184611c5b565b5f60208284031215611ca8575f80fd5b611b8382611bf6565b5f805f60608486031215611cc3575f80fd5b611ccc84611bf6565b925060208401359150611ce160408501611bf6565b90509250925092565b5f8060408385031215611cfb575f80fd5b611d0483611bf6565b9150611d1260208401611bf6565b90509250929050565b828152604060208201525f6119ca6040830184611c5b565b6020808252601c908201527f4d73672e73656e646572206973206e6f7420746865206f776e65722100000000604082015260600190565b60208082526012908201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604082015260600190565b600181811c90821680611daa57607f821691505b602082108103611dc857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f808354611ddb81611d96565b60018281168015611df35760018114611e0857611e34565b60ff1984168752821515830287019450611e34565b875f526020805f205f5b85811015611e2b5781548a820152908401908201611e12565b50505082870194505b50929695505050505050565b818382375f9101908152919050565b634e487b7160e01b5f52604160045260245ffd5b601f8211156103e357805f5260205f20601f840160051c81016020851015611e885750805b601f840160051c820191505b81811015611ea7575f8155600101611e94565b5050505050565b67ffffffffffffffff831115611ec657611ec6611e4f565b611eda83611ed48354611d96565b83611e63565b5f601f841160018114611f0b575f8515611ef45750838201355b5f19600387901b1c1916600186901b178355611ea7565b5f83815260208120601f198716915b82811015611f3a5786850135825560209485019460019092019101611f1a565b5086821015611f56575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b66027bbb732b91d160cd1b81525f8551611f89816007850160208a01611c39565b600560f91b600791840191820181905269029ba30b5b29024a21d160b51b60088301528651611fbf816012850160208b01611c39565b601292019182018190526a02a34b6b2b9ba30b6b81d160ad1b60138301528551611ff081601e850160208a01611c39565b601e9201918201526a024b99020b1ba34bb329d160ad1b601f820152835161201f81602a840160208801611c39565b612035602a82840101600560f91b815260010190565b98975050505050505050565b60208082526028908201527f546f6b656e20616464726573732063616e6e6f7420626520746865207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526017908201527f5265656e7472616e742063616c6c206465746563746564000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206e6f7420617070726f76656420666f72207374616b696e670000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561052f5761052f6120f7565b8082018082111561052f5761052f6120f7565b5f60208284031215612141575f80fd5b5051919050565b5f60208284031215612158575f80fd5b81518015158114611b83575f80fd5b5f60018201612178576121786120f7565b5060010190565b5f8451612190818460208901611c39565b63024a21d160e51b90830190815284516121b1816004840160208901611c39565b690103e102a37b5b2b71d160b51b6004929091019182015283516121dc81600e840160208801611c39565b600560f91b600e9290910191820152600f0195945050505050565b5f8451612208818460208901611c39565b68020b2323932b9b99d160bd1b908301908152845161222e816009840160208901611c39565b6a0103e102837b4b73a399d160ad1b60099290910191820152835161225a816014840160208801611c39565b600560f91b6014929091019182015260150195945050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261229757612297612275565b500490565b5f826122aa576122aa612275565b500690565b634e487b7160e01b5f52603260045260245ffd5b808202811582820484141761052f5761052f6120f7565b5f816122e8576122e86120f7565b505f19019056fe54686973207573657220686173207468697320746f6b656e20696e207374616b696e672e546865207374616b657220686173206e6f207374616b696e6720706f696e747320666f72207468697320746f6b656e2e54686973207573657220646f6573206e6f742068617665207468697320746f6b656e20696e207374616b696e672ea26469706673582212202d459e6bec0e553ce6e09242a6d8738b83b146404d3b9abf2707cfd3384a7a6f64736f6c63430008170033

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061013d575f3560e01c806392e9c2db116100b4578063c2a672e011610079578063c2a672e014610280578063e18e025d14610293578063e233ad75146102a6578063f2295733146102b9578063f5f5ba72146102cc578063ffcad157146102d4575f80fd5b806392e9c2db146102275780639f40d0cd1461024a578063b187bd2614610255578063b59b933c14610265578063ba0bba4014610278575f80fd5b80634959cf99116101055780634959cf99146101ad5780635a737f13146101c057806379a83f5a146101d15780637e36ea2c146101e45780638456cb5914610205578063893d20e81461020d575f80fd5b80630b5ee00614610141578063178501f7146101565780632af4c31e1461017f5780633f4ba83a14610192578063478349f81461019a575b5f80fd5b61015461014f366004611b8a565b6102e7565b005b610169610164366004611c11565b6103e8565b6040516101769190611c86565b60405180910390f35b61015461018d366004611c98565b610535565b61015461063b565b6101546101a8366004611c98565b6106c1565b6101546101bb366004611cb1565b610780565b600154604051908152602001610176565b6101546101df366004611c11565b610add565b6101f76101f2366004611cea565b610e6f565b604051610176929190611d1b565b610154610ee4565b5f546040516001600160a01b039091168152602001610176565b61023a610235366004611c11565b610f46565b6040519015158152602001610176565b60025460ff1661023a565b600254610100900460ff1661023a565b610169610273366004611cea565b611000565b6101546110f6565b61015461028e366004611c11565b61119d565b6101546102a1366004611c11565b611551565b6101546102b4366004611c98565b6115fa565b6101696102c7366004611c98565b6116bc565b6101696117c4565b6101696102e2366004611cea565b611854565b5f546001600160a01b031633146103195760405162461bcd60e51b815260040161031090611d33565b60405180910390fd5b600254610100900460ff16156103415760405162461bcd60e51b815260040161031090611d6a565b60036040516103509190611dce565b60405180910390208282604051610368929190611e40565b6040518091039020036103d65760405162461bcd60e51b815260206004820152603060248201527f4e6577206e616d65206d75737420626520646966666572656e742066726f6d2060448201526f7468652063757272656e74206e616d6560801b6064820152608401610310565b60036103e3828483611eae565b505050565b6001600160a01b0382165f9081526005602052604090205460609082106104445760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081cdd185ad948125160821b6044820152606401610310565b6001600160a01b038084165f9081526007602090815260408083208684528252918290208251608081018452815490941680855260018201549285019290925260028101549284019290925260039091015460ff16151560608301526104a9906118b7565b6104b682602001516118cd565b6104c383604001516118cd565b83606001516104ec57604051806040016040528060028152602001614e6f60f01b815250610509565b6040518060400160405280600381526020016259657360e81b8152505b60405160200161051c9493929190611f68565b6040516020818303038152906040529150505b92915050565b5f546001600160a01b0316331461055e5760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff16156105865760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0381166105e85760405162461bcd60e51b8152602060048201526024808201527f4e6577206f776e65722063616e6e6f7420626520746865207a65726f206164646044820152637265737360e01b6064820152608401610310565b5f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b5f546001600160a01b031633146106645760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff166106b45760405162461bcd60e51b815260206004820152601660248201527510dbdb9d1c9858dd081a5cc81b9bdd081c185d5cd95960521b6044820152606401610310565b6002805461ff0019169055565b5f546001600160a01b031633146106ea5760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff16156107125760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0381166107385760405162461bcd60e51b815260040161031090612041565b6001600160a01b0381165f81815260046020526040808220805460ff19169055517f10255e2ac11d67622b1b47888617822abe5564acbaa9b34cae8a678a0a780d589190a250565b60025462010000900460ff16156107a95760405162461bcd60e51b815260040161031090612089565b6002805462ff00001916620100001790819055610100900460ff16156107e15760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0383165f9081526004602052604090205460ff166108185760405162461bcd60e51b8152600401610310906120c0565b6001600160a01b0383165f9081526007602090815260408083208584529091529020600381015460ff166108845760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610310565b80546001600160a01b031633146108eb5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920746865206f776e65722063616e207472616e7366657220746865206044820152647374616b6560d81b6064820152608401610310565b6001600160a01b03821661094d5760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610310565b6001600160a01b0384165f818152600860209081526040808320338085528184528285208054968652600985528386209186529084529184205492529091839190610998838061210b565b90915550506001600160a01b0386165f908152600960209081526040808320338452909152812080548392906109cf90849061210b565b90915550506001600160a01b038087165f90815260086020908152604080832093881683529290529081208054849290610a0a90849061211e565b90915550506001600160a01b038087165f90815260096020908152604080832093881683529290529081208054839290610a4590849061211e565b909155505082546001600160a01b0319166001600160a01b03858116918217855587165f81815260086020908152604080832033808552908352928190205481518b8152928301939093528101939093526060830152907f87d40198d627592e4eb297d4184f6c02d450663a49410694dcda272a9ccf5d3f9060800160405180910390a250506002805462ff00001916905550505050565b60025462010000900460ff1615610b065760405162461bcd60e51b815260040161031090612089565b6002805462ff00001916620100001790819055610100900460ff1615610b3e5760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0382165f9081526004602052604090205460ff16610b755760405162461bcd60e51b8152600401610310906120c0565b6040516370a0823160e01b815233600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa158015610bb9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdd9190612131565b1015610c2b5760405162461bcd60e51b815260206004820152601a60248201527f496e73756666696369656e7420746f6b656e2062616c616e63650000000000006044820152606401610310565b6040516323b872dd60e01b8152336004820152306024820152604481018290526001600160a01b038316906323b872dd906064016020604051808303815f875af1158015610c7b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9f9190612148565b610ce35760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610310565b6001600160a01b0382165f90815260056020526040812080549082610d0783612167565b9091555060408051608081018252338082526020808301858152428486019081526001606086018181526001600160a01b038c81165f818152600788528a81208c825288528a812099518a546001600160a01b03191693169290921789559451928801929092559151600287015590516003909501805460ff1916951515959095179094558352600881528383209183525290812080549293508492909190610db190849061211e565b90915550506001600160a01b0383165f90815260096020908152604080832033845290915281208054849290610de890849061211e565b90915550506001600160a01b0383165f818152600560205260409020547f9b68f01b80e516179521925c1a690f13d1fe61c92ac2f10fc202fb1252d7f111903390610e359060019061210b565b604080516001600160a01b0390931683526020830191909152810185905260600160405180910390a250506002805462ff00001916905550565b6001600160a01b038082165f90815260086020908152604080832093861683529290529081205490606090829003610ec1576040518060600160405280602e8152602001612344602e91399050610edd565b6040518060600160405280602481526020016122f06024913990505b9250929050565b5f546001600160a01b03163314610f0d5760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff1615610f355760405162461bcd60e51b815260040161031090611d6a565b6002805461ff001916610100179055565b6001600160a01b0382165f908152600560205260408120548210610f9f5760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a59081cdd185ad948125160821b6044820152606401610310565b506001600160a01b039182165f908152600760209081526040808320938352928152908290208251608081018452815490941684526001810154918401919091526002810154918301919091526003015460ff161515606090910181905290565b60408051602081019091525f808252606091905b6001600160a01b0385165f908152600560205260409020548110156110ee576001600160a01b038086165f9081526007602090815260408083208584528252918290208251608081018452815485168082526001830154938201939093526002820154938101939093526003015460ff16151560608301529091861614801561109e575080606001515b156110e557826110ad836118cd565b6110c1886001600160a01b031660146119d2565b6040516020016110d39392919061217f565b60405160208183030381529060405292505b50600101611014565b509392505050565b60025460ff16156111415760405162461bcd60e51b8152602060048201526015602482015274536574757020616c72656164792063616c6c65642160581b6044820152606401610310565b5f80546001600160a01b031916339081179091554360018190556040519081527f9e4bd02b115dd3cb5ad86085de76fc3f2d3f9ea0b557c054c2d9cbdce10390139060200160405180910390a26002805460ff19166001179055565b60025462010000900460ff16156111c65760405162461bcd60e51b815260040161031090612089565b6002805462ff00001916620100001790819055610100900460ff16156111fe5760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0382165f9081526004602052604090205460ff166112355760405162461bcd60e51b8152600401610310906120c0565b6001600160a01b0382165f9081526007602090815260408083208484529091529020600381015460ff166112a15760405162461bcd60e51b81526020600482015260136024820152725374616b65206973206e6f742061637469766560681b6044820152606401610310565b80546001600160a01b031633146112fa5760405162461bcd60e51b815260206004820152601a60248201527f4f6e6c7920746865206f776e65722063616e20756e7374616b650000000000006044820152606401610310565b6001600160a01b0383165f908152600660205260409020546002820154611321919061211e565b42101561137c5760405162461bcd60e51b8152602060048201526024808201527f4d696e696d756d207374616b696e672074696d6520686173206e6f7420656c616044820152631c1cd95960e21b6064820152608401610310565b6001600160a01b0383165f908152600860209081526040808320338452909152902054806113df5760405162461bcd60e51b815260206004820152601060248201526f139bc81d1bdad95b9cc81cdd185ad95960821b6044820152606401610310565b6001600160a01b0384165f9081526008602090815260408083203384529091528120805483929061141190849061210b565b909155505060038201805460ff191690556040516323b872dd60e01b8152306004820152336024820152604481018290526001600160a01b038516906323b872dd906064016020604051808303815f875af1158015611472573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114969190612148565b6114da5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b6044820152606401610310565b6001600160a01b0384165f8181526008602090815260408083203380855290835292819020548151888152928301939093528101919091527ff6fba9a88a5110665e21aef3d4559593138f26d04b09c02afacad1e7e7fc6a419060600160405180910390a250506002805462ff0000191690555050565b5f546001600160a01b0316331461157a5760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff16156115a25760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0382165f8181526006602052604090819020839055517f092ee382e0672267975d7f91e9e9b0bd89fdfa489d86bbac79ba2e353988aa66906115ee9084815260200190565b60405180910390a25050565b5f546001600160a01b031633146116235760405162461bcd60e51b815260040161031090611d33565b600254610100900460ff161561164b5760405162461bcd60e51b815260040161031090611d6a565b6001600160a01b0381166116715760405162461bcd60e51b815260040161031090612041565b6001600160a01b0381165f81815260046020526040808220805460ff19166001179055517f01a223948ec8d3591d2f4ae7cf53e8139689940db47159700eb008e8e1b3bba79190a250565b60408051602081019091525f808252606091905b6001600160a01b0384165f908152600560205260409020548110156117bd576001600160a01b038085165f9081526007602090815260408083208584528252918290208251608081018452815490941684526001810154918401919091526002810154918301919091526003015460ff1615801560608301526117b4576001600160a01b038086165f908152600960209081526040808320855185168452909152902054825190918591611786911660146119d2565b61178f836118cd565b6040516020016117a1939291906121f7565b6040516020818303038152906040529350505b506001016116d0565b5092915050565b6060600380546117d390611d96565b80601f01602080910402602001604051908101604052809291908181526020018280546117ff90611d96565b801561184a5780601f106118215761010080835404028352916020019161184a565b820191905f5260205f20905b81548152906001019060200180831161182d57829003601f168201915b5050505050905090565b6001600160a01b038083165f9081526009602090815260408083209385168352929052908120546060918190036118a6576040518060600160405280603081526020016123146030913991505061052f565b6118af816118cd565b91505061052f565b606061052f826001600160a01b031660146119d2565b6060815f036118f35750506040805180820190915260018152600360fc1b602082015290565b815f5b811561191c578061190681612167565b91506119159050600a83612289565b91506118f6565b5f8167ffffffffffffffff81111561193657611936611e4f565b6040519080825280601f01601f191660200182016040528015611960576020820181803683370190505b5090505b84156119ca5761197560018361210b565b9150611982600a8661229c565b61198d90603061211e565b60f81b8183815181106119a2576119a26122af565b60200101906001600160f81b03191690815f1a9053506119c3600a86612289565b9450611964565b949350505050565b60605f6119e08360026122c3565b6119eb90600261211e565b67ffffffffffffffff811115611a0357611a03611e4f565b6040519080825280601f01601f191660200182016040528015611a2d576020820181803683370190505b509050600360fc1b815f81518110611a4757611a476122af565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611a7557611a756122af565b60200101906001600160f81b03191690815f1a9053505f611a978460026122c3565b611aa290600161211e565b90505b6001811115611b34576009611abb60108761229c565b11611ac6575f611ac9565b60075b60ff16611ad760108761229c565b611ae290603061211e565b611aec919061211e565b60f81b828281518110611b0157611b016122af565b60200101906001600160f81b03191690815f1a905350611b22601086612289565b9450611b2d816122da565b9050611aa5565b508315611b835760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610310565b9392505050565b5f8060208385031215611b9b575f80fd5b823567ffffffffffffffff80821115611bb2575f80fd5b818501915085601f830112611bc5575f80fd5b813581811115611bd3575f80fd5b866020828501011115611be4575f80fd5b60209290920196919550909350505050565b80356001600160a01b0381168114611c0c575f80fd5b919050565b5f8060408385031215611c22575f80fd5b611c2b83611bf6565b946020939093013593505050565b5f5b83811015611c53578181015183820152602001611c3b565b50505f910152565b5f8151808452611c72816020860160208601611c39565b601f01601f19169290920160200192915050565b602081525f611b836020830184611c5b565b5f60208284031215611ca8575f80fd5b611b8382611bf6565b5f805f60608486031215611cc3575f80fd5b611ccc84611bf6565b925060208401359150611ce160408501611bf6565b90509250925092565b5f8060408385031215611cfb575f80fd5b611d0483611bf6565b9150611d1260208401611bf6565b90509250929050565b828152604060208201525f6119ca6040830184611c5b565b6020808252601c908201527f4d73672e73656e646572206973206e6f7420746865206f776e65722100000000604082015260600190565b60208082526012908201527110dbdb9d1c9858dd081a5cc81c185d5cd95960721b604082015260600190565b600181811c90821680611daa57607f821691505b602082108103611dc857634e487b7160e01b5f52602260045260245ffd5b50919050565b5f808354611ddb81611d96565b60018281168015611df35760018114611e0857611e34565b60ff1984168752821515830287019450611e34565b875f526020805f205f5b85811015611e2b5781548a820152908401908201611e12565b50505082870194505b50929695505050505050565b818382375f9101908152919050565b634e487b7160e01b5f52604160045260245ffd5b601f8211156103e357805f5260205f20601f840160051c81016020851015611e885750805b601f840160051c820191505b81811015611ea7575f8155600101611e94565b5050505050565b67ffffffffffffffff831115611ec657611ec6611e4f565b611eda83611ed48354611d96565b83611e63565b5f601f841160018114611f0b575f8515611ef45750838201355b5f19600387901b1c1916600186901b178355611ea7565b5f83815260208120601f198716915b82811015611f3a5786850135825560209485019460019092019101611f1a565b5086821015611f56575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b66027bbb732b91d160cd1b81525f8551611f89816007850160208a01611c39565b600560f91b600791840191820181905269029ba30b5b29024a21d160b51b60088301528651611fbf816012850160208b01611c39565b601292019182018190526a02a34b6b2b9ba30b6b81d160ad1b60138301528551611ff081601e850160208a01611c39565b601e9201918201526a024b99020b1ba34bb329d160ad1b601f820152835161201f81602a840160208801611c39565b612035602a82840101600560f91b815260010190565b98975050505050505050565b60208082526028908201527f546f6b656e20616464726573732063616e6e6f7420626520746865207a65726f604082015267206164647265737360c01b606082015260800190565b60208082526017908201527f5265656e7472616e742063616c6c206465746563746564000000000000000000604082015260600190565b6020808252601e908201527f546f6b656e206e6f7420617070726f76656420666f72207374616b696e670000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561052f5761052f6120f7565b8082018082111561052f5761052f6120f7565b5f60208284031215612141575f80fd5b5051919050565b5f60208284031215612158575f80fd5b81518015158114611b83575f80fd5b5f60018201612178576121786120f7565b5060010190565b5f8451612190818460208901611c39565b63024a21d160e51b90830190815284516121b1816004840160208901611c39565b690103e102a37b5b2b71d160b51b6004929091019182015283516121dc81600e840160208801611c39565b600560f91b600e9290910191820152600f0195945050505050565b5f8451612208818460208901611c39565b68020b2323932b9b99d160bd1b908301908152845161222e816009840160208901611c39565b6a0103e102837b4b73a399d160ad1b60099290910191820152835161225a816014840160208801611c39565b600560f91b6014929091019182015260150195945050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261229757612297612275565b500490565b5f826122aa576122aa612275565b500690565b634e487b7160e01b5f52603260045260245ffd5b808202811582820484141761052f5761052f6120f7565b5f816122e8576122e86120f7565b505f19019056fe54686973207573657220686173207468697320746f6b656e20696e207374616b696e672e546865207374616b657220686173206e6f207374616b696e6720706f696e747320666f72207468697320746f6b656e2e54686973207573657220646f6573206e6f742068617665207468697320746f6b656e20696e207374616b696e672ea26469706673582212202d459e6bec0e553ce6e09242a6d8738b83b146404d3b9abf2707cfd3384a7a6f64736f6c63430008170033

Deployed Bytecode Sourcemap

2785:18438:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13754:307;;;;;;:::i;:::-;;:::i;:::-;;9283:554;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13399:237;;;;;;:::i;:::-;;:::i;6899:122::-;;;:::i;14633:297::-;;;;;;:::i;:::-;;:::i;18306:1077::-;;;;;;:::i;:::-;;:::i;7408:88::-;7478:10;;7408:88;;2474:25:1;;;2462:2;2447:18;7408:88:0;2328:177:1;16778:773:0;;;;;;:::i;:::-;;:::i;10310:440::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6720:118::-;;;:::i;7153:81::-;7194:7;7221:5;7153:81;;-1:-1:-1;;;;;7221:5:0;;;3217:51:1;;3205:2;3190:18;7153:81:0;3071:203:1;11007:271:0;;;;;;:::i;:::-;;:::i;:::-;;;3444:14:1;;3437:22;3419:41;;3407:2;3392:18;11007:271:0;3279:187:1;8081:82:0;8148:7;;;;8081:82;;7596:80;7661:7;;;;;;;7596:80;;8449:560;;;;;;:::i;:::-;;:::i;13063:156::-;;;:::i;20268:952::-;;;;;;:::i;:::-;;:::i;15995:215::-;;;;;;:::i;:::-;;:::i;14199:290::-;;;;;;:::i;:::-;;:::i;12222:595::-;;;;;;:::i;:::-;;:::i;7806:101::-;;;:::i;11629:346::-;;;;;;:::i;:::-;;:::i;13754:307::-;6375:5;;-1:-1:-1;;;;;6375:5:0;6361:10;:19;6353:60;;;;-1:-1:-1;;;6353:60:0;;;;;;;:::i;:::-;;;;;;;;;5558:7:::1;::::0;::::1;::::0;::::1;;;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;13895:12:::2;13879:30;;;;;;:::i;:::-;;;;;;;;13868:5;;13852:23;;;;;;;:::i;:::-;;;;;;;;:57:::0;13844:118:::2;;;::::0;-1:-1:-1;;;13844:118:0;;6017:2:1;13844:118:0::2;::::0;::::2;5999:21:1::0;6056:2;6036:18;;;6029:30;6095:34;6075:18;;;6068:62;-1:-1:-1;;;6146:18:1;;;6139:46;6202:19;;13844:118:0::2;5815:412:1::0;13844:118:0::2;14033:12;:20;14048:5:::0;;14033:12;:20:::2;:::i;:::-;;13754:307:::0;;:::o;9283:554::-;-1:-1:-1;;;;;9420:25:0;;;;;;:11;:25;;;;;;9376:13;;9410:35;;9402:64;;;;-1:-1:-1;;;9402:64:0;;8466:2:1;9402:64:0;;;8448:21:1;8505:2;8485:18;;;8478:30;-1:-1:-1;;;8524:18:1;;;8517:46;8580:18;;9402:64:0;8264:340:1;9402:64:0;-1:-1:-1;;;;;9502:20:0;;;9477:22;9502:20;;;:6;:20;;;;;;;;:29;;;;;;;;;9477:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9600:25;;:23;:25::i;:::-;9660:24;:5;:13;;;:22;:24::i;:::-;9720:26;:5;:15;;;:24;:26::i;:::-;9782:5;:14;;;:29;;;;;;;;;;;;;;;-1:-1:-1;;;9782:29:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9782:29:0;;;;9558:270;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9544:285;;;9283:554;;;;;:::o;13399:237::-;6375:5;;-1:-1:-1;;;;;6375:5:0;6361:10;:19;6353:60;;;;-1:-1:-1;;;6353:60:0;;;;;;;:::i;:::-;5558:7:::1;::::0;::::1;::::0;::::1;;;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13492:22:0;::::2;13484:71;;;::::0;-1:-1:-1;;;13484:71:0;;10992:2:1;13484:71:0::2;::::0;::::2;10974:21:1::0;11031:2;11011:18;;;11004:30;11070:34;11050:18;;;11043:62;-1:-1:-1;;;11121:18:1;;;11114:34;11165:19;;13484:71:0::2;10790:400:1::0;13484:71:0::2;13566:5;:16:::0;;-1:-1:-1;;;;;;13566:16:0::2;-1:-1:-1::0;;;;;13566:16:0;::::2;::::0;;::::2;::::0;;;13598:30:::2;::::0;3217:51:1;;;13598:30:0::2;::::0;3205:2:1;3190:18;13598:30:0::2;;;;;;;13399:237:::0;:::o;6899:122::-;6375:5;;-1:-1:-1;;;;;6375:5:0;6361:10;:19;6353:60;;;;-1:-1:-1;;;6353:60:0;;;;;;;:::i;:::-;5826:7:::1;::::0;::::1;::::0;::::1;;;5818:42;;;::::0;-1:-1:-1;;;5818:42:0;;11397:2:1;5818:42:0::1;::::0;::::1;11379:21:1::0;11436:2;11416:18;;;11409:30;-1:-1:-1;;;11455:18:1;;;11448:52;11517:18;;5818:42:0::1;11195:346:1::0;5818:42:0::1;6957:7:::2;:15:::0;;-1:-1:-1;;6957:15:0::2;::::0;;6899:122::o;14633:297::-;6375:5;;-1:-1:-1;;;;;6375:5:0;6361:10;:19;6353:60;;;;-1:-1:-1;;;6353:60:0;;;;;;;:::i;:::-;5558:7:::1;::::0;::::1;::::0;::::1;;;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14742:26:0;::::2;14734:79;;;;-1:-1:-1::0;;;14734:79:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14824:34:0;::::2;14861:5;14824:34:::0;;;:20:::2;:34;::::0;;;;;:42;;-1:-1:-1;;14824:42:0::2;::::0;;14882:40;::::2;::::0;14861:5;14882:40:::2;14633:297:::0;:::o;18306:1077::-;6123:6;;;;;;;6122:7;6114:43;;;;-1:-1:-1;;;6114:43:0;;;;;;;:::i;:::-;6168:6;:13;;-1:-1:-1;;6168:13:0;;;;;;;;5558:7;::::1;6168:13:::0;5558:7:::1;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18442:34:0;::::2;;::::0;;;:20:::2;:34;::::0;;;;;::::2;;18434:77;;;;-1:-1:-1::0;;;18434:77:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18548:20:0;::::2;18522:23;18548:20:::0;;;:6:::2;:20;::::0;;;;;;;:29;;;;;;;;18596:14:::2;::::0;::::2;::::0;::::2;;18588:46;;;::::0;-1:-1:-1;;;18588:46:0;;12868:2:1;18588:46:0::2;::::0;::::2;12850:21:1::0;12907:2;12887:18;;;12880:30;-1:-1:-1;;;12926:18:1;;;12919:49;12985:18;;18588:46:0::2;12666:343:1::0;18588:46:0::2;18653:11:::0;;-1:-1:-1;;;;;18653:11:0::2;18668:10;18653:25;18645:75;;;::::0;-1:-1:-1;;;18645:75:0;;13216:2:1;18645:75:0::2;::::0;::::2;13198:21:1::0;13255:2;13235:18;;;13228:30;13294:34;13274:18;;;13267:62;-1:-1:-1;;;13345:18:1;;;13338:35;13390:19;;18645:75:0::2;13014:401:1::0;18645:75:0::2;-1:-1:-1::0;;;;;18739:16:0;::::2;18731:64;;;::::0;-1:-1:-1;;;18731:64:0;;13622:2:1;18731:64:0::2;::::0;::::2;13604:21:1::0;13661:2;13641:18;;;13634:30;13700:34;13680:18;;;13673:62;-1:-1:-1;;;13751:18:1;;;13744:33;13794:19;;18731:64:0::2;13420:399:1::0;18731:64:0::2;-1:-1:-1::0;;;;;18897:27:0;::::2;18880:14;18897:27:::0;;;:13:::2;:27;::::0;;;;;;;18925:10:::2;18897:39:::0;;;;;;;;;;;18964:27;;;:13:::2;:27:::0;;;;;:39;;;;;;;;;;19014;;18964;;18897;;;19014:49:::2;18897:39:::0;;19014:49:::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;19074:27:0;::::2;;::::0;;;:13:::2;:27;::::0;;;;;;;19102:10:::2;19074:39:::0;;;;;;;:49;;19117:6;;19074:27;:49:::2;::::0;19117:6;;19074:49:::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;19134:27:0;;::::2;;::::0;;;:13:::2;:27;::::0;;;;;;;:31;;::::2;::::0;;;;;;;;:41;;19169:6;;19134:27;:41:::2;::::0;19169:6;;19134:41:::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;19186:27:0;;::::2;;::::0;;;:13:::2;:27;::::0;;;;;;;:31;;::::2;::::0;;;;;;;;:41;;19221:6;;19186:27;:41:::2;::::0;19221:6;;19186:41:::2;:::i;:::-;::::0;;;-1:-1:-1;;19240:16:0;;-1:-1:-1;;;;;;19240:16:0::2;-1:-1:-1::0;;;;;19240:16:0;;::::2;::::0;;::::2;::::0;;19272:103;::::2;-1:-1:-1::0;19335:27:0;;;:13:::2;:27;::::0;;;;;;;19319:10:::2;19335:39:::0;;;;;;;;;;;19272:103;;14450:25:1;;;14529:18;;;14522:43;;;;14581:18;;14574:43;;;;14648:2;14633:18;;14626:34;19272:103:0;::::2;::::0;14437:3:1;14422:19;19272:103:0::2;;;;;;;-1:-1:-1::0;;6204:6:0;:14;;-1:-1:-1;;6204:14:0;;;-1:-1:-1;;;;18306:1077:0:o;16778:773::-;6123:6;;;;;;;6122:7;6114:43;;;;-1:-1:-1;;;6114:43:0;;;;;;;:::i;:::-;6168:6;:13;;-1:-1:-1;;6168:13:0;;;;;;;;5558:7;::::1;6168:13:::0;5558:7:::1;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16892:34:0;::::2;;::::0;;;:20:::2;:34;::::0;;;;;::::2;;16884:77;;;;-1:-1:-1::0;;;16884:77:0::2;;;;;;;:::i;:::-;16980:42;::::0;-1:-1:-1;;;16980:42:0;;17011:10:::2;16980:42;::::0;::::2;3217:51:1::0;17026:6:0;;-1:-1:-1;;;;;16980:30:0;::::2;::::0;::::2;::::0;3190:18:1;;16980:42:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;;16972:91;;;::::0;-1:-1:-1;;;16972:91:0;;15062:2:1;16972:91:0::2;::::0;::::2;15044:21:1::0;15101:2;15081:18;;;15074:30;15140:28;15120:18;;;15113:56;15186:18;;16972:91:0::2;14860:350:1::0;16972:91:0::2;17082:68;::::0;-1:-1:-1;;;17082:68:0;;17116:10:::2;17082:68;::::0;::::2;15455:34:1::0;17136:4:0::2;15505:18:1::0;;;15498:43;15557:18;;;15550:34;;;-1:-1:-1;;;;;17082:33:0;::::2;::::0;::::2;::::0;15390:18:1;;17082:68:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17074:102;;;::::0;-1:-1:-1;;;17074:102:0;;16079:2:1;17074:102:0::2;::::0;::::2;16061:21:1::0;16118:2;16098:18;;;16091:30;-1:-1:-1;;;16137:18:1;;;16130:51;16198:18;;17074:102:0::2;15877:345:1::0;17074:102:0::2;-1:-1:-1::0;;;;;17207:25:0;::::2;17189:15;17207:25:::0;;;:11:::2;:25;::::0;;;;:27;;;17189:15;17207:27:::2;::::0;::::2;:::i;:::-;::::0;;;-1:-1:-1;17277:53:0::2;::::0;;::::2;::::0;::::2;::::0;;17287:10:::2;17277:53:::0;;;::::2;::::0;;::::2;::::0;;;17308:15:::2;17277:53:::0;;;;;;17325:4:::2;17277:53:::0;;;;;;-1:-1:-1;;;;;17245:20:0;;::::2;-1:-1:-1::0;17245:20:0;;;:6:::2;:20:::0;;;;;:29;;;;;;;;:85;;;;-1:-1:-1;;;;;;17245:85:0::2;::::0;::::2;::::0;;;::::2;::::0;;;;;;::::2;::::0;;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;::::2;::::0;;-1:-1:-1;;17245:85:0::2;::::0;::::2;;::::0;;;::::2;::::0;;;17341:27;;:13:::2;:27:::0;;;;;:39;;;;;;;:49;;17277:53;;-1:-1:-1;17384:6:0;;17341:39;;-1:-1:-1;17341:49:0::2;::::0;17384:6;;17341:49:::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;17401:27:0;::::2;;::::0;;;:13:::2;:27;::::0;;;;;;;17429:10:::2;17401:39:::0;;;;;;;:49;;17444:6;;17401:27;:49:::2;::::0;17444:6;;17401:49:::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;17466:77:0;::::2;17505:25;::::0;;;:11:::2;:25;::::0;;;;;17466:77:::2;::::0;17493:10:::2;::::0;17505:29:::2;::::0;17533:1:::2;::::0;17505:29:::2;:::i;:::-;17466:77;::::0;;-1:-1:-1;;;;;16587:32:1;;;16569:51;;16651:2;16636:18;;16629:34;;;;16679:18;;16672:34;;;16557:2;16542:18;17466:77:0::2;;;;;;;-1:-1:-1::0;;6204:6:0;:14;;-1:-1:-1;;6204:14:0;;;-1:-1:-1;16778:773:0:o;10310:440::-;-1:-1:-1;;;;;10474:27:0;;;10415:14;10474:27;;;:13;:27;;;;;;;;:40;;;;;;;;;;;;;10431:21;;10529:11;;;10525:183;;10557:58;;;;;;;;;;;;;;;;;;;10525:183;;;10648:48;;;;;;;;;;;;;;;;;;;10525:183;10310:440;;;;;:::o;6720:118::-;6375:5;;-1:-1:-1;;;;;6375:5:0;6361:10;:19;6353:60;;;;-1:-1:-1;;;6353:60:0;;;;;;;:::i;:::-;5558:7:::1;::::0;::::1;::::0;::::1;;;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;6779:7:::2;:14:::0;;-1:-1:-1;;6779:14:0::2;;;::::0;;6720:118::o;11007:271::-;-1:-1:-1;;;;;11127:25:0;;11092:4;11127:25;;;:11;:25;;;;;;11117:35;;11109:64;;;;-1:-1:-1;;;11109:64:0;;8466:2:1;11109:64:0;;;8448:21:1;8505:2;8485:18;;;8478:30;-1:-1:-1;;;8524:18:1;;;8517:46;8580:18;;11109:64:0;8264:340:1;11109:64:0;-1:-1:-1;;;;;;11209:20:0;;;11184:22;11209:20;;;:6;:20;;;;;;;;:29;;;;;;;;;;11184:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11007:271::o;8449:560::-;8563:25;;;;;;;;;:20;:25;;;8537:13;;8563:25;8601:375;-1:-1:-1;;;;;8625:25:0;;;;;;:11;:25;;;;;;8621:29;;8601:375;;;-1:-1:-1;;;;;8701:20:0;;;8672:26;8701:20;;;:6;:20;;;;;;;;:23;;;;;;;;;8672:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8743:25;;;:47;;;;;8772:9;:18;;;8743:47;8739:226;;;8844:6;8860:19;8877:1;8860:16;:19::i;:::-;8895:46;8923:12;-1:-1:-1;;;;;8895:46:0;8938:2;8895:19;:46::i;:::-;8827:121;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8811:138;;8739:226;-1:-1:-1;8652:3:0;;8601:375;;;-1:-1:-1;8995:6:0;8449:560;-1:-1:-1;;;8449:560:0:o;13063:156::-;6595:7;;;;6594:8;6586:42;;;;-1:-1:-1;;;6586:42:0;;18080:2:1;6586:42:0;;;18062:21:1;18119:2;18099:18;;;18092:30;-1:-1:-1;;;18138:18:1;;;18131:51;18199:18;;6586:42:0;17878:345:1;6586:42:0;13108:5:::1;:18:::0;;-1:-1:-1;;;;;;13108:18:0::1;13116:10;13108:18:::0;;::::1;::::0;;;13150:12:::1;-1:-1:-1::0;13137:25:0;;;13178:33:::1;::::0;2474:25:1;;;13178:33:0::1;::::0;2462:2:1;2447:18;13178:33:0::1;;;;;;;6651:7:::0;:14;;-1:-1:-1;;6651:14:0;6661:4;6651:14;;;13063:156::o;20268:952::-;6123:6;;;;;;;6122:7;6114:43;;;;-1:-1:-1;;;6114:43:0;;;;;;;:::i;:::-;6168:6;:13;;-1:-1:-1;;6168:13:0;;;;;;;;5558:7;::::1;6168:13:::0;5558:7:::1;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20379:34:0;::::2;;::::0;;;:20:::2;:34;::::0;;;;;::::2;;20371:77;;;;-1:-1:-1::0;;;20371:77:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20485:20:0;::::2;20459:23;20485:20:::0;;;:6:::2;:20;::::0;;;;;;;:29;;;;;;;;20533:14:::2;::::0;::::2;::::0;::::2;;20525:46;;;::::0;-1:-1:-1;;;20525:46:0;;12868:2:1;20525:46:0::2;::::0;::::2;12850:21:1::0;12907:2;12887:18;;;12880:30;-1:-1:-1;;;12926:18:1;;;12919:49;12985:18;;20525:46:0::2;12666:343:1::0;20525:46:0::2;20590:11:::0;;-1:-1:-1;;;;;20590:11:0::2;20605:10;20590:25;20582:64;;;::::0;-1:-1:-1;;;20582:64:0;;18430:2:1;20582:64:0::2;::::0;::::2;18412:21:1::0;18469:2;18449:18;;;18442:30;18508:28;18488:18;;;18481:56;18554:18;;20582:64:0::2;18228:350:1::0;20582:64:0::2;-1:-1:-1::0;;;;;20702:32:0;::::2;;::::0;;;:18:::2;:32;::::0;;;;;20684:15:::2;::::0;::::2;::::0;:50:::2;::::0;20702:32;20684:50:::2;:::i;:::-;20665:15;:69;;20657:118;;;::::0;-1:-1:-1;;;20657:118:0;;18785:2:1;20657:118:0::2;::::0;::::2;18767:21:1::0;18824:2;18804:18;;;18797:30;18863:34;18843:18;;;18836:62;-1:-1:-1;;;18914:18:1;;;18907:34;18958:19;;20657:118:0::2;18583:400:1::0;20657:118:0::2;-1:-1:-1::0;;;;;20805:27:0;::::2;20788:14;20805:27:::0;;;:13:::2;:27;::::0;;;;;;;20833:10:::2;20805:39:::0;;;;;;;;20863:10;20855:39:::2;;;::::0;-1:-1:-1;;;20855:39:0;;19190:2:1;20855:39:0::2;::::0;::::2;19172:21:1::0;19229:2;19209:18;;;19202:30;-1:-1:-1;;;19248:18:1;;;19241:46;19304:18;;20855:39:0::2;18988:340:1::0;20855:39:0::2;-1:-1:-1::0;;;;;20907:27:0;::::2;;::::0;;;:13:::2;:27;::::0;;;;;;;20935:10:::2;20907:39:::0;;;;;;;:49;;20950:6;;20907:27;:49:::2;::::0;20950:6;;20907:49:::2;:::i;:::-;::::0;;;-1:-1:-1;;20969:14:0::2;::::0;::::2;:22:::0;;-1:-1:-1;;20969:22:0::2;::::0;;21012:68:::2;::::0;-1:-1:-1;;;21012:68:0;;21054:4:::2;21012:68;::::0;::::2;15455:34:1::0;21061:10:0::2;15505:18:1::0;;;15498:43;15557:18;;;15550:34;;;-1:-1:-1;;;;;21012:33:0;::::2;::::0;::::2;::::0;15390:18:1;;21012:68:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21004:102;;;::::0;-1:-1:-1;;;21004:102:0;;16079:2:1;21004:102:0::2;::::0;::::2;16061:21:1::0;16118:2;16098:18;;;16091:30;-1:-1:-1;;;16137:18:1;;;16130:51;16198:18;;21004:102:0::2;15877:345:1::0;21004:102:0::2;-1:-1:-1::0;;;;;21122:90:0;::::2;21172:27;::::0;;;:13:::2;:27;::::0;;;;;;;21160:10:::2;21172:39:::0;;;;;;;;;;;21122:90;;19535:25:1;;;19576:18;;;19569:60;;;;19645:18;;19638:34;;;;21122:90:0::2;::::0;19523:2:1;19508:18;21122:90:0::2;;;;;;;-1:-1:-1::0;;6204:6:0;:14;;-1:-1:-1;;6204:14:0;;;-1:-1:-1;;20268:952:0:o;15995:215::-;6375:5;;-1:-1:-1;;;;;6375:5:0;6361:10;:19;6353:60;;;;-1:-1:-1;;;6353:60:0;;;;;;;:::i;:::-;5558:7:::1;::::0;::::1;::::0;::::1;;;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16106:32:0;::::2;;::::0;;;:18:::2;:32;::::0;;;;;;:39;;;16161:41;::::2;::::0;::::2;::::0;16141:4;2474:25:1;;2462:2;2447:18;;2328:177;16161:41:0::2;;;;;;;;15995:215:::0;;:::o;14199:290::-;6375:5;;-1:-1:-1;;;;;6375:5:0;6361:10;:19;6353:60;;;;-1:-1:-1;;;6353:60:0;;;;;;;:::i;:::-;5558:7:::1;::::0;::::1;::::0;::::1;;;5557:8;5549:39;;;;-1:-1:-1::0;;;5549:39:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14305:26:0;::::2;14297:79;;;;-1:-1:-1::0;;;14297:79:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14387:34:0;::::2;;::::0;;;:20:::2;:34;::::0;;;;;:41;;-1:-1:-1;;14387:41:0::2;14424:4;14387:41;::::0;;14444:37;::::2;::::0;14387:34;14444:37:::2;14199:290:::0;:::o;12222:595::-;12322:25;;;;;;;;;:20;:25;;;12296:13;;12322:25;12360:424;-1:-1:-1;;;;;12384:25:0;;;;;;:11;:25;;;;;;12380:29;;12360:424;;;-1:-1:-1;;;;;12456:20:0;;;12431:22;12456:20;;;:6;:20;;;;;;;;:23;;;;;;;;;12431:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12494:279;;-1:-1:-1;;;;;12550:27:0;;;12533:14;12550:27;;;:13;:27;;;;;;;;12578:11;;12550:40;;;;;;;;;;12691:11;;12550:40;;12642:6;;12663:45;;;12705:2;12663:19;:45::i;:::-;12725:24;12742:6;12725:16;:24::i;:::-;12625:131;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;12609:148;;12514:259;12494:279;-1:-1:-1;12411:3:0;;12360:424;;;-1:-1:-1;12803:6:0;12222:595;-1:-1:-1;;12222:595:0:o;7806:101::-;7854:13;7887:12;7880:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7806:101;:::o;11629:346::-;-1:-1:-1;;;;;11757:27:0;;;11740:14;11757:27;;;:13;:27;;;;;;;;:35;;;;;;;;;;;;11714:13;;11807:11;;;11803:165;;11835:57;;;;;;;;;;;;;;;;;;;;;;11803:165;11932:24;11949:6;11932:16;:24::i;:::-;11925:31;;;;;1832:138;1890:13;1923:39;1951:4;-1:-1:-1;;;;;1935:22:0;1959:2;1923:11;:39::i;1037:580::-;1093:13;1165:5;1174:1;1165:10;1161:53;;-1:-1:-1;;1192:10:0;;;;;;;;;;;;-1:-1:-1;;;1192:10:0;;;;;1037:580::o;1161:53::-;1241:5;1226:12;1282:78;1289:9;;1282:78;;1315:8;;;;:::i;:::-;;-1:-1:-1;1338:10:0;;-1:-1:-1;1346:2:0;1338:10;;:::i;:::-;;;1282:78;;;1372:19;1404:6;1394:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1394:17:0;;1372:39;;1422:154;1429:10;;1422:154;;1456:11;1466:1;1456:11;;:::i;:::-;;-1:-1:-1;1525:10:0;1533:2;1525:5;:10;:::i;:::-;1512:24;;:2;:24;:::i;:::-;1499:39;;1482:6;1489;1482:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;1482:56:0;;;;;;;;-1:-1:-1;1553:11:0;1562:2;1553:11;;:::i;:::-;;;1422:154;;;1602:6;1037:580;-1:-1:-1;;;;1037:580:0:o;2295:483::-;2370:13;2396:19;2428:10;2432:6;2428:1;:10;:::i;:::-;:14;;2441:1;2428:14;:::i;:::-;2418:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2418:25:0;;2396:47;;-1:-1:-1;;;2454:6:0;2461:1;2454:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2454:15:0;;;;;;;;;-1:-1:-1;;;2480:6:0;2487:1;2480:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;2480:15:0;;;;;;;;-1:-1:-1;2511:9:0;2523:10;2527:6;2523:1;:10;:::i;:::-;:14;;2536:1;2523:14;:::i;:::-;2511:26;;2506:167;2543:1;2539;:5;2506:167;;;2623:1;2610:10;2618:2;2610:5;:10;:::i;:::-;:14;:22;;2631:1;2610:22;;;2627:1;2610:22;2591:42;;2596:10;2604:2;2596:5;:10;:::i;:::-;2591:15;;:2;:15;:::i;:::-;:42;;;;:::i;:::-;2578:57;;2566:6;2573:1;2566:9;;;;;;;;:::i;:::-;;;;:69;-1:-1:-1;;;;;2566:69:0;;;;;;;;-1:-1:-1;2650:11:0;2659:2;2650:11;;:::i;:::-;;-1:-1:-1;2546:3:0;;;:::i;:::-;;;2506:167;;;-1:-1:-1;2691:10:0;;2683:55;;;;-1:-1:-1;;;2683:55:0;;21872:2:1;2683:55:0;;;21854:21:1;;;21891:18;;;21884:30;21950:34;21930:18;;;21923:62;22002:18;;2683:55:0;21670:356:1;2683:55:0;2763:6;2295:483;-1:-1:-1;;;2295:483:0:o;14:592:1:-;85:6;93;146:2;134:9;125:7;121:23;117:32;114:52;;;162:1;159;152:12;114:52;202:9;189:23;231:18;272:2;264:6;261:14;258:34;;;288:1;285;278:12;258:34;326:6;315:9;311:22;301:32;;371:7;364:4;360:2;356:13;352:27;342:55;;393:1;390;383:12;342:55;433:2;420:16;459:2;451:6;448:14;445:34;;;475:1;472;465:12;445:34;520:7;515:2;506:6;502:2;498:15;494:24;491:37;488:57;;;541:1;538;531:12;488:57;572:2;564:11;;;;;594:6;;-1:-1:-1;14:592:1;;-1:-1:-1;;;;14:592:1:o;611:173::-;679:20;;-1:-1:-1;;;;;728:31:1;;718:42;;708:70;;774:1;771;764:12;708:70;611:173;;;:::o;789:254::-;857:6;865;918:2;906:9;897:7;893:23;889:32;886:52;;;934:1;931;924:12;886:52;957:29;976:9;957:29;:::i;:::-;947:39;1033:2;1018:18;;;;1005:32;;-1:-1:-1;;;789:254:1:o;1048:250::-;1133:1;1143:113;1157:6;1154:1;1151:13;1143:113;;;1233:11;;;1227:18;1214:11;;;1207:39;1179:2;1172:10;1143:113;;;-1:-1:-1;;1290:1:1;1272:16;;1265:27;1048:250::o;1303:271::-;1345:3;1383:5;1377:12;1410:6;1405:3;1398:19;1426:76;1495:6;1488:4;1483:3;1479:14;1472:4;1465:5;1461:16;1426:76;:::i;:::-;1556:2;1535:15;-1:-1:-1;;1531:29:1;1522:39;;;;1563:4;1518:50;;1303:271;-1:-1:-1;;1303:271:1:o;1579:220::-;1728:2;1717:9;1710:21;1691:4;1748:45;1789:2;1778:9;1774:18;1766:6;1748:45;:::i;1804:186::-;1863:6;1916:2;1904:9;1895:7;1891:23;1887:32;1884:52;;;1932:1;1929;1922:12;1884:52;1955:29;1974:9;1955:29;:::i;1995:328::-;2072:6;2080;2088;2141:2;2129:9;2120:7;2116:23;2112:32;2109:52;;;2157:1;2154;2147:12;2109:52;2180:29;2199:9;2180:29;:::i;:::-;2170:39;;2256:2;2245:9;2241:18;2228:32;2218:42;;2279:38;2313:2;2302:9;2298:18;2279:38;:::i;:::-;2269:48;;1995:328;;;;;:::o;2510:260::-;2578:6;2586;2639:2;2627:9;2618:7;2614:23;2610:32;2607:52;;;2655:1;2652;2645:12;2607:52;2678:29;2697:9;2678:29;:::i;:::-;2668:39;;2726:38;2760:2;2749:9;2745:18;2726:38;:::i;:::-;2716:48;;2510:260;;;;;:::o;2775:291::-;2952:6;2941:9;2934:25;2995:2;2990;2979:9;2975:18;2968:30;2915:4;3015:45;3056:2;3045:9;3041:18;3033:6;3015:45;:::i;3471:352::-;3673:2;3655:21;;;3712:2;3692:18;;;3685:30;3751;3746:2;3731:18;;3724:58;3814:2;3799:18;;3471:352::o;3828:342::-;4030:2;4012:21;;;4069:2;4049:18;;;4042:30;-1:-1:-1;;;4103:2:1;4088:18;;4081:48;4161:2;4146:18;;3828:342::o;4175:380::-;4254:1;4250:12;;;;4297;;;4318:61;;4372:4;4364:6;4360:17;4350:27;;4318:61;4425:2;4417:6;4414:14;4394:18;4391:38;4388:161;;4471:10;4466:3;4462:20;4459:1;4452:31;4506:4;4503:1;4496:15;4534:4;4531:1;4524:15;4388:161;;4175:380;;;:::o;4689:845::-;4819:3;4848:1;4881:6;4875:13;4911:36;4937:9;4911:36;:::i;:::-;4966:1;4983:17;;;5009:133;;;;5156:1;5151:358;;;;4976:533;;5009:133;-1:-1:-1;;5042:24:1;;5030:37;;5115:14;;5108:22;5096:35;;5087:45;;;-1:-1:-1;5009:133:1;;5151:358;5182:6;5179:1;5172:17;5212:4;5257;5254:1;5244:18;5284:1;5298:165;5312:6;5309:1;5306:13;5298:165;;;5390:14;;5377:11;;;5370:35;5433:16;;;;5327:10;;5298:165;;;5302:3;;;5492:6;5487:3;5483:16;5476:23;;4976:533;-1:-1:-1;5525:3:1;;4689:845;-1:-1:-1;;;;;;4689:845:1:o;5539:271::-;5722:6;5714;5709:3;5696:33;5678:3;5748:16;;5773:13;;;5748:16;5539:271;-1:-1:-1;5539:271:1:o;6232:127::-;6293:10;6288:3;6284:20;6281:1;6274:31;6324:4;6321:1;6314:15;6348:4;6345:1;6338:15;6364:518;6466:2;6461:3;6458:11;6455:421;;;6502:5;6499:1;6492:16;6546:4;6543:1;6533:18;6616:2;6604:10;6600:19;6597:1;6593:27;6587:4;6583:38;6652:4;6640:10;6637:20;6634:47;;;-1:-1:-1;6675:4:1;6634:47;6730:2;6725:3;6721:12;6718:1;6714:20;6708:4;6704:31;6694:41;;6785:81;6803:2;6796:5;6793:13;6785:81;;;6862:1;6848:16;;6829:1;6818:13;6785:81;;;6789:3;;6364:518;;;:::o;7058:1201::-;7182:18;7177:3;7174:27;7171:53;;;7204:18;;:::i;:::-;7233:94;7323:3;7283:38;7315:4;7309:11;7283:38;:::i;:::-;7277:4;7233:94;:::i;:::-;7353:1;7378:2;7373:3;7370:11;7395:1;7390:611;;;;8045:1;8062:3;8059:93;;;-1:-1:-1;8118:19:1;;;8105:33;8059:93;-1:-1:-1;;7015:1:1;7011:11;;;7007:24;7003:29;6993:40;7039:1;7035:11;;;6990:57;8165:78;;7363:890;;7390:611;4636:1;4629:14;;;4673:4;4660:18;;-1:-1:-1;;7426:17:1;;;7544:229;7558:7;7555:1;7552:14;7544:229;;;7647:19;;;7634:33;7619:49;;7754:4;7739:20;;;;7707:1;7695:14;;;;7574:12;7544:229;;;7548:3;7801;7792:7;7789:16;7786:159;;;7925:1;7921:6;7915:3;7909;7906:1;7902:11;7898:21;7894:34;7890:39;7877:9;7872:3;7868:19;7855:33;7851:79;7843:6;7836:95;7786:159;;;7988:1;7982:3;7979:1;7975:11;7971:19;7965:4;7958:33;7363:890;;7058:1201;;;:::o;8736:2049::-;-1:-1:-1;;;9844:3:1;9837:22;9819:3;9888:6;9882:13;9904:74;9971:6;9967:1;9962:3;9958:11;9951:4;9943:6;9939:17;9904:74;:::i;:::-;-1:-1:-1;;;10067:1:1;9997:16;;;10059:10;;;10052:22;;;-1:-1:-1;;;10098:1:1;10090:10;;10083:32;10140:13;;10162:76;10140:13;10224:2;10216:11;;10209:4;10197:17;;10162:76;:::i;:::-;10298:2;10257:17;;10290:11;;;10283:23;;;-1:-1:-1;;;10330:2:1;10322:11;;10315:34;10374:13;;10396:76;10374:13;10458:2;10450:11;;10443:4;10431:17;;10396:76;:::i;:::-;10532:2;10491:17;;10524:11;;;10517:23;-1:-1:-1;;;10564:2:1;10556:11;;10549:34;10608:13;;10630:76;10608:13;10692:2;10684:11;;10677:4;10665:17;;10630:76;:::i;:::-;10722:57;10775:2;10764:8;10760:2;10756:17;10752:26;-1:-1:-1;;;8674:24:1;;8723:1;8714:11;;8609:122;10722:57;10715:64;8736:2049;-1:-1:-1;;;;;;;;8736:2049:1:o;11546:404::-;11748:2;11730:21;;;11787:2;11767:18;;;11760:30;11826:34;11821:2;11806:18;;11799:62;-1:-1:-1;;;11892:2:1;11877:18;;11870:38;11940:3;11925:19;;11546:404::o;11955:347::-;12157:2;12139:21;;;12196:2;12176:18;;;12169:30;12235:25;12230:2;12215:18;;12208:53;12293:2;12278:18;;11955:347::o;12307:354::-;12509:2;12491:21;;;12548:2;12528:18;;;12521:30;12587:32;12582:2;12567:18;;12560:60;12652:2;12637:18;;12307:354::o;13824:127::-;13885:10;13880:3;13876:20;13873:1;13866:31;13916:4;13913:1;13906:15;13940:4;13937:1;13930:15;13956:128;14023:9;;;14044:11;;;14041:37;;;14058:18;;:::i;14089:125::-;14154:9;;;14175:10;;;14172:36;;;14188:18;;:::i;14671:184::-;14741:6;14794:2;14782:9;14773:7;14769:23;14765:32;14762:52;;;14810:1;14807;14800:12;14762:52;-1:-1:-1;14833:16:1;;14671:184;-1:-1:-1;14671:184:1:o;15595:277::-;15662:6;15715:2;15703:9;15694:7;15690:23;15686:32;15683:52;;;15731:1;15728;15721:12;15683:52;15763:9;15757:16;15816:5;15809:13;15802:21;15795:5;15792:32;15782:60;;15838:1;15835;15828:12;16227:135;16266:3;16287:17;;;16284:43;;16307:18;;:::i;:::-;-1:-1:-1;16354:1:1;16343:13;;16227:135::o;16717:1156::-;17247:3;17285:6;17279:13;17301:66;17360:6;17355:3;17348:4;17340:6;17336:17;17301:66;:::i;:::-;-1:-1:-1;;;17389:16:1;;;17414:21;;;17460:13;;17482:78;17460:13;17547:1;17536:13;;17529:4;17517:17;;17482:78;:::i;:::-;-1:-1:-1;;;17623:1:1;17579:20;;;;17615:10;;;17608:32;17665:13;;17687:76;17665:13;17749:2;17741:11;;17734:4;17722:17;;17687:76;:::i;:::-;-1:-1:-1;;;17823:2:1;17782:17;;;;17815:11;;;17808:32;17864:2;17856:11;;16717:1156;-1:-1:-1;;;;;16717:1156:1:o;19683:1162::-;20213:3;20251:6;20245:13;20267:66;20326:6;20321:3;20314:4;20306:6;20302:17;20267:66;:::i;:::-;-1:-1:-1;;;20355:16:1;;;20380:26;;;20431:13;;20453:78;20431:13;20518:1;20507:13;;20500:4;20488:17;;20453:78;:::i;:::-;-1:-1:-1;;;20594:1:1;20550:20;;;;20586:10;;;20579:33;20637:13;;20659:76;20637:13;20721:2;20713:11;;20706:4;20694:17;;20659:76;:::i;:::-;-1:-1:-1;;;20795:2:1;20754:17;;;;20787:11;;;20780:32;20836:2;20828:11;;19683:1162;-1:-1:-1;;;;;19683:1162:1:o;20850:127::-;20911:10;20906:3;20902:20;20899:1;20892:31;20942:4;20939:1;20932:15;20966:4;20963:1;20956:15;20982:120;21022:1;21048;21038:35;;21053:18;;:::i;:::-;-1:-1:-1;21087:9:1;;20982:120::o;21107:112::-;21139:1;21165;21155:35;;21170:18;;:::i;:::-;-1:-1:-1;21204:9:1;;21107:112::o;21224:127::-;21285:10;21280:3;21276:20;21273:1;21266:31;21316:4;21313:1;21306:15;21340:4;21337:1;21330:15;21356:168;21429:9;;;21460;;21477:15;;;21471:22;;21457:37;21447:71;;21498:18;;:::i;21529:136::-;21568:3;21596:5;21586:39;;21605:18;;:::i;:::-;-1:-1:-1;;;21641:18:1;;21529:136::o

Swarm Source

ipfs://2d459e6bec0e553ce6e09242a6d8738b83b146404d3b9abf2707cfd3384a7a6f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.