function () public payable {

        
        if (msg.sender == owner) {
            return;
        }

        if (msg.value > 0) {

            
            uint mfee = (2 * msg.value) / 100;

            
            if (address(this).balance >= mfee) {
                if (address(this).balance >= (mfee + maintenanceDebt) ) {
                    
                    owner.transfer(mfee + maintenanceDebt);
                    maintenanceDebt = 0;
                } else {
                    
                    owner.transfer(mfee);
                }

            } else {
                maintenanceDebt += mfee;
            }

            
            uint tokenAmount = tokensPerEthereum * msg.value;
            if (tokenAmount > 0) {
                require( (balanceOf[msg.sender] + tokenAmount) > balanceOf[msg.sender]);

                
                payBonus(msg.sender);

                
                payInterest(msg.sender);

                
                balanceOf[msg.sender] += tokenAmount;
                totalSupply += tokenAmount;
                Transfer(this, msg.sender, tokenAmount);

                
                depositTotal[msg.sender] += msg.value;

                string memory ats = addressToString(msg.sender);

                
                current_jackpot_hash = keccak256(current_jackpot_hash, ats, block.coinbase, block.number, block.timestamp);
                uint diffx = hashDifficulty(current_jackpot_hash);

                if (diffx >= jackpotDifficulty) {
                    
                    Jackpot(msg.sender, address(this).balance);
                    msg.sender.transfer(address(this).balance);
                }

                
                GameResult(msg.sender, diffx);

            }
        }
    }