ETH Price: $2,397.65 (-4.25%)

Contract

0xc5142A066dFcABbD20fF8B581C5e82F523aF21Bc
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Claim Staked Tok...205494152024-08-17 16:03:4717 days ago1723910627IN
0xc5142A06...523aF21Bc
0 ETH0.000167542.19745629
Withdraw Farmed ...145546662022-04-10 0:11:54878 days ago1649549514IN
0xc5142A06...523aF21Bc
0 ETH0.003970944.8543364
Claim Staked Tok...125479142021-06-01 10:06:101190 days ago1622541970IN
0xc5142A06...523aF21Bc
0 ETH0.0010567216
Claim Staked Tok...123264122021-04-28 3:12:321225 days ago1619579552IN
0xc5142A06...523aF21Bc
0 ETH0.004325252.02
Claim Staked Tok...122481842021-04-16 1:24:361237 days ago1618536276IN
0xc5142A06...523aF21Bc
0 ETH0.0082313599
Withdraw Farmed ...120852092021-03-21 23:50:551262 days ago1616370655IN
0xc5142A06...523aF21Bc
0 ETH0.01535103177
Claim Staked Tok...120507832021-03-16 16:43:071267 days ago1615912987IN
0xc5142A06...523aF21Bc
0 ETH0.00491522212
Claim Staked Tok...120507792021-03-16 16:42:231267 days ago1615912943IN
0xc5142A06...523aF21Bc
0 ETH0.02321431267
Claim Staked Tok...117990342021-02-05 22:46:101306 days ago1612565170IN
0xc5142A06...523aF21Bc
0 ETH0.0139112160
Stake117800072021-02-03 0:22:591309 days ago1612311779IN
0xc5142A06...523aF21Bc
0 ETH0.00672764277.2000016
Stake117800072021-02-03 0:22:591309 days ago1612311779IN
0xc5142A06...523aF21Bc
0 ETH0.00672764277.2000016
Stake117800072021-02-03 0:22:591309 days ago1612311779IN
0xc5142A06...523aF21Bc
0 ETH0.0063102260.00000145
Withdraw Farmed ...116717232021-01-17 8:45:131326 days ago1610873113IN
0xc5142A06...523aF21Bc
0 ETH0.0051094261
Claim Staked Tok...115671222021-01-01 7:39:301342 days ago1609486770IN
0xc5142A06...523aF21Bc
0 ETH0.003416760
Claim Staked Tok...115665342021-01-01 5:24:391342 days ago1609478679IN
0xc5142A06...523aF21Bc
0 ETH0.0022208539
Claim Reward115635392020-12-31 18:27:471342 days ago1609439267IN
0xc5142A06...523aF21Bc
0.011216 ETH0.008717986
Claim Staked Tok...115632542020-12-31 17:25:461342 days ago1609435546IN
0xc5142A06...523aF21Bc
0 ETH0.0019939186.00000145
Claim Staked Tok...115631642020-12-31 17:02:511342 days ago1609434171IN
0xc5142A06...523aF21Bc
0 ETH0.0061872786.00000145
Claim Staked Tok...115562402020-12-30 15:40:391343 days ago1609342839IN
0xc5142A06...523aF21Bc
0 ETH0.01064786148
Claim Reward115558802020-12-30 14:22:461343 days ago1609338166IN
0xc5142A06...523aF21Bc
0.01 ETH0.01183282137
Claim Staked Tok...115558752020-12-30 14:21:371343 days ago1609338097IN
0xc5142A06...523aF21Bc
0 ETH0.00949674132.00000145
Claim Staked Tok...115524062020-12-30 1:38:281344 days ago1609292308IN
0xc5142A06...523aF21Bc
0 ETH0.0047483766
Claim Staked Tok...115514512020-12-29 21:59:021344 days ago1609279142IN
0xc5142A06...523aF21Bc
0 ETH0.0029611452
Withdraw Farmed ...115004192020-12-22 2:01:211352 days ago1608602481IN
0xc5142A06...523aF21Bc
0 ETH0.0024148827.5
Withdraw Farmed ...115004112020-12-22 1:59:181352 days ago1608602358IN
0xc5142A06...523aF21Bc
0 ETH0.0023801727.1046942
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
115635392020-12-31 18:27:471342 days ago1609439267
0xc5142A06...523aF21Bc
0.011216 ETH
115558802020-12-30 14:22:461343 days ago1609338166
0xc5142A06...523aF21Bc
0.01 ETH
114215362020-12-09 22:58:141364 days ago1607554694
0xc5142A06...523aF21Bc
0.01 ETH
112625092020-11-15 12:48:571388 days ago1605444537
0xc5142A06...523aF21Bc
0.01 ETH
112231102020-11-09 11:48:291394 days ago1604922509
0xc5142A06...523aF21Bc
0.1 ETH
112191762020-11-08 21:18:521395 days ago1604870332
0xc5142A06...523aF21Bc
0.01 ETH
111968802020-11-05 11:15:031398 days ago1604574903
0xc5142A06...523aF21Bc
0.01 ETH
111926012020-11-04 19:34:191399 days ago1604518459
0xc5142A06...523aF21Bc
0.001 ETH
111731882020-11-01 19:52:301402 days ago1604260350
0xc5142A06...523aF21Bc
0.01 ETH
111725572020-11-01 17:32:211402 days ago1604251941
0xc5142A06...523aF21Bc
0.01 ETH
111722022020-11-01 16:14:261402 days ago1604247266
0xc5142A06...523aF21Bc
0.01 ETH
111708922020-11-01 11:23:221402 days ago1604229802
0xc5142A06...523aF21Bc
0.003 ETH
111624672020-10-31 4:22:461404 days ago1604118166
0xc5142A06...523aF21Bc
0.01 ETH
111619272020-10-31 2:27:261404 days ago1604111246
0xc5142A06...523aF21Bc
0.01 ETH
111556472020-10-30 3:10:161405 days ago1604027416
0xc5142A06...523aF21Bc
0.01 ETH
111553442020-10-30 2:03:341405 days ago1604023414
0xc5142A06...523aF21Bc
0.01 ETH
111549152020-10-30 0:25:191405 days ago1604017519
0xc5142A06...523aF21Bc
0.01 ETH
111534822020-10-29 19:07:281405 days ago1603998448
0xc5142A06...523aF21Bc
0.01 ETH
111056802020-10-22 11:23:271412 days ago1603365807
0xc5142A06...523aF21Bc
0.001 ETH
110814612020-10-18 18:09:511416 days ago1603044591
0xc5142A06...523aF21Bc
0.01 ETH
110735532020-10-17 12:47:541417 days ago1602938874
0xc5142A06...523aF21Bc
0.001 ETH
110681132020-10-16 16:48:331418 days ago1602866913
0xc5142A06...523aF21Bc
0.001 ETH
110681022020-10-16 16:46:341418 days ago1602866794
0xc5142A06...523aF21Bc
0.001 ETH
110352452020-10-11 16:17:531423 days ago1602433073
0xc5142A06...523aF21Bc
0.001 ETH
110268782020-10-10 9:14:131425 days ago1602321253
0xc5142A06...523aF21Bc
0.001 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BREE_STAKE_FARM

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Multiple files format)

File 1 of 5: BREE_STAKE_FARM.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.0;

import "./Owned.sol";
import "./BREE.sol";
import "./ERC20contract.sol";
import "./SafeMath.sol";

