ETH Price: $3,432.67 (-1.74%)
Gas: 6 Gwei

Contract

0x51c6bb253c271AD25CA388FE48FCd9664f4f41b7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Rewards167282102023-02-28 17:42:23505 days ago1677606143IN
0x51c6bb25...64f4f41b7
0 ETH0.0007874430.61236951
Remove Tokens162790912022-12-27 22:32:59568 days ago1672180379IN
0x51c6bb25...64f4f41b7
0 ETH0.0019321624.15965645
Unstake162366682022-12-22 0:30:59574 days ago1671669059IN
0x51c6bb25...64f4f41b7
0 ETH0.0052453515.29463732
Unstake162366472022-12-22 0:26:47574 days ago1671668807IN
0x51c6bb25...64f4f41b7
0 ETH0.0057961711.5466906
Unstake162237462022-12-20 5:14:35576 days ago1671513275IN
0x51c6bb25...64f4f41b7
0 ETH0.0048956813.13713888
Unstake162237282022-12-20 5:10:59576 days ago1671513059IN
0x51c6bb25...64f4f41b7
0 ETH0.0048220112.41072085
Unstake162236472022-12-20 4:54:47576 days ago1671512087IN
0x51c6bb25...64f4f41b7
0 ETH0.0081023414.36219301
Claim Rewards162094792022-12-18 5:27:11578 days ago1671341231IN
0x51c6bb25...64f4f41b7
0 ETH0.0003372113.10946397
Unstake162093862022-12-18 5:08:23578 days ago1671340103IN
0x51c6bb25...64f4f41b7
0 ETH0.0013480113.95211504
Unstake162093852022-12-18 5:08:11578 days ago1671340091IN
0x51c6bb25...64f4f41b7
0 ETH0.0015061912.51467365
Unstake162093832022-12-18 5:07:47578 days ago1671340067IN
0x51c6bb25...64f4f41b7
0 ETH0.001836913.55171664
Unstake162093822022-12-18 5:07:35578 days ago1671340055IN
0x51c6bb25...64f4f41b7
0 ETH0.002160914.33515523
Unstake162093802022-12-18 5:07:11578 days ago1671340031IN
0x51c6bb25...64f4f41b7
0 ETH0.0022210613.38507758
Unstake162093782022-12-18 5:06:47578 days ago1671340007IN
0x51c6bb25...64f4f41b7
0 ETH0.0025896814.24184741
Unstake162093732022-12-18 5:05:47578 days ago1671339947IN
0x51c6bb25...64f4f41b7
0 ETH0.0028192814.15673916
Unstake162093722022-12-18 5:05:23578 days ago1671339923IN
0x51c6bb25...64f4f41b7
0 ETH0.0030928614.38218878
Unstake162093702022-12-18 5:04:59578 days ago1671339899IN
0x51c6bb25...64f4f41b7
0 ETH0.0031759513.8791047
Unstake162093672022-12-18 5:04:23578 days ago1671339863IN
0x51c6bb25...64f4f41b7
0 ETH0.003192713.00702364
Claim Rewards162092792022-12-18 4:46:47578 days ago1671338807IN
0x51c6bb25...64f4f41b7
0 ETH0.0027835614.9925712
Unstake162092422022-12-18 4:39:23578 days ago1671338363IN
0x51c6bb25...64f4f41b7
0 ETH0.003524613.63421028
Unstake162089362022-12-18 3:37:35578 days ago1671334655IN
0x51c6bb25...64f4f41b7
0 ETH0.004389615.83347596
Unstake162088942022-12-18 3:28:59578 days ago1671334139IN
0x51c6bb25...64f4f41b7
0 ETH0.0058749713.62021708
Stake161844742022-12-14 17:37:47581 days ago1671039467IN
0x51c6bb25...64f4f41b7
0 ETH0.0038996621.49926501
Stake161844712022-12-14 17:37:11581 days ago1671039431IN
0x51c6bb25...64f4f41b7
0 ETH0.0049204923.2530828
Stake161829142022-12-14 12:24:23581 days ago1671020663IN
0x51c6bb25...64f4f41b7
0 ETH0.0034822315.09381131
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NftStaking

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-12
*/

//SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.7;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address _owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

interface IERC721 {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface ERC721TokenReceiver {
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) external returns(bytes4);
}

