specificjson 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +17 -0
- data/bin/specificjson +2863 -0
- metadata +52 -0
data/bin/specificjson
ADDED
@@ -0,0 +1,2863 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright © 2020-2021 Ismo Kärkkäinen
|
4
|
+
# Licensed under Universal Permissive License. See LICENSE.txt.
|
5
|
+
|
6
|
+
require 'optparse'
|
7
|
+
require 'yaml'
|
8
|
+
require 'json'
|
9
|
+
require 'base64'
|
10
|
+
|
11
|
+
$CLEAN = false
|
12
|
+
$DOC = false
|
13
|
+
$RECIPE = nil
|
14
|
+
$LIST = false
|
15
|
+
$WARN = false
|
16
|
+
$EXPORT = false
|
17
|
+
$BUILD = nil
|
18
|
+
$IN = nil
|
19
|
+
|
20
|
+
parser = OptionParser.new do |opts|
|
21
|
+
opts.summary_indent = ' '
|
22
|
+
opts.summary_width = 24
|
23
|
+
opts.banner = 'Usage: build [options]'
|
24
|
+
opts.separator ''
|
25
|
+
opts.separator 'Options (handled in presented order):'
|
26
|
+
opts.on('--clean', 'Ignore embedded information.') { $CLEAN = true }
|
27
|
+
opts.on('--document', 'Print default values and information.') { $DOC = true }
|
28
|
+
opts.on('--import FILELIST', 'Piece YAML file list as YAML array.') { |f| $RECIPE = f }
|
29
|
+
opts.on('--list', 'List the names that are available.') { $LIST = true }
|
30
|
+
opts.on('--warn', 'Warn about missing requirements instead of an error.') { $WARN = true }
|
31
|
+
opts.on('--export', 'Export data to current directory as separate files.') { $EXPORT = true }
|
32
|
+
opts.on('--build OUTPUT', 'Re-build to named script.') { |f| $BUILD = f }
|
33
|
+
opts.on('-i', '--input FILENAME', 'Specifications to use.') { |f| $IN = f }
|
34
|
+
opts.on('-h', '--help', 'Print this help and exit.') do
|
35
|
+
$stdout.puts opts
|
36
|
+
exit 0
|
37
|
+
end
|
38
|
+
end
|
39
|
+
parser.parse!
|
40
|
+
|
41
|
+
#PIECESASSIGNMENTSTART#
|
42
|
+
|
43
|
+
$PIECES = YAML.load(%(---
|
44
|
+
Exception:
|
45
|
+
description: Exception class.
|
46
|
+
declaration: |
|
47
|
+
class Exception;
|
48
|
+
class ContextException;
|
49
|
+
external: false
|
50
|
+
header: Exception.hpp
|
51
|
+
source: Exception.cpp
|
52
|
+
license: "../LICENSE.txt"
|
53
|
+
includes:
|
54
|
+
- "#include <exception>"
|
55
|
+
source_includes:
|
56
|
+
- "#include <cstring>"
|
57
|
+
header_stored: c0
|
58
|
+
source_stored: c1
|
59
|
+
license_stored: c2
|
60
|
+
requires: &2 []
|
61
|
+
writer: false
|
62
|
+
scalar: true
|
63
|
+
parsername:
|
64
|
+
pooled:
|
65
|
+
poolindexes:
|
66
|
+
poolparsers:
|
67
|
+
poolparsertypes:
|
68
|
+
ParseArrayContainer:
|
69
|
+
external: false
|
70
|
+
description: Parses an array into a container.
|
71
|
+
header: ParseArrayContainer.hpp
|
72
|
+
source: ParseArrayContainer.cpp
|
73
|
+
license: "../LICENSE.txt"
|
74
|
+
requires:
|
75
|
+
- ValueParser
|
76
|
+
- Exception
|
77
|
+
includes:
|
78
|
+
- "#include <utility>"
|
79
|
+
header_stored: c3
|
80
|
+
source_stored: c4
|
81
|
+
license_stored: c2
|
82
|
+
source_includes: &1 []
|
83
|
+
writer: false
|
84
|
+
scalar: true
|
85
|
+
declaration:
|
86
|
+
parsername:
|
87
|
+
pooled:
|
88
|
+
poolindexes:
|
89
|
+
poolparsers:
|
90
|
+
poolparsertypes:
|
91
|
+
ParseObject:
|
92
|
+
external: false
|
93
|
+
description: Parses an object into an instance.
|
94
|
+
header: ParseObject.hpp
|
95
|
+
source: ParseObject.cpp
|
96
|
+
license: "../LICENSE.txt"
|
97
|
+
requires:
|
98
|
+
- ValueParser
|
99
|
+
- Exception
|
100
|
+
includes:
|
101
|
+
- "#include <tuple>"
|
102
|
+
- "#include <utility>"
|
103
|
+
- "#include <vector>"
|
104
|
+
header_stored: c5
|
105
|
+
source_stored: c6
|
106
|
+
license_stored: c2
|
107
|
+
source_includes: *1
|
108
|
+
writer: false
|
109
|
+
scalar: true
|
110
|
+
declaration:
|
111
|
+
parsername:
|
112
|
+
pooled:
|
113
|
+
poolindexes:
|
114
|
+
poolparsers:
|
115
|
+
poolparsertypes:
|
116
|
+
ParserPool:
|
117
|
+
description: 'Generated class to provide a shared buffer for all scalar value parsers.
|
118
|
+
|
119
|
+
'
|
120
|
+
external: false
|
121
|
+
declaration: class ParserPool;
|
122
|
+
header: ParserPool.hpp
|
123
|
+
source: ParserPool.cpp
|
124
|
+
poolindexes: PoolIndexes
|
125
|
+
poolparsers: PoolParsers
|
126
|
+
poolparsertypes: PoolParserTypes
|
127
|
+
license: "../LICENSE.txt"
|
128
|
+
header_stored: c7
|
129
|
+
source_stored: c8
|
130
|
+
license_stored: c2
|
131
|
+
includes: &3 []
|
132
|
+
source_includes: *1
|
133
|
+
requires: *2
|
134
|
+
writer: false
|
135
|
+
scalar: true
|
136
|
+
parsername:
|
137
|
+
pooled:
|
138
|
+
ValueParser:
|
139
|
+
description: Base class for all parsers.
|
140
|
+
external: false
|
141
|
+
header: ValueParser.hpp
|
142
|
+
source: ValueParser.cpp
|
143
|
+
license: "../LICENSE.txt"
|
144
|
+
requires:
|
145
|
+
- ParserPool
|
146
|
+
header_stored: c9
|
147
|
+
source_stored: c10
|
148
|
+
license_stored: c2
|
149
|
+
includes: *3
|
150
|
+
source_includes: *1
|
151
|
+
writer: false
|
152
|
+
scalar: true
|
153
|
+
declaration:
|
154
|
+
parsername:
|
155
|
+
pooled:
|
156
|
+
poolindexes:
|
157
|
+
poolparsers:
|
158
|
+
poolparsertypes:
|
159
|
+
ParseInteger:
|
160
|
+
external: false
|
161
|
+
declaration: |
|
162
|
+
template<typename T, intmax_t Minimum, uintmax_t Maximum>
|
163
|
+
const char* parse_integer(T& Out, const char* Begin, const char* End, std::vector<char>& Buffer, bool Finished) noexcept(false);
|
164
|
+
header: ParseInteger.hpp
|
165
|
+
source: ParseInteger.cpp
|
166
|
+
license: "../LICENSE.txt"
|
167
|
+
requires:
|
168
|
+
- Exception
|
169
|
+
includes:
|
170
|
+
- "#include <vector>"
|
171
|
+
- "#include <cstdlib>"
|
172
|
+
- "#include <cinttypes>"
|
173
|
+
- "#include <sys/errno.h>"
|
174
|
+
header_stored: c11
|
175
|
+
source_stored: c12
|
176
|
+
license_stored: c2
|
177
|
+
source_includes: *1
|
178
|
+
writer: false
|
179
|
+
scalar: true
|
180
|
+
parsername:
|
181
|
+
pooled:
|
182
|
+
poolindexes:
|
183
|
+
poolparsers:
|
184
|
+
poolparsertypes:
|
185
|
+
ContainerStdVector:
|
186
|
+
description: Parses an array of containers into std::vector.
|
187
|
+
parsername: ParseContainerStdVector
|
188
|
+
header: read_ContainerStdVector.hpp
|
189
|
+
license: "../LICENSE.txt"
|
190
|
+
requires:
|
191
|
+
- ParseArrayContainer
|
192
|
+
includes:
|
193
|
+
- "#include <vector>"
|
194
|
+
header_stored: c13
|
195
|
+
source:
|
196
|
+
source_stored:
|
197
|
+
license_stored: c2
|
198
|
+
source_includes: *1
|
199
|
+
writer: false
|
200
|
+
scalar: true
|
201
|
+
external: true
|
202
|
+
declaration:
|
203
|
+
pooled:
|
204
|
+
poolindexes:
|
205
|
+
poolparsers:
|
206
|
+
poolparsertypes:
|
207
|
+
ContainerStdVectorEqSize:
|
208
|
+
description: |
|
209
|
+
Parses an array of containers into std::vector and checks that their sizes
|
210
|
+
are the same.
|
211
|
+
parsername: ParseContainerStdVectorEqSize
|
212
|
+
header: read_ContainerStdVectorEqSize.hpp
|
213
|
+
license: "../LICENSE.txt"
|
214
|
+
requires:
|
215
|
+
- ParseArrayContainer
|
216
|
+
includes:
|
217
|
+
- "#include <vector>"
|
218
|
+
header_stored: c14
|
219
|
+
source:
|
220
|
+
source_stored:
|
221
|
+
license_stored: c2
|
222
|
+
source_includes: *1
|
223
|
+
writer: false
|
224
|
+
scalar: true
|
225
|
+
external: true
|
226
|
+
declaration:
|
227
|
+
pooled:
|
228
|
+
poolindexes:
|
229
|
+
poolparsers:
|
230
|
+
poolparsertypes:
|
231
|
+
Bool:
|
232
|
+
description: Parses Boolean value into bool.
|
233
|
+
parsername: ParseBool
|
234
|
+
declaration: class ParseBool;
|
235
|
+
pooled: PoolIndex
|
236
|
+
header: read_Bool.hpp
|
237
|
+
source: read_Bool.cpp
|
238
|
+
license: "../LICENSE.txt"
|
239
|
+
requires:
|
240
|
+
- ValueParser
|
241
|
+
- Exception
|
242
|
+
includes:
|
243
|
+
- "#include <cstdlib>"
|
244
|
+
header_stored: c15
|
245
|
+
source_stored: c16
|
246
|
+
license_stored: c2
|
247
|
+
source_includes: *1
|
248
|
+
writer: false
|
249
|
+
scalar: true
|
250
|
+
external: true
|
251
|
+
poolindexes:
|
252
|
+
poolparsers:
|
253
|
+
poolparsertypes:
|
254
|
+
Double:
|
255
|
+
description: Parses number into double using strtod. Expects LC_NUMERIC C.
|
256
|
+
parsername: ParseDouble
|
257
|
+
declaration: class ParseDouble;
|
258
|
+
pooled: PoolIndex
|
259
|
+
header: read_Double.hpp
|
260
|
+
source: read_Double.cpp
|
261
|
+
license: "../LICENSE.txt"
|
262
|
+
requires:
|
263
|
+
- ValueParser
|
264
|
+
- Exception
|
265
|
+
includes:
|
266
|
+
- |
|
267
|
+
#if !defined(__GNUG__)
|
268
|
+
#include <cmath>
|
269
|
+
#else
|
270
|
+
#include <math.h>
|
271
|
+
#endif
|
272
|
+
header_stored: c17
|
273
|
+
source_stored: c18
|
274
|
+
license_stored: c2
|
275
|
+
source_includes: *1
|
276
|
+
writer: false
|
277
|
+
scalar: true
|
278
|
+
external: true
|
279
|
+
poolindexes:
|
280
|
+
poolparsers:
|
281
|
+
poolparsertypes:
|
282
|
+
Float:
|
283
|
+
description: Parses number into float using strtof. Expects LC_NUMERIC C.
|
284
|
+
parsername: ParseFloat
|
285
|
+
declaration: class ParseFloat;
|
286
|
+
pooled: PoolIndex
|
287
|
+
header: read_Float.hpp
|
288
|
+
source: read_Float.cpp
|
289
|
+
license: "../LICENSE.txt"
|
290
|
+
requires:
|
291
|
+
- ValueParser
|
292
|
+
- Exception
|
293
|
+
includes:
|
294
|
+
- |
|
295
|
+
#if !defined(__GNUG__)
|
296
|
+
#include <cmath>
|
297
|
+
#else
|
298
|
+
#include <math.h>
|
299
|
+
#endif
|
300
|
+
header_stored: c19
|
301
|
+
source_stored: c20
|
302
|
+
license_stored: c2
|
303
|
+
source_includes: *1
|
304
|
+
writer: false
|
305
|
+
scalar: true
|
306
|
+
external: true
|
307
|
+
poolindexes:
|
308
|
+
poolparsers:
|
309
|
+
poolparsertypes:
|
310
|
+
Int8:
|
311
|
+
description: Parses number into 8-bit integer.
|
312
|
+
parsername: ParseInt8
|
313
|
+
declaration: class ParseInt8;
|
314
|
+
pooled: PoolIndex
|
315
|
+
header: read_Int8.hpp
|
316
|
+
source: read_Int8.cpp
|
317
|
+
license: "../LICENSE.txt"
|
318
|
+
requires:
|
319
|
+
- ValueParser
|
320
|
+
- ParseInteger
|
321
|
+
source_includes:
|
322
|
+
- "#include <limits>"
|
323
|
+
header_stored: c21
|
324
|
+
source_stored: c22
|
325
|
+
license_stored: c2
|
326
|
+
includes: *3
|
327
|
+
writer: false
|
328
|
+
scalar: true
|
329
|
+
external: true
|
330
|
+
poolindexes:
|
331
|
+
poolparsers:
|
332
|
+
poolparsertypes:
|
333
|
+
Int16:
|
334
|
+
description: Parses number into 16-bit integer.
|
335
|
+
parsername: ParseInt16
|
336
|
+
declaration: class ParseInt16;
|
337
|
+
pooled: PoolIndex
|
338
|
+
header: read_Int16.hpp
|
339
|
+
source: read_Int16.cpp
|
340
|
+
license: "../LICENSE.txt"
|
341
|
+
requires:
|
342
|
+
- ValueParser
|
343
|
+
- ParseInteger
|
344
|
+
source_includes:
|
345
|
+
- "#include <limits>"
|
346
|
+
header_stored: c23
|
347
|
+
source_stored: c24
|
348
|
+
license_stored: c2
|
349
|
+
includes: *3
|
350
|
+
writer: false
|
351
|
+
scalar: true
|
352
|
+
external: true
|
353
|
+
poolindexes:
|
354
|
+
poolparsers:
|
355
|
+
poolparsertypes:
|
356
|
+
Int32:
|
357
|
+
description: Parses number into 32-bit integer.
|
358
|
+
parsername: ParseInt32
|
359
|
+
declaration: class ParseInt32;
|
360
|
+
pooled: PoolIndex
|
361
|
+
header: read_Int32.hpp
|
362
|
+
source: read_Int32.cpp
|
363
|
+
license: "../LICENSE.txt"
|
364
|
+
requires:
|
365
|
+
- ValueParser
|
366
|
+
- ParseInteger
|
367
|
+
source_includes:
|
368
|
+
- "#include <limits>"
|
369
|
+
header_stored: c25
|
370
|
+
source_stored: c26
|
371
|
+
license_stored: c2
|
372
|
+
includes: *3
|
373
|
+
writer: false
|
374
|
+
scalar: true
|
375
|
+
external: true
|
376
|
+
poolindexes:
|
377
|
+
poolparsers:
|
378
|
+
poolparsertypes:
|
379
|
+
Int64:
|
380
|
+
description: Parses number into 64-bit integer.
|
381
|
+
parsername: ParseInt64
|
382
|
+
declaration: class ParseInt64;
|
383
|
+
pooled: PoolIndex
|
384
|
+
header: read_Int64.hpp
|
385
|
+
source: read_Int64.cpp
|
386
|
+
license: "../LICENSE.txt"
|
387
|
+
requires:
|
388
|
+
- ValueParser
|
389
|
+
- ParseInteger
|
390
|
+
source_includes:
|
391
|
+
- "#include <limits>"
|
392
|
+
header_stored: c27
|
393
|
+
source_stored: c28
|
394
|
+
license_stored: c2
|
395
|
+
includes: *3
|
396
|
+
writer: false
|
397
|
+
scalar: true
|
398
|
+
external: true
|
399
|
+
poolindexes:
|
400
|
+
poolparsers:
|
401
|
+
poolparsertypes:
|
402
|
+
UInt8:
|
403
|
+
description: Parses number into 8-bit unsigned integer.
|
404
|
+
parsername: ParseUInt8
|
405
|
+
declaration: class ParseUInt8;
|
406
|
+
pooled: PoolIndex
|
407
|
+
header: read_UInt8.hpp
|
408
|
+
source: read_UInt8.cpp
|
409
|
+
license: "../LICENSE.txt"
|
410
|
+
requires:
|
411
|
+
- ValueParser
|
412
|
+
- ParseInteger
|
413
|
+
source_includes:
|
414
|
+
- "#include <limits>"
|
415
|
+
header_stored: c29
|
416
|
+
source_stored: c30
|
417
|
+
license_stored: c2
|
418
|
+
includes: *3
|
419
|
+
writer: false
|
420
|
+
scalar: true
|
421
|
+
external: true
|
422
|
+
poolindexes:
|
423
|
+
poolparsers:
|
424
|
+
poolparsertypes:
|
425
|
+
UInt16:
|
426
|
+
description: Parses number into 16-bit unsigned integer.
|
427
|
+
parsername: ParseUInt16
|
428
|
+
declaration: class ParseUInt16;
|
429
|
+
pooled: PoolIndex
|
430
|
+
header: read_UInt16.hpp
|
431
|
+
source: read_UInt16.cpp
|
432
|
+
license: "../LICENSE.txt"
|
433
|
+
requires:
|
434
|
+
- ValueParser
|
435
|
+
- ParseInteger
|
436
|
+
source_includes:
|
437
|
+
- "#include <limits>"
|
438
|
+
header_stored: c31
|
439
|
+
source_stored: c32
|
440
|
+
license_stored: c2
|
441
|
+
includes: *3
|
442
|
+
writer: false
|
443
|
+
scalar: true
|
444
|
+
external: true
|
445
|
+
poolindexes:
|
446
|
+
poolparsers:
|
447
|
+
poolparsertypes:
|
448
|
+
UInt32:
|
449
|
+
description: Parses number into 32-bit unsigned integer.
|
450
|
+
parsername: ParseUInt32
|
451
|
+
declaration: class ParseUInt32;
|
452
|
+
pooled: PoolIndex
|
453
|
+
header: read_UInt32.hpp
|
454
|
+
source: read_UInt32.cpp
|
455
|
+
license: "../LICENSE.txt"
|
456
|
+
requires:
|
457
|
+
- ValueParser
|
458
|
+
- ParseInteger
|
459
|
+
source_includes:
|
460
|
+
- "#include <limits>"
|
461
|
+
header_stored: c33
|
462
|
+
source_stored: c34
|
463
|
+
license_stored: c2
|
464
|
+
includes: *3
|
465
|
+
writer: false
|
466
|
+
scalar: true
|
467
|
+
external: true
|
468
|
+
poolindexes:
|
469
|
+
poolparsers:
|
470
|
+
poolparsertypes:
|
471
|
+
UInt64:
|
472
|
+
description: Parses number into 64-bit unsigned integer.
|
473
|
+
parsername: ParseUInt64
|
474
|
+
declaration: class ParseUInt64;
|
475
|
+
pooled: PoolIndex
|
476
|
+
header: read_UInt64.hpp
|
477
|
+
source: read_UInt64.cpp
|
478
|
+
license: "../LICENSE.txt"
|
479
|
+
requires:
|
480
|
+
- ValueParser
|
481
|
+
- ParseInteger
|
482
|
+
source_includes:
|
483
|
+
- "#include <limits>"
|
484
|
+
header_stored: c35
|
485
|
+
source_stored: c36
|
486
|
+
license_stored: c2
|
487
|
+
includes: *3
|
488
|
+
writer: false
|
489
|
+
scalar: true
|
490
|
+
external: true
|
491
|
+
poolindexes:
|
492
|
+
poolparsers:
|
493
|
+
poolparsertypes:
|
494
|
+
StdVector:
|
495
|
+
description: Parses an array of scalars into std::vector.
|
496
|
+
parsername: ParseStdVector
|
497
|
+
header: read_StdVector.hpp
|
498
|
+
license: "../LICENSE.txt"
|
499
|
+
requires:
|
500
|
+
- ParseArrayContainer
|
501
|
+
includes:
|
502
|
+
- "#include <vector>"
|
503
|
+
header_stored: c37
|
504
|
+
source:
|
505
|
+
source_stored:
|
506
|
+
license_stored: c2
|
507
|
+
source_includes: *1
|
508
|
+
writer: false
|
509
|
+
scalar: true
|
510
|
+
external: true
|
511
|
+
declaration:
|
512
|
+
pooled:
|
513
|
+
poolindexes:
|
514
|
+
poolparsers:
|
515
|
+
poolparsertypes:
|
516
|
+
String:
|
517
|
+
description: Parses a string into std::string.
|
518
|
+
parsername: ParseString
|
519
|
+
declaration: class ParseString;
|
520
|
+
pooled: PoolIndex
|
521
|
+
header: read_String.hpp
|
522
|
+
source: read_String.cpp
|
523
|
+
license: "../LICENSE.txt"
|
524
|
+
requires:
|
525
|
+
- ValueParser
|
526
|
+
- Exception
|
527
|
+
includes:
|
528
|
+
- "#include <string>"
|
529
|
+
header_stored: c38
|
530
|
+
source_stored: c39
|
531
|
+
license_stored: c2
|
532
|
+
source_includes: *1
|
533
|
+
writer: false
|
534
|
+
scalar: true
|
535
|
+
external: true
|
536
|
+
poolindexes:
|
537
|
+
poolparsers:
|
538
|
+
poolparsertypes:
|
539
|
+
writeBool:
|
540
|
+
writer: true
|
541
|
+
declaration: |
|
542
|
+
template<typename Sink>
|
543
|
+
void Write(Sink& S, bool Value, std::vector<char>& Buffer);
|
544
|
+
header: write_Bool.hpp
|
545
|
+
license: "../LICENSE.txt"
|
546
|
+
includes:
|
547
|
+
- "#include <vector>"
|
548
|
+
header_stored: c40
|
549
|
+
source:
|
550
|
+
source_stored:
|
551
|
+
license_stored: c2
|
552
|
+
source_includes: *1
|
553
|
+
requires: *2
|
554
|
+
scalar: true
|
555
|
+
external: false
|
556
|
+
parsername:
|
557
|
+
pooled:
|
558
|
+
poolindexes:
|
559
|
+
poolparsers:
|
560
|
+
poolparsertypes:
|
561
|
+
writeDouble:
|
562
|
+
writer: true
|
563
|
+
declaration: |
|
564
|
+
template<typename Sink>
|
565
|
+
void Write(Sink& S, double Value, std::vector<char>& Buffer);
|
566
|
+
header: write_Double.hpp
|
567
|
+
source: write_Double.cpp
|
568
|
+
license: "../LICENSE.txt"
|
569
|
+
requires:
|
570
|
+
- Exception
|
571
|
+
- writeScalarType
|
572
|
+
includes:
|
573
|
+
- "#include <vector>"
|
574
|
+
header_stored: c41
|
575
|
+
source_stored: c42
|
576
|
+
license_stored: c2
|
577
|
+
source_includes: *1
|
578
|
+
scalar: true
|
579
|
+
external: false
|
580
|
+
parsername:
|
581
|
+
pooled:
|
582
|
+
poolindexes:
|
583
|
+
poolparsers:
|
584
|
+
poolparsertypes:
|
585
|
+
writeFloat:
|
586
|
+
writer: true
|
587
|
+
declaration: |
|
588
|
+
template<typename Sink>
|
589
|
+
void Write(Sink& S, float Value, std::vector<char>& Buffer);
|
590
|
+
header: write_Float.hpp
|
591
|
+
source: write_Float.cpp
|
592
|
+
license: "../LICENSE.txt"
|
593
|
+
requires:
|
594
|
+
- Exception
|
595
|
+
- writeScalarType
|
596
|
+
includes:
|
597
|
+
- "#include <vector>"
|
598
|
+
header_stored: c43
|
599
|
+
source_stored: c44
|
600
|
+
license_stored: c2
|
601
|
+
source_includes: *1
|
602
|
+
scalar: true
|
603
|
+
external: false
|
604
|
+
parsername:
|
605
|
+
pooled:
|
606
|
+
poolindexes:
|
607
|
+
poolparsers:
|
608
|
+
poolparsertypes:
|
609
|
+
writeScalarType:
|
610
|
+
writer: true
|
611
|
+
declaration: |
|
612
|
+
template<typename Sink, typename T, const auto& Format>
|
613
|
+
void WriteScalarType(Sink& S, T Value, std::vector<char>& Buffer);
|
614
|
+
header: write_ScalarType.hpp
|
615
|
+
source: write_ScalarType.cpp
|
616
|
+
license: "../LICENSE.txt"
|
617
|
+
includes:
|
618
|
+
- "#include <cstdio>"
|
619
|
+
- "#include <vector>"
|
620
|
+
source_includes:
|
621
|
+
- "#include <limits>"
|
622
|
+
header_stored: c45
|
623
|
+
source_stored: c46
|
624
|
+
license_stored: c2
|
625
|
+
requires: *2
|
626
|
+
scalar: true
|
627
|
+
external: false
|
628
|
+
parsername:
|
629
|
+
pooled:
|
630
|
+
poolindexes:
|
631
|
+
poolparsers:
|
632
|
+
poolparsertypes:
|
633
|
+
writeForwardIterator:
|
634
|
+
writer: true
|
635
|
+
scalar: false
|
636
|
+
declaration: |
|
637
|
+
template<typename Sink, typename ForwardIterator>
|
638
|
+
void Write(Sink& S, ForwardIterator& Begin, ForwardIterator& End, std::vector<char>& Buffer);
|
639
|
+
header: write_ForwardIterator.hpp
|
640
|
+
requires:
|
641
|
+
- writePointer
|
642
|
+
license: "../LICENSE.txt"
|
643
|
+
includes:
|
644
|
+
- "#include <vector>"
|
645
|
+
header_stored: c47
|
646
|
+
source:
|
647
|
+
source_stored:
|
648
|
+
license_stored: c2
|
649
|
+
source_includes: *1
|
650
|
+
external: false
|
651
|
+
parsername:
|
652
|
+
pooled:
|
653
|
+
poolindexes:
|
654
|
+
poolparsers:
|
655
|
+
poolparsertypes:
|
656
|
+
writeInt8:
|
657
|
+
writer: true
|
658
|
+
declaration: |
|
659
|
+
template<typename Sink>
|
660
|
+
void Write(Sink& S, std::int8_t Value, std::vector<char>& Buffer);
|
661
|
+
header: write_Int8.hpp
|
662
|
+
source: write_Int8.cpp
|
663
|
+
license: "../LICENSE.txt"
|
664
|
+
requires:
|
665
|
+
- writeScalarType
|
666
|
+
includes:
|
667
|
+
- "#include <cstdint>"
|
668
|
+
- "#include <vector>"
|
669
|
+
source_includes:
|
670
|
+
- "#include <cinttypes>"
|
671
|
+
header_stored: c48
|
672
|
+
source_stored: c49
|
673
|
+
license_stored: c2
|
674
|
+
scalar: true
|
675
|
+
external: false
|
676
|
+
parsername:
|
677
|
+
pooled:
|
678
|
+
poolindexes:
|
679
|
+
poolparsers:
|
680
|
+
poolparsertypes:
|
681
|
+
writeInt16:
|
682
|
+
writer: true
|
683
|
+
declaration: |
|
684
|
+
template<typename Sink>
|
685
|
+
void Write(Sink& S, std::int16_t Value, std::vector<char>& Buffer);
|
686
|
+
header: write_Int16.hpp
|
687
|
+
source: write_Int16.cpp
|
688
|
+
license: "../LICENSE.txt"
|
689
|
+
requires:
|
690
|
+
- writeScalarType
|
691
|
+
includes:
|
692
|
+
- "#include <cstdint>"
|
693
|
+
- "#include <vector>"
|
694
|
+
source_includes:
|
695
|
+
- "#include <cinttypes>"
|
696
|
+
header_stored: c50
|
697
|
+
source_stored: c51
|
698
|
+
license_stored: c2
|
699
|
+
scalar: true
|
700
|
+
external: false
|
701
|
+
parsername:
|
702
|
+
pooled:
|
703
|
+
poolindexes:
|
704
|
+
poolparsers:
|
705
|
+
poolparsertypes:
|
706
|
+
writeInt32:
|
707
|
+
writer: true
|
708
|
+
declaration: |
|
709
|
+
template<typename Sink>
|
710
|
+
void Write(Sink& S, std::int32_t Value, std::vector<char>& Buffer);
|
711
|
+
header: write_Int32.hpp
|
712
|
+
source: write_Int32.cpp
|
713
|
+
license: "../LICENSE.txt"
|
714
|
+
requires:
|
715
|
+
- writeScalarType
|
716
|
+
includes:
|
717
|
+
- "#include <cstdint>"
|
718
|
+
- "#include <vector>"
|
719
|
+
source_includes:
|
720
|
+
- "#include <cinttypes>"
|
721
|
+
header_stored: c52
|
722
|
+
source_stored: c53
|
723
|
+
license_stored: c2
|
724
|
+
scalar: true
|
725
|
+
external: false
|
726
|
+
parsername:
|
727
|
+
pooled:
|
728
|
+
poolindexes:
|
729
|
+
poolparsers:
|
730
|
+
poolparsertypes:
|
731
|
+
writeInt64:
|
732
|
+
writer: true
|
733
|
+
declaration: |
|
734
|
+
template<typename Sink>
|
735
|
+
void Write(Sink& S, std::int64_t Value, std::vector<char>& Buffer);
|
736
|
+
header: write_Int64.hpp
|
737
|
+
source: write_Int64.cpp
|
738
|
+
license: "../LICENSE.txt"
|
739
|
+
requires:
|
740
|
+
- writeScalarType
|
741
|
+
includes:
|
742
|
+
- "#include <cstdint>"
|
743
|
+
- "#include <vector>"
|
744
|
+
source_includes:
|
745
|
+
- "#include <cinttypes>"
|
746
|
+
header_stored: c54
|
747
|
+
source_stored: c55
|
748
|
+
license_stored: c2
|
749
|
+
scalar: true
|
750
|
+
external: false
|
751
|
+
parsername:
|
752
|
+
pooled:
|
753
|
+
poolindexes:
|
754
|
+
poolparsers:
|
755
|
+
poolparsertypes:
|
756
|
+
writeUInt8:
|
757
|
+
writer: true
|
758
|
+
declaration: |
|
759
|
+
template<typename Sink>
|
760
|
+
void Write(Sink& S, std::uint8_t Value, std::vector<char>& Buffer);
|
761
|
+
header: write_UInt8.hpp
|
762
|
+
source: write_UInt8.cpp
|
763
|
+
license: "../LICENSE.txt"
|
764
|
+
requires:
|
765
|
+
- writeScalarType
|
766
|
+
includes:
|
767
|
+
- "#include <cstdint>"
|
768
|
+
- "#include <vector>"
|
769
|
+
source_includes:
|
770
|
+
- "#include <cinttypes>"
|
771
|
+
header_stored: c56
|
772
|
+
source_stored: c57
|
773
|
+
license_stored: c2
|
774
|
+
scalar: true
|
775
|
+
external: false
|
776
|
+
parsername:
|
777
|
+
pooled:
|
778
|
+
poolindexes:
|
779
|
+
poolparsers:
|
780
|
+
poolparsertypes:
|
781
|
+
writeUInt16:
|
782
|
+
writer: true
|
783
|
+
declaration: |
|
784
|
+
template<typename Sink>
|
785
|
+
void Write(Sink& S, std::uint16_t Value, std::vector<char>& Buffer);
|
786
|
+
header: write_UInt16.hpp
|
787
|
+
source: write_UInt16.cpp
|
788
|
+
license: "../LICENSE.txt"
|
789
|
+
requires:
|
790
|
+
- writeScalarType
|
791
|
+
includes:
|
792
|
+
- "#include <cstdint>"
|
793
|
+
- "#include <vector>"
|
794
|
+
source_includes:
|
795
|
+
- "#include <cinttypes>"
|
796
|
+
header_stored: c58
|
797
|
+
source_stored: c59
|
798
|
+
license_stored: c2
|
799
|
+
scalar: true
|
800
|
+
external: false
|
801
|
+
parsername:
|
802
|
+
pooled:
|
803
|
+
poolindexes:
|
804
|
+
poolparsers:
|
805
|
+
poolparsertypes:
|
806
|
+
writeUInt32:
|
807
|
+
writer: true
|
808
|
+
declaration: |
|
809
|
+
template<typename Sink>
|
810
|
+
void Write(Sink& S, std::uint32_t Value, std::vector<char>& Buffer);
|
811
|
+
header: write_UInt32.hpp
|
812
|
+
source: write_UInt32.cpp
|
813
|
+
license: "../LICENSE.txt"
|
814
|
+
requires:
|
815
|
+
- writeScalarType
|
816
|
+
includes:
|
817
|
+
- "#include <cstdint>"
|
818
|
+
- "#include <vector>"
|
819
|
+
source_includes:
|
820
|
+
- "#include <cinttypes>"
|
821
|
+
header_stored: c60
|
822
|
+
source_stored: c61
|
823
|
+
license_stored: c2
|
824
|
+
scalar: true
|
825
|
+
external: false
|
826
|
+
parsername:
|
827
|
+
pooled:
|
828
|
+
poolindexes:
|
829
|
+
poolparsers:
|
830
|
+
poolparsertypes:
|
831
|
+
writeUInt64:
|
832
|
+
writer: true
|
833
|
+
declaration: |
|
834
|
+
template<typename Sink>
|
835
|
+
void Write(Sink& S, std::uint64_t Value, std::vector<char>& Buffer);
|
836
|
+
header: write_UInt64.hpp
|
837
|
+
source: write_UInt64.cpp
|
838
|
+
license: "../LICENSE.txt"
|
839
|
+
requires:
|
840
|
+
- writeScalarType
|
841
|
+
includes:
|
842
|
+
- "#include <cstdint>"
|
843
|
+
- "#include <vector>"
|
844
|
+
source_includes:
|
845
|
+
- "#include <cinttypes>"
|
846
|
+
header_stored: c62
|
847
|
+
source_stored: c63
|
848
|
+
license_stored: c2
|
849
|
+
scalar: true
|
850
|
+
external: false
|
851
|
+
parsername:
|
852
|
+
pooled:
|
853
|
+
poolindexes:
|
854
|
+
poolparsers:
|
855
|
+
poolparsertypes:
|
856
|
+
writePointer:
|
857
|
+
writer: true
|
858
|
+
scalar: false
|
859
|
+
declaration: |
|
860
|
+
template<typename Sink, typename T>
|
861
|
+
void Write(Sink& S, const T* Value, std::vector<char>& Buffer);
|
862
|
+
header: write_Pointer.hpp
|
863
|
+
license: "../LICENSE.txt"
|
864
|
+
includes:
|
865
|
+
- "#include <vector>"
|
866
|
+
header_stored: c64
|
867
|
+
source:
|
868
|
+
source_stored:
|
869
|
+
license_stored: c2
|
870
|
+
source_includes: *1
|
871
|
+
requires: *2
|
872
|
+
external: false
|
873
|
+
parsername:
|
874
|
+
pooled:
|
875
|
+
poolindexes:
|
876
|
+
poolparsers:
|
877
|
+
poolparsertypes:
|
878
|
+
writeStdVector:
|
879
|
+
writer: true
|
880
|
+
scalar: false
|
881
|
+
declaration: |
|
882
|
+
template<typename Sink, typename T>
|
883
|
+
void Write(Sink& S, const std::vector<T>& Value, std::vector<char>& Buffer);
|
884
|
+
header: write_StdVector.hpp
|
885
|
+
license: "../LICENSE.txt"
|
886
|
+
requires:
|
887
|
+
- writeForwardIterator
|
888
|
+
- writePointer
|
889
|
+
includes:
|
890
|
+
- "#include <vector>"
|
891
|
+
header_stored: c65
|
892
|
+
source:
|
893
|
+
source_stored:
|
894
|
+
license_stored: c2
|
895
|
+
source_includes: *1
|
896
|
+
external: false
|
897
|
+
parsername:
|
898
|
+
pooled:
|
899
|
+
poolindexes:
|
900
|
+
poolparsers:
|
901
|
+
poolparsertypes:
|
902
|
+
writeString:
|
903
|
+
writer: true
|
904
|
+
declaration: |
|
905
|
+
template<typename Sink>
|
906
|
+
void Write(Sink& S, const char* Begin, const char* End, std::vector<char>& Buffer);
|
907
|
+
header: write_String.hpp
|
908
|
+
source: write_String.cpp
|
909
|
+
license: "../LICENSE.txt"
|
910
|
+
requires:
|
911
|
+
- Exception
|
912
|
+
includes:
|
913
|
+
- "#include <string>"
|
914
|
+
- "#include <vector>"
|
915
|
+
- "#include <cstring>"
|
916
|
+
header_stored: c66
|
917
|
+
source_stored: c67
|
918
|
+
license_stored: c2
|
919
|
+
source_includes: *1
|
920
|
+
scalar: true
|
921
|
+
external: false
|
922
|
+
parsername:
|
923
|
+
pooled:
|
924
|
+
poolindexes:
|
925
|
+
poolparsers:
|
926
|
+
poolparsertypes:
|
927
|
+
))
|
928
|
+
$FILECONTENTS = YAML.load(%(---
|
929
|
+
c0: |
|
930
|
+
Y2xhc3MgRXhjZXB0aW9uIDogcHVibGljIHN0ZDo6ZXhjZXB0aW9uIHsKcHJp
|
931
|
+
dmF0ZToKICAgIGNvbnN0IGNoYXIqIHJlYXNvbjsKCnB1YmxpYzoKICAgIEV4
|
932
|
+
Y2VwdGlvbihjb25zdCBjaGFyKiBSZWFzb24pIDogcmVhc29uKFJlYXNvbikg
|
933
|
+
eyB9CiAgICBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKSB7IHJl
|
934
|
+
dHVybiByZWFzb247IH0KfTsKCgpjbGFzcyBDb250ZXh0RXhjZXB0aW9uIDog
|
935
|
+
cHVibGljIEV4Y2VwdGlvbiB7CnByaXZhdGU6CiAgICBjaGFyIGNvbnRleHRb
|
936
|
+
NjRdOwoKcHVibGljOgogICAgQ29udGV4dEV4Y2VwdGlvbihjb25zdCBFeGNl
|
937
|
+
cHRpb24mIEUsCiAgICAgICAgY29uc3QgY2hhciogQmVnaW4sIGNvbnN0IGNo
|
938
|
+
YXIqIEN1cnJlbnQsIGNvbnN0IGNoYXIqIEVuZCk7Cn07Cg==
|
939
|
+
c1: |
|
940
|
+
Q29udGV4dEV4Y2VwdGlvbjo6Q29udGV4dEV4Y2VwdGlvbihjb25zdCBFeGNl
|
941
|
+
cHRpb24mIEUsCiAgICBjb25zdCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciog
|
942
|
+
Q3VycmVudCwgY29uc3QgY2hhciogRW5kKQogICAgOiBFeGNlcHRpb24oY29u
|
943
|
+
dGV4dCksIGNvbnRleHQoIiIpCnsKICAgIHN0ZDo6c3RybmNweShjb250ZXh0
|
944
|
+
LCBFLndoYXQoKSwgNDIpOwogICAgY29udGV4dFs0MV0gPSAnXDAnOwogICAg
|
945
|
+
c2l6ZV90IHNwYWNlID0gKDYzIC0gc3RybGVuKGNvbnRleHQpKSAvIDI7CiAg
|
946
|
+
ICBzaXplX3QgYmVmb3JlID0gKHNwYWNlIDwgQ3VycmVudCAtIEJlZ2luKSA/
|
947
|
+
IHNwYWNlIDogKEN1cnJlbnQgLSBCZWdpbik7CiAgICBzaXplX3QgYWZ0ZXIg
|
948
|
+
PSAoc3BhY2UgPCBFbmQgLSBDdXJyZW50KSA/IHNwYWNlIDogKEVuZCAtIEN1
|
949
|
+
cnJlbnQpOwogICAgc3RkOjpzdHJuY2F0KGNvbnRleHQsIEN1cnJlbnQgLSBi
|
950
|
+
ZWZvcmUsIGJlZm9yZSArIGFmdGVyICsgMSk7Cn0K
|
951
|
+
c2: |
|
952
|
+
Q29weXJpZ2h0IChjKSAyMDIwIElzbW8gS8Okcmtrw6RpbmVuCgpUaGUgVW5p
|
953
|
+
dmVyc2FsIFBlcm1pc3NpdmUgTGljZW5zZSAoVVBMKSwgVmVyc2lvbiAxLjAK
|
954
|
+
ClN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiBzZXQgZm9ydGggYmVsb3csIHBl
|
955
|
+
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gYW55IHBlcnNvbiBvYnRh
|
956
|
+
aW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUsIGFzc29jaWF0ZWQgZG9j
|
957
|
+
dW1lbnRhdGlvbiBhbmQvb3IgZGF0YSAoY29sbGVjdGl2ZWx5IHRoZSAiU29m
|
958
|
+
dHdhcmUiKSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIGFueSBhbmQgYWxs
|
959
|
+
IGNvcHlyaWdodCByaWdodHMgaW4gdGhlIFNvZnR3YXJlLCBhbmQgYW55IGFu
|
960
|
+
ZCBhbGwgcGF0ZW50IHJpZ2h0cyBvd25lZCBvciBmcmVlbHkgbGljZW5zYWJs
|
961
|
+
ZSBieSBlYWNoIGxpY2Vuc29yIGhlcmV1bmRlciBjb3ZlcmluZyBlaXRoZXIg
|
962
|
+
KGkpIHRoZSB1bm1vZGlmaWVkIFNvZnR3YXJlIGFzIGNvbnRyaWJ1dGVkIHRv
|
963
|
+
IG9yIHByb3ZpZGVkIGJ5IHN1Y2ggbGljZW5zb3IsIG9yIChpaSkgdGhlIExh
|
964
|
+
cmdlciBXb3JrcyAoYXMgZGVmaW5lZCBiZWxvdyksIHRvIGRlYWwgaW4gYm90
|
965
|
+
aAoKKGEpIHRoZSBTb2Z0d2FyZSwgYW5kCgooYikgYW55IHBpZWNlIG9mIHNv
|
966
|
+
ZnR3YXJlIGFuZC9vciBoYXJkd2FyZSBsaXN0ZWQgaW4gdGhlIGxyZ3J3cmtz
|
967
|
+
LnR4dCBmaWxlIGlmIG9uZSBpcyBpbmNsdWRlZCB3aXRoIHRoZSBTb2Z0d2Fy
|
968
|
+
ZSAoZWFjaCBhIOKAnExhcmdlciBXb3Jr4oCdIHRvIHdoaWNoIHRoZSBTb2Z0
|
969
|
+
d2FyZSBpcyBjb250cmlidXRlZCBieSBzdWNoIGxpY2Vuc29ycyksCgp3aXRo
|
970
|
+
b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9u
|
971
|
+
IHRoZSByaWdodHMgdG8gY29weSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mg
|
972
|
+
b2YsIGRpc3BsYXksIHBlcmZvcm0sIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0
|
973
|
+
d2FyZSBhbmQgbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1w
|
974
|
+
b3J0LCBleHBvcnQsIGhhdmUgbWFkZSwgYW5kIGhhdmUgc29sZCB0aGUgU29m
|
975
|
+
dHdhcmUgYW5kIHRoZSBMYXJnZXIgV29yayhzKSwgYW5kIHRvIHN1YmxpY2Vu
|
976
|
+
c2UgdGhlIGZvcmVnb2luZyByaWdodHMgb24gZWl0aGVyIHRoZXNlIG9yIG90
|
977
|
+
aGVyIHRlcm1zLgoKVGhpcyBsaWNlbnNlIGlzIHN1YmplY3QgdG8gdGhlIGZv
|
978
|
+
bGxvd2luZyBjb25kaXRpb246CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
|
979
|
+
ZSBhbmQgZWl0aGVyIHRoaXMgY29tcGxldGUgcGVybWlzc2lvbiBub3RpY2Ug
|
980
|
+
b3IgYXQgYSBtaW5pbXVtIGEgcmVmZXJlbmNlIHRvIHRoZSBVUEwgbXVzdCBi
|
981
|
+
ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp
|
982
|
+
b25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF
|
983
|
+
RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS
|
984
|
+
RVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g
|
985
|
+
VEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZP
|
986
|
+
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJ
|
987
|
+
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M
|
988
|
+
REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhF
|
989
|
+
UiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU
|
990
|
+
LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1Ig
|
991
|
+
SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S
|
992
|
+
IE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4K
|
993
|
+
c3: |
|
994
|
+
ZXh0ZXJuIGNvbnN0IEV4Y2VwdGlvbiBOb3RGaW5pc2hlZDsKZXh0ZXJuIGNv
|
995
|
+
bnN0IEV4Y2VwdGlvbiBJbnZhbGlkQXJyYXlTdGFydDsKZXh0ZXJuIGNvbnN0
|
996
|
+
IEV4Y2VwdGlvbiBJbnZhbGlkQXJyYXlTZXBhcmF0b3I7CmV4dGVybiBjb25z
|
997
|
+
dCBFeGNlcHRpb24gU3ViQ29udGFpbmVyU2l6ZVZhcmllczsKCnRlbXBsYXRl
|
998
|
+
PHR5cGVuYW1lIENvbnRhaW5lciwgdHlwZW5hbWUgUGFyc2VyLCBib29sIFN3
|
999
|
+
YXBzID0gZmFsc2U+CmNsYXNzIFBhcnNlQXJyYXkgOiBwdWJsaWMgVmFsdWVQ
|
1000
|
+
YXJzZXIgewpwdWJsaWM6CiAgICB0eXBlZGVmIENvbnRhaW5lciBUeXBlOwoK
|
1001
|
+
cHJpdmF0ZToKICAgIFR5cGUgb3V0OwogICAgYm9vbCBiZWdhbiwgZXhwZWN0
|
1002
|
+
X251bWJlcjsKCnB1YmxpYzoKICAgIFBhcnNlQXJyYXkoKSA6IGJlZ2FuKGZh
|
1003
|
+
bHNlKSwgZXhwZWN0X251bWJlcih0cnVlKSB7IH0KICAgIGNvbnN0IGNoYXIq
|
1004
|
+
IFBhcnNlKGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBh
|
1005
|
+
cnNlclBvb2wmIFBvb2wpCiAgICAgICAgbm9leGNlcHQoZmFsc2UpOwoKICAg
|
1006
|
+
IHZvaWQgU3dhcChUeXBlJiBBbHQpIHsKICAgICAgICBpZiAoIUZpbmlzaGVk
|
1007
|
+
KCkpCiAgICAgICAgICAgIHRocm93IE5vdEZpbmlzaGVkOwogICAgICAgIHN0
|
1008
|
+
ZDo6c3dhcChBbHQsIG91dCk7CiAgICAgICAgb3V0LnJlc2l6ZSgwKTsKICAg
|
1009
|
+
IH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lciwgdHlwZW5hbWUg
|
1010
|
+
UGFyc2VyLCBib29sIFN3YXBzPgpjb25zdCBjaGFyKiBQYXJzZUFycmF5PENv
|
1011
|
+
bnRhaW5lcixQYXJzZXIsU3dhcHM+OjpQYXJzZSgKICAgIGNvbnN0IGNoYXIq
|
1012
|
+
IEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNlclBvb2wmIFBvb2wpIG5v
|
1013
|
+
ZXhjZXB0KGZhbHNlKQp7CiAgICBjb25zdCBjaGFyKiBvcmlnaW4gPSBCZWdp
|
1014
|
+
bjsKICAgIFBhcnNlciYgcChzdGQ6OmdldDxQYXJzZXI6OlBvb2w6OkluZGV4
|
1015
|
+
PihQb29sLlBhcnNlcikpOwogICAgdHlwZW5hbWUgUGFyc2VyOjpUeXBlJiB2
|
1016
|
+
YWx1ZShzdGQ6OmdldDxQYXJzZXI6OlBvb2w6OkluZGV4PihQb29sLlZhbHVl
|
1017
|
+
KSk7CiAgICBpZiAoIXAuRmluaXNoZWQoKSkgewogICAgICAgIC8vIEluIHRo
|
1018
|
+
ZSBtaWRkbGUgb2YgcGFyc2luZyB2YWx1ZSB3aGVuIGJ1ZmZlciBlbmRlZD8K
|
1019
|
+
ICAgICAgICBCZWdpbiA9IHAuUGFyc2UoQmVnaW4sIEVuZCwgUG9vbCk7CiAg
|
1020
|
+
ICAgICAgaWYgKEJlZ2luID09IG51bGxwdHIpCiAgICAgICAgICAgIHJldHVy
|
1021
|
+
biBzZXRGaW5pc2hlZChudWxscHRyKTsKICAgICAgICBpZiBjb25zdGV4cHIg
|
1022
|
+
KFN3YXBzKSB7CiAgICAgICAgICAgIG91dC5wdXNoX2JhY2sodHlwZW5hbWUg
|
1023
|
+
UGFyc2VyOjpUeXBlKCkpOwogICAgICAgICAgICBwLlN3YXAob3V0LmJhY2so
|
1024
|
+
KSk7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIG91dC5wdXNoX2JhY2so
|
1025
|
+
dmFsdWUpOwogICAgICAgIGV4cGVjdF9udW1iZXIgPSBmYWxzZTsKICAgIH0g
|
1026
|
+
ZWxzZSBpZiAoIWJlZ2FuKSB7CiAgICAgICAgLy8gRXhwZWN0ICdbJyBvbiBm
|
1027
|
+
aXJzdCBjYWxsLgogICAgICAgIGlmICgqQmVnaW4gIT0gJ1snKQogICAgICAg
|
1028
|
+
ICAgICB0aHJvdyBDb250ZXh0RXhjZXB0aW9uKEludmFsaWRBcnJheVN0YXJ0
|
1029
|
+
LCBvcmlnaW4sIEJlZ2luLCBFbmQpOwogICAgICAgIGJlZ2FuID0gZXhwZWN0
|
1030
|
+
X251bWJlciA9IHRydWU7CiAgICAgICAgQmVnaW4gPSBza2lwV2hpdGVzcGFj
|
1031
|
+
ZSgrK0JlZ2luLCBFbmQpOwogICAgICAgIGlmIChCZWdpbiA9PSBudWxscHRy
|
1032
|
+
IHx8ICEqQmVnaW4pCiAgICAgICAgICAgIHJldHVybiBzZXRGaW5pc2hlZChu
|
1033
|
+
dWxscHRyKTsKICAgICAgICBpZiAoKkJlZ2luID09ICddJykgewogICAgICAg
|
1034
|
+
ICAgICBiZWdhbiA9IGZhbHNlOyAvLyBJbiBjYXNlIGNhbGxlciByZS11c2Vz
|
1035
|
+
LiBPdXQgbXVzdCBiZSBlbXB0eS4KICAgICAgICAgICAgcmV0dXJuIHNldEZp
|
1036
|
+
bmlzaGVkKCsrQmVnaW4pOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAob3V0
|
1037
|
+
LmVtcHR5KCkpIHsKICAgICAgICBCZWdpbiA9IHNraXBXaGl0ZXNwYWNlKEJl
|
1038
|
+
Z2luLCBFbmQpOwogICAgICAgIGlmIChCZWdpbiA9PSBudWxscHRyIHx8ICEq
|
1039
|
+
QmVnaW4pCiAgICAgICAgICAgIHJldHVybiBzZXRGaW5pc2hlZChudWxscHRy
|
1040
|
+
KTsKICAgICAgICBpZiAoKkJlZ2luID09ICddJykgewogICAgICAgICAgICBi
|
1041
|
+
ZWdhbiA9IGZhbHNlOyAvLyBJbiBjYXNlIGNhbGxlciByZS11c2VzLiBPdXQg
|
1042
|
+
bXVzdCBiZSBlbXB0eS4KICAgICAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVk
|
1043
|
+
KCsrQmVnaW4pOwogICAgICAgIH0KICAgIH0KICAgIHdoaWxlIChCZWdpbiAh
|
1044
|
+
PSBFbmQpIHsKICAgICAgICBpZiAoZXhwZWN0X251bWJlcikgewogICAgICAg
|
1045
|
+
ICAgICBCZWdpbiA9IHNraXBXaGl0ZXNwYWNlKEJlZ2luLCBFbmQpOwogICAg
|
1046
|
+
ICAgICAgICBpZiAoQmVnaW4gPT0gbnVsbHB0ciB8fCAhKkJlZ2luKQogICAg
|
1047
|
+
ICAgICAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIpOwogICAg
|
1048
|
+
ICAgICAgICAvLyBOb3cgdGhlcmUgc2hvdWxkIGJlIHRoZSBpdGVtIHRvIHBh
|
1049
|
+
cnNlLgogICAgICAgICAgICBCZWdpbiA9IHAuUGFyc2UoQmVnaW4sIEVuZCwg
|
1050
|
+
UG9vbCk7CiAgICAgICAgICAgIGlmIChCZWdpbiA9PSBudWxscHRyKQogICAg
|
1051
|
+
ICAgICAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIpOwogICAg
|
1052
|
+
ICAgICAgICBvdXQucHVzaF9iYWNrKHZhbHVlKTsKICAgICAgICAgICAgZXhw
|
1053
|
+
ZWN0X251bWJlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBDb21t
|
1054
|
+
YSwgbWF5YmUgc3Vycm91bmRlZCBieSBzcGFjZXMuCiAgICAgICAgaWYgKCpC
|
1055
|
+
ZWdpbiA9PSAnLCcpIC8vIE1vc3QgbGlrZWx5IHVubGVzcyBwcmV0dGlmaWVk
|
1056
|
+
LgogICAgICAgICAgICArK0JlZ2luOwogICAgICAgIGVsc2UgewogICAgICAg
|
1057
|
+
ICAgICBCZWdpbiA9IHNraXBXaGl0ZXNwYWNlKEJlZ2luLCBFbmQpOwogICAg
|
1058
|
+
ICAgICAgICBpZiAoQmVnaW4gPT0gbnVsbHB0ciB8fCAhKkJlZ2luKQogICAg
|
1059
|
+
ICAgICAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIpOwogICAg
|
1060
|
+
ICAgICAgICBpZiAoKkJlZ2luID09ICddJykgewogICAgICAgICAgICAgICAg
|
1061
|
+
YmVnYW4gPSBmYWxzZTsKICAgICAgICAgICAgICAgIHJldHVybiBzZXRGaW5p
|
1062
|
+
c2hlZCgrK0JlZ2luKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAo
|
1063
|
+
KkJlZ2luICE9ICcsJykKICAgICAgICAgICAgICAgIHRocm93IENvbnRleHRF
|
1064
|
+
eGNlcHRpb24oSW52YWxpZEFycmF5U2VwYXJhdG9yLCBvcmlnaW4sIEJlZ2lu
|
1065
|
+
LCBFbmQpOwogICAgICAgICAgICBCZWdpbisrOwogICAgICAgIH0KICAgICAg
|
1066
|
+
ICBleHBlY3RfbnVtYmVyID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBzZXRG
|
1067
|
+
aW5pc2hlZChudWxscHRyKTsKfQoKCnRlbXBsYXRlPHR5cGVuYW1lIENvbnRh
|
1068
|
+
aW5lciwgdHlwZW5hbWUgUGFyc2VyLCBib29sIFNhbWVTaXplID0gZmFsc2U+
|
1069
|
+
CmNsYXNzIFBhcnNlQ29udGFpbmVyQXJyYXkgOiBwdWJsaWMgVmFsdWVQYXJz
|
1070
|
+
ZXIgewpwdWJsaWM6CiAgICB0eXBlZGVmIENvbnRhaW5lciBUeXBlOwoKcHJp
|
1071
|
+
dmF0ZToKICAgIFBhcnNlciBwOwogICAgVHlwZSBvdXQ7CiAgICBib29sIGJl
|
1072
|
+
Z2FuLCBleHBlY3RfaXRlbTsKCnB1YmxpYzoKICAgIFBhcnNlQ29udGFpbmVy
|
1073
|
+
QXJyYXkoKSA6IGJlZ2FuKGZhbHNlKSwgZXhwZWN0X2l0ZW0odHJ1ZSkgeyB9
|
1074
|
+
CiAgICBjb25zdCBjaGFyKiBQYXJzZShjb25zdCBjaGFyKiBCZWdpbiwgY29u
|
1075
|
+
c3QgY2hhciogRW5kLCBQYXJzZXJQb29sJiBQb29sKQogICAgICAgIG5vZXhj
|
1076
|
+
ZXB0KGZhbHNlKTsKCiAgICB2b2lkIFN3YXAoVHlwZSYgQWx0KSB7CiAgICAg
|
1077
|
+
ICAgaWYgKCFGaW5pc2hlZCgpKQogICAgICAgICAgICB0aHJvdyBOb3RGaW5p
|
1078
|
+
c2hlZDsKICAgICAgICBzdGQ6OnN3YXAoQWx0LCBvdXQpOwogICAgICAgIG91
|
1079
|
+
dC5yZXNpemUoMCk7CiAgICB9Cn07CgoKdGVtcGxhdGU8dHlwZW5hbWUgQ29u
|
1080
|
+
dGFpbmVyLCB0eXBlbmFtZSBQYXJzZXIsIGJvb2wgU2FtZVNpemU+CmNvbnN0
|
1081
|
+
IGNoYXIqIFBhcnNlQ29udGFpbmVyQXJyYXk8Q29udGFpbmVyLFBhcnNlcixT
|
1082
|
+
YW1lU2l6ZT46OlBhcnNlKAogICAgY29uc3QgY2hhciogQmVnaW4sIGNvbnN0
|
1083
|
+
IGNoYXIqIEVuZCwgUGFyc2VyUG9vbCYgUG9vbCkgbm9leGNlcHQoZmFsc2Up
|
1084
|
+
CnsKICAgIGNvbnN0IGNoYXIqIG9yaWdpbiA9IEJlZ2luOwogICAgaWYgKCFw
|
1085
|
+
LkZpbmlzaGVkKCkpIHsKICAgICAgICAvLyBJbiB0aGUgbWlkZGxlIG9mIHBh
|
1086
|
+
cnNpbmcgdmFsdWUgd2hlbiBidWZmZXIgZW5kZWQ/CiAgICAgICAgQmVnaW4g
|
1087
|
+
PSBwLlBhcnNlKEJlZ2luLCBFbmQsIFBvb2wpOwogICAgICAgIGlmIChCZWdp
|
1088
|
+
biA9PSBudWxscHRyKQogICAgICAgICAgICByZXR1cm4gc2V0RmluaXNoZWQo
|
1089
|
+
bnVsbHB0cik7CiAgICAgICAgb3V0LnB1c2hfYmFjayh0eXBlbmFtZSBQYXJz
|
1090
|
+
ZXI6OlR5cGUoKSk7CiAgICAgICAgcC5Td2FwKG91dC5iYWNrKCkpOwogICAg
|
1091
|
+
ICAgIGlmIGNvbnN0ZXhwciAoU2FtZVNpemUpIHsKICAgICAgICAgICAgaWYg
|
1092
|
+
KG91dC5mcm9udCgpLnNpemUoKSAhPSBvdXQuYmFjaygpLnNpemUoKSkKICAg
|
1093
|
+
ICAgICAgICAgICAgIHRocm93IFN1YkNvbnRhaW5lclNpemVWYXJpZXM7CiAg
|
1094
|
+
ICAgICAgfQogICAgICAgIGV4cGVjdF9pdGVtID0gZmFsc2U7CiAgICB9IGVs
|
1095
|
+
c2UgaWYgKCFiZWdhbikgewogICAgICAgIC8vIEV4cGVjdCAnWycgb24gZmly
|
1096
|
+
c3QgY2FsbC4KICAgICAgICBpZiAoKkJlZ2luICE9ICdbJykKICAgICAgICAg
|
1097
|
+
ICAgdGhyb3cgQ29udGV4dEV4Y2VwdGlvbihJbnZhbGlkQXJyYXlTdGFydCwg
|
1098
|
+
b3JpZ2luLCBCZWdpbiwgRW5kKTsKICAgICAgICBiZWdhbiA9IGV4cGVjdF9p
|
1099
|
+
dGVtID0gdHJ1ZTsKICAgICAgICBCZWdpbiA9IHNraXBXaGl0ZXNwYWNlKCsr
|
1100
|
+
QmVnaW4sIEVuZCk7CiAgICAgICAgaWYgKEJlZ2luID09IG51bGxwdHIgfHwg
|
1101
|
+
ISpCZWdpbikKICAgICAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxw
|
1102
|
+
dHIpOwogICAgICAgIGlmICgqQmVnaW4gPT0gJ10nKSB7CiAgICAgICAgICAg
|
1103
|
+
IGJlZ2FuID0gZmFsc2U7IC8vIEluIGNhc2UgY2FsbGVyIHJlLXVzZXMuIE91
|
1104
|
+
dCBtdXN0IGJlIGVtcHR5LgogICAgICAgICAgICByZXR1cm4gc2V0RmluaXNo
|
1105
|
+
ZWQoKytCZWdpbik7CiAgICAgICAgfQogICAgfSBlbHNlIGlmIChvdXQuZW1w
|
1106
|
+
dHkoKSkgewogICAgICAgIEJlZ2luID0gc2tpcFdoaXRlc3BhY2UoQmVnaW4s
|
1107
|
+
IEVuZCk7CiAgICAgICAgaWYgKEJlZ2luID09IG51bGxwdHIgfHwgISpCZWdp
|
1108
|
+
bikKICAgICAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIpOwog
|
1109
|
+
ICAgICAgIGlmICgqQmVnaW4gPT0gJ10nKSB7CiAgICAgICAgICAgIGJlZ2Fu
|
1110
|
+
ID0gZmFsc2U7IC8vIEluIGNhc2UgY2FsbGVyIHJlLXVzZXMuIE91dCBtdXN0
|
1111
|
+
IGJlIGVtcHR5LgogICAgICAgICAgICByZXR1cm4gc2V0RmluaXNoZWQoKytC
|
1112
|
+
ZWdpbik7CiAgICAgICAgfQogICAgfQogICAgd2hpbGUgKEJlZ2luICE9IEVu
|
1113
|
+
ZCkgewogICAgICAgIGlmIChleHBlY3RfaXRlbSkgewogICAgICAgICAgICBC
|
1114
|
+
ZWdpbiA9IHNraXBXaGl0ZXNwYWNlKEJlZ2luLCBFbmQpOwogICAgICAgICAg
|
1115
|
+
ICBpZiAoQmVnaW4gPT0gbnVsbHB0ciB8fCAhKkJlZ2luKQogICAgICAgICAg
|
1116
|
+
ICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIpOwogICAgICAgICAg
|
1117
|
+
ICAvLyBOb3cgdGhlcmUgc2hvdWxkIGJlIHRoZSBpdGVtIHRvIHBhcnNlLgog
|
1118
|
+
ICAgICAgICAgICBCZWdpbiA9IHAuUGFyc2UoQmVnaW4sIEVuZCwgUG9vbCk7
|
1119
|
+
CiAgICAgICAgICAgIGlmIChCZWdpbiA9PSBudWxscHRyKQogICAgICAgICAg
|
1120
|
+
ICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIpOwogICAgICAgICAg
|
1121
|
+
ICBvdXQucHVzaF9iYWNrKHR5cGVuYW1lIFBhcnNlcjo6VHlwZSgpKTsKICAg
|
1122
|
+
ICAgICAgICAgcC5Td2FwKG91dC5iYWNrKCkpOwogICAgICAgICAgICBpZiBj
|
1123
|
+
b25zdGV4cHIgKFNhbWVTaXplKSB7CiAgICAgICAgICAgICAgICBpZiAob3V0
|
1124
|
+
LmZyb250KCkuc2l6ZSgpICE9IG91dC5iYWNrKCkuc2l6ZSgpKQogICAgICAg
|
1125
|
+
ICAgICAgICAgICAgIHRocm93IFN1YkNvbnRhaW5lclNpemVWYXJpZXM7CiAg
|
1126
|
+
ICAgICAgICAgIH0KICAgICAgICAgICAgZXhwZWN0X2l0ZW0gPSBmYWxzZTsK
|
1127
|
+
ICAgICAgICB9CiAgICAgICAgLy8gQ29tbWEsIG1heWJlIHN1cnJvdW5kZWQg
|
1128
|
+
Ynkgc3BhY2VzLgogICAgICAgIGlmICgqQmVnaW4gPT0gJywnKSAvLyBNb3N0
|
1129
|
+
IGxpa2VseSB1bmxlc3MgcHJldHRpZmllZC4KICAgICAgICAgICAgKytCZWdp
|
1130
|
+
bjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgQmVnaW4gPSBza2lwV2hp
|
1131
|
+
dGVzcGFjZShCZWdpbiwgRW5kKTsKICAgICAgICAgICAgaWYgKEJlZ2luID09
|
1132
|
+
IG51bGxwdHIgfHwgISpCZWdpbikKICAgICAgICAgICAgICAgIHJldHVybiBz
|
1133
|
+
ZXRGaW5pc2hlZChudWxscHRyKTsKICAgICAgICAgICAgaWYgKCpCZWdpbiA9
|
1134
|
+
PSAnXScpIHsKICAgICAgICAgICAgICAgIGJlZ2FuID0gZmFsc2U7CiAgICAg
|
1135
|
+
ICAgICAgICAgICByZXR1cm4gc2V0RmluaXNoZWQoKytCZWdpbik7CiAgICAg
|
1136
|
+
ICAgICAgIH0KICAgICAgICAgICAgaWYgKCpCZWdpbiAhPSAnLCcpCiAgICAg
|
1137
|
+
ICAgICAgICAgICB0aHJvdyBDb250ZXh0RXhjZXB0aW9uKEludmFsaWRBcnJh
|
1138
|
+
eVNlcGFyYXRvciwgb3JpZ2luLCBCZWdpbiwgRW5kKTsKICAgICAgICAgICAg
|
1139
|
+
QmVnaW4rKzsKICAgICAgICB9CiAgICAgICAgZXhwZWN0X2l0ZW0gPSB0cnVl
|
1140
|
+
OwogICAgfQogICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIpOwp9Cg==
|
1141
|
+
c4: |
|
1142
|
+
Y29uc3QgRXhjZXB0aW9uIHNwZWNqc29uOjpOb3RGaW5pc2hlZCgiSXRlbSBu
|
1143
|
+
b3QgZmluaXNoZWQuIik7CmNvbnN0IEV4Y2VwdGlvbiBzcGVjanNvbjo6SW52
|
1144
|
+
YWxpZEFycmF5U3RhcnQoIkV4cGVjdGVkICdbJyIpOwpjb25zdCBFeGNlcHRp
|
1145
|
+
b24gc3BlY2pzb246OkludmFsaWRBcnJheVNlcGFyYXRvcigiQXJyYXksIGV4
|
1146
|
+
cGVjdGVkICcsJyIpOwpjb25zdCBFeGNlcHRpb24gc3BlY2pzb246OlN1YkNv
|
1147
|
+
bnRhaW5lclNpemVWYXJpZXMoIlN1Yi1jb250YWluZXIgc2l6ZSB2YXJpZXMu
|
1148
|
+
Iik7Cg==
|
1149
|
+
c5: |
|
1150
|
+
ZXh0ZXJuIGNvbnN0IEV4Y2VwdGlvbiBJbnZhbGlkS2V5OwpleHRlcm4gY29u
|
1151
|
+
c3QgRXhjZXB0aW9uIFJlcXVpcmVkS2V5Tm90R2l2ZW47CmV4dGVybiBjb25z
|
1152
|
+
dCBFeGNlcHRpb24gSW52YWxpZE9iamVjdFN0YXJ0OwpleHRlcm4gY29uc3Qg
|
1153
|
+
RXhjZXB0aW9uIEludmFsaWRLZXlTZXBhcmF0b3I7CmV4dGVybiBjb25zdCBF
|
1154
|
+
eGNlcHRpb24gSW52YWxpZFZhbHVlU2VwYXJhdG9yOwoKCmNsYXNzIFZhbHVl
|
1155
|
+
U3RvcmU7CgovLyBIZWxwZXIgY2xhc3MgZm9yIGltcGxlbWVudGF0aW9uIG9m
|
1156
|
+
IEtleVZhbHVlcyB0ZW1wbGF0ZS4KLy8gQ29tbW9uIGludGVyZmFjZSBmb3Ig
|
1157
|
+
bG9vcHMgb3ZlciB0dXBsZSBtZW1iZXJzIGV0Yy4KY2xhc3MgU2Nhbm5pbmdL
|
1158
|
+
ZXlWYWx1ZSB7CnByb3RlY3RlZDoKICAgIGJvb2wgZ2l2ZW47CiAgICB2b2lk
|
1159
|
+
IEdpdmUoVmFsdWVTdG9yZSogVlMpOwoKcHVibGljOgogICAgU2Nhbm5pbmdL
|
1160
|
+
ZXlWYWx1ZSgpIDogZ2l2ZW4oZmFsc2UpIHsgfQogICAgdmlydHVhbCB+U2Nh
|
1161
|
+
bm5pbmdLZXlWYWx1ZSgpOwogICAgdmlydHVhbCBWYWx1ZVBhcnNlciYgU2Nh
|
1162
|
+
bm5lcihQYXJzZXJQb29sJiBQb29sKSA9IDA7CiAgICB2aXJ0dWFsIGNvbnN0
|
1163
|
+
IGNoYXIqIEtleSgpIGNvbnN0ID0gMDsKICAgIHZpcnR1YWwgdm9pZCBTd2Fw
|
1164
|
+
KFZhbHVlU3RvcmUqIFZTLCBQYXJzZXJQb29sJiBQb29sKSA9IDA7CiAgICB2
|
1165
|
+
aXJ0dWFsIGJvb2wgUmVxdWlyZWQoKSBjb25zdCA9IDA7CiAgICBib29sIEdp
|
1166
|
+
dmVuKCkgY29uc3QgeyByZXR1cm4gZ2l2ZW47IH0KfTsKCi8vIEhlbHBlciBj
|
1167
|
+
bGFzcyBmb3IgaW1wbGVtZW50YXRpb24gb2YgS2V5VmFsdWVzIHRlbXBsYXRl
|
1168
|
+
Lgp0ZW1wbGF0ZTxjb25zdCBjaGFyKiBLZXlTdHJpbmcsIHR5cGVuYW1lIFBh
|
1169
|
+
cnNlcj4KY2xhc3MgS2V5VmFsdWUgOiBwdWJsaWMgU2Nhbm5pbmdLZXlWYWx1
|
1170
|
+
ZSB7CnB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgUGFyc2VyOjpUeXBl
|
1171
|
+
IFR5cGU7CiAgICBjb25zdCBjaGFyKiBLZXkoKSBjb25zdCB7IHJldHVybiBL
|
1172
|
+
ZXlTdHJpbmc7IH0KICAgIHZvaWQgU3dhcChWYWx1ZVN0b3JlKiBWUywgUGFy
|
1173
|
+
c2VyUG9vbCYgUG9vbCk7CgogICAgdm9pZCBTd2FwKFR5cGUmIEFsdCwgUGFy
|
1174
|
+
c2VyUG9vbCYgUG9vbCkgewogICAgICAgIHN0ZDo6c3dhcChBbHQsIHN0ZDo6
|
1175
|
+
Z2V0PFBhcnNlcjo6UG9vbDo6SW5kZXg+KFBvb2wuVmFsdWUpKTsKICAgICAg
|
1176
|
+
ICBnaXZlbiA9IGZhbHNlOwogICAgfQoKICAgIFZhbHVlUGFyc2VyJiBTY2Fu
|
1177
|
+
bmVyKFBhcnNlclBvb2wmIFBvb2wpIHsKICAgICAgICBnaXZlbiA9IHRydWU7
|
1178
|
+
CiAgICAgICAgcmV0dXJuIHN0ZDo6Z2V0PFBhcnNlcjo6UG9vbDo6SW5kZXg+
|
1179
|
+
KFBvb2wuUGFyc2VyKTsKICAgIH0KCiAgICBib29sIFJlcXVpcmVkKCkgY29u
|
1180
|
+
c3QgeyByZXR1cm4gZmFsc2U7IH0KfTsKCi8vIEhlbHBlciBjbGFzcyBmb3Ig
|
1181
|
+
aW1wbGVtZW50YXRpb24gb2YgS2V5VmFsdWVzIHRlbXBsYXRlLgp0ZW1wbGF0
|
1182
|
+
ZTxjb25zdCBjaGFyKiBLZXlTdHJpbmcsIHR5cGVuYW1lIFBhcnNlcj4KY2xh
|
1183
|
+
c3MgUmVxdWlyZWRLZXlWYWx1ZSA6IHB1YmxpYyBLZXlWYWx1ZTxLZXlTdHJp
|
1184
|
+
bmcsUGFyc2VyPiB7CnB1YmxpYzoKICAgIGJvb2wgUmVxdWlyZWQoKSBjb25z
|
1185
|
+
dCB7IHJldHVybiB0cnVlOyB9Cn07CgovLyBIZWxwZXIgY2xhc3MgZm9yIGlt
|
1186
|
+
cGxlbWVudGF0aW9uIG9mIEtleVZhbHVlcyB0ZW1wbGF0ZS4KdGVtcGxhdGU8
|
1187
|
+
Y29uc3QgY2hhciogS2V5U3RyaW5nLCB0eXBlbmFtZSBQYXJzZXI+CmNsYXNz
|
1188
|
+
IEtleUNvbnRhaW5lclZhbHVlIDogcHVibGljIFNjYW5uaW5nS2V5VmFsdWUg
|
1189
|
+
ewpwcml2YXRlOgogICAgUGFyc2VyIHA7CgpwdWJsaWM6CiAgICB0eXBlZGVm
|
1190
|
+
IHR5cGVuYW1lIFBhcnNlcjo6VHlwZSBUeXBlOwogICAgY29uc3QgY2hhciog
|
1191
|
+
S2V5KCkgY29uc3QgeyByZXR1cm4gS2V5U3RyaW5nOyB9CiAgICB2b2lkIFN3
|
1192
|
+
YXAoVmFsdWVTdG9yZSogVlMsIFBhcnNlclBvb2wmIFBvb2wpOwoKICAgIHZv
|
1193
|
+
aWQgU3dhcChUeXBlJiBBbHQsIFBhcnNlclBvb2wmIFBvb2wpIHsKICAgICAg
|
1194
|
+
ICBwLlN3YXAoQWx0KTsKICAgICAgICBnaXZlbiA9IGZhbHNlOwogICAgfQoK
|
1195
|
+
ICAgIFZhbHVlUGFyc2VyJiBTY2FubmVyKFBhcnNlclBvb2wmIFBvb2wpIHsK
|
1196
|
+
ICAgICAgICBnaXZlbiA9IHRydWU7CiAgICAgICAgcmV0dXJuIHA7CiAgICB9
|
1197
|
+
CgogICAgYm9vbCBSZXF1aXJlZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
|
1198
|
+
Cn07CgovLyBIZWxwZXIgY2xhc3MgZm9yIGltcGxlbWVudGF0aW9uIG9mIEtl
|
1199
|
+
eVZhbHVlcyB0ZW1wbGF0ZS4KdGVtcGxhdGU8Y29uc3QgY2hhciogS2V5U3Ry
|
1200
|
+
aW5nLCB0eXBlbmFtZSBQYXJzZXI+CmNsYXNzIFJlcXVpcmVkS2V5Q29udGFp
|
1201
|
+
bmVyVmFsdWUgOiBwdWJsaWMgS2V5Q29udGFpbmVyVmFsdWU8S2V5U3RyaW5n
|
1202
|
+
LFBhcnNlcj4gewogICAgYm9vbCBSZXF1aXJlZCgpIGNvbnN0IHsgcmV0dXJu
|
1203
|
+
IHRydWU7IH0KfTsKCgovLyBIZWxwZXIgY2xhc3MgZm9yIGltcGxlbWVudGF0
|
1204
|
+
aW9uIG9mIFBhcnNlT2JqZWN0IGNsYXNzLgp0ZW1wbGF0ZTxjbGFzcyAuLi4g
|
1205
|
+
RmllbGRzPgpjbGFzcyBLZXlWYWx1ZXMgewpwcml2YXRlOgogICAgc3RkOjp2
|
1206
|
+
ZWN0b3I8U2Nhbm5pbmdLZXlWYWx1ZSo+IHB0cnM7CgogICAgdGVtcGxhdGU8
|
1207
|
+
dHlwZW5hbWUgRnVuY09iaiwgdHlwZW5hbWUgVHVwbGUsIHNpemVfdC4uLiBJ
|
1208
|
+
ZHhTZXE+CiAgICB2b2lkIGFwcGx5X3RvX2VhY2goRnVuY09iaiYmIGZvLCBU
|
1209
|
+
dXBsZSYmIHQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SWR4U2VxLi4uPikKICAg
|
1210
|
+
IHsKICAgICAgICBpbnQgYVtdID0gewogICAgICAgICAgICAoZm8oc3RkOjpn
|
1211
|
+
ZXQ8SWR4U2VxPihzdGQ6OmZvcndhcmQ8VHVwbGU+KHQpKSksIHZvaWQoKSwg
|
1212
|
+
MCkgLi4uCiAgICAgICAgfTsKICAgICAgICAodm9pZClhOyAvLyBTdXBwcmVz
|
1213
|
+
c2VzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nLgogICAgfQoKICAgIGNsYXNz
|
1214
|
+
IFB1c2hlciB7CiAgICBwcml2YXRlOgogICAgICAgIHN0ZDo6dmVjdG9yPFNj
|
1215
|
+
YW5uaW5nS2V5VmFsdWUqPiYgdGd0OwogICAgcHVibGljOgogICAgICAgIFB1
|
1216
|
+
c2hlcihzdGQ6OnZlY3RvcjxTY2FubmluZ0tleVZhbHVlKj4mIFRhcmdldCkg
|
1217
|
+
OiB0Z3QoVGFyZ2V0KSB7IH0KICAgICAgICB2b2lkIG9wZXJhdG9yKCkoU2Nh
|
1218
|
+
bm5pbmdLZXlWYWx1ZSYgU0tWKSB7IHRndC5wdXNoX2JhY2soJlNLVik7IH0K
|
1219
|
+
ICAgIH07CgpwdWJsaWM6CiAgICBzdGQ6OnR1cGxlPEZpZWxkcy4uLj4gZmll
|
1220
|
+
bGRzOwoKICAgIEtleVZhbHVlcygpIHsKICAgICAgICBQdXNoZXIgcHNoKHB0
|
1221
|
+
cnMpOwogICAgICAgIGFwcGx5X3RvX2VhY2gocHNoLCBmaWVsZHMsCiAgICAg
|
1222
|
+
ICAgICAgIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5jZTxzdGQ6OnR1cGxlX3Np
|
1223
|
+
emU8ZGVjbHR5cGUoZmllbGRzKT46OnZhbHVlPgogICAgICAgICAgICAgICAg
|
1224
|
+
e30pOwogICAgfQoKICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
|
1225
|
+
c3RkOjp0dXBsZV9zaXplPGRlY2x0eXBlKGZpZWxkcyk+Ojp2YWx1ZTsgfQog
|
1226
|
+
ICAgVmFsdWVQYXJzZXImIFNjYW5uZXIoc2l6ZV90IEluZGV4LCBQYXJzZXJQ
|
1227
|
+
b29sJiBQb29sKSB7CiAgICAgICAgcmV0dXJuIHB0cnNbSW5kZXhdLT5TY2Fu
|
1228
|
+
bmVyKFBvb2wpOwogICAgfQogICAgU2Nhbm5pbmdLZXlWYWx1ZSogS2V5VmFs
|
1229
|
+
dWUoc2l6ZV90IEluZGV4KSB7IHJldHVybiBwdHJzW0luZGV4XTsgfQp9OwoK
|
1230
|
+
Ly8gQW5vdGhlciBkZXJpdmVkIGNsYXNzIGFkZHMgYWxsIHRoZSBjb252ZW5p
|
1231
|
+
ZW5jZSBtZXRob2RzIHRoYXQgbWFwIHRvIGluZGV4LgoKLy8gQmFzZSBjbGFz
|
1232
|
+
cyBmb3IgcGFyc2UtdGltZSB0cmFja2luZyBvZiBnaXZlbiBrZXlzIGFuZCB0
|
1233
|
+
aGVpciB2YWx1ZXMuCmNsYXNzIFZhbHVlU3RvcmUgewpwcm90ZWN0ZWQ6CiAg
|
1234
|
+
ICBib29sIGdpdmVuOwoKcHJpdmF0ZToKICAgIHZvaWQgR2l2ZSgpOwogICAg
|
1235
|
+
ZnJpZW5kIGNsYXNzIFNjYW5uaW5nS2V5VmFsdWU7CgpwdWJsaWM6CiAgICBW
|
1236
|
+
YWx1ZVN0b3JlKCkgOiBnaXZlbihmYWxzZSkgeyB9CiAgICBib29sIEdpdmVu
|
1237
|
+
KCkgY29uc3QgeyByZXR1cm4gZ2l2ZW47IH0KfTsKCnRlbXBsYXRlPHR5cGVu
|
1238
|
+
YW1lIFBhcnNlcj4KY2xhc3MgVmFsdWUgOiBwdWJsaWMgVmFsdWVTdG9yZSB7
|
1239
|
+
CnB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgUGFyc2VyOjpUeXBlIFR5
|
1240
|
+
cGU7CiAgICBUeXBlIHZhbHVlOwp9OwoKdGVtcGxhdGU8Y2xhc3MgLi4uIEZp
|
1241
|
+
ZWxkcz4KY2xhc3MgTmFtZWxlc3NWYWx1ZXMgewpwcml2YXRlOgogICAgc3Rk
|
1242
|
+
Ojp2ZWN0b3I8VmFsdWVTdG9yZSo+IHB0cnM7CgogICAgdGVtcGxhdGU8dHlw
|
1243
|
+
ZW5hbWUgRnVuY09iaiwgdHlwZW5hbWUgVHVwbGUsIHNpemVfdC4uLiBJZHhT
|
1244
|
+
ZXE+CiAgICB2b2lkIGFwcGx5X3RvX2VhY2goRnVuY09iaiYmIGZvLCBUdXBs
|
1245
|
+
ZSYmIHQsIHN0ZDo6aW5kZXhfc2VxdWVuY2U8SWR4U2VxLi4uPikKICAgIHsK
|
1246
|
+
ICAgICAgICBpbnQgYVtdID0gewogICAgICAgICAgICAoZm8oc3RkOjpnZXQ8
|
1247
|
+
SWR4U2VxPihzdGQ6OmZvcndhcmQ8VHVwbGU+KHQpKSksIHZvaWQoKSwgMCkg
|
1248
|
+
Li4uCiAgICAgICAgfTsKICAgICAgICAodm9pZClhOyAvLyBTdXBwcmVzc2Vz
|
1249
|
+
IHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nLgogICAgfQoKICAgIGNsYXNzIFB1
|
1250
|
+
c2hlciB7CiAgICBwcml2YXRlOgogICAgICAgIHN0ZDo6dmVjdG9yPFZhbHVl
|
1251
|
+
U3RvcmUqPiYgdGd0OwogICAgcHVibGljOgogICAgICAgIFB1c2hlcihzdGQ6
|
1252
|
+
OnZlY3RvcjxWYWx1ZVN0b3JlKj4mIFRhcmdldCkgOiB0Z3QoVGFyZ2V0KSB7
|
1253
|
+
IH0KICAgICAgICB2b2lkIG9wZXJhdG9yKCkoVmFsdWVTdG9yZSYgVlMpIHsg
|
1254
|
+
dGd0LnB1c2hfYmFjaygmVlMpOyB9CiAgICB9OwoKcHVibGljOgogICAgc3Rk
|
1255
|
+
Ojp0dXBsZTxGaWVsZHMuLi4+IGZpZWxkczsKCiAgICBOYW1lbGVzc1ZhbHVl
|
1256
|
+
cygpIHsKICAgICAgICBQdXNoZXIgcHNoKHB0cnMpOwogICAgICAgIGFwcGx5
|
1257
|
+
X3RvX2VhY2gocHNoLCBmaWVsZHMsIHN0ZDo6bWFrZV9pbmRleF9zZXF1ZW5j
|
1258
|
+
ZTxzdGQ6OnR1cGxlX3NpemU8ZGVjbHR5cGUoZmllbGRzKT46OnZhbHVlPiB7
|
1259
|
+
fSk7CiAgICB9CgogICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBz
|
1260
|
+
dGQ6OnR1cGxlX3NpemU8ZGVjbHR5cGUoZmllbGRzKT46OnZhbHVlOyB9CiAg
|
1261
|
+
ICBWYWx1ZVN0b3JlKiBvcGVyYXRvcltdKHNpemVfdCBJbmRleCkgeyByZXR1
|
1262
|
+
cm4gcHRyc1tJbmRleF07IH0KfTsKCnRlbXBsYXRlPGNvbnN0IGNoYXIqIEtl
|
1263
|
+
eVN0cmluZywgdHlwZW5hbWUgUGFyc2VyPgp2b2lkIEtleVZhbHVlPEtleVN0
|
1264
|
+
cmluZyxQYXJzZXI+OjpTd2FwKFZhbHVlU3RvcmUqIFZTLCBQYXJzZXJQb29s
|
1265
|
+
JiBQb29sKSB7CiAgICBWYWx1ZTxQYXJzZXI+KiBkc3Qoc3RhdGljX2Nhc3Q8
|
1266
|
+
VmFsdWU8UGFyc2VyPio+KFZTKSk7CiAgICBzdGQ6OnN3YXAoZHN0LT52YWx1
|
1267
|
+
ZSwgc3RkOjpnZXQ8UGFyc2VyOjpQb29sOjpJbmRleD4oUG9vbC5WYWx1ZSkp
|
1268
|
+
OwogICAgR2l2ZShWUyk7Cn0KCnRlbXBsYXRlPGNvbnN0IGNoYXIqIEtleVN0
|
1269
|
+
cmluZywgdHlwZW5hbWUgUGFyc2VyPgp2b2lkIEtleUNvbnRhaW5lclZhbHVl
|
1270
|
+
PEtleVN0cmluZyxQYXJzZXI+OjpTd2FwKFZhbHVlU3RvcmUqIFZTLCBQYXJz
|
1271
|
+
ZXJQb29sJiBQb29sKQp7CiAgICBWYWx1ZTxQYXJzZXI+KiBkc3Qoc3RhdGlj
|
1272
|
+
X2Nhc3Q8VmFsdWU8UGFyc2VyPio+KFZTKSk7CiAgICBwLlN3YXAoZHN0LT52
|
1273
|
+
YWx1ZSk7CiAgICBHaXZlKFZTKTsKfQoKLy8gVGhlIFZhbHVlcyBjbGFzcyB1
|
1274
|
+
c2VkIGJ5IHRoZSB0ZW1wbGF0ZSBzaG91bGQgYmUgZGVyaXZlZCBmcm9tIE5h
|
1275
|
+
bWVsZXNzVmFsdWVzCi8vIGFuZCBpdCBhZGRzIHdheSB0byBhY2Nlc3MgdGhl
|
1276
|
+
IGZpZWxkcyB1c2luZyBzZW5zaWJseSBuYW1lZCBtZXRob2RzLgoKdGVtcGxh
|
1277
|
+
dGU8dHlwZW5hbWUgS2V5VmFsdWVzLCB0eXBlbmFtZSBWYWx1ZXM+CmNsYXNz
|
1278
|
+
IFBhcnNlT2JqZWN0IDogcHVibGljIFZhbHVlUGFyc2VyIHsKcHJpdmF0ZToK
|
1279
|
+
ICAgIEtleVZhbHVlcyBwYXJzZXJzOwogICAgVmFsdWVzIG91dDsKICAgIGlu
|
1280
|
+
dCBhY3RpdmF0aW5nLCBhY3RpdmU7CiAgICBlbnVtIFN0YXRlIHsKICAgICAg
|
1281
|
+
ICBOb3RTdGFydGVkLAogICAgICAgIFByZUtleSwKICAgICAgICBFeHBlY3RL
|
1282
|
+
ZXksCiAgICAgICAgUHJlQ29sb24sCiAgICAgICAgRXhwZWN0Q29sb24sCiAg
|
1283
|
+
ICAgICAgUHJlVmFsdWUsCiAgICAgICAgRXhwZWN0VmFsdWUsCiAgICAgICAg
|
1284
|
+
UHJlQ29tbWEsCiAgICAgICAgRXhwZWN0Q29tbWEKICAgIH07CiAgICBTdGF0
|
1285
|
+
ZSBzdGF0ZTsKCiAgICB2b2lkIHNldEFjdGl2YXRpbmcoY29uc3Qgc3RkOjpz
|
1286
|
+
dHJpbmcmIEluY29taW5nKSB7CiAgICAgICAgZm9yIChzaXplX3QgayA9IDA7
|
1287
|
+
IGsgPCBwYXJzZXJzLnNpemUoKTsgKytrKQogICAgICAgICAgICBpZiAoc3Ry
|
1288
|
+
Y21wKEluY29taW5nLmNfc3RyKCksIHBhcnNlcnMuS2V5VmFsdWUoayktPktl
|
1289
|
+
eSgpKSA9PSAwKSB7CiAgICAgICAgICAgICAgICBhY3RpdmF0aW5nID0gc3Rh
|
1290
|
+
dGljX2Nhc3Q8aW50PihrKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAg
|
1291
|
+
ICAgICAgICAgfQogICAgICAgIHRocm93IEludmFsaWRLZXk7CiAgICB9Cgog
|
1292
|
+
ICAgY29uc3QgY2hhciogY2hlY2tQYXNzZWQoY29uc3QgY2hhciogUHRyKSBu
|
1293
|
+
b2V4Y2VwdChmYWxzZSkgewogICAgICAgIGZvciAoc2l6ZV90IGsgPSAwOyBr
|
1294
|
+
IDwgb3V0LnNpemUoKTsgKytrKSB7CiAgICAgICAgICAgIFNjYW5uaW5nS2V5
|
1295
|
+
VmFsdWUqIHNrdiA9IHBhcnNlcnMuS2V5VmFsdWUoayk7CiAgICAgICAgICAg
|
1296
|
+
IFZhbHVlU3RvcmUqIHZzID0gb3V0W2tdOwogICAgICAgICAgICBpZiAoc2t2
|
1297
|
+
LT5SZXF1aXJlZCgpICYmICF2cy0+R2l2ZW4oKSkKICAgICAgICAgICAgICAg
|
1298
|
+
IHRocm93IFJlcXVpcmVkS2V5Tm90R2l2ZW47CiAgICAgICAgfQogICAgICAg
|
1299
|
+
IHN0YXRlID0gTm90U3RhcnRlZDsKICAgICAgICBhY3RpdmF0aW5nID0gLTE7
|
1300
|
+
CiAgICAgICAgYWN0aXZlID0gLTE7CiAgICAgICAgcmV0dXJuIHNldEZpbmlz
|
1301
|
+
aGVkKFB0cik7CiAgICB9CgpwdWJsaWM6CiAgICB0eXBlZGVmIGRlY2x0eXBl
|
1302
|
+
KG91dC5maWVsZHMpIFR5cGU7CgogICAgUGFyc2VPYmplY3QoKSA6IGFjdGl2
|
1303
|
+
YXRpbmcoLTEpLCBhY3RpdmUoLTEpLCBzdGF0ZShOb3RTdGFydGVkKSB7IH0K
|
1304
|
+
CiAgICBjb25zdCBjaGFyKiBQYXJzZShjb25zdCBjaGFyKiBCZWdpbiwgY29u
|
1305
|
+
c3QgY2hhciogRW5kLCBQYXJzZXJQb29sJiBQb29sKQogICAgICAgIG5vZXhj
|
1306
|
+
ZXB0KGZhbHNlKTsKCiAgICB2b2lkIFN3YXAoVHlwZSYgQWx0KSB7CiAgICAg
|
1307
|
+
ICAgc3RkOjpzd2FwKEFsdCwgb3V0LmZpZWxkcyk7CiAgICAgICAgb3V0LmZp
|
1308
|
+
ZWxkcyA9IFR5cGUoKTsKICAgIH0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIEtl
|
1309
|
+
eVZhbHVlcywgdHlwZW5hbWUgVmFsdWVzPgpjb25zdCBjaGFyKiBQYXJzZU9i
|
1310
|
+
amVjdDxLZXlWYWx1ZXMsVmFsdWVzPjo6UGFyc2UoCiAgICBjb25zdCBjaGFy
|
1311
|
+
KiBCZWdpbiwgY29uc3QgY2hhciogRW5kLCBQYXJzZXJQb29sJiBQb29sKSBu
|
1312
|
+
b2V4Y2VwdChmYWxzZSkKewogICAgY29uc3QgY2hhciogb3JpZ2luID0gQmVn
|
1313
|
+
aW47CiAgICB3aGlsZSAoQmVnaW4gIT0gRW5kKSB7CiAgICAgICAgc3dpdGNo
|
1314
|
+
IChzdGF0ZSkgewogICAgICAgIGNhc2UgTm90U3RhcnRlZDoKICAgICAgICAg
|
1315
|
+
ICAgLy8gRXhwZWN0ICd7JyBvbiB0aGUgZmlyc3QgY2FsbC4KICAgICAgICAg
|
1316
|
+
ICAgaWYgKCpCZWdpbiAhPSAneycpCiAgICAgICAgICAgICAgICB0aHJvdyBD
|
1317
|
+
b250ZXh0RXhjZXB0aW9uKEludmFsaWRPYmplY3RTdGFydCwgb3JpZ2luLCBC
|
1318
|
+
ZWdpbiwgRW5kKTsKICAgICAgICAgICAgc3RhdGUgPSBQcmVLZXk7CiAgICAg
|
1319
|
+
ICAgICAgICsrQmVnaW47CiAgICAgICAgY2FzZSBQcmVLZXk6CiAgICAgICAg
|
1320
|
+
ICAgIEJlZ2luID0gc2tpcFdoaXRlc3BhY2UoQmVnaW4sIEVuZCk7CiAgICAg
|
1321
|
+
ICAgICAgIGlmIChCZWdpbiA9PSBudWxscHRyIHx8ICEqQmVnaW4pCiAgICAg
|
1322
|
+
ICAgICAgICAgICByZXR1cm4gc2V0RmluaXNoZWQobnVsbHB0cik7CiAgICAg
|
1323
|
+
ICAgICAgIGlmICgqQmVnaW4gPT0gJ30nKQogICAgICAgICAgICAgICAgcmV0
|
1324
|
+
dXJuIGNoZWNrUGFzc2VkKCsrQmVnaW4pOwogICAgICAgICAgICBzdGF0ZSA9
|
1325
|
+
IEV4cGVjdEtleTsKICAgICAgICBjYXNlIEV4cGVjdEtleToKICAgICAgICAg
|
1326
|
+
ICAgQmVnaW4gPSBzdGQ6OmdldDxQYXJzZXJQb29sOjpTdHJpbmc+KFBvb2wu
|
1327
|
+
UGFyc2VyKS5QYXJzZSgKICAgICAgICAgICAgICAgIEJlZ2luLCBFbmQsIFBv
|
1328
|
+
b2wpOwogICAgICAgICAgICBpZiAoQmVnaW4gPT0gbnVsbHB0cikKICAgICAg
|
1329
|
+
ICAgICAgICAgIHJldHVybiBzZXRGaW5pc2hlZChudWxscHRyKTsKICAgICAg
|
1330
|
+
ICAgICAgc2V0QWN0aXZhdGluZyhzdGQ6OmdldDxQYXJzZXJQb29sOjpTdHJp
|
1331
|
+
bmc+KFBvb2wuVmFsdWUpKTsKICAgICAgICAgICAgc3RhdGUgPSBQcmVDb2xv
|
1332
|
+
bjsKICAgICAgICBjYXNlIFByZUNvbG9uOgogICAgICAgICAgICBCZWdpbiA9
|
1333
|
+
IHNraXBXaGl0ZXNwYWNlKEJlZ2luLCBFbmQpOwogICAgICAgICAgICBpZiAo
|
1334
|
+
QmVnaW4gPT0gbnVsbHB0ciB8fCAhKkJlZ2luKQogICAgICAgICAgICAgICAg
|
1335
|
+
cmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIpOwogICAgICAgICAgICBzdGF0
|
1336
|
+
ZSA9IEV4cGVjdENvbG9uOwogICAgICAgIGNhc2UgRXhwZWN0Q29sb246CiAg
|
1337
|
+
ICAgICAgICAgIGlmICgqQmVnaW4gIT0gJzonKQogICAgICAgICAgICAgICAg
|
1338
|
+
dGhyb3cgQ29udGV4dEV4Y2VwdGlvbihJbnZhbGlkVmFsdWVTZXBhcmF0b3Is
|
1339
|
+
IG9yaWdpbiwgQmVnaW4sIEVuZCk7CiAgICAgICAgICAgIHN0YXRlID0gUHJl
|
1340
|
+
VmFsdWU7CiAgICAgICAgICAgIGlmICgrK0JlZ2luID09IEVuZCkKICAgICAg
|
1341
|
+
ICAgICAgICAgIHJldHVybiBzZXRGaW5pc2hlZChudWxscHRyKTsKICAgICAg
|
1342
|
+
ICBjYXNlIFByZVZhbHVlOgogICAgICAgICAgICBCZWdpbiA9IHNraXBXaGl0
|
1343
|
+
ZXNwYWNlKEJlZ2luLCBFbmQpOwogICAgICAgICAgICBpZiAoQmVnaW4gPT0g
|
1344
|
+
bnVsbHB0ciB8fCAhKkJlZ2luKQogICAgICAgICAgICAgICAgcmV0dXJuIHNl
|
1345
|
+
dEZpbmlzaGVkKG51bGxwdHIpOwogICAgICAgICAgICBhY3RpdmUgPSBhY3Rp
|
1346
|
+
dmF0aW5nOwogICAgICAgICAgICBhY3RpdmF0aW5nID0gLTE7CiAgICAgICAg
|
1347
|
+
ICAgIHN0YXRlID0gRXhwZWN0VmFsdWU7CiAgICAgICAgY2FzZSBFeHBlY3RW
|
1348
|
+
YWx1ZToKICAgICAgICAgICAgQmVnaW4gPSBwYXJzZXJzLlNjYW5uZXIoYWN0
|
1349
|
+
aXZlLCBQb29sKS5QYXJzZShCZWdpbiwgRW5kLCBQb29sKTsKICAgICAgICAg
|
1350
|
+
ICAgaWYgKEJlZ2luID09IG51bGxwdHIpCiAgICAgICAgICAgICAgICByZXR1
|
1351
|
+
cm4gc2V0RmluaXNoZWQobnVsbHB0cik7CiAgICAgICAgICAgIHBhcnNlcnMu
|
1352
|
+
S2V5VmFsdWUoYWN0aXZlKS0+U3dhcChvdXRbYWN0aXZlXSwgUG9vbCk7CiAg
|
1353
|
+
ICAgICAgICAgIGFjdGl2ZSA9IC0xOwogICAgICAgICAgICBzdGF0ZSA9IFBy
|
1354
|
+
ZUNvbW1hOwogICAgICAgIGNhc2UgUHJlQ29tbWE6CiAgICAgICAgICAgIEJl
|
1355
|
+
Z2luID0gc2tpcFdoaXRlc3BhY2UoQmVnaW4sIEVuZCk7CiAgICAgICAgICAg
|
1356
|
+
IGlmIChCZWdpbiA9PSBudWxscHRyIHx8ICEqQmVnaW4pCiAgICAgICAgICAg
|
1357
|
+
ICAgICByZXR1cm4gc2V0RmluaXNoZWQobnVsbHB0cik7CiAgICAgICAgICAg
|
1358
|
+
IHN0YXRlID0gRXhwZWN0Q29tbWE7CiAgICAgICAgY2FzZSBFeHBlY3RDb21t
|
1359
|
+
YToKICAgICAgICAgICAgaWYgKCpCZWdpbiA9PSAnfScpCiAgICAgICAgICAg
|
1360
|
+
ICAgICByZXR1cm4gY2hlY2tQYXNzZWQoKytCZWdpbik7CiAgICAgICAgICAg
|
1361
|
+
IGlmICgqQmVnaW4gIT0gJywnKQogICAgICAgICAgICAgICAgdGhyb3cgQ29u
|
1362
|
+
dGV4dEV4Y2VwdGlvbihJbnZhbGlkS2V5U2VwYXJhdG9yLCBvcmlnaW4sIEJl
|
1363
|
+
Z2luLCBFbmQpOwogICAgICAgICAgICBzdGF0ZSA9IFByZUtleTsKICAgICAg
|
1364
|
+
ICAgICAgKytCZWdpbjsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gc2V0
|
1365
|
+
RmluaXNoZWQobnVsbHB0cik7Cn0K
|
1366
|
+
c6: |
|
1367
|
+
Y29uc3QgRXhjZXB0aW9uIHNwZWNqc29uOjpJbnZhbGlkS2V5KCJPYmplY3Qs
|
1368
|
+
IHVuZXhwZWN0ZWQga2V5LiIpOwpjb25zdCBFeGNlcHRpb24gc3BlY2pzb246
|
1369
|
+
OlJlcXVpcmVkS2V5Tm90R2l2ZW4oIk9iamVjdCwgcmVxdWlyZWQga2V5IG5v
|
1370
|
+
dCBnaXZlbi4iKTsKY29uc3QgRXhjZXB0aW9uIHNwZWNqc29uOjpJbnZhbGlk
|
1371
|
+
T2JqZWN0U3RhcnQoIkV4cGVjdGVkICd7JyIpOwpjb25zdCBFeGNlcHRpb24g
|
1372
|
+
c3BlY2pzb246OkludmFsaWRLZXlTZXBhcmF0b3IoIk9iamVjdCwgZXhwZWN0
|
1373
|
+
ZWQgJywnIik7CmNvbnN0IEV4Y2VwdGlvbiBzcGVjanNvbjo6SW52YWxpZFZh
|
1374
|
+
bHVlU2VwYXJhdG9yKCJPYmplY3QsIGV4cGVjdGVkICc6JyIpOwoKc3BlY2pz
|
1375
|
+
b246OlNjYW5uaW5nS2V5VmFsdWU6On5TY2FubmluZ0tleVZhbHVlKCkgeyB9
|
1376
|
+
Cgp2b2lkIHNwZWNqc29uOjpTY2FubmluZ0tleVZhbHVlOjpHaXZlKFZhbHVl
|
1377
|
+
U3RvcmUqIFZTKSB7CiAgICBnaXZlbiA9IGZhbHNlOwogICAgVlMtPkdpdmUo
|
1378
|
+
KTsKfQoKdm9pZCBzcGVjanNvbjo6VmFsdWVTdG9yZTo6R2l2ZSgpIHsKICAg
|
1379
|
+
IGdpdmVuID0gdHJ1ZTsKfQo=
|
1380
|
+
c7: |
|
1381
|
+
Y2xhc3MgUGFyc2VyUG9vbCB7CnB1YmxpYzoKICAgIFBhcnNlclBvb2woKSB7
|
1382
|
+
IH0KICAgIFBhcnNlclBvb2woY29uc3QgUGFyc2VyUG9vbCYpID0gZGVsZXRl
|
1383
|
+
OwogICAgUGFyc2VyUG9vbCYgb3BlcmF0b3I9KGNvbnN0IFBhcnNlclBvb2wm
|
1384
|
+
KSA9IGRlbGV0ZTsKICAgIHZpcnR1YWwgflBhcnNlclBvb2woKTsKCiAgICBz
|
1385
|
+
dGQ6OnZlY3RvcjxjaGFyPiBidWZmZXI7CgogICAgZW51bSBQYXJzZXJzIHsg
|
1386
|
+
UG9vbEluZGV4ZXMgfTsKICAgIHN0ZDo6dHVwbGU8UG9vbFBhcnNlcnM+IFBh
|
1387
|
+
cnNlcjsKICAgIHN0ZDo6dHVwbGU8UG9vbFBhcnNlclR5cGVzPiBWYWx1ZTsK
|
1388
|
+
CiAgICBpbmxpbmUgY29uc3QgY2hhciogc2tpcFdoaXRlc3BhY2UoY29uc3Qg
|
1389
|
+
Y2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCkgewogICAgICAgIHJldHVy
|
1390
|
+
biBzdGQ6OmdldDwwPihQYXJzZXIpLnNraXBXaGl0ZXNwYWNlKEJlZ2luLCBF
|
1391
|
+
bmQpOwogICAgfQogICAgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlKGNvbnN0
|
1392
|
+
IGNoYXIgQykgewogICAgICAgIHJldHVybiBzdGQ6OmdldDwwPihQYXJzZXIp
|
1393
|
+
LmlzV2hpdGVzcGFjZShDKTsKICAgIH0KfTsK
|
1394
|
+
c8: 'c3BlY2pzb246OlBhcnNlclBvb2w6On5QYXJzZXJQb29sKCkgeyB9Cg==
|
1395
|
+
|
1396
|
+
'
|
1397
|
+
c9: |
|
1398
|
+
Y2xhc3MgVmFsdWVQYXJzZXIgewpwcm90ZWN0ZWQ6CiAgICBib29sIGZpbmlz
|
1399
|
+
aGVkOwogICAgY29uc3QgY2hhciogc2V0RmluaXNoZWQoY29uc3QgY2hhciog
|
1400
|
+
RW5kcHRyLCBQYXJzZXJQb29sJiBQb29sKTsKICAgIGNvbnN0IGNoYXIqIHNl
|
1401
|
+
dEZpbmlzaGVkKGNvbnN0IGNoYXIqIEVuZHB0cik7CgpwdWJsaWM6CiAgICBW
|
1402
|
+
YWx1ZVBhcnNlcigpIDogZmluaXNoZWQodHJ1ZSkgeyB9CiAgICB2aXJ0dWFs
|
1403
|
+
IH5WYWx1ZVBhcnNlcigpOwoKICAgIGJvb2wgRmluaXNoZWQoKSBjb25zdCB7
|
1404
|
+
IHJldHVybiBmaW5pc2hlZDsgfQogICAgLy8gUmV0dXJucyBudWxscHRyIGlm
|
1405
|
+
IG5vdCBmaW5pc2hlZCAocmVhY2hlZCBlbmQpIG9yIHBvaW50ZXIgd2hlcmUg
|
1406
|
+
ZW5kZWQuCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIFBhcnNlKAogICAgICAg
|
1407
|
+
IGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNlclBv
|
1408
|
+
b2wmIFBvb2wpCiAgICAgICAgbm9leGNlcHQoZmFsc2UpID0gMDsKCiAgICBj
|
1409
|
+
b25zdCBjaGFyKiBza2lwV2hpdGVzcGFjZShjb25zdCBjaGFyKiBCZWdpbiwg
|
1410
|
+
Y29uc3QgY2hhciogRW5kKTsKICAgIGlubGluZSBib29sIGlzV2hpdGVzcGFj
|
1411
|
+
ZShjb25zdCBjaGFyIEMpIHsKICAgICAgICByZXR1cm4gQyA9PSAnICcgfHwg
|
1412
|
+
QyA9PSAnXHg5JyB8fCBDID09ICdceEEnIHx8IEMgPT0gJ1x4RCc7CiAgICB9
|
1413
|
+
Cn07Cg==
|
1414
|
+
c10: |
|
1415
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlZhbHVlUGFyc2VyOjpzZXRGaW5pc2hl
|
1416
|
+
ZCgKICAgIGNvbnN0IGNoYXIqIEVuZHB0ciwgUGFyc2VyUG9vbCYgUG9vbCkK
|
1417
|
+
ewogICAgZmluaXNoZWQgPSBFbmRwdHIgIT0gbnVsbHB0cjsKICAgIGlmIChm
|
1418
|
+
aW5pc2hlZCAmJiAhUG9vbC5idWZmZXIuZW1wdHkoKSkKICAgICAgICBQb29s
|
1419
|
+
LmJ1ZmZlci5yZXNpemUoMCk7CiAgICByZXR1cm4gRW5kcHRyOwp9Cgpjb25z
|
1420
|
+
dCBjaGFyKiBzcGVjanNvbjo6VmFsdWVQYXJzZXI6OnNldEZpbmlzaGVkKGNv
|
1421
|
+
bnN0IGNoYXIqIEVuZHB0cikgewogICAgZmluaXNoZWQgPSBFbmRwdHIgIT0g
|
1422
|
+
bnVsbHB0cjsKICAgIHJldHVybiBFbmRwdHI7Cn0KCmNvbnN0IGNoYXIqIHNw
|
1423
|
+
ZWNqc29uOjpWYWx1ZVBhcnNlcjo6c2tpcFdoaXRlc3BhY2UoCiAgICBjb25z
|
1424
|
+
dCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciogRW5kKQp7CiAgICB3aGlsZSAo
|
1425
|
+
QmVnaW4gIT0gRW5kICYmIGlzV2hpdGVzcGFjZSgqQmVnaW4pKQogICAgICAg
|
1426
|
+
ICsrQmVnaW47CiAgICByZXR1cm4gKEJlZ2luICE9IEVuZCkgPyBCZWdpbiA6
|
1427
|
+
IG51bGxwdHI7Cn0KCnNwZWNqc29uOjpWYWx1ZVBhcnNlcjo6flZhbHVlUGFy
|
1428
|
+
c2VyKCkgeyB9Cg==
|
1429
|
+
c11: |
|
1430
|
+
ZXh0ZXJuIGNvbnN0IEV4Y2VwdGlvbiBJbnZhbGlkSW50OwpleHRlcm4gY29u
|
1431
|
+
c3QgRXhjZXB0aW9uIEludE91dHNpZGVSYW5nZTsKCnRlbXBsYXRlPHR5cGVu
|
1432
|
+
YW1lIFQsIGludG1heF90IE1pbmltdW0sIHVpbnRtYXhfdCBNYXhpbXVtPgpU
|
1433
|
+
IGNvbnZlcnRfdG9faW50ZWdlcihjb25zdCBjaGFyKiBCZWdpbiwgY2hhcioq
|
1434
|
+
IGVuZCkgbm9leGNlcHQoZmFsc2UpIHsKICAgIGVycm5vID0gMDsKICAgIGlm
|
1435
|
+
IGNvbnN0ZXhwciAoTWluaW11bSA8IDApIHsKICAgICAgICBpbnRtYXhfdCBv
|
1436
|
+
dXQgPSBzdHJ0b2ltYXgoQmVnaW4sIGVuZCwgMTApOwogICAgICAgIGlmIChl
|
1437
|
+
cnJubyA9PSBFUkFOR0UpCiAgICAgICAgICAgIHRocm93IEludE91dHNpZGVS
|
1438
|
+
YW5nZTsKICAgICAgICBpZiAob3V0IDwgTWluaW11bSB8fCAoMCA8IG91dCAm
|
1439
|
+
JiBNYXhpbXVtIDwgb3V0KSkKICAgICAgICAgICAgdGhyb3cgSW50T3V0c2lk
|
1440
|
+
ZVJhbmdlOwogICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihvdXQpOwog
|
1441
|
+
ICAgfSBlbHNlIHsKICAgICAgICBpZiAoKkJlZ2luID09ICctJykKICAgICAg
|
1442
|
+
ICAgICAgdGhyb3cgSW50T3V0c2lkZVJhbmdlOyAvLyBBdm9pZCByZXR1cm5p
|
1443
|
+
bmcgbmVnYXRpb24gb2YgdmFsdWUuCiAgICAgICAgdWludG1heF90IG91dCA9
|
1444
|
+
IHN0cnRvdW1heChCZWdpbiwgZW5kLCAxMCk7CiAgICAgICAgaWYgKGVycm5v
|
1445
|
+
ID09IEVSQU5HRSkKICAgICAgICAgICAgdGhyb3cgSW50T3V0c2lkZVJhbmdl
|
1446
|
+
OwogICAgICAgIGlmIChvdXQgPCBNaW5pbXVtIHx8IE1heGltdW0gPCBvdXQp
|
1447
|
+
CiAgICAgICAgICAgIHRocm93IEludE91dHNpZGVSYW5nZTsKICAgICAgICBy
|
1448
|
+
ZXR1cm4gc3RhdGljX2Nhc3Q8VD4ob3V0KTsKICAgIH0KfQoKdGVtcGxhdGU8
|
1449
|
+
dHlwZW5hbWUgVCwgaW50bWF4X3QgTWluaW11bSwgdWludG1heF90IE1heGlt
|
1450
|
+
dW0+CmNvbnN0IGNoYXIqIHBhcnNlX2ludGVnZXIoVCYgT3V0LCBjb25zdCBj
|
1451
|
+
aGFyKiBCZWdpbiwgY29uc3QgY2hhciogRW5kLAogICAgc3RkOjp2ZWN0b3I8
|
1452
|
+
Y2hhcj4mIEJ1ZmZlciwgYm9vbCBGaW5pc2hlZCkKICAgIG5vZXhjZXB0KGZh
|
1453
|
+
bHNlKQp7CiAgICBjaGFyKiBlbmQgPSBudWxscHRyOwogICAgaWYgKEZpbmlz
|
1454
|
+
aGVkKSB7CiAgICAgICAgT3V0ID0gY29udmVydF90b19pbnRlZ2VyPFQsTWlu
|
1455
|
+
aW11bSxNYXhpbXVtPihCZWdpbiwgJmVuZCk7CiAgICAgICAgaWYgKGVuZCA9
|
1456
|
+
PSBCZWdpbikgewogICAgICAgICAgICBpZiAoQmVnaW4gPT0gRW5kKQogICAg
|
1457
|
+
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgIC8vIFVu
|
1458
|
+
bGVzcyBvbmx5IHNpZ24gZml0LCB0aHJvdy4KICAgICAgICAgICAgaWYgKEJl
|
1459
|
+
Z2luICsgMSAhPSBFbmQgfHwgKCpCZWdpbiAhPSAnLScgJiYgKkJlZ2luICE9
|
1460
|
+
ICcrJykpCiAgICAgICAgICAgICAgICB0aHJvdyBJbnZhbGlkSW50OwogICAg
|
1461
|
+
ICAgIH0gZWxzZSBpZiAoZW5kICE9IEVuZCkKICAgICAgICAgICAgcmV0dXJu
|
1462
|
+
IGVuZDsgLy8gR29vZCB1cCB0byB0aGlzLgogICAgICAgIHdoaWxlIChCZWdp
|
1463
|
+
biAhPSBFbmQpCiAgICAgICAgICAgIEJ1ZmZlci5wdXNoX2JhY2soKkJlZ2lu
|
1464
|
+
KyspOwogICAgICAgIHJldHVybiBudWxscHRyOwogICAgfQogICAgLy8gU3Rh
|
1465
|
+
cnQgb2YgdGhlIG51bWJlciBpcyBpbiBidWZmZXIuIElucHV0IGlzIG51bGwt
|
1466
|
+
dGVybWluYXRlZC4KICAgIHdoaWxlICgoJzAnIDw9ICpCZWdpbiAmJiAqQmVn
|
1467
|
+
aW4gPD0gJzknKSB8fCAqQmVnaW4gPT0gJy0nIHx8ICpCZWdpbiA9PSAnKycp
|
1468
|
+
CiAgICAgICAgQnVmZmVyLnB1c2hfYmFjaygqQmVnaW4rKyk7CiAgICBpZiAo
|
1469
|
+
QmVnaW4gPT0gRW5kKSAvLyBDb250aW51ZXMgb24gYW5kIG9uPwogICAgICAg
|
1470
|
+
IHJldHVybiBudWxscHRyOwogICAgQnVmZmVyLnB1c2hfYmFjaygwKTsKICAg
|
1471
|
+
IE91dCA9IGNvbnZlcnRfdG9faW50ZWdlcjxULE1pbmltdW0sTWF4aW11bT4o
|
1472
|
+
JkJ1ZmZlci5mcm9udCgpLCAmZW5kKTsKICAgIC8vIFNlcGFyYXRvciBzY2Fu
|
1473
|
+
IHdpbGwgdGhyb3cgaWYgdGhlIHN0cmluZyBpbiBzb3VyY2UgaXMgbm90IGEg
|
1474
|
+
bnVtYmVyLgogICAgLy8gUmVxdWlyZSB0aGF0IGFsbCBjaGFycyBhcmUgdGhl
|
1475
|
+
IG51bWJlciBhcyB0aGVyZSB3YXMgbm8gc2VwYXJhdG9yIGNvcGllZC4KICAg
|
1476
|
+
IGlmIChlbmQgIT0gJkJ1ZmZlci5iYWNrKCkpCiAgICAgICAgdGhyb3cgSW52
|
1477
|
+
YWxpZEludDsKICAgIHJldHVybiBCZWdpbjsKfQo=
|
1478
|
+
c12: |
|
1479
|
+
Y29uc3QgRXhjZXB0aW9uIHNwZWNqc29uOjpJbnZhbGlkSW50KCJJbnZhbGlk
|
1480
|
+
IGludGVnZXIuIik7CmNvbnN0IEV4Y2VwdGlvbiBzcGVjanNvbjo6SW50T3V0
|
1481
|
+
c2lkZVJhbmdlKCJJbnRlZ2VyIG91dHNpZGUgcmFuZ2UuIik7Cg==
|
1482
|
+
c13: |
|
1483
|
+
dGVtcGxhdGU8dHlwZW5hbWUgUGFyc2VyPgpjbGFzcyBQYXJzZUNvbnRhaW5l
|
1484
|
+
clN0ZFZlY3RvciA6IHB1YmxpYyBQYXJzZUNvbnRhaW5lckFycmF5PHN0ZDo6
|
1485
|
+
dmVjdG9yPHR5cGVuYW1lIFBhcnNlcjo6VHlwZT4sIFBhcnNlcj4geyB9Owo=
|
1486
|
+
c14: |
|
1487
|
+
dGVtcGxhdGU8dHlwZW5hbWUgUGFyc2VyPgpjbGFzcyBQYXJzZUNvbnRhaW5l
|
1488
|
+
clN0ZFZlY3RvckVxU2l6ZSA6IHB1YmxpYyBQYXJzZUNvbnRhaW5lckFycmF5
|
1489
|
+
PHN0ZDo6dmVjdG9yPHR5cGVuYW1lIFBhcnNlcjo6VHlwZT4sIFBhcnNlciwg
|
1490
|
+
dHJ1ZT4geyB9Owo=
|
1491
|
+
c15: |
|
1492
|
+
Y2xhc3MgUGFyc2VCb29sIDogcHVibGljIFZhbHVlUGFyc2VyIHsKcHVibGlj
|
1493
|
+
OgogICAgdHlwZWRlZiBib29sIFR5cGU7CiAgICBlbnVtIFBvb2wgeyBJbmRl
|
1494
|
+
eCA9IFBvb2xJbmRleCB9OwoKICAgIGNvbnN0IGNoYXIqIFBhcnNlKGNvbnN0
|
1495
|
+
IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNlclBvb2wmIFBv
|
1496
|
+
b2wpCiAgICAgICAgbm9leGNlcHQoZmFsc2UpOwp9Owo=
|
1497
|
+
c16: |
|
1498
|
+
c3RhdGljIGNvbnN0IEV4Y2VwdGlvbiBJbnZhbGlkQm9vbCgiSW52YWxpZCBC
|
1499
|
+
b29sZWFuLiIpOwoKY29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlQm9vbDo6
|
1500
|
+
UGFyc2UoCiAgICBjb25zdCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciogRW5k
|
1501
|
+
LCBQYXJzZXJQb29sJiBQb29sKSBub2V4Y2VwdChmYWxzZSkKewogICAgVHlw
|
1502
|
+
ZSYgb3V0KHN0ZDo6Z2V0PFBhcnNlQm9vbDo6UG9vbDo6SW5kZXg+KFBvb2wu
|
1503
|
+
VmFsdWUpKTsKICAgIGlmICghZmluaXNoZWQpIHsKICAgICAgICBvdXQgPSBQ
|
1504
|
+
b29sLmJ1ZmZlci5mcm9udCgpID09ICd0JzsKICAgIH0gZWxzZSB7CiAgICAg
|
1505
|
+
ICAgaWYgKCEqQmVnaW4pCiAgICAgICAgICAgIHJldHVybiBzZXRGaW5pc2hl
|
1506
|
+
ZChudWxscHRyLCBQb29sKTsKICAgICAgICBlbHNlIGlmICgqQmVnaW4gPT0g
|
1507
|
+
J3QnKSB7CiAgICAgICAgICAgIG91dCA9IHRydWU7IC8vIFBvc3NpYmx5Lgog
|
1508
|
+
ICAgICAgIH0gZWxzZSBpZiAoKkJlZ2luID09ICdmJykgewogICAgICAgICAg
|
1509
|
+
ICBvdXQgPSBmYWxzZTsgLy8gUG9zc2libHkuCiAgICAgICAgfSBlbHNlCiAg
|
1510
|
+
ICAgICAgICAgIHRocm93IEludmFsaWRCb29sOwogICAgICAgIFBvb2wuYnVm
|
1511
|
+
ZmVyLnB1c2hfYmFjaygqQmVnaW4rKyk7CiAgICB9CiAgICBpZiAoUG9vbC5i
|
1512
|
+
dWZmZXIuc2l6ZSgpID09IDEpIHsKICAgICAgICBpZiAoQmVnaW4gPT0gRW5k
|
1513
|
+
KQogICAgICAgICAgICByZXR1cm4gc2V0RmluaXNoZWQobnVsbHB0ciwgUG9v
|
1514
|
+
bCk7CiAgICAgICAgaWYgKCpCZWdpbiAhPSAob3V0ID8gJ3InIDogJ2EnKSkK
|
1515
|
+
ICAgICAgICAgICAgdGhyb3cgSW52YWxpZEJvb2w7CiAgICAgICAgUG9vbC5i
|
1516
|
+
dWZmZXIucHVzaF9iYWNrKCpCZWdpbisrKTsKICAgIH0KICAgIGlmIChQb29s
|
1517
|
+
LmJ1ZmZlci5zaXplKCkgPT0gMikgewogICAgICAgIGlmIChCZWdpbiA9PSBF
|
1518
|
+
bmQpCiAgICAgICAgICAgIHJldHVybiBzZXRGaW5pc2hlZChudWxscHRyLCBQ
|
1519
|
+
b29sKTsKICAgICAgICBpZiAoKkJlZ2luICE9IChvdXQgPyAndScgOiAnbCcp
|
1520
|
+
KQogICAgICAgICAgICB0aHJvdyBJbnZhbGlkQm9vbDsKICAgICAgICBQb29s
|
1521
|
+
LmJ1ZmZlci5wdXNoX2JhY2soKkJlZ2luKyspOwogICAgfQogICAgaWYgKFBv
|
1522
|
+
b2wuYnVmZmVyLnNpemUoKSA9PSAzKSB7CiAgICAgICAgaWYgKEJlZ2luID09
|
1523
|
+
IEVuZCkKICAgICAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIs
|
1524
|
+
IFBvb2wpOwogICAgICAgIGlmICgqQmVnaW4gIT0gKG91dCA/ICdlJyA6ICdz
|
1525
|
+
JykpCiAgICAgICAgICAgIHRocm93IEludmFsaWRCb29sOwogICAgICAgIGlm
|
1526
|
+
IChvdXQpCiAgICAgICAgICAgIHJldHVybiBzZXRGaW5pc2hlZChCZWdpbiAr
|
1527
|
+
IDEsIFBvb2wpOwogICAgICAgIFBvb2wuYnVmZmVyLnB1c2hfYmFjaygqQmVn
|
1528
|
+
aW4rKyk7CiAgICB9CiAgICAvLyBJZiB3ZSBnb3QgdGhpcyBmYXIsIHdlIGFy
|
1529
|
+
ZSBjb21wYXJpbmcgdG8gbGFzdCBjaGFyYWN0ZXIgb2YgImZhbHNlIi4KICAg
|
1530
|
+
IGlmIChCZWdpbiA9PSBFbmQpCiAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVk
|
1531
|
+
KG51bGxwdHIsIFBvb2wpOwogICAgaWYgKCpCZWdpbiAhPSAnZScpCiAgICAg
|
1532
|
+
ICAgdGhyb3cgSW52YWxpZEJvb2w7CiAgICByZXR1cm4gc2V0RmluaXNoZWQo
|
1533
|
+
QmVnaW4gKyAxLCBQb29sKTsKICAgIC8vIElmIHRoZXJlIGlzIGdhcmJhZ2Ug
|
1534
|
+
YWZ0ZXJ3YXJkcywgaGlnaGVyIGxldmVsIHBhcnNlciB3aWxsIGZpbmQgaXQu
|
1535
|
+
Cn0K
|
1536
|
+
c17: |
|
1537
|
+
Y2xhc3MgUGFyc2VEb3VibGUgOiBwdWJsaWMgVmFsdWVQYXJzZXIgewpwdWJs
|
1538
|
+
aWM6CiAgICB0eXBlZGVmIGRvdWJsZSBUeXBlOwogICAgZW51bSBQb29sIHsg
|
1539
|
+
SW5kZXggPSBQb29sSW5kZXggfTsKCiAgICBjb25zdCBjaGFyKiBQYXJzZShj
|
1540
|
+
b25zdCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciogRW5kLCBQYXJzZXJQb29s
|
1541
|
+
JiBQb29sKQogICAgICAgIG5vZXhjZXB0KGZhbHNlKTsKfTsK
|
1542
|
+
c18: |
|
1543
|
+
c3RhdGljIGNvbnN0IEV4Y2VwdGlvbiBJbnZhbGlkRG91YmxlKCJJbnZhbGlk
|
1544
|
+
IGRvdWJsZS4iKTsKCmNvbnN0IGNoYXIqIHNwZWNqc29uOjpQYXJzZURvdWJs
|
1545
|
+
ZTo6UGFyc2UoCiAgICBjb25zdCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciog
|
1546
|
+
RW5kLCBQYXJzZXJQb29sJiBQb29sKSBub2V4Y2VwdChmYWxzZSkKewogICAg
|
1547
|
+
VHlwZSYgb3V0KHN0ZDo6Z2V0PFBhcnNlRG91YmxlOjpQb29sOjpJbmRleD4o
|
1548
|
+
UG9vbC5WYWx1ZSkpOwogICAgY2hhciogZW5kID0gbnVsbHB0cjsKICAgIGlm
|
1549
|
+
IChmaW5pc2hlZCkgewogICAgICAgIC8vIEFzc3VtZXMgTENfTlVNRVJJQyBp
|
1550
|
+
cyAiQyIgb3IgY2xvc2UgZW5vdWdoLgogICAgICAgIG91dCA9IHN0cnRvZChC
|
1551
|
+
ZWdpbiwgJmVuZCk7CiAgICAgICAgaWYgKGVuZCAhPSBCZWdpbiAmJiBlbmQg
|
1552
|
+
IT0gRW5kICYmICEoKmVuZCA9PSAnZScgfHwgKmVuZCA9PSAnRScpKSB7CiAg
|
1553
|
+
ICAgICAgICAgIC8vIERldGVjdCBoZXhhZGVjaW1hbCBzaWduaWZpY2FuZCBh
|
1554
|
+
bmQgZXhwb25lbnQsIElORiwgTkFOLiAiLCIKICAgICAgICAgICAgLy8gVGhp
|
1555
|
+
cyBibG9jayBpcyBhYm91dCA2JSBvZiBwYXJzaW5nIHRpbWUgaWYgeW91IHRv
|
1556
|
+
bGVyYXRlIHRoZSBhYm92ZS4KICAgICAgICAgICAgd2hpbGUgKEJlZ2luICE9
|
1557
|
+
IGVuZCAmJgogICAgICAgICAgICAgICAgKCgnMCcgPD0gKkJlZ2luICYmICpC
|
1558
|
+
ZWdpbiA8PSAnOScpIHx8CiAgICAgICAgICAgICAgICAqQmVnaW4gPT0gJy0n
|
1559
|
+
IHx8ICpCZWdpbiA9PSAnKycgfHwgKkJlZ2luID09ICcuJyB8fAogICAgICAg
|
1560
|
+
ICAgICAgICAgKkJlZ2luID09ICdlJyB8fCAqQmVnaW4gPT0gJ0UnKSkKICAg
|
1561
|
+
ICAgICAgICAgICAgICAgICArK0JlZ2luOwogICAgICAgICAgICBpZiAoQmVn
|
1562
|
+
aW4gIT0gZW5kKQogICAgICAgICAgICAgICAgdGhyb3cgSW52YWxpZERvdWJs
|
1563
|
+
ZTsKICAgICAgICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKGVuZCk7IC8vIEdv
|
1564
|
+
b2QgdXAgdG8gdGhpcy4KICAgICAgICB9CiAgICAgICAgLy8gQ29weSBnb29k
|
1565
|
+
IGNoYXJzIHRvIGJ1ZmZlci4gRWl0aGVyIGVuZCBjdXQgb2ZmIG9yIGludmFs
|
1566
|
+
aWQuCiAgICAgICAgd2hpbGUgKCgnMCcgPD0gKkJlZ2luICYmICpCZWdpbiA8
|
1567
|
+
PSAnOScpIHx8ICpCZWdpbiA9PSAnLicgfHwKICAgICAgICAgICAgKkJlZ2lu
|
1568
|
+
ID09ICdlJyB8fCAqQmVnaW4gPT0gJ0UnIHx8CiAgICAgICAgICAgICpCZWdp
|
1569
|
+
biA9PSAnLScgfHwgKkJlZ2luID09ICcrJykKICAgICAgICAgICAgICAgIFBv
|
1570
|
+
b2wuYnVmZmVyLnB1c2hfYmFjaygqQmVnaW4rKyk7CiAgICAgICAgaWYgKEJl
|
1571
|
+
Z2luICE9IEVuZCkgLy8gRGlkIG5vdCByZWFjaCBlbmQgb2YgYnVmZmVyLCBo
|
1572
|
+
ZW5jZSBpbnZhbGlkLgogICAgICAgICAgICB0aHJvdyBJbnZhbGlkRG91Ymxl
|
1573
|
+
OwogICAgICAgIHJldHVybiBzZXRGaW5pc2hlZChudWxscHRyLCBQb29sKTsK
|
1574
|
+
ICAgIH0KICAgIC8vIFN0YXJ0IG9mIHRoZSBudW1iZXIgaXMgaW4gYnVmZmVy
|
1575
|
+
LiBJbnB1dCBpcyBudWxsLXRlcm1pbmF0ZWQuCiAgICB3aGlsZSAoKCcwJyA8
|
1576
|
+
PSAqQmVnaW4gJiYgKkJlZ2luIDw9ICc5JykgfHwgKkJlZ2luID09ICcuJyB8
|
1577
|
+
fAogICAgICAgICpCZWdpbiA9PSAnZScgfHwgKkJlZ2luID09ICdFJyB8fAog
|
1578
|
+
ICAgICAgICpCZWdpbiA9PSAnLScgfHwgKkJlZ2luID09ICcrJykKICAgICAg
|
1579
|
+
ICAgICAgUG9vbC5idWZmZXIucHVzaF9iYWNrKCpCZWdpbisrKTsKICAgIGlm
|
1580
|
+
IChCZWdpbiA9PSBFbmQpIC8vIENvbnRpbnVlcyBvbiBhbmQgb24/CiAgICAg
|
1581
|
+
ICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIsIFBvb2wpOwogICAgUG9v
|
1582
|
+
bC5idWZmZXIucHVzaF9iYWNrKDApOwogICAgb3V0ID0gc3RydG9kKCZQb29s
|
1583
|
+
LmJ1ZmZlci5mcm9udCgpLCAmZW5kKTsKICAgIC8vIFNlcGFyYXRvciBzY2Fu
|
1584
|
+
IHdpbGwgdGhyb3cgaWYgdGhlIHN0cmluZyBpbiBzb3VyY2UgaXMgbm90IGEg
|
1585
|
+
bnVtYmVyLgogICAgLy8gUmVxdWlyZSB0aGF0IGFsbCBjaGFycyBhcmUgdGhl
|
1586
|
+
IG51bWJlciBhcyB0aGVyZSB3YXMgbm8gc2VwYXJhdG9yIGNvcGllZC4KICAg
|
1587
|
+
IGlmIChlbmQgIT0gJlBvb2wuYnVmZmVyLmJhY2soKSkKICAgICAgICB0aHJv
|
1588
|
+
dyBJbnZhbGlkRG91YmxlOwogICAgcmV0dXJuIHNldEZpbmlzaGVkKEJlZ2lu
|
1589
|
+
LCBQb29sKTsKfQo=
|
1590
|
+
c19: |
|
1591
|
+
Y2xhc3MgUGFyc2VGbG9hdCA6IHB1YmxpYyBWYWx1ZVBhcnNlciB7CnB1Ymxp
|
1592
|
+
YzoKICAgIHR5cGVkZWYgZmxvYXQgVHlwZTsKICAgIGVudW0gUG9vbCB7IElu
|
1593
|
+
ZGV4ID0gUG9vbEluZGV4IH07CgogICAgY29uc3QgY2hhciogUGFyc2UoY29u
|
1594
|
+
c3QgY2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCwgUGFyc2VyUG9vbCYg
|
1595
|
+
UG9vbCkKICAgICAgICBub2V4Y2VwdChmYWxzZSk7Cn07Cg==
|
1596
|
+
c20: |
|
1597
|
+
c3RhdGljIGNvbnN0IEV4Y2VwdGlvbiBJbnZhbGlkRmxvYXQoIkludmFsaWQg
|
1598
|
+
ZmxvYXQuIik7Cgpjb25zdCBjaGFyKiBzcGVjanNvbjo6UGFyc2VGbG9hdDo6
|
1599
|
+
UGFyc2UoCiAgICBjb25zdCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciogRW5k
|
1600
|
+
LCBQYXJzZXJQb29sJiBQb29sKSBub2V4Y2VwdChmYWxzZSkKewogICAgVHlw
|
1601
|
+
ZSYgb3V0KHN0ZDo6Z2V0PFBhcnNlRmxvYXQ6OlBvb2w6OkluZGV4PihQb29s
|
1602
|
+
LlZhbHVlKSk7CiAgICBjaGFyKiBlbmQgPSBudWxscHRyOwogICAgaWYgKGZp
|
1603
|
+
bmlzaGVkKSB7CiAgICAgICAgLy8gQXNzdW1lcyBMQ19OVU1FUklDIGlzICJD
|
1604
|
+
IiBvciBjbG9zZSBlbm91Z2guCiAgICAgICAgb3V0ID0gc3RydG9mKEJlZ2lu
|
1605
|
+
LCAmZW5kKTsKICAgICAgICAvLyBJdCBpcyBwb3NzaWJsZSB0aGUgZXhwb25l
|
1606
|
+
bnQgaXMgaW4gbmV4dCBidWZmZXIuCiAgICAgICAgaWYgKGVuZCAhPSBCZWdp
|
1607
|
+
biAmJiBlbmQgIT0gRW5kICYmICEoKmVuZCA9PSAnZScgfHwgKmVuZCA9PSAn
|
1608
|
+
RScpKSB7CiAgICAgICAgICAgIC8vIERldGVjdCBoZXhhZGVjaW1hbCBzaWdu
|
1609
|
+
aWZpY2FuZCBhbmQgZXhwb25lbnQsIElORiwgTkFOLiAiLCIKICAgICAgICAg
|
1610
|
+
ICAgLy8gVGhpcyBibG9jayBpcyBhYm91dCA2JSBvZiBwYXJzaW5nIHRpbWUg
|
1611
|
+
aWYgeW91IHRvbGVyYXRlIHRoZSBhYm92ZS4KICAgICAgICAgICAgd2hpbGUg
|
1612
|
+
KEJlZ2luICE9IGVuZCAmJgogICAgICAgICAgICAgICAgKCgnMCcgPD0gKkJl
|
1613
|
+
Z2luICYmICpCZWdpbiA8PSAnOScpIHx8CiAgICAgICAgICAgICAgICAqQmVn
|
1614
|
+
aW4gPT0gJy0nIHx8ICpCZWdpbiA9PSAnKycgfHwgKkJlZ2luID09ICcuJyB8
|
1615
|
+
fAogICAgICAgICAgICAgICAgKkJlZ2luID09ICdlJyB8fCAqQmVnaW4gPT0g
|
1616
|
+
J0UnKSkKICAgICAgICAgICAgICAgICAgICArK0JlZ2luOwogICAgICAgICAg
|
1617
|
+
ICBpZiAoQmVnaW4gIT0gZW5kKQogICAgICAgICAgICAgICAgdGhyb3cgSW52
|
1618
|
+
YWxpZEZsb2F0OwogICAgICAgICAgICByZXR1cm4gc2V0RmluaXNoZWQoZW5k
|
1619
|
+
KTsgLy8gR29vZCB1cCB0byB0aGlzLgogICAgICAgIH0KICAgICAgICAvLyBD
|
1620
|
+
b3B5IGdvb2QgY2hhcnMgdG8gYnVmZmVyLiBFaXRoZXIgZW5kIGN1dCBvZmYg
|
1621
|
+
b3IgaW52YWxpZC4KICAgICAgICB3aGlsZSAoKCcwJyA8PSAqQmVnaW4gJiYg
|
1622
|
+
KkJlZ2luIDw9ICc5JykgfHwgKkJlZ2luID09ICcuJyB8fAogICAgICAgICAg
|
1623
|
+
ICAqQmVnaW4gPT0gJ2UnIHx8ICpCZWdpbiA9PSAnRScgfHwKICAgICAgICAg
|
1624
|
+
ICAgKkJlZ2luID09ICctJyB8fCAqQmVnaW4gPT0gJysnKQogICAgICAgICAg
|
1625
|
+
ICAgICAgUG9vbC5idWZmZXIucHVzaF9iYWNrKCpCZWdpbisrKTsKICAgICAg
|
1626
|
+
ICBpZiAoQmVnaW4gIT0gRW5kKSAvLyBEaWQgbm90IHJlYWNoIGVuZCBvZiBi
|
1627
|
+
dWZmZXIsIGhlbmNlIGludmFsaWQuCiAgICAgICAgICAgIHRocm93IEludmFs
|
1628
|
+
aWRGbG9hdDsKICAgICAgICByZXR1cm4gc2V0RmluaXNoZWQobnVsbHB0ciwg
|
1629
|
+
UG9vbCk7CiAgICB9CiAgICAvLyBTdGFydCBvZiB0aGUgbnVtYmVyIGlzIGlu
|
1630
|
+
IGJ1ZmZlci4gSW5wdXQgaXMgbnVsbC10ZXJtaW5hdGVkLgogICAgd2hpbGUg
|
1631
|
+
KCgnMCcgPD0gKkJlZ2luICYmICpCZWdpbiA8PSAnOScpIHx8ICpCZWdpbiA9
|
1632
|
+
PSAnLicgfHwKICAgICAgICAqQmVnaW4gPT0gJ2UnIHx8ICpCZWdpbiA9PSAn
|
1633
|
+
RScgfHwKICAgICAgICAqQmVnaW4gPT0gJy0nIHx8ICpCZWdpbiA9PSAnKycp
|
1634
|
+
CiAgICAgICAgICAgIFBvb2wuYnVmZmVyLnB1c2hfYmFjaygqQmVnaW4rKyk7
|
1635
|
+
CiAgICBpZiAoQmVnaW4gPT0gRW5kKSAvLyBDb250aW51ZXMgb24gYW5kIG9u
|
1636
|
+
PwogICAgICAgIHJldHVybiBzZXRGaW5pc2hlZChudWxscHRyLCBQb29sKTsK
|
1637
|
+
ICAgIFBvb2wuYnVmZmVyLnB1c2hfYmFjaygwKTsKICAgIG91dCA9IHN0cnRv
|
1638
|
+
ZigmUG9vbC5idWZmZXIuZnJvbnQoKSwgJmVuZCk7CiAgICAvLyBTZXBhcmF0
|
1639
|
+
b3Igc2NhbiB3aWxsIHRocm93IGlmIHRoZSBzdHJpbmcgaW4gc291cmNlIGlz
|
1640
|
+
IG5vdCBhIG51bWJlci4KICAgIC8vIFJlcXVpcmUgdGhhdCBhbGwgY2hhcnMg
|
1641
|
+
YXJlIHRoZSBudW1iZXIgYXMgdGhlcmUgd2FzIG5vIHNlcGFyYXRvciBjb3Bp
|
1642
|
+
ZWQuCiAgICBpZiAoZW5kICE9ICZQb29sLmJ1ZmZlci5iYWNrKCkpCiAgICAg
|
1643
|
+
ICAgdGhyb3cgSW52YWxpZEZsb2F0OwogICAgcmV0dXJuIHNldEZpbmlzaGVk
|
1644
|
+
KEJlZ2luLCBQb29sKTsKfQo=
|
1645
|
+
c21: |
|
1646
|
+
Y2xhc3MgUGFyc2VJbnQ4IDogcHVibGljIFZhbHVlUGFyc2VyIHsKcHVibGlj
|
1647
|
+
OgogICAgdHlwZWRlZiBzdGQ6OmludDhfdCBUeXBlOwogICAgZW51bSBQb29s
|
1648
|
+
IHsgSW5kZXggPSBQb29sSW5kZXggfTsKCiAgICBjb25zdCBjaGFyKiBQYXJz
|
1649
|
+
ZShjb25zdCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciogRW5kLCBQYXJzZXJQ
|
1650
|
+
b29sJiBQb29sKQogICAgICAgIG5vZXhjZXB0KGZhbHNlKTsKfTsK
|
1651
|
+
c22: |
|
1652
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlSW50ODo6UGFyc2UoCiAgICBj
|
1653
|
+
b25zdCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciogRW5kLCBQYXJzZXJQb29s
|
1654
|
+
JiBQb29sKSBub2V4Y2VwdChmYWxzZSkKewogICAgY29uc3QgY2hhciogZW5k
|
1655
|
+
ID0gcGFyc2VfaW50ZWdlcjxUeXBlLAogICAgICAgIHN0ZDo6bnVtZXJpY19s
|
1656
|
+
aW1pdHM8VHlwZT46Omxvd2VzdCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPFR5
|
1657
|
+
cGU+OjptYXgoKT4oCiAgICAgICAgICAgIHN0ZDo6Z2V0PFBhcnNlSW50ODo6
|
1658
|
+
UG9vbDo6SW5kZXg+KFBvb2wuVmFsdWUpLAogICAgICAgICAgICBCZWdpbiwg
|
1659
|
+
RW5kLCBQb29sLmJ1ZmZlciwgZmluaXNoZWQpOwogICAgcmV0dXJuIHNldEZp
|
1660
|
+
bmlzaGVkKGVuZCwgUG9vbCk7Cn0K
|
1661
|
+
c23: |
|
1662
|
+
Y2xhc3MgUGFyc2VJbnQxNiA6IHB1YmxpYyBWYWx1ZVBhcnNlciB7CnB1Ymxp
|
1663
|
+
YzoKICAgIHR5cGVkZWYgc3RkOjppbnQxNl90IFR5cGU7CiAgICBlbnVtIFBv
|
1664
|
+
b2wgeyBJbmRleCA9IFBvb2xJbmRleCB9OwoKICAgIGNvbnN0IGNoYXIqIFBh
|
1665
|
+
cnNlKGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNl
|
1666
|
+
clBvb2wmIFBvb2wpCiAgICAgICAgbm9leGNlcHQoZmFsc2UpOwp9Owo=
|
1667
|
+
c24: |
|
1668
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlSW50MTY6OlBhcnNlKAogICAg
|
1669
|
+
Y29uc3QgY2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCwgUGFyc2VyUG9v
|
1670
|
+
bCYgUG9vbCkgbm9leGNlcHQoZmFsc2UpCnsKICAgIGNvbnN0IGNoYXIqIGVu
|
1671
|
+
ZCA9IHBhcnNlX2ludGVnZXI8VHlwZSwKICAgICAgICBzdGQ6Om51bWVyaWNf
|
1672
|
+
bGltaXRzPFR5cGU+Ojpsb3dlc3QoKSwgc3RkOjpudW1lcmljX2xpbWl0czxU
|
1673
|
+
eXBlPjo6bWF4KCk+KAogICAgICAgICAgICBzdGQ6OmdldDxQYXJzZUludDE2
|
1674
|
+
OjpQb29sOjpJbmRleD4oUG9vbC5WYWx1ZSksCiAgICAgICAgICAgIEJlZ2lu
|
1675
|
+
LCBFbmQsIFBvb2wuYnVmZmVyLCBmaW5pc2hlZCk7CiAgICByZXR1cm4gc2V0
|
1676
|
+
RmluaXNoZWQoZW5kLCBQb29sKTsKfQo=
|
1677
|
+
c25: |
|
1678
|
+
Y2xhc3MgUGFyc2VJbnQzMiA6IHB1YmxpYyBWYWx1ZVBhcnNlciB7CnB1Ymxp
|
1679
|
+
YzoKICAgIHR5cGVkZWYgc3RkOjppbnQzMl90IFR5cGU7CiAgICBlbnVtIFBv
|
1680
|
+
b2wgeyBJbmRleCA9IFBvb2xJbmRleCB9OwoKICAgIGNvbnN0IGNoYXIqIFBh
|
1681
|
+
cnNlKGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNl
|
1682
|
+
clBvb2wmIFBvb2wpCiAgICAgICAgbm9leGNlcHQoZmFsc2UpOwp9Owo=
|
1683
|
+
c26: |
|
1684
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlSW50MzI6OlBhcnNlKAogICAg
|
1685
|
+
Y29uc3QgY2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCwgUGFyc2VyUG9v
|
1686
|
+
bCYgUG9vbCkgbm9leGNlcHQoZmFsc2UpCnsKICAgIGNvbnN0IGNoYXIqIGVu
|
1687
|
+
ZCA9IHBhcnNlX2ludGVnZXI8VHlwZSwKICAgICAgICBzdGQ6Om51bWVyaWNf
|
1688
|
+
bGltaXRzPFR5cGU+Ojpsb3dlc3QoKSwgc3RkOjpudW1lcmljX2xpbWl0czxU
|
1689
|
+
eXBlPjo6bWF4KCk+KAogICAgICAgICAgICBzdGQ6OmdldDxQYXJzZUludDMy
|
1690
|
+
OjpQb29sOjpJbmRleD4oUG9vbC5WYWx1ZSksCiAgICAgICAgICAgIEJlZ2lu
|
1691
|
+
LCBFbmQsIFBvb2wuYnVmZmVyLCBmaW5pc2hlZCk7CiAgICByZXR1cm4gc2V0
|
1692
|
+
RmluaXNoZWQoZW5kLCBQb29sKTsKfQo=
|
1693
|
+
c27: |
|
1694
|
+
Y2xhc3MgUGFyc2VJbnQ2NCA6IHB1YmxpYyBWYWx1ZVBhcnNlciB7CnB1Ymxp
|
1695
|
+
YzoKICAgIHR5cGVkZWYgc3RkOjppbnQ2NF90IFR5cGU7CiAgICBlbnVtIFBv
|
1696
|
+
b2wgeyBJbmRleCA9IFBvb2xJbmRleCB9OwoKICAgIGNvbnN0IGNoYXIqIFBh
|
1697
|
+
cnNlKGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNl
|
1698
|
+
clBvb2wmIFBvb2wpCiAgICAgICAgbm9leGNlcHQoZmFsc2UpOwp9Owo=
|
1699
|
+
c28: |
|
1700
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlSW50NjQ6OlBhcnNlKAogICAg
|
1701
|
+
Y29uc3QgY2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCwgUGFyc2VyUG9v
|
1702
|
+
bCYgUG9vbCkgbm9leGNlcHQoZmFsc2UpCnsKICAgIGNvbnN0IGNoYXIqIGVu
|
1703
|
+
ZCA9IHBhcnNlX2ludGVnZXI8VHlwZSwKICAgICAgICBzdGQ6Om51bWVyaWNf
|
1704
|
+
bGltaXRzPFR5cGU+Ojpsb3dlc3QoKSwgc3RkOjpudW1lcmljX2xpbWl0czxU
|
1705
|
+
eXBlPjo6bWF4KCk+KAogICAgICAgICAgICBzdGQ6OmdldDxQYXJzZUludDY0
|
1706
|
+
OjpQb29sOjpJbmRleD4oUG9vbC5WYWx1ZSksCiAgICAgICAgICAgIEJlZ2lu
|
1707
|
+
LCBFbmQsIFBvb2wuYnVmZmVyLCBmaW5pc2hlZCk7CiAgICByZXR1cm4gc2V0
|
1708
|
+
RmluaXNoZWQoZW5kLCBQb29sKTsKfQo=
|
1709
|
+
c29: |
|
1710
|
+
Y2xhc3MgUGFyc2VVSW50OCA6IHB1YmxpYyBWYWx1ZVBhcnNlciB7CnB1Ymxp
|
1711
|
+
YzoKICAgIHR5cGVkZWYgc3RkOjp1aW50OF90IFR5cGU7CiAgICBlbnVtIFBv
|
1712
|
+
b2wgeyBJbmRleCA9IFBvb2xJbmRleCB9OwoKICAgIGNvbnN0IGNoYXIqIFBh
|
1713
|
+
cnNlKGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNl
|
1714
|
+
clBvb2wmIFBvb2wpCiAgICAgICAgbm9leGNlcHQoZmFsc2UpOwp9Owo=
|
1715
|
+
c30: |
|
1716
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlVUludDg6OlBhcnNlKAogICAg
|
1717
|
+
Y29uc3QgY2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCwgUGFyc2VyUG9v
|
1718
|
+
bCYgUG9vbCkgbm9leGNlcHQoZmFsc2UpCnsKICAgIGNvbnN0IGNoYXIqIGVu
|
1719
|
+
ZCA9IHBhcnNlX2ludGVnZXI8VHlwZSwKICAgICAgICBzdGQ6Om51bWVyaWNf
|
1720
|
+
bGltaXRzPFR5cGU+Ojpsb3dlc3QoKSwgc3RkOjpudW1lcmljX2xpbWl0czxU
|
1721
|
+
eXBlPjo6bWF4KCk+KAogICAgICAgICAgICBzdGQ6OmdldDxQYXJzZVVJbnQ4
|
1722
|
+
OjpQb29sOjpJbmRleD4oUG9vbC5WYWx1ZSksCiAgICAgICAgICAgIEJlZ2lu
|
1723
|
+
LCBFbmQsIFBvb2wuYnVmZmVyLCBmaW5pc2hlZCk7CiAgICByZXR1cm4gc2V0
|
1724
|
+
RmluaXNoZWQoZW5kLCBQb29sKTsKfQo=
|
1725
|
+
c31: |
|
1726
|
+
Y2xhc3MgUGFyc2VVSW50MTYgOiBwdWJsaWMgVmFsdWVQYXJzZXIgewpwdWJs
|
1727
|
+
aWM6CiAgICB0eXBlZGVmIHN0ZDo6dWludDE2X3QgVHlwZTsKICAgIGVudW0g
|
1728
|
+
UG9vbCB7IEluZGV4ID0gUG9vbEluZGV4IH07CgogICAgY29uc3QgY2hhciog
|
1729
|
+
UGFyc2UoY29uc3QgY2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCwgUGFy
|
1730
|
+
c2VyUG9vbCYgUG9vbCkKICAgICAgICBub2V4Y2VwdChmYWxzZSk7Cn07Cg==
|
1731
|
+
c32: |
|
1732
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlVUludDE2OjpQYXJzZSgKICAg
|
1733
|
+
IGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNlclBv
|
1734
|
+
b2wmIFBvb2wpIG5vZXhjZXB0KGZhbHNlKQp7CiAgICBjb25zdCBjaGFyKiBl
|
1735
|
+
bmQgPSBwYXJzZV9pbnRlZ2VyPFR5cGUsCiAgICAgICAgc3RkOjpudW1lcmlj
|
1736
|
+
X2xpbWl0czxUeXBlPjo6bG93ZXN0KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8
|
1737
|
+
VHlwZT46Om1heCgpPigKICAgICAgICAgICAgc3RkOjpnZXQ8UGFyc2VVSW50
|
1738
|
+
MTY6OlBvb2w6OkluZGV4PihQb29sLlZhbHVlKSwKICAgICAgICAgICAgQmVn
|
1739
|
+
aW4sIEVuZCwgUG9vbC5idWZmZXIsIGZpbmlzaGVkKTsKICAgIHJldHVybiBz
|
1740
|
+
ZXRGaW5pc2hlZChlbmQsIFBvb2wpOwp9Cg==
|
1741
|
+
c33: |
|
1742
|
+
Y2xhc3MgUGFyc2VVSW50MzIgOiBwdWJsaWMgVmFsdWVQYXJzZXIgewpwdWJs
|
1743
|
+
aWM6CiAgICB0eXBlZGVmIHN0ZDo6dWludDMyX3QgVHlwZTsKICAgIGVudW0g
|
1744
|
+
UG9vbCB7IEluZGV4ID0gUG9vbEluZGV4IH07CgogICAgY29uc3QgY2hhciog
|
1745
|
+
UGFyc2UoY29uc3QgY2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCwgUGFy
|
1746
|
+
c2VyUG9vbCYgUG9vbCkKICAgICAgICBub2V4Y2VwdChmYWxzZSk7Cn07Cg==
|
1747
|
+
c34: |
|
1748
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlVUludDMyOjpQYXJzZSgKICAg
|
1749
|
+
IGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNlclBv
|
1750
|
+
b2wmIFBvb2wpIG5vZXhjZXB0KGZhbHNlKQp7CiAgICBjb25zdCBjaGFyKiBl
|
1751
|
+
bmQgPSBwYXJzZV9pbnRlZ2VyPFR5cGUsCiAgICAgICAgc3RkOjpudW1lcmlj
|
1752
|
+
X2xpbWl0czxUeXBlPjo6bG93ZXN0KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8
|
1753
|
+
VHlwZT46Om1heCgpPigKICAgICAgICAgICAgc3RkOjpnZXQ8UGFyc2VVSW50
|
1754
|
+
MzI6OlBvb2w6OkluZGV4PihQb29sLlZhbHVlKSwKICAgICAgICAgICAgQmVn
|
1755
|
+
aW4sIEVuZCwgUG9vbC5idWZmZXIsIGZpbmlzaGVkKTsKICAgIHJldHVybiBz
|
1756
|
+
ZXRGaW5pc2hlZChlbmQsIFBvb2wpOwp9Cg==
|
1757
|
+
c35: |
|
1758
|
+
Y2xhc3MgUGFyc2VVSW50NjQgOiBwdWJsaWMgVmFsdWVQYXJzZXIgewpwdWJs
|
1759
|
+
aWM6CiAgICB0eXBlZGVmIHN0ZDo6dWludDY0X3QgVHlwZTsKICAgIGVudW0g
|
1760
|
+
UG9vbCB7IEluZGV4ID0gUG9vbEluZGV4IH07CgogICAgY29uc3QgY2hhciog
|
1761
|
+
UGFyc2UoY29uc3QgY2hhciogQmVnaW4sIGNvbnN0IGNoYXIqIEVuZCwgUGFy
|
1762
|
+
c2VyUG9vbCYgUG9vbCkKICAgICAgICBub2V4Y2VwdChmYWxzZSk7Cn07Cg==
|
1763
|
+
c36: |
|
1764
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlVUludDY0OjpQYXJzZSgKICAg
|
1765
|
+
IGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNlclBv
|
1766
|
+
b2wmIFBvb2wpIG5vZXhjZXB0KGZhbHNlKQp7CiAgICBjb25zdCBjaGFyKiBl
|
1767
|
+
bmQgPSBwYXJzZV9pbnRlZ2VyPFR5cGUsCiAgICAgICAgc3RkOjpudW1lcmlj
|
1768
|
+
X2xpbWl0czxUeXBlPjo6bG93ZXN0KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8
|
1769
|
+
VHlwZT46Om1heCgpPigKICAgICAgICAgICAgc3RkOjpnZXQ8UGFyc2VVSW50
|
1770
|
+
NjQ6OlBvb2w6OkluZGV4PihQb29sLlZhbHVlKSwKICAgICAgICAgICAgQmVn
|
1771
|
+
aW4sIEVuZCwgUG9vbC5idWZmZXIsIGZpbmlzaGVkKTsKICAgIHJldHVybiBz
|
1772
|
+
ZXRGaW5pc2hlZChlbmQsIFBvb2wpOwp9Cg==
|
1773
|
+
c37: |
|
1774
|
+
dGVtcGxhdGU8dHlwZW5hbWUgUGFyc2VyPgpjbGFzcyBQYXJzZVN0ZFZlY3Rv
|
1775
|
+
ciA6IHB1YmxpYyBQYXJzZUFycmF5PHN0ZDo6dmVjdG9yPHR5cGVuYW1lIFBh
|
1776
|
+
cnNlcjo6VHlwZT4sIFBhcnNlciwgZmFsc2U+IHsgfTsK
|
1777
|
+
c38: |
|
1778
|
+
Y2xhc3MgUGFyc2VTdHJpbmcgOiBwdWJsaWMgVmFsdWVQYXJzZXIgewpwdWJs
|
1779
|
+
aWM6CiAgICB0eXBlZGVmIHN0ZDo6c3RyaW5nIFR5cGU7Cgpwcml2YXRlOgog
|
1780
|
+
ICAgZW51bSBTdGF0ZSB7IE5vcm1hbCwgRXNjYXBlZCwgVW5pY29kZSB9Owog
|
1781
|
+
ICAgU3RhdGUgc3RhdGU7CiAgICBpbnQgY291bnQ7CiAgICBjaGFyIGhleF9k
|
1782
|
+
aWdpdHNbNF07CgpwdWJsaWM6CiAgICBlbnVtIFBvb2wgeyBJbmRleCA9IFBv
|
1783
|
+
b2xJbmRleCB9OwoKICAgIFBhcnNlU3RyaW5nKCkgOiBzdGF0ZShOb3JtYWwp
|
1784
|
+
LCBjb3VudCgwKSB7IH0KICAgIGNvbnN0IGNoYXIqIFBhcnNlKGNvbnN0IGNo
|
1785
|
+
YXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQsIFBhcnNlclBvb2wmIFBvb2wp
|
1786
|
+
CiAgICAgICAgbm9leGNlcHQoZmFsc2UpOwp9Owo=
|
1787
|
+
c39: |
|
1788
|
+
c3RhdGljIGNvbnN0IEV4Y2VwdGlvbiBTdHJpbmdTdGFydCgiRXhwZWN0ZWQg
|
1789
|
+
J1wiJy4iKTsKc3RhdGljIGNvbnN0IEV4Y2VwdGlvbiBTdHJpbmdFc2NhcGUo
|
1790
|
+
IlN0cmluZyB3aXRoIHVua25vd24gZXNjYXBlLiIpOwpzdGF0aWMgY29uc3Qg
|
1791
|
+
RXhjZXB0aW9uIFN0cmluZ0hleERpZ2l0cygiU3RyaW5nIHdpdGggaW52YWxp
|
1792
|
+
ZCBoZXggZGlnaXRzLiIpOwpzdGF0aWMgY29uc3QgRXhjZXB0aW9uIFN0cmlu
|
1793
|
+
Z0ludmFsaWRDaGFyYWN0ZXIoIlN0cmluZyB3aXRoIGludmFsaWQgY2hhcmFj
|
1794
|
+
dGVyLiIpOwoKY29uc3QgY2hhciogc3BlY2pzb246OlBhcnNlU3RyaW5nOjpQ
|
1795
|
+
YXJzZSgKICAgIGNvbnN0IGNoYXIqIEJlZ2luLCBjb25zdCBjaGFyKiBFbmQs
|
1796
|
+
IFBhcnNlclBvb2wmIFBvb2wpIG5vZXhjZXB0KGZhbHNlKQp7CiAgICBjb25z
|
1797
|
+
dCBjaGFyKiBvcmlnaW4gPSBCZWdpbjsKICAgIFR5cGUmIG91dChzdGQ6Omdl
|
1798
|
+
dDxQb29sOjpJbmRleD4oUG9vbC5WYWx1ZSkpOwogICAgYXV0byYgYnVmZmVy
|
1799
|
+
KFBvb2wuYnVmZmVyKTsKICAgIGlmIChmaW5pc2hlZCkgewogICAgICAgIGlm
|
1800
|
+
ICgqQmVnaW4gIT0gJyInKQogICAgICAgICAgICB0aHJvdyBDb250ZXh0RXhj
|
1801
|
+
ZXB0aW9uKFN0cmluZ1N0YXJ0LCBvcmlnaW4sIEJlZ2luLCBFbmQpOwogICAg
|
1802
|
+
ICAgIHN0ZDo6Z2V0PFBvb2w6OkluZGV4PihQb29sLlZhbHVlKS5yZXNpemUo
|
1803
|
+
MCk7CiAgICAgICAgKytCZWdpbjsKICAgIH0KICAgIHdoaWxlIChCZWdpbiAh
|
1804
|
+
PSBFbmQpIHsKICAgICAgICBpZiAoc3RhdGUgPT0gTm9ybWFsKSB7CiAgICAg
|
1805
|
+
ICAgICAgIHdoaWxlIChCZWdpbiAhPSBFbmQpIHsKICAgICAgICAgICAgICAg
|
1806
|
+
IGlmICgqQmVnaW4gIT0gJ1xcJykgewogICAgICAgICAgICAgICAgICAgIGlm
|
1807
|
+
ICgqQmVnaW4gIT0gJyInKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlm
|
1808
|
+
IGNvbnN0ZXhwciAoc3RhdGljX2Nhc3Q8Y2hhcj4oMHg4MCkgPCAwKSB7CiAg
|
1809
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaWduZWQgY2hhci4KICAg
|
1810
|
+
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwIDw9ICpCZWdpbiAmJiAq
|
1811
|
+
QmVnaW4gPCAzMikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
|
1812
|
+
aHJvdyBTdHJpbmdJbnZhbGlkQ2hhcmFjdGVyOwogICAgICAgICAgICAgICAg
|
1813
|
+
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
1814
|
+
aWYgKCpCZWdpbiA8IDMyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
1815
|
+
ICAgIHRocm93IFN0cmluZ0ludmFsaWRDaGFyYWN0ZXI7CiAgICAgICAgICAg
|
1816
|
+
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVy
|
1817
|
+
LnB1c2hfYmFjaygqQmVnaW4rKyk7CiAgICAgICAgICAgICAgICAgICAgfSBl
|
1818
|
+
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZChidWZm
|
1819
|
+
ZXIuYmVnaW4oKSwgYnVmZmVyLmVuZCgpKTsKICAgICAgICAgICAgICAgICAg
|
1820
|
+
ICAgICAgcmV0dXJuIHNldEZpbmlzaGVkKEJlZ2luICsgMSwgUG9vbCk7CiAg
|
1821
|
+
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsK
|
1822
|
+
ICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IEVzY2FwZWQ7CiAgICAgICAg
|
1823
|
+
ICAgICAgICAgICAgKytCZWdpbjsKICAgICAgICAgICAgICAgICAgICBicmVh
|
1824
|
+
azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0g
|
1825
|
+
ZWxzZSBpZiAoc3RhdGUgPT0gVW5pY29kZSkgewogICAgICAgICAgICBoZXhf
|
1826
|
+
ZGlnaXRzW2NvdW50KytdID0gKkJlZ2luKys7CiAgICAgICAgICAgIGlmIChj
|
1827
|
+
b3VudCA8IDQpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
|
1828
|
+
ICAgY291bnQgPSAwOwogICAgICAgICAgICBzdGF0ZSA9IE5vcm1hbDsKICAg
|
1829
|
+
ICAgICAgICAgaW50IHZhbHVlID0gMDsKICAgICAgICAgICAgZm9yIChpbnQg
|
1830
|
+
ayA9IDA7IGsgPCA0OyArK2spIHsKICAgICAgICAgICAgICAgIGludCBtID0g
|
1831
|
+
MDsKICAgICAgICAgICAgICAgIGlmICgnMCcgPD0gaGV4X2RpZ2l0c1trXSAm
|
1832
|
+
JiBoZXhfZGlnaXRzW2tdIDw9ICc5JykKICAgICAgICAgICAgICAgICAgICBt
|
1833
|
+
ID0gaGV4X2RpZ2l0c1trXSAtICcwJzsKICAgICAgICAgICAgICAgIGVsc2Ug
|
1834
|
+
aWYgKCdhJyA8PSBoZXhfZGlnaXRzW2tdICYmIGhleF9kaWdpdHNba10gPD0g
|
1835
|
+
J2YnKQogICAgICAgICAgICAgICAgICAgIG0gPSAxMCArIGhleF9kaWdpdHNb
|
1836
|
+
a10gLSAnYSc7CiAgICAgICAgICAgICAgICBlbHNlIGlmICgnQScgPD0gaGV4
|
1837
|
+
X2RpZ2l0c1trXSAmJiBoZXhfZGlnaXRzW2tdIDw9ICdGJykKICAgICAgICAg
|
1838
|
+
ICAgICAgICAgICBtID0gMTAgKyBoZXhfZGlnaXRzW2tdIC0gJ0EnOwogICAg
|
1839
|
+
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHRocm93IENv
|
1840
|
+
bnRleHRFeGNlcHRpb24oU3RyaW5nSGV4RGlnaXRzLCBvcmlnaW4sIEJlZ2lu
|
1841
|
+
LCBFbmQpOwogICAgICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgNCkg
|
1842
|
+
KyBtOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICh2YWx1ZSA8IDB4
|
1843
|
+
ODApCiAgICAgICAgICAgICAgICBidWZmZXIucHVzaF9iYWNrKHN0YXRpY19j
|
1844
|
+
YXN0PGNoYXI+KHZhbHVlKSk7CiAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVl
|
1845
|
+
IDwgMHg4MDApIHsKICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoX2JhY2so
|
1846
|
+
c3RhdGljX2Nhc3Q8Y2hhcj4oMHhjMCB8ICgodmFsdWUgPj4gNikgJiAweDFm
|
1847
|
+
KSkpOwogICAgICAgICAgICAgICAgYnVmZmVyLnB1c2hfYmFjayhzdGF0aWNf
|
1848
|
+
Y2FzdDxjaGFyPigweDgwIHwgKHZhbHVlICYgMHgzZikpKTsKICAgICAgICAg
|
1849
|
+
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoX2JhY2so
|
1850
|
+
c3RhdGljX2Nhc3Q8Y2hhcj4oMHhlMCB8ICgodmFsdWUgPj4gMTIpICYgMHhm
|
1851
|
+
KSkpOwogICAgICAgICAgICAgICAgYnVmZmVyLnB1c2hfYmFjayhzdGF0aWNf
|
1852
|
+
Y2FzdDxjaGFyPigweDgwIHwgKCh2YWx1ZSA+PiA2KSAmIDB4M2YpKSk7CiAg
|
1853
|
+
ICAgICAgICAgICAgICBidWZmZXIucHVzaF9iYWNrKHN0YXRpY19jYXN0PGNo
|
1854
|
+
YXI+KDB4ODAgfCAodmFsdWUgJiAweDNmKSkpOwogICAgICAgICAgICB9CiAg
|
1855
|
+
ICAgICAgfSBlbHNlIHsgLy8gRXNjYXBlZC4KICAgICAgICAgICAgc3RhdGUg
|
1856
|
+
PSBOb3JtYWw7CiAgICAgICAgICAgIHN3aXRjaCAoKkJlZ2luKSB7CiAgICAg
|
1857
|
+
ICAgICAgIGNhc2UgJyInOgogICAgICAgICAgICBjYXNlICcvJzoKICAgICAg
|
1858
|
+
ICAgICAgY2FzZSAnXFwnOgogICAgICAgICAgICAgICAgYnVmZmVyLnB1c2hf
|
1859
|
+
YmFjaygqQmVnaW4pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
|
1860
|
+
ICAgIGNhc2UgJ2InOiBidWZmZXIucHVzaF9iYWNrKCdcYicpOyBicmVhazsK
|
1861
|
+
ICAgICAgICAgICAgY2FzZSAnZic6IGJ1ZmZlci5wdXNoX2JhY2soJ1xmJyk7
|
1862
|
+
IGJyZWFrOwogICAgICAgICAgICBjYXNlICduJzogYnVmZmVyLnB1c2hfYmFj
|
1863
|
+
aygnXG4nKTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3InOiBidWZmZXIu
|
1864
|
+
cHVzaF9iYWNrKCdccicpOyBicmVhazsKICAgICAgICAgICAgY2FzZSAndCc6
|
1865
|
+
IGJ1ZmZlci5wdXNoX2JhY2soJ1x0Jyk7IGJyZWFrOwogICAgICAgICAgICBj
|
1866
|
+
YXNlICd1Jzogc3RhdGUgPSBVbmljb2RlOyBicmVhazsKICAgICAgICAgICAg
|
1867
|
+
ZGVmYXVsdDoKICAgICAgICAgICAgICAgIHRocm93IENvbnRleHRFeGNlcHRp
|
1868
|
+
b24oU3RyaW5nRXNjYXBlLCBvcmlnaW4sIEJlZ2luLCBFbmQpOwogICAgICAg
|
1869
|
+
ICAgICB9CiAgICAgICAgICAgICsrQmVnaW47CiAgICAgICAgfQogICAgfQog
|
1870
|
+
ICAgcmV0dXJuIHNldEZpbmlzaGVkKG51bGxwdHIsIFBvb2wpOwp9Cg==
|
1871
|
+
c40: |
|
1872
|
+
dGVtcGxhdGU8dHlwZW5hbWUgU2luaz4Kdm9pZCBXcml0ZShTaW5rJiBTLCBi
|
1873
|
+
b29sIFZhbHVlLCBzdGQ6OnZlY3RvcjxjaGFyPiYgQnVmZmVyKSB7CiAgICBp
|
1874
|
+
ZiAoVmFsdWUpCiAgICAgICAgUy53cml0ZSgidHJ1ZSIsIDQpOwogICAgZWxz
|
1875
|
+
ZQogICAgICAgIFMud3JpdGUoImZhbHNlIiwgNSk7Cn0K
|
1876
|
+
c41: |
|
1877
|
+
ZXh0ZXJuIGNvbnN0IEV4Y2VwdGlvbiBEb3VibGVOb3RGaW5pdGU7CmV4dGVy
|
1878
|
+
biBjb25zdCBjaGFyKiBXcml0ZURvdWJsZUZvcm1hdDsKCnRlbXBsYXRlPHR5
|
1879
|
+
cGVuYW1lIFNpbms+CnZvaWQgV3JpdGUoU2luayYgUywgZG91YmxlIFZhbHVl
|
1880
|
+
LCBzdGQ6OnZlY3RvcjxjaGFyPiYgQnVmZmVyKSB7CiAgICBpZiAoaXNmaW5p
|
1881
|
+
dGUoVmFsdWUpKQogICAgICAgIFdyaXRlU2NhbGFyVHlwZTxTaW5rLGRvdWJs
|
1882
|
+
ZSxXcml0ZURvdWJsZUZvcm1hdD4oUywgVmFsdWUsIEJ1ZmZlcik7CiAgICBl
|
1883
|
+
bHNlCiAgICAgICAgdGhyb3cgRG91YmxlTm90RmluaXRlOwp9Cg==
|
1884
|
+
c42: |
|
1885
|
+
Y29uc3QgRXhjZXB0aW9uIHNwZWNqc29uOjpEb3VibGVOb3RGaW5pdGUoIkRv
|
1886
|
+
dWJsZSBub3QgZmluaXRlLiIpOwpzdGF0aWMgY2hhciBXcml0ZURvdWJsZUZv
|
1887
|
+
cm1hdEJ1ZmZlcltdID0gIjEyMzQ1NjciOwpzdGF0aWMgY29uc3QgY2hhciog
|
1888
|
+
V3JpdGVEb3VibGVGb3JtYXRDb250ZW50ID0KICAgIGZsb2F0aW5nX3BvaW50
|
1889
|
+
X2Zvcm1hdDxkb3VibGU+KFdyaXRlRG91YmxlRm9ybWF0QnVmZmVyKTsKY29u
|
1890
|
+
c3QgY2hhciogc3BlY2pzb246OldyaXRlRG91YmxlRm9ybWF0ID0gcmVpbnRl
|
1891
|
+
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4oV3JpdGVEb3VibGVGb3JtYXRCdWZm
|
1892
|
+
ZXIpOwo=
|
1893
|
+
c43: |
|
1894
|
+
ZXh0ZXJuIGNvbnN0IEV4Y2VwdGlvbiBGbG9hdE5vdEZpbml0ZTsKZXh0ZXJu
|
1895
|
+
IGNvbnN0IGNoYXIqIFdyaXRlRmxvYXRGb3JtYXQ7Cgp0ZW1wbGF0ZTx0eXBl
|
1896
|
+
bmFtZSBTaW5rPgp2b2lkIFdyaXRlKFNpbmsmIFMsIGZsb2F0IFZhbHVlLCBz
|
1897
|
+
dGQ6OnZlY3RvcjxjaGFyPiYgQnVmZmVyKSB7CiAgICBpZiAoaXNmaW5pdGUo
|
1898
|
+
VmFsdWUpKQogICAgICAgIFdyaXRlU2NhbGFyVHlwZTxTaW5rLGZsb2F0LFdy
|
1899
|
+
aXRlRmxvYXRGb3JtYXQ+KFMsIFZhbHVlLCBCdWZmZXIpOwogICAgZWxzZQog
|
1900
|
+
ICAgICAgIHRocm93IEZsb2F0Tm90RmluaXRlOwp9Cg==
|
1901
|
+
c44: |
|
1902
|
+
Y29uc3QgRXhjZXB0aW9uIHNwZWNqc29uOjpGbG9hdE5vdEZpbml0ZSgiRmxv
|
1903
|
+
YXQgbm90IGZpbml0ZS4iKTsKc3RhdGljIGNoYXIgV3JpdGVGbG9hdEZvcm1h
|
1904
|
+
dEJ1ZmZlcltdID0gIjEyMzQ1NjciOwpzdGF0aWMgY29uc3QgY2hhciogV3Jp
|
1905
|
+
dGVGbG9hdEZvcm1hdENvbnRlbnQgPQogICAgZmxvYXRpbmdfcG9pbnRfZm9y
|
1906
|
+
bWF0PGZsb2F0PihXcml0ZUZsb2F0Rm9ybWF0QnVmZmVyKTsKY29uc3QgY2hh
|
1907
|
+
ciogc3BlY2pzb246OldyaXRlRmxvYXRGb3JtYXQgPSByZWludGVycHJldF9j
|
1908
|
+
YXN0PGNvbnN0IGNoYXIqPihXcml0ZUZsb2F0Rm9ybWF0QnVmZmVyKTsK
|
1909
|
+
c45: |
|
1910
|
+
Ly8gRm9ybWF0IG11c3QgYmUgYSBjb25zdCBjaGFyIGFycmF5Lgp0ZW1wbGF0
|
1911
|
+
ZTx0eXBlbmFtZSBTaW5rLCB0eXBlbmFtZSBULCBjb25zdCBhdXRvJiBGb3Jt
|
1912
|
+
YXQ+CnZvaWQgV3JpdGVTY2FsYXJUeXBlKFNpbmsmIFMsIFQgVmFsdWUsIHN0
|
1913
|
+
ZDo6dmVjdG9yPGNoYXI+JiBCdWZmZXIpIHsKICAgIGludCBjb3VudCA9IHNu
|
1914
|
+
cHJpbnRmKCZCdWZmZXIuZnJvbnQoKSwgQnVmZmVyLnNpemUoKSwgRm9ybWF0
|
1915
|
+
LCBWYWx1ZSk7CiAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihCdWZmZXIuc2l6
|
1916
|
+
ZSgpKSA8PSBjb3VudCkgewogICAgICAgIEJ1ZmZlci5yZXNpemUoY291bnQg
|
1917
|
+
KyAxKTsKICAgICAgICBjb3VudCA9IHNucHJpbnRmKCZCdWZmZXIuZnJvbnQo
|
1918
|
+
KSwgQnVmZmVyLnNpemUoKSwgRm9ybWF0LCBWYWx1ZSk7CiAgICB9CiAgICBT
|
1919
|
+
LndyaXRlKCZCdWZmZXIuZnJvbnQoKSwgY291bnQpOwp9Cg==
|
1920
|
+
c46: |
|
1921
|
+
dGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RhdGljIGNvbnN0IGNoYXIqIGZsb2F0
|
1922
|
+
aW5nX3BvaW50X2Zvcm1hdChjaGFyKiBCdWZmZXIpIHsKICAgIHNucHJpbnRm
|
1923
|
+
KEJ1ZmZlciwgc3RybGVuKEJ1ZmZlciksCiAgICAgICAgIiUlLiVpZyIsIHN0
|
1924
|
+
ZDo6bnVtZXJpY19saW1pdHM8VD46OmRpZ2l0czEwKTsKICAgIHJldHVybiBC
|
1925
|
+
dWZmZXI7Cn0K
|
1926
|
+
c47: |
|
1927
|
+
dGVtcGxhdGU8dHlwZW5hbWUgU2luaywgdHlwZW5hbWUgRm9yd2FyZEl0ZXJh
|
1928
|
+
dG9yPgp2b2lkIFdyaXRlKFNpbmsmIFMsCiAgICBGb3J3YXJkSXRlcmF0b3Im
|
1929
|
+
IEJlZ2luLCBGb3J3YXJkSXRlcmF0b3ImIEVuZCwgc3RkOjp2ZWN0b3I8Y2hh
|
1930
|
+
cj4mIEJ1ZmZlcikKewogICAgY2hhciBjID0gJ1snOwogICAgUy53cml0ZSgm
|
1931
|
+
YywgMSk7CiAgICBpZiAoQmVnaW4gIT0gRW5kKSB7CiAgICAgICAgV3JpdGUo
|
1932
|
+
UywgKkJlZ2luLCBCdWZmZXIpOwogICAgICAgIGMgPSAnLCc7CiAgICAgICAg
|
1933
|
+
d2hpbGUgKCsrQmVnaW4gIT0gRW5kKSB7CiAgICAgICAgICAgIFMud3JpdGUo
|
1934
|
+
JmMsIDEpOwogICAgICAgICAgICBXcml0ZShTLCAqQmVnaW4sIEJ1ZmZlcik7
|
1935
|
+
CiAgICAgICAgfQogICAgfQogICAgYyA9ICddJzsKICAgIFMud3JpdGUoJmMs
|
1936
|
+
IDEpOwp9Cg==
|
1937
|
+
c48: |
|
1938
|
+
ZXh0ZXJuIGNvbnN0IGNoYXIqIFdyaXRlSW50OEZvcm1hdDsKdGVtcGxhdGU8
|
1939
|
+
dHlwZW5hbWUgU2luaz4Kdm9pZCBXcml0ZShTaW5rJiBTLCBzdGQ6OmludDhf
|
1940
|
+
dCBWYWx1ZSwgc3RkOjp2ZWN0b3I8Y2hhcj4mIEJ1ZmZlcikgewogICAgV3Jp
|
1941
|
+
dGVTY2FsYXJUeXBlPFNpbmssc3RkOjppbnQ4X3QsV3JpdGVJbnQ4Rm9ybWF0
|
1942
|
+
PihTLCBWYWx1ZSwgQnVmZmVyKTsKfQo=
|
1943
|
+
c49: |
|
1944
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OldyaXRlSW50OEZvcm1hdCA9ICIlIiBQ
|
1945
|
+
UklpODsK
|
1946
|
+
c50: |
|
1947
|
+
ZXh0ZXJuIGNvbnN0IGNoYXIqIFdyaXRlSW50MTZGb3JtYXQ7CnRlbXBsYXRl
|
1948
|
+
PHR5cGVuYW1lIFNpbms+CnZvaWQgV3JpdGUoU2luayYgUywgc3RkOjppbnQx
|
1949
|
+
Nl90IFZhbHVlLCBzdGQ6OnZlY3RvcjxjaGFyPiYgQnVmZmVyKSB7CiAgICBX
|
1950
|
+
cml0ZVNjYWxhclR5cGU8U2luayxzdGQ6OmludDE2X3QsV3JpdGVJbnQxNkZv
|
1951
|
+
cm1hdD4oUywgVmFsdWUsIEJ1ZmZlcik7Cn0K
|
1952
|
+
c51: |
|
1953
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OldyaXRlSW50MTZGb3JtYXQgPSAiJSIg
|
1954
|
+
UFJJaTE2Owo=
|
1955
|
+
c52: |
|
1956
|
+
ZXh0ZXJuIGNvbnN0IGNoYXIqIFdyaXRlSW50MzJGb3JtYXQ7CnRlbXBsYXRl
|
1957
|
+
PHR5cGVuYW1lIFNpbms+CnZvaWQgV3JpdGUoU2luayYgUywgc3RkOjppbnQz
|
1958
|
+
Ml90IFZhbHVlLCBzdGQ6OnZlY3RvcjxjaGFyPiYgQnVmZmVyKSB7CiAgICBX
|
1959
|
+
cml0ZVNjYWxhclR5cGU8U2luayxzdGQ6OmludDMyX3QsV3JpdGVJbnQzMkZv
|
1960
|
+
cm1hdD4oUywgVmFsdWUsIEJ1ZmZlcik7Cn0K
|
1961
|
+
c53: |
|
1962
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OldyaXRlSW50MzJGb3JtYXQgPSAiJSIg
|
1963
|
+
UFJJaTMyOwo=
|
1964
|
+
c54: |
|
1965
|
+
ZXh0ZXJuIGNvbnN0IGNoYXIqIFdyaXRlSW50NjRGb3JtYXQ7CnRlbXBsYXRl
|
1966
|
+
PHR5cGVuYW1lIFNpbms+CnZvaWQgV3JpdGUoU2luayYgUywgc3RkOjppbnQ2
|
1967
|
+
NF90IFZhbHVlLCBzdGQ6OnZlY3RvcjxjaGFyPiYgQnVmZmVyKSB7CiAgICBX
|
1968
|
+
cml0ZVNjYWxhclR5cGU8U2luayxzdGQ6OmludDY0X3QsV3JpdGVJbnQ2NEZv
|
1969
|
+
cm1hdD4oUywgVmFsdWUsIEJ1ZmZlcik7Cn0K
|
1970
|
+
c55: |
|
1971
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OldyaXRlSW50NjRGb3JtYXQgPSAiJSIg
|
1972
|
+
UFJJaTY0Owo=
|
1973
|
+
c56: |
|
1974
|
+
ZXh0ZXJuIGNvbnN0IGNoYXIqIFdyaXRlVUludDhGb3JtYXQ7CnRlbXBsYXRl
|
1975
|
+
PHR5cGVuYW1lIFNpbms+CnZvaWQgV3JpdGUoU2luayYgUywgc3RkOjp1aW50
|
1976
|
+
OF90IFZhbHVlLCBzdGQ6OnZlY3RvcjxjaGFyPiYgQnVmZmVyKSB7CiAgICBX
|
1977
|
+
cml0ZVNjYWxhclR5cGU8U2luayxzdGQ6OnVpbnQ4X3QsV3JpdGVVSW50OEZv
|
1978
|
+
cm1hdD4oUywgVmFsdWUsIEJ1ZmZlcik7Cn0K
|
1979
|
+
c57: |
|
1980
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OldyaXRlVUludDhGb3JtYXQgPSAiJSIg
|
1981
|
+
UFJJdTg7Cg==
|
1982
|
+
c58: |
|
1983
|
+
ZXh0ZXJuIGNvbnN0IGNoYXIqIFdyaXRlVUludDE2Rm9ybWF0Owp0ZW1wbGF0
|
1984
|
+
ZTx0eXBlbmFtZSBTaW5rPgp2b2lkIFdyaXRlKFNpbmsmIFMsIHN0ZDo6dWlu
|
1985
|
+
dDE2X3QgVmFsdWUsIHN0ZDo6dmVjdG9yPGNoYXI+JiBCdWZmZXIpIHsKICAg
|
1986
|
+
IFdyaXRlU2NhbGFyVHlwZTxTaW5rLHN0ZDo6dWludDE2X3QsV3JpdGVVSW50
|
1987
|
+
MTZGb3JtYXQ+KFMsIFZhbHVlLCBCdWZmZXIpOwp9Cg==
|
1988
|
+
c59: |
|
1989
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OldyaXRlVUludDE2Rm9ybWF0ID0gIiUi
|
1990
|
+
IFBSSXUxNjsK
|
1991
|
+
c60: |
|
1992
|
+
ZXh0ZXJuIGNvbnN0IGNoYXIqIFdyaXRlVUludDMyRm9ybWF0Owp0ZW1wbGF0
|
1993
|
+
ZTx0eXBlbmFtZSBTaW5rPgp2b2lkIFdyaXRlKFNpbmsmIFMsIHN0ZDo6dWlu
|
1994
|
+
dDMyX3QgVmFsdWUsIHN0ZDo6dmVjdG9yPGNoYXI+JiBCdWZmZXIpIHsKICAg
|
1995
|
+
IFdyaXRlU2NhbGFyVHlwZTxTaW5rLHN0ZDo6dWludDMyX3QsV3JpdGVVSW50
|
1996
|
+
MzJGb3JtYXQ+KFMsIFZhbHVlLCBCdWZmZXIpOwp9Cg==
|
1997
|
+
c61: |
|
1998
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OldyaXRlVUludDMyRm9ybWF0ID0gIiUi
|
1999
|
+
IFBSSXUzMjsK
|
2000
|
+
c62: |
|
2001
|
+
ZXh0ZXJuIGNvbnN0IGNoYXIqIFdyaXRlVUludDY0Rm9ybWF0Owp0ZW1wbGF0
|
2002
|
+
ZTx0eXBlbmFtZSBTaW5rPgp2b2lkIFdyaXRlKFNpbmsmIFMsIHN0ZDo6dWlu
|
2003
|
+
dDY0X3QgVmFsdWUsIHN0ZDo6dmVjdG9yPGNoYXI+JiBCdWZmZXIpIHsKICAg
|
2004
|
+
IFdyaXRlU2NhbGFyVHlwZTxTaW5rLHN0ZDo6dWludDY0X3QsV3JpdGVVSW50
|
2005
|
+
NjRGb3JtYXQ+KFMsIFZhbHVlLCBCdWZmZXIpOwp9Cg==
|
2006
|
+
c63: |
|
2007
|
+
Y29uc3QgY2hhciogc3BlY2pzb246OldyaXRlVUludDY0Rm9ybWF0ID0gIiUi
|
2008
|
+
IFBSSXU2NDsK
|
2009
|
+
c64: |
|
2010
|
+
dGVtcGxhdGU8dHlwZW5hbWUgU2luaywgdHlwZW5hbWUgVD4Kdm9pZCBXcml0
|
2011
|
+
ZShTaW5rJiBTLCBjb25zdCBUKiBWYWx1ZSwgc3RkOjp2ZWN0b3I8Y2hhcj4m
|
2012
|
+
IEJ1ZmZlcikgewogICAgaWYgKFZhbHVlICE9IG51bGxwdHIpCiAgICAgICAg
|
2013
|
+
V3JpdGUoUywgKlZhbHVlLCBCdWZmZXIpOwogICAgZWxzZSB7CiAgICAgICAg
|
2014
|
+
Y2hhciBudWxsW10gPSAibnVsbCI7CiAgICAgICAgUy53cml0ZSgmbnVsbCwg
|
2015
|
+
NCk7CiAgICB9Cn0K
|
2016
|
+
c65: |
|
2017
|
+
dGVtcGxhdGU8dHlwZW5hbWUgU2luaywgdHlwZW5hbWUgVD4Kdm9pZCBXcml0
|
2018
|
+
ZShTaW5rJiBTLCBjb25zdCBzdGQ6OnZlY3RvcjxUPiYgVmFsdWUsIHN0ZDo6
|
2019
|
+
dmVjdG9yPGNoYXI+JiBCdWZmZXIpIHsKICAgIGF1dG8gYiA9IFZhbHVlLmNi
|
2020
|
+
ZWdpbigpOwogICAgYXV0byBlID0gVmFsdWUuY2VuZCgpOwogICAgV3JpdGU8
|
2021
|
+
U2luayx0eXBlbmFtZSBzdGQ6OnZlY3RvcjxUPjo6Y29uc3RfaXRlcmF0b3I+
|
2022
|
+
KFMsIGIsIGUsIEJ1ZmZlcik7Cn0K
|
2023
|
+
c66: |
|
2024
|
+
ZXh0ZXJuIGNvbnN0IEV4Y2VwdGlvbiBJbnZhbGlkSlNPTkNoYXJhY3RlcjsK
|
2025
|
+
CnRlbXBsYXRlPHR5cGVuYW1lIFNpbms+CnZvaWQgV3JpdGUoCiAgICBTaW5r
|
2026
|
+
JiBTLCBjb25zdCBjaGFyKiBCZWdpbiwgY29uc3QgY2hhciogRW5kLCBzdGQ6
|
2027
|
+
OnZlY3RvcjxjaGFyPiYgQnVmZmVyKQp7CiAgICBjaGFyIHF1b3RlID0gJyIn
|
2028
|
+
OwogICAgY2hhciBlc2NhcGVkWzJdID0geyAnXFwnLCAnXHgwJyB9OwogICAg
|
2029
|
+
Uy53cml0ZSgmcXVvdGUsIDEpOwogICAgZm9yIChjb25zdCBjaGFyKiBjdXJy
|
2030
|
+
ID0gQmVnaW47IGN1cnIgPCBFbmQ7ICsrY3VycikgewogICAgICAgIHN3aXRj
|
2031
|
+
aCAoKmN1cnIpIHsKICAgICAgICBjYXNlICciJzogZXNjYXBlZFsxXSA9ICci
|
2032
|
+
JzsgYnJlYWs7CiAgICAgICAgY2FzZSAnXFwnOiBlc2NhcGVkWzFdID0gJ1xc
|
2033
|
+
JzsgYnJlYWs7CiAgICAgICAgY2FzZSAnXG4nOiBlc2NhcGVkWzFdID0gJ24n
|
2034
|
+
OyBicmVhazsKICAgICAgICBjYXNlICdcdCc6IGVzY2FwZWRbMV0gPSAndCc7
|
2035
|
+
IGJyZWFrOwogICAgICAgIGNhc2UgJ1xyJzogZXNjYXBlZFsxXSA9ICdyJzsg
|
2036
|
+
YnJlYWs7CiAgICAgICAgY2FzZSAnXGYnOiBlc2NhcGVkWzFdID0gJ2YnOyBi
|
2037
|
+
cmVhazsKICAgICAgICBjYXNlICdcYic6IGVzY2FwZWRbMV0gPSAnYic7IGJy
|
2038
|
+
ZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoZXNjYXBlZFsxXSkgewogICAg
|
2039
|
+
ICAgICAgICBTLndyaXRlKEJlZ2luLCBjdXJyIC0gQmVnaW4pOwogICAgICAg
|
2040
|
+
ICAgICBTLndyaXRlKGVzY2FwZWQsIDIpOwogICAgICAgICAgICBlc2NhcGVk
|
2041
|
+
WzFdID0gMDsKICAgICAgICAgICAgQmVnaW4gPSBjdXJyICsgMTsKICAgICAg
|
2042
|
+
ICB9IGVsc2UgewogICAgICAgICAgICBpZiBjb25zdGV4cHIgKCdceDgwJyA8
|
2043
|
+
IDApIHsKICAgICAgICAgICAgICAgIGlmICgwIDw9ICpjdXJyICYmICpjdXJy
|
2044
|
+
IDwgJ1x4MjAnKQogICAgICAgICAgICAgICAgICAgIHRocm93IEludmFsaWRK
|
2045
|
+
U09OQ2hhcmFjdGVyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
|
2046
|
+
ICAgICAgaWYgKCpjdXJyIDwgJ1x4MjAnKQogICAgICAgICAgICAgICAgICAg
|
2047
|
+
IHRocm93IEludmFsaWRKU09OQ2hhcmFjdGVyOwogICAgICAgICAgICB9CiAg
|
2048
|
+
ICAgICAgfQogICAgfQogICAgaWYgKEJlZ2luIDwgRW5kKQogICAgICAgIFMu
|
2049
|
+
d3JpdGUoQmVnaW4sIEVuZCAtIEJlZ2luKTsKICAgIFMud3JpdGUoJnF1b3Rl
|
2050
|
+
LCAxKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgU2luaz4Kdm9pZCBXcml0ZShT
|
2051
|
+
aW5rJiBTLCBjb25zdCBzdGQ6OnN0cmluZyYgVmFsdWUsIHN0ZDo6dmVjdG9y
|
2052
|
+
PGNoYXI+JiBCdWZmZXIpIHsKICAgIFdyaXRlKFMsIFZhbHVlLmNfc3RyKCks
|
2053
|
+
IFZhbHVlLmNfc3RyKCkgKyBWYWx1ZS5zaXplKCksIEJ1ZmZlcik7Cn0KCnRl
|
2054
|
+
bXBsYXRlPHR5cGVuYW1lIFNpbms+CnZvaWQgV3JpdGUoU2luayYgUywgY29u
|
2055
|
+
c3QgY2hhciogVmFsdWUsIHN0ZDo6dmVjdG9yPGNoYXI+JiBCdWZmZXIpIHsK
|
2056
|
+
ICAgIGlmIChWYWx1ZSAhPSBudWxscHRyKQogICAgICAgIFdyaXRlKFMsIFZh
|
2057
|
+
bHVlLCBWYWx1ZSArIHN0ZDo6c3RybGVuKFZhbHVlKSwgQnVmZmVyKTsKICAg
|
2058
|
+
IGVsc2UgewogICAgICAgIGNoYXIgbnVsbFtdID0gIm51bGwiOwogICAgICAg
|
2059
|
+
IFMud3JpdGUobnVsbCwgNCk7CiAgICB9Cn0K
|
2060
|
+
c67: |
|
2061
|
+
Y29uc3QgRXhjZXB0aW9uIHNwZWNqc29uOjpJbnZhbGlkSlNPTkNoYXJhY3Rl
|
2062
|
+
cigiSW52YWxpZCBKU09OIGNoYXJhY3Rlci4iKTsK
|
2063
|
+
))
|
2064
|
+
#PIECESASSIGNMENTEND#
|
2065
|
+
|
2066
|
+
if $CLEAN
|
2067
|
+
$PIECES = {}
|
2068
|
+
$FILECONTENTS = {}
|
2069
|
+
end
|
2070
|
+
|
2071
|
+
$FILECONTENTS.each_pair do |key, value|
|
2072
|
+
$FILECONTENTS[key] = Base64.decode64(value)
|
2073
|
+
end
|
2074
|
+
|
2075
|
+
$DEFAULT = %(---
|
2076
|
+
piece:
|
2077
|
+
includes: [] # Lines or blocks of (conditional) includes inserted in header.
|
2078
|
+
source_includes: [] # As above but inserted in source file.
|
2079
|
+
requires: [] # Other piece names that are required.
|
2080
|
+
writer: false # Only true for pieces that have Write-function template.
|
2081
|
+
scalar: true # True when piece parses a simple scalar value (int, string).
|
2082
|
+
external: true # True when user can use the piece name in input specification.
|
2083
|
+
declaration: ~ # Forward declaration for header file.
|
2084
|
+
parsername: ~ # Parser class name.
|
2085
|
+
pooled: ~ # ParserPool index replaces this string for parsers that use pool.
|
2086
|
+
# These can only be given if pooled is not specified.
|
2087
|
+
poolindexes: ~ # ParserPool Parsers enum contents replace this string.
|
2088
|
+
poolparsers: ~ # ParserPool Parser tuple contents replace this string.
|
2089
|
+
poolparsertypes: ~ # ParserPool Value tuple contents replace this string.
|
2090
|
+
specification:
|
2091
|
+
namespace: specjson # Name space for output files.
|
2092
|
+
full: false # Include unused parsers.
|
2093
|
+
requires: [] # Pieces that are needed by code but not specified in types.
|
2094
|
+
types: { } # Type names mapped to field specification objects.
|
2095
|
+
generate: { } # Type names from types mapped to code generate instructions.
|
2096
|
+
header_extension: hpp # Header file name extension. Used if header not given.
|
2097
|
+
source_extension: cpp # Source file name extension. Used if source not given.
|
2098
|
+
header: ~ # Specification name.header_extension unless given.
|
2099
|
+
source: ~ # Specification name.source_extension unless given.
|
2100
|
+
types: # An object with field name mapped to object below.
|
2101
|
+
format: REQUIRED # Piece name string or array of piece names.
|
2102
|
+
required: true # Indicates whether field must be present in object.
|
2103
|
+
checker: ~ # String inserted to code to check optional field in Write.
|
2104
|
+
accessor: ~ # String inserted to code to get field value in Write.
|
2105
|
+
generate:
|
2106
|
+
parser: false # Produce parser code for the type.
|
2107
|
+
writer: false # Produce Write function and template for the type.
|
2108
|
+
)
|
2109
|
+
|
2110
|
+
puts($DEFAULT) if $DOC
|
2111
|
+
|
2112
|
+
$DEFAULT = YAML.safe_load($DEFAULT)
|
2113
|
+
|
2114
|
+
def aargh(message, exit_code = nil)
|
2115
|
+
$stderr.puts message
|
2116
|
+
exit exit_code unless exit_code.nil?
|
2117
|
+
end
|
2118
|
+
|
2119
|
+
def load_piece_file(piece, field, directory)
|
2120
|
+
filename = piece.fetch(field, nil)
|
2121
|
+
if filename.nil?
|
2122
|
+
piece[field] = nil
|
2123
|
+
piece["#{field}_stored"] = nil
|
2124
|
+
return
|
2125
|
+
end
|
2126
|
+
begin
|
2127
|
+
filename = File.realpath(filename, directory)
|
2128
|
+
puts filename
|
2129
|
+
f = File.new(filename, 'r')
|
2130
|
+
content = IO.read(f)
|
2131
|
+
f.close
|
2132
|
+
rescue StandardError
|
2133
|
+
aargh("Failed to open/read: #{filename}", 3)
|
2134
|
+
end
|
2135
|
+
stored = $FILECONTENTS.key(content)
|
2136
|
+
if stored.nil?
|
2137
|
+
stored = "c#{$FILECONTENTS.size}"
|
2138
|
+
$FILECONTENTS[stored] = content
|
2139
|
+
end
|
2140
|
+
piece["#{field}_stored"] = stored
|
2141
|
+
end
|
2142
|
+
|
2143
|
+
def defaults(kind, spec)
|
2144
|
+
$DEFAULT[kind].each_pair do |field, value|
|
2145
|
+
if spec.key? field
|
2146
|
+
if value.is_a?(Array) && !spec[field].is_a?(Array)
|
2147
|
+
spec[field] = [ spec[field] ]
|
2148
|
+
end
|
2149
|
+
else
|
2150
|
+
spec[field] = value
|
2151
|
+
end
|
2152
|
+
end
|
2153
|
+
end
|
2154
|
+
|
2155
|
+
def default(spec, field, value)
|
2156
|
+
spec[field] = value unless spec.key? field
|
2157
|
+
end
|
2158
|
+
|
2159
|
+
def check_given(spec, kind, field, error)
|
2160
|
+
aargh(error, 4) unless spec[field] != $DEFAULT[kind][field]
|
2161
|
+
end
|
2162
|
+
|
2163
|
+
def load_spec(filename, root = nil)
|
2164
|
+
begin
|
2165
|
+
unless root.nil?
|
2166
|
+
filename = File.realpath(filename, root)
|
2167
|
+
puts filename
|
2168
|
+
end
|
2169
|
+
f = File.open(filename, 'r')
|
2170
|
+
input = IO.read(f)
|
2171
|
+
f.close
|
2172
|
+
rescue StandardError
|
2173
|
+
aargh("Failed to find/read #{filename}", 3)
|
2174
|
+
end
|
2175
|
+
begin
|
2176
|
+
specs = JSON.parse(input)
|
2177
|
+
rescue StandardError
|
2178
|
+
begin
|
2179
|
+
specs = YAML.safe_load(input)
|
2180
|
+
rescue StandardError
|
2181
|
+
aargh("#{filename} neither JSON nor YAML.", 3)
|
2182
|
+
end
|
2183
|
+
end
|
2184
|
+
specs
|
2185
|
+
end
|
2186
|
+
|
2187
|
+
unless $RECIPE.nil?
|
2188
|
+
recipe = load_spec($RECIPE)
|
2189
|
+
root = File.dirname(File.realpath($RECIPE))
|
2190
|
+
unless recipe.is_a? Array
|
2191
|
+
aargh('Recipe file must be a YAML array of file names.', 2)
|
2192
|
+
end
|
2193
|
+
recipe.each do |filename|
|
2194
|
+
piece = load_spec(filename, root)
|
2195
|
+
d = File.dirname(File.realpath(filename, root))
|
2196
|
+
piece.each_pair do |name, spec|
|
2197
|
+
load_piece_file(spec, 'header', d)
|
2198
|
+
load_piece_file(spec, 'source', d)
|
2199
|
+
load_piece_file(spec, 'license', d)
|
2200
|
+
defaults('piece', spec)
|
2201
|
+
spec['external'] = false if spec['external'] && spec['writer']
|
2202
|
+
if spec['external']
|
2203
|
+
check_given(spec, 'piece', 'parsername', "#{filename} #{name} has no 'parsername'")
|
2204
|
+
end
|
2205
|
+
unless spec['pooled'].nil?
|
2206
|
+
%w[poolindexes poolparsers poolparsertypes].each do |field|
|
2207
|
+
raise ArgumentError "#{name} has both pooled and #{field}" unless spec[field].nil?
|
2208
|
+
end
|
2209
|
+
end
|
2210
|
+
puts("Replacing #{name}") if $PIECES.key? name
|
2211
|
+
$PIECES[name] = spec
|
2212
|
+
end
|
2213
|
+
end
|
2214
|
+
end
|
2215
|
+
|
2216
|
+
if $LIST
|
2217
|
+
all = []
|
2218
|
+
$PIECES.each_pair do |name, piece|
|
2219
|
+
all.push("#{name}#{piece['external'] ? '' : ' (internal)'}")
|
2220
|
+
end
|
2221
|
+
all.sort!
|
2222
|
+
puts all
|
2223
|
+
end
|
2224
|
+
|
2225
|
+
# Check that requirements are met.
|
2226
|
+
missing = false
|
2227
|
+
$PIECES.each_pair do |name, spec|
|
2228
|
+
spec['requires'].each do |r|
|
2229
|
+
unless $PIECES.key? r
|
2230
|
+
aargh("#{name} missing requirement: #{r}")
|
2231
|
+
missing = true
|
2232
|
+
end
|
2233
|
+
end
|
2234
|
+
end
|
2235
|
+
exit(4) if missing && !$WARN
|
2236
|
+
|
2237
|
+
if $EXPORT
|
2238
|
+
pieces = {}
|
2239
|
+
name2store = {}
|
2240
|
+
$PIECES.each_pair do |name, piece|
|
2241
|
+
piece = piece.clone
|
2242
|
+
%w[header source license].each do |field|
|
2243
|
+
next if piece[field].nil?
|
2244
|
+
b = File.basename piece[field]
|
2245
|
+
s = piece["#{field}_stored"]
|
2246
|
+
if name2store.key? b
|
2247
|
+
name2store[b].push(s) unless name2store[b].include? s
|
2248
|
+
else
|
2249
|
+
name2store[b] = [ s ]
|
2250
|
+
end
|
2251
|
+
piece[field] = b
|
2252
|
+
end
|
2253
|
+
pieces[name] = piece
|
2254
|
+
end
|
2255
|
+
collisions = []
|
2256
|
+
name2store.each_pair do |b, s|
|
2257
|
+
if s.size == 1
|
2258
|
+
f = File.new(b, 'w')
|
2259
|
+
f.write($FILECONTENTS[s[0]])
|
2260
|
+
f.close
|
2261
|
+
else
|
2262
|
+
collisions.push b
|
2263
|
+
end
|
2264
|
+
end
|
2265
|
+
store2name = {}
|
2266
|
+
collisions.each do |b|
|
2267
|
+
s = name2store[b]
|
2268
|
+
name2store.delete b
|
2269
|
+
pre = File.basename(b, '.*')
|
2270
|
+
ext = b.slice(pre.size, b.size - pre.size)
|
2271
|
+
idx = 0
|
2272
|
+
bn = b
|
2273
|
+
s.each do |c|
|
2274
|
+
while name2store.key? bn
|
2275
|
+
idx += 1
|
2276
|
+
bn = "#{pre}_#{idx}#{ext}"
|
2277
|
+
end
|
2278
|
+
store2name[c] = bn
|
2279
|
+
f = File.new(bn, 'w')
|
2280
|
+
f.write($FILECONTENTS[c])
|
2281
|
+
f.close
|
2282
|
+
name2store[bn] = [ c ]
|
2283
|
+
end
|
2284
|
+
end
|
2285
|
+
list = []
|
2286
|
+
pieces.each_pair do |name, piece|
|
2287
|
+
%w[header source license].each do |field|
|
2288
|
+
if piece[field].nil?
|
2289
|
+
piece.delete field
|
2290
|
+
else
|
2291
|
+
s = piece["#{field}_stored"]
|
2292
|
+
piece[field] = store2name[s] if store2name.key? s
|
2293
|
+
end
|
2294
|
+
piece.delete "#{field}_stored"
|
2295
|
+
end
|
2296
|
+
list.push "#{name}.yaml"
|
2297
|
+
f = File.new(list.last, 'w')
|
2298
|
+
f.write(YAML.dump({ name => piece }))
|
2299
|
+
f.close
|
2300
|
+
end
|
2301
|
+
f = File.new('exported.yaml', 'w')
|
2302
|
+
f.write(YAML.dump(list))
|
2303
|
+
f.close
|
2304
|
+
end
|
2305
|
+
|
2306
|
+
unless $BUILD.nil?
|
2307
|
+
script = File.new($PROGRAM_NAME, chomp: true).readlines
|
2308
|
+
first = script.find_index { |ln| ln.start_with? '#PIECESASSIGNMENTSTART#' }
|
2309
|
+
last = script.find_index { |ln| ln.start_with? '#PIECESASSIGNMENTEND#' }
|
2310
|
+
if first.nil? || last.nil? || last < first
|
2311
|
+
aargh('Failed to find lines starting with, or in wrong order: #PIECESASSIGNMENTSTART# #PIECESASSIGNMENTEND#', 2)
|
2312
|
+
end
|
2313
|
+
succeeding = script.slice(last, script.size - last).join
|
2314
|
+
script = script.slice(0, first + 1).join
|
2315
|
+
encoded = {}
|
2316
|
+
$FILECONTENTS.each_pair do |key, value|
|
2317
|
+
encoded[key] = Base64.encode64(value)
|
2318
|
+
end
|
2319
|
+
script.concat(%(
|
2320
|
+
$PIECES = YAML.load(%(#{YAML.dump($PIECES)}))
|
2321
|
+
$FILECONTENTS = YAML.load(%(#{YAML.dump(encoded)}))
|
2322
|
+
))
|
2323
|
+
script.concat(succeeding)
|
2324
|
+
IO.write($BUILD, script)
|
2325
|
+
File.chmod(0o755, $BUILD)
|
2326
|
+
end
|
2327
|
+
|
2328
|
+
exit(0) if $IN.nil?
|
2329
|
+
|
2330
|
+
specs = load_spec($IN)
|
2331
|
+
|
2332
|
+
$PIECES.each_pair { |name, piece| piece['name'] = name }
|
2333
|
+
|
2334
|
+
def all_requirements(piece, reqs)
|
2335
|
+
unless reqs.include? piece['name']
|
2336
|
+
reqs.push piece['name']
|
2337
|
+
piece['requires'].each do |r|
|
2338
|
+
all_requirements($PIECES[r], reqs) unless reqs.include? r
|
2339
|
+
end
|
2340
|
+
end
|
2341
|
+
reqs
|
2342
|
+
end
|
2343
|
+
|
2344
|
+
$PIECES.each_value do |piece|
|
2345
|
+
piece['all_requires'] = all_requirements(piece, [])
|
2346
|
+
end
|
2347
|
+
|
2348
|
+
def parserpool_substitutions(needed, namespace)
|
2349
|
+
$pools = []
|
2350
|
+
$pooled = []
|
2351
|
+
needed.each do |name|
|
2352
|
+
piece = $PIECES[name]
|
2353
|
+
$pools.push(name) unless piece['poolindexes'].nil? && piece['poolparsers'].nil? && piece['poolparsertypes'].nil?
|
2354
|
+
$pooled.push(name) unless piece['pooled'].nil?
|
2355
|
+
%w[header source].each do |field|
|
2356
|
+
fc = piece["#{field}_stored"]
|
2357
|
+
next if fc.nil?
|
2358
|
+
piece["#{field}_content"] = String.new($FILECONTENTS[fc])
|
2359
|
+
next if 'specjson' == namespace
|
2360
|
+
until piece["#{field}_content"].sub!('specjson::', "#{namespace}::").nil?
|
2361
|
+
end
|
2362
|
+
end
|
2363
|
+
end
|
2364
|
+
poolvals = {
|
2365
|
+
'poolindexes' => [],
|
2366
|
+
'poolparsers' => [],
|
2367
|
+
'poolparsertypes' => []
|
2368
|
+
}
|
2369
|
+
$pooled.each_index do |k|
|
2370
|
+
piece = $PIECES[$pooled[k]]
|
2371
|
+
poolvals['poolindexes'].push $pooled[k]
|
2372
|
+
poolvals['poolparsers'].push piece['parsername']
|
2373
|
+
poolvals['poolparsertypes'].push "#{piece['parsername']}::Type"
|
2374
|
+
[ 'header', 'source' ].each do |field|
|
2375
|
+
fc = piece["#{field}_stored"]
|
2376
|
+
next if fc.nil?
|
2377
|
+
until piece["#{field}_content"].sub!(piece['pooled'], k.to_s).nil?
|
2378
|
+
end
|
2379
|
+
end
|
2380
|
+
end
|
2381
|
+
poolvals.each_pair { |k, v| poolvals[k] = v.join(', ') }
|
2382
|
+
$pools.each do |name|
|
2383
|
+
piece = $PIECES[name]
|
2384
|
+
%w[header source].each do |field|
|
2385
|
+
fc = piece["#{field}_stored"]
|
2386
|
+
next if fc.nil?
|
2387
|
+
poolvals.each_pair do |fld, value|
|
2388
|
+
until piece["#{field}_content"].sub!(piece[fld], value).nil?
|
2389
|
+
end
|
2390
|
+
end
|
2391
|
+
end
|
2392
|
+
end
|
2393
|
+
$pooledreqs = []
|
2394
|
+
$pooled.each do |name|
|
2395
|
+
piece = $PIECES[name]
|
2396
|
+
piece['all_requires'].each do |p|
|
2397
|
+
$pooledreqs.push p unless p == name
|
2398
|
+
end
|
2399
|
+
end
|
2400
|
+
$pooledreqs.uniq!
|
2401
|
+
end
|
2402
|
+
|
2403
|
+
def licenses(needed)
|
2404
|
+
lic2id = { }
|
2405
|
+
needed.each do |name|
|
2406
|
+
lic = $PIECES[name]['license_stored']
|
2407
|
+
next if lic.nil? || lic2id.key?(lic)
|
2408
|
+
lic2id[lic] = "License #{lic2id.size + 1}"
|
2409
|
+
end
|
2410
|
+
lic2id
|
2411
|
+
end
|
2412
|
+
|
2413
|
+
def compare_pieces(a, b)
|
2414
|
+
a = $PIECES[a]
|
2415
|
+
b = $PIECES[b]
|
2416
|
+
# Group writers at the end.
|
2417
|
+
if a['writer']
|
2418
|
+
return 1 unless b['writer']
|
2419
|
+
else
|
2420
|
+
return -1 if b['writer']
|
2421
|
+
end
|
2422
|
+
areqs = a['all_requires']
|
2423
|
+
breqs = b['all_requires']
|
2424
|
+
if areqs.include? b['name']
|
2425
|
+
return areqs.length <=> breqs.length if breqs.include? a['name']
|
2426
|
+
return 1
|
2427
|
+
end
|
2428
|
+
return -1 if breqs.include? a['name']
|
2429
|
+
if a['writer'] && b['writer']
|
2430
|
+
if a['scalar']
|
2431
|
+
return -1 unless b['scalar']
|
2432
|
+
else
|
2433
|
+
return 1 if b['scalar']
|
2434
|
+
end
|
2435
|
+
end
|
2436
|
+
# Neither requires the other. Keep pools and pooled items before others.
|
2437
|
+
if $pooledreqs.include? a['name']
|
2438
|
+
return -1 unless $pooledreqs.include? b['name']
|
2439
|
+
else
|
2440
|
+
return 1 if $pooledreqs.include? b['name']
|
2441
|
+
end
|
2442
|
+
if $pooled.include? a['name']
|
2443
|
+
return -1 unless $pooled.include? b['name']
|
2444
|
+
else
|
2445
|
+
return 1 if $pooled.include? b['name']
|
2446
|
+
end
|
2447
|
+
if $pools.include? a['name']
|
2448
|
+
return -1 unless $pools.include? b['name']
|
2449
|
+
else
|
2450
|
+
return 1 if $pools.include? b['name']
|
2451
|
+
end
|
2452
|
+
return areqs.length <=> breqs.length unless areqs.length == breqs.length
|
2453
|
+
a['name'] <=> b['name']
|
2454
|
+
end
|
2455
|
+
|
2456
|
+
def arrange_needed(needed)
|
2457
|
+
pools = needed.select { |name| $pools.include? name }
|
2458
|
+
others = needed.reject { |name| pools.include?(name) }
|
2459
|
+
others.sort! { |a, b| compare_pieces(a, b) }
|
2460
|
+
last = others.rindex { |name| $pooled.include? name }
|
2461
|
+
needed = others.slice!(0, last + 1)
|
2462
|
+
others.concat pools
|
2463
|
+
others.sort! { |a, b| compare_pieces(a, b) }
|
2464
|
+
needed.concat others
|
2465
|
+
needed
|
2466
|
+
end
|
2467
|
+
|
2468
|
+
def unique_in_order(piece_names, field)
|
2469
|
+
values = []
|
2470
|
+
piece_names.each do |name|
|
2471
|
+
piece = $PIECES[name]
|
2472
|
+
next if piece[field].nil?
|
2473
|
+
if piece[field].is_a? String
|
2474
|
+
values.push(piece[field]) unless values.include? piece[field]
|
2475
|
+
else
|
2476
|
+
piece[field].each do |line|
|
2477
|
+
values.push(line) unless values.include? line
|
2478
|
+
end
|
2479
|
+
end
|
2480
|
+
end
|
2481
|
+
values
|
2482
|
+
end
|
2483
|
+
|
2484
|
+
def license_block(lic2id)
|
2485
|
+
blocks = []
|
2486
|
+
lic2id.each_pair do |lic, id|
|
2487
|
+
blocks.push %(
|
2488
|
+
#if 0
|
2489
|
+
/*
|
2490
|
+
#{id}:
|
2491
|
+
|
2492
|
+
#{$FILECONTENTS[lic]}
|
2493
|
+
*/
|
2494
|
+
#endif
|
2495
|
+
)
|
2496
|
+
end
|
2497
|
+
blocks.join("\n")
|
2498
|
+
end
|
2499
|
+
|
2500
|
+
def make_header(spec, piece_names, generated, lic2id)
|
2501
|
+
h = File.new(spec['header'], 'w')
|
2502
|
+
h.puts %(// Auto-generated file. Do not edit.
|
2503
|
+
#if !defined(#{spec['header'].upcase.sub('.', '_')})
|
2504
|
+
#define #{spec['header'].upcase.sub('.', '_')}
|
2505
|
+
|
2506
|
+
#{license_block(lic2id)}
|
2507
|
+
)
|
2508
|
+
h.puts %(
|
2509
|
+
#{unique_in_order(piece_names, 'includes').join("\n")}
|
2510
|
+
|
2511
|
+
namespace #{spec['namespace']} {
|
2512
|
+
|
2513
|
+
#{unique_in_order(piece_names, 'declaration').join("\n")}
|
2514
|
+
#{(generated.keys.map { |k| generated[k][:forward].join("\n") }).join("\n")}
|
2515
|
+
)
|
2516
|
+
prev = nil
|
2517
|
+
piece_names.each do |name|
|
2518
|
+
piece = $PIECES[name]
|
2519
|
+
next if piece['header_stored'].nil?
|
2520
|
+
lic = piece['license_stored']
|
2521
|
+
if lic != prev
|
2522
|
+
h.puts
|
2523
|
+
h.puts(lic.nil? ? '// Unspecified license.' : "// Under #{lic2id[lic]}.")
|
2524
|
+
prev = lic
|
2525
|
+
end
|
2526
|
+
h.puts
|
2527
|
+
h.puts "// Origin: #{piece['header']}"
|
2528
|
+
h.puts(piece['header_content'])
|
2529
|
+
end
|
2530
|
+
generated.each_pair do |typename, object|
|
2531
|
+
h.puts %Q(
|
2532
|
+
// #{typename}
|
2533
|
+
#{object[:extern].join("\n")}
|
2534
|
+
|
2535
|
+
#{object[:typedef].join("\n")}
|
2536
|
+
|
2537
|
+
#{object[:class].join("\n")}
|
2538
|
+
)
|
2539
|
+
end
|
2540
|
+
h.puts %Q(
|
2541
|
+
} // namespace #{spec['namespace']}
|
2542
|
+
|
2543
|
+
#endif)
|
2544
|
+
h.close
|
2545
|
+
return spec['header']
|
2546
|
+
end
|
2547
|
+
|
2548
|
+
def make_source(spec, piece_names, generated, lic2id, header_name)
|
2549
|
+
h = File.new(spec['source'], 'w')
|
2550
|
+
h.puts %(// Auto-generated file. Do not edit.
|
2551
|
+
#{license_block(lic2id)}
|
2552
|
+
|
2553
|
+
#define INCLUDED_FROM_GENERATED_SOURCE 1
|
2554
|
+
#include "#{header_name}"
|
2555
|
+
#undef INCLUDED_FROM_GENERATED_SOURCE
|
2556
|
+
#{unique_in_order(piece_names, 'source_includes').join("\n")}
|
2557
|
+
|
2558
|
+
using namespace #{spec['namespace']};
|
2559
|
+
)
|
2560
|
+
prev = nil
|
2561
|
+
piece_names.each do |name|
|
2562
|
+
piece = $PIECES[name]
|
2563
|
+
next if piece['source_stored'].nil?
|
2564
|
+
lic = piece['license_stored']
|
2565
|
+
if lic != prev
|
2566
|
+
h.puts
|
2567
|
+
h.puts(lic.nil? ? '// Unspecified license.' : "// Under #{lic2id[lic]}.")
|
2568
|
+
prev = lic
|
2569
|
+
end
|
2570
|
+
h.puts
|
2571
|
+
h.puts "// Origin: #{piece['source']}"
|
2572
|
+
h.puts(piece['source_content'])
|
2573
|
+
end
|
2574
|
+
generated.each_pair do |typename, object|
|
2575
|
+
h.puts %(
|
2576
|
+
// #{typename}
|
2577
|
+
#{object[:extern_src].join("\n")}
|
2578
|
+
)
|
2579
|
+
end
|
2580
|
+
h.close
|
2581
|
+
return spec['source']
|
2582
|
+
end
|
2583
|
+
|
2584
|
+
specs.each_pair do |name, spec|
|
2585
|
+
defaults('specification', spec)
|
2586
|
+
default(spec, 'name', name)
|
2587
|
+
spec['header'] = "#{spec['name']}.#{spec['header_extension']}" if spec['header'].nil?
|
2588
|
+
spec['source'] = "#{spec['name']}.#{spec['source_extension']}" if spec['source'].nil?
|
2589
|
+
spec['generate'].each_pair do |typename, gen|
|
2590
|
+
unless spec['types'].key? typename
|
2591
|
+
aargh("#{name} generate #{typename} has no match in types: #{spec['types'].keys.sort.join(' ')}", 4)
|
2592
|
+
end
|
2593
|
+
defaults('generate', gen)
|
2594
|
+
end
|
2595
|
+
spec['types'].each_pair do |typename, object|
|
2596
|
+
unless spec['generate'].key? typename
|
2597
|
+
puts "#{name} #{typename} deleted since it has no match in generate: #{spec['generate'].keys.sort.join(' ')}"
|
2598
|
+
spec['types'].delete typename
|
2599
|
+
next
|
2600
|
+
end
|
2601
|
+
reqs = []
|
2602
|
+
object.each_pair do |field, desc|
|
2603
|
+
defaults('types', desc)
|
2604
|
+
if spec['generate'][typename]['parser']
|
2605
|
+
check_given(spec, 'types', 'format', "#{name} #{typename} #{field} has no 'format'.")
|
2606
|
+
desc['format'] = [ desc['format'] ] unless desc['format'].is_a? Array
|
2607
|
+
reqs.concat desc['format']
|
2608
|
+
end
|
2609
|
+
gen = spec['generate'][typename]
|
2610
|
+
if gen['writer'] && !gen['parser'] # Parser sets defaults later.
|
2611
|
+
unless desc['required']
|
2612
|
+
check_given(desc, 'types', 'checker', "#{name} #{typename} #{field} has no 'checker'.")
|
2613
|
+
end
|
2614
|
+
check_given(desc, 'types', 'accessor', "#{name} #{typename} #{field} has no 'accessor'.")
|
2615
|
+
end
|
2616
|
+
end
|
2617
|
+
object[:requires] = reqs.uniq
|
2618
|
+
end
|
2619
|
+
spec['types'].each_pair do |typename, object|
|
2620
|
+
object.each_pair do |field, desc|
|
2621
|
+
next unless field.is_a? String
|
2622
|
+
next unless spec['generate'][typename]['parser']
|
2623
|
+
desc['format'].each do |f|
|
2624
|
+
unless f.is_a? String
|
2625
|
+
aargh("#{name} #{typename} #{field} format not string.", 4)
|
2626
|
+
end
|
2627
|
+
if $PIECES.key? f
|
2628
|
+
object[:requires].push f
|
2629
|
+
next if $PIECES[f]['external']
|
2630
|
+
aargh("#{name} #{typename} #{field} format #{f} internal.", 4)
|
2631
|
+
end
|
2632
|
+
if spec['generate'].key? f
|
2633
|
+
next if spec['generate'][f]['parser']
|
2634
|
+
aargh("#{name} #{typename} #{field} format #{f} no parser.", 4)
|
2635
|
+
end
|
2636
|
+
if spec['types'].key? f
|
2637
|
+
aargh("#{name} #{typename} #{field} format #{f} not generated.")
|
2638
|
+
else
|
2639
|
+
aargh("#{name} #{typename} #{field} format #{f} not found: #{spec['types'].keys.sort.join(' ')}")
|
2640
|
+
end
|
2641
|
+
exit(4)
|
2642
|
+
end
|
2643
|
+
end
|
2644
|
+
end
|
2645
|
+
end
|
2646
|
+
|
2647
|
+
def classify_expression(expr)
|
2648
|
+
# Simple but good enough for now. If expression gets confused with method,
|
2649
|
+
# add space in any place where it does not affect the meaning.
|
2650
|
+
return :expression if expr.nil? # Will go unused in this case.
|
2651
|
+
return :expression if expr.include? ' '
|
2652
|
+
return :expression if expr.include?('.') || expr.include?('->')
|
2653
|
+
return :method if expr.end_with? '()'
|
2654
|
+
:member
|
2655
|
+
end
|
2656
|
+
|
2657
|
+
def write_function(spec, typename)
|
2658
|
+
object = spec['types'][typename]
|
2659
|
+
all_req = true
|
2660
|
+
object.each_value do |desc|
|
2661
|
+
all_req = false unless desc['required']
|
2662
|
+
end
|
2663
|
+
lines = [ %(
|
2664
|
+
#if !defined(INCLUDED_FROM_GENERATED_SOURCE)
|
2665
|
+
template<typename Sink>
|
2666
|
+
void Write(Sink& S, const #{typename}& Value, std::vector<char>& Buffer) {
|
2667
|
+
char c = '{';
|
2668
|
+
S.write(&c, 1);) ]
|
2669
|
+
lines.push(' bool separated = true;') unless all_req
|
2670
|
+
prev_req = nil
|
2671
|
+
fields = object.keys
|
2672
|
+
# If write order is ever something other than the key one, change it here.
|
2673
|
+
fields.each do |field|
|
2674
|
+
desc = object[field]
|
2675
|
+
fill = ''
|
2676
|
+
unless desc['required']
|
2677
|
+
lines.push " if (Value.#{desc['checker']}) {"
|
2678
|
+
fill = ' '
|
2679
|
+
end
|
2680
|
+
unless prev_req.nil?
|
2681
|
+
if all_req || prev_req
|
2682
|
+
lines.push "#{fill} c = ',';"
|
2683
|
+
lines.push "#{fill} S.write(&c, 1);"
|
2684
|
+
elsif !prev_req.nil?
|
2685
|
+
lines.push "#{fill} if (!separated) {"
|
2686
|
+
lines.push "#{fill} c = ',';"
|
2687
|
+
lines.push "#{fill} S.write(&c, 1);"
|
2688
|
+
lines.push "#{fill} }"
|
2689
|
+
end
|
2690
|
+
end
|
2691
|
+
lines.push "#{fill} Write(S, #{typename}_#{field}, Buffer);"
|
2692
|
+
lines.push "#{fill} c = ':';"
|
2693
|
+
lines.push "#{fill} S.write(&c, 1);"
|
2694
|
+
lines.push "#{fill} Write(S, Value.#{desc['accessor']}, Buffer);"
|
2695
|
+
lines.push("#{fill} separated = false;") unless all_req || field == fields.last
|
2696
|
+
lines.push(' }') unless desc['required']
|
2697
|
+
prev_req = desc['required']
|
2698
|
+
end
|
2699
|
+
lines.push %( c = '}';
|
2700
|
+
S.write(&c, 1);
|
2701
|
+
}
|
2702
|
+
#endif // INCLUDED_FROM_GENERATED_SOURCE
|
2703
|
+
)
|
2704
|
+
lines.join("\n")
|
2705
|
+
end
|
2706
|
+
|
2707
|
+
specs.each_pair do |name, spec|
|
2708
|
+
needed = []
|
2709
|
+
needed.concat spec['requires']
|
2710
|
+
spec['generate'].each_key do |typename|
|
2711
|
+
next unless spec['types'][typename].key? :requires
|
2712
|
+
needed.concat spec['types'][typename][:requires]
|
2713
|
+
needed.push 'ParseObject'
|
2714
|
+
spec['types'][typename].delete :requires
|
2715
|
+
end
|
2716
|
+
if needed.empty?
|
2717
|
+
unless spec['full']
|
2718
|
+
puts "#{name} needs nothing and not full, skipped."
|
2719
|
+
next
|
2720
|
+
end
|
2721
|
+
needed = $PIECES.keys
|
2722
|
+
else
|
2723
|
+
if spec['full']
|
2724
|
+
needed.concat($PIECES.keys)
|
2725
|
+
else
|
2726
|
+
$PIECES.each_pair do |name, piece|
|
2727
|
+
needed.push(name) if piece['writer']
|
2728
|
+
end
|
2729
|
+
reqs = []
|
2730
|
+
needed.each { |typename| reqs.concat $PIECES[typename]['requires'] }
|
2731
|
+
reqs.uniq!
|
2732
|
+
while true
|
2733
|
+
s = reqs.size
|
2734
|
+
added = []
|
2735
|
+
reqs.each { |typename| added.concat $PIECES[typename]['requires'] }
|
2736
|
+
reqs.concat added
|
2737
|
+
reqs.uniq!
|
2738
|
+
break if s == reqs.size
|
2739
|
+
end
|
2740
|
+
needed.concat reqs
|
2741
|
+
end
|
2742
|
+
spec['generate'].each_value do |gen|
|
2743
|
+
needed.push('String') if gen['parser']
|
2744
|
+
end
|
2745
|
+
needed.uniq!
|
2746
|
+
end
|
2747
|
+
parserpool_substitutions(needed, spec['namespace'])
|
2748
|
+
needed = arrange_needed(needed)
|
2749
|
+
lic2id = licenses(needed)
|
2750
|
+
generated = { }
|
2751
|
+
spec['generate'].each_pair do |typename, gen|
|
2752
|
+
object = spec['types'][typename]
|
2753
|
+
out = {
|
2754
|
+
forward: [],
|
2755
|
+
typedef: [],
|
2756
|
+
extern: [],
|
2757
|
+
extern_src: [],
|
2758
|
+
class: []
|
2759
|
+
}
|
2760
|
+
if gen['parser']
|
2761
|
+
out[:forward].push "class #{typename};"
|
2762
|
+
keyvalues = []
|
2763
|
+
values = []
|
2764
|
+
names = []
|
2765
|
+
object.each_pair do |field, desc|
|
2766
|
+
sub = "#{typename}_#{field}"
|
2767
|
+
# Field name string constant.
|
2768
|
+
out[:extern].push "extern const char #{sub}[];"
|
2769
|
+
out[:extern_src].push "const char #{spec['namespace']}::#{sub}[] = \"#{field}\";"
|
2770
|
+
k = desc['format'].size - 1
|
2771
|
+
f = desc['format'][k]
|
2772
|
+
p = $PIECES[f]
|
2773
|
+
out[:typedef].push "typedef #{p['parsername']} #{sub}_#{k};"
|
2774
|
+
while k.positive?
|
2775
|
+
k -= 1
|
2776
|
+
f = desc['format'][k]
|
2777
|
+
p = $PIECES[f]
|
2778
|
+
out[:typedef].push "typedef #{p['parsername']}<#{sub}_#{k + 1}> #{sub}_#{k};"
|
2779
|
+
end
|
2780
|
+
keyvalues.push "#{desc['required'] ? 'Required' : ''}Key#{desc['format'].size > 1 ? 'Container' : ''}Value<#{sub},#{sub}_0>"
|
2781
|
+
out[:typedef].push "typedef #{keyvalues.last} #{sub}_KeyValue;"
|
2782
|
+
values.push "Value<#{sub}_0>"
|
2783
|
+
names.push field
|
2784
|
+
default(desc, 'accessor', "#{field}()")
|
2785
|
+
desc[:access_type] = classify_expression(desc['accessor'])
|
2786
|
+
default(desc, 'checker', "#{field}Given()")
|
2787
|
+
desc[:check_type] = classify_expression(desc['checker'])
|
2788
|
+
end
|
2789
|
+
out[:typedef].push "typedef KeyValues<#{keyvalues.join(',')}> #{typename}_KeyValues;"
|
2790
|
+
out[:typedef].push "typedef NamelessValues<#{values.join(',')}> #{typename}_NamelessValues;"
|
2791
|
+
out[:typedef].push "typedef ParseObject<#{typename}_KeyValues,#{typename}_NamelessValues> #{typename}_Parser; // Parse with an instance of this."
|
2792
|
+
out[:class].push %(
|
2793
|
+
class #{typename} {
|
2794
|
+
public:
|
2795
|
+
#{(names.map { |n| " typedef #{values[names.find_index(n)]}::Type #{n}Type;" }).join("\n")}
|
2796
|
+
#{typename}_Parser::Type values;
|
2797
|
+
|
2798
|
+
#{(names.map { |n| " bool #{n}Given() const { return std::get<#{names.find_index(n)}>(values).Given(); }" }).join("\n")}
|
2799
|
+
|
2800
|
+
#{(names.map { |n| " #{n}Type& #{n}() { return std::get<#{names.find_index(n)}>(values).value; }" }).join("\n")}
|
2801
|
+
#{(names.map { |n| " const #{n}Type& #{n}() const { return std::get<#{names.find_index(n)}>(values).value; }" }).join("\n")}
|
2802
|
+
};
|
2803
|
+
)
|
2804
|
+
out[:class].push write_function(spec, typename) if gen['writer']
|
2805
|
+
generated[typename] = out
|
2806
|
+
elsif gen['writer']
|
2807
|
+
object.each_pair do |field, desc|
|
2808
|
+
sub = "#{typename}_#{field}"
|
2809
|
+
out[:extern].push "extern const char #{sub}[];"
|
2810
|
+
out[:extern_src].push "const char #{spec['namespace']}::#{sub}[] = \"#{field}\";"
|
2811
|
+
desc[:access_type] = classify_expression(desc['accessor'])
|
2812
|
+
desc[:check_type] = classify_expression(desc['checker'])
|
2813
|
+
desc[:tn] = "T_#{field}"
|
2814
|
+
end
|
2815
|
+
# Template class for write.
|
2816
|
+
get_ind = object.keys.select { |k| object[k][:access_type] == :method }
|
2817
|
+
get_dir = object.keys.select { |k| object[k][:access_type] != :method }
|
2818
|
+
chk_ind = object.keys.select { |k| object[k][:check_type] == :method && !object[k][:required] }
|
2819
|
+
tmpl = [ %(
|
2820
|
+
template<#{(object.keys.map { |k| "typename #{object[k][:tn]}" }).join(',')}>
|
2821
|
+
class #{typename}_Template {
|
2822
|
+
private:
|
2823
|
+
#{(get_ind.map { |f| " #{object[f][:tn]} #{f}_value;" }).join("\n")}
|
2824
|
+
|
2825
|
+
#{(chk_ind.map { |f| " bool #{f}_given;" }).join("\n")}
|
2826
|
+
|
2827
|
+
public:) ]
|
2828
|
+
unless chk_ind.empty? # Constructor to set given indicators to false.
|
2829
|
+
tmpl.push " #{typename}_Template() : #{(chk_ind.map { |f| "#{f}_given(false)" }).join(', ')} { }"
|
2830
|
+
end
|
2831
|
+
tmpl.push(%(
|
2832
|
+
#{(chk_ind.map { |f| " bool& #{object[f][:checker]} { return #{f}_given; }" }).join("\n")}
|
2833
|
+
#{(chk_ind.map { |f| " bool #{object[f][:checker]} const { return #{f}_given; }" }).join("\n")}
|
2834
|
+
|
2835
|
+
#{(get_dir.map { |f| " #{object[f][:tn]} #{f};" }).join("\n")}
|
2836
|
+
|
2837
|
+
#{(get_ind.map { |f| " #{object[f][:tn]}& #{object[f]['accessor']} { return #{f}_value; };" }).join("\n")}
|
2838
|
+
#{(get_ind.map { |f| " const #{object[f][:tn]}& #{object[f]['accessor']} const { return #{f}_value; }" }).join("\n")}
|
2839
|
+
};))
|
2840
|
+
tmpl = tmpl.join("\n")
|
2841
|
+
# Tweak the looks of output.
|
2842
|
+
until (tmpl.sub!("\n\n\n", "\n\n")).nil? # Shrink two empty lines to 1.
|
2843
|
+
end
|
2844
|
+
tmpl.sub!("private:\n\n", "private:\n")
|
2845
|
+
tmpl.sub!("public:\n\n", "public:\n")
|
2846
|
+
tmpl.sub!("private:\npublic:", 'public:') # Drop private if not used.
|
2847
|
+
tmpl.sub!("\n\n};", "\n};")
|
2848
|
+
out[:class].push tmpl
|
2849
|
+
# define check and typedef for template.
|
2850
|
+
out[:class].push %(
|
2851
|
+
#if defined(#{spec['namespace'].upcase}_#{typename.upcase}_TYPE)
|
2852
|
+
typedef #{spec['namespace'].upcase}_#{typename.upcase}_TYPE #{typename};
|
2853
|
+
#endif
|
2854
|
+
)
|
2855
|
+
out[:class].push write_function(spec, typename)
|
2856
|
+
generated[typename] = out
|
2857
|
+
end
|
2858
|
+
end
|
2859
|
+
puts "#{name}: #{generated.keys.join(' ')} #{needed.join(' ')}"
|
2860
|
+
hdr = make_header(spec, needed, generated, lic2id)
|
2861
|
+
src = make_source(spec, needed, generated, lic2id, hdr)
|
2862
|
+
puts " Header: #{hdr}, source: #{src}"
|
2863
|
+
end
|