contract BREE_STAKE_FARM is Owned{
    
    using SafeMath for uint256;
    
    uint256 public yieldCollectionFee = 0.01 ether;
    uint256 public stakingPeriod = 30 days;
    uint256 public stakeClaimFee = 0.001 ether;
    uint256 public minStakeLimit = 500 * 10 **(18); //500 BREE
    uint256 public totalYield;
    uint256 public totalRewards;
    
    Token public bree;
    
    struct Tokens{
        bool exists;
        uint256 rate;
    }
    
    mapping(address => Tokens) public tokens;
    address[] TokensAddresses;
    address governance;
    
    struct DepositedToken{
        bool    whitelisted;
        uint256 activeDeposit;
        uint256 totalDeposits;
        uint256 startTime;
        uint256 pendingGains;
        uint256 lastClaimedDate;
        uint256 totalGained;
        uint    rate;
        uint    period;
    }
    
    mapping(address => mapping(address => DepositedToken)) users;
    
    event TokenAdded(address indexed tokenAddress, uint256 indexed APY);
    event TokenRemoved(address indexed tokenAddress, uint256 indexed APY);
    event FarmingRateChanged(address indexed tokenAddress, uint256 indexed newAPY);
    event YieldCollectionFeeChanged(uint256 indexed yieldCollectionFee);
    event FarmingStarted(address indexed _tokenAddress, uint256 indexed _amount);
    event YieldCollected(address indexed _tokenAddress, uint256 indexed _yield);
    event AddedToExistingFarm(address indexed _tokenAddress, uint256 indexed tokens);
    
    event Staked(address indexed staker, uint256 indexed tokens);
    event AddedToExistingStake(address indexed staker, uint256 indexed tokens);
    event StakingRateChanged(uint256 indexed newAPY);
    event TokensClaimed(address indexed claimer, uint256 indexed stakedTokens);
    event RewardClaimed(address indexed claimer, uint256 indexed reward);
    
    event GovernanceSet(address indexed governanceAddress);
    
    modifier validStake(uint256 stakeAmount){
        require(stakeAmount >= minStakeLimit, "stake amount should be equal/greater than min stake limit");
        _;
    }
    
    modifier OwnerOrGovernance(address _caller){
        require(_caller == owner || _caller == governance);
        _;
    }
    
    constructor(address _tokenAddress) public {
        bree = Token(_tokenAddress);
        
        // add bree token to ecosystem
        _addToken(_tokenAddress, 40); // 40 apy initially
    }
    
    //#########################################################################################################################################################//
    //####################################################FARMING EXTERNAL FUNCTIONS###########################################################################//
    //#########################################################################################################################################################// 
    
    // ------------------------------------------------------------------------
    // Add assets to farm
    // @param _tokenAddress address of the token asset
    // @param _amount amount of tokens to deposit
    // ------------------------------------------------------------------------
    function Farm(address _tokenAddress, uint256 _amount) external{
        require(_tokenAddress != address(bree), "Use staking instead"); 
        
        // add to farm
        _newDeposit(_tokenAddress, _amount);
        
        // transfer tokens from user to the contract balance
        require(ERC20Interface(_tokenAddress).transferFrom(msg.sender, address(this), _amount));
        
        emit FarmingStarted(_tokenAddress, _amount);
    }
    
    // ------------------------------------------------------------------------
    // Add more deposits to already running farm
    // @param _tokenAddress address of the token asset
    // @param _amount amount of tokens to deposit
    // ------------------------------------------------------------------------
    function AddToFarm(address _tokenAddress, uint256 _amount) external{
        require(_tokenAddress != address(bree), "use staking instead");
        _addToExisting(_tokenAddress, _amount);
        
        // move the tokens from the caller to the contract address
        require(ERC20Interface(_tokenAddress).transferFrom(msg.sender,address(this), _amount));
        
        emit AddedToExistingFarm(_tokenAddress, _amount);
    }
    
    // ------------------------------------------------------------------------
    // Withdraw accumulated yield
    // @param _tokenAddress address of the token asset
    // @required must pay yield claim fee
    // ------------------------------------------------------------------------
    function Yield(address _tokenAddress) external payable {
        require(msg.value >= yieldCollectionFee, "should pay exact claim fee");
        require(PendingYield(_tokenAddress, msg.sender) > 0, "No pending yield");
        require(tokens[_tokenAddress].exists, "Token doesn't exist");
        require(_tokenAddress != address(bree), "use staking instead");
    
        uint256 _pendingYield = PendingYield(_tokenAddress, msg.sender);
        
        // Global stats update
        totalYield = totalYield.add(_pendingYield);
        
        // update the record
        users[msg.sender][_tokenAddress].totalGained = users[msg.sender][_tokenAddress].totalGained.add(_pendingYield);
        users[msg.sender][_tokenAddress].lastClaimedDate = now;
        users[msg.sender][_tokenAddress].pendingGains = 0;
        
        // transfer fee to the owner
        owner.transfer(msg.value);
        
        // mint more tokens inside token contract equivalent to _pendingYield
        require(bree.MintTokens(_pendingYield, msg.sender));
        
        emit YieldCollected(_tokenAddress, _pendingYield);
    }
    
    // ------------------------------------------------------------------------
    // Withdraw any amount of tokens, the contract will update the farming 
    // @param _tokenAddress address of the token asset
    // @param _amount amount of tokens to deposit
    // ------------------------------------------------------------------------
    function WithdrawFarmedTokens(address _tokenAddress, uint256 _amount) external {
        require(users[msg.sender][_tokenAddress].activeDeposit >= _amount, "insufficient amount in farming");
        require(_tokenAddress != address(bree), "use withdraw of staking instead");
        
        // update farming stats
            // check if we have any pending yield, add it to previousYield var
            users[msg.sender][_tokenAddress].pendingGains = PendingYield(_tokenAddress, msg.sender);
            // update amount 
            users[msg.sender][_tokenAddress].activeDeposit = users[msg.sender][_tokenAddress].activeDeposit.sub(_amount);
            // update farming start time -- new farming will begin from this time onwards
            users[msg.sender][_tokenAddress].startTime = now;
            // reset last claimed figure as well -- new farming will begin from this time onwards
            users[msg.sender][_tokenAddress].lastClaimedDate = now;
        
        // withdraw the tokens and move from contract to the caller
        require(ERC20Interface(_tokenAddress).transfer(msg.sender, _amount));
        
        emit TokensClaimed(msg.sender, _amount);
    }
    
    //#########################################################################################################################################################//
    //####################################################STAKING EXTERNAL FUNCTIONS###########################################################################//
    //#########################################################################################################################################################//    
    
    // ------------------------------------------------------------------------
    // Start staking
    // @param _tokenAddress address of the token asset
    // @param _amount amount of tokens to deposit
    // ------------------------------------------------------------------------
    function Stake(uint256 _amount) external validStake(_amount) {
        // add new stake
        _newDeposit(address(bree), _amount);
        
        // transfer tokens from user to the contract balance
        require(bree.transferFrom(msg.sender, address(this), _amount));
        
        emit Staked(msg.sender, _amount);
        
    }
    
    // ------------------------------------------------------------------------
    // Add more deposits to already running farm
    // @param _tokenAddress address of the token asset
    // @param _amount amount of tokens to deposit
    // ------------------------------------------------------------------------
    function AddToStake(uint256 _amount) external {
        require(now - users[msg.sender][address(bree)].startTime < users[msg.sender][address(bree)].period, "current staking expired");
        _addToExisting(address(bree), _amount);

        // move the tokens from the caller to the contract address
        require(bree.transferFrom(msg.sender,address(this), _amount));
        
        emit AddedToExistingStake(msg.sender, _amount);
    }
    
    // ------------------------------------------------------------------------
    // Claim reward and staked tokens
    // @required user must be a staker
    // @required must be claimable
    // ------------------------------------------------------------------------
    function ClaimStakedTokens() external {
        //require(users[msg.sender][address(bree)].running, "no running stake");
        require(users[msg.sender][address(bree)].activeDeposit > 0, "no running stake");
        require(users[msg.sender][address(bree)].startTime.add(users[msg.sender][address(bree)].period) < now, "not claimable before staking period");
        
        uint256 _currentDeposit = users[msg.sender][address(bree)].activeDeposit;
        
        // check if we have any pending reward, add it to pendingGains var
        users[msg.sender][address(bree)].pendingGains = PendingReward(msg.sender);
        // update amount 
        users[msg.sender][address(bree)].activeDeposit = 0;
        
        // transfer staked tokens
        require(bree.transfer(msg.sender, _currentDeposit));
        
        emit TokensClaimed(msg.sender, _currentDeposit);
        
    }
    
    // ------------------------------------------------------------------------
    // Claim reward and staked tokens
    // @required user must be a staker
    // @required must be claimable
    // ------------------------------------------------------------------------
    function ClaimReward() external payable {
        require(msg.value >= stakeClaimFee, "should pay exact claim fee");
        require(PendingReward(msg.sender) > 0, "nothing pending to claim");
    
        uint256 _pendingReward = PendingReward(msg.sender);
        
        // add claimed reward to global stats
        totalRewards = totalRewards.add(_pendingReward);
        // add the reward to total claimed rewards
        users[msg.sender][address(bree)].totalGained = users[msg.sender][address(bree)].totalGained.add(_pendingReward);
        // update lastClaim amount
        users[msg.sender][address(bree)].lastClaimedDate = now;
        // reset previous rewards
        users[msg.sender][address(bree)].pendingGains = 0;
        
        // transfer the claim fee to the owner
        owner.transfer(msg.value);
        
        // mint more tokens inside token contract
        require(bree.MintTokens(_pendingReward, msg.sender));
         
        emit RewardClaimed(msg.sender, _pendingReward);
    }
    
    //#########################################################################################################################################################//
    //##########################################################FARMING QUERIES################################################################################//
    //#########################################################################################################################################################//
    
    // ------------------------------------------------------------------------
    // Query to get the pending yield
    // @param _tokenAddress address of the token asset
    // ------------------------------------------------------------------------
    function PendingYield(address _tokenAddress, address _caller) public view returns(uint256 _pendingRewardWeis){
        uint256 _totalFarmingTime = now.sub(users[_caller][_tokenAddress].lastClaimedDate);
        
        uint256 _reward_token_second = ((tokens[_tokenAddress].rate).mul(10 ** 21)).div(365 days); // added extra 10^21
        
        uint256 yield = ((users[_caller][_tokenAddress].activeDeposit).mul(_totalFarmingTime.mul(_reward_token_second))).div(10 ** 27); // remove extra 10^21 // 10^2 are for 100 (%)
        
        return yield.add(users[_caller][_tokenAddress].pendingGains);
    }
    
    // ------------------------------------------------------------------------
    // Query to get the active farm of the user
    // @param farming asset/ token address
    // ------------------------------------------------------------------------
    function ActiveFarmDeposit(address _tokenAddress, address _user) external view returns(uint256 _activeDeposit){
        return users[_user][_tokenAddress].activeDeposit;
    }
    
    // ------------------------------------------------------------------------
    // Query to get the total farming of the user
    // @param farming asset/ token address
    // ------------------------------------------------------------------------
    function YourTotalFarmingTillToday(address _tokenAddress, address _user) external view returns(uint256 _totalFarming){
        return users[_user][_tokenAddress].totalDeposits;
    }
    
    // ------------------------------------------------------------------------
    // Query to get the time of last farming of user
    // ------------------------------------------------------------------------
    function LastFarmedOn(address _tokenAddress, address _user) external view returns(uint256 _unixLastFarmedTime){
        return users[_user][_tokenAddress].startTime;
    }
    
    // ------------------------------------------------------------------------
    // Query to get total earned rewards from particular farming
    // @param farming asset/ token address
    // ------------------------------------------------------------------------
    function TotalFarmingRewards(address _tokenAddress, address _user) external view returns(uint256 _totalEarned){
        return users[_user][_tokenAddress].totalGained;
    }
    
    //#########################################################################################################################################################//
    //####################################################FARMING ONLY OWNER FUNCTIONS#########################################################################//
    //#########################################################################################################################################################//
    
    // ------------------------------------------------------------------------
    // Links governance contract to this contract
    // @param _govAddress address of the governance contract
    // @required only owner 
    // ------------------------------------------------------------------------    
    function setGovernanceContract(address _govAddress) external onlyOwner {
        governance = _govAddress;
        emit GovernanceSet(_govAddress);
    }
    
    // ------------------------------------------------------------------------
    // Add supported tokens
    // @param _tokenAddress address of the token asset
    // @param _farmingRate rate applied for farming yield to produce
    // @required only owner or governance contract
    // ------------------------------------------------------------------------    
    function AddToken(address _tokenAddress, uint256 _rate) public OwnerOrGovernance(msg.sender) {
        _addToken(_tokenAddress, _rate);
    }
    
    // ------------------------------------------------------------------------
    // Remove tokens if no longer supported
    // @param _tokenAddress address of the token asset
    // @required only owner or governance contract
    // ------------------------------------------------------------------------  
    function RemoveToken(address _tokenAddress) public OwnerOrGovernance(msg.sender) {
        
        require(tokens[_tokenAddress].exists, "token doesn't exist");
        
        tokens[_tokenAddress].exists = false;
        
        emit TokenRemoved(_tokenAddress, tokens[_tokenAddress].rate);
    }
    
    // ------------------------------------------------------------------------
    // Change farming rate of the supported token
    // @param _tokenAddress address of the token asset
    // @param _newFarmingRate new rate applied for farming yield to produce
    // @required only owner or governance contract
    // ------------------------------------------------------------------------  
    function ChangeFarmingRate(address _tokenAddress, uint256 _newFarmingRate) public OwnerOrGovernance(msg.sender) {
        
        require(tokens[_tokenAddress].exists, "token doesn't exist");
        
        tokens[_tokenAddress].rate = _newFarmingRate;
        
        emit FarmingRateChanged(_tokenAddress, _newFarmingRate);
    }

    // ------------------------------------------------------------------------
    // Change Yield collection fee
    // @param _fee fee to claim the yield
    // @required only owner or governance contract
    // ------------------------------------------------------------------------     
    function SetYieldCollectionFee(uint256 _fee) public OwnerOrGovernance(msg.sender){
        yieldCollectionFee = _fee;
        emit YieldCollectionFeeChanged(_fee);
    }
    
    //#########################################################################################################################################################//
    //####################################################STAKING QUERIES######################################################################################//
    //#########################################################################################################################################################//
    
    // ------------------------------------------------------------------------
    // Query to get the pending reward
    // ------------------------------------------------------------------------
    function PendingReward(address _caller) public view returns(uint256 _pendingReward){
        uint256 _totalStakedTime = 0;
        uint256 expiryDate = (users[_caller][address(bree)].period).add(users[_caller][address(bree)].startTime);
        
        if(now < expiryDate)
            _totalStakedTime = now.sub(users[_caller][address(bree)].lastClaimedDate);
        else{
            if(users[_caller][address(bree)].lastClaimedDate >= expiryDate) // if claimed after expirydate already
                _totalStakedTime = 0;
            else
                _totalStakedTime = expiryDate.sub(users[_caller][address(bree)].lastClaimedDate);
        }
            
        uint256 _reward_token_second = ((users[_caller][address(bree)].rate).mul(10 ** 21)); // added extra 10^21
        uint256 reward =  ((users[_caller][address(bree)].activeDeposit).mul(_totalStakedTime.mul(_reward_token_second))).div(10 ** 27); // remove extra 10^21 // the two extra 10^2 is for 100 (%) // another two extra 10^4 is for decimals to be allowed
        reward = reward.div(365 days);
        return (reward.add(users[_caller][address(bree)].pendingGains));
    }
    
    // ------------------------------------------------------------------------
    // Query to get the active stake of the user
    // ------------------------------------------------------------------------
    function YourActiveStake(address _user) external view returns(uint256 _activeStake){
        return users[_user][address(bree)].activeDeposit;
    }
    
    // ------------------------------------------------------------------------
    // Query to get the total stakes of the user
    // ------------------------------------------------------------------------
    function YourTotalStakesTillToday(address _user) external view returns(uint256 _totalStakes){
        return users[_user][address(bree)].totalDeposits;
    }
    
    // ------------------------------------------------------------------------
    // Query to get the time of last stake of user
    // ------------------------------------------------------------------------
    function LastStakedOn(address _user) public view returns(uint256 _unixLastStakedTime){
        return users[_user][address(bree)].startTime;
    }
    
    // ------------------------------------------------------------------------
    // Query to get total earned rewards from stake
    // ------------------------------------------------------------------------
    function TotalStakeRewardsClaimedTillToday(address _user) external view returns(uint256 _totalEarned){
        return users[_user][address(bree)].totalGained;
    }
    
    // ------------------------------------------------------------------------
    // Query to get the staking rate
    // ------------------------------------------------------------------------
    function LatestStakingRate() external view returns(uint256 APY){
        return tokens[address(bree)].rate;
    }
    
    // ------------------------------------------------------------------------
    // Query to get the staking rate you staked at
    // ------------------------------------------------------------------------
    function YourStakingRate(address _user) external view returns(uint256 _stakingRate){
        return users[_user][address(bree)].rate;
    }
    
    // ------------------------------------------------------------------------
    // Query to get the staking period you staked at
    // ------------------------------------------------------------------------
    function YourStakingPeriod(address _user) external view returns(uint256 _stakingPeriod){
        return users[_user][address(bree)].period;
    }
    
    // ------------------------------------------------------------------------
    // Query to get the staking time left
    // ------------------------------------------------------------------------
    function StakingTimeLeft(address _user) external view returns(uint256 _secsLeft){
        uint256 left = 0; 
        uint256 expiryDate = (users[_user][address(bree)].period).add(LastStakedOn(_user));
        
        if(now < expiryDate)
            left = expiryDate.sub(now);
            
        return left;
    }
    
    //#########################################################################################################################################################//
    //####################################################STAKING ONLY OWNER FUNCTION##########################################################################//
    //#########################################################################################################################################################//
    
    // ------------------------------------------------------------------------
    // Change staking rate
    // @param _newStakingRate new rate applied for staking
    // @required only owner or governance contract
    // ------------------------------------------------------------------------  
    function ChangeStakingRate(uint256 _newStakingRate) public OwnerOrGovernance(msg.sender){
        
        tokens[address(bree)].rate = _newStakingRate;
        
        emit StakingRateChanged(_newStakingRate);
    }
    
    // ------------------------------------------------------------------------
    // Change the min stake limit
    // @param _minStakeLimit minimum stake limit value
    // @required only callable by owner or governance contract
    // ------------------------------------------------------------------------
    function SetMinStakeLimit(uint256 _minStakeLimit) public OwnerOrGovernance(msg.sender){
       minStakeLimit = _minStakeLimit;
    }
    
    // ------------------------------------------------------------------------
    // Change the staking period
    // @param _seconds number of seconds to stake (n days = n*24*60*60)
    // @required only callable by owner or governance contract
    // ------------------------------------------------------------------------
    function SetStakingPeriod(uint256 _seconds) public OwnerOrGovernance(msg.sender){
       stakingPeriod = _seconds;
    }
    
    // ------------------------------------------------------------------------
    // Change the staking claim fee
    // @param _fee claim fee in weis
    // @required only callable by owner or governance contract
    // ------------------------------------------------------------------------
    function SetClaimFee(uint256 _fee) public OwnerOrGovernance(msg.sender){
       stakeClaimFee = _fee;
    }
    
    //#########################################################################################################################################################//
    //################################################################COMMON UTILITIES#########################################################################//
    //#########################################################################################################################################################//    
    
    // ------------------------------------------------------------------------
    // Internal function to add new deposit
    // ------------------------------------------------------------------------        
    function _newDeposit(address _tokenAddress, uint256 _amount) internal{
        require(users[msg.sender][_tokenAddress].activeDeposit ==  0, "Already running");
        require(tokens[_tokenAddress].exists, "Token doesn't exist");
        
        // add that token into the contract balance
        // check if we have any pending reward/yield, add it to pendingGains variable
        if(_tokenAddress == address(bree)){
            users[msg.sender][_tokenAddress].pendingGains = PendingReward(msg.sender);
            users[msg.sender][_tokenAddress].period = stakingPeriod;
            users[msg.sender][_tokenAddress].rate = tokens[_tokenAddress].rate; // rate for stakers will be fixed at time of staking
        }
        else
            users[msg.sender][_tokenAddress].pendingGains = PendingYield(_tokenAddress, msg.sender);
            
        users[msg.sender][_tokenAddress].activeDeposit = _amount;
        users[msg.sender][_tokenAddress].totalDeposits = users[msg.sender][_tokenAddress].totalDeposits.add(_amount);
        users[msg.sender][_tokenAddress].startTime = now;
        users[msg.sender][_tokenAddress].lastClaimedDate = now;
        
    }

    // ------------------------------------------------------------------------
    // Internal function to add to existing deposit
    // ------------------------------------------------------------------------        
    function _addToExisting(address _tokenAddress, uint256 _amount) internal{
        require(tokens[_tokenAddress].exists, "Token doesn't exist");
        // require(users[msg.sender][_tokenAddress].running, "no running farming/stake");
        require(users[msg.sender][_tokenAddress].activeDeposit > 0, "no running farming/stake");
        // update farming stats
            // check if we have any pending reward/yield, add it to pendingGains variable
            if(_tokenAddress == address(bree)){
                users[msg.sender][_tokenAddress].pendingGains = PendingReward(msg.sender);
                users[msg.sender][_tokenAddress].period = stakingPeriod;
                users[msg.sender][_tokenAddress].rate = tokens[_tokenAddress].rate; // rate of only staking will be updated when more is added to stake
            }
            else
                users[msg.sender][_tokenAddress].pendingGains = PendingYield(_tokenAddress, msg.sender);
            // update current deposited amount 
            users[msg.sender][_tokenAddress].activeDeposit = users[msg.sender][_tokenAddress].activeDeposit.add(_amount);
            // update total deposits till today
            users[msg.sender][_tokenAddress].totalDeposits = users[msg.sender][_tokenAddress].totalDeposits.add(_amount);
            // update new deposit start time -- new stake/farming will begin from this time onwards
            users[msg.sender][_tokenAddress].startTime = now;
            // reset last claimed figure as well -- new stake/farming will begin from this time onwards
            users[msg.sender][_tokenAddress].lastClaimedDate = now;
            
            
    }

    // ------------------------------------------------------------------------
    // Internal function to add token
    // ------------------------------------------------------------------------     
    function _addToken(address _tokenAddress, uint256 _rate) internal{
        require(!tokens[_tokenAddress].exists, "token already exists");
        
        tokens[_tokenAddress] = Tokens({
            exists: true,
            rate: _rate
        });
        
        TokensAddresses.push(_tokenAddress);
        emit TokenAdded(_tokenAddress, _rate);
    }
    
    
}