contract NftStaking is ERC721TokenReceiver {

    enum StakeType {
        LOTTERY, APY
    }

    struct StakeSettings {
        bool enabled;
        uint256 timeBetweenRewards;
        uint256 rewardPerToken;
        uint256 minimumStakeTime;
        uint256 startTime;
        Stake[] stakings;
    }

    struct StakeInfo {
        StakeType stakeType;
        bool enabled;
        uint256 timeBetweenRewards;
        uint256 rewardPerToken;
        uint256 minimumStakeTime;
    }

    struct Stake
    {
        address holder;
        StakeType stakeType;
        uint256 tokenId;
        uint256 stakeTime;
        uint256 lastClaimTime;
        uint256 unstakeTime;
    }

    struct StakedNftInfo
    {
        StakeType stakeType;
        uint256 tokenId;
        string uri;
        uint256 stakeTime;
        uint256 owed;
        uint256 lastClaimed;
        uint256 timeUntilNextReward;
    }

    struct Map 
    {
        StakeType stakeType;
        uint256 index;
    }

    struct Lottery
    {
        bool running;
        address token;
        uint256 prize;
        uint256 totalTickets;
        address winner;
    }

    address public owner;

    Lottery public currentLottery;
    Lottery[] public lotteryWinners;

    uint256 private nonce;
    mapping (address => uint256[]) private ownerStakings;
    mapping (uint256 => Map) private indexMap;
    mapping (StakeType => StakeSettings) private stakes;
    uint256[] private lotteryMap;

    IERC721Metadata private _nftContract;
    IERC20 private _rewardToken;

    modifier onlyOwner() {
        require(msg.sender == owner, "can only be called by the contract owner");
        _;
    }

    modifier whenEnabled(StakeType t) {
        require(stakes[t].enabled || msg.sender == owner, "staking not enabled");
        _;
    }

    constructor() {
        owner = msg.sender;

        if (block.chainid == 1) {
            _nftContract = IERC721Metadata(0x67536f6E4412663E2D3Ee7Ffc7b9F79440F8e42A);
            _rewardToken = IERC20(0xBeC5938FD565CbEc72107eE39CdE1bc78049537d);
        } else if (block.chainid == 3 || block.chainid == 4  || block.chainid == 97 || block.chainid == 5) {
            _nftContract = IERC721Metadata(0xb48408795A879d7e64A356bB71a2a22adE7a75eF);
            _rewardToken = IERC20(0x2891372D5c2727aC939BF111C45333735d537f09);
        } else {
            revert("Unknown Chain ID");
        }

        stakes[StakeType.APY].enabled = true;
        stakes[StakeType.APY].timeBetweenRewards = 60 * 60 * 24;
        stakes[StakeType.APY].startTime = block.timestamp;
        stakes[StakeType.APY].rewardPerToken = 1 * 10 ** 18;
        stakes[StakeType.APY].minimumStakeTime = 60 * 60 * 24 * 7;

        stakes[StakeType.LOTTERY].enabled = true;
        stakes[StakeType.LOTTERY].timeBetweenRewards = 60 * 60 * 24;
        stakes[StakeType.LOTTERY].startTime = block.timestamp;
        stakes[StakeType.LOTTERY].rewardPerToken = 1;
        stakes[StakeType.LOTTERY].minimumStakeTime = 60 * 60 * 24;
    }

    function info() external view returns (
        StakedNftInfo[] memory stakedNfts,
        Lottery memory lottery,
        address rewardToken,
        address nftContract,
        StakeInfo memory apyStake,
        StakeInfo memory lotteryStake
    ) {
        uint256 totalStaked = ownerStakings[msg.sender].length;
        stakedNfts = new StakedNftInfo[](totalStaked);
        for (uint256 i = 0; i < totalStaked; i ++) {

            Map storage m = indexMap[ownerStakings[msg.sender][i]];
            Stake storage s = stakes[m.stakeType].stakings[m.index];

            (uint256 owed,) = rewardsOwed(m.stakeType, s);
            stakedNfts[i] = StakedNftInfo(
                m.stakeType,
                s.tokenId,
                _nftContract.tokenURI(s.tokenId),
                s.stakeTime,
                owed,
                s.lastClaimTime,
                timeUntilReward(m.stakeType, s)
             );
        }

        lottery = currentLottery;

        rewardToken = address(_rewardToken);
        nftContract = address(_nftContract);

        apyStake = StakeInfo(
            StakeType.APY, 
            stakes[StakeType.APY].enabled, 
            stakes[StakeType.APY].timeBetweenRewards, 
            stakes[StakeType.APY].rewardPerToken, 
            stakes[StakeType.APY].minimumStakeTime
        );

        lotteryStake = StakeInfo(
            StakeType.LOTTERY, 
            stakes[StakeType.LOTTERY].enabled, 
            stakes[StakeType.LOTTERY].timeBetweenRewards, 
            stakes[StakeType.LOTTERY].rewardPerToken, 
            stakes[StakeType.LOTTERY].minimumStakeTime
        );
    }

    function stake(StakeType stakeType, uint256 tokenId) external whenEnabled(stakeType) {
        require(_nftContract.getApproved(tokenId) == address(this), "Must approve this contract as an operator");
        _nftContract.safeTransferFrom(msg.sender, address(this), tokenId);
        Stake memory s = Stake(msg.sender, stakeType, tokenId, block.timestamp, block.timestamp, 0);
        indexMap[tokenId] = Map(stakeType, stakes[stakeType].stakings.length);
        if (stakeType == StakeType.LOTTERY) {
            lotteryMap.push(stakes[stakeType].stakings.length);
        }
        stakes[stakeType].stakings.push(s);
        ownerStakings[msg.sender].push(tokenId);
    }

    function unstake(uint256 tokenId) external {

        Map storage m = indexMap[tokenId];
        Stake storage s = stakes[m.stakeType].stakings[m.index];

        require(s.unstakeTime == 0, "This NFT has already been unstaked");
        require(s.holder == msg.sender || msg.sender == owner, "You do not own this token");

        if (m.stakeType == StakeType.APY && stakes[m.stakeType].enabled) {
            claimWalletRewards(s.holder);
        }

        _nftContract.safeTransferFrom(address(this), s.holder, tokenId);
        s.unstakeTime = block.timestamp;
        removeOwnerStaking(s.holder, tokenId);
    }
 
    function claimRewards() external whenEnabled(StakeType.APY) {
        claimWalletRewards(msg.sender);
    }

    function pastLotteries() external view returns (uint256) {
        return lotteryWinners.length;
    }


    // Admin Methods

    function removeEth() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(owner).transfer(balance);
    }
    
    function removeTokens(address token) external onlyOwner {
        uint256 balance = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(owner, balance);
    }

    function createLottery(address newToken, uint256 newPrize) external onlyOwner {   
        require(currentLottery.running == false, "Already an active lottery");
        currentLottery = Lottery(true, newToken, newPrize, 0, address(0));
        stakes[StakeType.LOTTERY].startTime = block.timestamp;
    }

    function drawLottery() external onlyOwner {   
        IERC20 token = IERC20(currentLottery.token);

        uint256 totalTickets;
        uint256[] memory currentLotteryMap = lotteryMap;
        delete lotteryMap;

        for (uint256 i = 0; i < currentLotteryMap.length; i++) {
            (uint256 owed,) = rewardsOwed(StakeType.LOTTERY, stakes[StakeType.LOTTERY].stakings[currentLotteryMap[i]]);
            totalTickets += owed;
            if (stakes[StakeType.LOTTERY].stakings[currentLotteryMap[i]].unstakeTime > 0) {
                lotteryMap.push(currentLotteryMap[i]);
            }
        }

        if (totalTickets > 0) {
            require(token.balanceOf(address(this)) >= currentLottery.prize, "Not enough tokens to pay winner");

            uint256 roll = requestRandomWords() % totalTickets;
            uint256 current;
            
            for (uint256 i = 0; i < currentLotteryMap.length; i++) {
                (uint256 owed,) = rewardsOwed(StakeType.LOTTERY, stakes[StakeType.LOTTERY].stakings[currentLotteryMap[i]]);
                current += owed;

                if (owed > 0 && current >= roll) {
                    currentLottery.winner = stakes[StakeType.LOTTERY].stakings[currentLotteryMap[i]].holder;
                    currentLottery.totalTickets = totalTickets;
                }
            }

            require(currentLottery.winner != address(0), "Unable to find winner"); 
            token.transfer(currentLottery.winner, currentLottery.prize);
        }

        lotteryWinners.push(currentLottery);
        currentLottery = Lottery(false, address(0), 0, 0, address(0));
    }

    function forceUnstake(uint256 tokenId) external onlyOwner {
        Map storage m = indexMap[tokenId];
        Stake storage s = stakes[m.stakeType].stakings[m.index];
        _nftContract.safeTransferFrom(address(this), s.holder, tokenId);
    }

    function setOwner(address who) external onlyOwner {
        require(who != address(0), "cannot be zero address");
        owner = who;
    }

    function setEnabled(StakeType stakeType, bool on) external onlyOwner {
        stakes[stakeType].enabled = on;
    }

    function configureStake(StakeType stakeType, uint256 _timeBetweenRewards, uint256 _rewardPerToken, uint256 _minimumStakeTime) external onlyOwner {
        stakes[stakeType].timeBetweenRewards = _timeBetweenRewards;
        stakes[stakeType].rewardPerToken = _rewardPerToken;
        stakes[stakeType].minimumStakeTime = _minimumStakeTime;
    }


    // Private Methods

    function removeOwnerStaking(address holder, uint256 tokenId) private {
        bool found;
        uint256 index = 0;
        for (index; index < ownerStakings[holder].length; index++) {
            if (ownerStakings[holder][index] == tokenId) {
                found = true;
                break;
            } 
        }

        if (found) {
            if (ownerStakings[holder].length > 1) {
                ownerStakings[holder][index] = ownerStakings[holder][ownerStakings[holder].length-1];
            }
            ownerStakings[holder].pop();
        }
    }

    function claimWalletRewards(address wallet) private {
        uint256 totalOwed;
        
        for (uint256 i = 0; i < ownerStakings[wallet].length; i ++) {
            
            Map storage m = indexMap[ownerStakings[wallet][i]];
            if (m.stakeType == StakeType.APY) {
                (uint256 owed, uint256 time) = rewardsOwed(m.stakeType, stakes[m.stakeType].stakings[m.index]);
                if (owed > 0) {
                    totalOwed += owed;
                    stakes[m.stakeType].stakings[m.index].lastClaimTime = stakes[m.stakeType].stakings[m.index].lastClaimTime + time;
                }
            }
        }

        if (totalOwed > 0) {
            _rewardToken.transfer(wallet, totalOwed);
        }
    }

    function timeUntilReward(StakeType t, Stake storage stakedToken) private view returns (uint256) {

        if (block.timestamp - stakedToken.stakeTime < stakes[t].minimumStakeTime) {
            return stakes[t].minimumStakeTime - (block.timestamp - stakedToken.stakeTime);
        }

        uint256 lastClaimTime = stakedToken.stakeTime;
        if (stakes[t].startTime > lastClaimTime) {
            lastClaimTime = stakes[t].startTime;
        } else if (stakedToken.lastClaimTime > lastClaimTime) {
            lastClaimTime = stakedToken.lastClaimTime;
        }

        if (block.timestamp - lastClaimTime >= stakes[t].timeBetweenRewards) {
            return stakes[t].timeBetweenRewards - ((block.timestamp - lastClaimTime) % stakes[t].timeBetweenRewards);
        }

        return stakes[t].timeBetweenRewards - (block.timestamp - lastClaimTime);
    }

    function rewardsOwed(StakeType t, Stake storage stakedToken) private view returns (uint256, uint256) {

        if (t == StakeType.LOTTERY && currentLottery.running == false) {
            return (0, 0);
        }

        uint256 unstakeTime = block.timestamp;
        if (stakedToken.unstakeTime > 0) {
            unstakeTime = stakedToken.unstakeTime;
        }

        if (unstakeTime - stakedToken.stakeTime >= stakes[t].minimumStakeTime) {
            uint256 lastClaimTime = stakedToken.stakeTime;
            if (stakes[t].startTime > lastClaimTime) {
                lastClaimTime = stakes[t].startTime;
            } else if (stakedToken.lastClaimTime > lastClaimTime) {
                lastClaimTime = stakedToken.lastClaimTime;
            }

            if (unstakeTime - lastClaimTime >= stakes[t].timeBetweenRewards) {
                uint256 multiplesOwed = (unstakeTime - lastClaimTime) / stakes[t].timeBetweenRewards;
                return (
                    multiplesOwed * stakes[t].rewardPerToken,
                    multiplesOwed * stakes[t].timeBetweenRewards
                );
            }
        }

        return (0, 0);
    }

    function requestRandomWords() private returns (uint256) {
        nonce += 1;
        return uint(keccak256(abi.encodePacked(nonce, msg.sender, blockhash(block.number - 1))));
    }

    function onERC721Received(address, address, uint256, bytes memory) public pure override returns(bytes4) {
        return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"));
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum NftStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"uint256","name":"_timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPerToken","type":"uint256"},{"internalType":"uint256","name":"_minimumStakeTime","type":"uint256"}],"name":"configureStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"},{"internalType":"uint256","name":"newPrize","type":"uint256"}],"name":"createLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentLottery","outputs":[{"internalType":"bool","name":"running","type":"bool"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"prize","type":"uint256"},{"internalType":"uint256","name":"totalTickets","type":"uint256"},{"internalType":"address","name":"winner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"drawLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"forceUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"info","outputs":[{"components":[{"internalType":"enum NftStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"owed","type":"uint256"},{"internalType":"uint256","name":"lastClaimed","type":"uint256"},{"internalType":"uint256","name":"timeUntilNextReward","type":"uint256"}],"internalType":"struct NftStaking.StakedNftInfo[]","name":"stakedNfts","type":"tuple[]"},{"components":[{"internalType":"bool","name":"running","type":"bool"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"prize","type":"uint256"},{"internalType":"uint256","name":"totalTickets","type":"uint256"},{"internalType":"address","name":"winner","type":"address"}],"internalType":"struct NftStaking.Lottery","name":"lottery","type":"tuple"},{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"address","name":"nftContract","type":"address"},{"components":[{"internalType":"enum NftStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"},{"internalType":"uint256","name":"minimumStakeTime","type":"uint256"}],"internalType":"struct NftStaking.StakeInfo","name":"apyStake","type":"tuple"},{"components":[{"internalType":"enum NftStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"rewardPerToken","type":"uint256"},{"internalType":"uint256","name":"minimumStakeTime","type":"uint256"}],"internalType":"struct NftStaking.StakeInfo","name":"lotteryStake","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lotteryWinners","outputs":[{"internalType":"bool","name":"running","type":"bool"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"prize","type":"uint256"},{"internalType":"uint256","name":"totalTickets","type":"uint256"},{"internalType":"address","name":"winner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pastLotteries","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum NftStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"bool","name":"on","type":"bool"}],"name":"setEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum NftStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50600080546001600160a01b0319163317905546600114156200007c57600b80546001600160a01b03199081167367536f6e4412663e2d3ee7ffc7b9f79440f8e42a17909155600c805490911673bec5938fd565cbec72107ee39cde1bc78049537d17905562000137565b46600314806200008c5750466004145b80620000985750466061145b80620000a45750466005145b15620000f857600b80546001600160a01b031990811673b48408795a879d7e64a356bb71a2a22ade7a75ef17909155600c8054909116732891372d5c2727ac939bf111c45333735d537f0917905562000137565b60405162461bcd60e51b815260206004820152601060248201526f155b9adb9bdddb8810da185a5b88125160821b604482015260640160405180910390fd5b60096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a36805460ff199081166001908117909255620151807f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a37819055427f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3a819055670de0b6b3a76400007f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a385562093a807f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3955600080527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b805490931684179092557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6c8190557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6f919091557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6d919091557fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6e55612aa680620002da6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063549d6699116100a2578063a2dc15b711610071578063a2dc15b714610280578063acf8cf3014610293578063d7a1a5b9146102a6578063dd752e55146102b9578063fc50baf5146102cc57600080fd5b8063549d66991461021e57806379ebd799146102315780638da5cb5b14610242578063914601491461026d57600080fd5b80632bd56b06116100de5780632bd56b061461018a5780632e17de78146101e9578063370158ea146101fc578063372500ab1461021657600080fd5b806313af403514610110578063150b7a02146101255780631f4a6d321461017a57806327e605ec14610182575b600080fd5b61012361011e366004612428565b6102df565b005b61015c610133366004612469565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b610123610383565b6101236103ec565b6001546002546003546004546101b79360ff8116936101009091046001600160a01b039081169391921685565b6040805195151586526001600160a01b039485166020870152850192909252606084015216608082015260a001610171565b6101236101f7366004612664565b6109c4565b610204610c0c565b604051610171969594939291906126f1565b6101236110ff565b61012361022c366004612561565b611193565b600554604051908152602001610171565b600054610255906001600160a01b031681565b6040516001600160a01b039091168152602001610171565b61012361027b366004612664565b611208565b61012361028e366004612518565b61131b565b6101236102a13660046125b4565b611431565b6101b76102b4366004612664565b611517565b6101236102c7366004612598565b611566565b6101236102da366004612428565b61199f565b6000546001600160a01b031633146103125760405162461bcd60e51b81526004016103099061284b565b60405180910390fd5b6001600160a01b0381166103615760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610309565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103ad5760405162461bcd60e51b81526004016103099061284b565b6000805460405147926001600160a01b039092169183156108fc02918491818181858888f193505050501580156103e8573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146104165760405162461bcd60e51b81526004016103099061284b565b6000600160000160019054906101000a90046001600160a01b03169050600080600a80548060200260200160405190810160405280929190818152602001828054801561048257602002820191906000526020600020905b81548152602001906001019080831161046e575b50505050509050600a600061049791906123e2565b60005b81518110156105b857600080805260096020528251610502908290600080516020612a51833981519152908690869081106104d7576104d7612a01565b6020026020010151815481106104ef576104ef612a01565b9060005260206000209060050201611acc565b50905061050f81856128ec565b60008080526009602052845191955090600080516020612a518339815191529085908590811061054157610541612a01565b60200260200101518154811061055957610559612a01565b90600052602060002090600502016004015411156105a557600a83838151811061058557610585612a01565b602090810291909101810151825460018101845560009384529190922001555b50806105b08161297a565b91505061049a565b50811561086f576002546040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561060157600080fd5b505afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610639919061267d565b10156106875760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f75676820746f6b656e7320746f207061792077696e6e6572006044820152606401610309565b600082610692611d3e565b61069c9190612995565b90506000805b8351811015610791576000808052600960205284516106df908290600080516020612a51833981519152908890869081106104d7576104d7612a01565b5090506106ec81846128ec565b92506000811180156106fe5750838310155b1561077e576000805260096020528451600080516020612a518339815191529086908490811061073057610730612a01565b60200260200101518154811061074857610748612a01565b6000918252602090912060059091020154600480546001600160a01b0319166001600160a01b0390921691909117905560038690555b50806107898161297a565b9150506106a2565b506004546001600160a01b03166107e25760405162461bcd60e51b81526020600482015260156024820152742ab730b13632903a37903334b732103bb4b73732b960591b6044820152606401610309565b6004805460025460405163a9059cbb60e01b81526001600160a01b0392831693810193909352602483015286169063a9059cbb90604401602060405180830381600087803b15801561083357600080fd5b505af1158015610847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086b9190612544565b5050505b505060058054600181810183556000928352805460049283027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db08101805460ff909316151560ff1984168117825584546001600160a01b03610100918290048116909102610100600160a81b03199092166001600160a81b03199586161791909117909155600280547f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1840155600380547f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db285015586547f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db390940180546001600160a01b031990811695909416949094179093556040805160a0810182528881526020810189905290810188905260608101889052608001879052845490931690935590849055929092558054909116905550565b60008181526008602052604081208054909190600990829060ff1660018111156109f0576109f06129d5565b6001811115610a0157610a016129d5565b8152602001908152602001600020600501826001015481548110610a2757610a27612a01565b906000526020600020906005020190508060040154600014610a965760405162461bcd60e51b815260206004820152602260248201527f54686973204e46542068617320616c7265616479206265656e20756e7374616b604482015261195960f21b6064820152608401610309565b80546001600160a01b0316331480610ab857506000546001600160a01b031633145b610b045760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000006044820152606401610309565b6001825460ff166001811115610b1c57610b1c6129d5565b148015610b665750815460099060009060ff166001811115610b4057610b406129d5565b6001811115610b5157610b516129d5565b815260208101919091526040016000205460ff165b15610b7f578054610b7f906001600160a01b0316611dbb565b600b548154604051632142170760e11b81523060048201526001600160a01b039182166024820152604481018690529116906342842e0e90606401600060405180830381600087803b158015610bd457600080fd5b505af1158015610be8573d6000803e3d6000fd5b505042600484015550508054610c07906001600160a01b031684611ff9565b505050565b6040805160a0810182526000808252602082018190529181018290526060808201839052608082018390529180610c6e6040805160a0810190915280600081526020016000151581526020016000815260200160008152602001600081525090565b610ca36040805160a0810190915280600081526020016000151581526020016000815260200160008152602001600081525090565b336000908152600760205260409020548067ffffffffffffffff811115610ccc57610ccc612a17565b604051908082528060200260200182016040528015610d3e57816020015b610d2b6040805160e0810190915280600081526020016000815260200160608152602001600081526020016000815260200160008152602001600081525090565b815260200190600190039081610cea5790505b50965060005b81811015610f24573360009081526007602052604081208054600891839185908110610d7257610d72612a01565b6000918252602080832090910154835282019290925260400181208054909250600990829060ff166001811115610dab57610dab6129d5565b6001811115610dbc57610dbc6129d5565b8152602001908152602001600020600501826001015481548110610de257610de2612a01565b60009182526020822084546005909202019250610e029060ff1683611acc565b506040805160e08101909152845491925090819060ff166001811115610e2a57610e2a6129d5565b8152600184015460208201819052600b546040805163c87b56dd60e01b81526004810193909352909201916001600160a01b03169063c87b56dd9060240160006040518083038186803b158015610e8057600080fd5b505afa158015610e94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ebc91908101906125ed565b81526002840154602082015260408101839052600384015460608201528454608090910190610eee9060ff1685612165565b8152508b8581518110610f0357610f03612a01565b60200260200101819052505050508080610f1c9061297a565b915050610d44565b506040805160a080820183526001805460ff8116151584526001600160a01b036101009091048116602085015260025484860152600354606085015260045481166080850152600c54600b548651948501909652939a509283169850929091169550908190815260200160096000600180811115610fa457610fa46129d5565b8152602080820192909252604090810160009081205460ff908116151585527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3754858501527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3854858401527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3954606095860152825160a0810184528281527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b549091161515818501527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6c54928101929092527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6d5493820193909352918052600990527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6e54608082015297989697959694959094909350915050565b6001600081905260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365460ff168061114557506000546001600160a01b031633145b6111875760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b6044820152606401610309565b61119033611dbb565b50565b6000546001600160a01b031633146111bd5760405162461bcd60e51b81526004016103099061284b565b80600960008460018111156111d4576111d46129d5565b60018111156111e5576111e56129d5565b81526020810191909152604001600020805460ff19169115159190911790555050565b6000546001600160a01b031633146112325760405162461bcd60e51b81526004016103099061284b565b60008181526008602052604081208054909190600990829060ff16600181111561125e5761125e6129d5565b600181111561126f5761126f6129d5565b815260200190815260200160002060050182600101548154811061129557611295612a01565b60009182526020909120600b546005909202018054604051632142170760e11b81523060048201526001600160a01b03918216602482015260448101879052919350909116906342842e0e90606401600060405180830381600087803b1580156112fe57600080fd5b505af1158015611312573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146113455760405162461bcd60e51b81526004016103099061284b565b60015460ff16156113985760405162461bcd60e51b815260206004820152601960248201527f416c726561647920616e20616374697665206c6f7474657279000000000000006044820152606401610309565b6040805160a08101825260018082526001600160a01b03949094166020808301829052928201849052600060608301819052608090920182905284546001600160a81b0319166101009091021784179093556002919091556003829055600480546001600160a01b031916905590805260099052427fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6f55565b6000546001600160a01b0316331461145b5760405162461bcd60e51b81526004016103099061284b565b8260096000866001811115611472576114726129d5565b6001811115611483576114836129d5565b81526020019081526020016000206001018190555081600960008660018111156114af576114af6129d5565b60018111156114c0576114c06129d5565b81526020019081526020016000206002018190555080600960008660018111156114ec576114ec6129d5565b60018111156114fd576114fd6129d5565b815260208101919091526040016000206003015550505050565b6005818154811061152757600080fd5b6000918252602090912060049091020180546001820154600283015460039093015460ff831694506001600160a01b0361010090930483169391921685565b816009600082600181111561157d5761157d6129d5565b600181111561158e5761158e6129d5565b815260208101919091526040016000205460ff16806115b757506000546001600160a01b031633145b6115f95760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b6044820152606401610309565b600b5460405163020604bf60e21b81526004810184905230916001600160a01b03169063081812fc9060240160206040518083038186803b15801561163d57600080fd5b505afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611675919061244c565b6001600160a01b0316146116dd5760405162461bcd60e51b815260206004820152602960248201527f4d75737420617070726f7665207468697320636f6e747261637420617320616e6044820152681037b832b930ba37b960b91b6064820152608401610309565b600b54604051632142170760e11b8152336004820152306024820152604481018490526001600160a01b03909116906342842e0e90606401600060405180830381600087803b15801561172f57600080fd5b505af1158015611743573d6000803e3d6000fd5b5050505060006040518060c00160405280336001600160a01b03168152602001856001811115611775576117756129d5565b81526020018481526020014281526020014281526020016000815250905060405180604001604052808560018111156117b0576117b06129d5565b8152602001600960008760018111156117cb576117cb6129d5565b60018111156117dc576117dc6129d5565b815260208082019290925260409081016000908120600501549093528683526008909152902081518154829060ff19166001838181111561181f5761181f6129d5565b0217905550602091909101516001909101556000846001811115611845576118456129d5565b141561189e57600a60096000866001811115611863576118636129d5565b6001811115611874576118746129d5565b81526020808201929092526040016000908120600501548354600181018555938252919020909101555b600960008560018111156118b4576118b46129d5565b60018111156118c5576118c56129d5565b8152602080820192909252604001600090812060059081018054600180820183559184529284902085519390920290910180546001600160a01b031981166001600160a01b0390941693841782559385015185949193909284926001600160a81b03191690911790600160a01b908490811115611944576119446129d5565b0217905550604082810151600180840191909155606084015160028401556080840151600384015560a09093015160049092019190915533600090815260076020908152918120805493840181558152200192909255505050565b6000546001600160a01b031633146119c95760405162461bcd60e51b81526004016103099061284b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015611a0b57600080fd5b505afa158015611a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a43919061267d565b60005460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044015b602060405180830381600087803b158015611a9457600080fd5b505af1158015611aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c079190612544565b60008080846001811115611ae257611ae26129d5565b148015611af2575060015460ff16155b15611b0257506000905080611d37565b6004830154429015611b15575060048301545b60096000866001811115611b2b57611b2b6129d5565b6001811115611b3c57611b3c6129d5565b815260200190815260200160002060030154846002015482611b5e9190612937565b10611d2e5760028401548060096000886001811115611b7f57611b7f6129d5565b6001811115611b9057611b906129d5565b8152602001908152602001600020600401541115611be85760096000876001811115611bbe57611bbe6129d5565b6001811115611bcf57611bcf6129d5565b8152602001908152602001600020600401549050611bfb565b8085600301541115611bfb575060038401545b60096000876001811115611c1157611c116129d5565b6001811115611c2257611c226129d5565b8152602001908152602001600020600101548183611c409190612937565b10611d2c57600060096000886001811115611c5d57611c5d6129d5565b6001811115611c6e57611c6e6129d5565b8152602001908152602001600020600101548284611c8c9190612937565b611c969190612904565b905060096000886001811115611cae57611cae6129d5565b6001811115611cbf57611cbf6129d5565b81526020019081526020016000206002015481611cdc9190612918565b60096000896001811115611cf257611cf26129d5565b6001811115611d0357611d036129d5565b81526020019081526020016000206001015482611d209190612918565b94509450505050611d37565b505b60008092509250505b9250929050565b6000600160066000828254611d5391906128ec565b909155505060065433611d67600143612937565b40604051602001611d9d9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012060001c905090565b6000805b6001600160a01b038316600090815260076020526040902054811015611fb9576001600160a01b03831660009081526007602052604081208054600891839185908110611e0e57611e0e612a01565b906000526020600020015481526020019081526020016000209050600180811115611e3b57611e3b6129d5565b815460ff166001811115611e5157611e516129d5565b1415611fa65780546000908190611eb19060ff16600983826001811115611e7a57611e7a6129d5565b6001811115611e8b57611e8b6129d5565b81526020019081526020016000206005018560010154815481106104ef576104ef612a01565b90925090508115611fa357611ec682866128ec565b8354909550819060099060009060ff166001811115611ee757611ee76129d5565b6001811115611ef857611ef86129d5565b8152602001908152602001600020600501846001015481548110611f1e57611f1e612a01565b906000526020600020906005020160030154611f3a91906128ec565b835460099060009060ff166001811115611f5657611f566129d5565b6001811115611f6757611f676129d5565b8152602001908152602001600020600501846001015481548110611f8d57611f8d612a01565b9060005260206000209060050201600301819055505b50505b5080611fb18161297a565b915050611dbf565b5080156103e857600c5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401611a7a565b6000805b6001600160a01b038416600090815260076020526040902054811015612076576001600160a01b038416600090815260076020526040902080548491908390811061204a5761204a612a01565b906000526020600020015414156120645760019150612076565b8061206e8161297a565b915050611ffd565b811561215f576001600160a01b03841660009081526007602052604090205460011015612121576001600160a01b038416600090815260076020526040902080546120c390600190612937565b815481106120d3576120d3612a01565b906000526020600020015460076000866001600160a01b03166001600160a01b03168152602001908152602001600020828154811061211457612114612a01565b6000918252602090912001555b6001600160a01b0384166000908152600760205260409020805480612148576121486129eb565b600190038181906000526020600020016000905590555b50505050565b60006009600084600181111561217d5761217d6129d5565b600181111561218e5761218e6129d5565b8152602001908152602001600020600301548260020154426121b09190612937565b101561220f5760028201546121c59042612937565b600960008560018111156121db576121db6129d5565b60018111156121ec576121ec6129d5565b8152602001908152602001600020600301546122089190612937565b90506123dc565b6002820154806009600086600181111561222b5761222b6129d5565b600181111561223c5761223c6129d5565b8152602001908152602001600020600401541115612294576009600085600181111561226a5761226a6129d5565b600181111561227b5761227b6129d5565b81526020019081526020016000206004015490506122a7565b80836003015411156122a7575060038201545b600960008560018111156122bd576122bd6129d5565b60018111156122ce576122ce6129d5565b81526020019081526020016000206001015481426122ec9190612937565b1061238b5760096000856001811115612307576123076129d5565b6001811115612318576123186129d5565b81526020019081526020016000206001015481426123369190612937565b6123409190612995565b60096000866001811115612356576123566129d5565b6001811115612367576123676129d5565b8152602001908152602001600020600101546123839190612937565b9150506123dc565b6123958142612937565b600960008660018111156123ab576123ab6129d5565b60018111156123bc576123bc6129d5565b8152602001908152602001600020600101546123d89190612937565b9150505b92915050565b508054600082559060005260206000209081019061119091905b8082111561241057600081556001016123fc565b5090565b80356002811061242357600080fd5b919050565b60006020828403121561243a57600080fd5b813561244581612a2d565b9392505050565b60006020828403121561245e57600080fd5b815161244581612a2d565b6000806000806080858703121561247f57600080fd5b843561248a81612a2d565b9350602085013561249a81612a2d565b925060408501359150606085013567ffffffffffffffff8111156124bd57600080fd5b8501601f810187136124ce57600080fd5b80356124e16124dc826128c4565b612893565b8181528860208385010111156124f657600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561252b57600080fd5b823561253681612a2d565b946020939093013593505050565b60006020828403121561255657600080fd5b815161244581612a42565b6000806040838503121561257457600080fd5b61257d83612414565b9150602083013561258d81612a42565b809150509250929050565b600080604083850312156125ab57600080fd5b61253683612414565b600080600080608085870312156125ca57600080fd5b6125d385612414565b966020860135965060408601359560600135945092505050565b6000602082840312156125ff57600080fd5b815167ffffffffffffffff81111561261657600080fd5b8201601f8101841361262757600080fd5b80516126356124dc826128c4565b81815285602083850101111561264a57600080fd5b61265b82602083016020860161294e565b95945050505050565b60006020828403121561267657600080fd5b5035919050565b60006020828403121561268f57600080fd5b5051919050565b600281106126b457634e487b7160e01b600052602160045260246000fd5b9052565b6126c3828251612696565b6020810151151560208301526040810151604083015260608101516060830152608081015160808301525050565b610240808252875190820181905260009061026080840191600581901b8501909101906020808c01855b838110156127b85761025f19888603018652815160e061273c878351612696565b848201518588015260408083015182828a01528051915081838a0152610100925061276c82848b0189840161294e565b50606083810151908901526080808401519089015260a0808401519089015260c0928301519288019290925296840196601f909101601f1916909501909401939082019060010161271b565b50508294506128028187018c8051151582526020808201516001600160a01b0390811691840191909152604080830151908401526060808301519084015260809182015116910152565b5050506001600160a01b03871660c0840152506001600160a01b03851660e08301526128326101008301856126b8565b6128406101a08301846126b8565b979650505050505050565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156128bc576128bc612a17565b604052919050565b600067ffffffffffffffff8211156128de576128de612a17565b50601f01601f191660200190565b600082198211156128ff576128ff6129a9565b500190565b600082612913576129136129bf565b500490565b6000816000190483118215151615612932576129326129a9565b500290565b600082821015612949576129496129a9565b500390565b60005b83811015612969578181015183820152602001612951565b8381111561215f5750506000910152565b600060001982141561298e5761298e6129a9565b5060010190565b6000826129a4576129a46129bf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461119057600080fd5b801515811461119057600080fdfeec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f70a264697066735822122084946adc25c2145e7dce85ed10298ade221e64518562e6a3aaa009c5501dfb6d64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063549d6699116100a2578063a2dc15b711610071578063a2dc15b714610280578063acf8cf3014610293578063d7a1a5b9146102a6578063dd752e55146102b9578063fc50baf5146102cc57600080fd5b8063549d66991461021e57806379ebd799146102315780638da5cb5b14610242578063914601491461026d57600080fd5b80632bd56b06116100de5780632bd56b061461018a5780632e17de78146101e9578063370158ea146101fc578063372500ab1461021657600080fd5b806313af403514610110578063150b7a02146101255780631f4a6d321461017a57806327e605ec14610182575b600080fd5b61012361011e366004612428565b6102df565b005b61015c610133366004612469565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b610123610383565b6101236103ec565b6001546002546003546004546101b79360ff8116936101009091046001600160a01b039081169391921685565b6040805195151586526001600160a01b039485166020870152850192909252606084015216608082015260a001610171565b6101236101f7366004612664565b6109c4565b610204610c0c565b604051610171969594939291906126f1565b6101236110ff565b61012361022c366004612561565b611193565b600554604051908152602001610171565b600054610255906001600160a01b031681565b6040516001600160a01b039091168152602001610171565b61012361027b366004612664565b611208565b61012361028e366004612518565b61131b565b6101236102a13660046125b4565b611431565b6101b76102b4366004612664565b611517565b6101236102c7366004612598565b611566565b6101236102da366004612428565b61199f565b6000546001600160a01b031633146103125760405162461bcd60e51b81526004016103099061284b565b60405180910390fd5b6001600160a01b0381166103615760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610309565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103ad5760405162461bcd60e51b81526004016103099061284b565b6000805460405147926001600160a01b039092169183156108fc02918491818181858888f193505050501580156103e8573d6000803e3d6000fd5b5050565b6000546001600160a01b031633146104165760405162461bcd60e51b81526004016103099061284b565b6000600160000160019054906101000a90046001600160a01b03169050600080600a80548060200260200160405190810160405280929190818152602001828054801561048257602002820191906000526020600020905b81548152602001906001019080831161046e575b50505050509050600a600061049791906123e2565b60005b81518110156105b857600080805260096020528251610502908290600080516020612a51833981519152908690869081106104d7576104d7612a01565b6020026020010151815481106104ef576104ef612a01565b9060005260206000209060050201611acc565b50905061050f81856128ec565b60008080526009602052845191955090600080516020612a518339815191529085908590811061054157610541612a01565b60200260200101518154811061055957610559612a01565b90600052602060002090600502016004015411156105a557600a83838151811061058557610585612a01565b602090810291909101810151825460018101845560009384529190922001555b50806105b08161297a565b91505061049a565b50811561086f576002546040516370a0823160e01b81523060048201526001600160a01b038516906370a082319060240160206040518083038186803b15801561060157600080fd5b505afa158015610615573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610639919061267d565b10156106875760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f75676820746f6b656e7320746f207061792077696e6e6572006044820152606401610309565b600082610692611d3e565b61069c9190612995565b90506000805b8351811015610791576000808052600960205284516106df908290600080516020612a51833981519152908890869081106104d7576104d7612a01565b5090506106ec81846128ec565b92506000811180156106fe5750838310155b1561077e576000805260096020528451600080516020612a518339815191529086908490811061073057610730612a01565b60200260200101518154811061074857610748612a01565b6000918252602090912060059091020154600480546001600160a01b0319166001600160a01b0390921691909117905560038690555b50806107898161297a565b9150506106a2565b506004546001600160a01b03166107e25760405162461bcd60e51b81526020600482015260156024820152742ab730b13632903a37903334b732103bb4b73732b960591b6044820152606401610309565b6004805460025460405163a9059cbb60e01b81526001600160a01b0392831693810193909352602483015286169063a9059cbb90604401602060405180830381600087803b15801561083357600080fd5b505af1158015610847573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086b9190612544565b5050505b505060058054600181810183556000928352805460049283027f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db08101805460ff909316151560ff1984168117825584546001600160a01b03610100918290048116909102610100600160a81b03199092166001600160a81b03199586161791909117909155600280547f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1840155600380547f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db285015586547f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db390940180546001600160a01b031990811695909416949094179093556040805160a0810182528881526020810189905290810188905260608101889052608001879052845490931690935590849055929092558054909116905550565b60008181526008602052604081208054909190600990829060ff1660018111156109f0576109f06129d5565b6001811115610a0157610a016129d5565b8152602001908152602001600020600501826001015481548110610a2757610a27612a01565b906000526020600020906005020190508060040154600014610a965760405162461bcd60e51b815260206004820152602260248201527f54686973204e46542068617320616c7265616479206265656e20756e7374616b604482015261195960f21b6064820152608401610309565b80546001600160a01b0316331480610ab857506000546001600160a01b031633145b610b045760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e000000000000006044820152606401610309565b6001825460ff166001811115610b1c57610b1c6129d5565b148015610b665750815460099060009060ff166001811115610b4057610b406129d5565b6001811115610b5157610b516129d5565b815260208101919091526040016000205460ff165b15610b7f578054610b7f906001600160a01b0316611dbb565b600b548154604051632142170760e11b81523060048201526001600160a01b039182166024820152604481018690529116906342842e0e90606401600060405180830381600087803b158015610bd457600080fd5b505af1158015610be8573d6000803e3d6000fd5b505042600484015550508054610c07906001600160a01b031684611ff9565b505050565b6040805160a0810182526000808252602082018190529181018290526060808201839052608082018390529180610c6e6040805160a0810190915280600081526020016000151581526020016000815260200160008152602001600081525090565b610ca36040805160a0810190915280600081526020016000151581526020016000815260200160008152602001600081525090565b336000908152600760205260409020548067ffffffffffffffff811115610ccc57610ccc612a17565b604051908082528060200260200182016040528015610d3e57816020015b610d2b6040805160e0810190915280600081526020016000815260200160608152602001600081526020016000815260200160008152602001600081525090565b815260200190600190039081610cea5790505b50965060005b81811015610f24573360009081526007602052604081208054600891839185908110610d7257610d72612a01565b6000918252602080832090910154835282019290925260400181208054909250600990829060ff166001811115610dab57610dab6129d5565b6001811115610dbc57610dbc6129d5565b8152602001908152602001600020600501826001015481548110610de257610de2612a01565b60009182526020822084546005909202019250610e029060ff1683611acc565b506040805160e08101909152845491925090819060ff166001811115610e2a57610e2a6129d5565b8152600184015460208201819052600b546040805163c87b56dd60e01b81526004810193909352909201916001600160a01b03169063c87b56dd9060240160006040518083038186803b158015610e8057600080fd5b505afa158015610e94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ebc91908101906125ed565b81526002840154602082015260408101839052600384015460608201528454608090910190610eee9060ff1685612165565b8152508b8581518110610f0357610f03612a01565b60200260200101819052505050508080610f1c9061297a565b915050610d44565b506040805160a080820183526001805460ff8116151584526001600160a01b036101009091048116602085015260025484860152600354606085015260045481166080850152600c54600b548651948501909652939a509283169850929091169550908190815260200160096000600180811115610fa457610fa46129d5565b8152602080820192909252604090810160009081205460ff908116151585527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3754858501527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3854858401527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a3954606095860152825160a0810184528281527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6b549091161515818501527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6c54928101929092527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6d5493820193909352918052600990527fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6e54608082015297989697959694959094909350915050565b6001600081905260096020527f92e85d02570a8092d09a6e3a57665bc3815a2699a4074001bf1ccabf660f5a365460ff168061114557506000546001600160a01b031633145b6111875760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b6044820152606401610309565b61119033611dbb565b50565b6000546001600160a01b031633146111bd5760405162461bcd60e51b81526004016103099061284b565b80600960008460018111156111d4576111d46129d5565b60018111156111e5576111e56129d5565b81526020810191909152604001600020805460ff19169115159190911790555050565b6000546001600160a01b031633146112325760405162461bcd60e51b81526004016103099061284b565b60008181526008602052604081208054909190600990829060ff16600181111561125e5761125e6129d5565b600181111561126f5761126f6129d5565b815260200190815260200160002060050182600101548154811061129557611295612a01565b60009182526020909120600b546005909202018054604051632142170760e11b81523060048201526001600160a01b03918216602482015260448101879052919350909116906342842e0e90606401600060405180830381600087803b1580156112fe57600080fd5b505af1158015611312573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b031633146113455760405162461bcd60e51b81526004016103099061284b565b60015460ff16156113985760405162461bcd60e51b815260206004820152601960248201527f416c726561647920616e20616374697665206c6f7474657279000000000000006044820152606401610309565b6040805160a08101825260018082526001600160a01b03949094166020808301829052928201849052600060608301819052608090920182905284546001600160a81b0319166101009091021784179093556002919091556003829055600480546001600160a01b031916905590805260099052427fec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f6f55565b6000546001600160a01b0316331461145b5760405162461bcd60e51b81526004016103099061284b565b8260096000866001811115611472576114726129d5565b6001811115611483576114836129d5565b81526020019081526020016000206001018190555081600960008660018111156114af576114af6129d5565b60018111156114c0576114c06129d5565b81526020019081526020016000206002018190555080600960008660018111156114ec576114ec6129d5565b60018111156114fd576114fd6129d5565b815260208101919091526040016000206003015550505050565b6005818154811061152757600080fd5b6000918252602090912060049091020180546001820154600283015460039093015460ff831694506001600160a01b0361010090930483169391921685565b816009600082600181111561157d5761157d6129d5565b600181111561158e5761158e6129d5565b815260208101919091526040016000205460ff16806115b757506000546001600160a01b031633145b6115f95760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b6044820152606401610309565b600b5460405163020604bf60e21b81526004810184905230916001600160a01b03169063081812fc9060240160206040518083038186803b15801561163d57600080fd5b505afa158015611651573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611675919061244c565b6001600160a01b0316146116dd5760405162461bcd60e51b815260206004820152602960248201527f4d75737420617070726f7665207468697320636f6e747261637420617320616e6044820152681037b832b930ba37b960b91b6064820152608401610309565b600b54604051632142170760e11b8152336004820152306024820152604481018490526001600160a01b03909116906342842e0e90606401600060405180830381600087803b15801561172f57600080fd5b505af1158015611743573d6000803e3d6000fd5b5050505060006040518060c00160405280336001600160a01b03168152602001856001811115611775576117756129d5565b81526020018481526020014281526020014281526020016000815250905060405180604001604052808560018111156117b0576117b06129d5565b8152602001600960008760018111156117cb576117cb6129d5565b60018111156117dc576117dc6129d5565b815260208082019290925260409081016000908120600501549093528683526008909152902081518154829060ff19166001838181111561181f5761181f6129d5565b0217905550602091909101516001909101556000846001811115611845576118456129d5565b141561189e57600a60096000866001811115611863576118636129d5565b6001811115611874576118746129d5565b81526020808201929092526040016000908120600501548354600181018555938252919020909101555b600960008560018111156118b4576118b46129d5565b60018111156118c5576118c56129d5565b8152602080820192909252604001600090812060059081018054600180820183559184529284902085519390920290910180546001600160a01b031981166001600160a01b0390941693841782559385015185949193909284926001600160a81b03191690911790600160a01b908490811115611944576119446129d5565b0217905550604082810151600180840191909155606084015160028401556080840151600384015560a09093015160049092019190915533600090815260076020908152918120805493840181558152200192909255505050565b6000546001600160a01b031633146119c95760405162461bcd60e51b81526004016103099061284b565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015611a0b57600080fd5b505afa158015611a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a43919061267d565b60005460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044015b602060405180830381600087803b158015611a9457600080fd5b505af1158015611aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c079190612544565b60008080846001811115611ae257611ae26129d5565b148015611af2575060015460ff16155b15611b0257506000905080611d37565b6004830154429015611b15575060048301545b60096000866001811115611b2b57611b2b6129d5565b6001811115611b3c57611b3c6129d5565b815260200190815260200160002060030154846002015482611b5e9190612937565b10611d2e5760028401548060096000886001811115611b7f57611b7f6129d5565b6001811115611b9057611b906129d5565b8152602001908152602001600020600401541115611be85760096000876001811115611bbe57611bbe6129d5565b6001811115611bcf57611bcf6129d5565b8152602001908152602001600020600401549050611bfb565b8085600301541115611bfb575060038401545b60096000876001811115611c1157611c116129d5565b6001811115611c2257611c226129d5565b8152602001908152602001600020600101548183611c409190612937565b10611d2c57600060096000886001811115611c5d57611c5d6129d5565b6001811115611c6e57611c6e6129d5565b8152602001908152602001600020600101548284611c8c9190612937565b611c969190612904565b905060096000886001811115611cae57611cae6129d5565b6001811115611cbf57611cbf6129d5565b81526020019081526020016000206002015481611cdc9190612918565b60096000896001811115611cf257611cf26129d5565b6001811115611d0357611d036129d5565b81526020019081526020016000206001015482611d209190612918565b94509450505050611d37565b505b60008092509250505b9250929050565b6000600160066000828254611d5391906128ec565b909155505060065433611d67600143612937565b40604051602001611d9d9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012060001c905090565b6000805b6001600160a01b038316600090815260076020526040902054811015611fb9576001600160a01b03831660009081526007602052604081208054600891839185908110611e0e57611e0e612a01565b906000526020600020015481526020019081526020016000209050600180811115611e3b57611e3b6129d5565b815460ff166001811115611e5157611e516129d5565b1415611fa65780546000908190611eb19060ff16600983826001811115611e7a57611e7a6129d5565b6001811115611e8b57611e8b6129d5565b81526020019081526020016000206005018560010154815481106104ef576104ef612a01565b90925090508115611fa357611ec682866128ec565b8354909550819060099060009060ff166001811115611ee757611ee76129d5565b6001811115611ef857611ef86129d5565b8152602001908152602001600020600501846001015481548110611f1e57611f1e612a01565b906000526020600020906005020160030154611f3a91906128ec565b835460099060009060ff166001811115611f5657611f566129d5565b6001811115611f6757611f676129d5565b8152602001908152602001600020600501846001015481548110611f8d57611f8d612a01565b9060005260206000209060050201600301819055505b50505b5080611fb18161297a565b915050611dbf565b5080156103e857600c5460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb90604401611a7a565b6000805b6001600160a01b038416600090815260076020526040902054811015612076576001600160a01b038416600090815260076020526040902080548491908390811061204a5761204a612a01565b906000526020600020015414156120645760019150612076565b8061206e8161297a565b915050611ffd565b811561215f576001600160a01b03841660009081526007602052604090205460011015612121576001600160a01b038416600090815260076020526040902080546120c390600190612937565b815481106120d3576120d3612a01565b906000526020600020015460076000866001600160a01b03166001600160a01b03168152602001908152602001600020828154811061211457612114612a01565b6000918252602090912001555b6001600160a01b0384166000908152600760205260409020805480612148576121486129eb565b600190038181906000526020600020016000905590555b50505050565b60006009600084600181111561217d5761217d6129d5565b600181111561218e5761218e6129d5565b8152602001908152602001600020600301548260020154426121b09190612937565b101561220f5760028201546121c59042612937565b600960008560018111156121db576121db6129d5565b60018111156121ec576121ec6129d5565b8152602001908152602001600020600301546122089190612937565b90506123dc565b6002820154806009600086600181111561222b5761222b6129d5565b600181111561223c5761223c6129d5565b8152602001908152602001600020600401541115612294576009600085600181111561226a5761226a6129d5565b600181111561227b5761227b6129d5565b81526020019081526020016000206004015490506122a7565b80836003015411156122a7575060038201545b600960008560018111156122bd576122bd6129d5565b60018111156122ce576122ce6129d5565b81526020019081526020016000206001015481426122ec9190612937565b1061238b5760096000856001811115612307576123076129d5565b6001811115612318576123186129d5565b81526020019081526020016000206001015481426123369190612937565b6123409190612995565b60096000866001811115612356576123566129d5565b6001811115612367576123676129d5565b8152602001908152602001600020600101546123839190612937565b9150506123dc565b6123958142612937565b600960008660018111156123ab576123ab6129d5565b60018111156123bc576123bc6129d5565b8152602001908152602001600020600101546123d89190612937565b9150505b92915050565b508054600082559060005260206000209081019061119091905b8082111561241057600081556001016123fc565b5090565b80356002811061242357600080fd5b919050565b60006020828403121561243a57600080fd5b813561244581612a2d565b9392505050565b60006020828403121561245e57600080fd5b815161244581612a2d565b6000806000806080858703121561247f57600080fd5b843561248a81612a2d565b9350602085013561249a81612a2d565b925060408501359150606085013567ffffffffffffffff8111156124bd57600080fd5b8501601f810187136124ce57600080fd5b80356124e16124dc826128c4565b612893565b8181528860208385010111156124f657600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b6000806040838503121561252b57600080fd5b823561253681612a2d565b946020939093013593505050565b60006020828403121561255657600080fd5b815161244581612a42565b6000806040838503121561257457600080fd5b61257d83612414565b9150602083013561258d81612a42565b809150509250929050565b600080604083850312156125ab57600080fd5b61253683612414565b600080600080608085870312156125ca57600080fd5b6125d385612414565b966020860135965060408601359560600135945092505050565b6000602082840312156125ff57600080fd5b815167ffffffffffffffff81111561261657600080fd5b8201601f8101841361262757600080fd5b80516126356124dc826128c4565b81815285602083850101111561264a57600080fd5b61265b82602083016020860161294e565b95945050505050565b60006020828403121561267657600080fd5b5035919050565b60006020828403121561268f57600080fd5b5051919050565b600281106126b457634e487b7160e01b600052602160045260246000fd5b9052565b6126c3828251612696565b6020810151151560208301526040810151604083015260608101516060830152608081015160808301525050565b610240808252875190820181905260009061026080840191600581901b8501909101906020808c01855b838110156127b85761025f19888603018652815160e061273c878351612696565b848201518588015260408083015182828a01528051915081838a0152610100925061276c82848b0189840161294e565b50606083810151908901526080808401519089015260a0808401519089015260c0928301519288019290925296840196601f909101601f1916909501909401939082019060010161271b565b50508294506128028187018c8051151582526020808201516001600160a01b0390811691840191909152604080830151908401526060808301519084015260809182015116910152565b5050506001600160a01b03871660c0840152506001600160a01b03851660e08301526128326101008301856126b8565b6128406101a08301846126b8565b979650505050505050565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156128bc576128bc612a17565b604052919050565b600067ffffffffffffffff8211156128de576128de612a17565b50601f01601f191660200190565b600082198211156128ff576128ff6129a9565b500190565b600082612913576129136129bf565b500490565b6000816000190483118215151615612932576129326129a9565b500290565b600082821015612949576129496129a9565b500390565b60005b83811015612969578181015183820152602001612951565b8381111561215f5750506000910152565b600060001982141561298e5761298e6129a9565b5060010190565b6000826129a4576129a46129bf565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461119057600080fd5b801515811461119057600080fdfeec8156718a8372b1db44bb411437d0870f3e3790d4a08526d024ce1b0b668f70a264697066735822122084946adc25c2145e7dce85ed10298ade221e64518562e6a3aaa009c5501dfb6d64736f6c63430008070033

Deployed Bytecode Sourcemap

2442:13501:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11435:143;;;;;;:::i;:::-;;:::i;:::-;;15740:198;;;;;;:::i;:::-;15869:60;15740:198;;;;;;;;;;-1:-1:-1;;;;;;9729:33:1;;;9711:52;;9699:2;9684:18;15740:198:0;;;;;;;;8843:141;;;:::i;9501:1668::-;;;:::i;3680:29::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3680:29:0;;;;;;;;;;;;;9311:14:1;;9304:22;9286:41;;-1:-1:-1;;;;;9401:15:1;;;9396:2;9381:18;;9374:43;9433:18;;9426:34;;;;9491:2;9476:18;;9469:34;9540:15;9534:3;9519:19;;9512:44;9273:3;9258:19;3680:29:0;9033:529:1;7946:633:0;;;;;;:::i;:::-;;:::i;5571:1675::-;;;:::i;:::-;;;;;;;;;;;;:::i;8588:109::-;;;:::i;11586:118::-;;;;;;:::i;:::-;;:::i;8705:104::-;8780:14;:21;8705:104;;13259:25:1;;;13247:2;13232:18;8705:104:0;13113:177:1;3651:20:0;;;;;-1:-1:-1;;;;;3651:20:0;;;;;;-1:-1:-1;;;;;5988:32:1;;;5970:51;;5958:2;5943:18;3651:20:0;5824:203:1;11177:250:0;;;;;;:::i;:::-;;:::i;9184:309::-;;;;;;:::i;:::-;;:::i;11712:348::-;;;;;;:::i;:::-;;:::i;3716:31::-;;;;;;:::i;:::-;;:::i;7254:684::-;;;;;;:::i;:::-;;:::i;8996:180::-;;;;;;:::i;:::-;;:::i;11435:143::-;4119:5;;-1:-1:-1;;;;;4119:5:0;4105:10;:19;4097:72;;;;-1:-1:-1;;;4097:72:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;11504:17:0;::::1;11496:52;;;::::0;-1:-1:-1;;;11496:52:0;;12964:2:1;11496:52:0::1;::::0;::::1;12946:21:1::0;13003:2;12983:18;;;12976:30;-1:-1:-1;;;13022:18:1;;;13015:52;13084:18;;11496:52:0::1;12762:346:1::0;11496:52:0::1;11559:5;:11:::0;;-1:-1:-1;;;;;;11559:11:0::1;-1:-1:-1::0;;;;;11559:11:0;;;::::1;::::0;;;::::1;::::0;;11435:143::o;8843:141::-;4119:5;;-1:-1:-1;;;;;4119:5:0;4105:10;:19;4097:72;;;;-1:-1:-1;;;4097:72:0;;;;;;;:::i;:::-;8894:15:::1;8952:5:::0;;8944:32:::1;::::0;8912:21:::1;::::0;-1:-1:-1;;;;;8952:5:0;;::::1;::::0;8944:32;::::1;;;::::0;8912:21;;8944:32;8894:15;8944:32;8912:21;8952:5;8944:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;8883:101;8843:141::o:0;9501:1668::-;4119:5;;-1:-1:-1;;;;;4119:5:0;4105:10;:19;4097:72;;;;-1:-1:-1;;;4097:72:0;;;;;;;:::i;:::-;9557:12:::1;9579:14;:20;;;;;;;;;;-1:-1:-1::0;;;;;9579:20:0::1;9557:43;;9613:20;9644:34:::0;9681:10:::1;9644:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9709:10;;9702:17;;;;:::i;:::-;9737:9;9732:387;9756:17;:24;9752:1;:28;9732:387;;;9803:12;9851:25:::0;;;:6:::1;:25;::::0;9886:20;;9820:88:::1;::::0;9803:12;;-1:-1:-1;;;;;;;;;;;9851:34:0;9886:17;;9904:1;;9886:20;::::1;;;;;:::i;:::-;;;;;;;9851:56;;;;;;;;:::i;:::-;;;;;;;;;;;9820:11;:88::i;:::-;-1:-1:-1::0;9802:106:0;-1:-1:-1;9923:20:0::1;9802:106:::0;9923:20;::::1;:::i;:::-;10033:1;9962:25:::0;;;:6:::1;:25;::::0;9997:20;;9923;;-1:-1:-1;10033:1:0;-1:-1:-1;;;;;;;;;;;9962:34:0;9997:17;;10015:1;;9997:20;::::1;;;;;:::i;:::-;;;;;;;9962:56;;;;;;;;:::i;:::-;;;;;;;;;;;:68;;;:72;9958:150;;;10055:10;10071:17;10089:1;10071:20;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;10055:37;;::::1;::::0;::::1;::::0;;-1:-1:-1;10055:37:0;;;;;;;::::1;::::0;9958:150:::1;-1:-1:-1::0;9782:3:0;::::1;::::0;::::1;:::i;:::-;;;;9732:387;;;-1:-1:-1::0;10135:16:0;;10131:911:::1;;10210:20:::0;;10176:30:::1;::::0;-1:-1:-1;;;10176:30:0;;10200:4:::1;10176:30;::::0;::::1;5970:51:1::0;-1:-1:-1;;;;;10176:15:0;::::1;::::0;::::1;::::0;5943:18:1;;10176:30:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;;10168:98;;;::::0;-1:-1:-1;;;10168:98:0;;10684:2:1;10168:98:0::1;::::0;::::1;10666:21:1::0;10723:2;10703:18;;;10696:30;10762:33;10742:18;;;10735:61;10813:18;;10168:98:0::1;10482:355:1::0;10168:98:0::1;10283:12;10321;10298:20;:18;:20::i;:::-;:35;;;;:::i;:::-;10283:50:::0;-1:-1:-1;10348:15:0::1;::::0;10392:478:::1;10416:17;:24;10412:1;:28;10392:478;;;10467:12;10515:25:::0;;;:6:::1;:25;::::0;10550:20;;10484:88:::1;::::0;10467:12;;-1:-1:-1;;;;;;;;;;;10515:34:0;10550:17;;10568:1;;10550:20;::::1;;;;;:::i;10484:88::-;-1:-1:-1::0;10466:106:0;-1:-1:-1;10591:15:0::1;10466:106:::0;10591:15;::::1;:::i;:::-;;;10638:1;10631:4;:8;:27;;;;;10654:4;10643:7;:15;;10631:27;10627:228;;;10707:25;::::0;;:6:::1;:25;::::0;10742:20;;-1:-1:-1;;;;;;;;;;;10707:34:0;10742:17;;10760:1;;10742:20;::::1;;;;;:::i;:::-;;;;;;;10707:56;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;:63:::0;10683:21;:87;;-1:-1:-1;;;;;;10683:87:0::1;-1:-1:-1::0;;;;;10707:63:0;;::::1;10683:87:::0;;;::::1;::::0;;:21:::1;10793:42:::0;;;10627:228:::1;-1:-1:-1::0;10442:3:0;::::1;::::0;::::1;:::i;:::-;;;;10392:478;;;-1:-1:-1::0;10894:21:0;;-1:-1:-1;;;;;10894:21:0::1;10886:69;;;::::0;-1:-1:-1;;;10886:69:0;;11392:2:1;10886:69:0::1;::::0;::::1;11374:21:1::0;11431:2;11411:18;;;11404:30;-1:-1:-1;;;11450:18:1;;;11443:51;11511:18;;10886:69:0::1;11190:345:1::0;10886:69:0::1;10986:21:::0;;;11009:20;;10971:59:::1;::::0;-1:-1:-1;;;10971:59:0;;-1:-1:-1;;;;;10986:21:0;;::::1;10971:59:::0;;::::1;6586:51:1::0;;;;6653:18;;;6646:34;10971:14:0;::::1;::::0;::::1;::::0;6559:18:1;;10971:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10153:889;;10131:911;-1:-1:-1::0;;11054:14:0::1;:35:::0;;11074:14:::1;11054:35:::0;;::::1;::::0;;-1:-1:-1;11054:35:0;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;11054:35:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;11054:35:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;-1:-1:-1::0;;;;;;11054:35:0;;;-1:-1:-1;;;;;;11054:35:0;;;;;;;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11054:35:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;11117:44:::1;::::0;;::::1;::::0;::::1;::::0;;;;;11054:35:::1;11117:44:::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;11100:61;;;;;;;;;;;;;;;;;;;;::::1;::::0;;-1:-1:-1;9501:1668:0:o;7946:633::-;8002:13;8018:17;;;:8;:17;;;;;8071:11;;8018:17;;8002:13;8064:6;;8002:13;;8071:11;;;8064:19;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;8093:1;:7;;;8064:37;;;;;;;;:::i;:::-;;;;;;;;;;;8046:55;;8122:1;:13;;;8139:1;8122:18;8114:65;;;;-1:-1:-1;;;8114:65:0;;12561:2:1;8114:65:0;;;12543:21:1;12600:2;12580:18;;;12573:30;12639:34;12619:18;;;12612:62;-1:-1:-1;;;12690:18:1;;;12683:32;12732:19;;8114:65:0;12359:398:1;8114:65:0;8198:8;;-1:-1:-1;;;;;8198:8:0;8210:10;8198:22;;:45;;-1:-1:-1;8238:5:0;;-1:-1:-1;;;;;8238:5:0;8224:10;:19;8198:45;8190:83;;;;-1:-1:-1;;;8190:83:0;;10330:2:1;8190:83:0;;;10312:21:1;10369:2;10349:18;;;10342:30;10408:27;10388:18;;;10381:55;10453:18;;8190:83:0;10128:349:1;8190:83:0;8305:13;8290:11;;;;;:28;;;;;;;:::i;:::-;;:59;;;;-1:-1:-1;8329:11:0;;8322:6;;:19;;8329:11;;;8322:19;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;8322:19:0;:27;;;8290:59;8286:120;;;8385:8;;8366:28;;-1:-1:-1;;;;;8385:8:0;8366:18;:28::i;:::-;8418:12;;8463:8;;8418:63;;-1:-1:-1;;;8418:63:0;;8456:4;8418:63;;;6272:34:1;-1:-1:-1;;;;;8463:8:0;;;6322:18:1;;;6315:43;6374:18;;;6367:34;;;8418:12:0;;;:29;;6207:18:1;;8418:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8508:15:0;8492:13;;;:31;-1:-1:-1;;8553:8:0;;8534:37;;-1:-1:-1;;;;;8553:8:0;8563:7;8534:18;:37::i;:::-;7989:590;;7946:633;:::o;5571:1675::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;5620:33:0;-1:-1:-1;;;;;;;;;;;;5620:33:0;-1:-1:-1;5757:25:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5757:25:0;5793:29;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5793:29:0;5877:10;5841:19;5863:25;;;:13;:25;;;;;:32;;5919;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5919:32:0;;;;;;;;;;;;;;;;;5906:45;;5967:9;5962:564;5986:11;5982:1;:15;5962:564;;;6061:10;6022:13;6047:25;;;:13;:25;;;;;:28;;6038:8;;6022:13;;6073:1;;6047:28;;;;;;:::i;:::-;;;;;;;;;;;;;6038:38;;;;;;;;;;;;6116:11;;6038:38;;-1:-1:-1;6109:6:0;;6047:28;;6116:11;;;6109:19;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;6138:1;:7;;;6109:37;;;;;;;;:::i;:::-;;;;;;;;6193:11;;6109:37;;;;;;-1:-1:-1;6181:27:0;;6193:11;;6109:37;6181:11;:27::i;:::-;-1:-1:-1;6239:275:0;;;;;;;;;6271:11;;6163:45;;-1:-1:-1;6239:275:0;;;6271:11;;;6239:275;;;;;;;:::i;:::-;;;6301:9;;;;6239:275;;;;;;6329:12;;6239:275;6329:32;;-1:-1:-1;;;6329:32:0;;;;;13259:25:1;;;;6239:275:0;;;;-1:-1:-1;;;;;6329:12:0;;:21;;13232:18:1;;6329:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6329:32:0;;;;;;;;;;;;:::i;:::-;6239:275;;6380:11;;;;6239:275;;;;;;;;;;6433:15;;;;6239:275;;;;6483:11;;6239:275;;;;;6467:31;;6483:11;;6380:1;6467:15;:31::i;:::-;6239:275;;;6223:10;6234:1;6223:13;;;;;;;;:::i;:::-;;;;;;:291;;;;6005:521;;;5999:4;;;;;:::i;:::-;;;;5962:564;;;-1:-1:-1;6538:24:0;;;;;;;;;6548:14;6538:24;;;;;;;;;-1:-1:-1;;;;;6538:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6597:12;;6643;;6680:255;;;;;;;;6538:24;;-1:-1:-1;6597:12:0;;;;-1:-1:-1;6643:12:0;;;;;-1:-1:-1;6680:255:0;;;;;;;6733:6;:21;6740:13;6733:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;6733:21:0;;;:29;;;;;6680:255;;;;6778:40;;6680:255;;;;6834:36;;6680:255;;;;6886:38;;6680:255;;;;;6963:275;;;;;;;;;;7020:25;:33;;;;6963:275;;;;;;7069:44;;6963:275;;;;;;;7129:40;;6963:275;;;;;;;7185:25;;;6778:6;7185:25;;:42;;6963:275;;;;5571:1675;;;;;;;;6669:266;;6963:275;;-1:-1:-1;5571:1675:0;-1:-1:-1;;5571:1675:0:o;8588:109::-;8633:13;4250:9;;;;:6;:9;;;:17;;;;:40;;-1:-1:-1;4285:5:0;;-1:-1:-1;;;;;4285:5:0;4271:10;:19;4250:40;4242:72;;;;-1:-1:-1;;;4242:72:0;;11044:2:1;4242:72:0;;;11026:21:1;11083:2;11063:18;;;11056:30;-1:-1:-1;;;11102:18:1;;;11095:49;11161:18;;4242:72:0;10842:343:1;4242:72:0;8659:30:::1;8678:10;8659:18;:30::i;:::-;8588:109:::0;:::o;11586:118::-;4119:5;;-1:-1:-1;;;;;4119:5:0;4105:10;:19;4097:72;;;;-1:-1:-1;;;4097:72:0;;;;;;;:::i;:::-;11694:2:::1;11666:6;:17;11673:9;11666:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11666:17:0;:30;;-1:-1:-1;;11666:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;11586:118:0:o;11177:250::-;4119:5;;-1:-1:-1;;;;;4119:5:0;4105:10;:19;4097:72;;;;-1:-1:-1;;;4097:72:0;;;;;;;:::i;:::-;11246:13:::1;11262:17:::0;;;:8:::1;:17;::::0;;;;11315:11;;11262:17;;11246:13;11308:6:::1;::::0;11246:13;;11315:11:::1;;::::0;11308:19;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;11337:1;:7;;;11308:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;11356:12:::1;::::0;11308:37:::1;::::0;;::::1;;11401:8:::0;;11356:63:::1;::::0;-1:-1:-1;;;11356:63:0;;11394:4:::1;11356:63;::::0;::::1;6272:34:1::0;-1:-1:-1;;;;;11401:8:0;;::::1;6322:18:1::0;;;6315:43;6374:18;;;6367:34;;;11308:37:0;;-1:-1:-1;11356:12:0;;::::1;::::0;:29:::1;::::0;6207:18:1;;11356:63:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11235:192;;11177:250:::0;:::o;9184:309::-;4119:5;;-1:-1:-1;;;;;4119:5:0;4105:10;:19;4097:72;;;;-1:-1:-1;;;4097:72:0;;;;;;;:::i;:::-;9284:14:::1;:22:::0;::::1;;:31;9276:69;;;::::0;-1:-1:-1;;;9276:69:0;;9976:2:1;9276:69:0::1;::::0;::::1;9958:21:1::0;10015:2;9995:18;;;9988:30;10054:27;10034:18;;;10027:55;10099:18;;9276:69:0::1;9774:349:1::0;9276:69:0::1;9373:48;::::0;;::::1;::::0;::::1;::::0;;9381:4:::1;9373:48:::0;;;-1:-1:-1;;;;;9373:48:0;;;::::1;;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;9373:48:0;;;;;;;;;;;;;9356:65;;-1:-1:-1;;;;;;9356:65:0;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;9356:65:0::1;::::0;;9432:25;;;:6:::1;:25:::0;;9470:15:::1;9432:35:::0;:53;9184:309::o;11712:348::-;4119:5;;-1:-1:-1;;;;;4119:5:0;4105:10;:19;4097:72;;;;-1:-1:-1;;;4097:72:0;;;;;;;:::i;:::-;11907:19:::1;11868:6;:17;11875:9;11868:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;:58;;;;11972:15;11937:6;:17;11944:9;11937:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;:50;;;;12035:17;11998:6;:17;12005:9;11998:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11998:17:0;:34:::1;;:54:::0;-1:-1:-1;;;;11712:348:0:o;3716:31::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3716:31:0;;;;;;;;;;;:::o;7254:684::-;7328:9;4250:6;:9;4257:1;4250:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;4250:9:0;:17;;;;:40;;-1:-1:-1;4285:5:0;;-1:-1:-1;;;;;4285:5:0;4271:10;:19;4250:40;4242:72;;;;-1:-1:-1;;;4242:72:0;;11044:2:1;4242:72:0;;;11026:21:1;11083:2;11063:18;;;11056:30;-1:-1:-1;;;11102:18:1;;;11095:49;11161:18;;4242:72:0;10842:343:1;4242:72:0;7358:12:::1;::::0;:33:::1;::::0;-1:-1:-1;;;7358:33:0;;::::1;::::0;::::1;13259:25:1::0;;;7403:4:0::1;::::0;-1:-1:-1;;;;;7358:12:0::1;::::0;:24:::1;::::0;13232:18:1;;7358:33:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7358:50:0::1;;7350:104;;;::::0;-1:-1:-1;;;7350:104:0;;11742:2:1;7350:104:0::1;::::0;::::1;11724:21:1::0;11781:2;11761:18;;;11754:30;11820:34;11800:18;;;11793:62;-1:-1:-1;;;11871:18:1;;;11864:39;11920:19;;7350:104:0::1;11540:405:1::0;7350:104:0::1;7465:12;::::0;:65:::1;::::0;-1:-1:-1;;;7465:65:0;;7495:10:::1;7465:65;::::0;::::1;6272:34:1::0;7515:4:0::1;6322:18:1::0;;;6315:43;6374:18;;;6367:34;;;-1:-1:-1;;;;;7465:12:0;;::::1;::::0;:29:::1;::::0;6207:18:1;;7465:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7541:14;7558:74;;;;;;;;7564:10;-1:-1:-1::0;;;;;7558:74:0::1;;;;;7576:9;7558:74;;;;;;;;:::i;:::-;;;;;7587:7;7558:74;;;;7596:15;7558:74;;;;7613:15;7558:74;;;;7630:1;7558:74;;::::0;7541:91:::1;;7663:49;;;;;;;;7667:9;7663:49;;;;;;;;:::i;:::-;;;;;7678:6;:17;7685:9;7678:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;7678:17:0;;;:26:::1;;:33:::0;7663:49;;;7643:17;;;:8:::1;:17:::0;;;;;:69;;;;:17;;-1:-1:-1;;7643:69:0::1;::::0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;7643:69:0::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;7740:17:::1;7727:9;:30;;;;;;;;:::i;:::-;;7723:113;;;7774:10;7790:6;:17;7797:9;7790:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;7790:17:0;;;:26:::1;;:33:::0;7774:50;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;7723:113:::1;7846:6;:17;7853:9;7846:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;7846:17:0;;;:26:::1;::::0;;::::1;:34:::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;7846:34:0;::::1;-1:-1:-1::0;;;;;7846:34:0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;;7846:34:0;;;;;-1:-1:-1;;;7846:34:0;;;;::::1;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;7846:34:0::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;;;7905:10:::1;-1:-1:-1::0;7891:25:0;;;:13:::1;:25;::::0;;;;;;:39;;;;::::1;::::0;;;;;::::1;::::0;;;;-1:-1:-1;;;7254:684:0:o;8996:180::-;4119:5;;-1:-1:-1;;;;;4119:5:0;4105:10;:19;4097:72;;;;-1:-1:-1;;;4097:72:0;;;;;;;:::i;:::-;9081:38:::1;::::0;-1:-1:-1;;;9081:38:0;;9113:4:::1;9081:38;::::0;::::1;5970:51:1::0;9063:15:0::1;::::0;-1:-1:-1;;;;;9081:23:0;::::1;::::0;::::1;::::0;5943:18:1;;9081:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9153:5;::::0;9130:38:::1;::::0;-1:-1:-1;;;9130:38:0;;-1:-1:-1;;;;;9153:5:0;;::::1;9130:38;::::0;::::1;6586:51:1::0;6653:18;;;6646:34;;;9063:56:0;;-1:-1:-1;9130:22:0;::::1;::::0;::::1;::::0;6559:18:1;;9130:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14349:1191::-:0;14432:7;;;14467:1;:22;;;;;;;;:::i;:::-;;:57;;;;-1:-1:-1;14493:14:0;:22;;;:31;14467:57;14463:103;;;-1:-1:-1;14549:1:0;;-1:-1:-1;14549:1:0;14541:13;;14463:103;14630:23;;;;14600:15;;14630:27;14626:97;;-1:-1:-1;14688:23:0;;;;14626:97;14778:6;:9;14785:1;14778:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;;14753:11;:21;;;14739:11;:35;;;;:::i;:::-;:65;14735:772;;14845:21;;;;;14885:6;14821:21;14892:1;14885:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:19;;;:35;14881:240;;;14957:6;:9;14964:1;14957:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:19;;;14941:35;;14881:240;;;15030:13;15002:11;:25;;;:41;14998:123;;;-1:-1:-1;15080:25:0;;;;14998:123;15172:6;:9;15179:1;15172:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;15155:13;15141:11;:27;;;;:::i;:::-;:59;15137:359;;15221:21;15277:6;:9;15284:1;15277:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;15260:13;15246:11;:27;;;;:::i;:::-;15245:60;;;;:::i;:::-;15221:84;;15370:6;:9;15377:1;15370:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:24;;;15354:13;:40;;;;:::i;:::-;15433:6;:9;15440:1;15433:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;15417:13;:44;;;;:::i;:::-;15324:156;;;;;;;;;15137:359;14806:701;14735:772;15527:1;15530;15519:13;;;;;14349:1191;;;;;;:::o;15548:184::-;15595:7;15624:1;15615:5;;:10;;;;;;;:::i;:::-;;;;-1:-1:-1;;15675:5:0;;15682:10;15704:16;15719:1;15704:12;:16;:::i;:::-;15694:27;15658:64;;;;;;;;;5645:19:1;;;5702:2;5698:15;;;;-1:-1:-1;;5694:53:1;5689:2;5680:12;;5673:75;5773:2;5764:12;;5757:28;5810:2;5801:12;;5460:359;15658:64:0;;;;;;;;;;;;;15648:75;;;;;;15643:81;;15636:88;;15548:184;:::o;12690:761::-;12753:17;;12791:555;-1:-1:-1;;;;;12815:21:0;;;;;;:13;:21;;;;;:28;12811:32;;12791:555;;;-1:-1:-1;;;;;12905:21:0;;12880:13;12905:21;;;:13;:21;;;;;:24;;12896:8;;12880:13;;12927:1;;12905:24;;;;;;:::i;:::-;;;;;;;;;12896:34;;;;;;;;;;;12880:50;;12964:13;12949:28;;;;;;;;:::i;:::-;:11;;;;;:28;;;;;;;:::i;:::-;;12945:390;;;13041:11;;12999:12;;;;13029:63;;13041:11;;13054:6;12999:12;13041:11;;13054:19;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;13083:1;:7;;;13054:37;;;;;;;;:::i;13029:63::-;12998:94;;-1:-1:-1;12998:94:0;-1:-1:-1;13115:8:0;;13111:209;;13148:17;13161:4;13148:17;;:::i;:::-;13249:11;;13148:17;;-1:-1:-1;13296:4:0;;13242:6;;:19;;13249:11;;;13242:19;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;13271:1;:7;;;13242:37;;;;;;;;:::i;:::-;;;;;;;;;;;:51;;;:58;;;;:::i;:::-;13195:11;;13188:6;;:19;;13195:11;;;13188:19;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;13217:1;:7;;;13188:37;;;;;;;;:::i;:::-;;;;;;;;;;;:51;;:112;;;;13111:209;12979:356;;12945:390;-1:-1:-1;12845:4:0;;;;:::i;:::-;;;;12791:555;;;-1:-1:-1;13362:13:0;;13358:86;;13392:12;;:40;;-1:-1:-1;;;13392:40:0;;-1:-1:-1;;;;;6604:32:1;;;13392:40:0;;;6586:51:1;6653:18;;;6646:34;;;13392:12:0;;;;:21;;6559:18:1;;13392:40:0;6412:274:1;12096:586:0;12176:10;;12225:202;-1:-1:-1;;;;;12245:21:0;;;;;;:13;:21;;;;;:28;12237:36;;12225:202;;;-1:-1:-1;;;;;12303:21:0;;;;;;:13;:21;;;;;:28;;12335:7;;12303:21;12325:5;;12303:28;;;;;;:::i;:::-;;;;;;;;;:39;12299:116;;;12371:4;12363:12;;12394:5;;12299:116;12275:7;;;;:::i;:::-;;;;12225:202;;;12443:5;12439:236;;;-1:-1:-1;;;;;12469:21:0;;;;;;:13;:21;;;;;:28;12500:1;-1:-1:-1;12465:157:0;;;-1:-1:-1;;;;;12553:21:0;;;;;;:13;:21;;;;;12575:28;;:30;;12604:1;;12575:30;:::i;:::-;12553:53;;;;;;;;:::i;:::-;;;;;;;;;12522:13;:21;12536:6;-1:-1:-1;;;;;12522:21:0;-1:-1:-1;;;;;12522:21:0;;;;;;;;;;;;12544:5;12522:28;;;;;;;;:::i;:::-;;;;;;;;;;:84;12465:157;-1:-1:-1;;;;;12636:21:0;;;;;;:13;:21;;;;;:27;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;12439:236;12165:517;;12096:586;;:::o;13459:882::-;13546:7;13614:6;:9;13621:1;13614:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;;13590:11;:21;;;13572:15;:39;;;;:::i;:::-;:68;13568:178;;;13712:21;;;;13694:39;;:15;:39;:::i;:::-;13664:6;:9;13671:1;13664:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:26;;;:70;;;;:::i;:::-;13657:77;;;;13568:178;13782:21;;;;;13818:6;13758:21;13825:1;13818:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:19;;;:35;13814:224;;;13886:6;:9;13893:1;13886:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:19;;;13870:35;;13814:224;;;13955:13;13927:11;:25;;;:41;13923:115;;;-1:-1:-1;14001:25:0;;;;13923:115;14089:6;:9;14096:1;14089:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;14072:13;14054:15;:31;;;;:::i;:::-;:63;14050:200;;14209:6;:9;14216:1;14209:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;14192:13;14174:15;:31;;;;:::i;:::-;14173:64;;;;:::i;:::-;14141:6;:9;14148:1;14141:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;:97;;;;:::i;:::-;14134:104;;;;;14050:200;14301:31;14319:13;14301:15;:31;:::i;:::-;14269:6;:9;14276:1;14269:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;:64;;;;:::i;:::-;14262:71;;;13459:882;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:150:1:-;89:20;;138:1;128:12;;118:40;;154:1;151;144:12;118:40;14:150;;;:::o;169:247::-;228:6;281:2;269:9;260:7;256:23;252:32;249:52;;;297:1;294;287:12;249:52;336:9;323:23;355:31;380:5;355:31;:::i;:::-;405:5;169:247;-1:-1:-1;;;169:247:1:o;421:251::-;491:6;544:2;532:9;523:7;519:23;515:32;512:52;;;560:1;557;550:12;512:52;592:9;586:16;611:31;636:5;611:31;:::i;677:1016::-;772:6;780;788;796;849:3;837:9;828:7;824:23;820:33;817:53;;;866:1;863;856:12;817:53;905:9;892:23;924:31;949:5;924:31;:::i;:::-;974:5;-1:-1:-1;1031:2:1;1016:18;;1003:32;1044:33;1003:32;1044:33;:::i;:::-;1096:7;-1:-1:-1;1150:2:1;1135:18;;1122:32;;-1:-1:-1;1205:2:1;1190:18;;1177:32;1232:18;1221:30;;1218:50;;;1264:1;1261;1254:12;1218:50;1287:22;;1340:4;1332:13;;1328:27;-1:-1:-1;1318:55:1;;1369:1;1366;1359:12;1318:55;1405:2;1392:16;1430:48;1446:31;1474:2;1446:31;:::i;:::-;1430:48;:::i;:::-;1501:2;1494:5;1487:17;1541:7;1536:2;1531;1527;1523:11;1519:20;1516:33;1513:53;;;1562:1;1559;1552:12;1513:53;1617:2;1612;1608;1604:11;1599:2;1592:5;1588:14;1575:45;1661:1;1656:2;1651;1644:5;1640:14;1636:23;1629:34;1682:5;1672:15;;;;;677:1016;;;;;;;:::o;1698:315::-;1766:6;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1882:9;1869:23;1901:31;1926:5;1901:31;:::i;:::-;1951:5;2003:2;1988:18;;;;1975:32;;-1:-1:-1;;;1698:315:1:o;2018:245::-;2085:6;2138:2;2126:9;2117:7;2113:23;2109:32;2106:52;;;2154:1;2151;2144:12;2106:52;2186:9;2180:16;2205:28;2227:5;2205:28;:::i;2268:335::-;2346:6;2354;2407:2;2395:9;2386:7;2382:23;2378:32;2375:52;;;2423:1;2420;2413:12;2375:52;2446:36;2472:9;2446:36;:::i;:::-;2436:46;;2532:2;2521:9;2517:18;2504:32;2545:28;2567:5;2545:28;:::i;:::-;2592:5;2582:15;;;2268:335;;;;;:::o;2608:274::-;2689:6;2697;2750:2;2738:9;2729:7;2725:23;2721:32;2718:52;;;2766:1;2763;2756:12;2718:52;2789:36;2815:9;2789:36;:::i;2887:411::-;2986:6;2994;3002;3010;3063:3;3051:9;3042:7;3038:23;3034:33;3031:53;;;3080:1;3077;3070:12;3031:53;3103:36;3129:9;3103:36;:::i;:::-;3093:46;3186:2;3171:18;;3158:32;;-1:-1:-1;3237:2:1;3222:18;;3209:32;;3288:2;3273:18;3260:32;;-1:-1:-1;2887:411:1;-1:-1:-1;;;2887:411:1:o;3303:635::-;3383:6;3436:2;3424:9;3415:7;3411:23;3407:32;3404:52;;;3452:1;3449;3442:12;3404:52;3485:9;3479:16;3518:18;3510:6;3507:30;3504:50;;;3550:1;3547;3540:12;3504:50;3573:22;;3626:4;3618:13;;3614:27;-1:-1:-1;3604:55:1;;3655:1;3652;3645:12;3604:55;3684:2;3678:9;3709:48;3725:31;3753:2;3725:31;:::i;3709:48::-;3780:2;3773:5;3766:17;3820:7;3815:2;3810;3806;3802:11;3798:20;3795:33;3792:53;;;3841:1;3838;3831:12;3792:53;3854:54;3905:2;3900;3893:5;3889:14;3884:2;3880;3876:11;3854:54;:::i;:::-;3927:5;3303:635;-1:-1:-1;;;;;3303:635:1:o;3943:180::-;4002:6;4055:2;4043:9;4034:7;4030:23;4026:32;4023:52;;;4071:1;4068;4061:12;4023:52;-1:-1:-1;4094:23:1;;3943:180;-1:-1:-1;3943:180:1:o;4128:184::-;4198:6;4251:2;4239:9;4230:7;4226:23;4222:32;4219:52;;;4267:1;4264;4257:12;4219:52;-1:-1:-1;4290:16:1;;4128:184;-1:-1:-1;4128:184:1:o;4426:237::-;4507:1;4500:5;4497:12;4487:143;;4552:10;4547:3;4543:20;4540:1;4533:31;4587:4;4584:1;4577:15;4615:4;4612:1;4605:15;4487:143;4639:18;;4426:237::o;5102:353::-;5165:44;5205:3;5197:5;5191:12;5165:44;:::i;:::-;5272:4;5265:5;5261:16;5255:23;5248:31;5241:39;5234:4;5229:3;5225:14;5218:63;5330:4;5323:5;5319:16;5313:23;5306:4;5301:3;5297:14;5290:47;5386:4;5379:5;5375:16;5369:23;5362:4;5357:3;5353:14;5346:47;5442:4;5435:5;5431:16;5425:23;5418:4;5413:3;5409:14;5402:47;;;5102:353::o;6691:2337::-;7214:3;7267:21;;;7337:13;;7240:18;;;7359:22;;;7185:4;;7400:3;7419:18;;;;7483:1;7479:14;;;7464:30;;7460:39;;;;7518:4;7545:15;;;7185:4;7588:1105;7602:6;7599:1;7596:13;7588:1105;;;7695:3;7691:8;7679:9;7671:6;7667:22;7663:37;7658:3;7651:50;7730:6;7724:13;7760:4;7777:44;7814:6;7809:2;7803:9;7777:44;:::i;:::-;7872:2;7868;7864:11;7858:18;7853:2;7845:6;7841:15;7834:43;7900:4;7951:2;7947;7943:11;7937:18;7992:2;7987;7979:6;7975:15;7968:27;8030:12;8024:19;8008:35;;8080:8;8075:2;8067:6;8063:15;8056:33;8112:3;8102:13;;8128:71;8190:8;8185:2;8177:6;8173:15;8168:2;8154:12;8150:21;8128:71;:::i;:::-;-1:-1:-1;8222:4:1;8269:11;;;8263:18;8246:15;;;8239:43;8305:4;8352:11;;;8346:18;8329:15;;;8322:43;8389:4;8437:12;;;8431:19;8413:16;;;8406:45;8475:4;8523:12;;;8517:19;8499:16;;;8492:45;;;;8671:12;;;;8603:2;8580:17;;;-1:-1:-1;;8576:31:1;8564:44;;;8560:53;;;;8636:15;;;;7624:1;7617:9;7588:1105;;;7592:3;;8710:6;8702:14;;8725:53;8774:2;8763:9;8759:18;8751:6;4755:12;;4748:20;4741:28;4729:41;;4816:4;4805:16;;;4799:23;-1:-1:-1;;;;;4892:21:1;;;4876:14;;;4869:45;;;;4963:4;4952:16;;;4946:23;4930:14;;;4923:47;5019:4;5008:16;;;5002:23;4986:14;;;4979:47;5079:4;5068:16;;;5062:23;5058:32;5042:14;;5035:56;4668:429;8725:53;-1:-1:-1;;;;;;;;4383:31:1;;8829:4;8814:20;;4371:44;-1:-1:-1;;;;;;4383:31:1;;8886:4;8871:20;;4371:44;8901:56;8952:3;8941:9;8937:19;8929:6;8901:56;:::i;:::-;8966;9017:3;9006:9;9002:19;8994:6;8966:56;:::i;:::-;6691:2337;;;;;;;;;:::o;11950:404::-;12152:2;12134:21;;;12191:2;12171:18;;;12164:30;12230:34;12225:2;12210:18;;12203:62;-1:-1:-1;;;12296:2:1;12281:18;;12274:38;12344:3;12329:19;;11950:404::o;13295:275::-;13366:2;13360:9;13431:2;13412:13;;-1:-1:-1;;13408:27:1;13396:40;;13466:18;13451:34;;13487:22;;;13448:62;13445:88;;;13513:18;;:::i;:::-;13549:2;13542:22;13295:275;;-1:-1:-1;13295:275:1:o;13575:186::-;13623:4;13656:18;13648:6;13645:30;13642:56;;;13678:18;;:::i;:::-;-1:-1:-1;13744:2:1;13723:15;-1:-1:-1;;13719:29:1;13750:4;13715:40;;13575:186::o;13766:128::-;13806:3;13837:1;13833:6;13830:1;13827:13;13824:39;;;13843:18;;:::i;:::-;-1:-1:-1;13879:9:1;;13766:128::o;13899:120::-;13939:1;13965;13955:35;;13970:18;;:::i;:::-;-1:-1:-1;14004:9:1;;13899:120::o;14024:168::-;14064:7;14130:1;14126;14122:6;14118:14;14115:1;14112:21;14107:1;14100:9;14093:17;14089:45;14086:71;;;14137:18;;:::i;:::-;-1:-1:-1;14177:9:1;;14024:168::o;14197:125::-;14237:4;14265:1;14262;14259:8;14256:34;;;14270:18;;:::i;:::-;-1:-1:-1;14307:9:1;;14197:125::o;14327:258::-;14399:1;14409:113;14423:6;14420:1;14417:13;14409:113;;;14499:11;;;14493:18;14480:11;;;14473:39;14445:2;14438:10;14409:113;;;14540:6;14537:1;14534:13;14531:48;;;-1:-1:-1;;14575:1:1;14557:16;;14550:27;14327:258::o;14590:135::-;14629:3;-1:-1:-1;;14650:17:1;;14647:43;;;14670:18;;:::i;:::-;-1:-1:-1;14717:1:1;14706:13;;14590:135::o;14730:112::-;14762:1;14788;14778:35;;14793:18;;:::i;:::-;-1:-1:-1;14827:9:1;;14730:112::o;14847:127::-;14908:10;14903:3;14899:20;14896:1;14889:31;14939:4;14936:1;14929:15;14963:4;14960:1;14953:15;14979:127;15040:10;15035:3;15031:20;15028:1;15021:31;15071:4;15068:1;15061:15;15095:4;15092:1;15085:15;15111:127;15172:10;15167:3;15163:20;15160:1;15153:31;15203:4;15200:1;15193:15;15227:4;15224:1;15217:15;15243:127;15304:10;15299:3;15295:20;15292:1;15285:31;15335:4;15332:1;15325:15;15359:4;15356:1;15349:15;15375:127;15436:10;15431:3;15427:20;15424:1;15417:31;15467:4;15464:1;15457:15;15491:4;15488:1;15481:15;15507:127;15568:10;15563:3;15559:20;15556:1;15549:31;15599:4;15596:1;15589:15;15623:4;15620:1;15613:15;15639:131;-1:-1:-1;;;;;15714:31:1;;15704:42;;15694:70;;15760:1;15757;15750:12;15775:118;15861:5;15854:13;15847:21;15840:5;15837:32;15827:60;;15883:1;15880;15873:12

Swarm Source

ipfs://84946adc25c2145e7dce85ed10298ade221e64518562e6a3aaa009c5501dfb6d

Block Transaction Difficulty 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
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.