Byte streams ------------ CRAM breaks files into slices (eg 10,000 sequence records) and each slice consists of a series of "data series" corresponding to a specific type, typically one data stream per cram "block". CRAM uses reference based compression when data has been aligned, which means it needs to know the reference number and alignment position in order to find the reference sequence, and then it encodes a series a differences to that reference. The data series important for CE1 are: AP: Assembly position, needed for reference based compression; as a delta to last AP if file is sorted. RI: Reference identifier (RNAME); constant per block so zero size. RL: Read length FN: Number of features (delta events to reference) FC: Feature code (corresponding to CIGAR ops, including X vs =, etc) DL: Length of a deleteion in "D" cigar op (FC=="D"). IN: Inserted bases corresponding to an "I" cigar op (FC=="I"). SC: Soft-clipped bases corresponding to an "S" cigar op (FC=="S"). BA: Substituted base (FC=="X"). BS: Also substituted base as a from->to code. (FC=="B") BF: BAM flag. Necessary here for purposes of sequence orientation. NF: Number of records to mate pair; used for dedup purposes. The full (albeit at times unclear!) description of how these fit together is in the CRAM specification at htslib.org. Each data series typically contains bytes (bases, substitution codes) or variable sized integers (AP, RL, RI) encoded using "ITF8" as defined in CRAM spec. The byte streams are then encoded using a codec, typically zlib, rANS (order 0 or order 1), bzip2, lzma or with one of the newer experimental / unofficial CRAM plugins (bsc, zstd, or custom type-aware codecs). Each of the tests below permit multiple codecs to be used with the Scramble tool periodically testing all and choosing the one that works best. As such some when we add "zstd" for example, Scramble is still free to use rANS if it gives better compression or comparable compression at better speed. When spotted, I have noted this in the results below. I have tested at varying granularity of random access, as 1k, 10k and 100k sequences per CRAM slice. This alters the compression ratio considerably. Note that by offering CRAM to use a codec (zstd, bsc, fqz, etc) it isn't mandated to use it. Instead it learns which codec offers best ratio for speed. This means in many of the tests below you'll find near identical figures between rANS/10k and zstd/10k for example. Seq --- Includes CRAM data series IN, SC, BA, BS. NOTE: However it also requires mapping to fully decode as CRAM uses reference based compression, so add these figures in if you wish to compare against non-reference methods. Seq-only: cram_size $in | awk '/ (IN|SC|BA|BS)/ {t+=$6;n++} END {printf("%20.0f\t%d\n",t,n)}' Timing wise, this is also tricky. I can compute the sum of times taken to decompress all blocks of data and also compute the total running time of the program (this is just a decode-next-record loop). The difference in the two is "missing" time not spent in codecs, but spent in program logic instead. Eg computing CRCs, reconstructing sequence from reference + delta. This missing time can be as much as half the total cpu time when using fast codecs. I surmise that most (but not all) of the cpu time spent is related to sequences so I add that missing time to this Core Experiment in a separately reported column. These should therefore be considered as lower and upper bounds on sequence decode times. "Perf" analysis shows at least half of this is directly as a consequence of sequence and mapping decoding, hence why I lump it here, but it really needs spreading out across all CRAM data series. NB: The samcomp figure heres includes sequence + mapping. I simply took the samcomp source and commented out the functions to encode identifiers, quality values and mapping quality and quoted the complete file size. (It doesn't support rnext, pnext, tlen and auxiliary fields.) Samcomp builds a model per genomic coordinate and compresses according to that. It has no random access capability, although most of the models are reset on each pileup column so in theory it could be added with minimal growth in output. I include it here simply as a reasonable baseline to compare against. (Eg compare to seq+mapping for bsc with 100k reads per slice; samcomp is 5% larger on data set 2 and 5% smaller on data set 5). Data set 02 Tool/seq-per-blk Size bsc/100000 1387880428 rANS/10000 2234760399 rANS/100000 2165460221 samcomp 3878190339 10397.5sec (enc) samcomp -r 3213976654 Data set 03 Tool/seq-per-blk Size bsc/100000 3791678243 rANS/10000 3891231074 samcomp 10070068323 3560.2sec (enc) samcomp -r 9390341274 Data set 05 Tool/seq-per-blk Size Enc(s) Dec(s) Missing bsc/1000 43928345 324.2 239.2 +44.5 bsc/10000 33835332 68.2 53.1 +51.6 bsc/100000 31294031 20.9 14.1 +59.8 rANS/1000 48347267 8.4 1.5 +50.1 rANS/10000 41311912 1.0 0.7 +49.1 rANS/100000 40342607 0.8 0.5 +59.0 zstd/1000 43535354 27.8 1.3 +50.6 zstd/10000 41311909 1.1 0.7 +52.8 zstd/100000 40342607 1.0 0.5 +58.8 zstd9/1000 42437331 47.3 1.2 +50.6 zstd9/10000 41299627 1.3 0.6 +52.2 zstd9/100000 40269463 2.1 0.5 +59.6 samcomp 679242521 samcomp -r 137328911 Data set 09 Tool/seq-per-blk Size Enc(s) Dec(s) Missing bsc/1000 10395692 2.8 0.5 +18.5 bsc/10000 8461947 10.2 7.3 +18.4 bsc/100000 7973207 5.0 2.5 +19.8 rANS/1000 10395742 2.6 0.5 +19.9 rANS/10000 8670106 2.2 0.2 +19.1 rANS/100000 8505257 7.4 0.2 +20.8 zstd/1000 10277561 1.9 0.7 +19.5 zstd/10000 8574883 5.6 0.2 +19.1 zstd/100000 8205944 8.0 0.1 +21.2 Data set 10 Tool/seq-per-blk Size Enc(s) Dec(s) Missing bsc/1000 32111105 752.3 602.6 +160.9 bsc/10000 17275774 132.7 141.9 +188.1 bsc/100000 14113643 17.9 19.0 +199.8 rANS/1000 26652423 11.7 2.1 +29.1 rANS/10000 17218784 1.6 0.5 +45.1 rANS/100000 15208798 0.8 0.3 +66.3 zstd/1000 25223843 3.4 3.1 +184.1 zstd/10000 17071957 1.6 0.6 +176.5 zstd/100000 15207301 1.0 0.4 +203.4 Data set 16 Tool/seq-per-blk Size Enc(s) Dec(s) Missing bsc/1000 3555596 0.2 0.1 +10.0 bsc/10000 3197951 0.3 0.1 +10.3 bsc/100000 3153723 1.3 0.1 +11.3 rANS/1000 3555596 0.1 0.1 +10.5 rANS/10000 3197951 0.2 0.1 +10.2 rANS/100000 3153723 1.2 0.1 +11.6 zstd/1000 3555371 0.1 0.1 +10.6 zstd/10000 3197473 0.2 0.1 +10.9 zstd/100000 3152541 1.7 0.1 +12.5 Mapping ------- Includes CRAM data series BF, AP, RL, FN, FC, FP, DL, RI, CORE. (CORE is occasionally used in BETA codec for AP values.) cram_size $in | awk '/ (CORE|BF|AP|RL|FN|FC|FP|DL|RI)/ {t+=$6;n++} END {printf("%20.0f\t%d\n",t,n)}' These cover the CIGAR string fields and assembly positions. Note: This is also necessary for decoding the sequence. Data set 02 Tool/seq-per-blk Size bsc/100000 1686974165 rANS/10000 1845805745 rANS/100000 1719376628 Data set 03 Tool/seq-per-blk Size bsc/100000 2894131079 rANS/10000 2877646537 Data set 05 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 148014709 784.8 375.6 +44.5 bsc/10000 120577165 112.8 96.4 +51.6 bsc/100000 113082603 35.8 25.2 +59.8 rANS/1000 137288122 14.8 3.0 +50.1 rANS/10000 119637342 4.0 1.5 +49.1 rANS/100000 118539503 1.7 0.9 +59.0 zstd/1000 136869454 13.0 2.9 +50.6 zstd/10000 119630220 4.1 1.5 +52.8 zstd/100000 118499600 2.2 0.9 +58.8 zstd9/1000 132284042 15.0 2.7 +50.6 zstd9/10000 115817521 6.0 1.5 +52.2 zstd9/100000 118464185 10.1 0.9 +59.6 Data set 09 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 27814078 5.8 1.1 +18.5 bsc/10000 24440439 18.7 14.4 +18.4 bsc/100000 23131476 11.1 6.4 +19.8 rANS/1000 27814230 5.3 1.1 +19.9 rANS/10000 25592689 3.4 0.5 +19.1 rANS/100000 25414476 6.8 0.4 +20.8 zstd/1000 27480651 11.9 1.2 +19.5 zstd/10000 24032816 7.3 0.4 +19.1 zstd/100000 23366293 14.2 0.3 +21.2 Data set 10 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 275586305 3396.3 2526.3 +160.9 bsc/10000 203966296 428.5 471.7 +188.1 bsc/100000 192561509 95.9 82.3 +199.8 rANS/1000 441835843 39.5 11.9 +29.1 rANS/10000 439882225 12.7 5.7 +45.1 rANS/100000 513254669 9.4 5.2 +66.3 zstd/1000 433465377 31.2 12.6 +184.1 zstd/10000 427490859 24.1 5.2 +176.5 zstd/100000 498630494 29.5 4.4 +203.4 The big jump in data set 10 between bsc and rANS/zstd is due to the AP record (assembly position): 10/codec_bsc_seqs_10000:Block content_id 17, total size 51775003 r [b] AP 10/codec_xxx_seqs_10000:Block content_id 17, total size 274539215 g r AP This is due to a flurry of tiny references in the middle which then disable AP_delta mode. Data set 16 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 21595664 36.0 28.7 +10.0 bsc/10000 18838510 2.5 0.5 +10.3 bsc/100000 17871599 9.1 2.2 +11.3 rANS/1000 22398763 2.2 0.6 +10.5 rANS/10000 18838022 1.8 0.3 +10.2 rANS/100000 18318146 8.1 0.3 +11.6 zstd/1000 22329021 2.9 0.6 +10.6 zstd/10000 18834097 2.1 0.3 +10.9 zstd/100000 18317804 9.8 0.3 +12.5 Pairing ------- Includes CRAM data series CF, NF, MF, NS, NP, TS cram_size $in | awk '/ (CF|NF|MF|NS|NP|TS)/ {t+=$6;n++} END {printf("%20.0f\t%d\n",t,n)}' Data set 02 Tool/seq-per-blk Size bsc/100000 1053930319 rANS/10000 1209406318 rANS/100000 1192370643 Data set 03 Tool/seq-per-blk Size bsc/100000 0 rANS/10000 0 Data set 05 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 50929544 583.6 264.8 bsc/10000 29798626 90.6 58.4 bsc/100000 25922701 14.3 7.8 rANS/1000 46347337 9.9 1.4 rANS/10000 30461400 1.8 0.5 rANS/100000 27282020 0.7 0.4 zstd/1000 42701311 9.0 1.6 zstd/10000 29468366 2.3 0.5 zstd/100000 27047949 1.2 0.3 zstd9/1000 42604517 11.1 1.4 zstd9/10000 29374566 3.3 0.5 zstd9/100000 26790980 5.4 0.3 Data set 09 Not applicable Data set 10 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 550383205 3404.1 2703.9 bsc/10000 353659271 450.9 478.8 bsc/100000 273776181 105.3 95.0 rANS/1000 822433758 92.5 19.3 rANS/10000 458823452 21.7 9.7 rANS/100000 344869362 12.1 5.9 zstd/1000 587942317 232.1 16.1 zstd/10000 426301282 88.2 7.2 zstd/100000 338109151 54.8 3.1 Data set 16 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 31736706 82.1 68.8 bsc/10000 12661351 17.6 15.3 bsc/100000 10033806 5.3 2.4 fqz/1000 37239977 5.0 1.0 fqz/10000 14156545 0.7 0.2 fqz/100000 10556195 0.3 0.2 rANS/1000 35227440 6.6 1.0 rANS/10000 13882740 1.1 0.2 rANS/100000 10510735 2.6 0.2 zstd/1000 31916880 12.8 1.0 zstd/10000 13474973 2.1 0.2 zstd/100000 10447887 3.3 0.2 Meta ---- Meta here is mapping quality + auxiliary fields. Includes CRAM data series MQ, TL and all 3-letter DS names. cram_size $in | awk '/ (MQ|TL|[^ ][^ ][^ ])$/ {t+=$6;n++} END {printf("%20.0f\t%d\n",t,n)}' Data set 02 Tool/seq-per-blk Size bsc/100000 938336088 rANS/10000 1226657317 rANS/100000 1047366004 Data set 03 Tool/seq-per-blk Size bsc/100000 3320253108 rANS/10000 4172065387 Data set 05 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 162424257 1891.1 1448.4 bsc/10000 112611834 256.5 193.8 bsc/100000 100645667 76.3 50.2 rANS/1000 170205030 31.6 7.8 rANS/10000 134159248 9.9 4.0 rANS/100000 125387868 10.9 3.7 zstd/1000 164054084 66.2 5.9 zstd/10000 130268340 18.7 3.3 zstd/100000 122379458 15.2 3.0 zstd9/1000 156563983 154.1 6.2 zstd9/10000 124588500 184.5 3.2 zstd9/100000 114129069 351.9 2.5 The largest aux types in zstd/100000 are: Block content_id 32, total size 10890120 rR TL Block content_id 4279651, total size 5388348 rR AMc Block content_id 4342618, total size 3214232 [Z] BCZ Block content_id 5330010, total size 51069269 R QTZ Block content_id 5459299, total size 4725670 rR SMc Block content_id 5779555, total size 2050340 g R[Z] X0c ("g" dominant) Block content_id 5779811, total size 2664848 g [Z] X1c ("g" dominant) Block content_id 5783898, total size 18915312 g [Z] XAZ ("g" dominant) Block content_id 5785443, total size 1524779 rR XGc Block content_id 5786979, total size 10265895 r XMc Block content_id 5787491, total size 1235173 rR XOc Block content_id 5788737, total size 2230957 rR XTA Thus very few fields dominate by use of zstd library, preferring even zlib. This is down to speed vs size choices in Scramble. Pushing compression level up in scramble alters this speed vs size choice, permitting use of slower encoders, as reported in the zstd9 (scramble -9, which translates around zstd -18?). Then we see the encode speed plumettting as zstd spends longer optimising compression, but decode speeds are more or less static. Data set 09 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 30604889 62.3 40.1 bsc/10000 26157997 38.1 26.5 bsc/100000 24069671 23.9 10.3 rANS/1000 32560331 24.5 1.6 rANS/10000 28315095 52.6 1.0 rANS/100000 28157390 68.9 0.9 zstd/1000 31355962 90.9 1.6 zstd/10000 26386432 126.0 0.4 zstd/100000 25540531 144.1 0.3 Data set 10 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 256735990 6400.7 5241.3 bsc/10000 132313339 733.7 846.8 bsc/100000 115742403 106.8 118.0 rANS/1000 233060441 82.7 22.2 rANS/10000 135356157 23.5 9.6 rANS/100000 126215170 22.6 8.8 zstd/1000 216475749 58.7 22.2 zstd/10000 131362139 24.4 7.4 zstd/100000 124242226 23.0 6.4 Data set 16 Tool/seq-per-blk Size Enc(s) Dec(s) bsc/1000 48921819 82.4 67.0 bsc/10000 39414401 27.6 20.9 bsc/100000 36096808 17.6 9.3 rANS/1000 52516977 10.7 1.4 rANS/10000 45911894 6.5 1.0 rANS/100000 40865259 6.3 0.9 zstd/1000 51481700 26.9 1.3 zstd/10000 45232217 50.6 0.6 zstd/100000 39803411 59.9 0.5 Overall conclusions ------------------- Libbsc is an extremely effective general purpose compressor when block sizes are large, although with high overheads when given smaller block sizes. Zstd is a much lighter weight compression tool with few overheads, but in some cases the data simply doesn't need LZ or pattern matching and benefits from just a basic entropy encoder instead. ----------------------------------------------------------------------------- Appendix: Full data set conversions. Converting from default CRAM to CRAM with fqzcomp and bsc plugins, using 100,000 reads/slice: Data set 02 ----------- @ seq3d[dataset/02]; time CRAM_CODEC_DIR=../bsc_fqz ../scramble.modules -t8 -s 100000 NA12878_S1.c3.cram NA12878_S1.c3.bsc_fqz.cram Adding codec 18 libcram_codec_bsc.so Adding codec 19 libcram_codec_fqzcomp_qual.so real 81m22.059s user 625m41.302s sys 17m17.413s -rw-r--r-- 1 jkb team117 57767693482 Dec 13 16:24 NA12878_S1.c3.bsc_fqz.cram -rw-r--r-- 1 jkb team117 66611124096 Dec 13 09:34 NA12878_S1.c3.cram @ seq3d[dataset/02]; CRAM_CODEC_DIR=../bsc_fqz ../cram_size NA12878_S1.c3.cram Adding codec 18 libcram_codec_bsc.so Adding codec 19 libcram_codec_fqzcomp_qual.so Block CORE , total size 60088123 Block content_id 11, total size 9291477075 g RN Block content_id 12, total size 50497889145 R QS Block content_id 13, total size 6699205 g IN Block content_id 14, total size 316665917 g rR SC Block content_id 15, total size 453510486 R BF Block content_id 16, total size 218338526 r CF Block content_id 17, total size 497168802 r AP Block content_id 19, total size 128578808 rR MQ Block content_id 20, total size 3599673 r NS Block content_id 21, total size 7743352 g R MF Block content_id 22, total size 85615272 g R TS Block content_id 23, total size 116999870 g NP Block content_id 24, total size 777109625 g NF Block content_id 26, total size 219025430 rR FN Block content_id 27, total size 85216976 r FC Block content_id 28, total size 529797246 g R FP Block content_id 29, total size 998682 g r DL Block content_id 30, total size 1784255338 g BA Block content_id 31, total size 127139939 g rR BS Block content_id 32, total size 127385053 rR TL Block content_id 47, total size 37210902 rR XTA Block content_id 48, total size 101960815 rR SMC Block content_id 49, total size 117875360 rR AMC Block content_id 50, total size 43436154 r X0C Block content_id 51, total size 63076814 g rR X1C Block content_id 52, total size 188591931 rR XMC Block content_id 53, total size 31961173 r XOC Block content_id 54, total size 36359075 r XGC Block content_id 55, total size 53329451 g XCC Block content_id 56, total size 280702860 g XAZ Block content_id 57, total size 139 g NMC Block content_id 58, total size 4936 g XNC Block content_id 59, total size 496 g MDZ Block content_id 60, total size 9021552 g X1S Block content_id 61, total size 7160162 g X0S Block content_id 62, total size 1584 g X0I Block content_id 63, total size 52 g X1I @ seq3d[dataset/02]; CRAM_CODEC_DIR=../bsc_fqz ../cram_size NA12878_S1.c3.bsc_fqz.cram Adding codec 18 libcram_codec_bsc.so Adding codec 19 libcram_codec_fqzcomp_qual.so Block CORE , total size 0 Block content_id 11, total size 6727621712 [b] RN Block content_id 12, total size 45952955322 [b][q] QS Block content_id 13, total size 3414795 g [b] IN Block content_id 14, total size 290844420 [b] SC Block content_id 15, total size 415376100 R[b] BF Block content_id 16, total size 208634452 R[b] CF Block content_id 17, total size 516367302 r [b] AP Block content_id 19, total size 103882188 [b] MQ Block content_id 20, total size 3905210 r [b] NS Block content_id 21, total size 7232587 r [b] MF Block content_id 22, total size 42234836 [b] TS Block content_id 23, total size 82607960 [b] NP Block content_id 24, total size 709315274 [b] NF Block content_id 26, total size 189058253 r [b] FN Block content_id 27, total size 75025390 rR[b] FC Block content_id 28, total size 487660640 r [b] FP Block content_id 29, total size 3486480 g r [b] DL Block content_id 30, total size 988008311 R[b] BA Block content_id 31, total size 105612902 R[b] BS Block content_id 32, total size 103171845 R[b] TL Block content_id 4279619, total size 94564108 [b] AMC Block content_id 5063770, total size 452 g [b] MDZ Block content_id 5131587, total size 135 g NMC Block content_id 5459267, total size 68156973 r [b] SMC Block content_id 5779523, total size 19088736 R[b] X0C Block content_id 5779529, total size 8864 g [b] X0I Block content_id 5779539, total size 6909600 g [b] X0S Block content_id 5779779, total size 27900183 r [b] X1C Block content_id 5779785, total size 72 g X1I Block content_id 5779795, total size 8972522 g [b] X1S Block content_id 5783898, total size 229015090 g [b] XAZ Block content_id 5784387, total size 50422432 r [b] XCC Block content_id 5785411, total size 20498705 r [b] XGC Block content_id 5786947, total size 159247640 r [b] XMC Block content_id 5787203, total size 7939 g [b] XNC Block content_id 5787459, total size 17696916 r [b] XOC Block content_id 5788737, total size 28791688 R[b] XTA Data set 03 ----------- @ seq3c[dataset/03]; time CRAM_CODEC_DIR=../bsc_fqz ../scramble.modules -t8 -s 100000 NA12878.pacbio.bwa-sw.20140202.cram NA12878.pacbio.bwa-sw.20140202.bsc_fqz.cram Adding codec 18 libcram_codec_bsc.so Adding codec 19 libcram_codec_fqzcomp_qual.so real 53m56.741s user 423m33.292s sys 5m23.292s -rw-r--r-- 1 jkb team117 33632903255 Dec 13 15:56 NA12878.pacbio.bwa-sw.20140202.bsc_fqz.cram -rw-r--r-- 1 jkb team117 34405149106 Dec 13 14:06 NA12878.pacbio.bwa-sw.20140202.cram @ seq3c[dataset/03]; CRAM_CODEC_DIR=../bsc_fqz ../cram_size NA12878.pacbio.bwa-sw.20140202.cram Adding codec 18 libcram_codec_bsc.so Adding codec 19 libcram_codec_fqzcomp_qual.so Block CORE , total size 46 Block content_id 1, total size 61254748 g XSc ASs XSs ASc ASC XSC Block content_id 9, total size 4090179955 g SAZ PGZ Block content_id 11, total size 226226963 g RN Block content_id 12, total size 23197309174 R QS Block content_id 13, total size 477940820 R IN Block content_id 14, total size 2979236759 rR SC Block content_id 15, total size 7058723 R BF Block content_id 17, total size 27830037 g AP Block content_id 19, total size 11422428 g r MQ Block content_id 25, total size 42008899 g RL Block content_id 26, total size 29721586 g FN Block content_id 27, total size 742643816 rR FC Block content_id 28, total size 1925730068 g R FP Block content_id 29, total size 102653362 rR DL Block content_id 30, total size 382810158 rR BA Block content_id 31, total size 51243337 rR BS Block content_id 32, total size 9208256 g r TL Block content_id 36, total size 38615168 g HC @ seq3c[dataset/03]; CRAM_CODEC_DIR=../bsc_fqz ../cram_size NA12878.pacbio.bwa-sw.20140202.bsc_fqz.cram Adding codec 18 libcram_codec_bsc.so Adding codec 19 libcram_codec_fqzcomp_qual.so Block CORE , total size 0 Block content_id 11, total size 163104616 [b] RN Block content_id 12, total size 23424846299 [b][q] QS Block content_id 13, total size 413033862 [b] IN Block content_id 14, total size 2944774334 R[b] SC Block content_id 15, total size 6940496 R[b] BF Block content_id 17, total size 26184907 [b] AP Block content_id 19, total size 11344196 r [b] MQ Block content_id 25, total size 40796119 [b] RL Block content_id 26, total size 27597775 [b] FN Block content_id 27, total size 751292591 R[b] FC Block content_id 28, total size 1936692438 R[b] FP Block content_id 29, total size 104626753 R[b] DL Block content_id 30, total size 382351860 R[b] BA Block content_id 31, total size 51518187 R[b] BS Block content_id 32, total size 9317696 g rR[b] TL Block content_id 36, total size 38052692 [b] HC Block content_id 4281155, total size 3101688 g [b] ASC Block content_id 4281187, total size 7343792 g [b] ASc Block content_id 4281203, total size 21031958 [b] ASs Block content_id 5261146, total size 176604 [b] PGZ Block content_id 5456218, total size 3245967196 [b] SAZ Block content_id 5788483, total size 1190973 g [b] XSC Block content_id 5788515, total size 13675961 r [b] XSc Block content_id 5788531, total size 7103044 [b] XSs