File 2 of 5: BREE.sol
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.6.0;

// ----------------------------------------------------------------------------
// 'BREE' token contract

// Symbol      : BREE 
// Name        : CBDAO 
// Total supply: 10 million
// Decimals    : 18
// ----------------------------------------------------------------------------

import './SafeMath.sol';
import './ERC20contract.sol';
import './Owned.sol';

// ----------------------------------------------------------------------------
// ERC20 Token, with the addition of symbol, name and decimals and assisted
// token transfers
// ----------------------------------------------------------------------------
contract Token is ERC20Interface, Owned {
    using SafeMath for uint256;
    string public symbol = "BREE";
    string public  name = "CBDAO";
    uint256 public decimals = 18;
    uint256 private maxCapSupply = 1e7 * 10**(decimals); // 10 million
    uint256 _totalSupply = 1530409 * 10 ** (decimals); // 1,530,409
    address stakeFarmingContract;
    
    mapping(address => uint256) balances;
    mapping(address => mapping(address => uint256)) allowed;
    
    // ------------------------------------------------------------------------
    // Constructor
    // ------------------------------------------------------------------------
    constructor() public {
        // mint _totalSupply amount of tokens and send to owner
        balances[owner] = balances[owner].add(_totalSupply);
        emit Transfer(address(0),owner, _totalSupply);
    }
    
    // ------------------------------------------------------------------------
    // Set the STAKE_FARMING_CONTRACT
    // @required only owner
    // ------------------------------------------------------------------------
    function SetStakeFarmingContract(address _address) external onlyOwner{
        require(_address != address(0), "Invalid address");
        stakeFarmingContract = _address;
    }
    
    // ------------------------------------------------------------------------
    // Token Minting function
    // @params _amount expects the amount of tokens to be minted excluding the 
    // required decimals
    // @params _beneficiary tokens will be sent to _beneficiary
    // @required only owner OR stakeFarmingContract
    // ------------------------------------------------------------------------
    function MintTokens(uint256 _amount, address _beneficiary) public returns(bool){
        require(msg.sender == stakeFarmingContract);
        require(_beneficiary != address(0), "Invalid address");
        require(_totalSupply.add(_amount) <= maxCapSupply, "exceeds max cap supply 10 million");
        _totalSupply = _totalSupply.add(_amount);
        
        // mint _amount tokens and keep inside contract
        balances[_beneficiary] = balances[_beneficiary].add(_amount);
        
        emit Transfer(address(0),_beneficiary, _amount);
        return true;
    }
    
    // ------------------------------------------------------------------------
    // Burn the `_amount` amount of tokens from the calling `account`
    // @params _amount the amount of tokens to burn
    // ------------------------------------------------------------------------
    function BurnTokens(uint256 _amount) external {
        _burn(_amount, msg.sender);
    }

    // ------------------------------------------------------------------------
    // @dev Internal function that burns an amount of the token from a given account
    // @param _amount The amount that will be burnt
    // @param _account The tokens to burn from
    // ------------------------------------------------------------------------
    function _burn(uint256 _amount, address _account) internal {
        require(balances[_account] >= _amount, "insufficient account balance");
        _totalSupply = _totalSupply.sub(_amount);
        balances[_account] = balances[_account].sub(_amount);
        emit Transfer(_account, address(0), _amount);
    }
    
    /** ERC20Interface function's implementation **/
    
    // ------------------------------------------------------------------------
    // Get the total supply of the `token`
    // ------------------------------------------------------------------------
    function totalSupply() public override view returns (uint256){
       return _totalSupply; 
    }
    
    // ------------------------------------------------------------------------
    // Get the token balance for account `tokenOwner`
    // ------------------------------------------------------------------------
    function balanceOf(address tokenOwner) public override view returns (uint256 balance) {
        return balances[tokenOwner];
    }

    // ------------------------------------------------------------------------
    // Transfer the balance from token owner's account to `to` account
    // - Owner's account must have sufficient balance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transfer(address to, uint256 tokens) public override returns  (bool success) {
        // prevent transfer to 0x0, use burn instead
        require(address(to) != address(0));
        require(balances[msg.sender] >= tokens );
        require(balances[to].add(tokens) >= balances[to]);
            
        balances[msg.sender] = balances[msg.sender].sub(tokens);
        balances[to] = balances[to].add(tokens);
        emit Transfer(msg.sender,to,tokens);
        return true;
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public override returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    // ------------------------------------------------------------------------
    // Transfer `tokens` from the `from` account to the `to` account
    // 
    // The calling account must already have sufficient tokens approve(...)-d
    // for spending from the `from` account and
    // - From account must have sufficient balance to transfer
    // - Spender must have sufficient allowance to transfer
    // - 0 value transfers are allowed
    // ------------------------------------------------------------------------
    function transferFrom(address from, address to, uint256 tokens) public override returns (bool success){
        require(tokens <= allowed[from][msg.sender]); //check allowance
        require(balances[from] >= tokens);
        require(from != address(0), "Invalid address");
        require(to != address(0), "Invalid address");
        
        balances[from] = balances[from].sub(tokens);
        balances[to] = balances[to].add(tokens);
        allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);
        emit Transfer(from,to,tokens);
        return true;
    }
    
    // ------------------------------------------------------------------------
    // Returns the amount of tokens approved by the owner that can be
    // transferred to the spender's account
    // ------------------------------------------------------------------------
    function allowance(address tokenOwner, address spender) public override view returns (uint256 remaining) {
        return allowed[tokenOwner][spender];
    }
    
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, allowed[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, allowed[msg.sender][spender].sub(subtractedValue));
        return true;
    }
    
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        allowed[owner][spender] = value;
        emit Approval(owner, spender, value);
    }
}

File 3 of 5: ERC20contract.sol
// "SPDX-License-Identifier: UNLICENSED "
pragma solidity ^0.6.0;
// ----------------------------------------------------------------------------
// ERC Token Standard #20 Interface
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
abstract contract ERC20Interface {
    function totalSupply() public virtual view returns (uint);
    function balanceOf(address tokenOwner) public virtual view returns (uint256 balance);
    function allowance(address tokenOwner, address spender) public virtual view returns (uint256 remaining);
    function transfer(address to, uint256 tokens) public virtual returns (bool success);
    function approve(address spender, uint256 tokens) public virtual returns (bool success);
    function transferFrom(address from, address to, uint256 tokens) public virtual returns (bool success);

    event Transfer(address indexed from, address indexed to, uint256 tokens);
    event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens);
}

File 4 of 5: Owned.sol
// "SPDX-License-Identifier: UNLICENSED "
pragma solidity ^0.6.0;
// ----------------------------------------------------------------------------
// Owned contract
// ----------------------------------------------------------------------------
contract Owned {
    address payable public owner;

    event OwnershipTransferred(address indexed _from, address indexed _to);

    constructor() public {
        owner = msg.sender;
    }

    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    function transferOwnership(address payable _newOwner) public onlyOwner {
        owner = _newOwner;
        emit OwnershipTransferred(msg.sender, _newOwner);
    }
}

File 5 of 5: SafeMath.sol
// "SPDX-License-Identifier: UNLICENSED "
pragma solidity ^0.6.0;
/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 *
*/
 
