function readSymbol(tableGroup, tableIdx, s) {
    let /** @type{number} */ offset = tableGroup[tableIdx];
    let /** @type{number} */ val = (s.accumulator32 >>> s.bitOffset);
    offset += val & 0xFF;
    let /** @type{number} */ bits = tableGroup[offset] >> 16;
    let /** @type{number} */ sym = tableGroup[offset] & 0xFFFF;
    if (bits <= 8) {
      s.bitOffset += bits;
      return sym;
    }
    offset += sym;
    let /** @type{number} */ mask = (1 << bits) - 1;
    offset += (val & mask) >>> 8;
    s.bitOffset += ((tableGroup[offset] >> 16) + 8);
    return tableGroup[offset] & 0xFFFF;
  }
@param {!Int32Array} tableGroup
@param {number} tableIdx
@param {!State} s
@return {number}