Contract 0x7d28fa576a4e08922b01e897ce4f5517ad351578 1

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa47695357872ab623b918cd11ac6f66d62c6619a6de37467601af647e0ea9331Stake336316862022-09-27 13:28:0819 hrs 17 mins ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.007258699466 31.195926897
0x74523a84005f7bb64df2c8725add969247dfcfd55499a699cb76e764cc51737bGet Reward336315222022-09-27 13:22:2819 hrs 23 mins ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.00846178615 36.792134193
0xdd46c9c1f8e377cf4f34439791bc87fe57ad1f062cb9c139d9ffae47da7c533eSet Reward Param...336314172022-09-27 13:18:3819 hrs 27 mins ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.007037877656 62.487815255
0x13c4ae19e9a7658df9c7b2b982c03687d49ed94efd3c96c9ab318c775a2cc3f8Stake335975972022-09-26 17:04:121 day 15 hrs ago0x05ea385d3991cb94c68069a94ededada69ecf62c IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.010476060002 60.000000015
0xe668727d73dbbf5c9125c2acf1036a10a79be2097b710c92838dba59bcee075fGet Reward335973242022-09-26 16:54:501 day 15 hrs ago0x05ea385d3991cb94c68069a94ededada69ecf62c IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.006539070002 30.000000012
0x9895e1b17507fc5914bebe5065888ca7f5dd413e2dd2d1f2502ddcb8fe93dabcStake335954042022-09-26 15:46:401 day 16 hrs ago0xcc976465b6ee79b86e6033d427bbd49e92716b60 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.0052746367 30.209659169
0xb5d055a20612f7ef4bdd345dec540d6589d3a49dae15642f239f94acaf050806Get Reward335950062022-09-26 15:32:561 day 17 hrs ago0xcc976465b6ee79b86e6033d427bbd49e92716b60 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.00755337965 32.010050685
0x7633da0994ce09e3c1990b6b87f16399092bb99bfa5d31f4d9c520c9cb36fe4bStake335082362022-09-24 13:06:213 days 19 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.007624052172 38.412000004
0xe1bc23eded5fe3dd867451a8b4f344377b48e499ea01b14319a0b8e17a3e2ffaStake334828162022-09-23 22:20:254 days 10 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.006980430002 30.000000011
0xeacef8e34d0394cc7a9262e3a50a81109b1c5b662bc40de71f747fb5407b6452Get Reward334827092022-09-23 22:16:434 days 10 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.007249870277 31.522682726
0xe3b56798a5c1ef088d0b185cd6449a9e595c1f2601b3d5cca747516153261dbbStake334797842022-09-23 20:36:074 days 12 hrs ago0x05ea385d3991cb94c68069a94ededada69ecf62c IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.013961580002 60.000000012
0xd631a9f177eacc5c49cdaa1080fe6bb6426d0a66c66033d521e3c0e21cf411f6Get Reward334761752022-09-23 18:25:394 days 14 hrs ago0x05ea385d3991cb94c68069a94ededada69ecf62c IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.013799340002 60.000000012
0x6433eb0fbe618109112cdd13d779f272c728f1e944579bc6231ed03799cd15e1Stake334401202022-09-22 21:27:075 days 11 hrs ago0x05ea385d3991cb94c68069a94ededada69ecf62c IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.006980430003 30.000000014
0x917578eeb3723495a2fa8e9d34d138d3c81f123b062514b666ed1c8b4d364f4dGet Reward334400852022-09-22 21:25:575 days 11 hrs ago0x05ea385d3991cb94c68069a94ededada69ecf62c IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.007019670003 30.000000013
0x116551e6b455ee92883c3fb41b11d7bf1eb3d6709274927cd37090061cde0037Stake334088332022-09-22 3:22:246 days 5 hrs ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.005954430002 30.000000015
0xd400eb7ad3d360a75e2b932ceccf137e4aea843040652c208aebb4b6a4eddb39Get Reward333719232022-09-21 5:36:267 days 3 hrs ago0x05ea385d3991cb94c68069a94ededada69ecf62c IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.006899670004 30.000000018
0x7305f63a31468d10858896dec7094a00e24f18d1b9f1e83c6846e010b8101b47Stake333365712022-09-20 8:28:388 days 17 mins ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.007339782539 31.544400012
0x1a717aca2ce052cb8c03ae7a05563312299edc737e965902aac2a74c1283229aGet Reward333364562022-09-20 8:24:448 days 20 mins ago0xbd4ae0dc3c0fa45e0119d3c108acde1dad5e7825 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.00691576923 30.070000001
0xff378ffeb01b952a8d7e6be849ddb308909123e90e45b6412e93de8d60e1cedcStake333293942022-09-20 4:13:168 days 4 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.006980790003 30.000000013
0x2cccc635114e6fe25af91a0f51d54cb3a0d94ddc1dd338b4e5fa423713c3634dGet Reward333292552022-09-20 4:08:308 days 4 hrs ago0x96c14f84981a67482201cfc4a1d1d804f81e4be6 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.007412670002 30.00000001
0x7bdb7af12a46ba5ab723302708c0ceea7a893a7802c9140a3381f26bcf13e221Stake332850562022-09-19 2:44:309 days 6 hrs ago0x87d78eda34e6fd287df0167cb1a978ce08d96a2a IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.009757982393 41.935006184
0x952ba0bb553651194b9a68643b73a6eac5f94b78063a77734d905f37dc67ab6bGet Reward332849172022-09-19 2:39:409 days 6 hrs ago0x87d78eda34e6fd287df0167cb1a978ce08d96a2a IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.008895397711 38.677492017
0x099ab9c448733f54160e61556130216a33b70bbcdb6d5c693a6551a7d560f4beStake332741262022-09-18 20:25:559 days 12 hrs ago0x053f362a312f09249c966ce4121f6d896c271f43 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.0070036981 30.100000003
0xc834e0b422d90d65654dfedd7fd907c7f8b2e972c9fd39cdee0b949d8cdec4bbGet Reward332739972022-09-18 20:21:299 days 12 hrs ago0x053f362a312f09249c966ce4121f6d896c271f43 IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.012862581408 52.056471185
0x95af7c76c504de43f191560ff1260e5e0ec979210aa999c759b2e35367d8423dStake332515682022-09-18 7:15:1310 days 1 hr ago0x05ea385d3991cb94c68069a94ededada69ecf62c IN  0x7d28fa576a4e08922b01e897ce4f5517ad3515780 MATIC0.006980790002 30.000000012
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ForgeRewards

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-02-12
*/

// Forge Rewards Contract
// Recieves 25% or 10,500,000 Forge Tokens from the ForgeMining Contract over 100+ years.
// Also recieve 33% of the 0xBitcoin Tokens from the ForgeMining Contract over forever.


// What we are staking:  Forge/0xBitcoin Liquidity Pool Tokens
//What is it?  It is the pool traders use to buy and sell the coin
//The larger the pool, the larger the order the token can handle

//
//Rewards: Forge, 0xBitcoin, and Polygon currently.
// Funds gathered will be dispered over 21 days. 7 Day reward period for 40%.
//Room to Expand to three other cryptocurrencies(Only admin function in all three contracts is to add up to three more cryptocurrencies!)

pragma solidity ^0.8.11;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
 
