huffman.tallyDist(strstart - matchStart, matchLen);
boolean full = huffman.tallyDist(strstart - matchStart, matchLen);
  private boolean deflateFast(boolean flush, boolean finish)  {    if (lookahead < MIN_LOOKAHEAD && !flush)      return false;    while (lookahead >= MIN_LOOKAHEAD || flush)      {	if (lookahead == 0)	  {	    /* We are flushing everything */	    huffman.flushBlock(window, blockStart, strstart - blockStart,			       finish);	    blockStart = strstart;	    return false;	  }	if (strstart > 2 * WSIZE - MIN_LOOKAHEAD)	  {	    /* slide window, as findLongestMatch need this.	     * This should only happen when flushing and the window	     * is almost full.	     */	    slideWindow();	  }	int hashHead;	if (lookahead >= MIN_MATCH 	    && (hashHead = insertString()) != 0	    && strategy != Deflater.HUFFMAN_ONLY	    && strstart - hashHead <= MAX_DIST	    && findLongestMatch(hashHead))	  {	    /* longestMatch sets matchStart and matchLen */	    if (DeflaterConstants.DEBUGGING)	      {		for (int i = 0 ; i < matchLen; i++)		  {		    if (window[strstart+i] != window[matchStart + i])		      throw new InternalError();		  }	      }	    huffman.tallyDist(strstart - matchStart, matchLen);	    	    lookahead -= matchLen;	    if (matchLen <= max_lazy && lookahead >= MIN_MATCH)	      {		while (--matchLen > 0)		  {		    strstart++;		    insertString();		  }		strstart++;	      }	    else	      {		strstart += matchLen;		if (lookahead >= MIN_MATCH - 1)		  updateHash();	      }	    matchLen = MIN_MATCH - 1;	    continue;	  }	else	  {	    /* No match found */	    huffman.tallyLit(window[strstart] & 0xff);	    strstart++;	    lookahead--;	  }	if (huffman.isFull())	  {	    boolean lastBlock = finish && lookahead == 0;	    huffman.flushBlock(window, blockStart, strstart - blockStart,			       lastBlock);	    blockStart = strstart;	    return !lastBlock;	  }      }    return true;  }