Commit 9379b768118f465e94f826bed1daacbbc94938fc

Authored by m-holger
1 parent d28969bf

Add additional name token JSON tests

Also, test writing JSON v1 files and files with deeply nested containers.
qpdf/qtest/qpdf-json.test
@@ -350,7 +350,7 @@ $td->runtest("check C API write to JSON stream", @@ -350,7 +350,7 @@ $td->runtest("check C API write to JSON stream",
350 # (using #xx) would generate invalid JSON, even though qpdf's own JSON 350 # (using #xx) would generate invalid JSON, even though qpdf's own JSON
351 # parser would accept it. Also, the JSON spec allows real numbers in 351 # parser would accept it. Also, the JSON spec allows real numbers in
352 # scientific notation, but the PDF spec does not. 352 # scientific notation, but the PDF spec does not.
353 -$n_tests += 4; 353 +$n_tests += 6;
354 $td->runtest("handle binary names", 354 $td->runtest("handle binary names",
355 {$td->COMMAND => 355 {$td->COMMAND =>
356 "qpdf --json-output weird-tokens.pdf a.json"}, 356 "qpdf --json-output weird-tokens.pdf a.json"},
@@ -371,6 +371,14 @@ $td->runtest("weird tokens with scientific notation", @@ -371,6 +371,14 @@ $td->runtest("weird tokens with scientific notation",
371 "qpdf --json-input --json-output weird-tokens-alt.json -"}, 371 "qpdf --json-input --json-output weird-tokens-alt.json -"},
372 {$td->FILE => "weird-tokens.json", $td->EXIT_STATUS => 0}, 372 {$td->FILE => "weird-tokens.json", $td->EXIT_STATUS => 0},
373 $td->NORMALIZE_NEWLINES); 373 $td->NORMALIZE_NEWLINES);
  374 +$td->runtest("handle binary names (JSON v1)",
  375 + {$td->COMMAND =>
  376 + "qpdf --json=1 weird-tokens.pdf a.json"},
  377 + {$td->STRING => "", $td->EXIT_STATUS => 0});
  378 +$td->runtest("check json",
  379 + {$td->FILE => "a.json"},
  380 + {$td->FILE => "weird-tokens-v1.json"},
  381 + $td->NORMALIZE_NEWLINES);
374 382
375 cleanup(); 383 cleanup();
376 $td->report($n_tests); 384 $td->report($n_tests);
qpdf/qtest/qpdf/weird-tokens-alt.json
@@ -10,21 +10,155 @@ @@ -10,21 +10,155 @@
10 { 10 {
11 "obj:1 0 R": { 11 "obj:1 0 R": {
12 "value": { 12 "value": {
  13 + "/Escape\\Key": 42,
13 "/Extra": [ 14 "/Extra": [
14 "u:Names with binary data", 15 "u:Names with binary data",
15 "n:/ABCDEF+#ba#da#cc#e5", 16 "n:/ABCDEF+#ba#da#cc#e5",
16 "n:/OVERLONG+#c0#81", 17 "n:/OVERLONG+#c0#81",
  18 + "n:/OVERLONG+#c1#ff",
  19 + "/Ok+ย€",
17 "n:/OVERLONG+#e0#81#82", 20 "n:/OVERLONG+#e0#81#82",
  21 + "n:/OVERLONG+#e0#9f#ff",
  22 + "/Ok+เ €",
18 "n:/OVERLONG+#f0#81#82#83", 23 "n:/OVERLONG+#f0#81#82#83",
  24 + "n:/OVERLONG+#f0#8f#ff#ff",
  25 + "/Ok+๐€€",
19 "n:/range+#01", 26 "n:/range+#01",
20 "n:/low+#18", 27 "n:/low+#18",
21 "/ABCEDEF+ฯ€", 28 "/ABCEDEF+ฯ€",
22 "n:/one+#a0two", 29 "n:/one+#a0two",
23 "n:/text#2fplain", 30 "n:/text#2fplain",
  31 + "u:Names requiring escaping in JSON",
  32 + "/Back\\shlash",
  33 + "/Low\u0022",
  34 + "/Low\u001f",
  35 + "/ExceptSpace ",
  36 + "/Except!",
24 "u:Very small/large reals", 37 "u:Very small/large reals",
25 1e-05, 38 1e-05,
26 1e12 39 1e12
27 ], 40 ],
  41 + "/Nested": {
  42 + "/1": {
  43 + "/2": {
  44 + "/3": {
  45 + "/4": {
  46 + "/5": {
  47 + "/6": {
  48 + "/7": {
  49 + "/8": {
  50 + "/9": {
  51 + "/10": {
  52 + "/1": {
  53 + "/2": {
  54 + "/3": {
  55 + "/4": {
  56 + "/5": {
  57 + "/6": {
  58 + "/7": {
  59 + "/8": {
  60 + "/9": {
  61 + "/10": {
  62 + "/1": {
  63 + "/2": {
  64 + "/3": {
  65 + "/4": {
  66 + "/5": {
  67 + "/6": {
  68 + "/7": {
  69 + "/8": {
  70 + "/9": {
  71 + "/10": {
  72 + "/1": {
  73 + "/2": {
  74 + "/3": {
  75 + "/4": {
  76 + "/5": {
  77 + "/6": {
  78 + "/7": {
  79 + "/8": {
  80 + "/9": {
  81 + "/10": {
  82 + "/1": {
  83 + "/2": {
  84 + "/3": {
  85 + "/4": {
  86 + "/5": {
  87 + "/6": {
  88 + "/7": {
  89 + "/8": {
  90 + "/9": {
  91 + "/10": {
  92 + "/1": {
  93 + "/2": {
  94 + "/3": {
  95 + "/4": {
  96 + "/5": {
  97 + "/6": {
  98 + "/7": {
  99 + "/8": {
  100 + "/9": {
  101 + "/10": 42
  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 + },
28 "/Pages": "2 0 R", 162 "/Pages": "2 0 R",
29 "/Type": "/Catalog", 163 "/Type": "/Catalog",
30 "n:/WeirdKey+#ba#da#cc#e5": 42 164 "n:/WeirdKey+#ba#da#cc#e5": 42
@@ -78,7 +212,7 @@ @@ -78,7 +212,7 @@
78 "value": { 212 "value": {
79 "/ID": [ 213 "/ID": [
80 "b:42841c13bbf709d79a200fa1691836f8", 214 "b:42841c13bbf709d79a200fa1691836f8",
81 - "b:728c020f464c3cf7e02c12605fa7d88b" 215 + "b:31415926535897932384626433832795"
82 ], 216 ],
83 "/Root": "1 0 R", 217 "/Root": "1 0 R",
84 "/Size": 7 218 "/Size": 7
qpdf/qtest/qpdf/weird-tokens-v1.json 0 โ†’ 100644
  1 +{
  2 + "version": 1,
  3 + "parameters": {
  4 + "decodelevel": "generalized"
  5 + },
  6 + "pages": [
  7 + {
  8 + "contents": [
  9 + "4 0 R"
  10 + ],
  11 + "images": [],
  12 + "label": null,
  13 + "object": "3 0 R",
  14 + "outlines": [],
  15 + "pageposfrom1": 1
  16 + }
  17 + ],
  18 + "pagelabels": [],
  19 + "acroform": {
  20 + "fields": [],
  21 + "hasacroform": false,
  22 + "needappearances": false
  23 + },
  24 + "attachments": {},
  25 + "encrypt": {
  26 + "capabilities": {
  27 + "accessibility": true,
  28 + "extract": true,
  29 + "moddifyannotations": true,
  30 + "modify": true,
  31 + "modifyassembly": true,
  32 + "modifyforms": true,
  33 + "modifyother": true,
  34 + "printhigh": true,
  35 + "printlow": true
  36 + },
  37 + "encrypted": false,
  38 + "ownerpasswordmatched": false,
  39 + "parameters": {
  40 + "P": 0,
  41 + "R": 0,
  42 + "V": 0,
  43 + "bits": 0,
  44 + "filemethod": "none",
  45 + "key": null,
  46 + "method": "none",
  47 + "streammethod": "none",
  48 + "stringmethod": "none"
  49 + },
  50 + "recovereduserpassword": null,
  51 + "userpasswordmatched": false
  52 + },
  53 + "outlines": [],
  54 + "objects": {
  55 + "1 0 R": {
  56 + "/Escape\\Key": 42,
  57 + "/Extra": [
  58 + "Names with binary data",
  59 + "/ABCDEF+#ba#da#cc#e5",
  60 + "/OVERLONG+#c0#81",
  61 + "/OVERLONG+#c1#ff",
  62 + "/Ok+#c2#80",
  63 + "/OVERLONG+#e0#81#82",
  64 + "/OVERLONG+#e0#9f#ff",
  65 + "/Ok+#e0#a0#80",
  66 + "/OVERLONG+#f0#81#82#83",
  67 + "/OVERLONG+#f0#8f#ff#ff",
  68 + "/Ok+#f0#90#80#80",
  69 + "/range+#01",
  70 + "/low+#18",
  71 + "/ABCEDEF+#cf#80",
  72 + "/one+#a0two",
  73 + "/text#2fplain",
  74 + "Names requiring escaping in JSON",
  75 + "/Back\\shlash",
  76 + "/Low\"",
  77 + "/Low#1f",
  78 + "/ExceptSpace#20",
  79 + "/Except!",
  80 + "Very small/large reals",
  81 + 0.00001,
  82 + 1000000000000
  83 + ],
  84 + "/Nested": {
  85 + "/1": {
  86 + "/2": {
  87 + "/3": {
  88 + "/4": {
  89 + "/5": {
  90 + "/6": {
  91 + "/7": {
  92 + "/8": {
  93 + "/9": {
  94 + "/10": {
  95 + "/1": {
  96 + "/2": {
  97 + "/3": {
  98 + "/4": {
  99 + "/5": {
  100 + "/6": {
  101 + "/7": {
  102 + "/8": {
  103 + "/9": {
  104 + "/10": {
  105 + "/1": {
  106 + "/2": {
  107 + "/3": {
  108 + "/4": {
  109 + "/5": {
  110 + "/6": {
  111 + "/7": {
  112 + "/8": {
  113 + "/9": {
  114 + "/10": {
  115 + "/1": {
  116 + "/2": {
  117 + "/3": {
  118 + "/4": {
  119 + "/5": {
  120 + "/6": {
  121 + "/7": {
  122 + "/8": {
  123 + "/9": {
  124 + "/10": {
  125 + "/1": {
  126 + "/2": {
  127 + "/3": {
  128 + "/4": {
  129 + "/5": {
  130 + "/6": {
  131 + "/7": {
  132 + "/8": {
  133 + "/9": {
  134 + "/10": {
  135 + "/1": {
  136 + "/2": {
  137 + "/3": {
  138 + "/4": {
  139 + "/5": {
  140 + "/6": {
  141 + "/7": {
  142 + "/8": {
  143 + "/9": {
  144 + "/10": 42
  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 + "/Pages": "2 0 R",
  206 + "/Type": "/Catalog",
  207 + "/WeirdKey+#ba#da#cc#e5": 42
  208 + },
  209 + "2 0 R": {
  210 + "/Count": 1,
  211 + "/Kids": [
  212 + "3 0 R"
  213 + ],
  214 + "/Type": "/Pages"
  215 + },
  216 + "3 0 R": {
  217 + "/Contents": "4 0 R",
  218 + "/MediaBox": [
  219 + 0,
  220 + 0,
  221 + 612,
  222 + 792
  223 + ],
  224 + "/Parent": "2 0 R",
  225 + "/Resources": {
  226 + "/Font": {
  227 + "/F1": "6 0 R"
  228 + }
  229 + },
  230 + "/Type": "/Page"
  231 + },
  232 + "4 0 R": {
  233 + "/Length": "5 0 R"
  234 + },
  235 + "5 0 R": 44,
  236 + "6 0 R": {
  237 + "/BaseFont": "/Helvetica",
  238 + "/Encoding": "/WinAnsiEncoding",
  239 + "/Subtype": "/Type1",
  240 + "/Type": "/Font"
  241 + },
  242 + "trailer": {
  243 + "/ID": [
  244 + "Bโ€”ห\u0013ยปรท\tร—ฤฑ \u000fยกiห˜6รธ",
  245 + "1AY&SXล ๏ฌ#โ€”bd3โ€ฆ'ล"
  246 + ],
  247 + "/Root": "1 0 R",
  248 + "/Size": 7
  249 + }
  250 + },
  251 + "objectinfo": {
  252 + "1 0 R": {
  253 + "stream": {
  254 + "filter": null,
  255 + "is": false,
  256 + "length": null
  257 + }
  258 + },
  259 + "2 0 R": {
  260 + "stream": {
  261 + "filter": null,
  262 + "is": false,
  263 + "length": null
  264 + }
  265 + },
  266 + "3 0 R": {
  267 + "stream": {
  268 + "filter": null,
  269 + "is": false,
  270 + "length": null
  271 + }
  272 + },
  273 + "4 0 R": {
  274 + "stream": {
  275 + "filter": null,
  276 + "is": true,
  277 + "length": 44
  278 + }
  279 + },
  280 + "5 0 R": {
  281 + "stream": {
  282 + "filter": null,
  283 + "is": false,
  284 + "length": null
  285 + }
  286 + },
  287 + "6 0 R": {
  288 + "stream": {
  289 + "filter": null,
  290 + "is": false,
  291 + "length": null
  292 + }
  293 + }
  294 + }
  295 +}
qpdf/qtest/qpdf/weird-tokens.json
@@ -10,21 +10,155 @@ @@ -10,21 +10,155 @@
10 { 10 {
11 "obj:1 0 R": { 11 "obj:1 0 R": {
12 "value": { 12 "value": {
  13 + "/Escape\\Key": 42,
13 "/Extra": [ 14 "/Extra": [
14 "u:Names with binary data", 15 "u:Names with binary data",
15 "n:/ABCDEF+#ba#da#cc#e5", 16 "n:/ABCDEF+#ba#da#cc#e5",
16 "n:/OVERLONG+#c0#81", 17 "n:/OVERLONG+#c0#81",
  18 + "n:/OVERLONG+#c1#ff",
  19 + "/Ok+ย€",
17 "n:/OVERLONG+#e0#81#82", 20 "n:/OVERLONG+#e0#81#82",
  21 + "n:/OVERLONG+#e0#9f#ff",
  22 + "/Ok+เ €",
18 "n:/OVERLONG+#f0#81#82#83", 23 "n:/OVERLONG+#f0#81#82#83",
  24 + "n:/OVERLONG+#f0#8f#ff#ff",
  25 + "/Ok+๐€€",
19 "/range+\u0001", 26 "/range+\u0001",
20 "/low+\u0018", 27 "/low+\u0018",
21 "/ABCEDEF+ฯ€", 28 "/ABCEDEF+ฯ€",
22 "n:/one+#a0two", 29 "n:/one+#a0two",
23 "/text/plain", 30 "/text/plain",
  31 + "u:Names requiring escaping in JSON",
  32 + "/Back\\shlash",
  33 + "/Low\"",
  34 + "/Low\u001f",
  35 + "/ExceptSpace ",
  36 + "/Except!",
24 "u:Very small/large reals", 37 "u:Very small/large reals",
25 0.00001, 38 0.00001,
26 1000000000000 39 1000000000000
27 ], 40 ],
  41 + "/Nested": {
  42 + "/1": {
  43 + "/2": {
  44 + "/3": {
  45 + "/4": {
  46 + "/5": {
  47 + "/6": {
  48 + "/7": {
  49 + "/8": {
  50 + "/9": {
  51 + "/10": {
  52 + "/1": {
  53 + "/2": {
  54 + "/3": {
  55 + "/4": {
  56 + "/5": {
  57 + "/6": {
  58 + "/7": {
  59 + "/8": {
  60 + "/9": {
  61 + "/10": {
  62 + "/1": {
  63 + "/2": {
  64 + "/3": {
  65 + "/4": {
  66 + "/5": {
  67 + "/6": {
  68 + "/7": {
  69 + "/8": {
  70 + "/9": {
  71 + "/10": {
  72 + "/1": {
  73 + "/2": {
  74 + "/3": {
  75 + "/4": {
  76 + "/5": {
  77 + "/6": {
  78 + "/7": {
  79 + "/8": {
  80 + "/9": {
  81 + "/10": {
  82 + "/1": {
  83 + "/2": {
  84 + "/3": {
  85 + "/4": {
  86 + "/5": {
  87 + "/6": {
  88 + "/7": {
  89 + "/8": {
  90 + "/9": {
  91 + "/10": {
  92 + "/1": {
  93 + "/2": {
  94 + "/3": {
  95 + "/4": {
  96 + "/5": {
  97 + "/6": {
  98 + "/7": {
  99 + "/8": {
  100 + "/9": {
  101 + "/10": 42
  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 + },
28 "/Pages": "2 0 R", 162 "/Pages": "2 0 R",
29 "/Type": "/Catalog", 163 "/Type": "/Catalog",
30 "n:/WeirdKey+#ba#da#cc#e5": 42 164 "n:/WeirdKey+#ba#da#cc#e5": 42
@@ -78,7 +212,7 @@ @@ -78,7 +212,7 @@
78 "value": { 212 "value": {
79 "/ID": [ 213 "/ID": [
80 "b:42841c13bbf709d79a200fa1691836f8", 214 "b:42841c13bbf709d79a200fa1691836f8",
81 - "b:728c020f464c3cf7e02c12605fa7d88b" 215 + "b:31415926535897932384626433832795"
82 ], 216 ],
83 "/Root": "1 0 R", 217 "/Root": "1 0 R",
84 "/Size": 7 218 "/Size": 7
qpdf/qtest/qpdf/weird-tokens.pdf
@@ -4,21 +4,155 @@ @@ -4,21 +4,155 @@
4 4
5 1 0 obj 5 1 0 obj
6 << 6 <<
  7 + /Escape\Key 42
7 /Extra [ 8 /Extra [
8 (Names with binary data) 9 (Names with binary data)
9 /ABCDEF+#ba#da#cc#e5 10 /ABCDEF+#ba#da#cc#e5
10 /OVERLONG+#c0#81 11 /OVERLONG+#c0#81
  12 + /OVERLONG+#c1#ff
  13 + /Ok+#c2#80
11 /OVERLONG+#e0#81#82 14 /OVERLONG+#e0#81#82
  15 + /OVERLONG+#e0#9f#ff
  16 + /Ok+#e0#a0#80
12 /OVERLONG+#f0#81#82#83 17 /OVERLONG+#f0#81#82#83
  18 + /OVERLONG+#f0#8f#ff#ff
  19 + /Ok+#f0#90#80#80
13 /range+#01 20 /range+#01
14 /low+#18 21 /low+#18
15 /ABCEDEF+#cf#80 22 /ABCEDEF+#cf#80
16 /one+#a0two 23 /one+#a0two
17 /text#2fplain 24 /text#2fplain
  25 + (Names requiring escaping in JSON)
  26 + /Back\shlash
  27 + /Low"
  28 + /Low#1f
  29 + /ExceptSpace#20
  30 + /Except!
18 (Very small/large reals) 31 (Very small/large reals)
19 0.00001 32 0.00001
20 1000000000000 33 1000000000000
21 ] 34 ]
  35 + /Nested <<
  36 + /1 <<
  37 + /2 <<
  38 + /3 <<
  39 + /4 <<
  40 + /5 <<
  41 + /6 <<
  42 + /7 <<
  43 + /8 <<
  44 + /9 <<
  45 + /10 <<
  46 + /1 <<
  47 + /2 <<
  48 + /3 <<
  49 + /4 <<
  50 + /5 <<
  51 + /6 <<
  52 + /7 <<
  53 + /8 <<
  54 + /9 <<
  55 + /10 <<
  56 + /1 <<
  57 + /2 <<
  58 + /3 <<
  59 + /4 <<
  60 + /5 <<
  61 + /6 <<
  62 + /7 <<
  63 + /8 <<
  64 + /9 <<
  65 + /10 <<
  66 + /1 <<
  67 + /2 <<
  68 + /3 <<
  69 + /4 <<
  70 + /5 <<
  71 + /6 <<
  72 + /7 <<
  73 + /8 <<
  74 + /9 <<
  75 + /10 <<
  76 + /1 <<
  77 + /2 <<
  78 + /3 <<
  79 + /4 <<
  80 + /5 <<
  81 + /6 <<
  82 + /7 <<
  83 + /8 <<
  84 + /9 <<
  85 + /10 <<
  86 + /1 <<
  87 + /2 <<
  88 + /3 <<
  89 + /4 <<
  90 + /5 <<
  91 + /6 <<
  92 + /7 <<
  93 + /8 <<
  94 + /9 <<
  95 + /10 42
  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 + >>
22 /Pages 2 0 R 156 /Pages 2 0 R
23 /Type /Catalog 157 /Type /Catalog
24 /WeirdKey+#ba#da#cc#e5 42 158 /WeirdKey+#ba#da#cc#e5 42
@@ -86,16 +220,16 @@ xref @@ -86,16 +220,16 @@ xref
86 0 7 220 0 7
87 0000000000 65535 f 221 0000000000 65535 f
88 0000000025 00000 n 222 0000000025 00000 n
89 -0000000389 00000 n  
90 -0000000471 00000 n  
91 -0000000667 00000 n  
92 -0000000766 00000 n  
93 -0000000785 00000 n 223 +0000008642 00000 n
  224 +0000008724 00000 n
  225 +0000008920 00000 n
  226 +0000009019 00000 n
  227 +0000009038 00000 n
94 trailer << 228 trailer <<
95 /Root 1 0 R 229 /Root 1 0 R
96 /Size 7 230 /Size 7
97 - /ID [<42841c13bbf709d79a200fa1691836f8><728c020f464c3cf7e02c12605fa7d88b>] 231 + /ID [<42841c13bbf709d79a200fa1691836f8><31415926535897932384626433832795>]
98 >> 232 >>
99 startxref 233 startxref
100 -891 234 +9144
101 %%EOF 235 %%EOF