public int read(byte[] paramArrayOfByte, int paramInt1, int paramInt2) throws IOException {
    if (isClosed) {
      throw new IOException("stream closed");
    }
    if ((paramInt1 | paramInt2 | paramInt1 + paramInt2 | paramArrayOfByte.length - (paramInt1 + paramInt2)) < 0) {
      throw new IndexOutOfBoundsException();
    }
    if (paramInt2 == 0) {
      return 0;
    }
    if (uncompressed_offset == uncompressed_size)
      fill_buffer();
    if (uncompressed_offset == uncompressed_size) {
      return -1;
    }
    int i = Math.min(paramInt2, uncompressed_size - uncompressed_offset);
    System.arraycopy(uncompressed_buffer, uncompressed_offset, paramArrayOfByte, paramInt1, i);
    uncompressed_offset += i;
    return i;
  }