library SafeMath {
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
  
  function ceil(uint a, uint m) internal pure returns (uint r) {
    return (a + m - 1) / m * m;
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"AddedToExistingFarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"AddedToExistingStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"newAPY","type":"uint256"}],"name":"FarmingRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"FarmingStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"governanceAddress","type":"address"}],"name":"GovernanceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":true,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"staker","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newAPY","type":"uint256"}],"name":"StakingRateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"APY","type":"uint256"}],"name":"TokenAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"APY","type":"uint256"}],"name":"TokenRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":true,"internalType":"uint256","name":"stakedTokens","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_tokenAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_yield","type":"uint256"}],"name":"YieldCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"yieldCollectionFee","type":"uint256"}],"name":"YieldCollectionFeeChanged","type":"event"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"ActiveFarmDeposit","outputs":[{"internalType":"uint256","name":"_activeDeposit","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"AddToFarm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"AddToStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_rate","type":"uint256"}],"name":"AddToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_newFarmingRate","type":"uint256"}],"name":"ChangeFarmingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newStakingRate","type":"uint256"}],"name":"ChangeStakingRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ClaimReward","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ClaimStakedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Farm","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"LastFarmedOn","outputs":[{"internalType":"uint256","name":"_unixLastFarmedTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"LastStakedOn","outputs":[{"internalType":"uint256","name":"_unixLastStakedTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LatestStakingRate","outputs":[{"internalType":"uint256","name":"APY","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_caller","type":"address"}],"name":"PendingReward","outputs":[{"internalType":"uint256","name":"_pendingReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_caller","type":"address"}],"name":"PendingYield","outputs":[{"internalType":"uint256","name":"_pendingRewardWeis","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"RemoveToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"SetClaimFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minStakeLimit","type":"uint256"}],"name":"SetMinStakeLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"SetStakingPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"SetYieldCollectionFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"StakingTimeLeft","outputs":[{"internalType":"uint256","name":"_secsLeft","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"TotalFarmingRewards","outputs":[{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"TotalStakeRewardsClaimedTillToday","outputs":[{"internalType":"uint256","name":"_totalEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"WithdrawFarmedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"Yield","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"YourActiveStake","outputs":[{"internalType":"uint256","name":"_activeStake","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"YourStakingPeriod","outputs":[{"internalType":"uint256","name":"_stakingPeriod","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"YourStakingRate","outputs":[{"internalType":"uint256","name":"_stakingRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_user","type":"address"}],"name":"YourTotalFarmingTillToday","outputs":[{"internalType":"uint256","name":"_totalFarming","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"YourTotalStakesTillToday","outputs":[{"internalType":"uint256","name":"_totalStakes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bree","outputs":[{"internalType":"contract Token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minStakeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_govAddress","type":"address"}],"name":"setGovernanceContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakeClaimFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"bool","name":"exists","type":"bool"},{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yieldCollectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

6080604052662386f26fc1000060015562278d0060025566038d7ea4c68000600355681b1ae4d6e2ef5000006004553480156200003b57600080fd5b50604051620028d3380380620028d3833981810160405260208110156200006157600080fd5b505160008054336001600160a01b031991821617909155600780549091166001600160a01b03831617905562000099816028620000a0565b50620001bd565b6001600160a01b03821660009081526008602052604090205460ff16156200010f576040805162461bcd60e51b815260206004820152601460248201527f746f6b656e20616c726561647920657869737473000000000000000000000000604482015290519081900360640190fd5b604080518082018252600180825260208083018581526001600160a01b038716600081815260089093528583209451855460ff191690151517855590519383019390935560098054928301815581527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90910180546001600160a01b03191683179055915183927ff4c563a3ea86ff1f4275e8c207df0375a51963f2b831b7bf4da8be938d92876c91a35050565b61270680620001cd6000396000f3fe6080604052600436106102465760003560e01c80638da5cb5b11610139578063c1672177116100b6578063e1bea1af1161007a578063e1bea1af14610829578063e486033914610862578063f2fde38b146108b0578063faea0532146108e3578063fe995a4e14610916578063fea167e01461094f57610246565b8063c167217714610752578063c74e9f771461077c578063cd926e13146107a6578063cef3c156146107e1578063dd4d2dd5146107f657610246565b8063af16b538116100fd578063af16b538146106b2578063b3872dc7146106c7578063bd7b2194146106ed578063c03d5b4714610702578063c141a9511461071757610246565b80638da5cb5b146105eb5780638f670e541461061c5780639328ec3614610655578063a7bbd49814610688578063abff57471461069d57610246565b8063227a473b116101c757806356e6a5001161018b57806356e6a500146105295780635eb478d51461055c57806367e7ac801461058657806379372f9a146105b0578063896931b0146105b857610246565b8063227a473b1461041d5780633252a02e146104475780634453cb2f146104805780634eb129c8146104bb5780634ebf68cf146104ee57610246565b806319e158361161020e57806319e15836146103195780631b3593731461034c5780631b38b912146103855780631d662c06146103b85780631fade863146103f357610246565b8063014182051461024b57806305dc5a19146102725780630e15561a146102a55780631129753f146102ba57806313fa675f146102ef575b600080fd5b34801561025757600080fd5b50610260610964565b60408051918252519081900360200190f35b34801561027e57600080fd5b506102606004803603602081101561029557600080fd5b50356001600160a01b031661096a565b3480156102b157600080fd5b50610260610999565b3480156102c657600080fd5b506102ed600480360360208110156102dd57600080fd5b50356001600160a01b031661099f565b005b3480156102fb57600080fd5b506102ed6004803603602081101561031257600080fd5b5035610a00565b34801561032557600080fd5b506102606004803603602081101561033c57600080fd5b50356001600160a01b0316610a37565b34801561035857600080fd5b506102ed6004803603604081101561036f57600080fd5b506001600160a01b038135169060200135610a66565b34801561039157600080fd5b50610260600480360360208110156103a857600080fd5b50356001600160a01b0316610b8d565b3480156103c457600080fd5b50610260600480360360408110156103db57600080fd5b506001600160a01b0381358116916020013516610bbc565b3480156103ff57600080fd5b506102ed6004803603602081101561041657600080fd5b5035610bec565b34801561042957600080fd5b506102ed6004803603602081101561044057600080fd5b5035610c68565b34801561045357600080fd5b506102ed6004803603604081101561046a57600080fd5b506001600160a01b038135169060200135610d80565b34801561048c57600080fd5b50610260600480360360408110156104a357600080fd5b506001600160a01b0381358116916020013516610e5f565b3480156104c757600080fd5b506102ed600480360360208110156104de57600080fd5b50356001600160a01b0316610e8e565b3480156104fa57600080fd5b506102606004803603604081101561051157600080fd5b506001600160a01b0381358116916020013516610f73565b34801561053557600080fd5b506102606004803603602081101561054c57600080fd5b50356001600160a01b031661107f565b34801561056857600080fd5b506102ed6004803603602081101561057f57600080fd5b50356110df565b34801561059257600080fd5b506102ed600480360360208110156105a957600080fd5b5035611144565b6102ed61117b565b3480156105c457600080fd5b50610260600480360360208110156105db57600080fd5b50356001600160a01b03166113b9565b3480156105f757600080fd5b506106006113e8565b604080516001600160a01b039092168252519081900360200190f35b34801561062857600080fd5b506102ed6004803603604081101561063f57600080fd5b506001600160a01b0381351690602001356113f7565b34801561066157600080fd5b506102606004803603602081101561067857600080fd5b50356001600160a01b031661151e565b34801561069457600080fd5b506106006116fb565b3480156106a957600080fd5b5061026061170a565b3480156106be57600080fd5b5061026061172b565b6102ed600480360360208110156106dd57600080fd5b50356001600160a01b0316611731565b3480156106f957600080fd5b506102ed611a12565b34801561070e57600080fd5b50610260611c14565b34801561072357600080fd5b506102606004803603604081101561073a57600080fd5b506001600160a01b0381358116916020013516611c1a565b34801561075e57600080fd5b506102ed6004803603602081101561077557600080fd5b5035611c49565b34801561078857600080fd5b506102ed6004803603602081101561079f57600080fd5b5035611da2565b3480156107b257600080fd5b50610260600480360360408110156107c957600080fd5b506001600160a01b0381358116916020013516611dd9565b3480156107ed57600080fd5b50610260611e08565b34801561080257600080fd5b506102606004803603602081101561081957600080fd5b50356001600160a01b0316611e0e565b34801561083557600080fd5b506102ed6004803603604081101561084c57600080fd5b506001600160a01b038135169060200135611e3d565b34801561086e57600080fd5b506108956004803603602081101561088557600080fd5b50356001600160a01b0316611e7d565b60408051921515835260208301919091528051918290030190f35b3480156108bc57600080fd5b506102ed600480360360208110156108d357600080fd5b50356001600160a01b0316611e9c565b3480156108ef57600080fd5b506102606004803603602081101561090657600080fd5b50356001600160a01b0316611efe565b34801561092257600080fd5b506102ed6004803603604081101561093957600080fd5b506001600160a01b038135169060200135611f2d565b34801561095b57600080fd5b50610260612131565b60055481565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206001015490565b60065481565b6000546001600160a01b031633146109b657600080fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b690600090a250565b60005433906001600160a01b0316811480610a285750600a546001600160a01b038281169116145b610a3157600080fd5b50600355565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206003015490565b6007546001600160a01b0383811691161415610abf576040805162461bcd60e51b8152602060048201526013602482015272155cd9481cdd185ada5b99c81a5b9cdd195859606a1b604482015290519081900360640190fd5b610ac98282612137565b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b038416916323b872dd9160648083019260209291908290030181600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050506040513d6020811015610b4857600080fd5b5051610b5357600080fd5b60405181906001600160a01b038416907f7de25affb428d2916c612e371f3ece047da76e52c3b848bc8aa98f8f832d10fe90600090a35050565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206008015490565b6001600160a01b038082166000908152600b60209081526040808320938616835292905220600301545b92915050565b60005433906001600160a01b0316811480610c145750600a546001600160a01b038281169116145b610c1d57600080fd5b6007546001600160a01b03166000908152600860205260408082206001018490555183917fb0ee74db6dce7f227ef9bf096b4b0baaa897706d47aa9e753125ceac39751c3591a25050565b80600454811015610caa5760405162461bcd60e51b81526004018080602001828103825260398152602001806126986039913960400191505060405180910390fd5b600754610cc0906001600160a01b031683612137565b600754604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505050506040513d6020811015610d4457600080fd5b5051610d4f57600080fd5b604051829033907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90600090a35050565b60005433906001600160a01b0316811480610da85750600a546001600160a01b038281169116145b610db157600080fd5b6001600160a01b03831660009081526008602052604090205460ff16610e14576040805162461bcd60e51b81526020600482015260136024820152721d1bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b6001600160a01b038316600081815260086020526040808220600101859055518492917f7f1955a793d9c38c520b2e8394264d17e1ebbcfbeefed578552fea2149bc7a2391a3505050565b6001600160a01b038082166000908152600b602090815260408083209386168352929052206006015492915050565b60005433906001600160a01b0316811480610eb65750600a546001600160a01b038281169116145b610ebf57600080fd5b6001600160a01b03821660009081526008602052604090205460ff16610f22576040805162461bcd60e51b81526020600482015260136024820152721d1bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b6001600160a01b038216600081815260086020526040808220805460ff191681556001015490519092917fbe9bb4bdca0a094babd75e3a98b1d2e2390633430d0a2f6e2b9970e2ee03fb2e91a35050565b6001600160a01b038082166000908152600b602090815260408083209386168352929052908120600501548190610fab90429061231c565b6001600160a01b03851660009081526008602052604081206001015491925090610fee906301e1338090610fe890683635c9adc5dea0000061232e565b90612359565b9050600061103e6b033b2e3c9fd0803ce8000000610fe861100f868661232e565b6001600160a01b03808a166000908152600b60209081526040808320938e16835292905220600101549061232e565b6001600160a01b038087166000908152600b60209081526040808320938b168352929052206004015490915061107590829061236e565b9695505050505050565b600080806110c161108f85610a37565b6001600160a01b038087166000908152600b60209081526040808320600754909416835292905220600801549061236e565b9050804210156110d8576110d5814261231c565b91505b5092915050565b60005433906001600160a01b03168114806111075750600a546001600160a01b038281169116145b61111057600080fd5b600182905560405182907f514c42e17f7b6a99f4565772ac1cb1283fb5538cc7c0a15937542d0ae004044f90600090a25050565b60005433906001600160a01b031681148061116c5750600a546001600160a01b038281169116145b61117557600080fd5b50600455565b6003543410156111d2576040805162461bcd60e51b815260206004820152601a60248201527f73686f756c642070617920657861637420636c61696d20666565000000000000604482015290519081900360640190fd5b60006111dd3361151e565b1161122f576040805162461bcd60e51b815260206004820152601860248201527f6e6f7468696e672070656e64696e6720746f20636c61696d0000000000000000604482015290519081900360640190fd5b600061123a3361151e565b60065490915061124a908261236e565b6006908155336000908152600b602090815260408083206007546001600160a01b0316845290915290200154611280908261236e565b336000908152600b60209081526040808320600780546001600160a01b039081168652919093528184206006019490945581548416835280832042600590910155905483168252808220600401829055815490519216913480156108fc0292909190818181858888f193505050501580156112ff573d6000803e3d6000fd5b5060075460408051636a9c5acd60e01b81526004810184905233602482015290516001600160a01b0390921691636a9c5acd916044808201926020929091908290030181600087803b15801561135457600080fd5b505af1158015611368573d6000803e3d6000fd5b505050506040513d602081101561137e57600080fd5b505161138957600080fd5b604051819033907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724190600090a350565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206006015490565b6000546001600160a01b031681565b6007546001600160a01b0383811691161415611450576040805162461bcd60e51b81526020600482015260136024820152721d5cd9481cdd185ada5b99c81a5b9cdd195859606a1b604482015290519081900360640190fd5b61145a828261237d565b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b038416916323b872dd9160648083019260209291908290030181600087803b1580156114af57600080fd5b505af11580156114c3573d6000803e3d6000fd5b505050506040513d60208110156114d957600080fd5b50516114e457600080fd5b60405181906001600160a01b038416907f0f53de7833b10029a9cc77140305b2a85bce72a6064e4aa0d584412a0fe473d790600090a35050565b6001600160a01b038181166000908152600b6020908152604080832060075490941683529290529081206003810154600890910154829182916115609161236e565b9050804210156115a8576001600160a01b038085166000908152600b60209081526040808320600754909416835292905220600501546115a190429061231c565b915061161d565b6001600160a01b038085166000908152600b602090815260408083206007549094168352929052206005015481116115e3576000915061161d565b6001600160a01b038085166000908152600b602090815260408083206007549094168352929052206005015461161a90829061231c565b91505b6001600160a01b038085166000908152600b6020908152604080832060078054909516845290915281209091015461165e90683635c9adc5dea0000061232e565b905060006116b16b033b2e3c9fd0803ce8000000610fe861167f878661232e565b6001600160a01b03808b166000908152600b60209081526040808320600754909416835292905220600101549061232e565b90506116c1816301e13380612359565b6001600160a01b038088166000908152600b602090815260408083206007549094168352929052206004015490915061107590829061236e565b6007546001600160a01b031681565b6007546001600160a01b031660009081526008602052604090206001015490565b60015481565b600154341015611788576040805162461bcd60e51b815260206004820152601a60248201527f73686f756c642070617920657861637420636c61696d20666565000000000000604482015290519081900360640190fd5b60006117948233610f73565b116117d9576040805162461bcd60e51b815260206004820152601060248201526f139bc81c195b991a5b99c81e5a595b1960821b604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff1661183c576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b6007546001600160a01b0382811691161415611895576040805162461bcd60e51b81526020600482015260136024820152721d5cd9481cdd185ada5b99c81a5b9cdd195859606a1b604482015290519081900360640190fd5b60006118a18233610f73565b6005549091506118b1908261236e565b600555336000908152600b602090815260408083206001600160a01b03861684529091529020600601546118e5908261236e565b336000908152600b602090815260408083206001600160a01b038781168552925280832060068101949094554260058501556004909301829055815492519216913480156108fc0292909190818181858888f1935050505015801561194e573d6000803e3d6000fd5b5060075460408051636a9c5acd60e01b81526004810184905233602482015290516001600160a01b0390921691636a9c5acd916044808201926020929091908290030181600087803b1580156119a357600080fd5b505af11580156119b7573d6000803e3d6000fd5b505050506040513d60208110156119cd57600080fd5b50516119d857600080fd5b60405181906001600160a01b038416907fe542fd70a6e48b1017b003a83582b8b431ba620b546e8febe1d6c063d04d0ad690600090a35050565b336000908152600b602090815260408083206007546001600160a01b03168452909152902060010154611a7f576040805162461bcd60e51b815260206004820152601060248201526f6e6f2072756e6e696e67207374616b6560801b604482015290519081900360640190fd5b336000908152600b602090815260408083206007546001600160a01b03168452909152902060088101546003909101544291611abb919061236e565b10611af75760405162461bcd60e51b81526004018080602001828103825260238152602001806126756023913960400191505060405180910390fd5b336000818152600b602090815260408083206007546001600160a01b0316845290915290206001015490611b2a9061151e565b336000818152600b60209081526040808320600780546001600160a01b03908116865291845282852060049081019790975580548216855282852060010185905554825163a9059cbb60e01b81529687019590955260248601879052905193169363a9059cbb9360448083019491928390030190829087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b505050506040513d6020811015611bd957600080fd5b5051611be457600080fd5b604051819033907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e43090600090a350565b60025481565b6001600160a01b038082166000908152600b602090815260408083209386168352929052206001015492915050565b336000908152600b602090815260408083206007546001600160a01b0316845290915290206008810154600390910154420310611ccd576040805162461bcd60e51b815260206004820152601760248201527f63757272656e74207374616b696e672065787069726564000000000000000000604482015290519081900360640190fd5b600754611ce3906001600160a01b03168261237d565b600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b505050506040513d6020811015611d6757600080fd5b5051611d7257600080fd5b604051819033907f87cc10241523077a91c98e7f42c67bc94408b811dcfb4202150e2935e471b08690600090a350565b60005433906001600160a01b0316811480611dca5750600a546001600160a01b038281169116145b611dd357600080fd5b50600255565b6001600160a01b038082166000908152600b602090815260408083209386168352929052206002015492915050565b60045481565b6001600160a01b039081166000908152600b602090815260408083206007805490951684529091529020015490565b60005433906001600160a01b0316811480611e655750600a546001600160a01b038281169116145b611e6e57600080fd5b611e788383612561565b505050565b6008602052600090815260409020805460019091015460ff9091169082565b6000546001600160a01b03163314611eb357600080fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206002015490565b336000908152600b602090815260408083206001600160a01b0386168452909152902060010154811115611fa8576040805162461bcd60e51b815260206004820152601e60248201527f696e73756666696369656e7420616d6f756e7420696e206661726d696e670000604482015290519081900360640190fd5b6007546001600160a01b038381169116141561200b576040805162461bcd60e51b815260206004820152601f60248201527f757365207769746864726177206f66207374616b696e6720696e737465616400604482015290519081900360640190fd5b6120158233610f73565b336000908152600b602090815260408083206001600160a01b0387168452909152902060048101919091556001015461204e908261231c565b336000818152600b602090815260408083206001600160a01b03881680855290835281842060018101969096554260038701819055600590960195909555805163a9059cbb60e01b81526004810194909452602484018690525163a9059cbb93604480820194918390030190829087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b505050506040513d60208110156120f557600080fd5b505161210057600080fd5b604051819033907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e43090600090a35050565b60035481565b336000908152600b602090815260408083206001600160a01b0386168452909152902060010154156121a2576040805162461bcd60e51b815260206004820152600f60248201526e416c72656164792072756e6e696e6760881b604482015290519081900360640190fd5b6001600160a01b03821660009081526008602052604090205460ff16612205576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b6007546001600160a01b0383811691161415612272576122243361151e565b336000908152600b602090815260408083206001600160a01b0387168452808352818420600481019590955560025460088087019190915583529220600101549190526007909101556122a4565b61227c8233610f73565b336000908152600b602090815260408083206001600160a01b03871684529091529020600401555b336000908152600b602090815260408083206001600160a01b0386168452909152902060018101829055600201546122dc908261236e565b336000908152600b602090815260408083206001600160a01b03969096168352949052929092206002810192909255504260038201819055600590910155565b60008282111561232857fe5b50900390565b60008261233d57506000610be6565b8282028284828161234a57fe5b041461235257fe5b9392505050565b60008082848161236557fe5b04949350505050565b60008282018381101561235257fe5b6001600160a01b03821660009081526008602052604090205460ff166123e0576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b336000908152600b602090815260408083206001600160a01b0386168452909152902060010154612458576040805162461bcd60e51b815260206004820152601860248201527f6e6f2072756e6e696e67206661726d696e672f7374616b650000000000000000604482015290519081900360640190fd5b6007546001600160a01b03838116911614156124c5576124773361151e565b336000908152600b602090815260408083206001600160a01b0387168452808352818420600481019590955560025460088087019190915583529220600101549190526007909101556124f7565b6124cf8233610f73565b336000908152600b602090815260408083206001600160a01b03871684529091529020600401555b336000908152600b602090815260408083206001600160a01b0386168452909152902060010154612528908261236e565b336000908152600b602090815260408083206001600160a01b038716845290915290206001810191909155600201546122dc908261236e565b6001600160a01b03821660009081526008602052604090205460ff16156125c6576040805162461bcd60e51b8152602060048201526014602482015273746f6b656e20616c72656164792065786973747360601b604482015290519081900360640190fd5b604080518082018252600180825260208083018581526001600160a01b038716600081815260089093528583209451855460ff191690151517855590519383019390935560098054928301815581527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90910180546001600160a01b03191683179055915183927ff4c563a3ea86ff1f4275e8c207df0375a51963f2b831b7bf4da8be938d92876c91a3505056fe6e6f7420636c61696d61626c65206265666f7265207374616b696e6720706572696f647374616b6520616d6f756e742073686f756c6420626520657175616c2f67726561746572207468616e206d696e207374616b65206c696d6974a2646970667358221220c62aa9149fd1956f5ef202ef02a5309464903bbe2fb58782d0fbc4ada3970dac64736f6c634300060c00330000000000000000000000004639cd8cd52ec1cf2e496a606ce28d8afb1c792f

Deployed Bytecode

0x6080604052600436106102465760003560e01c80638da5cb5b11610139578063c1672177116100b6578063e1bea1af1161007a578063e1bea1af14610829578063e486033914610862578063f2fde38b146108b0578063faea0532146108e3578063fe995a4e14610916578063fea167e01461094f57610246565b8063c167217714610752578063c74e9f771461077c578063cd926e13146107a6578063cef3c156146107e1578063dd4d2dd5146107f657610246565b8063af16b538116100fd578063af16b538146106b2578063b3872dc7146106c7578063bd7b2194146106ed578063c03d5b4714610702578063c141a9511461071757610246565b80638da5cb5b146105eb5780638f670e541461061c5780639328ec3614610655578063a7bbd49814610688578063abff57471461069d57610246565b8063227a473b116101c757806356e6a5001161018b57806356e6a500146105295780635eb478d51461055c57806367e7ac801461058657806379372f9a146105b0578063896931b0146105b857610246565b8063227a473b1461041d5780633252a02e146104475780634453cb2f146104805780634eb129c8146104bb5780634ebf68cf146104ee57610246565b806319e158361161020e57806319e15836146103195780631b3593731461034c5780631b38b912146103855780631d662c06146103b85780631fade863146103f357610246565b8063014182051461024b57806305dc5a19146102725780630e15561a146102a55780631129753f146102ba57806313fa675f146102ef575b600080fd5b34801561025757600080fd5b50610260610964565b60408051918252519081900360200190f35b34801561027e57600080fd5b506102606004803603602081101561029557600080fd5b50356001600160a01b031661096a565b3480156102b157600080fd5b50610260610999565b3480156102c657600080fd5b506102ed600480360360208110156102dd57600080fd5b50356001600160a01b031661099f565b005b3480156102fb57600080fd5b506102ed6004803603602081101561031257600080fd5b5035610a00565b34801561032557600080fd5b506102606004803603602081101561033c57600080fd5b50356001600160a01b0316610a37565b34801561035857600080fd5b506102ed6004803603604081101561036f57600080fd5b506001600160a01b038135169060200135610a66565b34801561039157600080fd5b50610260600480360360208110156103a857600080fd5b50356001600160a01b0316610b8d565b3480156103c457600080fd5b50610260600480360360408110156103db57600080fd5b506001600160a01b0381358116916020013516610bbc565b3480156103ff57600080fd5b506102ed6004803603602081101561041657600080fd5b5035610bec565b34801561042957600080fd5b506102ed6004803603602081101561044057600080fd5b5035610c68565b34801561045357600080fd5b506102ed6004803603604081101561046a57600080fd5b506001600160a01b038135169060200135610d80565b34801561048c57600080fd5b50610260600480360360408110156104a357600080fd5b506001600160a01b0381358116916020013516610e5f565b3480156104c757600080fd5b506102ed600480360360208110156104de57600080fd5b50356001600160a01b0316610e8e565b3480156104fa57600080fd5b506102606004803603604081101561051157600080fd5b506001600160a01b0381358116916020013516610f73565b34801561053557600080fd5b506102606004803603602081101561054c57600080fd5b50356001600160a01b031661107f565b34801561056857600080fd5b506102ed6004803603602081101561057f57600080fd5b50356110df565b34801561059257600080fd5b506102ed600480360360208110156105a957600080fd5b5035611144565b6102ed61117b565b3480156105c457600080fd5b50610260600480360360208110156105db57600080fd5b50356001600160a01b03166113b9565b3480156105f757600080fd5b506106006113e8565b604080516001600160a01b039092168252519081900360200190f35b34801561062857600080fd5b506102ed6004803603604081101561063f57600080fd5b506001600160a01b0381351690602001356113f7565b34801561066157600080fd5b506102606004803603602081101561067857600080fd5b50356001600160a01b031661151e565b34801561069457600080fd5b506106006116fb565b3480156106a957600080fd5b5061026061170a565b3480156106be57600080fd5b5061026061172b565b6102ed600480360360208110156106dd57600080fd5b50356001600160a01b0316611731565b3480156106f957600080fd5b506102ed611a12565b34801561070e57600080fd5b50610260611c14565b34801561072357600080fd5b506102606004803603604081101561073a57600080fd5b506001600160a01b0381358116916020013516611c1a565b34801561075e57600080fd5b506102ed6004803603602081101561077557600080fd5b5035611c49565b34801561078857600080fd5b506102ed6004803603602081101561079f57600080fd5b5035611da2565b3480156107b257600080fd5b50610260600480360360408110156107c957600080fd5b506001600160a01b0381358116916020013516611dd9565b3480156107ed57600080fd5b50610260611e08565b34801561080257600080fd5b506102606004803603602081101561081957600080fd5b50356001600160a01b0316611e0e565b34801561083557600080fd5b506102ed6004803603604081101561084c57600080fd5b506001600160a01b038135169060200135611e3d565b34801561086e57600080fd5b506108956004803603602081101561088557600080fd5b50356001600160a01b0316611e7d565b60408051921515835260208301919091528051918290030190f35b3480156108bc57600080fd5b506102ed600480360360208110156108d357600080fd5b50356001600160a01b0316611e9c565b3480156108ef57600080fd5b506102606004803603602081101561090657600080fd5b50356001600160a01b0316611efe565b34801561092257600080fd5b506102ed6004803603604081101561093957600080fd5b506001600160a01b038135169060200135611f2d565b34801561095b57600080fd5b50610260612131565b60055481565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206001015490565b60065481565b6000546001600160a01b031633146109b657600080fd5b600a80546001600160a01b0319166001600160a01b0383169081179091556040517fc73be659241aade67e9a059bcf21494955018b213dbd1179054ccf928b13f3b690600090a250565b60005433906001600160a01b0316811480610a285750600a546001600160a01b038281169116145b610a3157600080fd5b50600355565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206003015490565b6007546001600160a01b0383811691161415610abf576040805162461bcd60e51b8152602060048201526013602482015272155cd9481cdd185ada5b99c81a5b9cdd195859606a1b604482015290519081900360640190fd5b610ac98282612137565b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b038416916323b872dd9160648083019260209291908290030181600087803b158015610b1e57600080fd5b505af1158015610b32573d6000803e3d6000fd5b505050506040513d6020811015610b4857600080fd5b5051610b5357600080fd5b60405181906001600160a01b038416907f7de25affb428d2916c612e371f3ece047da76e52c3b848bc8aa98f8f832d10fe90600090a35050565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206008015490565b6001600160a01b038082166000908152600b60209081526040808320938616835292905220600301545b92915050565b60005433906001600160a01b0316811480610c145750600a546001600160a01b038281169116145b610c1d57600080fd5b6007546001600160a01b03166000908152600860205260408082206001018490555183917fb0ee74db6dce7f227ef9bf096b4b0baaa897706d47aa9e753125ceac39751c3591a25050565b80600454811015610caa5760405162461bcd60e51b81526004018080602001828103825260398152602001806126986039913960400191505060405180910390fd5b600754610cc0906001600160a01b031683612137565b600754604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015610d1a57600080fd5b505af1158015610d2e573d6000803e3d6000fd5b505050506040513d6020811015610d4457600080fd5b5051610d4f57600080fd5b604051829033907f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d90600090a35050565b60005433906001600160a01b0316811480610da85750600a546001600160a01b038281169116145b610db157600080fd5b6001600160a01b03831660009081526008602052604090205460ff16610e14576040805162461bcd60e51b81526020600482015260136024820152721d1bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b6001600160a01b038316600081815260086020526040808220600101859055518492917f7f1955a793d9c38c520b2e8394264d17e1ebbcfbeefed578552fea2149bc7a2391a3505050565b6001600160a01b038082166000908152600b602090815260408083209386168352929052206006015492915050565b60005433906001600160a01b0316811480610eb65750600a546001600160a01b038281169116145b610ebf57600080fd5b6001600160a01b03821660009081526008602052604090205460ff16610f22576040805162461bcd60e51b81526020600482015260136024820152721d1bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b6001600160a01b038216600081815260086020526040808220805460ff191681556001015490519092917fbe9bb4bdca0a094babd75e3a98b1d2e2390633430d0a2f6e2b9970e2ee03fb2e91a35050565b6001600160a01b038082166000908152600b602090815260408083209386168352929052908120600501548190610fab90429061231c565b6001600160a01b03851660009081526008602052604081206001015491925090610fee906301e1338090610fe890683635c9adc5dea0000061232e565b90612359565b9050600061103e6b033b2e3c9fd0803ce8000000610fe861100f868661232e565b6001600160a01b03808a166000908152600b60209081526040808320938e16835292905220600101549061232e565b6001600160a01b038087166000908152600b60209081526040808320938b168352929052206004015490915061107590829061236e565b9695505050505050565b600080806110c161108f85610a37565b6001600160a01b038087166000908152600b60209081526040808320600754909416835292905220600801549061236e565b9050804210156110d8576110d5814261231c565b91505b5092915050565b60005433906001600160a01b03168114806111075750600a546001600160a01b038281169116145b61111057600080fd5b600182905560405182907f514c42e17f7b6a99f4565772ac1cb1283fb5538cc7c0a15937542d0ae004044f90600090a25050565b60005433906001600160a01b031681148061116c5750600a546001600160a01b038281169116145b61117557600080fd5b50600455565b6003543410156111d2576040805162461bcd60e51b815260206004820152601a60248201527f73686f756c642070617920657861637420636c61696d20666565000000000000604482015290519081900360640190fd5b60006111dd3361151e565b1161122f576040805162461bcd60e51b815260206004820152601860248201527f6e6f7468696e672070656e64696e6720746f20636c61696d0000000000000000604482015290519081900360640190fd5b600061123a3361151e565b60065490915061124a908261236e565b6006908155336000908152600b602090815260408083206007546001600160a01b0316845290915290200154611280908261236e565b336000908152600b60209081526040808320600780546001600160a01b039081168652919093528184206006019490945581548416835280832042600590910155905483168252808220600401829055815490519216913480156108fc0292909190818181858888f193505050501580156112ff573d6000803e3d6000fd5b5060075460408051636a9c5acd60e01b81526004810184905233602482015290516001600160a01b0390921691636a9c5acd916044808201926020929091908290030181600087803b15801561135457600080fd5b505af1158015611368573d6000803e3d6000fd5b505050506040513d602081101561137e57600080fd5b505161138957600080fd5b604051819033907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724190600090a350565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206006015490565b6000546001600160a01b031681565b6007546001600160a01b0383811691161415611450576040805162461bcd60e51b81526020600482015260136024820152721d5cd9481cdd185ada5b99c81a5b9cdd195859606a1b604482015290519081900360640190fd5b61145a828261237d565b604080516323b872dd60e01b81523360048201523060248201526044810183905290516001600160a01b038416916323b872dd9160648083019260209291908290030181600087803b1580156114af57600080fd5b505af11580156114c3573d6000803e3d6000fd5b505050506040513d60208110156114d957600080fd5b50516114e457600080fd5b60405181906001600160a01b038416907f0f53de7833b10029a9cc77140305b2a85bce72a6064e4aa0d584412a0fe473d790600090a35050565b6001600160a01b038181166000908152600b6020908152604080832060075490941683529290529081206003810154600890910154829182916115609161236e565b9050804210156115a8576001600160a01b038085166000908152600b60209081526040808320600754909416835292905220600501546115a190429061231c565b915061161d565b6001600160a01b038085166000908152600b602090815260408083206007549094168352929052206005015481116115e3576000915061161d565b6001600160a01b038085166000908152600b602090815260408083206007549094168352929052206005015461161a90829061231c565b91505b6001600160a01b038085166000908152600b6020908152604080832060078054909516845290915281209091015461165e90683635c9adc5dea0000061232e565b905060006116b16b033b2e3c9fd0803ce8000000610fe861167f878661232e565b6001600160a01b03808b166000908152600b60209081526040808320600754909416835292905220600101549061232e565b90506116c1816301e13380612359565b6001600160a01b038088166000908152600b602090815260408083206007549094168352929052206004015490915061107590829061236e565b6007546001600160a01b031681565b6007546001600160a01b031660009081526008602052604090206001015490565b60015481565b600154341015611788576040805162461bcd60e51b815260206004820152601a60248201527f73686f756c642070617920657861637420636c61696d20666565000000000000604482015290519081900360640190fd5b60006117948233610f73565b116117d9576040805162461bcd60e51b815260206004820152601060248201526f139bc81c195b991a5b99c81e5a595b1960821b604482015290519081900360640190fd5b6001600160a01b03811660009081526008602052604090205460ff1661183c576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b6007546001600160a01b0382811691161415611895576040805162461bcd60e51b81526020600482015260136024820152721d5cd9481cdd185ada5b99c81a5b9cdd195859606a1b604482015290519081900360640190fd5b60006118a18233610f73565b6005549091506118b1908261236e565b600555336000908152600b602090815260408083206001600160a01b03861684529091529020600601546118e5908261236e565b336000908152600b602090815260408083206001600160a01b038781168552925280832060068101949094554260058501556004909301829055815492519216913480156108fc0292909190818181858888f1935050505015801561194e573d6000803e3d6000fd5b5060075460408051636a9c5acd60e01b81526004810184905233602482015290516001600160a01b0390921691636a9c5acd916044808201926020929091908290030181600087803b1580156119a357600080fd5b505af11580156119b7573d6000803e3d6000fd5b505050506040513d60208110156119cd57600080fd5b50516119d857600080fd5b60405181906001600160a01b038416907fe542fd70a6e48b1017b003a83582b8b431ba620b546e8febe1d6c063d04d0ad690600090a35050565b336000908152600b602090815260408083206007546001600160a01b03168452909152902060010154611a7f576040805162461bcd60e51b815260206004820152601060248201526f6e6f2072756e6e696e67207374616b6560801b604482015290519081900360640190fd5b336000908152600b602090815260408083206007546001600160a01b03168452909152902060088101546003909101544291611abb919061236e565b10611af75760405162461bcd60e51b81526004018080602001828103825260238152602001806126756023913960400191505060405180910390fd5b336000818152600b602090815260408083206007546001600160a01b0316845290915290206001015490611b2a9061151e565b336000818152600b60209081526040808320600780546001600160a01b03908116865291845282852060049081019790975580548216855282852060010185905554825163a9059cbb60e01b81529687019590955260248601879052905193169363a9059cbb9360448083019491928390030190829087803b158015611baf57600080fd5b505af1158015611bc3573d6000803e3d6000fd5b505050506040513d6020811015611bd957600080fd5b5051611be457600080fd5b604051819033907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e43090600090a350565b60025481565b6001600160a01b038082166000908152600b602090815260408083209386168352929052206001015492915050565b336000908152600b602090815260408083206007546001600160a01b0316845290915290206008810154600390910154420310611ccd576040805162461bcd60e51b815260206004820152601760248201527f63757272656e74207374616b696e672065787069726564000000000000000000604482015290519081900360640190fd5b600754611ce3906001600160a01b03168261237d565b600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611d3d57600080fd5b505af1158015611d51573d6000803e3d6000fd5b505050506040513d6020811015611d6757600080fd5b5051611d7257600080fd5b604051819033907f87cc10241523077a91c98e7f42c67bc94408b811dcfb4202150e2935e471b08690600090a350565b60005433906001600160a01b0316811480611dca5750600a546001600160a01b038281169116145b611dd357600080fd5b50600255565b6001600160a01b038082166000908152600b602090815260408083209386168352929052206002015492915050565b60045481565b6001600160a01b039081166000908152600b602090815260408083206007805490951684529091529020015490565b60005433906001600160a01b0316811480611e655750600a546001600160a01b038281169116145b611e6e57600080fd5b611e788383612561565b505050565b6008602052600090815260409020805460019091015460ff9091169082565b6000546001600160a01b03163314611eb357600080fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6001600160a01b039081166000908152600b602090815260408083206007549094168352929052206002015490565b336000908152600b602090815260408083206001600160a01b0386168452909152902060010154811115611fa8576040805162461bcd60e51b815260206004820152601e60248201527f696e73756666696369656e7420616d6f756e7420696e206661726d696e670000604482015290519081900360640190fd5b6007546001600160a01b038381169116141561200b576040805162461bcd60e51b815260206004820152601f60248201527f757365207769746864726177206f66207374616b696e6720696e737465616400604482015290519081900360640190fd5b6120158233610f73565b336000908152600b602090815260408083206001600160a01b0387168452909152902060048101919091556001015461204e908261231c565b336000818152600b602090815260408083206001600160a01b03881680855290835281842060018101969096554260038701819055600590960195909555805163a9059cbb60e01b81526004810194909452602484018690525163a9059cbb93604480820194918390030190829087803b1580156120cb57600080fd5b505af11580156120df573d6000803e3d6000fd5b505050506040513d60208110156120f557600080fd5b505161210057600080fd5b604051819033907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e43090600090a35050565b60035481565b336000908152600b602090815260408083206001600160a01b0386168452909152902060010154156121a2576040805162461bcd60e51b815260206004820152600f60248201526e416c72656164792072756e6e696e6760881b604482015290519081900360640190fd5b6001600160a01b03821660009081526008602052604090205460ff16612205576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b6007546001600160a01b0383811691161415612272576122243361151e565b336000908152600b602090815260408083206001600160a01b0387168452808352818420600481019590955560025460088087019190915583529220600101549190526007909101556122a4565b61227c8233610f73565b336000908152600b602090815260408083206001600160a01b03871684529091529020600401555b336000908152600b602090815260408083206001600160a01b0386168452909152902060018101829055600201546122dc908261236e565b336000908152600b602090815260408083206001600160a01b03969096168352949052929092206002810192909255504260038201819055600590910155565b60008282111561232857fe5b50900390565b60008261233d57506000610be6565b8282028284828161234a57fe5b041461235257fe5b9392505050565b60008082848161236557fe5b04949350505050565b60008282018381101561235257fe5b6001600160a01b03821660009081526008602052604090205460ff166123e0576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b88191bd95cdb89dd08195e1a5cdd606a1b604482015290519081900360640190fd5b336000908152600b602090815260408083206001600160a01b0386168452909152902060010154612458576040805162461bcd60e51b815260206004820152601860248201527f6e6f2072756e6e696e67206661726d696e672f7374616b650000000000000000604482015290519081900360640190fd5b6007546001600160a01b03838116911614156124c5576124773361151e565b336000908152600b602090815260408083206001600160a01b0387168452808352818420600481019590955560025460088087019190915583529220600101549190526007909101556124f7565b6124cf8233610f73565b336000908152600b602090815260408083206001600160a01b03871684529091529020600401555b336000908152600b602090815260408083206001600160a01b0386168452909152902060010154612528908261236e565b336000908152600b602090815260408083206001600160a01b038716845290915290206001810191909155600201546122dc908261236e565b6001600160a01b03821660009081526008602052604090205460ff16156125c6576040805162461bcd60e51b8152602060048201526014602482015273746f6b656e20616c72656164792065786973747360601b604482015290519081900360640190fd5b604080518082018252600180825260208083018581526001600160a01b038716600081815260089093528583209451855460ff191690151517855590519383019390935560098054928301815581527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af90910180546001600160a01b03191683179055915183927ff4c563a3ea86ff1f4275e8c207df0375a51963f2b831b7bf4da8be938d92876c91a3505056fe6e6f7420636c61696d61626c65206265666f7265207374616b696e6720706572696f647374616b6520616d6f756e742073686f756c6420626520657175616c2f67726561746572207468616e206d696e207374616b65206c696d6974a2646970667358221220c62aa9149fd1956f5ef202ef02a5309464903bbe2fb58782d0fbc4ada3970dac64736f6c634300060c0033

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

0000000000000000000000004639cd8cd52ec1cf2e496a606ce28d8afb1c792f

-----Decoded View---------------
Arg [0] : _tokenAddress (address): 0x4639cd8cd52EC1CF2E496a606ce28D8AfB1C792F

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004639cd8cd52ec1cf2e496a606ce28d8afb1c792f


Deployed Bytecode Sourcemap

171:30294:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;467:25;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;20747:150;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20747:150:1;-1:-1:-1;;;;;20747:150:1;;:::i;499:27::-;;;;;;;;;;;;;:::i;16094:156::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16094:156:1;-1:-1:-1;;;;;16094:156:1;;:::i;:::-;;25935:109;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25935:109:1;;:::i;21506:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21506:148:1;-1:-1:-1;;;;;21506:148:1;;:::i;3453:458::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3453:458:1;;;;;;;;:::i;22969:147::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22969:147:1;-1:-1:-1;;;;;22969:147:1;;:::i;14646:173::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14646:173:1;;;;;;;;;;:::i;24470:222::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24470:222:1;;:::i;8490:349::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8490:349:1;;:::i;17827:342::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17827:342:1;;;;;;;;:::i;15103:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15103:175:1;;;;;;;;;;:::i;17107:308::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17107:308:1;-1:-1:-1;;;;;17107:308:1;;:::i;12906:615::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12906:615:1;;;;;;;;;;:::i;23333:326::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23333:326:1;-1:-1:-1;;;;;23333:326:1;;:::i;18475:172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18475:172:1;;:::i;25021:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25021:134:1;;:::i;11103:1039::-;;;:::i;21881:166::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21881:166:1;-1:-1:-1;;;;;21881:166:1;;:::i;271:28:3:-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;271:28:3;;;;;;;;;;;;;;4242:441:1;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4242:441:1;;;;;;;;:::i;19356:1167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19356:1167:1;-1:-1:-1;;;;;19356:1167:1;;:::i;539:17::-;;;;;;;;;;;;;:::i;22259:115::-;;;;;;;;;;;;;:::i;256:46::-;;;;;;;;;;;;;:::i;4991:1137::-;;;;;;;;;;;;;;;;-1:-1:-1;4991:1137:1;-1:-1:-1;;;;;4991:1137:1;;:::i;9908:906::-;;;;;;;;;;;;;:::i;309:38::-;;;;;;;;;;;;;:::i;13788:177::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13788:177:1;;;;;;;;;;:::i;9170:449::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9170:449:1;;:::i;25500:122::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25500:122:1;;:::i;14234:184::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14234:184:1;;;;;;;;;;:::i;403:46::-;;;;;;;;;;;;;:::i;22600:141::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22600:141:1;-1:-1:-1;;;;;22600:141:1;;:::i;16635:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;16635:143:1;;;;;;;;:::i;647:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;647:40:1;-1:-1:-1;;;;;647:40:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;539:166:3;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;539:166:3;-1:-1:-1;;;;;539:166:3;;:::i;21121:159:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21121:159:1;-1:-1:-1;;;;;21121:159:1;;:::i;6486:1202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6486:1202:1;;;;;;;;:::i;354:42::-;;;;;;;;;;;;;:::i;467:25::-;;;;:::o;20747:150::-;-1:-1:-1;;;;;20848:12:1;;;20809:20;20848:12;;;:5;:12;;;;;;;;20869:4;;;;;20848:27;;;;;;20869:4;20848:41;;;20747:150::o;499:27::-;;;;:::o;16094:156::-;505:5:3;;-1:-1:-1;;;;;505:5:3;491:10;:19;483:28;;;;;;16176:10:1::1;:24:::0;;-1:-1:-1;;;;;;16176:24:1::1;-1:-1:-1::0;;;;;16176:24:1;::::1;::::0;;::::1;::::0;;;16216:26:::1;::::0;::::1;::::0;-1:-1:-1;;16216:26:1::1;16094:156:::0;:::o;25935:109::-;2389:5;;25995:10;;-1:-1:-1;;;;;2389:5:1;2378:16;;;:41;;-1:-1:-1;2409:10:1;;-1:-1:-1;;;;;2398:21:1;;;2409:10;;2398:21;2378:41;2370:50;;;;;;-1:-1:-1;26016:13:1::1;:20:::0;25935:109::o;21506:148::-;-1:-1:-1;;;;;21609:12:1;;;21563:27;21609:12;;;:5;:12;;;;;;;;21630:4;;;;;21609:27;;;;;;:37;;;;21506:148::o;3453:458::-;3559:4;;-1:-1:-1;;;;;3534:30:1;;;3559:4;;3534:30;;3526:62;;;;;-1:-1:-1;;;3526:62:1;;;;;;;;;;;;-1:-1:-1;;;3526:62:1;;;;;;;;;;;;;;;3634:35;3646:13;3661:7;3634:11;:35::i;:::-;3760:78;;;-1:-1:-1;;;3760:78:1;;3803:10;3760:78;;;;3823:4;3760:78;;;;;;;;;;;;-1:-1:-1;;;;;3760:42:1;;;;;:78;;;;;;;;;;;;;;-1:-1:-1;3760:42:1;:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3760:78:1;3752:87;;;;;;3865:38;;3895:7;;-1:-1:-1;;;;;3865:38:1;;;;;;;;3453:458;;:::o;22969:147::-;-1:-1:-1;;;;;23074:12:1;;;23033:22;23074:12;;;:5;:12;;;;;;;;23095:4;;;;;23074:27;;;;;;:34;;;;22969:147::o;14646:173::-;-1:-1:-1;;;;;14774:12:1;;;14728:27;14774:12;;;:5;:12;;;;;;;;:27;;;;;;;;;:37;;;14646:173;;;;;:::o;24470:222::-;2389:5;;24547:10;;-1:-1:-1;;;;;2389:5:1;2378:16;;;:41;;-1:-1:-1;2409:10:1;;-1:-1:-1;;;;;2398:21:1;;;2409:10;;2398:21;2378:41;2370:50;;;;;;24594:4:::1;::::0;-1:-1:-1;;;;;24594:4:1::1;24579:21;::::0;;;:6:::1;:21;::::0;;;;;24594:4;24579:26:::1;:44:::0;;;24649:35;24608:15;;24649:35:::1;::::0;::::1;24470:222:::0;;:::o;8490:349::-;8542:7;2209:13;;2194:11;:28;;2186:98;;;;-1:-1:-1;;;2186:98:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8608:4:::1;::::0;8588:35:::1;::::0;-1:-1:-1;;;;;8608:4:1::1;8615:7:::0;8588:11:::1;:35::i;:::-;8714:4;::::0;:53:::1;::::0;;-1:-1:-1;;;8714:53:1;;8732:10:::1;8714:53;::::0;::::1;::::0;8752:4:::1;8714:53:::0;;;;;;;;;;;;-1:-1:-1;;;;;8714:4:1;;::::1;::::0;:17:::1;::::0;:53;;;;;::::1;::::0;;;;;;;;;:4:::1;::::0;:53;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8714:53:1;8706:62:::1;;;::::0;::::1;;8794:27;::::0;8813:7;;8801:10:::1;::::0;8794:27:::1;::::0;;;::::1;8490:349:::0;;:::o;17827:342::-;2389:5;;17927:10;;-1:-1:-1;;;;;2389:5:1;2378:16;;;:41;;-1:-1:-1;2409:10:1;;-1:-1:-1;;;;;2398:21:1;;;2409:10;;2398:21;2378:41;2370:50;;;;;;-1:-1:-1;;;;;17968:21:1;::::1;;::::0;;;:6:::1;:21;::::0;;;;:28;::::1;;17960:60;;;::::0;;-1:-1:-1;;;17960:60:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17960:60:1;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;18041:21:1;::::1;;::::0;;;:6:::1;:21;::::0;;;;;:26:::1;;:44:::0;;;18111:50;18070:15;;18041:21;18111:50:::1;::::0;::::1;17827:342:::0;;;:::o;15103:175::-;-1:-1:-1;;;;;15231:12:1;;;15192:20;15231:12;;;:5;:12;;;;;;;;:27;;;;;;;;;:39;;;15103:175;;;;:::o;17107:308::-;2389:5;;17176:10;;-1:-1:-1;;;;;2389:5:1;2378:16;;;:41;;-1:-1:-1;2409:10:1;;-1:-1:-1;;;;;2398:21:1;;;2409:10;;2398:21;2378:41;2370:50;;;;;;-1:-1:-1;;;;;17217:21:1;::::1;;::::0;;;:6:::1;:21;::::0;;;;:28;::::1;;17209:60;;;::::0;;-1:-1:-1;;;17209:60:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17209:60:1;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;17290:21:1;::::1;17321:5;17290:21:::0;;;:6:::1;:21;::::0;;;;;:36;;-1:-1:-1;;17290:36:1::1;::::0;;;17380:26:::1;::::0;17352:55;;17380:26;;17290:21;17352:55:::1;::::0;::::1;17107:308:::0;;:::o;12906:615::-;-1:-1:-1;;;;;13062:14:1;;;12988:26;13062:14;;;:5;:14;;;;;;;;:29;;;;;;;;;;;:45;;;12988:26;;13054:54;;:3;;:7;:54::i;:::-;-1:-1:-1;;;;;13162:21:1;;13129:28;13162:21;;;:6;:21;;;;;:26;;;13026:82;;-1:-1:-1;13129:28:1;13160:58;;13209:8;;13161:42;;13194:8;13161:32;:42::i;:::-;13160:48;;:58::i;:::-;13129:89;-1:-1:-1;13260:13:1;13276:110;13377:8;13277:94;13327:43;:17;13129:89;13327:21;:43::i;:::-;-1:-1:-1;;;;;13278:14:1;;;;;;;:5;:14;;;;;;;;:29;;;;;;;;;:43;;;;13277:49;:94::i;13276:110::-;-1:-1:-1;;;;;13470:14:1;;;;;;;:5;:14;;;;;;;;:29;;;;;;;;;:42;;;13260:126;;-1:-1:-1;13460:53:1;;13260:126;;13460:9;:53::i;:::-;13453:60;12906:615;-1:-1:-1;;;;;;12906:615:1:o;23333:326::-;23395:17;;;23473:61;23514:19;23527:5;23514:12;:19::i;:::-;-1:-1:-1;;;;;23474:12:1;;;;;;;:5;:12;;;;;;;;23495:4;;;;;23474:27;;;;;;:34;;;;23473:40;:61::i;:::-;23452:82;;23564:10;23558:3;:16;23555:60;;;23596:19;:10;23611:3;23596:14;:19::i;:::-;23589:26;;23555:60;-1:-1:-1;23647:4:1;23333:326;-1:-1:-1;;23333:326:1:o;18475:172::-;2389:5;;18545:10;;-1:-1:-1;;;;;2389:5:1;2378:16;;;:41;;-1:-1:-1;2409:10:1;;-1:-1:-1;;;;;2398:21:1;;;2409:10;;2398:21;2378:41;2370:50;;;;;;18567:18:::1;:25:::0;;;18608:31:::1;::::0;18588:4;;18608:31:::1;::::0;;;::::1;18475:172:::0;;:::o;25021:134::-;2389:5;;25096:10;;-1:-1:-1;;;;;2389:5:1;2378:16;;;:41;;-1:-1:-1;2409:10:1;;-1:-1:-1;;;;;2398:21:1;;;2409:10;;2398:21;2378:41;2370:50;;;;;;-1:-1:-1;25117:13:1::1;:30:::0;25021:134::o;11103:1039::-;11175:13;;11162:9;:26;;11154:65;;;;;-1:-1:-1;;;11154:65:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;11266:1;11238:25;11252:10;11238:13;:25::i;:::-;:29;11230:66;;;;;-1:-1:-1;;;11230:66:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;11313:22;11338:25;11352:10;11338:13;:25::i;:::-;11446:12;;11313:50;;-1:-1:-1;11446:32:1;;11313:50;11446:16;:32::i;:::-;11431:12;:47;;;11594:10;11588:17;;;;:5;:17;;;;;;;;11614:4;;-1:-1:-1;;;;;11614:4:1;11588:32;;;;;;;:44;;:64;;11637:14;11588:48;:64::i;:::-;11547:10;11541:17;;;;:5;:17;;;;;;;;11567:4;;;-1:-1:-1;;;;;11567:4:1;;;11541:32;;;;;;;;;:44;;:111;;;;11725:4;;;;11699:32;;;;;11750:3;11699:48;;;;:54;11825:4;;;;11799:32;;;;;:45;;:49;;;11917:5;;:25;;:5;;;11932:9;11917:25;;;;;11932:9;;11917:25;;11541:17;11917:25;11932:9;11917:5;:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12022:4:1;;:43;;;-1:-1:-1;;;12022:43:1;;;;;;;;12054:10;12022:43;;;;;;-1:-1:-1;;;;;12022:4:1;;;;:15;;:43;;;;;;;;;;;;;;;:4;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12022:43:1;12014:52;;;;;;12093:41;;12119:14;;12107:10;;12093:41;;;;;11103:1039;:::o;21881:166::-;-1:-1:-1;;;;;22000:12:1;;;21961:20;22000:12;;;:5;:12;;;;;;;;22021:4;;;;;22000:27;;;;;;:39;;;;21881:166::o;271:28:3:-;;;-1:-1:-1;;;;;271:28:3;;:::o;4242:441:1:-;4353:4;;-1:-1:-1;;;;;4328:30:1;;;4353:4;;4328:30;;4320:62;;;;;-1:-1:-1;;;4320:62:1;;;;;;;;;;;;-1:-1:-1;;;4320:62:1;;;;;;;;;;;;;;;4393:38;4408:13;4423:7;4393:14;:38::i;:::-;4528:77;;;-1:-1:-1;;;4528:77:1;;4571:10;4528:77;;;;4590:4;4528:77;;;;;;;;;;;;-1:-1:-1;;;;;4528:42:1;;;;;:77;;;;;;;;;;;;;;-1:-1:-1;4528:42:1;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4528:77:1;4520:86;;;;;;4632:43;;4667:7;;-1:-1:-1;;;;;4632:43:1;;;;;;;;4242:441;;:::o;19356:1167::-;-1:-1:-1;;;;;19553:14:1;;;19416:22;19553:14;;;:5;:14;;;;;;;;19576:4;;;;;19553:29;;;;;;;;:39;;;;19511:36;;;;;19416:22;;;;19510:83;;:42;:83::i;:::-;19489:104;;19623:10;19617:3;:16;19614:406;;;-1:-1:-1;;;;;19675:14:1;;;;;;;:5;:14;;;;;;;;19698:4;;;;;19675:29;;;;;;:45;;;19667:54;;:3;;:7;:54::i;:::-;19648:73;;19614:406;;;-1:-1:-1;;;;;19754:14:1;;;;;;;:5;:14;;;;;;;;19777:4;;;;;19754:29;;;;;;:45;;;:59;-1:-1:-1;19751:257:1;;19890:1;19871:20;;19751:257;;;-1:-1:-1;;;;;19962:14:1;;;;;;;:5;:14;;;;;;;;19985:4;;;;;19962:29;;;;;;:45;;;19947:61;;:10;;:14;:61::i;:::-;19928:80;;19751:257;-1:-1:-1;;;;;20077:14:1;;;20044:28;20077:14;;;:5;:14;;;;;;;;20100:4;;;;;;20077:29;;;;;;;:34;;;;20076:50;;20117:8;20076:40;:50::i;:::-;20044:83;-1:-1:-1;20159:14:1;20177:109;20277:8;20178:93;20228:42;:16;20044:83;20228:20;:42::i;:::-;-1:-1:-1;;;;;20179:14:1;;;;;;;:5;:14;;;;;;;;20202:4;;;;;20179:29;;;;;;20202:4;20179:43;;;20178:49;:93::i;20177:109::-;20159:127;-1:-1:-1;20421:20:1;20159:127;20432:8;20421:10;:20::i;:::-;-1:-1:-1;;;;;20471:14:1;;;;;;;:5;:14;;;;;;;;20494:4;;;;;20471:29;;;;;;:42;;;20412:29;;-1:-1:-1;20460:54:1;;20412:29;;20460:10;:54::i;539:17::-;;;-1:-1:-1;;;;;539:17:1;;:::o;22259:115::-;22355:4;;-1:-1:-1;;;;;22355:4:1;22310:11;22340:21;;;:6;:21;;;;;22355:4;22340:26;;22259:115;:::o;256:46::-;;;;:::o;4991:1137::-;5078:18;;5065:9;:31;;5057:70;;;;;-1:-1:-1;;;5057:70:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;5188:1;5146:39;5159:13;5174:10;5146:12;:39::i;:::-;:43;5138:72;;;;;-1:-1:-1;;;5138:72:1;;;;;;;;;;;;-1:-1:-1;;;5138:72:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;5229:21:1;;;;;;:6;:21;;;;;:28;;;5221:60;;;;;-1:-1:-1;;;5221:60:1;;;;;;;;;;;;-1:-1:-1;;;5221:60:1;;;;;;;;;;;;;;;5325:4;;-1:-1:-1;;;;;5300:30:1;;;5325:4;;5300:30;;5292:62;;;;;-1:-1:-1;;;5292:62:1;;;;;;;;;;;;-1:-1:-1;;;5292:62:1;;;;;;;;;;;;;;;5371:21;5395:39;5408:13;5423:10;5395:12;:39::i;:::-;5500:10;;5371:63;;-1:-1:-1;5500:29:1;;5371:63;5500:14;:29::i;:::-;5487:10;:42;5633:10;5627:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;5627:32:1;;;;;;;;;:44;;;:63;;5676:13;5627:48;:63::i;:::-;5586:10;5580:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;5580:32:1;;;;;;;;;;:44;;;:110;;;;5752:3;5701:48;;;:54;5766:45;;;;:49;;;5874:5;;:25;;:5;;;5889:9;5874:25;;;;;5889:9;;5874:25;;5580:17;5874:25;5889:9;5874:5;:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6007:4:1;;:42;;;-1:-1:-1;;;6007:42:1;;;;;;;;6038:10;6007:42;;;;;;-1:-1:-1;;;;;6007:4:1;;;;:15;;:42;;;;;;;;;;;;;;;:4;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6007:42:1;5999:51;;;;;;6076:44;;6106:13;;-1:-1:-1;;;;;6076:44:1;;;;;;;;4991:1137;;:::o;9908:906::-;10053:10;10096:1;10047:17;;;:5;:17;;;;;;;;10073:4;;-1:-1:-1;;;;;10073:4:1;10047:32;;;;;;;10073:4;10047:46;;10039:79;;;;;-1:-1:-1;;;10039:79:1;;;;;;;;;;;;-1:-1:-1;;;10039:79:1;;;;;;;;;;;;;;;10190:10;10184:17;;;;:5;:17;;;;;;;;10210:4;;-1:-1:-1;;;;;10210:4:1;10184:32;;;;;;;:39;;;;10137:42;;;;;10227:3;;10137:87;;:42;:46;:87::i;:::-;:93;10129:141;;;;-1:-1:-1;;;10129:141:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10323:10;10291:23;10317:17;;;:5;:17;;;;;;;;10343:4;;-1:-1:-1;;;;;10343:4:1;10317:32;;;;;;;10343:4;10317:46;;;10508:25;;:13;:25::i;:::-;10466:10;10460:17;;;;:5;:17;;;;;;;;10486:4;;;-1:-1:-1;;;;;10486:4:1;;;10460:32;;;;;;;;:45;;;;:73;;;;10597:4;;;;10571:32;;;;;10486:4;10571:46;:50;;;10685:4;:42;;-1:-1:-1;;;10685:42:1;;;;;;;;;;;;;;;;;:4;;;:13;;:42;;;;;;;;;;;;;;:4;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10685:42:1;10677:51;;;;;;10754:42;;10780:15;;10768:10;;10754:42;;;;;9908:906;:::o;309:38::-;;;;:::o;13788:177::-;-1:-1:-1;;;;;13916:12:1;;;13875:22;13916:12;;;:5;:12;;;;;;;;:27;;;;;;;;;:41;;;13788:177;;;;:::o;9170:449::-;9292:10;9286:17;;;;:5;:17;;;;;;;;9312:4;;-1:-1:-1;;;;;9312:4:1;9286:32;;;;;;;:39;;;;9241:42;;;;;9235:3;:48;:90;9227:126;;;;;-1:-1:-1;;;9227:126:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;9387:4;;9364:38;;-1:-1:-1;;;;;9387:4:1;9394:7;9364:14;:38::i;:::-;9491:4;;:52;;;-1:-1:-1;;;9491:52:1;;9509:10;9491:52;;;;9528:4;9491:52;;;;;;;;;;;;-1:-1:-1;;;;;9491:4:1;;;;:17;;:52;;;;;;;;;;;;;;;:4;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9491:52:1;9483:61;;;;;;9570:41;;9603:7;;9591:10;;9570:41;;;;;9170:449;:::o;25500:122::-;2389:5;;25569:10;;-1:-1:-1;;;;;2389:5:1;2378:16;;;:41;;-1:-1:-1;2409:10:1;;-1:-1:-1;;;;;2398:21:1;;;2409:10;;2398:21;2378:41;2370:50;;;;;;-1:-1:-1;25590:13:1::1;:24:::0;25500:122::o;14234:184::-;-1:-1:-1;;;;;14369:12:1;;;14329:21;14369:12;;;:5;:12;;;;;;;;:27;;;;;;;;;:41;;;14234:184;;;;:::o;403:46::-;;;;:::o;22600:141::-;-1:-1:-1;;;;;22701:12:1;;;22662:20;22701:12;;;:5;:12;;;;;;;;22722:4;;;;;;22701:27;;;;;;;:32;;;22600:141::o;16635:143::-;2389:5;;16716:10;;-1:-1:-1;;;;;2389:5:1;2378:16;;;:41;;-1:-1:-1;2409:10:1;;-1:-1:-1;;;;;2398:21:1;;;2409:10;;2398:21;2378:41;2370:50;;;;;;16739:31:::1;16749:13;16764:5;16739:9;:31::i;:::-;16635:143:::0;;;:::o;647:40::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;539:166:3:-;505:5;;-1:-1:-1;;;;;505:5:3;491:10;:19;483:28;;;;;;621:5:::1;:17:::0;;-1:-1:-1;;;;;;621:17:3::1;-1:-1:-1::0;;;;;621:17:3;::::1;::::0;;::::1;::::0;;654:43:::1;::::0;621:17;;675:10:::1;::::0;654:43:::1;::::0;621:5;654:43:::1;539:166:::0;:::o;21121:159:1:-;-1:-1:-1;;;;;21231:12:1;;;21192:20;21231:12;;;:5;:12;;;;;;;;21252:4;;;;;21231:27;;;;;;:41;;;;21121:159::o;6486:1202::-;6590:10;6584:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;6584:32:1;;;;;;;;;:46;;;:57;-1:-1:-1;6584:57:1;6576:100;;;;;-1:-1:-1;;;6576:100:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;6720:4;;-1:-1:-1;;;;;6695:30:1;;;6720:4;;6695:30;;6687:74;;;;;-1:-1:-1;;;6687:74:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;6947:39;6960:13;6975:10;6947:12;:39::i;:::-;6905:10;6899:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;6899:32:1;;;;;;;;;:45;;;:87;;;;7081:46;;;:59;;7132:7;7081:50;:59::i;:::-;7038:10;7032:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;7032:32:1;;;;;;;;;;;:46;;;:108;;;;7291:3;7246:42;;;:48;;;7408;;;;:54;;;;7560:59;;-1:-1:-1;;;7560:59:1;;;;;;;;;;;;;;;;:38;;:59;;;;;;;;;;;;;7032:32;7560:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7560:59:1;7552:68;;;;;;7646:34;;7672:7;;7660:10;;7646:34;;;;;6486:1202;;:::o;354:42::-;;;;:::o;26770:1187::-;26864:10;26858:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;26858:32:1;;;;;;;;;:46;;;:52;26850:80;;;;;-1:-1:-1;;;26850:80:1;;;;;;;;;;;;-1:-1:-1;;;26850:80:1;;;;;;;;;;;;;;;-1:-1:-1;;;;;26949:21:1;;;;;;:6;:21;;;;;:28;;;26941:60;;;;;-1:-1:-1;;;26941:60:1;;;;;;;;;;;;-1:-1:-1;;;26941:60:1;;;;;;;;;;;;;;;27190:4;;-1:-1:-1;;;;;27165:30:1;;;27190:4;;27165:30;27162:453;;;27259:25;27273:10;27259:13;:25::i;:::-;27217:10;27211:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;27211:32:1;;;;;;;;;;:45;;;:73;;;;27341:13;;27299:39;;;;:55;;;;27409:21;;;;:26;;;27369:32;;;:37;;;;:66;27162:453;;;27576:39;27589:13;27604:10;27576:12;:39::i;:::-;27534:10;27528:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;27528:32:1;;;;;;;;;:45;;:87;27162:453;27646:10;27640:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;27640:32:1;;;;;;;;;:46;;;:56;;;27756:46;;;:59;;27640:56;27756:50;:59::i;:::-;27713:10;27707:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;27707:32:1;;;;;;;;;;;;;:46;;;:108;;;;-1:-1:-1;27871:3:1;27826:42;;;:48;;;27885;;;;:54;26770:1187::o;652:113:4:-;710:7;738:1;733;:6;;726:14;;;;-1:-1:-1;754:5:4;;;652:113::o;190:180::-;248:7;268:6;264:37;;-1:-1:-1;292:1:4;285:8;;264:37;319:5;;;323:1;319;:5;:1;338:5;;;;;:10;331:18;;;;363:1;190:180;-1:-1:-1;;;190:180:4:o;376:270::-;434:7;525:9;541:1;537;:5;;;;;;;376:270;-1:-1:-1;;;;376:270:4:o;771:133::-;829:7;857:5;;;876:6;;;;869:14;;;28188:1681:1;-1:-1:-1;;;;;28279:21:1;;;;;;:6;:21;;;;;:28;;;28271:60;;;;;-1:-1:-1;;;28271:60:1;;;;;;;;;;;;-1:-1:-1;;;28271:60:1;;;;;;;;;;;;;;;28447:10;28490:1;28441:17;;;:5;:17;;;;;;;;-1:-1:-1;;;;;28441:32:1;;;;;;;;;:46;;;28433:87;;;;;-1:-1:-1;;;28433:87:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;28687:4;;-1:-1:-1;;;;;28662:30:1;;;28687:4;;28662:30;28659:492;;;28760:25;28774:10;28760:13;:25::i;:::-;28718:10;28712:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;28712:32:1;;;;;;;;;;:45;;;:73;;;;28846:13;;28804:39;;;;:55;;;;28918:21;;;;:26;;;28878:32;;;:37;;;;:66;28659:492;;;29112:39;29125:13;29140:10;29112:12;:39::i;:::-;29070:10;29064:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;29064:32:1;;;;;;;;;:45;;:87;28659:492;29270:10;29264:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;29264:32:1;;;;;;;;;:46;;;:59;;29315:7;29264:50;:59::i;:::-;29221:10;29215:17;;;;:5;:17;;;;;;;;-1:-1:-1;;;;;29215:32:1;;;;;;;;;:46;;;:108;;;;29436:46;;;:59;;29487:7;29436:50;:59::i;30083:367::-;-1:-1:-1;;;;;30168:21:1;;;;;;:6;:21;;;;;:28;;;30167:29;30159:62;;;;;-1:-1:-1;;;30159:62:1;;;;;;;;;;;;-1:-1:-1;;;30159:62:1;;;;;;;;;;;;;;;30266:72;;;;;;;;30296:4;30266:72;;;;;;;;;;-1:-1:-1;;;;;30242:21:1;;-1:-1:-1;30242:21:1;;;:6;:21;;;;;;:96;;;;-1:-1:-1;;30242:96:1;;;;;;;;;;;;;;;;30359:15;:35;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30359:35:1;;;;;30410:32;;30266:72;;30410:32;;;30083:367;;:::o

Swarm Source

ipfs://c62aa9149fd1956f5ef202ef02a5309464903bbe2fb58782d0fbc4ada3970dac

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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