contract Ownable2 {
    address public owner;
    address [] public moderators;

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

    constructor() {
        owner = msg.sender;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(msg.sender == owner, "Ownable: caller is not the owner");
        _;
    }
    modifier OnlyModerators() {
    bool isModerator = false;
    for(uint x=0; x< moderators.length; x++){
    	if(moderators[x] == msg.sender){
		isModerator = true;
		}
		}
        require(msg.sender == owner || isModerator, "Ownable: caller is not the owner/mod");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */

    function Z_addMod(address newModerator, uint spot) public onlyOwner {
    if(spot >= moderators.length){
    	moderators.push(newModerator);
	}else{
	moderators[spot] = newModerator;
	}
    }
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function Z_transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract StakedTokenWrapper {
    uint256 public totalSupply;

    mapping(address => uint256) private _balances;
    IERC20 public stakedToken;
    
    event Staked(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);

    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    string constant _transferErrorMessage = "staked token transfer failed";
    
    function stakeFor(address forWhom, uint256 amount) public payable virtual {
        IERC20 st = stakedToken;
        if(st == IERC20(address(0))) { //eth
            unchecked {
                totalSupply += msg.value;
                _balances[forWhom] += msg.value;
            }
        }
        else {
            require(msg.value == 0, "non-zero eth");
            require(amount > 0, "Cannot stake 0");
            require(st.transferFrom(msg.sender, address(this), amount), _transferErrorMessage);
            unchecked { 
                totalSupply += amount;
                _balances[forWhom] += amount;
            }
        }
        emit Staked(forWhom, amount);
    }

    function withdraw(uint256 amount) public virtual {
        require(amount <= _balances[msg.sender], "withdraw: balance is lower");
        unchecked {
            _balances[msg.sender] -= amount;
            totalSupply = totalSupply-amount;
        }
        IERC20 st = stakedToken;
        if(st == IERC20(address(0))) { //eth
            (bool success, ) = msg.sender.call{value: amount}("");
            require(success, "eth transfer failure");
        }
        else {
            require(stakedToken.transfer(msg.sender, amount), _transferErrorMessage);
        }
        emit Withdrawn(msg.sender, amount);
    }
}

contract ForgeAuctionsCT{
    uint256 public secondsPerDay;
    uint256 public currentEra;
    }

contract ForgeRewards is StakedTokenWrapper, Ownable2 {
    bool activated6 = false;
    bool activated5 = false;
    bool activated4 = false;
    bool activated7 = false;
    bool activated8 = false;
    uint256 public decimalsExtra=18;
    uint256 public decimalsExtraExtra=18;
    uint256 public decimalsExtraExtra2=18;
    uint256 public decimalsExtraExtra3=18;
    uint64 public poolLength = 24*60*60*7;
    uint256 public totalRewarded;
    uint256 public totalRewarded2;
    uint256 public totalRewarded3;
    uint256 public totalRewardedExtra;
    uint256 public totalRewardedExtraExtra;
    uint256 public totalRewardedExtraExtra2;
    uint256 public totalRewardedExtraExtra3;
    address[] public AddressesEntered;
    IERC20 public rewardTokenExtraExtra3;
    IERC20 public rewardTokenExtraExtra2;
    IERC20 public rewardTokenExtraExtra;
    IERC20 public rewardTokenExtra;
    IERC20 public rewardToken2;
    IERC20 public rewardToken;
    uint256 public rewardRate;
    uint256 public rewardRate2;
    uint256 public rewardRate3;
    uint256 public rewardRateExtra;
    uint256 public rewardRateExtraExtra;
    uint256 public rewardRateExtraExtra2;
    uint256 public rewardRateExtraExtra3;
    uint256 public periodFinish;
    uint256 public periodFinish2;
    uint256 public periodFinish3;
    uint256 public periodFinishExtra;
    uint256 public periodFinishExtraExtra;
    uint256 public periodFinishExtraExtra2;
    uint256 public periodFinishExtraExtra3;
    uint256 public lastUpdateTime;
    uint256 public lastUpdateTime2;
    uint256 public lastUpdateTime3;
    uint256 public lastUpdateTimeExtra;
    uint256 public lastUpdateTimeExtraExtra;
    uint256 public lastUpdateTimeExtraExtra2;
    uint256 public lastUpdateTimeExtraExtra3;

    uint256 public rewardPerTokenStored;
    uint256 public rewardPerTokenStored2;
    uint256 public rewardPerTokenStored3;
    uint256 public rewardPerTokenStoredExtra;
    uint256 public rewardPerTokenStoredExtraExtra;
    uint256 public rewardPerTokenStoredExtraExtra2;
    uint256 public rewardPerTokenStoredExtraExtra3;
	
	ForgeAuctionsCT public AuctionCT;
    struct UserRewards {
        uint256 userRewardPerTokenPaid;
        uint256 rewards;
    }
	
    struct UserRewards2 {
        uint256 userRewardPerTokenPaid2;
        uint256 rewards2;
    }
	
    struct UserRewards3 {
        uint256 userRewardPerTokenPaid3;
        uint256 rewards3;
    }
	
    struct UserRewardsExtra {
        uint256 userRewardPerTokenPaidExtra;
        uint256 rewardsExtra;
    }
    
    struct UserRewardsExtraExtra {
        uint256 userRewardPerTokenPaidExtraExtra;
        uint256 rewardsExtraExtra;
    }
	
    struct UserRewardsExtraExtra2 {
        uint256 userRewardPerTokenPaidExtraExtra2;
        uint256 rewardsExtraExtra2;
    }
	
    struct UserRewardsExtraExtra3 {
        uint256 userRewardPerTokenPaidExtraExtra3;
        uint256 rewardsExtraExtra3;
    }
	
    mapping(address => UserRewards) public userRewards;
    mapping(address => UserRewards2) public userRewards2;
    mapping(address => UserRewards3) public userRewards3;
    mapping(address => UserRewardsExtra) public userRewardsExtra;
    mapping(address => UserRewardsExtraExtra) public userRewardsExtraExtra;
    mapping(address => UserRewardsExtraExtra2) public userRewardsExtraExtra2;
    mapping(address => UserRewardsExtraExtra3) public userRewardsExtraExtra3;

    event RewardPaid(address indexed user, uint256 reward, uint256 rewards2, uint256 rewards3, uint256 rewardsExtra, uint256 rewardsExtraExtra, uint256 rewardsExtraExtra2, uint256 rewardsExtraExtra3);

    event RewardAdded(uint256 reward);
    event RewardAdded2(uint256 rewards2);
    event RewardPaidBasic(address indexed user, uint256 reward1, uint256 rewards2);

    event RewardAdded3(uint256 rewards3);
    event RewardPaid3(address indexed user, uint256 rewards3);

    
    event RewardAdded4(uint256 rewards4);
    event RewardPaidExtra(address indexed user, uint256 rewardsExtra);

    event RewardAdded5(uint256 rewards5);
    event RewardPaidExtraExtra(address indexed user, uint256 rewardsExtraExtra);

    event RewardAdded6(uint256 rewards6);
    event RewardPaidExtraExtra2(address indexed user, uint256 rewardsExtraExtra2);

    event RewardAdded7(uint256 rewards7);
    event RewardPaidExtraExtra3(address indexed user, uint256 rewardsExtraExtra3);

    constructor(IERC20 _rewardForge, IERC20 _LP, IERC20 _reward0xBTC, ForgeAuctionsCT AuctionAddress) {
        rewardToken = _rewardForge;
        stakedToken = _LP;
        rewardToken2 = _reward0xBTC;
	AuctionCT = AuctionAddress;
    }


    function NewRewardTime() public returns (bool success){
	    uint64 poolLength2 = uint64(AuctionCT.secondsPerDay());
	    uint _era = AuctionCT.currentEra();
	    if(_era<5){
	    	poolLength = poolLength2*3;
	    }else if(_era  < 10){
	    	poolLength = poolLength2*5;
	    }else if(poolLength < poolLength2){
		poolLength = poolLength2;
	    }
	}


    function Z_addNewToken(IERC20 tokenExtra, uint _decimalsExtra) external OnlyModerators returns (bool success){
    	require(rewardTokenExtraExtra3 != tokenExtra && tokenExtra != rewardToken && tokenExtra != stakedToken && tokenExtra != rewardToken2 && tokenExtra != rewardTokenExtraExtra && tokenExtra != rewardTokenExtra && tokenExtra != rewardTokenExtraExtra2, "no same token");
	require(!activated4, "Only allowed to add one token");
        decimalsExtra = _decimalsExtra;
        rewardRateExtra = 0;
        rewardTokenExtra = tokenExtra;
        activated4 = true;

        return true;
    }
	

    function Z_addNewToken2(IERC20 tokenTWOExtra, uint _decimalsExtraExtra) external OnlyModerators returns (bool success){
	require(rewardTokenExtraExtra3 != tokenTWOExtra &&  tokenTWOExtra != rewardToken && tokenTWOExtra != stakedToken && tokenTWOExtra != rewardToken2 && tokenTWOExtra != rewardTokenExtra && tokenTWOExtra != rewardTokenExtraExtra && tokenTWOExtra != rewardTokenExtraExtra2, "no same token");
	require(!activated5, "Only allowed to add one token");
        decimalsExtraExtra = _decimalsExtraExtra;
        rewardRateExtraExtra = 0;
        rewardTokenExtraExtra = tokenTWOExtra;
        activated5 = true;
	
        return true;
    }
        
    function Z_addNewToken3(IERC20 tokenTWOExtra2, uint _decimalsExtraExtra2) external OnlyModerators returns (bool success){
	require(rewardTokenExtraExtra3 != tokenTWOExtra2 && tokenTWOExtra2 != rewardToken && tokenTWOExtra2 != stakedToken && tokenTWOExtra2 != rewardToken2 && tokenTWOExtra2 != rewardTokenExtra && tokenTWOExtra2 != rewardTokenExtraExtra && tokenTWOExtra2 != rewardTokenExtraExtra2, "no same token");
	require(!activated6, "Only allowed to add one token");
        decimalsExtraExtra2 = _decimalsExtraExtra2;
        rewardRateExtraExtra2 = 0;
        rewardTokenExtraExtra2 = tokenTWOExtra2;
        activated6 = true;
	
        return true;
    }
        
    function Z_addNewToken4(IERC20 tokenTWOExtra3, uint _decimalsExtraExtra3) external OnlyModerators returns (bool success){
	require(rewardTokenExtraExtra2 != tokenTWOExtra3 && tokenTWOExtra3 != rewardToken && tokenTWOExtra3 != stakedToken && tokenTWOExtra3 != rewardToken2 && tokenTWOExtra3 != rewardTokenExtra && tokenTWOExtra3 != rewardTokenExtraExtra && tokenTWOExtra3 != rewardTokenExtraExtra2, "no same token");
	require(!activated7, "Only allowed to add one token");
        decimalsExtraExtra3 = _decimalsExtraExtra3;
        rewardRateExtraExtra3 = 0;
        rewardTokenExtraExtra3 = tokenTWOExtra3;
        activated7 = true;
	
        return true;
    }
        

    modifier updateReward(address account) {
        uint256 _rewardPerTokenStored = rewardPerToken();
        uint256 _rewardPerTokenStored2 = rewardPerToken2(); 
        uint256 _rewardPerTokenStored3 = rewardPerToken3(); 
        uint256 _rewardPerTokenStoredExtra = rewardPerTokenExtra(); 
        uint256 _rewardPerTokenStoredExtraExtra = rewardPerTokenExtraExtra(); 
        uint256 _rewardPerTokenStoredExtraExtra2 = rewardPerTokenExtraExtra2(); 
        uint256 _rewardPerTokenStoredExtraExtra3 = rewardPerTokenExtraExtra3(); 

        lastUpdateTime = lastTimeRewardApplicable();
        lastUpdateTime2 = lastTimeRewardApplicable2();
        lastUpdateTime3 = lastTimeRewardApplicable3();
        lastUpdateTimeExtra = lastTimeRewardApplicableExtra();
        lastUpdateTimeExtraExtra = lastTimeRewardApplicableExtraExtra();
        lastUpdateTimeExtraExtra2 = lastTimeRewardApplicableExtraExtra2();
        lastUpdateTimeExtraExtra3 = lastTimeRewardApplicableExtraExtra3();
	
        rewardPerTokenStored = _rewardPerTokenStored;
        rewardPerTokenStored2 = _rewardPerTokenStored2;
        rewardPerTokenStored3 = _rewardPerTokenStored3;
        rewardPerTokenStoredExtra = _rewardPerTokenStoredExtra;
        rewardPerTokenStoredExtraExtra = _rewardPerTokenStoredExtraExtra;
        rewardPerTokenStoredExtraExtra2 = _rewardPerTokenStoredExtraExtra2;
        rewardPerTokenStoredExtraExtra3 = _rewardPerTokenStoredExtraExtra3;
	
        userRewards[account].rewards = earned(account);
        userRewards2[account].rewards2 = earned2(account);
        userRewards3[account].rewards3 = earned3(account);
        userRewardsExtra[account].rewardsExtra = earnedExtra(account);
        userRewardsExtraExtra[account].rewardsExtraExtra = earnedExtraExtra(account);
        userRewardsExtraExtra2[account].rewardsExtraExtra2 = earnedExtraExtra2(account);
        userRewardsExtraExtra3[account].rewardsExtraExtra3 = earnedExtraExtra3(account);
	
        userRewards[account].userRewardPerTokenPaid = _rewardPerTokenStored;
        userRewards2[account].userRewardPerTokenPaid2 = _rewardPerTokenStored2;
        userRewards3[account].userRewardPerTokenPaid3 = _rewardPerTokenStored3;
        userRewardsExtra[account].userRewardPerTokenPaidExtra = _rewardPerTokenStoredExtra;
        userRewardsExtraExtra[account].userRewardPerTokenPaidExtraExtra = _rewardPerTokenStoredExtraExtra;
        userRewardsExtraExtra2[account].userRewardPerTokenPaidExtraExtra2 = _rewardPerTokenStoredExtraExtra2;
        userRewardsExtraExtra3[account].userRewardPerTokenPaidExtraExtra3 = _rewardPerTokenStoredExtraExtra3;
        _;
    }


	//admin set up a new token
    function lastTimeRewardApplicable() public view returns (uint256) {
        uint256 blockTimestamp = uint256(block.timestamp);
        return blockTimestamp < periodFinish ? blockTimestamp : periodFinish;
    }


    function lastTimeRewardApplicable2() public view returns (uint256) {
        uint256 blockTimestamp = uint256(block.timestamp);
        return blockTimestamp < periodFinish2 ? blockTimestamp : periodFinish2;
    }


    function lastTimeRewardApplicable3() public view returns (uint256) {
        uint256 blockTimestamp = uint256(block.timestamp);
        return blockTimestamp < periodFinish3 ? blockTimestamp : periodFinish3;
    }


    function lastTimeRewardApplicableExtra() public view returns (uint256) {
        uint256 blockTimestamp = uint256(block.timestamp);
        return blockTimestamp < periodFinishExtra ? blockTimestamp : periodFinishExtra;
    }


    function lastTimeRewardApplicableExtraExtra() public view returns (uint256) {
        uint256 blockTimestamp = uint256(block.timestamp);
        return blockTimestamp < periodFinishExtraExtra ? blockTimestamp : periodFinishExtraExtra;
    }
	

    function lastTimeRewardApplicableExtraExtra2() public view returns (uint256) {
        uint256 blockTimestamp = uint256(block.timestamp);
        return blockTimestamp < periodFinishExtraExtra2 ? blockTimestamp : periodFinishExtraExtra2;
    }
	
	
    function lastTimeRewardApplicableExtraExtra3() public view returns (uint256) {
        uint256 blockTimestamp = uint256(block.timestamp);
        return blockTimestamp < periodFinishExtraExtra3 ? blockTimestamp : periodFinishExtraExtra3;
    }
	
    function rewardPerToken() public view returns (uint256) {
        uint256 totalStakedSupply = totalSupply;
        if (totalStakedSupply == 0) {
            return rewardPerTokenStored;
        }
        unchecked {
            uint256 rewardDuration = lastTimeRewardApplicable()-lastUpdateTime;
            return uint256(rewardPerTokenStored + rewardDuration*rewardRate*(1e36)/totalStakedSupply);
        }
    }


    function rewardPerToken2() public view returns (uint256) {
        uint256 totalStakedSupply = totalSupply;
        if (totalStakedSupply == 0) {
            return rewardPerTokenStored2;
        }
        unchecked {
            uint256 rewardDuration2 = lastTimeRewardApplicable2()-lastUpdateTime2;
            return uint256(rewardPerTokenStored2 + rewardDuration2*rewardRate2*1e36/totalStakedSupply);
        }
    }


    function rewardPerToken3() public view returns (uint256) {
        uint256 totalStakedSupply = totalSupply;
        if (totalStakedSupply == 0) {
            return rewardPerTokenStored3;
        }
        unchecked {
            uint256 rewardDuration3 = lastTimeRewardApplicable3()-lastUpdateTime3;
            return uint256(rewardPerTokenStored3 + rewardDuration3*rewardRate3*1e24/totalStakedSupply);
        }
    }


    function rewardPerTokenExtra() public view returns (uint256) {
        uint256 totalStakedSupply = totalSupply;
        if (totalStakedSupply == 0) {
            return rewardPerTokenStoredExtra;
        }
        unchecked {
            uint256 rewardDurationExtra = lastTimeRewardApplicableExtra()-lastUpdateTimeExtra;
            return uint256(rewardPerTokenStoredExtra + rewardDurationExtra*rewardRateExtra*(10**uint(decimalsExtra*2))/totalStakedSupply);
        }
    }
	
	
    function rewardPerTokenExtraExtra() public view returns (uint256) {
        uint256 totalStakedSupply = totalSupply;
        if (totalStakedSupply == 0) {
            return rewardPerTokenStoredExtraExtra;
        }
        unchecked {
            uint256 rewardDurationExtraExtra = lastTimeRewardApplicableExtraExtra()-lastUpdateTimeExtraExtra;
            return uint256(rewardPerTokenStoredExtraExtra + rewardDurationExtraExtra*rewardRateExtraExtra*(10**uint(decimalsExtraExtra*2))/totalStakedSupply);
        }
    }

    function rewardPerTokenExtraExtra2() public view returns (uint256) {
        uint256 totalStakedSupply = totalSupply;
        if (totalStakedSupply == 0) {
            return rewardPerTokenStoredExtraExtra2;
        }
        unchecked {
            uint256 rewardDurationExtraExtra2 = lastTimeRewardApplicableExtraExtra2()-lastUpdateTimeExtraExtra2;
            return uint256(rewardPerTokenStoredExtraExtra2 + rewardDurationExtraExtra2*rewardRateExtraExtra2*(10**uint(decimalsExtraExtra2*2))/totalStakedSupply);
        }
    }

    function rewardPerTokenExtraExtra3() public view returns (uint256) {
        uint256 totalStakedSupply = totalSupply;
        if (totalStakedSupply == 0) {
            return rewardPerTokenStoredExtraExtra3;
        }
        unchecked {
            uint256 rewardDurationExtraExtra3 = lastTimeRewardApplicableExtraExtra3()-lastUpdateTimeExtraExtra3;
            return uint256(rewardPerTokenStoredExtraExtra3 + rewardDurationExtraExtra3*rewardRateExtraExtra3*(10**uint(decimalsExtraExtra3*2))/totalStakedSupply);
        }
    }

    function earned(address account) public view returns (uint256) {
        unchecked { 
            if(rewardPerToken() < 1e52)
            {
                return uint256(balanceOf(account)*(rewardPerToken()-userRewards[account].userRewardPerTokenPaid)/1e52 + userRewards[account].rewards);
            }else{

                return uint256(balanceOf(account)*((rewardPerToken()-userRewards[account].userRewardPerTokenPaid)/1e52) + userRewards[account].rewards);
                         
            }
        }
    }


    function earned2(address account) public view returns (uint256) {
        unchecked {             
            
            if(rewardPerToken2() < 1e52)
            {
                return uint256(balanceOf(account)*(rewardPerToken2()-userRewards2[account].userRewardPerTokenPaid2)/1e52 + userRewards2[account].rewards2);
            }else{
                 
                return uint256(balanceOf(account)*((rewardPerToken2()-userRewards2[account].userRewardPerTokenPaid2)/1e52) + userRewards2[account].rewards2);
            }
        }
    }


    function earned3(address account) public view returns (uint256) {
        unchecked {             
            if(rewardPerToken3() < 1e40)
            {
                return uint256(balanceOf(account)*(rewardPerToken3()-userRewards3[account].userRewardPerTokenPaid3)/1e40 + userRewards3[account].rewards3);
            }else{
                return uint256(balanceOf(account)*((rewardPerToken3()-userRewards3[account].userRewardPerTokenPaid3)/1e40) + userRewards3[account].rewards3);
            }
        }
    }
	
	
    function earnedExtra(address account) public view returns (uint256) {
        unchecked {            
            if(rewardPerTokenExtra() < (10**(decimalsExtra * 2 + 16)))
            {
                return uint256(balanceOf(account)*(rewardPerTokenExtra()-userRewardsExtra[account].userRewardPerTokenPaidExtra)/(10 **(decimalsExtra * 2 + 16)) + userRewardsExtra[account].rewardsExtra);
            }else{
                return uint256(balanceOf(account)*((rewardPerTokenExtra()-userRewardsExtra[account].userRewardPerTokenPaidExtra)/(10 **(decimalsExtra * 2 + 16))) + userRewardsExtra[account].rewardsExtra);
            }
        }
    }
	
	
    function earnedExtraExtra(address account) public view returns (uint256) {
        unchecked {             
            if(rewardPerTokenExtraExtra() < (10 **(decimalsExtraExtra * 2 + 16)))
            {
                return uint256(balanceOf(account)*(rewardPerTokenExtraExtra()-userRewardsExtraExtra[account].userRewardPerTokenPaidExtraExtra)/(10 **(decimalsExtraExtra * 2 + 16)) + userRewardsExtraExtra[account].rewardsExtraExtra);
            }else{
                return uint256(balanceOf(account)*((rewardPerTokenExtraExtra()-userRewardsExtraExtra[account].userRewardPerTokenPaidExtraExtra)/(10 **(decimalsExtraExtra * 2 + 16))) + userRewardsExtraExtra[account].rewardsExtraExtra);
            }
        }
    }
	

    function earnedExtraExtra2(address account) public view returns (uint256) {
        unchecked { 
            if(rewardPerTokenExtraExtra2() < (10 **(decimalsExtraExtra2 * 2 + 16)))
            {
                return uint256(balanceOf(account)*(rewardPerTokenExtraExtra2()-userRewardsExtraExtra2[account].userRewardPerTokenPaidExtraExtra2)/(10 **(decimalsExtraExtra2 * 2+ 16)) + userRewardsExtraExtra2[account].rewardsExtraExtra2);
            }else{
                return uint256(balanceOf(account)*((rewardPerTokenExtraExtra2()-userRewardsExtraExtra2[account].userRewardPerTokenPaidExtraExtra2)/(10 **(decimalsExtraExtra2 * 2+ 16))) + userRewardsExtraExtra2[account].rewardsExtraExtra2);
            }
        }
    }
	

    function earnedExtraExtra3(address account) public view returns (uint256) {
        unchecked { 
            if(rewardPerTokenExtraExtra3() < (10 **(decimalsExtraExtra3 * 2 + 16)))
            {
                return uint256(balanceOf(account)*(rewardPerTokenExtraExtra3()-userRewardsExtraExtra3[account].userRewardPerTokenPaidExtraExtra3)/(10 **(decimalsExtraExtra3 * 2+ 16)) + userRewardsExtraExtra3[account].rewardsExtraExtra3);
            }else{
                return uint256(balanceOf(account)*((rewardPerTokenExtraExtra3()-userRewardsExtraExtra3[account].userRewardPerTokenPaidExtraExtra3)/(10 **(decimalsExtraExtra3 * 2+ 16))) + userRewardsExtraExtra3[account].rewardsExtraExtra3);
            }
        }
    }
	

    function stake(uint256 amount) external payable {
        stakeFor(msg.sender, amount);
    }


    function stakeFor(address forWhom, uint256 amount) public payable override updateReward(forWhom) {
        super.stakeFor(forWhom, amount);
    }
	

    function withdraw(uint256 amount) public override updateReward(msg.sender) {
        super.withdraw(amount);
    }
	

    function exit() external {
        getReward();
        withdraw(uint256(balanceOf(msg.sender)));
		
    }



//0 = Reward1 and Reward2, 1 = Reward1, 2 = Reward2, 3 = Reward3, 4 = RewardExtra, 5 = RewardExtraExtra
function getRewardBasicBasic(uint choice) public updateReward(msg.sender) {
        //Reward & Reward2 aka 1 and 2
        if(choice == 0){
	    uint256 reward = earned(msg.sender);
            uint256 reward2 = earned2(msg.sender);
            if (reward > 0) {
            	userRewards[msg.sender].rewards = 0;
           	 require(rewardToken.transfer(msg.sender, reward), "reward transfer failed");
            	totalRewarded = totalRewarded - reward;
            }
            if(reward2 > 0){
                userRewards2[msg.sender].rewards2 = 0;
                require(rewardToken2.transfer(msg.sender, reward2), "reward token 2 transfer failed");
                totalRewarded2 = totalRewarded2 - reward2;
            }
           emit RewardPaidBasic(msg.sender, reward, reward2);
		   
        }else if(choice == 2){
            uint256 reward2 = earned2(msg.sender);
            if(reward2 > 0){
               userRewards2[msg.sender].rewards2 = 0;
              require(rewardToken2.transfer(msg.sender, reward2), "reward token 2 transfer failed");
               totalRewarded2 = totalRewarded2 - reward2;
           }
           emit RewardPaidBasic(msg.sender, 0, reward2);
		   
        }else if(choice == 1){
	    uint256 reward = earned(msg.sender);
            if (reward > 0){
               userRewards[msg.sender].rewards = 0;
               require(rewardToken.transfer(msg.sender, reward), "reward transfer failed");
               totalRewarded = totalRewarded - reward;
            }
	    emit RewardPaidBasic(msg.sender, reward, 0);
			
        }else if(choice == 3){
	    uint256 reward3= earned3(msg.sender);
	    if(reward3 > 0){
		userRewards3[msg.sender].rewards3 = 0;
		address payable receiver = payable(msg.sender);
		require(receiver.send(reward3), "Eth transfer failed");
		totalRewarded3 = totalRewarded3 - reward3;
	    }
	    emit RewardPaid3(msg.sender, reward3);

        }else if(choice == 4){
            uint256 rewardExtra = earnedExtra(msg.sender);
            if (rewardExtra > 0){
                userRewardsExtra[msg.sender].rewardsExtra = 0;
                require(rewardTokenExtra.transfer(msg.sender, rewardExtra), "reward transfer failed");
               totalRewardedExtra = totalRewardedExtra - rewardExtra;
       	    }
            emit RewardPaidExtra(msg.sender, rewardExtra);
			
        }else if(choice == 5){
            uint256 rewardExtraExtra = earnedExtraExtra(msg.sender);
            if(rewardExtraExtra > 0)
            {
            	userRewardsExtraExtra[msg.sender].rewardsExtraExtra = 0;
                require(rewardTokenExtraExtra.transfer(msg.sender, rewardExtraExtra), "reward rewardExtraExtra transfer failed");
                totalRewardedExtraExtra = totalRewardedExtraExtra - rewardExtraExtra;
            }
            emit RewardPaidExtraExtra(msg.sender, rewardExtraExtra);
	    
        }else if(choice == 6){
            uint256 rewardExtraExtra2 = earnedExtraExtra2(msg.sender);
            if(rewardExtraExtra2 > 0)
            {
            	userRewardsExtraExtra2[msg.sender].rewardsExtraExtra2 = 0;
                require(rewardTokenExtraExtra2.transfer(msg.sender, rewardExtraExtra2), "reward rewardExtraExtra2 transfer failed");
                totalRewardedExtraExtra2 = totalRewardedExtraExtra2 - rewardExtraExtra2;
            }
            emit RewardPaidExtraExtra2(msg.sender, rewardExtraExtra2);
			
        }else if(choice == 7){
            uint256 rewardExtraExtra3 = earnedExtraExtra3(msg.sender);
            if(rewardExtraExtra3 > 0)
            {
            	userRewardsExtraExtra3[msg.sender].rewardsExtraExtra3 = 0;
                require(rewardTokenExtraExtra3.transfer(msg.sender, rewardExtraExtra3), "reward rewardExtraExtra3 transfer failed");
                totalRewardedExtraExtra3 = totalRewardedExtraExtra3 - rewardExtraExtra3;
            }
            emit RewardPaidExtraExtra3(msg.sender, rewardExtraExtra3);
			
        }
    }

 
    function getReward() public updateReward(msg.sender) {
        uint256 reward = earned(msg.sender);
        uint256 reward2 = earned2(msg.sender);
        uint256 reward3= earned3(msg.sender);
        if (reward > 0) {
            userRewards[msg.sender].rewards = 0;
            if(reward3 > 0){
                userRewards3[msg.sender].rewards3 = 0;
                address payable receiver = payable(msg.sender);
	            require(receiver.send(reward3), "Eth transfer failed");
                totalRewarded3 = totalRewarded3 - reward3;
            }
            require(rewardToken.transfer(msg.sender, reward), "reward transfer failed");
            totalRewarded = totalRewarded - reward;
        }
        if(reward2 > 0)
        {
            
            userRewards2[msg.sender].rewards2 = 0;
            require(rewardToken2.transfer(msg.sender, reward2), "reward token 2 transfer failed");
            totalRewarded2 = totalRewarded2 - reward2;
        }
        uint256 rewardExtra = earnedExtra(msg.sender);
        if (rewardExtra > 0) {
            userRewardsExtra[msg.sender].rewardsExtra = 0;
            require(rewardTokenExtra.transfer(msg.sender, rewardExtra), "reward transfer failed");
            totalRewardedExtra = totalRewardedExtra - rewardExtra;
	    
        }
        uint256 rewardExtraExtra = earnedExtraExtra(msg.sender);
        if(rewardExtraExtra > 0)
        {
            
            userRewardsExtraExtra[msg.sender].rewardsExtraExtra = 0;
            require(rewardTokenExtraExtra.transfer(msg.sender, rewardExtraExtra), "reward token 2 transfer failed");
            totalRewardedExtraExtra = totalRewardedExtraExtra - rewardExtraExtra;
        }
	
        uint256 rewardExtraExtra2 = earnedExtraExtra2(msg.sender);
        if(rewardExtraExtra2 > 0)
        {
            
            userRewardsExtraExtra2[msg.sender].rewardsExtraExtra2 = 0;
            require(rewardTokenExtraExtra2.transfer(msg.sender, rewardExtraExtra2), "reward token 2 transfer failed");
            totalRewardedExtraExtra2 = totalRewardedExtraExtra2 - rewardExtraExtra2;
        }
       uint256 rewardExtraExtra3 = earnedExtraExtra3(msg.sender);
        if(rewardExtraExtra3 > 0)
        {
            
            userRewardsExtraExtra3[msg.sender].rewardsExtraExtra3 = 0;
            require(rewardTokenExtraExtra3.transfer(msg.sender, rewardExtraExtra3), "reward token 2 transfer failed");
            totalRewardedExtraExtra3 = totalRewardedExtraExtra3 - rewardExtraExtra3;
        }
        emit RewardPaid(msg.sender, reward, reward2, reward3, rewardExtra, rewardExtraExtra, rewardExtraExtra2, rewardExtraExtra3);
			
    }
 
 
    function Z_setRewardParamsExtraExtra2(uint256 reward, uint64 duration) external {
        unchecked {
            require(reward > 0);
            duration = poolLength;  
            rewardPerTokenStoredExtraExtra2 = rewardPerTokenExtraExtra2();
            uint256 blockTimestamp = uint256(block.timestamp);
            require(blockTimestamp > periodFinishExtraExtra2, "MUST BE AFTER Previous Distribution ");
	    
            uint256 maxRewardSupply = rewardTokenExtraExtra2.balanceOf(address(this)) - totalRewardedExtraExtra2;
            
            if(rewardTokenExtraExtra2 == stakedToken){
                maxRewardSupply -= totalSupply;
	    }
            if(maxRewardSupply > duration)
            {
                rewardRateExtraExtra2 = ((maxRewardSupply*4*10**16)/10)/duration;
            }
            else{
                rewardRateExtraExtra2 = 0;
            }
            reward = (maxRewardSupply*4)/10;

            lastUpdateTimeExtraExtra2 = blockTimestamp;
            periodFinishExtraExtra2 = blockTimestamp+duration;
            totalRewardedExtraExtra2 = reward + totalRewardedExtraExtra2;
			
            emit RewardAdded6(reward);
			
        }
    }

    function Z_setRewardParamsExtraExtra3(uint256 reward, uint64 duration) external {
        unchecked {
            require(reward > 0);
            duration = poolLength;  
            rewardPerTokenStoredExtraExtra3 = rewardPerTokenExtraExtra3();
            uint256 blockTimestamp = uint256(block.timestamp);
            require(blockTimestamp > periodFinishExtraExtra3, "MUST BE AFTER Previous Distribution ");
	    
            uint256 maxRewardSupply = rewardTokenExtraExtra3.balanceOf(address(this)) - totalRewardedExtraExtra3;
            
            if(rewardTokenExtraExtra3 == stakedToken){
                maxRewardSupply -= totalSupply;
	    }
            if(maxRewardSupply > duration)
            {
                rewardRateExtraExtra3 = ((maxRewardSupply*4*10**16)/10)/duration;
            }
            else{
                rewardRateExtraExtra3 = 0;
            }
            reward = (maxRewardSupply*4)/10;

            lastUpdateTimeExtraExtra3 = blockTimestamp;
            periodFinishExtraExtra3 = blockTimestamp+duration;
            totalRewardedExtraExtra3 = reward + totalRewardedExtraExtra3;
			
            emit RewardAdded7(reward);
			
        }
    }

 
    function Z_setRewardParamsExtraExtra(uint256 reward, uint64 duration) external {
        unchecked {
            require(reward > 0);
            duration = poolLength;  
            rewardPerTokenStoredExtraExtra = rewardPerTokenExtraExtra();
            uint256 blockTimestamp = uint256(block.timestamp);
            require(blockTimestamp > periodFinishExtraExtra, "MUST BE AFTER Previous Distribution ");
            uint256 maxRewardSupply = rewardTokenExtraExtra.balanceOf(address(this)) - totalRewardedExtraExtra;
            
            if(rewardTokenExtraExtra == stakedToken){
                maxRewardSupply -= totalSupply;
	    }
            if(maxRewardSupply > duration)
            {
                rewardRateExtraExtra = ((maxRewardSupply*4*10**16)/10)/duration;
            }
            else{
                rewardRateExtraExtra = 0;
            }
            reward = (maxRewardSupply*4)/10;

            lastUpdateTimeExtraExtra = blockTimestamp;
            periodFinishExtraExtra = blockTimestamp+duration;
            totalRewardedExtraExtra = reward + totalRewardedExtraExtra;
			
            emit RewardAdded5(reward);
			
        }
    }



    function Z_setRewardParamsExtra(uint256 reward, uint64 duration) external {
        unchecked {
            require(reward > 0);
            duration = poolLength; 
            rewardPerTokenStoredExtra = rewardPerTokenExtra();
            uint256 blockTimestamp = uint256(block.timestamp);
            require(blockTimestamp > periodFinishExtra, "MUST BE AFTER Previous Distribution ");
            uint256 maxRewardSupply = rewardTokenExtra.balanceOf(address(this)) - totalRewardedExtra;
            
            if(rewardTokenExtra == stakedToken){
                maxRewardSupply -= totalSupply;
	    }
            if(maxRewardSupply > duration)
            {
                rewardRateExtra = (maxRewardSupply*4*10**16)/duration/10;
            }
            else{
                rewardRateExtra = 0;
            }
            reward = (maxRewardSupply*4)/10;
            lastUpdateTimeExtra = blockTimestamp;
            periodFinishExtra = blockTimestamp+duration;
            totalRewardedExtra = reward + totalRewardedExtra;
			
            emit RewardAdded4(reward);
			
        }
    }





    function setRewardParamsALL(uint choice) external {
        if(choice == 1)
        {
            this.Z_setRewardParamsExtra(3, 33);
        }else if(choice == 2){
            this.Z_setRewardParamsExtraExtra(3, 33);
            this.Z_setRewardParamsExtra(3, 33);
        }else if(choice == 3){
            this.Z_setRewardParamsExtraExtra2(3, 33);
            this.Z_setRewardParamsExtraExtra(3, 33);
            this.Z_setRewardParamsExtra(3, 33);
	}else if(choice == 4){
            this.Z_setRewardParamsExtraExtra3(3, 33);
            this.Z_setRewardParamsExtraExtra2(3, 33);
            this.Z_setRewardParamsExtraExtra(3, 33);
            this.Z_setRewardParamsExtra(3, 33);
        }else{
            this.Z_setRewardParamsForge(2, 22);
            this.Z_setRewardParams0xBTC(2, 22);
            this.Z_setRewardParamsETH(2, 22);
        }
    }


    function Z_setRewardParamsForge(uint256 reward, uint64 duration) external {
        unchecked {
            require(reward > 0);
            duration = poolLength; 
            rewardPerTokenStored = rewardPerToken();
            uint256 blockTimestamp = uint256(block.timestamp);
            require(blockTimestamp > periodFinish, "MUST BE AFTER Previous Distribution ");
            uint256 maxRewardSupply = rewardToken.balanceOf(address(this)) - totalRewarded;
            
            if(rewardToken == stakedToken){
                maxRewardSupply -= totalSupply;
	    }
            if(maxRewardSupply > 3)
            {
                rewardRate = ((maxRewardSupply*4*10**16)/10)/duration ;
            }
            else{
                rewardRate = 0;
            }
            
            reward = (maxRewardSupply*4)/10;
            lastUpdateTime = blockTimestamp;
            periodFinish = blockTimestamp+duration;
            totalRewarded = reward + totalRewarded;
            emit RewardAdded(reward);
        }
    }
	

    function Z_setRewardParams0xBTC(uint256 reward, uint64 duration) external {
        unchecked {
            require(reward > 0);
            duration = poolLength;  
            rewardPerTokenStored2 = rewardPerToken2();
            uint256 blockTimestamp = uint256(block.timestamp);
            require(blockTimestamp > periodFinish2, "MUST BE AFTER Previous Rewards");
            
            uint256 maxRewardSupply2 = rewardToken2.balanceOf(address(this)) - totalRewarded2;
            if(rewardToken2 == stakedToken){
                maxRewardSupply2 -= totalSupply;
	    }
            if(maxRewardSupply2 > reward)
            {
                rewardRate2 = ((maxRewardSupply2*4*10**16)/10)/duration;
            }
            else{
                rewardRate2 = 0;
            }
            reward = (maxRewardSupply2*4)/10;
            lastUpdateTime2 = blockTimestamp;
            periodFinish2 = blockTimestamp+duration;
            totalRewarded2 = reward + totalRewarded2;
            emit RewardAdded2(reward);
        }
    }


    function Z_setRewardParamsETH(uint256 reward, uint64 duration) external {
        unchecked {
            require(reward > 0);
            duration = poolLength;  
            rewardPerTokenStored3 = rewardPerToken3();
            uint256 blockTimestamp = uint256(block.timestamp);
            require(blockTimestamp > periodFinish3, "MUST BE AFTER Previous Rewards");
            uint256 maxRewardSupply3 = address(this).balance - totalRewarded3;

            if(maxRewardSupply3 > duration)
            {
                rewardRate3 = ((maxRewardSupply3*4*10**16)/10)/duration;
            }
            else{
                rewardRate3 = 0;
            }            
            reward = (maxRewardSupply3*4)/10;
            lastUpdateTime3 = blockTimestamp;
            periodFinish3 = blockTimestamp+duration;
            totalRewarded3 = reward + totalRewarded3;
            emit RewardAdded3(reward);
        }
    }
}


/*
*
* MIT License
* ===========
*
* Copyright (c) 2022 Forge
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.   
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
*/
//Staking Rewards

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"contract IERC20","name":"_rewardForge","type":"address"},{"internalType":"contract IERC20","name":"_LP","type":"address"},{"internalType":"contract IERC20","name":"_reward0xBTC","type":"address"},{"internalType":"contract ForgeAuctionsCT","name":"AuctionAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewards2","type":"uint256"}],"name":"RewardAdded2","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewards3","type":"uint256"}],"name":"RewardAdded3","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewards4","type":"uint256"}],"name":"RewardAdded4","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewards5","type":"uint256"}],"name":"RewardAdded5","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewards6","type":"uint256"}],"name":"RewardAdded6","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"rewards7","type":"uint256"}],"name":"RewardAdded7","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewards2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewards3","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsExtra","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsExtraExtra","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsExtraExtra2","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewardsExtraExtra3","type":"uint256"}],"name":"RewardPaid","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewards3","type":"uint256"}],"name":"RewardPaid3","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward1","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"rewards2","type":"uint256"}],"name":"RewardPaidBasic","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardsExtra","type":"uint256"}],"name":"RewardPaidExtra","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardsExtraExtra","type":"uint256"}],"name":"RewardPaidExtraExtra","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardsExtraExtra2","type":"uint256"}],"name":"RewardPaidExtraExtra2","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"rewardsExtraExtra3","type":"uint256"}],"name":"RewardPaidExtraExtra3","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"AddressesEntered","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AuctionCT","outputs":[{"internalType":"contract ForgeAuctionsCT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NewRewardTime","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newModerator","type":"address"},{"internalType":"uint256","name":"spot","type":"uint256"}],"name":"Z_addMod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenExtra","type":"address"},{"internalType":"uint256","name":"_decimalsExtra","type":"uint256"}],"name":"Z_addNewToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenTWOExtra","type":"address"},{"internalType":"uint256","name":"_decimalsExtraExtra","type":"uint256"}],"name":"Z_addNewToken2","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenTWOExtra2","type":"address"},{"internalType":"uint256","name":"_decimalsExtraExtra2","type":"uint256"}],"name":"Z_addNewToken3","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenTWOExtra3","type":"address"},{"internalType":"uint256","name":"_decimalsExtraExtra3","type":"uint256"}],"name":"Z_addNewToken4","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"Z_setRewardParams0xBTC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"Z_setRewardParamsETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"Z_setRewardParamsExtra","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"Z_setRewardParamsExtraExtra","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"Z_setRewardParamsExtraExtra2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"Z_setRewardParamsExtraExtra3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reward","type":"uint256"},{"internalType":"uint64","name":"duration","type":"uint64"}],"name":"Z_setRewardParamsForge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"Z_transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimalsExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimalsExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimalsExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimalsExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earned3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earnedExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earnedExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earnedExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"earnedExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"choice","type":"uint256"}],"name":"getRewardBasicBasic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicable3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicableExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicableExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicableExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeRewardApplicableExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTime3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTimeExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTimeExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTimeExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastUpdateTimeExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"moderators","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinish3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinishExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinishExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinishExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodFinishExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerToken3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStored3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStoredExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStoredExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStoredExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerTokenStoredExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRate3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRateExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRateExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRateExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardRateExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardToken2","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardTokenExtra","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardTokenExtraExtra","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardTokenExtraExtra2","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardTokenExtraExtra3","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"choice","type":"uint256"}],"name":"setRewardParamsALL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"forWhom","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stakeFor","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"stakedToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewarded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewarded2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewarded3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardedExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardedExtraExtra","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardedExtraExtra2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewardedExtraExtra3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewards","outputs":[{"internalType":"uint256","name":"userRewardPerTokenPaid","type":"uint256"},{"internalType":"uint256","name":"rewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewards2","outputs":[{"internalType":"uint256","name":"userRewardPerTokenPaid2","type":"uint256"},{"internalType":"uint256","name":"rewards2","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewards3","outputs":[{"internalType":"uint256","name":"userRewardPerTokenPaid3","type":"uint256"},{"internalType":"uint256","name":"rewards3","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardsExtra","outputs":[{"internalType":"uint256","name":"userRewardPerTokenPaidExtra","type":"uint256"},{"internalType":"uint256","name":"rewardsExtra","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardsExtraExtra","outputs":[{"internalType":"uint256","name":"userRewardPerTokenPaidExtraExtra","type":"uint256"},{"internalType":"uint256","name":"rewardsExtraExtra","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardsExtraExtra2","outputs":[{"internalType":"uint256","name":"userRewardPerTokenPaidExtraExtra2","type":"uint256"},{"internalType":"uint256","name":"rewardsExtraExtra2","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userRewardsExtraExtra3","outputs":[{"internalType":"uint256","name":"userRewardPerTokenPaidExtraExtra3","type":"uint256"},{"internalType":"uint256","name":"rewardsExtraExtra3","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526005805464ffffffffff191690556012600681905560078190556008819055600955600a80546001600160401b03191662093a801790553480156200004857600080fd5b5060405162005690380380620056908339810160408190526200006b91620000e2565b60038054336001600160a01b0319918216179091556018805482166001600160a01b0396871617905560028054821694861694909417909355601780548416928516929092179091556035805490921692169190911790556200014a565b6001600160a01b0381168114620000df57600080fd5b50565b60008060008060808587031215620000f957600080fd5b84516200010681620000c9565b60208601519094506200011981620000c9565b60408601519093506200012c81620000c9565b60608601519092506200013f81620000c9565b939692955090935050565b615536806200015a6000396000f3fe6080604052600436106106645760003560e01c8063980a03a611610343578063c2e89047116101bb578063df173f16116100f7578063f14ed5ac116100a0578063f7c618c11161007a578063f7c618c114611166578063f8960b3b14611186578063fd5741cc1461119c578063ff42cd5e146111b257600080fd5b8063f14ed5ac14611124578063f3e168d91461113a578063f590a6801461115057600080fd5b8063e9fad8ee116100d1578063e9fad8ee146110e3578063ebe2b12b146110f8578063eda188881461110e57600080fd5b8063df173f1614611098578063e1019fa2146110ad578063e8571d36146110cd57600080fd5b8063cc4027c011610164578063d575b4e31161013e578063d575b4e31461102c578063d61a47f11461104c578063d80f4b831461106c578063df136d651461108257600080fd5b8063cc4027c014610fe1578063cc7a262e14610ff7578063cd3daf9d1461101757600080fd5b8063c8f33c9111610195578063c8f33c9114610f95578063cb12b2f514610fab578063cb35a57714610fcb57600080fd5b8063c2e8904714610f54578063c436462214610f6a578063c8372cf114610f8057600080fd5b8063a694fc3a1161028a578063b302181a11610233578063bb58b6bc1161020d578063bb58b6bc14610eca578063bd842a1114610ee0578063bdc0fc7214610f00578063c09486db14610f2057600080fd5b8063b302181a14610e75578063b4e9666514610e95578063b8e36ef414610eb557600080fd5b8063ac07e3d711610264578063ac07e3d714610e29578063aed29d0714610e49578063b07bedc614610e5f57600080fd5b8063a694fc3a14610dc2578063a7f377cf14610dd5578063aa5fb8e114610e0957600080fd5b8063a04c1e65116102ec578063a2d5e036116102c6578063a2d5e03614610d6c578063a373598314610d8c578063a445855914610dac57600080fd5b8063a04c1e6514610d2b578063a1d639b514610d40578063a20f677314610d5657600080fd5b80639ddd674b1161031d5780639ddd674b14610ce05780639f0aacdf14610d005780639fa5b78b14610d1657600080fd5b8063980a03a614610c955780639a5239d514610cab5780639b9ad5d614610cc057600080fd5b80633da31dc3116104e15780636b379b521161041d5780637b0a47ee116103c657806380faa57d116103a057806380faa57d14610c2b5780638da5cb5b14610c405780639617e95614610c605780639646961a14610c8057600080fd5b80637b0a47ee14610bd55780637b279ddc14610beb5780637b64a86d14610c0b57600080fd5b806372d2782d116103f757806372d2782d14610b935780637677699414610ba95780637a7e074614610bbf57600080fd5b80636b379b5214610b31578063702a090814610b4757806370a0823114610b5d57600080fd5b806350913b011161048a5780635f16647d116104645780635f16647d14610a8d578063638e5f9614610aad5780636504f40314610ae157806365b0cd7e14610b1157600080fd5b806350913b0114610a4b578063559a171c14610a615780635a0231c614610a7757600080fd5b806347e4e457116104bb57806347e4e457146109eb578063483ee28b14610a1f5780634a85607914610a3557600080fd5b80633da31dc3146109965780633ef3c91c146109b6578063434f8132146109cb57600080fd5b806316464ed6116105b05780632ee409081161055957806339b4edda1161053357806339b4edda146109355780633b28bb751461094b5780633d18b9121461096b5780633d6e0ced1461098057600080fd5b80632ee40908146108ec57806335cfcdd8146108ff57806338b3369a1461091f57600080fd5b806325db42b21161058a57806325db42b2146108745780632c33b05e146108945780632e1a7d4d146108cc57600080fd5b806316464ed61461081557806318160ddd1461082a578063204cd8e81461084057600080fd5b80630bb8406b1161061257806310eb81c4116105ec57806310eb81c4146107ca57806312abf0bb146107ea57806312e5d7751461080057600080fd5b80630bb8406b1461075f578063104370e41461079357806310d443a4146107b557600080fd5b8063069104d311610643578063069104d3146106fb57806307b9c27514610710578063081e3eda1461072557600080fd5b80628cc26214610669578063032632671461069c5780630660f1e8146106b2575b600080fd5b34801561067557600080fd5b50610689610684366004615326565b6111d2565b6040519081526020015b60405180910390f35b3480156106a857600080fd5b5061068960065481565b3480156106be57600080fd5b506106e66106cd366004615326565b6036602052600090815260409020805460019091015482565b60408051928352602083019190915201610693565b34801561070757600080fd5b506106896112e3565b34801561071c57600080fd5b5061068961132d565b34801561073157600080fd5b50600a546107469067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610693565b34801561076b57600080fd5b506106e661077a366004615326565b603a602052600090815260409020805460019091015482565b34801561079f57600080fd5b506107b36107ae36600461534a565b61134b565b005b3480156107c157600080fd5b506106896116ad565b3480156107d657600080fd5b506107b36107e5366004615363565b6116c3565b3480156107f657600080fd5b5061068960095481565b34801561080c57600080fd5b5061068961188c565b34801561082157600080fd5b506106896118d6565b34801561083657600080fd5b5061068960005481565b34801561084c57600080fd5b506106e661085b366004615326565b6039602052600090815260409020805460019091015482565b34801561088057600080fd5b5061068961088f366004615326565b6118ec565b3480156108a057600080fd5b506016546108b4906001600160a01b031681565b6040516001600160a01b039091168152602001610693565b3480156108d857600080fd5b506107b36108e736600461534a565b611982565b6107b36108fa3660046153a0565b611ba6565b34801561090b57600080fd5b506107b361091a366004615363565b611dcc565b34801561092b57600080fd5b5061068960225481565b34801561094157600080fd5b5061068960235481565b34801561095757600080fd5b506107b3610966366004615326565b611f86565b34801561097757600080fd5b506107b3611fe9565b34801561098c57600080fd5b50610689601f5481565b3480156109a257600080fd5b506015546108b4906001600160a01b031681565b3480156109c257600080fd5b506106896128dd565b3480156109d757600080fd5b506108b46109e636600461534a565b612927565b3480156109f757600080fd5b506106e6610a06366004615326565b603c602052600090815260409020805460019091015482565b348015610a2b57600080fd5b5061068960295481565b348015610a4157600080fd5b50610689602b5481565b348015610a5757600080fd5b5061068960255481565b348015610a6d57600080fd5b50610689601c5481565b348015610a8357600080fd5b50610689600f5481565b348015610a9957600080fd5b506107b3610aa83660046153a0565b612951565b348015610ab957600080fd5b506106e6610ac8366004615326565b6037602052600090815260409020805460019091015482565b348015610aed57600080fd5b50610b01610afc3660046153a0565b612a4b565b6040519015158152602001610693565b348015610b1d57600080fd5b506013546108b4906001600160a01b031681565b348015610b3d57600080fd5b50610689600e5481565b348015610b5357600080fd5b5061068960335481565b348015610b6957600080fd5b50610689610b78366004615326565b6001600160a01b031660009081526001602052604090205490565b348015610b9f57600080fd5b5061068960285481565b348015610bb557600080fd5b50610689601a5481565b348015610bcb57600080fd5b50610689602d5481565b348015610be157600080fd5b5061068960195481565b348015610bf757600080fd5b50610b01610c063660046153a0565b612c9d565b348015610c1757600080fd5b50610b01610c263660046153a0565b612eec565b348015610c3757600080fd5b50610689613133565b348015610c4c57600080fd5b506003546108b4906001600160a01b031681565b348015610c6c57600080fd5b50610689610c7b366004615326565b613149565b348015610c8c57600080fd5b506106896131d1565b348015610ca157600080fd5b50610689602c5481565b348015610cb757600080fd5b50610689613222565b348015610ccc57600080fd5b506107b3610cdb366004615363565b613238565b348015610cec57600080fd5b506107b3610cfb366004615363565b6133dc565b348015610d0c57600080fd5b50610689601e5481565b348015610d2257600080fd5b506106896134f9565b348015610d3757600080fd5b5061068961350f565b348015610d4c57600080fd5b50610689600c5481565b348015610d6257600080fd5b50610689600d5481565b348015610d7857600080fd5b506107b3610d87366004615363565b613525565b348015610d9857600080fd5b50610689610da7366004615326565b6136df565b348015610db857600080fd5b5061068960265481565b6107b3610dd036600461534a565b613767565b348015610de157600080fd5b506106e6610df0366004615326565b6038602052600090815260409020805460019091015482565b348015610e1557600080fd5b506107b3610e24366004615363565b613771565b348015610e3557600080fd5b506107b3610e44366004615363565b613922565b348015610e5557600080fd5b50610689600b5481565b348015610e6b57600080fd5b5061068960075481565b348015610e8157600080fd5b506014546108b4906001600160a01b031681565b348015610ea157600080fd5b506035546108b4906001600160a01b031681565b348015610ec157600080fd5b50610689613ae9565b348015610ed657600080fd5b5061068960215481565b348015610eec57600080fd5b506108b4610efb36600461534a565b613b33565b348015610f0c57600080fd5b50610689610f1b366004615326565b613b43565b348015610f2c57600080fd5b506106e6610f3b366004615326565b603b602052600090815260409020805460019091015482565b348015610f6057600080fd5b50610689601d5481565b348015610f7657600080fd5b5061068960305481565b348015610f8c57600080fd5b50610b01613bcb565b348015610fa157600080fd5b5061068960275481565b348015610fb757600080fd5b50610b01610fc63660046153a0565b613d4b565b348015610fd757600080fd5b5061068960105481565b348015610fed57600080fd5b50610689601b5481565b34801561100357600080fd5b506002546108b4906001600160a01b031681565b34801561102357600080fd5b50610689613fa0565b34801561103857600080fd5b506107b361104736600461534a565b613ff1565b34801561105857600080fd5b506017546108b4906001600160a01b031681565b34801561107857600080fd5b50610689602f5481565b34801561108e57600080fd5b50610689602e5481565b3480156110a457600080fd5b50610689614cbe565b3480156110b957600080fd5b506106896110c8366004615326565b614d0a565b3480156110d957600080fd5b5061068960115481565b3480156110ef57600080fd5b506107b3614d92565b34801561110457600080fd5b5061068960205481565b34801561111a57600080fd5b5061068960085481565b34801561113057600080fd5b5061068960345481565b34801561114657600080fd5b5061068960245481565b34801561115c57600080fd5b50610689602a5481565b34801561117257600080fd5b506018546108b4906001600160a01b031681565b34801561119257600080fd5b5061068960315481565b3480156111a857600080fd5b5061068960325481565b3480156111be57600080fd5b506106896111cd366004615326565b614db5565b6000751aba4714957d300d0e549208b31adb100000000000006111f3613fa0565b101561126e576001600160a01b038216600090815260366020526040902060018101549054751aba4714957d300d0e549208b31adb1000000000000090611238613fa0565b03611258856001600160a01b031660009081526001602052604090205490565b0281611266576112666153cc565b040192915050565b6001600160a01b038216600090815260366020526040902060018101549054751aba4714957d300d0e549208b31adb10000000000000906112ad613fa0565b03816112bb576112bb6153cc565b046112db846001600160a01b031660009081526001602052604090205490565b020192915050565b60008054806112f457505060335490565b6000602c546113016118d6565b03905081600854600202600a0a601e5483020281611321576113216153cc565b04603354019250505090565b6024546000904290811061134357602454611345565b805b91505090565b80600114156113b05760405163ac07e3d760e01b81526003600482015260216024820152309063ac07e3d7906044015b600060405180830381600087803b15801561139557600080fd5b505af11580156113a9573d6000803e3d6000fd5b5050505050565b806002141561143d5760405163043ae07160e21b8152600360048201526021602482015230906310eb81c4906044015b600060405180830381600087803b1580156113fa57600080fd5b505af115801561140e573d6000803e3d6000fd5b505060405163ac07e3d760e01b8152600360048201526021602482015230925063ac07e3d7915060440161137b565b80600314156114ca5760405163516af01b60e11b81526003600482015260216024820152309063a2d5e036906044015b600060405180830381600087803b15801561148757600080fd5b505af115801561149b573d6000803e3d6000fd5b505060405163043ae07160e21b815260036004820152602160248201523092506310eb81c491506044016113e0565b806004141561156f576040517f35cfcdd8000000000000000000000000000000000000000000000000000000008152600360048201526021602482015230906335cfcdd890604401600060405180830381600087803b15801561152c57600080fd5b505af1158015611540573d6000803e3d6000fd5b505060405163516af01b60e11b8152600360048201526021602482015230925063a2d5e036915060440161146d565b6040517faa5fb8e10000000000000000000000000000000000000000000000000000000081526002600482015260166024820152309063aa5fb8e190604401600060405180830381600087803b1580156115c857600080fd5b505af11580156115dc573d6000803e3d6000fd5b50506040517f9b9ad5d60000000000000000000000000000000000000000000000000000000081526002600482015260166024820152309250639b9ad5d69150604401600060405180830381600087803b15801561163957600080fd5b505af115801561164d573d6000803e3d6000fd5b50506040517f9ddd674b0000000000000000000000000000000000000000000000000000000081526002600482015260166024820152309250639ddd674b9150604401600060405180830381600087803b15801561139557600080fd5b50565b6023546000904290811061134357602354611345565b600082116116d057600080fd5b50600a5467ffffffffffffffff166116e6613ae9565b6032556024544290811161174d5760405162461bcd60e51b8152602060048201526024808201527f4d5553542042452041465445522050726576696f757320446973747269627574604482015263034b7b7160e51b60648201526084015b60405180910390fd5b600f546015546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa15801561179a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117be91906153e2565b6002546015549290910392506001600160a01b03918216911614156117e35760005490035b8267ffffffffffffffff168111156118235767ffffffffffffffff8316600a668e1bc9bf0400008302048161181a5761181a6153cc565b04601d55611829565b6000601d555b602b82905567ffffffffffffffff83168201602455600f8054600a60048402049081019091556040518181529094507f9e0ea166a59c148d4334c77b0eda4ea4819df6a57e58a0fc764f8ec5cae7927c906020015b60405180910390a150505050565b600080548061189d57505060345490565b6000602d546118aa61350f565b03905081600954600202600a0a601f54830202816118ca576118ca6153cc565b04603454019250505090565b6025546000904290811061134357602554611345565b6000701d6329f1c35ca4bfabb9f5610000000000611908614cbe565b1015611948576001600160a01b038216600090815260386020526040902060018101549054701d6329f1c35ca4bfabb9f561000000000090611238614cbe565b6001600160a01b038216600090815260386020526040902060018101549054701d6329f1c35ca4bfabb9f5610000000000906112ad614cbe565b33600061198d613fa0565b905060006119996131d1565b905060006119a5614cbe565b905060006119b16128dd565b905060006119bd613ae9565b905060006119c96112e3565b905060006119d561188c565b90506119df613133565b6027556119ea613222565b6028556119f56134f9565b602955611a006116ad565b602a55611a0b61132d565b602b55611a166118d6565b602c55611a2161350f565b602d55602e879055602f86905560308590556031849055603283905560338290556034819055611a50886111d2565b6001600160a01b038916600090815260366020526040902060010155611a7588614db5565b6001600160a01b038916600090815260376020526040902060010155611a9a886118ec565b6001600160a01b038916600090815260386020526040902060010155611abf886136df565b6001600160a01b038916600090815260396020526040902060010155611ae488613149565b6001600160a01b0389166000908152603a6020526040902060010155611b0988614d0a565b6001600160a01b0389166000908152603b6020526040902060010155611b2e88613b43565b6001600160a01b0389166000908152603c602081815260408084206001810195909555603682528084208c9055603782528084208b9055603882528084208a905560398252808420899055603a8252808420889055603b82529092208590559052819055611b9b89614e5a565b505050505050505050565b816000611bb1613fa0565b90506000611bbd6131d1565b90506000611bc9614cbe565b90506000611bd56128dd565b90506000611be1613ae9565b90506000611bed6112e3565b90506000611bf961188c565b9050611c03613133565b602755611c0e613222565b602855611c196134f9565b602955611c246116ad565b602a55611c2f61132d565b602b55611c3a6118d6565b602c55611c4561350f565b602d55602e879055602f86905560308590556031849055603283905560338290556034819055611c74886111d2565b6001600160a01b038916600090815260366020526040902060010155611c9988614db5565b6001600160a01b038916600090815260376020526040902060010155611cbe886118ec565b6001600160a01b038916600090815260386020526040902060010155611ce3886136df565b6001600160a01b038916600090815260396020526040902060010155611d0888613149565b6001600160a01b0389166000908152603a6020526040902060010155611d2d88614d0a565b6001600160a01b0389166000908152603b6020526040902060010155611d5288613b43565b6001600160a01b0389166000908152603c602081815260408084206001810195909555603682528084208c9055603782528084208b9055603882528084208a905560398252808420899055603a8252808420889055603b82529092208590559052819055611dc08a8a615089565b50505050505050505050565b60008211611dd957600080fd5b50600a5467ffffffffffffffff16611def61188c565b60345560265442908111611e515760405162461bcd60e51b8152602060048201526024808201527f4d5553542042452041465445522050726576696f757320446973747269627574604482015263034b7b7160e51b6064820152608401611744565b6011546013546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec291906153e2565b6002546013549290910392506001600160a01b0391821691161415611ee75760005490035b8267ffffffffffffffff16811115611f275767ffffffffffffffff8316600a668e1bc9bf04000083020481611f1e57611f1e6153cc565b04601f55611f2d565b6000601f555b602d82905567ffffffffffffffff8316820160265560118054600a60048402049081019091556040518181529094507f2be0c8d9d3c312643faaa85bb299ab638a9e1320dc7f5c082f04d9842b3bce799060200161187e565b6003546001600160a01b03163314611fe05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611744565b6116aa816152b5565b336000611ff4613fa0565b905060006120006131d1565b9050600061200c614cbe565b905060006120186128dd565b90506000612024613ae9565b905060006120306112e3565b9050600061203c61188c565b9050612046613133565b602755612051613222565b60285561205c6134f9565b6029556120676116ad565b602a5561207261132d565b602b5561207d6118d6565b602c5561208861350f565b602d55602e879055602f869055603085905560318490556032839055603382905560348190556120b7886111d2565b6001600160a01b0389166000908152603660205260409020600101556120dc88614db5565b6001600160a01b038916600090815260376020526040902060010155612101886118ec565b6001600160a01b038916600090815260386020526040902060010155612126886136df565b6001600160a01b03891660009081526039602052604090206001015561214b88613149565b6001600160a01b0389166000908152603a602052604090206001015561217088614d0a565b6001600160a01b0389166000908152603b602052604090206001015561219588613b43565b6001600160a01b0389166000908152603c602081815260408084206001810195909555603682528084208c9055603782528084208b9055603882528084208a905560398252808420899055603a8252808420889055603b825283208690555290829055612201336111d2565b9050600061220e33614db5565b9050600061221b336118ec565b90508215612395573360009081526036602052604081206001015580156122c9573360008181526038602052604080822060010182905551829184156108fc02918591818181858888f193505050506122b65760405162461bcd60e51b815260206004820152601360248201527f457468207472616e73666572206661696c6564000000000000000000000000006044820152606401611744565b81600d546122c49190615411565b600d55505b60185460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b039091169063a9059cbb906044016020604051808303816000875af115801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e9190615428565b6123835760405162461bcd60e51b81526020600482015260166024820152751c995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401611744565b82600b546123919190615411565b600b555b8115612484573360008181526037602052604080822060010191909155601754905163a9059cbb60e01b81526004810192909252602482018490526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612402573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124269190615428565b6124725760405162461bcd60e51b815260206004820152601e60248201527f72657761726420746f6b656e2032207472616e73666572206661696c656400006044820152606401611744565b81600c546124809190615411565b600c555b600061248f336136df565b90508015612579573360008181526039602052604080822060010191909155601654905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156124fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125229190615428565b6125675760405162461bcd60e51b81526020600482015260166024820152751c995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401611744565b80600e546125759190615411565b600e555b600061258433613149565b9050801561267557336000818152603a602052604080822060010191909155601554905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156125f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126179190615428565b6126635760405162461bcd60e51b815260206004820152601e60248201527f72657761726420746f6b656e2032207472616e73666572206661696c656400006044820152606401611744565b80600f546126719190615411565b600f555b600061268033614d0a565b9050801561277157336000818152603b602052604080822060010191909155601454905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156126ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127139190615428565b61275f5760405162461bcd60e51b815260206004820152601e60248201527f72657761726420746f6b656e2032207472616e73666572206661696c656400006044820152606401611744565b8060105461276d9190615411565b6010555b600061277c33613b43565b9050801561286d57336000818152603c602052604080822060010191909155601354905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156127eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280f9190615428565b61285b5760405162461bcd60e51b815260206004820152601e60248201527f72657761726420746f6b656e2032207472616e73666572206661696c656400006044820152606401611744565b806011546128699190615411565b6011555b6040805188815260208101889052908101869052606081018590526080810184905260a0810183905260c0810182905233907fdb44987e7f94a14913f9d806a0680f705a3bef0db9132ee556cc42bc54e2d0b29060e00160405180910390a2505050505050505050505050505050565b60008054806128ee57505060315490565b6000602a546128fb6116ad565b03905081600654600202600a0a601c548302028161291b5761291b6153cc565b04603154019250505090565b6012818154811061293757600080fd5b6000918252602090912001546001600160a01b0316905081565b6003546001600160a01b031633146129ab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611744565b6004548110612a0557600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0384166001600160a01b03199091161790555050565b8160048281548110612a1957612a1961544a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b600080805b600454811015612aa957336001600160a01b031660048281548110612a7757612a7761544a565b6000918252602090912001546001600160a01b03161415612a9757600191505b80612aa181615460565b915050612a50565b506003546001600160a01b0316331480612ac05750805b612b185760405162461bcd60e51b8152602060048201526024808201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152630bdb5bd960e21b6064820152608401611744565b6013546001600160a01b03858116911614801590612b4457506018546001600160a01b03858116911614155b8015612b5e57506002546001600160a01b03858116911614155b8015612b7857506017546001600160a01b03858116911614155b8015612b9257506015546001600160a01b03858116911614155b8015612bac57506016546001600160a01b03858116911614155b8015612bc657506014546001600160a01b03858116911614155b612c025760405162461bcd60e51b815260206004820152600d60248201526c37379039b0b6b2903a37b5b2b760991b6044820152606401611744565b60055462010000900460ff1615612c5b5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920616c6c6f77656420746f20616464206f6e6520746f6b656e0000006044820152606401611744565b50506006556000601c55601680546001600160a01b0319166001600160a01b0392909216919091179055600580546201000062ff000019909116179055600190565b600080805b600454811015612cfb57336001600160a01b031660048281548110612cc957612cc961544a565b6000918252602090912001546001600160a01b03161415612ce957600191505b80612cf381615460565b915050612ca2565b506003546001600160a01b0316331480612d125750805b612d6a5760405162461bcd60e51b8152602060048201526024808201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152630bdb5bd960e21b6064820152608401611744565b6013546001600160a01b03858116911614801590612d9657506018546001600160a01b03858116911614155b8015612db057506002546001600160a01b03858116911614155b8015612dca57506017546001600160a01b03858116911614155b8015612de457506016546001600160a01b03858116911614155b8015612dfe57506015546001600160a01b03858116911614155b8015612e1857506014546001600160a01b03858116911614155b612e545760405162461bcd60e51b815260206004820152600d60248201526c37379039b0b6b2903a37b5b2b760991b6044820152606401611744565b600554610100900460ff1615612eac5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920616c6c6f77656420746f20616464206f6e6520746f6b656e0000006044820152606401611744565b50506007556000601d55601580546001600160a01b0319166001600160a01b03929092169190911790556005805461010061ff0019909116179055600190565b600080805b600454811015612f4a57336001600160a01b031660048281548110612f1857612f1861544a565b6000918252602090912001546001600160a01b03161415612f3857600191505b80612f4281615460565b915050612ef1565b506003546001600160a01b0316331480612f615750805b612fb95760405162461bcd60e51b8152602060048201526024808201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152630bdb5bd960e21b6064820152608401611744565b6013546001600160a01b03858116911614801590612fe557506018546001600160a01b03858116911614155b8015612fff57506002546001600160a01b03858116911614155b801561301957506017546001600160a01b03858116911614155b801561303357506016546001600160a01b03858116911614155b801561304d57506015546001600160a01b03858116911614155b801561306757506014546001600160a01b03858116911614155b6130a35760405162461bcd60e51b815260206004820152600d60248201526c37379039b0b6b2903a37b5b2b760991b6044820152606401611744565b60055460ff16156130f65760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920616c6c6f77656420746f20616464206f6e6520746f6b656e0000006044820152606401611744565b50506008556000601e55601480546001600160a01b0319166001600160a01b03929092169190911790556005805460ff1916600190811790915590565b6020546000904290811061134357602054611345565b6000600754600202601001600a0a61315f613ae9565b101561319b576001600160a01b0382166000908152603a60205260409020600181015460075491549091600202601001600a0a90611238613ae9565b6001600160a01b0382166000908152603a60205260409020600181015460075491549091600202601001600a0a906112ad613ae9565b60008054806131e2575050602f5490565b60006028546131ef613222565b03905081601a5482026ec097ce7bc90715b34b9f10000000000281613216576132166153cc565b04602f54019250505090565b6021546000904290811061134357602154611345565b6000821161324557600080fd5b50600a5467ffffffffffffffff1661325b6131d1565b602f55602154429081116132b15760405162461bcd60e51b815260206004820152601e60248201527f4d5553542042452041465445522050726576696f7573205265776172647300006044820152606401611744565b600c546017546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156132fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332291906153e2565b6002546017549290910392506001600160a01b03918216911614156133475760005490035b8381111561337d5767ffffffffffffffff8316600a668e1bc9bf04000083020481613374576133746153cc565b04601a55613383565b6000601a555b602882905567ffffffffffffffff83168201602155600c8054600a60048402049081019091556040518181529094507f686c47e59005842286d2977a436cc5ceeef835a38dde7754eb2b535e84fd45e59060200161187e565b600082116133e957600080fd5b50600a5467ffffffffffffffff166133ff614cbe565b603055602254429081116134555760405162461bcd60e51b815260206004820152601e60248201527f4d5553542042452041465445522050726576696f7573205265776172647300006044820152606401611744565b600d54470367ffffffffffffffff831681111561349a5767ffffffffffffffff8316600a668e1bc9bf04000083020481613491576134916153cc565b04601b556134a0565b6000601b555b602982905567ffffffffffffffff83168201602255600d8054600a60048402049081019091556040518181529094507fd62583100c7524e43bda2404e1236dc6133a424ed253a00539e75be5e65a46339060200161187e565b6022546000904290811061134357602254611345565b6026546000904290811061134357602654611345565b6000821161353257600080fd5b50600a5467ffffffffffffffff166135486112e3565b603355602554429081116135aa5760405162461bcd60e51b8152602060048201526024808201527f4d5553542042452041465445522050726576696f757320446973747269627574604482015263034b7b7160e51b6064820152608401611744565b6010546014546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156135f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061361b91906153e2565b6002546014549290910392506001600160a01b03918216911614156136405760005490035b8267ffffffffffffffff168111156136805767ffffffffffffffff8316600a668e1bc9bf04000083020481613677576136776153cc565b04601e55613686565b6000601e555b602c82905567ffffffffffffffff8316820160255560108054600a60048402049081019091556040518181529094507f64d3cde2dc1540606d230d87940ff48590614ddb49b6bbef93518bef1be2788e9060200161187e565b6000600654600202601001600a0a6136f56128dd565b1015613731576001600160a01b0382166000908152603960205260409020600181015460065491549091600202601001600a0a906112386128dd565b6001600160a01b0382166000908152603960205260409020600181015460065491549091600202601001600a0a906112ad6128dd565b6116aa3382611ba6565b6000821161377e57600080fd5b50600a5467ffffffffffffffff16613794613fa0565b602e55602054429081116137f65760405162461bcd60e51b8152602060048201526024808201527f4d5553542042452041465445522050726576696f757320446973747269627574604482015263034b7b7160e51b6064820152608401611744565b600b546018546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa158015613843573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386791906153e2565b6002546018549290910392506001600160a01b039182169116141561388c5760005490035b60038111156138c35767ffffffffffffffff8316600a668e1bc9bf040000830204816138ba576138ba6153cc565b046019556138c9565b60006019555b602782905567ffffffffffffffff831682016020908155600b8054600a60048502049081019091556040518181529095507fde88a922e0d3b88b24e9623efeb464919c6bf9f66857a65e2bfcf2ce87a9433d910161187e565b6000821161392f57600080fd5b50600a5467ffffffffffffffff166139456128dd565b603155602354429081116139a75760405162461bcd60e51b8152602060048201526024808201527f4d5553542042452041465445522050726576696f757320446973747269627574604482015263034b7b7160e51b6064820152608401611744565b600e546016546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a0823190602401602060405180830381865afa1580156139f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1891906153e2565b6002546016549290910392506001600160a01b0391821691161415613a3d5760005490035b8267ffffffffffffffff16811115613a8a57600a67ffffffffffffffff8416668e1bc9bf040000830281613a7357613a736153cc565b0481613a8157613a816153cc565b04601c55613a90565b6000601c555b602a82905567ffffffffffffffff83168201602355600e8054600a60048402049081019091556040518181529094507f0b37c80d67a02e9452cfe51996ad0f6fd57d8251edef007c7d84beb157dde7d29060200161187e565b6000805480613afa57505060325490565b6000602b54613b0761132d565b03905081600754600202600a0a601d5483020281613b2757613b276153cc565b04603254019250505090565b6004818154811061293757600080fd5b6000600954600202601001600a0a613b5961188c565b1015613b95576001600160a01b0382166000908152603c60205260409020600181015460095491549091600202601001600a0a9061123861188c565b6001600160a01b0382166000908152603c60205260409020600181015460095491549091600202601001600a0a906112ad61188c565b600080603560009054906101000a90046001600160a01b03166001600160a01b031663638099536040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c4591906153e2565b90506000603560009054906101000a90046001600160a01b03166001600160a01b031663973628f66040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc091906153e2565b90506005811015613cfd57613cd682600361547b565b600a805467ffffffffffffffff191667ffffffffffffffff92909216919091179055505090565b600a811015613d1157613cd682600561547b565b600a5467ffffffffffffffff80841691161015613d4657600a805467ffffffffffffffff191667ffffffffffffffff84161790555b505090565b600080805b600454811015613da957336001600160a01b031660048281548110613d7757613d7761544a565b6000918252602090912001546001600160a01b03161415613d9757600191505b80613da181615460565b915050613d50565b506003546001600160a01b0316331480613dc05750805b613e185760405162461bcd60e51b8152602060048201526024808201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152630bdb5bd960e21b6064820152608401611744565b6014546001600160a01b03858116911614801590613e4457506018546001600160a01b03858116911614155b8015613e5e57506002546001600160a01b03858116911614155b8015613e7857506017546001600160a01b03858116911614155b8015613e9257506016546001600160a01b03858116911614155b8015613eac57506015546001600160a01b03858116911614155b8015613ec657506014546001600160a01b03858116911614155b613f025760405162461bcd60e51b815260206004820152600d60248201526c37379039b0b6b2903a37b5b2b760991b6044820152606401611744565b6005546301000000900460ff1615613f5c5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c7920616c6c6f77656420746f20616464206f6e6520746f6b656e0000006044820152606401611744565b50506009556000601f55601380546001600160a01b0319166001600160a01b039290921691909117905560058054630100000063ff00000019909116179055600190565b6000805480613fb1575050602e5490565b6000602754613fbe613133565b0390508160195482026ec097ce7bc90715b34b9f10000000000281613fe557613fe56153cc565b04602e54019250505090565b336000613ffc613fa0565b905060006140086131d1565b90506000614014614cbe565b905060006140206128dd565b9050600061402c613ae9565b905060006140386112e3565b9050600061404461188c565b905061404e613133565b602755614059613222565b6028556140646134f9565b60295561406f6116ad565b602a5561407a61132d565b602b556140856118d6565b602c5561409061350f565b602d55602e879055602f869055603085905560318490556032839055603382905560348190556140bf886111d2565b6001600160a01b0389166000908152603660205260409020600101556140e488614db5565b6001600160a01b038916600090815260376020526040902060010155614109886118ec565b6001600160a01b03891660009081526038602052604090206001015561412e886136df565b6001600160a01b03891660009081526039602052604090206001015561415388613149565b6001600160a01b0389166000908152603a602052604090206001015561417888614d0a565b6001600160a01b0389166000908152603b602052604090206001015561419d88613b43565b6001600160a01b0389166000908152603c602081815260408084206001810195909555603682528084208c9055603782528084208b9055603882528084208a905560398252808420899055603a8252808420889055603b8252909220859055905281905588614439576000614211336111d2565b9050600061421e33614db5565b90508115614308573360008181526036602052604080822060010191909155601854905163a9059cbb60e01b81526004810192909252602482018490526001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561428d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142b19190615428565b6142f65760405162461bcd60e51b81526020600482015260166024820152751c995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401611744565b81600b546143049190615411565b600b555b80156143f7573360008181526037602052604080822060010191909155601754905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015614375573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143999190615428565b6143e55760405162461bcd60e51b815260206004820152601e60248201527f72657761726420746f6b656e2032207472616e73666572206661696c656400006044820152606401611744565b80600c546143f39190615411565b600c555b604080518381526020810183905233917fa3afea219c0ff303d8c5c37cb6853c0cfe0c5772d2839b30405f40fe678aa910910160405180910390a25050611b9b565b886002141561458157600061444d33614db5565b9050801561453e573360008181526037602052604080822060010191909155601754905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af11580156144bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144e09190615428565b61452c5760405162461bcd60e51b815260206004820152601e60248201527f72657761726420746f6b656e2032207472616e73666572206661696c656400006044820152606401611744565b80600c5461453a9190615411565b600c555b60408051600081526020810183905233917fa3afea219c0ff303d8c5c37cb6853c0cfe0c5772d2839b30405f40fe678aa91091015b60405180910390a250611b9b565b88600114156146b7576000614595336111d2565b9050801561467f573360008181526036602052604080822060010191909155601854905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015614604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146289190615428565b61466d5760405162461bcd60e51b81526020600482015260166024820152751c995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401611744565b80600b5461467b9190615411565b600b555b604080518281526000602082015233917fa3afea219c0ff303d8c5c37cb6853c0cfe0c5772d2839b30405f40fe678aa9109101614573565b88600314156147925760006146cb336118ec565b90508015614760573360008181526038602052604080822060010182905551829184156108fc02918591818181858888f1935050505061474d5760405162461bcd60e51b815260206004820152601360248201527f457468207472616e73666572206661696c6564000000000000000000000000006044820152606401611744565b81600d5461475b9190615411565b600d55505b60405181815233907f48dd3928db90e52c8cbcf928db48ffc4d39e086383222340458017e0da391e5390602001614573565b88600414156148c25760006147a6336136df565b90508015614890573360008181526039602052604080822060010191909155601654905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015614815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148399190615428565b61487e5760405162461bcd60e51b81526020600482015260166024820152751c995dd85c99081d1c985b9cd9995c8819985a5b195960521b6044820152606401611744565b80600e5461488c9190615411565b600e555b60405181815233907f525fc558fcbf99abb520246f57c090e574f034f2338829fcbf008d64df2c3c1590602001614573565b8860051415614a1f5760006148d633613149565b905080156149ed57336000818152603a602052604080822060010191909155601554905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015614945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149699190615428565b6149db5760405162461bcd60e51b815260206004820152602760248201527f7265776172642072657761726445787472614578747261207472616e7366657260448201527f206661696c6564000000000000000000000000000000000000000000000000006064820152608401611744565b80600f546149e99190615411565b600f555b60405181815233907f61a694449708c0d360f1b95319c392b649bc5754615ac48fc1ee448dd6cc993c90602001614573565b8860061415614b67576000614a3333614d0a565b90508015614b3557336000818152603b602052604080822060010191909155601454905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015614aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ac69190615428565b614b235760405162461bcd60e51b815260206004820152602860248201527f726577617264207265776172644578747261457874726132207472616e7366656044820152671c8819985a5b195960c21b6064820152608401611744565b80601054614b319190615411565b6010555b60405181815233907fdd747d764da1c38c629ff5e7953e2f9755a9017bb1c0977f4a3e8158a85cce8a90602001614573565b8860071415611b9b576000614b7b33613b43565b90508015614c7d57336000818152603c602052604080822060010191909155601354905163a9059cbb60e01b81526004810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015614bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c0e9190615428565b614c6b5760405162461bcd60e51b815260206004820152602860248201527f726577617264207265776172644578747261457874726133207472616e7366656044820152671c8819985a5b195960c21b6064820152608401611744565b80601154614c799190615411565b6011555b60405181815233907f50907c0f35e3a11d64401936bceab093b460a862a44da7122135364166187edc9060200160405180910390a250505050505050505050565b6000805480614ccf57505060305490565b6000602954614cdc6134f9565b03905081601b54820269d3c21bcecceda10000000281614cfe57614cfe6153cc565b04603054019250505090565b6000600854600202601001600a0a614d206112e3565b1015614d5c576001600160a01b0382166000908152603b60205260409020600181015460085491549091600202601001600a0a906112386112e3565b6001600160a01b0382166000908152603b60205260409020600181015460085491549091600202601001600a0a906112ad6112e3565b614d9a611fe9565b33600090815260016020526040902054614db390611982565b565b6000751aba4714957d300d0e549208b31adb10000000000000614dd66131d1565b1015614e1b576001600160a01b038216600090815260376020526040902060018101549054751aba4714957d300d0e549208b31adb10000000000000906112386131d1565b6001600160a01b038216600090815260376020526040902060018101549054751aba4714957d300d0e549208b31adb10000000000000906112ad6131d1565b33600090815260016020526040902054811115614eb95760405162461bcd60e51b815260206004820152601a60248201527f77697468647261773a2062616c616e6365206973206c6f7765720000000000006044820152606401611744565b33600090815260016020526040812080548390039055805482900390556002546001600160a01b031680614f8557604051600090339084908381818185875af1925050503d8060008114614f29576040519150601f19603f3d011682016040523d82523d6000602084013e614f2e565b606091505b5050905080614f7f5760405162461bcd60e51b815260206004820152601460248201527f657468207472616e73666572206661696c7572650000000000000000000000006044820152606401611744565b50615050565b60025460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af1158015614fd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ffa9190615428565b6040518060400160405280601c81526020017f7374616b656420746f6b656e207472616e73666572206661696c6564000000008152509061504e5760405162461bcd60e51b815260040161174491906154ab565b505b60405182815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d59060200160405180910390a25050565b6002546001600160a01b0316806150c657600080543490810182556001600160a01b0385168252600160205260409091208054909101905561526d565b34156151145760405162461bcd60e51b815260206004820152600c60248201527f6e6f6e2d7a65726f2065746800000000000000000000000000000000000000006044820152606401611744565b600082116151645760405162461bcd60e51b815260206004820152600e60248201527f43616e6e6f74207374616b6520300000000000000000000000000000000000006044820152606401611744565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018390526001600160a01b038216906323b872dd906064016020604051808303816000875af11580156151d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151f49190615428565b6040518060400160405280601c81526020017f7374616b656420746f6b656e207472616e73666572206661696c656400000000815250906152485760405162461bcd60e51b815260040161174491906154ab565b5060008054830181556001600160a01b03841681526001602052604090208054830190555b826001600160a01b03167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d836040516152a891815260200190565b60405180910390a2505050565b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03811681146116aa57600080fd5b60006020828403121561533857600080fd5b813561534381615311565b9392505050565b60006020828403121561535c57600080fd5b5035919050565b6000806040838503121561537657600080fd5b82359150602083013567ffffffffffffffff8116811461539557600080fd5b809150509250929050565b600080604083850312156153b357600080fd5b82356153be81615311565b946020939093013593505050565b634e487b7160e01b600052601260045260246000fd5b6000602082840312156153f457600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082821015615423576154236153fb565b500390565b60006020828403121561543a57600080fd5b8151801515811461534357600080fd5b634e487b7160e01b600052603260045260246000fd5b6000600019821415615474576154746153fb565b5060010190565b600067ffffffffffffffff808316818516818304811182151516156154a2576154a26153fb565b02949350505050565b600060208083528351808285015260005b818110156154d8578581018301518582016040015282016154bc565b818111156154ea576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220e986f17c9fce2e5936f7d9dfc152fd54bc49ef4d816fa92ae8d4428edd1adfe064736f6c634300080b0033000000000000000000000000f44fb43066f7ecc91058e3a614fb8a15a2735276000000000000000000000000562322f8e7131d0bb9f487ae566935d3be96406b00000000000000000000000071b821aa52a49f32eed535fca6eb5aa130085978000000000000000000000000bb1fa87a4738b22f7d2d5ec34ba349375b4d86f0

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

