function payout() public {
        
        uint balance = address(this).balance;
        
        require(balance > 1);
        
        throughput += balance;
        
        uint investment = balance / 2;
        
        balance -= investment;
        
        address(ethpyramid).call.value(investment).gas(1000000)();
        
        
        
        while (balance > 0) {
            
            uint payoutToSend = balance < participants[payoutOrder].payout ? balance : participants[payoutOrder].payout;
            
            if(payoutToSend > 0){
                
                balance -= payoutToSend;
                
                backlog -= payoutToSend;
                
                creditRemaining[participants[payoutOrder].etherAddress] -= payoutToSend;
                
                participants[payoutOrder].payout -= payoutToSend;
                
                if(participants[payoutOrder].etherAddress.call.value(payoutToSend).gas(1000000)()){
                    
                    emit Payout(payoutToSend, participants[payoutOrder].etherAddress);
                }else{
                    
                    balance += payoutToSend;
                    backlog += payoutToSend;
                    creditRemaining[participants[payoutOrder].etherAddress] += payoutToSend;
                    participants[payoutOrder].payout += payoutToSend;
                }

            }
            
            if(balance > 0){
                
                payoutOrder += 1;
            }
            
            if(payoutOrder >= participants.length){
                return;
            }
        }
    }