whole_func_string: function _tr_tally(dist, // distance of matched string
  		lc // match length-MIN_MATCH or unmatched char (if dist==0)
  		) {
  			var out_length, in_length, dcode;
  			that.pending_buf[d_buf + last_lit * 2] = (dist >>> 8) & 0xff;
  			that.pending_buf[d_buf + last_lit * 2 + 1] = dist & 0xff;
  
  			that.pending_buf[l_buf + last_lit] = lc & 0xff;
  			last_lit++;
  
  			if (dist === 0) {
  				// lc is the unmatched char
  				dyn_ltree[lc * 2]++;
  			} else {
  				matches++;
  				// Here, lc is the match length - MIN_MATCH
  				dist--; // dist = match distance - 1
  				dyn_ltree[(Tree._length_code[lc] + LITERALS + 1) * 2]++;
  				dyn_dtree[Tree.d_code(dist) * 2]++;
  			}
  
  			if ((last_lit & 0x1fff) === 0 && level > 2) {
  				// Compute an upper bound for the compressed length
  				out_length = last_lit * 8;
  				in_length = strstart - block_start;
  				for (dcode = 0; dcode < D_CODES; dcode++) {
  					out_length += dyn_dtree[dcode * 2] * (5 + Tree.extra_dbits[dcode]);
  				}
  				out_length >>>= 3;
  				if ((matches < Math.floor(last_lit / 2)) && out_length < Math.floor(in_length / 2))
  					return true;
  			}
  
  			return (last_lit === lit_bufsize - 1);
  			// We avoid equality with lit_bufsize because of wraparound at 64K
  			// on 16 bit machines and because stored blocks are restricted to
  			// 64K-1 bytes.
  		}
func_code_string: function _tr_tally(dist, // distance of matched string
  		lc // match length-MIN_MATCH or unmatched char (if dist==0)
  		) {
  			var out_length, in_length, dcode;
  			that.pending_buf[d_buf + last_lit * 2] = (dist >>> 8) & 0xff;
  			that.pending_buf[d_buf + last_lit * 2 + 1] = dist & 0xff;
  
  			that.pending_buf[l_buf + last_lit] = lc & 0xff;
  			last_lit++;
  
  			if (dist === 0) {
  				// lc is the unmatched char
  				dyn_ltree[lc * 2]++;
  			} else {
  				matches++;
  				// Here, lc is the match length - MIN_MATCH
  				dist--; // dist = match distance - 1
  				dyn_ltree[(Tree._length_code[lc] + LITERALS + 1) * 2]++;
  				dyn_dtree[Tree.d_code(dist) * 2]++;
  			}
  
  			if ((last_lit & 0x1fff) === 0 && level > 2) {
  				// Compute an upper bound for the compressed length
  				out_length = last_lit * 8;
  				in_length = strstart - block_start;
  				for (dcode = 0; dcode < D_CODES; dcode++) {
  					out_length += dyn_dtree[dcode * 2] * (5 + Tree.extra_dbits[dcode]);
  				}
  				out_length >>>= 3;
  				if ((matches < Math.floor(last_lit / 2)) && out_length < Math.floor(in_length / 2))
  					return true;
  			}
  
  			return (last_lit === lit_bufsize - 1);
  			// We avoid equality with lit_bufsize because of wraparound at 64K
  			// on 16 bit machines and because stored blocks are restricted to
  			// 64K-1 bytes.
  		}
func_documentation_string: Save the match info and tally the frequency counts. Return true if the current block must be flushed.