000000000000000000000000f44fb43066f7ecc91058e3a614fb8a15a2735276000000000000000000000000562322f8e7131d0bb9f487ae566935d3be96406b00000000000000000000000071b821aa52a49f32eed535fca6eb5aa130085978000000000000000000000000bb1fa87a4738b22f7d2d5ec34ba349375b4d86f0

-----Decoded View---------------
Arg [0] : _rewardForge (address): 0xf44fb43066f7ecc91058e3a614fb8a15a2735276
Arg [1] : _LP (address): 0x562322f8e7131d0bb9f487ae566935d3be96406b
Arg [2] : _reward0xBTC (address): 0x71b821aa52a49f32eed535fca6eb5aa130085978
Arg [3] : AuctionAddress (address): 0xbb1fa87a4738b22f7d2d5ec34ba349375b4d86f0

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000f44fb43066f7ecc91058e3a614fb8a15a2735276
Arg [1] : 000000000000000000000000562322f8e7131d0bb9f487ae566935d3be96406b
Arg [2] : 00000000000000000000000071b821aa52a49f32eed535fca6eb5aa130085978
Arg [3] : 000000000000000000000000bb1fa87a4738b22f7d2d5ec34ba349375b4d86f0


Deployed ByteCode Sourcemap

5516:36309:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21119:530;;;;;;;;;;-1:-1:-1;21119:530:0;;;;;:::i;:::-;;:::i;:::-;;;571:25:1;;;559:2;544:18;21119:530:0;;;;;;;;5727:31;;;;;;;;;;;;;;;;8540:50;;;;;;;;;;-1:-1:-1;8540:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;781:25:1;;;837:2;822:18;;815:34;;;;754:18;8540:50:0;607:248:1;20027:538:0;;;;;;;;;;;;;:::i;16916:243::-;;;;;;;;;;;;;:::i;5896:37::-;;;;;;;;;;-1:-1:-1;5896:37:0;;;;;;;;;;;1034:18:1;1022:31;;;1004:50;;992:2;977:18;5896:37:0;860:200:1;8782:70:0;;;;;;;;;;-1:-1:-1;8782:70:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;37838:878;;;;;;;;;;-1:-1:-1;37838:878:0;;;;;:::i;:::-;;:::i;:::-;;16678:228;;;;;;;;;;;;;:::i;35492:1194::-;;;;;;;;;;-1:-1:-1;35492:1194:0;;;;;:::i;:::-;;:::i;5852:37::-;;;;;;;;;;;;;;;;20573:538;;;;;;;;;;;;;:::i;17170:246::-;;;;;;;;;;;;;:::i;3614:26::-;;;;;;;;;;;;;;;;8715:60;;;;;;;;;;-1:-1:-1;8715:60:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;22227:525;;;;;;;;;;-1:-1:-1;22227:525:0;;;;;:::i;:::-;;:::i;6392:30::-;;;;;;;;;;-1:-1:-1;6392:30:0;;;;-1:-1:-1;;;;;6392:30:0;;;;;;-1:-1:-1;;;;;1785:55:1;;;1767:74;;1755:2;1740:18;6392:30:0;1607:240:1;25913:116:0;;;;;;;;;;-1:-1:-1;25913:116:0;;;;;:::i;:::-;;:::i;25755:147::-;;;;;;:::i;:::-;;:::i;34267:1214::-;;;;;;;;;;-1:-1:-1;34267:1214:0;;;;;:::i;:::-;;:::i;6826:28::-;;;;;;;;;;;;;;;;6861:32;;;;;;;;;;;;;;;;2529:111;;;;;;;;;;-1:-1:-1;2529:111:0;;;;;:::i;:::-;;:::i;30320:2713::-;;;;;;;;;;;;;:::i;6714:36::-;;;;;;;;;;;;;;;;6350:35;;;;;;;;;;-1:-1:-1;6350:35:0;;;;-1:-1:-1;;;;;6350:35:0;;;18994:484;;;;;;;;;;;;;:::i;6224:33::-;;;;;;;;;;-1:-1:-1;6224:33:0;;;;;:::i;:::-;;:::i;8938:72::-;;;;;;;;;;-1:-1:-1;8938:72:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;7107:30;;;;;;;;;;;;;;;;7185:39;;;;;;;;;;;;;;;;6944:38;;;;;;;;;;;;;;;;6592:30;;;;;;;;;;;;;;;;6087:38;;;;;;;;;;;;;;;;2179:197;;;;;;;;;;-1:-1:-1;2179:197:0;;;;;:::i;:::-;;:::i;8597:52::-;;;;;;;;;;-1:-1:-1;8597:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;10627:608;;;;;;;;;;-1:-1:-1;10627:608:0;;;;;:::i;:::-;;:::i;:::-;;;2902:14:1;;2895:22;2877:41;;2865:2;2850:18;10627:608:0;2737:187:1;6264:36:0;;;;;;;;;;-1:-1:-1;6264:36:0;;;;-1:-1:-1;;;;;6264:36:0;;;6047:33;;;;;;;;;;;;;;;;7554:46;;;;;;;;;;;;;;;;3858:110;;;;;;;;;;-1:-1:-1;3858:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;3942:18:0;3915:7;3942:18;;;:9;:18;;;;;;;3858:110;7070:30;;;;;;;;;;;;;;;;6526:26;;;;;;;;;;;;;;;;7278:40;;;;;;;;;;;;;;;;6494:25;;;;;;;;;;;;;;;;11246:659;;;;;;;;;;-1:-1:-1;11246:659:0;;;;;:::i;:::-;;:::i;11921:672::-;;;;;;;;;;-1:-1:-1;11921:672:0;;;;;:::i;:::-;;:::i;16003:213::-;;;;;;;;;;;;;:::i;1114:20::-;;;;;;;;;;-1:-1:-1;1114:20:0;;;;-1:-1:-1;;;;;1114:20:0;;;23428:729;;;;;;;;;;-1:-1:-1;23428:729:0;;;;;:::i;:::-;;:::i;18116:429::-;;;;;;;;;;;;;:::i;7231:40::-;;;;;;;;;;;;;;;;16226:216;;;;;;;;;;;;;:::i;39800:1066::-;;;;;;;;;;-1:-1:-1;39800:1066:0;;;;;:::i;:::-;;:::i;40876:946::-;;;;;;;;;;-1:-1:-1;40876:946:0;;;;;:::i;:::-;;:::i;6671:36::-;;;;;;;;;;;;;;;;16452:216;;;;;;;;;;;;;:::i;17428:246::-;;;;;;;;;;;;;:::i;5975:29::-;;;;;;;;;;;;;;;;6011;;;;;;;;;;;;;;;;33045:1214;;;;;;;;;;-1:-1:-1;33045:1214:0;;;;;:::i;:::-;;:::i;22764:652::-;;;;;;;;;;-1:-1:-1;22764:652:0;;;;;:::i;:::-;;:::i;6989:38::-;;;;;;;;;;;;;;;;25650:95;;;;;;:::i;:::-;;:::i;8656:52::-;;;;;;;;;;-1:-1:-1;8656:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;38726:1063;;;;;;;;;;-1:-1:-1;38726:1063:0;;;;;:::i;:::-;;:::i;36698:1124::-;;;;;;;;;;-1:-1:-1;36698:1124:0;;;;;:::i;:::-;;:::i;5940:28::-;;;;;;;;;;;;;;;;5765:36;;;;;;;;;;;;;;;;6307;;;;;;;;;;-1:-1:-1;6307:36:0;;;;-1:-1:-1;;;;;6307:36:0;;;7660:32;;;;;;;;;;-1:-1:-1;7660:32:0;;;;-1:-1:-1;;;;;7660:32:0;;;19490:529;;;;;;;;;;;;;:::i;6791:28::-;;;;;;;;;;;;;;;;1141;;;;;;;;;;-1:-1:-1;1141:28:0;;;;;:::i;:::-;;:::i;24909:730::-;;;;;;;;;;-1:-1:-1;24909:730:0;;;;;:::i;:::-;;:::i;8859:72::-;;;;;;;;;;-1:-1:-1;8859:72:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;6629:35;;;;;;;;;;;;;;;;7412:36;;;;;;;;;;;;;;;;10259:358;;;;;;;;;;;;;:::i;7034:29::-;;;;;;;;;;;;;;;;12609:672;;;;;;;;;;-1:-1:-1;12609:672:0;;;;;:::i;:::-;;:::i;6132:39::-;;;;;;;;;;;;;;;;6559:26;;;;;;;;;;;;;;;;3701:25;;;;;;;;;;-1:-1:-1;3701:25:0;;;;-1:-1:-1;;;;;3701:25:0;;;17683:423;;;;;;;;;;;;;:::i;26263:4046::-;;;;;;;;;;-1:-1:-1;26263:4046:0;;;;;:::i;:::-;;:::i;6429:26::-;;;;;;;;;;-1:-1:-1;6429:26:0;;;;-1:-1:-1;;;;;6429:26:0;;;7369:36;;;;;;;;;;;;;;;;7327:35;;;;;;;;;;;;;;;;18555:429;;;;;;;;;;;;;:::i;24168:730::-;;;;;;;;;;-1:-1:-1;24168:730:0;;;;;:::i;:::-;;:::i;6178:39::-;;;;;;;;;;;;;;;;26040:110;;;;;;;;;;;;;:::i;6757:27::-;;;;;;;;;;;;;;;;5808:37;;;;;;;;;;;;;;;;7607:46;;;;;;;;;;;;;;;;6900:37;;;;;;;;;;;;;;;;7144:34;;;;;;;;;;;;;;;;6462:25;;;;;;;;;;-1:-1:-1;6462:25:0;;;;-1:-1:-1;;;;;6462:25:0;;;7455:40;;;;;;;;;;;;;;;;7502:45;;;;;;;;;;;;;;;;21659:558;;;;;;;;;;-1:-1:-1;21659:558:0;;;;;:::i;:::-;;:::i;21119:530::-;21173:7;21241:4;21222:16;:14;:16::i;:::-;:23;21219:412;;;-1:-1:-1;;;;;21383:20:0;;;;;;:11;:20;;;;;:28;;;;21331:43;;21376:4;;21314:16;:14;:16::i;:::-;:60;21294:18;21304:7;-1:-1:-1;;;;;3942:18:0;3915:7;3942:18;;;:9;:18;;;;;;;3858:110;21294:18;:81;:86;;;;;:::i;:::-;;:117;;21119:530;-1:-1:-1;;21119:530:0:o;21219:412::-;-1:-1:-1;;;;;21559:20:0;;;;;;:11;:20;;;;;:28;;;;21506:43;;21551:4;;21489:16;:14;:16::i;:::-;:60;21488:67;;;;;:::i;:::-;;21468:18;21478:7;-1:-1:-1;;;;;3942:18:0;3915:7;3942:18;;;:9;:18;;;;;;;3858:110;21468:18;:88;:119;;21119:530;-1:-1:-1;;21119:530:0:o;20027:538::-;20085:7;20133:11;;20159:22;20155:93;;-1:-1:-1;;20205:31:0;;;20027:538::o;20155:93::-;20283:33;20357:25;;20319:37;:35;:37::i;:::-;:63;20283:99;;20528:17;20504:19;;20524:1;20504:21;20495:2;:31;20472:21;;20446:25;:47;:81;:99;;;;;:::i;:::-;;20412:31;;:133;20397:149;;;;20027:538;:::o;16916:243::-;17087:22;;16983:7;;17036:15;;17070:39;;:81;;17129:22;;17070:81;;;17112:14;17070:81;17063:88;;;16916:243;:::o;37838:878::-;37902:6;37912:1;37902:11;37899:810;;;37939:34;;-1:-1:-1;;;37939:34:0;;37967:1;37939:34;;;3562:25:1;37970:2:0;3603:18:1;;;3596:59;37939:4:0;;:27;;3535:18:1;;37939:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37838:878;:::o;37899:810::-;37993:6;38003:1;37993:11;37990:719;;;38020:39;;-1:-1:-1;;;38020:39:0;;38053:1;38020:39;;;3562:25:1;38056:2:0;3603:18:1;;;3596:59;38020:4:0;;:32;;3535:18:1;;38020:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38074:34:0;;-1:-1:-1;;;38074:34:0;;38102:1;38074:34;;;3562:25:1;38105:2:0;3603:18:1;;;3596:59;38074:4:0;;-1:-1:-1;38074:27:0;;-1:-1:-1;3535:18:1;;38074:34:0;3372:289:1;37990:719:0;38128:6;38138:1;38128:11;38125:584;;;38155:40;;-1:-1:-1;;;38155:40:0;;38189:1;38155:40;;;3562:25:1;38192:2:0;3603:18:1;;;3596:59;38155:4:0;;:33;;3535:18:1;;38155:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38210:39:0;;-1:-1:-1;;;38210:39:0;;38243:1;38210:39;;;3562:25:1;38246:2:0;3603:18:1;;;3596:59;38210:4:0;;-1:-1:-1;38210:32:0;;-1:-1:-1;3535:18:1;;38210:39:0;3372:289:1;38125:584:0;38311:6;38321:1;38311:11;38308:401;;;38338:40;;;;;38372:1;38338:40;;;3562:25:1;38375:2:0;3603:18:1;;;3596:59;38338:4:0;;:33;;3535:18:1;;38338:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38393:40:0;;-1:-1:-1;;;38393:40:0;;38427:1;38393:40;;;3562:25:1;38430:2:0;3603:18:1;;;3596:59;38393:4:0;;-1:-1:-1;38393:33:0;;-1:-1:-1;3535:18:1;;38393:40:0;3372:289:1;38308:401:0;38567:34;;;;;38595:1;38567:34;;;3562:25:1;38598:2:0;3603:18:1;;;3596:59;38567:4:0;;:27;;3535:18:1;;38567:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38616:34:0;;;;;38644:1;38616:34;;;3562:25:1;38647:2:0;3603:18:1;;;3596:59;38616:4:0;;-1:-1:-1;38616:27:0;;-1:-1:-1;3535:18:1;;38616:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;38665:32:0;;;;;38691:1;38665:32;;;3562:25:1;38694:2:0;3603:18:1;;;3596:59;38665:4:0;;-1:-1:-1;38665:25:0;;-1:-1:-1;3535:18:1;;38665:32:0;;;;;;;;;;;;;;;;;;;38308:401;37838:878;:::o;16678:228::-;16844:17;;16740:7;;16793:15;;16827:34;;:71;;16881:17;;16827:71;;35492:1194;35624:1;35615:6;:10;35607:19;;;;;;-1:-1:-1;35652:10:0;;;;35712:26;:24;:26::i;:::-;35679:30;:59;35842:22;;35786:15;;35825:39;;35817:88;;;;-1:-1:-1;;;35817:88:0;;4162:2:1;35817:88:0;;;4144:21:1;4201:2;4181:18;;;4174:30;4240:34;4220:18;;;4213:62;-1:-1:-1;;;4291:18:1;;;4284:34;4335:19;;35817:88:0;;;;;;;;;35995:23;;35946:21;;:46;;-1:-1:-1;;;35946:46:0;;35986:4;35946:46;;;1767:74:1;35920:23:0;;35995;-1:-1:-1;;;;;35946:21:0;;:31;;1740:18:1;;35946:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36075:11;;36050:21;;35946:72;;;;;-1:-1:-1;;;;;;36050:21:0;;;36075:11;;36050:36;36047:98;;;36125:11;;36106:30;;36047:98;36180:8;36162:26;;:15;:26;36159:219;;;36245:40;;;36273:2;36247:24;;;36246:29;36245:40;;;;;:::i;:::-;;36222:20;:63;36159:219;;;36361:1;36338:20;:24;36159:219;36440:24;:41;;;36521:23;;;;;36496:22;:48;36594:23;;;36421:2;36418:1;36402:17;;36401:22;36585:32;;;36559:58;;;36642:20;;571:25:1;;;36401:22:0;;-1:-1:-1;36642:20:0;;559:2:1;544:18;36642:20:0;;;;;;;;35582:1097;;35492:1194;;:::o;20573:538::-;20631:7;20679:11;;20705:22;20701:93;;-1:-1:-1;;20751:31:0;;;20573:538::o;20701:93::-;20829:33;20903:25;;20865:37;:35;:37::i;:::-;:63;20829:99;;21074:17;21050:19;;21070:1;21050:21;21041:2;:31;21018:21;;20992:25;:47;:81;:99;;;;;:::i;:::-;;20958:31;;:133;20943:149;;;;20573:538;:::o;17170:246::-;17342:23;;17238:7;;17291:15;;17325:40;;:83;;17385:23;;17325:83;;22227:525;22282:7;22363:4;22343:17;:15;:17::i;:::-;:24;22340:394;;;-1:-1:-1;;;;;22508:21:0;;;;;;:12;:21;;;;;:30;;;;22454:45;;22501:4;;22436:17;:15;:17::i;22340:394::-;-1:-1:-1;;;;;22687:21:0;;;;;;:12;:21;;;;;:30;;;;22632:45;;22679:4;;22614:17;:15;:17::i;25913:116::-;25976:10;13349:29;13381:16;:14;:16::i;:::-;13349:48;;13408:30;13441:17;:15;:17::i;:::-;13408:50;;13470:30;13503:17;:15;:17::i;:::-;13470:50;;13532:34;13569:21;:19;:21::i;:::-;13532:58;;13602:39;13644:26;:24;:26::i;:::-;13602:68;;13682:40;13725:27;:25;:27::i;:::-;13682:70;;13764:40;13807:27;:25;:27::i;:::-;13764:70;;13865:26;:24;:26::i;:::-;13848:14;:43;13920:27;:25;:27::i;:::-;13902:15;:45;13976:27;:25;:27::i;:::-;13958:15;:45;14036:31;:29;:31::i;:::-;14014:19;:53;14105:36;:34;:36::i;:::-;14078:24;:63;14180:37;:35;:37::i;:::-;14152:25;:65;14256:37;:35;:37::i;:::-;14228:25;:65;14307:20;:44;;;14362:21;:46;;;14419:21;:46;;;14476:25;:54;;;14541:30;:64;;;14616:31;:66;;;14693:31;:66;;;14804:15;14811:7;14804:6;:15::i;:::-;-1:-1:-1;;;;;14773:20:0;;;;;;:11;:20;;;;;:28;;:46;14863:16;14785:7;14863;:16::i;:::-;-1:-1:-1;;;;;14830:21:0;;;;;;:12;:21;;;;;:30;;:49;14923:16;14843:7;14923;:16::i;:::-;-1:-1:-1;;;;;14890:21:0;;;;;;:12;:21;;;;;:30;;:49;14991:20;14903:7;14991:11;:20::i;:::-;-1:-1:-1;;;;;14950:25:0;;;;;;:16;:25;;;;;:38;;:61;15073:25;14967:7;15073:16;:25::i;:::-;-1:-1:-1;;;;;15022:30:0;;;;;;:21;:30;;;;;:48;;:76;15162:26;15044:7;15162:17;:26::i;:::-;-1:-1:-1;;;;;15109:31:0;;;;;;:22;:31;;;;;:50;;:79;15252:26;15132:7;15252:17;:26::i;:::-;-1:-1:-1;;;;;15199:31:0;;;;;;:22;:31;;;;;;;;:50;;;:79;;;;15292:11;:20;;;;;:67;;;15370:12;:21;;;;;:70;;;15451:12;:21;;;;;:70;;;15532:16;:25;;;;;:82;;;15625:21;:30;;;;;:97;;;15733:22;:31;;;;;:100;;;15844:31;;:100;;;25999:22:::1;26014:6:::0;25999:14:::1;:22::i;:::-;13338:2626:::0;;;;;;;25913:116;;:::o;25755:147::-;25843:7;13349:29;13381:16;:14;:16::i;:::-;13349:48;;13408:30;13441:17;:15;:17::i;:::-;13408:50;;13470:30;13503:17;:15;:17::i;:::-;13470:50;;13532:34;13569:21;:19;:21::i;:::-;13532:58;;13602:39;13644:26;:24;:26::i;:::-;13602:68;;13682:40;13725:27;:25;:27::i;:::-;13682:70;;13764:40;13807:27;:25;:27::i;:::-;13764:70;;13865:26;:24;:26::i;:::-;13848:14;:43;13920:27;:25;:27::i;:::-;13902:15;:45;13976:27;:25;:27::i;:::-;13958:15;:45;14036:31;:29;:31::i;:::-;14014:19;:53;14105:36;:34;:36::i;:::-;14078:24;:63;14180:37;:35;:37::i;:::-;14152:25;:65;14256:37;:35;:37::i;:::-;14228:25;:65;14307:20;:44;;;14362:21;:46;;;14419:21;:46;;;14476:25;:54;;;14541:30;:64;;;14616:31;:66;;;14693:31;:66;;;14804:15;14811:7;14804:6;:15::i;:::-;-1:-1:-1;;;;;14773:20:0;;;;;;:11;:20;;;;;:28;;:46;14863:16;14785:7;14863;:16::i;:::-;-1:-1:-1;;;;;14830:21:0;;;;;;:12;:21;;;;;:30;;:49;14923:16;14843:7;14923;:16::i;:::-;-1:-1:-1;;;;;14890:21:0;;;;;;:12;:21;;;;;:30;;:49;14991:20;14903:7;14991:11;:20::i;:::-;-1:-1:-1;;;;;14950:25:0;;;;;;:16;:25;;;;;:38;;:61;15073:25;14967:7;15073:16;:25::i;:::-;-1:-1:-1;;;;;15022:30:0;;;;;;:21;:30;;;;;:48;;:76;15162:26;15044:7;15162:17;:26::i;:::-;-1:-1:-1;;;;;15109:31:0;;;;;;:22;:31;;;;;:50;;:79;15252:26;15132:7;15252:17;:26::i;:::-;-1:-1:-1;;;;;15199:31:0;;;;;;:22;:31;;;;;;;;:50;;;:79;;;;15292:11;:20;;;;;:67;;;15370:12;:21;;;;;:70;;;15451:12;:21;;;;;:70;;;15532:16;:25;;;;;:82;;;15625:21;:30;;;;;:97;;;15733:22;:31;;;;;:100;;;15844:31;;:100;;;25863:31:::1;25878:7:::0;25887:6;25863:14:::1;:31::i;:::-;13338:2626:::0;;;;;;;25755:147;;;:::o;34267:1214::-;34400:1;34391:6;:10;34383:19;;;;;;-1:-1:-1;34428:10:0;;;;34489:27;:25;:27::i;:::-;34455:31;:61;34620:23;;34564:15;;34603:40;;34595:89;;;;-1:-1:-1;;;34595:89:0;;4162:2:1;34595:89:0;;;4144:21:1;4201:2;4181:18;;;4174:30;4240:34;4220:18;;;4213:62;-1:-1:-1;;;4291:18:1;;;4284:34;4335:19;;34595:89:0;3960:400:1;34595:89:0;34782:24;;34732:22;;:47;;-1:-1:-1;;;34732:47:0;;34773:4;34732:47;;;1767:74:1;34706:23:0;;34782:24;-1:-1:-1;;;;;34732:22:0;;:32;;1740:18:1;;34732:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34864:11;;34838:22;;34732:74;;;;;-1:-1:-1;;;;;;34838:22:0;;;34864:11;;34838:37;34835:99;;;34914:11;;34895:30;;34835:99;34969:8;34951:26;;:15;:26;34948:221;;;35035:40;;;35063:2;35037:24;;;35036:29;35035:40;;;;;:::i;:::-;;35011:21;:64;34948:221;;;35152:1;35128:21;:25;34948:221;35231:25;:42;;;35314:23;;;;;35288;:49;35388:24;;;35212:2;35209:1;35193:17;;35192:22;35379:33;;;35352:60;;;35437:20;;571:25:1;;;35192:22:0;;-1:-1:-1;35437:20:0;;559:2:1;544:18;35437:20:0;425:177:1;2529:111:0;1468:5;;-1:-1:-1;;;;;1468:5:0;1454:10;:19;1446:64;;;;-1:-1:-1;;;1446:64:0;;4756:2:1;1446:64:0;;;4738:21:1;;;4775:18;;;4768:30;4834:34;4814:18;;;4807:62;4886:18;;1446:64:0;4554:356:1;1446:64:0;2604:28:::1;2623:8;2604:18;:28::i;30320:2713::-:0;30361:10;13349:29;13381:16;:14;:16::i;:::-;13349:48;;13408:30;13441:17;:15;:17::i;:::-;13408:50;;13470:30;13503:17;:15;:17::i;:::-;13470:50;;13532:34;13569:21;:19;:21::i;:::-;13532:58;;13602:39;13644:26;:24;:26::i;:::-;13602:68;;13682:40;13725:27;:25;:27::i;:::-;13682:70;;13764:40;13807:27;:25;:27::i;:::-;13764:70;;13865:26;:24;:26::i;:::-;13848:14;:43;13920:27;:25;:27::i;:::-;13902:15;:45;13976:27;:25;:27::i;:::-;13958:15;:45;14036:31;:29;:31::i;:::-;14014:19;:53;14105:36;:34;:36::i;:::-;14078:24;:63;14180:37;:35;:37::i;:::-;14152:25;:65;14256:37;:35;:37::i;:::-;14228:25;:65;14307:20;:44;;;14362:21;:46;;;14419:21;:46;;;14476:25;:54;;;14541:30;:64;;;14616:31;:66;;;14693:31;:66;;;14804:15;14811:7;14804:6;:15::i;:::-;-1:-1:-1;;;;;14773:20:0;;;;;;:11;:20;;;;;:28;;:46;14863:16;14785:7;14863;:16::i;:::-;-1:-1:-1;;;;;14830:21:0;;;;;;:12;:21;;;;;:30;;:49;14923:16;14843:7;14923;:16::i;:::-;-1:-1:-1;;;;;14890:21:0;;;;;;:12;:21;;;;;:30;;:49;14991:20;14903:7;14991:11;:20::i;:::-;-1:-1:-1;;;;;14950:25:0;;;;;;:16;:25;;;;;:38;;:61;15073:25;14967:7;15073:16;:25::i;:::-;-1:-1:-1;;;;;15022:30:0;;;;;;:21;:30;;;;;:48;;:76;15162:26;15044:7;15162:17;:26::i;:::-;-1:-1:-1;;;;;15109:31:0;;;;;;:22;:31;;;;;:50;;:79;15252:26;15132:7;15252:17;:26::i;:::-;-1:-1:-1;;;;;15199:31:0;;;;;;:22;:31;;;;;;;;:50;;;:79;;;;15292:11;:20;;;;;:67;;;15370:12;:21;;;;;:70;;;15451:12;:21;;;;;:70;;;15532:16;:25;;;;;:82;;;15625:21;:30;;;;;:97;;;15733:22;:31;;;;:100;;;15844:31;:100;;;;30401:18:::1;30408:10;30401:6;:18::i;:::-;30384:35;;30430:15;30448:19;30456:10;30448:7;:19::i;:::-;30430:37;;30478:15;30495:19;30503:10;30495:7;:19::i;:::-;30478:36:::0;-1:-1:-1;30529:10:0;;30525:517:::1;;30568:10;30590:1;30556:23:::0;;;:11:::1;:23;::::0;;;;:31:::1;;:35:::0;30609:11;;30606:282:::1;;30653:10;30676:1;30640:24:::0;;;:12:::1;:24;::::0;;;;;:33:::1;;:37:::0;;;30766:22;30653:10;;30766:22;::::1;;;::::0;30780:7;;30766:22;30676:1;30766:22;30780:7;30653:10;30766:22;::::1;;;;;;30758:54;;;::::0;-1:-1:-1;;;30758:54:0;;5117:2:1;30758:54:0::1;::::0;::::1;5099:21:1::0;5156:2;5136:18;;;5129:30;5195:21;5175:18;;;5168:49;5234:18;;30758:54:0::1;4915:343:1::0;30758:54:0::1;30865:7;30848:14;;:24;;;;:::i;:::-;30831:14;:41:::0;-1:-1:-1;30606:282:0::1;30910:11;::::0;:40:::1;::::0;-1:-1:-1;;;30910:40:0;;30931:10:::1;30910:40;::::0;::::1;5756:74:1::0;5846:18;;;5839:34;;;-1:-1:-1;;;;;30910:11:0;;::::1;::::0;:20:::1;::::0;5729:18:1;;30910:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30902:75;;;::::0;-1:-1:-1;;;30902:75:0;;6368:2:1;30902:75:0::1;::::0;::::1;6350:21:1::0;6407:2;6387:18;;;6380:30;-1:-1:-1;;;6426:18:1;;;6419:52;6488:18;;30902:75:0::1;6166:346:1::0;30902:75:0::1;31024:6;31008:13;;:22;;;;:::i;:::-;30992:13;:38:::0;30525:517:::1;31055:11:::0;;31052:259:::1;;31119:10;31142:1;31106:24:::0;;;:12:::1;:24;::::0;;;;;:33:::1;;:37:::0;;;;31166:12:::1;::::0;:42;;-1:-1:-1;;;31166:42:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;31166:12:0::1;::::0;:21:::1;::::0;5729:18:1;;31166:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31158:85;;;::::0;-1:-1:-1;;;31158:85:0;;6719:2:1;31158:85:0::1;::::0;::::1;6701:21:1::0;6758:2;6738:18;;;6731:30;6797:32;6777:18;;;6770:60;6847:18;;31158:85:0::1;6517:354:1::0;31158:85:0::1;31292:7;31275:14;;:24;;;;:::i;:::-;31258:14;:41:::0;31052:259:::1;31321:19;31343:23;31355:10;31343:11;:23::i;:::-;31321:45:::0;-1:-1:-1;31381:15:0;;31377:268:::1;;31430:10;31457:1;31413:28:::0;;;:16:::1;:28;::::0;;;;;:41:::1;;:45:::0;;;;31481:16:::1;::::0;:50;;-1:-1:-1;;;31481:50:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;31481:16:0::1;::::0;:25:::1;::::0;5729:18:1;;31481:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31473:85;;;::::0;-1:-1:-1;;;31473:85:0;;6368:2:1;31473:85:0::1;::::0;::::1;6350:21:1::0;6407:2;6387:18;;;6380:30;-1:-1:-1;;;6426:18:1;;;6419:52;6488:18;;31473:85:0::1;6166:346:1::0;31473:85:0::1;31615:11;31594:18;;:32;;;;:::i;:::-;31573:18;:53:::0;31377:268:::1;31655:24;31682:28;31699:10;31682:16;:28::i;:::-;31655:55:::0;-1:-1:-1;31724:20:0;;31721:331:::1;;31806:10;31838:1;31784:33:::0;;;:21:::1;:33;::::0;;;;;:51:::1;;:55:::0;;;;31862:21:::1;::::0;:60;;-1:-1:-1;;;31862:60:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;31862:21:0::1;::::0;:30:::1;::::0;5729:18:1;;31862:60:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31854:103;;;::::0;-1:-1:-1;;;31854:103:0;;6719:2:1;31854:103:0::1;::::0;::::1;6701:21:1::0;6758:2;6738:18;;;6731:30;6797:32;6777:18;;;6770:60;6847:18;;31854:103:0::1;6517:354:1::0;31854:103:0::1;32024:16;31998:23;;:42;;;;:::i;:::-;31972:23;:68:::0;31721:331:::1;32065:25;32093:29;32111:10;32093:17;:29::i;:::-;32065:57:::0;-1:-1:-1;32136:21:0;;32133:339:::1;;32220:10;32253:1;32197:34:::0;;;:22:::1;:34;::::0;;;;;:53:::1;;:57:::0;;;;32277:22:::1;::::0;:62;;-1:-1:-1;;;32277:62:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;32277:22:0::1;::::0;:31:::1;::::0;5729:18:1;;32277:62:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32269:105;;;::::0;-1:-1:-1;;;32269:105:0;;6719:2:1;32269:105:0::1;::::0;::::1;6701:21:1::0;6758:2;6738:18;;;6731:30;6797:32;6777:18;;;6770:60;6847:18;;32269:105:0::1;6517:354:1::0;32269:105:0::1;32443:17;32416:24;;:44;;;;:::i;:::-;32389:24;:71:::0;32133:339:::1;32481:25;32509:29;32527:10;32509:17;:29::i;:::-;32481:57:::0;-1:-1:-1;32552:21:0;;32549:339:::1;;32636:10;32669:1;32613:34:::0;;;:22:::1;:34;::::0;;;;;:53:::1;;:57:::0;;;;32693:22:::1;::::0;:62;;-1:-1:-1;;;32693:62:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;32693:22:0::1;::::0;:31:::1;::::0;5729:18:1;;32693:62:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32685:105;;;::::0;-1:-1:-1;;;32685:105:0;;6719:2:1;32685:105:0::1;::::0;::::1;6701:21:1::0;6758:2;6738:18;;;6731:30;6797:32;6777:18;;;6770:60;6847:18;;32685:105:0::1;6517:354:1::0;32685:105:0::1;32859:17;32832:24;;:44;;;;:::i;:::-;32805:24;:71:::0;32549:339:::1;32903:117;::::0;;7191:25:1;;;7247:2;7232:18;;7225:34;;;7275:18;;;7268:34;;;7333:2;7318:18;;7311:34;;;7376:3;7361:19;;7354:35;;;7420:3;7405:19;;7398:35;;;7464:3;7449:19;;7442:35;;;32914:10:0::1;::::0;32903:117:::1;::::0;7178:3:1;7163:19;32903:117:0::1;;;;;;;30373:2660;;;;;;;13338:2626:::0;;;;;;;30320:2713;:::o;18994:484::-;19046:7;19094:11;;19120:22;19116:87;;-1:-1:-1;;19166:25:0;;;18994:484::o;19116:87::-;19238:27;19300:19;;19268:31;:29;:31::i;:::-;:51;19238:81;;19441:17;19423:13;;19437:1;19423:15;19414:2;:25;19397:15;;19377:19;:35;:63;:81;;;;;:::i;:::-;;19349:25;;:109;19334:125;;;;18994:484;:::o;6224:33::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6224:33:0;;-1:-1:-1;6224:33:0;:::o;2179:197::-;1468:5;;-1:-1:-1;;;;;1468:5:0;1454:10;:19;1446:64;;;;-1:-1:-1;;;1446:64:0;;4756:2:1;1446:64:0;;;4738:21:1;;;4775:18;;;4768:30;4834:34;4814:18;;;4807:62;4886:18;;1446:64:0;4554:356:1;1446:64:0;2265:10:::1;:17:::0;2257:25;::::1;2254:115;;2291:10;:29:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;2291:29:0;;;;;::::1;::::0;;-1:-1:-1;;;;;2291:29:0;::::1;-1:-1:-1::0;;;;;;2291:29:0;;::::1;;::::0;;2179:197;;:::o;2254:115::-:1;2352:12;2333:10;2344:4;2333:16;;;;;;;;:::i;:::-;;;;;;;;;:31;;;;;-1:-1:-1::0;;;;;2333:31:0::1;;;;;-1:-1:-1::0;;;;;2333:31:0::1;;;;;;2179:197:::0;;:::o;10627:608::-;10723:12;;;1600:113;1617:10;:17;1614:20;;1600:113;;;1668:10;-1:-1:-1;;;;;1651:27:0;:10;1662:1;1651:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1651:13:0;:27;1648:60;;;1698:4;1684:18;;1648:60;1636:3;;;;:::i;:::-;;;;1600:113;;;-1:-1:-1;1745:5:0;;-1:-1:-1;;;;;1745:5:0;1731:10;:19;;:34;;;1754:11;1731:34;1723:83;;;;-1:-1:-1;;;1723:83:0;;8019:2:1;1723:83:0;;;8001:21:1;8058:2;8038:18;;;8031:30;8097:34;8077:18;;;8070:62;-1:-1:-1;;;8148:18:1;;;8141:34;8192:19;;1723:83:0;7817:400:1;1723:83:0;10752:22:::1;::::0;-1:-1:-1;;;;;10752:36:0;;::::1;:22:::0;::::1;:36;::::0;::::1;::::0;:65:::1;;-1:-1:-1::0;10806:11:0::1;::::0;-1:-1:-1;;;;;10792:25:0;;::::1;10806:11:::0;::::1;10792:25;;10752:65;:94;;;;-1:-1:-1::0;10835:11:0::1;::::0;-1:-1:-1;;;;;10821:25:0;;::::1;10835:11:::0;::::1;10821:25;;10752:94;:124;;;;-1:-1:-1::0;10864:12:0::1;::::0;-1:-1:-1;;;;;10850:26:0;;::::1;10864:12:::0;::::1;10850:26;;10752:124;:163;;;;-1:-1:-1::0;10894:21:0::1;::::0;-1:-1:-1;;;;;10880:35:0;;::::1;10894:21:::0;::::1;10880:35;;10752:163;:197;;;;-1:-1:-1::0;10933:16:0::1;::::0;-1:-1:-1;;;;;10919:30:0;;::::1;10933:16:::0;::::1;10919:30;;10752:197;:237;;;;-1:-1:-1::0;10967:22:0::1;::::0;-1:-1:-1;;;;;10953:36:0;;::::1;10967:22:::0;::::1;10953:36;;10752:237;10744:263;;;::::0;-1:-1:-1;;;10744:263:0;;8424:2:1;10744:263:0::1;::::0;::::1;8406:21:1::0;8463:2;8443:18;;;8436:30;-1:-1:-1;;;8482:18:1;;;8475:43;8535:18;;10744:263:0::1;8222:337:1::0;10744:263:0::1;11020:10;::::0;;;::::1;;;11019:11;11011:53;;;::::0;-1:-1:-1;;;11011:53:0;;8766:2:1;11011:53:0::1;::::0;::::1;8748:21:1::0;8805:2;8785:18;;;8778:30;8844:31;8824:18;;;8817:59;8893:18;;11011:53:0::1;8564:353:1::0;11011:53:0::1;-1:-1:-1::0;;11075:13:0::1;:30:::0;11134:1:::1;11116:15;:19:::0;11146:16:::1;:29:::0;;-1:-1:-1;;;;;;11146:29:0::1;-1:-1:-1::0;;;;;11146:29:0;;;::::1;::::0;;;::::1;::::0;;11186:10:::1;:17:::0;;;-1:-1:-1;;11186:17:0;;::::1;;::::0;;-1:-1:-1;;10627:608:0:o;11246:659::-;11351:12;;;1600:113;1617:10;:17;1614:20;;1600:113;;;1668:10;-1:-1:-1;;;;;1651:27:0;:10;1662:1;1651:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1651:13:0;:27;1648:60;;;1698:4;1684:18;;1648:60;1636:3;;;;:::i;:::-;;;;1600:113;;;-1:-1:-1;1745:5:0;;-1:-1:-1;;;;;1745:5:0;1731:10;:19;;:34;;;1754:11;1731:34;1723:83;;;;-1:-1:-1;;;1723:83:0;;8019:2:1;1723:83:0;;;8001:21:1;8058:2;8038:18;;;8031:30;8097:34;8077:18;;;8070:62;-1:-1:-1;;;8148:18:1;;;8141:34;8192:19;;1723:83:0;7817:400:1;1723:83:0;11376:22:::1;::::0;-1:-1:-1;;;;;11376:39:0;;::::1;:22:::0;::::1;:39;::::0;::::1;::::0;:72:::1;;-1:-1:-1::0;11437:11:0::1;::::0;-1:-1:-1;;;;;11420:28:0;;::::1;11437:11:::0;::::1;11420:28;;11376:72;:104;;;;-1:-1:-1::0;11469:11:0::1;::::0;-1:-1:-1;;;;;11452:28:0;;::::1;11469:11:::0;::::1;11452:28;;11376:104;:137;;;;-1:-1:-1::0;11501:12:0::1;::::0;-1:-1:-1;;;;;11484:29:0;;::::1;11501:12:::0;::::1;11484:29;;11376:137;:174;;;;-1:-1:-1::0;11534:16:0::1;::::0;-1:-1:-1;;;;;11517:33:0;;::::1;11534:16:::0;::::1;11517:33;;11376:174;:216;;;;-1:-1:-1::0;11571:21:0::1;::::0;-1:-1:-1;;;;;11554:38:0;;::::1;11571:21:::0;::::1;11554:38;;11376:216;:259;;;;-1:-1:-1::0;11613:22:0::1;::::0;-1:-1:-1;;;;;11596:39:0;;::::1;11613:22:::0;::::1;11596:39;;11376:259;11368:285;;;::::0;-1:-1:-1;;;11368:285:0;;8424:2:1;11368:285:0::1;::::0;::::1;8406:21:1::0;8463:2;8443:18;;;8436:30;-1:-1:-1;;;8482:18:1;;;8475:43;8535:18;;11368:285:0::1;8222:337:1::0;11368:285:0::1;11666:10;::::0;::::1;::::0;::::1;;;11665:11;11657:53;;;::::0;-1:-1:-1;;;11657:53:0;;8766:2:1;11657:53:0::1;::::0;::::1;8748:21:1::0;8805:2;8785:18;;;8778:30;8844:31;8824:18;;;8817:59;8893:18;;11657:53:0::1;8564:353:1::0;11657:53:0::1;-1:-1:-1::0;;11721:18:0::1;:40:::0;11795:1:::1;11772:20;:24:::0;11807:21:::1;:37:::0;;-1:-1:-1;;;;;;11807:37:0::1;-1:-1:-1::0;;;;;11807:37:0;;;::::1;::::0;;;::::1;::::0;;11855:10:::1;:17:::0;;11807:37:::1;-1:-1:-1::0;;11855:17:0;;::::1;;::::0;;-1:-1:-1;;11246:659:0:o;11921:672::-;12028:12;;;1600:113;1617:10;:17;1614:20;;1600:113;;;1668:10;-1:-1:-1;;;;;1651:27:0;:10;1662:1;1651:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1651:13:0;:27;1648:60;;;1698:4;1684:18;;1648:60;1636:3;;;;:::i;:::-;;;;1600:113;;;-1:-1:-1;1745:5:0;;-1:-1:-1;;;;;1745:5:0;1731:10;:19;;:34;;;1754:11;1731:34;1723:83;;;;-1:-1:-1;;;1723:83:0;;8019:2:1;1723:83:0;;;8001:21:1;8058:2;8038:18;;;8031:30;8097:34;8077:18;;;8070:62;-1:-1:-1;;;8148:18:1;;;8141:34;8192:19;;1723:83:0;7817:400:1;1723:83:0;12053:22:::1;::::0;-1:-1:-1;;;;;12053:40:0;;::::1;:22:::0;::::1;:40;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;12115:11:0::1;::::0;-1:-1:-1;;;;;12097:29:0;;::::1;12115:11:::0;::::1;12097:29;;12053:73;:106;;;;-1:-1:-1::0;12148:11:0::1;::::0;-1:-1:-1;;;;;12130:29:0;;::::1;12148:11:::0;::::1;12130:29;;12053:106;:140;;;;-1:-1:-1::0;12181:12:0::1;::::0;-1:-1:-1;;;;;12163:30:0;;::::1;12181:12:::0;::::1;12163:30;;12053:140;:178;;;;-1:-1:-1::0;12215:16:0::1;::::0;-1:-1:-1;;;;;12197:34:0;;::::1;12215:16:::0;::::1;12197:34;;12053:178;:221;;;;-1:-1:-1::0;12253:21:0::1;::::0;-1:-1:-1;;;;;12235:39:0;;::::1;12253:21:::0;::::1;12235:39;;12053:221;:265;;;;-1:-1:-1::0;12296:22:0::1;::::0;-1:-1:-1;;;;;12278:40:0;;::::1;12296:22:::0;::::1;12278:40;;12053:265;12045:291;;;::::0;-1:-1:-1;;;12045:291:0;;8424:2:1;12045:291:0::1;::::0;::::1;8406:21:1::0;8463:2;8443:18;;;8436:30;-1:-1:-1;;;8482:18:1;;;8475:43;8535:18;;12045:291:0::1;8222:337:1::0;12045:291:0::1;12349:10;::::0;::::1;;12348:11;12340:53;;;::::0;-1:-1:-1;;;12340:53:0;;8766:2:1;12340:53:0::1;::::0;::::1;8748:21:1::0;8805:2;8785:18;;;8778:30;8844:31;8824:18;;;8817:59;8893:18;;12340:53:0::1;8564:353:1::0;12340:53:0::1;-1:-1:-1::0;;12404:19:0::1;:42:::0;12481:1:::1;12457:21;:25:::0;12493:22:::1;:39:::0;;-1:-1:-1;;;;;;12493:39:0::1;-1:-1:-1::0;;;;;12493:39:0;;;::::1;::::0;;;::::1;::::0;;12543:10:::1;:17:::0;;-1:-1:-1;;12543:17:0::1;-1:-1:-1::0;12543:17:0;;::::1;::::0;;;-1:-1:-1;11921:672:0:o;16003:213::-;16164:12;;16060:7;;16113:15;;16147:29;;:61;;16196:12;;16147:61;;23428:729;23492:7;23589:18;;23610:1;23589:22;23614:2;23589:27;23583:2;:34;23553:26;:24;:26::i;:::-;:65;23550:589;;;-1:-1:-1;;;;;23818:30:0;;;;;;:21;:30;;;;;:48;;;;23786:18;;23714:63;;23818:48;;23807:1;23786:22;23811:2;23786:27;23780:2;:34;;23687:26;:24;:26::i;23550:589::-;-1:-1:-1;;;;;24074:30:0;;;;;;:21;:30;;;;;:48;;;;24041:18;;23969:63;;24074:48;;24062:1;24041:22;24066:2;24041:27;24035:2;:34;;23942:26;:24;:26::i;18116:429::-;18164:7;18212:11;;18238:22;18234:83;;-1:-1:-1;;18284:21:0;;;18116:429::o;18234:83::-;18352:23;18406:15;;18378:27;:25;:27::i;:::-;:43;18352:69;;18508:17;18491:11;;18475:15;:27;18503:4;18475:32;:50;;;;;:::i;:::-;;18451:21;;:74;18436:90;;;;18116:429;:::o;16226:216::-;16388:13;;16284:7;;16337:15;;16371:30;;:63;;16421:13;;16371:63;;39800:1066;39927:1;39918:6;:10;39910:19;;;;;;-1:-1:-1;39955:10:0;;;;40006:17;:15;:17::i;:::-;39982:21;:41;40127:13;;40071:15;;40110:30;;40102:73;;;;-1:-1:-1;;;40102:73:0;;9124:2:1;40102:73:0;;;9106:21:1;9163:2;9143:18;;;9136:30;9202:32;9182:18;;;9175:60;9252:18;;40102:73:0;8922:354:1;40102:73:0;40271:14;;40231:12;;:37;;-1:-1:-1;;;40231:37:0;;40262:4;40231:37;;;1767:74:1;40204:24:0;;40271:14;-1:-1:-1;;;;;40231:12:0;;:22;;1740:18:1;;40231:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40319:11;;40303:12;;40231:54;;;;;-1:-1:-1;;;;;;40303:12:0;;;40319:11;;40303:27;40300:90;;;40370:11;;40350:31;;40300:90;40426:6;40407:16;:25;40404:201;;;40480:41;;;40509:2;40482:25;;;40481:30;40480:41;;;;;:::i;:::-;;40466:11;:55;40404:201;;;40588:1;40574:11;:15;40404:201;40666:15;:32;;;40729:23;;;;;40713:13;:39;40793:14;;;40649:2;40646:1;40629:18;;40628:23;40784;;;40767:40;;;40827:20;;571:25:1;;;40628:23:0;;-1:-1:-1;40827:20:0;;559:2:1;544:18;40827:20:0;425:177:1;40876:946:0;41001:1;40992:6;:10;40984:19;;;;;;-1:-1:-1;41029:10:0;;;;41080:17;:15;:17::i;:::-;41056:21;:41;41201:13;;41145:15;;41184:30;;41176:73;;;;-1:-1:-1;;;41176:73:0;;9124:2:1;41176:73:0;;;9106:21:1;9163:2;9143:18;;;9136:30;9202:32;9182:18;;;9175:60;9252:18;;41176:73:0;8922:354:1;41176:73:0;41315:14;;41291:21;:38;41349:27;;;;;41346:203;;;41424:41;;;41453:2;41426:25;;;41425:30;41424:41;;;;;:::i;:::-;;41410:11;:55;41346:203;;;41532:1;41518:11;:15;41346:203;41622:15;:32;;;41685:23;;;;;41669:13;:39;41749:14;;;41605:2;41602:1;41585:18;;41584:23;41740;;;41723:40;;;41783:20;;571:25:1;;;41584:23:0;;-1:-1:-1;41783:20:0;;559:2:1;544:18;41783:20:0;425:177:1;16452:216:0;16614:13;;16510:7;;16563:15;;16597:30;;:63;;16647:13;;16597:63;;17428:246;17600:23;;17496:7;;17549:15;;17583:40;;:83;;17643:23;;17583:83;;33045:1214;33178:1;33169:6;:10;33161:19;;;;;;-1:-1:-1;33206:10:0;;;;33267:27;:25;:27::i;:::-;33233:31;:61;33398:23;;33342:15;;33381:40;;33373:89;;;;-1:-1:-1;;;33373:89:0;;4162:2:1;33373:89:0;;;4144:21:1;4201:2;4181:18;;;4174:30;4240:34;4220:18;;;4213:62;-1:-1:-1;;;4291:18:1;;;4284:34;4335:19;;33373:89:0;3960:400:1;33373:89:0;33560:24;;33510:22;;:47;;-1:-1:-1;;;33510:47:0;;33551:4;33510:47;;;1767:74:1;33484:23:0;;33560:24;-1:-1:-1;;;;;33510:22:0;;:32;;1740:18:1;;33510:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33642:11;;33616:22;;33510:74;;;;;-1:-1:-1;;;;;;33616:22:0;;;33642:11;;33616:37;33613:99;;;33692:11;;33673:30;;33613:99;33747:8;33729:26;;:15;:26;33726:221;;;33813:40;;;33841:2;33815:24;;;33814:29;33813:40;;;;;:::i;:::-;;33789:21;:64;33726:221;;;33930:1;33906:21;:25;33726:221;34009:25;:42;;;34092:23;;;;;34066;:49;34166:24;;;33990:2;33987:1;33971:17;;33970:22;34157:33;;;34130:60;;;34215:20;;571:25:1;;;33970:22:0;;-1:-1:-1;34215:20:0;;559:2:1;544:18;34215:20:0;425:177:1;22764:652:0;22823:7;22913:13;;22929:1;22913:17;22933:2;22913:22;22908:2;:28;22883:21;:19;:21::i;:::-;:54;22880:518;;;-1:-1:-1;;;;;23117:25:0;;;;;;:16;:25;;;;;:38;;;;23090:13;;23028:53;;23117:38;;23106:1;23090:17;23110:2;23090:22;23084:2;:29;;23006:21;:19;:21::i;22880:518::-;-1:-1:-1;;;;;23343:25:0;;;;;;:16;:25;;;;;:38;;;;23315:13;;23253:53;;23343:38;;23331:1;23315:17;23335:2;23315:22;23309:2;:29;;23231:21;:19;:21::i;25650:95::-;25709:28;25718:10;25730:6;25709:8;:28::i;38726:1063::-;38853:1;38844:6;:10;38836:19;;;;;;-1:-1:-1;38881:10:0;;;;38930:16;:14;:16::i;:::-;38907:20;:39;39050:12;;38994:15;;39033:29;;39025:78;;;;-1:-1:-1;;;39025:78:0;;4162:2:1;39025:78:0;;;4144:21:1;4201:2;4181:18;;;4174:30;4240:34;4220:18;;;4213:62;-1:-1:-1;;;4291:18:1;;;4284:34;4335:19;;39025:78:0;3960:400:1;39025:78:0;39183:13;;39144:11;;:36;;-1:-1:-1;;;39144:36:0;;39174:4;39144:36;;;1767:74:1;39118:23:0;;39183:13;-1:-1:-1;;;;;39144:11:0;;:21;;1740:18:1;;39144:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39243:11;;39228;;39144:52;;;;;-1:-1:-1;;;;;;39228:11:0;;;39243;;39228:26;39225:88;;;39293:11;;39274:30;;39225:88;39348:1;39330:15;:19;39327:193;;;39396:40;;;39424:2;39398:24;;;39397:29;39396:40;;;;;:::i;:::-;;39383:10;:53;39327:193;;;39503:1;39490:10;:14;39327:193;39594:14;:31;;;39655:23;;;;;39640:12;:38;;;39718:13;;;39577:2;39574:1;39558:17;;39557:22;39709;;;39693:38;;;39751:19;;571:25:1;;;39557:22:0;;-1:-1:-1;39751:19:0;;544:18:1;39751:19:0;425:177:1;36698:1124:0;36825:1;36816:6;:10;36808:19;;;;;;-1:-1:-1;36853:10:0;;;;36907:21;:19;:21::i;:::-;36879:25;:49;37032:17;;36976:15;;37015:34;;37007:83;;;;-1:-1:-1;;;37007:83:0;;4162:2:1;37007:83:0;;;4144:21:1;4201:2;4181:18;;;4174:30;4240:34;4220:18;;;4213:62;-1:-1:-1;;;4291:18:1;;;4284:34;4335:19;;37007:83:0;3960:400:1;37007:83:0;37175:18;;37131:16;;:41;;-1:-1:-1;;;37131:41:0;;37166:4;37131:41;;;1767:74:1;37105:23:0;;37175:18;-1:-1:-1;;;;;37131:16:0;;:26;;1740:18:1;;37131:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37245:11;;37225:16;;37131:62;;;;;-1:-1:-1;;;;;;37225:16:0;;;37245:11;;37225:31;37222:93;;;37295:11;;37276:30;;37222:93;37350:8;37332:26;;:15;:26;37329:207;;;37446:2;37410:35;;;37411:24;;;37410:35;;;;;:::i;:::-;;:38;;;;;:::i;:::-;;37392:15;:56;37329:207;;;37519:1;37501:15;:19;37329:207;37596:19;:36;;;37667:23;;;;;37647:17;:43;37735:18;;;37579:2;37576:1;37560:17;;37559:22;37726:27;;;37705:48;;;37778:20;;571:25:1;;;37559:22:0;;-1:-1:-1;37778:20:0;;559:2:1;544:18;37778:20:0;425:177:1;19490:529:0;19547:7;19595:11;;19621:22;19617:92;;-1:-1:-1;;19667:30:0;;;19490:529::o;19617:92::-;19744:32;19816:24;;19779:36;:34;:36::i;:::-;:61;19744:96;;19982:17;19959:18;;19978:1;19959:20;19950:2;:30;19928:20;;19903:24;:45;:78;:96;;;;;:::i;:::-;;19870:30;;:129;19855:145;;;;19490:529;:::o;1141:28::-;;;;;;;;;;;;24909:730;24974:7;25060:19;;25082:1;25060:23;25086:2;25060:28;25054:2;:35;25023:27;:25;:27::i;:::-;:67;25020:601;;;-1:-1:-1;;;;;25293:31:0;;;;;;:22;:31;;;;;:50;;;;25261:19;;25187:65;;25293:50;;25283:1;25261:23;25286:2;25261:27;25255:2;:34;;25159:27;:25;:27::i;25020:601::-;-1:-1:-1;;;;;25554:31:0;;;;;;:22;:31;;;;;:50;;;;25521:19;;25447:65;;25554:50;;25543:1;25521:23;25546:2;25521:27;25515:2;:34;;25419:27;:25;:27::i;10259:358::-;10300:12;10321:18;10349:9;;;;;;;;;-1:-1:-1;;;;;10349:9:0;-1:-1:-1;;;;;10349:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10321:54;;10383:9;10395;;;;;;;;;-1:-1:-1;;;;;10395:9:0;-1:-1:-1;;;;;10395:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10383:34;;10433:1;10428:4;:6;10425:188;;;10457:13;:11;10469:1;10457:13;:::i;:::-;10444:10;:26;;-1:-1:-1;;10444:26:0;;;;;;;;;;;;10313:304;;10259:358;:::o;10425:188::-;10495:2;10487:4;:10;10484:129;;;10520:13;:11;10532:1;10520:13;:::i;10484:129::-;10550:10;;:24;;;;:10;;:24;10547:66;;;10580:10;:24;;-1:-1:-1;;10580:24:0;;;;;;;10547:66;10313:304;;10259:358;:::o;12609:672::-;12716:12;;;1600:113;1617:10;:17;1614:20;;1600:113;;;1668:10;-1:-1:-1;;;;;1651:27:0;:10;1662:1;1651:13;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1651:13:0;:27;1648:60;;;1698:4;1684:18;;1648:60;1636:3;;;;:::i;:::-;;;;1600:113;;;-1:-1:-1;1745:5:0;;-1:-1:-1;;;;;1745:5:0;1731:10;:19;;:34;;;1754:11;1731:34;1723:83;;;;-1:-1:-1;;;1723:83:0;;8019:2:1;1723:83:0;;;8001:21:1;8058:2;8038:18;;;8031:30;8097:34;8077:18;;;8070:62;-1:-1:-1;;;8148:18:1;;;8141:34;8192:19;;1723:83:0;7817:400:1;1723:83:0;12741:22:::1;::::0;-1:-1:-1;;;;;12741:40:0;;::::1;:22:::0;::::1;:40;::::0;::::1;::::0;:73:::1;;-1:-1:-1::0;12803:11:0::1;::::0;-1:-1:-1;;;;;12785:29:0;;::::1;12803:11:::0;::::1;12785:29;;12741:73;:106;;;;-1:-1:-1::0;12836:11:0::1;::::0;-1:-1:-1;;;;;12818:29:0;;::::1;12836:11:::0;::::1;12818:29;;12741:106;:140;;;;-1:-1:-1::0;12869:12:0::1;::::0;-1:-1:-1;;;;;12851:30:0;;::::1;12869:12:::0;::::1;12851:30;;12741:140;:178;;;;-1:-1:-1::0;12903:16:0::1;::::0;-1:-1:-1;;;;;12885:34:0;;::::1;12903:16:::0;::::1;12885:34;;12741:178;:221;;;;-1:-1:-1::0;12941:21:0::1;::::0;-1:-1:-1;;;;;12923:39:0;;::::1;12941:21:::0;::::1;12923:39;;12741:221;:265;;;;-1:-1:-1::0;12984:22:0::1;::::0;-1:-1:-1;;;;;12966:40:0;;::::1;12984:22:::0;::::1;12966:40;;12741:265;12733:291;;;::::0;-1:-1:-1;;;12733:291:0;;8424:2:1;12733:291:0::1;::::0;::::1;8406:21:1::0;8463:2;8443:18;;;8436:30;-1:-1:-1;;;8482:18:1;;;8475:43;8535:18;;12733:291:0::1;8222:337:1::0;12733:291:0::1;13037:10;::::0;;;::::1;;;13036:11;13028:53;;;::::0;-1:-1:-1;;;13028:53:0;;8766:2:1;13028:53:0::1;::::0;::::1;8748:21:1::0;8805:2;8785:18;;;8778:30;8844:31;8824:18;;;8817:59;8893:18;;13028:53:0::1;8564:353:1::0;13028:53:0::1;-1:-1:-1::0;;13092:19:0::1;:42:::0;13169:1:::1;13145:21;:25:::0;13181:22:::1;:39:::0;;-1:-1:-1;;;;;;13181:39:0::1;-1:-1:-1::0;;;;;13181:39:0;;;::::1;::::0;;;::::1;::::0;;13231:10:::1;:17:::0;;;-1:-1:-1;;13231:17:0;;::::1;;::::0;;-1:-1:-1;;12609:672:0:o;17683:423::-;17730:7;17778:11;;17804:22;17800:82;;-1:-1:-1;;17850:20:0;;;17683:423::o;17800:82::-;17917:22;17969:14;;17942:26;:24;:26::i;:::-;:41;17917:66;;18069:17;18051:10;;18036:14;:25;18063:4;18036:32;:50;;;;;:::i;:::-;;18013:20;;:73;17998:89;;;;17683:423;:::o;26263:4046::-;26325:10;13349:29;13381:16;:14;:16::i;:::-;13349:48;;13408:30;13441:17;:15;:17::i;:::-;13408:50;;13470:30;13503:17;:15;:17::i;:::-;13470:50;;13532:34;13569:21;:19;:21::i;:::-;13532:58;;13602:39;13644:26;:24;:26::i;:::-;13602:68;;13682:40;13725:27;:25;:27::i;:::-;13682:70;;13764:40;13807:27;:25;:27::i;:::-;13764:70;;13865:26;:24;:26::i;:::-;13848:14;:43;13920:27;:25;:27::i;:::-;13902:15;:45;13976:27;:25;:27::i;:::-;13958:15;:45;14036:31;:29;:31::i;:::-;14014:19;:53;14105:36;:34;:36::i;:::-;14078:24;:63;14180:37;:35;:37::i;:::-;14152:25;:65;14256:37;:35;:37::i;:::-;14228:25;:65;14307:20;:44;;;14362:21;:46;;;14419:21;:46;;;14476:25;:54;;;14541:30;:64;;;14616:31;:66;;;14693:31;:66;;;14804:15;14811:7;14804:6;:15::i;:::-;-1:-1:-1;;;;;14773:20:0;;;;;;:11;:20;;;;;:28;;:46;14863:16;14785:7;14863;:16::i;:::-;-1:-1:-1;;;;;14830:21:0;;;;;;:12;:21;;;;;:30;;:49;14923:16;14843:7;14923;:16::i;:::-;-1:-1:-1;;;;;14890:21:0;;;;;;:12;:21;;;;;:30;;:49;14991:20;14903:7;14991:11;:20::i;:::-;-1:-1:-1;;;;;14950:25:0;;;;;;:16;:25;;;;;:38;;:61;15073:25;14967:7;15073:16;:25::i;:::-;-1:-1:-1;;;;;15022:30:0;;;;;;:21;:30;;;;;:48;;:76;15162:26;15044:7;15162:17;:26::i;:::-;-1:-1:-1;;;;;15109:31:0;;;;;;:22;:31;;;;;:50;;:79;15252:26;15132:7;15252:17;:26::i;:::-;-1:-1:-1;;;;;15199:31:0;;;;;;:22;:31;;;;;;;;:50;;;:79;;;;15292:11;:20;;;;;:67;;;15370:12;:21;;;;;:70;;;15451:12;:21;;;;;:70;;;15532:16;:25;;;;;:82;;;15625:21;:30;;;;;:97;;;15733:22;:31;;;;;:100;;;15844:31;;:100;;;26391:11;26388:3914:::1;;26411:14;26428:18;26435:10;26428:6;:18::i;:::-;26411:35;;26461:15;26479:19;26487:10;26479:7;:19::i;:::-;26461:37:::0;-1:-1:-1;26517:10:0;;26513:228:::1;;26557:10;26579:1;26545:23:::0;;;:11:::1;:23;::::0;;;;;:31:::1;;:35:::0;;;;26604:11:::1;::::0;:40;;-1:-1:-1;;;26604:40:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;26604:11:0::1;::::0;:20:::1;::::0;5729:18:1;;26604:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26596:75;;;::::0;-1:-1:-1;;;26596:75:0;;6368:2:1;26596:75:0::1;::::0;::::1;6350:21:1::0;6407:2;6387:18;;;6380:30;-1:-1:-1;;;6426:18:1;;;6419:52;6488:18;;26596:75:0::1;6166:346:1::0;26596:75:0::1;26719:6;26703:13;;:22;;;;:::i;:::-;26687:13;:38:::0;26513:228:::1;26758:11:::0;;26755:251:::1;;26802:10;26825:1;26789:24:::0;;;:12:::1;:24;::::0;;;;;:33:::1;;:37:::0;;;;26853:12:::1;::::0;:42;;-1:-1:-1;;;26853:42:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;26853:12:0::1;::::0;:21:::1;::::0;5729:18:1;;26853:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26845:85;;;::::0;-1:-1:-1;;;26845:85:0;;6719:2:1;26845:85:0::1;::::0;::::1;6701:21:1::0;6758:2;6738:18;;;6731:30;6797:32;6777:18;;;6770:60;6847:18;;26845:85:0::1;6517:354:1::0;26845:85:0::1;26983:7;26966:14;;:24;;;;:::i;:::-;26949:14;:41:::0;26755:251:::1;27024:44;::::0;;781:25:1;;;837:2;822:18;;815:34;;;27040:10:0::1;::::0;27024:44:::1;::::0;754:18:1;27024:44:0::1;;;;;;;26403:684;;26388:3914;;;27095:6;27105:1;27095:11;27092:3210;;;27122:15;27140:19;27148:10;27140:7;:19::i;:::-;27122:37:::0;-1:-1:-1;27177:11:0;;27174:246:::1;;27220:10;27243:1;27207:24:::0;;;:12:::1;:24;::::0;;;;;:33:::1;;:37:::0;;;;27269:12:::1;::::0;:42;;-1:-1:-1;;;27269:42:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;27269:12:0::1;::::0;:21:::1;::::0;5729:18:1;;27269:42:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27261:85;;;::::0;-1:-1:-1;;;27261:85:0;;6719:2:1;27261:85:0::1;::::0;::::1;6701:21:1::0;6758:2;6738:18;;;6731:30;6797:32;6777:18;;;6770:60;6847:18;;27261:85:0::1;6517:354:1::0;27261:85:0::1;27398:7;27381:14;;:24;;;;:::i;:::-;27364:14;:41:::0;27174:246:::1;27438:39;::::0;;27466:1:::1;781:25:1::0;;837:2;822:18;;815:34;;;27454:10:0::1;::::0;27438:39:::1;::::0;754:18:1;27438:39:0::1;;;;;;;;27107:389;27092:3210;;;27504:6;27514:1;27504:11;27501:2801;;;27524:14;27541:18;27548:10;27541:6;:18::i;:::-;27524:35:::0;-1:-1:-1;27578:10:0;;27574:233:::1;;27619:10;27641:1;27607:23:::0;;;:11:::1;:23;::::0;;;;;:31:::1;;:35:::0;;;;27668:11:::1;::::0;:40;;-1:-1:-1;;;27668:40:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;27668:11:0::1;::::0;:20:::1;::::0;5729:18:1;;27668:40:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27660:75;;;::::0;-1:-1:-1;;;27660:75:0;;6368:2:1;27660:75:0::1;::::0;::::1;6350:21:1::0;6407:2;6387:18;;;6380:30;-1:-1:-1;;;6426:18:1;;;6419:52;6488:18;;27660:75:0::1;6166:346:1::0;27660:75:0::1;27785:6;27769:13;;:22;;;;:::i;:::-;27753:13;:38:::0;27574:233:::1;27819:38;::::0;;781:25:1;;;27855:1:0::1;837:2:1::0;822:18;;815:34;27835:10:0::1;::::0;27819:38:::1;::::0;754:18:1;27819:38:0::1;607:248:1::0;27501:2801:0::1;27882:6;27892:1;27882:11;27879:2423;;;27902:15;27919:19;27927:10;27919:7;:19::i;:::-;27902:36:::0;-1:-1:-1;27949:11:0;;27946:222:::1;;27979:10;28002:1;27966:24:::0;;;:12:::1;:24;::::0;;;;;:33:::1;;:37:::0;;;28067:22;27979:10;;28067:22;::::1;;;::::0;28081:7;;28067:22;28002:1;28067:22;28081:7;27979:10;28067:22;::::1;;;;;;28059:54;;;::::0;-1:-1:-1;;;28059:54:0;;5117:2:1;28059:54:0::1;::::0;::::1;5099:21:1::0;5156:2;5136:18;;;5129:30;5195:21;5175:18;;;5168:49;5234:18;;28059:54:0::1;4915:343:1::0;28059:54:0::1;28152:7;28135:14;;:24;;;;:::i;:::-;28118:14;:41:::0;-1:-1:-1;27946:222:0::1;28180:32;::::0;571:25:1;;;28192:10:0::1;::::0;28180:32:::1;::::0;559:2:1;544:18;28180:32:0::1;425:177:1::0;27879:2423:0::1;28234:6;28244:1;28234:11;28231:2071;;;28261:19;28283:23;28295:10;28283:11;:23::i;:::-;28261:45:::0;-1:-1:-1;28325:15:0;;28321:275:::1;;28377:10;28404:1;28360:28:::0;;;:16:::1;:28;::::0;;;;;:41:::1;;:45:::0;;;;28432:16:::1;::::0;:50;;-1:-1:-1;;;28432:50:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;28432:16:0::1;::::0;:25:::1;::::0;5729:18:1;;28432:50:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28424:85;;;::::0;-1:-1:-1;;;28424:85:0;;6368:2:1;28424:85:0::1;::::0;::::1;6350:21:1::0;6407:2;6387:18;;;6380:30;-1:-1:-1;;;6426:18:1;;;6419:52;6488:18;;28424:85:0::1;6166:346:1::0;28424:85:0::1;28569:11;28548:18;;:32;;;;:::i;:::-;28527:18;:53:::0;28321:275:::1;28615:40;::::0;571:25:1;;;28631:10:0::1;::::0;28615:40:::1;::::0;559:2:1;544:18;28615:40:0::1;425:177:1::0;28231:2071:0::1;28680:6;28690:1;28680:11;28677:1625;;;28707:24;28734:28;28751:10;28734:16;:28::i;:::-;28707:55:::0;-1:-1:-1;28780:20:0;;28777:343:::1;;28853:10;28885:1;28831:33:::0;;;:21:::1;:33;::::0;;;;;:51:::1;;:55:::0;;;;28913:21:::1;::::0;:60;;-1:-1:-1;;;28913:60:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;28913:21:0::1;::::0;:30:::1;::::0;5729:18:1;;28913:60:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28905:112;;;::::0;-1:-1:-1;;;28905:112:0;;10280:2:1;28905:112:0::1;::::0;::::1;10262:21:1::0;10319:2;10299:18;;;10292:30;10358:34;10338:18;;;10331:62;10429:9;10409:18;;;10402:37;10456:19;;28905:112:0::1;10078:403:1::0;28905:112:0::1;29088:16;29062:23;;:42;;;;:::i;:::-;29036:23;:68:::0;28777:343:::1;29139:50;::::0;571:25:1;;;29160:10:0::1;::::0;29139:50:::1;::::0;559:2:1;544:18;29139:50:0::1;425:177:1::0;28677:1625:0::1;29216:6;29226:1;29216:11;29213:1089;;;29243:25;29271:29;29289:10;29271:17;:29::i;:::-;29243:57:::0;-1:-1:-1;29318:21:0;;29315:352:::1;;29393:10;29426:1;29370:34:::0;;;:22:::1;:34;::::0;;;;;:53:::1;;:57:::0;;;;29454:22:::1;::::0;:62;;-1:-1:-1;;;29454:62:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;29454:22:0::1;::::0;:31:::1;::::0;5729:18:1;;29454:62:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29446:115;;;::::0;-1:-1:-1;;;29446:115:0;;10688:2:1;29446:115:0::1;::::0;::::1;10670:21:1::0;10727:2;10707:18;;;10700:30;10766:34;10746:18;;;10739:62;-1:-1:-1;;;10817:18:1;;;10810:38;10865:19;;29446:115:0::1;10486:404:1::0;29446:115:0::1;29634:17;29607:24;;:44;;;;:::i;:::-;29580:24;:71:::0;29315:352:::1;29686:52;::::0;571:25:1;;;29708:10:0::1;::::0;29686:52:::1;::::0;559:2:1;544:18;29686:52:0::1;425:177:1::0;29213:1089:0::1;29763:6;29773:1;29763:11;29760:542;;;29790:25;29818:29;29836:10;29818:17;:29::i;:::-;29790:57:::0;-1:-1:-1;29865:21:0;;29862:352:::1;;29940:10;29973:1;29917:34:::0;;;:22:::1;:34;::::0;;;;;:53:::1;;:57:::0;;;;30001:22:::1;::::0;:62;;-1:-1:-1;;;30001:62:0;;::::1;::::0;::::1;5756:74:1::0;;;;5846:18;;;5839:34;;;-1:-1:-1;;;;;30001:22:0::1;::::0;:31:::1;::::0;5729:18:1;;30001:62:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29993:115;;;::::0;-1:-1:-1;;;29993:115:0;;11097:2:1;29993:115:0::1;::::0;::::1;11079:21:1::0;11136:2;11116:18;;;11109:30;11175:34;11155:18;;;11148:62;-1:-1:-1;;;11226:18:1;;;11219:38;11274:19;;29993:115:0::1;10895:404:1::0;29993:115:0::1;30181:17;30154:24;;:44;;;;:::i;:::-;30127:24;:71:::0;29862:352:::1;30233:52;::::0;571:25:1;;;30255:10:0::1;::::0;30233:52:::1;::::0;559:2:1;544:18;30233:52:0::1;;;;;;;29775:527;13338:2626:::0;;;;;;;26263:4046;;:::o;18555:429::-;18603:7;18651:11;;18677:22;18673:83;;-1:-1:-1;;18723:21:0;;;18555:429::o;18673:83::-;18791:23;18845:15;;18817:27;:25;:27::i;:::-;:43;18791:69;;18947:17;18930:11;;18914:15;:27;18942:4;18914:32;:50;;;;;:::i;:::-;;18890:21;;:74;18875:90;;;;18555:429;:::o;24168:730::-;24233:7;24319:19;;24341:1;24319:23;24345:2;24319:28;24313:2;:35;24282:27;:25;:27::i;:::-;:67;24279:601;;;-1:-1:-1;;;;;24552:31:0;;;;;;:22;:31;;;;;:50;;;;24520:19;;24446:65;;24552:50;;24542:1;24520:23;24545:2;24520:27;24514:2;:34;;24418:27;:25;:27::i;24279:601::-;-1:-1:-1;;;;;24813:31:0;;;;;;:22;:31;;;;;:50;;;;24780:19;;24706:65;;24813:50;;24802:1;24780:23;24805:2;24780:27;24774:2;:34;;24678:27;:25;:27::i;26040:110::-;26076:11;:9;:11::i;:::-;26125:10;3915:7;3942:18;;;:9;:18;;;;;;26098:40;;25913:116;:::i;26098:40::-;26040:110::o;21659:558::-;21714:7;21809:4;21789:17;:15;:17::i;:::-;:24;21786:413;;;-1:-1:-1;;;;;21954:21:0;;;;;;:12;:21;;;;;:30;;;;21900:45;;21947:4;;21882:17;:15;:17::i;21786:413::-;-1:-1:-1;;;;;22152:21:0;;;;;;:12;:21;;;;;:30;;;;22097:45;;22144:4;;22079:17;:15;:17::i;4770:636::-;4858:10;4848:21;;;;:9;:21;;;;;;4838:31;;;4830:70;;;;-1:-1:-1;;;4830:70:0;;11506:2:1;4830:70:0;;;11488:21:1;11545:2;11525:18;;;11518:30;11584:28;11564:18;;;11557:56;11630:18;;4830:70:0;11304:350:1;4830:70:0;4946:10;4936:21;;;;:9;:21;;;;;:31;;;;;;;4996:11;;:18;;;4982:32;;5048:11;;-1:-1:-1;;;;;5048:11:0;5073:24;5070:284;;5139:34;;5121:12;;5139:10;;5162:6;;5121:12;5139:34;5121:12;5139:34;5162:6;5139:10;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5120:53;;;5196:7;5188:40;;;;-1:-1:-1;;;5188:40:0;;12071:2:1;5188:40:0;;;12053:21:1;12110:2;12090:18;;;12083:30;12149:22;12129:18;;;12122:50;12189:18;;5188:40:0;11869:344:1;5188:40:0;5099:141;5070:284;;;5278:11;;:40;;-1:-1:-1;;;5278:40:0;;5299:10;5278:40;;;5756:74:1;5846:18;;;5839:34;;;-1:-1:-1;;;;;5278:11:0;;;;:20;;5729:18:1;;5278:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5320:21;;;;;;;;;;;;;;;;;5270:72;;;;;-1:-1:-1;;;5270:72:0;;;;;;;;:::i;:::-;;5070:284;5369:29;;571:25:1;;;5379:10:0;;5369:29;;559:2:1;544:18;5369:29:0;;;;;;;4819:587;4770:636;:::o;4059:703::-;4156:11;;-1:-1:-1;;;;;4156:11:0;4181:24;4178:538;;4257:11;:24;;4272:9;4257:24;;;;;-1:-1:-1;;;;;4300:18:0;;;;-1:-1:-1;4300:18:0;;;;;;:31;;;;;;;4178:538;;;4396:9;:14;4388:39;;;;-1:-1:-1;;;4388:39:0;;13022:2:1;4388:39:0;;;13004:21:1;13061:2;13041:18;;;13034:30;13100:14;13080:18;;;13073:42;13132:18;;4388:39:0;12820:336:1;4388:39:0;4459:1;4450:6;:10;4442:37;;;;-1:-1:-1;;;4442:37:0;;13363:2:1;4442:37:0;;;13345:21:1;13402:2;13382:18;;;13375:30;13441:16;13421:18;;;13414:44;13475:18;;4442:37:0;13161:338:1;4442:37:0;4502:50;;;;;4518:10;4502:50;;;13767:34:1;4538:4:0;13817:18:1;;;13810:43;13869:18;;;13862:34;;;-1:-1:-1;;;;;4502:15:0;;;;;13679:18:1;;4502:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4554:21;;;;;;;;;;;;;;;;;4494:82;;;;;-1:-1:-1;;;4494:82:0;;;;;;;;:::i;:::-;-1:-1:-1;4621:11:0;:21;;;;;;-1:-1:-1;;;;;4661:18:0;;;;-1:-1:-1;4661:18:0;;;;;:28;;;;;;4178:538;4738:7;-1:-1:-1;;;;;4731:23:0;;4747:6;4731:23;;;;571:25:1;;559:2;544:18;;425:177;4731:23:0;;;;;;;;4133:629;4059:703;;:::o;2746:143::-;2838:5;;2817:37;;-1:-1:-1;;;;;2817:37:0;;;;2838:5;;2817:37;;2838:5;;2817:37;2865:5;:16;;-1:-1:-1;;;;;;2865:16:0;-1:-1:-1;;;;;2865:16:0;;;;;;;;;;2746:143::o;14:154:1:-;-1:-1:-1;;;;;93:5:1;89:54;82:5;79:65;69:93;;158:1;155;148:12;173:247;232:6;285:2;273:9;264:7;260:23;256:32;253:52;;;301:1;298;291:12;253:52;340:9;327:23;359:31;384:5;359:31;:::i;:::-;409:5;173:247;-1:-1:-1;;;173:247:1:o;1065:180::-;1124:6;1177:2;1165:9;1156:7;1152:23;1148:32;1145:52;;;1193:1;1190;1183:12;1145:52;-1:-1:-1;1216:23:1;;1065:180;-1:-1:-1;1065:180:1:o;1250:352::-;1317:6;1325;1378:2;1366:9;1357:7;1353:23;1349:32;1346:52;;;1394:1;1391;1384:12;1346:52;1430:9;1417:23;1407:33;;1490:2;1479:9;1475:18;1462:32;1534:18;1527:5;1523:30;1516:5;1513:41;1503:69;;1568:1;1565;1558:12;1503:69;1591:5;1581:15;;;1250:352;;;;;:::o;1852:315::-;1920:6;1928;1981:2;1969:9;1960:7;1956:23;1952:32;1949:52;;;1997:1;1994;1987:12;1949:52;2036:9;2023:23;2055:31;2080:5;2055:31;:::i;:::-;2105:5;2157:2;2142:18;;;;2129:32;;-1:-1:-1;;;1852:315:1:o;3183:184::-;-1:-1:-1;;;3232:1:1;3225:88;3332:4;3329:1;3322:15;3356:4;3353:1;3346:15;4365:184;4435:6;4488:2;4476:9;4467:7;4463:23;4459:32;4456:52;;;4504:1;4501;4494:12;4456:52;-1:-1:-1;4527:16:1;;4365:184;-1:-1:-1;4365:184:1:o;5263:::-;-1:-1:-1;;;5312:1:1;5305:88;5412:4;5409:1;5402:15;5436:4;5433:1;5426:15;5452:125;5492:4;5520:1;5517;5514:8;5511:34;;;5525:18;;:::i;:::-;-1:-1:-1;5562:9:1;;5452:125::o;5884:277::-;5951:6;6004:2;5992:9;5983:7;5979:23;5975:32;5972:52;;;6020:1;6017;6010:12;5972:52;6052:9;6046:16;6105:5;6098:13;6091:21;6084:5;6081:32;6071:60;;6127:1;6124;6117:12;7488:184;-1:-1:-1;;;7537:1:1;7530:88;7637:4;7634:1;7627:15;7661:4;7658:1;7651:15;7677:135;7716:3;-1:-1:-1;;7737:17:1;;7734:43;;;7757:18;;:::i;:::-;-1:-1:-1;7804:1:1;7793:13;;7677:135::o;9281:270::-;9320:7;9352:18;9397:2;9394:1;9390:10;9427:2;9424:1;9420:10;9483:3;9479:2;9475:12;9470:3;9467:21;9460:3;9453:11;9446:19;9442:47;9439:73;;;9492:18;;:::i;:::-;9532:13;;9281:270;-1:-1:-1;;;;9281:270:1:o;12218:597::-;12330:4;12359:2;12388;12377:9;12370:21;12420:6;12414:13;12463:6;12458:2;12447:9;12443:18;12436:34;12488:1;12498:140;12512:6;12509:1;12506:13;12498:140;;;12607:14;;;12603:23;;12597:30;12573:17;;;12592:2;12569:26;12562:66;12527:10;;12498:140;;;12656:6;12653:1;12650:13;12647:91;;;12726:1;12721:2;12712:6;12701:9;12697:22;12693:31;12686:42;12647:91;-1:-1:-1;12799:2:1;12778:15;-1:-1:-1;;12774:29:1;12759:45;;;;12806:2;12755:54;;12218:597;-1:-1:-1;;;12218:597:1:o

Swarm Source

ipfs://e986f17c9fce2e5936f7d9dfc152fd54bc49ef4d816fa92ae8d4428edd1adfe0
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.