1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
|
%!PS-Adobe-2.0
%%Creator: dvips(k) 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com)
%%Title: manual.dvi
%%Pages: 39
%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%EndComments
%DVIPSCommandLine: dvips -o manual.ps manual.dvi
%DVIPSParameters: dpi=600, compressed
%DVIPSSource: TeX output 2000.03.23:2343
%%BeginProcSet: texc.pro
%!
/TeXDict 300 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N
/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72
mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1}
ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div
hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul
TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if}
forall round exch round exch]setmatrix}N /@landscape{/isls true N}B
/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B
/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{
/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N
string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N
end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{
/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]
N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup
length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{
128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub
get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data
dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N
/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup
/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx
0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff
setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff
.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N
/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id
gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp
add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add
/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{
dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1
adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2
idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string
putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval
adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg}
{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{
adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2
chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{]
}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup
length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{
cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul
add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict
/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook
known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X
/IE 256 array N 2 string 0 1 255{IE S dup 360 add 36 4 index cvrs cvn
put}for pop 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N
/RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley
X /rulex X V}B /V{}B /RV statusdict begin /product where{pop false[
(Display)(NeXT)(LaserWriter 16/600)]{dup length product length le{dup
length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}
forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false
RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1
false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform
round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg
rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail
{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{
4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{
p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p
a}B /bos{/SS save N}B /eos{SS restore}B end
%%EndProcSet
TeXDict begin 39158280 55380996 1000 600 600 (manual.dvi)
@start
%DVIPSBitmapFont: Fa cmti10 10.95 1
/Fa 1 47 df<120FEA3FC0127FA212FFA31380EA7F00123C0A0A77891C>46
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fb cmbxti10 14.4 1
/Fb 1 47 df<13FCEA03FF000F13804813C05AA25AA2B5FCA31480A214006C5A6C5A6C5A
EA0FE0121271912B>46 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fc cmsl10 10.95 25
/Fc 25 122 df<D901F8160CD907FE161ED91F07163E90263E0380157E017C6D15FC496C
6CEC03F8D801F06DEC07F00003D900FCEC1FE04901EFEC7FC00007913AE3E007EF804901
E0B5129F000F913A701FF83F0093C7127E48485E604D5A03F01303003F4A495A90C74A5A
4D5A4DC7FC0201143E4B5B17FC4C5A003E4948485A4C5A003F01075C6C4A485A020E131F
021E49C8FC6C6C48137E02385B3A07C0F001F82603E1E05B3A00FF8003E090263E000714
7E90C73A0FC001FF80923A1F8007C1C0923A3F000F80E0033E90381F00F04B013E137003
FC4913784A4801FC13384A485B913807E001DA0FC05BDB8003141CEC1F004A495A147E5C
4948163C4948010F14384A5C495A130F4948167849C71570137E017C17F0494B13E01201
4848EDC0014848020714C04848EE03804848160790C83903E00F00003E170E007E923801
F03C486F6C5A48EE3FE00070EE0F803F4975C34C>37 D<EA0780EA0FE0EA1FF0123FA512
1FEA0F301200A213701360A213E013C0120113801203EA07001206120E5A5A5A5A5A0C1C
7A8919>44 D<EC07F8EC3FFF9138FC0FC0903903F003E0903907C001F0D90F8013F849C7
FC013E14FC017E147C017C147E13FC485AA20003157F5B1207A2120F5BA2121F16FF5BA2
123FA44848EB01FEA648C7EA03FCA5ED07F8A25A16F0A2150F16E0A3ED1FC0A21680007E
143F1600157E123E003F5C4A5AD81F805B000FEB07E06C6C485A2603F03FC7FC3800FFFC
EB1FE0283F79BC2D>48 D<157015F014011407143F903803FFE0137FEBFFCFEBF80F1300
141F15C0A5143F1580A5147F1500A55C5CA513015CA513035CA513075CA5130F5CA3131F
497EB612F8A31D3D78BC2D>I<133C137F5B481380A31400A26C5A137890C7FCB3EA0780
EA0FE0121F123FA5121FEA0F601200A213E05BA212015B120390C7FC5A1206120E5A5A12
3012705A5A11397AA619>59 D<EC7FC0903803FFF890380FC07E90383E003F496D7E01FF
6D7E82A248140782A26C5A137890C7120FA25EA2EC03FF147F903807FF1FEB1FE0D97F80
5B3801FE00EA03F8485A4848133F485A003F5D49EC81C048C7FCA2157F48ED03804814FF
A2007F5B913903BF0700903880073F3A3FC00E1F8E260FE03C13FC3A03FFF00FF83A007F
C003E02A2A7CA82D>97 D<EB3F80EA1FFFA3C6FC137FA291C9FCA55B5BA512015BA4EC07
F80003EB3FFF9039F8F80FC09039FBE003E09039FF8001F891C77E5B4848147E49147F5B
821780A2120F5B17C0A3167F001F16805BA4EEFF00123F5B4B5AA24B5A5E007F4A5AA24B
5A6D495A4BC7FCD87CE0137E39F87001F839F03C07E039E00FFF80260003FCC8FC2A4077
BE33>I<EC1FF0ECFFFE903903F01F8090390FC003C0D93F0013E0017E130F49131F0001
15F04848EB3FE0485AA24848EB1FC0001FEC0F004990C7FC123FA2485AA412FF90C9FCA9
6CEC0380150716006C6C5B151E001F5C6C6C5B6C6C5B6C6C485A3901F80F8026007FFEC7
FCEB0FF0242A7AA828>I<EE03F8ED01FFA3ED000F1607A217F0A4160FA217E0A4161FA2
17C0A491380FF03FECFFFC902603F81F138090390FC007BF90391F8003FF90387E000149
7F0001157F48481500485A120F5B001F5D485A5E5B127FA2150112FF90C75BA41503A25E
A37E1507A26C4A5A7F001F141F6C6C133F6C6CEBFFF83B03F001EFFFC03900F80F8F9038
3FFE0FD90FF0EBE0002D407ABE33>I<EC3FE0903801FFF8903807E07E90380F801F9039
3F000F80017E14C049EB07E0485A12034848EB03F0485AA2121F5B123FA248481307A290
B6FCA2D8FF80C8FC90C9FCA87EED01C015036C15806D1307001FEC0F006D131E000F5C6C
6C5B6C6C485A3900FC07C0D93FFFC7FCEB07F8242A7BA828>I<ED07F0ED3FFCEDFC1E91
3803F03F4A48B4FC4A481380141FEC3F81DA7F0113008102FE137C93C7FCA213015CA513
035CA50007B512F8A3260007F0C8FCA3130F5CA5131F5CA5133F5CA5137F91C9FCA55B5B
A4EA03FF007F13FEB5FCA229407DBF1C>I<147FEB3FFFA313017FA25CA513015CA51303
5CA4ED07F80107EB1FFF9139F0781FC09138F1E00F9139F38007E0ECF70002FE14F0495A
5CA25CA24A130F131F4A14E0A4161F133F4A14C0A4163F137F91C71380A4167F5B491500
A300015D486C491380B5D8F87F13FCA32E3F7DBE33>104 D<1478EB01FE130314FFA25B
14FE130314FCEB00F01400ACEB03F8EA01FF14F0A2EA001F130FA314E0A5131F14C0A513
3F1480A5137F1400A55B5BA4EA03FF007F13F0A2B5FC183E7DBD1A>I<143FEB1FFF5BA2
13017FA214FEA5130114FCA5130314F8A5130714F0A5130F14E0A5131F14C0A5133F1480
A5137F1400A55B5BA4EA03FF007F13F8A2B5FC183F7DBE1A>108
D<902707F007F8EB03FCD803FFD91FFF90380FFF80913CE0781FC03C0FE09126E1E00FEB
F0073E001FE38007E1C003F090260FE700EBE38002EEDAF70013F802FC14FE02D85C14F8
4A5CA24A5C011F020F14074A4A14F0A5013F021F140F4A4A14E0A5017F023F141F91C749
14C0A549027F143F4992C71380A300014B147F486C496DEBFFC0B5D8F87FD9FC3F13FEA3
47287DA74C>I<903907F007F8D803FFEB1FFF9139E0781FC09138E1E00F3B001FE38007
E090380FE70002EE14F014FC14D814F85CA24A130F131F4A14E0A4161F133F4A14C0A416
3F137F91C71380A4167F5B491500A300015D486C491380B5D8F87F13FCA32E287DA733>
I<EC0FF0ECFFFE903903F01F8090390FC007C049C66C7E013E6D7E01FC6D7E4848804914
7C0003157E485A000F157F5B121FA2485AA2007F1680A2170048C85AA54B5AA25E5A6C4A
5A7E4B5A5E6C140F6C6C5C4B5A6C6C013EC7FC6C6C5B6C6C485A3900FC0FE090383FFF80
D90FF8C8FC292A7BA82D>I<91387F01FE903A7FFF0FFFC09139FE3E03F09238F801F890
3A01FFE000FE4B137F6D497F4990C713804A15C04A141FA218E0A20103150F5C18F0A317
1F010716E05CA3173F18C0130F4A147F1880A2EFFF004C5A011F5D16034C5A6E495AEE1F
C06E495AD93FDC017EC7FC91388F01F8913883FFE0028090C8FC92C9FC137FA291CAFCA4
5BA25BA31201487EB512F8A3343A81A733>I<903907F01F80D803FFEB7FE09138E1E1F0
9138E387F839001FE707EB0FE614EE02FC13F002D813E09138F801804AC7FCA25C131FA2
5CA4133F5CA5137F91C8FCA55B5BA31201487EB512FEA325287EA724>114
D<9138FF81C0010713E390381F807F90397C003F8049131F4848130F5B00031407A24848
1400A27FA27F6D90C7FCEBFF8014FC6C13FF6C14C015F06C6C7F011F7F13079038007FFE
1403140100381300157EA2123C153E157E007C147CA2007E147815F8007F495A4A5A486C
485A26F9E01FC7FC38E0FFFC38C01FE0222A7DA824>I<EB0380A4130791C7FCA25BA25B
A2133EA2137E13FE12011207001FB512C0B6FCA2D801FCC7FCA312035BA512075BA5120F
5BA41407001F130E13C0A4141E141C1380A26D5AA2000F5B14F03807E1E03801FF80D800
7EC7FC1A3978B723>I<01FE147F00FFEC7FFF4914FEA20007140300031401A34914FCA4
150312074914F8A41507120F4914F0A4150F121F4914E0A2151FA3153F4914C0157F15FF
EC01DF3A0FC003BFE09138073FFF3803F01E3801FFF826003FE01380282977A733>I<B5
39E007FFF05D17E02707FE000313006C48EB01FC6F5A5E00014A5A5EA24B5A6D13070000
92C7FC5D150E6D5B7F5DA25D1480013F5B14815D14C3011F5B02C7C8FCA214CE14EEEB0F
FCA25CA26D5A5CA25CA26D5A2C2878A630>I<B500C3B53803FFFCA204FE14F8290FFE00
3FE00013C0D807F86D48EB7F000003173E183C150F18386D5E0001141F705B153F4D5A15
776D4B5A0000ECE7F04DC7FCEC01C3170E9038FF0383017F5D91380703F85FEC0E01021E
5CD93F9C14F002BC6D5A02B813FDDAF8005B4A13FF5F6D5A94C8FC5C4A137E167C6DC7FC
1678010E14383E2878A642>I<90B539E007FFF05E18E0902707FE000313006D48EB01FC
705A5F01014A5A5F16036E5C0100140794C7FC160E805E805E1678ED8070023F13F05EED
81C015C191381FC38015C793C8FC15EF15EEEC0FFCA25DA26E5AA25DA26E5A5DA24AC9FC
5C140E141E141C5C121C003F5B5A485B495A130300FE5B4848CAFCEA701EEA783CEA3FF0
EA0FC0343A80A630>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fd cmtt12 14.4 10
/Fd 10 123 df<EC3FF80103B57E010F14E0013F14F84914FE48B7FC4816C048D9C01F7F
270FFE00017F49EB007FD81FF0EC1FF848486E7E160748486E7E4914018300FF81A26D16
80177FA36C5AA26CC9FCCAFCA217FF1800A25E5F16035F16075F160F4C5A163F4C5A5F4C
5A4B90C7FCED07FE4B5A4B5A4B5A4B5A4B5A4A5B4A90C8FCEC0FFE4A5AEC3FF04A5A4A5A
495B4990C9FCEB0FFC495A495A495A4948143F485B4890C8EA7F80EA0FFC485A48B8FC5A
B9FCA36C17007E314A7AC93E>50 D<383FFF805AB57EA37E7EEA003FAEED07FC92383FFF
8092B512E002C314F802CF8002DF8091B7FCDBF80F1380DBC00113C092C713E04A143F4A
EC1FF04A15F84A140F4AEC07FCA217034A15FE1701A318FF83A95F18FEA280170318FC6E
140718F86E140FEF1FF06E143F6EEC7FE06EECFFC0DBC0031380EDF01F92B6120002DF14
FC02CF5C02C35CD91F8114C090260F807F90C7FC90C7EA0FF8384A7FC83E>98
D<923803FFF85D4B7FA38181ED0003AEEC1FF0ECFFFE0103EBFF83010F14E34914F3017F
14FB90B7FC48EBF80F48EBC00191C7FC4848143F4848141F5B4848140F491407123F4914
03127F5BA312FF90C8FCA97F127FA216077F123F6D140FA26C6C141F6D143F000F157F6C
6C14FF01FF5B6C6D5A6CD9F01FEBFFFC6C90B500FB13FE6D02F313FF6D14E3010F14C36D
020113FE010101FC14FC9026003FE0C8FC384A7CC83E>100 D<143E147F4A7E497FA56D
5B6EC8FC143E91C9FCAC003FB57E5A81A47EC7123FB3B3007FB71280B812C0A56C16802A
4A76C93E>105 D<007FB512C0B6FC81A47EC7121FB3B3B3A5007FB712F8B812FCA56C16
F82E4978C83E>108 D<EC1FF0ECFFFE01036D7E010F14E04980017F14FC90B67E489038
F01FFFECC00748D90001138048486D13C04848EC7FE049143F4848EC1FF049140F003F16
F8491407A24848EC03FCA448C8EA01FEAA6D1403007F16FCA26D1407A2003F16F86D140F
6C6CEC1FF0A26C6CEC3FE06D147F6C6CECFFC06D5B6CD9C00713806CD9F01F13006C90B5
5A6D5C6D5C010F14E001031480010049C7FCEC1FF02F3679B43E>111
D<ED07FC3B3FFF803FFF804891B512E0B500C314F802CF8002DF806C90B7FC6CDAF80F13
80D8003FD9C00113C092C713E04A143F4AEC1FF04A15F84A140F4AEC07FCA217034A15FE
1701A318FF83A95F18FEA280170318FC6E140718F86E140FEF1FF06E143F6EEC7FE06EEC
FFC0DBC0031380EDF01F92B6120002DF14FC02CF5C02C35C02C114C0DAC07F90C7FCED0F
F892C9FCB3003FB512C04880B67EA36C5C6C5C384F7FB33E>I<903901FFF00F011F9038
FE1F8090B612BF000315FF5A5A5A393FFE003F01F01307D87FC0130190C8FC5A48157FA4
7EEE3F00D87FC091C7FC13F0EA3FFE381FFFF06CEBFFC06C14FE6C6E7EC615E0013F14F8
010780D9003F7F02007F03071380030013C0003EED3FE0007F151F48150F17F06D1407A3
7FA26D140F6D15E0161F01FCEC3FC06D14FF9026FFC00F138091B612005E485D013F5C6D
14E0D8FC0714802778007FF8C7FC2C3677B43E>115 D<147C14FC497EAD003FB712FC5A
B87EA36C5EA2260001FEC9FCB3A6173FA2EF7F80A76E14FF6D16006F5A9238C007FE9138
7FF01F92B55A6E5C6E5C6E5C6E1480020149C7FC9138003FF031437DC13E>I<000FB812
804817C04817E0A418C001C0C712014C13804C1300EE1FFE4C5AEE7FF06C484A5A4B5BC8
485B4B90C7FC4B5A4B5A4B5A4B5A4B5A4A5B4A5B4A90C8FC4A5A4A5A4A5A4A5A4A5A495B
495B4990C9FC495A495A4948EC0FC0495A4948EC1FE0485B00075B4890C8FCEA1FFC485A
485A90B8FCB9FCA46C17C07E33337CB23E>122 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fe cmtt12 13.14 31
/Fe 31 123 df<ECFFE0010713FC011FEBFF80017F14E048B67E48814815FE489038007F
FF01F8130748480101138048489038007FC049EC3FE04848141F90C8120F17F048150717
F87F1603A36CC8FC123EC9FCA2160717F0A2160F17E0161F17C0163FEE7F80A2EEFF004B
5A15034B5A4B5A4B5AED7FE04B5A4A5B4A90C7FC4A5AEC1FF84A5A4A5A4A5A495BD907FE
C8FC495A495A495A495A2601FF80EB01F04890C7EA03F8485A485A485A48B7FC5AB8FCA3
7E6C16F02D447BC338>50 D<003FB6FC4815E0B712F882826C816C16802701FC000113C0
9238007FE0161FEE0FF0A2160717F81603A6160717F0A2160FEE1FE0163FEE7FC0923801
FF80030F130090B65A5E16F08216FEEEFF8017C001FCC7EA7FE0EE1FF0EE07F8160317FC
EE01FE1600A217FF177FA717FF17FE16011603EE07FC160FEE3FF8EEFFF0003FB7FC4816
E0B812C01780EEFE006C15F86C15C030437DC238>66 D<DA07FC133C91393FFF807E91B5
12E00103ECF8FE4914FC4914FF5B90383FFE0390387FF000D9FFC0133F4849131F91C712
0F48481407485A49140348481401A2485AA248481400A25BA2007F167C90CAFCA35A5AAD
7E7EA37F003F167C17FE7FA26C7EA26C6C140117FC6C7E6D14036C6C15F86C6C14076EEB
0FF06C6D131FD97FF0EB7FE0903A3FFE03FFC06DB612806D15006D5C6D5C010014F0023F
13C0DA07FCC7FC2F457CC338>I<007FB512F8B7FC16C08216F8826C813A03F8001FFF15
07030113806F13C0167FEE3FE0161FEE0FF0A2EE07F8A2EE03FCA21601A217FE1600A417
7FAD17FF17FEA4160117FCA2160317F81607A2EE0FF0161FEE3FE0167FEEFFC04B13805D
031F1300007FB65AB75A5E5E16C093C7FC6C14F830437DC238>I<007FB712FCB87EA57E
D801FCC8FCA9177C94C7FCA6ED07C04B7EA590B6FCA79038FC000FA56F5A92C9FCA7EF0F
80EF1FC0AA007FB8FCB9FCA56C178032437DC238>I<91391FF003C091397FFC07E049B5
FC010714CF4914EF4914FF5B90387FF81F9038FFE00748EB800191C7FC4848147F485A49
143F485A161F485AA249140F123F5BA2127F90C8EA07C093C7FCA35A5AAA923807FFFC4B
13FE4B13FF7E7E6F13FE6F13FC9238000FE07F003F151FA27F121F7F163F6C7EA26C6C14
7F7F6C6C14FF6C6C5B6E5A6C6D5A90387FF81F6DB6FC6D14EF6D14CF6D148F0101140F90
3A007FFC07C0DA1FF0C7FC30457CC338>71 D<007FB612F0B712F8A56C15F0260001FCC7
FCB3B3B1007FB612F0B712F8A56C15F0254377C238>73 D<90380FFFFE90B612E0000315
F8488148814881A2273FFE000F138001F01301497F49147F4848EC3FC0A290C8121FA448
16E0A248150FB3AC6C151FA36C16C0A36D143FA36C6CEC7F806D14FF6D5B01FE130F6CB7
1200A26C5D6C5D6C5DC615E0010F49C7FC2B457AC338>79 D<003FB512F04814FEB77E16
E0826C816C813A01FC003FFEED07FF03017F81707E163F161F83160FA7161F5F163F167F
4C5A5D030790C7FCED3FFE90B65A5E5E5EA282829038FC001FED07FC6F7E150115008282
AA18E0EF01F0EF03F8A31783EE3F87263FFFE0ECC7F0486D14FFB56C7F18E07013C06C49
6D13806C496D1300CA12FC35447EC238>82 D<003FB8FC481780B9FCA53BFE0007F0003F
A9007CEE1F00C792C7FCB3B3A70107B512F04980A56D5C31437DC238>84
D<267FFFF090387FFFF0B56C90B512F8A56C496D13F0D801FCC73801FC00B3B3A66D1403
00005EA36D14076D5D6E130F6D6C495A6E133F6D6C495A6D6C495AECFF076D90B5C7FC6D
5C6D5C6D5C023F13E0020F1380DA03FEC8FC35447FC238>I<D83FFE913803FFE0486C4A
13F0B56C4913F8A36C90C76C13F06C486E13E0D80FC09138001F80A36C6CED3F00A86C6C
157EA86C6C5DEC01FC4A7EA24A7EA4D800FC9038DF01F8020F1381A3158F021F13C1A201
7C5DA2017E14C31507023F13E3A490263E3E035BA2027E13F3A2EC7C01013F14F7A3011F
5DEC7800A202F813FFA34A137F010F5DA24A133F6D486DC7FC35447FC238>87
D<001FB712F04816F85AA417F090C8121F17E0EE3FC0167F1780EEFF00A24B5A4B5A123E
C8485A4B5AA24B5A4B5AA24B5A4BC7FCA24A5A14035D4A5A140F5D4A5A143F5D4A5A14FF
92C8FC495A13035C495AA2495A495AA2495A495A17F849C7EA01FC485AA2485A485AA248
5A121F5B485A127F90B7FCB8FCA56C16F82E437BC238>90 D<003FB712804816C0B812E0
A46C16C06C16802B087A7D38>95 D<EB1FFF90B512E0000314F84814FE4880824881D9F0
017F9138003FF0ED0FF815076C486D7E6C481301C87FA21500A4EC03FF147F0107B5FC13
1F90B6FC5A000714C048EBE0004890C7FCEA3FF813E0EA7F8090C8FC5A5AA415017E6C6C
13036D13076C6CEB3FFFD9FC01B6FC6CB812807E6C816C4A7E6CECF80F6C6CD9C0031300
D90FFCC9FC31327AB038>97 D<EA3FFE487EB5FCA37E7EC67EACED3FC0913801FFF80207
13FE021F7F4A804A8091B67E03C07F9139FE001FF802F86D7E4A13034A6D7E5C707E4A80
188091C8123FA318C0171FA9173F6E1580A2177FA26EECFF00A26E495A6E13034C5A6E49
5A02FE133F6E6CB45A92B55A6E5C6E5C6E91C7FC6D6C13FCD91E0313F090C7EA7F803244
7FC238>I<EC3FFF49B512E0010714F8011F8049805B90B7FC48EBE001481300485AEA0F
F8496D5A4848147C93C7FC485A5B127F90CAFCA35A5AA97E7EA27F123F6D141F6DEC3F80
121F6C7E01FC147F6C6CECFF006C6C6C5A6C9038F00FFE91B55A6C6C5C6D5C6D5C010714
80010149C7FC9038003FF0293278B038>I<ED1FFF4B7F5DA38181ED003FACEC7F809038
03FFF0010F13FC013F13FF4914BF90B7FC5A48EBC07F48EB000FD80FFC7F497F48487F49
7F485A167F485A163F90C8FCA25A5AA97E6C157FA36D14FF123F6D5B6C7E5D6C6C5B01FC
5B6C6C133F2603FFC0B6FC6C90B712806C03BF13C06D143F6D13FC6D01F814800107D9E0
1F1300010090C9FC32447CC238>I<EC3FE0903801FFFC010713FF011F14C04980498090
B67E489038E03FFC4890380007FE48481301D80FF86D7E49804848158049143F003F16C0
49141F127F90C8FC17E0160F5A90B7FCA617C048CAFC7E7EA27FA26C7EEE07C06C6CEC0F
E07F6C7ED807FE141F6DEC3FC06C01C013FF6CD9FC0713806C90B612006D5C6D5C010F5C
010314E001001480DA1FFCC7FC2B327AB038>I<ED1FF8ED7FFE4AB5FC020714804A14C0
5C5C91387FF07F15809139FF003F804AEB1F00010191C7FC5CA9003FB612FE4881B8FCA4
6C5D260001FCC8FCB3AF003FB612E04881A56C5D2A447CC338>I<14F0497E497E497EA4
6D5A6D5A6D5A91C8FCAB383FFFFC487FB5FCA37E7EC7FCB3AF007FB612F0B712F816FCA3
16F86C15F0264476C338>105 D<387FFFFEB6FCA57EC77EB3B3B1007FB7FCB81280A56C
1600294379C238>108 D<023FEB07E03B3FE0FFC01FF8D87FF39038E07FFCD8FFF76D48
7E90B500F97F15FB6C91B612806C01C1EBF83F00030100EBE01F4902C013C0A24990387F
800FA2491400A349137EB3A73C3FFF03FFE07FFC4801879038F0FFFEB500C76D13FFA36C
01874913FE6C01039038E07FFC383080AF38>I<ED7FC03A3FFE01FFF8267FFF0713FEB5
001F7F4A805C6C90B67E6CECC07F3B007FFE001FE002F8130F4A805C16075C5CA391C7FC
B3A6273FFFFE03B512E0486D4814F0B6008F14F8A36C020714F06C496C14E035307FAF38
>I<EC7FC0903803FFF8010F13FE497F017F14C090B67E4881489038C07FF8489038001F
FC01FC130748486D7E49130148486D7E4980003F168049143F007F16C090C8121FA300FE
ED0FE0A96C151FA26C16C0A26D143FA26C6CEC7F80A26C6CECFF006D5B6C6C495A6D1307
6CB4EB1FFC6C9038C07FF86C90B55A6C5D6D5C6D5C010F49C7FC010313F89038007FC02B
327AB038>I<ED3FC03A3FFE01FFF8267FFF0713FEB5001F7F4A804A806C90B67E6C02C0
7F3B007FFE001FF802F86D7E4A13034A6D7E5C707E4A80188091C8123FA318C0171FA917
3F6E1580A2177FA26EECFF00A26E495A6E13034C5A6E495A02FE133F6E6CB45A92B55A6E
5C6E5C6E91C7FC6E13FC020313F09138007F8092C9FCB0383FFFFE487FB67EA36C91C9FC
6C5B32487FAF38>I<EEFFC0277FFFC00713F8B5D8E01F13FC037F13FE92B5FC02E114FF
14E36C01E713813A000FEFFC019139FFF000FE4B137C0380130092C8FCA25C5CA25CA25C
A45CB2007FB67EB77E82A35E6C5D30307CAF38>114 D<903907FF80F0017FEBF1F848B5
12FD000714FF5A5A5AEBFC00D87FE0131F0180130F48C71207481403A5007FEC01F001C0
90C7FCEA3FF013FE381FFFF86CEBFFC0000314F8C614FF013F1480010714E0D9003F13F0
020013F8ED0FFC1503003CEC01FE007E140000FE15FF167F7EA37F6D14FF16FE01F01303
6DEB07FC01FF137F91B512F816F016E04815C0D8FC3F1400010F13FCD8780113E0283278
B038>I<EB01E0497E1307AB003FB712804816C0B8FCA46C1680260007F0C8FCB3A4EE03
E0EE07F0A66E130F17E06D6C131F6EEB3FC0903901FF81FF92B512806D15006E5B6E5B6E
13F002075B020190C7FC2C3D7DBB38>I<D83FFE903803FFE0486C497FB55BA36C806C80
C66CEB0007B3A9160FA2161F163F6E137F6D6C13FFDAF007EBFFE091B712F06D16F87F6D
14E76D02C713F00100020313E0DA3FF8C8FC35307FAE38>I<000FB712FC4816FE5AA417
FC0180C7EA1FF8EE3FF0EE7FE0EEFFC04B13804B13006CC7485AC8485A4B5A4B5A4B5A4B
5A4A5B4A90C7FCEC07FC4A5A4A5A4A5A4A5A49485A4990C8FC495A495A495A495A494814
7C494814FE485B4890C8FC485A485A485A485A48B7FCB8FCA56C16FC2F2F7DAE38>122
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Ff cmbx12 13.14 53
/Ff 53 122 df<923807FFE092B512FC020714FF021F81027F9038007FC0902601FFF0EB
0FE04901C0497E4990C7487ED90FFC147F011F824A14FF495AA2137F5CA2715A715A715A
EF078094C8FCA7EF07FCB9FCA526007FF0C7123F171FB3B3A2003FB5D8E00FB512F8A53D
4D7ECC44>12 D<B7FCAA200A7F9D29>45 D<EA07E0EA1FF8EA3FFCEA7FFEA2B5FCA6EA7F
FEA2EA3FFCEA1FF8EA07E01010778F22>I<177817F8EE01FCA21603A2EE07F8A217F016
0FA217E0161FA2EE3FC0A21780167FA217005EA24B5AA25E1503A24B5AA25E150FA25E15
1FA24B5AA25E157FA24BC7FCA25D1401A25D1403A24A5AA25D140FA24A5AA25D143FA25D
147FA24AC8FCA25C1301A25C1303A2495AA25C130FA2495AA25C133FA25C137FA249C9FC
A25B1201A2485AA25B1207A25B120FA2485AA25B123FA25B127FA248CAFCA25AA2127CA2
2E6D79D13D>I<15F014011407141F147FEB03FF137FB6FCA313FC1380C7FCB3B3B2007F
B712E0A52B4777C63D>49 D<ECFFF80107EBFF80013F14F090B612FC4881480101EBFF80
2707F8003F13C0D80FE0010F13E0D81F806D13F0003F80D87FF06D13F86D15FC6D7F00FF
16FE6D147FA217FF82A36C5A6C5A6C5A6C5AC95A17FEA3EEFFFCA24B13F817F05D17E04B
13C017804B13004B5A4B5A5EED7FE04B5A4A5B4A90C7FCEC07FC4A5A4A5A4B131FEC3F80
4AC7FC14FE4948143E495AEB07E0495A4948147E49C8FC017E15FE90B7FC4816FC5A5A5A
5A5A5AB8FC17F8A430477AC63D>I<EC3FFE0103B512E0010F14FC013F14FF90267FE01F
7F9026FF000713E0D801FC6D7FD803F07F486C6D7FD80FFE817F486D80167FA3805C16FF
7E91C75B6C5A6C5AD80020495B90C75C5D5F4B5B5F031F90C7FCED3FFC4AB45A49B512E0
168016E016FC90C7EA3FFF030713C06F7F6F7F6F7F83707E83A2701380A318C0EA07E0EA
1FF8487E487EA2B5FCA31880A25E491600127F494A5A6C485D01E05B001F4A5BD80FFC49
5B2707FFC03F13C06C90B65AC64BC7FC013F14F8010714E09026007FFEC8FC32487BC63D
>I<EE07E0160FA2161F163F167F16FFA25D5D5DA25D5D5DA2157D15FDEC01F915F1EC03
E11407EC0FC1EC1F811501143F147E14FC14F8EB01F01303EB07E014C0EB0F80131FEB3F
00133E5B13FC485A485A5B1207485A485A90C7FC123E127E5AB912FCA5C80003EBE000AD
023FB612FCA536487DC73D>I<D8038015E001E0140301FC143F9039FFE003FF91B612C0
17801700A25E5E16F05E5E93C7FC15FC15F001E790C8FC01E0C9FCAAEC1FFC01E1B512C0
01E714F001EF14FC9039FFE01FFFDA0007138001FC6D13C001F06D13E04915F0497F17F8
C913FC167F17FEA417FFA3EA0FC0EA3FF0487EA2487EA317FEA34914FF6C4815FC5B0180
15F86CC74813F07F6C6C4913E0D80FF04913C0D807FC011F13806CB46CB512006C90B512
FC6C5D013F14C0010F91C7FC010113F030487AC63D>I<ED7FF8913807FFFE021F6D7E02
7F80903A01FFF01FE0010790388003F04948486C7E49486D7ED93FF013074948130F01FF
4A7E4849133F5C5A4890C7FCA25A705A48486E5A705A003F92C8FCA3485AA21520913807
FFE0021F13FC00FF497F4A6D7EDAFC017F9026FDF0007F4A6D7ED9FFC06D7E4A6D7E8391
C7FC8382491680A318C05BA3127FA6123FA27F001F1780A3000F4B1300A26C6C5DA26C6D
495A6C6D5C6C6D495A6D6C48485A90263FFC075B6DB65A6D4AC7FC01035C010014F0020F
90C8FC32487BC63D>I<121F7F7F13FE90B812E0A45A18C0188018005F5FA25F485E90C8
EA07E0007E4B5A5F007C151F4CC7FC167E5E485D15014B5A4B5AC8485A4B5AA24BC8FC15
7EA25D1401A24A5A1407A24A5AA2141FA24A5AA2147FA314FFA3495BA45BA55BAA6D5BA2
6D90C9FCEB007C334B79C93D>I<EC1FFF49B512F0010714FC011F14FF90263FF00713C0
49C77F01FCEC3FF04848EC0FF848481407000782491403000F821601A2121F7FA27F13FE
6D140302C05C14F002FC495A6C6D130FDAFF805B9238E01FE06C6E485A9238FCFF806C91
B5C7FC6C15FC6C5D7F6D14FE6D806D15C06D81011F81017F81D9FFDF804813072603FE01
8048486C804848133F4848010F1480003F8049130148486D6C13C0161F824848140382A2
82A2177FA218807F127FEFFF007F6C6C4A5AA2D81FFC4A5A6C6CEC0FF86C6C6CEB3FF06C
9039F003FFE06C90B612806C6C92C7FC011F14FC010714E09026003FFEC8FC32487BC63D
>I<EC1FFE49B512C0010F14F04914FC90397FFC0FFE903AFFE003FF804849C67F48496D
7E4890C7FC486F7E484881161F003F825B007F82A28300FF81A31880A518C0A45E127FA3
003F5D7F121F5E120F6C6C91B5FC6C90388001EF6CEBC0036C9038E00FCF6DB5128F011F
140F010701FE1480010113F8903800010091C7FCA24C1300A3D803F85D487E487E486C4A
5AA25F4C5AA24C5A49495B6C485D49010790C7FC01E0495AD807F8EB3FFC6CB448B45A6C
90B55A6C15C06D91C8FC011F13FC010313C032487BC63D>I<EE01F8A24C7EA34C7EA24C
7EA34C7FA24C7FA34C7FA293B57EA34B8016F303038016E316E103078016C0030F805E83
031F814C7E4B81153E83037E81037C7F03FC815D830201824B7F0203825D830207824B7F
020F825D84021F8392B8FC4A83A34A83027CC8120F02FC835C840101844A810103845C84
0107844A81010F845C85011F85496C82B600C091B712F0A5544D7CCC5D>65
D<93261FFF80EB01C00307B500F81303033F02FE13074AB7EAC00F0207EEE03F021F903A
FE007FF87F027F01E0903807FCFF91B5C70001B5FC010301FC6E7E4901F0151F4901C081
4949814990C97E494882494882485B48197F4A173F5A4A171F5A5C48190FA2485B1A07A2
5AA297C7FC91CDFCA2B5FCAD7EA280A2F207C07EA36C7FA26C190F6E18807E6E171F6C1A
006E5F6C193E6C6D177E6D6C5F6D6C4C5A6D6D15036D6D4B5A6D01F04B5A6D01FCED3FC0
010001FFEDFF806E01E0D903FEC7FC021F01FEEB3FFC020790B612F002015EDA003F92C8
FC030714FCDB001F13804A4D79CB59>67 D<B912F0F0FF8019F019FC19FFD8001F902680
000114C0DD001F7F060713F806017F726C7E737E737F737F737F8587737F8587A2747EA3
8786A21C80A51CC0A586A462A51C80A51C00A26263A2631AFF636163614F5B634F5B073F
90C7FC4F5A4F5A06035B061F5B4DB512C0BBC8FC19FC19F0198006F0C9FC524B7CCA5E>
I<BB12C0A486D8000F01E0C77E18071801F0007F193F191F190F1907861903A31901A3EF
0F80A2737EA497C7FC171FA2173F177F17FF160392B6FCA5EDE0031600177F173F171FA2
050FEC0F80A3F21F00A494C8FC621A3EA21A7EA31AFE6219011903A21907190FF13FF819
FF1803183FBBFCA262A3494A7CC951>I<BBFCA41A80D8001F01C0C7FC181F1803848419
7F193F191F1AC0190FA31907A4171FF103E0A496C7FCA25FA25F5F5E160792B6FCA5EDC0
071601828383A283A794C9FCB1B8FCA5434A7CC94D>I<93261FFF80EB01C00307B500F8
1303033F02FE13074AB7EAC00F0207EEE03F021F903AFE007FF87F027F01E0903807FCFF
91B5C70001B5FC010301FC6E7E4901F0151F4901C0814949814990C97E49488249488248
5B48197F4A173F5A4A171F5A5C48190FA2485B1A07A25AA297C8FC91CEFCA2B5FCAD6C04
0FB712C0A280A36C93C7001FEBC000A2807EA27E807E807E806C7F7E6D7E6D7E6D7F6D01
E05D6D6D5D6D13FC010001FF4AB5FC6E01E0EB07F9021F01FFEB3FF0020791B5EAE07F02
01EEC01FDA003FED0007030702F81301DB001F018090C8FC524D79CB61>I<B7D8FC01B7
12F8A5D8001F01C0C8001FEBC000B3AA92B9FCA503C0C8121FB3AEB7D8FC01B712F8A555
4B7BCA60>I<B712FEA5D8000FEBE000B3B3B3ABB712FEA5274B7DCA2E>I<B8FCA5D8001F
01C0C9FCB3B3A4193EA4197E197CA519FCA31801A2F003F8A21807180F181F183F187FEF
01FF1707173FBA12F0A53F4B7BCA4A>76 D<B600E04DB612806F5FA26F5FA2D8001F09FC
C7FC6FEF0F7FA2DABFFE171EA2DA9FFF173CA3028F6D1678A202876D16F0A202836DED01
E0A302816DED03C0A202806DED0780A26F6CED0F00A36F6C151EA26F6C5DA26F6D5CA26F
6D5CA36F6D495AA26F6D495AA26F6D495AA3706C49C7FCA2706C131EA2706C5BA3706D5A
A2706D5AA270EBE1E0A370EBF3C0A270EBFF80A27190C8FCA2715AA3715AA2715A497EB6
00F06D480103B71280A3715A715A694B7BCA74>I<B600E092B612F88181A281D8001F6D
9239001FE0006F705A82A28202BF7F029F7FA2028F7F02877F02837F8214810280806F7F
6F7F83816F7F6F7F6F7F83816F80707F707F8482707F707F707FA2707F7014807113C019
E0837113F07113F87113FC19FE837113FF71148F7213CF1AEF847213FF8484A284848485
A2858585A285858585497EB600F8167F1A3F1A1F1A0FA2554B7BCA60>I<EEFFF8031FEB
FFC04AB612FC020715FF021FD9C01F13C091277FFE000313F0902601FFF09038007FFC49
496E7E490180EC0FFF4990C86C7F49486F7F49486F7F017F8449486F7F4849707EA24849
707E4885A24849701380A2481AC04A82A2481AE0A34890CA6C13F0A5B519F8AE6C1AF0A2
6E5EA36C1AE0A26E5E6C1AC0A26C1A806E5E6C1A006E5E6C616E16FF6C616C6D4B5B6D6C
4B5B6E5D6D6D4A5B6D6D4A5B01076D4A90C7FC6D01F8ECFFFE6D01FE01035B9028007FFF
C01F13F0021F90B612C0020793C8FC020115FCDA001F14C0030101FCC9FC4D4D79CB5C>
I<B912C018FCF0FF8019F085D8001F902680000713FE05007F063F1380060F13C07213E0
1AF0841AF8A27213FCA31AFEA81AFCA34E13F8A21AF0601AE04E13C0063F138095B51200
050713FC92B75A19E096C7FC18F803C0CAFCB3ABB712FCA5474B7BCA54>I<B9FC18F8F0
FF8019E019F8D8000F9026C0000713FE9439007FFF80061F7F727F727F727F84868684A2
86A862A24E5BA2624E5B4E5B4E5B4E5B95B5C8FC050713FC92B712F0198006FCC9FC18FF
9226C0003F13C0050713F0717F717F717F187F85727FA28486A786A71C3E86A28474137E
72157C726D13FCB700FC6D9038FE01F872EBFF8373EBFFF0071F14E007031480CD383FFE
00574C7CCA5C>82 D<DA7FFCEB01C00103B5EAC003011FECF00749ECFC0F90B7121F48D9
E00F13BF4890C713FFD807FC141F4848804848140382484880177F485A173F171F12FFA2
170F7FA217077F7F7F6D92C7FC6D7E6C13F014FF15F86CECFF8016F86C15FF6C16C0836C
826C826C826C82013F816D1680010716C01300020F15E01400030714F0ED007F160F1603
7013F882177F127800F8163FA3171FA27E18F0A27EA26CEE3FE07F18C001E0157F6DEDFF
8001FC160001FF140302E0EB0FFED97FFEEB3FFC486CB612F0D8FC0F5DD8F803158048C6
6C49C7FC48010313F0354D79CB44>I<003FBB12C0A5DA80019038FC001FD9FC001601D8
7FF09438007FE001C0183F49181F90C7170FA2007E1907A3007C1903A500FC1AF0481901
A5C894C7FCB3B3A749B812FCA54C4A7CC955>I<B700F8023FB512F8A5D8001F01C0C938
0FE000745AB3B3AD6D180F63811A1F6D96C7FC626D7F1A7E6D7F6D606E6C4B5A6E6CED07
F06E6C4B5A6E01C0EC3FC06E01F049B45A020101FF011F90C8FC6E91B55A033F15F80307
15E0030092C9FC040713F0554C7CCA5E>I<B700F00203B6FCA5D8001F01E0C93803FC00
745A6D61811A036D6D5F1A076D6D5F1A0F6D616F161FA26D6D94C7FC626E6D153E1A7E6E
177C7015FC6E5F8219016E6D5D19036E5F7014076E5F82190F6E6D5D191F6E6D92C8FC61
6F153E83197E6F6D137C19FC6F6D5B18016F5DEFF003A26F01F85B18076F01FC5B180F6F
5DEFFE1F6F92C9FC17FF607013BE18FE705BA2705BA3705BA2705BA2705BA3705BA27090
CAFCA2177EA2584C7ECA5D>I<B700F84AB6FCA5D8001F01F0C93803FC006F705A6D4E5A
6D6D4C5A816D4E5A6D6D4C5A826D4EC7FC6E6D5D70157E6E5F6E7F704A5A6E4C5A6E7F70
4A5A6E4C5A6E7F71495A6E4CC8FC6F7F71137E6F5D6F7F71485A6F4A5A6F13FC71485A6F
4A5A6F13FFF09F806F02BFC9FC7013FF60705B8260705B8260B3A7037FB612FEA5584B7E
CA5D>89 D<ECFFFC010FEBFFC0017F14F090B612FC489038803FFE3B03FC0007FF80486C
6D7F6D7F486D6C7F83167F83A2707E6C90C7FC6C5A6C5AC9FCA5ED1FFF021FB5FC49B6FC
130F013FEBC03F9038FFFE00000313F04813C04890C7FC485A485AA2485AA2485AA4167F
A26D14FF007F15EF6D01017F6C6C903907CFFF806C6CD90F8F13FE6C9038E07F076C9038
FFFE0300014A7ED8003F9038F0007F0103018090C7FC37347CB23C>97
D<EB7FC0B5FCA512037EB3ED07FF037F13E002C1B512FC02C714FF9126CFF80F7F9126DF
C0017F02FFC77F4AEC3FF002F8814A6E7E717E4A81831980A37113C0A319E0AC19C0A35F
1980A219005F606E141F6E5D4D5A6E4A5A02BF4A5A91261FC0035B9027FE0FF01F5B496C
B548C7FCD9F80114F8496C6C13E0C8D80FFEC8FC3B4D7CCB44>I<91380FFF8091B512F8
010314FF010F15804948C613C0D97FF8EB1FE0D9FFE0EB3FF04849137F4849EBFFF84890
C7FCA2485A121FA24848EC7FF0EE3FE0EE1FC0007F92C7FC5BA212FFAC127FA27FA2123F
A26C6C153EA26C6C157E177C6C6D14FC6C6D14F86C6D13036C6DEB07F0D97FFCEB1FE06D
B4EBFFC0010F90B5120001035C010014F0020F13802F347CB237>I<EF1FF0EE3FFFA516
00177FB3EC0FFF91B512E0010314F8010F14FC013FEB01FF903A7FF8003FFFD9FFE0130F
48497F48497F4890C77E48815B121F5B123FA2127F5BA312FFAC127FA36C7EA3121F6D5C
120F6C6C5C6C6D5B6C5D6C01E0013F7F6D6C49EBFFE090393FFE03FE6DB512F801075C01
00148091261FFC00EBC0003B4D7CCB44>I<EC0FFF91B512F0010314FC010F14FF90263F
FE077F90267FF0007F49486D7E4801806D7E486F7E4890C7120F484881707E121F491403
003F82A2127F5B701380A212FFA390B8FCA401F8CAFCA5127FA27FA2123FA26C6CED0F80
A26C6C151F6C17006E5C6C6D147E6C6D5C6C6D495AD93FFCEB07F0903A1FFF803FE00107
90B55A010192C7FC6D6C13FC020713C031347DB238>I<ED7FF0913807FFFC023F7F4A7F
902601FFE0138049018113C049484813E0EB0FFCEB1FF8A2EB3FF0A2017F6D13C04A6C13
80EE7F00163E93C7FCACB77EA526007FF0C8FCB3B3A3003FB512F8A52B4D7DCC26>I<DA
7FFCEB0FE00103B538807FF8010F9138E1FFFC013F02FB13FE903A7FF01FFFF39026FFC0
07138348D90001130348168348486DEBC1FCEFC0F8000FEEE00049147F001F82A9000F5E
6D14FF00075EA26C6C495B6C93C7FC6C9038C007FE9138F01FFC4890B55A01EF14E0D803
C314809026C07FFCC8FC000790CAFCA47FA27F13FC90B612FCEEFFC06C16F817FE6C8218
806C17C06D16E00003B812F0120FD81FFCC7000F13F8D83FF0140049153F4848ED1FFC00
FF160F491507A56D150F007F17F86D151F6C6CED3FF06C6CED7FE0D80FFE913801FFC06C
6C6C010713806C01F8017F1300C690B612FC013F15F001071580D9003F01F0C7FC37497D
B13D>I<EB7FC0B5FCA512037EB3923801FFC0030F13F8033F7F4B13FFDBFE077F9138C1
F0039126C3E0017FDAC78080ECCF0014DE02DC6D7F14FC5CA25CA35CB3AAB6D8C07FEBFF
E0A53B4C7BCB44>I<13FCEA03FF487F487FA2487FA66C5BA26C5B6C90C7FCEA00FC90C8
FCABEB7FC0B5FCA512037EB3B3A2B61280A5194D7BCC22>I<EB7FC0B5FCA512037EB3B3
B3AAB61280A5194C7BCB22>108 D<90287FC001FFC0EC7FF0B5010F01FC0103B5FC033F
6D010F804B6D4980DBFE079026803F817F9126C1F801903AC07E007FF00003D9C3E0DAE0
F8806C9026C78000D9F1E06D7E02CFC7EBF3C002DEEDF780DD7FFF6E7E02FC93C7FC4A5D
A24A5DA34A5DB3AAB6D8C03FB5D8F00FB512FCA55E327BB167>I<903A7FC001FFC0B501
0F13F8033F7F4B13FFDBFE077F9138C1F00300039026C3E0017F6CD9C78080ECCF0014DE
02DC6D7F14FC5CA25CA35CB3AAB6D8C07FEBFFE0A53B327BB144>I<913807FF80027F13
F80103B6FC010F15C090261FFE017F903A7FF0003FF849486D7E480180EB07FE4890C76C
7E4817804980000F17C048486E13E0A2003F17F0A249157F007F17F8A400FF17FCAB007F
17F8A46C6CEDFFF0A2001F17E0A26C6C4A13C0A26C6C4A13806C6D4913006C5E6C01E0EB
1FFC6D6C495A903A3FFE01FFF0010FB612C0010392C7FCD9007F13F80207138036347DB2
3D>I<90397FC007FFB5017F13E002C1B512FC02C714FF9126CFF80F7F9126DFC0037F00
0301FFC77F6C496E7E02F8814A6E7E717E4A81831980A28319C0A37113E0AC19C05FA319
805F19005F606E143F6E5D4D5A6E4A5A02FF495BDBC0075B9126EFF01F5B02E7B548C7FC
02E114F8DAE07F13E0DB0FFEC8FC92CAFCAFB612C0A53B477CB144>I<9039FF803FE0B5
EBFFF8028113FE02837FDA87E11380EC8F830003D99F0713C06C139E14BCA214F8A24A6C
13806F13006F5A4A90C7FCA45CB3A8B612E0A52A327CB132>114
D<903907FF8070017FEBF1F048B6FC1207380FFC01391FE0003F4848130F491307127F90
C71203A2481401A27FA27F01F090C7FC13FCEBFFC06C13FEECFFE06C14FC6C806CECFF80
6C15C06C15E06C15F06C7E011F14F8010114FCEB000FEC007FED1FFE0078140F00F81407
15037E1501A27E16FC7E15036D14F86D13076D14F001F8EB1FE001FFEBFFC04890B51280
486C1400D8F81F13FCD8E00313C027347CB230>I<14F8A51301A41303A21307A2130FA2
131F133F137F13FF1203000F90B512F0B7FCA426007FF8C7FCB3A7167CAA013F14F880A2
90391FFE01F0010F1303903907FF87E06DEBFFC06D14806D6C1300EC0FFC26467EC430>
I<D97FE0EC3FF0B5EC7FFFA5000315016C81B3AC5EA25EA25E7E6EEB0F7F017F021E7F6E
017CEBFFE090393FFE01F86DB512F0010714E0010114C09027003FFE00EBC0003B337BB1
44>I<B600C090387FFFF0A5C601F0C73803F8006E5D017F5E801707013F5E6E140F011F
5E6E141F6D93C7FC6F5B6D153E81177E6D157C6F13FC6D5DEDF0016D5DEDF803027F5CA2
EDFC07023F5CEDFE0F021F5CEDFF1F6E91C8FC169F16BF6E13BE16FE6E5BA26E5BA26E5B
A36F5AA26F5AA26F5AA23C327EB041>I<B60081B500FC90387FFFF0A500019026E00003
90C73801FC006E6F5C6C6F5E6E6F1303017F61A26E6F1307013F4A5E846E49150F011F61
6E6F131F6D4A93C7FC179F03806E5B6D021F153EEF0FFE6DD9C03F5DEE3E0703E06E13FC
6D027E5DEE7C0303F015816D4A6C5C03F815C3DA7FF95E4C7E03FD15E7DA3FFF5E4C137F
19FF6E496D5BA26E94C8FC4C7FA26E5E93C7120FA26E486E5AA202015E4B1403A26E486E
5A54327EB059>I<007FB500C090387FFFE0A5C601F0C73803F8006E5D017F5E6E140701
3F5E80170F011F5E6E141F6D93C7FC6F5B6D153E6F137E6D157C6F13FCA26D6D5B16016D
5DEDF803027F5CEDFC07023F5CEDFE0F021F5C15FF161F6E91C8FC16BF6E13BE16FE6E5B
A26E5BA36E5BA26F5AA26F5AA26F5AA393C9FC5D153E157E157CD81F8013FC486C5B387F
E001D8FFF05B14035D14074A5A49485A007F133F4948CAFC383F81FE381FFFF86C5B6C13
C0C648CBFC3B477EB041>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fg cmtt12 17.28 6
/Fg 6 123 df<913803FFC0023F13FC49B67E010715F04981013F15FE498190B812C048
8348D9FC0180489026E0001F7F480180130391C87F48486F7E49153F4848ED0FFF834848
178083496F13C012FF8319E07FA2187FA36C5A6C5A6C5ACBFCA218FFA219C05FA219805F
A24D13005F604D5A173F4D5A4D5AA24C5B4C5B4C5B041F90C7FC4C5A4C5A4C5A4B5B4B5B
4B5B031F5B4B90C8FC4B5AEDFFF84A5B4A5B4A5B021F5B4A90C9FCEC7FFC4A5A495B495B
010F5B495B4948CAFC4948ED1F804948ED3FC04849ED7FE0485B000F5B4890C9FC4890B8
FC5ABAFCA56C18C06C18803B5A79D94A>50 D<383FFFF0487F80B5FCA37EA27EEA000FB0
EE0FFC93B57E030714E0031F14F84B14FE92B7FC02FD8291B87E85DCE01F7FEE000703FC
01017F4B6D7F03E0143F4B6E7E4B140F8592C87E4A6F1380A34A6F13C0A284A21AE0A219
7FAA19FFA21AC0A26E5DA24E138080606F1600606F4A5A6F143F6F4A5A6F4A5A6F130303
FF010F5BDCC03F5B93B65A6102FD93C7FC02FC5D6F5C031F14F0902607F80714C0902603
F00191C8FC90C8EA3FF043597FD74A>98 D<EC01F0EC07FC4A7EA24A7EA56E5AA26E5AEC
01F091CAFCAE001FB512FC4880815AA37EA27EC71203B3B3A8003FB812C04817E0A2B912
F0A36C17E0A26C17C0345974D84A>105 D<003FB512FE4880B77EA57E7EC71201B3B3B3
B0003FB812FC4817FEBAFCA56C17FE6C17FC385877D74A>108 D<EE0FFC263FFFF090B5
7E48D9F80714E0DAFC1F14F8B54914FE92B7FC02FD826C90B87E856CDBE01F7FD8000FEC
000703FC01017F4B6D7F03E0143F4B6E7E4B140F8592C87E4A6F1380A34A6F13C0A284A2
1AE0A2197FAA19FFA21AC0A26E5DA24E138080606F1600606F4A5A6F143F6F4A5A6F4A5A
6F130303FF010F5BDCC03F5B93B65A6102FD93C7FC02FC5D6F5C031F14F0030714C00301
91C8FC9238003FF093CAFCB3A4003FB6FC4881A2B77EA36C5DA26C92CAFC435F7FBE4A>
112 D<000FB912E04818F04818F8A619F001F0C8000313E04D13C04D13804D13004D5A4D
5A4D5A6C484A5B6C484A5BC9000F5B4C5B4C90C7FC4C5A4C5A4B5B4B5B4B5B4B5B4B5B4B
90C8FC4B5A4B5A4A5B4A5B4A5B4A5B4A5B4A90C9FC4A5A4A5A495B495B495B4949EC07E0
4949EC0FF04948C8EA1FF8495A495A485B485B485B485B4890C9FC485A48B9FCBAFCA66C
18F06C18E03D3E7BBD4A>122 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fh cmbx12 17.28 28
/Fh 28 120 df<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007
C7FCB3B3B3B3007FB91280A6395E74DD51>49 D<913801FFF8021FEBFFC091B612F80103
15FF010F16C0013F8290267FFC0114F89027FFE0003F7F4890C7000F7F48486E7FD807F8
6E148048486E14C048486E14E048486F13F001FC17F8486C816D17FC6E80B56C16FE8380
A219FFA283A36C5BA26C5B6C90C8FCD807FC5DEA01F0CA14FEA34D13FCA219F85F19F04D
13E0A294B512C019804C14004C5B604C5B4C5B604C13804C90C7FC4C5A4C5A4B13F05F4B
13804B90C8FC4B5AED1FF84B5A4B5A4B48143F4A5B4A48C8FC4A5A4A48157E4A5A4A5AEC
7F8092C9FC02FE16FE495A495A4948ED01FCD90FC0150749B8FC5B5B90B9FC5A4818F85A
5A5A5A5ABAFCA219F0A4405E78DD51>I<92B5FC020F14F8023F14FF49B712C04916F001
0FD9C01F13FC90271FFC00077FD93FE001017F49486D8049C86C7F484883486C6F7F14C0
486D826E806E82487FA4805CA36C5E4A5E6C5B6C5B6C495E011FC85A90C95CA294B55A61
4C91C7FC604C5B4C5B4C5B4C5B047F138092260FFFFEC8FC020FB512F817E094C9FC17F8
17FF91C7003F13E0040713F8040113FE707F717F7113E085717FA2717F85A285831A80A3
1AC0EA03FCEA0FFF487F487F487FA2B57EA31A80A34D14005C7E4A5E5F6C495E49C8485B
D81FF85F000F5ED807FE92B55A6C6C6C4914806C01F0010791C7FC6C9026FF803F5B6D90
B65A011F16F0010716C001014BC8FCD9001F14F0020149C9FC426079DD51>I<F01F804E
7E187F18FFA25F5F5F5FA25F5F5FA294B5FC5E5E5EA25E5EEE3FBFEE7F3FA216FEED01FC
ED03F8ED07F0A2ED0FE0ED1FC0ED3F8016005D15FE4A5A4A5AA24A5A4A5A4A5A4A5AA24A
C7FC14FE495A5C1303495A495A495A5C133F49C8FC13FE485AA2485A485A485A5B121F48
5A48C9FC12FEBCFCA6CA6CEBC000B1037FB8FCA6485E7CDD51>I<4DB5ED03C0057F02F0
14070407B600FE140F047FDBFFC0131F4BB800F0133F030F05FC137F033F9127F8007FFE
13FF92B6C73807FF814A02F0020113C3020702C09138007FE74A91C9001FB5FC023F01FC
16074A01F08291B54882490280824991CB7E49498449498449498449865D49498490B5FC
484A84A2484A84A24891CD127FA25A4A1A3F5AA348491A1FA44899C7FCA25CA3B5FCB07E
A380A27EA2F50FC0A26C7FA37E6E1A1F6C1D80A26C801D3F6C6E1A00A26C6E616D1BFE6D
7F6F4E5A7F6D6D4E5A6D6D4E5A6D6D4E5A6D6E171F6D02E04D5A6E6DEFFF806E01FC4C90
C7FC020F01FFEE07FE6E02C0ED1FF8020102F8ED7FF06E02FF913803FFE0033F02F8013F
1380030F91B648C8FC030117F86F6C16E004071680DC007F02F8C9FC050191CAFC626677
E375>67 D<B96C90B91280A6D8000102C0C9000102C0C7FCB3B3A293BBFCA604C0C91201
B3B3A6B96C90B91280A671627AE17E>72 D<B912E0A6C702E0C7FCB3B3B3B3AEB912E0A6
33627CE13C>I<B700C0083FB612F070627097B7FCA37061D800010DF8C7FC70F103EFA2
02FD6DF107CFA202FC6DF10F8FA36F6DF01F0FA26F6D183EA26F6D187CA26F6D18F8A36F
6DEF01F0A26F6DEF03E0A26F6DEF07C0A26F6DEF0F80A3706DEE1F00A2706D163EA2706D
5EA2706D5EA3706D4B5AA2706D4B5AA2706D4B5AA2706D4B5AA3716D4AC7FCA2716D143E
A2716D5CA2716D5CA3716D495AA2716D495AA2716D495AA2716D495AA3726D48C8FCA272
EBC03EA2726D5AA2726D5AA372EBF9F0A272EBFFE0A2725CA2725CA37390C9FCA2735AA2
735A90381FFFC0B700F86E480207B812F0A3735AA2735A8C627AE199>77
D<BB7E1AFCF2FFC01BF81BFE757ED800010280C7001F80070114F0736C7F081F7F747F74
7F7414807414C0A27414E0A21DF0A27513F8A41DFCA91DF8A498B512F0A21DE0A25014C0
1D8062501400505B505B087F5B4FB512E0071F5C93B9C7FC1BFC1BF01B8008F0C8FC04C0
CCFCB3B3A2B97EA65E627AE16E>80 D<001FBEFCA64849C79126E0000F148002E0180091
C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9181FA4007E1C0FA600
FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>84
D<913803FFFE027FEBFFF00103B612FE010F6F7E4916E090273FFE001F7FD97FE001077F
D9FFF801017F486D6D7F717E486D6E7F85717FA2717FA36C496E7FA26C5B6D5AEB1FC090
C9FCA74BB6FC157F0207B7FC147F49B61207010F14C0013FEBFE004913F048B512C04891
C7FC485B4813F85A5C485B5A5CA2B55AA45FA25F806C5E806C047D7F6EEB01F96C6DD903
F1EBFF806C01FED90FE114FF6C9027FFC07FC01580000191B5487E6C6C4B7E011F02FC13
0F010302F001011400D9001F90CBFC49437CC14E>97 D<903807FF80B6FCA6C6FC7F7FB3
A8EFFFF8040FEBFF80047F14F00381B612FC038715FF038F010014C0DBBFF0011F7FDBFF
C001077F93C76C7F4B02007F03F8824B6F7E4B6F13804B17C0851BE0A27313F0A21BF8A3
7313FCA41BFEAE1BFCA44F13F8A31BF0A24F13E0A24F13C06F17804F1300816F4B5A6F4A
5B4AB402075B4A6C6C495B9126F83FE0013F13C09127F00FFC03B55A4A6CB648C7FCDAC0
0115F84A6C15E091C7001F91C8FC90C8000313E04F657BE35A>I<92380FFFF04AB67E02
0F15F0023F15FC91B77E01039039FE001FFF4901F8010113804901E0010713C049018049
13E0017F90C7FC49484A13F0A2485B485B5A5C5A7113E0485B7113C048701380943800FE
0095C7FC485BA4B5FCAE7EA280A27EA2806C18FCA26C6D150119F87E6C6D15036EED07F0
6C18E06C6D150F6D6DEC1FC06D01E0EC7F806D6DECFF00010701FCEB03FE6D9039FFC03F
FC010091B512F0023F5D020F1580020102FCC7FCDA000F13C03E437BC148>I<F17FF805
0FB5FCA6EF000F8484B3A892380FFF804AB512F8020F14FE023FECFF8391B712E3010391
38807FF3499039F8000FFB011F01E00103B5FC494913004990C87E49488148498148834A
815A485BA2485BA25AA3485BA4B5FCAE7EA46C7FA37EA26C7FA26C5F806C5F6C6D5D6C6D
5D017F93B5FC6D6C6C0103806D6D49806D01F0D91FF7EBFFFE6D9039FE01FFE7010190B6
12876D6CECFE07021F14F8020314E09127003FFE00ECC0004F657BE35A>I<92380FFFC0
4AB512FC020FECFF80023F15E091B712F80103D9FE037F499039F0007FFF011F01C0011F
7F49496D7F4990C76C7F49486E7F48498048844A804884485B727E5A5C48717EA35A5C72
1380A2B5FCA391B9FCA41A0002C0CBFCA67EA380A27EA27E6E160FF11F806C183F6C7FF1
7F006C7F6C6D16FE6C17016D6C4B5A6D6D4A5A6D01E04A5A6D6DEC3FE0010301FC49B45A
6D9026FFC01F90C7FC6D6C90B55A021F15F8020715E0020092C8FC030713F041437CC14A
>I<EE3FFC0307B51280033F14C04AB612F0020715F84A9038F03FFC4AEB807F913A7FFE
00FFFE4A5A4B4813FF4913F05B4913E0A24913C0A27013FE4949EB7FFCEF3FF8EF1FF0EF
07C094C7FCB0B812C0A6D8001F01C0C8FCB3B3B0007FB612FCA638657CE431>I<F107F8
DB7FFEEC3FFE020FB5D8F001B5FC027FDAFE03148049B7128F49DCDFFD13C0010FD9F00F
EBFFC149D9800114014990C7EBFC0349486E6C7E4948EC3FFF48496E0181138007801300
48F0C03E97C7FC48496E7FA34884A96C60A36C6D4A5BA26C60A26C6D4A90C8FC6D6C4A5A
6D6C4A5A6D6D485BDBF00F5B4990B612C060D97C7F4AC9FCD9FC0F14F09126007FFECAFC
92CCFC1201A47FA27F8014F091B77E18FE6CEFFFC019F06D17FC19FF6D846D846D846D84
013F8490BAFC0003854801E0C712014890C9000F7F484816014848EE007F4848717E8512
FF5B85A56D5F007F616D173F003F616D177F6C6C4D5A6C01C003035B6C6D4B5B6C01F803
1F5BC601FF92B5C7FC6D01F8011F5B011F90B712F8010717E0010094C8FC020F15F0DA00
3F01FCC9FC4A607CC151>I<903807FF80B6FCA6C6FC7F7FB3A8EF1FFF94B512F0040714
FC041F14FF4C8193267FE07F7F922781FE001F7FDB83F86D7FDB87F07FDB8FC0814C7F03
9FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8F007B71280A651647BE35A>I<EB
0FE0EB3FF8497E48B5FCA24880A24880A76C5CA26C91C7FCA238007FFC6D5AEB0FE090C9
FCAF903807FF80007FB5FCA6C6FC7F7FB3B3AEB712C0A622657BE42C>I<903807FF80B6
FCA6C6FC7F7FB3B3B3B3ADB712E0A623647BE32C>108 D<902607FF80D91FFFEEFFF8B6
91B500F00207EBFF80040702FC023F14E0041F02FF91B612F84C6F488193267FE07F6D48
01037F922781FE001F9027E00FF0007FC6DA83F86D9026F01FC06D7F6DD987F06D4A487F
6DD98FC0DBF87EC7804C6D027C80039FC76E488203BEEEFDF003BC6E4A8003FC04FF834B
5FA24B5FA24B94C8FCA44B5EB3B2B7D8F007B7D8803FB612FCA67E417BC087>I<902607
FF80EB1FFFB691B512F0040714FC041F14FF4C8193267FE07F7F922781FE001F7FC6DA83
F86D7F6DD987F07F6DD98FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2
B7D8F007B71280A651417BC05A>I<923807FFE092B6FC020715E0021F15F8027F15FE49
4848C66C6C7E010701F0010F13E04901C001037F49496D7F4990C87F49486F7E49486F7E
48496F13804819C04A814819E048496F13F0A24819F8A348496F13FCA34819FEA4B518FF
AD6C19FEA46C6D4B13FCA36C19F8A26C6D4B13F0A26C19E06C6D4B13C0A26C6D4B13806C
6D4B13006D6C4B5A6D6D495B6D6D495B010701F0010F13E06D01FE017F5B010090B7C7FC
023F15FC020715E0020092C8FC030713E048437CC151>I<D90FFFEB0FFCB690383FFF80
93B512E04B14F04B14F8923907FC7FFC92390FE0FFFEC6EC1F806DD93F0113FF6D133E15
7E157C15F8A215F07013FEA24BEB7FFCEF3FF8EF0FE04B90C7FCA55DB3B0B712F8A63841
7BC042>114 D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48B8FC48EBE0
014890C7121FD80FFC1407D81FF0801600485A007F167F49153FA212FF171FA27F7F7F6D
92C7FC13FF14E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C826C82013F
1680010F16C01303D9007F15E0020315F0EC001F1500041F13F81607007C150100FC8117
7F6C163FA2171F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D0203130002
C0EB0FFE02FCEB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F13E035437B
C140>I<EC07E0A6140FA5141FA3143FA2147FA214FF5BA25B5B5B5B137F48B5FC000F91
B512FEB8FCA5D8001F01E0C8FCB3AFEF0FC0AC171F6D6D1480A2173F6D16006F5B6D6D13
7E6D6D5B6DEBFF836EEBFFF86E5C020F14C002035C9126003FFCC7FC325C7DDA3F>I<90
2607FFC0ED3FFEB60207B5FCA6C6EE00076D826D82B3B3A260A360A2607F60183E6D6D14
7E4E7F6D6D4948806D6DD907F0ECFF806D01FFEB3FE06D91B55A6E1500021F5C020314F8
DA003F018002F0C7FC51427BC05A>I<B70081B600FC0103B512FCA6C66C0180C701FCC8
381FFE006F6FED03F86D047F5F856F6E16076D646F70140F6D705F866F6E161F6D646F4A
6D143F6D99C7FC4E7F6F616D1B7E6F4A6D14FE6D6395B57E7001FC15016E62DCC0016E13
036EDBF87F5D05038004E0496C14076E62DCF007ED800F6E4B6C5D050F15C004F8496C14
1F6E62DCFC1FEDE03F6E4B6C92C8FC053F15F004FE496C5C6E197E7048EDF8FE6E027E6D
5C05FE15FC4D6D13FD6F601BFF6F496E5BA24D806F60A26F496E5BA24D806F60A26F496E
90C9FCA294C87E6F5FA26F486F5A047C6F5A6E417DBF75>119 D
E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fi cmsy10 10.95 1
/Fi 1 16 df<EB0FFCEB3FFF90B512C0000314F04880488048804880A2481580A3B712C0
AA6C1580A36C1500A26C5C6C5C6C5C6C5CC614C0013F90C7FCEB0FFC22227BA72D>15
D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fj cmtt10 10.95 89
/Fj 89 127 df<121C127FEAFF80B3EA7F00B2123EC7FCA8121C127FA2EAFF80A3EA7F00
A2121C09396DB830>33 D<00101304007C131F00FEEB3F80A26C137FA248133FB2007E14
00007C7F003C131E00101304191C75B830>I<903907C007C0A2496C487EA8011F131FA2
02C05BA3007FB7FCA2B81280A36C16006C5D3A007F807F80A2020090C7FCA9495BA2003F
90B512FE4881B81280A36C1600A22701FC01FCC7FCA300031303A201F85BA76C486C5AA2
29387DB730>I<EB07E0EB1FF8497E137F497E803801FC7F497E810003131F13F0A6143F
92C8FC91387F0FFF9026F87E1F1380000113FEEBF9FC13FB4A6C1300D9FFF013C06C13E0
151F02C05BEB7F809038FF003F4892C7FC485C48EB807E5A15FE391FDFC0FC383F8FE014
E1397F07F1F8EB03F300FEEBFBF0EB01FF5D7FEDC006027F130F91393F801F8015C06C13
7F6CEBFFE049EBF83F018701FC1300263FFFFBB5FC6C01F15B14E06C9038C03FFC000390
38001FF8D801FCEB07E0293A7DB830>38 D<EA07C0EA0FF0EA1FF8A213FCA213FE120F12
07EA007EA513FE13FCA2120113F81203EA07F0120FEA1FE0127FEAFFC013801300127C12
380F1D70B730>I<141E147F14FF5BEB03FEEB07FCEB0FF0EB1FE0EB3FC0EB7F80EBFF00
485A5B12035B485A120F5BA2485AA2123F5BA2127F90C7FCA412FEAD127FA47F123FA27F
121FA26C7EA27F12076C7E7F12017F6C7EEB7F80EB3FC0EB1FE0EB0FF0EB07FCEB03FEEB
01FF7F147F141E184771BE30>I<127812FE7E7F6C7E6C7EEA0FF06C7E6C7E6C7E6C7EEB
7F80133F14C0131FEB0FE014F01307A2EB03F8A214FC1301A214FE1300A4147FAD14FEA4
130114FCA2130314F8A2EB07F0A2130F14E0EB1FC0133F1480137FEBFF00485A485A485A
485AEA3FE0485A485A90C7FC5A1278184778BE30>I<14E0497E497EA60038EC0380007E
EC0FC0D8FF83EB3FE001C3137F9038F3F9FF267FFBFB13C06CB61280000FECFE00000314
F86C5C6C6C13C0011F90C7FC017F13C048B512F04880000F14FE003FECFF80267FFBFB13
C026FFF3F913E09038C3F87F0183133FD87E03EB0FC00038EC0380000091C7FCA66D5A6D
5A23277AAE30>I<143EA2147FAF007FB7FCA2B81280A36C1600A2C76CC8FCAF143EA229
297DAF30>I<EA03E0EA0FF0EA1FF813FCEA3FFEA213FFA27EA27E1203EA007FA2137E13
FEEA01FC1203EA07F8EA3FF0127FEAFFE0EA7F801300123C1019708B30>I<007FB612F0
A2B712F8A36C15F0A225077B9E30>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0
EA0F000C0C6E8B30>I<16F01501ED03F8A21507A2ED0FF0A2ED1FE0A2ED3FC0A2ED7F80
A2EDFF00A24A5AA25D1403A24A5AA24A5AA24A5AA24A5AA24A5AA24AC7FCA2495AA25C13
03A2495AA2495AA2495AA2495AA2495AA249C8FCA2485AA25B1203A2485AA2485AA2485A
A2485AA2485AA248C9FCA25AA2127CA225477BBE30>I<14FE903807FFC0497F013F13F8
497F90B57E48EB83FF4848C6138049137F4848EB3FC04848EB1FE049130F001F15F04913
07A24848EB03F8A290C712014815FCA400FEEC00FEAD6C14016C15FCA36D1303003F15F8
A26D1307001F15F0A26D130F6C6CEB1FE0A26C6CEB3FC06C6CEB7F806D13FF2601FF8313
006CEBFFFE6D5B6D5B010F13E06D5BD900FEC7FC273A7CB830>I<EB03C0497EA2130FA2
131FA2133F137F13FF1203123FB5FCA213EF138FEA7E0F1200B3B0003FB512F84814FCB6
12FEA26C14FC6C14F81F3977B830>I<EB07FC90383FFFC090B512F00003804814FE4880
261FF80F1380263FE00113C09038C0007F4848EB3FE090C7121FED0FF04814075A6C15F8
1503A3127E1218C8FCA2150716F0150F16E0151F16C0153FED7F8015FF4A13005DEC07FC
4A5A4A5A4A5A4A5A4A5A4990C7FC495A495AEB0FF0EB3FE0495A495A4890C8FC4848EB01
F04848EB03F8485AEA1FE048B6FCB7FCA37E6C15F025397BB830>I<EB03FF013F13E090
B512F84814FE4880481580260FFE0113C09038F0007F4848EB1FE0150F16F01507A26C5A
6C5AC8FC150F16E0A2151FED3FC0157FEDFF8002071300903807FFFE495B5D8115FF6D14
80D9000113C09138003FE0ED1FF0ED07F8150316FC150116FE1500A21218127EB4FCA215
0116FC4814036C15F86C6C13076DEB1FF0D83FF0133F3A1FFE01FFE06CB612C06C15806C
ECFE00C65C013F13F001031380273A7CB830>I<EC03FC4A7E140F141FA2143F147F157E
14FEA2EB01FCEB03F8A2EB07F0A2EB0FE0EB1FC0A2EB3F80A2EB7F0013FEA2485A485AA2
485AA2485A485AA2485AA248C7FC12FEB8FC1780A46C1600C8007EC7FCAA91387FFFFE91
B6FCA46E5B29397DB830>I<000FB612804815C05AA316800180C8FCAEEB83FF019F13C0
90B512F015FC8181D9FE0313809039F0007FC049133F0180EB1FE06CC7120F000E15F0C8
1207A216F81503A31218127EA2B4FC150716F048140F6C15E06C141F6DEB3FC06D137F3A
3FE001FF80261FFC0F13006CB55A6C5C6C5C6C14E06C6C1380D90FFCC7FC25397BB730>
I<EC0FF8EC7FFF49B51280010714E0131F4914F090387FF80F9039FFC007F84813803803
FE005B485A4848EB03F0ED01E0484890C7FC5B123F5BA2127FEB000C903803FFE0010F13
F8D8FF3F13FE48B6FCB7128016C09039FE007FE001F8EB1FF001E0130F49EB07F8ED03FC
5B90C7120116FE1500A37EA46C7E15016D14FC121F6D1303000FEC07F86D130F6C6CEB1F
F06DEB3FE03A03FF81FFC06C90B512806C15006D5B011F13F8010713E001011380273A7C
B830>I<127CB712FC16FEA416FC48C7EA0FF816F0ED1FE0007CEC3FC0C8EA7F80EDFF00
A24A5A4A5A5D14075D140F5D4A5AA24A5AA24AC7FCA25C5C13015CA213035CA213075CA4
495AA6131F5CA96D5A6DC8FC273A7CB830>I<49B4FC011F13F0017F13FC90B57E0003EC
FF804815C048010113E03A1FF8003FF049131FD83FC0EB07F8A24848EB03FC90C71201A5
6D1303003F15F86D13076C6CEB0FF06C6CEB1FE0D807FCEB7FC03A03FF83FF806C90B512
006C6C13FC011F13F0497F90B512FE48802607FE0013C0D80FF8EB3FE0D81FE0EB0FF048
48EB07F8491303007F15FC90C712014815FE481400A66C14016C15FC6D1303003F15F86D
1307D81FF0EB1FF06D133F3A0FFF01FFE06C90B512C06C1580C6ECFE006D5B011F13F001
0190C7FC273A7CB830>I<49B4FC010F13E0013F13F890B57E4880488048010113803A0F
FC007FC0D81FF0EB3FE04848131F49EB0FF048481307A290C7EA03F85A4815FC1501A416
FEA37E7E6D130315076C7E6C6C130F6D133FD80FFC13FF6CB6FC7E6C14FE6C14F9013FEB
E1FC010F138190380060011400ED03F8A2150716F0150F000F15E0486C131F486CEB3FC0
157FEDFF804A1300EC07FE391FF01FFC90B55A6C5C6C5C6C1480C649C7FCEB3FF0273A7C
B830>I<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F00C7FCAF120FEA3FC0EA
7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C276EA630>I<EA03C0EA0FF0EA1FF8A2EA3F
FCA4EA1FF8A2EA0FF0EA03C0C7FCAFEA03C0EA0FF0121F13F8123F13FCA3121FA2120F12
031200120113F8120313F01207EA1FE0123FEA7FC0EAFF80EA7F00127E12380E3470A630
>I<16F01503ED07F8151F157FEDFFF014034A13C0021F138091383FFE00ECFFF8495B01
0713C0495BD93FFEC7FC495A3801FFF0485B000F13804890C8FCEA7FFC5BEAFFE05B7FEA
7FF87FEA1FFF6C7F000313E06C7F38007FFC6D7E90380FFF806D7F010113F06D7FEC3FFE
91381FFF80020713C06E13F01400ED7FF8151F1507ED03F01500252F7BB230>I<007FB7
FCA2B81280A36C16006C5DCBFCA7003FB612FE4881B81280A36C1600A229157DA530>I<
1278127EB4FC13C07FEA7FF813FEEA1FFF6C13C000037F6C13F86C6C7EEB1FFF6D7F0103
13E06D7F9038007FFC6E7E91380FFF806E13C0020113F080ED3FF8151F153FEDFFF05C02
0713C04A138091383FFE004A5A903801FFF0495B010F13804990C7FCEB7FFC48485A4813
E0000F5B4890C8FCEA7FFE13F8EAFFE05B90C9FC127E1278252F7BB230>I<EC1FE0ECFF
F8010313FE010F7F4914804914C090397FF03FE09038FF800F4890380007F0D803FC1303
3A07F801FBF89038F007FF380FE01F4A13FCEA1FC0495A003FEBFF0F903800FE07903901
FC03FE007FEBF801EA7E03ECF000A2EAFE0700FC49137EAA00FE6D13FED87E0314FCA2EC
F801D87F0114F8003FEBFC03903900FE07F0903880FF0F001F90387FFFE06D6C13C0EA0F
E06E13803A07F007FE009038F801F86C6CC7127C6CB414FE6CEB800390387FF01F6DB512
FC6D14F86D14E0010314C00100EBFE00EC1FF0273A7CB830>64 D<147F4A7EA2497FA449
7F14F7A401077F14E3A3010F7FA314C1A2011F7FA490383F80FEA590387F007FA4498049
133F90B6FCA34881A39038FC001F00038149130FA4000781491307A2D87FFFEB7FFFB56C
B51280A46C496C130029397DB830>I<007FB512F0B612FE6F7E82826C813A03F8001FF8
15076F7E1501A26F7EA615015EA24B5A1507ED1FF0ED7FE090B65A5E4BC7FC6F7E16E082
9039F8000FF8ED03FC6F7E1500167FA3EE3F80A6167F1700A25E4B5A1503ED1FFC007FB6
FCB75A5E16C05E6C02FCC7FC29387EB730>I<91387F803C903903FFF03E49EBFC7E011F
13FE49EBFFFE5B9038FFE07F48EB801F3903FE000F484813075B48481303A2484813015B
123F491300A2127F90C8FC167C16005A5AAC7E7EA2167C6D14FE123FA27F121F6D13016C
6C14FCA26C6CEB03F86D13076C6CEB0FF03901FF801F6C9038E07FE06DB512C06D14806D
1400010713FC6D13F09038007FC0273A7CB830>I<003FB512E04814FCB67E6F7E6C816C
813A03F8007FF0ED1FF8150F6F7E6F7E15016F7EA2EE7F80A2163F17C0161FA4EE0FE0AC
161F17C0A3163F1780A2167F17005E4B5A15034B5A150F4B5AED7FF0003FB65A485DB75A
93C7FC6C14FC6C14E02B387FB730>I<007FB7FCB81280A47ED803F8C7123FA8EE1F0093
C7FCA4157C15FEA490B5FCA6EBF800A4157C92C8FCA5EE07C0EE0FE0A9007FB7FCB8FCA4
6C16C02B387EB730>I<003FB712804816C0B8FCA27E7ED801FCC7121FA8EE0F8093C7FC
A5153E157FA490B6FCA69038FC007FA4153E92C8FCAE383FFFF8487FB5FCA27E6C5B2A38
7EB730>I<02FF13F00103EBC0F8010F13F1013F13FD4913FF90B6FC4813C1EC007F4848
133F4848131F49130F485A491307121F5B123F491303A2127F90C7FC6F5A92C8FC5A5AA8
92B5FC4A14805CA26C7F6C6D1400ED03F8A27F003F1407A27F121F6D130F120F7F6C6C13
1FA2D803FE133F6C6C137FECC1FF6C90B5FC7F6D13FB010F13F30103EBC1F0010090C8FC
293A7DB830>I<3B3FFF800FFFE0486D4813F0B56C4813F8A26C496C13F06C496C13E0D8
03F8C7EAFE00B290B6FCA601F8C7FCB3A23B3FFF800FFFE0486D4813F0B56C4813F8A26C
496C13F06C496C13E02D387FB730>I<007FB6FCB71280A46C1500260007F0C7FCB3B3A8
007FB6FCB71280A46C1500213879B730>I<49B512F04914F85BA27F6D14F090C7EAFE00
B3B3123C127EB4FCA24A5A1403EB8007397FF01FF86CB55A5D6C5C00075C000149C7FC38
003FF025397AB730>I<D83FFF90380FFF80486D4813C0B56C5AA26C497E6C496C1380D8
03F0903803F8004B5A4B5A151F4B5A5E4BC7FC15FE14014A5A5D4A5A4A5A141F5D4A5A4A
C8FC5C13F18101F37F13F790B57E14EFECC7F01483EC03F8140101FE7F496C7E5B157F49
7F82151F82150F826F7EA26F7E1501821500D83FFF903803FFC0486D4813E0B56C5AA26C
497E6C496C13C02B387FB730>I<383FFFF8487FB57EA26C5B6C5BD801FCC9FCB3B0EE0F
80EE1FC0A9003FB7FC5AB8FCA27E6C16802A387EB730>I<D83FF8ECFFE0486C4913F048
6C4913F8A2007F16F06C6C4913E00007160001EF14BFEC800FA39039E7C01F3FA4ECE03F
01E3133EA2ECF07EA201E1137CA2ECF8FCA201E013F8A214FDEC7DF0A3147FEC3FE0A3EC
1FC0A2EC070091C7FCADD83FFC903801FFE0486C4913F0B54913F8A26C486D13F06C486D
13E02D387FB730>I<D83FFC90381FFF80486C4913C0B54913E0A26C6D6C13C06C6E1380
0003913801F800EBF7C0A3EBF3E0A314F013F1A214F8A213F014FCA2147C147EA2143E14
3FA2141FA21581A2140F15C1A2140715E1A2140315F1A21401A215F91400A3157DA3153F
EA3FFF481380B5EAC01FA26CEB800F6C496C5A2B387EB730>I<90383FFFE048B512FC00
0714FF4815804815C04815E0EBF80001E0133FD87F80EB0FF0A290C71207A44815F84814
03B3A96C1407A26C15F0A36D130FA26D131F6C6CEB3FE001F813FF90B6FC6C15C06C1580
6C1500000114FCD8003F13E0253A7BB830>I<007FB512F0B612FE6F7E16E0826C813903
F8003FED0FFCED03FE15016F7EA2821780163FA6167F17005EA24B5A1503ED0FFCED3FF8
90B6FC5E5E16804BC7FC15F001F8C9FCB0387FFFC0B57EA46C5B29387EB730>I<90383F
FFE048B512FC000714FF4815804815C04815E0EBF80001E0133F4848EB1FF049130F90C7
1207A44815F8481403B3A8147E14FE6CEBFF076C15F0EC7F87A2EC3FC7018013CF9038C0
1FFFD83FE014E0EBF80F90B6FC6C15C06C15806C1500000114FCD8003F7FEB00016E7EA2
1680157F16C0153F16E0151F16F0150FED07E025467BB830>I<003FB57E4814F0B612FC
15FF6C816C812603F8017F9138003FF0151F6F7E15071503821501A515035E1507150F4B
5A153F4AB45A90B65A5E93C7FC5D8182D9F8007FED3FE0151F150F821507A817F8EEF1FC
A53A3FFF8003FB4801C0EBFFF8B56C7E17F06C496C13E06C49EB7FC0C9EA1F002E397FB7
30>I<90390FF803C0D97FFF13E048B512C74814F74814FF5A381FF80F383FE001497E48
48137F90C7123F5A48141FA2150FA37EED07C06C91C7FC7F7FEA3FF0EA1FFEEBFFF06C13
FF6C14E0000114F86C80011F13FF01031480D9003F13C014019138007FE0151FED0FF0A2
ED07F8A2007C140312FEA56C140716F07F6DEB0FE06D131F01F8EB3FC001FF13FF91B512
80160000FD5CD8FC7F13F8D8F81F5BD878011380253A7BB830>I<003FB712C04816E0B8
FCA43AFE003F800FA8007CED07C0C791C7FCB3B1011FB5FC4980A46D91C7FC2B387EB730
>I<3B7FFFC007FFFCB56C4813FEA46C496C13FCD803F8C7EA3F80B3B16D147F00011600
A36C6C14FE6D13016D5CEC800390393FE00FF890391FF83FF06DB55A6D5C6D5C6D91C7FC
9038007FFCEC1FF02F3980B730>I<D87FFE90380FFFC0B54913E06E5AA24A7E6C486D13
C0D807F0903801FC00A26D130300035DA46C6C495AA46C6C495AA46D131F6D5CA3EC803F
013F5CA46D6C48C7FCA490380FE0FEA401075B14F1A301035BA314FB01015BA314FFA26D
5BA46E5A6E5A2B397EB730>I<D83FFC903801FFE0486C4913F000FF16F8A2007F16F06C
486D13E0D81FC09038001FC0000F1680A76D143F00071600A7000390380F803E9039F01F
C07EEC3FE0A3EC7FF0A2147D0001157CA29039F8FDF8FCA314F8A300005D01F913FCA2EC
F07CA201FD137DA2017D5CECE03DA3017F133FA2ECC01FA2013F5CA2EC800F6D486C5A2D
397FB730>I<3A3FFF01FFF84801837F02C77FA202835B6C01015B3A01FC007F806D91C7
FC00005C6D5BEB7F01EC81FCEB3F8314C3011F5B14E7010F5B14FF6D5BA26D5BA26D5BA2
6D90C8FCA4497FA2497FA2815B81EB0FE781EB1FC381EB3F8181EB7F0081497F49800001
143F49800003141F49800007140FD87FFEEB7FFFB590B5128080A25C6C486D130029387D
B730>I<D87FFF90381FFFC0B56C4813E0A46C496C13C0D803F8903803F8006D1307A26C
6C495AA26C6C5C151F6D5CEC803F013F5CECC07F011F91C7FCA290380FE0FEA214F10107
5BA2903803FBF8A201015B14FF6D5BA26E5AA36E5AB1903803FFF8497F497FA26D5B6D5B
2B387EB730>I<001FB612FC4815FE5AA490C7EA03FCED07F816F0150FED1FE016C0153F
ED7F80003E1500C85A4A5A5D14034A5A5D140F4A5A5D143F4A5A92C7FC5C495A5C130349
5A5C130F495A5C133F495A91C8FC5B4848147C4914FE1203485A5B120F485A5B123F485A
90B6FCB7FCA46C15FC27387CB730>I<007FB5FCB61280A4150048C8FCB3B3B3A5B6FC15
80A46C140019476DBE30>I<007FB5FCB61280A47EC7123FB3B3B3A5007FB5FCB6FCA46C
140019477DBE30>93 D<1307EB1FC0EB7FF0497E000313FE000FEBFF80003F14E0D87FFD
13F039FFF07FF8EBC01FEB800F38FE0003007CEB01F00010EB00401D0E77B730>I<007F
B612F0A2B712F8A36C15F0A225077B7D30>I<EB3FFC48B57E4814E04880488048809038
F00FFE9038E001FF806F7E6C48133F6C4880C8121FA491B5FC130F137F48B6FC12075A48
EBC01F383FFC00EA7FE0138048C7FC5AA46C143FA26C6C137F9038C001FF263FF80FEBFF
C06CB712E0A2000714F76C14C3C6020013C0D93FF090C7FC2B2A7CA830>97
D<EA3FFC487E12FFA2127F123F1200AAEC03FE91381FFF80027F13E091B57E90B612FC82
ECFE079138F001FF4A6C13804A137F4AEB3FC091C7121F4915E0160FA217F01607A8160F
A217E07F161F6EEB3FC0A26EEB7F806E13FFDAF00313009138FC0FFE91B55A5E495CD97E
7F13C0D93C1F90C7FC90380003FC2C3980B730>I<ECFFE0010713FC011F7F017F7F90B6
12804815C048EB807F3907FC003F485A485A49EB1F804848EB0F004990C7FC127F90C9FC
A25A5AA87E7EA27F003FEC07C06DEB0FE06C7E6D131F6C6C14C0D807FE133F9039FFC0FF
806C90B5FCC615006D5B011F13F801075B01011380232A7AA830>I<913801FFE04A7F5C
A28080EC0007AAEB03FE90381FFF874913E790B6FC5A5A481303380FFC00D81FF0133F49
131F485A150F4848130790C7FCA25AA25AA87E6C140FA27F003F141F6D133F6C7E6D137F
390FF801FF2607FE07EBFFC06CB712E06C16F06C14F76D01C713E0011F010313C0D907FC
C8FC2C397DB730>I<49B4FC010713E0011F13F8017F7F90B57E488048018113803A07FC
007FC04848133FD81FE0EB1FE0150F484814F0491307127F90C7FCED03F85A5AB7FCA516
F048C9FC7E7EA27F003FEC01F06DEB03F86C7E6C7E6D1307D807FEEB1FF03A03FFC07FE0
6C90B5FC6C15C0013F14806DEBFE00010713F8010013C0252A7CA830>I<EDFF80020713
E0021F13F05C4A13F891B5FC491387903803FE079138FC03F0903907F800C04A1300A800
3FB612C04815E0B7FCA36C15C0260007F0C7FCB3A9003FB512FE4880B71280A26C15006C
5C25397DB830>I<D903FC13FF90261FFF8713C04913DF90B712E05A5A2607FE07138F90
3AF801FE07C048486C6CC7FCA2497F001F8149133FA56D137F000F92C7FC6D5BA26C6C48
5AEBFE0790B55A5D485C15C001DF5BD9C3FCC8FC01C0C9FCA37F7F6CB512F015FF6C15C0
4815F0488148813A3FE0001FFE0180130148C8127F007E8100FE168048151FA56C153F00
7FED7F006D5C6C6C495A01F013076CB4EB7FFC6C90B55A6C5D000115C06C6C91C7FC011F
13FC010113C02B3E7DA730>I<EA3FFC487E12FFA2127F123F1200AAEC01FE91380FFF80
023F13E091B57E90B67EA29138FE07FCECF8039138E001FE14C0EC8000A291C7FCA25BB3
A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F3880B730>I<
14E0EB03F8A2497EA36D5AA2EB00E091C8FCA9381FFFF8487F5AA27E7EEA0001B3A9003F
B612C04815E0B7FCA27E6C15C023397AB830>I<EC01C0EC07F0A2EC0FF8A3EC07F0A2EC
01C091C7FCA990B512F04814F8A47EEB0003B3B3A5EC07F0A2123C007EEB0FE0B4131FEC
3FC0147F90B512806C14005C6C5B000F13F0000313C01D4E7CB830>I<EA7FF8487EA412
7F1200AB0203B512804A14C017E0A217C06E14809139001FE0004B5A4B5A4BC7FC4A5A4A
5AEC0FF84A5A4A5A4A5A4A5A01FD7F90B57E8114F7ECE3F8ECC1FCEC81FEEC00FF497F49
6D7E6F7E826F7E15076F7E6F7E3B7FFFF81FFFE0B56C4813F017F8A217F06C496C13E02D
387FB730>I<387FFFF8B57EA47EEA0001B3B3A8007FB612F0B712F8A46C15F025387BB7
30>I<02FC137E3B7FC3FF01FF80D8FFEF01877F90B500CF7F15DF92B57E6C010F138726
07FE07EB03F801FC13FE9039F803FC01A201F013F8A301E013F0B3A23C7FFE0FFF07FF80
B548018F13C0A46C486C01071380322881A730>I<EC01FE3A3FFC0FFF80267FFE3F13E0
00FF90B57E90B67E7E6C9038FE07FCC6EBF8039138E001FE14C0EC8000A291C7FCA25BB3
A23B3FFFF81FFFF8486D4813FCB500FE14FEA26C01FC14FC6C496C13F82F2880A730>I<
49B4FC010F13E0013F13F8497F90B57E0003ECFF8014013A07FC007FC04848EB3FE0D81F
E0EB0FF0A24848EB07F8491303007F15FC90C71201A300FEEC00FEA86C14016C15FCA26D
1303003F15F86D13076D130F6C6CEB1FF06C6CEB3FE06D137F3A07FF01FFC06C90B51280
6C15006C6C13FC6D5B010F13E0010190C7FC272A7CA830>I<EC03FE3A3FFC1FFF80267F
FE7F13E000FF90B57E90B612FC6C816CEBFE07C69038F001FF4A6C13804A137F4AEB3FC0
91C7121F4915E0160FA217F01607A8160FA217E07F161F6EEB3FC0A26EEB7F806E13FFDA
F00313009138FC0FFE91B55A5E495C6E13C0021F90C7FCEC03FC91C9FCAD383FFFF8487F
B57EA26C5B6C5B2C3C80A730>I<49B413F8010FEBC1FC013F13F14913FD48B6FC5A4813
81390FFC007F49131F4848130F491307485A491303127F90C7FC15015A5AA77E7E15037F
A26C6C1307150F6C6C131F6C6C133F01FC137F3907FF01FF6C90B5FC6C14FD6C14F9013F
13F1010F13C1903803FE0190C7FCAD92B512F84A14FCA46E14F82E3C7DA730>I<ED07F8
3A3FFF803FFF486DB51280B512C302CF14C06C13DF6C9038FFFC3FD8001F13E09238801F
809238000F004A90C7FC5C5C5CA25CA45CAF003FB512FC4880B7FCA26C5C6C5C2A287EA7
30>I<90381FFC1E48B5129F000714FF5A5A5A387FF007EB800100FEC7FC4880A46C143E
007F91C7FC13E06CB4FC6C13FC6CEBFF806C14E0000114F86C6C7F01037F9038000FFF02
001380007C147F00FEEC1FC0A2150F7EA27F151F6DEB3F806D137F9039FC03FF0090B6FC
5D5D00FC14F0D8F83F13C026780FFEC7FC222A79A830>I<EB0780497E131FA9003FB612
E04815F0B7FCA36C15E026001FC0C7FCB216F8ED01FCA5ECE003010FEB07F814F09138FC
1FF06DB512E06D14C016806D14009038007FFCEC1FF026337EB130>I<D83FFCEB3FFC48
6C497E00FF14FFA2007F147F003F143F00001400B3A41501A2150315076D130F903A7FC0
7FFFF891B612FC6D15FE7F6D4913FC6D9038F87FF8010001C0C7FC2F2880A630>I<3B3F
FFC07FFF80486DB512C0B515E0A26C16C06C496C13803B01F80003F000A26D130700005D
A26D130F017E5CA2017F131F6D5CA2EC803F011F91C7FCA26E5A010F137EA2ECE0FE0107
5BA214F101035BA3903801FBF0A314FF6D5BA36E5A6E5A2B277EA630>I<3B3FFFC01FFF
E0486D4813F0B515F8A26C16F06C496C13E0D807E0C7EA3F00A26D5C0003157EA56D14FE
00015DEC0F80EC1FC0EC3FE0A33A00FC7FF1F8A2147DA2ECFDF9017C5C14F8A3017E13FB
A290393FF07FE0A3ECE03FA2011F5C90390F800F802D277FA630>I<3A3FFF81FFFC4801
C37FB580A26C5D6C01815BC648C66CC7FC137FEC80FE90383F81FC90381FC3F8EB0FE3EC
E7F06DB45A6D5B7F6D5B92C8FC147E147F5C497F81903803F7E0EB07E790380FE3F0ECC1
F890381F81FC90383F80FE90387F007E017E137F01FE6D7E48486D7E267FFF80B5FCB500
C1148014E3A214C16C0180140029277DA630>I<3B3FFFC07FFF80486DB512C0B515E0A2
6C16C06C496C13803B01FC0003F000A2000014076D5C137E150F017F5C7F151FD91F805B
A214C0010F49C7FCA214E00107137EA2EB03F0157C15FCEB01F85DA2EB00F9ECFDF0147D
147FA26E5AA36E5AA35DA2143F92C8FCA25C147EA2000F13FE486C5AEA3FC1EBC3F81387
EB8FF0EBFFE06C5B5C6C90C9FC6C5AEA01F02B3C7EA630>I<001FB612FC4815FE5AA316
FC90C7EA0FF8ED1FF0ED3FE0ED7FC0EDFF80003E491300C7485A4A5A4A5A4A5A4A5A4A5A
4A5A4990C7FC495A495A495A495A495A495A4948133E4890C7127F485A485A485A485A48
5A48B7FCB8FCA46C15FE28277DA630>I<ED3FF0913803FFF8140F5C147F16F09138FFF0
0092C7FC495A5CB3A21303495A133F383FFFF0B55A5C91C8FC14C080003F7F38003FF813
076D7E1301B3A2806D7E15F091387FFFF016F8141F8014039138003FF025477BBE30>I<
127CA212FEB3B3B3AD127CA207476CBE30>I<EA7FE0EAFFFE6D7E8014F07EC66C7E1307
6D7E1301B3A2806D7E15E091387FFFE06E13F8801407141F5C4A13E09138FFE00092C7FC
495A5CB3A21303495A137F387FFFF0B5FC14C05C49C8FCEA7FE025477BBE30>I<017C13
3848B4137C48EB80FE4813C14813C348EBEFFC397FEFFFF0D8FF8713E0010713C0486C13
80D87C0113003838007C1F0C78B730>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fk cmbx12 14.4 49
/Fk 49 122 df<EEFFFC031FEBFF804AB612E0020781021F9038C00FF8913A7FFE0003FC
DAFFF0EB00FE4949EB03FF4901805B4990C7487F49485CA2495A4D7F013F6F5B5CA37190
C7FC715AEF01F894C9FCA90403B512C0BAFCA526003FFCC7120783B3B3A6003FB5D8FC03
B612C0A542547DD34B>12 D<B712F0AB240B7F9F2D>45 D<EA07F0487E487E487E487EB5
1280A76C13006C5A6C5A6C5A6C5A1111769025>I<157815FC14031407141F14FF130F00
07B5FCB6FCA2147F13F0EAF800C7FCB3B3B3A6007FB712FEA52F4E76CD43>49
D<EC3FFE0103B512E0010F14FC013F14FF90B712C048D9C07F7F2703FE000F13F8D807F8
01037FD80FE06D7F48486D7F48488001F01680486C6E13C07F486C6E13E07FA27013F0A5
6C5AA26C5AEA0FF0EA03C0C914E05EA218C05E1880A24C13005F4C5A4B5B5F4B5B5F4B5B
4B90C7FC4B5A5E4B5AED7FE04B5A4A5B4A48C8FC4A5A5D4A48EB01F04A5AEC3F804AC7FC
02FEEC03E0495A495A495A495AD91F80140749C8FC013E150F017FB7FC90B812C05A5A5A
5A5A5A5AB9FC1880A4344E79CD43>I<91380FFFC091B512FC0107ECFF80011F15E09026
3FF8077F9026FF800113FC4848C76C7ED803F86E7E491680D807FC8048B416C080486D15
E0A4805CA36C17C06C5B6C90C75AD801FC1680C9FC4C13005FA24C5A4B5B4B5B4B13C04B
5BDBFFFEC7FC91B512F816E016FCEEFF80DA000713E0030113F89238007FFE707E701380
7013C018E07013F0A218F8A27013FCA218FEA2EA03E0EA0FF8487E487E487EB57EA318FC
A25E18F891C7FC6C17F0495C6C4816E001F04A13C06C484A1380D80FF84A13006CB44A5A
6CD9F0075BC690B612F06D5D011F1580010302FCC7FCD9001F1380374F7ACD43>I<177C
17FEA2160116031607160FA2161F163F167FA216FF5D5DA25D5DED1FBFED3F3F153E157C
15FCEC01F815F0EC03E01407EC0FC01580EC1F005C147E147C5C1301495A495A5C495A13
1F49C7FC133E5B13FC485A5B485A1207485A485A90C8FC123E127E5ABA12C0A5C96C48C7
FCAF020FB712C0A53A4F7CCE43>I<D80380150ED807E0157E01FEEC03FED9FFF0137F91
B65A5F5F5F5F5F94C7FC5E5E16F016C093C8FC15F801E190C9FC01E0CAFCABEC0FFF027F
13F001E3B512FE01E76E7E9026FFF8077FDAC0017F49C713F8496E7E49143F4981496E7E
6C481680C9FC18C08218E0A418F0A3EA0FE0487E487E487E487EA418E0A35B6C484A13C0
5B491680003EC85A003F17006C6C4A5A6D5D6C6C4A5AD807F8495BD803FE01075B2701FF
C03F5B6C90B65A013F4AC7FC6D14F8010314C09026007FF8C8FC344F79CD43>I<ED0FFF
92B512E0020780021F14FC91397FFE03FE903A01FFF0007F4901C0EB3F804990C7121F49
48EC7FC0494814FF49484913E049485B01FF5C485BA2485B5AA2486F13C04A6D1380486F
1300177E94C7FC5AA291CAFC5AA21508913801FFF8020713FFB54814C04A14F04AC66C7E
023C6D7E4A6D7E4A6D7E7013804A15C0A24A15E07013F05C18F8A491C714FCA37EA67EA4
6C17F880A27E18F06C5D18E06C6D15C07E6E4913806C6D15006D6C495A6D6CEB7FFC6DB4
48485A6D90B55A010315C0010092C7FC023F13FC020713C0364F7ACD43>I<121F7F7FEB
FF8091B81280A45A1900606060A2606060485F0180C86CC7FC007EC95A4C5A007C4B5A5F
4C5A160F4C5A484B5A4C5A94C8FC16FEC812014B5A5E4B5A150F4B5AA24B5AA24B5A15FF
A24A90C9FCA25C5D1407A2140FA25D141FA2143FA4147F5DA314FFA55BAC6D5BA2EC3FC0
6E5A395279D043>I<913807FFC0027F13FC0103B67E010F15E090261FFC0113F8903A3F
E0003FFCD97F80EB0FFE49C76C7E48488048486E1380000717C04980120F18E0177FA212
1F7FA27F7F6E14FF02E015C014F802FE4913806C7FDBC00313009238F007FE6C02F85B92
38FE1FF86C9138FFBFF06CEDFFE017806C4BC7FC6D806D81010F15E06D81010115FC0107
81011F81491680EBFFE748018115C048D9007F14E04848011F14F048487F484813030300
14F8484880161F4848020713FC1601824848157F173FA2171FA2170FA218F8A27F007F17
F06D151FA26C6CED3FE0001F17C06D157F6C6CEDFF806C6C6C010313006C01E0EB0FFE6C
01FCEBFFFC6C6CB612F06D5D010F1580010102FCC7FCD9000F13C0364F7ACD43>I<9138
0FFF8091B512F8010314FE010F6E7E4901037F90267FF8007F4948EB3FF048496D7E4849
80486F7E484980824817805A91C714C05A7013E0A218F0B5FCA318F8A618FCA46C5DA37E
A25E6C7F6C5DA26C5D6C7F6C6D137B6C6D13F390387FF803011FB512E36D14C301030283
13F89039007FFE03EC00401500A218F05EA3D801F816E0487E486C16C0487E486D491380
A218005E5F4C5A91C7FC6C484A5A494A5A49495B6C48495BD803FC010F5B9027FF807FFE
C7FC6C90B55A6C6C14F06D14C0010F49C8FC010013F0364F7ACD43>I<91B5FC010F14F8
017F14FF90B712C00003D9C00F7F2707FC00017FD80FE06D7F48486E7E48C87FD87FE06E
7E7F7F486C1680A66C5A18006C485C6C5AC9485A5F4B5B4B5B4B5B4B5B4B90C7FC16FC4B
5A4B5A16C04B5A93C8FC4A5A5D14035D5D14075DA25D140FA25DAB91CAFCAAEC1FC04A7E
ECFFF8497FA2497FA76D5BA26D5BEC3FE06E5A315479D340>63 D<BA7E19FCF1FF801AF0
1AFCD8000701F0C7000F13FF060014C0071F7F070713F807017F737F747E747F747F8674
7F747F8886888688A2757EA31D8087A21DC0A51DE0A387A963A31DC0A51D80A2631D00A3
515AA2646264505B6264505B505B5090C7FCF2FFFE4F5B07075B071F5B96B512C0060F91
C8FCBB5A1AF01AC007FCC9FC19805B527CD167>68 D<BC1280A5D8000701F8C7000114C0
F0001F19071901851A7F1A3F1A1FA2F20FE0A21A07A31A03A318F81BF01A01A497C7FC17
01A317031707170F177F92B6FCA59238F8007F170F170717031701A317001B3EA31B7CA3
95C8FCA21BFCA21BF8A21A01A31A031BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F
0603B5FCBCFCA21BC0A34F517CD058>I<BB12FEA5D8000701F8C700077FF0007F191F19
0785858586861B80A21A1FA31A0FA41BC006F81307A497C7FCA31701A317031707170F17
7F92B6FCA59238F8007F170F170717031701A31700A795C9FCB3B812F8A54A517CD055>
I<B8D8C003B8FCA5D8000701F8C9001FEBE000B3AE92BAFCA503F8C9121FB3B1B8D8C003
B8FCA560527CD169>72 D<B812C0A5D8000701F8C7FCB3B3B3B2B812C0A52A527CD132>
I<027FB71280A591C76C90C7FCB3B3B3EA07F0EA1FFC487E487EA2B57EA44C5AA34A485B
7E49495BD83FF8495BD81FE05DD80FFC011F5B2707FF807F90C8FC000190B512FC6C6C14
F0011F14C0010101F8C9FC39537DD145>I<B812F8A5D8000701F8CAFCB3B3A91A7CA41A
FC1AF8A51901A31903A219071AF0190FA2191F193F197F19FF180360183F4DB5FCBB12E0
A546527CD151>76 D<B600FC073FB512FE6F61A26F96B6FCA2D80007F5C00070EF01EFA2
02EF6DEF03CFA202E76DEF078FA202E36DEF0F0FA202E16D171EA302E06D173CA26F6C17
78A26F6C17F0A26F6DED01E0A26F6DED03C0A36F6DED0780A26F6DED0F00A26F6D151EA2
6F6D5DA3706C5DA2706C5DA2706D495AA2706D495AA2706D495AA3706D49C7FCA2706D13
1EA2706D5BA2716C5BA3716C5BA271EB81E0A271EBC3C0A271EBE780A27101FFC8FCA371
5BA2715BA2725AA2725AA2D93FFC6F5AB74DB712FEA2725AA2725A77527CD180>I<BAFC
19F819FF1AE086D8000701F0C7001F13FC060113FF726C13807313C0070F13E01BF08573
13F81BFCA27313FEA41BFFA81BFEA31BFC61A21BF84F13F04F13E0614F13C04F13004E48
5A061F5B92B812F01AC04FC7FC19E003F8CBFCB3AEB812C0A550527CD15C>80
D<B912F0F0FF8019F819FF1AC0D8000701F0C714F0060F7F060113FE727F737F737F8573
7F87A2737FA387A863A2616363A24F5B4F5B4F90C8FC4F5A06035B060F13F095B512C092
B8C9FC19F819E019F89226F0000313FE9439007FFF80727F727F727F727F727F8684A286
84A787A71D1C75133EA38575137E73157C7513FC731401B86C6D9038F803F807039038FE
07F07390B512E0736C14C0080F1400CEEA7FFC5F537CD164>82 D<91260FFF80130791B5
00F85B010702FF5B011FEDC03F49EDF07F9026FFFC006D5A4801E0EB0FFD4801800101B5
FC4848C87E48488149150F001F824981123F4981007F82A28412FF84A27FA26D82A27F7F
6D93C7FC14C06C13F014FF15F86CECFF8016FC6CEDFFC017F06C16FC6C16FF6C17C06C83
6C836D826D82010F821303010082021F16801400030F15C0ED007F040714E01600173F05
0F13F08383A200788200F882A3187FA27EA219E07EA26CEFFFC0A27F6D4B13806D17006D
5D01FC4B5A01FF4B5A02C04A5A02F8EC7FF0903B1FFFC003FFE0486C90B65AD8FC0393C7
FC48C66C14FC48010F14F048D9007F90C8FC3C5479D24B>I<003FBC1280A59126C0003F
9038C0007F49C71607D87FF8060113C001E08449197F49193F90C8171FA2007E1A0FA300
7C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A553517BD05E>I<B800C00103
B612FCA5D8000701F8CAEBF000F31F80B3B3B11B3FA26D97C7FC81637F1B7E6D6D17FE50
5A6E7E505A6E6D15076E4D5A6E6D4B5A6E6D4B5A6E01F84B5A6E6DDA03FFC8FC6E6CB46C
EB0FFE6F9039F001FFF8030F90B65A030316C0DB007F92C9FC040F14F8DC007F13805E53
7CD167>I<B700FC017FB600FE91B612F0A5D8003F01C0C8001F01E0C9EBF8006F71EE0F
C06D7161876F1C1F6D7196C7FC6F8373606D1E3E6F836D7160876F1CFC6D666F4B801F01
6D66704A806E525A88704A17076E059F5F70021F80080F160F6E6570023F806EDC3E074C
C8FC8870027E5F6EDC7C03163E7002FC804F6C167E6E1C7C700101814F6C16FC6E745B70
010317016E4C6D5D060716C00580496D14036F63DDC00F16E04F6D14076F07F05BDDE01F
170F6F92C76C5D1DF8DDF03E6E141F6F98C9FCDDF87E16FC067C6E5C6FF1FE3EDDFCFC17
7E6F4A6E147C1DFFDDFFF06E14FC6F62A24E816F62A270496F5BA24E817061A295C97E70
61A270487090CAFCA37048705AA24D1601040360A27048705A84537DD18B>87
D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113F0486C6D7F6EEB3FFC
48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC020FB6FC91B7FC0107
1487013FEBF0074913803901FFFC004813F0485B485B485B4890C7FC5A5BA2485AA45EA2
6D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFFE06C9026F81FC014F0
6C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387CB641>97
D<EB3FF0B5FCA51203C6FCB3A4923801FFE0030F13FE033FEBFFC092B612F002F301017F
913AF7F8003FFEDAFFE0EB0FFF03806D7F92C76C7F4A6E7F4A824A6E7FA2727EA285A285
84A31A80AC1A00A44E5AA36118FF616E4A5BA26E4A5B6E4A5B6F495BDACFC04990C7FCDA
87F0EB7FFC913A03FE03FFF849C6B612E0496D148049011F01FCC8FC90C7000313C04154
7BD24B>I<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001
FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48
92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC
3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC
020113E033387CB63C>I<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC91
B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F484980
485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C6C
6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0FD9
003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C04901
817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C0488191
C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE01
F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03FE
903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<ED3FFC02
03B5FC020F14C0023F14E09139FFF81FF0499038C03FF849EB807F49903800FFFC495A49
5AA2495AA2EE7FF8495AEE3FF0EE0FC093C7FCAEB712E0A526007FF8C8FCB3B3A7007FB5
12FEA52E547CD329>I<DA3FFF14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F90
267FFC0F9038FF9FF09026FFE001EBF83F48496C13E0484990387FF01F4890C7D83FF813
E0489338FC0FC0F0078048486E6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A
6C6D495A6C6D485BDAFC0F5B4890B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFC
A2120FA37FA213F813FE90B7FC6C16F817FF18C06C836C836C836D828448B9FC12074848
C700031480D81FF8EC003F4848150748486F13C083485A83A56D5D007F18806D5D003F18
006C6C4B5AD80FFEED1FFC6C6C6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280010F
03FCC7FC010115E0D9000F01FCC8FC3C4F7CB543>I<EB3FF0B5FCA51203C6FCB3A4EE1F
FC93B512C0030314F0030F8092391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3
C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E
000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3
A6B612E0A51B547BD325>I<EB3FF0B5FCA51203C6FCB3A54CB512F8A59339003FFE00EF
1FF0EF3FC04D5A4DC7FCEE03FEEE07F84C5A4C5AEE7FC04CC8FC4B5A4B5AED0FF8ED1FE0
4B7E4B7EECF1FF02F37F02F77F91B6FC83159F030F7F02FE80DAF8077F4A7E6F7F6F7F83
707E82707F84707F707F82707F84707F177F717E4D13C0B6D8F003B6FCA540537CD247>
107 D<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>I<D93FF0D91FFCEDFFE0
B591B500C0010713FE030302F0011F6D7E030F6E017F8092271FE07FFCD9FF037F922A3F
001FFE01F8007F0003027C9126FF03E080C602F06DD90780137FDAF1E0038FC77FDAF3C0
159EDAF7806D01BC143F07FC8102FFC75C4A5EA24A5EA44A5EB3ACB6D8F807B6D8C03FB5
12FEA567367BB570>I<D93FF0EB1FFCB591B512C0030314F0030F8092391FE07FFC9239
3F001FFE0003027C80C602F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5CA25CA45CB3AC
B6D8F807B612C0A542367BB54B>I<913801FFE0021F13FE91B612C0010315F0010F9038
807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F48496D7F4A147F48834890C8
6C7EA24883A248486F7EA3007F1880A400FF18C0AC007F1880A3003F18006D5DA26C5FA2
6C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF80
7FFC6D90B55A010015C0023F91C8FC020113E03A387CB643>I<903A3FF001FFE0B5010F
13FE033FEBFFC092B612F002F301017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F
92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380AC1A0060A36118FFA2615F61
6E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F14
80031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B>I<90397FE003FEB590380F
FF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF
150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114
D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF81307D81FE0130148487F4980
127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C
816C816C81C681013F1580010F15C01300020714E0EC003F030713F015010078EC007F00
F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FF
C00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C387CB635>I<143EA6147EA414
FEA21301A313031307A2130F131F133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE
07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B0203
13802A4D7ECB34>I<D93FF8913801FFC0B50207B5FCA50003ED001FC61607B3AE5FA35F
A2017F5D173B177B6D6C14F3DC01E313F06D6CD907C3EBFFC0903A0FFFC03F836D90B512
03010114FE6D6C13F8020701E091C7FC42377BB54B>I<B600F00107B5FCA5000101F8C8
EA7FE06C6DED3F00A2017F163E6E157E013F167C6E15FC6D5E6F13016D5E8117036D5E6F
13076D5E6F130F6D5E6F131F6D93C7FC815F6E6C133E177E023F147C6F13FC6E5C16816E
5C16C3A26EEBE3E016E76E5C16FF6E5CA26E91C8FCA26F5AA36F5AA26F5AA26F5AA26F5A
6F5A40367DB447>I<B6D8E07FB5D8C003B512C0A5000101F0C701F0C7381FF8006E027F
ED07E06C715DA26E023F150F017F705DA26E181F013F4B6C92C7FC6E606D70143E94B5FC
6F177E6D4A6E137C03C001F315FC6D715B160303E001E114016D020702E05B03F013C06D
71485A160F03F8D9807F13076D05F85B93381F003F03FC160F027F4902FC5BDBFE3E011F
131F023F04FE90C8FC167EDBFF7C010F5B6E01FCECFF3E4C6D137E6E5FA24C7F6E5F4C7F
6E5FA24C7F6E5F4C147FA26E5F93C8123F6F5EA2033E6FC9FC5A367DB461>I<B600F001
07B5FCA5C601F8C8EA7FE06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F13016D5E
6F13036D5E8117076D6D5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E023F147C6F
13FCA26E6D5A16816EEBC1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5AA26F5AA2
6F5AA26F5AA26F5AA35E150F5E151F93C9FC5DD81FC0133E486C137E486C137C486C13FC
5D14015D14034A5A6C48485A49485A263FC07FCAFCEB81FE6CB45A6C13F000035BC690CB
FC404D7DB447>121 D E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fl cmr10 10.95 86
/Fl 86 124 df<4AB4EB0FE0021F9038E03FFC913A7F00F8FC1ED901FC90383FF03FD907
F090397FE07F80494801FF13FF4948485BD93F805C137F0200ED7F00EF003E01FE6D91C7
FC82ADB97EA3C648C76CC8FCB3AE486C4A7E007FD9FC3FEBFF80A339407FBF35>11
D<4AB4FC021F13C091387F01F0903901FC0078D907F0131C4948133E494813FF49485A13
7F1400A213FE6F5A163893C7FCAA167FB8FCA33900FE00018182B3AC486CECFF80007FD9
FC3F13FEA32F407FBF33>I<4AB47E021F13F791387F00FFEB01F8903807F001EB0FE0EB
1FC0EB3F80137F14008101FE80AEB8FCA3C648C77EB3AE486CECFF80007FD9FC3F13FEA3
2F407FBF33>I<4AB4ECFF80021FD9C00F13E0913B7F01F03F80F8903C01F80078FE003C
D907F0D93FF8130E49484948131F49484948EB7F804948484913FF137F02005CA201FE92
C7FC6FED7F0070141C96C7FCAAF13F80BBFCA3C648C76CC7FC197F193FB3AC486C4A6CEB
7FC0007FD9FC3FD9FE1FB5FCA348407FBF4C>I<121EEA7F80EAFFC0A9EA7F80ACEA3F00
AC121EAB120CC7FCA8121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A4179C019>33
D<001E130F397F803FC000FF137F01C013E0A201E013F0A3007F133F391E600F30000013
00A401E01370491360A3000114E04913C00003130101001380481303000EEB070048130E
0018130C0038131C003013181C1C7DBE2D>I<013F4C7ED9FFC04B7E2601E0E015072607
C070150F48486C4B5A023E4BC7FC48486C5D48D90FC0EB01FE003ED90EF0EB07FCDA0F3F
133E007E903A070FFFF8F8007C0200EBC1F0EE000300FC6D6C495A604D5A171F95C8FC17
3E177E177C5F16015F007C4948485A1607007E5E003E49495A020E131F003F93C9FC6C49
133E260F803C137E0238137C6C6C485B3901E0E0016CB448485AD93F0049133F90C74848
EBFFC0030F903801E0E093398007C0704B4848487E4B153C033E90381F001C4B497F03FC
133E4B150F4A48017E7F0203147C5D4A4801FCEB0380140F5D4AC7FC5C143E5C14FC5C49
5A13034948027CEB07005C4948147E011F033E5B91C8140E013E153F017E6F5B017C9238
0F803C4917380001706C5A49923801E0E0496FB45A6C48043FC7FC41497BC34C>37
D<EC0FC0EC3FF0ECF878903801F01CEB03E049487E130FEC800F011F7FA2EB3F00A5EC80
0EA25DA25DA25D6D6C5AECC1C0A2ECC38002E7C7387FFFFCEB0FEE14FC4A020713C06D48
913801FE006E5DEF00F06D7E4D5A496C5D010F1503D91DFF4A5A013893C7FC496C6C5B01
E0150E48486C6C131E00036E131C2607801F143C000F6E5B001F6D6C1370263F000714F0
6F485A48D903FE5B913801FF03486D495A0487C8FCED7FCFED3FFE6F4814386D6D5AA200
7F6E6C14786D6D6C14704B6C14F06C6C496C6C13E0001F91393E3FC0016C6C903AFC1FF0
03C03D07FC07F007FC1F800001B5D8C001B512006C6C90C7EA7FFCD90FF8EC0FF03E437C
C047>I<121EEA7F8012FF13C0A213E0A3127FEA1E601200A413E013C0A3120113801203
13005A120E5A1218123812300B1C79BE19>I<1430147014E0EB01C0EB03801307EB0F00
131E133E133C5B13F85B12015B1203A2485AA2120F5BA2121F90C7FCA25AA3123E127EA6
127C12FCB2127C127EA6123E123FA37EA27F120FA27F1207A26C7EA212017F12007F1378
7F133E131E7FEB07801303EB01C0EB00E014701430145A77C323>I<12C07E12707E7E12
1E7E6C7E7F12036C7E7F12007F1378137CA27FA2133F7FA21480130FA214C0A3130714E0
A6130314F0B214E01307A614C0130FA31480A2131F1400A25B133EA25BA2137813F85B12
015B485A12075B48C7FC121E121C5A5A5A5A145A7BC323>I<EB03C0A2805CA600F0140F
00FC143F00FE147F00FF14FF393FC3C3FC390FE187F03903F18FC03900FDBF00EB3FFCEB
0FF0EB03C0EB0FF0EB3FFCEBFDBF3903F18FC0390FE187F0393FC3C3FC39FF03C0FF00FE
147F00FC143F00F0140F00001400A6805CA220277AC32D>I<121EEA7F8012FF13C0A213
E0A3127FEA1E601200A413E013C0A312011380120313005A120E5A1218123812300B1C79
8919>44 D<B512FEA617067F961E>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A79
8919>I<ED0180ED03C01507A21680150FA216005DA2151E153EA2153C157CA2157815F8
A25D1401A25D1403A25D1407A25D140FA24AC7FCA2141E143EA2143C147CA2147814F8A2
5C1301A25C1303A25C1307A25C130FA291C8FC5BA2131E133EA25BA2137813F8A25B1201
A25B1203A25B1207A25B120FA290C9FC5AA2121E123EA2123C127CA2127812F8A25A1260
225B7BC32D>I<EB01FE90380FFFC090383F03F090387C00F849137C48487F48487F4848
EB0F80A2000F15C04848EB07E0A3003F15F0A290C712034815F8A64815FCB3A26C15F8A5
6C6CEB07F0A3001F15E0A36C6CEB0FC0A26C6CEB1F80000315006C6C133E6C6C5B017C5B
90383F03F090380FFFC0D901FEC7FC263F7DBC2D>I<EB01C013031307131F137FEA07FF
B5FC139FEAF81F1200B3B3ACEB7FF0B612F8A31D3D78BC2D>I<EB07FC90383FFF8090B5
12E03903F01FF83907C007FC390F0001FE001E6D7E001C1580003CEC7FC05AED3FE01270
B4FC6DEB1FF07FA56C5A6CC7FC120CC813E0153FA216C0157F168015FF16004A5A5D4A5A
4A5A5D4A5A4A5A4AC7FC147E147C5C495A495A495A495A49C71270133E133C5B4914E048
5A485A485A48C7120148B6FCA25A4815C0B7FCA3243D7CBC2D>I<EB07FC90383FFF8090
38F80FE03901E003F839078001FCD80F007F000E6D7E001E1580D81F80137F486C14C07F
A27F5BA2121F6C5AC8138015FF1600A24A5AA24A5A5DEC07E04A5A023FC7FCEB1FFCECFF
809038000FE0EC07F86E7E6E7E6E7E1680ED7FC0A216E0153FA216F0A2120C123F487E48
7EA316E0A249137F6CC713C01278EDFF807E6C4913006C495A3907C007FC3903F80FF0C6
B55A013F1380D907F8C7FC243F7CBC2D>I<150E151E153EA2157EA215FE1401A21403EC
077E1406140E141CA214381470A214E0EB01C0A2EB0380EB0700A2130E5BA25B5BA25B5B
1201485A90C7FC5A120E120C121C5AA25A5AB8FCA3C8EAFE00AC4A7E49B6FCA3283E7EBD
2D>I<00061403D80780131F01F813FE90B5FC5D5D5D15C092C7FC14FCEB3FE090C9FCAC
EB01FE90380FFF8090383E03E090387001F8496C7E49137E497F90C713800006141FC813
C0A216E0150FA316F0A3120C127F7F12FFA416E090C7121F12FC007015C012780038EC3F
80123C6CEC7F00001F14FE6C6C485A6C6C485A3903F80FE0C6B55A013F90C7FCEB07F824
3F7CBC2D>I<EC1FE0ECFFF8903803F03E90380FC00F90391F000780133E017EEB1FC049
133F4848137F12035B12074848EB3F80ED1F00001F91C7FC5BA2123FA3485AA214FE9038
87FF8039FF8F07E090389C01F09038B800FC01B0137E13F0497F16804914C0A2ED1FE0A3
4914F0A5127FA6123F6D14E0A2121FED3FC0A26C6C1480A20007EC7F006C6C137E6C6C5B
6C6C485A90387E07F06DB45A010F1380D903FCC7FC243F7CBC2D>I<1238123C123F90B6
12FCA316F85A16F016E00078C712010070EC03C0ED078016005D48141E151C153C5DC812
7015F04A5A5D14034A5A92C7FC5C141EA25CA2147C147814F8A213015C1303A31307A313
0F5CA2131FA6133FAA6D5A0107C8FC26407BBD2D>I<EB03FC90381FFF8090387C07E090
38F001F83901E0007C48487F48487F48C7FCED0F80121E16C0003E1407A4123FA26DEB0F
807F6C6C131F6D140001FC133E6C6C5B9038FF80786C6D5A6CEBF3E06CEBFF806C91C7FC
133F6D13C06D7F013F13F801787F48486C7E3903E01FFF48486C1380260F800313C04848
7E489038007FE0003E143F007E141F007CEC0FF01507481403A31501A46C15E0007C1403
A2007E15C06C14076CEC0F806DEB1F006C6C133ED807F05B3901FC03F86CB512E0011F13
80D903FCC7FC243F7CBC2D>I<EB03FCEB1FFF90387E07C09038FC03F048486C7E48486C
7E4848137C000F147E4848137F81003F15805B007F15C0A2151F12FF16E0A516F0A5127F
153FA36C7EA2001F147F120F6C6C13FF6D13DF000313013900F8039F90387E0F1FD91FFE
13E0EB07F090C7FCA2ED3FC0A41680157FD80F801400487E486C13FEA24A5A5D49485AEB
8007391E000FE0001F495A260FC07FC7FC3803FFFE6C13F838003FC0243F7CBC2D>I<12
1EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121EEA7F80A2EAFFC0A4EA7F80A2EA1E00
0A2779A619>I<121EEA7F80A2EAFFC0A4EA7F80A2EA1E00C7FCB3121E127FEAFF80A213
C0A4127F121E1200A412011380A3120313005A1206120E120C121C5A1230A20A3979A619
>I<007FB912E0BA12F0A26C18E0CDFCAE007FB912E0BA12F0A26C18E03C167BA147>61
D<EB1FF890B5FC3903E01FC0390F0007F0001EEB03F848EB01FC4814FE140000FE14FF7E
7FA46CC7FC123EC7EA01FEA2EC03FCEC07F815F0EC0FC0EC1F80EC3F00143E5C147814F8
5C13015CA2495AA25CAB91C7FC90C8FCA8EB0780EB1FE0A2497EA46D5AA2EB078020407B
BF2B>63 D<15074B7EA34B7EA34B7EA34B7EA34B7E15E7A2913801C7FC15C3A291380381
FEA34AC67EA3020E6D7EA34A6D7EA34A6D7EA34A6D7EA34A6D7EA349486D7E91B6FCA249
819138800001A249C87EA24982010E157FA2011E82011C153FA2013C820138151FA20178
82170F13FC00034C7ED80FFF4B7EB500F0010FB512F8A33D417DC044>65
D<B712FCEEFF8017F00001903980000FF86C6CC7EA03FE707E701380EF7FC0EF3FE0A2EF
1FF0A218F8A3170F171FA318F0A2EF3FE0177F18C0EFFF804C1300EE03FCEE0FF8EE7FE0
91B6C7FC17E091C7EA07FCEE01FE933800FF80EF7FC0EF3FE0EF1FF018F8170F18FC1707
A218FEA718FC170FA2EF1FF818F0173FEF7FE0EFFFC00403138048486C90380FFE00B85A
17E094C7FC373E7DBD40>I<DB3FF01306912603FFFE130E020F9038FF801E913A3FF007
E03E9139FF8000F8D903FEC7EA7C7ED907F8EC1EFE4948140FD93FE0140749481403495A
91C812014848150012034848167E5B000F173EA24848161EA2123F5B180E127FA3491600
12FFAC127F7F180EA2123FA27F001F171E181C6C7EA20007173C6D16386C6C1678000117
706C6C16F06EEC01E06D6C15C06D6C1403D90FF0EC07806D6CEC1F00D903FE143E902600
FF8013F891393FF007F0020FB512C0020391C7FC9138003FF037427BBF42>I<B712FCEE
FF8017E000019039C0001FF86C6C48EB03FEEE00FF717E717EEF0FE084717E717E170184
717EA21980187F19C0A3F03FE0A519F0AB19E0A5F07FC0A21980A218FF19004D5AA24D5A
6017074D5A4D5AEF7FC04DC7FCEE03FE48486CEB1FF8B85A178004FCC8FC3C3E7DBD45>
I<B912E0A300019038C000016C6C48EB001FEF0FF01703A217011700A31870A41838161C
A41800A2163CA2167C16FC150391B5FCA3EC80031500167C163CA2161CA21807A3180E93
C7FCA4181E181CA2183CA2187CA218F8170117031707171F48486CEB01FFB912F0A3383E
7DBD3E>I<B91280A300019038C000036C6C48EB007FEF1FC0170F1707A21703A31701A4
EF00E0A21638A31800A31678A216F81501150791B5FCA3EC8007150115001678A21638A6
93C8FCAF3801FFE0B612F0A3333E7DBD3B>I<DB3FE0130C912603FFFE131C021F9038FF
803C913A7FF00FC07C9139FF0001F0D903FC90380078FC4948143DD91FE0141F4948140F
4948140701FF15034890C8FC491501485A000716005B000F177C5B001F173CA2485AA218
1C127FA25B95C7FC12FFAB041FB512F0127FA26D9139000FFE00EF03FC123FA27F121FA2
6C7EA212077F12036C7E7F6C7F6D6C14076D7E6D6C140FD907F8141ED903FEEC3C7C9026
00FF80EBF83C913A7FF007F01C021FB5EAC00C020391C8FC9138003FF03C427BBF47>I<
B6D8C01FB512F8A3000101E0C7383FFC0026007F80EC0FF0B3A691B7FCA30280C7120FB3
A92601FFE0EC3FFCB6D8C01FB512F8A33D3E7DBD44>I<B612F0A3C6EBF000EB3FC0B3B3
B2EBFFF0B612F0A31C3E7EBD21>I<011FB512FCA3D9000713006E5A1401B3B3A6123FEA
7F80EAFFC0A44A5A1380D87F005B007C130700385C003C495A6C495A6C495A2603E07EC7
FC3800FFF8EB3FC026407CBD2F>I<B600C090387FFFFCA3000101E0C7000F138026007F
80913807FE0018F818E0604D5A4DC7FC173E5F5F4C5A4C5A4C5A4C5A4CC8FC163E5E5E4B
5A4B5AED07804B7E151F4B7E4B7E15FF913881EFF8913883C7FCEC878791388F03FE9138
9E01FF14BCDAF8007F4A6D7E5C4A6D7E4A6D7EA2707E707EA2707E707EA2707F717E8417
3F717E717EA2717E848419802601FFE04A13C0B600C090B6FCA3403E7DBD47>I<B612F8
A3000101E0C9FC38007F80B3B0EF0380A517071800A45FA35FA25F5F5F4C5A160748486C
133FB8FCA3313E7DBD39>I<B500C093383FFFF0A300016D93387FF800D8007F18E0D977
F016EFA3D973F8ED01CFA2D971FCED038FA3D970FEED070FA26E150E80A26E6C141CA36E
6C1438A26E6C1470A36E6C14E0A26E6CEB01C0A36E6CEB0380A36E6CEB0700A2037F130E
A36F6C5AA26F6C5AA36F6C5AA25FED07F0A2923803F9C0A36FB45AA26F90C7FCA213F848
6C147ED807FFEF3FF8B500F8013C011FB512F0A34C3E7DBD53>I<B56C91B512F88080D8
007F030713006EEC01FC6E6E5A1870EB77FCEB73FEA2EB71FF01707FA26E7E6E7EA26E7E
6E7EA26E7E6E7EA26E7E6E7FA26F7E6F7EA26F7E6F7EA26F7E6F7EA26F7E6F1380A2EE7F
C0EE3FE0A2EE1FF0EE0FF8A2EE07FCEE03FEA2EE01FF7013F0A2177F173FA2171F170FA2
170701F81503487ED807FF1501B500F81400A218703D3E7DBD44>I<ED7FE0913807FFFE
91391FC03F8091397E0007E04948EB03F8D907F0EB00FE4948147F49486E7E49486E7E49
C86C7E01FE6F7E00018349150300038348486F7EA248486F7EA2001F188049167F003F18
C0A3007F18E049163FA300FF18F0AC007F18E06D167FA4003F18C0A26C6CEEFF80A36C6C
4B1300A26C6C4B5A00035F6D150700015F6C6C4B5A6D5E6D6C4A5A6D6C4A5A6D6C4AC7FC
6D6C14FED901FCEB03F8D9007FEB0FE091391FC03F80912607FFFEC8FC9138007FE03C42
7BBF47>I<B712F8EEFF8017E000019039C0003FF86C6C48EB07FCEE01FE707EEF7F80EF
3FC018E0A2EF1FF0A218F8A818F0A2EF3FE0A218C0EF7F80EFFF004C5AEE07FCEE3FF091
B612C04CC7FC0280C9FCB3A73801FFE0B612C0A3353E7DBD3E>I<ED7FE0913807FFFE91
391FC03F8091397F000FE0D901FCEB03F8D907F0EB00FE4948147F49486E7E49486E7E49
C86C7E498248486F7E49150300038348486F7EA2000F834981001F1880A24848EE7FC0A3
007F18E0A249163FA200FF18F0AC007F18E0A26D167FA3003F18C0A26C6CEEFF80A3000F
18006D5D0007DA0F805B6C6C90393FE003FCED70706C6C496C485A6C6C48486C485A017F
D9800E5BD93F819038061FC0D91FC19038073F80D90FE14AC7FCD907F1EB03FE902601FD
C013F8903A007EE007E091271FF03FC013180207B5FC9139007FE1E0DB00011438837113
78A2706C13F0EFFF0318FFA27113E0A37113C0711380711300715AEF01F83D527BBF47>
I<B712C016FCEEFF800001D9C00013E06C6C48EB1FF0EE07FCEE01FE707E84717EA2717E
A284A760177F606017FF95C7FCEE01FCEE07F8EE1FE0EEFF8091B500FCC8FC16F0913880
01FCED003FEE1FC0707E707E83160383160183A383A484A4F0C004190EA28218E0057F13
1E2601FFE0161CB600C0EB3FF094381FF83805071370CA3801FFE09438003F803F407DBD
43>I<D907FC130C90391FFF801C017FEBF03C3901FC03F83A03F0007E7CD807C0EB1FFC
4848130F001F140748C71203003E1401007E1400A2007C157C12FCA2163CA36C151CA27E
A26C6C14007F7FEA3FF8EBFF806C13F86CEBFF806C14F06C14FC6C14FF6C15C0013F14E0
010714F0EB007F020713F89138007FFC150FED07FE15031501ED00FFA200E0157FA3163F
A27EA3163E7E167E6C157C6C15FC6C15F86D13016DEB03F06DEB07E0D8F9FCEB0FC03AF0
7F803F8090391FFFFE00D8E00713F839C0007FC028427BBF33>I<003FB91280A3903AF0
007FE001018090393FC0003F48C7ED1FC0007E1707127C00781703A300701701A548EF00
E0A5C81600B3B14B7E4B7E0107B612FEA33B3D7DBC42>I<B600C090B512F8A3000101E0
C70007130026007F80EC01FC715A1870B3B3A4013F16F06E5DA21701011F5E80010F1503
6E4A5A010793C7FC6D6C5C6D6C141E6D6C5C027F14F86E6C485A91390FF00FE00203B512
80020049C8FCED1FF03D407DBD44>I<B691380FFFFEA3000301E0020113E06C01809138
007F806CEF3F00017F163E181C6E153C013F1638A26E1578011F1670A26D6C5DA26E1401
01075EA26E140301035EA26D6C4AC7FCA2806D150EA26F131E027F141CA26F133C023F14
38A26E6C5BA26F13F0020F5CA2EDF80102075CA26E6C485AA2EDFE07020191C8FCA26F5A
6E130EA2ED7F9CA216DCED3FF8A36F5AA36F5AA26F5AA36F5A3F407EBD44>I<B500FE01
7FB5D88007B5FCA3000301C0010101E0C713F86C90C849EC3FE07148EC0F807E7215006E
143F017F190E84A26D6C60A24D7E6D6C60A2EFE7F86D6C60A2933801C3FC6E18F0010761
04037F6E0281140101036104077F17006D6C4D5AA2040EEB7F806D6C4DC7FCA24CEB3FC0
DA7F80160EA24CEB1FE003C0161E023F171C047814F0DBE070010F133C021F173804F014
F84C1307DA0FF05EA2DBF1C0EB03FCDA07F95EA2DBFB80EB01FEDA03FF6F5AA293C8FCA2
6E5FA24B157F020094C8FCA24B81037C153EA20378151E0338151C58407EBD5D>I<007F
B5D8C003B512E0A3C649C7EBFC00D93FF8EC3FE06D48EC1F806D6C92C7FC171E6D6C141C
6D6C143C5F6D6C14706D6D13F04C5ADA7FC05B023F13036F485ADA1FF090C8FC020F5BED
F81E913807FC1C163C6E6C5A913801FF7016F06E5B6F5AA26F7E6F7EA28282153FED3BFE
ED71FF15F103E07F913801C07F0203804B6C7EEC07004A6D7E020E6D7E5C023C6D7E0238
6D7E14784A6D7E4A6D7F130149486E7E4A6E7E130749C86C7E496F7E497ED9FFC04A7E00
076DEC7FFFB500FC0103B512FEA33F3E7EBD44>I<B66C0103B51280A3000101F0C8EBF8
006C6C48ED3FC0725A013F041EC7FC6D7E606D6C15386D6C1578606D6C5D6E14016D5E6D
6D1303606E6C49C8FC6E6C5B170E6E6C131E171C6E6C5B6E6C137817706E6C13F06F5B6E
13016EEB83C05FED7FC7DB3FE7C9FC16EFED1FFE5E150F6F5AB3A4ED1FFC020FB512FCA3
413E7FBD44>I<003FB712F8A391C7EA1FF013F801E0EC3FE00180EC7FC090C8FC003EED
FF80A2003C4A1300007C4A5A12784B5A4B5AA200704A5AA24B5A4B5AA2C8485A4A90C7FC
A24A5A4A5AA24A5AA24A5A4A5AA24A5A4A5AA24990C8FCA2495A4948141CA2495A495AA2
495A495A173C495AA24890C8FC485A1778485A484815F8A24848140116034848140F4848
143FED01FFB8FCA32E3E7BBD38>I<EAFFFCA4EAF000B3B3B3B3ABEAFFFCA40E5B77C319>
I<486C13C00003130101001380481303000EEB070048130E0018130C0038131C00301318
0070133800601330A300E01370481360A400CFEB678039FFC07FE001E013F0A3007F133F
A2003F131F01C013E0390F0007801C1C73BE2D>I<EAFFFCA4EA003CB3B3B3B3ABEAFFFC
A40E5B7FC319>I<EB0FF8EBFFFE3903F01F8039078007E0000F6D7E9038E001F8D81FF0
7F6E7EA3157F6C5AEA0380C8FCA4EC1FFF0103B5FC90381FF87FEB7F803801FC00EA07F8
EA0FE0485A485AA248C7FCEE038012FEA315FFA3007F5BEC03BF3B3F80071F8700261FC0
0E13CF3A07F03C0FFE3A01FFF807FC3A003FC001F0292A7DA82D>97
D<EA01FC12FFA3120712031201B1EC03FC91381FFF8091387C07E09039FDE001F09039FF
C000FC4A137E91C77E49158049141F17C0EE0FE0A217F0A2160717F8AA17F0A2160FA217
E0161F17C06D1580EE3F006D5C6E13FE9039F3C001F89039F1E003F09039E0780FC09026
C03FFFC7FCC7EA07F82D407EBE33>I<49B4FC010F13E090383F00F8017C131E4848131F
4848137F0007ECFF80485A5B121FA24848EB7F00151C007F91C7FCA290C9FC5AAB6C7EA3
003FEC01C07F001F140316806C6C13076C6C14000003140E6C6C131E6C6C137890383F01
F090380FFFC0D901FEC7FC222A7DA828>I<ED01FC15FFA3150715031501B114FF010713
E190381F80F990387E003D49131FD803F81307485A49130348481301121F123F5B127FA2
90C7FCA25AAA7E7FA2123FA26C7E000F14037F000714076C6C497E6C6C497ED8007C0179
13F890383F01F190380FFFC1903A01FE01FC002D407DBE33>I<EB01FE90380FFFC09038
3F03F09038FC01F848486C7E4848137E48487F000F158049131F001F15C04848130FA212
7F16E090C7FCA25AA290B6FCA290C9FCA67EA27F123F16E06C7E1501000F15C06C6C1303
6DEB07806C6C1400C66C131E017E5B90381F80F8903807FFE0010090C7FC232A7EA828>
I<EC1FC0EC7FF8903801F83C903807E07E90380FC0FFEB1FC1EB3F811401137FEC00FE01
FE137C1500AEB6FCA3C648C7FCB3AE487E007F13FFA320407EBF1C>I<167C903903F801
FF903A1FFF078F8090397E0FDE1F9038F803F83803F001A23B07E000FC0600000F6EC7FC
49137E001F147FA8000F147E6D13FE00075C6C6C485AA23901F803E03903FE0FC026071F
FFC8FCEB03F80006CAFC120EA3120FA27F7F6CB512E015FE6C6E7E6C15E06C810003813A
0FC0001FFC48C7EA01FE003E140048157E825A82A46C5D007C153E007E157E6C5D6C6C49
5A6C6C495AD803F0EB0FC0D800FE017FC7FC90383FFFFC010313C0293D7EA82D>I<EA01
FC12FFA3120712031201B1EC01FE913807FFC091381E07E091387803F09138E001F8D9FD
C07F148001FF6D7E91C7FCA25BA25BB3A6486C497EB5D8F87F13FCA32E3F7DBE33>I<EA
01E0EA07F8A2487EA46C5AA2EA01E0C8FCACEA01FC127FA3120712031201B3AC487EB512
F0A3143E7DBD1A>I<1478EB01FEA2EB03FFA4EB01FEA2EB00781400AC147FEB7FFFA313
017F147FB3B3A5123E127F38FF807E14FEA214FCEB81F8EA7F01387C03F0381E07C0380F
FF803801FC00185185BD1C>I<EA01FC12FFA3120712031201B292B51280A392383FFC00
16E0168093C7FC153C5D5D4A5AEC07C04A5A4AC8FC143E147F4A7E13FD9038FFDFC0EC9F
E0140F496C7E01FC7F496C7E1401816E7E81826F7E151F826F7EA282486C14FEB539F07F
FFE0A32B3F7EBE30>I<EA01FC12FFA3120712031201B3B3B1487EB512F8A3153F7DBE1A>
I<2701F801FE14FF00FF902707FFC00313E0913B1E07E00F03F0913B7803F03C01F80007
903BE001F87000FC2603F9C06D487F000101805C01FBD900FF147F91C75B13FF4992C7FC
A2495CB3A6486C496CECFF80B5D8F87FD9FC3F13FEA347287DA74C>I<3901F801FE00FF
903807FFC091381E07E091387803F000079038E001F82603F9C07F0001138001FB6D7E91
C7FC13FF5BA25BB3A6486C497EB5D8F87F13FCA32E287DA733>I<14FF010713E090381F
81F890387E007E01F8131F4848EB0F804848EB07C04848EB03E0000F15F04848EB01F8A2
003F15FCA248C812FEA44815FFA96C15FEA36C6CEB01FCA3001F15F86C6CEB03F0A26C6C
EB07E06C6CEB0FC06C6CEB1F80D8007EEB7E0090383F81FC90380FFFF0010090C7FC282A
7EA82D>I<3901FC03FC00FF90381FFF8091387C0FE09039FDE003F03A03FFC001FC6C49
6C7E91C7127F49EC3F805BEE1FC017E0A2EE0FF0A3EE07F8AAEE0FF0A4EE1FE0A2EE3FC0
6D1580EE7F007F6E13FE9138C001F89039FDE007F09039FC780FC0DA3FFFC7FCEC07F891
C9FCAD487EB512F8A32D3A7EA733>I<02FF131C0107EBC03C90381F80F090397F00387C
01FC131CD803F8130E4848EB0FFC150748481303121F485A1501485AA448C7FCAA6C7EA3
6C7EA2001F14036C7E15076C6C130F6C7E6C6C133DD8007E137990383F81F190380FFFC1
903801FE0190C7FCAD4B7E92B512F8A32D3A7DA730>I<3901F807E000FFEB1FF8EC787C
ECE1FE3807F9C100031381EA01FB1401EC00FC01FF1330491300A35BB3A5487EB512FEA3
1F287EA724>I<90383FC0603901FFF8E03807C03F381F000F003E1307003C1303127C00
78130112F81400A27E7E7E6D1300EA7FF8EBFFC06C13F86C13FE6C7F6C1480000114C0D8
003F13E0010313F0EB001FEC0FF800E01303A214017E1400A27E15F07E14016C14E06CEB
03C0903880078039F3E01F0038E0FFFC38C01FE01D2A7DA824>I<131CA6133CA4137CA2
13FCA2120112031207001FB512C0B6FCA2D801FCC7FCB3A215E0A912009038FE01C0A2EB
7F03013F138090381F8700EB07FEEB01F81B397EB723>I<D801FC14FE00FF147FA30007
14030003140100011400B3A51501A31503120015076DEB06FF017E010E13806D4913FC90
381FC078903807FFE00100903880FE002E297DA733>I<B539E00FFFE0A32707FE000313
006C48EB00FC5E00015D7F00005DA26D13016D5CA26D6C485AA2ECC007011F91C7FCA290
380FE00EA2ECF01E0107131CA26D6C5AA2ECFC7801011370A2ECFEF001005BA2EC7FC0A3
6E5AA26EC8FCA3140E2B287EA630>I<B53BC3FFFE03FFF8A3290FFE003FE00013C06C48
6D48EB3F806C4817006D010F141E00016F131C15076D163C00004A6C1338A2017F5E4B7E
151DD93F805DED3DFC1538D91FC04A5AED78FE9238707E03D90FE0017F5BEDE03F02F014
0701070387C7FC9138F1C01F02F9148F010315CE9138FB800F02FF14DE6D15FCED00076D
5DA24A1303027E5CA2027C1301023C5C023813003D287EA642>I<B539F01FFFE0A30003
D9C00F1300C690388007F8D97F0013E002805BD93FC05B011F49C7FC90380FE00EECF01E
6D6C5A01035B6D6C5A6E5AEB00FF6E5A6E5A81141F814A7E81147BECF1FC903801E1FEEC
C0FF01037F49486C7ED90F007F011E6D7E013E130F496D7E01FC80486C80000F4A7EB539
803FFFF8A32D277FA630>I<B539E00FFFE0A32707FE000313006C48EB01FC6F5A00015D
7F00005DA2017F495AA2EC8003013F5CA26D6C48C7FCA26E5A010F130EA26D6C5AA2ECF8
3C01031338A26D6C5AA2ECFEF001005BA2EC7FC0A36E5AA36EC8FCA2140EA2141E141C14
3C1438A2147800181370127EB45BA2495AA248485AD87E07C9FCEA780EEA3C3CEA1FF8EA
07E02B3A7EA630>I<001FB61280A2EBE0000180140049485A001E495A121C4A5A003C49
5A141F00385C4A5A147F5D4AC7FCC6485AA2495A495A130F5C495A90393FC00380A2EB7F
80EBFF005A5B484813071207491400485A48485BA248485B4848137F00FF495A90B6FCA2
21277EA628>I<B812F0A22C0280982D>I E
%EndDVIPSBitmapFont
%DVIPSBitmapFont: Fm cmbx12 20.736 9
/Fm 9 123 df<92380FFFE04AB67E020F15F0027F15FE49B87E4917E0010F17F8013F83
49D9C01F14FF9027FFFC0001814801E06D6C80480180021F804890C86C8048486F804848
6F8001FF6F804801C06E8002F081486D18806E816E18C0B5821BE06E81A37214F0A56C5B
A36C5B6C5B6C5B000313C0C690C9FC90CA15E060A34E14C0A21B80601B0060626295B55A
5F624D5C624D5C4D91C7FC614D5B4D13F04D5B6194B55A4C49C8FC4C5B4C5B4C13E04C5B
604C90C9FCEE7FFC4C5A4B5B4B5B4B0180EC0FF04B90C8FC4B5A4B5A4B48ED1FE0EDFFE0
4A5B4A5B4A90C9FC4A48163F4A5ADA3FF017C05D4A48167F4A5A4990CA12FFD903FC1607
49BAFC5B4919805B5B90BBFC5A5A5A5A481A005A5ABCFCA462A44C7176F061>50
D<92383FFFF80207B612E0027F15FC49B87E010717E0011F83499026F0007F13FC4948C7
000F7F90B502036D7E486E6D806F6D80727F486E6E7F8486727FA28684A26C5C72806C5C
6D90C8FC6D5AEB0FF8EB03E090CAFCA70507B6FC041FB7FC0303B8FC157F0203B9FC021F
ECFE0391B612800103ECF800010F14C04991C7FC017F13FC90B512F04814C0485C4891C8
FC485B5A485B5C5A5CA2B5FC5CA360A36E5DA26C5F6E5D187E6C6D846E4A48806C6D4A48
14FC6C6ED90FF0ECFFFC6C02E090263FE07F14FE00019139FC03FFC06C91B6487E013F4B
487E010F4B1307010303F01301D9003F0280D9003F13FC020101F8CBFC57507ACE5E>97
D<903801FFFCB6FCA8C67E131F7FB3ADF0FFFC050FEBFFE0057F14FE0403B77E040F16E0
043F16F84CD9007F13FE9226FDFFF001077F92B500C001018094C86C13E004FC6F7F4C6F
7F04E06F7F4C6F7F5E747F93C915804B7014C0A27414E0A21DF087A21DF8A31DFC87A41D
FEAF1DFCA4631DF8A31DF098B5FC1DE0A25014C0A26F1980501400705D705F704B5B505B
704B5B04FC4B5BDBE7FE92B55A9226C3FF8001035C038101E0011F49C7FC9226807FFC90
B55A4B6CB712F04A010F16C04A010393C8FC4A010015F84A023F14C090C9000301F0C9FC
5F797AF76C>I<97380FFFE00607B6FCA8F00003190086B3AD93383FFF800307B512F803
3F14FF4AB712C0020716F0021F16FC027F9039FE007FFE91B500F0EB0FFF010302800101
90B5FC4949C87E49498149498149498149498190B548814884484A8192CAFC5AA2485BA2
5A5C5AA35A5CA4B5FCAF7EA4807EA37EA2807EA26C7F616C6E5D6C606C80616D6D5D6D6D
5D6D6D92B67E6D6D4A15FC010301FF0207EDFFFE6D02C0EB3FFE6D6C9039FC01FFF86E90
B65A020F16C002031600DA007F14FC030F14E09226007FFEC749C7FC5F797AF76C>100
D<EB01FCEB07FF011F13C0497F497F90B57EA24880A24880A76C5CA26C5CA26D5B6D5B6D
5B010790C8FCEB01FC90CAFCB2903801FFFC007FB5FCA8C67E131F7FB3B3B3A5B81280A8
297979F835>105 D<903801FFFCB6FCA8C67E131F7FB3B3B3B3B3ABB812C0A82A7879F7
35>108 D<902601FFF891380FFFE0B692B512FE05036E7E050F15E0053F15F84D819327
01FFF01F7F4CD900077FDC07FC6D80C66CDA0FF06D80011FDA1FC07F6D4A48824CC8FC04
7E6F7F5EEDF9F85E03FB707F5E15FF5EA25EA293C9FCA45DB3B3A6B8D8E003B81280A861
4E79CD6C>110 D<902601FFFCEC7FFEB6020FB512F0057F14FE4CB712C0040716F0041F
82047F16FE93B5C66C7F92B500F0010F14C0C66C0380010380011F4AC76C806D4A6E8004
F06F7F4C6F7F4C6F7F4C8193C915804B7014C0861DE0A27414F0A27414F8A47513FCA575
13FEAF5113FCA598B512F8A31DF0621DE0621DC0621D806F5E701800704B5B505B704B5B
7092B55A04FC4A5C704A5C706C010F5C05E0013F49C7FC9227FE7FFC01B55A70B712F004
0F16C0040393C8FC040015F8053F14C0050301F0C9FC94CCFCB3A6B812E0A85F6F7ACD6C
>112 D<0007BA12FC1AFEA503E0C714FC4AC74814F84801F04A14F05C02804A14E091C8
4814C04D14805B494B14004D5B4992B55AA24C5C494A5C615E4C5C001F4B5C5B4C91C7FC
4C5B93B55AA24B5CC8485C4B5CA24B5C4B5C4B91C8FCA24B5B92B55AA24A5C4A5C4A4A14
FFA24A5C4A5C4A91C8FC614A4915FE91B55A495CA2495C494A14035E5B495C4991C81207
A24949ED0FFC90B55A484A151FA2484A153F484A157F484A15FF1803484A140F4891C812
3F48490207B5FC91B9FCBB12F8A57E484D7BCC56>122 D E
%EndDVIPSBitmapFont
end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 600dpi
TeXDict begin
%%PaperSize: A4
%%EndSetup
%%Page: 1 1
1 0 bop 150 1318 a Fm(bzip2)64 b(and)g(libbzip2)p 150
1418 3600 34 v 2010 1515 a Fl(a)31 b(program)f(and)g(library)e(for)i
(data)h(compression)2198 1623 y(cop)m(yrigh)m(t)f(\(C\))h(1996-2000)j
(Julian)28 b(Sew)m(ard)2605 1731 y(v)m(ersion)i(1.0)h(of)g(21)g(Marc)m
(h)g(2000)150 5091 y Fk(Julian)46 b(Sew)l(ard)p 150 5141
3600 17 v eop
%%Page: 1 2
1 1 bop 3705 -116 a Fl(1)150 299 y(This)24 b(program,)j
Fj(bzip2)p Fl(,)e(and)g(asso)s(ciated)i(library)c Fj(libbzip2)p
Fl(,)i(are)h(Cop)m(yrigh)m(t)g(\(C\))g(1996-2000)j(Julian)150
408 y(R)h(Sew)m(ard.)40 b(All)29 b(righ)m(ts)h(reserv)m(ed.)150
565 y(Redistribution)f(and)i(use)h(in)f(source)h(and)g(binary)e(forms,)
j(with)e(or)h(without)f(mo)s(di\014cation,)g(are)i(p)s(er-)150
675 y(mitted)d(pro)m(vided)f(that)i(the)f(follo)m(wing)f(conditions)g
(are)i(met:)225 832 y Fi(\017)60 b Fl(Redistributions)26
b(of)k(source)g(co)s(de)g(m)m(ust)g(retain)f(the)h(ab)s(o)m(v)m(e)h
(cop)m(yrigh)m(t)g(notice,)f(this)f(list)f(of)i(con-)330
941 y(ditions)e(and)i(the)h(follo)m(wing)e(disclaimer.)225
1076 y Fi(\017)60 b Fl(The)33 b(origin)f(of)h(this)f(soft)m(w)m(are)j
(m)m(ust)e(not)h(b)s(e)e(misrepresen)m(ted;)i(y)m(ou)g(m)m(ust)f(not)g
(claim)g(that)h(y)m(ou)330 1185 y(wrote)d(the)h(original)d(soft)m(w)m
(are.)44 b(If)31 b(y)m(ou)g(use)g(this)f(soft)m(w)m(are)i(in)e(a)h(pro)
s(duct,)g(an)f(ac)m(kno)m(wledgmen)m(t)330 1295 y(in)f(the)i(pro)s
(duct)e(do)s(cumen)m(tation)h(w)m(ould)f(b)s(e)h(appreciated)g(but)g
(is)f(not)i(required.)225 1429 y Fi(\017)60 b Fl(Altered)21
b(source)g(v)m(ersions)f(m)m(ust)h(b)s(e)f(plainly)e(mark)m(ed)j(as)g
(suc)m(h,)i(and)d(m)m(ust)h(not)g(b)s(e)f(misrepresen)m(ted)330
1539 y(as)31 b(b)s(eing)e(the)h(original)f(soft)m(w)m(are.)225
1674 y Fi(\017)60 b Fl(The)27 b(name)h(of)f(the)h(author)f(ma)m(y)h
(not)g(b)s(e)f(used)g(to)h(endorse)f(or)h(promote)g(pro)s(ducts)e
(deriv)m(ed)g(from)330 1783 y(this)j(soft)m(w)m(are)j(without)d(sp)s
(eci\014c)h(prior)e(written)i(p)s(ermission.)150 1965
y(THIS)37 b(SOFTW)-10 b(ARE)38 b(IS)f(PR)m(O)m(VIDED)i(BY)g(THE)f(A)m
(UTHOR)g(\\AS)g(IS")g(AND)h(ANY)f(EXPRESS)150 2074 y(OR)31
b(IMPLIED)h(W)-10 b(ARRANTIES,)31 b(INCLUDING,)i(BUT)f(NOT)f(LIMITED)g
(TO,)h(THE)f(IMPLIED)150 2184 y(W)-10 b(ARRANTIES)27
b(OF)h(MER)m(CHANT)-8 b(ABILITY)28 b(AND)g(FITNESS)f(F)m(OR)g(A)h(P)-8
b(AR)g(TICULAR)28 b(PUR-)150 2294 y(POSE)37 b(ARE)g(DISCLAIMED.)h(IN)f
(NO)h(EVENT)f(SHALL)g(THE)g(A)m(UTHOR)h(BE)g(LIABLE)g(F)m(OR)150
2403 y(ANY)56 b(DIRECT,)f(INDIRECT,)h(INCIDENT)-8 b(AL,)56
b(SPECIAL,)e(EXEMPLAR)-8 b(Y,)57 b(OR)e(CONSE-)150 2513
y(QUENTIAL)48 b(D)m(AMA)m(GES)i(\(INCLUDING,)g(BUT)f(NOT)f(LIMITED)g
(TO,)g(PR)m(OCUREMENT)150 2622 y(OF)35 b(SUBSTITUTE)e(GOODS)i(OR)f(SER)
-10 b(VICES;)34 b(LOSS)f(OF)i(USE,)g(D)m(A)-8 b(T)g(A,)36
b(OR)f(PR)m(OFITS;)f(OR)150 2732 y(BUSINESS)28 b(INTERR)m(UPTION\))g
(HO)m(WEVER)i(CA)m(USED)f(AND)g(ON)g(ANY)g(THEOR)-8 b(Y)29
b(OF)g(LIA-)150 2842 y(BILITY,)36 b(WHETHER)g(IN)g(CONTRA)m(CT,)g
(STRICT)e(LIABILITY,)i(OR)g(TOR)-8 b(T)35 b(\(INCLUDING)150
2951 y(NEGLIGENCE)45 b(OR)g(OTHER)-10 b(WISE\))44 b(ARISING)h(IN)g(ANY)
h(W)-10 b(A)i(Y)46 b(OUT)e(OF)i(THE)e(USE)h(OF)150 3061
y(THIS)29 b(SOFTW)-10 b(ARE,)31 b(EVEN)f(IF)g(AD)m(VISED)i(OF)e(THE)g
(POSSIBILITY)e(OF)j(SUCH)f(D)m(AMA)m(GE.)150 3218 y(Julian)e(Sew)m
(ard,)i(Cam)m(bridge,)g(UK.)150 3374 y Fj(jseward@acm.org)150
3531 y(http://sourceware.cygnus)o(.com)o(/bzi)o(p2)150
3688 y(http://www.cacheprof.org)150 3845 y(http://www.muraroa.demon)o
(.co.)o(uk)150 4002 y(bzip2)p Fl(/)p Fj(libbzip2)d Fl(v)m(ersion)j(1.0)
i(of)e(21)h(Marc)m(h)g(2000.)150 4159 y(P)-8 b(A)g(TENTS:)40
b(T)-8 b(o)40 b(the)g(b)s(est)g(of)g(m)m(y)g(kno)m(wledge,)j
Fj(bzip2)38 b Fl(do)s(es)i(not)g(use)g(an)m(y)g(paten)m(ted)h
(algorithms.)150 4268 y(Ho)m(w)m(ev)m(er,)33 b(I)e(do)f(not)h(ha)m(v)m
(e)h(the)f(resources)g(a)m(v)-5 b(ailable)30 b(to)h(carry)g(out)g(a)g
(full)d(paten)m(t)k(searc)m(h.)42 b(Therefore)150 4378
y(I)30 b(cannot)h(giv)m(e)g(an)m(y)g(guaran)m(tee)h(of)e(the)h(ab)s(o)m
(v)m(e)g(statemen)m(t.)p eop
%%Page: 2 3
2 2 bop 150 -116 a Fl(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2591
b(2)150 299 y Fh(1)80 b(In)l(tro)t(duction)150 555 y
Fj(bzip2)20 b Fl(compresses)h(\014les)f(using)g(the)h(Burro)m
(ws-Wheeler)g(blo)s(c)m(k-sorting)f(text)j(compression)d(algorithm,)150
665 y(and)33 b(Hu\013man)g(co)s(ding.)50 b(Compression)32
b(is)h(generally)g(considerably)f(b)s(etter)i(than)f(that)h(ac)m(hiev)m
(ed)h(b)m(y)150 775 y(more)f(con)m(v)m(en)m(tional)g(LZ77/LZ78-based)g
(compressors,)g(and)f(approac)m(hes)h(the)f(p)s(erformance)g(of)h(the)
150 884 y(PPM)c(family)f(of)i(statistical)f(compressors.)150
1041 y Fj(bzip2)k Fl(is)h(built)e(on)i(top)h(of)g Fj(libbzip2)p
Fl(,)e(a)i(\015exible)e(library)f(for)i(handling)e(compressed)i(data)i
(in)d(the)150 1151 y Fj(bzip2)c Fl(format.)43 b(This)30
b(man)m(ual)g(describ)s(es)g(b)s(oth)g(ho)m(w)i(to)g(use)f(the)g
(program)g(and)g(ho)m(w)g(to)h(w)m(ork)f(with)150 1260
y(the)d(library)d(in)m(terface.)41 b(Most)28 b(of)g(the)g(man)m(ual)f
(is)g(dev)m(oted)i(to)f(this)f(library)-8 b(,)26 b(not)i(the)g
(program,)g(whic)m(h)150 1370 y(is)h(go)s(o)s(d)i(news)e(if)h(y)m(our)g
(in)m(terest)h(is)e(only)g(in)h(the)g(program.)150 1527
y(Chapter)24 b(2)g(describ)s(es)f(ho)m(w)h(to)h(use)f
Fj(bzip2)p Fl(;)h(this)e(is)g(the)i(only)e(part)h(y)m(ou)h(need)f(to)h
(read)f(if)f(y)m(ou)h(just)g(w)m(an)m(t)150 1636 y(to)35
b(kno)m(w)f(ho)m(w)g(to)g(op)s(erate)h(the)f(program.)51
b(Chapter)34 b(3)g(describ)s(es)e(the)i(programming)f(in)m(terfaces)h
(in)150 1746 y(detail,)23 b(and)d(Chapter)h(4)h(records)f(some)h
(miscellaneous)e(notes)i(whic)m(h)e(I)h(though)m(t)h(ough)m(t)g(to)g(b)
s(e)f(recorded)150 1855 y(somewhere.)p eop
%%Page: 3 4
3 3 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
b(to)g(use)f Fj(bzip2)2375 b Fl(3)150 299 y Fh(2)80 b(Ho)l(w)53
b(to)g(use)g Fg(bzip2)150 566 y Fl(This)29 b(c)m(hapter)i(con)m(tains)f
(a)h(cop)m(y)g(of)g(the)f Fj(bzip2)f Fl(man)h(page,)h(and)f(nothing)g
(else.)390 818 y Ff(NAME)570 1004 y Fj(bzip2)p Fl(,)f
Fj(bunzip2)g Fl(-)h(a)h(blo)s(c)m(k-sorting)f(\014le)f(compressor,)i
(v1.0)570 1136 y Fj(bzcat)e Fl(-)i(decompresses)f(\014les)f(to)i
(stdout)570 1267 y Fj(bzip2recover)c Fl(-)k(reco)m(v)m(ers)h(data)f
(from)f(damaged)g(bzip2)g(\014les)390 1519 y Ff(SYNOPSIS)570
1706 y Fj(bzip2)f Fl([)h(-cdfkqstvzVL123456789)35 b(])c([)g
(\014lenames)e(...)41 b(])570 1837 y Fj(bunzip2)28 b
Fl([)j(-fkvsVL)f(])h([)f(\014lenames)g(...)41 b(])570
1968 y Fj(bzcat)29 b Fl([)h(-s)h(])g([)f(\014lenames)g(...)41
b(])570 2100 y Fj(bzip2recover)27 b Fl(\014lename)390
2352 y Ff(DESCRIPTION)390 2538 y Fj(bzip2)i Fl(compresses)i(\014les)f
(using)f(the)i(Burro)m(ws-Wheeler)g(blo)s(c)m(k)f(sorting)g(text)i
(compres-)390 2642 y(sion)40 b(algorithm,)j(and)d(Hu\013man)h(co)s
(ding.)71 b(Compression)40 b(is)g(generally)g(considerably)390
2746 y(b)s(etter)25 b(than)g(that)h(ac)m(hiev)m(ed)g(b)m(y)f(more)g
(con)m(v)m(en)m(tional)h(LZ77/LZ78-based)g(compressors,)390
2850 y(and)k(approac)m(hes)h(the)f(p)s(erformance)g(of)h(the)f(PPM)g
(family)f(of)i(statistical)f(compressors.)390 3001 y(The)e
(command-line)e(options)i(are)h(delib)s(erately)d(v)m(ery)i(similar)e
(to)j(those)g(of)f(GNU)h Fj(gzip)p Fl(,)390 3104 y(but)h(they)g(are)h
(not)g(iden)m(tical.)390 3255 y Fj(bzip2)f Fl(exp)s(ects)h(a)g(list)f
(of)h(\014le)f(names)h(to)h(accompan)m(y)h(the)e(command-line)e
(\015ags.)43 b(Eac)m(h)390 3359 y(\014le)e(is)h(replaced)g(b)m(y)g(a)h
(compressed)f(v)m(ersion)g(of)g(itself,)i(with)e(the)g(name)g
Fj(original_)390 3463 y(name.bz2)p Fl(.)49 b(Eac)m(h)34
b(compressed)g(\014le)f(has)g(the)h(same)g(mo)s(di\014cation)e(date,)k
(p)s(ermissions,)390 3567 y(and,)24 b(when)f(p)s(ossible,)f(o)m
(wnership)f(as)j(the)f(corresp)s(onding)f(original,)h(so)g(that)h
(these)g(prop-)390 3671 y(erties)34 b(can)g(b)s(e)f(correctly)i
(restored)f(at)g(decompression)f(time.)51 b(File)34 b(name)g(handling)d
(is)390 3774 y(naiv)m(e)26 b(in)f(the)i(sense)f(that)h(there)f(is)f(no)
i(mec)m(hanism)e(for)h(preserving)f(original)f(\014le)i(names,)390
3878 y(p)s(ermissions,)37 b(o)m(wnerships)f(or)h(dates)i(in)d
(\014lesystems)h(whic)m(h)g(lac)m(k)h(these)g(concepts,)j(or)390
3982 y(ha)m(v)m(e)32 b(serious)d(\014le)g(name)i(length)f
(restrictions,)f(suc)m(h)h(as)h(MS-DOS.)390 4133 y Fj(bzip2)26
b Fl(and)h Fj(bunzip2)e Fl(will)f(b)m(y)k(default)e(not)i(o)m(v)m
(erwrite)g(existing)e(\014les.)38 b(If)27 b(y)m(ou)h(w)m(an)m(t)g(this)
390 4237 y(to)j(happ)s(en,)e(sp)s(ecify)g(the)i Fj(-f)e
Fl(\015ag.)390 4388 y(If)34 b(no)h(\014le)f(names)g(are)i(sp)s
(eci\014ed,)e Fj(bzip2)f Fl(compresses)i(from)f(standard)g(input)f(to)j
(stan-)390 4491 y(dard)c(output.)49 b(In)32 b(this)g(case,)k
Fj(bzip2)31 b Fl(will)g(decline)h(to)i(write)e(compressed)h(output)g
(to)h(a)390 4595 y(terminal,)29 b(as)i(this)e(w)m(ould)g(b)s(e)h(en)m
(tirely)f(incomprehensible)e(and)j(therefore)h(p)s(oin)m(tless.)390
4746 y Fj(bunzip2)36 b Fl(\(or)j Fj(bzip2)29 b(-d)p Fl(\))37
b(decompresses)i(all)e(sp)s(eci\014ed)f(\014les.)63 b(Files)37
b(whic)m(h)g(w)m(ere)i(not)390 4850 y(created)e(b)m(y)f
Fj(bzip2)f Fl(will)e(b)s(e)i(detected)j(and)d(ignored,)i(and)e(a)i(w)m
(arning)d(issued.)56 b Fj(bzip2)390 4954 y Fl(attempts)31
b(to)f(guess)g(the)g(\014lename)f(for)h(the)g(decompressed)f(\014le)g
(from)h(that)g(of)g(the)g(com-)390 5058 y(pressed)f(\014le)h(as)h
(follo)m(ws:)570 5209 y Fj(filename.bz2)57 b Fl(b)s(ecomes)31
b Fj(filename)570 5340 y(filename.bz)58 b Fl(b)s(ecomes)30
b Fj(filename)p eop
%%Page: 4 5
4 4 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
b(to)g(use)f Fj(bzip2)2375 b Fl(4)570 299 y Fj(filename.tbz2)27
b Fl(b)s(ecomes)j Fj(filename.tar)570 470 y(filename.tbz)57
b Fl(b)s(ecomes)31 b Fj(filename.tar)570 641 y(anyothername)57
b Fl(b)s(ecomes)31 b Fj(anyothername.out)390 859 y Fl(If)j(the)h
(\014le)e(do)s(es)i(not)f(end)g(in)f(one)i(of)g(the)g(recognised)f
(endings,)g Fj(.bz2)p Fl(,)h Fj(.bz)p Fl(,)g Fj(.tbz2)e
Fl(or)390 963 y Fj(.tbz)p Fl(,)h Fj(bzip2)f Fl(complains)f(that)j(it)e
(cannot)i(guess)f(the)g(name)h(of)f(the)g(original)e(\014le,)j(and)390
1067 y(uses)30 b(the)g(original)f(name)h(with)g Fj(.out)f
Fl(app)s(ended.)390 1218 y(As)j(with)f(compression,)h(supplying)c(no)k
(\014lenames)f(causes)i(decompression)e(from)h(stan-)390
1321 y(dard)d(input)g(to)i(standard)e(output.)390 1472
y Fj(bunzip2)k Fl(will)g(correctly)j(decompress)e(a)i(\014le)e(whic)m
(h)g(is)h(the)g(concatenation)i(of)e(t)m(w)m(o)i(or)390
1576 y(more)j(compressed)f(\014les.)67 b(The)39 b(result)g(is)g(the)g
(concatenation)i(of)f(the)g(corresp)s(onding)390 1680
y(uncompressed)c(\014les.)59 b(In)m(tegrit)m(y)38 b(testing)f(\()p
Fj(-t)p Fl(\))g(of)g(concatenated)i(compressed)e(\014les)f(is)390
1784 y(also)30 b(supp)s(orted.)390 1935 y(Y)-8 b(ou)40
b(can)g(also)f(compress)g(or)g(decompress)g(\014les)g(to)h(the)f
(standard)g(output)g(b)m(y)g(giving)390 2039 y(the)30
b Fj(-c)g Fl(\015ag.)40 b(Multiple)28 b(\014les)h(ma)m(y)i(b)s(e)e
(compressed)h(and)f(decompressed)h(lik)m(e)f(this.)39
b(The)390 2142 y(resulting)31 b(outputs)i(are)h(fed)f(sequen)m(tially)f
(to)i(stdout.)49 b(Compression)32 b(of)h(m)m(ultiple)e(\014les)390
2246 y(in)24 b(this)g(manner)h(generates)h(a)g(stream)f(con)m(taining)g
(m)m(ultiple)e(compressed)i(\014le)f(represen-)390 2350
y(tations.)58 b(Suc)m(h)36 b(a)g(stream)g(can)h(b)s(e)e(decompressed)h
(correctly)h(only)e(b)m(y)h Fj(bzip2)e Fl(v)m(ersion)390
2454 y(0.9.0)g(or)e(later.)47 b(Earlier)30 b(v)m(ersions)i(of)g
Fj(bzip2)f Fl(will)f(stop)i(after)h(decompressing)e(the)i(\014rst)390
2558 y(\014le)c(in)h(the)g(stream.)390 2709 y Fj(bzcat)f
Fl(\(or)i Fj(bzip2)e(-dc)p Fl(\))g(decompresses)i(all)e(sp)s(eci\014ed)
g(\014les)g(to)i(the)g(standard)e(output.)390 2860 y
Fj(bzip2)f Fl(will)g(read)i(argumen)m(ts)g(from)f(the)h(en)m(vironmen)m
(t)g(v)-5 b(ariables)28 b Fj(BZIP2)h Fl(and)g Fj(BZIP)p
Fl(,)g(in)390 2963 y(that)24 b(order,)g(and)f(will)e(pro)s(cess)i(them)
g(b)s(efore)g(an)m(y)h(argumen)m(ts)f(read)h(from)f(the)g(command)390
3067 y(line.)39 b(This)29 b(giv)m(es)h(a)h(con)m(v)m(enien)m(t)h(w)m(a)
m(y)f(to)g(supply)d(default)i(argumen)m(ts.)390 3218
y(Compression)h(is)h(alw)m(a)m(ys)i(p)s(erformed,)e(ev)m(en)h(if)f(the)
h(compressed)g(\014le)f(is)g(sligh)m(tly)f(larger)390
3322 y(than)26 b(the)g(original.)38 b(Files)25 b(of)h(less)g(than)g(ab)
s(out)g(one)g(h)m(undred)e(b)m(ytes)j(tend)f(to)h(get)g(larger,)390
3426 y(since)34 b(the)g(compression)f(mec)m(hanism)h(has)f(a)i(constan)
m(t)g(o)m(v)m(erhead)h(in)d(the)h(region)g(of)g(50)390
3529 y(b)m(ytes.)54 b(Random)34 b(data)h(\(including)d(the)i(output)h
(of)f(most)h(\014le)f(compressors\))h(is)e(co)s(ded)390
3633 y(at)e(ab)s(out)f(8.05)i(bits)d(p)s(er)h(b)m(yte,)h(giving)e(an)h
(expansion)g(of)g(around)g(0.5\045.)390 3784 y(As)h(a)g(self-c)m(hec)m
(k)h(for)e(y)m(our)h(protection,)g Fj(bzip2)f Fl(uses)g(32-bit)h(CR)m
(Cs)f(to)i(mak)m(e)f(sure)f(that)390 3888 y(the)45 b(decompressed)f(v)m
(ersion)g(of)g(a)h(\014le)e(is)h(iden)m(tical)f(to)i(the)g(original.)81
b(This)43 b(guards)390 3992 y(against)i(corruption)e(of)h(the)h
(compressed)f(data,)49 b(and)44 b(against)h(undetected)g(bugs)e(in)390
4096 y Fj(bzip2)35 b Fl(\(hop)s(efully)e(v)m(ery)k(unlik)m(ely\).)56
b(The)36 b(c)m(hances)h(of)f(data)h(corruption)e(going)h(unde-)390
4199 y(tected)g(is)e(microscopic,)h(ab)s(out)f(one)h(c)m(hance)g(in)f
(four)g(billion)d(for)j(eac)m(h)i(\014le)d(pro)s(cessed.)390
4303 y(Be)38 b(a)m(w)m(are,)k(though,)d(that)f(the)g(c)m(hec)m(k)i(o)s
(ccurs)d(up)s(on)f(decompression,)j(so)f(it)f(can)h(only)390
4407 y(tell)28 b(y)m(ou)g(that)i(something)d(is)h(wrong.)40
b(It)28 b(can't)i(help)d(y)m(ou)i(reco)m(v)m(er)h(the)e(original)f
(uncom-)390 4511 y(pressed)h(data.)41 b(Y)-8 b(ou)30
b(can)f(use)g Fj(bzip2recover)d Fl(to)k(try)f(to)h(reco)m(v)m(er)h
(data)f(from)e(damaged)390 4614 y(\014les.)390 4766 y(Return)22
b(v)-5 b(alues:)37 b(0)23 b(for)g(a)g(normal)f(exit,)j(1)e(for)g(en)m
(vironmen)m(tal)f(problems)f(\(\014le)i(not)g(found,)390
4869 y(in)m(v)-5 b(alid)30 b(\015ags,)k(I/O)f(errors,)g(&c\),)h(2)f(to)
g(indicate)f(a)h(corrupt)f(compressed)h(\014le,)f(3)i(for)e(an)390
4973 y(in)m(ternal)d(consistency)h(error)g(\(eg,)i(bug\))e(whic)m(h)f
(caused)i Fj(bzip2)e Fl(to)i(panic.)390 5304 y Ff(OPTIONS)p
eop
%%Page: 5 6
5 5 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
b(to)g(use)f Fj(bzip2)2375 b Fl(5)390 299 y Fj(-c)30
b(--stdout)870 403 y Fl(Compress)f(or)i(decompress)f(to)h(standard)e
(output.)390 557 y Fj(-d)h(--decompress)870 661 y Fl(F)-8
b(orce)44 b(decompression.)77 b Fj(bzip2)p Fl(,)44 b
Fj(bunzip2)d Fl(and)h Fj(bzcat)f Fl(are)i(really)f(the)870
764 y(same)27 b(program,)h(and)e(the)i(decision)d(ab)s(out)i(what)g
(actions)g(to)h(tak)m(e)g(is)e(done)870 868 y(on)k(the)h(basis)e(of)i
(whic)m(h)e(name)h(is)g(used.)40 b(This)28 b(\015ag)j(o)m(v)m(errides)f
(that)h(mec)m(h-)870 972 y(anism,)e(and)h(forces)h(bzip2)e(to)i
(decompress.)390 1126 y Fj(-z)f(--compress)870 1230 y
Fl(The)39 b(complemen)m(t)h(to)g Fj(-d)p Fl(:)59 b(forces)40
b(compression,)h(regardless)d(of)i(the)g(in-)870 1334
y(v)m(ok)-5 b(ation)31 b(name.)390 1488 y Fj(-t)f(--test)8
b Fl(Chec)m(k)33 b(in)m(tegrit)m(y)j(of)f(the)g(sp)s(eci\014ed)e
(\014le\(s\),)k(but)d(don't)h(decompress)g(them.)870
1591 y(This)40 b(really)g(p)s(erforms)g(a)i(trial)e(decompression)h
(and)g(thro)m(ws)g(a)m(w)m(a)m(y)j(the)870 1695 y(result.)390
1849 y Fj(-f)30 b(--force)870 1953 y Fl(F)-8 b(orce)31
b(o)m(v)m(erwrite)f(of)g(output)f(\014les.)40 b(Normally)-8
b(,)29 b Fj(bzip2)f Fl(will)f(not)j(o)m(v)m(erwrite)870
2057 y(existing)e(output)g(\014les.)39 b(Also)28 b(forces)h
Fj(bzip2)e Fl(to)i(break)g(hard)e(links)f(to)k(\014les,)870
2161 y(whic)m(h)f(it)h(otherwise)g(w)m(ouldn't)f(do.)390
2315 y Fj(-k)h(--keep)8 b Fl(Keep)24 b(\(don't)i(delete\))h(input)d
(\014les)g(during)g(compression)h(or)h(decompression.)390
2469 y Fj(-s)k(--small)870 2573 y Fl(Reduce)23 b(memory)f(usage,)j(for)
d(compression,)h(decompression)f(and)g(testing.)870 2676
y(Files)f(are)i(decompressed)e(and)h(tested)h(using)e(a)h(mo)s
(di\014ed)e(algorithm)h(whic)m(h)870 2780 y(only)30 b(requires)g(2.5)j
(b)m(ytes)f(p)s(er)e(blo)s(c)m(k)h(b)m(yte.)44 b(This)30
b(means)h(an)m(y)h(\014le)e(can)i(b)s(e)870 2884 y(decompressed)d(in)f
(2300k)j(of)e(memory)-8 b(,)30 b(alb)s(eit)e(at)i(ab)s(out)f(half)g
(the)g(normal)870 2988 y(sp)s(eed.)870 3117 y(During)42
b(compression,)k Fj(-s)d Fl(selects)h(a)g(blo)s(c)m(k)g(size)f(of)h
(200k,)k(whic)m(h)42 b(lim-)870 3220 y(its)33 b(memory)g(use)g(to)h
(around)e(the)i(same)f(\014gure,)h(at)g(the)g(exp)s(ense)f(of)g(y)m
(our)870 3324 y(compression)g(ratio.)50 b(In)33 b(short,)i(if)d(y)m
(our)i(mac)m(hine)f(is)g(lo)m(w)g(on)h(memory)f(\(8)870
3428 y(megab)m(ytes)42 b(or)e(less\),)j(use)d(-s)g(for)g(ev)m
(erything.)71 b(See)40 b(MEMOR)-8 b(Y)41 b(MAN-)870 3532
y(A)m(GEMENT)31 b(b)s(elo)m(w.)390 3686 y Fj(-q)f(--quiet)870
3790 y Fl(Suppress)j(non-essen)m(tial)j(w)m(arning)e(messages.)58
b(Messages)38 b(p)s(ertaining)33 b(to)870 3893 y(I/O)d(errors)g(and)g
(other)h(critical)e(ev)m(en)m(ts)j(will)27 b(not)k(b)s(e)f(suppressed.)
390 4047 y Fj(-v)g(--verbose)870 4151 y Fl(V)-8 b(erb)s(ose)28
b(mo)s(de)f({)i(sho)m(w)e(the)h(compression)f(ratio)h(for)f(eac)m(h)i
(\014le)e(pro)s(cessed.)870 4255 y(F)-8 b(urther)30 b
Fj(-v)p Fl('s)g(increase)g(the)g(v)m(erb)s(osit)m(y)g(lev)m(el,)h(sp)s
(ewing)d(out)j(lots)f(of)g(infor-)870 4359 y(mation)g(whic)m(h)f(is)h
(primarily)d(of)j(in)m(terest)h(for)f(diagnostic)g(purp)s(oses.)390
4513 y Fj(-L)g(--license)e(-V)h(--version)870 4617 y
Fl(Displa)m(y)h(the)g(soft)m(w)m(are)i(v)m(ersion,)e(license)f(terms)i
(and)e(conditions.)390 4771 y Fj(-1)h(to)g(-9)72 b Fl(Set)35
b(the)g(blo)s(c)m(k)f(size)h(to)g(100)h(k,)g(200)g(k)f(..)53
b(900)36 b(k)f(when)f(compressing.)53 b(Has)870 4875
y(no)41 b(e\013ect)h(when)d(decompressing.)71 b(See)41
b(MEMOR)-8 b(Y)41 b(MANA)m(GEMENT)870 4978 y(b)s(elo)m(w.)390
5132 y Fj(--)324 b Fl(T)-8 b(reats)25 b(all)e(subsequen)m(t)g(argumen)m
(ts)i(as)f(\014le)g(names,)h(ev)m(en)g(if)e(they)i(start)f(with)870
5236 y(a)32 b(dash.)43 b(This)29 b(is)h(so)i(y)m(ou)g(can)f(handle)f
(\014les)g(with)g(names)i(b)s(eginning)c(with)870 5340
y(a)j(dash,)f(for)g(example:)40 b Fj(bzip2)29 b(--)h(-myfilename)p
Fl(.)p eop
%%Page: 6 7
6 6 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
b(to)g(use)f Fj(bzip2)2375 b Fl(6)390 299 y Fj(--repetitive-fast)390
427 y(--repetitive-best)870 530 y Fl(These)34 b(\015ags)g(are)h
(redundan)m(t)e(in)g(v)m(ersions)g(0.9.5)j(and)e(ab)s(o)m(v)m(e.)53
b(They)34 b(pro-)870 634 y(vided)h(some)i(coarse)g(con)m(trol)g(o)m(v)m
(er)g(the)g(b)s(eha)m(viour)e(of)h(the)g(sorting)g(algo-)870
738 y(rithm)h(in)h(earlier)g(v)m(ersions,)j(whic)m(h)d(w)m(as)h
(sometimes)h(useful.)65 b(0.9.5)41 b(and)870 842 y(ab)s(o)m(v)m(e)34
b(ha)m(v)m(e)g(an)f(impro)m(v)m(ed)g(algorithm)f(whic)m(h)f(renders)h
(these)h(\015ags)h(irrel-)870 946 y(ev)-5 b(an)m(t.)390
1190 y Ff(MEMOR)-10 b(Y)40 b(MANA)m(GEMENT)390 1377 y
Fj(bzip2)25 b Fl(compresses)i(large)g(\014les)e(in)g(blo)s(c)m(ks.)39
b(The)26 b(blo)s(c)m(k)h(size)f(a\013ects)i(b)s(oth)e(the)h(compres-)
390 1481 y(sion)39 b(ratio)g(ac)m(hiev)m(ed,)k(and)d(the)f(amoun)m(t)i
(of)e(memory)h(needed)f(for)h(compression)f(and)390 1585
y(decompression.)59 b(The)36 b(\015ags)h Fj(-1)f Fl(through)h
Fj(-9)f Fl(sp)s(ecify)f(the)i(blo)s(c)m(k)g(size)f(to)i(b)s(e)e
(100,000)390 1688 y(b)m(ytes)29 b(through)e(900,000)k(b)m(ytes)d(\(the)
h(default\))e(resp)s(ectiv)m(ely)-8 b(.)40 b(A)m(t)29
b(decompression)e(time,)390 1792 y(the)32 b(blo)s(c)m(k)g(size)g(used)g
(for)g(compression)f(is)g(read)h(from)g(the)g(header)g(of)h(the)f
(compressed)390 1896 y(\014le,)j(and)f Fj(bunzip2)e Fl(then)i(allo)s
(cates)h(itself)e(just)h(enough)g(memory)g(to)i(decompress)e(the)390
2000 y(\014le.)39 b(Since)29 b(blo)s(c)m(k)g(sizes)g(are)h(stored)f(in)
f(compressed)h(\014les,)g(it)g(follo)m(ws)f(that)i(the)g(\015ags)g
Fj(-1)390 2103 y Fl(to)h Fj(-9)f Fl(are)h(irrelev)-5
b(an)m(t)29 b(to)i(and)f(so)h(ignored)e(during)f(decompression.)390
2255 y(Compression)h(and)g(decompression)h(requiremen)m(ts,)f(in)g(b)m
(ytes,)j(can)e(b)s(e)g(estimated)h(as:)869 2406 y Fj(Compression:)140
b(400k)46 b(+)i(\()f(8)h(x)f(block)f(size)h(\))869 2613
y(Decompression:)d(100k)i(+)i(\()f(4)h(x)f(block)f(size)h(\),)g(or)1585
2717 y(100k)f(+)i(\()f(2.5)g(x)g(block)g(size)f(\))390
2868 y Fl(Larger)29 b(blo)s(c)m(k)f(sizes)h(giv)m(e)g(rapidly)d
(diminishing)e(marginal)k(returns.)39 b(Most)29 b(of)g(the)g(com-)390
2972 y(pression)d(comes)j(from)f(the)g(\014rst)g(t)m(w)m(o)h(or)f
(three)h(h)m(undred)d(k)i(of)g(blo)s(c)m(k)g(size,)g(a)h(fact)g(w)m
(orth)390 3075 y(b)s(earing)j(in)f(mind)g(when)h(using)f
Fj(bzip2)h Fl(on)g(small)g(mac)m(hines.)47 b(It)33 b(is)f(also)h(imp)s
(ortan)m(t)f(to)390 3179 y(appreciate)j(that)h(the)f(decompression)f
(memory)h(requiremen)m(t)f(is)h(set)g(at)h(compression)390
3283 y(time)30 b(b)m(y)g(the)h(c)m(hoice)g(of)g(blo)s(c)m(k)f(size.)390
3434 y(F)-8 b(or)45 b(\014les)f(compressed)g(with)g(the)g(default)g
(900k)i(blo)s(c)m(k)e(size,)49 b Fj(bunzip2)42 b Fl(will)g(require)390
3538 y(ab)s(out)29 b(3700)j(kb)m(ytes)e(to)h(decompress.)40
b(T)-8 b(o)30 b(supp)s(ort)e(decompression)h(of)h(an)m(y)g(\014le)f(on)
g(a)i(4)390 3642 y(megab)m(yte)h(mac)m(hine,)d Fj(bunzip2)f
Fl(has)i(an)g(option)f(to)i(decompress)e(using)g(appro)m(ximately)390
3745 y(half)k(this)g(amoun)m(t)i(of)f(memory)-8 b(,)36
b(ab)s(out)e(2300)i(kb)m(ytes.)53 b(Decompression)34
b(sp)s(eed)g(is)f(also)390 3849 y(halv)m(ed,)i(so)f(y)m(ou)h(should)d
(use)h(this)g(option)h(only)f(where)h(necessary)-8 b(.)53
b(The)33 b(relev)-5 b(an)m(t)35 b(\015ag)390 3953 y(is)29
b Fj(-s)p Fl(.)390 4104 y(In)34 b(general,)i(try)f(and)f(use)g(the)h
(largest)h(blo)s(c)m(k)e(size)h(memory)f(constrain)m(ts)h(allo)m(w,)h
(since)390 4208 y(that)45 b(maximises)f(the)h(compression)f(ac)m(hiev)m
(ed.)85 b(Compression)43 b(and)h(decompression)390 4311
y(sp)s(eed)30 b(are)g(virtually)e(una\013ected)j(b)m(y)f(blo)s(c)m(k)g
(size.)390 4463 y(Another)25 b(signi\014can)m(t)f(p)s(oin)m(t)g
(applies)f(to)j(\014les)e(whic)m(h)g(\014t)h(in)e(a)j(single)d(blo)s(c)
m(k)i({)g(that)h(means)390 4566 y(most)g(\014les)g(y)m(ou'd)g(encoun)m
(ter)h(using)d(a)j(large)f(blo)s(c)m(k)g(size.)39 b(The)25
b(amoun)m(t)i(of)f(real)g(memory)390 4670 y(touc)m(hed)38
b(is)e(prop)s(ortional)f(to)j(the)f(size)g(of)h(the)f(\014le,)h(since)f
(the)g(\014le)g(is)f(smaller)g(than)h(a)390 4774 y(blo)s(c)m(k.)49
b(F)-8 b(or)35 b(example,)f(compressing)e(a)i(\014le)e(20,000)k(b)m
(ytes)e(long)f(with)f(the)i(\015ag)g Fj(-9)f Fl(will)390
4878 y(cause)28 b(the)f(compressor)g(to)h(allo)s(cate)f(around)f(7600k)
j(of)e(memory)-8 b(,)28 b(but)f(only)f(touc)m(h)i(400k)390
4981 y Fj(+)h Fl(20000)j(*)e(8)g(=)f(560)i(kb)m(ytes)f(of)g(it.)40
b(Similarly)-8 b(,)26 b(the)k(decompressor)f(will)e(allo)s(cate)j
(3700k)390 5085 y(but)g(only)f(touc)m(h)i(100k)h Fj(+)e
Fl(20000)i(*)f(4)g(=)f(180)i(kb)m(ytes.)390 5236 y(Here)41
b(is)f(a)i(table)f(whic)m(h)e(summarises)g(the)j(maxim)m(um)d(memory)i
(usage)h(for)e(di\013eren)m(t)390 5340 y(blo)s(c)m(k)25
b(sizes.)38 b(Also)25 b(recorded)g(is)f(the)i(total)g(compressed)e
(size)h(for)g(14)h(\014les)e(of)i(the)f(Calgary)p eop
%%Page: 7 8
7 7 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
b(to)g(use)f Fj(bzip2)2375 b Fl(7)390 299 y(T)-8 b(ext)38
b(Compression)d(Corpus)h(totalling)h(3,141,622)k(b)m(ytes.)61
b(This)36 b(column)g(giv)m(es)i(some)390 403 y(feel)23
b(for)f(ho)m(w)h(compression)f(v)-5 b(aries)23 b(with)e(blo)s(c)m(k)i
(size.)38 b(These)23 b(\014gures)f(tend)g(to)i(understate)390
506 y(the)g(adv)-5 b(an)m(tage)26 b(of)e(larger)f(blo)s(c)m(k)h(sizes)f
(for)h(larger)f(\014les,)h(since)g(the)g(Corpus)e(is)h(dominated)390
610 y(b)m(y)30 b(smaller)f(\014les.)1107 761 y Fj(Compress)141
b(Decompress)g(Decompress)f(Corpus)773 865 y(Flag)238
b(usage)285 b(usage)332 b(-s)48 b(usage)237 b(Size)821
1073 y(-1)286 b(1200k)332 b(500k)429 b(350k)285 b(914704)821
1176 y(-2)h(2000k)332 b(900k)429 b(600k)285 b(877703)821
1280 y(-3)h(2800k)f(1300k)428 b(850k)285 b(860338)821
1384 y(-4)h(3600k)f(1700k)380 b(1100k)285 b(846899)821
1488 y(-5)h(4400k)f(2100k)380 b(1350k)285 b(845160)821
1591 y(-6)h(5200k)f(2500k)380 b(1600k)285 b(838626)821
1695 y(-7)h(6100k)f(2900k)380 b(1850k)285 b(834096)821
1799 y(-8)h(6800k)f(3300k)380 b(2100k)285 b(828642)821
1903 y(-9)h(7600k)f(3700k)380 b(2350k)285 b(828642)390
2147 y Ff(RECO)m(VERING)37 b(D)m(A)-10 b(T)g(A)40 b(FR)m(OM)h(D)m(AMA)m
(GED)e(FILES)390 2333 y Fj(bzip2)25 b Fl(compresses)h(\014les)g(in)f
(blo)s(c)m(ks,)h(usually)e(900kb)m(ytes)29 b(long.)39
b(Eac)m(h)27 b(blo)s(c)m(k)e(is)h(handled)390 2437 y(indep)s(enden)m
(tly)-8 b(.)47 b(If)32 b(a)i(media)e(or)h(transmission)e(error)i
(causes)h(a)f(m)m(ulti-blo)s(c)m(k)f Fj(.bz2)g Fl(\014le)390
2541 y(to)k(b)s(ecome)h(damaged,)g(it)e(ma)m(y)i(b)s(e)e(p)s(ossible)e
(to)k(reco)m(v)m(er)g(data)f(from)g(the)f(undamaged)390
2645 y(blo)s(c)m(ks)30 b(in)f(the)h(\014le.)390 2796
y(The)j(compressed)h(represen)m(tation)f(of)h(eac)m(h)h(blo)s(c)m(k)e
(is)g(delimited)e(b)m(y)j(a)g(48-bit)g(pattern,)390 2900
y(whic)m(h)27 b(mak)m(es)j(it)e(p)s(ossible)e(to)j(\014nd)e(the)i(blo)s
(c)m(k)f(b)s(oundaries)e(with)i(reasonable)g(certain)m(t)m(y)-8
b(.)390 3003 y(Eac)m(h)34 b(blo)s(c)m(k)f(also)g(carries)g(its)g(o)m
(wn)g(32-bit)g(CR)m(C,)h(so)f(damaged)h(blo)s(c)m(ks)f(can)g(b)s(e)g
(distin-)390 3107 y(guished)c(from)h(undamaged)g(ones.)390
3258 y Fj(bzip2recover)37 b Fl(is)j(a)h(simple)e(program)h(whose)g
(purp)s(ose)f(is)h(to)i(searc)m(h)f(for)f(blo)s(c)m(ks)g(in)390
3362 y Fj(.bz2)34 b Fl(\014les,)i(and)f(write)f(eac)m(h)j(blo)s(c)m(k)d
(out)i(in)m(to)f(its)g(o)m(wn)g Fj(.bz2)f Fl(\014le.)55
b(Y)-8 b(ou)36 b(can)f(then)g(use)390 3466 y Fj(bzip2)29
b(-t)c Fl(to)i(test)f(the)g(in)m(tegrit)m(y)g(of)g(the)g(resulting)e
(\014les,)i(and)f(decompress)h(those)g(whic)m(h)390 3569
y(are)31 b(undamaged.)390 3721 y Fj(bzip2recover)41 b
Fl(tak)m(es)46 b(a)f(single)e(argumen)m(t,)49 b(the)44
b(name)h(of)g(the)f(damaged)h(\014le,)j(and)390 3824
y(writes)33 b(a)i(n)m(um)m(b)s(er)d(of)j(\014les)e Fj(rec0001file.bz2)p
Fl(,)e Fj(rec0002file.bz2)p Fl(,)g(etc,)36 b(con)m(taining)390
3928 y(the)42 b(extracted)g(blo)s(c)m(ks.)74 b(The)41
b(output)g(\014lenames)f(are)i(designed)e(so)i(that)g(the)g(use)f(of)
390 4032 y(wildcards)30 b(in)h(subsequen)m(t)h(pro)s(cessing)f({)i(for)
g(example,)g Fj(bzip2)c(-dc)g(rec*file.bz2)e(>)390 4136
y(recovered_data)f Fl({)31 b(lists)e(the)i(\014les)e(in)g(the)i
(correct)g(order.)390 4287 y Fj(bzip2recover)38 b Fl(should)i(b)s(e)g
(of)i(most)g(use)f(dealing)f(with)g(large)i Fj(.bz2)e
Fl(\014les,)k(as)d(these)390 4390 y(will)29 b(con)m(tain)j(man)m(y)g
(blo)s(c)m(ks.)45 b(It)32 b(is)f(clearly)g(futile)f(to)i(use)g(it)f(on)
h(damaged)g(single-blo)s(c)m(k)390 4494 y(\014les,)g(since)f(a)h
(damaged)h(blo)s(c)m(k)e(cannot)i(b)s(e)e(reco)m(v)m(ered.)47
b(If)32 b(y)m(ou)g(wish)e(to)j(minimise)c(an)m(y)390
4598 y(p)s(oten)m(tial)36 b(data)i(loss)e(through)g(media)h(or)f
(transmission)f(errors,)j(y)m(ou)f(migh)m(t)g(consider)390
4702 y(compressing)29 b(with)g(a)i(smaller)e(blo)s(c)m(k)h(size.)390
4946 y Ff(PERF)m(ORMANCE)39 b(NOTES)390 5132 y Fl(The)f(sorting)f
(phase)h(of)h(compression)e(gathers)i(together)h(similar)35
b(strings)i(in)g(the)i(\014le.)390 5236 y(Because)54
b(of)f(this,)58 b(\014les)52 b(con)m(taining)g(v)m(ery)h(long)g(runs)e
(of)i(rep)s(eated)g(sym)m(b)s(ols,)58 b(lik)m(e)390 5340
y Fj(")p Fl(aabaabaabaab)e(...)p Fj(")g Fl(\(rep)s(eated)g(sev)m(eral)f
(h)m(undred)e(times\))i(ma)m(y)h(compress)f(more)p eop
%%Page: 8 9
8 8 bop 150 -116 a Fl(Chapter)30 b(2:)41 b(Ho)m(w)31
b(to)g(use)f Fj(bzip2)2375 b Fl(8)390 299 y(slo)m(wly)33
b(than)g(normal.)50 b(V)-8 b(ersions)33 b(0.9.5)i(and)f(ab)s(o)m(v)m(e)
h(fare)e(m)m(uc)m(h)h(b)s(etter)g(than)f(previous)390
403 y(v)m(ersions)i(in)g(this)f(resp)s(ect.)57 b(The)35
b(ratio)h(b)s(et)m(w)m(een)h(w)m(orst-case)g(and)e(a)m(v)m(erage-case)
40 b(com-)390 506 y(pression)e(time)h(is)f(in)g(the)h(region)g(of)h
(10:1.)69 b(F)-8 b(or)40 b(previous)e(v)m(ersions,)j(this)d(\014gure)h
(w)m(as)390 610 y(more)f(lik)m(e)g(100:1.)66 b(Y)-8 b(ou)38
b(can)h(use)e(the)i Fj(-vvvv)d Fl(option)i(to)h(monitor)e(progress)h
(in)f(great)390 714 y(detail,)30 b(if)f(y)m(ou)i(w)m(an)m(t.)390
865 y(Decompression)f(sp)s(eed)g(is)f(una\013ected)i(b)m(y)f(these)h
(phenomena.)390 1016 y Fj(bzip2)i Fl(usually)g(allo)s(cates)i(sev)m
(eral)f(megab)m(ytes)j(of)d(memory)h(to)g(op)s(erate)h(in,)e(and)g
(then)390 1120 y(c)m(harges)k(all)d(o)m(v)m(er)j(it)f(in)e(a)i(fairly)e
(random)h(fashion.)59 b(This)34 b(means)j(that)g(p)s(erformance,)390
1224 y(b)s(oth)27 b(for)h(compressing)f(and)g(decompressing,)h(is)f
(largely)g(determined)g(b)m(y)h(the)g(sp)s(eed)f(at)390
1327 y(whic)m(h)35 b(y)m(our)h(mac)m(hine)g(can)g(service)g(cac)m(he)i
(misses.)57 b(Because)37 b(of)g(this,)f(small)f(c)m(hanges)390
1431 y(to)f(the)f(co)s(de)h(to)f(reduce)g(the)h(miss)d(rate)j(ha)m(v)m
(e)h(b)s(een)d(observ)m(ed)h(to)h(giv)m(e)g(disprop)s(ortion-)390
1535 y(ately)i(large)f(p)s(erformance)f(impro)m(v)m(emen)m(ts.)56
b(I)35 b(imagine)f Fj(bzip2)g Fl(will)e(p)s(erform)i(b)s(est)h(on)390
1639 y(mac)m(hines)30 b(with)f(v)m(ery)i(large)f(cac)m(hes.)390
1885 y Ff(CA)-14 b(VEA)k(TS)390 2072 y Fl(I/O)38 b(error)g(messages)h
(are)f(not)h(as)f(helpful)e(as)i(they)g(could)f(b)s(e.)64
b Fj(bzip2)37 b Fl(tries)g(hard)g(to)390 2176 y(detect)29
b(I/O)e(errors)g(and)f(exit)i(cleanly)-8 b(,)27 b(but)g(the)h(details)e
(of)h(what)h(the)f(problem)f(is)g(some-)390 2280 y(times)k(seem)h
(rather)f(misleading.)390 2431 y(This)j(man)m(ual)g(page)i(p)s(ertains)
e(to)i(v)m(ersion)f(1.0)i(of)e Fj(bzip2)p Fl(.)51 b(Compressed)34
b(data)h(created)390 2534 y(b)m(y)25 b(this)e(v)m(ersion)i(is)e(en)m
(tirely)h(forw)m(ards)h(and)f(bac)m(kw)m(ards)h(compatible)f(with)f
(the)i(previous)390 2638 y(public)18 b(releases,)24 b(v)m(ersions)c
(0.1pl2,)k(0.9.0)e(and)f(0.9.5,)k(but)20 b(with)g(the)h(follo)m(wing)e
(exception:)390 2742 y(0.9.0)43 b(and)e(ab)s(o)m(v)m(e)h(can)g
(correctly)f(decompress)g(m)m(ultiple)e(concatenated)k(compressed)390
2846 y(\014les.)c(0.1pl2)30 b(cannot)g(do)f(this;)f(it)h(will)e(stop)i
(after)h(decompressing)e(just)g(the)i(\014rst)e(\014le)g(in)390
2949 y(the)j(stream.)390 3100 y Fj(bzip2recover)20 b
Fl(uses)k(32-bit)g(in)m(tegers)f(to)i(represen)m(t)f(bit)e(p)s
(ositions)g(in)g(compressed)i(\014les,)390 3204 y(so)j(it)f(cannot)i
(handle)d(compressed)i(\014les)f(more)h(than)f(512)i(megab)m(ytes)h
(long.)39 b(This)25 b(could)390 3308 y(easily)30 b(b)s(e)f(\014xed.)390
3555 y Ff(A)m(UTHOR)390 3741 y Fl(Julian)f(Sew)m(ard,)i
Fj(jseward@acm.org)p Fl(.)390 3892 y(The)24 b(ideas)f(em)m(b)s(o)s
(died)f(in)h Fj(bzip2)f Fl(are)j(due)e(to)i(\(at)g(least\))g(the)f
(follo)m(wing)e(p)s(eople:)37 b(Mic)m(hael)390 3996 y(Burro)m(ws)48
b(and)g(Da)m(vid)h(Wheeler)f(\(for)h(the)g(blo)s(c)m(k)f(sorting)g
(transformation\),)53 b(Da)m(vid)390 4100 y(Wheeler)45
b(\(again,)50 b(for)45 b(the)g(Hu\013man)g(co)s(der\),)k(P)m(eter)d(F)
-8 b(en)m(wic)m(k)46 b(\(for)g(the)f(structured)390 4204
y(co)s(ding)26 b(mo)s(del)g(in)f(the)i(original)e Fj(bzip)p
Fl(,)i(and)f(man)m(y)h(re\014nemen)m(ts\),)h(and)e(Alistair)f
(Mo\013at,)390 4307 y(Radford)34 b(Neal)h(and)f(Ian)h(Witten)g(\(for)f
(the)h(arithmetic)g(co)s(der)f(in)g(the)h(original)d
Fj(bzip)p Fl(\).)390 4411 y(I)41 b(am)g(m)m(uc)m(h)h(indebted)e(for)h
(their)f(help,)j(supp)s(ort)c(and)i(advice.)74 b(See)41
b(the)h(man)m(ual)e(in)390 4515 y(the)28 b(source)g(distribution)23
b(for)28 b(p)s(oin)m(ters)e(to)j(sources)e(of)h(do)s(cumen)m(tation.)40
b(Christian)25 b(v)m(on)390 4619 y(Ro)s(ques)31 b(encouraged)h(me)g(to)
g(lo)s(ok)f(for)h(faster)g(sorting)f(algorithms,)f(so)i(as)g(to)g(sp)s
(eed)f(up)390 4723 y(compression.)47 b(Bela)34 b(Lubkin)c(encouraged)k
(me)f(to)g(impro)m(v)m(e)g(the)g(w)m(orst-case)i(compres-)390
4826 y(sion)25 b(p)s(erformance.)38 b(Man)m(y)26 b(p)s(eople)f(sen)m(t)
h(patc)m(hes,)h(help)s(ed)d(with)g(p)s(ortabilit)m(y)f(problems,)390
4930 y(len)m(t)30 b(mac)m(hines,)g(ga)m(v)m(e)j(advice)d(and)g(w)m(ere)
h(generally)f(helpful.)p eop
%%Page: 9 10
9 9 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1927 b Fl(9)150 299 y Fh(3)80 b(Programming)53
b(with)h Fg(libbzip2)150 568 y Fl(This)29 b(c)m(hapter)i(describ)s(es)d
(the)j(programming)e(in)m(terface)i(to)g Fj(libbzip2)p
Fl(.)150 725 y(F)-8 b(or)36 b(general)e(bac)m(kground)h(information,)f
(particularly)f(ab)s(out)h(memory)h(use)f(and)g(p)s(erformance)g(as-)
150 834 y(p)s(ects,)d(y)m(ou'd)f(b)s(e)g(w)m(ell)f(advised)g(to)j(read)
e(Chapter)g(2)g(as)h(w)m(ell.)150 1124 y Fk(3.1)68 b(T)-11
b(op-lev)l(el)46 b(structure)150 1316 y Fj(libbzip2)33
b Fl(is)i(a)h(\015exible)e(library)f(for)j(compressing)f(and)g
(decompressing)f(data)j(in)d(the)i Fj(bzip2)e Fl(data)150
1426 y(format.)39 b(Although)24 b(pac)m(k)-5 b(aged)26
b(as)e(a)h(single)e(en)m(tit)m(y)-8 b(,)27 b(it)d(helps)f(to)i(regard)g
(the)g(library)d(as)i(three)h(separate)150 1535 y(parts:)40
b(the)31 b(lo)m(w)f(lev)m(el)g(in)m(terface,)h(and)f(the)h(high)e(lev)m
(el)h(in)m(terface,)h(and)f(some)h(utilit)m(y)d(functions.)150
1692 y(The)38 b(structure)g(of)g Fj(libbzip2)p Fl('s)e(in)m(terfaces)j
(is)e(similar)f(to)j(that)g(of)g(Jean-loup)e(Gailly's)g(and)h(Mark)150
1802 y(Adler's)29 b(excellen)m(t)i Fj(zlib)e Fl(library)-8
b(.)150 1959 y(All)29 b(externally)g(visible)f(sym)m(b)s(ols)h(ha)m(v)m
(e)i(names)f(b)s(eginning)e Fj(BZ2_)p Fl(.)39 b(This)29
b(is)g(new)h(in)f(v)m(ersion)h(1.0.)41 b(The)150 2068
y(in)m(ten)m(tion)30 b(is)f(to)i(minimise)d(p)s(ollution)f(of)k(the)f
(namespaces)h(of)g(library)d(clien)m(ts.)150 2321 y Ff(3.1.1)63
b(Lo)m(w-lev)m(el)39 b(summary)150 2514 y Fl(This)21
b(in)m(terface)h(pro)m(vides)g(services)g(for)g(compressing)f(and)h
(decompressing)f(data)i(in)e(memory)-8 b(.)38 b(There's)150
2623 y(no)43 b(pro)m(vision)e(for)h(dealing)g(with)f(\014les,)k
(streams)e(or)g(an)m(y)g(other)g(I/O)g(mec)m(hanisms,)i(just)e(straigh)
m(t)150 2733 y(memory-to-memory)25 b(w)m(ork.)38 b(In)23
b(fact,)k(this)22 b(part)i(of)f(the)h(library)d(can)j(b)s(e)f(compiled)
f(without)h(inclusion)150 2843 y(of)31 b Fj(stdio.h)p
Fl(,)d(whic)m(h)h(ma)m(y)i(b)s(e)f(helpful)d(for)k(em)m(b)s(edded)e
(applications.)150 2999 y(The)h(lo)m(w-lev)m(el)g(part)g(of)h(the)f
(library)e(has)i(no)h(global)e(v)-5 b(ariables)29 b(and)h(is)g
(therefore)g(thread-safe.)150 3156 y(Six)d(routines)g(mak)m(e)j(up)d
(the)i(lo)m(w)f(lev)m(el)g(in)m(terface:)41 b Fj(BZ2_bzCompressInit)p
Fl(,)24 b Fj(BZ2_bzCompress)p Fl(,)h(and)150 3266 y Fj
(BZ2_bzCompressEnd)h Fl(for)k(compression,)f(and)h(a)h(corresp)s
(onding)d(trio)i Fj(BZ2_bzDecompressInit)p Fl(,)150 3375
y Fj(BZ2_bzDecompress)37 b Fl(and)j Fj(BZ2_bzDecompressEnd)c
Fl(for)42 b(decompression.)72 b(The)41 b Fj(*Init)e Fl(functions)150
3485 y(allo)s(cate)44 b(memory)g(for)f(compression/decompression)f(and)
h(do)h(other)g(initialisations,)f(whilst)f(the)150 3595
y Fj(*End)29 b Fl(functions)g(close)i(do)m(wn)f(op)s(erations)f(and)h
(release)h(memory)-8 b(.)150 3751 y(The)36 b(real)f(w)m(ork)i(is)e
(done)h(b)m(y)g Fj(BZ2_bzCompress)c Fl(and)j Fj(BZ2_bzDecompress)p
Fl(.)54 b(These)36 b(compress)g(and)150 3861 y(decompress)30
b(data)h(from)f(a)h(user-supplied)c(input)i(bu\013er)g(to)i(a)g
(user-supplied)c(output)j(bu\013er.)40 b(These)150 3971
y(bu\013ers)32 b(can)i(b)s(e)e(an)m(y)i(size;)g(arbitrary)e(quan)m
(tities)h(of)g(data)h(are)g(handled)d(b)m(y)i(making)f(rep)s(eated)i
(calls)150 4080 y(to)f(these)f(functions.)44 b(This)30
b(is)h(a)h(\015exible)e(mec)m(hanism)i(allo)m(wing)e(a)i(consumer-pull)
e(st)m(yle)i(of)g(activit)m(y)-8 b(,)150 4190 y(or)30
b(pro)s(ducer-push,)e(or)i(a)h(mixture)e(of)i(b)s(oth.)150
4443 y Ff(3.1.2)63 b(High-lev)m(el)41 b(summary)150 4635
y Fl(This)d(in)m(terface)j(pro)m(vides)e(some)h(handy)f(wrapp)s(ers)f
(around)h(the)i(lo)m(w-lev)m(el)f(in)m(terface)g(to)h(facilitate)150
4745 y(reading)26 b(and)g(writing)f Fj(bzip2)g Fl(format)i(\014les)f
(\()p Fj(.bz2)g Fl(\014les\).)38 b(The)27 b(routines)e(pro)m(vide)h(ho)
s(oks)h(to)g(facilitate)150 4854 y(reading)43 b(\014les)f(in)h(whic)m
(h)f(the)i Fj(bzip2)f Fl(data)h(stream)g(is)f(em)m(b)s(edded)f(within)g
(some)i(larger-scale)g(\014le)150 4964 y(structure,)30
b(or)h(where)e(there)i(are)g(m)m(ultiple)d Fj(bzip2)h
Fl(data)i(streams)f(concatenated)j(end-to-end.)150 5121
y(F)-8 b(or)31 b(reading)f(\014les,)f Fj(BZ2_bzReadOpen)p
Fl(,)e Fj(BZ2_bzRead)p Fl(,)h Fj(BZ2_bzReadClose)e Fl(and)150
5230 y Fj(BZ2_bzReadGetUnused)19 b Fl(are)25 b(supplied.)36
b(F)-8 b(or)25 b(writing)d(\014les,)j Fj(BZ2_bzWriteOpen)p
Fl(,)d Fj(BZ2_bzWrite)g Fl(and)150 5340 y Fj(BZ2_bzWriteFinish)k
Fl(are)k(a)m(v)-5 b(ailable.)p eop
%%Page: 10 11
10 10 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(10)150 299 y(As)24 b(with)f(the)h(lo)m
(w-lev)m(el)h(library)-8 b(,)23 b(no)h(global)g(v)-5
b(ariables)23 b(are)h(used)g(so)g(the)h(library)c(is)j(p)s(er)f(se)h
(thread-safe.)150 408 y(Ho)m(w)m(ev)m(er,)32 b(if)c(I/O)h(errors)g(o)s
(ccur)g(whilst)e(reading)i(or)g(writing)e(the)j(underlying)c
(compressed)j(\014les,)g(y)m(ou)150 518 y(ma)m(y)j(ha)m(v)m(e)g(to)g
(consult)e Fj(errno)g Fl(to)h(determine)g(the)g(cause)g(of)h(the)f
(error.)42 b(In)30 b(that)i(case,)h(y)m(ou'd)e(need)g(a)150
628 y(C)f(library)e(whic)m(h)h(correctly)i(supp)s(orts)d
Fj(errno)h Fl(in)g(a)i(m)m(ultithreaded)e(en)m(vironmen)m(t.)150
784 y(T)-8 b(o)56 b(mak)m(e)g(the)g(library)d(a)j(little)e(simpler)f
(and)i(more)h(p)s(ortable,)61 b Fj(BZ2_bzReadOpen)51
b Fl(and)k Fj(BZ2_)150 894 y(bzWriteOpen)34 b Fl(require)j(y)m(ou)g(to)
i(pass)e(them)g(\014le)g(handles)f(\()p Fj(FILE*)p Fl(s\))g(whic)m(h)h
(ha)m(v)m(e)h(previously)e(b)s(een)150 1004 y(op)s(ened)41
b(for)g(reading)f(or)h(writing)f(resp)s(ectiv)m(ely)-8
b(.)73 b(That)41 b(a)m(v)m(oids)h(p)s(ortabilit)m(y)d(problems)g(asso)s
(ciated)150 1113 y(with)j(\014le)h(op)s(erations)g(and)g(\014le)g
(attributes,)j(whilst)c(not)i(b)s(eing)e(m)m(uc)m(h)h(of)h(an)g(imp)s
(osition)c(on)k(the)150 1223 y(programmer.)150 1474 y
Ff(3.1.3)63 b(Utilit)m(y)40 b(functions)h(summary)150
1666 y Fl(F)-8 b(or)45 b(v)m(ery)g(simple)d(needs,)48
b Fj(BZ2_bzBuffToBuffCompres)o(s)38 b Fl(and)44 b Fj
(BZ2_bzBuffToBuffDecompres)o(s)150 1776 y Fl(are)29 b(pro)m(vided.)38
b(These)28 b(compress)g(data)h(in)e(memory)h(from)g(one)h(bu\013er)e
(to)i(another)f(bu\013er)g(in)f(a)h(single)150 1885 y(function)38
b(call.)67 b(Y)-8 b(ou)40 b(should)d(assess)j(whether)f(these)h
(functions)d(ful\014ll)f(y)m(our)k(memory-to-memory)150
1995 y(compression/decompression)26 b(requiremen)m(ts)h(b)s(efore)g(in)
m(v)m(esting)g(e\013ort)i(in)d(understanding)f(the)j(more)150
2105 y(general)i(but)g(more)h(complex)f(lo)m(w-lev)m(el)g(in)m
(terface.)150 2261 y(Y)-8 b(oshiok)j(a)47 b(Tsuneo)e(\()p
Fj(QWF00133@niftyserve.or.jp)40 b Fl(/)46 b Fj
(tsuneo-y@is.aist-nara.ac.)o(jp)p Fl(\))40 b(has)150
2371 y(con)m(tributed)f(some)h(functions)e(to)j(giv)m(e)f(b)s(etter)g
Fj(zlib)f Fl(compatibilit)m(y)-8 b(.)67 b(These)40 b(functions)e(are)i
Fj(BZ2_)150 2481 y(bzopen)p Fl(,)e Fj(BZ2_bzread)p Fl(,)f
Fj(BZ2_bzwrite)p Fl(,)g Fj(BZ2_bzflush)p Fl(,)g Fj(BZ2_bzclose)p
Fl(,)f Fj(BZ2_bzerror)f Fl(and)i Fj(BZ2_)150 2590 y(bzlibVersion)p
Fl(.)49 b(Y)-8 b(ou)35 b(ma)m(y)g(\014nd)e(these)i(functions)d(more)j
(con)m(v)m(enien)m(t)g(for)f(simple)f(\014le)g(reading)h(and)150
2700 y(writing,)c(than)h(those)h(in)e(the)i(high-lev)m(el)e(in)m
(terface.)45 b(These)31 b(functions)f(are)i(not)g(\(y)m(et\))h
(o\016cially)d(part)150 2809 y(of)k(the)g(library)-8
b(,)33 b(and)g(are)h(minimally)c(do)s(cumen)m(ted)k(here.)51
b(If)33 b(they)h(break,)h(y)m(ou)f(get)h(to)g(k)m(eep)f(all)f(the)150
2919 y(pieces.)40 b(I)31 b(hop)s(e)e(to)i(do)s(cumen)m(t)g(them)f(prop)
s(erly)e(when)h(time)i(p)s(ermits.)150 3076 y(Y)-8 b(oshiok)j(a)27
b(also)g(con)m(tributed)f(mo)s(di\014cations)f(to)i(allo)m(w)f(the)h
(library)e(to)i(b)s(e)f(built)f(as)i(a)g(Windo)m(ws)f(DLL.)150
3362 y Fk(3.2)68 b(Error)45 b(handling)150 3554 y Fl(The)23
b(library)f(is)h(designed)g(to)i(reco)m(v)m(er)g(cleanly)f(in)e(all)h
(situations,)h(including)d(the)j(w)m(orst-case)i(situation)150
3664 y(of)j(decompressing)e(random)g(data.)41 b(I'm)28
b(not)h(100\045)g(sure)f(that)h(it)f(can)h(alw)m(a)m(ys)g(do)f(this,)g
(so)g(y)m(ou)h(migh)m(t)150 3774 y(w)m(an)m(t)i(to)g(add)e(a)i(signal)d
(handler)g(to)j(catc)m(h)h(segmen)m(tation)f(violations)e(during)f
(decompression)h(if)g(y)m(ou)150 3883 y(are)g(feeling)f(esp)s(ecially)f
(paranoid.)39 b(I)28 b(w)m(ould)g(b)s(e)g(in)m(terested)h(in)e(hearing)
h(more)h(ab)s(out)f(the)h(robustness)150 3993 y(of)i(the)f(library)e
(to)j(corrupted)f(compressed)g(data.)150 4150 y(V)-8
b(ersion)39 b(1.0)h(is)f(m)m(uc)m(h)g(more)h(robust)e(in)g(this)g(resp)
s(ect)i(than)f(0.9.0)i(or)e(0.9.5.)70 b(In)m(v)m(estigations)39
b(with)150 4259 y(Chec)m(k)m(er)21 b(\(a)g(to)s(ol)g(for)f(detecting)h
(problems)d(with)h(memory)h(managemen)m(t,)k(similar)18
b(to)j(Purify\))e(indicate)150 4369 y(that,)40 b(at)e(least)f(for)g
(the)h(few)e(\014les)h(I)g(tested,)j(all)c(single-bit)f(errors)i(in)e
(the)j(decompressed)f(data)h(are)150 4478 y(caugh)m(t)c(prop)s(erly)-8
b(,)31 b(with)g(no)i(segmen)m(tation)h(faults,)e(no)g(reads)h(of)g
(uninitialised)27 b(data)34 b(and)e(no)g(out)h(of)150
4588 y(range)f(reads)g(or)f(writes.)44 b(So)32 b(it's)f(certainly)g(m)m
(uc)m(h)h(impro)m(v)m(ed,)g(although)f(I)g(w)m(ouldn't)g(claim)g(it)g
(to)i(b)s(e)150 4698 y(totally)d(b)s(om)m(bpro)s(of.)150
4854 y(The)25 b(\014le)g Fj(bzlib.h)f Fl(con)m(tains)i(all)f
(de\014nitions)e(needed)i(to)i(use)e(the)h(library)-8
b(.)37 b(In)26 b(particular,)f(y)m(ou)h(should)150 4964
y(de\014nitely)i(not)j(include)d Fj(bzlib_private.h)p
Fl(.)150 5121 y(In)39 b Fj(bzlib.h)p Fl(,)h(the)g(v)-5
b(arious)39 b(return)f(v)-5 b(alues)39 b(are)h(de\014ned.)68
b(The)39 b(follo)m(wing)f(list)h(is)f(not)i(in)m(tended)f(as)150
5230 y(an)c(exhaustiv)m(e)h(description)d(of)i(the)h(circumstances)f
(in)f(whic)m(h)g(a)i(giv)m(en)f(v)-5 b(alue)35 b(ma)m(y)h(b)s(e)e
(returned)h({)150 5340 y(those)h(descriptions)d(are)j(giv)m(en)f
(later.)56 b(Rather,)37 b(it)d(is)h(in)m(tended)f(to)i(con)m(v)m(ey)h
(the)e(rough)g(meaning)g(of)p eop
%%Page: 11 12
11 11 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(11)150 299 y(eac)m(h)38
b(return)d(v)-5 b(alue.)59 b(The)36 b(\014rst)g(\014v)m(e)g(actions)h
(are)g(normal)f(and)f(not)i(in)m(tended)f(to)h(denote)g(an)f(error)150
408 y(situation.)150 592 y Fj(BZ_OK)180 b Fl(The)30 b(requested)g
(action)h(w)m(as)g(completed)f(successfully)-8 b(.)150
756 y Fj(BZ_RUN_OK)150 866 y(BZ_FLUSH_OK)150 975 y(BZ_FINISH_OK)630
1085 y Fl(In)24 b Fj(BZ2_bzCompress)p Fl(,)e(the)i(requested)g
(\015ush/\014nish/nothing-sp)s(ecial)c(action)k(w)m(as)h(com-)630
1194 y(pleted)30 b(successfully)-8 b(.)150 1358 y Fj(BZ_STREAM_END)630
1468 y Fl(Compression)38 b(of)j(data)f(w)m(as)h(completed,)h(or)f(the)f
(logical)f(stream)i(end)e(w)m(as)i(detected)630 1577
y(during)28 b(decompression.)150 1761 y(The)i(follo)m(wing)f(return)g
(v)-5 b(alues)30 b(indicate)f(an)h(error)g(of)h(some)g(kind.)150
1945 y Fj(BZ_CONFIG_ERROR)630 2055 y Fl(Indicates)48
b(that)h(the)g(library)e(has)h(b)s(een)g(improp)s(erly)d(compiled)j(on)
g(y)m(our)h(platform)630 2164 y({)j(a)g(ma)5 b(jor)51
b(con\014guration)g(error.)104 b(Sp)s(eci\014cally)-8
b(,)55 b(it)c(means)g(that)h Fj(sizeof\(char\))p Fl(,)630
2274 y Fj(sizeof\(short\))44 b Fl(and)i Fj(sizeof\(int\))f
Fl(are)j(not)f(1,)52 b(2)c(and)f(4)h(resp)s(ectiv)m(ely)-8
b(,)51 b(as)d(they)630 2384 y(should)27 b(b)s(e.)40 b(Note)30
b(that)g(the)f(library)e(should)g(still)g(w)m(ork)i(prop)s(erly)e(on)i
(64-bit)g(platforms)630 2493 y(whic)m(h)d(follo)m(w)h(the)g(LP64)h
(programming)e(mo)s(del)h({)g(that)h(is,)g(where)e Fj(sizeof\(long\))f
Fl(and)630 2603 y Fj(sizeof\(void*\))e Fl(are)k(8.)40
b(Under)25 b(LP64,)j Fj(sizeof\(int\))c Fl(is)h(still)f(4,)k(so)f
Fj(libbzip2)p Fl(,)e(whic)m(h)630 2712 y(do)s(esn't)30
b(use)g(the)h Fj(long)e Fl(t)m(yp)s(e,)i(is)e(OK.)150
2876 y Fj(BZ_SEQUENCE_ERROR)630 2986 y Fl(When)43 b(using)f(the)i
(library)-8 b(,)45 b(it)e(is)f(imp)s(ortan)m(t)h(to)h(call)e(the)i
(functions)e(in)g(the)i(correct)630 3095 y(sequence)28
b(and)f(with)f(data)j(structures)e(\(bu\013ers)f(etc\))j(in)e(the)g
(correct)i(states.)41 b Fj(libbzip2)630 3205 y Fl(c)m(hec)m(ks)26
b(as)e(m)m(uc)m(h)h(as)f(it)g(can)g(to)h(ensure)f(this)f(is)g(happ)s
(ening,)h(and)f(returns)g Fj(BZ_SEQUENCE_)630 3314 y(ERROR)36
b Fl(if)h(not.)62 b(Co)s(de)37 b(whic)m(h)g(complies)f(precisely)g
(with)h(the)g(function)g(seman)m(tics,)j(as)630 3424
y(detailed)d(b)s(elo)m(w,)i(should)d(nev)m(er)i(receiv)m(e)h(this)d(v)
-5 b(alue;)41 b(suc)m(h)d(an)g(ev)m(en)m(t)h(denotes)f(buggy)630
3534 y(co)s(de)31 b(whic)m(h)e(y)m(ou)h(should)f(in)m(v)m(estigate.)150
3697 y Fj(BZ_PARAM_ERROR)630 3807 y Fl(Returned)43 b(when)f(a)i
(parameter)g(to)h(a)f(function)e(call)h(is)f(out)i(of)g(range)g(or)g
(otherwise)630 3917 y(manifestly)34 b(incorrect.)57 b(As)36
b(with)e Fj(BZ_SEQUENCE_ERROR)p Fl(,)f(this)i(denotes)h(a)g(bug)f(in)g
(the)630 4026 y(clien)m(t)23 b(co)s(de.)39 b(The)22 b(distinction)f(b)s
(et)m(w)m(een)j Fj(BZ_PARAM_ERROR)c Fl(and)j Fj(BZ_SEQUENCE_ERROR)630
4136 y Fl(is)29 b(a)i(bit)f(hazy)-8 b(,)31 b(but)f(still)e(w)m(orth)i
(making.)150 4300 y Fj(BZ_MEM_ERROR)630 4409 y Fl(Returned)g(when)f(a)i
(request)f(to)i(allo)s(cate)f(memory)f(failed.)40 b(Note)31
b(that)g(the)g(quan)m(tit)m(y)g(of)630 4519 y(memory)21
b(needed)g(to)i(decompress)e(a)g(stream)h(cannot)g(b)s(e)f(determined)f
(un)m(til)g(the)h(stream's)630 4628 y(header)29 b(has)g(b)s(een)g
(read.)40 b(So)29 b Fj(BZ2_bzDecompress)c Fl(and)j Fj(BZ2_bzRead)f
Fl(ma)m(y)j(return)e Fj(BZ_)630 4738 y(MEM_ERROR)d Fl(ev)m(en)k(though)
e(some)h(of)g(the)g(compressed)g(data)g(has)g(b)s(een)f(read.)39
b(The)28 b(same)630 4847 y(is)38 b(not)i(true)f(for)g(compression;)k
(once)d Fj(BZ2_bzCompressInit)34 b Fl(or)39 b Fj(BZ2_bzWriteOpen)630
4957 y Fl(ha)m(v)m(e)32 b(successfully)c(completed,)j
Fj(BZ_MEM_ERROR)c Fl(cannot)k(o)s(ccur.)150 5121 y Fj(BZ_DATA_ERROR)630
5230 y Fl(Returned)h(when)g(a)h(data)g(in)m(tegrit)m(y)g(error)g(is)e
(detected)k(during)30 b(decompression.)47 b(Most)630
5340 y(imp)s(ortan)m(tly)-8 b(,)31 b(this)f(means)i(when)f(stored)g
(and)g(computed)h(CR)m(Cs)f(for)g(the)h(data)g(do)g(not)p
eop
%%Page: 12 13
12 12 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(12)630 299 y(matc)m(h.)41
b(This)28 b(v)-5 b(alue)29 b(is)f(also)i(returned)e(up)s(on)g
(detection)i(of)g(an)m(y)g(other)f(anomaly)h(in)e(the)630
408 y(compressed)i(data.)150 560 y Fj(BZ_DATA_ERROR_MAGIC)630
670 y Fl(As)k(a)g(sp)s(ecial)f(case)i(of)f Fj(BZ_DATA_ERROR)p
Fl(,)d(it)i(is)g(sometimes)h(useful)e(to)j(kno)m(w)f(when)f(the)630
779 y(compressed)d(stream)h(do)s(es)f(not)g(start)h(with)e(the)i
(correct)h(magic)e(b)m(ytes)h(\()p Fj('B')f('Z')f('h')p
Fl(\).)150 931 y Fj(BZ_IO_ERROR)630 1040 y Fl(Returned)k(b)m(y)h
Fj(BZ2_bzRead)d Fl(and)i Fj(BZ2_bzWrite)e Fl(when)i(there)h(is)f(an)g
(error)h(reading)f(or)630 1150 y(writing)28 b(in)h(the)h(compressed)g
(\014le,)f(and)h(b)m(y)g Fj(BZ2_bzReadOpen)c Fl(and)j
Fj(BZ2_bzWriteOpen)630 1259 y Fl(for)i(attempts)i(to)f(use)f(a)h
(\014le)e(for)i(whic)m(h)e(the)h(error)g(indicator)g(\(viz,)g
Fj(ferror\(f\))p Fl(\))f(is)g(set.)630 1369 y(On)h(receipt)g(of)h
Fj(BZ_IO_ERROR)p Fl(,)e(the)h(caller)h(should)d(consult)i
Fj(errno)g Fl(and/or)g Fj(perror)f Fl(to)630 1479 y(acquire)g(op)s
(erating-system)g(sp)s(eci\014c)f(information)g(ab)s(out)h(the)h
(problem.)150 1630 y Fj(BZ_UNEXPECTED_EOF)630 1740 y
Fl(Returned)36 b(b)m(y)g Fj(BZ2_bzRead)e Fl(when)i(the)h(compressed)f
(\014le)g(\014nishes)e(b)s(efore)j(the)f(logical)630
1849 y(end)30 b(of)g(stream)h(is)e(detected.)150 2001
y Fj(BZ_OUTBUFF_FULL)630 2110 y Fl(Returned)g(b)m(y)i
Fj(BZ2_bzBuffToBuffCompres)o(s)24 b Fl(and)30 b Fj
(BZ2_bzBuffToBuffDecompres)o(s)630 2220 y Fl(to)h(indicate)f(that)h
(the)f(output)g(data)h(will)d(not)i(\014t)h(in)m(to)f(the)h(output)f
(bu\013er)f(pro)m(vided.)150 2492 y Fk(3.3)68 b(Lo)l(w-lev)l(el)47
b(in)l(terface)150 2766 y Ff(3.3.1)63 b Fe(BZ2_bzCompressInit)390
2953 y Fj(typedef)533 3057 y(struct)46 b({)676 3161 y(char)h(*next_in;)
676 3264 y(unsigned)f(int)h(avail_in;)676 3368 y(unsigned)f(int)h
(total_in_lo32;)676 3472 y(unsigned)f(int)h(total_in_hi32;)676
3680 y(char)g(*next_out;)676 3783 y(unsigned)f(int)h(avail_out;)676
3887 y(unsigned)f(int)h(total_out_lo32;)676 3991 y(unsigned)f(int)h
(total_out_hi32;)676 4198 y(void)g(*state;)676 4406 y(void)g
(*\(*bzalloc\)\(void)c(*,int,int\);)676 4510 y(void)k
(\(*bzfree\)\(void)d(*,void)i(*\);)676 4614 y(void)h(*opaque;)533
4717 y(})533 4821 y(bz_stream;)390 5029 y(int)g(BZ2_bzCompressInit)c
(\()k(bz_stream)e(*strm,)1583 5132 y(int)i(blockSize100k,)1583
5236 y(int)g(verbosity,)1583 5340 y(int)g(workFactor)e(\);)p
eop
%%Page: 13 14
13 13 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(13)150 456 y(Prepares)32
b(for)h(compression.)47 b(The)32 b Fj(bz_stream)e Fl(structure)j(holds)
e(all)h(data)h(p)s(ertaining)e(to)i(the)g(com-)150 565
y(pression)i(activit)m(y)-8 b(.)62 b(A)37 b Fj(bz_stream)e
Fl(structure)h(should)f(b)s(e)i(allo)s(cated)g(and)f(initialised)e
(prior)h(to)j(the)150 675 y(call.)67 b(The)39 b(\014elds)e(of)j
Fj(bz_stream)d Fl(comprise)h(the)i(en)m(tiret)m(y)g(of)f(the)h
(user-visible)c(data.)68 b Fj(state)38 b Fl(is)h(a)150
784 y(p)s(oin)m(ter)29 b(to)i(the)g(priv)-5 b(ate)30
b(data)h(structures)f(required)e(for)i(compression.)150
941 y(Custom)37 b(memory)g(allo)s(cators)g(are)h(supp)s(orted,)f(via)g
(\014elds)f Fj(bzalloc)p Fl(,)h Fj(bzfree)p Fl(,)g(and)g
Fj(opaque)p Fl(.)59 b(The)150 1051 y(v)-5 b(alue)32 b
Fj(opaque)e Fl(is)i(passed)f(to)i(as)g(the)f(\014rst)g(argumen)m(t)h
(to)g(all)e(calls)g(to)i Fj(bzalloc)d Fl(and)i Fj(bzfree)p
Fl(,)f(but)h(is)150 1160 y(otherwise)d(ignored)g(b)m(y)h(the)g(library)
-8 b(.)38 b(The)29 b(call)h Fj(bzalloc)e(\()i(opaque,)e(n,)i(m)g(\))g
Fl(is)e(exp)s(ected)j(to)f(return)150 1270 y(a)g(p)s(oin)m(ter)e
Fj(p)h Fl(to)h Fj(n)g(*)g(m)f Fl(b)m(ytes)h(of)g(memory)-8
b(,)30 b(and)e Fj(bzfree)h(\()h(opaque,)f(p)h(\))f Fl(should)e(free)i
(that)h(memory)-8 b(.)150 1427 y(If)33 b(y)m(ou)g(don't)h(w)m(an)m(t)g
(to)g(use)f(a)g(custom)h(memory)f(allo)s(cator,)h(set)g
Fj(bzalloc)p Fl(,)e Fj(bzfree)g Fl(and)h Fj(opaque)e
Fl(to)150 1537 y Fj(NULL)p Fl(,)e(and)h(the)h(library)d(will)f(then)k
(use)f(the)g(standard)g Fj(malloc)p Fl(/)p Fj(free)e
Fl(routines.)150 1693 y(Before)39 b(calling)d Fj(BZ2_bzCompressInit)p
Fl(,)f(\014elds)h Fj(bzalloc)p Fl(,)h Fj(bzfree)f Fl(and)h
Fj(opaque)f Fl(should)g(b)s(e)h(\014lled)150 1803 y(appropriately)-8
b(,)35 b(as)h(just)f(describ)s(ed.)53 b(Up)s(on)34 b(return,)i(the)g
(in)m(ternal)e(state)i(will)d(ha)m(v)m(e)j(b)s(een)f(allo)s(cated)150
1913 y(and)43 b(initialised,)g(and)g Fj(total_in_lo32)p
Fl(,)h Fj(total_in_hi32)p Fl(,)f Fj(total_out_lo32)d
Fl(and)j Fj(total_out_)150 2022 y(hi32)37 b Fl(will)f(ha)m(v)m(e)j(b)s
(een)f(set)h(to)g(zero.)65 b(These)38 b(four)g(\014elds)e(are)j(used)f
(b)m(y)g(the)g(library)e(to)j(inform)e(the)150 2132 y(caller)j(of)g
(the)h(total)g(amoun)m(t)g(of)g(data)g(passed)f(in)m(to)g(and)g(out)g
(of)h(the)g(library)-8 b(,)41 b(resp)s(ectiv)m(ely)-8
b(.)70 b(Y)-8 b(ou)150 2241 y(should)34 b(not)j(try)f(to)h(c)m(hange)g
(them.)58 b(As)36 b(of)h(v)m(ersion)f(1.0,)j(64-bit)d(coun)m(ts)h(are)f
(main)m(tained,)h(ev)m(en)g(on)150 2351 y(32-bit)i(platforms,)h(using)d
(the)i Fj(_hi32)e Fl(\014elds)g(to)j(store)f(the)g(upp)s(er)d(32)k
(bits)d(of)i(the)g(coun)m(t.)66 b(So,)41 b(for)150 2460
y(example,)30 b(the)h(total)g(amoun)m(t)g(of)f(data)h(in)f(is)f
Fj(\(total_in_hi32)d(<<)k(32\))g(+)g(total_in_lo32)p
Fl(.)150 2617 y(P)m(arameter)g Fj(blockSize100k)25 b
Fl(sp)s(eci\014es)i(the)h(blo)s(c)m(k)g(size)h(to)g(b)s(e)f(used)f(for)
h(compression.)40 b(It)28 b(should)f(b)s(e)150 2727 y(a)k(v)-5
b(alue)30 b(b)s(et)m(w)m(een)i(1)f(and)f(9)h(inclusiv)m(e,)e(and)h(the)
h(actual)g(blo)s(c)m(k)f(size)g(used)g(is)g(100000)j(x)e(this)e
(\014gure.)42 b(9)150 2836 y(giv)m(es)31 b(the)f(b)s(est)g(compression)
g(but)f(tak)m(es)j(most)f(memory)-8 b(.)150 2993 y(P)m(arameter)29
b Fj(verbosity)c Fl(should)h(b)s(e)h(set)i(to)f(a)h(n)m(um)m(b)s(er)d
(b)s(et)m(w)m(een)j(0)f(and)f(4)h(inclusiv)m(e.)38 b(0)28
b(is)f(silen)m(t,)h(and)150 3103 y(greater)j(n)m(um)m(b)s(ers)c(giv)m
(e)j(increasingly)d(v)m(erb)s(ose)j(monitoring/debugging)d(output.)40
b(If)29 b(the)g(library)e(has)150 3212 y(b)s(een)j(compiled)e(with)i
Fj(-DBZ_NO_STDIO)p Fl(,)d(no)j(suc)m(h)g(output)g(will)e(app)s(ear)h
(for)h(an)m(y)h(v)m(erb)s(osit)m(y)f(setting.)150 3369
y(P)m(arameter)35 b Fj(workFactor)d Fl(con)m(trols)i(ho)m(w)g(the)g
(compression)f(phase)h(b)s(eha)m(v)m(es)g(when)f(presen)m(ted)h(with)
150 3479 y(w)m(orst)40 b(case,)j(highly)37 b(rep)s(etitiv)m(e,)k(input)
d(data.)68 b(If)39 b(compression)g(runs)e(in)m(to)j(di\016culties)d
(caused)i(b)m(y)150 3588 y(rep)s(etitiv)m(e)34 b(data,)j(the)e(library)
d(switc)m(hes)j(from)f(the)h(standard)f(sorting)g(algorithm)g(to)i(a)f
(fallbac)m(k)f(al-)150 3698 y(gorithm.)47 b(The)32 b(fallbac)m(k)g(is)g
(slo)m(w)m(er)g(than)h(the)f(standard)g(algorithm)g(b)m(y)g(p)s(erhaps)
f(a)i(factor)h(of)e(three,)150 3808 y(but)e(alw)m(a)m(ys)h(b)s(eha)m(v)
m(es)f(reasonably)-8 b(,)31 b(no)f(matter)h(ho)m(w)g(bad)f(the)g
(input.)150 3965 y(Lo)m(w)m(er)25 b(v)-5 b(alues)24 b(of)h
Fj(workFactor)d Fl(reduce)i(the)h(amoun)m(t)g(of)g(e\013ort)g(the)g
(standard)f(algorithm)f(will)f(exp)s(end)150 4074 y(b)s(efore)j
(resorting)h(to)g(the)g(fallbac)m(k.)39 b(Y)-8 b(ou)27
b(should)c(set)k(this)e(parameter)h(carefully;)g(to)s(o)h(lo)m(w,)g
(and)e(man)m(y)150 4184 y(inputs)32 b(will)f(b)s(e)i(handled)f(b)m(y)i
(the)g(fallbac)m(k)g(algorithm)f(and)g(so)h(compress)g(rather)g(slo)m
(wly)-8 b(,)34 b(to)s(o)h(high,)150 4293 y(and)24 b(y)m(our)h(a)m(v)m
(erage-to-w)m(orst)30 b(case)c(compression)e(times)h(can)g(b)s(ecome)g
(v)m(ery)h(large.)39 b(The)24 b(default)g(v)-5 b(alue)150
4403 y(of)31 b(30)g(giv)m(es)f(reasonable)h(b)s(eha)m(viour)e(o)m(v)m
(er)i(a)g(wide)e(range)i(of)f(circumstances.)150 4560
y(Allo)m(w)m(able)h(v)-5 b(alues)31 b(range)i(from)e(0)i(to)f(250)h
(inclusiv)m(e.)44 b(0)32 b(is)f(a)h(sp)s(ecial)f(case,)i(equiv)-5
b(alen)m(t)32 b(to)g(using)f(the)150 4669 y(default)f(v)-5
b(alue)29 b(of)i(30.)150 4826 y(Note)38 b(that)f(the)g(compressed)f
(output)g(generated)h(is)f(the)g(same)h(regardless)f(of)h(whether)f(or)
g(not)h(the)150 4936 y(fallbac)m(k)30 b(algorithm)f(is)h(used.)150
5093 y(Be)23 b(a)m(w)m(are)h(also)f(that)g(this)f(parameter)h(ma)m(y)g
(disapp)s(ear)e(en)m(tirely)h(in)f(future)h(v)m(ersions)g(of)h(the)g
(library)-8 b(.)36 b(In)150 5202 y(principle)20 b(it)j(should)e(b)s(e)h
(p)s(ossible)f(to)j(devise)f(a)g(go)s(o)s(d)g(w)m(a)m(y)i(to)f
(automatically)f(c)m(ho)s(ose)h(whic)m(h)e(algorithm)150
5312 y(to)31 b(use.)41 b(Suc)m(h)29 b(a)i(mec)m(hanism)f(w)m(ould)f
(render)g(the)i(parameter)g(obsolete.)p eop
%%Page: 14 15
14 14 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(14)150 299 y(P)m(ossible)29
b(return)h(v)-5 b(alues:)572 450 y Fj(BZ_CONFIG_ERROR)663
554 y Fl(if)29 b(the)i(library)d(has)i(b)s(een)f(mis-compiled)572
657 y Fj(BZ_PARAM_ERROR)663 761 y Fl(if)g Fj(strm)g Fl(is)h
Fj(NULL)663 865 y Fl(or)g Fj(blockSize)e(<)i Fl(1)h(or)f
Fj(blockSize)e(>)i Fl(9)663 969 y(or)g Fj(verbosity)e(<)i
Fl(0)h(or)f Fj(verbosity)e(>)i Fl(4)663 1073 y(or)g Fj(workFactor)e(<)i
Fl(0)g(or)h Fj(workFactor)c(>)j Fl(250)572 1176 y Fj(BZ_MEM_ERROR)663
1280 y Fl(if)f(not)i(enough)f(memory)g(is)f(a)m(v)-5
b(ailable)572 1384 y Fj(BZ_OK)663 1488 y Fl(otherwise)150
1645 y(Allo)m(w)m(able)30 b(next)g(actions:)572 1796
y Fj(BZ2_bzCompress)663 1899 y Fl(if)f Fj(BZ_OK)g Fl(is)g(returned)572
2003 y(no)h(sp)s(eci\014c)f(action)i(needed)f(in)f(case)i(of)g(error)
150 2255 y Ff(3.3.2)63 b Fe(BZ2_bzCompress)533 2441 y
Fj(int)47 b(BZ2_bzCompress)d(\()j(bz_stream)f(*strm,)g(int)h(action)f
(\);)150 2598 y Fl(Pro)m(vides)28 b(more)g(input)f(and/or)h(output)g
(bu\013er)g(space)h(for)f(the)h(library)-8 b(.)38 b(The)28
b(caller)g(main)m(tains)f(input)150 2708 y(and)j(output)g(bu\013ers,)f
(and)h(calls)g Fj(BZ2_bzCompress)c Fl(to)31 b(transfer)f(data)h(b)s(et)
m(w)m(een)g(them.)150 2865 y(Before)j(eac)m(h)g(call)e(to)i
Fj(BZ2_bzCompress)p Fl(,)c Fj(next_in)h Fl(should)g(p)s(oin)m(t)h(at)h
(the)g(data)h(to)g(b)s(e)e(compressed,)150 2974 y(and)41
b Fj(avail_in)f Fl(should)g(indicate)h(ho)m(w)h(man)m(y)f(b)m(ytes)i
(the)f(library)d(ma)m(y)k(read.)75 b Fj(BZ2_bzCompress)150
3084 y Fl(up)s(dates)29 b Fj(next_in)p Fl(,)g Fj(avail_in)f
Fl(and)i Fj(total_in)e Fl(to)j(re\015ect)g(the)g(n)m(um)m(b)s(er)e(of)h
(b)m(ytes)h(it)f(has)g(read.)150 3241 y(Similarly)-8
b(,)27 b Fj(next_out)h Fl(should)g(p)s(oin)m(t)h(to)i(a)f(bu\013er)f
(in)g(whic)m(h)g(the)h(compressed)g(data)h(is)e(to)i(b)s(e)e(placed,)
150 3350 y(with)i Fj(avail_out)f Fl(indicating)h(ho)m(w)h(m)m(uc)m(h)h
(output)f(space)h(is)f(a)m(v)-5 b(ailable.)46 b Fj(BZ2_bzCompress)29
b Fl(up)s(dates)150 3460 y Fj(next_out)p Fl(,)f Fj(avail_out)g
Fl(and)i Fj(total_out)e Fl(to)j(re\015ect)g(the)f(n)m(um)m(b)s(er)g(of)
g(b)m(ytes)h(output.)150 3617 y(Y)-8 b(ou)40 b(ma)m(y)g(pro)m(vide)e
(and)h(remo)m(v)m(e)i(as)f(little)e(or)h(as)h(m)m(uc)m(h)f(data)h(as)g
(y)m(ou)f(lik)m(e)g(on)g(eac)m(h)i(call)e(of)g Fj(BZ2_)150
3726 y(bzCompress)p Fl(.)48 b(In)33 b(the)h(limit,)f(it)h(is)f
(acceptable)h(to)h(supply)c(and)j(remo)m(v)m(e)h(data)g(one)f(b)m(yte)g
(at)h(a)f(time,)150 3836 y(although)28 b(this)f(w)m(ould)g(b)s(e)h
(terribly)e(ine\016cien)m(t.)39 b(Y)-8 b(ou)29 b(should)e(alw)m(a)m(ys)
h(ensure)g(that)h(at)g(least)g(one)f(b)m(yte)150 3946
y(of)j(output)f(space)g(is)g(a)m(v)-5 b(ailable)30 b(at)h(eac)m(h)g
(call.)150 4102 y(A)38 b(second)h(purp)s(ose)d(of)j Fj(BZ2_bzCompress)
34 b Fl(is)j(to)i(request)f(a)h(c)m(hange)g(of)g(mo)s(de)e(of)i(the)f
(compressed)150 4212 y(stream.)150 4369 y(Conceptually)-8
b(,)24 b(a)g(compressed)g(stream)g(can)f(b)s(e)g(in)g(one)h(of)f(four)g
(states:)39 b(IDLE,)24 b(R)m(UNNING,)h(FLUSH-)150 4478
y(ING)37 b(and)g(FINISHING.)g(Before)i(initialisation)33
b(\()p Fj(BZ2_bzCompressInit)p Fl(\))g(and)j(after)i(termination)150
4588 y(\()p Fj(BZ2_bzCompressEnd)p Fl(\),)27 b(a)j(stream)h(is)f
(regarded)g(as)g(IDLE.)150 4745 y(Up)s(on)35 b(initialisation)e(\()p
Fj(BZ2_bzCompressInit)p Fl(\),)h(the)i(stream)h(is)e(placed)h(in)e(the)
j(R)m(UNNING)g(state.)150 4854 y(Subsequen)m(t)j(calls)g(to)i
Fj(BZ2_bzCompress)37 b Fl(should)j(pass)g Fj(BZ_RUN)g
Fl(as)h(the)g(requested)h(action;)47 b(other)150 4964
y(actions)31 b(are)f(illegal)f(and)h(will)d(result)j(in)f
Fj(BZ_SEQUENCE_ERROR)p Fl(.)150 5121 y(A)m(t)38 b(some)f(p)s(oin)m(t,)h
(the)f(calling)e(program)i(will)d(ha)m(v)m(e)k(pro)m(vided)e(all)f(the)
i(input)e(data)j(it)e(w)m(an)m(ts)i(to.)61 b(It)150 5230
y(will)28 b(then)h(w)m(an)m(t)i(to)g(\014nish)d(up)h({)i(in)d
(e\013ect,)k(asking)e(the)g(library)e(to)j(pro)s(cess)f(an)m(y)g(data)h
(it)f(migh)m(t)g(ha)m(v)m(e)150 5340 y(bu\013ered)25
b(in)m(ternally)-8 b(.)38 b(In)25 b(this)g(state,)k Fj(BZ2_bzCompress)
22 b Fl(will)i(no)i(longer)g(attempt)h(to)g(read)f(data)h(from)p
eop
%%Page: 15 16
15 15 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(15)150 299 y Fj(next_in)p
Fl(,)33 b(but)g(it)h(will)d(w)m(an)m(t)k(to)g(write)e(data)h(to)h
Fj(next_out)p Fl(.)49 b(Because)36 b(the)e(output)f(bu\013er)g
(supplied)150 408 y(b)m(y)e(the)h(user)e(can)i(b)s(e)f(arbitrarily)d
(small,)j(the)g(\014nishing-up)d(op)s(eration)i(cannot)i(necessarily)e
(b)s(e)h(done)150 518 y(with)e(a)i(single)e(call)h(of)g
Fj(BZ2_bzCompress)p Fl(.)150 675 y(Instead,)47 b(the)d(calling)f
(program)g(passes)h Fj(BZ_FINISH)d Fl(as)j(an)g(action)g(to)h
Fj(BZ2_bzCompress)p Fl(.)77 b(This)150 784 y(c)m(hanges)30
b(the)f(stream's)g(state)h(to)f(FINISHING.)g(An)m(y)g(remaining)e
(input)g(\(ie,)i Fj(next_in[0)f(..)i(avail_)150 894 y(in-1])p
Fl(\))36 b(is)f(compressed)i(and)f(transferred)g(to)h(the)g(output)g
(bu\013er.)58 b(T)-8 b(o)38 b(do)e(this,)i Fj(BZ2_bzCompress)150
1004 y Fl(m)m(ust)h(b)s(e)f(called)g(rep)s(eatedly)h(un)m(til)e(all)h
(the)h(output)f(has)h(b)s(een)f(consumed.)66 b(A)m(t)40
b(that)g(p)s(oin)m(t,)g Fj(BZ2_)150 1113 y(bzCompress)h
Fl(returns)h Fj(BZ_STREAM_END)p Fl(,)i(and)f(the)h(stream's)g(state)h
(is)d(set)j(bac)m(k)f(to)g(IDLE.)g Fj(BZ2_)150 1223 y(bzCompressEnd)27
b Fl(should)h(then)i(b)s(e)g(called.)150 1380 y(Just)25
b(to)i(mak)m(e)g(sure)e(the)i(calling)d(program)i(do)s(es)g(not)g(c)m
(heat,)i(the)f(library)c(mak)m(es)k(a)f(note)h(of)f Fj(avail_in)150
1489 y Fl(at)g(the)g(time)f(of)g(the)g(\014rst)g(call)g(to)h
Fj(BZ2_bzCompress)21 b Fl(whic)m(h)j(has)h Fj(BZ_FINISH)e
Fl(as)i(an)h(action)f(\(ie,)i(at)f(the)150 1599 y(time)d(the)h(program)
g(has)f(announced)g(its)h(in)m(ten)m(tion)f(to)h(not)g(supply)e(an)m(y)
i(more)g(input\).)37 b(By)24 b(comparing)150 1708 y(this)k(v)-5
b(alue)28 b(with)g(that)h(of)h Fj(avail_in)c Fl(o)m(v)m(er)k(subsequen)
m(t)f(calls)f(to)h Fj(BZ2_bzCompress)p Fl(,)d(the)j(library)e(can)150
1818 y(detect)33 b(an)m(y)e(attempts)i(to)f(slip)d(in)h(more)h(data)h
(to)h(compress.)43 b(An)m(y)31 b(calls)g(for)g(whic)m(h)f(this)g(is)h
(detected)150 1928 y(will)j(return)h Fj(BZ_SEQUENCE_ERROR)p
Fl(.)55 b(This)34 b(indicates)i(a)h(programming)e(mistak)m(e)i(whic)m
(h)e(should)g(b)s(e)150 2037 y(corrected.)150 2194 y(Instead)i(of)g
(asking)f(to)h(\014nish,)f(the)h(calling)f(program)g(ma)m(y)h(ask)g
Fj(BZ2_bzCompress)c Fl(to)38 b(tak)m(e)g(all)e(the)150
2304 y(remaining)j(input,)i(compress)f(it)g(and)g(terminate)h(the)g
(curren)m(t)f(\(Burro)m(ws-Wheeler\))h(compression)150
2413 y(blo)s(c)m(k.)e(This)26 b(could)h(b)s(e)g(useful)f(for)h(error)h
(con)m(trol)g(purp)s(oses.)38 b(The)27 b(mec)m(hanism)g(is)g(analogous)
h(to)g(that)150 2523 y(for)35 b(\014nishing:)46 b(call)35
b Fj(BZ2_bzCompress)c Fl(with)i(an)i(action)g(of)g Fj(BZ_FLUSH)p
Fl(,)g(remo)m(v)m(e)h(output)f(data,)i(and)150 2632 y(p)s(ersist)h
(with)g(the)i Fj(BZ_FLUSH)e Fl(action)i(un)m(til)e(the)i(v)-5
b(alue)39 b Fj(BZ_RUN)f Fl(is)h(returned.)68 b(As)39
b(with)g(\014nishing,)150 2742 y Fj(BZ2_bzCompress)23
b Fl(detects)28 b(an)m(y)f(attempt)h(to)f(pro)m(vide)f(more)h(input)e
(data)i(once)g(the)g(\015ush)e(has)i(b)s(egun.)150 2899
y(Once)j(the)h(\015ush)e(is)g(complete,)i(the)g(stream)f(returns)g(to)h
(the)f(normal)g(R)m(UNNING)h(state.)150 3056 y(This)f(all)h(sounds)g
(prett)m(y)h(complex,)h(but)e(isn't)g(really)-8 b(.)45
b(Here's)33 b(a)f(table)g(whic)m(h)f(sho)m(ws)h(whic)m(h)f(actions)150
3165 y(are)e(allo)m(w)m(able)f(in)f(eac)m(h)j(state,)g(what)f(action)g
(will)c(b)s(e)j(tak)m(en,)j(what)d(the)h(next)f(state)i(is,)e(and)g
(what)h(the)150 3275 y(non-error)h(return)f(v)-5 b(alues)29
b(are.)41 b(Note)32 b(that)e(y)m(ou)h(can't)g(explicitly)d(ask)i(what)g
(state)i(the)e(stream)h(is)e(in,)150 3384 y(but)h(nor)g(do)g(y)m(ou)h
(need)f(to)h({)g(it)e(can)i(b)s(e)f(inferred)e(from)i(the)h(v)-5
b(alues)29 b(returned)h(b)m(y)g Fj(BZ2_bzCompress)p Fl(.)390
3535 y(IDLE/)p Fj(any)572 3639 y Fl(Illegal.)60 b(IDLE)30
b(state)i(only)d(exists)h(after)h Fj(BZ2_bzCompressEnd)26
b Fl(or)572 3743 y(b)s(efore)k Fj(BZ2_bzCompressInit)p
Fl(.)572 3847 y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_SEQUENCE_ERROR)390
4054 y Fl(R)m(UNNING/)p Fj(BZ_RUN)572 4158 y Fl(Compress)f(from)h
Fj(next_in)f Fl(to)i Fj(next_out)d Fl(as)i(m)m(uc)m(h)h(as)f(p)s
(ossible.)572 4262 y(Next)h(state)h(=)e(R)m(UNNING)572
4366 y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_RUN_OK)390
4573 y Fl(R)m(UNNING/)p Fj(BZ_FLUSH)572 4677 y Fl(Remem)m(b)s(er)g
(curren)m(t)g(v)-5 b(alue)30 b(of)g Fj(next_in)p Fl(.)59
b(Compress)30 b(from)g Fj(next_in)572 4781 y Fl(to)h
Fj(next_out)d Fl(as)j(m)m(uc)m(h)f(as)h(p)s(ossible,)d(but)i(do)g(not)g
(accept)i(an)m(y)f(more)f(input.)572 4885 y(Next)h(state)h(=)e
(FLUSHING)572 4988 y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_FLUSH_OK)390
5196 y Fl(R)m(UNNING/)p Fj(BZ_FINISH)572 5300 y Fl(Remem)m(b)s(er)g
(curren)m(t)g(v)-5 b(alue)30 b(of)g Fj(next_in)p Fl(.)59
b(Compress)30 b(from)g Fj(next_in)p eop
%%Page: 16 17
16 16 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(16)572 299 y(to)31 b Fj(next_out)d
Fl(as)j(m)m(uc)m(h)f(as)h(p)s(ossible,)d(but)i(do)g(not)g(accept)i(an)m
(y)f(more)f(input.)572 403 y(Next)h(state)h(=)e(FINISHING)572
506 y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_FINISH_OK)390
714 y Fl(FLUSHING/)p Fj(BZ_FLUSH)572 818 y Fl(Compress)f(from)h
Fj(next_in)f Fl(to)i Fj(next_out)d Fl(as)i(m)m(uc)m(h)h(as)f(p)s
(ossible,)572 922 y(but)f(do)i(not)f(accept)i(an)m(y)f(more)f(input.)
572 1025 y(If)g(all)f(the)i(existing)e(input)f(has)i(b)s(een)g(used)g
(up)f(and)h(all)f(compressed)572 1129 y(output)h(has)g(b)s(een)g(remo)m
(v)m(ed)663 1233 y(Next)h(state)h(=)e(R)m(UNNING;)i(Return)d(v)-5
b(alue)30 b(=)g Fj(BZ_RUN_OK)572 1337 y Fl(else)663 1440
y(Next)h(state)h(=)e(FLUSHING;)h(Return)e(v)-5 b(alue)30
b(=)g Fj(BZ_FLUSH_OK)390 1648 y Fl(FLUSHING/other)572
1752 y(Illegal.)572 1856 y(Return)f(v)-5 b(alue)30 b(=)g
Fj(BZ_SEQUENCE_ERROR)390 2063 y Fl(FINISHING/)p Fj(BZ_FINISH)572
2167 y Fl(Compress)f(from)h Fj(next_in)f Fl(to)i Fj(next_out)d
Fl(as)i(m)m(uc)m(h)h(as)f(p)s(ossible,)572 2271 y(but)f(to)j(not)e
(accept)i(an)m(y)f(more)f(input.)572 2374 y(If)g(all)f(the)i(existing)e
(input)f(has)i(b)s(een)g(used)g(up)f(and)h(all)f(compressed)572
2478 y(output)h(has)g(b)s(een)g(remo)m(v)m(ed)663 2582
y(Next)h(state)h(=)e(IDLE;)g(Return)g(v)-5 b(alue)30
b(=)g Fj(BZ_STREAM_END)572 2686 y Fl(else)663 2790 y(Next)h(state)h(=)e
(FINISHING;)g(Return)g(v)-5 b(alue)30 b(=)g Fj(BZ_FINISHING)390
2997 y Fl(FINISHING/other)572 3101 y(Illegal.)572 3205
y(Return)f(v)-5 b(alue)30 b(=)g Fj(BZ_SEQUENCE_ERROR)150
3361 y Fl(That)24 b(still)f(lo)s(oks)g(complicated?)39
b(W)-8 b(ell,)25 b(fair)f(enough.)38 b(The)24 b(usual)f(sequence)i(of)f
(calls)g(for)g(compressing)150 3471 y(a)31 b(load)f(of)g(data)h(is:)225
3628 y Fi(\017)60 b Fl(Get)31 b(started)g(with)e Fj(BZ2_bzCompressInit)
p Fl(.)225 3774 y Fi(\017)60 b Fl(Sho)m(v)m(el)38 b(data)h(in)e(and)g
(shlurp)e(out)k(its)e(compressed)h(form)g(using)e(zero)j(or)f(more)h
(calls)e(of)h Fj(BZ2_)330 3884 y(bzCompress)28 b Fl(with)h(action)h(=)g
Fj(BZ_RUN)p Fl(.)225 4030 y Fi(\017)60 b Fl(Finish)23
b(up.)38 b(Rep)s(eatedly)25 b(call)f Fj(BZ2_bzCompress)e
Fl(with)i(action)h(=)g Fj(BZ_FINISH)p Fl(,)f(cop)m(ying)h(out)h(the)330
4139 y(compressed)k(output,)g(un)m(til)f Fj(BZ_STREAM_END)e
Fl(is)i(returned.)225 4285 y Fi(\017)60 b Fl(Close)30
b(up)f(and)h(go)h(home.)41 b(Call)29 b Fj(BZ2_bzCompressEnd)p
Fl(.)150 4478 y(If)23 b(the)h(data)h(y)m(ou)f(w)m(an)m(t)h(to)f
(compress)g(\014ts)f(in)m(to)h(y)m(our)g(input)e(bu\013er)h(all)f(at)j
(once,)h(y)m(ou)e(can)g(skip)f(the)h(calls)150 4588 y(of)37
b Fj(BZ2_bzCompress)26 b(\()k(...,)f(BZ_RUN)g(\))36 b
Fl(and)g(just)g(do)h(the)g Fj(BZ2_bzCompress)26 b(\()k(...,)f
(BZ_FINISH)150 4698 y(\))h Fl(calls.)150 4854 y(All)36
b(required)g(memory)h(is)f(allo)s(cated)i(b)m(y)f Fj
(BZ2_bzCompressInit)p Fl(.)56 b(The)37 b(compression)g(library)e(can)
150 4964 y(accept)g(an)m(y)f(data)h(at)g(all)d(\(ob)m(viously\).)51
b(So)34 b(y)m(ou)g(shouldn't)e(get)j(an)m(y)f(error)f(return)g(v)-5
b(alues)33 b(from)h(the)150 5074 y Fj(BZ2_bzCompress)29
b Fl(calls.)46 b(If)32 b(y)m(ou)h(do,)g(they)g(will)d(b)s(e)i
Fj(BZ_SEQUENCE_ERROR)p Fl(,)d(and)j(indicate)f(a)i(bug)f(in)150
5183 y(y)m(our)e(programming.)150 5340 y(T)-8 b(rivial)28
b(other)j(p)s(ossible)d(return)h(v)-5 b(alues:)p eop
%%Page: 17 18
17 17 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(17)572 299 y Fj(BZ_PARAM_ERROR)663
403 y Fl(if)29 b Fj(strm)g Fl(is)h Fj(NULL)p Fl(,)f(or)i
Fj(strm->s)d Fl(is)h Fj(NULL)150 652 y Ff(3.3.3)63 b
Fe(BZ2_bzCompressEnd)390 839 y Fj(int)47 b(BZ2_bzCompressEnd)c(\()k
(bz_stream)f(*strm)g(\);)150 996 y Fl(Releases)31 b(all)e(memory)h
(asso)s(ciated)h(with)e(a)i(compression)e(stream.)150
1153 y(P)m(ossible)g(return)h(v)-5 b(alues:)481 1304
y Fj(BZ_PARAM_ERROR)117 b Fl(if)30 b Fj(strm)f Fl(is)g
Fj(NULL)g Fl(or)i Fj(strm->s)d Fl(is)i Fj(NULL)481 1408
y(BZ_OK)120 b Fl(otherwise)150 1657 y Ff(3.3.4)63 b Fe
(BZ2_bzDecompressInit)390 1844 y Fj(int)47 b(BZ2_bzDecompressInit)42
b(\()48 b(bz_stream)d(*strm,)h(int)h(verbosity,)e(int)i(small)f(\);)150
2001 y Fl(Prepares)30 b(for)f(decompression.)40 b(As)29
b(with)g Fj(BZ2_bzCompressInit)p Fl(,)c(a)31 b Fj(bz_stream)c
Fl(record)j(should)e(b)s(e)150 2110 y(allo)s(cated)c(and)f(initialised)
e(b)s(efore)i(the)i(call.)38 b(Fields)22 b Fj(bzalloc)p
Fl(,)i Fj(bzfree)e Fl(and)i Fj(opaque)e Fl(should)g(b)s(e)h(set)i(if)
150 2220 y(a)h(custom)f(memory)g(allo)s(cator)g(is)g(required,)f(or)h
(made)h Fj(NULL)e Fl(for)h(the)g(normal)f Fj(malloc)p
Fl(/)p Fj(free)f Fl(routines.)150 2330 y(Up)s(on)h(return,)h(the)g(in)m
(ternal)f(state)i(will)c(ha)m(v)m(e)k(b)s(een)f(initialised,)d(and)i
Fj(total_in)f Fl(and)h Fj(total_out)f Fl(will)150 2439
y(b)s(e)30 b(zero.)150 2596 y(F)-8 b(or)31 b(the)g(meaning)e(of)i
(parameter)g Fj(verbosity)p Fl(,)d(see)j Fj(BZ2_bzCompressInit)p
Fl(.)150 2753 y(If)e Fj(small)e Fl(is)h(nonzero,)i(the)f(library)e
(will)f(use)j(an)g(alternativ)m(e)h(decompression)e(algorithm)g(whic)m
(h)f(uses)150 2862 y(less)c(memory)g(but)g(at)h(the)g(cost)h(of)e
(decompressing)g(more)g(slo)m(wly)g(\(roughly)f(sp)s(eaking,)i(half)f
(the)h(sp)s(eed,)150 2972 y(but)34 b(the)i(maxim)m(um)d(memory)i
(requiremen)m(t)g(drops)e(to)j(around)e(2300k\).)57 b(See)35
b(Chapter)g(2)g(for)g(more)150 3082 y(information)29
b(on)h(memory)g(managemen)m(t.)150 3238 y(Note)40 b(that)f(the)f(amoun)
m(t)h(of)g(memory)f(needed)g(to)i(decompress)e(a)h(stream)f(cannot)h(b)
s(e)f(determined)150 3348 y(un)m(til)j(the)h(stream's)h(header)f(has)g
(b)s(een)g(read,)j(so)e(ev)m(en)g(if)e Fj(BZ2_bzDecompressInit)c
Fl(succeeds,)46 b(a)150 3458 y(subsequen)m(t)30 b Fj(BZ2_bzDecompress)c
Fl(could)j(fail)g(with)g Fj(BZ_MEM_ERROR)p Fl(.)150 3614
y(P)m(ossible)g(return)h(v)-5 b(alues:)572 3765 y Fj(BZ_CONFIG_ERROR)
663 3869 y Fl(if)29 b(the)i(library)d(has)i(b)s(een)f(mis-compiled)572
3973 y Fj(BZ_PARAM_ERROR)663 4077 y Fl(if)g Fj(\(small)46
b(!=)h(0)h(&&)f(small)f(!=)h(1\))663 4181 y Fl(or)30
b Fj(\(verbosity)45 b(<)j(0)f(||)g(verbosity)e(>)j(4\))572
4284 y(BZ_MEM_ERROR)663 4388 y Fl(if)29 b(insu\016cien)m(t)g(memory)h
(is)f(a)m(v)-5 b(ailable)150 4545 y(Allo)m(w)m(able)30
b(next)g(actions:)572 4696 y Fj(BZ2_bzDecompress)663
4800 y Fl(if)f Fj(BZ_OK)g Fl(w)m(as)i(returned)572 4904
y(no)f(sp)s(eci\014c)f(action)i(required)e(in)g(case)i(of)g(error)150
5153 y Ff(3.3.5)63 b Fe(BZ2_bzDecompress)390 5340 y Fj(int)47
b(BZ2_bzDecompress)c(\()48 b(bz_stream)d(*strm)h(\);)p
eop
%%Page: 18 19
18 18 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(18)150 299 y(Pro)m(vides)24
b(more)g(input)f(and/out)h(output)g(bu\013er)g(space)h(for)f(the)g
(library)-8 b(.)37 b(The)24 b(caller)g(main)m(tains)f(input)150
408 y(and)30 b(output)g(bu\013ers,)f(and)h(uses)g Fj(BZ2_bzDecompress)c
Fl(to)31 b(transfer)f(data)h(b)s(et)m(w)m(een)g(them.)150
565 y(Before)g(eac)m(h)g(call)f(to)g Fj(BZ2_bzDecompress)p
Fl(,)c Fj(next_in)i Fl(should)h(p)s(oin)m(t)g(at)h(the)h(compressed)e
(data,)j(and)150 675 y Fj(avail_in)h Fl(should)h(indicate)h(ho)m(w)h
(man)m(y)f(b)m(ytes)i(the)e(library)f(ma)m(y)i(read.)56
b Fj(BZ2_bzDecompress)32 b Fl(up-)150 784 y(dates)f Fj(next_in)p
Fl(,)e Fj(avail_in)f Fl(and)h Fj(total_in)g Fl(to)i(re\015ect)g(the)f
(n)m(um)m(b)s(er)f(of)i(b)m(ytes)g(it)f(has)g(read.)150
941 y(Similarly)-8 b(,)37 b Fj(next_out)f Fl(should)g(p)s(oin)m(t)i(to)
g(a)h(bu\013er)e(in)g(whic)m(h)g(the)i(uncompressed)e(output)g(is)h(to)
h(b)s(e)150 1051 y(placed,)d(with)e Fj(avail_out)f Fl(indicating)g(ho)m
(w)i(m)m(uc)m(h)g(output)g(space)h(is)e(a)m(v)-5 b(ailable.)55
b Fj(BZ2_bzCompress)150 1160 y Fl(up)s(dates)29 b Fj(next_out)p
Fl(,)g Fj(avail_out)f Fl(and)h Fj(total_out)f Fl(to)j(re\015ect)g(the)g
(n)m(um)m(b)s(er)e(of)h(b)m(ytes)h(output.)150 1317 y(Y)-8
b(ou)40 b(ma)m(y)g(pro)m(vide)e(and)h(remo)m(v)m(e)i(as)f(little)e(or)h
(as)h(m)m(uc)m(h)f(data)h(as)g(y)m(ou)f(lik)m(e)g(on)g(eac)m(h)i(call)e
(of)g Fj(BZ2_)150 1427 y(bzDecompress)p Fl(.)e(In)27
b(the)i(limit,)d(it)i(is)f(acceptable)j(to)f(supply)d(and)h(remo)m(v)m
(e)j(data)f(one)f(b)m(yte)h(at)g(a)g(time,)150 1537 y(although)f(this)f
(w)m(ould)g(b)s(e)h(terribly)e(ine\016cien)m(t.)39 b(Y)-8
b(ou)29 b(should)e(alw)m(a)m(ys)h(ensure)g(that)h(at)g(least)g(one)f(b)
m(yte)150 1646 y(of)j(output)f(space)g(is)g(a)m(v)-5
b(ailable)30 b(at)h(eac)m(h)g(call.)150 1803 y(Use)g(of)f
Fj(BZ2_bzDecompress)c Fl(is)k(simpler)e(than)i Fj(BZ2_bzCompress)p
Fl(.)150 1960 y(Y)-8 b(ou)31 b(should)d(pro)m(vide)h(input)f(and)i
(remo)m(v)m(e)i(output)d(as)i(describ)s(ed)d(ab)s(o)m(v)m(e,)k(and)d
(rep)s(eatedly)h(call)f Fj(BZ2_)150 2069 y(bzDecompress)35
b Fl(un)m(til)i Fj(BZ_STREAM_END)e Fl(is)j(returned.)64
b(App)s(earance)39 b(of)g Fj(BZ_STREAM_END)c Fl(denotes)150
2179 y(that)47 b Fj(BZ2_bzDecompress)42 b Fl(has)k(detected)h(the)f
(logical)g(end)g(of)g(the)h(compressed)e(stream.)89 b
Fj(BZ2_)150 2289 y(bzDecompress)28 b Fl(will)g(not)j(pro)s(duce)f
Fj(BZ_STREAM_END)d Fl(un)m(til)j(all)f(output)i(data)h(has)e(b)s(een)h
(placed)f(in)m(to)150 2398 y(the)36 b(output)g(bu\013er,)h(so)g(once)g
Fj(BZ_STREAM_END)32 b Fl(app)s(ears,)38 b(y)m(ou)e(are)h(guaran)m(teed)
g(to)g(ha)m(v)m(e)h(a)m(v)-5 b(ailable)150 2508 y(all)29
b(the)i(decompressed)f(output,)g(and)g Fj(BZ2_bzDecompressEnd)25
b Fl(can)31 b(safely)f(b)s(e)f(called.)150 2665 y(If)40
b(case)h(of)f(an)h(error)e(return)h(v)-5 b(alue,)42 b(y)m(ou)f(should)d
(call)h Fj(BZ2_bzDecompressEnd)c Fl(to)41 b(clean)f(up)g(and)150
2774 y(release)31 b(memory)-8 b(.)150 2931 y(P)m(ossible)29
b(return)h(v)-5 b(alues:)572 3082 y Fj(BZ_PARAM_ERROR)663
3186 y Fl(if)29 b Fj(strm)g Fl(is)h Fj(NULL)f Fl(or)h
Fj(strm->s)f Fl(is)g Fj(NULL)663 3290 y Fl(or)h Fj(strm->avail_out)44
b(<)j(1)572 3393 y(BZ_DATA_ERROR)663 3497 y Fl(if)29
b(a)i(data)g(in)m(tegrit)m(y)f(error)g(is)g(detected)h(in)e(the)i
(compressed)f(stream)572 3601 y Fj(BZ_DATA_ERROR_MAGIC)663
3705 y Fl(if)f(the)i(compressed)f(stream)g(do)s(esn't)h(b)s(egin)e
(with)g(the)h(righ)m(t)g(magic)h(b)m(ytes)572 3808 y
Fj(BZ_MEM_ERROR)663 3912 y Fl(if)e(there)i(w)m(asn't)f(enough)h(memory)
f(a)m(v)-5 b(ailable)572 4016 y Fj(BZ_STREAM_END)663
4120 y Fl(if)29 b(the)i(logical)e(end)h(of)h(the)f(data)h(stream)g(w)m
(as)g(detected)g(and)f(all)663 4224 y(output)g(in)f(has)h(b)s(een)g
(consumed,)f(eg)j Fj(s->avail_out)44 b(>)k(0)572 4327
y(BZ_OK)663 4431 y Fl(otherwise)150 4588 y(Allo)m(w)m(able)30
b(next)g(actions:)572 4739 y Fj(BZ2_bzDecompress)663
4843 y Fl(if)f Fj(BZ_OK)g Fl(w)m(as)i(returned)572 4946
y Fj(BZ2_bzDecompressEnd)663 5050 y Fl(otherwise)p eop
%%Page: 19 20
19 19 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(19)150 299 y Ff(3.3.6)63
b Fe(BZ2_bzDecompressEnd)390 486 y Fj(int)47 b(BZ2_bzDecompressEnd)42
b(\()48 b(bz_stream)d(*strm)i(\);)150 643 y Fl(Releases)31
b(all)e(memory)h(asso)s(ciated)h(with)e(a)i(decompression)e(stream.)150
799 y(P)m(ossible)g(return)h(v)-5 b(alues:)572 950 y
Fj(BZ_PARAM_ERROR)663 1054 y Fl(if)29 b Fj(strm)g Fl(is)h
Fj(NULL)f Fl(or)h Fj(strm->s)f Fl(is)g Fj(NULL)572 1158
y(BZ_OK)663 1262 y Fl(otherwise)150 1419 y(Allo)m(w)m(able)h(next)g
(actions:)572 1570 y(None.)150 1857 y Fk(3.4)68 b(High-lev)l(el)47
b(in)l(terface)150 2050 y Fl(This)35 b(in)m(terface)j(pro)m(vides)d
(functions)h(for)g(reading)g(and)h(writing)e Fj(bzip2)g
Fl(format)i(\014les.)59 b(First,)39 b(some)150 2159 y(general)30
b(p)s(oin)m(ts.)225 2316 y Fi(\017)60 b Fl(All)35 b(of)h(the)g
(functions)e(tak)m(e)k(an)e Fj(int*)f Fl(\014rst)g(argumen)m(t,)j
Fj(bzerror)p Fl(.)56 b(After)36 b(eac)m(h)h(call,)g Fj(bzerror)330
2426 y Fl(should)23 b(b)s(e)i(consulted)g(\014rst)g(to)h(determine)e
(the)i(outcome)h(of)e(the)h(call.)38 b(If)25 b Fj(bzerror)f
Fl(is)g Fj(BZ_OK)p Fl(,)i(the)330 2535 y(call)35 b(completed)g
(successfully)-8 b(,)36 b(and)f(only)g(then)g(should)f(the)h(return)g
(v)-5 b(alue)35 b(of)h(the)f(function)g(\(if)330 2645
y(an)m(y\))30 b(b)s(e)f(consulted.)39 b(If)29 b Fj(bzerror)e
Fl(is)h Fj(BZ_IO_ERROR)p Fl(,)f(there)i(w)m(as)h(an)f(error)g
(reading/writing)e(the)330 2754 y(underlying)32 b(compressed)j(\014le,)
h(and)f(y)m(ou)h(should)d(then)i(consult)g Fj(errno)p
Fl(/)p Fj(perror)e Fl(to)j(determine)330 2864 y(the)i(cause)g(of)g(the)
g(di\016cult)m(y)-8 b(.)61 b Fj(bzerror)36 b Fl(ma)m(y)i(also)g(b)s(e)f
(set)h(to)g(v)-5 b(arious)37 b(other)h(v)-5 b(alues;)41
b(precise)330 2974 y(details)29 b(are)i(giv)m(en)g(on)f(a)h(p)s
(er-function)d(basis)h(b)s(elo)m(w.)225 3111 y Fi(\017)60
b Fl(If)40 b Fj(bzerror)f Fl(indicates)g(an)i(error)f(\(ie,)j(an)m
(ything)d(except)h Fj(BZ_OK)f Fl(and)g Fj(BZ_STREAM_END)p
Fl(\),)g(y)m(ou)330 3220 y(should)56 b(immediately)h(call)g
Fj(BZ2_bzReadClose)e Fl(\(or)j Fj(BZ2_bzWriteClose)p
Fl(,)j(dep)s(ending)56 b(on)330 3330 y(whether)50 b(y)m(ou)g(are)h
(attempting)g(to)g(read)f(or)g(to)i(write\))d(to)j(free)e(up)f(all)h
(resources)g(asso)s(ci-)330 3439 y(ated)33 b(with)e(the)i(stream.)47
b(Once)32 b(an)h(error)f(has)g(b)s(een)g(indicated,)f(b)s(eha)m(viour)g
(of)i(all)e(calls)h(except)330 3549 y Fj(BZ2_bzReadClose)46
b Fl(\()p Fj(BZ2_bzWriteClose)p Fl(\))h(is)j(unde\014ned.)99
b(The)50 b(implication)e(is)i(that)h(\(1\))330 3659 y
Fj(bzerror)44 b Fl(should)g(b)s(e)h(c)m(hec)m(k)m(ed)j(after)e(eac)m(h)
h(call,)i(and)c(\(2\))i(if)e Fj(bzerror)f Fl(indicates)g(an)i(error,)
330 3768 y Fj(BZ2_bzReadClose)26 b Fl(\()p Fj(BZ2_bzWriteClose)p
Fl(\))h(should)h(then)i(b)s(e)g(called)g(to)h(clean)f(up.)225
3905 y Fi(\017)60 b Fl(The)33 b Fj(FILE*)f Fl(argumen)m(ts)h(passed)g
(to)h Fj(BZ2_bzReadOpen)p Fl(/)p Fj(BZ2_bzWriteOp)o(en)27
b Fl(should)32 b(b)s(e)g(set)i(to)330 4015 y(binary)23
b(mo)s(de.)38 b(Most)26 b(Unix)d(systems)i(will)d(do)i(this)g(b)m(y)g
(default,)i(but)e(other)g(platforms,)h(including)330
4124 y(Windo)m(ws)20 b(and)g(Mac,)k(will)19 b(not.)38
b(If)20 b(y)m(ou)h(omit)g(this,)h(y)m(ou)f(ma)m(y)h(encoun)m(ter)f
(problems)e(when)h(mo)m(ving)330 4234 y(co)s(de)31 b(to)g(new)f
(platforms.)225 4371 y Fi(\017)60 b Fl(Memory)23 b(allo)s(cation)f
(requests)h(are)g(handled)e(b)m(y)i Fj(malloc)p Fl(/)p
Fj(free)p Fl(.)36 b(A)m(t)23 b(presen)m(t)g(there)g(is)f(no)h(facilit)m
(y)330 4481 y(for)40 b(user-de\014ned)e(memory)i(allo)s(cators)g(in)f
(the)h(\014le)g(I/O)g(functions)e(\(could)i(easily)f(b)s(e)g(added,)330
4590 y(though\).)150 4842 y Ff(3.4.1)63 b Fe(BZ2_bzReadOpen)533
5029 y Fj(typedef)46 b(void)h(BZFILE;)533 5236 y(BZFILE)f
(*BZ2_bzReadOpen)e(\()j(int)g(*bzerror,)f(FILE)g(*f,)1726
5340 y(int)h(small,)f(int)h(verbosity,)p eop
%%Page: 20 21
20 20 bop 150 -116 a Fl(Chapter)30 b(3:)h(Programming)e(with)g
Fj(libbzip2)1891 b Fl(20)1726 299 y Fj(void)47 b(*unused,)f(int)g
(nUnused)g(\);)150 456 y Fl(Prepare)29 b(to)g(read)g(compressed)f(data)
i(from)e(\014le)g(handle)f Fj(f)p Fl(.)40 b Fj(f)29 b
Fl(should)d(refer)j(to)h(a)f(\014le)f(whic)m(h)f(has)i(b)s(een)150
565 y(op)s(ened)h(for)h(reading,)f(and)h(for)f(whic)m(h)g(the)h(error)g
(indicator)e(\()p Fj(ferror\(f\))p Fl(\)is)f(not)k(set.)42
b(If)31 b Fj(small)e Fl(is)h(1,)150 675 y(the)h(library)d(will)f(try)j
(to)i(decompress)e(using)f(less)g(memory)-8 b(,)31 b(at)g(the)g(exp)s
(ense)f(of)g(sp)s(eed.)150 832 y(F)-8 b(or)39 b(reasons)f(explained)f
(b)s(elo)m(w,)j Fj(BZ2_bzRead)35 b Fl(will)h(decompress)i(the)g
Fj(nUnused)e Fl(b)m(ytes)j(starting)f(at)150 941 y Fj(unused)p
Fl(,)k(b)s(efore)e(starting)h(to)g(read)g(from)f(the)h(\014le)f
Fj(f)p Fl(.)71 b(A)m(t)42 b(most)f Fj(BZ_MAX_UNUSED)c
Fl(b)m(ytes)k(ma)m(y)h(b)s(e)150 1051 y(supplied)32 b(lik)m(e)k(this.)
55 b(If)36 b(this)e(facilit)m(y)h(is)g(not)h(required,)g(y)m(ou)g
(should)e(pass)h Fj(NULL)g Fl(and)g Fj(0)g Fl(for)h Fj(unused)150
1160 y Fl(and)30 b(n)p Fj(Unused)e Fl(resp)s(ectiv)m(ely)-8
b(.)150 1317 y(F)g(or)31 b(the)g(meaning)e(of)i(parameters)g
Fj(small)e Fl(and)g Fj(verbosity)p Fl(,)f(see)j Fj
(BZ2_bzDecompressInit)p Fl(.)150 1474 y(The)k(amoun)m(t)g(of)g(memory)g
(needed)g(to)g(decompress)g(a)h(\014le)e(cannot)h(b)s(e)g(determined)e
(un)m(til)h(the)h(\014le's)150 1584 y(header)22 b(has)f(b)s(een)g
(read.)38 b(So)22 b(it)f(is)g(p)s(ossible)e(that)k Fj(BZ2_bzReadOpen)17
b Fl(returns)k Fj(BZ_OK)f Fl(but)h(a)i(subsequen)m(t)150
1693 y(call)30 b(of)g Fj(BZ2_bzRead)e Fl(will)f(return)j
Fj(BZ_MEM_ERROR)p Fl(.)150 1850 y(P)m(ossible)f(assignmen)m(ts)h(to)h
Fj(bzerror)p Fl(:)572 2001 y Fj(BZ_CONFIG_ERROR)663 2105
y Fl(if)e(the)i(library)d(has)i(b)s(een)f(mis-compiled)572
2209 y Fj(BZ_PARAM_ERROR)663 2313 y Fl(if)g Fj(f)h Fl(is)g
Fj(NULL)663 2416 y Fl(or)g Fj(small)f Fl(is)g(neither)h
Fj(0)g Fl(nor)g Fj(1)663 2520 y Fl(or)g Fj(\(unused)46
b(==)h(NULL)g(&&)g(nUnused)f(!=)h(0\))663 2624 y Fl(or)30
b Fj(\(unused)46 b(!=)h(NULL)g(&&)g(!\(0)g(<=)g(nUnused)f(<=)h
(BZ_MAX_UNUSED\)\))572 2728 y(BZ_IO_ERROR)663 2831 y
Fl(if)29 b Fj(ferror\(f\))f Fl(is)h(nonzero)572 2935
y Fj(BZ_MEM_ERROR)663 3039 y Fl(if)g(insu\016cien)m(t)g(memory)h(is)f
(a)m(v)-5 b(ailable)572 3143 y Fj(BZ_OK)663 3247 y Fl(otherwise.)150
3403 y(P)m(ossible)29 b(return)h(v)-5 b(alues:)572 3554
y(P)m(oin)m(ter)31 b(to)g(an)f(abstract)h Fj(BZFILE)663
3658 y Fl(if)e Fj(bzerror)f Fl(is)i Fj(BZ_OK)572 3762
y(NULL)663 3866 y Fl(otherwise)150 4023 y(Allo)m(w)m(able)g(next)g
(actions:)572 4174 y Fj(BZ2_bzRead)663 4277 y Fl(if)f
Fj(bzerror)f Fl(is)i Fj(BZ_OK)572 4381 y(BZ2_bzClose)663
4485 y Fl(otherwise)150 4887 y Ff(3.4.2)63 b Fe(BZ2_bzRead)533
5074 y Fj(int)47 b(BZ2_bzRead)e(\()j(int)e(*bzerror,)g(BZFILE)g(*b,)h
(void)f(*buf,)h(int)g(len)g(\);)150 5230 y Fl(Reads)35
b(up)f(to)h Fj(len)f Fl(\(uncompressed\))h(b)m(ytes)g(from)f(the)h
(compressed)g(\014le)f Fj(b)g Fl(in)m(to)h(the)g(bu\013er)f
Fj(buf)p Fl(.)53 b(If)150 5340 y(the)30 b(read)f(w)m(as)h(successful,)f
Fj(bzerror)e Fl(is)i(set)h(to)g Fj(BZ_OK)e Fl(and)h(the)h(n)m(um)m(b)s
(er)e(of)i(b)m(ytes)g(read)f(is)g(returned.)p eop
%%Page: 21 22
21 21 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(21)150 299 y(If)33 b(the)g(logical)g
(end-of-stream)h(w)m(as)g(detected,)i Fj(bzerror)31 b
Fl(will)g(b)s(e)h(set)i(to)g Fj(BZ_STREAM_END)p Fl(,)d(and)i(the)150
408 y(n)m(um)m(b)s(er)c(of)i(b)m(ytes)f(read)h(is)e(returned.)40
b(All)29 b(other)h Fj(bzerror)f Fl(v)-5 b(alues)29 b(denote)i(an)g
(error.)150 565 y Fj(BZ2_bzRead)37 b Fl(will)f(supply)h
Fj(len)i Fl(b)m(ytes,)j(unless)c(the)i(logical)f(stream)h(end)e(is)h
(detected)i(or)e(an)g(error)150 675 y(o)s(ccurs.)75 b(Because)43
b(of)f(this,)i(it)d(is)g(p)s(ossible)e(to)k(detect)g(the)f(stream)g
(end)f(b)m(y)h(observing)f(when)g(the)150 784 y(n)m(um)m(b)s(er)29
b(of)h(b)m(ytes)g(returned)f(is)g(less)g(than)h(the)g(n)m(um)m(b)s(er)f
(requested.)40 b(Nev)m(ertheless,)31 b(this)e(is)g(regarded)150
894 y(as)38 b(inadvisable;)g(y)m(ou)g(should)d(instead)i(c)m(hec)m(k)i
Fj(bzerror)d Fl(after)i(ev)m(ery)g(call)e(and)h(w)m(atc)m(h)i(out)f
(for)f Fj(BZ_)150 1004 y(STREAM_END)p Fl(.)150 1160 y(In)m(ternally)-8
b(,)47 b Fj(BZ2_bzRead)41 b Fl(copies)j(data)g(from)g(the)g(compressed)
g(\014le)f(in)f(c)m(h)m(unks)i(of)g(size)g Fj(BZ_MAX_)150
1270 y(UNUSED)31 b Fl(b)m(ytes)i(b)s(efore)f(decompressing)f(it.)47
b(If)32 b(the)h(\014le)e(con)m(tains)i(more)g(b)m(ytes)g(than)f
(strictly)f(needed)150 1380 y(to)48 b(reac)m(h)f(the)g(logical)f
(end-of-stream,)52 b Fj(BZ2_bzRead)44 b Fl(will)g(almost)j(certainly)f
(read)h(some)g(of)g(the)150 1489 y(trailing)c(data)j(b)s(efore)e
(signalling)f Fj(BZ_SEQUENCE_END)p Fl(.)80 b(T)-8 b(o)46
b(collect)f(the)g(read)g(but)g(un)m(used)e(data)150 1599
y(once)29 b Fj(BZ_SEQUENCE_END)24 b Fl(has)k(app)s(eared,)g(call)f
Fj(BZ2_bzReadGetUnused)c Fl(immediately)j(b)s(efore)i
Fj(BZ2_)150 1708 y(bzReadClose)p Fl(.)150 1865 y(P)m(ossible)h
(assignmen)m(ts)h(to)h Fj(bzerror)p Fl(:)572 2016 y Fj(BZ_PARAM_ERROR)
663 2120 y Fl(if)e Fj(b)h Fl(is)g Fj(NULL)f Fl(or)h Fj(buf)g
Fl(is)f Fj(NULL)g Fl(or)i Fj(len)46 b(<)i(0)572 2224
y(BZ_SEQUENCE_ERROR)663 2328 y Fl(if)29 b Fj(b)h Fl(w)m(as)h(op)s(ened)
e(with)h Fj(BZ2_bzWriteOpen)572 2431 y(BZ_IO_ERROR)663
2535 y Fl(if)f(there)i(is)e(an)h(error)g(reading)g(from)g(the)g
(compressed)g(\014le)572 2639 y Fj(BZ_UNEXPECTED_EOF)663
2743 y Fl(if)f(the)i(compressed)f(\014le)f(ended)h(b)s(efore)g(the)g
(logical)g(end-of-stream)h(w)m(as)g(detected)572 2847
y Fj(BZ_DATA_ERROR)663 2950 y Fl(if)e(a)i(data)g(in)m(tegrit)m(y)f
(error)g(w)m(as)h(detected)h(in)d(the)h(compressed)g(stream)572
3054 y Fj(BZ_DATA_ERROR_MAGIC)663 3158 y Fl(if)f(the)i(stream)f(do)s
(es)g(not)h(b)s(egin)e(with)g(the)i(requisite)e(header)h(b)m(ytes)h
(\(ie,)f(is)g(not)663 3262 y(a)g Fj(bzip2)f Fl(data)i(\014le\).)61
b(This)28 b(is)i(really)f(a)i(sp)s(ecial)e(case)i(of)g
Fj(BZ_DATA_ERROR)p Fl(.)572 3365 y Fj(BZ_MEM_ERROR)663
3469 y Fl(if)e(insu\016cien)m(t)g(memory)h(w)m(as)h(a)m(v)-5
b(ailable)572 3573 y Fj(BZ_STREAM_END)663 3677 y Fl(if)29
b(the)i(logical)e(end)h(of)h(stream)f(w)m(as)h(detected.)572
3781 y Fj(BZ_OK)663 3884 y Fl(otherwise.)150 4041 y(P)m(ossible)e
(return)h(v)-5 b(alues:)572 4192 y(n)m(um)m(b)s(er)29
b(of)h(b)m(ytes)h(read)663 4296 y(if)e Fj(bzerror)f Fl(is)i
Fj(BZ_OK)f Fl(or)h Fj(BZ_STREAM_END)572 4400 y Fl(unde\014ned)663
4503 y(otherwise)150 4660 y(Allo)m(w)m(able)g(next)g(actions:)572
4811 y(collect)h(data)g(from)f Fj(buf)p Fl(,)f(then)h
Fj(BZ2_bzRead)e Fl(or)i Fj(BZ2_bzReadClose)663 4915 y
Fl(if)f Fj(bzerror)f Fl(is)i Fj(BZ_OK)572 5019 y Fl(collect)h(data)g
(from)f Fj(buf)p Fl(,)f(then)h Fj(BZ2_bzReadClose)d Fl(or)j
Fj(BZ2_bzReadGetUnused)663 5123 y Fl(if)f Fj(bzerror)f
Fl(is)i Fj(BZ_SEQUENCE_END)572 5226 y(BZ2_bzReadClose)663
5330 y Fl(otherwise)p eop
%%Page: 22 23
22 22 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(22)150 299 y Ff(3.4.3)63
b Fe(BZ2_bzReadGetUnused)533 486 y Fj(void)47 b(BZ2_bzReadGetUnused)42
b(\()48 b(int*)e(bzerror,)g(BZFILE)g(*b,)1822 589 y(void**)g(unused,)g
(int*)g(nUnused)g(\);)150 746 y Fl(Returns)36 b(data)i(whic)m(h)d(w)m
(as)j(read)f(from)f(the)h(compressed)g(\014le)f(but)g(w)m(as)h(not)h
(needed)e(to)i(get)g(to)g(the)150 856 y(logical)k(end-of-stream.)78
b Fj(*unused)41 b Fl(is)h(set)h(to)g(the)g(address)f(of)g(the)h(data,)k
(and)42 b Fj(*nUnused)e Fl(to)k(the)150 965 y(n)m(um)m(b)s(er)29
b(of)i(b)m(ytes.)41 b Fj(*nUnused)28 b Fl(will)g(b)s(e)h(set)i(to)g(a)g
(v)-5 b(alue)30 b(b)s(et)m(w)m(een)h Fj(0)f Fl(and)g
Fj(BZ_MAX_UNUSED)d Fl(inclusiv)m(e.)150 1122 y(This)d(function)h(ma)m
(y)h(only)g(b)s(e)f(called)g(once)i Fj(BZ2_bzRead)c Fl(has)j(signalled)
e Fj(BZ_STREAM_END)e Fl(but)j(b)s(efore)150 1232 y Fj(BZ2_bzReadClose)p
Fl(.)150 1389 y(P)m(ossible)k(assignmen)m(ts)h(to)h Fj(bzerror)p
Fl(:)572 1540 y Fj(BZ_PARAM_ERROR)663 1644 y Fl(if)e
Fj(b)h Fl(is)g Fj(NULL)663 1747 y Fl(or)g Fj(unused)f
Fl(is)g Fj(NULL)g Fl(or)i Fj(nUnused)d Fl(is)i Fj(NULL)572
1851 y(BZ_SEQUENCE_ERROR)663 1955 y Fl(if)f Fj(BZ_STREAM_END)e
Fl(has)j(not)h(b)s(een)e(signalled)663 2059 y(or)h(if)f
Fj(b)h Fl(w)m(as)h(op)s(ened)f(with)f Fj(BZ2_bzWriteOpen)542
2162 y(BZ_OK)663 2266 y Fl(otherwise)150 2423 y(Allo)m(w)m(able)h(next)
g(actions:)572 2574 y Fj(BZ2_bzReadClose)150 2882 y Ff(3.4.4)63
b Fe(BZ2_bzReadClose)533 3068 y Fj(void)47 b(BZ2_bzReadClose)c(\()48
b(int)f(*bzerror,)e(BZFILE)h(*b)h(\);)150 3225 y Fl(Releases)36
b(all)e(memory)h(p)s(ertaining)e(to)i(the)h(compressed)f(\014le)f
Fj(b)p Fl(.)54 b Fj(BZ2_bzReadClose)31 b Fl(do)s(es)k(not)h(call)150
3335 y Fj(fclose)c Fl(on)h(the)h(underlying)d(\014le)h(handle,)h(so)h
(y)m(ou)g(should)e(do)h(that)h(y)m(ourself)f(if)g(appropriate.)49
b Fj(BZ2_)150 3445 y(bzReadClose)27 b Fl(should)i(b)s(e)g(called)h(to)h
(clean)f(up)g(after)h(all)e(error)h(situations.)150 3601
y(P)m(ossible)f(assignmen)m(ts)h(to)h Fj(bzerror)p Fl(:)572
3752 y Fj(BZ_SEQUENCE_ERROR)663 3856 y Fl(if)e Fj(b)h
Fl(w)m(as)h(op)s(ened)e(with)h Fj(BZ2_bzOpenWrite)572
3960 y(BZ_OK)663 4064 y Fl(otherwise)150 4221 y(Allo)m(w)m(able)g(next)
g(actions:)572 4372 y(none)150 4679 y Ff(3.4.5)63 b Fe(BZ2_bzWriteOpen)
533 4866 y Fj(BZFILE)46 b(*BZ2_bzWriteOpen)e(\()j(int)g(*bzerror,)e
(FILE)i(*f,)1774 4970 y(int)g(blockSize100k,)d(int)j(verbosity,)1774
5074 y(int)g(workFactor)e(\);)150 5230 y Fl(Prepare)33
b(to)g(write)f(compressed)h(data)h(to)f(\014le)f(handle)g
Fj(f)p Fl(.)47 b Fj(f)33 b Fl(should)e(refer)i(to)g(a)g(\014le)f(whic)m
(h)g(has)h(b)s(een)150 5340 y(op)s(ened)d(for)g(writing,)e(and)i(for)g
(whic)m(h)f(the)i(error)f(indicator)f(\()p Fj(ferror\(f\))p
Fl(\)is)f(not)i(set.)p eop
%%Page: 23 24
23 23 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(23)150 299 y(F)-8 b(or)31
b(the)g(meaning)e(of)i(parameters)g Fj(blockSize100k)p
Fl(,)c Fj(verbosity)g Fl(and)j Fj(workFactor)p Fl(,)e(see)150
408 y Fj(BZ2_bzCompressInit)p Fl(.)150 565 y(All)d(required)f(memory)i
(is)f(allo)s(cated)i(at)g(this)e(stage,)j(so)f(if)e(the)h(call)g
(completes)g(successfully)-8 b(,)26 b Fj(BZ_MEM_)150
675 y(ERROR)j Fl(cannot)i(b)s(e)f(signalled)e(b)m(y)i(a)h(subsequen)m
(t)f(call)f(to)i Fj(BZ2_bzWrite)p Fl(.)150 832 y(P)m(ossible)e
(assignmen)m(ts)h(to)h Fj(bzerror)p Fl(:)572 983 y Fj(BZ_CONFIG_ERROR)
663 1087 y Fl(if)e(the)i(library)d(has)i(b)s(een)f(mis-compiled)572
1190 y Fj(BZ_PARAM_ERROR)663 1294 y Fl(if)g Fj(f)h Fl(is)g
Fj(NULL)663 1398 y Fl(or)g Fj(blockSize100k)44 b(<)k(1)30
b Fl(or)g Fj(blockSize100k)44 b(>)k(9)572 1502 y(BZ_IO_ERROR)663
1605 y Fl(if)29 b Fj(ferror\(f\))f Fl(is)h(nonzero)572
1709 y Fj(BZ_MEM_ERROR)663 1813 y Fl(if)g(insu\016cien)m(t)g(memory)h
(is)f(a)m(v)-5 b(ailable)572 1917 y Fj(BZ_OK)663 2021
y Fl(otherwise)150 2177 y(P)m(ossible)29 b(return)h(v)-5
b(alues:)572 2328 y(P)m(oin)m(ter)31 b(to)g(an)f(abstract)h
Fj(BZFILE)663 2432 y Fl(if)e Fj(bzerror)f Fl(is)i Fj(BZ_OK)572
2536 y(NULL)663 2640 y Fl(otherwise)150 2797 y(Allo)m(w)m(able)g(next)g
(actions:)572 2948 y Fj(BZ2_bzWrite)663 3051 y Fl(if)f
Fj(bzerror)f Fl(is)i Fj(BZ_OK)604 3155 y Fl(\(y)m(ou)25
b(could)e(go)h(directly)f(to)h Fj(BZ2_bzWriteClose)p
Fl(,)c(but)j(this)g(w)m(ould)g(b)s(e)g(prett)m(y)h(p)s(oin)m(tless\))
572 3259 y Fj(BZ2_bzWriteClose)663 3363 y Fl(otherwise)150
3639 y Ff(3.4.6)63 b Fe(BZ2_bzWrite)533 3826 y Fj(void)47
b(BZ2_bzWrite)e(\()i(int)g(*bzerror,)e(BZFILE)h(*b,)h(void)g(*buf,)f
(int)h(len)g(\);)150 3983 y Fl(Absorbs)26 b Fj(len)g
Fl(b)m(ytes)i(from)e(the)i(bu\013er)e Fj(buf)p Fl(,)h(ev)m(en)m(tually)
g(to)h(b)s(e)e(compressed)h(and)f(written)g(to)i(the)g(\014le.)150
4140 y(P)m(ossible)h(assignmen)m(ts)h(to)h Fj(bzerror)p
Fl(:)572 4291 y Fj(BZ_PARAM_ERROR)663 4395 y Fl(if)e
Fj(b)h Fl(is)g Fj(NULL)f Fl(or)h Fj(buf)g Fl(is)f Fj(NULL)g
Fl(or)i Fj(len)46 b(<)i(0)572 4498 y(BZ_SEQUENCE_ERROR)663
4602 y Fl(if)29 b(b)h(w)m(as)h(op)s(ened)e(with)g Fj(BZ2_bzReadOpen)572
4706 y(BZ_IO_ERROR)663 4810 y Fl(if)g(there)i(is)e(an)h(error)g
(writing)f(the)h(compressed)g(\014le.)572 4914 y Fj(BZ_OK)663
5017 y Fl(otherwise)150 5294 y Ff(3.4.7)63 b Fe(BZ2_bzWriteClose)p
eop
%%Page: 24 25
24 24 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(24)533 299 y Fj(void)47
b(BZ2_bzWriteClose)c(\()48 b(int)f(*bzerror,)e(BZFILE*)h(f,)1679
403 y(int)h(abandon,)1679 506 y(unsigned)e(int*)i(nbytes_in,)1679
610 y(unsigned)e(int*)i(nbytes_out)e(\);)533 818 y(void)i
(BZ2_bzWriteClose64)c(\()k(int)g(*bzerror,)e(BZFILE*)h(f,)1774
922 y(int)h(abandon,)1774 1025 y(unsigned)f(int*)g(nbytes_in_lo32,)1774
1129 y(unsigned)g(int*)g(nbytes_in_hi32,)1774 1233 y(unsigned)g(int*)g
(nbytes_out_lo32,)1774 1337 y(unsigned)g(int*)g(nbytes_out_hi32)e(\);)
150 1493 y Fl(Compresses)39 b(and)g(\015ushes)g(to)h(the)g(compressed)g
(\014le)f(all)f(data)j(so)f(far)g(supplied)c(b)m(y)k
Fj(BZ2_bzWrite)p Fl(.)150 1603 y(The)27 b(logical)g(end-of-stream)h
(mark)m(ers)g(are)g(also)f(written,)h(so)f(subsequen)m(t)g(calls)g(to)h
Fj(BZ2_bzWrite)d Fl(are)150 1713 y(illegal.)50 b(All)33
b(memory)h(asso)s(ciated)g(with)f(the)i(compressed)e(\014le)h
Fj(b)f Fl(is)g(released.)52 b Fj(fflush)33 b Fl(is)g(called)g(on)150
1822 y(the)e(compressed)f(\014le,)f(but)h(it)g(is)f(not)i
Fj(fclose)p Fl('d.)150 1979 y(If)i Fj(BZ2_bzWriteClose)c
Fl(is)k(called)f(to)j(clean)e(up)f(after)i(an)g(error,)g(the)g(only)e
(action)i(is)f(to)h(release)g(the)150 2089 y(memory)-8
b(.)42 b(The)30 b(library)e(records)j(the)g(error)f(co)s(des)h(issued)e
(b)m(y)h(previous)f(calls,)i(so)f(this)g(situation)g(will)150
2198 y(b)s(e)c(detected)h(automatically)-8 b(.)40 b(There)26
b(is)g(no)g(attempt)h(to)h(complete)e(the)h(compression)f(op)s
(eration,)g(nor)150 2308 y(to)32 b Fj(fflush)d Fl(the)i(compressed)g
(\014le.)42 b(Y)-8 b(ou)32 b(can)f(force)h(this)e(b)s(eha)m(viour)g(to)
h(happ)s(en)f(ev)m(en)i(in)d(the)j(case)g(of)150 2417
y(no)e(error,)g(b)m(y)h(passing)e(a)i(nonzero)f(v)-5
b(alue)30 b(to)h Fj(abandon)p Fl(.)150 2574 y(If)j Fj(nbytes_in)d
Fl(is)j(non-n)m(ull,)f Fj(*nbytes_in)e Fl(will)h(b)s(e)h(set)i(to)g(b)s
(e)f(the)g(total)h(v)m(olume)f(of)g(uncompressed)150
2684 y(data)k(handled.)60 b(Similarly)-8 b(,)35 b Fj(nbytes_out)g
Fl(will)g(b)s(e)h(set)i(to)g(the)g(total)g(v)m(olume)f(of)g(compressed)
g(data)150 2793 y(written.)h(F)-8 b(or)27 b(compatibilit)m(y)d(with)h
(older)g(v)m(ersions)h(of)g(the)g(library)-8 b(,)25 b
Fj(BZ2_bzWriteClose)d Fl(only)j(yields)150 2903 y(the)40
b(lo)m(w)m(er)g(32)h(bits)d(of)i(these)h(coun)m(ts.)69
b(Use)40 b Fj(BZ2_bzWriteClose64)35 b Fl(if)k(y)m(ou)h(w)m(an)m(t)h
(the)f(full)d(64)k(bit)150 3013 y(coun)m(ts.)g(These)30
b(t)m(w)m(o)i(functions)d(are)i(otherwise)f(absolutely)f(iden)m(tical.)
150 3169 y(P)m(ossible)g(assignmen)m(ts)h(to)h Fj(bzerror)p
Fl(:)572 3320 y Fj(BZ_SEQUENCE_ERROR)663 3424 y Fl(if)e
Fj(b)h Fl(w)m(as)h(op)s(ened)e(with)h Fj(BZ2_bzReadOpen)572
3528 y(BZ_IO_ERROR)663 3632 y Fl(if)f(there)i(is)e(an)h(error)g
(writing)f(the)h(compressed)g(\014le)572 3736 y Fj(BZ_OK)663
3839 y Fl(otherwise)150 4161 y Ff(3.4.8)63 b(Handling)41
b(em)m(b)s(edded)g(compressed)h(data)e(streams)150 4354
y Fl(The)i(high-lev)m(el)g(library)f(facilitates)h(use)h(of)g
Fj(bzip2)e Fl(data)j(streams)f(whic)m(h)f(form)g(some)i(part)e(of)i(a)
150 4463 y(surrounding,)27 b(larger)j(data)h(stream.)225
4620 y Fi(\017)60 b Fl(F)-8 b(or)22 b(writing,)f(the)g(library)e(tak)m
(es)k(an)e(op)s(en)f(\014le)g(handle,)i(writes)e(compressed)h(data)h
(to)g(it,)g Fj(fflush)p Fl(es)330 4730 y(it)34 b(but)f(do)s(es)h(not)h
Fj(fclose)d Fl(it.)52 b(The)34 b(calling)f(application)g(can)h(write)g
(its)f(o)m(wn)i(data)g(b)s(efore)f(and)330 4839 y(after)d(the)f
(compressed)h(data)g(stream,)g(using)d(that)j(same)g(\014le)f(handle.)
225 5011 y Fi(\017)60 b Fl(Reading)34 b(is)f(more)i(complex,)g(and)f
(the)h(facilities)d(are)j(not)g(as)g(general)f(as)h(they)f(could)g(b)s
(e)g(since)330 5121 y(generalit)m(y)e(is)f(hard)f(to)j(reconcile)e
(with)f(e\016ciency)-8 b(.)46 b Fj(BZ2_bzRead)29 b Fl(reads)i(from)g
(the)h(compressed)330 5230 y(\014le)39 b(in)g(blo)s(c)m(ks)g(of)h(size)
g Fj(BZ_MAX_UNUSED)c Fl(b)m(ytes,)44 b(and)39 b(in)g(doing)g(so)h
(probably)e(will)f(o)m(v)m(ersho)s(ot)330 5340 y(the)i(logical)g(end)f
(of)h(compressed)f(stream.)67 b(T)-8 b(o)40 b(reco)m(v)m(er)g(this)e
(data)i(once)f(decompression)f(has)p eop
%%Page: 25 26
25 25 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(25)330 299 y(ended,)28
b(call)g Fj(BZ2_bzReadGetUnused)23 b Fl(after)29 b(the)g(last)f(call)g
(of)g Fj(BZ2_bzRead)e Fl(\(the)j(one)g(returning)330
408 y Fj(BZ_STREAM_END)p Fl(\))e(but)j(b)s(efore)g(calling)f
Fj(BZ2_bzReadClose)p Fl(.)150 596 y(This)51 b(mec)m(hanism)g(mak)m(es)j
(it)e(easy)h(to)g(decompress)f(m)m(ultiple)e Fj(bzip2)i
Fl(streams)g(placed)g(end-to-)150 706 y(end.)90 b(As)48
b(the)f(end)f(of)i(one)f(stream,)52 b(when)46 b Fj(BZ2_bzRead)f
Fl(returns)h Fj(BZ_STREAM_END)p Fl(,)i(call)e Fj(BZ2_)150
816 y(bzReadGetUnused)36 b Fl(to)41 b(collect)g(the)g(un)m(used)e(data)
i(\(cop)m(y)g(it)f(in)m(to)g(y)m(our)h(o)m(wn)f(bu\013er)f
(somewhere\).)150 925 y(That)25 b(data)g(forms)f(the)h(start)h(of)e
(the)h(next)g(compressed)g(stream.)39 b(T)-8 b(o)25 b(start)h
(uncompressing)c(that)k(next)150 1035 y(stream,)40 b(call)d
Fj(BZ2_bzReadOpen)d Fl(again,)40 b(feeding)d(in)g(the)h(un)m(used)e
(data)j(via)e(the)h Fj(unused)p Fl(/)p Fj(nUnused)150
1144 y Fl(parameters.)54 b(Keep)34 b(doing)g(this)f(un)m(til)g
Fj(BZ_STREAM_END)e Fl(return)j(coincides)f(with)h(the)g(ph)m(ysical)g
(end)150 1254 y(of)d(\014le)e(\()p Fj(feof\(f\))p Fl(\).)39
b(In)30 b(this)f(situation)h Fj(BZ2_bzReadGetUnused)25
b Fl(will)i(of)k(course)g(return)e(no)h(data.)150 1411
y(This)c(should)f(giv)m(e)j(some)g(feel)f(for)g(ho)m(w)h(the)g
(high-lev)m(el)e(in)m(terface)i(can)f(b)s(e)g(used.)39
b(If)27 b(y)m(ou)h(require)e(extra)150 1520 y(\015exibilit)m(y)-8
b(,)28 b(y)m(ou'll)i(ha)m(v)m(e)h(to)g(bite)f(the)h(bullet)d(and)i(get)
i(to)f(grips)e(with)g(the)h(lo)m(w-lev)m(el)h(in)m(terface.)150
1779 y Ff(3.4.9)63 b(Standard)40 b(\014le-reading/writing)j(co)s(de)150
1972 y Fl(Here's)31 b(ho)m(w)f(y)m(ou'd)h(write)e(data)j(to)f(a)f
(compressed)g(\014le:)390 2330 y Fj(FILE*)142 b(f;)390
2434 y(BZFILE*)46 b(b;)390 2538 y(int)238 b(nBuf;)390
2642 y(char)190 b(buf[)46 b(/*)i(whatever)d(size)i(you)g(like)f(*/)i
(];)390 2746 y(int)238 b(bzerror;)390 2849 y(int)g(nWritten;)390
3057 y(f)47 b(=)h(fopen)e(\()i("myfile.bz2",)c("w")j(\);)390
3161 y(if)g(\(!f\))g({)533 3264 y(/*)g(handle)f(error)h(*/)390
3368 y(})390 3472 y(b)g(=)h(BZ2_bzWriteOpen)c(\()j(&bzerror,)e(f,)i(9)h
(\);)390 3576 y(if)f(\(bzerror)f(!=)h(BZ_OK\))f({)533
3680 y(BZ2_bzWriteClose)e(\()j(b)g(\);)533 3783 y(/*)g(handle)f(error)h
(*/)390 3887 y(})390 4095 y(while)f(\()i(/*)f(condition)e(*/)i(\))h({)
533 4198 y(/*)f(get)g(data)g(to)g(write)f(into)h(buf,)g(and)g(set)g
(nBuf)f(appropriately)e(*/)533 4302 y(nWritten)i(=)h(BZ2_bzWrite)e(\()i
(&bzerror,)f(b,)h(buf,)f(nBuf)h(\);)533 4406 y(if)g(\(bzerror)f(==)h
(BZ_IO_ERROR\))e({)676 4510 y(BZ2_bzWriteClose)f(\()j(&bzerror,)e(b)j
(\);)676 4614 y(/*)g(handle)e(error)g(*/)533 4717 y(})390
4821 y(})390 5029 y(BZ2_bzWriteClose)d(\()48 b(&bzerror,)d(b)j(\);)390
5132 y(if)f(\(bzerror)f(==)h(BZ_IO_ERROR\))d({)533 5236
y(/*)j(handle)f(error)h(*/)390 5340 y(})p eop
%%Page: 26 27
26 26 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(26)150 299 y(And)29 b(to)j(read)e(from)g
(a)h(compressed)f(\014le:)390 450 y Fj(FILE*)142 b(f;)390
554 y(BZFILE*)46 b(b;)390 657 y(int)238 b(nBuf;)390 761
y(char)190 b(buf[)46 b(/*)i(whatever)d(size)i(you)g(like)f(*/)i(];)390
865 y(int)238 b(bzerror;)390 969 y(int)g(nWritten;)390
1176 y(f)47 b(=)h(fopen)e(\()i("myfile.bz2",)c("r")j(\);)390
1280 y(if)g(\(!f\))g({)533 1384 y(/*)g(handle)f(error)h(*/)390
1488 y(})390 1591 y(b)g(=)h(BZ2_bzReadOpen)c(\()j(&bzerror,)f(f,)h(0,)g
(NULL,)f(0)i(\);)390 1695 y(if)f(\(bzerror)f(!=)h(BZ_OK\))f({)533
1799 y(BZ2_bzReadClose)e(\()j(&bzerror,)f(b)h(\);)533
1903 y(/*)g(handle)f(error)h(*/)390 2007 y(})390 2214
y(bzerror)f(=)h(BZ_OK;)390 2318 y(while)f(\(bzerror)g(==)h(BZ_OK)f(&&)i
(/*)f(arbitrary)e(other)h(conditions)f(*/\))i({)533 2422
y(nBuf)g(=)g(BZ2_bzRead)e(\()j(&bzerror,)d(b,)i(buf,)g(/*)g(size)g(of)g
(buf)g(*/)g(\);)533 2525 y(if)g(\(bzerror)f(==)h(BZ_OK\))f({)676
2629 y(/*)i(do)f(something)e(with)i(buf[0)f(..)h(nBuf-1])f(*/)533
2733 y(})390 2837 y(})390 2941 y(if)h(\(bzerror)f(!=)h(BZ_STREAM_END\))
d({)533 3044 y(BZ2_bzReadClose)g(\()j(&bzerror,)f(b)h(\);)533
3148 y(/*)g(handle)f(error)h(*/)390 3252 y(})g(else)g({)533
3356 y(BZ2_bzReadClose)d(\()j(&bzerror)f(\);)390 3459
y(})150 3753 y Fk(3.5)68 b(Utilit)l(y)47 b(functions)150
4045 y Ff(3.5.1)63 b Fe(BZ2_bzBuffToBuffCompress)533
4232 y Fj(int)47 b(BZ2_bzBuffToBuffCompress\()41 b(char*)428
b(dest,)1965 4335 y(unsigned)46 b(int*)g(destLen,)1965
4439 y(char*)428 b(source,)1965 4543 y(unsigned)46 b(int)94
b(sourceLen,)1965 4647 y(int)524 b(blockSize100k,)1965
4751 y(int)g(verbosity,)1965 4854 y(int)g(workFactor)45
b(\);)150 5011 y Fl(A)m(ttempts)33 b(to)g(compress)f(the)g(data)h(in)e
Fj(source[0)d(..)i(sourceLen-1])e Fl(in)m(to)k(the)h(destination)e
(bu\013er,)150 5121 y Fj(dest[0)e(..)g(*destLen-1])p
Fl(.)37 b(If)26 b(the)g(destination)g(bu\013er)f(is)h(big)f(enough,)j
Fj(*destLen)c Fl(is)h(set)i(to)g(the)g(size)150 5230
y(of)i(the)f(compressed)h(data,)g(and)f Fj(BZ_OK)f Fl(is)h(returned.)39
b(If)28 b(the)h(compressed)f(data)h(w)m(on't)g(\014t,)g
Fj(*destLen)150 5340 y Fl(is)g(unc)m(hanged,)i(and)e
Fj(BZ_OUTBUFF_FULL)e Fl(is)i(returned.)p eop
%%Page: 27 28
27 27 bop 150 -116 a Fl(Chapter)30 b(3:)h(Programming)e(with)g
Fj(libbzip2)1891 b Fl(27)150 299 y(Compression)22 b(in)g(this)h(manner)
g(is)g(a)h(one-shot)g(ev)m(en)m(t,)j(done)c(with)g(a)h(single)e(call)h
(to)i(this)d(function.)37 b(The)150 408 y(resulting)25
b(compressed)i(data)i(is)d(a)i(complete)f Fj(bzip2)f
Fl(format)i(data)g(stream.)40 b(There)27 b(is)f(no)i(mec)m(hanism)150
518 y(for)23 b(making)g(additional)e(calls)i(to)h(pro)m(vide)f(extra)h
(input)e(data.)39 b(If)23 b(y)m(ou)h(w)m(an)m(t)g(that)g(kind)e(of)h
(mec)m(hanism,)150 628 y(use)30 b(the)h(lo)m(w-lev)m(el)f(in)m
(terface.)150 784 y(F)-8 b(or)31 b(the)g(meaning)e(of)i(parameters)g
Fj(blockSize100k)p Fl(,)c Fj(verbosity)g Fl(and)j Fj(workFactor)p
Fl(,)150 894 y(see)h Fj(BZ2_bzCompressInit)p Fl(.)150
1051 y(T)-8 b(o)27 b(guaran)m(tee)h(that)e(the)h(compressed)f(data)h
(will)d(\014t)i(in)f(its)g(bu\013er,)i(allo)s(cate)f(an)g(output)g
(bu\013er)g(of)g(size)150 1160 y(1\045)31 b(larger)f(than)g(the)g
(uncompressed)f(data,)j(plus)c(six)h(h)m(undred)g(extra)i(b)m(ytes.)150
1317 y Fj(BZ2_bzBuffToBuffDecompre)o(ss)25 b Fl(will)k(not)j(write)e
(data)j(at)f(or)f(b)s(ey)m(ond)g Fj(dest[*destLen])p
Fl(,)d(ev)m(en)k(in)150 1427 y(case)f(of)g(bu\013er)e(o)m(v)m(er\015o)m
(w.)150 1584 y(P)m(ossible)g(return)h(v)-5 b(alues:)572
1735 y Fj(BZ_CONFIG_ERROR)663 1839 y Fl(if)29 b(the)i(library)d(has)i
(b)s(een)f(mis-compiled)572 1942 y Fj(BZ_PARAM_ERROR)663
2046 y Fl(if)g Fj(dest)g Fl(is)h Fj(NULL)f Fl(or)h Fj(destLen)f
Fl(is)g Fj(NULL)663 2150 y Fl(or)h Fj(blockSize100k)44
b(<)k(1)30 b Fl(or)g Fj(blockSize100k)44 b(>)k(9)663
2254 y Fl(or)30 b Fj(verbosity)45 b(<)j(0)30 b Fl(or)g
Fj(verbosity)45 b(>)j(4)663 2357 y Fl(or)30 b Fj(workFactor)45
b(<)j(0)30 b Fl(or)g Fj(workFactor)45 b(>)i(250)572 2461
y(BZ_MEM_ERROR)663 2565 y Fl(if)29 b(insu\016cien)m(t)g(memory)h(is)f
(a)m(v)-5 b(ailable)572 2669 y Fj(BZ_OUTBUFF_FULL)663
2773 y Fl(if)29 b(the)i(size)f(of)g(the)h(compressed)f(data)h(exceeds)g
Fj(*destLen)572 2876 y(BZ_OK)663 2980 y Fl(otherwise)150
3349 y Ff(3.5.2)63 b Fe(BZ2_bzBuffToBuffDecompress)533
3536 y Fj(int)47 b(BZ2_bzBuffToBuffDecompres)o(s)42 b(\()47
b(char*)428 b(dest,)2108 3640 y(unsigned)46 b(int*)g(destLen,)2108
3744 y(char*)428 b(source,)2108 3848 y(unsigned)46 b(int)94
b(sourceLen,)2108 3951 y(int)524 b(small,)2108 4055 y(int)g(verbosity)
46 b(\);)150 4212 y Fl(A)m(ttempts)24 b(to)g(decompress)f(the)g(data)g
(in)f Fj(source[0)28 b(..)i(sourceLen-1])20 b Fl(in)m(to)j(the)g
(destination)f(bu\013er,)150 4322 y Fj(dest[0)29 b(..)g(*destLen-1])p
Fl(.)37 b(If)26 b(the)g(destination)g(bu\013er)f(is)h(big)f(enough,)j
Fj(*destLen)c Fl(is)h(set)i(to)g(the)g(size)150 4431
y(of)21 b(the)g(uncompressed)e(data,)24 b(and)c Fj(BZ_OK)f
Fl(is)h(returned.)36 b(If)20 b(the)h(compressed)g(data)g(w)m(on't)h
(\014t,)g Fj(*destLen)150 4541 y Fl(is)29 b(unc)m(hanged,)i(and)e
Fj(BZ_OUTBUFF_FULL)e Fl(is)i(returned.)150 4698 y Fj(source)g
Fl(is)g(assumed)h(to)h(hold)e(a)i(complete)f Fj(bzip2)f
Fl(format)i(data)g(stream.)150 4807 y Fj(BZ2_bzBuffToBuffDecompre)o(ss)
22 b Fl(tries)28 b(to)i(decompress)e(the)h(en)m(tiret)m(y)g(of)g(the)f
(stream)h(in)m(to)g(the)f(out-)150 4917 y(put)i(bu\013er.)150
5074 y(F)-8 b(or)31 b(the)g(meaning)e(of)i(parameters)g
Fj(small)e Fl(and)g Fj(verbosity)p Fl(,)f(see)j Fj
(BZ2_bzDecompressInit)p Fl(.)150 5230 y(Because)j(the)f(compression)e
(ratio)i(of)g(the)g(compressed)f(data)h(cannot)g(b)s(e)f(kno)m(wn)g(in)
g(adv)-5 b(ance,)34 b(there)150 5340 y(is)d(no)h(easy)g(w)m(a)m(y)h(to)
f(guaran)m(tee)i(that)e(the)g(output)f(bu\013er)g(will)e(b)s(e)i(big)g
(enough.)45 b(Y)-8 b(ou)32 b(ma)m(y)h(of)f(course)p eop
%%Page: 28 29
28 28 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(28)150 299 y(mak)m(e)36
b(arrangemen)m(ts)f(in)e(y)m(our)i(co)s(de)g(to)g(record)g(the)g(size)f
(of)h(the)g(uncompressed)f(data,)i(but)e(suc)m(h)h(a)150
408 y(mec)m(hanism)30 b(is)f(b)s(ey)m(ond)h(the)g(scop)s(e)h(of)f(this)
g(library)-8 b(.)150 565 y Fj(BZ2_bzBuffToBuffDecompre)o(ss)25
b Fl(will)k(not)j(write)e(data)j(at)f(or)f(b)s(ey)m(ond)g
Fj(dest[*destLen])p Fl(,)d(ev)m(en)k(in)150 675 y(case)f(of)g(bu\013er)
e(o)m(v)m(er\015o)m(w.)150 832 y(P)m(ossible)g(return)h(v)-5
b(alues:)572 983 y Fj(BZ_CONFIG_ERROR)663 1087 y Fl(if)29
b(the)i(library)d(has)i(b)s(een)f(mis-compiled)572 1190
y Fj(BZ_PARAM_ERROR)663 1294 y Fl(if)g Fj(dest)g Fl(is)h
Fj(NULL)f Fl(or)h Fj(destLen)f Fl(is)g Fj(NULL)663 1398
y Fl(or)h Fj(small)46 b(!=)i(0)f(&&)g(small)g(!=)g(1)663
1502 y Fl(or)30 b Fj(verbosity)45 b(<)j(0)30 b Fl(or)g
Fj(verbosity)45 b(>)j(4)572 1605 y(BZ_MEM_ERROR)663 1709
y Fl(if)29 b(insu\016cien)m(t)g(memory)h(is)f(a)m(v)-5
b(ailable)572 1813 y Fj(BZ_OUTBUFF_FULL)663 1917 y Fl(if)29
b(the)i(size)f(of)g(the)h(compressed)f(data)h(exceeds)g
Fj(*destLen)572 2021 y(BZ_DATA_ERROR)663 2124 y Fl(if)e(a)i(data)g(in)m
(tegrit)m(y)f(error)g(w)m(as)h(detected)h(in)d(the)h(compressed)g(data)
572 2228 y Fj(BZ_DATA_ERROR_MAGIC)663 2332 y Fl(if)f(the)i(compressed)f
(data)h(do)s(esn't)f(b)s(egin)f(with)g(the)i(righ)m(t)e(magic)i(b)m
(ytes)572 2436 y Fj(BZ_UNEXPECTED_EOF)663 2539 y Fl(if)e(the)i
(compressed)f(data)h(ends)e(unexp)s(ectedly)572 2643
y Fj(BZ_OK)663 2747 y Fl(otherwise)150 3116 y Fk(3.6)68
b Fd(zlib)43 b Fk(compatibilit)l(y)k(functions)150 3308
y Fl(Y)-8 b(oshiok)j(a)33 b(Tsuneo)e(has)h(con)m(tributed)g(some)g
(functions)f(to)i(giv)m(e)g(b)s(etter)f Fj(zlib)f Fl(compatibilit)m(y)
-8 b(.)45 b(These)150 3418 y(functions)36 b(are)i Fj(BZ2_bzopen)p
Fl(,)e Fj(BZ2_bzread)p Fl(,)h Fj(BZ2_bzwrite)p Fl(,)f
Fj(BZ2_bzflush)p Fl(,)h Fj(BZ2_bzclose)p Fl(,)f Fj(BZ2_)150
3527 y(bzerror)23 b Fl(and)h Fj(BZ2_bzlibVersion)p Fl(.)34
b(These)25 b(functions)e(are)j(not)f(\(y)m(et\))h(o\016cially)e(part)h
(of)g(the)g(library)-8 b(.)150 3637 y(If)30 b(they)g(break,)h(y)m(ou)g
(get)g(to)g(k)m(eep)g(all)f(the)g(pieces.)41 b(Nev)m(ertheless,)31
b(I)f(think)f(they)i(w)m(ork)f(ok.)390 3788 y Fj(typedef)46
b(void)g(BZFILE;)390 3995 y(const)g(char)h(*)g(BZ2_bzlibVersion)d(\()j
(void)g(\);)150 4152 y Fl(Returns)29 b(a)i(string)f(indicating)e(the)i
(library)e(v)m(ersion.)390 4303 y Fj(BZFILE)46 b(*)i(BZ2_bzopen)92
b(\()48 b(const)e(char)h(*path,)f(const)g(char)h(*mode)f(\);)390
4407 y(BZFILE)g(*)i(BZ2_bzdopen)c(\()k(int)381 b(fd,)190
b(const)46 b(char)h(*mode)f(\);)150 4564 y Fl(Op)s(ens)19
b(a)j Fj(.bz2)e Fl(\014le)g(for)g(reading)g(or)h(writing,)g(using)f
(either)g(its)h(name)g(or)g(a)g(pre-existing)f(\014le)g(descriptor.)150
4674 y(Analogous)30 b(to)i Fj(fopen)c Fl(and)i Fj(fdopen)p
Fl(.)390 4825 y Fj(int)47 b(BZ2_bzread)93 b(\()47 b(BZFILE*)f(b,)h
(void*)f(buf,)h(int)g(len)g(\);)390 4928 y(int)g(BZ2_bzwrite)e(\()i
(BZFILE*)f(b,)h(void*)f(buf,)h(int)g(len)g(\);)150 5085
y Fl(Reads/writes)30 b(data)h(from/to)g(a)g(previously)d(op)s(ened)i
Fj(BZFILE)p Fl(.)39 b(Analogous)30 b(to)h Fj(fread)e
Fl(and)h Fj(fwrite)p Fl(.)390 5236 y Fj(int)95 b(BZ2_bzflush)44
b(\()k(BZFILE*)e(b)h(\);)390 5340 y(void)g(BZ2_bzclose)d(\()k(BZFILE*)e
(b)h(\);)p eop
%%Page: 29 30
29 29 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(29)150 299 y(Flushes/closes)27
b(a)h Fj(BZFILE)p Fl(.)39 b Fj(BZ2_bzflush)24 b Fl(do)s(esn't)k
(actually)f(do)h(an)m(ything.)39 b(Analogous)28 b(to)h
Fj(fflush)150 408 y Fl(and)h Fj(fclose)p Fl(.)390 559
y Fj(const)46 b(char)h(*)g(BZ2_bzerror)e(\()j(BZFILE)e(*b,)h(int)g
(*errnum)e(\))150 716 y Fl(Returns)31 b(a)i(string)e(describing)f(the)i
(more)g(recen)m(t)h(error)f(status)h(of)f Fj(b)p Fl(,)g(and)g(also)g
(sets)h Fj(*errnum)d Fl(to)j(its)150 826 y(n)m(umerical)c(v)-5
b(alue.)150 1242 y Fk(3.7)68 b(Using)46 b(the)f(library)g(in)g(a)g
Fd(stdio)p Fk(-free)f(en)l(vironmen)l(t)150 1615 y Ff(3.7.1)63
b(Getting)40 b(rid)h(of)g Fe(stdio)150 1807 y Fl(In)i(a)g(deeply)g(em)m
(b)s(edded)f(application,)j(y)m(ou)f(migh)m(t)f(w)m(an)m(t)h(to)g(use)f
(just)g(the)h(memory-to-memory)150 1917 y(functions.)39
b(Y)-8 b(ou)30 b(can)f(do)g(this)g(con)m(v)m(enien)m(tly)g(b)m(y)g
(compiling)e(the)j(library)d(with)h(prepro)s(cessor)g(sym)m(b)s(ol)150
2026 y Fj(BZ_NO_STDIO)35 b Fl(de\014ned.)63 b(Doing)39
b(this)e(giv)m(es)h(y)m(ou)h(a)f(library)e(con)m(taining)i(only)f(the)i
(follo)m(wing)e(eigh)m(t)150 2136 y(functions:)150 2293
y Fj(BZ2_bzCompressInit)p Fl(,)26 b Fj(BZ2_bzCompress)p
Fl(,)g Fj(BZ2_bzCompressEnd)150 2402 y(BZ2_bzDecompressInit)p
Fl(,)f Fj(BZ2_bzDecompress)p Fl(,)h Fj(BZ2_bzDecompressEnd)150
2512 y(BZ2_bzBuffToBuffCompress)o Fl(,)f Fj(BZ2_bzBuffToBuffDecompre)o
(ss)150 2669 y Fl(When)30 b(compiled)f(lik)m(e)h(this,)f(all)g
(functions)g(will)f(ignore)i Fj(verbosity)e Fl(settings.)150
3006 y Ff(3.7.2)63 b(Critical)40 b(error)h(handling)150
3199 y Fj(libbzip2)20 b Fl(con)m(tains)j(a)g(n)m(um)m(b)s(er)f(of)g(in)
m(ternal)g(assertion)g(c)m(hec)m(ks)i(whic)m(h)d(should,)i(needless)f
(to)h(sa)m(y)-8 b(,)26 b(nev)m(er)150 3308 y(b)s(e)g(activ)-5
b(ated.)40 b(Nev)m(ertheless,)28 b(if)d(an)i(assertion)f(should)e
(fail,)i(b)s(eha)m(viour)f(dep)s(ends)f(on)j(whether)e(or)i(not)150
3418 y(the)k(library)d(w)m(as)i(compiled)f(with)g Fj(BZ_NO_STDIO)e
Fl(set.)150 3575 y(F)-8 b(or)31 b(a)g(normal)e(compile,)h(an)g
(assertion)g(failure)f(yields)f(the)j(message)533 3726
y Fj(bzip2/libbzip2:)44 b(internal)h(error)i(number)f(N.)533
3829 y(This)h(is)g(a)g(bug)g(in)h(bzip2/libbzip2,)43
b(1.0)k(of)g(21-Mar-2000.)533 3933 y(Please)f(report)g(it)i(to)f(me)g
(at:)g(jseward@acm.org.)91 b(If)47 b(this)g(happened)533
4037 y(when)g(you)g(were)f(using)h(some)f(program)g(which)h(uses)f
(libbzip2)g(as)h(a)533 4141 y(component,)e(you)i(should)f(also)h
(report)f(this)h(bug)f(to)i(the)f(author\(s\))533 4244
y(of)g(that)g(program.)93 b(Please)46 b(make)h(an)g(effort)f(to)h
(report)g(this)f(bug;)533 4348 y(timely)g(and)h(accurate)f(bug)h
(reports)e(eventually)g(lead)i(to)g(higher)533 4452 y(quality)f
(software.)93 b(Thanks.)h(Julian)46 b(Seward,)f(21)j(March)e(2000.)150
4609 y Fl(where)30 b Fj(N)g Fl(is)f(some)i(error)f(co)s(de)h(n)m(um)m
(b)s(er.)39 b Fj(exit\(3\))28 b Fl(is)i(then)g(called.)150
4766 y(F)-8 b(or)31 b(a)g Fj(stdio)p Fl(-free)e(library)-8
b(,)29 b(assertion)h(failures)e(result)i(in)f(a)i(call)e(to)i(a)g
(function)e(declared)h(as:)533 4917 y Fj(extern)46 b(void)h
(bz_internal_error)c(\()k(int)g(errcode)f(\);)150 5074
y Fl(The)30 b(relev)-5 b(an)m(t)31 b(co)s(de)f(is)g(passed)f(as)i(a)g
(parameter.)41 b(Y)-8 b(ou)31 b(should)d(supply)g(suc)m(h)i(a)h
(function.)150 5230 y(In)g(either)g(case,)j(once)e(an)g(assertion)g
(failure)e(has)h(o)s(ccurred,)h(an)m(y)g Fj(bz_stream)e
Fl(records)h(in)m(v)m(olv)m(ed)h(can)150 5340 y(b)s(e)e(regarded)g(as)h
(in)m(v)-5 b(alid.)38 b(Y)-8 b(ou)31 b(should)d(not)j(attempt)g(to)g
(resume)f(normal)g(op)s(eration)f(with)g(them.)p eop
%%Page: 30 31
30 30 bop 150 -116 a Fl(Chapter)30 b(3:)41 b(Programming)29
b(with)g Fj(libbzip2)1881 b Fl(30)150 299 y(Y)-8 b(ou)22
b(ma)m(y)-8 b(,)25 b(of)d(course,)h(c)m(hange)g(critical)e(error)g
(handling)e(to)j(suit)f(y)m(our)g(needs.)38 b(As)21 b(I)h(said)e(ab)s
(o)m(v)m(e,)25 b(critical)150 408 y(errors)30 b(indicate)g(bugs)g(in)g
(the)h(library)d(and)i(should)f(not)i(o)s(ccur.)42 b(All)29
b Fj(")p Fl(normal)p Fj(")h Fl(error)g(situations)g(are)150
518 y(indicated)f(via)h(error)g(return)f(co)s(des)i(from)f(functions,)f
(and)g(can)i(b)s(e)f(reco)m(v)m(ered)i(from.)150 798
y Fk(3.8)68 b(Making)45 b(a)g(Windo)l(ws)h(DLL)150 990
y Fl(Ev)m(erything)30 b(related)g(to)h(Windo)m(ws)f(has)g(b)s(een)f
(con)m(tributed)h(b)m(y)g(Y)-8 b(oshiok)j(a)31 b(Tsuneo)150
1100 y(\()p Fj(QWF00133@niftyserve.or.jp)46 b Fl(/)52
b Fj(tsuneo-y@is.aist-nara.ac.j)o(p)p Fl(\),)g(so)h(y)m(ou)f(should)f
(send)150 1210 y(y)m(our)30 b(queries)g(to)h(him)e(\(but)h(p)s(erhaps)e
(Cc:)41 b(me,)31 b Fj(jseward@acm.org)p Fl(\).)150 1366
y(My)43 b(v)-5 b(ague)44 b(understanding)d(of)i(what)g(to)h(do)f(is:)65
b(using)41 b(Visual)h(C)p Fj(++)g Fl(5.0,)48 b(op)s(en)42
b(the)h(pro)5 b(ject)44 b(\014le)150 1476 y Fj(libbz2.dsp)p
Fl(,)28 b(and)i(build.)37 b(That's)31 b(all.)150 1633
y(If)41 b(y)m(ou)g(can't)h(op)s(en)e(the)h(pro)5 b(ject)42
b(\014le)e(for)h(some)g(reason,)j(mak)m(e)e(a)g(new)e(one,)k(naming)c
(these)i(\014les:)150 1742 y Fj(blocksort.c)p Fl(,)28
b Fj(bzlib.c)p Fl(,)g Fj(compress.c)p Fl(,)g Fj(crctable.c)p
Fl(,)g Fj(decompress.c)p Fl(,)f Fj(huffman.c)p Fl(,)150
1852 y Fj(randtable.c)32 b Fl(and)j Fj(libbz2.def)p Fl(.)53
b(Y)-8 b(ou)36 b(will)d(also)i(need)g(to)h(name)g(the)g(header)f
(\014les)f Fj(bzlib.h)g Fl(and)150 1962 y Fj(bzlib_private.h)p
Fl(.)150 2118 y(If)c(y)m(ou)h(don't)f(use)g(V)m(C)p Fj(++)p
Fl(,)g(y)m(ou)h(ma)m(y)g(need)f(to)h(de\014ne)f(the)h(propro)s(cessor)e
(sym)m(b)s(ol)g Fj(_WIN32)p Fl(.)150 2275 y(Finally)-8
b(,)28 b Fj(dlltest.c)e Fl(is)h(a)i(sample)f(program)g(using)g(the)g
(DLL.)h(It)g(has)f(a)h(pro)5 b(ject)29 b(\014le,)g Fj(dlltest.dsp)p
Fl(.)150 2432 y(If)h(y)m(ou)h(just)e(w)m(an)m(t)j(a)e(mak)m(e\014le)h
(for)f(Visual)f(C,)h(ha)m(v)m(e)i(a)e(lo)s(ok)g(at)i
Fj(makefile.msc)p Fl(.)150 2589 y(Be)k(a)m(w)m(are)g(that)g(if)e(y)m
(ou)h(compile)f Fj(bzip2)g Fl(itself)g(on)h(Win32,)h(y)m(ou)g(m)m(ust)f
(set)g Fj(BZ_UNIX)e Fl(to)j(0)f(and)g Fj(BZ_)150 2698
y(LCCWIN32)27 b Fl(to)j(1,)g(in)f(the)g(\014le)g Fj(bzip2.c)p
Fl(,)e(b)s(efore)i(compiling.)39 b(Otherwise)28 b(the)h(resulting)f
(binary)f(w)m(on't)150 2808 y(w)m(ork)j(correctly)-8
b(.)150 2965 y(I)30 b(ha)m(v)m(en't)i(tried)d(an)m(y)i(of)g(this)e
(stu\013)h(m)m(yself,)g(but)g(it)f(all)h(lo)s(oks)g(plausible.)p
eop
%%Page: 31 32
31 31 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
b(31)150 299 y Fh(4)80 b(Miscellanea)150 583 y Fl(These)30
b(are)h(just)f(some)g(random)g(though)m(ts)h(of)f(mine.)40
b(Y)-8 b(our)30 b(mileage)h(ma)m(y)g(v)-5 b(ary)d(.)150
884 y Fk(4.1)68 b(Limitations)47 b(of)e(the)g(compressed)g(\014le)h
(format)150 1077 y Fj(bzip2-1.0)p Fl(,)e Fj(0.9.5)e Fl(and)g
Fj(0.9.0)g Fl(use)h(exactly)h(the)f(same)h(\014le)e(format)i(as)f(the)h
(previous)d(v)m(ersion,)150 1186 y Fj(bzip2-0.1)p Fl(.)75
b(This)41 b(decision)g(w)m(as)i(made)g(in)e(the)i(in)m(terests)g(of)g
(stabilit)m(y)-8 b(.)77 b(Creating)42 b(y)m(et)i(another)150
1296 y(incompatible)21 b(compressed)i(\014le)f(format)i(w)m(ould)e
(create)i(further)e(confusion)g(and)h(disruption)d(for)j(users.)150
1453 y(Nev)m(ertheless,)31 b(this)e(is)g(not)h(a)g(painless)e
(decision.)39 b(Dev)m(elopmen)m(t)31 b(w)m(ork)f(since)f(the)h(release)
h(of)f Fj(bzip2-)150 1562 y(0.1)19 b Fl(in)g(August)i(1997)h(has)e(sho)
m(wn)f(complexities)h(in)f(the)h(\014le)g(format)g(whic)m(h)f(slo)m(w)h
(do)m(wn)g(decompression)150 1672 y(and,)30 b(in)f(retrosp)s(ect,)i
(are)g(unnecessary)-8 b(.)40 b(These)31 b(are:)225 1829
y Fi(\017)60 b Fl(The)20 b(run-length)g(enco)s(der,)i(whic)m(h)e(is)g
(the)h(\014rst)f(of)h(the)g(compression)f(transformations,)i(is)e(en)m
(tirely)330 1938 y(irrelev)-5 b(an)m(t.)63 b(The)38 b(original)e(purp)s
(ose)g(w)m(as)j(to)g(protect)g(the)f(sorting)g(algorithm)f(from)g(the)i
(v)m(ery)330 2048 y(w)m(orst)h(case)h(input:)58 b(a)41
b(string)e(of)h(rep)s(eated)g(sym)m(b)s(ols.)68 b(But)40
b(algorithm)f(steps)h(Q6a)h(and)e(Q6b)330 2157 y(in)30
b(the)i(original)e(Burro)m(ws-Wheeler)i(tec)m(hnical)g(rep)s(ort)f
(\(SR)m(C-124\))i(sho)m(w)f(ho)m(w)g(rep)s(eats)g(can)g(b)s(e)330
2267 y(handled)c(without)i(di\016cult)m(y)f(in)g(blo)s(c)m(k)h
(sorting.)225 2409 y Fi(\017)60 b Fl(The)30 b(randomisation)e(mec)m
(hanism)i(do)s(esn't)g(really)f(need)h(to)g(b)s(e)g(there.)41
b(Udi)29 b(Man)m(b)s(er)h(and)f(Gene)330 2518 y(My)m(ers)j(published)c
(a)33 b(su\016x)e(arra)m(y)h(construction)f(algorithm)g(a)h(few)g(y)m
(ears)h(bac)m(k,)g(whic)m(h)d(can)j(b)s(e)330 2628 y(emplo)m(y)m(ed)27
b(to)h(sort)g(an)m(y)f(blo)s(c)m(k,)h(no)f(matter)h(ho)m(w)f(rep)s
(etitiv)m(e,)h(in)d(O\(N)j(log)f(N\))h(time.)39 b(Subsequen)m(t)330
2737 y(w)m(ork)25 b(b)m(y)f(Kunihik)m(o)f(Sadak)-5 b(ane)24
b(has)h(pro)s(duced)e(a)i(deriv)-5 b(ativ)m(e)24 b(O\(N)h(\(log)g(N\))p
Fj(^)p Fl(2\))h(algorithm)d(whic)m(h)330 2847 y(usually)28
b(outp)s(erforms)h(the)i(Man)m(b)s(er-My)m(ers)g(algorithm.)330
2988 y(I)g(could)g(ha)m(v)m(e)i(c)m(hanged)f(to)g(Sadak)-5
b(ane's)32 b(algorithm,)f(but)g(I)g(\014nd)f(it)h(to)h(b)s(e)f(slo)m(w)
m(er)h(than)f Fj(bzip2)p Fl('s)330 3098 y(existing)38
b(algorithm)g(for)h(most)h(inputs,)f(and)g(the)g(randomisation)f(mec)m
(hanism)g(protects)i(ade-)330 3208 y(quately)34 b(against)f(bad)g
(cases.)52 b(I)33 b(didn't)f(think)g(it)i(w)m(as)g(a)g(go)s(o)s(d)f
(tradeo\013)i(to)f(mak)m(e.)51 b(P)m(artly)34 b(this)330
3317 y(is)39 b(due)h(to)h(the)f(fact)h(that)g(I)f(w)m(as)g(not)h(\015o)
s(o)s(ded)e(with)g(email)g(complain)m(ts)g(ab)s(out)h
Fj(bzip2-0.1)p Fl('s)330 3427 y(p)s(erformance)30 b(on)g(rep)s(etitiv)m
(e)g(data,)h(so)g(p)s(erhaps)d(it)i(isn't)g(a)h(problem)d(for)j(real)f
(inputs.)330 3568 y(Probably)i(the)h(b)s(est)g(long-term)g(solution,)g
(and)g(the)g(one)h(I)f(ha)m(v)m(e)h(incorp)s(orated)e(in)m(to)i(0.9.5)h
(and)330 3678 y(ab)s(o)m(v)m(e,)42 b(is)c(to)h(use)f(the)h(existing)f
(sorting)g(algorithm)f(initially)-8 b(,)38 b(and)g(fall)f(bac)m(k)i(to)
h(a)f(O\(N)f(\(log)330 3787 y(N\))p Fj(^)p Fl(2\))31
b(algorithm)f(if)f(the)i(standard)e(algorithm)h(gets)h(in)m(to)f
(di\016culties.)225 3929 y Fi(\017)60 b Fl(The)31 b(compressed)f
(\014le)g(format)i(w)m(as)f(nev)m(er)h(designed)d(to)j(b)s(e)f(handled)
e(b)m(y)i(a)g(library)-8 b(,)29 b(and)i(I)g(ha)m(v)m(e)330
4039 y(had)d(to)i(jump)e(though)g(some)i(ho)s(ops)e(to)i(pro)s(duce)e
(an)h(e\016cien)m(t)g(implemen)m(tation)f(of)h(decompres-)330
4148 y(sion.)38 b(It's)26 b(a)h(bit)e(hairy)-8 b(.)38
b(T)-8 b(ry)26 b(passing)f Fj(decompress.c)d Fl(through)k(the)g(C)f
(prepro)s(cessor)g(and)h(y)m(ou'll)330 4258 y(see)32
b(what)g(I)f(mean.)45 b(Muc)m(h)32 b(of)g(this)e(complexit)m(y)i(could)
f(ha)m(v)m(e)i(b)s(een)e(a)m(v)m(oided)h(if)e(the)i(compressed)330
4367 y(size)e(of)h(eac)m(h)g(blo)s(c)m(k)f(of)h(data)g(w)m(as)g
(recorded)f(in)f(the)h(data)h(stream.)225 4509 y Fi(\017)60
b Fl(An)30 b(Adler-32)g(c)m(hec)m(ksum,)i(rather)e(than)g(a)h(CR)m(C32)
g(c)m(hec)m(ksum,)g(w)m(ould)e(b)s(e)h(faster)h(to)g(compute.)150
4698 y(It)e(w)m(ould)f(b)s(e)g(fair)g(to)h(sa)m(y)h(that)g(the)f
Fj(bzip2)e Fl(format)i(w)m(as)h(frozen)f(b)s(efore)f(I)h(prop)s(erly)d
(and)j(fully)d(under-)150 4807 y(sto)s(o)s(d)k(the)h(p)s(erformance)e
(consequences)i(of)g(doing)e(so.)150 4964 y(Impro)m(v)m(emen)m(ts)d
(whic)m(h)e(I)i(w)m(as)g(able)f(to)h(incorp)s(orate)f(in)m(to)g(0.9.0,)
k(despite)24 b(using)g(the)i(same)g(\014le)e(format,)150
5074 y(are:)225 5230 y Fi(\017)60 b Fl(Single)30 b(arra)m(y)i(implemen)
m(tation)e(of)h(the)h(in)m(v)m(erse)f(BWT.)h(This)e(signi\014can)m(tly)
f(sp)s(eeds)i(up)f(decom-)330 5340 y(pression,)f(presumably)f(b)s
(ecause)i(it)g(reduces)g(the)h(n)m(um)m(b)s(er)e(of)i(cac)m(he)h
(misses.)p eop
%%Page: 32 33
32 32 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
b(32)225 299 y Fi(\017)60 b Fl(F)-8 b(aster)27 b(in)m(v)m(erse)e(MTF)h
(transform)f(for)g(large)h(MTF)f(v)-5 b(alues.)39 b(The)25
b(new)g(implemen)m(tation)f(is)g(based)330 408 y(on)30
b(the)h(notion)f(of)g(sliding)e(blo)s(c)m(ks)h(of)i(v)-5
b(alues.)225 544 y Fi(\017)60 b Fj(bzip2-0.9.0)24 b Fl(no)m(w)k(reads)f
(and)f(writes)h(\014les)f(with)g Fj(fread)g Fl(and)h
Fj(fwrite)p Fl(;)f(v)m(ersion)h(0.1)i(used)d Fj(putc)330
653 y Fl(and)k Fj(getc)p Fl(.)39 b(Duh!)h(W)-8 b(ell,)31
b(y)m(ou)f(liv)m(e)g(and)g(learn.)150 836 y(F)-8 b(urther)30
b(ahead,)g(it)f(w)m(ould)g(b)s(e)g(nice)h(to)g(b)s(e)g(able)f(to)i(do)e
(random)g(access)j(in)m(to)d(\014les.)40 b(This)28 b(will)f(require)150
945 y(some)k(careful)e(design)h(of)g(compressed)g(\014le)g(formats.)150
1227 y Fk(4.2)68 b(P)l(ortabilit)l(y)47 b(issues)150
1419 y Fl(After)36 b(some)g(consideration,)g(I)f(ha)m(v)m(e)i(decided)d
(not)i(to)g(use)g(GNU)g Fj(autoconf)d Fl(to)j(con\014gure)g(0.9.5)h(or)
150 1529 y(1.0.)150 1686 y Fj(autoconf)p Fl(,)31 b(admirable)g(and)h(w)
m(onderful)f(though)i(it)f(is,)h(mainly)d(assists)j(with)e(p)s
(ortabilit)m(y)g(problems)150 1795 y(b)s(et)m(w)m(een)f(Unix-lik)m(e)d
(platforms.)40 b(But)29 b Fj(bzip2)f Fl(do)s(esn't)h(ha)m(v)m(e)h(m)m
(uc)m(h)f(in)f(the)h(w)m(a)m(y)h(of)g(p)s(ortabilit)m(y)d(prob-)150
1905 y(lems)35 b(on)h(Unix;)j(most)d(of)g(the)h(di\016culties)d(app)s
(ear)h(when)g(p)s(orting)g(to)i(the)f(Mac,)j(or)d(to)h(Microsoft's)150
2015 y(op)s(erating)26 b(systems.)40 b Fj(autoconf)25
b Fl(do)s(esn't)h(help)g(in)f(those)j(cases,)h(and)d(brings)f(in)g(a)j
(whole)e(load)g(of)h(new)150 2124 y(complexit)m(y)-8
b(.)150 2281 y(Most)28 b(p)s(eople)f(should)f(b)s(e)h(able)g(to)h
(compile)e(the)i(library)d(and)i(program)h(under)e(Unix)g(straigh)m(t)i
(out-of-)150 2391 y(the-b)s(o)m(x,)j(so)g(to)g(sp)s(eak,)f(esp)s
(ecially)f(if)g(y)m(ou)i(ha)m(v)m(e)g(a)g(v)m(ersion)f(of)g(GNU)h(C)f
(a)m(v)-5 b(ailable.)150 2547 y(There)32 b(are)h(a)g(couple)f(of)h
Fj(__inline__)d Fl(directiv)m(es)i(in)f(the)i(co)s(de.)48
b(GNU)33 b(C)f(\()p Fj(gcc)p Fl(\))g(should)f(b)s(e)h(able)g(to)150
2657 y(handle)24 b(them.)39 b(If)25 b(y)m(ou're)i(not)e(using)g(GNU)h
(C,)f(y)m(our)h(C)f(compiler)f(shouldn't)g(see)i(them)f(at)i(all.)38
b(If)25 b(y)m(our)150 2767 y(compiler)k(do)s(es,)i(for)g(some)g
(reason,)h(see)f(them)g(and)f(do)s(esn't)h(lik)m(e)f(them,)i(just)e
Fj(#define)f(__inline__)150 2876 y Fl(to)37 b(b)s(e)f
Fj(/*)30 b(*/)p Fl(.)58 b(One)36 b(easy)h(w)m(a)m(y)g(to)h(do)e(this)f
(is)h(to)h(compile)e(with)g(the)i(\015ag)g Fj(-D__inline__=)p
Fl(,)d(whic)m(h)150 2986 y(should)28 b(b)s(e)i(understo)s(o)s(d)f(b)m
(y)h(most)h(Unix)e(compilers.)150 3143 y(If)35 b(y)m(ou)g(still)e(ha)m
(v)m(e)j(di\016culties,)e(try)h(compiling)e(with)g(the)j(macro)f
Fj(BZ_STRICT_ANSI)c Fl(de\014ned.)54 b(This)150 3252
y(should)28 b(enable)i(y)m(ou)h(to)g(build)d(the)i(library)e(in)h(a)i
(strictly)f(ANSI)g(complian)m(t)f(en)m(vironmen)m(t.)41
b(Building)150 3362 y(the)25 b(program)f(itself)f(lik)m(e)g(this)h(is)f
(dangerous)h(and)g(not)g(supp)s(orted,)g(since)g(y)m(ou)h(remo)m(v)m(e)
g Fj(bzip2)p Fl('s)e(c)m(hec)m(ks)150 3471 y(against)30
b(compressing)f(directories,)g(sym)m(b)s(olic)g(links,)f(devices,)i
(and)f(other)h(not-really-a-\014le)g(en)m(tities.)150
3581 y(This)f(could)g(cause)i(\014lesystem)f(corruption!)150
3738 y(One)e(other)i(thing:)39 b(if)27 b(y)m(ou)j(create)g(a)f
Fj(bzip2)f Fl(binary)f(for)i(public)d(distribution,)g(please)i(try)h
(and)g(link)d(it)150 3847 y(statically)g(\()p Fj(gcc)k(-s)p
Fl(\).)39 b(This)25 b(a)m(v)m(oids)i(all)f(sorts)h(of)g(library-v)m
(ersion)d(issues)h(that)i(others)g(ma)m(y)g(encoun)m(ter)150
3957 y(later)j(on.)150 4114 y(If)f(y)m(ou)g(build)e Fj(bzip2)h
Fl(on)h(Win32,)h(y)m(ou)f(m)m(ust)g(set)h Fj(BZ_UNIX)e
Fl(to)i(0)f(and)g Fj(BZ_LCCWIN32)d Fl(to)k(1,)g(in)e(the)i(\014le)150
4223 y Fj(bzip2.c)p Fl(,)f(b)s(efore)h(compiling.)38
b(Otherwise)29 b(the)i(resulting)d(binary)h(w)m(on't)i(w)m(ork)f
(correctly)-8 b(.)150 4505 y Fk(4.3)68 b(Rep)t(orting)46
b(bugs)150 4698 y Fl(I)25 b(tried)f(prett)m(y)i(hard)e(to)i(mak)m(e)g
(sure)f Fj(bzip2)e Fl(is)i(bug)f(free,)j(b)s(oth)d(b)m(y)h(design)f
(and)h(b)m(y)g(testing.)39 b(Hop)s(efully)150 4807 y(y)m(ou'll)29
b(nev)m(er)i(need)f(to)h(read)g(this)e(section)h(for)h(real.)150
4964 y(Nev)m(ertheless,)36 b(if)c Fj(bzip2)h Fl(dies)g(with)f(a)i
(segmen)m(tation)h(fault,)g(a)f(bus)f(error)g(or)h(an)g(in)m(ternal)e
(assertion)150 5074 y(failure,)i(it)h(will)d(ask)j(y)m(ou)g(to)g(email)
f(me)h(a)g(bug)f(rep)s(ort.)54 b(Exp)s(erience)33 b(with)h(v)m(ersion)g
(0.1)i(sho)m(ws)e(that)150 5183 y(almost)c(all)g(these)h(problems)d
(can)j(b)s(e)f(traced)h(to)g(either)f(compiler)e(bugs)i(or)g(hardw)m
(are)g(problems.)225 5340 y Fi(\017)60 b Fl(Recompile)22
b(the)h(program)g(with)f(no)h(optimisation,)g(and)f(see)i(if)e(it)g(w)m
(orks.)39 b(And/or)22 b(try)h(a)g(di\013eren)m(t)p eop
%%Page: 33 34
33 33 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
b(33)330 299 y(compiler.)77 b(I)43 b(heard)f(all)g(sorts)h(of)h
(stories)e(ab)s(out)h(v)-5 b(arious)42 b(\015a)m(v)m(ours)h(of)h(GNU)f
(C)g(\(and)g(other)330 408 y(compilers\))20 b(generating)i(bad)e(co)s
(de)i(for)f Fj(bzip2)p Fl(,)h(and)f(I'v)m(e)h(run)e(across)i(t)m(w)m(o)
g(suc)m(h)f(examples)g(m)m(yself.)330 606 y(2.7.X)35
b(v)m(ersions)e(of)g(GNU)h(C)f(are)h(kno)m(wn)f(to)h(generate)h(bad)d
(co)s(de)i(from)f(time)g(to)h(time,)g(at)g(high)330 716
y(optimisation)20 b(lev)m(els.)37 b(If)21 b(y)m(ou)g(get)i(problems,)e
(try)g(using)f(the)i(\015ags)f Fj(-O2)f(-fomit-frame-pointer)330
825 y(-fno-strength-reduce)p Fl(.)35 b(Y)-8 b(ou)31 b(should)d(sp)s
(eci\014cally)h Fc(not)j Fl(use)e Fj(-funroll-loops)p
Fl(.)330 1023 y(Y)-8 b(ou)38 b(ma)m(y)g(notice)g(that)g(the)g(Mak)m
(e\014le)g(runs)e(six)g(tests)i(as)g(part)f(of)h(the)g(build)c(pro)s
(cess.)62 b(If)37 b(the)330 1132 y(program)43 b(passes)g(all)f(of)h
(these,)k(it's)c(a)h(prett)m(y)f(go)s(o)s(d)g(\(but)g(not)g(100\045\))i
(indication)c(that)j(the)330 1242 y(compiler)29 b(has)h(done)g(its)g
(job)g(correctly)-8 b(.)225 1440 y Fi(\017)60 b Fl(If)33
b Fj(bzip2)f Fl(crashes)i(randomly)-8 b(,)33 b(and)g(the)h(crashes)g
(are)g(not)g(rep)s(eatable,)g(y)m(ou)g(ma)m(y)g(ha)m(v)m(e)h(a)f
(\015aky)330 1549 y(memory)k(subsystem.)64 b Fj(bzip2)37
b Fl(really)g(hammers)h(y)m(our)g(memory)g(hierarc)m(h)m(y)-8
b(,)41 b(and)d(if)f(it's)h(a)h(bit)330 1659 y(marginal,)33
b(y)m(ou)h(ma)m(y)g(get)h(these)f(problems.)49 b(Ditto)34
b(if)f(y)m(our)h(disk)e(or)h(I/O)h(subsystem)e(is)h(slo)m(wly)330
1768 y(failing.)39 b(Y)-8 b(up,)30 b(this)f(really)g(do)s(es)h(happ)s
(en.)330 1966 y(T)-8 b(ry)28 b(using)f(a)i(di\013eren)m(t)f(mac)m(hine)
g(of)h(the)g(same)f(t)m(yp)s(e,)i(and)e(see)h(if)e(y)m(ou)i(can)g(rep)s
(eat)g(the)f(problem.)225 2163 y Fi(\017)60 b Fl(This)21
b(isn't)i(really)f(a)h(bug,)i(but)d(...)39 b(If)23 b
Fj(bzip2)f Fl(tells)g(y)m(ou)h(y)m(our)h(\014le)e(is)g(corrupted)h(on)g
(decompression,)330 2273 y(and)29 b(y)m(ou)g(obtained)f(the)i(\014le)e
(via)h(FTP)-8 b(,)29 b(there)h(is)e(a)h(p)s(ossibilit)m(y)d(that)k(y)m
(ou)f(forgot)h(to)g(tell)e(FTP)h(to)330 2383 y(do)23
b(a)g(binary)e(mo)s(de)i(transfer.)38 b(That)23 b(absolutely)f(will)e
(cause)j(the)h(\014le)e(to)h(b)s(e)g(non-decompressible.)330
2492 y(Y)-8 b(ou'll)30 b(ha)m(v)m(e)h(to)g(transfer)f(it)g(again.)150
2737 y(If)i(y)m(ou'v)m(e)h(incorp)s(orated)e Fj(libbzip2)f
Fl(in)m(to)i(y)m(our)g(o)m(wn)g(program)g(and)g(are)g(getting)h
(problems,)e(please,)150 2847 y(please,)d(please,)h(c)m(hec)m(k)g(that)
f(the)g(parameters)g(y)m(ou)g(are)g(passing)f(in)f(calls)h(to)h(the)g
(library)-8 b(,)26 b(are)j(correct,)150 2956 y(and)e(in)f(accordance)k
(with)c(what)i(the)g(do)s(cumen)m(tation)f(sa)m(ys)h(is)f(allo)m(w)m
(able.)39 b(I)28 b(ha)m(v)m(e)h(tried)e(to)h(mak)m(e)h(the)150
3066 y(library)f(robust)i(against)g(suc)m(h)g(problems,)f(but)h(I'm)g
(sure)g(I)g(ha)m(v)m(en't)h(succeeded.)150 3223 y(Finally)-8
b(,)32 b(if)g(the)h(ab)s(o)m(v)m(e)i(commen)m(ts)e(don't)g(help,)g(y)m
(ou'll)f(ha)m(v)m(e)i(to)g(send)e(me)h(a)g(bug)g(rep)s(ort.)48
b(No)m(w,)34 b(it's)150 3332 y(just)c(amazing)g(ho)m(w)h(man)m(y)f(p)s
(eople)g(will)d(send)j(me)g(a)h(bug)f(rep)s(ort)g(sa)m(ying)g
(something)g(lik)m(e)481 3483 y(bzip2)f(crashed)h(with)f(segmen)m
(tation)j(fault)e(on)g(m)m(y)g(mac)m(hine)150 3640 y(and)h(absolutely)f
(nothing)h(else.)44 b(Needless)32 b(to)g(sa)m(y)-8 b(,)33
b(a)f(suc)m(h)f(a)h(rep)s(ort)f(is)g Fc(totally)-8 b(,)32
b(utterly)-8 b(,)32 b(completely)150 3750 y(and)40 b(comprehensiv)m
(ely)g(100\045)h(useless;)46 b(a)41 b(w)m(aste)g(of)g(y)m(our)g(time,)i
(m)m(y)e(time,)i(and)e(net)g(bandwidth)p Fl(.)150 3859
y(With)31 b(no)h(details)f(at)i(all,)e(there's)h(no)g(w)m(a)m(y)h(I)f
(can)g(p)s(ossibly)d(b)s(egin)h(to)j(\014gure)e(out)i(what)e(the)i
(problem)150 3969 y(is.)150 4126 y(The)d(rules)e(of)i(the)g(game)h
(are:)41 b(facts,)32 b(facts,)f(facts.)41 b(Don't)31
b(omit)f(them)g(b)s(ecause)g Fj(")p Fl(oh,)g(they)g(w)m(on't)h(b)s(e)
150 4235 y(relev)-5 b(an)m(t)p Fj(")p Fl(.)41 b(A)m(t)31
b(the)g(bare)f(minim)m(um:)481 4386 y(Mac)m(hine)h(t)m(yp)s(e.)61
b(Op)s(erating)29 b(system)h(v)m(ersion.)481 4490 y(Exact)h(v)m(ersion)
f(of)h Fj(bzip2)e Fl(\(do)h Fj(bzip2)47 b(-V)p Fl(\).)481
4594 y(Exact)31 b(v)m(ersion)f(of)h(the)f(compiler)f(used.)481
4698 y(Flags)i(passed)e(to)j(the)e(compiler.)150 4854
y(Ho)m(w)m(ev)m(er,)i(the)d(most)h(imp)s(ortan)m(t)f(single)f(thing)g
(that)i(will)d(help)h(me)h(is)f(the)i(\014le)e(that)i(y)m(ou)g(w)m(ere)
g(trying)150 4964 y(to)f(compress)f(or)g(decompress)g(at)h(the)f(time)g
(the)g(problem)f(happ)s(ened.)38 b(Without)28 b(that,)h(m)m(y)g(abilit)
m(y)d(to)150 5074 y(do)k(an)m(ything)g(more)h(than)f(sp)s(eculate)g(ab)
s(out)g(the)g(cause,)i(is)d(limited.)150 5230 y(Please)34
b(remem)m(b)s(er)f(that)h(I)f(connect)i(to)f(the)g(In)m(ternet)g(with)e
(a)i(mo)s(dem,)g(so)f(y)m(ou)h(should)e(con)m(tact)k(me)150
5340 y(b)s(efore)30 b(mailing)e(me)j(h)m(uge)f(\014les.)p
eop
%%Page: 34 35
34 34 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
b(34)150 299 y Fk(4.4)68 b(Did)45 b(y)l(ou)g(get)h(the)f(righ)l(t)h
(pac)l(k)-7 b(age?)150 491 y Fj(bzip2)34 b Fl(is)h(a)h(resource)g(hog.)
56 b(It)36 b(soaks)g(up)f(large)g(amoun)m(ts)h(of)g(CPU)f(cycles)h(and)
f(memory)-8 b(.)57 b(Also,)36 b(it)150 601 y(giv)m(es)26
b(v)m(ery)h(large)f(latencies.)39 b(In)25 b(the)h(w)m(orst)g(case,)i(y)
m(ou)f(can)f(feed)g(man)m(y)g(megab)m(ytes)h(of)f(uncompressed)150
711 y(data)45 b(in)m(to)e(the)i(library)c(b)s(efore)j(getting)g(an)m(y)
g(compressed)g(output,)j(so)d(this)f(probably)f(rules)h(out)150
820 y(applications)29 b(requiring)e(in)m(teractiv)m(e)32
b(b)s(eha)m(viour.)150 977 y(These)38 b(aren't)h(faults)e(of)h(m)m(y)g
(implemen)m(tation,)h(I)f(hop)s(e,)i(but)d(more)h(an)g(in)m(trinsic)e
(prop)s(ert)m(y)h(of)i(the)150 1087 y(Burro)m(ws-Wheeler)30
b(transform)g(\(unfortunately\).)40 b(Ma)m(yb)s(e)31
b(this)e(isn't)h(what)g(y)m(ou)h(w)m(an)m(t.)150 1244
y(If)h(y)m(ou)h(w)m(an)m(t)g(a)g(compressor)g(and/or)f(library)e(whic)m
(h)h(is)h(faster,)i(uses)e(less)g(memory)g(but)g(gets)h(prett)m(y)150
1353 y(go)s(o)s(d)e(compression,)g(and)g(has)h(minimal)c(latency)-8
b(,)33 b(consider)e(Jean-loup)f(Gailly's)g(and)h(Mark)h(Adler's)150
1463 y(w)m(ork,)f Fj(zlib-1.1.2)c Fl(and)j Fj(gzip-1.2.4)p
Fl(.)38 b(Lo)s(ok)31 b(for)f(them)g(at)150 1620 y Fj
(http://www.cdrom.com/pub)o(/inf)o(ozip)o(/zl)o(ib)24
b Fl(and)30 b Fj(http://www.gzip.org)25 b Fl(resp)s(ectiv)m(ely)-8
b(.)150 1776 y(F)g(or)32 b(something)f(faster)i(and)e(ligh)m(ter)f
(still,)h(y)m(ou)g(migh)m(t)h(try)f(Markus)h(F)g(X)f(J)h(Ob)s(erh)m
(umer's)d Fj(LZO)i Fl(real-)150 1886 y(time)f
(compression/decompression)f(library)-8 b(,)28 b(at)150
1996 y Fj(http://wildsau.idv.uni-l)o(inz.)o(ac.a)o(t/m)o(fx/l)o(zo.h)o
(tml)o Fl(.)150 2152 y(If)38 b(y)m(ou)h(w)m(an)m(t)g(to)h(use)e(the)g
Fj(bzip2)g Fl(algorithms)f(to)i(compress)f(small)g(blo)s(c)m(ks)f(of)i
(data,)j(64k)d(b)m(ytes)g(or)150 2262 y(smaller,)i(for)e(example)g(on)h
(an)f(on-the-\015y)h(disk)e(compressor,)k(y)m(ou'd)e(b)s(e)f(w)m(ell)g
(advised)f(not)i(to)g(use)150 2372 y(this)i(library)-8
b(.)77 b(Instead,)47 b(I'v)m(e)d(made)f(a)h(sp)s(ecial)e(library)f
(tuned)h(for)h(that)h(kind)d(of)j(use.)79 b(It's)43 b(part)150
2481 y(of)d Fj(e2compr-0.40)p Fl(,)f(an)g(on-the-\015y)h(disk)e
(compressor)h(for)h(the)f(Lin)m(ux)f Fj(ext2)h Fl(\014lesystem.)67
b(Lo)s(ok)40 b(at)150 2591 y Fj(http://www.netspace.net.)o(au/~)o(reit)
o(er/)o(e2co)o(mpr)p Fl(.)150 2880 y Fk(4.5)68 b(T)-11
b(esting)150 3072 y Fl(A)30 b(record)h(of)f(the)h(tests)g(I'v)m(e)g
(done.)150 3229 y(First,)f(some)h(data)g(sets:)225 3386
y Fi(\017)60 b Fl(B:)32 b(a)f(directory)f(con)m(taining)h(6001)i
(\014les,)d(one)h(for)g(ev)m(ery)h(length)e(in)g(the)h(range)g(0)h(to)f
(6000)i(b)m(ytes.)330 3496 y(The)d(\014les)f(con)m(tain)i(random)e(lo)m
(w)m(ercase)j(letters.)41 b(18.7)32 b(megab)m(ytes.)225
3633 y Fi(\017)60 b Fl(H:)36 b(m)m(y)f(home)h(directory)f(tree.)56
b(Do)s(cumen)m(ts,)38 b(source)d(co)s(de,)i(mail)d(\014les,)i
(compressed)f(data.)57 b(H)330 3743 y(con)m(tains)39
b(B,)h(and)f(also)g(a)g(directory)g(of)g(\014les)f(designed)g(as)i(b)s
(oundary)d(cases)j(for)f(the)g(sorting;)330 3853 y(mostly)30
b(v)m(ery)h(rep)s(etitiv)m(e,)f(nast)m(y)h(\014les.)39
b(565)32 b(megab)m(ytes.)225 3990 y Fi(\017)60 b Fl(A:)43
b(directory)f(tree)i(holding)d(v)-5 b(arious)41 b(applications)g(built)
g(from)h(source:)66 b Fj(egcs)p Fl(,)45 b Fj(gcc-2.8.1)p
Fl(,)330 4100 y(KDE,)31 b(GTK,)f(Octa)m(v)m(e,)j(etc.)41
b(2200)33 b(megab)m(ytes.)150 4285 y(The)i(tests)g(conducted)g(are)h
(as)f(follo)m(ws.)54 b(Eac)m(h)36 b(test)g(means)f(compressing)f(\(a)h
(cop)m(y)h(of)7 b(\))36 b(eac)m(h)g(\014le)e(in)150 4394
y(the)d(data)g(set,)g(decompressing)e(it)h(and)g(comparing)f(it)h
(against)h(the)g(original.)150 4551 y(First,)26 b(a)g(bunc)m(h)f(of)h
(tests)h(with)d(blo)s(c)m(k)h(sizes)h(and)f(in)m(ternal)g(bu\013er)f
(sizes)i(set)g(v)m(ery)g(small,)g(to)g(detect)i(an)m(y)150
4661 y(problems)g(with)g(the)i(blo)s(c)m(king)f(and)g(bu\013ering)e
(mec)m(hanisms.)40 b(This)28 b(required)g(mo)s(difying)f(the)j(source)
150 4770 y(co)s(de)h(so)f(as)h(to)g(try)f(to)h(break)g(it.)199
4927 y(1.)61 b(Data)32 b(set)f(H,)g(with)e(bu\013er)g(size)h(of)h(1)g
(b)m(yte,)g(and)f(blo)s(c)m(k)g(size)g(of)g(23)i(b)m(ytes.)199
5065 y(2.)61 b(Data)32 b(set)f(B,)g(bu\013er)e(sizes)h(1)h(b)m(yte,)g
(blo)s(c)m(k)f(size)g(1)h(b)m(yte.)199 5202 y(3.)61 b(As)30
b(\(2\))i(but)d(small-mo)s(de)g(decompression.)199 5340
y(4.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)m(k)h(size)g(2)h(b)m(ytes.)p
eop
%%Page: 35 36
35 35 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
b(35)199 299 y(5.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)m(k)h(size)g(3)h
(b)m(ytes.)199 431 y(6.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)m(k)h(size)
g(4)h(b)m(ytes.)199 564 y(7.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)m(k)h
(size)g(5)h(b)m(ytes.)199 697 y(8.)61 b(As)30 b(\(2\))i(with)d(blo)s(c)
m(k)h(size)g(6)h(b)m(ytes)g(and)e(small-mo)s(de)g(decompression.)199
829 y(9.)61 b(H)30 b(with)g(bu\013er)f(size)h(of)h(1)f(b)m(yte,)i(but)d
(normal)h(blo)s(c)m(k)g(size)g(\(up)f(to)j(900000)h(b)m(ytes\).)150
1009 y(Then)c(some)i(tests)g(with)e(unmo)s(di\014ed)f(source)i(co)s
(de.)199 1166 y(1.)61 b(H,)31 b(all)e(settings)h(normal.)199
1299 y(2.)61 b(As)30 b(\(1\),)i(with)d(small-mo)s(de)g(decompress.)199
1431 y(3.)61 b(H,)31 b(compress)f(with)f(\015ag)i Fj(-1)p
Fl(.)199 1564 y(4.)61 b(H,)31 b(compress)f(with)f(\015ag)i
Fj(-s)p Fl(,)f(decompress)g(with)f(\015ag)i Fj(-s)p Fl(.)199
1697 y(5.)61 b(F)-8 b(orw)m(ards)33 b(compatibilit)m(y:)45
b(H,)33 b Fj(bzip2-0.1pl2)d Fl(compressing,)j Fj(bzip2-0.9.5)d
Fl(decompressing,)330 1806 y(all)f(settings)i(normal.)199
1939 y(6.)61 b(Bac)m(kw)m(ards)23 b(compatibilit)m(y:)35
b(H,)23 b Fj(bzip2-0.9.5)c Fl(compressing,)k Fj(bzip2-0.1pl2)c
Fl(decompressing,)330 2048 y(all)29 b(settings)i(normal.)199
2181 y(7.)61 b(Bigger)31 b(tests:)41 b(A,)31 b(all)e(settings)i
(normal.)199 2314 y(8.)61 b(As)30 b(\(7\),)i(using)d(the)i(fallbac)m(k)
e(\(Sadak)-5 b(ane-lik)m(e\))31 b(sorting)f(algorithm.)199
2446 y(9.)61 b(As)30 b(\(8\),)i(compress)e(with)f(\015ag)i
Fj(-1)p Fl(,)f(decompress)g(with)f(\015ag)i Fj(-s)p Fl(.)154
2579 y(10.)61 b(H,)31 b(using)e(the)h(fallbac)m(k)g(sorting)g
(algorithm.)154 2711 y(11.)61 b(F)-8 b(orw)m(ards)33
b(compatibilit)m(y:)45 b(A,)33 b Fj(bzip2-0.1pl2)d Fl(compressing,)j
Fj(bzip2-0.9.5)d Fl(decompressing,)330 2821 y(all)f(settings)i(normal.)
154 2954 y(12.)61 b(Bac)m(kw)m(ards)23 b(compatibilit)m(y:)35
b(A,)23 b Fj(bzip2-0.9.5)c Fl(compressing,)k Fj(bzip2-0.1pl2)c
Fl(decompressing,)330 3063 y(all)29 b(settings)i(normal.)154
3196 y(13.)61 b(Misc)39 b(test:)58 b(ab)s(out)39 b(400)h(megab)m(ytes)h
(of)e Fj(.tar)f Fl(\014les)f(with)h Fj(bzip2)f Fl(compiled)h(with)f
(Chec)m(k)m(er)j(\(a)330 3305 y(memory)30 b(access)i(error)e(detector,)
i(lik)m(e)e(Purify\).)154 3438 y(14.)61 b(Misc)30 b(tests)h(to)g(mak)m
(e)h(sure)d(it)h(builds)e(and)h(runs)g(ok)i(on)f(non-Lin)m(ux/x86)g
(platforms.)150 3618 y(These)35 b(tests)h(w)m(ere)f(conducted)g(on)g(a)
h(225)g(MHz)g(IDT)f(WinChip)d(mac)m(hine,)k(running)d(Lin)m(ux)g
(2.0.36.)150 3728 y(They)d(represen)m(t)g(nearly)g(a)h(w)m(eek)g(of)f
(con)m(tin)m(uous)g(computation.)41 b(All)29 b(tests)i(completed)f
(successfully)-8 b(.)150 4003 y Fk(4.6)68 b(F)-11 b(urther)44
b(reading)150 4196 y Fj(bzip2)28 b Fl(is)h(not)h(researc)m(h)g(w)m
(ork,)g(in)e(the)i(sense)g(that)g(it)f(do)s(esn't)g(presen)m(t)h(an)m
(y)g(new)f(ideas.)40 b(Rather,)30 b(it's)150 4306 y(an)g(engineering)f
(exercise)i(based)f(on)g(existing)g(ideas.)150 4463 y(F)-8
b(our)31 b(do)s(cumen)m(ts)f(describ)s(e)e(essen)m(tially)i(all)f(the)i
(ideas)e(b)s(ehind)f Fj(bzip2)p Fl(:)390 4614 y Fj(Michael)46
b(Burrows)g(and)h(D.)g(J.)g(Wheeler:)485 4717 y("A)h(block-sorting)c
(lossless)h(data)i(compression)e(algorithm")533 4821
y(10th)i(May)g(1994.)533 4925 y(Digital)f(SRC)h(Research)e(Report)i
(124.)533 5029 y(ftp://ftp.digital.com/pub)o(/DEC)o(/SR)o(C/re)o(sear)o
(ch-)o(repo)o(rts/)o(SRC)o(-124)o(.ps.)o(gz)533 5132
y(If)g(you)g(have)g(trouble)f(finding)g(it,)g(try)h(searching)f(at)h
(the)533 5236 y(New)g(Zealand)f(Digital)g(Library,)f
(http://www.nzdl.org.)p eop
%%Page: 36 37
36 36 bop 150 -116 a Fl(Chapter)30 b(4:)41 b(Miscellanea)2586
b(36)390 299 y Fj(Daniel)46 b(S.)h(Hirschberg)e(and)i(Debra)g(A.)g
(LeLewer)485 403 y("Efficient)e(Decoding)h(of)h(Prefix)f(Codes")533
506 y(Communications)e(of)j(the)g(ACM,)g(April)f(1990,)h(Vol)f(33,)h
(Number)f(4.)533 610 y(You)h(might)f(be)i(able)e(to)h(get)g(an)h
(electronic)d(copy)h(of)h(this)676 714 y(from)g(the)g(ACM)g(Digital)f
(Library.)390 922 y(David)g(J.)i(Wheeler)533 1025 y(Program)e(bred3.c)g
(and)h(accompanying)d(document)i(bred3.ps.)533 1129 y(This)h(contains)e
(the)i(idea)g(behind)f(the)h(multi-table)e(Huffman)533
1233 y(coding)h(scheme.)533 1337 y(ftp://ftp.cl.cam.ac.uk/us)o(ers/)o
(djw)o(3/)390 1544 y(Jon)h(L.)g(Bentley)f(and)h(Robert)f(Sedgewick)485
1648 y("Fast)h(Algorithms)e(for)i(Sorting)f(and)g(Searching)g(Strings")
533 1752 y(Available)f(from)i(Sedgewick's)e(web)i(page,)533
1856 y(www.cs.princeton.edu/~rs)150 2012 y Fl(The)29
b(follo)m(wing)f(pap)s(er)g(giv)m(es)h(v)-5 b(aluable)28
b(additional)g(insigh)m(ts)f(in)m(to)j(the)f(algorithm,)g(but)g(is)f
(not)i(imme-)150 2122 y(diately)g(the)g(basis)f(of)i(an)m(y)g(co)s(de)f
(used)g(in)f(bzip2.)390 2273 y Fj(Peter)46 b(Fenwick:)533
2377 y(Block)h(Sorting)e(Text)i(Compression)533 2481
y(Proceedings)e(of)i(the)g(19th)g(Australasian)d(Computer)i(Science)f
(Conference,)629 2584 y(Melbourne,)g(Australia.)92 b(Jan)47
b(31)g(-)h(Feb)f(2,)g(1996.)533 2688 y(ftp://ftp.cs.auckland.ac.)o
(nz/p)o(ub/)o(pete)o(r-f/)o(ACS)o(C96p)o(aper)o(.ps)150
2845 y Fl(Kunihik)m(o)28 b(Sadak)-5 b(ane's)31 b(sorting)e(algorithm,)h
(men)m(tioned)g(ab)s(o)m(v)m(e,)i(is)d(a)m(v)-5 b(ailable)30
b(from:)390 2996 y Fj(http://naomi.is.s.u-toky)o(o.ac)o(.jp/)o(~sa)o
(da/p)o(aper)o(s/S)o(ada9)o(8b.p)o(s.g)o(z)150 3153 y
Fl(The)41 b(Man)m(b)s(er-My)m(ers)g(su\016x)g(arra)m(y)g(construction)g
(algorithm)f(is)g(describ)s(ed)f(in)h(a)i(pap)s(er)e(a)m(v)-5
b(ailable)150 3262 y(from:)390 3413 y Fj(http://www.cs.arizona.ed)o
(u/pe)o(ople)o(/ge)o(ne/P)o(APER)o(S/s)o(uffi)o(x.ps)150
3570 y Fl(Finally)d(,)33 b(the)h(follo)m(wing)e(pap)s(er)h(do)s(cumen)m
(ts)g(some)h(recen)m(t)h(in)m(v)m(estigations)e(I)h(made)f(in)m(to)h
(the)g(p)s(erfor-)150 3680 y(mance)d(of)f(sorting)g(algorithms:)390
3831 y Fj(Julian)46 b(Seward:)533 3935 y(On)h(the)g(Performance)e(of)i
(BWT)g(Sorting)f(Algorithms)533 4038 y(Proceedings)f(of)i(the)g(IEEE)g
(Data)f(Compression)f(Conference)g(2000)629 4142 y(Snowbird,)g(Utah.)94
b(28-30)46 b(March)h(2000.)p eop
%%Page: -1 38
-1 37 bop 3725 -116 a Fl(i)150 299 y Fh(T)-13 b(able)54
b(of)g(Con)l(ten)l(ts)150 641 y Fk(1)135 b(In)l(tro)t(duction)15
b Fb(.)20 b(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f
(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)60
b Fk(2)150 911 y(2)135 b(Ho)l(w)45 b(to)h(use)f Fd(bzip2)31
b Fb(.)19 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g
(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)78 b Fk(3)1047
1048 y Fl(NAME)20 b Fa(.)c(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fl(3)1047
1157 y(SYNOPSIS)21 b Fa(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)h(.)f(.)g(.)50 b Fl(3)1047 1267 y(DESCRIPTION)10
b Fa(.)j(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40
b Fl(3)1047 1377 y(OPTIONS)16 b Fa(.)d(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)45 b Fl(4)1047
1486 y(MEMOR)-8 b(Y)31 b(MANA)m(GEMENT)14 b Fa(.)j(.)e(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)44
b Fl(6)1047 1596 y(RECO)m(VERING)30 b(D)m(A)-8 b(T)g(A)32
b(FR)m(OM)f(D)m(AMA)m(GED)i(FILES)1256 1705 y Fa(.)15
b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)57 b Fl(7)1047 1815 y(PERF)m(ORMANCE)30
b(NOTES)9 b Fa(.)14 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)38 b Fl(7)1047 1924
y(CA)-10 b(VEA)i(TS)10 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)40 b Fl(8)1047 2034
y(A)m(UTHOR)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)53 b Fl(8)150 2276 y Fk(3)135
b(Programming)46 b(with)f Fd(libbzip2)29 b Fb(.)16 b(.)j(.)h(.)f(.)h(.)
f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)74 b Fk(9)449
2413 y Fl(3.1)92 b(T)-8 b(op-lev)m(el)30 b(structure)24
b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)54 b Fl(9)748 2523 y(3.1.1)93 b(Lo)m(w-lev)m(el)30
b(summary)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)53
b Fl(9)748 2633 y(3.1.2)93 b(High-lev)m(el)29 b(summary)12
b Fa(.)i(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)41 b
Fl(9)748 2742 y(3.1.3)93 b(Utilit)m(y)29 b(functions)g(summary)12
b Fa(.)h(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)41 b Fl(10)449 2852 y(3.2)92 b(Error)29
b(handling)18 b Fa(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(10)449
2961 y(3.3)92 b(Lo)m(w-lev)m(el)31 b(in)m(terface)d Fa(.)15
b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)57 b Fl(12)748 3071 y(3.3.1)93 b Fj(BZ2_bzCompressInit)21
b Fa(.)9 b(.)15 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)50 b Fl(12)748
3181 y(3.3.2)93 b Fj(BZ2_bzCompress)9 b Fa(.)h(.)15 b(.)g(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fl(14)748 3290 y(3.3.3)93
b Fj(BZ2_bzCompressEnd)23 b Fa(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g
(.)52 b Fl(17)748 3400 y(3.3.4)93 b Fj(BZ2_bzDecompressInit)16
b Fa(.)9 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)45 b Fl(17)748 3509
y(3.3.5)93 b Fj(BZ2_bzDecompress)21 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)55 b Fl(17)748 3619 y(3.3.6)93 b Fj(BZ2_bzDecompressEnd)18
b Fa(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(19)449
3729 y(3.4)92 b(High-lev)m(el)30 b(in)m(terface)16 b
Fa(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)45 b Fl(19)748 3838 y(3.4.1)93 b Fj(BZ2_bzReadOpen)9
b Fa(.)h(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38
b Fl(19)748 3948 y(3.4.2)93 b Fj(BZ2_bzRead)18 b Fa(.)12
b(.)j(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)47
b Fl(20)748 4057 y(3.4.3)93 b Fj(BZ2_bzReadGetUnused)18
b Fa(.)10 b(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)48 b Fl(22)748
4167 y(3.4.4)93 b Fj(BZ2_bzReadClose)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)57 b Fl(22)748 4276 y(3.4.5)93 b
Fj(BZ2_bzWriteOpen)23 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)57 b Fl(22)748 4386 y(3.4.6)93 b Fj(BZ2_bzWrite)16
b Fa(.)11 b(.)k(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
45 b Fl(23)748 4496 y(3.4.7)93 b Fj(BZ2_bzWriteClose)21
b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)55 b Fl(23)748
4605 y(3.4.8)93 b(Handling)28 b(em)m(b)s(edded)h(compressed)h(data)h
(streams)17 b Fa(.)f(.)f(.)g(.)46 b Fl(24)748 4715 y(3.4.9)93
b(Standard)29 b(\014le-reading/writing)e(co)s(de)22 b
Fa(.)16 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52
b Fl(25)449 4824 y(3.5)92 b(Utilit)m(y)29 b(functions)f
Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)59 b Fl(26)748 4934 y(3.5.1)93 b
Fj(BZ2_bzBuffToBuffCompres)o(s)22 b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)57 b Fl(26)748
5044 y(3.5.2)93 b Fj(BZ2_bzBuffToBuffDecompr)o(ess)17
b Fa(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
53 b Fl(27)449 5153 y(3.6)92 b Fj(zlib)29 b Fl(compatibilit)m(y)g
(functions)23 b Fa(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)52
b Fl(28)449 5263 y(3.7)92 b(Using)30 b(the)g(library)e(in)h(a)i
Fj(stdio)p Fl(-free)e(en)m(vironmen)m(t)23 b Fa(.)15
b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)52 b Fl(29)p
eop
%%Page: -2 39
-2 38 bop 3699 -116 a Fl(ii)748 83 y(3.7.1)93 b(Getting)31
b(rid)d(of)j Fj(stdio)20 b Fa(.)13 b(.)i(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)49
b Fl(29)748 193 y(3.7.2)93 b(Critical)28 b(error)i(handling)22
b Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)54 b Fl(29)449 302
y(3.8)92 b(Making)30 b(a)h(Windo)m(ws)e(DLL)15 b Fa(.)h(.)f(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)44 b Fl(30)150 545
y Fk(4)135 b(Miscellanea)11 b Fb(.)21 b(.)f(.)f(.)h(.)f(.)g(.)h(.)f(.)h
(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)
h(.)f(.)g(.)h(.)56 b Fk(31)449 682 y Fl(4.1)92 b(Limitations)29
b(of)h(the)h(compressed)f(\014le)f(format)9 b Fa(.)15
b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38
b Fl(31)449 791 y(4.2)92 b(P)m(ortabilit)m(y)30 b(issues)14
b Fa(.)f(.)j(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)h(.)f(.)g(.)43 b Fl(32)449 901 y(4.3)92 b(Rep)s(orting)29
b(bugs)f Fa(.)15 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)58 b Fl(32)449 1010 y(4.4)92
b(Did)29 b(y)m(ou)i(get)h(the)e(righ)m(t)g(pac)m(k)-5
b(age?)22 b Fa(.)17 b(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h
(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)51
b Fl(34)449 1120 y(4.5)92 b(T)-8 b(esting)16 b Fa(.)f(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)45 b Fl(34)449 1230 y(4.6)92
b(F)-8 b(urther)30 b(reading)22 b Fa(.)14 b(.)h(.)g(.)h(.)f(.)g(.)g(.)g
(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)
g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)51
b Fl(35)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF
|