#include <zstd.h>
+#define MIN(x, y) ((x) < (y) ? (x) : (y))
+
static char const* g_zstdcli = NULL;
void method_set_zstdcli(char const* zstdcli) {
typedef struct {
method_state_t base;
data_buffers_t inputs; /**< The input buffer for each file. */
+ data_buffer_t dictionary; /**< The dictionary. */
data_buffer_t compressed; /**< The compressed data buffer. */
data_buffer_t decompressed; /**< The decompressed data buffer. */
} buffer_state_t;
return NULL;
state->base.data = data;
state->inputs = data_buffers_get(data);
+ state->dictionary = data_buffer_get_dict(data);
size_t const max_size = buffers_max_size(state->inputs);
state->compressed = data_buffer_create(ZSTD_compressBound(max_size));
state->decompressed = data_buffer_create(max_size);
free(state);
}
-static int buffer_state_bad(buffer_state_t const* state) {
+static int buffer_state_bad(
+ buffer_state_t const* state,
+ config_t const* config) {
if (state == NULL) {
fprintf(stderr, "buffer_state_t is NULL\n");
return 1;
fprintf(stderr, "buffer state allocation failure\n");
return 1;
}
+ if (config->use_dictionary && state->dictionary.data == NULL) {
+ fprintf(stderr, "dictionary loading failed\n");
+ return 1;
+ }
return 0;
}
static result_t simple_compress(method_state_t* base, config_t const* config) {
buffer_state_t* state = container_of(base, buffer_state_t, base);
- if (buffer_state_bad(state))
+ if (buffer_state_bad(state, config))
return result_error(result_error_system_error);
/* Keep the tests short by skipping directories, since behavior shouldn't
config_t const* config) {
buffer_state_t* state = container_of(base, buffer_state_t, base);
- if (buffer_state_bad(state))
+ if (buffer_state_bad(state, config))
return result_error(result_error_system_error);
- if (config->use_dictionary || config->no_pledged_src_size)
+ if (config->no_pledged_src_size)
return result_error(result_error_skip);
if (base->data->type != data_type_dir)
return result_error(result_error_skip);
ZSTD_CCtx* cctx = ZSTD_createCCtx();
- if (cctx == NULL) {
- fprintf(stderr, "ZSTD_createCCtx() failed\n");
+ ZSTD_DCtx* dctx = ZSTD_createDCtx();
+ if (cctx == NULL || dctx == NULL) {
+ fprintf(stderr, "context creation failed\n");
return result_error(result_error_system_error);
}
for (size_t i = 0; i < state->inputs.size; ++i) {
data_buffer_t const input = state->inputs.buffers[i];
- state->compressed.size = ZSTD_compressCCtx(
- cctx,
- state->compressed.data,
- state->compressed.capacity,
- input.data,
- input.size,
- level);
+ if (config->use_dictionary)
+ state->compressed.size = ZSTD_compress_usingDict(
+ cctx,
+ state->compressed.data,
+ state->compressed.capacity,
+ input.data,
+ input.size,
+ state->dictionary.data,
+ state->dictionary.size,
+ level);
+ else
+ state->compressed.size = ZSTD_compressCCtx(
+ cctx,
+ state->compressed.data,
+ state->compressed.capacity,
+ input.data,
+ input.size,
+ level);
if (ZSTD_isError(state->compressed.size)) {
result = result_error(result_error_compression_error);
goto out;
}
- state->decompressed.size = ZSTD_decompress(
- state->decompressed.data,
- state->decompressed.capacity,
- state->compressed.data,
- state->compressed.size);
+ if (config->use_dictionary)
+ state->decompressed.size = ZSTD_decompress_usingDict(
+ dctx,
+ state->decompressed.data,
+ state->decompressed.capacity,
+ state->compressed.data,
+ state->compressed.size,
+ state->dictionary.data,
+ state->dictionary.size);
+ else
+ state->decompressed.size = ZSTD_decompressDCtx(
+ dctx,
+ state->decompressed.data,
+ state->decompressed.capacity,
+ state->compressed.data,
+ state->compressed.size);
if (ZSTD_isError(state->decompressed.size)) {
result = result_error(result_error_decompression_error);
goto out;
result = result_data(data);
out:
ZSTD_freeCCtx(cctx);
+ ZSTD_freeDCtx(dctx);
return result;
}
free(state);
}
-static result_t cli_compress(
- method_state_t* state,
- config_t const* config) {
+static result_t cli_compress(method_state_t* state, config_t const* config) {
if (config->cli_args == NULL)
return result_error(result_error_skip);
return result_data(data);
}
+static int advanced_config(
+ ZSTD_CCtx* cctx,
+ buffer_state_t* state,
+ config_t const* config) {
+ for (size_t p = 0; p < config->param_values.size; ++p) {
+ param_value_t const pv = config->param_values.data[p];
+ if (ZSTD_isError(ZSTD_CCtx_setParameter(cctx, pv.param, pv.value))) {
+ return 1;
+ }
+ }
+ if (config->use_dictionary) {
+ if (ZSTD_isError(ZSTD_CCtx_loadDictionary(
+ cctx, state->dictionary.data, state->dictionary.size))) {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static result_t advanced_one_pass_compress_output_adjustment(
+ method_state_t* base,
+ config_t const* config,
+ size_t const subtract) {
+ buffer_state_t* state = container_of(base, buffer_state_t, base);
+
+ if (buffer_state_bad(state, config))
+ return result_error(result_error_system_error);
+
+ ZSTD_CCtx* cctx = ZSTD_createCCtx();
+ result_t result;
+
+ if (!cctx || advanced_config(cctx, state, config)) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+
+ result_data_t data = {.total_size = 0};
+ for (size_t i = 0; i < state->inputs.size; ++i) {
+ data_buffer_t const input = state->inputs.buffers[i];
+
+ if (!config->no_pledged_src_size) {
+ if (ZSTD_isError(ZSTD_CCtx_setPledgedSrcSize(cctx, input.size))) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+ }
+ size_t const size = ZSTD_compress2(
+ cctx,
+ state->compressed.data,
+ ZSTD_compressBound(input.size) - subtract,
+ input.data,
+ input.size);
+ if (ZSTD_isError(size)) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+ data.total_size += size;
+ }
+
+ result = result_data(data);
+out:
+ ZSTD_freeCCtx(cctx);
+ return result;
+}
+
+static result_t advanced_one_pass_compress(
+ method_state_t* base,
+ config_t const* config) {
+ return advanced_one_pass_compress_output_adjustment(base, config, 0);
+}
+
+static result_t advanced_one_pass_compress_small_output(
+ method_state_t* base,
+ config_t const* config) {
+ return advanced_one_pass_compress_output_adjustment(base, config, 1);
+}
+
+static result_t advanced_streaming_compress(
+ method_state_t* base,
+ config_t const* config) {
+ buffer_state_t* state = container_of(base, buffer_state_t, base);
+
+ if (buffer_state_bad(state, config))
+ return result_error(result_error_system_error);
+
+ ZSTD_CCtx* cctx = ZSTD_createCCtx();
+ result_t result;
+
+ if (!cctx || advanced_config(cctx, state, config)) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+
+ result_data_t data = {.total_size = 0};
+ for (size_t i = 0; i < state->inputs.size; ++i) {
+ data_buffer_t input = state->inputs.buffers[i];
+
+ if (!config->no_pledged_src_size) {
+ if (ZSTD_isError(ZSTD_CCtx_setPledgedSrcSize(cctx, input.size))) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+ }
+
+ while (input.size > 0) {
+ ZSTD_inBuffer in = {input.data, MIN(input.size, 4096)};
+ input.data += in.size;
+ input.size -= in.size;
+ ZSTD_EndDirective const op =
+ input.size > 0 ? ZSTD_e_continue : ZSTD_e_end;
+ size_t ret = 0;
+ while (in.pos < in.size || (op == ZSTD_e_end && ret != 0)) {
+ ZSTD_outBuffer out = {state->compressed.data,
+ MIN(state->compressed.capacity, 1024)};
+ ret = ZSTD_compressStream2(cctx, &out, &in, op);
+ if (ZSTD_isError(ret)) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+ data.total_size += out.pos;
+ }
+ }
+ }
+
+ result = result_data(data);
+out:
+ ZSTD_freeCCtx(cctx);
+ return result;
+}
+
+static result_t old_streaming_compress(
+ method_state_t* base,
+ config_t const* config) {
+ buffer_state_t* state = container_of(base, buffer_state_t, base);
+
+ if (buffer_state_bad(state, config))
+ return result_error(result_error_system_error);
+
+ int const level = config_get_level(config);
+ if (level == CONFIG_NO_LEVEL)
+ return result_error(result_error_skip);
+
+ ZSTD_CStream* zcs = ZSTD_createCStream();
+ result_t result;
+ if (zcs == NULL) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+ size_t zret;
+ if (config->use_dictionary) {
+ zret = ZSTD_initCStream_usingDict(
+ zcs, state->dictionary.data, state->dictionary.size, level);
+ } else {
+ zret = ZSTD_initCStream(zcs, level);
+ }
+ if (ZSTD_isError(zret)) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+
+ result_data_t data = {.total_size = 0};
+ for (size_t i = 0; i < state->inputs.size; ++i) {
+ data_buffer_t input = state->inputs.buffers[i];
+ zret = ZSTD_resetCStream(
+ zcs,
+ config->no_pledged_src_size ? ZSTD_CONTENTSIZE_UNKNOWN
+ : input.size);
+ if (ZSTD_isError(zret)) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+
+ while (input.size > 0) {
+ ZSTD_inBuffer in = {input.data, MIN(input.size, 4096)};
+ input.data += in.size;
+ input.size -= in.size;
+ ZSTD_EndDirective const op =
+ input.size > 0 ? ZSTD_e_continue : ZSTD_e_end;
+ zret = 0;
+ while (in.pos < in.size || (op == ZSTD_e_end && zret != 0)) {
+ ZSTD_outBuffer out = {state->compressed.data,
+ MIN(state->compressed.capacity, 1024)};
+ if (op == ZSTD_e_continue || in.pos < in.size)
+ zret = ZSTD_compressStream(zcs, &out, &in);
+ else
+ zret = ZSTD_endStream(zcs, &out);
+ if (ZSTD_isError(zret)) {
+ result = result_error(result_error_compression_error);
+ goto out;
+ }
+ data.total_size += out.pos;
+ }
+ }
+ }
+
+ result = result_data(data);
+out:
+ ZSTD_freeCStream(zcs);
+ return result;
+}
+
method_t const simple = {
- .name = "ZSTD_compress",
+ .name = "compress simple",
.create = buffer_state_create,
.compress = simple_compress,
.destroy = buffer_state_destroy,
};
method_t const compress_cctx = {
- .name = "ZSTD_compressCCtx",
+ .name = "compress cctx",
.create = buffer_state_create,
.compress = compress_cctx_compress,
.destroy = buffer_state_destroy,
};
+method_t const advanced_one_pass = {
+ .name = "advanced one pass",
+ .create = buffer_state_create,
+ .compress = advanced_one_pass_compress,
+ .destroy = buffer_state_destroy,
+};
+
+method_t const advanced_one_pass_small_out = {
+ .name = "advanced one pass small out",
+ .create = buffer_state_create,
+ .compress = advanced_one_pass_compress,
+ .destroy = buffer_state_destroy,
+};
+
+method_t const advanced_streaming = {
+ .name = "advanced streaming",
+ .create = buffer_state_create,
+ .compress = advanced_streaming_compress,
+ .destroy = buffer_state_destroy,
+};
+
+method_t const old_streaming = {
+ .name = "old streaming",
+ .create = buffer_state_create,
+ .compress = old_streaming_compress,
+ .destroy = buffer_state_destroy,
+};
+
method_t const cli = {
.name = "zstdcli",
.create = method_state_create,
&simple,
&compress_cctx,
&cli,
+ &advanced_one_pass,
+ &advanced_one_pass_small_out,
+ &advanced_streaming,
+ &old_streaming,
NULL,
};
-Data, Config, Method, Total compressed size
-This line is intentionally added to see how the nightly job reports failures
-silesia.tar, level -5, ZSTD_compress, 7160438
-silesia.tar, level -3, ZSTD_compress, 6789024
-silesia.tar, level -1, ZSTD_compress, 6195462
-silesia.tar, level 0, ZSTD_compress, 4875071
-silesia.tar, level 1, ZSTD_compress, 5339697
-silesia.tar, level 3, ZSTD_compress, 4875071
-silesia.tar, level 4, ZSTD_compress, 4813104
-silesia.tar, level 5, ZSTD_compress, 4726961
-silesia.tar, level 6, ZSTD_compress, 4654401
-silesia.tar, level 7, ZSTD_compress, 4591933
-silesia.tar, level 9, ZSTD_compress, 4554098
-silesia.tar, level 13, ZSTD_compress, 4503496
-silesia.tar, level 16, ZSTD_compress, 4387233
-silesia.tar, level 19, ZSTD_compress, 4283123
-silesia, level -5, ZSTD_compressCCtx, 7152294
-silesia, level -3, ZSTD_compressCCtx, 6789969
-silesia, level -1, ZSTD_compressCCtx, 6191548
-silesia, level 0, ZSTD_compressCCtx, 4862377
-silesia, level 1, ZSTD_compressCCtx, 5318036
-silesia, level 3, ZSTD_compressCCtx, 4862377
-silesia, level 4, ZSTD_compressCCtx, 4800629
-silesia, level 5, ZSTD_compressCCtx, 4715005
-silesia, level 6, ZSTD_compressCCtx, 4644055
-silesia, level 7, ZSTD_compressCCtx, 4581559
-silesia, level 9, ZSTD_compressCCtx, 4543862
-silesia, level 13, ZSTD_compressCCtx, 4493931
-silesia, level 16, ZSTD_compressCCtx, 4381885
-silesia, level 19, ZSTD_compressCCtx, 4296899
-github, level -5, ZSTD_compressCCtx, 232744
-github, level -3, ZSTD_compressCCtx, 220611
-github, level -1, ZSTD_compressCCtx, 176575
-github, level 0, ZSTD_compressCCtx, 136397
-github, level 1, ZSTD_compressCCtx, 143457
-github, level 3, ZSTD_compressCCtx, 136397
-github, level 4, ZSTD_compressCCtx, 136144
-github, level 5, ZSTD_compressCCtx, 135106
-github, level 6, ZSTD_compressCCtx, 135108
-github, level 7, ZSTD_compressCCtx, 135108
-github, level 9, ZSTD_compressCCtx, 135108
-github, level 13, ZSTD_compressCCtx, 133741
-github, level 16, ZSTD_compressCCtx, 133741
-github, level 19, ZSTD_compressCCtx, 133717
-silesia, level -5, zstdcli, 7152342
-silesia, level -3, zstdcli, 6790021
-silesia, level -1, zstdcli, 6191597
-silesia, level 0, zstdcli, 4862425
-silesia, level 1, zstdcli, 5318084
-silesia, level 3, zstdcli, 4862425
-silesia, level 4, zstdcli, 4800677
-silesia, level 5, zstdcli, 4715053
-silesia, level 6, zstdcli, 4644103
-silesia, level 7, zstdcli, 4581607
-silesia, level 9, zstdcli, 4543910
-silesia, level 13, zstdcli, 4493979
-silesia, level 16, zstdcli, 4381933
-silesia, level 19, zstdcli, 4296947
-silesia.tar, level -5, zstdcli, 7159586
-silesia.tar, level -3, zstdcli, 6791018
-silesia.tar, level -1, zstdcli, 6196283
-silesia.tar, level 0, zstdcli, 4876730
-silesia.tar, level 1, zstdcli, 5340312
-silesia.tar, level 3, zstdcli, 4876730
-silesia.tar, level 4, zstdcli, 4817723
-silesia.tar, level 5, zstdcli, 4730389
-silesia.tar, level 6, zstdcli, 4655708
-silesia.tar, level 7, zstdcli, 4593407
-silesia.tar, level 9, zstdcli, 4556135
-silesia.tar, level 13, zstdcli, 4503500
-silesia.tar, level 16, zstdcli, 4387237
-silesia.tar, level 19, zstdcli, 4283127
-silesia.tar, no source size, zstdcli, 4876726
-github, level -5, zstdcli, 234744
-github, level -5 with dict, zstdcli, 47528
-github, level -3, zstdcli, 222611
-github, level -3 with dict, zstdcli, 46394
-github, level -1, zstdcli, 178575
-github, level -1 with dict, zstdcli, 43401
-github, level 0, zstdcli, 138397
-github, level 0 with dict, zstdcli, 40316
-github, level 1, zstdcli, 145457
-github, level 1 with dict, zstdcli, 43242
-github, level 3, zstdcli, 138397
-github, level 3 with dict, zstdcli, 40316
-github, level 4, zstdcli, 138144
-github, level 4 with dict, zstdcli, 40292
-github, level 5, zstdcli, 137106
-github, level 5 with dict, zstdcli, 40938
-github, level 6, zstdcli, 137108
-github, level 6 with dict, zstdcli, 40632
-github, level 7, zstdcli, 137108
-github, level 7 with dict, zstdcli, 40766
-github, level 9, zstdcli, 137108
-github, level 9 with dict, zstdcli, 41326
-github, level 13, zstdcli, 135741
-github, level 13 with dict, zstdcli, 41670
-github, level 16, zstdcli, 135741
-github, level 16 with dict, zstdcli, 39940
-github, level 19, zstdcli, 135717
-github, level 19 with dict, zstdcli, 39576
+Data, Config, Method, Total compressed size
+silesia.tar, level -5, compress simple, 7160438
+silesia.tar, level -3, compress simple, 6789024
+silesia.tar, level -1, compress simple, 6195462
+silesia.tar, level 0, compress simple, 4875071
+silesia.tar, level 1, compress simple, 5339697
+silesia.tar, level 3, compress simple, 4875071
+silesia.tar, level 4, compress simple, 4813104
+silesia.tar, level 5, compress simple, 4726961
+silesia.tar, level 6, compress simple, 4654401
+silesia.tar, level 7, compress simple, 4591933
+silesia.tar, level 9, compress simple, 4554098
+silesia.tar, level 13, compress simple, 4503496
+silesia.tar, level 16, compress simple, 4387233
+silesia.tar, level 19, compress simple, 4283123
+silesia, level -5, compress cctx, 7152294
+silesia, level -3, compress cctx, 6789969
+silesia, level -1, compress cctx, 6191548
+silesia, level 0, compress cctx, 4862377
+silesia, level 1, compress cctx, 5318036
+silesia, level 3, compress cctx, 4862377
+silesia, level 4, compress cctx, 4800629
+silesia, level 5, compress cctx, 4715005
+silesia, level 6, compress cctx, 4644055
+silesia, level 7, compress cctx, 4581559
+silesia, level 9, compress cctx, 4543862
+silesia, level 13, compress cctx, 4493931
+silesia, level 16, compress cctx, 4381885
+silesia, level 19, compress cctx, 4296899
+github, level -5, compress cctx, 232744
+github, level -5 with dict, compress cctx, 45704
+github, level -3, compress cctx, 220611
+github, level -3 with dict, compress cctx, 44510
+github, level -1, compress cctx, 176575
+github, level -1 with dict, compress cctx, 41586
+github, level 0, compress cctx, 136397
+github, level 0 with dict, compress cctx, 38700
+github, level 1, compress cctx, 143457
+github, level 1 with dict, compress cctx, 41538
+github, level 3, compress cctx, 136397
+github, level 3 with dict, compress cctx, 38700
+github, level 4, compress cctx, 136144
+github, level 4 with dict, compress cctx, 38639
+github, level 5, compress cctx, 135106
+github, level 5 with dict, compress cctx, 38934
+github, level 6, compress cctx, 135108
+github, level 6 with dict, compress cctx, 38628
+github, level 7, compress cctx, 135108
+github, level 7 with dict, compress cctx, 38741
+github, level 9, compress cctx, 135108
+github, level 9 with dict, compress cctx, 39335
+github, level 13, compress cctx, 133741
+github, level 13 with dict, compress cctx, 39670
+github, level 16, compress cctx, 133741
+github, level 16 with dict, compress cctx, 37928
+github, level 19, compress cctx, 133717
+github, level 19 with dict, compress cctx, 37567
+silesia, level -5, zstdcli, 7152342
+silesia, level -3, zstdcli, 6790021
+silesia, level -1, zstdcli, 6191597
+silesia, level 0, zstdcli, 4862425
+silesia, level 1, zstdcli, 5318084
+silesia, level 3, zstdcli, 4862425
+silesia, level 4, zstdcli, 4800677
+silesia, level 5, zstdcli, 4715053
+silesia, level 6, zstdcli, 4644103
+silesia, level 7, zstdcli, 4581607
+silesia, level 9, zstdcli, 4543910
+silesia, level 13, zstdcli, 4493979
+silesia, level 16, zstdcli, 4381933
+silesia, level 19, zstdcli, 4296947
+silesia.tar, level -5, zstdcli, 7159586
+silesia.tar, level -3, zstdcli, 6791018
+silesia.tar, level -1, zstdcli, 6196283
+silesia.tar, level 0, zstdcli, 4876730
+silesia.tar, level 1, zstdcli, 5340312
+silesia.tar, level 3, zstdcli, 4876730
+silesia.tar, level 4, zstdcli, 4817723
+silesia.tar, level 5, zstdcli, 4730389
+silesia.tar, level 6, zstdcli, 4655708
+silesia.tar, level 7, zstdcli, 4593407
+silesia.tar, level 9, zstdcli, 4556135
+silesia.tar, level 13, zstdcli, 4503500
+silesia.tar, level 16, zstdcli, 4387237
+silesia.tar, level 19, zstdcli, 4283127
+silesia.tar, no source size, zstdcli, 4876726
+github, level -5, zstdcli, 234744
+github, level -5 with dict, zstdcli, 47528
+github, level -3, zstdcli, 222611
+github, level -3 with dict, zstdcli, 46394
+github, level -1, zstdcli, 178575
+github, level -1 with dict, zstdcli, 43401
+github, level 0, zstdcli, 138397
+github, level 0 with dict, zstdcli, 40316
+github, level 1, zstdcli, 145457
+github, level 1 with dict, zstdcli, 43242
+github, level 3, zstdcli, 138397
+github, level 3 with dict, zstdcli, 40316
+github, level 4, zstdcli, 138144
+github, level 4 with dict, zstdcli, 40292
+github, level 5, zstdcli, 137106
+github, level 5 with dict, zstdcli, 40938
+github, level 6, zstdcli, 137108
+github, level 6 with dict, zstdcli, 40632
+github, level 7, zstdcli, 137108
+github, level 7 with dict, zstdcli, 40766
+github, level 9, zstdcli, 137108
+github, level 9 with dict, zstdcli, 41326
+github, level 13, zstdcli, 135741
+github, level 13 with dict, zstdcli, 41670
+github, level 16, zstdcli, 135741
+github, level 16 with dict, zstdcli, 39940
+github, level 19, zstdcli, 135717
+github, level 19 with dict, zstdcli, 39576
+silesia, level -5, advanced one pass, 7152294
+silesia, level -3, advanced one pass, 6789969
+silesia, level -1, advanced one pass, 6191548
+silesia, level 0, advanced one pass, 4862377
+silesia, level 1, advanced one pass, 5318036
+silesia, level 3, advanced one pass, 4862377
+silesia, level 4, advanced one pass, 4800629
+silesia, level 5, advanced one pass, 4715005
+silesia, level 6, advanced one pass, 4644055
+silesia, level 7, advanced one pass, 4581559
+silesia, level 9, advanced one pass, 4543862
+silesia, level 13, advanced one pass, 4493931
+silesia, level 16, advanced one pass, 4381885
+silesia, level 19, advanced one pass, 4296899
+silesia, no source size, advanced one pass, 4862377
+silesia.tar, level -5, advanced one pass, 7160438
+silesia.tar, level -3, advanced one pass, 6789024
+silesia.tar, level -1, advanced one pass, 6195462
+silesia.tar, level 0, advanced one pass, 4875071
+silesia.tar, level 1, advanced one pass, 5339697
+silesia.tar, level 3, advanced one pass, 4875071
+silesia.tar, level 4, advanced one pass, 4813104
+silesia.tar, level 5, advanced one pass, 4726961
+silesia.tar, level 6, advanced one pass, 4654401
+silesia.tar, level 7, advanced one pass, 4591933
+silesia.tar, level 9, advanced one pass, 4554098
+silesia.tar, level 13, advanced one pass, 4503496
+silesia.tar, level 16, advanced one pass, 4387233
+silesia.tar, level 19, advanced one pass, 4283123
+silesia.tar, no source size, advanced one pass, 4875071
+github, level -5, advanced one pass, 232744
+github, level -5 with dict, advanced one pass, 45528
+github, level -3, advanced one pass, 220611
+github, level -3 with dict, advanced one pass, 44394
+github, level -1, advanced one pass, 176575
+github, level -1 with dict, advanced one pass, 41401
+github, level 0, advanced one pass, 136397
+github, level 0 with dict, advanced one pass, 38316
+github, level 1, advanced one pass, 143457
+github, level 1 with dict, advanced one pass, 41242
+github, level 3, advanced one pass, 136397
+github, level 3 with dict, advanced one pass, 38316
+github, level 4, advanced one pass, 136144
+github, level 4 with dict, advanced one pass, 38292
+github, level 5, advanced one pass, 135106
+github, level 5 with dict, advanced one pass, 38938
+github, level 6, advanced one pass, 135108
+github, level 6 with dict, advanced one pass, 38632
+github, level 7, advanced one pass, 135108
+github, level 7 with dict, advanced one pass, 38766
+github, level 9, advanced one pass, 135108
+github, level 9 with dict, advanced one pass, 39326
+github, level 13, advanced one pass, 133741
+github, level 13 with dict, advanced one pass, 39670
+github, level 16, advanced one pass, 133741
+github, level 16 with dict, advanced one pass, 37940
+github, level 19, advanced one pass, 133717
+github, level 19 with dict, advanced one pass, 37576
+github, no source size, advanced one pass, 136397
+silesia, level -5, advanced one pass small out, 7152294
+silesia, level -3, advanced one pass small out, 6789969
+silesia, level -1, advanced one pass small out, 6191548
+silesia, level 0, advanced one pass small out, 4862377
+silesia, level 1, advanced one pass small out, 5318036
+silesia, level 3, advanced one pass small out, 4862377
+silesia, level 4, advanced one pass small out, 4800629
+silesia, level 5, advanced one pass small out, 4715005
+silesia, level 6, advanced one pass small out, 4644055
+silesia, level 7, advanced one pass small out, 4581559
+silesia, level 9, advanced one pass small out, 4543862
+silesia, level 13, advanced one pass small out, 4493931
+silesia, level 16, advanced one pass small out, 4381885
+silesia, level 19, advanced one pass small out, 4296899
+silesia, no source size, advanced one pass small out, 4862377
+silesia.tar, level -5, advanced one pass small out, 7160438
+silesia.tar, level -3, advanced one pass small out, 6789024
+silesia.tar, level -1, advanced one pass small out, 6195462
+silesia.tar, level 0, advanced one pass small out, 4875071
+silesia.tar, level 1, advanced one pass small out, 5339697
+silesia.tar, level 3, advanced one pass small out, 4875071
+silesia.tar, level 4, advanced one pass small out, 4813104
+silesia.tar, level 5, advanced one pass small out, 4726961
+silesia.tar, level 6, advanced one pass small out, 4654401
+silesia.tar, level 7, advanced one pass small out, 4591933
+silesia.tar, level 9, advanced one pass small out, 4554098
+silesia.tar, level 13, advanced one pass small out, 4503496
+silesia.tar, level 16, advanced one pass small out, 4387233
+silesia.tar, level 19, advanced one pass small out, 4283123
+silesia.tar, no source size, advanced one pass small out, 4875071
+github, level -5, advanced one pass small out, 232744
+github, level -5 with dict, advanced one pass small out, 45528
+github, level -3, advanced one pass small out, 220611
+github, level -3 with dict, advanced one pass small out, 44394
+github, level -1, advanced one pass small out, 176575
+github, level -1 with dict, advanced one pass small out, 41401
+github, level 0, advanced one pass small out, 136397
+github, level 0 with dict, advanced one pass small out, 38316
+github, level 1, advanced one pass small out, 143457
+github, level 1 with dict, advanced one pass small out, 41242
+github, level 3, advanced one pass small out, 136397
+github, level 3 with dict, advanced one pass small out, 38316
+github, level 4, advanced one pass small out, 136144
+github, level 4 with dict, advanced one pass small out, 38292
+github, level 5, advanced one pass small out, 135106
+github, level 5 with dict, advanced one pass small out, 38938
+github, level 6, advanced one pass small out, 135108
+github, level 6 with dict, advanced one pass small out, 38632
+github, level 7, advanced one pass small out, 135108
+github, level 7 with dict, advanced one pass small out, 38766
+github, level 9, advanced one pass small out, 135108
+github, level 9 with dict, advanced one pass small out, 39326
+github, level 13, advanced one pass small out, 133741
+github, level 13 with dict, advanced one pass small out, 39670
+github, level 16, advanced one pass small out, 133741
+github, level 16 with dict, advanced one pass small out, 37940
+github, level 19, advanced one pass small out, 133717
+github, level 19 with dict, advanced one pass small out, 37576
+github, no source size, advanced one pass small out, 136397
+silesia, level -5, advanced streaming, 7152294
+silesia, level -3, advanced streaming, 6789973
+silesia, level -1, advanced streaming, 6191549
+silesia, level 0, advanced streaming, 4862377
+silesia, level 1, advanced streaming, 5318036
+silesia, level 3, advanced streaming, 4862377
+silesia, level 4, advanced streaming, 4800629
+silesia, level 5, advanced streaming, 4715005
+silesia, level 6, advanced streaming, 4644055
+silesia, level 7, advanced streaming, 4581559
+silesia, level 9, advanced streaming, 4543862
+silesia, level 13, advanced streaming, 4493931
+silesia, level 16, advanced streaming, 4381885
+silesia, level 19, advanced streaming, 4296899
+silesia, no source size, advanced streaming, 4862341
+silesia.tar, level -5, advanced streaming, 7160440
+silesia.tar, level -3, advanced streaming, 6789026
+silesia.tar, level -1, advanced streaming, 6195465
+silesia.tar, level 0, advanced streaming, 4875071
+silesia.tar, level 1, advanced streaming, 5339701
+silesia.tar, level 3, advanced streaming, 4875071
+silesia.tar, level 4, advanced streaming, 4813104
+silesia.tar, level 5, advanced streaming, 4726977
+silesia.tar, level 6, advanced streaming, 4654404
+silesia.tar, level 7, advanced streaming, 4591934
+silesia.tar, level 9, advanced streaming, 4554105
+silesia.tar, level 13, advanced streaming, 4503496
+silesia.tar, level 16, advanced streaming, 4387233
+silesia.tar, level 19, advanced streaming, 4283123
+silesia.tar, no source size, advanced streaming, 4875067
+github, level -5, advanced streaming, 232744
+github, level -5 with dict, advanced streaming, 45528
+github, level -3, advanced streaming, 220611
+github, level -3 with dict, advanced streaming, 44394
+github, level -1, advanced streaming, 176575
+github, level -1 with dict, advanced streaming, 41401
+github, level 0, advanced streaming, 136397
+github, level 0 with dict, advanced streaming, 38316
+github, level 1, advanced streaming, 143457
+github, level 1 with dict, advanced streaming, 41242
+github, level 3, advanced streaming, 136397
+github, level 3 with dict, advanced streaming, 38316
+github, level 4, advanced streaming, 136144
+github, level 4 with dict, advanced streaming, 38292
+github, level 5, advanced streaming, 135106
+github, level 5 with dict, advanced streaming, 38938
+github, level 6, advanced streaming, 135108
+github, level 6 with dict, advanced streaming, 38632
+github, level 7, advanced streaming, 135108
+github, level 7 with dict, advanced streaming, 38766
+github, level 9, advanced streaming, 135108
+github, level 9 with dict, advanced streaming, 39326
+github, level 13, advanced streaming, 133741
+github, level 13 with dict, advanced streaming, 39670
+github, level 16, advanced streaming, 133741
+github, level 16 with dict, advanced streaming, 37940
+github, level 19, advanced streaming, 133717
+github, level 19 with dict, advanced streaming, 37576
+github, no source size, advanced streaming, 136397
+silesia, level -5, old streaming, 7152294
+silesia, level -3, old streaming, 6789973
+silesia, level -1, old streaming, 6191549
+silesia, level 0, old streaming, 4862377
+silesia, level 1, old streaming, 5318036
+silesia, level 3, old streaming, 4862377
+silesia, level 4, old streaming, 4800629
+silesia, level 5, old streaming, 4715005
+silesia, level 6, old streaming, 4644055
+silesia, level 7, old streaming, 4581559
+silesia, level 9, old streaming, 4543862
+silesia, level 13, old streaming, 4493931
+silesia, level 16, old streaming, 4381885
+silesia, level 19, old streaming, 4296899
+silesia, no source size, old streaming, 4862341
+silesia.tar, level -5, old streaming, 7160440
+silesia.tar, level -3, old streaming, 6789026
+silesia.tar, level -1, old streaming, 6195465
+silesia.tar, level 0, old streaming, 4875071
+silesia.tar, level 1, old streaming, 5339701
+silesia.tar, level 3, old streaming, 4875071
+silesia.tar, level 4, old streaming, 4813104
+silesia.tar, level 5, old streaming, 4726977
+silesia.tar, level 6, old streaming, 4654404
+silesia.tar, level 7, old streaming, 4591934
+silesia.tar, level 9, old streaming, 4554105
+silesia.tar, level 13, old streaming, 4503496
+silesia.tar, level 16, old streaming, 4387233
+silesia.tar, level 19, old streaming, 4283123
+silesia.tar, no source size, old streaming, 4875067
+github, level -5, old streaming, 232744
+github, level -5 with dict, old streaming, 45528
+github, level -3, old streaming, 220611
+github, level -3 with dict, old streaming, 44394
+github, level -1, old streaming, 176575
+github, level -1 with dict, old streaming, 41401
+github, level 0, old streaming, 136397
+github, level 0 with dict, old streaming, 38316
+github, level 1, old streaming, 143457
+github, level 1 with dict, old streaming, 41242
+github, level 3, old streaming, 136397
+github, level 3 with dict, old streaming, 38316
+github, level 4, old streaming, 136144
+github, level 4 with dict, old streaming, 38292
+github, level 5, old streaming, 135106
+github, level 5 with dict, old streaming, 38938
+github, level 6, old streaming, 135108
+github, level 6 with dict, old streaming, 38632
+github, level 7, old streaming, 135108
+github, level 7 with dict, old streaming, 38766
+github, level 9, old streaming, 135108
+github, level 9 with dict, old streaming, 39326
+github, level 13, old streaming, 133741
+github, level 13 with dict, old streaming, 39670
+github, level 16, old streaming, 133741
+github, level 16 with dict, old streaming, 37940
+github, level 19, old streaming, 133717
+github, level 19 with dict, old streaming, 37576
+github, no source size, old streaming, 141003