lil-mocky 1.4.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.
- package/.claude/settings.local.json +7 -0
- package/CLAUDE.md +191 -0
- package/Dockerfile +2 -0
- package/README.md +705 -0
- package/TODO +57 -0
- package/init-docker.sh +4 -0
- package/lil-mocky.sublime-project +8 -0
- package/lil-mocky.sublime-workspace +2405 -0
- package/package.json +14 -0
- package/src/lil-mocky.js +329 -0
- package/test/lilMockyTest.js +867 -0
- package/test-docker.sh +3 -0
|
@@ -0,0 +1,2405 @@
|
|
|
1
|
+
{
|
|
2
|
+
"auto_complete":
|
|
3
|
+
{
|
|
4
|
+
"selected_items":
|
|
5
|
+
[
|
|
6
|
+
[
|
|
7
|
+
"ac",
|
|
8
|
+
"actionButton"
|
|
9
|
+
],
|
|
10
|
+
[
|
|
11
|
+
"wi",
|
|
12
|
+
"withMap"
|
|
13
|
+
],
|
|
14
|
+
[
|
|
15
|
+
"on",
|
|
16
|
+
"onCardHoverIn"
|
|
17
|
+
],
|
|
18
|
+
[
|
|
19
|
+
"map",
|
|
20
|
+
"mapElement"
|
|
21
|
+
],
|
|
22
|
+
[
|
|
23
|
+
"fo",
|
|
24
|
+
"focusElementIds"
|
|
25
|
+
],
|
|
26
|
+
[
|
|
27
|
+
"pre",
|
|
28
|
+
"_prrevNumHiddenElements"
|
|
29
|
+
],
|
|
30
|
+
[
|
|
31
|
+
"la",
|
|
32
|
+
"labels"
|
|
33
|
+
],
|
|
34
|
+
[
|
|
35
|
+
"map-",
|
|
36
|
+
"map-window"
|
|
37
|
+
],
|
|
38
|
+
[
|
|
39
|
+
"_is",
|
|
40
|
+
"_isFilterNotifying"
|
|
41
|
+
],
|
|
42
|
+
[
|
|
43
|
+
"isMap",
|
|
44
|
+
"isMapOpen"
|
|
45
|
+
],
|
|
46
|
+
[
|
|
47
|
+
"isN",
|
|
48
|
+
"_isFilterNotifying"
|
|
49
|
+
],
|
|
50
|
+
[
|
|
51
|
+
"fle",
|
|
52
|
+
"flex-direction"
|
|
53
|
+
],
|
|
54
|
+
[
|
|
55
|
+
"fil",
|
|
56
|
+
"filterMessage"
|
|
57
|
+
],
|
|
58
|
+
[
|
|
59
|
+
"element",
|
|
60
|
+
"elementIds"
|
|
61
|
+
],
|
|
62
|
+
[
|
|
63
|
+
"margin",
|
|
64
|
+
"margin-left"
|
|
65
|
+
],
|
|
66
|
+
[
|
|
67
|
+
"font",
|
|
68
|
+
"font-weight"
|
|
69
|
+
],
|
|
70
|
+
[
|
|
71
|
+
"bor",
|
|
72
|
+
"border-radius"
|
|
73
|
+
],
|
|
74
|
+
[
|
|
75
|
+
"card",
|
|
76
|
+
"cardGroupId"
|
|
77
|
+
],
|
|
78
|
+
[
|
|
79
|
+
"cla",
|
|
80
|
+
"classList"
|
|
81
|
+
],
|
|
82
|
+
[
|
|
83
|
+
"Map",
|
|
84
|
+
"MapWindow"
|
|
85
|
+
],
|
|
86
|
+
[
|
|
87
|
+
"ne",
|
|
88
|
+
"nextSlideNode"
|
|
89
|
+
],
|
|
90
|
+
[
|
|
91
|
+
"padd",
|
|
92
|
+
"padding-bottom"
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
"car",
|
|
96
|
+
"cardGroupId"
|
|
97
|
+
],
|
|
98
|
+
[
|
|
99
|
+
"_han",
|
|
100
|
+
"_handleMarkerPlaceOpen"
|
|
101
|
+
],
|
|
102
|
+
[
|
|
103
|
+
"cl",
|
|
104
|
+
"className"
|
|
105
|
+
],
|
|
106
|
+
[
|
|
107
|
+
"ele",
|
|
108
|
+
"element"
|
|
109
|
+
],
|
|
110
|
+
[
|
|
111
|
+
"elem",
|
|
112
|
+
"elements"
|
|
113
|
+
],
|
|
114
|
+
[
|
|
115
|
+
"card-slider__",
|
|
116
|
+
"card-slider__slide"
|
|
117
|
+
],
|
|
118
|
+
[
|
|
119
|
+
"mapE",
|
|
120
|
+
"mapElement"
|
|
121
|
+
],
|
|
122
|
+
[
|
|
123
|
+
"onC",
|
|
124
|
+
"onCardClick"
|
|
125
|
+
],
|
|
126
|
+
[
|
|
127
|
+
"cate",
|
|
128
|
+
"categoryAll"
|
|
129
|
+
],
|
|
130
|
+
[
|
|
131
|
+
"_c",
|
|
132
|
+
"_categoryFieldTemplate"
|
|
133
|
+
],
|
|
134
|
+
[
|
|
135
|
+
"pa",
|
|
136
|
+
"padding-bottom"
|
|
137
|
+
],
|
|
138
|
+
[
|
|
139
|
+
"mar",
|
|
140
|
+
"margin-right"
|
|
141
|
+
],
|
|
142
|
+
[
|
|
143
|
+
"back",
|
|
144
|
+
"background-size"
|
|
145
|
+
],
|
|
146
|
+
[
|
|
147
|
+
"_form",
|
|
148
|
+
"_formInnerTemplate"
|
|
149
|
+
],
|
|
150
|
+
[
|
|
151
|
+
"su",
|
|
152
|
+
"submitButtonTemplate"
|
|
153
|
+
],
|
|
154
|
+
[
|
|
155
|
+
"pla",
|
|
156
|
+
"placeWindow"
|
|
157
|
+
],
|
|
158
|
+
[
|
|
159
|
+
"er",
|
|
160
|
+
"errorMessage"
|
|
161
|
+
],
|
|
162
|
+
[
|
|
163
|
+
"err",
|
|
164
|
+
"errorMessage"
|
|
165
|
+
],
|
|
166
|
+
[
|
|
167
|
+
"get",
|
|
168
|
+
"getBounds"
|
|
169
|
+
],
|
|
170
|
+
[
|
|
171
|
+
"ca",
|
|
172
|
+
"cardType"
|
|
173
|
+
],
|
|
174
|
+
[
|
|
175
|
+
"_cre",
|
|
176
|
+
"_createMessageCardMapElements"
|
|
177
|
+
],
|
|
178
|
+
[
|
|
179
|
+
"check",
|
|
180
|
+
"checkbox"
|
|
181
|
+
],
|
|
182
|
+
[
|
|
183
|
+
"min",
|
|
184
|
+
"min-width"
|
|
185
|
+
],
|
|
186
|
+
[
|
|
187
|
+
"bus",
|
|
188
|
+
"businessType"
|
|
189
|
+
],
|
|
190
|
+
[
|
|
191
|
+
"bu",
|
|
192
|
+
"businessType"
|
|
193
|
+
],
|
|
194
|
+
[
|
|
195
|
+
"lo",
|
|
196
|
+
"lodging"
|
|
197
|
+
],
|
|
198
|
+
[
|
|
199
|
+
"_",
|
|
200
|
+
"_handleExpandToggleClick"
|
|
201
|
+
],
|
|
202
|
+
[
|
|
203
|
+
"im",
|
|
204
|
+
"imgCdnDomain"
|
|
205
|
+
],
|
|
206
|
+
[
|
|
207
|
+
"_hand",
|
|
208
|
+
"_handleFilterClick"
|
|
209
|
+
],
|
|
210
|
+
[
|
|
211
|
+
"st",
|
|
212
|
+
"static"
|
|
213
|
+
],
|
|
214
|
+
[
|
|
215
|
+
"place",
|
|
216
|
+
"placeAddress"
|
|
217
|
+
],
|
|
218
|
+
[
|
|
219
|
+
"mess",
|
|
220
|
+
"messageId"
|
|
221
|
+
],
|
|
222
|
+
[
|
|
223
|
+
"sel",
|
|
224
|
+
"selectElementIds"
|
|
225
|
+
],
|
|
226
|
+
[
|
|
227
|
+
"me",
|
|
228
|
+
"messageIndex"
|
|
229
|
+
],
|
|
230
|
+
[
|
|
231
|
+
"is",
|
|
232
|
+
"isIntroClosed"
|
|
233
|
+
],
|
|
234
|
+
[
|
|
235
|
+
"ma",
|
|
236
|
+
"matches"
|
|
237
|
+
],
|
|
238
|
+
[
|
|
239
|
+
"in",
|
|
240
|
+
"innerText"
|
|
241
|
+
],
|
|
242
|
+
[
|
|
243
|
+
"inlin",
|
|
244
|
+
"inlineLinkHtml"
|
|
245
|
+
],
|
|
246
|
+
[
|
|
247
|
+
"grou",
|
|
248
|
+
"groupId"
|
|
249
|
+
],
|
|
250
|
+
[
|
|
251
|
+
"_ha",
|
|
252
|
+
"_handleMapCancel"
|
|
253
|
+
],
|
|
254
|
+
[
|
|
255
|
+
"_st",
|
|
256
|
+
"_storeHandler"
|
|
257
|
+
],
|
|
258
|
+
[
|
|
259
|
+
"com",
|
|
260
|
+
"composeMessage"
|
|
261
|
+
],
|
|
262
|
+
[
|
|
263
|
+
"_conn",
|
|
264
|
+
"_connectToParentElement"
|
|
265
|
+
],
|
|
266
|
+
[
|
|
267
|
+
"Place",
|
|
268
|
+
"PlaceWindowContent"
|
|
269
|
+
],
|
|
270
|
+
[
|
|
271
|
+
"room",
|
|
272
|
+
"roomText"
|
|
273
|
+
],
|
|
274
|
+
[
|
|
275
|
+
"rol",
|
|
276
|
+
"rollupStream"
|
|
277
|
+
],
|
|
278
|
+
[
|
|
279
|
+
"che",
|
|
280
|
+
"checkInDate"
|
|
281
|
+
],
|
|
282
|
+
[
|
|
283
|
+
"_re",
|
|
284
|
+
"_request"
|
|
285
|
+
],
|
|
286
|
+
[
|
|
287
|
+
"for",
|
|
288
|
+
"formActionOrResultTemplate"
|
|
289
|
+
],
|
|
290
|
+
[
|
|
291
|
+
"le",
|
|
292
|
+
"length"
|
|
293
|
+
],
|
|
294
|
+
[
|
|
295
|
+
"new",
|
|
296
|
+
"newElementIds"
|
|
297
|
+
],
|
|
298
|
+
[
|
|
299
|
+
"_place",
|
|
300
|
+
"_placeLoadAction"
|
|
301
|
+
],
|
|
302
|
+
[
|
|
303
|
+
"_pla",
|
|
304
|
+
"_placeLoadAction"
|
|
305
|
+
],
|
|
306
|
+
[
|
|
307
|
+
"tot",
|
|
308
|
+
"totalChildren"
|
|
309
|
+
],
|
|
310
|
+
[
|
|
311
|
+
"ro",
|
|
312
|
+
"roomControlValue"
|
|
313
|
+
],
|
|
314
|
+
[
|
|
315
|
+
"date",
|
|
316
|
+
"dateRangeControlValue"
|
|
317
|
+
],
|
|
318
|
+
[
|
|
319
|
+
"da",
|
|
320
|
+
"dateValues"
|
|
321
|
+
],
|
|
322
|
+
[
|
|
323
|
+
"block",
|
|
324
|
+
"blockElements"
|
|
325
|
+
],
|
|
326
|
+
[
|
|
327
|
+
"blo",
|
|
328
|
+
"blockGroupId"
|
|
329
|
+
],
|
|
330
|
+
[
|
|
331
|
+
"re",
|
|
332
|
+
"request"
|
|
333
|
+
],
|
|
334
|
+
[
|
|
335
|
+
"wide",
|
|
336
|
+
"wideNeoCardHtml"
|
|
337
|
+
],
|
|
338
|
+
[
|
|
339
|
+
"t",
|
|
340
|
+
"template"
|
|
341
|
+
],
|
|
342
|
+
[
|
|
343
|
+
"load",
|
|
344
|
+
"loadParams"
|
|
345
|
+
],
|
|
346
|
+
[
|
|
347
|
+
"_card",
|
|
348
|
+
"_cardType"
|
|
349
|
+
],
|
|
350
|
+
[
|
|
351
|
+
"_lo",
|
|
352
|
+
"_loadPlace"
|
|
353
|
+
],
|
|
354
|
+
[
|
|
355
|
+
"text",
|
|
356
|
+
"text-decoration"
|
|
357
|
+
],
|
|
358
|
+
[
|
|
359
|
+
"over",
|
|
360
|
+
"overflow"
|
|
361
|
+
],
|
|
362
|
+
[
|
|
363
|
+
"con",
|
|
364
|
+
"content-form__field"
|
|
365
|
+
],
|
|
366
|
+
[
|
|
367
|
+
"border",
|
|
368
|
+
"border-radius"
|
|
369
|
+
],
|
|
370
|
+
[
|
|
371
|
+
"mo",
|
|
372
|
+
"modal-dialog"
|
|
373
|
+
],
|
|
374
|
+
[
|
|
375
|
+
"cont",
|
|
376
|
+
"content-form"
|
|
377
|
+
],
|
|
378
|
+
[
|
|
379
|
+
"num",
|
|
380
|
+
"numAdults"
|
|
381
|
+
],
|
|
382
|
+
[
|
|
383
|
+
"child",
|
|
384
|
+
"childrenAges"
|
|
385
|
+
],
|
|
386
|
+
[
|
|
387
|
+
"chi",
|
|
388
|
+
"childrenAges"
|
|
389
|
+
],
|
|
390
|
+
[
|
|
391
|
+
"adu",
|
|
392
|
+
"adultsStepperNode"
|
|
393
|
+
],
|
|
394
|
+
[
|
|
395
|
+
"_handle",
|
|
396
|
+
"_handleRemoveRoomClick"
|
|
397
|
+
],
|
|
398
|
+
[
|
|
399
|
+
"roo",
|
|
400
|
+
"rooms"
|
|
401
|
+
],
|
|
402
|
+
[
|
|
403
|
+
"max",
|
|
404
|
+
"maxChildAge"
|
|
405
|
+
],
|
|
406
|
+
[
|
|
407
|
+
"high",
|
|
408
|
+
"highlightElementIds"
|
|
409
|
+
],
|
|
410
|
+
[
|
|
411
|
+
"sho",
|
|
412
|
+
"showCard"
|
|
413
|
+
],
|
|
414
|
+
[
|
|
415
|
+
"_ma",
|
|
416
|
+
"_mapElements"
|
|
417
|
+
],
|
|
418
|
+
[
|
|
419
|
+
"mark",
|
|
420
|
+
"marker"
|
|
421
|
+
],
|
|
422
|
+
[
|
|
423
|
+
"par",
|
|
424
|
+
"parentNode"
|
|
425
|
+
],
|
|
426
|
+
[
|
|
427
|
+
"create",
|
|
428
|
+
"createChatApp"
|
|
429
|
+
],
|
|
430
|
+
[
|
|
431
|
+
"_con",
|
|
432
|
+
"_connectToParentContext"
|
|
433
|
+
],
|
|
434
|
+
[
|
|
435
|
+
"pro",
|
|
436
|
+
"provider"
|
|
437
|
+
],
|
|
438
|
+
[
|
|
439
|
+
"up",
|
|
440
|
+
"updateMapMenu"
|
|
441
|
+
],
|
|
442
|
+
[
|
|
443
|
+
"font-",
|
|
444
|
+
"font-weight"
|
|
445
|
+
],
|
|
446
|
+
[
|
|
447
|
+
"spa",
|
|
448
|
+
"space-evenly"
|
|
449
|
+
],
|
|
450
|
+
[
|
|
451
|
+
"book",
|
|
452
|
+
"bookUrl"
|
|
453
|
+
],
|
|
454
|
+
[
|
|
455
|
+
"Pla",
|
|
456
|
+
"PlaceWindowContent"
|
|
457
|
+
],
|
|
458
|
+
[
|
|
459
|
+
"review",
|
|
460
|
+
"reviewClass"
|
|
461
|
+
],
|
|
462
|
+
[
|
|
463
|
+
"info",
|
|
464
|
+
"infoListTemplate"
|
|
465
|
+
],
|
|
466
|
+
[
|
|
467
|
+
"adj",
|
|
468
|
+
"adjustedPosition"
|
|
469
|
+
],
|
|
470
|
+
[
|
|
471
|
+
"zoo",
|
|
472
|
+
"zoom_changed"
|
|
473
|
+
],
|
|
474
|
+
[
|
|
475
|
+
"iframe",
|
|
476
|
+
"iframeParams"
|
|
477
|
+
],
|
|
478
|
+
[
|
|
479
|
+
"Pl",
|
|
480
|
+
"PlaceWindow"
|
|
481
|
+
],
|
|
482
|
+
[
|
|
483
|
+
"dir",
|
|
484
|
+
"directionsUrl"
|
|
485
|
+
],
|
|
486
|
+
[
|
|
487
|
+
"_map",
|
|
488
|
+
"_mapTemplate"
|
|
489
|
+
],
|
|
490
|
+
[
|
|
491
|
+
"cur",
|
|
492
|
+
"curBounds"
|
|
493
|
+
],
|
|
494
|
+
[
|
|
495
|
+
"elemen",
|
|
496
|
+
"elementIds"
|
|
497
|
+
],
|
|
498
|
+
[
|
|
499
|
+
"_f",
|
|
500
|
+
"_fitBoundsToElements"
|
|
501
|
+
],
|
|
502
|
+
[
|
|
503
|
+
"api",
|
|
504
|
+
"apiMessageId"
|
|
505
|
+
],
|
|
506
|
+
[
|
|
507
|
+
"pl",
|
|
508
|
+
"placeData"
|
|
509
|
+
],
|
|
510
|
+
[
|
|
511
|
+
"cen",
|
|
512
|
+
"centerLatLng"
|
|
513
|
+
],
|
|
514
|
+
[
|
|
515
|
+
"trans",
|
|
516
|
+
"transition"
|
|
517
|
+
]
|
|
518
|
+
]
|
|
519
|
+
},
|
|
520
|
+
"buffers":
|
|
521
|
+
[
|
|
522
|
+
{
|
|
523
|
+
"file": "src/lil-mocky.js",
|
|
524
|
+
"settings":
|
|
525
|
+
{
|
|
526
|
+
"buffer_size": 6800,
|
|
527
|
+
"encoding": "UTF-8",
|
|
528
|
+
"line_ending": "Unix"
|
|
529
|
+
},
|
|
530
|
+
"undo_stack":
|
|
531
|
+
[
|
|
532
|
+
[
|
|
533
|
+
96,
|
|
534
|
+
1,
|
|
535
|
+
"revert",
|
|
536
|
+
null,
|
|
537
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAAAeGAAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHksIG9yaWdpbmFsKSB7Cgljb25zdCBvcHRpb25zID0gewoJCWFzeW5jOiBmYWxzZSwKCQlib2R5OiBib2R5LAoJCWFyZ3M6IFtdLAoJCXNlbGVjdDogW10sCgkJb3JpZ2luYWw6IG9yaWdpbmFsCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgbW9jayA9IGNyZWF0ZUZ1bmN0aW9uKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IG1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUZ1bmN0aW9uKHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgc3RhdGUpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVGdW5jdGlvbihtb2NrLCBzdGF0ZSkgewoJbW9jay5yZXQgPSAodmFsdWUsIGNhbGwgPSAwKSA9PiB7CgkJc3RhdGUucmV0c1tjYWxsXSA9IHZhbHVlOwoJfTsKCW1vY2sub25SZXQgPSAoaGFuZGxlciwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRIYW5kbGVyc1tjYWxsXSA9IGhhbmRsZXI7Cgl9OwoJbW9jay5jYWxscyA9IChjYWxsKSA9PiB7CgkJcmV0dXJuIGNhbGwgIT09IHVuZGVmaW5lZCA/IHN0YXRlLmNhbGxzW2NhbGxdIDogc3RhdGUuY2FsbHM7Cgl9Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnJldHMgPSBbXTsKCQlzdGF0ZS5yZXRIYW5kbGVycyA9IFtdOwoJCXN0YXRlLmNhbGxzID0gW107CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCW1vY2sucmVzZXQoKTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpIHsKCWlmIChvcHRpb25zLmFzeW5jKSB7CgkJcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9IGVsc2UgewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkJvZHkocGFyZW50LCBzdGF0ZSwgb3B0aW9ucywgcmF3QXJncykgewoJY29uc3QgYXJncyA9IGRlZXBDbG9uZShnZXRGdW5jdGlvbkFyZ3MocmF3QXJncywgb3B0aW9ucykpOwoJc3RhdGUuY2FsbHMucHVzaChhcmdzKTsKCWNvbnN0IGNhbGwgPSBzdGF0ZS5jYWxscy5sZW5ndGg7CgoJbGV0IHJldDsKCglpZiAoc3RhdGUucmV0c1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldHNbY2FsbF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0oYXJncyk7Cgl9IGVsc2UgaWYgKHN0YXRlLnJldHNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzWzBdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1swXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzWzBdKGFyZ3MpOwoJfQoKCWlmIChyZXQgaW5zdGFuY2VvZiBFcnJvcikKCQl0aHJvdyByZXQ7CgoJaWYgKG9wdGlvbnMuYm9keSkgewoJCXJldHVybiBvcHRpb25zLmJvZHkoewoJCQlzZWxmOiBwYXJlbnQsCgkJCXN0YXRlOiBzdGF0ZSwKCQkJY2FsbDogY2FsbCwKCQkJYXJnczogYXJncywKCQkJcmF3QXJnczogcmF3QXJncywKCQkJb3JpZ2luYWw6IG9wdGlvbnMub3JpZ2luYWwsCgkJCXJldDogcmV0CgkJfSk7Cgl9IGVsc2UgewoJCXJldHVybiByZXQ7Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQXJncyhjYWxsQXJncywgb3B0aW9ucykgewoJbGV0IGFyZ3MgPSBudWxsOwoKCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggPT0gMSkgewoJCWFyZ3MgPSBjYWxsQXJnc1tvcHRpb25zLnNlbGVjdFswXV07Cgl9IGVsc2UgaWYgKG9wdGlvbnMuYXJncy5sZW5ndGgpIHsKCQlhcmdzID0ge307CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcmdzLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggJiYgIW9wdGlvbnMuc2VsZWN0LmluY2x1ZGVzKGkpKQoJCQkJY29udGludWU7CgoJCQlsZXQgYXJnTmFtZSA9ICcnOwoJCQlsZXQgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkOwoKCQkJaWYgKHR5cGVvZiBvcHRpb25zLmFyZ3NbaV0gPT0gJ3N0cmluZycpIHsKCQkJCWFyZ05hbWUgPSBvcHRpb25zLmFyZ3NbaV07CgkJCX0gZWxzZSB7CgkJCQlbYXJnTmFtZSwgZGVmYXVsdFZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXJnc1tpXSlbMF07CgkJCX0KCgkJCWFyZ3NbYXJnTmFtZV0gPSBjYWxsQXJnc1tpXSAhPT0gdW5kZWZpbmVkID8gY2FsbEFyZ3NbaV0gOiBkZWZhdWx0VmFsdWU7CgkJfQoJfQoKCXJldHVybiBhcmdzOwp9CgpmdW5jdGlvbiBvYmplY3RCdWlsZGVyKHByb3BzKSB7Cgljb25zdCBvcHRpb25zID0geyBwcm9wcyB9OwoKCXJldHVybiB7CgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IG1vY2sgPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5wcm9wcyk7CgoJCQlpZiAocGFyZW50KQoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7IHZhbHVlOiBtb2NrIH0pOwoJCQkKCQkJcmV0dXJuIHdpcmVPYmplY3QocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrKTsKCQl9Cgl9Owp9CgpmdW5jdGlvbiB3aXJlT2JqZWN0KG1vY2spIHsKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobW9jaykpIHsKCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0ucmVzZXQgPT0gJ2Z1bmN0aW9uJykKCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCX0KCX07CgoJcmV0dXJuIG1vY2s7Cn0KCmZ1bmN0aW9uIGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhwcm9wcykgewoJY29uc3Qgb2JqZWN0ID0ge307CgoJZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHsKCQljb25zdCBwcm9wID0gcHJvcHNba2V5XTsKCgkJaWYgKHR5cGVvZiBwcm9wLmJ1aWxkID09ICdmdW5jdGlvbicpIHsKCQkJcHJvcC5idWlsZChvYmplY3QsIGtleSk7CgkJfSBlbHNlIHsKCQkJb2JqZWN0W2tleV0gPSBwcm9wOwoJCX0KCX0KCglyZXR1cm4gb2JqZWN0Owp9CgpmdW5jdGlvbiBjbGFzc0J1aWxkZXIobWVtYmVycykgewoJY29uc3Qgb3B0aW9ucyA9IHsgbWVtYmVycyB9OwoKCXJldHVybiB7CgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IHN0YXRlID0ge307CgkJCWNvbnN0IE1vY2sgPSBjcmVhdGVDbGFzcyhzdGF0ZSwgb3B0aW9ucyk7CgoJCQlpZiAocGFyZW50KQoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7IHZhbHVlOiBNb2NrIH0pOwoKCQkJcmV0dXJuIHdpcmVDbGFzcyhwYXJlbnQgPyBwYXJlbnRba2V5XSA6IE1vY2ssIHN0YXRlLCBvcHRpb25zKTsKCQl9Cgl9Owp9CgpmdW5jdGlvbiBjcmVhdGVDbGFzcyhzdGF0ZSwgb3B0aW9ucykgewoJcmV0dXJuIGZ1bmN0aW9uKCkgewoJCWNvbnN0IGluZGV4ID0gc3RhdGUubnVtSW5zdGFuY2VzOwoKCQlpZiAoIXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0pCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0gPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5tZW1iZXJzKTsKCgkJT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkpOwoKCQlpZiAodHlwZW9mIHN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJykKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cyk7CgoJCXN0YXRlLm51bUluc3RhbmNlcysrOwoJfTsKfQoKZnVuY3Rpb24gd2lyZUNsYXNzKE1vY2ssIHN0YXRlLCBvcHRpb25zKSB7CglNb2NrLmluc3QgPSAoaW5kZXggPSAwKSA9PiB7CgkJaWYgKCFzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMubWVtYmVycyk7CgoJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdOwoJfTsKCU1vY2subnVtSW5zdHMgPSAoKSA9PiB7CgkJcmV0dXJuIHN0YXRlLm51bUluc3RhbmNlczsKCX07CglNb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLmRlc2NyaXB0aW9ucyA9IFtdOwoJCXN0YXRlLm51bUluc3RhbmNlcyA9IDA7CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCU1vY2sucmVzZXQoKTsKCglyZXR1cm4gTW9jazsKfQoKZnVuY3Rpb24gcHJvcGVydHlCdWlsZGVyKCkgewoJcmV0dXJuIHsKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCgkJCWlmIChwYXJlbnQpIHsKCQkJCXBhcmVudFtrZXldID0ge307CgkJCQl3aXJlUHJvcGVydHkocGFyZW50W2tleV0sIHN0YXRlKTsKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgewoJCQkJCWdldDogKCkgPT4gewoJCQkJCQlyZXR1cm4gc3RhdGUudmFsdWU7CgkJCQkJfSwKCQkJCQlzZXQ6ICh2YWx1ZSkgPT4gewoJCQkJCQlzdGF0ZS52YWx1ZSA9IHZhbHVlOwoJCQkJCX0KCQkJCX0pOwoJCQl9CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZVByb3BlcnR5KG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnZhbHVlID0gdW5kZWZpbmVkOwoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gZGVlcENsb25lKHRhcmdldCkgewoJaWYgKHR5cGVvZiB0YXJnZXQgPT0gJ29iamVjdCcpIHsKCQlpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7CgkJCXJldHVybiB0YXJnZXQubWFwKGRlZXBDbG9uZSk7CgkJfSBlbHNlIGlmICh0YXJnZXQ/LmNvbnN0cnVjdG9yID09IE9iamVjdCkgewoJCQljb25zdCBjbG9uZSA9IHt9OwoKCQkJZm9yIChjb25zdCBrZXkgaW4gdGFyZ2V0KSB7CgkJCQljbG9uZVtrZXldID0gZGVlcENsb25lKHRhcmdldFtrZXldKTsKCQkJfQoKCQkJcmV0dXJuIGNsb25lOwoJCX0KCX0KCglyZXR1cm4gdGFyZ2V0Owp9CgpmdW5jdGlvbiBzcHkob2JqZWN0LCBtZXRob2ROYW1lLCByZXBsYWNlbWVudCkgewoJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07CgoJbGV0IHNweUZuOwoJaWYgKHJlcGxhY2VtZW50KSB7CgkJLy8gVXNlIHByb3ZpZGVkIGJ1aWxkZXIKCQlzcHlGbiA9IHJlcGxhY2VtZW50LmJ1aWxkKCk7Cgl9IGVsc2UgewoJCS8vIE5vIHJlcGxhY2VtZW50LCBjcmVhdGUgY2FsbC10aHJvdWdoCgkJc3B5Rm4gPSBmdW5jdGlvbkJ1aWxkZXIoKGNvbnRleHQpID0+IHsKCQkJLy8gSWYgLnJldCgpIHdhcyBzZXQsIHVzZSBpdDsgb3RoZXJ3aXNlIGNhbGwgdGhyb3VnaAoJCQlpZiAoY29udGV4dC5yZXQgIT09IHVuZGVmaW5lZCkgewoJCQkJcmV0dXJuIGNvbnRleHQucmV0OwoJCQl9CgkJCXJldHVybiBjb250ZXh0Lm9yaWdpbmFsLmFwcGx5KGNvbnRleHQuc2VsZiwgY29udGV4dC5yYXdBcmdzKTsKCQl9LCBvcmlnaW5hbCkuYnVpbGQoKTsKCX0KCglzcHlGbi5yZXN0b3JlID0gKCkgPT4gewoJCW9iamVjdFttZXRob2ROYW1lXSA9IG9yaWdpbmFsOwoJfTsKCglvYmplY3RbbWV0aG9kTmFtZV0gPSBzcHlGbjsKCXJldHVybiBzcHlGbjsKfQoKbW9kdWxlLmV4cG9ydHMgPSB7CgljcmVhdGU6IG1vY2tCdWlsZGVyLAoJZnVuY3Rpb246IGZ1bmN0aW9uQnVpbGRlciwKCW9iamVjdDogb2JqZWN0QnVpbGRlciwKCWNsYXNzOiBjbGFzc0J1aWxkZXIsCglwcm9wZXJ0eTogcHJvcGVydHlCdWlsZGVyLAoJc3B5OiBzcHkKfTsKAAAAAAAAAACjGAAAAAAAAAAAAAA",
|
|
538
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABbAAAAAAAAAGMAAAAAAAAAAAAAAAAA8L8"
|
|
539
|
+
],
|
|
540
|
+
[
|
|
541
|
+
127,
|
|
542
|
+
1,
|
|
543
|
+
"revert",
|
|
544
|
+
null,
|
|
545
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAACjGAAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHksIG9yaWdpbmFsKSB7Cgljb25zdCBvcHRpb25zID0gewoJCWFzeW5jOiBmYWxzZSwKCQlib2R5OiBib2R5LAoJCWFyZ3M6IFtdLAoJCXNlbGVjdDogW10sCgkJb3JpZ2luYWw6IG9yaWdpbmFsCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgbW9jayA9IGNyZWF0ZUZ1bmN0aW9uKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IG1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUZ1bmN0aW9uKHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgc3RhdGUpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVGdW5jdGlvbihtb2NrLCBzdGF0ZSkgewoJbW9jay5yZXQgPSAodmFsdWUsIGNhbGwgPSAwKSA9PiB7CgkJc3RhdGUucmV0c1tjYWxsXSA9IHZhbHVlOwoJfTsKCW1vY2sub25SZXQgPSAoaGFuZGxlciwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRIYW5kbGVyc1tjYWxsXSA9IGhhbmRsZXI7Cgl9OwoJbW9jay5jYWxscyA9IChjYWxsKSA9PiB7CgkJcmV0dXJuIGNhbGwgIT09IHVuZGVmaW5lZCA/IHN0YXRlLmNhbGxzW2NhbGxdIDogc3RhdGUuY2FsbHM7Cgl9Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnJldHMgPSBbXTsKCQlzdGF0ZS5yZXRIYW5kbGVycyA9IFtdOwoJCXN0YXRlLmNhbGxzID0gW107CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCW1vY2sucmVzZXQoKTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpIHsKCWlmIChvcHRpb25zLmFzeW5jKSB7CgkJcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9IGVsc2UgewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkJvZHkocGFyZW50LCBzdGF0ZSwgb3B0aW9ucywgcmF3QXJncykgewoJY29uc3QgYXJncyA9IGRlZXBDbG9uZShnZXRGdW5jdGlvbkFyZ3MocmF3QXJncywgb3B0aW9ucykpOwoJc3RhdGUuY2FsbHMucHVzaChhcmdzKTsKCWNvbnN0IGNhbGwgPSBzdGF0ZS5jYWxscy5sZW5ndGg7CgoJbGV0IHJldDsKCglpZiAoc3RhdGUucmV0c1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldHNbY2FsbF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0oYXJncyk7Cgl9IGVsc2UgaWYgKHN0YXRlLnJldHNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzWzBdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1swXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzWzBdKGFyZ3MpOwoJfQoKCWlmIChyZXQgaW5zdGFuY2VvZiBFcnJvcikKCQl0aHJvdyByZXQ7CgoJaWYgKG9wdGlvbnMuYm9keSkgewoJCXJldHVybiBvcHRpb25zLmJvZHkoewoJCQlzZWxmOiBwYXJlbnQsCgkJCXN0YXRlOiBzdGF0ZSwKCQkJY2FsbDogY2FsbCwKCQkJYXJnczogYXJncywKCQkJcmF3QXJnczogcmF3QXJncywKCQkJb3JpZ2luYWw6IG9wdGlvbnMub3JpZ2luYWwsCgkJCXJldDogcmV0CgkJfSk7Cgl9IGVsc2UgewoJCXJldHVybiByZXQ7Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQXJncyhjYWxsQXJncywgb3B0aW9ucykgewoJbGV0IGFyZ3MgPSBudWxsOwoKCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggPT0gMSkgewoJCWFyZ3MgPSBjYWxsQXJnc1tvcHRpb25zLnNlbGVjdFswXV07Cgl9IGVsc2UgaWYgKG9wdGlvbnMuYXJncy5sZW5ndGgpIHsKCQlhcmdzID0ge307CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcmdzLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggJiYgIW9wdGlvbnMuc2VsZWN0LmluY2x1ZGVzKGkpKQoJCQkJY29udGludWU7CgoJCQlsZXQgYXJnTmFtZSA9ICcnOwoJCQlsZXQgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkOwoKCQkJaWYgKHR5cGVvZiBvcHRpb25zLmFyZ3NbaV0gPT0gJ3N0cmluZycpIHsKCQkJCWFyZ05hbWUgPSBvcHRpb25zLmFyZ3NbaV07CgkJCX0gZWxzZSB7CgkJCQlbYXJnTmFtZSwgZGVmYXVsdFZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXJnc1tpXSlbMF07CgkJCX0KCgkJCWFyZ3NbYXJnTmFtZV0gPSBjYWxsQXJnc1tpXSAhPT0gdW5kZWZpbmVkID8gY2FsbEFyZ3NbaV0gOiBkZWZhdWx0VmFsdWU7CgkJfQoJfSBlbHNlIHsKCQkvLyBOT1RFOiBQcmV2aW91c2x5IHJldHVybmVkIG51bGwuIE5vdyByZXR1cm5zIGFycmF5IChtYXkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLgoJCWFyZ3MgPSBBcnJheS5mcm9tKGNhbGxBcmdzKTsKCX0KCglyZXR1cm4gYXJnczsKfQoKZnVuY3Rpb24gb2JqZWN0QnVpbGRlcihwcm9wcykgewoJY29uc3Qgb3B0aW9ucyA9IHsgcHJvcHMgfTsKCglyZXR1cm4gewoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCQkJCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jayk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZU9iamVjdChtb2NrKSB7Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCWZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG1vY2spKSB7CgkJCWlmICh0eXBlb2YgbW9ja1trZXldLnJlc2V0ID09ICdmdW5jdGlvbicpCgkJCQltb2NrW2tleV0ucmVzZXQoKTsKCQl9Cgl9OwoKCXJldHVybiBtb2NrOwp9CgpmdW5jdGlvbiBjcmVhdGVPYmplY3RXaXRoUHJvcHMocHJvcHMpIHsKCWNvbnN0IG9iamVjdCA9IHt9OwoKCWZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcC5idWlsZCA9PSAnZnVuY3Rpb24nKSB7CgkJCXByb3AuYnVpbGQob2JqZWN0LCBrZXkpOwoJCX0gZWxzZSB7CgkJCW9iamVjdFtrZXldID0gcHJvcDsKCQl9Cgl9CgoJcmV0dXJuIG9iamVjdDsKfQoKZnVuY3Rpb24gY2xhc3NCdWlsZGVyKG1lbWJlcnMpIHsKCWNvbnN0IG9wdGlvbnMgPSB7IG1lbWJlcnMgfTsKCglyZXR1cm4gewoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoJCQljb25zdCBNb2NrID0gY3JlYXRlQ2xhc3Moc3RhdGUsIG9wdGlvbnMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogTW9jayB9KTsKCgkJCXJldHVybiB3aXJlQ2xhc3MocGFyZW50ID8gcGFyZW50W2tleV0gOiBNb2NrLCBzdGF0ZSwgb3B0aW9ucyk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gY3JlYXRlQ2xhc3Moc3RhdGUsIG9wdGlvbnMpIHsKCXJldHVybiBmdW5jdGlvbigpIHsKCQljb25zdCBpbmRleCA9IHN0YXRlLm51bUluc3RhbmNlczsKCgkJaWYgKCFzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMubWVtYmVycyk7CgoJCU9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0pKTsKCgkJaWYgKHR5cGVvZiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicpCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0uY29uc3RydWN0b3IuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpOwoKCQlzdGF0ZS5udW1JbnN0YW5jZXMrKzsKCX07Cn0KCmZ1bmN0aW9uIHdpcmVDbGFzcyhNb2NrLCBzdGF0ZSwgb3B0aW9ucykgewoJTW9jay5pbnN0ID0gKGluZGV4ID0gMCkgPT4gewoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XTsKCX07CglNb2NrLm51bUluc3RzID0gKCkgPT4gewoJCXJldHVybiBzdGF0ZS5udW1JbnN0YW5jZXM7Cgl9OwoJTW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS5kZXNjcmlwdGlvbnMgPSBbXTsKCQlzdGF0ZS5udW1JbnN0YW5jZXMgPSAwOwoJCXN0YXRlLmRhdGEgPSB7fTsKCX07CglNb2NrLnJlc2V0KCk7CgoJcmV0dXJuIE1vY2s7Cn0KCmZ1bmN0aW9uIHByb3BlcnR5QnVpbGRlcigpIHsKCXJldHVybiB7CgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IHN0YXRlID0ge307CgoJCQlpZiAocGFyZW50KSB7CgkJCQlwYXJlbnRba2V5XSA9IHt9OwoJCQkJd2lyZVByb3BlcnR5KHBhcmVudFtrZXldLCBzdGF0ZSk7CgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsKCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJcmV0dXJuIHN0YXRlLnZhbHVlOwoJCQkJCX0sCgkJCQkJc2V0OiAodmFsdWUpID0+IHsKCQkJCQkJc3RhdGUudmFsdWUgPSB2YWx1ZTsKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVQcm9wZXJ0eShtb2NrLCBzdGF0ZSkgewoJbW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS52YWx1ZSA9IHVuZGVmaW5lZDsKCX07CgoJcmV0dXJuIG1vY2s7Cn0KCmZ1bmN0aW9uIGRlZXBDbG9uZSh0YXJnZXQpIHsKCWlmICh0eXBlb2YgdGFyZ2V0ID09ICdvYmplY3QnKSB7CgkJaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkgewoJCQlyZXR1cm4gdGFyZ2V0Lm1hcChkZWVwQ2xvbmUpOwoJCX0gZWxzZSBpZiAodGFyZ2V0Py5jb25zdHJ1Y3RvciA9PSBPYmplY3QpIHsKCQkJY29uc3QgY2xvbmUgPSB7fTsKCgkJCWZvciAoY29uc3Qga2V5IGluIHRhcmdldCkgewoJCQkJY2xvbmVba2V5XSA9IGRlZXBDbG9uZSh0YXJnZXRba2V5XSk7CgkJCX0KCgkJCXJldHVybiBjbG9uZTsKCQl9Cgl9CgoJcmV0dXJuIHRhcmdldDsKfQoKZnVuY3Rpb24gc3B5KG9iamVjdCwgbWV0aG9kTmFtZSwgcmVwbGFjZW1lbnQpIHsKCWNvbnN0IG9yaWdpbmFsID0gb2JqZWN0W21ldGhvZE5hbWVdOwoKCWxldCBzcHlGbjsKCWlmIChyZXBsYWNlbWVudCkgewoJCS8vIFVzZSBwcm92aWRlZCBidWlsZGVyCgkJc3B5Rm4gPSByZXBsYWNlbWVudC5idWlsZCgpOwoJfSBlbHNlIHsKCQkvLyBObyByZXBsYWNlbWVudCwgY3JlYXRlIGNhbGwtdGhyb3VnaAoJCXNweUZuID0gZnVuY3Rpb25CdWlsZGVyKChjb250ZXh0KSA9PiB7CgkJCS8vIElmIC5yZXQoKSB3YXMgc2V0LCB1c2UgaXQ7IG90aGVyd2lzZSBjYWxsIHRocm91Z2gKCQkJaWYgKGNvbnRleHQucmV0ICE9PSB1bmRlZmluZWQpIHsKCQkJCXJldHVybiBjb250ZXh0LnJldDsKCQkJfQoJCQlyZXR1cm4gY29udGV4dC5vcmlnaW5hbC5hcHBseShjb250ZXh0LnNlbGYsIGNvbnRleHQucmF3QXJncyk7CgkJfSwgb3JpZ2luYWwpLmJ1aWxkKCk7Cgl9CgoJc3B5Rm4ucmVzdG9yZSA9ICgpID0+IHsKCQlvYmplY3RbbWV0aG9kTmFtZV0gPSBvcmlnaW5hbDsKCX07CgoJb2JqZWN0W21ldGhvZE5hbWVdID0gc3B5Rm47CglyZXR1cm4gc3B5Rm47Cn0KCm1vZHVsZS5leHBvcnRzID0gewoJY3JlYXRlOiBtb2NrQnVpbGRlciwKCWZ1bmN0aW9uOiBmdW5jdGlvbkJ1aWxkZXIsCglvYmplY3Q6IG9iamVjdEJ1aWxkZXIsCgljbGFzczogY2xhc3NCdWlsZGVyLAoJcHJvcGVydHk6IHByb3BlcnR5QnVpbGRlciwKCXNweTogc3B5Cn07CgAAAAAAAAAAFxkAAAAAAAAAAAAA",
|
|
546
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAANFgAAAAAAAA0WAAAAAAAAAAAAAAAA8L8"
|
|
547
|
+
],
|
|
548
|
+
[
|
|
549
|
+
135,
|
|
550
|
+
1,
|
|
551
|
+
"cut",
|
|
552
|
+
null,
|
|
553
|
+
"AQAAAG8WAAAAAAAAbxYAAAAAAAAxAAAACQkvLyBVc2UgcHJvdmlkZWQgYnVpbGRlciB3aXRoIG9yaWdpbmFsIGluamVjdGVkCg",
|
|
554
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACJFgAAAAAAAIkWAAAAAAAAAAAAAAAA8L8"
|
|
555
|
+
],
|
|
556
|
+
[
|
|
557
|
+
138,
|
|
558
|
+
11,
|
|
559
|
+
"swap_line_down",
|
|
560
|
+
null,
|
|
561
|
+
"FgAAAKsWAAAAAAAA3RYAAAAAAAAAAAAAbxYAAAAAAABvFgAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CtQWAAAAAAAABhcAAAAAAAAAAAAAeRYAAAAAAAB5FgAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7Cv0WAAAAAAAALxcAAAAAAAAAAAAAohYAAAAAAACiFgAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CjUXAAAAAAAAZxcAAAAAAAAAAAAAyxYAAAAAAADLFgAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7ClkXAAAAAAAAixcAAAAAAAAAAAAAAxcAAAAAAAADFwAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CnEXAAAAAAAAoxcAAAAAAAAAAAAAJxcAAAAAAAAnFwAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CnYXAAAAAAAAqBcAAAAAAAAAAAAAPxcAAAAAAAA/FwAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CrcXAAAAAAAA6RcAAAAAAAAAAAAARBcAAAAAAABEFwAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CtgXAAAAAAAAChgAAAAAAAAAAAAAhRcAAAAAAACFFwAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CtsXAAAAAAAADRgAAAAAAAAAAAAAphcAAAAAAACmFwAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CtwXAAAAAAAADhgAAAAAAAAAAAAAqRcAAAAAAACpFwAAAAAAADIAAAAJCXNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7Cg",
|
|
562
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABvFgAAAAAAAG8WAAAAAAAAAAAAAAAAAAA"
|
|
563
|
+
],
|
|
564
|
+
[
|
|
565
|
+
140,
|
|
566
|
+
1,
|
|
567
|
+
"left_delete",
|
|
568
|
+
null,
|
|
569
|
+
"AQAAAKsXAAAAAAAAqxcAAAAAAAABAAAACQ",
|
|
570
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACsFwAAAAAAAKwXAAAAAAAAAAAAAAAA8L8"
|
|
571
|
+
],
|
|
572
|
+
[
|
|
573
|
+
141,
|
|
574
|
+
1,
|
|
575
|
+
"insert",
|
|
576
|
+
{
|
|
577
|
+
"characters": "cons"
|
|
578
|
+
},
|
|
579
|
+
"BAAAAKsXAAAAAAAArBcAAAAAAAAAAAAArBcAAAAAAACtFwAAAAAAAAAAAACtFwAAAAAAAK4XAAAAAAAAAAAAAK4XAAAAAAAArxcAAAAAAAAAAAAA",
|
|
580
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACrFwAAAAAAAKsXAAAAAAAAAAAAAAAA8L8"
|
|
581
|
+
],
|
|
582
|
+
[
|
|
583
|
+
142,
|
|
584
|
+
1,
|
|
585
|
+
"insert",
|
|
586
|
+
{
|
|
587
|
+
"characters": " "
|
|
588
|
+
},
|
|
589
|
+
"AQAAAK8XAAAAAAAAsBcAAAAAAAAAAAAA",
|
|
590
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACvFwAAAAAAAK8XAAAAAAAAAAAAAAAA8L8"
|
|
591
|
+
],
|
|
592
|
+
[
|
|
593
|
+
143,
|
|
594
|
+
5,
|
|
595
|
+
"left_delete",
|
|
596
|
+
null,
|
|
597
|
+
"BQAAAK8XAAAAAAAArxcAAAAAAAABAAAAIK4XAAAAAAAArhcAAAAAAAABAAAAc60XAAAAAAAArRcAAAAAAAABAAAAbqwXAAAAAAAArBcAAAAAAAABAAAAb6sXAAAAAAAAqxcAAAAAAAABAAAAYw",
|
|
598
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACwFwAAAAAAALAXAAAAAAAAAAAAAAAA8L8"
|
|
599
|
+
],
|
|
600
|
+
[
|
|
601
|
+
144,
|
|
602
|
+
1,
|
|
603
|
+
"insert",
|
|
604
|
+
{
|
|
605
|
+
"characters": "const"
|
|
606
|
+
},
|
|
607
|
+
"BQAAAKsXAAAAAAAArBcAAAAAAAAAAAAArBcAAAAAAACtFwAAAAAAAAAAAACtFwAAAAAAAK4XAAAAAAAAAAAAAK4XAAAAAAAArxcAAAAAAAAAAAAArxcAAAAAAACwFwAAAAAAAAAAAAA",
|
|
608
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACrFwAAAAAAAKsXAAAAAAAAAAAAAAAA8L8"
|
|
609
|
+
],
|
|
610
|
+
[
|
|
611
|
+
145,
|
|
612
|
+
1,
|
|
613
|
+
"insert",
|
|
614
|
+
{
|
|
615
|
+
"characters": " "
|
|
616
|
+
},
|
|
617
|
+
"AQAAALAXAAAAAAAAsRcAAAAAAAAAAAAA",
|
|
618
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACwFwAAAAAAALAXAAAAAAAAAAAAAAAA8L8"
|
|
619
|
+
],
|
|
620
|
+
[
|
|
621
|
+
151,
|
|
622
|
+
1,
|
|
623
|
+
"cut",
|
|
624
|
+
null,
|
|
625
|
+
"AQAAAE8WAAAAAAAATxYAAAAAAAAMAAAACWxldCBzcHlGbjsK",
|
|
626
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABaFgAAAAAAAFoWAAAAAAAAAAAAAAAA8L8"
|
|
627
|
+
],
|
|
628
|
+
[
|
|
629
|
+
153,
|
|
630
|
+
1,
|
|
631
|
+
"insert",
|
|
632
|
+
{
|
|
633
|
+
"characters": "!"
|
|
634
|
+
},
|
|
635
|
+
"AQAAAFQWAAAAAAAAVRYAAAAAAAAAAAAA",
|
|
636
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABUFgAAAAAAAFQWAAAAAAAAAAAAAAAA8L8"
|
|
637
|
+
],
|
|
638
|
+
[
|
|
639
|
+
155,
|
|
640
|
+
2,
|
|
641
|
+
"cut",
|
|
642
|
+
null,
|
|
643
|
+
"AgAAAGQWAAAAAAAAZBYAAAAAAAAKAAAACX0gZWxzZSB7CmQWAAAAAAAAZBYAAAAAAAApAAAACQkvLyBObyByZXBsYWNlbWVudCwgY3JlYXRlIGNhbGwtdGhyb3VnaAo",
|
|
644
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABqFgAAAAAAAGoWAAAAAAAAAAAAAACAT0A"
|
|
645
|
+
],
|
|
646
|
+
[
|
|
647
|
+
167,
|
|
648
|
+
1,
|
|
649
|
+
"paste",
|
|
650
|
+
null,
|
|
651
|
+
"AQAAAGYWAAAAAAAAcRYAAAAAAAAFAAAAc3B5Rm4",
|
|
652
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABmFgAAAAAAAGsWAAAAAAAAAAAAAAAA8L8"
|
|
653
|
+
],
|
|
654
|
+
[
|
|
655
|
+
168,
|
|
656
|
+
2,
|
|
657
|
+
"right_delete",
|
|
658
|
+
null,
|
|
659
|
+
"AgAAAHEWAAAAAAAAcRYAAAAAAAABAAAAIHEWAAAAAAAAcRYAAAAAAAABAAAAPQ",
|
|
660
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABxFgAAAAAAAHEWAAAAAAAAAAAAAAAA8L8"
|
|
661
|
+
],
|
|
662
|
+
[
|
|
663
|
+
169,
|
|
664
|
+
1,
|
|
665
|
+
"insert",
|
|
666
|
+
{
|
|
667
|
+
"characters": " ="
|
|
668
|
+
},
|
|
669
|
+
"AgAAAHEWAAAAAAAAchYAAAAAAAAAAAAAchYAAAAAAABzFgAAAAAAAAAAAAA",
|
|
670
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABxFgAAAAAAAHEWAAAAAAAAAAAAAAAA8L8"
|
|
671
|
+
],
|
|
672
|
+
[
|
|
673
|
+
173,
|
|
674
|
+
1,
|
|
675
|
+
"left_delete",
|
|
676
|
+
null,
|
|
677
|
+
"AQAAAFEXAAAAAAAAURcAAAAAAAAcAAAALm9yaWdpbmFsKG9yaWdpbmFsKS5idWlsZCgpOw",
|
|
678
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABRFwAAAAAAAG0XAAAAAAAA////////738"
|
|
679
|
+
],
|
|
680
|
+
[
|
|
681
|
+
174,
|
|
682
|
+
1,
|
|
683
|
+
"insert",
|
|
684
|
+
{
|
|
685
|
+
"characters": ";"
|
|
686
|
+
},
|
|
687
|
+
"AQAAAFEXAAAAAAAAUhcAAAAAAAAAAAAA",
|
|
688
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABRFwAAAAAAAFEXAAAAAAAAAAAAAAAA8L8"
|
|
689
|
+
],
|
|
690
|
+
[
|
|
691
|
+
176,
|
|
692
|
+
1,
|
|
693
|
+
"cut",
|
|
694
|
+
null,
|
|
695
|
+
"AQAAAJMWAAAAAAAAkxYAAAAAAAA4AAAACQkJLy8gSWYgLnJldCgpIHdhcyBzZXQsIHVzZSBpdDsgb3RoZXJ3aXNlIGNhbGwgdGhyb3VnaAo",
|
|
696
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACWFgAAAAAAAJYWAAAAAAAAAAAAAABAU0A"
|
|
697
|
+
],
|
|
698
|
+
[
|
|
699
|
+
178,
|
|
700
|
+
2,
|
|
701
|
+
"left_delete",
|
|
702
|
+
null,
|
|
703
|
+
"AgAAALUWAAAAAAAAtRYAAAAAAAABAAAAe7QWAAAAAAAAtBYAAAAAAAABAAAAIA",
|
|
704
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAC2FgAAAAAAALYWAAAAAAAA////////738"
|
|
705
|
+
],
|
|
706
|
+
[
|
|
707
|
+
180,
|
|
708
|
+
1,
|
|
709
|
+
"cut",
|
|
710
|
+
null,
|
|
711
|
+
"AQAAAM0WAAAAAAAAzRYAAAAAAAAFAAAACQkJfQo",
|
|
712
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADRFgAAAAAAANEWAAAAAAAAAAAAAABgckA"
|
|
713
|
+
],
|
|
714
|
+
[
|
|
715
|
+
181,
|
|
716
|
+
1,
|
|
717
|
+
"insert",
|
|
718
|
+
{
|
|
719
|
+
"characters": "\n"
|
|
720
|
+
},
|
|
721
|
+
"AQAAAM0WAAAAAAAAzhYAAAAAAAAAAAAA",
|
|
722
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADNFgAAAAAAAM0WAAAAAAAAAAAAAAAA8L8"
|
|
723
|
+
],
|
|
724
|
+
[
|
|
725
|
+
196,
|
|
726
|
+
1,
|
|
727
|
+
"insert",
|
|
728
|
+
{
|
|
729
|
+
"characters": "ctx"
|
|
730
|
+
},
|
|
731
|
+
"EgAAAP0WAAAAAAAA/hYAAAAAAAAHAAAAY29udGV4dO8WAAAAAAAA8BYAAAAAAAAHAAAAY29udGV4dNgWAAAAAAAA2RYAAAAAAAAHAAAAY29udGV4dMAWAAAAAAAAwRYAAAAAAAAHAAAAY29udGV4dJoWAAAAAAAAmxYAAAAAAAAHAAAAY29udGV4dIUWAAAAAAAAhhYAAAAAAAAHAAAAY29udGV4dOAWAAAAAAAA4RYAAAAAAAAAAAAA2BYAAAAAAADZFgAAAAAAAAAAAADHFgAAAAAAAMgWAAAAAAAAAAAAALUWAAAAAAAAthYAAAAAAAAAAAAAlRYAAAAAAACWFgAAAAAAAAAAAACGFgAAAAAAAIcWAAAAAAAAAAAAAOYWAAAAAAAA5xYAAAAAAAAAAAAA3RYAAAAAAADeFgAAAAAAAAAAAADLFgAAAAAAAMwWAAAAAAAAAAAAALgWAAAAAAAAuRYAAAAAAAAAAAAAlxYAAAAAAACYFgAAAAAAAAAAAACHFgAAAAAAAIgWAAAAAAAAAAAAAA",
|
|
732
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAYAAACFFgAAAAAAAIwWAAAAAAAAAAAAAAAA8L+aFgAAAAAAAKEWAAAAAAAAAAAAAAAA8L/AFgAAAAAAAMcWAAAAAAAAAAAAAAAA8L/YFgAAAAAAAN8WAAAAAAAAAAAAAAAA8L/vFgAAAAAAAPYWAAAAAAAAAAAAAAAA8L/9FgAAAAAAAAQXAAAAAAAAAAAAAAAA8L8"
|
|
733
|
+
],
|
|
734
|
+
[
|
|
735
|
+
205,
|
|
736
|
+
10,
|
|
737
|
+
"swap_line_down",
|
|
738
|
+
null,
|
|
739
|
+
"FAAAAE8WAAAAAAAAdRYAAAAAAAAAAAAAKBYAAAAAAAAoFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07CmQWAAAAAAAAihYAAAAAAAAAAAAAKRYAAAAAAAApFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07Co8WAAAAAAAAtRYAAAAAAAAAAAAAPhYAAAAAAAA+FgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07Cq0WAAAAAAAA0xYAAAAAAAAAAAAAaRYAAAAAAABpFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07CsEWAAAAAAAA5xYAAAAAAAAAAAAAhxYAAAAAAACHFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07CsIWAAAAAAAA6BYAAAAAAAAAAAAAmxYAAAAAAACbFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07CvcWAAAAAAAAHRcAAAAAAAAAAAAAnBYAAAAAAACcFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07Cv0WAAAAAAAAIxcAAAAAAAAAAAAA0RYAAAAAAADRFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07CgAXAAAAAAAAJhcAAAAAAAAAAAAA1xYAAAAAAADXFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07CgEXAAAAAAAAJxcAAAAAAAAAAAAA2hYAAAAAAADaFgAAAAAAACYAAAAJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3RbbWV0aG9kTmFtZV07Cg",
|
|
740
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA0FgAAAAAAADQWAAAAAAAAAAAAAAAA8L8"
|
|
741
|
+
],
|
|
742
|
+
[
|
|
743
|
+
207,
|
|
744
|
+
1,
|
|
745
|
+
"cut",
|
|
746
|
+
null,
|
|
747
|
+
"AQAAACgWAAAAAAAAKBYAAAAAAAABAAAACg",
|
|
748
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAoFgAAAAAAACgWAAAAAAAAAAAAAABAWkA"
|
|
749
|
+
],
|
|
750
|
+
[
|
|
751
|
+
212,
|
|
752
|
+
1,
|
|
753
|
+
"cut",
|
|
754
|
+
null,
|
|
755
|
+
"AQAAAHUXAAAAAAAAdRcAAAAAAAABAAAACg",
|
|
756
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAB1FwAAAAAAAHUXAAAAAAAAAAAAAAAAAAA"
|
|
757
|
+
],
|
|
758
|
+
[
|
|
759
|
+
214,
|
|
760
|
+
1,
|
|
761
|
+
"insert",
|
|
762
|
+
{
|
|
763
|
+
"characters": "\n"
|
|
764
|
+
},
|
|
765
|
+
"AQAAAJIXAAAAAAAAkxcAAAAAAAAAAAAA",
|
|
766
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAACSFwAAAAAAAJIXAAAAAAAAAAAAAAAAAAA"
|
|
767
|
+
],
|
|
768
|
+
[
|
|
769
|
+
224,
|
|
770
|
+
5,
|
|
771
|
+
"swap_line_up",
|
|
772
|
+
null,
|
|
773
|
+
"CgAAADQYAAAAAAAANBgAAAAAAAAKAAAACXNweTogc3B5ChgYAAAAAAAAIhgAAAAAAAAAAAAAGBgAAAAAAAAYGAAAAAAAAAoAAAAJc3B5OiBzcHkKAhgAAAAAAAAMGAAAAAAAAAAAAAACGAAAAAAAAAIYAAAAAAAACgAAAAlzcHk6IHNweQrqFwAAAAAAAPQXAAAAAAAAAAAAAOoXAAAAAAAA6hcAAAAAAAAKAAAACXNweTogc3B5Cs4XAAAAAAAA2BcAAAAAAAAAAAAAzhcAAAAAAADOFwAAAAAAAAoAAAAJc3B5OiBzcHkKuBcAAAAAAADCFwAAAAAAAAAAAAA",
|
|
774
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAA9GAAAAAAAAD0YAAAAAAAAAAAAAAAA8L8"
|
|
775
|
+
],
|
|
776
|
+
[
|
|
777
|
+
225,
|
|
778
|
+
1,
|
|
779
|
+
"insert",
|
|
780
|
+
{
|
|
781
|
+
"characters": ","
|
|
782
|
+
},
|
|
783
|
+
"AQAAAMEXAAAAAAAAwhcAAAAAAAAAAAAA",
|
|
784
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADBFwAAAAAAAMEXAAAAAAAAAAAAAAAA8L8"
|
|
785
|
+
],
|
|
786
|
+
[
|
|
787
|
+
234,
|
|
788
|
+
1,
|
|
789
|
+
"insert",
|
|
790
|
+
{
|
|
791
|
+
"characters": "s"
|
|
792
|
+
},
|
|
793
|
+
"AgAAAL4XAAAAAAAAvxcAAAAAAAADAAAAc3B5ARYAAAAAAAACFgAAAAAAAAMAAABzcHk",
|
|
794
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAIAAAABFgAAAAAAAAQWAAAAAAAAAAAAAAAA8L++FwAAAAAAAMEXAAAAAAAAAAAAAAAA8L8"
|
|
795
|
+
],
|
|
796
|
+
[
|
|
797
|
+
235,
|
|
798
|
+
1,
|
|
799
|
+
"left_delete",
|
|
800
|
+
null,
|
|
801
|
+
"AgAAALwXAAAAAAAAvBcAAAAAAAABAAAAcwEWAAAAAAAAARYAAAAAAAABAAAAcw",
|
|
802
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAIAAAACFgAAAAAAAAIWAAAAAAAAAAAAAAAA8L+9FwAAAAAAAL0XAAAAAAAAAAAAAAAA8L8"
|
|
803
|
+
],
|
|
804
|
+
[
|
|
805
|
+
236,
|
|
806
|
+
1,
|
|
807
|
+
"insert",
|
|
808
|
+
{
|
|
809
|
+
"characters": "createSpy"
|
|
810
|
+
},
|
|
811
|
+
"EgAAALsXAAAAAAAAvBcAAAAAAAAAAAAAARYAAAAAAAACFgAAAAAAAAAAAAC9FwAAAAAAAL4XAAAAAAAAAAAAAAIWAAAAAAAAAxYAAAAAAAAAAAAAvxcAAAAAAADAFwAAAAAAAAAAAAADFgAAAAAAAAQWAAAAAAAAAAAAAMEXAAAAAAAAwhcAAAAAAAAAAAAABBYAAAAAAAAFFgAAAAAAAAAAAADDFwAAAAAAAMQXAAAAAAAAAAAAAAUWAAAAAAAABhYAAAAAAAAAAAAAxRcAAAAAAADGFwAAAAAAAAAAAAAGFgAAAAAAAAcWAAAAAAAAAAAAAMcXAAAAAAAAyBcAAAAAAAAAAAAABxYAAAAAAAAIFgAAAAAAAAAAAADJFwAAAAAAAMoXAAAAAAAAAAAAAAgWAAAAAAAACRYAAAAAAAAAAAAAyxcAAAAAAADMFwAAAAAAAAAAAAAJFgAAAAAAAAoWAAAAAAAAAAAAAA",
|
|
812
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAIAAAABFgAAAAAAAAEWAAAAAAAAAAAAAAAA8L+7FwAAAAAAALsXAAAAAAAAAAAAAAAA8L8"
|
|
813
|
+
],
|
|
814
|
+
[
|
|
815
|
+
243,
|
|
816
|
+
1,
|
|
817
|
+
"insert",
|
|
818
|
+
{
|
|
819
|
+
"characters": "key"
|
|
820
|
+
},
|
|
821
|
+
"DAAAAIMXAAAAAAAAhBcAAAAAAAAKAAAAbWV0aG9kTmFtZV8XAAAAAAAAYBcAAAAAAAAKAAAAbWV0aG9kTmFtZfkWAAAAAAAA+hYAAAAAAAAKAAAAbWV0aG9kTmFtZRMWAAAAAAAAFBYAAAAAAAAKAAAAbWV0aG9kTmFtZWkXAAAAAAAAahcAAAAAAAAAAAAAThcAAAAAAABPFwAAAAAAAAAAAADxFgAAAAAAAPIWAAAAAAAAAAAAABQWAAAAAAAAFRYAAAAAAAAAAAAAbRcAAAAAAABuFwAAAAAAAAAAAABRFwAAAAAAAFIXAAAAAAAAAAAAAPMWAAAAAAAA9BYAAAAAAAAAAAAAFRYAAAAAAAAWFgAAAAAAAAAAAAA",
|
|
822
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAQAAAATFgAAAAAAAB0WAAAAAAAAAAAAAAAA8L/5FgAAAAAAAAMXAAAAAAAAAAAAAAAA8L9fFwAAAAAAAGkXAAAAAAAAAAAAAAAA8L+DFwAAAAAAAI0XAAAAAAAAAAAAAAAA8L8"
|
|
823
|
+
],
|
|
824
|
+
[
|
|
825
|
+
257,
|
|
826
|
+
1,
|
|
827
|
+
"insert",
|
|
828
|
+
{
|
|
829
|
+
"characters": "="
|
|
830
|
+
},
|
|
831
|
+
"AQAAAO0UAAAAAAAA7hQAAAAAAAAAAAAA",
|
|
832
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADtFAAAAAAAAO0UAAAAAAAAAAAAAAAA8L8"
|
|
833
|
+
],
|
|
834
|
+
[
|
|
835
|
+
260,
|
|
836
|
+
1,
|
|
837
|
+
"insert",
|
|
838
|
+
{
|
|
839
|
+
"characters": "="
|
|
840
|
+
},
|
|
841
|
+
"AQAAAF4VAAAAAAAAXxUAAAAAAAAAAAAA",
|
|
842
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAABeFQAAAAAAAF4VAAAAAAAAAAAAAAAA8L8"
|
|
843
|
+
],
|
|
844
|
+
[
|
|
845
|
+
264,
|
|
846
|
+
1,
|
|
847
|
+
"insert",
|
|
848
|
+
{
|
|
849
|
+
"characters": "="
|
|
850
|
+
},
|
|
851
|
+
"AQAAAO4QAAAAAAAA7xAAAAAAAAAAAAAA",
|
|
852
|
+
"CwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAADuEAAAAAAAAO4QAAAAAAAAAAAAAAAA8L8"
|
|
853
|
+
],
|
|
854
|
+
[
|
|
855
|
+
10,
|
|
856
|
+
1,
|
|
857
|
+
"revert",
|
|
858
|
+
null,
|
|
859
|
+
"BwAAAAAAAAAAAAAAAAAAAAAAAAA1GAAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlvcmlnaW5hbDogZnVuY3Rpb24oZm4pIHsKCQkJb3B0aW9ucy5vcmlnaW5hbCA9IGZuOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoJCQljb25zdCBtb2NrID0gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlRnVuY3Rpb24ocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrLCBzdGF0ZSk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZUZ1bmN0aW9uKG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJldCA9ICh2YWx1ZSwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRzW2NhbGxdID0gdmFsdWU7Cgl9OwoJbW9jay5vblJldCA9IChoYW5kbGVyLCBjYWxsID0gMCkgPT4gewoJCXN0YXRlLnJldEhhbmRsZXJzW2NhbGxdID0gaGFuZGxlcjsKCX07Cgltb2NrLmNhbGxzID0gKGNhbGwpID0+IHsKCQlyZXR1cm4gY2FsbCAhPT0gdW5kZWZpbmVkID8gc3RhdGUuY2FsbHNbY2FsbF0gOiBzdGF0ZS5jYWxsczsKCX0KCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJc3RhdGUucmV0cyA9IFtdOwoJCXN0YXRlLnJldEhhbmRsZXJzID0gW107CgkJc3RhdGUuY2FsbHMgPSBbXTsKCQlzdGF0ZS5kYXRhID0ge307Cgl9OwoJbW9jay5yZXNldCgpOwoKCXJldHVybiBtb2NrOwp9CgpmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbihzdGF0ZSwgb3B0aW9ucykgewoJaWYgKG9wdGlvbnMuYXN5bmMpIHsKCQlyZXR1cm4gYXN5bmMgZnVuY3Rpb24oKSB7CgkJCXJldHVybiBnZXRGdW5jdGlvbkJvZHkodGhpcywgc3RhdGUsIG9wdGlvbnMsIEFycmF5LmZyb20oYXJndW1lbnRzKSk7CgkJfTsKCX0gZWxzZSB7CgkJcmV0dXJuIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQm9keShwYXJlbnQsIHN0YXRlLCBvcHRpb25zLCByYXdBcmdzKSB7Cgljb25zdCBhcmdzID0gZGVlcENsb25lKGdldEZ1bmN0aW9uQXJncyhyYXdBcmdzLCBvcHRpb25zKSk7CglzdGF0ZS5jYWxscy5wdXNoKGFyZ3MpOwoJY29uc3QgY2FsbCA9IHN0YXRlLmNhbGxzLmxlbmd0aDsKCglsZXQgcmV0OwoKCWlmIChzdGF0ZS5yZXRzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0c1tjYWxsXTsKCX0gZWxzZSBpZiAoc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRIYW5kbGVyc1tjYWxsXShhcmdzKTsKCX0gZWxzZSBpZiAoc3RhdGUucmV0c1swXSkgewoJCXJldCA9IHN0YXRlLnJldHNbMF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzWzBdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbMF0oYXJncyk7Cgl9CgoJaWYgKHJldCBpbnN0YW5jZW9mIEVycm9yKQoJCXRocm93IHJldDsKCglpZiAob3B0aW9ucy5ib2R5KSB7CgkJcmV0dXJuIG9wdGlvbnMuYm9keSh7CgkJCXNlbGY6IHBhcmVudCwKCQkJc3RhdGU6IHN0YXRlLAoJCQljYWxsOiBjYWxsLAoJCQlhcmdzOiBhcmdzLAoJCQlyYXdBcmdzOiByYXdBcmdzLAoJCQlvcmlnaW5hbDogb3B0aW9ucy5vcmlnaW5hbCwKCQkJcmV0OiByZXQKCQl9KTsKCX0gZWxzZSB7CgkJcmV0dXJuIHJldDsKCX0KfQoKZnVuY3Rpb24gZ2V0RnVuY3Rpb25BcmdzKGNhbGxBcmdzLCBvcHRpb25zKSB7CglsZXQgYXJncyA9IG51bGw7CgoJaWYgKG9wdGlvbnMuc2VsZWN0Lmxlbmd0aCA9PSAxKSB7CgkJYXJncyA9IGNhbGxBcmdzW29wdGlvbnMuc2VsZWN0WzBdXTsKCX0gZWxzZSBpZiAob3B0aW9ucy5hcmdzLmxlbmd0aCkgewoJCWFyZ3MgPSB7fTsKCgkJZm9yIChsZXQgaSA9IDA7IGkgPCBvcHRpb25zLmFyZ3MubGVuZ3RoOyBpKyspIHsKCQkJaWYgKG9wdGlvbnMuc2VsZWN0Lmxlbmd0aCAmJiAhb3B0aW9ucy5zZWxlY3QuaW5jbHVkZXMoaSkpCgkJCQljb250aW51ZTsKCgkJCWxldCBhcmdOYW1lID0gJyc7CgkJCWxldCBkZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQ7CgoJCQlpZiAodHlwZW9mIG9wdGlvbnMuYXJnc1tpXSA9PSAnc3RyaW5nJykgewoJCQkJYXJnTmFtZSA9IG9wdGlvbnMuYXJnc1tpXTsKCQkJfSBlbHNlIHsKCQkJCVthcmdOYW1lLCBkZWZhdWx0VmFsdWVdID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucy5hcmdzW2ldKVswXTsKCQkJfQoKCQkJYXJnc1thcmdOYW1lXSA9IGNhbGxBcmdzW2ldICE9PSB1bmRlZmluZWQgPyBjYWxsQXJnc1tpXSA6IGRlZmF1bHRWYWx1ZTsKCQl9Cgl9IGVsc2UgewoJCS8vIE5PVEU6IFByZXZpb3VzbHkgcmV0dXJuZWQgbnVsbC4gTm93IHJldHVybnMgYXJyYXkgKG1heSBicmVhayBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSkuCgkJYXJncyA9IEFycmF5LmZyb20oY2FsbEFyZ3MpOwoJfQoKCXJldHVybiBhcmdzOwp9CgpmdW5jdGlvbiBvYmplY3RCdWlsZGVyKHByb3BzKSB7Cgljb25zdCBvcHRpb25zID0geyBwcm9wcyB9OwoKCXJldHVybiB7CgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IG1vY2sgPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5wcm9wcyk7CgoJCQlpZiAocGFyZW50KQoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7IHZhbHVlOiBtb2NrIH0pOwoJCQkKCQkJcmV0dXJuIHdpcmVPYmplY3QocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrKTsKCQl9Cgl9Owp9CgpmdW5jdGlvbiB3aXJlT2JqZWN0KG1vY2spIHsKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobW9jaykpIHsKCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0ucmVzZXQgPT0gJ2Z1bmN0aW9uJykKCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCX0KCX07CgoJcmV0dXJuIG1vY2s7Cn0KCmZ1bmN0aW9uIGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhwcm9wcykgewoJY29uc3Qgb2JqZWN0ID0ge307CgoJZm9yIChjb25zdCBrZXkgaW4gcHJvcHMpIHsKCQljb25zdCBwcm9wID0gcHJvcHNba2V5XTsKCgkJaWYgKHR5cGVvZiBwcm9wLmJ1aWxkID09ICdmdW5jdGlvbicpIHsKCQkJcHJvcC5idWlsZChvYmplY3QsIGtleSk7CgkJfSBlbHNlIHsKCQkJb2JqZWN0W2tleV0gPSBwcm9wOwoJCX0KCX0KCglyZXR1cm4gb2JqZWN0Owp9CgpmdW5jdGlvbiBjbGFzc0J1aWxkZXIobWVtYmVycykgewoJY29uc3Qgb3B0aW9ucyA9IHsgbWVtYmVycyB9OwoKCXJldHVybiB7CgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IHN0YXRlID0ge307CgkJCWNvbnN0IE1vY2sgPSBjcmVhdGVDbGFzcyhzdGF0ZSwgb3B0aW9ucyk7CgoJCQlpZiAocGFyZW50KQoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7IHZhbHVlOiBNb2NrIH0pOwoKCQkJcmV0dXJuIHdpcmVDbGFzcyhwYXJlbnQgPyBwYXJlbnRba2V5XSA6IE1vY2ssIHN0YXRlLCBvcHRpb25zKTsKCQl9Cgl9Owp9CgpmdW5jdGlvbiBjcmVhdGVDbGFzcyhzdGF0ZSwgb3B0aW9ucykgewoJcmV0dXJuIGZ1bmN0aW9uKCkgewoJCWNvbnN0IGluZGV4ID0gc3RhdGUubnVtSW5zdGFuY2VzOwoKCQlpZiAoIXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0pCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0gPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5tZW1iZXJzKTsKCgkJT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcywgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkpOwoKCQlpZiAodHlwZW9mIHN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0uY29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0uY29uc3RydWN0b3IuY2FsbCh0aGlzLCAuLi5hcmd1bWVudHMpOwoKCQlzdGF0ZS5udW1JbnN0YW5jZXMrKzsKCX07Cn0KCmZ1bmN0aW9uIHdpcmVDbGFzcyhNb2NrLCBzdGF0ZSwgb3B0aW9ucykgewoJTW9jay5pbnN0ID0gKGluZGV4ID0gMCkgPT4gewoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XTsKCX07CglNb2NrLm51bUluc3RzID0gKCkgPT4gewoJCXJldHVybiBzdGF0ZS5udW1JbnN0YW5jZXM7Cgl9OwoJTW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS5kZXNjcmlwdGlvbnMgPSBbXTsKCQlzdGF0ZS5udW1JbnN0YW5jZXMgPSAwOwoJCXN0YXRlLmRhdGEgPSB7fTsKCX07CglNb2NrLnJlc2V0KCk7CgoJcmV0dXJuIE1vY2s7Cn0KCmZ1bmN0aW9uIHByb3BlcnR5QnVpbGRlcigpIHsKCXJldHVybiB7CgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IHN0YXRlID0ge307CgoJCQlpZiAocGFyZW50KSB7CgkJCQlwYXJlbnRba2V5XSA9IHt9OwoJCQkJd2lyZVByb3BlcnR5KHBhcmVudFtrZXldLCBzdGF0ZSk7CgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsKCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJcmV0dXJuIHN0YXRlLnZhbHVlOwoJCQkJCX0sCgkJCQkJc2V0OiAodmFsdWUpID0+IHsKCQkJCQkJc3RhdGUudmFsdWUgPSB2YWx1ZTsKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVQcm9wZXJ0eShtb2NrLCBzdGF0ZSkgewoJbW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS52YWx1ZSA9IHVuZGVmaW5lZDsKCX07CgoJcmV0dXJuIG1vY2s7Cn0KCmZ1bmN0aW9uIGRlZXBDbG9uZSh0YXJnZXQpIHsKCWlmICh0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JykgewoJCWlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHsKCQkJcmV0dXJuIHRhcmdldC5tYXAoZGVlcENsb25lKTsKCQl9IGVsc2UgaWYgKHRhcmdldD8uY29uc3RydWN0b3IgPT09IE9iamVjdCkgewoJCQljb25zdCBjbG9uZSA9IHt9OwoKCQkJZm9yIChjb25zdCBrZXkgaW4gdGFyZ2V0KSB7CgkJCQljbG9uZVtrZXldID0gZGVlcENsb25lKHRhcmdldFtrZXldKTsKCQkJfQoKCQkJcmV0dXJuIGNsb25lOwoJCX0KCX0KCglyZXR1cm4gdGFyZ2V0Owp9CgpmdW5jdGlvbiBjcmVhdGVTcHkob2JqZWN0LCBrZXksIHJlcGxhY2VtZW50KSB7CglpZiAoIXJlcGxhY2VtZW50KSB7CgkJcmVwbGFjZW1lbnQgPSBmdW5jdGlvbkJ1aWxkZXIoKGN0eCkgPT4gewoJCQlpZiAoY3R4LnJldCAhPT0gdW5kZWZpbmVkKQoJCQkJcmV0dXJuIGN0eC5yZXQ7CgoJCQlyZXR1cm4gY3R4Lm9yaWdpbmFsLmFwcGx5KGN0eC5zZWxmLCBjdHgucmF3QXJncyk7CgkJfSk7Cgl9CgoJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3Rba2V5XTsKCWNvbnN0IHNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CglzcHlGbi5yZXN0b3JlID0gKCkgPT4gewoJCW9iamVjdFtrZXldID0gb3JpZ2luYWw7Cgl9OwoJb2JqZWN0W2tleV0gPSBzcHlGbjsKCglyZXR1cm4gc3B5Rm47Cn0KCm1vZHVsZS5leHBvcnRzID0gewoJc3B5OiBjcmVhdGVTcHksCgljcmVhdGU6IG1vY2tCdWlsZGVyLAoJZnVuY3Rpb246IGZ1bmN0aW9uQnVpbGRlciwKCW9iamVjdDogb2JqZWN0QnVpbGRlciwKCWNsYXNzOiBjbGFzc0J1aWxkZXIsCglwcm9wZXJ0eTogcHJvcGVydHlCdWlsZGVyLAp9OwoAAAAAAAAAAAYaAAAAAAAAAAAAAAAAAAAAAAAABhoAAAAAAAAAAAAAAAAAAAAAAAAGGgAAAAAAAAAAAAAAAAAAAAAAAAYaAAAAAAAAAAAAAAAAAAAAAAAAHxoAAAAAAAAAAAAAAAAAAAAAAACkGwAAAAAAAAAAAAA",
|
|
860
|
+
"CQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIoLAAAAAAAAkQsAAAAAAAAAAAAAAADwvw"
|
|
861
|
+
],
|
|
862
|
+
[
|
|
863
|
+
6,
|
|
864
|
+
1,
|
|
865
|
+
"cut",
|
|
866
|
+
null,
|
|
867
|
+
"AQAAAEoSAAAAAAAAShIAAAAAAAAsAAAACQkvLyBTdG9yZSBpbnN0YW5jZSBpbmRleCBmb3IgbWV0aG9kIGxvb2t1cAo",
|
|
868
|
+
"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAWRIAAAAAAABZEgAAAAAAAAAAAAAAAPC/"
|
|
869
|
+
],
|
|
870
|
+
[
|
|
871
|
+
8,
|
|
872
|
+
1,
|
|
873
|
+
"cut",
|
|
874
|
+
null,
|
|
875
|
+
"AQAAAAoTAAAAAAAAChMAAAAAAABTAAAACS8vIFB1dCBtZXRob2QgYWNjZXNzb3JzIG9uIHByb3RvdHlwZSBzbyBjaGlsZCBjbGFzc2VzIGNhbiBvdmVycmlkZSBhbmQgY2FsbCBzdXBlcgo",
|
|
876
|
+
"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAChMAAAAAAAAKEwAAAAAAAAAAAAAAAAAA"
|
|
877
|
+
],
|
|
878
|
+
[
|
|
879
|
+
10,
|
|
880
|
+
1,
|
|
881
|
+
"insert",
|
|
882
|
+
{
|
|
883
|
+
"characters": "\n"
|
|
884
|
+
},
|
|
885
|
+
"AQAAAGgTAAAAAAAAaRMAAAAAAAAAAAAA",
|
|
886
|
+
"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAaBMAAAAAAABoEwAAAAAAAAAAAAAAAAAA"
|
|
887
|
+
],
|
|
888
|
+
[
|
|
889
|
+
14,
|
|
890
|
+
1,
|
|
891
|
+
"left_delete",
|
|
892
|
+
null,
|
|
893
|
+
"AQAAAF0TAAAAAAAAXRMAAAAAAAABAAAAIA",
|
|
894
|
+
"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAXhMAAAAAAABeEwAAAAAAAAAAAAAAAPC/"
|
|
895
|
+
],
|
|
896
|
+
[
|
|
897
|
+
15,
|
|
898
|
+
1,
|
|
899
|
+
"insert",
|
|
900
|
+
{
|
|
901
|
+
"characters": "\n"
|
|
902
|
+
},
|
|
903
|
+
"AwAAAF0TAAAAAAAAYBMAAAAAAAAAAAAAXhMAAAAAAABeEwAAAAAAAAIAAAAJCV4TAAAAAAAAYRMAAAAAAAAAAAAA",
|
|
904
|
+
"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAXRMAAAAAAABdEwAAAAAAAAAAAAAAAPC/"
|
|
905
|
+
],
|
|
906
|
+
[
|
|
907
|
+
18,
|
|
908
|
+
1,
|
|
909
|
+
"insert",
|
|
910
|
+
{
|
|
911
|
+
"characters": "\n"
|
|
912
|
+
},
|
|
913
|
+
"AQAAAJMTAAAAAAAAlBMAAAAAAAAAAAAA",
|
|
914
|
+
"BAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAkxMAAAAAAACTEwAAAAAAAAAAAAAAAAAA"
|
|
915
|
+
],
|
|
916
|
+
[
|
|
917
|
+
1,
|
|
918
|
+
1,
|
|
919
|
+
"revert",
|
|
920
|
+
null,
|
|
921
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAAAEHQAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlvcmlnaW5hbDogZnVuY3Rpb24oZm4pIHsKCQkJb3B0aW9ucy5vcmlnaW5hbCA9IGZuOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoJCQljb25zdCBtb2NrID0gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlRnVuY3Rpb24ocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrLCBzdGF0ZSk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZUZ1bmN0aW9uKG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJldCA9ICh2YWx1ZSwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRzW2NhbGxdID0gdmFsdWU7Cgl9OwoJbW9jay5vblJldCA9IChoYW5kbGVyLCBjYWxsID0gMCkgPT4gewoJCXN0YXRlLnJldEhhbmRsZXJzW2NhbGxdID0gaGFuZGxlcjsKCX07Cgltb2NrLmNhbGxzID0gKGNhbGwpID0+IHsKCQlyZXR1cm4gY2FsbCAhPT0gdW5kZWZpbmVkID8gc3RhdGUuY2FsbHNbY2FsbF0gOiBzdGF0ZS5jYWxsczsKCX07Cgltb2NrLmRhdGEgPSAoa2V5KSA9PiB7CgkJcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8gc3RhdGUuZGF0YVtrZXldIDogc3RhdGUuZGF0YTsKCX07Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnJldHMgPSBbXTsKCQlzdGF0ZS5yZXRIYW5kbGVycyA9IFtdOwoJCXN0YXRlLmNhbGxzID0gW107CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCW1vY2sucmVzZXQoKTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpIHsKCWlmIChvcHRpb25zLmFzeW5jKSB7CgkJcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9IGVsc2UgewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkJvZHkocGFyZW50LCBzdGF0ZSwgb3B0aW9ucywgcmF3QXJncykgewoJY29uc3QgYXJncyA9IGRlZXBDbG9uZShnZXRGdW5jdGlvbkFyZ3MocmF3QXJncywgb3B0aW9ucykpOwoJc3RhdGUuY2FsbHMucHVzaChhcmdzKTsKCWNvbnN0IGNhbGwgPSBzdGF0ZS5jYWxscy5sZW5ndGg7CgoJbGV0IHJldDsKCglpZiAoc3RhdGUucmV0c1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldHNbY2FsbF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0oYXJncyk7Cgl9IGVsc2UgaWYgKHN0YXRlLnJldHNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzWzBdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1swXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzWzBdKGFyZ3MpOwoJfQoKCWlmIChyZXQgaW5zdGFuY2VvZiBFcnJvcikKCQl0aHJvdyByZXQ7CgoJaWYgKG9wdGlvbnMuYm9keSkgewoJCXJldHVybiBvcHRpb25zLmJvZHkoewoJCQlzZWxmOiBwYXJlbnQsCgkJCXN0YXRlOiBzdGF0ZSwKCQkJY2FsbDogY2FsbCwKCQkJYXJnczogYXJncywKCQkJcmF3QXJnczogcmF3QXJncywKCQkJb3JpZ2luYWw6IG9wdGlvbnMub3JpZ2luYWwsCgkJCXJldDogcmV0CgkJfSk7Cgl9IGVsc2UgewoJCXJldHVybiByZXQ7Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQXJncyhjYWxsQXJncywgb3B0aW9ucykgewoJbGV0IGFyZ3MgPSBudWxsOwoKCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggPT0gMSkgewoJCWFyZ3MgPSBjYWxsQXJnc1tvcHRpb25zLnNlbGVjdFswXV07Cgl9IGVsc2UgaWYgKG9wdGlvbnMuYXJncy5sZW5ndGgpIHsKCQlhcmdzID0ge307CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcmdzLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggJiYgIW9wdGlvbnMuc2VsZWN0LmluY2x1ZGVzKGkpKQoJCQkJY29udGludWU7CgoJCQlsZXQgYXJnTmFtZSA9ICcnOwoJCQlsZXQgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkOwoKCQkJaWYgKHR5cGVvZiBvcHRpb25zLmFyZ3NbaV0gPT0gJ3N0cmluZycpIHsKCQkJCWFyZ05hbWUgPSBvcHRpb25zLmFyZ3NbaV07CgkJCX0gZWxzZSB7CgkJCQlbYXJnTmFtZSwgZGVmYXVsdFZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXJnc1tpXSlbMF07CgkJCX0KCgkJCWFyZ3NbYXJnTmFtZV0gPSBjYWxsQXJnc1tpXSAhPT0gdW5kZWZpbmVkID8gY2FsbEFyZ3NbaV0gOiBkZWZhdWx0VmFsdWU7CgkJfQoJfSBlbHNlIHsKCQkvLyBOT1RFOiBQcmV2aW91c2x5IHJldHVybmVkIG51bGwuIE5vdyByZXR1cm5zIGFycmF5IChtYXkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLgoJCWFyZ3MgPSBBcnJheS5mcm9tKGNhbGxBcmdzKTsKCX0KCglyZXR1cm4gYXJnczsKfQoKZnVuY3Rpb24gb2JqZWN0QnVpbGRlcihwcm9wcykgewoJY29uc3Qgb3B0aW9ucyA9IHsgcHJvcHMgfTsKCglyZXR1cm4gewoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgcHJvcHMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVPYmplY3QobW9jaywgaW5pdGlhbFByb3BzKSB7Cgljb25zdCBpbml0aWFsTW9ja3MgPSBuZXcgU2V0KCk7Cgljb25zdCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcCgpOwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbml0aWFsUHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IGluaXRpYWxQcm9wc1trZXldOwoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaW5pdGlhbE1vY2tzLmFkZChrZXkpOwoJCX0gZWxzZSB7CgkJCWluaXRpYWxWYWx1ZXMuc2V0KGtleSwgcHJvcCk7CgkJfQoJfQoKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG1vY2spKSB7CgkJCWlmIChrZXkgPT09ICdyZXNldCcpIGNvbnRpbnVlOwoKCQkJaWYgKGluaXRpYWxNb2Nrcy5oYXMoa2V5KSkgewoJCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0/LnJlc2V0ID09PSAnZnVuY3Rpb24nKQoJCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCQl9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZXMuaGFzKGtleSkpIHsKCQkJCW1vY2tba2V5XSA9IGluaXRpYWxWYWx1ZXMuZ2V0KGtleSk7CgkJCX0gZWxzZSB7CgkJCQlkZWxldGUgbW9ja1trZXldOwoJCQl9CgkJfQoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0V2l0aFByb3BzKHByb3BzKSB7Cgljb25zdCBvYmplY3QgPSB7fTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMocHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT0gJ2Z1bmN0aW9uJykgewoJCQlwcm9wLmJ1aWxkKG9iamVjdCwga2V5KTsKCQl9IGVsc2UgewoJCQlvYmplY3Rba2V5XSA9IHByb3A7CgkJfQoJfQoKCXJldHVybiBvYmplY3Q7Cn0KCmZ1bmN0aW9uIGNsYXNzQnVpbGRlcihtZW1iZXJzKSB7Cgljb25zdCBvcHRpb25zID0geyBtZW1iZXJzIH07CgoJcmV0dXJuIHsKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgTW9jayA9IGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IE1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUNsYXNzKHBhcmVudCA/IHBhcmVudFtrZXldIDogTW9jaywgc3RhdGUsIG9wdGlvbnMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKSB7Cgljb25zdCBNb2NrID0gZnVuY3Rpb24oKSB7CgkJY29uc3QgaW5kZXggPSBzdGF0ZS5udW1JbnN0YW5jZXM7CgoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19tb2NrSW5kZXgnLCB7IHZhbHVlOiBpbmRleCB9KTsKCgkJaWYgKHR5cGVvZiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTsKCgkJc3RhdGUubnVtSW5zdGFuY2VzKys7Cgl9OwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvcHRpb25zLm1lbWJlcnMpKSB7CgkJaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykKCQkJY29udGludWU7CgoJCWNvbnN0IG1lbWJlciA9IG9wdGlvbnMubWVtYmVyc1trZXldOwoKCQlpZiAodHlwZW9mIG1lbWJlcj8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaWYgKG1lbWJlci5pc1Byb3BlcnR5KSB7CgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9jay5wcm90b3R5cGUsIGtleSwgewoJCQkJCWdldDogZnVuY3Rpb24oKSB7CgkJCQkJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldOwoJCQkJCX0sCgkJCQkJc2V0OiBmdW5jdGlvbih2YWx1ZSkgewoJCQkJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldID0gdmFsdWU7CgkJCQkJfSwKCQkJCQllbnVtZXJhYmxlOiB0cnVlLAoJCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZQoJCQkJfSk7CgkJCX0gZWxzZSB7CgkJCQlNb2NrLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24oLi4uYXJncykgewoJCQkJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldLmFwcGx5KHRoaXMsIGFyZ3MpOwoJCQkJfTsKCQkJfQoJCX0KCX0KCglyZXR1cm4gTW9jazsKfQoKZnVuY3Rpb24gd2lyZUNsYXNzKE1vY2ssIHN0YXRlLCBvcHRpb25zKSB7CglNb2NrLmluc3QgPSAoaW5kZXggPSAwKSA9PiB7CgkJaWYgKCFzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMubWVtYmVycyk7CgoJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdOwoJfTsKCU1vY2subnVtSW5zdHMgPSAoKSA9PiB7CgkJcmV0dXJuIHN0YXRlLm51bUluc3RhbmNlczsKCX07CglNb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLmRlc2NyaXB0aW9ucyA9IFtdOwoJCXN0YXRlLm51bUluc3RhbmNlcyA9IDA7CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCU1vY2sucmVzZXQoKTsKCglyZXR1cm4gTW9jazsKfQoKZnVuY3Rpb24gcHJvcGVydHlCdWlsZGVyKCkgewoJcmV0dXJuIHsKCQlpc1Byb3BlcnR5OiB0cnVlLAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoKCQkJaWYgKHBhcmVudCkgewoJCQkJcGFyZW50W2tleV0gPSB7fTsKCQkJCXdpcmVQcm9wZXJ0eShwYXJlbnRba2V5XSwgc3RhdGUpOwoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7CgkJCQkJZ2V0OiAoKSA9PiB7CgkJCQkJCXJldHVybiBzdGF0ZS52YWx1ZTsKCQkJCQl9LAoJCQkJCXNldDogKHZhbHVlKSA9PiB7CgkJCQkJCXN0YXRlLnZhbHVlID0gdmFsdWU7CgkJCQkJfQoJCQkJfSk7CgkJCX0KCQl9Cgl9Owp9CgpmdW5jdGlvbiB3aXJlUHJvcGVydHkobW9jaywgc3RhdGUpIHsKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJc3RhdGUudmFsdWUgPSB1bmRlZmluZWQ7Cgl9OwoKCXJldHVybiBtb2NrOwp9CgpmdW5jdGlvbiBkZWVwQ2xvbmUodGFyZ2V0KSB7CglpZiAodHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHsKCQlpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7CgkJCXJldHVybiB0YXJnZXQubWFwKGRlZXBDbG9uZSk7CgkJfSBlbHNlIGlmICh0YXJnZXQ/LmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHsKCQkJY29uc3QgY2xvbmUgPSB7fTsKCgkJCWZvciAoY29uc3Qga2V5IGluIHRhcmdldCkgewoJCQkJY2xvbmVba2V5XSA9IGRlZXBDbG9uZSh0YXJnZXRba2V5XSk7CgkJCX0KCgkJCXJldHVybiBjbG9uZTsKCQl9Cgl9CgoJcmV0dXJuIHRhcmdldDsKfQoKZnVuY3Rpb24gY3JlYXRlU3B5KG9iamVjdCwga2V5LCByZXBsYWNlbWVudCkgewoJaWYgKCFyZXBsYWNlbWVudCkgewoJCXJlcGxhY2VtZW50ID0gZnVuY3Rpb25CdWlsZGVyKChjdHgpID0+IHsKCQkJaWYgKGN0eC5yZXQgIT09IHVuZGVmaW5lZCkKCQkJCXJldHVybiBjdHgucmV0OwoKCQkJcmV0dXJuIGN0eC5vcmlnaW5hbC5hcHBseShjdHguc2VsZiwgY3R4LnJhd0FyZ3MpOwoJCX0pOwoJfQoKCWNvbnN0IG9yaWdpbmFsID0gb2JqZWN0W2tleV07Cgljb25zdCBzcHlGbiA9IHJlcGxhY2VtZW50Lm9yaWdpbmFsKG9yaWdpbmFsKS5idWlsZCgpOwoJc3B5Rm4ucmVzdG9yZSA9ICgpID0+IHsKCQlvYmplY3Rba2V5XSA9IG9yaWdpbmFsOwoJfTsKCW9iamVjdFtrZXldID0gc3B5Rm47CgoJcmV0dXJuIHNweUZuOwp9Cgptb2R1bGUuZXhwb3J0cyA9IHsKCXNweTogY3JlYXRlU3B5LAoJY3JlYXRlOiBtb2NrQnVpbGRlciwKCWZ1bmN0aW9uOiBmdW5jdGlvbkJ1aWxkZXIsCglvYmplY3Q6IG9iamVjdEJ1aWxkZXIsCgljbGFzczogY2xhc3NCdWlsZGVyLAoJcHJvcGVydHk6IHByb3BlcnR5QnVpbGRlciwKfTsKAAAAAAAAAAAfHgAAAAAAAAAAAAA",
|
|
922
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvw"
|
|
923
|
+
],
|
|
924
|
+
[
|
|
925
|
+
12,
|
|
926
|
+
1,
|
|
927
|
+
"revert",
|
|
928
|
+
null,
|
|
929
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAAAfHgAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlvcmlnaW5hbDogZnVuY3Rpb24oZm4pIHsKCQkJb3B0aW9ucy5vcmlnaW5hbCA9IGZuOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoJCQljb25zdCBtb2NrID0gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlRnVuY3Rpb24ocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrLCBzdGF0ZSk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZUZ1bmN0aW9uKG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJldCA9ICh2YWx1ZSwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRzW2NhbGxdID0gdmFsdWU7Cgl9OwoJbW9jay5vblJldCA9IChoYW5kbGVyLCBjYWxsID0gMCkgPT4gewoJCXN0YXRlLnJldEhhbmRsZXJzW2NhbGxdID0gaGFuZGxlcjsKCX07Cgltb2NrLmNhbGxzID0gKGNhbGwpID0+IHsKCQlyZXR1cm4gY2FsbCAhPT0gdW5kZWZpbmVkID8gc3RhdGUuY2FsbHNbY2FsbF0gOiBzdGF0ZS5jYWxsczsKCX07Cgltb2NrLmRhdGEgPSAoa2V5KSA9PiB7CgkJcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8gc3RhdGUuZGF0YVtrZXldIDogc3RhdGUuZGF0YTsKCX07Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnJldHMgPSBbXTsKCQlzdGF0ZS5yZXRIYW5kbGVycyA9IFtdOwoJCXN0YXRlLmNhbGxzID0gW107CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCW1vY2sucmVzZXQoKTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpIHsKCWlmIChvcHRpb25zLmFzeW5jKSB7CgkJcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9IGVsc2UgewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkJvZHkocGFyZW50LCBzdGF0ZSwgb3B0aW9ucywgcmF3QXJncykgewoJY29uc3QgYXJncyA9IGRlZXBDbG9uZShnZXRGdW5jdGlvbkFyZ3MocmF3QXJncywgb3B0aW9ucykpOwoJc3RhdGUuY2FsbHMucHVzaChhcmdzKTsKCWNvbnN0IGNhbGwgPSBzdGF0ZS5jYWxscy5sZW5ndGg7CgoJbGV0IHJldDsKCglpZiAoc3RhdGUucmV0c1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldHNbY2FsbF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0oYXJncyk7Cgl9IGVsc2UgaWYgKHN0YXRlLnJldHNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzWzBdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1swXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzWzBdKGFyZ3MpOwoJfQoKCWlmIChyZXQgaW5zdGFuY2VvZiBFcnJvcikKCQl0aHJvdyByZXQ7CgoJaWYgKG9wdGlvbnMuYm9keSkgewoJCXJldHVybiBvcHRpb25zLmJvZHkoewoJCQlzZWxmOiBwYXJlbnQsCgkJCXN0YXRlOiBzdGF0ZSwKCQkJY2FsbDogY2FsbCwKCQkJYXJnczogYXJncywKCQkJcmF3QXJnczogcmF3QXJncywKCQkJb3JpZ2luYWw6IG9wdGlvbnMub3JpZ2luYWwsCgkJCXJldDogcmV0CgkJfSk7Cgl9IGVsc2UgewoJCXJldHVybiByZXQ7Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQXJncyhjYWxsQXJncywgb3B0aW9ucykgewoJbGV0IGFyZ3MgPSBudWxsOwoKCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggPT0gMSkgewoJCWFyZ3MgPSBjYWxsQXJnc1tvcHRpb25zLnNlbGVjdFswXV07Cgl9IGVsc2UgaWYgKG9wdGlvbnMuYXJncy5sZW5ndGgpIHsKCQlhcmdzID0ge307CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcmdzLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggJiYgIW9wdGlvbnMuc2VsZWN0LmluY2x1ZGVzKGkpKQoJCQkJY29udGludWU7CgoJCQlsZXQgYXJnTmFtZSA9ICcnOwoJCQlsZXQgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkOwoKCQkJaWYgKHR5cGVvZiBvcHRpb25zLmFyZ3NbaV0gPT0gJ3N0cmluZycpIHsKCQkJCWFyZ05hbWUgPSBvcHRpb25zLmFyZ3NbaV07CgkJCX0gZWxzZSB7CgkJCQlbYXJnTmFtZSwgZGVmYXVsdFZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXJnc1tpXSlbMF07CgkJCX0KCgkJCWFyZ3NbYXJnTmFtZV0gPSBjYWxsQXJnc1tpXSAhPT0gdW5kZWZpbmVkID8gY2FsbEFyZ3NbaV0gOiBkZWZhdWx0VmFsdWU7CgkJfQoJfSBlbHNlIHsKCQkvLyBOT1RFOiBQcmV2aW91c2x5IHJldHVybmVkIG51bGwuIE5vdyByZXR1cm5zIGFycmF5IChtYXkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLgoJCWFyZ3MgPSBBcnJheS5mcm9tKGNhbGxBcmdzKTsKCX0KCglyZXR1cm4gYXJnczsKfQoKZnVuY3Rpb24gb2JqZWN0QnVpbGRlcihwcm9wcykgewoJY29uc3Qgb3B0aW9ucyA9IHsgcHJvcHMgfTsKCglyZXR1cm4gewoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgcHJvcHMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVPYmplY3QobW9jaywgaW5pdGlhbFByb3BzKSB7Cgljb25zdCBpbml0aWFsTW9ja3MgPSBuZXcgU2V0KCk7Cgljb25zdCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcCgpOwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbml0aWFsUHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IGluaXRpYWxQcm9wc1trZXldOwoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaW5pdGlhbE1vY2tzLmFkZChrZXkpOwoJCX0gZWxzZSB7CgkJCWluaXRpYWxWYWx1ZXMuc2V0KGtleSwgcHJvcCk7CgkJfQoJfQoKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG1vY2spKSB7CgkJCWlmIChrZXkgPT09ICdyZXNldCcpIGNvbnRpbnVlOwoKCQkJaWYgKGluaXRpYWxNb2Nrcy5oYXMoa2V5KSkgewoJCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0/LnJlc2V0ID09PSAnZnVuY3Rpb24nKQoJCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCQl9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZXMuaGFzKGtleSkpIHsKCQkJCW1vY2tba2V5XSA9IGluaXRpYWxWYWx1ZXMuZ2V0KGtleSk7CgkJCX0gZWxzZSB7CgkJCQlkZWxldGUgbW9ja1trZXldOwoJCQl9CgkJfQoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0V2l0aFByb3BzKHByb3BzKSB7Cgljb25zdCBvYmplY3QgPSB7fTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMocHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT0gJ2Z1bmN0aW9uJykgewoJCQlwcm9wLmJ1aWxkKG9iamVjdCwga2V5KTsKCQl9IGVsc2UgewoJCQlvYmplY3Rba2V5XSA9IHByb3A7CgkJfQoJfQoKCXJldHVybiBvYmplY3Q7Cn0KCmZ1bmN0aW9uIGNsYXNzQnVpbGRlcihtZW1iZXJzKSB7Cgljb25zdCBvcHRpb25zID0geyBtZW1iZXJzIH07CgoJcmV0dXJuIHsKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgTW9jayA9IGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IE1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUNsYXNzKHBhcmVudCA/IHBhcmVudFtrZXldIDogTW9jaywgc3RhdGUsIG9wdGlvbnMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKSB7Cgljb25zdCBNb2NrID0gZnVuY3Rpb24oKSB7CgkJY29uc3QgaW5kZXggPSBzdGF0ZS5udW1JbnN0YW5jZXM7CgoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19tb2NrSW5kZXgnLCB7IHZhbHVlOiBpbmRleCB9KTsKCgkJaWYgKHR5cGVvZiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTsKCgkJc3RhdGUubnVtSW5zdGFuY2VzKys7Cgl9OwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvcHRpb25zLm1lbWJlcnMpKSB7CgkJaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykKCQkJY29udGludWU7CgoJCWNvbnN0IG1lbWJlciA9IG9wdGlvbnMubWVtYmVyc1trZXldOwoKCQlpZiAodHlwZW9mIG1lbWJlcj8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaWYgKG1lbWJlci5pc1Byb3BlcnR5KSB7CgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9jay5wcm90b3R5cGUsIGtleSwgewoJCQkJCWdldDogZnVuY3Rpb24oKSB7CgkJCQkJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldOwoJCQkJCX0sCgkJCQkJc2V0OiBmdW5jdGlvbih2YWx1ZSkgewoJCQkJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldID0gdmFsdWU7CgkJCQkJfSwKCQkJCQllbnVtZXJhYmxlOiB0cnVlLAoJCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZQoJCQkJfSk7CgkJCX0gZWxzZSB7CgkJCQlNb2NrLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24oLi4uYXJncykgewoJCQkJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldLmFwcGx5KHRoaXMsIGFyZ3MpOwoJCQkJfTsKCQkJfQoJCX0gZWxzZSB7CgkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb2NrLnByb3RvdHlwZSwga2V5LCB7CgkJCQlnZXQ6IGZ1bmN0aW9uKCkgewoJCQkJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldOwoJCQkJfSwKCQkJCXNldDogZnVuY3Rpb24odmFsdWUpIHsKCQkJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldID0gdmFsdWU7CgkJCQl9LAoJCQkJZW51bWVyYWJsZTogdHJ1ZSwKCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZQoJCQl9KTsKCQl9Cgl9CgoJcmV0dXJuIE1vY2s7Cn0KCmZ1bmN0aW9uIHdpcmVDbGFzcyhNb2NrLCBzdGF0ZSwgb3B0aW9ucykgewoJTW9jay5pbnN0ID0gKGluZGV4ID0gMCkgPT4gewoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XTsKCX07CglNb2NrLm51bUluc3RzID0gKCkgPT4gewoJCXJldHVybiBzdGF0ZS5udW1JbnN0YW5jZXM7Cgl9OwoJTW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS5kZXNjcmlwdGlvbnMgPSBbXTsKCQlzdGF0ZS5udW1JbnN0YW5jZXMgPSAwOwoJCXN0YXRlLmRhdGEgPSB7fTsKCX07CglNb2NrLnJlc2V0KCk7CgoJcmV0dXJuIE1vY2s7Cn0KCmZ1bmN0aW9uIHByb3BlcnR5QnVpbGRlcigpIHsKCXJldHVybiB7CgkJaXNQcm9wZXJ0eTogdHJ1ZSwKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCgkJCWlmIChwYXJlbnQpIHsKCQkJCXBhcmVudFtrZXldID0ge307CgkJCQl3aXJlUHJvcGVydHkocGFyZW50W2tleV0sIHN0YXRlKTsKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgewoJCQkJCWdldDogKCkgPT4gewoJCQkJCQlyZXR1cm4gc3RhdGUudmFsdWU7CgkJCQkJfSwKCQkJCQlzZXQ6ICh2YWx1ZSkgPT4gewoJCQkJCQlzdGF0ZS52YWx1ZSA9IHZhbHVlOwoJCQkJCX0KCQkJCX0pOwoJCQl9CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZVByb3BlcnR5KG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnZhbHVlID0gdW5kZWZpbmVkOwoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gZGVlcENsb25lKHRhcmdldCkgewoJaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7CgkJaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkgewoJCQlyZXR1cm4gdGFyZ2V0Lm1hcChkZWVwQ2xvbmUpOwoJCX0gZWxzZSBpZiAodGFyZ2V0Py5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7CgkJCWNvbnN0IGNsb25lID0ge307CgoJCQlmb3IgKGNvbnN0IGtleSBpbiB0YXJnZXQpIHsKCQkJCWNsb25lW2tleV0gPSBkZWVwQ2xvbmUodGFyZ2V0W2tleV0pOwoJCQl9CgoJCQlyZXR1cm4gY2xvbmU7CgkJfQoJfQoKCXJldHVybiB0YXJnZXQ7Cn0KCmZ1bmN0aW9uIGNyZWF0ZVNweShvYmplY3QsIGtleSwgcmVwbGFjZW1lbnQpIHsKCWlmICghcmVwbGFjZW1lbnQpIHsKCQlyZXBsYWNlbWVudCA9IGZ1bmN0aW9uQnVpbGRlcigoY3R4KSA9PiB7CgkJCWlmIChjdHgucmV0ICE9PSB1bmRlZmluZWQpCgkJCQlyZXR1cm4gY3R4LnJldDsKCgkJCXJldHVybiBjdHgub3JpZ2luYWwuYXBwbHkoY3R4LnNlbGYsIGN0eC5yYXdBcmdzKTsKCQl9KTsKCX0KCgljb25zdCBvcmlnaW5hbCA9IG9iamVjdFtrZXldOwoJY29uc3Qgc3B5Rm4gPSByZXBsYWNlbWVudC5vcmlnaW5hbChvcmlnaW5hbCkuYnVpbGQoKTsKCXNweUZuLnJlc3RvcmUgPSAoKSA9PiB7CgkJb2JqZWN0W2tleV0gPSBvcmlnaW5hbDsKCX07CglvYmplY3Rba2V5XSA9IHNweUZuOwoKCXJldHVybiBzcHlGbjsKfQoKbW9kdWxlLmV4cG9ydHMgPSB7CglzcHk6IGNyZWF0ZVNweSwKCWNyZWF0ZTogbW9ja0J1aWxkZXIsCglmdW5jdGlvbjogZnVuY3Rpb25CdWlsZGVyLAoJb2JqZWN0OiBvYmplY3RCdWlsZGVyLAoJY2xhc3M6IGNsYXNzQnVpbGRlciwKCXByb3BlcnR5OiBwcm9wZXJ0eUJ1aWxkZXIsCn07CgAAAAAAAAAA6xwAAAAAAAAAAAAA",
|
|
930
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEQUAAAAAAAAVRQAAAAAAAAAAAAAAADwvw"
|
|
931
|
+
],
|
|
932
|
+
[
|
|
933
|
+
27,
|
|
934
|
+
1,
|
|
935
|
+
"revert",
|
|
936
|
+
null,
|
|
937
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAADrHAAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlvcmlnaW5hbDogZnVuY3Rpb24oZm4pIHsKCQkJb3B0aW9ucy5vcmlnaW5hbCA9IGZuOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoJCQljb25zdCBtb2NrID0gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlRnVuY3Rpb24ocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrLCBzdGF0ZSk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZUZ1bmN0aW9uKG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJldCA9ICh2YWx1ZSwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRzW2NhbGxdID0gdmFsdWU7Cgl9OwoJbW9jay5vblJldCA9IChoYW5kbGVyLCBjYWxsID0gMCkgPT4gewoJCXN0YXRlLnJldEhhbmRsZXJzW2NhbGxdID0gaGFuZGxlcjsKCX07Cgltb2NrLmNhbGxzID0gKGNhbGwpID0+IHsKCQlyZXR1cm4gY2FsbCAhPT0gdW5kZWZpbmVkID8gc3RhdGUuY2FsbHNbY2FsbF0gOiBzdGF0ZS5jYWxsczsKCX07Cgltb2NrLmRhdGEgPSAoa2V5KSA9PiB7CgkJcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8gc3RhdGUuZGF0YVtrZXldIDogc3RhdGUuZGF0YTsKCX07Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnJldHMgPSBbXTsKCQlzdGF0ZS5yZXRIYW5kbGVycyA9IFtdOwoJCXN0YXRlLmNhbGxzID0gW107CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCW1vY2sucmVzZXQoKTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpIHsKCWlmIChvcHRpb25zLmFzeW5jKSB7CgkJcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9IGVsc2UgewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkJvZHkocGFyZW50LCBzdGF0ZSwgb3B0aW9ucywgcmF3QXJncykgewoJY29uc3QgYXJncyA9IGRlZXBDbG9uZShnZXRGdW5jdGlvbkFyZ3MocmF3QXJncywgb3B0aW9ucykpOwoJc3RhdGUuY2FsbHMucHVzaChhcmdzKTsKCWNvbnN0IGNhbGwgPSBzdGF0ZS5jYWxscy5sZW5ndGg7CgoJbGV0IHJldDsKCglpZiAoc3RhdGUucmV0c1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldHNbY2FsbF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0oYXJncyk7Cgl9IGVsc2UgaWYgKHN0YXRlLnJldHNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzWzBdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1swXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzWzBdKGFyZ3MpOwoJfQoKCWlmIChyZXQgaW5zdGFuY2VvZiBFcnJvcikKCQl0aHJvdyByZXQ7CgoJaWYgKG9wdGlvbnMuYm9keSkgewoJCXJldHVybiBvcHRpb25zLmJvZHkoewoJCQlzZWxmOiBwYXJlbnQsCgkJCXN0YXRlOiBzdGF0ZSwKCQkJY2FsbDogY2FsbCwKCQkJYXJnczogYXJncywKCQkJcmF3QXJnczogcmF3QXJncywKCQkJb3JpZ2luYWw6IG9wdGlvbnMub3JpZ2luYWwsCgkJCXJldDogcmV0CgkJfSk7Cgl9IGVsc2UgewoJCXJldHVybiByZXQ7Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQXJncyhjYWxsQXJncywgb3B0aW9ucykgewoJbGV0IGFyZ3MgPSBudWxsOwoKCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggPT0gMSkgewoJCWFyZ3MgPSBjYWxsQXJnc1tvcHRpb25zLnNlbGVjdFswXV07Cgl9IGVsc2UgaWYgKG9wdGlvbnMuYXJncy5sZW5ndGgpIHsKCQlhcmdzID0ge307CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcmdzLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggJiYgIW9wdGlvbnMuc2VsZWN0LmluY2x1ZGVzKGkpKQoJCQkJY29udGludWU7CgoJCQlsZXQgYXJnTmFtZSA9ICcnOwoJCQlsZXQgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkOwoKCQkJaWYgKHR5cGVvZiBvcHRpb25zLmFyZ3NbaV0gPT0gJ3N0cmluZycpIHsKCQkJCWFyZ05hbWUgPSBvcHRpb25zLmFyZ3NbaV07CgkJCX0gZWxzZSB7CgkJCQlbYXJnTmFtZSwgZGVmYXVsdFZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXJnc1tpXSlbMF07CgkJCX0KCgkJCWFyZ3NbYXJnTmFtZV0gPSBjYWxsQXJnc1tpXSAhPT0gdW5kZWZpbmVkID8gY2FsbEFyZ3NbaV0gOiBkZWZhdWx0VmFsdWU7CgkJfQoJfSBlbHNlIHsKCQkvLyBOT1RFOiBQcmV2aW91c2x5IHJldHVybmVkIG51bGwuIE5vdyByZXR1cm5zIGFycmF5IChtYXkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLgoJCWFyZ3MgPSBBcnJheS5mcm9tKGNhbGxBcmdzKTsKCX0KCglyZXR1cm4gYXJnczsKfQoKZnVuY3Rpb24gb2JqZWN0QnVpbGRlcihwcm9wcykgewoJY29uc3Qgb3B0aW9ucyA9IHsgcHJvcHMgfTsKCglyZXR1cm4gewoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgcHJvcHMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVPYmplY3QobW9jaywgaW5pdGlhbFByb3BzKSB7Cgljb25zdCBpbml0aWFsTW9ja3MgPSBuZXcgU2V0KCk7Cgljb25zdCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcCgpOwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbml0aWFsUHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IGluaXRpYWxQcm9wc1trZXldOwoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaW5pdGlhbE1vY2tzLmFkZChrZXkpOwoJCX0gZWxzZSB7CgkJCWluaXRpYWxWYWx1ZXMuc2V0KGtleSwgcHJvcCk7CgkJfQoJfQoKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG1vY2spKSB7CgkJCWlmIChrZXkgPT09ICdyZXNldCcpIGNvbnRpbnVlOwoKCQkJaWYgKGluaXRpYWxNb2Nrcy5oYXMoa2V5KSkgewoJCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0/LnJlc2V0ID09PSAnZnVuY3Rpb24nKQoJCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCQl9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZXMuaGFzKGtleSkpIHsKCQkJCW1vY2tba2V5XSA9IGluaXRpYWxWYWx1ZXMuZ2V0KGtleSk7CgkJCX0gZWxzZSB7CgkJCQlkZWxldGUgbW9ja1trZXldOwoJCQl9CgkJfQoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0V2l0aFByb3BzKHByb3BzKSB7Cgljb25zdCBvYmplY3QgPSB7fTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMocHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT0gJ2Z1bmN0aW9uJykgewoJCQlwcm9wLmJ1aWxkKG9iamVjdCwga2V5KTsKCQl9IGVsc2UgewoJCQlvYmplY3Rba2V5XSA9IHByb3A7CgkJfQoJfQoKCXJldHVybiBvYmplY3Q7Cn0KCmZ1bmN0aW9uIGNsYXNzQnVpbGRlcihtZW1iZXJzKSB7Cgljb25zdCBvcHRpb25zID0geyBtZW1iZXJzIH07CgoJcmV0dXJuIHsKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgTW9jayA9IGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IE1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUNsYXNzKHBhcmVudCA/IHBhcmVudFtrZXldIDogTW9jaywgc3RhdGUsIG9wdGlvbnMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKSB7Cgljb25zdCBNb2NrID0gZnVuY3Rpb24oKSB7CgkJY29uc3QgaW5kZXggPSBzdGF0ZS5udW1JbnN0YW5jZXM7CgoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19tb2NrSW5kZXgnLCB7IHZhbHVlOiBpbmRleCB9KTsKCgkJaWYgKHR5cGVvZiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTsKCgkJc3RhdGUubnVtSW5zdGFuY2VzKys7Cgl9OwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvcHRpb25zLm1lbWJlcnMpKSB7CgkJaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykKCQkJY29udGludWU7CgoJCWNvbnN0IG1lbWJlciA9IG9wdGlvbnMubWVtYmVyc1trZXldOwoKCQlpZiAodHlwZW9mIG1lbWJlcj8uYnVpbGQgPT09ICdmdW5jdGlvbicgJiYgIW1lbWJlci5pc1Byb3BlcnR5KSB7CgkJCU1vY2sucHJvdG90eXBlW2tleV0gPSBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XS5hcHBseSh0aGlzLCBhcmdzKTsKCQkJfTsKCQl9IGVsc2UgewoJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9jay5wcm90b3R5cGUsIGtleSwgewoJCQkJZ2V0OiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XTsKCQkJCX0sCgkJCQlzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CgkJCQkJc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XSA9IHZhbHVlOwoJCQkJfSwKCQkJCWVudW1lcmFibGU6IHRydWUsCgkJCQljb25maWd1cmFibGU6IHRydWUKCQkJfSk7CgkJfQoJfQoKCXJldHVybiBNb2NrOwp9CgpmdW5jdGlvbiB3aXJlQ2xhc3MoTW9jaywgc3RhdGUsIG9wdGlvbnMpIHsKCU1vY2suaW5zdCA9IChpbmRleCA9IDApID0+IHsKCQlpZiAoIXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0pCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0gPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5tZW1iZXJzKTsKCgkJcmV0dXJuIHN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF07Cgl9OwoJTW9jay5udW1JbnN0cyA9ICgpID0+IHsKCQlyZXR1cm4gc3RhdGUubnVtSW5zdGFuY2VzOwoJfTsKCU1vY2sucmVzZXQgPSAoKSA9PiB7CgkJc3RhdGUuZGVzY3JpcHRpb25zID0gW107CgkJc3RhdGUubnVtSW5zdGFuY2VzID0gMDsKCQlzdGF0ZS5kYXRhID0ge307Cgl9OwoJTW9jay5yZXNldCgpOwoKCXJldHVybiBNb2NrOwp9CgpmdW5jdGlvbiBwcm9wZXJ0eUJ1aWxkZXIoKSB7CglyZXR1cm4gewoJCWlzUHJvcGVydHk6IHRydWUsCgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IHN0YXRlID0ge307CgoJCQlpZiAocGFyZW50KSB7CgkJCQlwYXJlbnRba2V5XSA9IHt9OwoJCQkJd2lyZVByb3BlcnR5KHBhcmVudFtrZXldLCBzdGF0ZSk7CgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsKCQkJCQlnZXQ6ICgpID0+IHsKCQkJCQkJcmV0dXJuIHN0YXRlLnZhbHVlOwoJCQkJCX0sCgkJCQkJc2V0OiAodmFsdWUpID0+IHsKCQkJCQkJc3RhdGUudmFsdWUgPSB2YWx1ZTsKCQkJCQl9CgkJCQl9KTsKCQkJfQoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVQcm9wZXJ0eShtb2NrLCBzdGF0ZSkgewoJbW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS52YWx1ZSA9IHVuZGVmaW5lZDsKCX07CgoJcmV0dXJuIG1vY2s7Cn0KCmZ1bmN0aW9uIGRlZXBDbG9uZSh0YXJnZXQpIHsKCWlmICh0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JykgewoJCWlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHsKCQkJcmV0dXJuIHRhcmdldC5tYXAoZGVlcENsb25lKTsKCQl9IGVsc2UgaWYgKHRhcmdldD8uY29uc3RydWN0b3IgPT09IE9iamVjdCkgewoJCQljb25zdCBjbG9uZSA9IHt9OwoKCQkJZm9yIChjb25zdCBrZXkgaW4gdGFyZ2V0KSB7CgkJCQljbG9uZVtrZXldID0gZGVlcENsb25lKHRhcmdldFtrZXldKTsKCQkJfQoKCQkJcmV0dXJuIGNsb25lOwoJCX0KCX0KCglyZXR1cm4gdGFyZ2V0Owp9CgpmdW5jdGlvbiBjcmVhdGVTcHkob2JqZWN0LCBrZXksIHJlcGxhY2VtZW50KSB7CglpZiAoIXJlcGxhY2VtZW50KSB7CgkJcmVwbGFjZW1lbnQgPSBmdW5jdGlvbkJ1aWxkZXIoKGN0eCkgPT4gewoJCQlpZiAoY3R4LnJldCAhPT0gdW5kZWZpbmVkKQoJCQkJcmV0dXJuIGN0eC5yZXQ7CgoJCQlyZXR1cm4gY3R4Lm9yaWdpbmFsLmFwcGx5KGN0eC5zZWxmLCBjdHgucmF3QXJncyk7CgkJfSk7Cgl9CgoJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3Rba2V5XTsKCWNvbnN0IHNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CglzcHlGbi5yZXN0b3JlID0gKCkgPT4gewoJCW9iamVjdFtrZXldID0gb3JpZ2luYWw7Cgl9OwoJb2JqZWN0W2tleV0gPSBzcHlGbjsKCglyZXR1cm4gc3B5Rm47Cn0KCm1vZHVsZS5leHBvcnRzID0gewoJc3B5OiBjcmVhdGVTcHksCgljcmVhdGU6IG1vY2tCdWlsZGVyLAoJZnVuY3Rpb246IGZ1bmN0aW9uQnVpbGRlciwKCW9iamVjdDogb2JqZWN0QnVpbGRlciwKCWNsYXNzOiBjbGFzc0J1aWxkZXIsCglwcm9wZXJ0eTogcHJvcGVydHlCdWlsZGVyLAp9OwoAAAAAAAAAAEUbAAAAAAAAAAAAAA",
|
|
938
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAALEZAAAAAAAAsRkAAAAAAAAAAAAAAADwvw"
|
|
939
|
+
],
|
|
940
|
+
[
|
|
941
|
+
31,
|
|
942
|
+
1,
|
|
943
|
+
"revert",
|
|
944
|
+
null,
|
|
945
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAABFGwAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlvcmlnaW5hbDogZnVuY3Rpb24oZm4pIHsKCQkJb3B0aW9ucy5vcmlnaW5hbCA9IGZuOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoJCQljb25zdCBtb2NrID0gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlRnVuY3Rpb24ocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrLCBzdGF0ZSk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZUZ1bmN0aW9uKG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJldCA9ICh2YWx1ZSwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRzW2NhbGxdID0gdmFsdWU7Cgl9OwoJbW9jay5vblJldCA9IChoYW5kbGVyLCBjYWxsID0gMCkgPT4gewoJCXN0YXRlLnJldEhhbmRsZXJzW2NhbGxdID0gaGFuZGxlcjsKCX07Cgltb2NrLmNhbGxzID0gKGNhbGwpID0+IHsKCQlyZXR1cm4gY2FsbCAhPT0gdW5kZWZpbmVkID8gc3RhdGUuY2FsbHNbY2FsbF0gOiBzdGF0ZS5jYWxsczsKCX07Cgltb2NrLmRhdGEgPSAoa2V5KSA9PiB7CgkJcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8gc3RhdGUuZGF0YVtrZXldIDogc3RhdGUuZGF0YTsKCX07Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnJldHMgPSBbXTsKCQlzdGF0ZS5yZXRIYW5kbGVycyA9IFtdOwoJCXN0YXRlLmNhbGxzID0gW107CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCW1vY2sucmVzZXQoKTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpIHsKCWlmIChvcHRpb25zLmFzeW5jKSB7CgkJcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9IGVsc2UgewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkJvZHkocGFyZW50LCBzdGF0ZSwgb3B0aW9ucywgcmF3QXJncykgewoJY29uc3QgYXJncyA9IGRlZXBDbG9uZShnZXRGdW5jdGlvbkFyZ3MocmF3QXJncywgb3B0aW9ucykpOwoJc3RhdGUuY2FsbHMucHVzaChhcmdzKTsKCWNvbnN0IGNhbGwgPSBzdGF0ZS5jYWxscy5sZW5ndGg7CgoJbGV0IHJldDsKCglpZiAoc3RhdGUucmV0c1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldHNbY2FsbF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0oYXJncyk7Cgl9IGVsc2UgaWYgKHN0YXRlLnJldHNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzWzBdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1swXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzWzBdKGFyZ3MpOwoJfQoKCWlmIChyZXQgaW5zdGFuY2VvZiBFcnJvcikKCQl0aHJvdyByZXQ7CgoJaWYgKG9wdGlvbnMuYm9keSkgewoJCXJldHVybiBvcHRpb25zLmJvZHkoewoJCQlzZWxmOiBwYXJlbnQsCgkJCXN0YXRlOiBzdGF0ZSwKCQkJY2FsbDogY2FsbCwKCQkJYXJnczogYXJncywKCQkJcmF3QXJnczogcmF3QXJncywKCQkJb3JpZ2luYWw6IG9wdGlvbnMub3JpZ2luYWwsCgkJCXJldDogcmV0CgkJfSk7Cgl9IGVsc2UgewoJCXJldHVybiByZXQ7Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQXJncyhjYWxsQXJncywgb3B0aW9ucykgewoJbGV0IGFyZ3MgPSBudWxsOwoKCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggPT0gMSkgewoJCWFyZ3MgPSBjYWxsQXJnc1tvcHRpb25zLnNlbGVjdFswXV07Cgl9IGVsc2UgaWYgKG9wdGlvbnMuYXJncy5sZW5ndGgpIHsKCQlhcmdzID0ge307CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcmdzLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggJiYgIW9wdGlvbnMuc2VsZWN0LmluY2x1ZGVzKGkpKQoJCQkJY29udGludWU7CgoJCQlsZXQgYXJnTmFtZSA9ICcnOwoJCQlsZXQgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkOwoKCQkJaWYgKHR5cGVvZiBvcHRpb25zLmFyZ3NbaV0gPT0gJ3N0cmluZycpIHsKCQkJCWFyZ05hbWUgPSBvcHRpb25zLmFyZ3NbaV07CgkJCX0gZWxzZSB7CgkJCQlbYXJnTmFtZSwgZGVmYXVsdFZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXJnc1tpXSlbMF07CgkJCX0KCgkJCWFyZ3NbYXJnTmFtZV0gPSBjYWxsQXJnc1tpXSAhPT0gdW5kZWZpbmVkID8gY2FsbEFyZ3NbaV0gOiBkZWZhdWx0VmFsdWU7CgkJfQoJfSBlbHNlIHsKCQkvLyBOT1RFOiBQcmV2aW91c2x5IHJldHVybmVkIG51bGwuIE5vdyByZXR1cm5zIGFycmF5IChtYXkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLgoJCWFyZ3MgPSBBcnJheS5mcm9tKGNhbGxBcmdzKTsKCX0KCglyZXR1cm4gYXJnczsKfQoKZnVuY3Rpb24gb2JqZWN0QnVpbGRlcihwcm9wcykgewoJY29uc3Qgb3B0aW9ucyA9IHsgcHJvcHMgfTsKCglyZXR1cm4gewoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgcHJvcHMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVPYmplY3QobW9jaywgaW5pdGlhbFByb3BzKSB7Cgljb25zdCBpbml0aWFsTW9ja3MgPSBuZXcgU2V0KCk7Cgljb25zdCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcCgpOwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbml0aWFsUHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IGluaXRpYWxQcm9wc1trZXldOwoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaW5pdGlhbE1vY2tzLmFkZChrZXkpOwoJCX0gZWxzZSB7CgkJCWluaXRpYWxWYWx1ZXMuc2V0KGtleSwgcHJvcCk7CgkJfQoJfQoKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG1vY2spKSB7CgkJCWlmIChrZXkgPT09ICdyZXNldCcpIGNvbnRpbnVlOwoKCQkJaWYgKGluaXRpYWxNb2Nrcy5oYXMoa2V5KSkgewoJCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0/LnJlc2V0ID09PSAnZnVuY3Rpb24nKQoJCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCQl9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZXMuaGFzKGtleSkpIHsKCQkJCW1vY2tba2V5XSA9IGluaXRpYWxWYWx1ZXMuZ2V0KGtleSk7CgkJCX0gZWxzZSB7CgkJCQlkZWxldGUgbW9ja1trZXldOwoJCQl9CgkJfQoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0V2l0aFByb3BzKHByb3BzKSB7Cgljb25zdCBvYmplY3QgPSB7fTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMocHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT0gJ2Z1bmN0aW9uJykgewoJCQlwcm9wLmJ1aWxkKG9iamVjdCwga2V5KTsKCQl9IGVsc2UgewoJCQlvYmplY3Rba2V5XSA9IHByb3A7CgkJfQoJfQoKCXJldHVybiBvYmplY3Q7Cn0KCmZ1bmN0aW9uIGNsYXNzQnVpbGRlcihtZW1iZXJzKSB7Cgljb25zdCBvcHRpb25zID0geyBtZW1iZXJzIH07CgoJcmV0dXJuIHsKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgTW9jayA9IGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IE1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUNsYXNzKHBhcmVudCA/IHBhcmVudFtrZXldIDogTW9jaywgc3RhdGUsIG9wdGlvbnMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKSB7Cgljb25zdCBNb2NrID0gZnVuY3Rpb24oKSB7CgkJY29uc3QgaW5kZXggPSBzdGF0ZS5udW1JbnN0YW5jZXM7CgoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19tb2NrSW5kZXgnLCB7IHZhbHVlOiBpbmRleCB9KTsKCgkJaWYgKHR5cGVvZiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTsKCgkJc3RhdGUubnVtSW5zdGFuY2VzKys7Cgl9OwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvcHRpb25zLm1lbWJlcnMpKSB7CgkJaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykKCQkJY29udGludWU7CgoJCWNvbnN0IG1lbWJlciA9IG9wdGlvbnMubWVtYmVyc1trZXldOwoKCQlpZiAodHlwZW9mIG1lbWJlcj8uYnVpbGQgPT09ICdmdW5jdGlvbicgJiYgIW1lbWJlci5pc1Byb3BlcnR5KSB7CgkJCU1vY2sucHJvdG90eXBlW2tleV0gPSBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XS5hcHBseSh0aGlzLCBhcmdzKTsKCQkJfTsKCQl9IGVsc2UgewoJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9jay5wcm90b3R5cGUsIGtleSwgewoJCQkJZ2V0OiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XTsKCQkJCX0sCgkJCQlzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CgkJCQkJc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XSA9IHZhbHVlOwoJCQkJfSwKCQkJCWVudW1lcmFibGU6IHRydWUsCgkJCQljb25maWd1cmFibGU6IHRydWUKCQkJfSk7CgkJfQoJfQoKCXJldHVybiBNb2NrOwp9CgpmdW5jdGlvbiB3aXJlQ2xhc3MoTW9jaywgc3RhdGUsIG9wdGlvbnMpIHsKCU1vY2suaW5zdCA9IChpbmRleCA9IDApID0+IHsKCQlpZiAoIXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0pCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0gPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5tZW1iZXJzKTsKCgkJcmV0dXJuIHN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF07Cgl9OwoJTW9jay5udW1JbnN0cyA9ICgpID0+IHsKCQlyZXR1cm4gc3RhdGUubnVtSW5zdGFuY2VzOwoJfTsKCU1vY2sucmVzZXQgPSAoKSA9PiB7CgkJc3RhdGUuZGVzY3JpcHRpb25zID0gW107CgkJc3RhdGUubnVtSW5zdGFuY2VzID0gMDsKCQlzdGF0ZS5kYXRhID0ge307Cgl9OwoJTW9jay5yZXNldCgpOwoKCXJldHVybiBNb2NrOwp9CgpmdW5jdGlvbiBwcm9wZXJ0eUJ1aWxkZXIoKSB7CglyZXR1cm4gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBkZWVwQ2xvbmUodGFyZ2V0KSB7CglpZiAodHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHsKCQlpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7CgkJCXJldHVybiB0YXJnZXQubWFwKGRlZXBDbG9uZSk7CgkJfSBlbHNlIGlmICh0YXJnZXQ/LmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHsKCQkJY29uc3QgY2xvbmUgPSB7fTsKCgkJCWZvciAoY29uc3Qga2V5IGluIHRhcmdldCkgewoJCQkJY2xvbmVba2V5XSA9IGRlZXBDbG9uZSh0YXJnZXRba2V5XSk7CgkJCX0KCgkJCXJldHVybiBjbG9uZTsKCQl9Cgl9CgoJcmV0dXJuIHRhcmdldDsKfQoKZnVuY3Rpb24gY3JlYXRlU3B5KG9iamVjdCwga2V5LCByZXBsYWNlbWVudCkgewoJaWYgKCFyZXBsYWNlbWVudCkgewoJCXJlcGxhY2VtZW50ID0gZnVuY3Rpb25CdWlsZGVyKChjdHgpID0+IHsKCQkJaWYgKGN0eC5yZXQgIT09IHVuZGVmaW5lZCkKCQkJCXJldHVybiBjdHgucmV0OwoKCQkJcmV0dXJuIGN0eC5vcmlnaW5hbC5hcHBseShjdHguc2VsZiwgY3R4LnJhd0FyZ3MpOwoJCX0pOwoJfQoKCWNvbnN0IG9yaWdpbmFsID0gb2JqZWN0W2tleV07Cgljb25zdCBzcHlGbiA9IHJlcGxhY2VtZW50Lm9yaWdpbmFsKG9yaWdpbmFsKS5idWlsZCgpOwoJc3B5Rm4ucmVzdG9yZSA9ICgpID0+IHsKCQlvYmplY3Rba2V5XSA9IG9yaWdpbmFsOwoJfTsKCW9iamVjdFtrZXldID0gc3B5Rm47CgoJcmV0dXJuIHNweUZuOwp9Cgptb2R1bGUuZXhwb3J0cyA9IHsKCXNweTogY3JlYXRlU3B5LAoJY3JlYXRlOiBtb2NrQnVpbGRlciwKCWZ1bmN0aW9uOiBmdW5jdGlvbkJ1aWxkZXIsCglvYmplY3Q6IG9iamVjdEJ1aWxkZXIsCgljbGFzczogY2xhc3NCdWlsZGVyLAoJcHJvcGVydHk6IHByb3BlcnR5QnVpbGRlciwKfTsKAAAAAAAAAAAvGwAAAAAAAAAAAAA",
|
|
946
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAD4UAAAAAAAATxQAAAAAAAAAAAAAAADwvw"
|
|
947
|
+
],
|
|
948
|
+
[
|
|
949
|
+
34,
|
|
950
|
+
1,
|
|
951
|
+
"revert",
|
|
952
|
+
null,
|
|
953
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAAAvGwAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlvcmlnaW5hbDogZnVuY3Rpb24oZm4pIHsKCQkJb3B0aW9ucy5vcmlnaW5hbCA9IGZuOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoJCQljb25zdCBtb2NrID0gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlRnVuY3Rpb24ocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrLCBzdGF0ZSk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZUZ1bmN0aW9uKG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJldCA9ICh2YWx1ZSwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRzW2NhbGxdID0gdmFsdWU7Cgl9OwoJbW9jay5vblJldCA9IChoYW5kbGVyLCBjYWxsID0gMCkgPT4gewoJCXN0YXRlLnJldEhhbmRsZXJzW2NhbGxdID0gaGFuZGxlcjsKCX07Cgltb2NrLmNhbGxzID0gKGNhbGwpID0+IHsKCQlyZXR1cm4gY2FsbCAhPT0gdW5kZWZpbmVkID8gc3RhdGUuY2FsbHNbY2FsbF0gOiBzdGF0ZS5jYWxsczsKCX07Cgltb2NrLmRhdGEgPSAoa2V5KSA9PiB7CgkJcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8gc3RhdGUuZGF0YVtrZXldIDogc3RhdGUuZGF0YTsKCX07Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnJldHMgPSBbXTsKCQlzdGF0ZS5yZXRIYW5kbGVycyA9IFtdOwoJCXN0YXRlLmNhbGxzID0gW107CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCW1vY2sucmVzZXQoKTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpIHsKCWlmIChvcHRpb25zLmFzeW5jKSB7CgkJcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9IGVsc2UgewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkJvZHkocGFyZW50LCBzdGF0ZSwgb3B0aW9ucywgcmF3QXJncykgewoJY29uc3QgYXJncyA9IGRlZXBDbG9uZShnZXRGdW5jdGlvbkFyZ3MocmF3QXJncywgb3B0aW9ucykpOwoJc3RhdGUuY2FsbHMucHVzaChhcmdzKTsKCWNvbnN0IGNhbGwgPSBzdGF0ZS5jYWxscy5sZW5ndGg7CgoJbGV0IHJldDsKCglpZiAoc3RhdGUucmV0c1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldHNbY2FsbF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0oYXJncyk7Cgl9IGVsc2UgaWYgKHN0YXRlLnJldHNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzWzBdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1swXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzWzBdKGFyZ3MpOwoJfQoKCWlmIChyZXQgaW5zdGFuY2VvZiBFcnJvcikKCQl0aHJvdyByZXQ7CgoJaWYgKG9wdGlvbnMuYm9keSkgewoJCXJldHVybiBvcHRpb25zLmJvZHkoewoJCQlzZWxmOiBwYXJlbnQsCgkJCXN0YXRlOiBzdGF0ZSwKCQkJY2FsbDogY2FsbCwKCQkJYXJnczogYXJncywKCQkJcmF3QXJnczogcmF3QXJncywKCQkJb3JpZ2luYWw6IG9wdGlvbnMub3JpZ2luYWwsCgkJCXJldDogcmV0CgkJfSk7Cgl9IGVsc2UgewoJCXJldHVybiByZXQ7Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQXJncyhjYWxsQXJncywgb3B0aW9ucykgewoJbGV0IGFyZ3MgPSBudWxsOwoKCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggPT0gMSkgewoJCWFyZ3MgPSBjYWxsQXJnc1tvcHRpb25zLnNlbGVjdFswXV07Cgl9IGVsc2UgaWYgKG9wdGlvbnMuYXJncy5sZW5ndGgpIHsKCQlhcmdzID0ge307CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcmdzLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggJiYgIW9wdGlvbnMuc2VsZWN0LmluY2x1ZGVzKGkpKQoJCQkJY29udGludWU7CgoJCQlsZXQgYXJnTmFtZSA9ICcnOwoJCQlsZXQgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkOwoKCQkJaWYgKHR5cGVvZiBvcHRpb25zLmFyZ3NbaV0gPT0gJ3N0cmluZycpIHsKCQkJCWFyZ05hbWUgPSBvcHRpb25zLmFyZ3NbaV07CgkJCX0gZWxzZSB7CgkJCQlbYXJnTmFtZSwgZGVmYXVsdFZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXJnc1tpXSlbMF07CgkJCX0KCgkJCWFyZ3NbYXJnTmFtZV0gPSBjYWxsQXJnc1tpXSAhPT0gdW5kZWZpbmVkID8gY2FsbEFyZ3NbaV0gOiBkZWZhdWx0VmFsdWU7CgkJfQoJfSBlbHNlIHsKCQkvLyBOT1RFOiBQcmV2aW91c2x5IHJldHVybmVkIG51bGwuIE5vdyByZXR1cm5zIGFycmF5IChtYXkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLgoJCWFyZ3MgPSBBcnJheS5mcm9tKGNhbGxBcmdzKTsKCX0KCglyZXR1cm4gYXJnczsKfQoKZnVuY3Rpb24gb2JqZWN0QnVpbGRlcihwcm9wcykgewoJY29uc3Qgb3B0aW9ucyA9IHsgcHJvcHMgfTsKCglyZXR1cm4gewoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgcHJvcHMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVPYmplY3QobW9jaywgaW5pdGlhbFByb3BzKSB7Cgljb25zdCBpbml0aWFsTW9ja3MgPSBuZXcgU2V0KCk7Cgljb25zdCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcCgpOwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbml0aWFsUHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IGluaXRpYWxQcm9wc1trZXldOwoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaW5pdGlhbE1vY2tzLmFkZChrZXkpOwoJCX0gZWxzZSB7CgkJCWluaXRpYWxWYWx1ZXMuc2V0KGtleSwgcHJvcCk7CgkJfQoJfQoKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG1vY2spKSB7CgkJCWlmIChrZXkgPT09ICdyZXNldCcpIGNvbnRpbnVlOwoKCQkJaWYgKGluaXRpYWxNb2Nrcy5oYXMoa2V5KSkgewoJCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0/LnJlc2V0ID09PSAnZnVuY3Rpb24nKQoJCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCQl9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZXMuaGFzKGtleSkpIHsKCQkJCW1vY2tba2V5XSA9IGluaXRpYWxWYWx1ZXMuZ2V0KGtleSk7CgkJCX0gZWxzZSB7CgkJCQlkZWxldGUgbW9ja1trZXldOwoJCQl9CgkJfQoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0V2l0aFByb3BzKHByb3BzKSB7Cgljb25zdCBvYmplY3QgPSB7fTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMocHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT0gJ2Z1bmN0aW9uJykgewoJCQlwcm9wLmJ1aWxkKG9iamVjdCwga2V5KTsKCQl9IGVsc2UgewoJCQlvYmplY3Rba2V5XSA9IHByb3A7CgkJfQoJfQoKCXJldHVybiBvYmplY3Q7Cn0KCmZ1bmN0aW9uIGNsYXNzQnVpbGRlcihtZW1iZXJzKSB7Cgljb25zdCBvcHRpb25zID0geyBtZW1iZXJzIH07CgoJcmV0dXJuIHsKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgTW9jayA9IGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IE1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUNsYXNzKHBhcmVudCA/IHBhcmVudFtrZXldIDogTW9jaywgc3RhdGUsIG9wdGlvbnMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKSB7Cgljb25zdCBNb2NrID0gZnVuY3Rpb24oKSB7CgkJY29uc3QgaW5kZXggPSBzdGF0ZS5udW1JbnN0YW5jZXM7CgoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19tb2NrSW5kZXgnLCB7IHZhbHVlOiBpbmRleCB9KTsKCgkJaWYgKHR5cGVvZiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTsKCgkJc3RhdGUubnVtSW5zdGFuY2VzKys7Cgl9OwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvcHRpb25zLm1lbWJlcnMpKSB7CgkJaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykKCQkJY29udGludWU7CgoJCWNvbnN0IG1lbWJlciA9IG9wdGlvbnMubWVtYmVyc1trZXldOwoKCQlpZiAodHlwZW9mIG1lbWJlcj8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJTW9jay5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHsKCQkJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldLmFwcGx5KHRoaXMsIGFyZ3MpOwoJCQl9OwoJCX0gZWxzZSB7CgkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShNb2NrLnByb3RvdHlwZSwga2V5LCB7CgkJCQlnZXQ6IGZ1bmN0aW9uKCkgewoJCQkJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldOwoJCQkJfSwKCQkJCXNldDogZnVuY3Rpb24odmFsdWUpIHsKCQkJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fbW9ja0luZGV4XVtrZXldID0gdmFsdWU7CgkJCQl9LAoJCQkJZW51bWVyYWJsZTogdHJ1ZSwKCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZQoJCQl9KTsKCQl9Cgl9CgoJcmV0dXJuIE1vY2s7Cn0KCmZ1bmN0aW9uIHdpcmVDbGFzcyhNb2NrLCBzdGF0ZSwgb3B0aW9ucykgewoJTW9jay5pbnN0ID0gKGluZGV4ID0gMCkgPT4gewoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XTsKCX07CglNb2NrLm51bUluc3RzID0gKCkgPT4gewoJCXJldHVybiBzdGF0ZS5udW1JbnN0YW5jZXM7Cgl9OwoJTW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS5kZXNjcmlwdGlvbnMgPSBbXTsKCQlzdGF0ZS5udW1JbnN0YW5jZXMgPSAwOwoJCXN0YXRlLmRhdGEgPSB7fTsKCX07CglNb2NrLnJlc2V0KCk7CgoJcmV0dXJuIE1vY2s7Cn0KCmZ1bmN0aW9uIHByb3BlcnR5QnVpbGRlcigpIHsKCXJldHVybiB1bmRlZmluZWQ7Cn0KCmZ1bmN0aW9uIGRlZXBDbG9uZSh0YXJnZXQpIHsKCWlmICh0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JykgewoJCWlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHsKCQkJcmV0dXJuIHRhcmdldC5tYXAoZGVlcENsb25lKTsKCQl9IGVsc2UgaWYgKHRhcmdldD8uY29uc3RydWN0b3IgPT09IE9iamVjdCkgewoJCQljb25zdCBjbG9uZSA9IHt9OwoKCQkJZm9yIChjb25zdCBrZXkgaW4gdGFyZ2V0KSB7CgkJCQljbG9uZVtrZXldID0gZGVlcENsb25lKHRhcmdldFtrZXldKTsKCQkJfQoKCQkJcmV0dXJuIGNsb25lOwoJCX0KCX0KCglyZXR1cm4gdGFyZ2V0Owp9CgpmdW5jdGlvbiBjcmVhdGVTcHkob2JqZWN0LCBrZXksIHJlcGxhY2VtZW50KSB7CglpZiAoIXJlcGxhY2VtZW50KSB7CgkJcmVwbGFjZW1lbnQgPSBmdW5jdGlvbkJ1aWxkZXIoKGN0eCkgPT4gewoJCQlpZiAoY3R4LnJldCAhPT0gdW5kZWZpbmVkKQoJCQkJcmV0dXJuIGN0eC5yZXQ7CgoJCQlyZXR1cm4gY3R4Lm9yaWdpbmFsLmFwcGx5KGN0eC5zZWxmLCBjdHgucmF3QXJncyk7CgkJfSk7Cgl9CgoJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3Rba2V5XTsKCWNvbnN0IHNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CglzcHlGbi5yZXN0b3JlID0gKCkgPT4gewoJCW9iamVjdFtrZXldID0gb3JpZ2luYWw7Cgl9OwoJb2JqZWN0W2tleV0gPSBzcHlGbjsKCglyZXR1cm4gc3B5Rm47Cn0KCm1vZHVsZS5leHBvcnRzID0gewoJc3B5OiBjcmVhdGVTcHksCgljcmVhdGU6IG1vY2tCdWlsZGVyLAoJZnVuY3Rpb246IGZ1bmN0aW9uQnVpbGRlciwKCW9iamVjdDogb2JqZWN0QnVpbGRlciwKCWNsYXNzOiBjbGFzc0J1aWxkZXIsCglwcm9wZXJ0eTogcHJvcGVydHlCdWlsZGVyLAp9OwoAAAAAAAAAAFUbAAAAAAAAAAAAAA",
|
|
954
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAIATAAAAAAAAgBMAAAAAAAAAAAAAAADwvw"
|
|
955
|
+
],
|
|
956
|
+
[
|
|
957
|
+
48,
|
|
958
|
+
1,
|
|
959
|
+
"revert",
|
|
960
|
+
null,
|
|
961
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAABVGwAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJYXN5bmM6IGZ1bmN0aW9uKCkgewoJCQlvcHRpb25zLmFzeW5jID0gdHJ1ZTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlhcmdzOiBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCW9wdGlvbnMuYXJncyA9IGFyZ3M7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnU2VsZWN0OiBmdW5jdGlvbiguLi5pbmRleGVzKSB7CgkJCW9wdGlvbnMuc2VsZWN0ID0gaW5kZXhlczsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlvcmlnaW5hbDogZnVuY3Rpb24oZm4pIHsKCQkJb3B0aW9ucy5vcmlnaW5hbCA9IGZuOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBzdGF0ZSA9IHt9OwoJCQljb25zdCBtb2NrID0gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlRnVuY3Rpb24ocGFyZW50ID8gcGFyZW50W2tleV0gOiBtb2NrLCBzdGF0ZSk7CgkJfQoJfTsKfQoKZnVuY3Rpb24gd2lyZUZ1bmN0aW9uKG1vY2ssIHN0YXRlKSB7Cgltb2NrLnJldCA9ICh2YWx1ZSwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRzW2NhbGxdID0gdmFsdWU7Cgl9OwoJbW9jay5vblJldCA9IChoYW5kbGVyLCBjYWxsID0gMCkgPT4gewoJCXN0YXRlLnJldEhhbmRsZXJzW2NhbGxdID0gaGFuZGxlcjsKCX07Cgltb2NrLmNhbGxzID0gKGNhbGwpID0+IHsKCQlyZXR1cm4gY2FsbCAhPT0gdW5kZWZpbmVkID8gc3RhdGUuY2FsbHNbY2FsbF0gOiBzdGF0ZS5jYWxsczsKCX07Cgltb2NrLmRhdGEgPSAoa2V5KSA9PiB7CgkJcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8gc3RhdGUuZGF0YVtrZXldIDogc3RhdGUuZGF0YTsKCX07Cgltb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLnJldHMgPSBbXTsKCQlzdGF0ZS5yZXRIYW5kbGVycyA9IFtdOwoJCXN0YXRlLmNhbGxzID0gW107CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCW1vY2sucmVzZXQoKTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb24oc3RhdGUsIG9wdGlvbnMpIHsKCWlmIChvcHRpb25zLmFzeW5jKSB7CgkJcmV0dXJuIGFzeW5jIGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gZ2V0RnVuY3Rpb25Cb2R5KHRoaXMsIHN0YXRlLCBvcHRpb25zLCBBcnJheS5mcm9tKGFyZ3VtZW50cykpOwoJCX07Cgl9IGVsc2UgewoJCXJldHVybiBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkJvZHkocGFyZW50LCBzdGF0ZSwgb3B0aW9ucywgcmF3QXJncykgewoJY29uc3QgYXJncyA9IGRlZXBDbG9uZShnZXRGdW5jdGlvbkFyZ3MocmF3QXJncywgb3B0aW9ucykpOwoJc3RhdGUuY2FsbHMucHVzaChhcmdzKTsKCWNvbnN0IGNhbGwgPSBzdGF0ZS5jYWxscy5sZW5ndGg7CgoJbGV0IHJldDsKCglpZiAoc3RhdGUucmV0c1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldHNbY2FsbF07Cgl9IGVsc2UgaWYgKHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKSB7CgkJcmV0ID0gc3RhdGUucmV0SGFuZGxlcnNbY2FsbF0oYXJncyk7Cgl9IGVsc2UgaWYgKHN0YXRlLnJldHNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzWzBdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1swXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzWzBdKGFyZ3MpOwoJfQoKCWlmIChyZXQgaW5zdGFuY2VvZiBFcnJvcikKCQl0aHJvdyByZXQ7CgoJaWYgKG9wdGlvbnMuYm9keSkgewoJCXJldHVybiBvcHRpb25zLmJvZHkoewoJCQlzZWxmOiBwYXJlbnQsCgkJCXN0YXRlOiBzdGF0ZSwKCQkJY2FsbDogY2FsbCwKCQkJYXJnczogYXJncywKCQkJcmF3QXJnczogcmF3QXJncywKCQkJb3JpZ2luYWw6IG9wdGlvbnMub3JpZ2luYWwsCgkJCXJldDogcmV0CgkJfSk7Cgl9IGVsc2UgewoJCXJldHVybiByZXQ7Cgl9Cn0KCmZ1bmN0aW9uIGdldEZ1bmN0aW9uQXJncyhjYWxsQXJncywgb3B0aW9ucykgewoJbGV0IGFyZ3MgPSBudWxsOwoKCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggPT0gMSkgewoJCWFyZ3MgPSBjYWxsQXJnc1tvcHRpb25zLnNlbGVjdFswXV07Cgl9IGVsc2UgaWYgKG9wdGlvbnMuYXJncy5sZW5ndGgpIHsKCQlhcmdzID0ge307CgoJCWZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5hcmdzLmxlbmd0aDsgaSsrKSB7CgkJCWlmIChvcHRpb25zLnNlbGVjdC5sZW5ndGggJiYgIW9wdGlvbnMuc2VsZWN0LmluY2x1ZGVzKGkpKQoJCQkJY29udGludWU7CgoJCQlsZXQgYXJnTmFtZSA9ICcnOwoJCQlsZXQgZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkOwoKCQkJaWYgKHR5cGVvZiBvcHRpb25zLmFyZ3NbaV0gPT0gJ3N0cmluZycpIHsKCQkJCWFyZ05hbWUgPSBvcHRpb25zLmFyZ3NbaV07CgkJCX0gZWxzZSB7CgkJCQlbYXJnTmFtZSwgZGVmYXVsdFZhbHVlXSA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMuYXJnc1tpXSlbMF07CgkJCX0KCgkJCWFyZ3NbYXJnTmFtZV0gPSBjYWxsQXJnc1tpXSAhPT0gdW5kZWZpbmVkID8gY2FsbEFyZ3NbaV0gOiBkZWZhdWx0VmFsdWU7CgkJfQoJfSBlbHNlIHsKCQkvLyBOT1RFOiBQcmV2aW91c2x5IHJldHVybmVkIG51bGwuIE5vdyByZXR1cm5zIGFycmF5IChtYXkgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLgoJCWFyZ3MgPSBBcnJheS5mcm9tKGNhbGxBcmdzKTsKCX0KCglyZXR1cm4gYXJnczsKfQoKZnVuY3Rpb24gb2JqZWN0QnVpbGRlcihwcm9wcykgewoJY29uc3Qgb3B0aW9ucyA9IHsgcHJvcHMgfTsKCglyZXR1cm4gewoJCWlzT2JqZWN0OiB0cnVlLAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgcHJvcHMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVPYmplY3QobW9jaywgaW5pdGlhbFByb3BzKSB7Cgljb25zdCBpbml0aWFsTW9ja3MgPSBuZXcgU2V0KCk7Cgljb25zdCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcCgpOwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbml0aWFsUHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IGluaXRpYWxQcm9wc1trZXldOwoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaW5pdGlhbE1vY2tzLmFkZChrZXkpOwoJCX0gZWxzZSB7CgkJCWluaXRpYWxWYWx1ZXMuc2V0KGtleSwgcHJvcCk7CgkJfQoJfQoKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG1vY2spKSB7CgkJCWlmIChrZXkgPT09ICdyZXNldCcpIGNvbnRpbnVlOwoKCQkJaWYgKGluaXRpYWxNb2Nrcy5oYXMoa2V5KSkgewoJCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0/LnJlc2V0ID09PSAnZnVuY3Rpb24nKQoJCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCQl9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZXMuaGFzKGtleSkpIHsKCQkJCW1vY2tba2V5XSA9IGluaXRpYWxWYWx1ZXMuZ2V0KGtleSk7CgkJCX0gZWxzZSB7CgkJCQlkZWxldGUgbW9ja1trZXldOwoJCQl9CgkJfQoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0V2l0aFByb3BzKHByb3BzKSB7Cgljb25zdCBvYmplY3QgPSB7fTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMocHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT0gJ2Z1bmN0aW9uJykgewoJCQlwcm9wLmJ1aWxkKG9iamVjdCwga2V5KTsKCQl9IGVsc2UgewoJCQlvYmplY3Rba2V5XSA9IHByb3A7CgkJfQoJfQoKCXJldHVybiBvYmplY3Q7Cn0KCmZ1bmN0aW9uIGNsYXNzQnVpbGRlcihtZW1iZXJzKSB7Cgljb25zdCBvcHRpb25zID0geyBtZW1iZXJzIH07CgoJcmV0dXJuIHsKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgTW9jayA9IGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IE1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUNsYXNzKHBhcmVudCA/IHBhcmVudFtrZXldIDogTW9jaywgc3RhdGUsIG9wdGlvbnMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIGNyZWF0ZUNsYXNzKHN0YXRlLCBvcHRpb25zKSB7Cgljb25zdCBNb2NrID0gZnVuY3Rpb24oKSB7CgkJY29uc3QgaW5kZXggPSBzdGF0ZS5udW1JbnN0YW5jZXM7CgoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19tb2NrSW5kZXgnLCB7IHZhbHVlOiBpbmRleCB9KTsKCgkJaWYgKHR5cGVvZiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTsKCgkJc3RhdGUubnVtSW5zdGFuY2VzKys7Cgl9OwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvcHRpb25zLm1lbWJlcnMpKSB7CgkJaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykKCQkJY29udGludWU7CgoJCWNvbnN0IG1lbWJlciA9IG9wdGlvbnMubWVtYmVyc1trZXldOwoKCQlpZiAodHlwZW9mIG1lbWJlcj8uYnVpbGQgPT09ICdmdW5jdGlvbicgJiYgIW1lbWJlci5pc09iamVjdCkgewoJCQlNb2NrLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24oLi4uYXJncykgewoJCQkJcmV0dXJuIHN0YXRlLmRlc2NyaXB0aW9uc1t0aGlzLl9tb2NrSW5kZXhdW2tleV0uYXBwbHkodGhpcywgYXJncyk7CgkJCX07CgkJfSBlbHNlIHsKCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vY2sucHJvdG90eXBlLCBrZXksIHsKCQkJCWdldDogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuIHN0YXRlLmRlc2NyaXB0aW9uc1t0aGlzLl9tb2NrSW5kZXhdW2tleV07CgkJCQl9LAoJCQkJc2V0OiBmdW5jdGlvbih2YWx1ZSkgewoJCQkJCXN0YXRlLmRlc2NyaXB0aW9uc1t0aGlzLl9tb2NrSW5kZXhdW2tleV0gPSB2YWx1ZTsKCQkJCX0sCgkJCQllbnVtZXJhYmxlOiB0cnVlLAoJCQkJY29uZmlndXJhYmxlOiB0cnVlCgkJCX0pOwoJCX0KCX0KCglyZXR1cm4gTW9jazsKfQoKZnVuY3Rpb24gd2lyZUNsYXNzKE1vY2ssIHN0YXRlLCBvcHRpb25zKSB7CglNb2NrLmluc3QgPSAoaW5kZXggPSAwKSA9PiB7CgkJaWYgKCFzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMubWVtYmVycyk7CgoJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdOwoJfTsKCU1vY2subnVtSW5zdHMgPSAoKSA9PiB7CgkJcmV0dXJuIHN0YXRlLm51bUluc3RhbmNlczsKCX07CglNb2NrLnJlc2V0ID0gKCkgPT4gewoJCXN0YXRlLmRlc2NyaXB0aW9ucyA9IFtdOwoJCXN0YXRlLm51bUluc3RhbmNlcyA9IDA7CgkJc3RhdGUuZGF0YSA9IHt9OwoJfTsKCU1vY2sucmVzZXQoKTsKCglyZXR1cm4gTW9jazsKfQoKZnVuY3Rpb24gcHJvcGVydHlCdWlsZGVyKCkgewoJcmV0dXJuIHVuZGVmaW5lZDsKfQoKZnVuY3Rpb24gZGVlcENsb25lKHRhcmdldCkgewoJaWYgKHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7CgkJaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkgewoJCQlyZXR1cm4gdGFyZ2V0Lm1hcChkZWVwQ2xvbmUpOwoJCX0gZWxzZSBpZiAodGFyZ2V0Py5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7CgkJCWNvbnN0IGNsb25lID0ge307CgoJCQlmb3IgKGNvbnN0IGtleSBpbiB0YXJnZXQpIHsKCQkJCWNsb25lW2tleV0gPSBkZWVwQ2xvbmUodGFyZ2V0W2tleV0pOwoJCQl9CgoJCQlyZXR1cm4gY2xvbmU7CgkJfQoJfQoKCXJldHVybiB0YXJnZXQ7Cn0KCmZ1bmN0aW9uIGNyZWF0ZVNweShvYmplY3QsIGtleSwgcmVwbGFjZW1lbnQpIHsKCWlmICghcmVwbGFjZW1lbnQpIHsKCQlyZXBsYWNlbWVudCA9IGZ1bmN0aW9uQnVpbGRlcigoY3R4KSA9PiB7CgkJCWlmIChjdHgucmV0ICE9PSB1bmRlZmluZWQpCgkJCQlyZXR1cm4gY3R4LnJldDsKCgkJCXJldHVybiBjdHgub3JpZ2luYWwuYXBwbHkoY3R4LnNlbGYsIGN0eC5yYXdBcmdzKTsKCQl9KTsKCX0KCgljb25zdCBvcmlnaW5hbCA9IG9iamVjdFtrZXldOwoJY29uc3Qgc3B5Rm4gPSByZXBsYWNlbWVudC5vcmlnaW5hbChvcmlnaW5hbCkuYnVpbGQoKTsKCXNweUZuLnJlc3RvcmUgPSAoKSA9PiB7CgkJb2JqZWN0W2tleV0gPSBvcmlnaW5hbDsKCX07CglvYmplY3Rba2V5XSA9IHNweUZuOwoKCXJldHVybiBzcHlGbjsKfQoKbW9kdWxlLmV4cG9ydHMgPSB7CglzcHk6IGNyZWF0ZVNweSwKCWNyZWF0ZTogbW9ja0J1aWxkZXIsCglmdW5jdGlvbjogZnVuY3Rpb25CdWlsZGVyLAoJb2JqZWN0OiBvYmplY3RCdWlsZGVyLAoJY2xhc3M6IGNsYXNzQnVpbGRlciwKCXByb3BlcnR5OiBwcm9wZXJ0eUJ1aWxkZXIsCn07CgAAAAAAAAAAaRsAAAAAAAAAAAAA",
|
|
962
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAACQUAAAAAAAAYhQAAAAAAAAAAAAAAADwvw"
|
|
963
|
+
],
|
|
964
|
+
[
|
|
965
|
+
51,
|
|
966
|
+
1,
|
|
967
|
+
"revert",
|
|
968
|
+
null,
|
|
969
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAABpGwAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJX19tb2NreUZ1bmN0aW9uOiB0cnVlLAoJCWFzeW5jOiBmdW5jdGlvbigpIHsKCQkJb3B0aW9ucy5hc3luYyA9IHRydWU7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnczogZnVuY3Rpb24oLi4uYXJncykgewoJCQlvcHRpb25zLmFyZ3MgPSBhcmdzOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWFyZ1NlbGVjdDogZnVuY3Rpb24oLi4uaW5kZXhlcykgewoJCQlvcHRpb25zLnNlbGVjdCA9IGluZGV4ZXM7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJb3JpZ2luYWw6IGZ1bmN0aW9uKGZuKSB7CgkJCW9wdGlvbnMub3JpZ2luYWwgPSBmbjsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgbW9jayA9IGNyZWF0ZUZ1bmN0aW9uKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IG1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUZ1bmN0aW9uKHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgc3RhdGUpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVGdW5jdGlvbihtb2NrLCBzdGF0ZSkgewoJbW9jay5yZXQgPSAodmFsdWUsIGNhbGwgPSAwKSA9PiB7CgkJc3RhdGUucmV0c1tjYWxsXSA9IHZhbHVlOwoJfTsKCW1vY2sub25SZXQgPSAoaGFuZGxlciwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRIYW5kbGVyc1tjYWxsXSA9IGhhbmRsZXI7Cgl9OwoJbW9jay5jYWxscyA9IChjYWxsKSA9PiB7CgkJcmV0dXJuIGNhbGwgIT09IHVuZGVmaW5lZCA/IHN0YXRlLmNhbGxzW2NhbGxdIDogc3RhdGUuY2FsbHM7Cgl9OwoJbW9jay5kYXRhID0gKGtleSkgPT4gewoJCXJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHN0YXRlLmRhdGFba2V5XSA6IHN0YXRlLmRhdGE7Cgl9OwoJbW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS5yZXRzID0gW107CgkJc3RhdGUucmV0SGFuZGxlcnMgPSBbXTsKCQlzdGF0ZS5jYWxscyA9IFtdOwoJCXN0YXRlLmRhdGEgPSB7fTsKCX07Cgltb2NrLnJlc2V0KCk7CgoJcmV0dXJuIG1vY2s7Cn0KCmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uKHN0YXRlLCBvcHRpb25zKSB7CglpZiAob3B0aW9ucy5hc3luYykgewoJCXJldHVybiBhc3luYyBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfSBlbHNlIHsKCQlyZXR1cm4gZnVuY3Rpb24oKSB7CgkJCXJldHVybiBnZXRGdW5jdGlvbkJvZHkodGhpcywgc3RhdGUsIG9wdGlvbnMsIEFycmF5LmZyb20oYXJndW1lbnRzKSk7CgkJfTsKCX0KfQoKZnVuY3Rpb24gZ2V0RnVuY3Rpb25Cb2R5KHBhcmVudCwgc3RhdGUsIG9wdGlvbnMsIHJhd0FyZ3MpIHsKCWNvbnN0IGFyZ3MgPSBkZWVwQ2xvbmUoZ2V0RnVuY3Rpb25BcmdzKHJhd0FyZ3MsIG9wdGlvbnMpKTsKCXN0YXRlLmNhbGxzLnB1c2goYXJncyk7Cgljb25zdCBjYWxsID0gc3RhdGUuY2FsbHMubGVuZ3RoOwoKCWxldCByZXQ7CgoJaWYgKHN0YXRlLnJldHNbY2FsbF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzW2NhbGxdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKGFyZ3MpOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRzWzBdKSB7CgkJcmV0ID0gc3RhdGUucmV0c1swXTsKCX0gZWxzZSBpZiAoc3RhdGUucmV0SGFuZGxlcnNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRIYW5kbGVyc1swXShhcmdzKTsKCX0KCglpZiAocmV0IGluc3RhbmNlb2YgRXJyb3IpCgkJdGhyb3cgcmV0OwoKCWlmIChvcHRpb25zLmJvZHkpIHsKCQlyZXR1cm4gb3B0aW9ucy5ib2R5KHsKCQkJc2VsZjogcGFyZW50LAoJCQlzdGF0ZTogc3RhdGUsCgkJCWNhbGw6IGNhbGwsCgkJCWFyZ3M6IGFyZ3MsCgkJCXJhd0FyZ3M6IHJhd0FyZ3MsCgkJCW9yaWdpbmFsOiBvcHRpb25zLm9yaWdpbmFsLAoJCQlyZXQ6IHJldAoJCX0pOwoJfSBlbHNlIHsKCQlyZXR1cm4gcmV0OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkFyZ3MoY2FsbEFyZ3MsIG9wdGlvbnMpIHsKCWxldCBhcmdzID0gbnVsbDsKCglpZiAob3B0aW9ucy5zZWxlY3QubGVuZ3RoID09IDEpIHsKCQlhcmdzID0gY2FsbEFyZ3Nbb3B0aW9ucy5zZWxlY3RbMF1dOwoJfSBlbHNlIGlmIChvcHRpb25zLmFyZ3MubGVuZ3RoKSB7CgkJYXJncyA9IHt9OwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuYXJncy5sZW5ndGg7IGkrKykgewoJCQlpZiAob3B0aW9ucy5zZWxlY3QubGVuZ3RoICYmICFvcHRpb25zLnNlbGVjdC5pbmNsdWRlcyhpKSkKCQkJCWNvbnRpbnVlOwoKCQkJbGV0IGFyZ05hbWUgPSAnJzsKCQkJbGV0IGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDsKCgkJCWlmICh0eXBlb2Ygb3B0aW9ucy5hcmdzW2ldID09ICdzdHJpbmcnKSB7CgkJCQlhcmdOYW1lID0gb3B0aW9ucy5hcmdzW2ldOwoJCQl9IGVsc2UgewoJCQkJW2FyZ05hbWUsIGRlZmF1bHRWYWx1ZV0gPSBPYmplY3QuZW50cmllcyhvcHRpb25zLmFyZ3NbaV0pWzBdOwoJCQl9CgoJCQlhcmdzW2FyZ05hbWVdID0gY2FsbEFyZ3NbaV0gIT09IHVuZGVmaW5lZCA/IGNhbGxBcmdzW2ldIDogZGVmYXVsdFZhbHVlOwoJCX0KCX0gZWxzZSB7CgkJLy8gTk9URTogUHJldmlvdXNseSByZXR1cm5lZCBudWxsLiBOb3cgcmV0dXJucyBhcnJheSAobWF5IGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KS4KCQlhcmdzID0gQXJyYXkuZnJvbShjYWxsQXJncyk7Cgl9CgoJcmV0dXJuIGFyZ3M7Cn0KCmZ1bmN0aW9uIG9iamVjdEJ1aWxkZXIocHJvcHMpIHsKCWNvbnN0IG9wdGlvbnMgPSB7IHByb3BzIH07CgoJcmV0dXJuIHsKCQlfX21vY2t5T2JqZWN0OiB0cnVlLAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgcHJvcHMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVPYmplY3QobW9jaywgaW5pdGlhbFByb3BzKSB7Cgljb25zdCBpbml0aWFsTW9ja3MgPSBuZXcgU2V0KCk7Cgljb25zdCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcCgpOwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbml0aWFsUHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IGluaXRpYWxQcm9wc1trZXldOwoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaW5pdGlhbE1vY2tzLmFkZChrZXkpOwoJCX0gZWxzZSB7CgkJCWluaXRpYWxWYWx1ZXMuc2V0KGtleSwgcHJvcCk7CgkJfQoJfQoKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG1vY2spKSB7CgkJCWlmIChrZXkgPT09ICdyZXNldCcpIGNvbnRpbnVlOwoKCQkJaWYgKGluaXRpYWxNb2Nrcy5oYXMoa2V5KSkgewoJCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0/LnJlc2V0ID09PSAnZnVuY3Rpb24nKQoJCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCQl9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZXMuaGFzKGtleSkpIHsKCQkJCW1vY2tba2V5XSA9IGluaXRpYWxWYWx1ZXMuZ2V0KGtleSk7CgkJCX0gZWxzZSB7CgkJCQlkZWxldGUgbW9ja1trZXldOwoJCQl9CgkJfQoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0V2l0aFByb3BzKHByb3BzKSB7Cgljb25zdCBvYmplY3QgPSB7fTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMocHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT0gJ2Z1bmN0aW9uJykgewoJCQlwcm9wLmJ1aWxkKG9iamVjdCwga2V5KTsKCQl9IGVsc2UgewoJCQlvYmplY3Rba2V5XSA9IHByb3A7CgkJfQoJfQoKCXJldHVybiBvYmplY3Q7Cn0KCmZ1bmN0aW9uIGNsYXNzQnVpbGRlcihtZW1iZXJzKSB7Cgljb25zdCBvcHRpb25zID0geyBtZW1iZXJzIH07CgoJcmV0dXJuIHsKCQlfX21vY2t5Q2xhc3M6IHRydWUsCgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IHN0YXRlID0ge307CgkJCWNvbnN0IE1vY2sgPSBjcmVhdGVDbGFzcyhzdGF0ZSwgb3B0aW9ucyk7CgoJCQlpZiAocGFyZW50KQoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7IHZhbHVlOiBNb2NrIH0pOwoKCQkJcmV0dXJuIHdpcmVDbGFzcyhwYXJlbnQgPyBwYXJlbnRba2V5XSA6IE1vY2ssIHN0YXRlLCBvcHRpb25zKTsKCQl9Cgl9Owp9CgpmdW5jdGlvbiBjcmVhdGVDbGFzcyhzdGF0ZSwgb3B0aW9ucykgewoJY29uc3QgTW9jayA9IGZ1bmN0aW9uKCkgewoJCWNvbnN0IGluZGV4ID0gc3RhdGUubnVtSW5zdGFuY2VzOwoKCQlpZiAoIXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0pCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0gPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5tZW1iZXJzKTsKCgkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfbW9ja0luZGV4JywgeyB2YWx1ZTogaW5kZXggfSk7CgoJCWlmICh0eXBlb2Ygc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XS5jb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIC4uLmFyZ3VtZW50cyk7CgoJCXN0YXRlLm51bUluc3RhbmNlcysrOwoJfTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMob3B0aW9ucy5tZW1iZXJzKSkgewoJCWlmIChrZXkgPT09ICdjb25zdHJ1Y3RvcicpCgkJCWNvbnRpbnVlOwoKCQljb25zdCBtZW1iZXIgPSBvcHRpb25zLm1lbWJlcnNba2V5XTsKCgkJaWYgKG1lbWJlcj8uX19tb2NreUZ1bmN0aW9uKSB7CgkJCU1vY2sucHJvdG90eXBlW2tleV0gPSBmdW5jdGlvbiguLi5hcmdzKSB7CgkJCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XS5hcHBseSh0aGlzLCBhcmdzKTsKCQkJfTsKCQl9IGVsc2UgewoJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkoTW9jay5wcm90b3R5cGUsIGtleSwgewoJCQkJZ2V0OiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XTsKCQkJCX0sCgkJCQlzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CgkJCQkJc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX21vY2tJbmRleF1ba2V5XSA9IHZhbHVlOwoJCQkJfSwKCQkJCWVudW1lcmFibGU6IHRydWUsCgkJCQljb25maWd1cmFibGU6IHRydWUKCQkJfSk7CgkJfQoJfQoKCXJldHVybiBNb2NrOwp9CgpmdW5jdGlvbiB3aXJlQ2xhc3MoTW9jaywgc3RhdGUsIG9wdGlvbnMpIHsKCU1vY2suaW5zdCA9IChpbmRleCA9IDApID0+IHsKCQlpZiAoIXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0pCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0gPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5tZW1iZXJzKTsKCgkJcmV0dXJuIHN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF07Cgl9OwoJTW9jay5udW1JbnN0cyA9ICgpID0+IHsKCQlyZXR1cm4gc3RhdGUubnVtSW5zdGFuY2VzOwoJfTsKCU1vY2sucmVzZXQgPSAoKSA9PiB7CgkJc3RhdGUuZGVzY3JpcHRpb25zID0gW107CgkJc3RhdGUubnVtSW5zdGFuY2VzID0gMDsKCQlzdGF0ZS5kYXRhID0ge307Cgl9OwoJTW9jay5yZXNldCgpOwoKCXJldHVybiBNb2NrOwp9CgpmdW5jdGlvbiBwcm9wZXJ0eUJ1aWxkZXIoKSB7CglyZXR1cm4gdW5kZWZpbmVkOwp9CgpmdW5jdGlvbiBkZWVwQ2xvbmUodGFyZ2V0KSB7CglpZiAodHlwZW9mIHRhcmdldCA9PT0gJ29iamVjdCcpIHsKCQlpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7CgkJCXJldHVybiB0YXJnZXQubWFwKGRlZXBDbG9uZSk7CgkJfSBlbHNlIGlmICh0YXJnZXQ/LmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHsKCQkJY29uc3QgY2xvbmUgPSB7fTsKCgkJCWZvciAoY29uc3Qga2V5IGluIHRhcmdldCkgewoJCQkJY2xvbmVba2V5XSA9IGRlZXBDbG9uZSh0YXJnZXRba2V5XSk7CgkJCX0KCgkJCXJldHVybiBjbG9uZTsKCQl9Cgl9CgoJcmV0dXJuIHRhcmdldDsKfQoKZnVuY3Rpb24gY3JlYXRlU3B5KG9iamVjdCwga2V5LCByZXBsYWNlbWVudCkgewoJaWYgKCFyZXBsYWNlbWVudCkgewoJCXJlcGxhY2VtZW50ID0gZnVuY3Rpb25CdWlsZGVyKChjdHgpID0+IHsKCQkJaWYgKGN0eC5yZXQgIT09IHVuZGVmaW5lZCkKCQkJCXJldHVybiBjdHgucmV0OwoKCQkJcmV0dXJuIGN0eC5vcmlnaW5hbC5hcHBseShjdHguc2VsZiwgY3R4LnJhd0FyZ3MpOwoJCX0pOwoJfQoKCWNvbnN0IG9yaWdpbmFsID0gb2JqZWN0W2tleV07Cgljb25zdCBzcHlGbiA9IHJlcGxhY2VtZW50Lm9yaWdpbmFsKG9yaWdpbmFsKS5idWlsZCgpOwoJc3B5Rm4ucmVzdG9yZSA9ICgpID0+IHsKCQlvYmplY3Rba2V5XSA9IG9yaWdpbmFsOwoJfTsKCW9iamVjdFtrZXldID0gc3B5Rm47CgoJcmV0dXJuIHNweUZuOwp9Cgptb2R1bGUuZXhwb3J0cyA9IHsKCXNweTogY3JlYXRlU3B5LAoJY3JlYXRlOiBtb2NrQnVpbGRlciwKCWZ1bmN0aW9uOiBmdW5jdGlvbkJ1aWxkZXIsCglvYmplY3Q6IG9iamVjdEJ1aWxkZXIsCgljbGFzczogY2xhc3NCdWlsZGVyLAoJcHJvcGVydHk6IHByb3BlcnR5QnVpbGRlciwKfTsKAAAAAAAAAABxGwAAAAAAAAAAAAA",
|
|
970
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAEEVAAAAAAAAQRUAAAAAAAAAAAAAAADwvw"
|
|
971
|
+
],
|
|
972
|
+
[
|
|
973
|
+
72,
|
|
974
|
+
1,
|
|
975
|
+
"revert",
|
|
976
|
+
null,
|
|
977
|
+
"BAAAAAAAAAAAAAAAAAAAAAAAAABxGwAAZnVuY3Rpb24gbW9ja0J1aWxkZXIoYnVpbGRlcikgewoJcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTsKfQoKZnVuY3Rpb24gZnVuY3Rpb25CdWlsZGVyKGJvZHkpIHsKCWNvbnN0IG9wdGlvbnMgPSB7CgkJYXN5bmM6IGZhbHNlLAoJCWJvZHk6IGJvZHksCgkJYXJnczogW10sCgkJc2VsZWN0OiBbXSwKCQlvcmlnaW5hbDogdW5kZWZpbmVkCgl9OwoKCXJldHVybiB7CgkJX19tb2NreUZ1bmN0aW9uOiB0cnVlLAoJCWFzeW5jOiBmdW5jdGlvbigpIHsKCQkJb3B0aW9ucy5hc3luYyA9IHRydWU7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJYXJnczogZnVuY3Rpb24oLi4uYXJncykgewoJCQlvcHRpb25zLmFyZ3MgPSBhcmdzOwoJCQlyZXR1cm4gdGhpczsKCQl9LAoJCWFyZ1NlbGVjdDogZnVuY3Rpb24oLi4uaW5kZXhlcykgewoJCQlvcHRpb25zLnNlbGVjdCA9IGluZGV4ZXM7CgkJCXJldHVybiB0aGlzOwoJCX0sCgkJb3JpZ2luYWw6IGZ1bmN0aW9uKGZuKSB7CgkJCW9wdGlvbnMub3JpZ2luYWwgPSBmbjsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCQlidWlsZDogZnVuY3Rpb24ocGFyZW50LCBrZXkpIHsKCQkJY29uc3Qgc3RhdGUgPSB7fTsKCQkJY29uc3QgbW9jayA9IGNyZWF0ZUZ1bmN0aW9uKHN0YXRlLCBvcHRpb25zKTsKCgkJCWlmIChwYXJlbnQpCgkJCQlPYmplY3QuZGVmaW5lUHJvcGVydHkocGFyZW50LCBrZXksIHsgdmFsdWU6IG1vY2sgfSk7CgoJCQlyZXR1cm4gd2lyZUZ1bmN0aW9uKHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgc3RhdGUpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVGdW5jdGlvbihtb2NrLCBzdGF0ZSkgewoJbW9jay5yZXQgPSAodmFsdWUsIGNhbGwgPSAwKSA9PiB7CgkJc3RhdGUucmV0c1tjYWxsXSA9IHZhbHVlOwoJfTsKCW1vY2sub25SZXQgPSAoaGFuZGxlciwgY2FsbCA9IDApID0+IHsKCQlzdGF0ZS5yZXRIYW5kbGVyc1tjYWxsXSA9IGhhbmRsZXI7Cgl9OwoJbW9jay5jYWxscyA9IChjYWxsKSA9PiB7CgkJcmV0dXJuIGNhbGwgIT09IHVuZGVmaW5lZCA/IHN0YXRlLmNhbGxzW2NhbGxdIDogc3RhdGUuY2FsbHM7Cgl9OwoJbW9jay5kYXRhID0gKGtleSkgPT4gewoJCXJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHN0YXRlLmRhdGFba2V5XSA6IHN0YXRlLmRhdGE7Cgl9OwoJbW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS5yZXRzID0gW107CgkJc3RhdGUucmV0SGFuZGxlcnMgPSBbXTsKCQlzdGF0ZS5jYWxscyA9IFtdOwoJCXN0YXRlLmRhdGEgPSB7fTsKCX07Cgltb2NrLnJlc2V0KCk7CgoJcmV0dXJuIG1vY2s7Cn0KCmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uKHN0YXRlLCBvcHRpb25zKSB7CglpZiAob3B0aW9ucy5hc3luYykgewoJCXJldHVybiBhc3luYyBmdW5jdGlvbigpIHsKCQkJcmV0dXJuIGdldEZ1bmN0aW9uQm9keSh0aGlzLCBzdGF0ZSwgb3B0aW9ucywgQXJyYXkuZnJvbShhcmd1bWVudHMpKTsKCQl9OwoJfSBlbHNlIHsKCQlyZXR1cm4gZnVuY3Rpb24oKSB7CgkJCXJldHVybiBnZXRGdW5jdGlvbkJvZHkodGhpcywgc3RhdGUsIG9wdGlvbnMsIEFycmF5LmZyb20oYXJndW1lbnRzKSk7CgkJfTsKCX0KfQoKZnVuY3Rpb24gZ2V0RnVuY3Rpb25Cb2R5KHBhcmVudCwgc3RhdGUsIG9wdGlvbnMsIHJhd0FyZ3MpIHsKCWNvbnN0IGFyZ3MgPSBkZWVwQ2xvbmUoZ2V0RnVuY3Rpb25BcmdzKHJhd0FyZ3MsIG9wdGlvbnMpKTsKCXN0YXRlLmNhbGxzLnB1c2goYXJncyk7Cgljb25zdCBjYWxsID0gc3RhdGUuY2FsbHMubGVuZ3RoOwoKCWxldCByZXQ7CgoJaWYgKHN0YXRlLnJldHNbY2FsbF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRzW2NhbGxdOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRIYW5kbGVyc1tjYWxsXSkgewoJCXJldCA9IHN0YXRlLnJldEhhbmRsZXJzW2NhbGxdKGFyZ3MpOwoJfSBlbHNlIGlmIChzdGF0ZS5yZXRzWzBdKSB7CgkJcmV0ID0gc3RhdGUucmV0c1swXTsKCX0gZWxzZSBpZiAoc3RhdGUucmV0SGFuZGxlcnNbMF0pIHsKCQlyZXQgPSBzdGF0ZS5yZXRIYW5kbGVyc1swXShhcmdzKTsKCX0KCglpZiAocmV0IGluc3RhbmNlb2YgRXJyb3IpCgkJdGhyb3cgcmV0OwoKCWlmIChvcHRpb25zLmJvZHkpIHsKCQlyZXR1cm4gb3B0aW9ucy5ib2R5KHsKCQkJc2VsZjogcGFyZW50LAoJCQlzdGF0ZTogc3RhdGUsCgkJCWNhbGw6IGNhbGwsCgkJCWFyZ3M6IGFyZ3MsCgkJCXJhd0FyZ3M6IHJhd0FyZ3MsCgkJCW9yaWdpbmFsOiBvcHRpb25zLm9yaWdpbmFsLAoJCQlyZXQ6IHJldAoJCX0pOwoJfSBlbHNlIHsKCQlyZXR1cm4gcmV0OwoJfQp9CgpmdW5jdGlvbiBnZXRGdW5jdGlvbkFyZ3MoY2FsbEFyZ3MsIG9wdGlvbnMpIHsKCWxldCBhcmdzID0gbnVsbDsKCglpZiAob3B0aW9ucy5zZWxlY3QubGVuZ3RoID09IDEpIHsKCQlhcmdzID0gY2FsbEFyZ3Nbb3B0aW9ucy5zZWxlY3RbMF1dOwoJfSBlbHNlIGlmIChvcHRpb25zLmFyZ3MubGVuZ3RoKSB7CgkJYXJncyA9IHt9OwoKCQlmb3IgKGxldCBpID0gMDsgaSA8IG9wdGlvbnMuYXJncy5sZW5ndGg7IGkrKykgewoJCQlpZiAob3B0aW9ucy5zZWxlY3QubGVuZ3RoICYmICFvcHRpb25zLnNlbGVjdC5pbmNsdWRlcyhpKSkKCQkJCWNvbnRpbnVlOwoKCQkJbGV0IGFyZ05hbWUgPSAnJzsKCQkJbGV0IGRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDsKCgkJCWlmICh0eXBlb2Ygb3B0aW9ucy5hcmdzW2ldID09ICdzdHJpbmcnKSB7CgkJCQlhcmdOYW1lID0gb3B0aW9ucy5hcmdzW2ldOwoJCQl9IGVsc2UgewoJCQkJW2FyZ05hbWUsIGRlZmF1bHRWYWx1ZV0gPSBPYmplY3QuZW50cmllcyhvcHRpb25zLmFyZ3NbaV0pWzBdOwoJCQl9CgoJCQlhcmdzW2FyZ05hbWVdID0gY2FsbEFyZ3NbaV0gIT09IHVuZGVmaW5lZCA/IGNhbGxBcmdzW2ldIDogZGVmYXVsdFZhbHVlOwoJCX0KCX0gZWxzZSB7CgkJLy8gTk9URTogUHJldmlvdXNseSByZXR1cm5lZCBudWxsLiBOb3cgcmV0dXJucyBhcnJheSAobWF5IGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5KS4KCQlhcmdzID0gQXJyYXkuZnJvbShjYWxsQXJncyk7Cgl9CgoJcmV0dXJuIGFyZ3M7Cn0KCmZ1bmN0aW9uIG9iamVjdEJ1aWxkZXIocHJvcHMpIHsKCWNvbnN0IG9wdGlvbnMgPSB7IHByb3BzIH07CgoJcmV0dXJuIHsKCQlfX21vY2t5T2JqZWN0OiB0cnVlLAoJCWJ1aWxkOiBmdW5jdGlvbihwYXJlbnQsIGtleSkgewoJCQljb25zdCBtb2NrID0gY3JlYXRlT2JqZWN0V2l0aFByb3BzKG9wdGlvbnMucHJvcHMpOwoKCQkJaWYgKHBhcmVudCkKCQkJCU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwYXJlbnQsIGtleSwgeyB2YWx1ZTogbW9jayB9KTsKCgkJCXJldHVybiB3aXJlT2JqZWN0KHBhcmVudCA/IHBhcmVudFtrZXldIDogbW9jaywgcHJvcHMpOwoJCX0KCX07Cn0KCmZ1bmN0aW9uIHdpcmVPYmplY3QobW9jaywgaW5pdGlhbFByb3BzKSB7Cgljb25zdCBpbml0aWFsTW9ja3MgPSBuZXcgU2V0KCk7Cgljb25zdCBpbml0aWFsVmFsdWVzID0gbmV3IE1hcCgpOwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhpbml0aWFsUHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IGluaXRpYWxQcm9wc1trZXldOwoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT09ICdmdW5jdGlvbicpIHsKCQkJaW5pdGlhbE1vY2tzLmFkZChrZXkpOwoJCX0gZWxzZSB7CgkJCWluaXRpYWxWYWx1ZXMuc2V0KGtleSwgcHJvcCk7CgkJfQoJfQoKCW1vY2sucmVzZXQgPSAoKSA9PiB7CgkJZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKG1vY2spKSB7CgkJCWlmIChrZXkgPT09ICdyZXNldCcpIGNvbnRpbnVlOwoKCQkJaWYgKGluaXRpYWxNb2Nrcy5oYXMoa2V5KSkgewoJCQkJaWYgKHR5cGVvZiBtb2NrW2tleV0/LnJlc2V0ID09PSAnZnVuY3Rpb24nKQoJCQkJCW1vY2tba2V5XS5yZXNldCgpOwoJCQl9IGVsc2UgaWYgKGluaXRpYWxWYWx1ZXMuaGFzKGtleSkpIHsKCQkJCW1vY2tba2V5XSA9IGluaXRpYWxWYWx1ZXMuZ2V0KGtleSk7CgkJCX0gZWxzZSB7CgkJCQlkZWxldGUgbW9ja1trZXldOwoJCQl9CgkJfQoJfTsKCglyZXR1cm4gbW9jazsKfQoKZnVuY3Rpb24gY3JlYXRlT2JqZWN0V2l0aFByb3BzKHByb3BzKSB7Cgljb25zdCBvYmplY3QgPSB7fTsKCglmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMocHJvcHMpKSB7CgkJY29uc3QgcHJvcCA9IHByb3BzW2tleV07CgoJCWlmICh0eXBlb2YgcHJvcD8uYnVpbGQgPT0gJ2Z1bmN0aW9uJykgewoJCQlwcm9wLmJ1aWxkKG9iamVjdCwga2V5KTsKCQl9IGVsc2UgewoJCQlvYmplY3Rba2V5XSA9IHByb3A7CgkJfQoJfQoKCXJldHVybiBvYmplY3Q7Cn0KCmZ1bmN0aW9uIGNsYXNzQnVpbGRlcihtZW1iZXJzKSB7Cgljb25zdCBvcHRpb25zID0geyBtZW1iZXJzIH07CgoJcmV0dXJuIHsKCQlfX21vY2t5Q2xhc3M6IHRydWUsCgkJYnVpbGQ6IGZ1bmN0aW9uKHBhcmVudCwga2V5KSB7CgkJCWNvbnN0IHN0YXRlID0ge307CgkJCWNvbnN0IE1vY2sgPSBjcmVhdGVDbGFzcyhzdGF0ZSwgb3B0aW9ucyk7CgoJCQlpZiAocGFyZW50KQoJCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHBhcmVudCwga2V5LCB7IHZhbHVlOiBNb2NrIH0pOwoKCQkJcmV0dXJuIHdpcmVDbGFzcyhwYXJlbnQgPyBwYXJlbnRba2V5XSA6IE1vY2ssIHN0YXRlLCBvcHRpb25zKTsKCQl9Cgl9Owp9CgpmdW5jdGlvbiBjcmVhdGVDbGFzcyhzdGF0ZSwgb3B0aW9ucykgewoJY29uc3QgTW9jayA9IGZ1bmN0aW9uKCkgewoJCWNvbnN0IGluZGV4ID0gc3RhdGUubnVtSW5zdGFuY2VzOwoKCQlpZiAoIXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0pCgkJCXN0YXRlLmRlc2NyaXB0aW9uc1tpbmRleF0gPSBjcmVhdGVPYmplY3RXaXRoUHJvcHMob3B0aW9ucy5tZW1iZXJzKTsKCgkJT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX21vY2t5SW5kZXgnLCB7IHZhbHVlOiBpbmRleCB9KTsKCgkJaWYgKHR5cGVvZiBzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKQoJCQlzdGF0ZS5kZXNjcmlwdGlvbnNbaW5kZXhdLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgLi4uYXJndW1lbnRzKTsKCgkJc3RhdGUubnVtSW5zdGFuY2VzKys7Cgl9OwoKCWZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvcHRpb25zLm1lbWJlcnMpKSB7CgkJaWYgKGtleSA9PT0gJ2NvbnN0cnVjdG9yJykKCQkJY29udGludWU7CgoJCWNvbnN0IG1lbWJlciA9IG9wdGlvbnMubWVtYmVyc1trZXldOwoKCQlpZiAobWVtYmVyPy5fX21vY2t5RnVuY3Rpb24pIHsKCQkJTW9jay5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHsKCQkJCXJldHVybiBzdGF0ZS5kZXNjcmlwdGlvbnNbdGhpcy5fX21vY2t5SW5kZXhdW2tleV0uYXBwbHkodGhpcywgYXJncyk7CgkJCX07CgkJfSBlbHNlIHsKCQkJT2JqZWN0LmRlZmluZVByb3BlcnR5KE1vY2sucHJvdG90eXBlLCBrZXksIHsKCQkJCWdldDogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuIHN0YXRlLmRlc2NyaXB0aW9uc1t0aGlzLl9fbW9ja3lJbmRleF1ba2V5XTsKCQkJCX0sCgkJCQlzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7CgkJCQkJc3RhdGUuZGVzY3JpcHRpb25zW3RoaXMuX19tb2NreUluZGV4XVtrZXldID0gdmFsdWU7CgkJCQl9LAoJCQkJZW51bWVyYWJsZTogdHJ1ZSwKCQkJCWNvbmZpZ3VyYWJsZTogdHJ1ZQoJCQl9KTsKCQl9Cgl9CgoJcmV0dXJuIE1vY2s7Cn0KCmZ1bmN0aW9uIHdpcmVDbGFzcyhNb2NrLCBzdGF0ZSwgb3B0aW9ucykgewoJTW9jay5pbnN0ID0gKGluZGV4ID0gMCkgPT4gewoJCWlmICghc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSkKCQkJc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XSA9IGNyZWF0ZU9iamVjdFdpdGhQcm9wcyhvcHRpb25zLm1lbWJlcnMpOwoKCQlyZXR1cm4gc3RhdGUuZGVzY3JpcHRpb25zW2luZGV4XTsKCX07CglNb2NrLm51bUluc3RzID0gKCkgPT4gewoJCXJldHVybiBzdGF0ZS5udW1JbnN0YW5jZXM7Cgl9OwoJTW9jay5yZXNldCA9ICgpID0+IHsKCQlzdGF0ZS5kZXNjcmlwdGlvbnMgPSBbXTsKCQlzdGF0ZS5udW1JbnN0YW5jZXMgPSAwOwoJCXN0YXRlLmRhdGEgPSB7fTsKCX07CglNb2NrLnJlc2V0KCk7CgoJcmV0dXJuIE1vY2s7Cn0KCmZ1bmN0aW9uIHByb3BlcnR5QnVpbGRlcigpIHsKCXJldHVybiB1bmRlZmluZWQ7Cn0KCmZ1bmN0aW9uIGRlZXBDbG9uZSh0YXJnZXQpIHsKCWlmICh0eXBlb2YgdGFyZ2V0ID09PSAnb2JqZWN0JykgewoJCWlmIChBcnJheS5pc0FycmF5KHRhcmdldCkpIHsKCQkJcmV0dXJuIHRhcmdldC5tYXAoZGVlcENsb25lKTsKCQl9IGVsc2UgaWYgKHRhcmdldD8uY29uc3RydWN0b3IgPT09IE9iamVjdCkgewoJCQljb25zdCBjbG9uZSA9IHt9OwoKCQkJZm9yIChjb25zdCBrZXkgaW4gdGFyZ2V0KSB7CgkJCQljbG9uZVtrZXldID0gZGVlcENsb25lKHRhcmdldFtrZXldKTsKCQkJfQoKCQkJcmV0dXJuIGNsb25lOwoJCX0KCX0KCglyZXR1cm4gdGFyZ2V0Owp9CgpmdW5jdGlvbiBjcmVhdGVTcHkob2JqZWN0LCBrZXksIHJlcGxhY2VtZW50KSB7CglpZiAoIXJlcGxhY2VtZW50KSB7CgkJcmVwbGFjZW1lbnQgPSBmdW5jdGlvbkJ1aWxkZXIoKGN0eCkgPT4gewoJCQlpZiAoY3R4LnJldCAhPT0gdW5kZWZpbmVkKQoJCQkJcmV0dXJuIGN0eC5yZXQ7CgoJCQlyZXR1cm4gY3R4Lm9yaWdpbmFsLmFwcGx5KGN0eC5zZWxmLCBjdHgucmF3QXJncyk7CgkJfSk7Cgl9CgoJY29uc3Qgb3JpZ2luYWwgPSBvYmplY3Rba2V5XTsKCWNvbnN0IHNweUZuID0gcmVwbGFjZW1lbnQub3JpZ2luYWwob3JpZ2luYWwpLmJ1aWxkKCk7CglzcHlGbi5yZXN0b3JlID0gKCkgPT4gewoJCW9iamVjdFtrZXldID0gb3JpZ2luYWw7Cgl9OwoJb2JqZWN0W2tleV0gPSBzcHlGbjsKCglyZXR1cm4gc3B5Rm47Cn0KCm1vZHVsZS5leHBvcnRzID0gewoJc3B5OiBjcmVhdGVTcHksCgljcmVhdGU6IG1vY2tCdWlsZGVyLAoJZnVuY3Rpb246IGZ1bmN0aW9uQnVpbGRlciwKCW9iamVjdDogb2JqZWN0QnVpbGRlciwKCWNsYXNzOiBjbGFzc0J1aWxkZXIsCglwcm9wZXJ0eTogcHJvcGVydHlCdWlsZGVyLAp9OwoAAAAAAAAAAG0bAAAAAAAAAAAAAAAAAAAAAAAAkBoAAAAAAAAAAAAAAAAAAAAAAACQGgAAAAAAAAAAAAA",
|
|
978
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAL0VAAAAAAAAyRUAAAAAAAAAAAAAAADwvw"
|
|
979
|
+
]
|
|
980
|
+
]
|
|
981
|
+
},
|
|
982
|
+
{
|
|
983
|
+
"file": "test/lilMockyTest.js",
|
|
984
|
+
"settings":
|
|
985
|
+
{
|
|
986
|
+
"buffer_size": 26009,
|
|
987
|
+
"line_ending": "Unix"
|
|
988
|
+
},
|
|
989
|
+
"undo_stack":
|
|
990
|
+
[
|
|
991
|
+
[
|
|
992
|
+
2,
|
|
993
|
+
1,
|
|
994
|
+
"revert",
|
|
995
|
+
null,
|
|
996
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAACtZAAAY29uc3QgeyBleHBlY3QgfSA9IHJlcXVpcmUoJ2NoYWknKTsKY29uc3QgbW9ja3kgPSByZXF1aXJlKCcuLi9zcmMvbGlsLW1vY2t5LmpzJyk7CgoKZGVzY3JpYmUoJ2xpbC1tb2NreScsICgpID0+IHsKCWRlc2NyaWJlKCdmdW5jdGlvbicsICgpID0+IHsKCQlpdCgnd2lsbCBidWlsZCBkaXJlY3RseSB3aXRob3V0IG1vY2t5LmNyZWF0ZScsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygneCcsICd5JykuYnVpbGQoKTsKCQkJbW9jay5yZXQoJ3Jlc3VsdCcpOwoKCQkJZXhwZWN0KG1vY2soMSwgMikpLnRvLmVxdWFsKCdyZXN1bHQnKTsKCQkJZXhwZWN0KG1vY2suY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB4OiAxLCB5OiAyIH0pOwoJCX0pOwoJCWl0KCd3aWxsIGJlIGEgZnVuY3Rpb24gd2l0aCBhcmdzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZmlyc3RBcmcnLCB7IHNlY29uZEFyZzogJ3Rlc3REZWZhdWx0JyB9KSk7CgkJCW1vY2sucmV0KCd0ZXN0UmV0Jyk7CgoJCQlleHBlY3QobW9jaygndGVzdEFyZycpKS50by5lcXVhbCgndGVzdFJldCcpOwoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CgkJCQlmaXJzdEFyZzogJ3Rlc3RBcmcnLAoJCQkJc2Vjb25kQXJnOiAndGVzdERlZmF1bHQnCgkJCX0pOwoJCQlleHBlY3QobW9jay5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJfSk7CgkJaXQoJ3dpbGwgYmUgYSBmdW5jdGlvbiB3aXRoIGN1c3RvbSByZXR1cm4nLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCXJldHVybiBjb250ZXh0LnJldDsKCQkJfSkuYXJncygnZmlyc3RBcmcnKSk7CgkJCW1vY2sucmV0KCd0ZXN0UmV0Jyk7CgoJCQlleHBlY3QobW9jaygndGVzdEFyZycpKS50by5lcXVhbCgndGVzdFJldCcpOwoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGZpcnN0QXJnOiAndGVzdEFyZycgfSk7CgkJCWV4cGVjdChtb2NrLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCQlpdCgnd2lsbCB1c2UgYXJnU2VsZWN0IHdpdGggc2luZ2xlIGluZGV4IHRvIHJldHVybiByYXcgYXJndW1lbnQnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hcmdTZWxlY3QoMSkpOwoJCQltb2NrLnJldCgndGVzdFJldCcpOwoKCQkJY29uc3QgcmVzdWx0ID0gbW9jaygnZmlyc3QnLCB7IHRlc3Q6ICdkYXRhJyB9LCAndGhpcmQnKTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCd0ZXN0UmV0Jyk7CgkJCS8vIFdoZW4gYXJnU2VsZWN0IGhhcyBzaW5nbGUgaW5kZXgsIGNhbGxzIHJldHVybnMgdGhlIHJhdyBhcmd1bWVudAoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHRlc3Q6ICdkYXRhJyB9KTsKCQl9KTsKCQlpdCgnd2lsbCB1c2UgYXJnU2VsZWN0IHdpdGggbXVsdGlwbGUgaW5kZXhlcyB0byBmaWx0ZXIgbmFtZWQgYXJncycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2ZpcnN0JywgJ3NlY29uZCcsICd0aGlyZCcpLmFyZ1NlbGVjdCgwLCAyKSk7CgoJCQltb2NrKCd2YWx1ZTEnLCAndmFsdWUyJywgJ3ZhbHVlMycpOwoKCQkJLy8gT25seSBmaXJzdCBhbmQgdGhpcmQgYXJlIGNhcHR1cmVkCgkJCWV4cGVjdChtb2NrLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsKCQkJCWZpcnN0OiAndmFsdWUxJywKCQkJCXRoaXJkOiAndmFsdWUzJwoJCQl9KTsKCQl9KTsKCQlpdCgnd2lsbCBkZWVwIGNsb25lIGFyZ3VtZW50cyB0byBwcmV2ZW50IG11dGF0aW9uJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZGF0YScpKTsKCgkJCWNvbnN0IG9iaiA9IHsgbmVzdGVkOiB7IHZhbHVlOiAnb3JpZ2luYWwnIH0gfTsKCQkJbW9jayhvYmopOwoKCQkJLy8gTXV0YXRlIHRoZSBvcmlnaW5hbAoJCQlvYmoubmVzdGVkLnZhbHVlID0gJ211dGF0ZWQnOwoKCQkJLy8gU3RvcmVkIGNhbGwgc2hvdWxkIGJlIHVuY2hhbmdlZAoJCQlleHBlY3QobW9jay5jYWxscygwKS5kYXRhLm5lc3RlZC52YWx1ZSkudG8uZXF1YWwoJ29yaWdpbmFsJyk7CgkJfSk7CgkJaXQoJ3dpbGwgcmVzZXQgZnVuY3Rpb24gc3RhdGUnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdhcmcnKSk7CgkJCW1vY2sucmV0KCdmaXJzdC1yZXQnKTsKCgkJCW1vY2soJ2NhbGwxJyk7CgkJCW1vY2soJ2NhbGwyJyk7CgoJCQlleHBlY3QobW9jay5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMik7CgoJCQltb2NrLnJlc2V0KCk7CgoJCQlleHBlY3QobW9jay5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMCk7CgkJCWV4cGVjdChtb2NrKCdjYWxsMycpKS50by5lcXVhbCh1bmRlZmluZWQpOyAvLyBSZXR1cm4gdmFsdWVzIGNsZWFyZWQKCQl9KTsKCQlpdCgnd2lsbCBhY2Nlc3MgYWxsIGNvbnRleHQgcHJvcGVydGllcyBpbiBjdXN0b20gYm9keScsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJcmV0dXJuIHsKCQkJCQljYWxsOiBjb250ZXh0LmNhbGwsCgkJCQkJYXJnczogY29udGV4dC5hcmdzLAoJCQkJCXJldDogY29udGV4dC5yZXQsCgkJCQkJaGFzU3RhdGU6IHR5cGVvZiBjb250ZXh0LnN0YXRlID09PSAnb2JqZWN0JywKCQkJCQloYXNEYXRhOiB0eXBlb2YgY29udGV4dC5zdGF0ZS5kYXRhID09PSAnb2JqZWN0JwoJCQkJfTsKCQkJfSkuYXJncygndGVzdEFyZycpKTsKCQkJbW9jay5yZXQoJ2N1c3RvbS1yZXQnKTsKCgkJCWNvbnN0IHJlc3VsdCA9IG1vY2soJ3Rlc3QtdmFsdWUnKTsKCgkJCWV4cGVjdChyZXN1bHQuY2FsbCkudG8uZXF1YWwoMSk7IC8vIEZpcnN0IGNhbGwKCQkJZXhwZWN0KHJlc3VsdC5hcmdzKS50by5kZWVwLmVxdWFsKHsgdGVzdEFyZzogJ3Rlc3QtdmFsdWUnIH0pOwoJCQlleHBlY3QocmVzdWx0LnJldCkudG8uZXF1YWwoJ2N1c3RvbS1yZXQnKTsKCQkJZXhwZWN0KHJlc3VsdC5oYXNTdGF0ZSkudG8uZXF1YWwodHJ1ZSk7CgkJCWV4cGVjdChyZXN1bHQuaGFzRGF0YSkudG8uZXF1YWwodHJ1ZSk7CgkJfSk7CgkJaXQoJ3dpbGwgYWNjZXNzIGN1c3RvbSBkYXRhIHZpYSBtb2NrLmRhdGEoKScsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJY29udGV4dC5zdGF0ZS5kYXRhLmFsbEl0ZW1zID0gY29udGV4dC5zdGF0ZS5kYXRhLmFsbEl0ZW1zIHx8IFtdOwoJCQkJY29udGV4dC5zdGF0ZS5kYXRhLmFsbEl0ZW1zLnB1c2goLi4uY29udGV4dC5hcmdzLml0ZW1zKTsKCQkJfSkuYXJncygnaXRlbXMnKSk7CgoJCQltb2NrKFsnYScsICdiJ10pOwoJCQltb2NrKFsnYyddKTsKCQkJbW9jayhbJ2QnLCAnZScsICdmJ10pOwoKCQkJZXhwZWN0KG1vY2suZGF0YSgnYWxsSXRlbXMnKSkudG8uZGVlcC5lcXVhbChbJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJ10pOwoJCQlleHBlY3QobW9jay5kYXRhKCkpLnRvLmRlZXAuZXF1YWwoeyBhbGxJdGVtczogWydhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZiddIH0pOwoJCX0pOwoJCWl0KCd3aWxsIGNsZWFyIGN1c3RvbSBkYXRhIG9uIHJlc2V0JywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQljb250ZXh0LnN0YXRlLmRhdGEuY291bnRlciA9IChjb250ZXh0LnN0YXRlLmRhdGEuY291bnRlciB8fCAwKSArIDE7CgkJCX0pKTsKCgkJCW1vY2soKTsKCQkJbW9jaygpOwoJCQltb2NrKCk7CgoJCQlleHBlY3QobW9jay5kYXRhKCdjb3VudGVyJykpLnRvLmVxdWFsKDMpOwoKCQkJbW9jay5yZXNldCgpOwoKCQkJZXhwZWN0KG1vY2suZGF0YSgnY291bnRlcicpKS50by5lcXVhbCh1bmRlZmluZWQpOwoJCQlleHBlY3QobW9jay5kYXRhKCkpLnRvLmRlZXAuZXF1YWwoe30pOwoJCX0pOwoJfSk7CgoJZGVzY3JpYmUoJ29iamVjdCcsICgpID0+IHsKCQlpdCgnd2lsbCBiZSBvYmplY3Qgd2l0aCBmdW5jdGlvbicsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5vYmplY3QoewoJCQkJcnVuOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2ZpcnN0QXJnJykKCQkJfSkpOwoKCQkJbW9jay5ydW4ucmV0KCd0ZXN0UmV0Jyk7CgkJCWV4cGVjdChtb2NrLnJ1bigndGVzdEFyZycpKS50by5lcXVhbCgndGVzdFJldCcpOwoJCQlleHBlY3QobW9jay5ydW4uY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBmaXJzdEFyZzogJ3Rlc3RBcmcnIH0pOwoJCQlleHBlY3QobW9jay5ydW4uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCX0pOwoJCWl0KCd3aWxsIGJlIG9iamVjdCB3aXRoIG5lc3RlZCBvYmplY3QgYW5kIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQlzdWI6IG1vY2t5Lm9iamVjdCh7CgkJCQkJcnVuOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2ZpcnN0QXJnJykKCQkJCX0pCgkJCX0pKTsKCQkJbW9jay5zdWIucnVuLnJldCgndGVzdFJldCcpOwoKCQkJZXhwZWN0KG1vY2suc3ViLnJ1bigndGVzdEFyZycpKS50by5lcXVhbCgndGVzdFJldCcpOwoJCQlleHBlY3QobW9jay5zdWIucnVuLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgZmlyc3RBcmc6ICd0ZXN0QXJnJyB9KTsKCQkJZXhwZWN0KG1vY2suc3ViLnJ1bi5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJfSk7CgkJaXQoJ3dpbGwgcmVzZXQgYWxsIG5lc3RlZCBtb2NrcyB3aGVuIG9iamVjdCBpcyByZXNldCcsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5vYmplY3QoewoJCQkJbWV0aG9kMTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdhcmcnKSwKCQkJCW5lc3RlZDogbW9ja3kub2JqZWN0KHsKCQkJCQltZXRob2QyOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2FyZycpCgkJCQl9KQoJCQl9KSk7CgoJCQltb2NrLm1ldGhvZDEucmV0KCdyZXQxJyk7CgkJCW1vY2submVzdGVkLm1ldGhvZDIucmV0KCdyZXQyJyk7CgoJCQltb2NrLm1ldGhvZDEoJ2NhbGwxJyk7CgkJCW1vY2submVzdGVkLm1ldGhvZDIoJ2NhbGwyJyk7CgoJCQlleHBlY3QobW9jay5tZXRob2QxLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQkJZXhwZWN0KG1vY2submVzdGVkLm1ldGhvZDIuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoKCQkJLy8gUmVzZXQgc2hvdWxkIHByb3BhZ2F0ZSB0byBhbGwgbmVzdGVkIG1vY2tzCgkJCW1vY2sucmVzZXQoKTsKCgkJCWV4cGVjdChtb2NrLm1ldGhvZDEuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDApOwoJCQlleHBlY3QobW9jay5uZXN0ZWQubWV0aG9kMi5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMCk7CgkJCWV4cGVjdChtb2NrLm1ldGhvZDEoJ3Rlc3QnKSkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJZXhwZWN0KG1vY2submVzdGVkLm1ldGhvZDIoJ3Rlc3QnKSkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQl9KTsKCQlpdCgnd2lsbCBiZSBvYmplY3Qgd2l0aCBwcm9wZXJ0eSBnZXR0ZXIgYW5kIHNldHRlcicsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5vYmplY3QoewoJCQkJYWNjZXNzb3I6IG1vY2t5LnByb3BlcnR5KCkKCQkJfSkpOwoKCQkJLy8gSW5pdGlhbCB2YWx1ZSBzaG91bGQgYmUgdW5kZWZpbmVkCgkJCWV4cGVjdChtb2NrLmFjY2Vzc29yKS50by5lcXVhbCh1bmRlZmluZWQpOwoKCQkJLy8gU2V0IGEgdmFsdWUKCQkJbW9jay5hY2Nlc3NvciA9ICd0ZXN0VmFsdWUnOwoJCQlleHBlY3QobW9jay5hY2Nlc3NvcikudG8uZXF1YWwoJ3Rlc3RWYWx1ZScpOwoKCQkJLy8gQ2hhbmdlIHRoZSB2YWx1ZQoJCQltb2NrLmFjY2Vzc29yID0gJ25ld1ZhbHVlJzsKCQkJZXhwZWN0KG1vY2suYWNjZXNzb3IpLnRvLmVxdWFsKCduZXdWYWx1ZScpOwoJCX0pOwoJCWl0KCd3aWxsIHJlc2V0IGFsbCBwcm9wZXJ0eSB0eXBlcyB0byBpbml0aWFsIHZhbHVlcycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5vYmplY3QoewoJCQkJY291bnRlcjogNDIsCgkJCQluYW1lOiAnQWxpY2UnLAoJCQkJbWV0aG9kOiBtb2NreS5mdW5jdGlvbigpLAoJCQkJYWNjZXNzb3I6IG1vY2t5LnByb3BlcnR5KCkKCQkJfSkpOwoKCQkJLy8gTW9kaWZ5IGFsbCBwcm9wZXJ0aWVzCgkJCW1vY2suY291bnRlciA9IDEwMDsKCQkJbW9jay5uYW1lID0gJ0JvYic7CgkJCW1vY2subWV0aG9kLnJldCgndGVzdCcpOwoJCQltb2NrLm1ldGhvZCgpOwoJCQltb2NrLmFjY2Vzc29yID0gJ3ZhbHVlJzsKCgkJCS8vIEFkZCBkeW5hbWljIHByb3BlcnR5CgkJCW1vY2suYWRkZWQgPSAnbmV3JzsKCgkJCW1vY2sucmVzZXQoKTsKCgkJCS8vIFBsYWluIHZhbHVlcyByZXNldAoJCQlleHBlY3QobW9jay5jb3VudGVyKS50by5lcXVhbCg0Mik7CgkJCWV4cGVjdChtb2NrLm5hbWUpLnRvLmVxdWFsKCdBbGljZScpOwoKCQkJLy8gTWV0aG9kcyByZXNldAoJCQlleHBlY3QobW9jay5tZXRob2QuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDApOwoKCQkJLy8gbW9ja3kucHJvcGVydHkoKSByZXNldHMgdG8gdW5kZWZpbmVkCgkJCWV4cGVjdChtb2NrLmFjY2Vzc29yKS50by5lcXVhbCh1bmRlZmluZWQpOwoKCQkJLy8gRHluYW1pYyBwcm9wZXJ0aWVzIGRlbGV0ZWQKCQkJZXhwZWN0KG1vY2suYWRkZWQpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgkJCWV4cGVjdCgnYWRkZWQnIGluIG1vY2spLnRvLmVxdWFsKGZhbHNlKTsKCQl9KTsKCQlpdCgnd2lsbCBzdXBwb3J0IFN5bWJvbCBwcm9wZXJ0aWVzIGFuZCByZXNldCB0aGVtIGNvcnJlY3RseScsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgY3VzdG9tU3ltYm9sID0gU3ltYm9sKCdjdXN0b20nKTsKCQkJY29uc3QgYWRkZWRTeW1ib2wgPSBTeW1ib2woJ2FkZGVkJyk7CgoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQlbU3ltYm9sLml0ZXJhdG9yXTogbW9ja3kuZnVuY3Rpb24oKSwKCQkJCVtjdXN0b21TeW1ib2xdOiAnaW5pdGlhbFZhbHVlJwoJCQl9KSk7CgoJCQkvLyBWZXJpZnkgU3ltYm9sIHByb3BlcnRpZXMgd29yawoJCQlleHBlY3QodHlwZW9mIG1vY2tbU3ltYm9sLml0ZXJhdG9yXSkudG8uZXF1YWwoJ2Z1bmN0aW9uJyk7CgkJCWV4cGVjdChtb2NrW2N1c3RvbVN5bWJvbF0pLnRvLmVxdWFsKCdpbml0aWFsVmFsdWUnKTsKCgkJCS8vIENvbmZpZ3VyZSBhbmQgdXNlIFN5bWJvbCBmdW5jdGlvbgoJCQltb2NrW1N5bWJvbC5pdGVyYXRvcl0ucmV0KCdpdGVyYXRvclJlc3VsdCcpOwoJCQlleHBlY3QobW9ja1tTeW1ib2wuaXRlcmF0b3JdKCkpLnRvLmVxdWFsKCdpdGVyYXRvclJlc3VsdCcpOwoJCQlleHBlY3QobW9ja1tTeW1ib2wuaXRlcmF0b3JdLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCgkJCS8vIE1vZGlmeSBTeW1ib2wgdmFsdWUgYW5kIGFkZCBkeW5hbWljIFN5bWJvbAoJCQltb2NrW2N1c3RvbVN5bWJvbF0gPSAnbW9kaWZpZWRWYWx1ZSc7CgkJCW1vY2tbYWRkZWRTeW1ib2xdID0gJ2FkZGVkJzsKCgkJCS8vIFJlc2V0CgkJCW1vY2sucmVzZXQoKTsKCgkJCS8vIFN5bWJvbCBmdW5jdGlvbiBtb2NrIHdhcyByZXNldAoJCQlleHBlY3QobW9ja1tTeW1ib2wuaXRlcmF0b3JdLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgwKTsKCQkJZXhwZWN0KG1vY2tbU3ltYm9sLml0ZXJhdG9yXSgpKS50by5lcXVhbCh1bmRlZmluZWQpOwoKCQkJLy8gU3ltYm9sIHBsYWluIHByb3BlcnR5IHdhcyByZXN0b3JlZAoJCQlleHBlY3QobW9ja1tjdXN0b21TeW1ib2xdKS50by5lcXVhbCgnaW5pdGlhbFZhbHVlJyk7CgoJCQkvLyBEeW5hbWljIFN5bWJvbCBwcm9wZXJ0eSB3YXMgZGVsZXRlZAoJCQlleHBlY3QobW9ja1thZGRlZFN5bWJvbF0pLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgkJCWV4cGVjdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG1vY2spLmluY2x1ZGVzKGFkZGVkU3ltYm9sKSkudG8uZXF1YWwoZmFsc2UpOwoJCX0pOwoJCWl0KCd3aWxsIGhhbmRsZSBudWxsIGFuZCB1bmRlZmluZWQgcHJvcGVydHkgdmFsdWVzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQludWxsUHJvcDogbnVsbCwKCQkJCXVuZGVmaW5lZFByb3A6IHVuZGVmaW5lZCwKCQkJCXplcm9Qcm9wOiAwLAoJCQkJZmFsc2VQcm9wOiBmYWxzZSwKCQkJCWVtcHR5U3RyaW5nUHJvcDogJycKCQkJfSkpOwoKCQkJLy8gVmVyaWZ5IGluaXRpYWwgdmFsdWVzCgkJCWV4cGVjdChtb2NrLm51bGxQcm9wKS50by5lcXVhbChudWxsKTsKCQkJZXhwZWN0KG1vY2sudW5kZWZpbmVkUHJvcCkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJZXhwZWN0KG1vY2suemVyb1Byb3ApLnRvLmVxdWFsKDApOwoJCQlleHBlY3QobW9jay5mYWxzZVByb3ApLnRvLmVxdWFsKGZhbHNlKTsKCQkJZXhwZWN0KG1vY2suZW1wdHlTdHJpbmdQcm9wKS50by5lcXVhbCgnJyk7CgoJCQkvLyBNb2RpZnkgdmFsdWVzCgkJCW1vY2subnVsbFByb3AgPSAnY2hhbmdlZCc7CgkJCW1vY2sudW5kZWZpbmVkUHJvcCA9ICdjaGFuZ2VkJzsKCQkJbW9jay56ZXJvUHJvcCA9IDEwMDsKCQkJbW9jay5mYWxzZVByb3AgPSB0cnVlOwoJCQltb2NrLmVtcHR5U3RyaW5nUHJvcCA9ICdjaGFuZ2VkJzsKCgkJCS8vIFJlc2V0CgkJCW1vY2sucmVzZXQoKTsKCgkJCS8vIFZlcmlmeSByZXN0b3JlZCB0byBpbml0aWFsIHZhbHVlcwoJCQlleHBlY3QobW9jay5udWxsUHJvcCkudG8uZXF1YWwobnVsbCk7CgkJCWV4cGVjdChtb2NrLnVuZGVmaW5lZFByb3ApLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgkJCWV4cGVjdChtb2NrLnplcm9Qcm9wKS50by5lcXVhbCgwKTsKCQkJZXhwZWN0KG1vY2suZmFsc2VQcm9wKS50by5lcXVhbChmYWxzZSk7CgkJCWV4cGVjdChtb2NrLmVtcHR5U3RyaW5nUHJvcCkudG8uZXF1YWwoJycpOwoJCX0pOwoJfSk7CgoJZGVzY3JpYmUoJ2NsYXNzJywgKCkgPT4gewoJCWl0KCd3aWxsIGJlIGNsYXNzIHdpdGggY29uc3RydWN0b3IgYW5kIG1ldGhvZCcsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQljb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdpbml0QXJnJyksCgkJCQlydW46IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZmlyc3RBcmcnKQoJCQl9KSk7CgkJCU1vY2suaW5zdCgpLnJ1bi5yZXQoJ3Rlc3RSZXQnKTsKCgkJCWNvbnN0IG1vY2tJbnN0YW5jZSA9IG5ldyBNb2NrKCd0ZXN0T3B0aW9uJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5jb25zdHJ1Y3Rvci5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGluaXRBcmc6ICd0ZXN0T3B0aW9uJyB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmNvbnN0cnVjdG9yLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCgkJCWV4cGVjdChtb2NrSW5zdGFuY2UucnVuKCd0ZXN0QXJnJykpLnRvLmVxdWFsKCd0ZXN0UmV0Jyk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5ydW4uY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBmaXJzdEFyZzogJ3Rlc3RBcmcnIH0pOwoJCQlleHBlY3QoTW9jay5pbnN0KCkucnVuLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCgkJaXQoJ3dpbGwgYmUgY2xhc3Mgd2l0aCBjb25zdHJ1Y3RvciBhbmQgYnVpbGRlciBtZXRob2RzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWluZGV4OiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJCXJldHVybiBjb250ZXh0LnNlbGY7CgkJCQl9KS5hcmdzKCdpbmRleCcpLAoJCQkJbmFtZXNwYWNlOiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJCXJldHVybiBjb250ZXh0LnNlbGY7CgkJCQl9KS5hcmdzKCduYW1lc3BhY2UnKSwKCQkJCXF1ZXJ5OiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJCXJldHVybiBjb250ZXh0LnNlbGY7CgkJCQl9KS5hcmdzKCdxdWVyeScpCgkJCX0pKTsKCgkJCWNvbnN0IG1vY2tJbnN0YW5jZSA9IG5ldyBNb2NrKCk7CgkJCW1vY2tJbnN0YW5jZS5pbmRleCgndGVzdC1pbmRleCcpLm5hbWVzcGFjZSgndGVzdC1uYW1lc3BhY2UnKS5xdWVyeSh7IHRlc3Q6ICdxdWVyeScgfSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5pbmRleC5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGluZGV4OiAndGVzdC1pbmRleCcgfSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5pbmRleC5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5uYW1lc3BhY2UuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBuYW1lc3BhY2U6ICd0ZXN0LW5hbWVzcGFjZScgfSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5uYW1lc3BhY2UuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCQlleHBlY3QoTW9jay5pbnN0KCkucXVlcnkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBxdWVyeTogeyB0ZXN0OiAncXVlcnknIH0gfSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5xdWVyeS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJfSk7CgoJCWl0KCd3aWxsIGRlbW9uc3RyYXRlIHRoYXQgc3RhdGUuZGF0YSBpcyBwZXItbWV0aG9kLCBub3Qgc2hhcmVkJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBDb3VudGVyID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJCS8vIHN0YXRlLmRhdGEgaGVyZSBpcyBzZXBhcmF0ZSBmcm9tIG90aGVyIG1ldGhvZHMKCQkJCQljb250ZXh0LnN0YXRlLmRhdGEuY29uc3RydWN0b3JEYXRhID0gJ3NldCBpbiBjb25zdHJ1Y3Rvcic7CgkJCQl9KS5hcmdzKCdzdGFydFZhbHVlJyksCgkJCQlnZXRDb25zdHJ1Y3RvckRhdGE6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJLy8gVGhpcyBzdGF0ZS5kYXRhIGlzIGRpZmZlcmVudCBmcm9tIGNvbnN0cnVjdG9yJ3Mgc3RhdGUuZGF0YQoJCQkJCXJldHVybiBjb250ZXh0LnN0YXRlLmRhdGEuY29uc3RydWN0b3JEYXRhOyAvLyBXaWxsIGJlIHVuZGVmaW5lZAoJCQkJfSkKCQkJfSkpOwoKCQkJY29uc3QgY291bnRlciA9IG5ldyBDb3VudGVyKDEwKTsKCQkJLy8gVGhpcyB3aWxsIGJlIHVuZGVmaW5lZCBiZWNhdXNlIGVhY2ggbWV0aG9kIGhhcyBpdHMgb3duIHN0YXRlLmRhdGEKCQkJZXhwZWN0KGNvdW50ZXIuZ2V0Q29uc3RydWN0b3JEYXRhKCkpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgkJfSk7CgoJCWl0KCd3aWxsIHN0b3JlIGRhdGEgb24gaW5zdGFuY2UgdmlhIGNvbnRleHQuc2VsZiBpbiBjb25zdHJ1Y3RvcicsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgQ291bnRlciA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQljb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCQkvLyBTdG9yZSBkYXRhIGRpcmVjdGx5IG9uIHRoZSBpbnN0YW5jZQoJCQkJCWNvbnRleHQuc2VsZi5fY291bnQgPSBjb250ZXh0LmFyZ3Muc3RhcnRWYWx1ZSB8fCAwOwoJCQkJCWNvbnRleHQuc2VsZi5faW5pdGlhbGl6ZWQgPSB0cnVlOwoJCQkJfSkuYXJncygnc3RhcnRWYWx1ZScpLAoJCQkJaW5jcmVtZW50OiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJCWNvbnRleHQuc2VsZi5fY291bnQrKzsKCQkJCQlyZXR1cm4gY29udGV4dC5zZWxmLl9jb3VudDsKCQkJCX0pLAoJCQkJZ2V0Q291bnQ6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJcmV0dXJuIGNvbnRleHQuc2VsZi5fY291bnQ7CgkJCQl9KSwKCQkJCWlzSW5pdGlhbGl6ZWQ6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJcmV0dXJuIGNvbnRleHQuc2VsZi5faW5pdGlhbGl6ZWQ7CgkJCQl9KQoJCQl9KSk7CgoJCQljb25zdCBjb3VudGVyMSA9IG5ldyBDb3VudGVyKDEwKTsKCQkJZXhwZWN0KGNvdW50ZXIxLl9pbml0aWFsaXplZCkudG8uZXF1YWwodHJ1ZSk7CgkJCWV4cGVjdChjb3VudGVyMS5pc0luaXRpYWxpemVkKCkpLnRvLmVxdWFsKHRydWUpOwoJCQlleHBlY3QoY291bnRlcjEuZ2V0Q291bnQoKSkudG8uZXF1YWwoMTApOwoJCQlleHBlY3QoY291bnRlcjEuaW5jcmVtZW50KCkpLnRvLmVxdWFsKDExKTsKCQkJZXhwZWN0KGNvdW50ZXIxLmluY3JlbWVudCgpKS50by5lcXVhbCgxMik7CgkJCWV4cGVjdChjb3VudGVyMS5nZXRDb3VudCgpKS50by5lcXVhbCgxMik7CgoJCQkvLyBTZWNvbmQgaW5zdGFuY2Ugc2hvdWxkIGhhdmUgc2VwYXJhdGUgZGF0YQoJCQljb25zdCBjb3VudGVyMiA9IG5ldyBDb3VudGVyKDUpOwoJCQlleHBlY3QoY291bnRlcjIuZ2V0Q291bnQoKSkudG8uZXF1YWwoNSk7CgkJCWV4cGVjdChjb3VudGVyMi5pbmNyZW1lbnQoKSkudG8uZXF1YWwoNik7CgoJCQkvLyBGaXJzdCBpbnN0YW5jZSBzaG91bGQgYmUgdW5hZmZlY3RlZAoJCQlleHBlY3QoY291bnRlcjEuZ2V0Q291bnQoKSkudG8uZXF1YWwoMTIpOwoJCX0pOwoKCQlpdCgnd2lsbCB0cmFjayBudW1iZXIgb2YgaW5zdGFuY2VzIGNyZWF0ZWQgd2l0aCBudW1JbnN0cycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQljb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd2YWx1ZScpCgkJCX0pKTsKCgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDApOwoKCQkJY29uc3QgaW5zdDEgPSBuZXcgTW9jaygnZmlyc3QnKTsKCQkJZXhwZWN0KE1vY2subnVtSW5zdHMoKSkudG8uZXF1YWwoMSk7CgoJCQljb25zdCBpbnN0MiA9IG5ldyBNb2NrKCdzZWNvbmQnKTsKCQkJZXhwZWN0KE1vY2subnVtSW5zdHMoKSkudG8uZXF1YWwoMik7CgoJCQljb25zdCBpbnN0MyA9IG5ldyBNb2NrKCd0aGlyZCcpOwoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgzKTsKCQl9KTsKCgkJaXQoJ3dpbGwgcmVzZXQgYWxsIGluc3RhbmNlcyBhbmQgY291bnRlcnMnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJY29uc3RydWN0b3I6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygndmFsdWUnKSwKCQkJCXJ1bjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdhcmcnKQoJCQl9KSk7CgoJCQlNb2NrLmluc3QoMCkucnVuLnJldCgnZmlyc3QtcmV0Jyk7CgkJCU1vY2suaW5zdCgxKS5ydW4ucmV0KCdzZWNvbmQtcmV0Jyk7CgoJCQljb25zdCBpbnN0MSA9IG5ldyBNb2NrKCdmaXJzdCcpOwoJCQljb25zdCBpbnN0MiA9IG5ldyBNb2NrKCdzZWNvbmQnKTsKCgkJCWV4cGVjdChpbnN0MS5ydW4oJ3Rlc3QnKSkudG8uZXF1YWwoJ2ZpcnN0LXJldCcpOwoJCQlleHBlY3QoaW5zdDIucnVuKCd0ZXN0JykpLnRvLmVxdWFsKCdzZWNvbmQtcmV0Jyk7CgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDIpOwoJCQlleHBlY3QoTW9jay5pbnN0KDApLnJ1bi5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgoJCQkvLyBSZXNldCBzaG91bGQgY2xlYXIgZXZlcnl0aGluZwoJCQlNb2NrLnJlc2V0KCk7CgoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgwKTsKCgkJCS8vIEFmdGVyIHJlc2V0LCBuZXcgaW5zdGFuY2VzIHN0YXJ0IGZyb20gaW5kZXggMCBhZ2FpbgoJCQljb25zdCBpbnN0MyA9IG5ldyBNb2NrKCd0aGlyZCcpOwoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgxKTsKCQkJLy8gUmV0dXJucyBzaG91bGQgYmUgY2xlYXJlZAoJCQlleHBlY3QoaW5zdDMucnVuKCd0ZXN0JykpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgkJCS8vIENhbGxzIHNob3VsZCBiZSBjbGVhcmVkCgkJCWV4cGVjdChNb2NrLmluc3QoMCkucnVuLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsgLy8gSnVzdCB0aGlzIG9uZSBjYWxsCgkJfSk7CgoJCWl0KCd3aWxsIHJlc2V0IHBsYWluIHZhbHVlIHByb3BlcnRpZXMgdG8gaW5pdGlhbCB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJbmFtZTogbnVsbCwKCQkJCWNvdW50OiAwCgkJCX0pKTsKCgkJCS8vIENyZWF0ZSBhbmQgbW9kaWZ5IGluc3RhbmNlcwoJCQljb25zdCBpbnN0MSA9IG5ldyBNb2NrKCk7CgkJCWluc3QxLm5hbWUgPSAnZmlyc3QnOwoJCQlpbnN0MS5jb3VudCA9IDEwOwoKCQkJY29uc3QgaW5zdDIgPSBuZXcgTW9jaygpOwoJCQlpbnN0Mi5uYW1lID0gJ3NlY29uZCc7CgkJCWluc3QyLmNvdW50ID0gMjA7CgoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgyKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5uYW1lKS50by5lcXVhbCgnZmlyc3QnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgxKS5jb3VudCkudG8uZXF1YWwoMjApOwoKCQkJLy8gUmVzZXQKCQkJTW9jay5yZXNldCgpOwoKCQkJZXhwZWN0KE1vY2subnVtSW5zdHMoKSkudG8uZXF1YWwoMCk7CgoJCQkvLyBBZnRlciByZXNldCwgZGVzY3JpcHRpb25zIGFyZSBmcmVzaCB3aXRoIGluaXRpYWwgdmFsdWVzCgkJCWV4cGVjdChNb2NrLmluc3QoMCkubmFtZSkudG8uZXF1YWwobnVsbCk7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkuY291bnQpLnRvLmVxdWFsKDApOwoKCQkJLy8gTmV3IGluc3RhbmNlIGdldHMgaW5pdGlhbCB2YWx1ZXMKCQkJY29uc3QgaW5zdDMgPSBuZXcgTW9jaygpOwoJCQlleHBlY3QoaW5zdDMubmFtZSkudG8uZXF1YWwobnVsbCk7CgkJCWV4cGVjdChpbnN0My5jb3VudCkudG8uZXF1YWwoMCk7CgkJfSk7CgoJCWl0KCd3aWxsIHByZS1jb25maWd1cmUgaW5zdGFuY2VzIGJlZm9yZSBpbnN0YW50aWF0aW9uJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCXJ1bjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdhcmcnKQoJCQl9KSk7CgoJCQkvLyBDb25maWd1cmUgaW5zdGFuY2VzIGJlZm9yZSB0aGV5J3JlIGNyZWF0ZWQKCQkJTW9jay5pbnN0KDApLnJ1bi5yZXQoJ2ZpcnN0LXZhbHVlJyk7CgkJCU1vY2suaW5zdCgxKS5ydW4ucmV0KCdzZWNvbmQtdmFsdWUnKTsKCQkJTW9jay5pbnN0KDIpLnJ1bi5yZXQoJ3RoaXJkLXZhbHVlJyk7CgoJCQljb25zdCBpbnN0MSA9IG5ldyBNb2NrKCk7CgkJCWNvbnN0IGluc3QyID0gbmV3IE1vY2soKTsKCQkJY29uc3QgaW5zdDMgPSBuZXcgTW9jaygpOwoKCQkJZXhwZWN0KGluc3QxLnJ1bigndGVzdCcpKS50by5lcXVhbCgnZmlyc3QtdmFsdWUnKTsKCQkJZXhwZWN0KGluc3QyLnJ1bigndGVzdCcpKS50by5lcXVhbCgnc2Vjb25kLXZhbHVlJyk7CgkJCWV4cGVjdChpbnN0My5ydW4oJ3Rlc3QnKSkudG8uZXF1YWwoJ3RoaXJkLXZhbHVlJyk7CgkJfSk7CgoJCWl0KCd3aWxsIHN1cHBvcnQgYXN5bmMgbWV0aG9kcycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQlmZXRjaERhdGE6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnaWQnKS5hc3luYygpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgpLmZldGNoRGF0YS5yZXQoJ2FzeW5jLXJlc3VsdCcpOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgkJCWNvbnN0IHJlc3VsdCA9IGF3YWl0IGluc3QuZmV0Y2hEYXRhKCd0ZXN0LWlkJyk7CgoJCQlleHBlY3QocmVzdWx0KS50by5lcXVhbCgnYXN5bmMtcmVzdWx0Jyk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5mZXRjaERhdGEuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBpZDogJ3Rlc3QtaWQnIH0pOwoJCX0pOwoKCQlpdCgnd2lsbCB0aHJvdyBlcnJvcnMgZnJvbSBjbGFzcyBtZXRob2RzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCXRocm93RXJyb3I6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnbWVzc2FnZScpCgkJCX0pKTsKCgkJCWNvbnN0IHRlc3RFcnJvciA9IG5ldyBFcnJvcignVGVzdCBlcnJvcicpOwoJCQlNb2NrLmluc3QoKS50aHJvd0Vycm9yLnJldCh0ZXN0RXJyb3IpOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgoJCQlleHBlY3QoKCkgPT4gaW5zdC50aHJvd0Vycm9yKCdmYWlsJykpLnRvLnRocm93KCdUZXN0IGVycm9yJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS50aHJvd0Vycm9yLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgbWVzc2FnZTogJ2ZhaWwnIH0pOwoJCX0pOwoKCQlpdCgnd2lsbCBoYW5kbGUgb25SZXQgaGFuZGxlcnMgaW4gY2xhc3MgbWV0aG9kcycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQljYWxjdWxhdGU6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygneCcsICd5JykKCQkJfSkpOwoKCQkJTW9jay5pbnN0KCkuY2FsY3VsYXRlLm9uUmV0KChhcmdzKSA9PiB7CgkJCQlyZXR1cm4gYXJncy54ICsgYXJncy55OwoJCQl9KTsKCgkJCWNvbnN0IGluc3QgPSBuZXcgTW9jaygpOwoKCQkJZXhwZWN0KGluc3QuY2FsY3VsYXRlKDUsIDMpKS50by5lcXVhbCg4KTsKCQkJZXhwZWN0KGluc3QuY2FsY3VsYXRlKDEwLCAyMCkpLnRvLmVxdWFsKDMwKTsKCQl9KTsKCgkJaXQoJ3dpbGwgaGFuZGxlIGRpZmZlcmVudCByZXR1cm4gdmFsdWVzIHBlciBjYWxsJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWdldFZhbHVlOiBtb2NreS5mdW5jdGlvbigpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgpLmdldFZhbHVlLnJldCgnZGVmYXVsdCcpOwoJCQlNb2NrLmluc3QoKS5nZXRWYWx1ZS5yZXQoJ2ZpcnN0LWNhbGwnLCAxKTsKCQkJTW9jay5pbnN0KCkuZ2V0VmFsdWUucmV0KCdzZWNvbmQtY2FsbCcsIDIpOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgoJCQlleHBlY3QoaW5zdC5nZXRWYWx1ZSgpKS50by5lcXVhbCgnZmlyc3QtY2FsbCcpOwoJCQlleHBlY3QoaW5zdC5nZXRWYWx1ZSgpKS50by5lcXVhbCgnc2Vjb25kLWNhbGwnKTsKCQkJZXhwZWN0KGluc3QuZ2V0VmFsdWUoKSkudG8uZXF1YWwoJ2RlZmF1bHQnKTsgLy8gRmFsbHMgYmFjayB0byBjYWxsIDAKCQl9KTsKCgkJaXQoJ3dpbGwgYWxsb3cgYSBjbGFzcyB0byBleHRlbmQgdGhlIG1vY2sgY2xhc3MnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJZ2V0VmFsdWU6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygneCcpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgpLmdldFZhbHVlLnJldCgnbW9jay12YWx1ZScpOwoKCQkJY2xhc3MgQ2hpbGQgZXh0ZW5kcyBNb2NrIHsKCQkJfQoKCQkJY29uc3QgY2hpbGQgPSBuZXcgQ2hpbGQoKTsKCQkJZXhwZWN0KGNoaWxkLmdldFZhbHVlKCd0ZXN0JykpLnRvLmVxdWFsKCdtb2NrLXZhbHVlJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5nZXRWYWx1ZS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHg6ICd0ZXN0JyB9KTsKCQl9KTsKCgkJaXQoJ3dpbGwgYWxsb3cgY2hpbGQgY2xhc3MgdG8gb3ZlcnJpZGUgbW9jayBtZXRob2QgYW5kIGNhbGwgc3VwZXInLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJZ2V0VmFsdWU6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygneCcpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgpLmdldFZhbHVlLnJldCgnbW9jay12YWx1ZScpOwoKCQkJY2xhc3MgQ2hpbGQgZXh0ZW5kcyBNb2NrIHsKCQkJCWdldFZhbHVlKHgpIHsKCQkJCQljb25zdCBwYXJlbnRSZXN1bHQgPSBzdXBlci5nZXRWYWx1ZSh4KTsKCQkJCQlyZXR1cm4gYGNoaWxkLSR7cGFyZW50UmVzdWx0fWA7CgkJCQl9CgkJCX0KCgkJCWNvbnN0IGNoaWxkID0gbmV3IENoaWxkKCk7CgkJCWNvbnN0IHJlc3VsdCA9IGNoaWxkLmdldFZhbHVlKCd0ZXN0Jyk7CgoJCQkvLyBDaGlsZCdzIG1ldGhvZCBzaG91bGQgcnVuIGFuZCB3cmFwIHRoZSBwYXJlbnQncyByZXN1bHQKCQkJZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJ2NoaWxkLW1vY2stdmFsdWUnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmdldFZhbHVlLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgeDogJ3Rlc3QnIH0pOwoJCX0pOwoKCQlpdCgnd2lsbCBhbGxvdyBjaGlsZCBjbGFzcyB0byBjYWxsIHN1cGVyIGluIGNvbnN0cnVjdG9yJywgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJCWNvbnRleHQuc2VsZi5tb2NrSW5pdGlhbGl6ZWQgPSB0cnVlOwoJCQkJCWNvbnRleHQuc2VsZi5tb2NrVmFsdWUgPSBjb250ZXh0LmFyZ3MudmFsdWU7CgkJCQl9KS5hcmdzKCd2YWx1ZScpLAoJCQkJZ2V0VmFsdWU6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygneCcpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgpLmdldFZhbHVlLnJldCgnbW9jay12YWx1ZScpOwoKCQkJY2xhc3MgQ2hpbGQgZXh0ZW5kcyBNb2NrIHsKCQkJCWNvbnN0cnVjdG9yKHZhbHVlKSB7CgkJCQkJc3VwZXIodmFsdWUpOwoJCQkJCXRoaXMuY2hpbGRJbml0aWFsaXplZCA9IHRydWU7CgkJCQkJdGhpcy5jaGlsZFZhbHVlID0gdmFsdWUgKiAyOwoJCQkJfQoJCQl9CgoJCQljb25zdCBjaGlsZCA9IG5ldyBDaGlsZCgxMCk7CgoJCQkvLyBNb2NrIGNvbnN0cnVjdG9yIHNob3VsZCBoYXZlIHJ1bgoJCQlleHBlY3QoY2hpbGQubW9ja0luaXRpYWxpemVkKS50by5lcXVhbCh0cnVlKTsKCQkJZXhwZWN0KGNoaWxkLm1vY2tWYWx1ZSkudG8uZXF1YWwoMTApOwoJCQlleHBlY3QoTW9jay5pbnN0KCkuY29uc3RydWN0b3IuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB2YWx1ZTogMTAgfSk7CgoJCQkvLyBDaGlsZCBjb25zdHJ1Y3RvciBzaG91bGQgaGF2ZSBydW4gYWZ0ZXIKCQkJZXhwZWN0KGNoaWxkLmNoaWxkSW5pdGlhbGl6ZWQpLnRvLmVxdWFsKHRydWUpOwoJCQlleHBlY3QoY2hpbGQuY2hpbGRWYWx1ZSkudG8uZXF1YWwoMjApOwoKCQkJLy8gTWV0aG9kcyBzaG91bGQgc3RpbGwgd29yawoJCQlleHBlY3QoY2hpbGQuZ2V0VmFsdWUoJ3Rlc3QnKSkudG8uZXF1YWwoJ21vY2stdmFsdWUnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgbm90IGV4cG9zZSBfbW9ja0luZGV4IGluIGRlZXAgZXF1YWwgY29tcGFyaXNvbnMnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJY29uc3RydWN0b3I6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJY29udGV4dC5zZWxmLm5hbWUgPSBjb250ZXh0LmFyZ3MubmFtZTsKCQkJCX0pLmFyZ3MoJ25hbWUnKQoJCQl9KSk7CgoJCQljb25zdCBpbnN0YW5jZSA9IG5ldyBNb2NrKCd0ZXN0Jyk7CgoJCQlleHBlY3QoaW5zdGFuY2UpLnRvLmRlZXAuZXF1YWwoeyBuYW1lOiAndGVzdCcgfSk7CgkJfSk7CgoJCWl0KCd3aWxsIHN5bmMgcGxhaW4gdmFsdWUgbWVtYmVycyBiZXR3ZWVuIGluc3RhbmNlIGFuZCBNb2NrLmluc3QoKScsICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQluYW1lOiBudWxsLAoJCQkJY291bnQ6IDAKCQkJfSkpOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgoJCQkvLyBJbml0aWFsIHZhbHVlcyBmcm9tIGRlZmluaXRpb24KCQkJZXhwZWN0KGluc3QubmFtZSkudG8uZXF1YWwobnVsbCk7CgkJCWV4cGVjdChpbnN0LmNvdW50KS50by5lcXVhbCgwKTsKCgkJCS8vIFNldHRpbmcgb24gaW5zdGFuY2Ugc3luY3MgdG8gTW9jay5pbnN0KCkKCQkJaW5zdC5uYW1lID0gJ3Rlc3QnOwoJCQlpbnN0LmNvdW50ID0gNDI7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkubmFtZSkudG8uZXF1YWwoJ3Rlc3QnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5jb3VudCkudG8uZXF1YWwoNDIpOwoKCQkJLy8gU2V0dGluZyBvbiBNb2NrLmluc3QoKSBzeW5jcyB0byBpbnN0YW5jZQoJCQlNb2NrLmluc3QoMCkubmFtZSA9ICdjaGFuZ2VkJzsKCQkJZXhwZWN0KGluc3QubmFtZSkudG8uZXF1YWwoJ2NoYW5nZWQnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgaXNvbGF0ZSBwbGFpbiB2YWx1ZSBtZW1iZXJzIGJldHdlZW4gY2xhc3MgaW5zdGFuY2VzJywgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCXZhbHVlOiBudWxsCgkJCX0pKTsKCgkJCWNvbnN0IGluc3QxID0gbmV3IE1vY2soKTsKCQkJY29uc3QgaW5zdDIgPSBuZXcgTW9jaygpOwoKCQkJaW5zdDEudmFsdWUgPSAnZmlyc3QnOwoJCQlpbnN0Mi52YWx1ZSA9ICdzZWNvbmQnOwoKCQkJZXhwZWN0KGluc3QxLnZhbHVlKS50by5lcXVhbCgnZmlyc3QnKTsKCQkJZXhwZWN0KGluc3QyLnZhbHVlKS50by5lcXVhbCgnc2Vjb25kJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkudmFsdWUpLnRvLmVxdWFsKCdmaXJzdCcpOwoJCQlleHBlY3QoTW9jay5pbnN0KDEpLnZhbHVlKS50by5lcXVhbCgnc2Vjb25kJyk7CgkJfSk7CgoJCWl0KCd3aWxsIGFsbG93IHByZS1jb25maWd1cmluZyBwbGFpbiB2YWx1ZSBtZW1iZXJzIGJlZm9yZSBpbnN0YW50aWF0aW9uJywgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbmZpZzogbnVsbAoJCQl9KSk7CgoJCQkvLyBQcmUtY29uZmlndXJlIGJlZm9yZSBpbnN0YW50aWF0aW9uCgkJCU1vY2suaW5zdCgwKS5jb25maWcgPSAncHJlc2V0LXZhbHVlJzsKCgkJCWNvbnN0IGluc3QgPSBuZXcgTW9jaygpOwoJCQlleHBlY3QoaW5zdC5jb25maWcpLnRvLmVxdWFsKCdwcmVzZXQtdmFsdWUnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3VwcG9ydCBtaXhpbmcgcGxhaW4gdmFsdWVzIGFuZCBtZXRob2RzIGluIGNsYXNzJywgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCW5hbWU6IG51bGwsCgkJCQlncmVldDogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdncmVldGluZycpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgpLmdyZWV0LnJldCgnSGVsbG8hJyk7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCQkJaW5zdC5uYW1lID0gJ1dvcmxkJzsKCgkJCWV4cGVjdChpbnN0Lm5hbWUpLnRvLmVxdWFsKCdXb3JsZCcpOwoJCQlleHBlY3QoTW9jay5pbnN0KDApLm5hbWUpLnRvLmVxdWFsKCdXb3JsZCcpOwoJCQlleHBlY3QoaW5zdC5ncmVldCgnSGknKSkudG8uZXF1YWwoJ0hlbGxvIScpOwoJCQlleHBlY3QoTW9jay5pbnN0KCkuZ3JlZXQuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBncmVldGluZzogJ0hpJyB9KTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3VwcG9ydCBuZXN0ZWQgb2JqZWN0cyB3aXRoIG1ldGhvZHMnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJZGI6IG1vY2t5Lm9iamVjdCh7CgkJCQkJcXVlcnk6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnc3FsJyksCgkJCQkJY2xvc2U6IG1vY2t5LmZ1bmN0aW9uKCkKCQkJCX0pCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgwKS5kYi5xdWVyeS5yZXQoeyByb3dzOiBbJ2EnLCAnYiddIH0pOwoJCQlNb2NrLmluc3QoMCkuZGIuY2xvc2UucmV0KHRydWUpOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgoJCQlleHBlY3QoaW5zdC5kYi5xdWVyeSgnU0VMRUNUIConKSkudG8uZGVlcC5lcXVhbCh7IHJvd3M6IFsnYScsICdiJ10gfSk7CgkJCWV4cGVjdChpbnN0LmRiLmNsb3NlKCkpLnRvLmVxdWFsKHRydWUpOwoJCQlleHBlY3QoTW9jay5pbnN0KDApLmRiLnF1ZXJ5LmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgc3FsOiAnU0VMRUNUIConIH0pOwoJCX0pOwoJfSk7CgoJZGVzY3JpYmUoJ3NweScsICgpID0+IHsKCQlpdCgnd2lsbCBzcHkgb24gbWV0aG9kIGFuZCBjYWxsIHRocm91Z2ggdG8gb3JpZ2luYWwnLCAoKSA9PiB7CgkJCWNvbnN0IG9iaiA9IHsKCQkJCWdyZWV0OiBmdW5jdGlvbihuYW1lKSB7CgkJCQkJcmV0dXJuIGBIZWxsbywgJHtuYW1lfSFgOwoJCQkJfQoJCQl9OwoKCQkJY29uc3Qgc3B5ID0gbW9ja3kuc3B5KG9iaiwgJ2dyZWV0Jyk7CgoJCQljb25zdCByZXN1bHQgPSBvYmouZ3JlZXQoJ1dvcmxkJyk7CgoJCQlleHBlY3QocmVzdWx0KS50by5lcXVhbCgnSGVsbG8sIFdvcmxkIScpOwoJCQlleHBlY3Qoc3B5LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQkJZXhwZWN0KHNweS5jYWxscygwKSkudG8uZGVlcC5lcXVhbChbJ1dvcmxkJ10pOwoJCX0pOwoKCQlpdCgnd2lsbCB0cmFjayBtdWx0aXBsZSBjYWxscyB0byBzcGllZCBtZXRob2QnLCAoKSA9PiB7CgkJCWNvbnN0IG9iaiA9IHsKCQkJCWFkZDogZnVuY3Rpb24oYSwgYikgewoJCQkJCXJldHVybiBhICsgYjsKCQkJCX0KCQkJfTsKCgkJCWNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdhZGQnKTsKCgkJCWV4cGVjdChvYmouYWRkKDIsIDMpKS50by5lcXVhbCg1KTsKCQkJZXhwZWN0KG9iai5hZGQoMTAsIDIwKSkudG8uZXF1YWwoMzApOwoKCQkJZXhwZWN0KHNweS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMik7CgkJCWV4cGVjdChzcHkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoWzIsIDNdKTsKCQkJZXhwZWN0KHNweS5jYWxscygxKSkudG8uZGVlcC5lcXVhbChbMTAsIDIwXSk7CgkJfSk7CgoJCWl0KCd3aWxsIG92ZXJyaWRlIHJldHVybiB2YWx1ZSB3aXRoIHJldCgpIHdoaWxlIHN0aWxsIHRyYWNraW5nJywgKCkgPT4gewoJCQljb25zdCBvYmogPSB7CgkJCQlnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuICdvcmlnaW5hbCc7CgkJCQl9CgkJCX07CgoJCQljb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnZ2V0VmFsdWUnKTsKCQkJc3B5LnJldCgnb3ZlcnJpZGRlbicpOwoKCQkJY29uc3QgcmVzdWx0ID0gb2JqLmdldFZhbHVlKCk7CgoJCQlleHBlY3QocmVzdWx0KS50by5lcXVhbCgnb3ZlcnJpZGRlbicpOwoJCQlleHBlY3Qoc3B5LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3B5IHdpdGggcmVwbGFjZW1lbnQgZnVuY3Rpb24nLCAoKSA9PiB7CgkJCWNvbnN0IG9iaiA9IHsKCQkJCWNhbGN1bGF0ZTogZnVuY3Rpb24oeCwgeSkgewoJCQkJCXJldHVybiB4ICogeTsKCQkJCX0KCQkJfTsKCgkJCWNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdjYWxjdWxhdGUnLCBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnLCAneScpKTsKCQkJc3B5LnJldCgxMDApOwoKCQkJY29uc3QgcmVzdWx0ID0gb2JqLmNhbGN1bGF0ZSg1LCAzKTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDEwMCk7CgkJCWV4cGVjdChzcHkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB4OiA1LCB5OiAzIH0pOwoJCX0pOwoKCQlpdCgnd2lsbCByZXN0b3JlIG9yaWdpbmFsIG1ldGhvZCcsICgpID0+IHsKCQkJY29uc3Qgb2JqID0gewoJCQkJZG9UaGluZzogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuICdvcmlnaW5hbCc7CgkJCQl9CgkJCX07CgoJCQljb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnZG9UaGluZycpOwoJCQlzcHkucmV0KCdzcGllZCcpOwoKCQkJZXhwZWN0KG9iai5kb1RoaW5nKCkpLnRvLmVxdWFsKCdzcGllZCcpOwoKCQkJc3B5LnJlc3RvcmUoKTsKCgkJCWV4cGVjdChvYmouZG9UaGluZygpKS50by5lcXVhbCgnb3JpZ2luYWwnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3B5IG9uIGNsYXNzIHByb3RvdHlwZSBtZXRob2QnLCAoKSA9PiB7CgkJCWNsYXNzIE15Q2xhc3MgewoJCQkJZ3JlZXQobmFtZSkgewoJCQkJCXJldHVybiBgSGVsbG8sICR7bmFtZX1gOwoJCQkJfQoJCQl9CgoJCQljb25zdCBzcHkgPSBtb2NreS5zcHkoTXlDbGFzcy5wcm90b3R5cGUsICdncmVldCcpOwoKCQkJY29uc3QgaW5zdGFuY2UgPSBuZXcgTXlDbGFzcygpOwoJCQljb25zdCByZXN1bHQgPSBpbnN0YW5jZS5ncmVldCgnVGVzdCcpOwoKCQkJZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJ0hlbGxvLCBUZXN0Jyk7CgkJCWV4cGVjdChzcHkuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCQlleHBlY3Qoc3B5LmNhbGxzKDApKS50by5kZWVwLmVxdWFsKFsnVGVzdCddKTsKCgkJCXNweS5yZXN0b3JlKCk7CgkJfSk7CgoJCWl0KCd3aWxsIHNweSB3aXRoIGN1c3RvbSByZXBsYWNlbWVudCBib2R5IHRoYXQgY2FsbHMgdGhyb3VnaCcsICgpID0+IHsKCQkJY29uc3Qgb2JqID0gewoJCQkJbXVsdGlwbHk6IGZ1bmN0aW9uKGEsIGIpIHsKCQkJCQlyZXR1cm4gYSAqIGI7CgkJCQl9CgkJCX07CgoJCQljb25zdCBvcmlnaW5hbCA9IG9iai5tdWx0aXBseTsKCQkJY29uc3Qgc3B5ID0gbW9ja3kuc3B5KG9iaiwgJ211bHRpcGx5JywgbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCWNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsLmFwcGx5KGNvbnRleHQuc2VsZiwgY29udGV4dC5yYXdBcmdzKTsKCQkJCXJldHVybiByZXN1bHQgKiAyOyAvLyBEb3VibGUgdGhlIHJlc3VsdAoJCQl9KSk7CgoJCQljb25zdCByZXN1bHQgPSBvYmoubXVsdGlwbHkoMywgNCk7CgoJCQlleHBlY3QocmVzdWx0KS50by5lcXVhbCgyNCk7IC8vICgzICogNCkgKiAyCgkJCWV4cGVjdChzcHkuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoKCQkJc3B5LnJlc3RvcmUoKTsKCQl9KTsKCgkJaXQoJ3dpbGwgcHJlc2VydmUgdGhpcyBjb250ZXh0IHdoZW4gc3B5aW5nJywgKCkgPT4gewoJCQljb25zdCBvYmogPSB7CgkJCQl2YWx1ZTogNDIsCgkJCQlnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuIHRoaXMudmFsdWU7CgkJCQl9CgkJCX07CgoJCQljb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnZ2V0VmFsdWUnKTsKCgkJCWNvbnN0IHJlc3VsdCA9IG9iai5nZXRWYWx1ZSgpOwoKCQkJZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoNDIpOwoJCQlleHBlY3Qoc3B5LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCgkJCXNweS5yZXN0b3JlKCk7CgkJfSk7CgoJCWl0KCd3aWxsIHByb3ZpZGUgY29udGV4dC5vcmlnaW5hbCBpbiByZXBsYWNlbWVudCBidWlsZGVyJywgKCkgPT4gewoJCQljb25zdCBvYmogPSB7CgkJCQlhZGQ6IGZ1bmN0aW9uKGEsIGIpIHsKCQkJCQlyZXR1cm4gYSArIGI7CgkJCQl9CgkJCX07CgoJCQljb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnYWRkJywgbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCS8vIENhbGwgb3JpZ2luYWwgYW5kIG1vZGlmeSByZXN1bHQKCQkJCWNvbnN0IG9yaWdpbmFsUmVzdWx0ID0gY29udGV4dC5vcmlnaW5hbC5hcHBseShjb250ZXh0LnNlbGYsIGNvbnRleHQucmF3QXJncyk7CgkJCQlyZXR1cm4gb3JpZ2luYWxSZXN1bHQgKiAxMDsKCQkJfSkuYXJncygneCcsICd5JykpOwoKCQkJY29uc3QgcmVzdWx0ID0gb2JqLmFkZCgzLCA0KTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDcwKTsgLy8gKDMgKyA0KSAqIDEwCgkJCWV4cGVjdChzcHkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB4OiAzLCB5OiA0IH0pOwoKCQkJc3B5LnJlc3RvcmUoKTsKCQl9KTsKCX0pOwp9KTsKAAAAAAAAAADLWwAAAAAAAAAAAAA",
|
|
997
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvw"
|
|
998
|
+
],
|
|
999
|
+
[
|
|
1000
|
+
5,
|
|
1001
|
+
1,
|
|
1002
|
+
"revert",
|
|
1003
|
+
null,
|
|
1004
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAADLWwAAY29uc3QgeyBleHBlY3QgfSA9IHJlcXVpcmUoJ2NoYWknKTsKY29uc3QgbW9ja3kgPSByZXF1aXJlKCcuLi9zcmMvbGlsLW1vY2t5LmpzJyk7CgoKZGVzY3JpYmUoJ2xpbC1tb2NreScsICgpID0+IHsKCWRlc2NyaWJlKCdmdW5jdGlvbicsICgpID0+IHsKCQlpdCgnd2lsbCBidWlsZCBkaXJlY3RseSB3aXRob3V0IG1vY2t5LmNyZWF0ZScsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygneCcsICd5JykuYnVpbGQoKTsKCQkJbW9jay5yZXQoJ3Jlc3VsdCcpOwoKCQkJZXhwZWN0KG1vY2soMSwgMikpLnRvLmVxdWFsKCdyZXN1bHQnKTsKCQkJZXhwZWN0KG1vY2suY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB4OiAxLCB5OiAyIH0pOwoJCX0pOwoJCWl0KCd3aWxsIGJlIGEgZnVuY3Rpb24gd2l0aCBhcmdzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZmlyc3RBcmcnLCB7IHNlY29uZEFyZzogJ3Rlc3REZWZhdWx0JyB9KSk7CgkJCW1vY2sucmV0KCd0ZXN0UmV0Jyk7CgoJCQlleHBlY3QobW9jaygndGVzdEFyZycpKS50by5lcXVhbCgndGVzdFJldCcpOwoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CgkJCQlmaXJzdEFyZzogJ3Rlc3RBcmcnLAoJCQkJc2Vjb25kQXJnOiAndGVzdERlZmF1bHQnCgkJCX0pOwoJCQlleHBlY3QobW9jay5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJfSk7CgkJaXQoJ3dpbGwgYmUgYSBmdW5jdGlvbiB3aXRoIGN1c3RvbSByZXR1cm4nLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCXJldHVybiBjb250ZXh0LnJldDsKCQkJfSkuYXJncygnZmlyc3RBcmcnKSk7CgkJCW1vY2sucmV0KCd0ZXN0UmV0Jyk7CgoJCQlleHBlY3QobW9jaygndGVzdEFyZycpKS50by5lcXVhbCgndGVzdFJldCcpOwoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGZpcnN0QXJnOiAndGVzdEFyZycgfSk7CgkJCWV4cGVjdChtb2NrLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCQlpdCgnd2lsbCB1c2UgYXJnU2VsZWN0IHdpdGggc2luZ2xlIGluZGV4IHRvIHJldHVybiByYXcgYXJndW1lbnQnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hcmdTZWxlY3QoMSkpOwoJCQltb2NrLnJldCgndGVzdFJldCcpOwoKCQkJY29uc3QgcmVzdWx0ID0gbW9jaygnZmlyc3QnLCB7IHRlc3Q6ICdkYXRhJyB9LCAndGhpcmQnKTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCd0ZXN0UmV0Jyk7CgkJCS8vIFdoZW4gYXJnU2VsZWN0IGhhcyBzaW5nbGUgaW5kZXgsIGNhbGxzIHJldHVybnMgdGhlIHJhdyBhcmd1bWVudAoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHRlc3Q6ICdkYXRhJyB9KTsKCQl9KTsKCQlpdCgnd2lsbCB1c2UgYXJnU2VsZWN0IHdpdGggbXVsdGlwbGUgaW5kZXhlcyB0byBmaWx0ZXIgbmFtZWQgYXJncycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2ZpcnN0JywgJ3NlY29uZCcsICd0aGlyZCcpLmFyZ1NlbGVjdCgwLCAyKSk7CgoJCQltb2NrKCd2YWx1ZTEnLCAndmFsdWUyJywgJ3ZhbHVlMycpOwoKCQkJLy8gT25seSBmaXJzdCBhbmQgdGhpcmQgYXJlIGNhcHR1cmVkCgkJCWV4cGVjdChtb2NrLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsKCQkJCWZpcnN0OiAndmFsdWUxJywKCQkJCXRoaXJkOiAndmFsdWUzJwoJCQl9KTsKCQl9KTsKCQlpdCgnd2lsbCBkZWVwIGNsb25lIGFyZ3VtZW50cyB0byBwcmV2ZW50IG11dGF0aW9uJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZGF0YScpKTsKCgkJCWNvbnN0IG9iaiA9IHsgbmVzdGVkOiB7IHZhbHVlOiAnb3JpZ2luYWwnIH0gfTsKCQkJbW9jayhvYmopOwoKCQkJLy8gTXV0YXRlIHRoZSBvcmlnaW5hbAoJCQlvYmoubmVzdGVkLnZhbHVlID0gJ211dGF0ZWQnOwoKCQkJLy8gU3RvcmVkIGNhbGwgc2hvdWxkIGJlIHVuY2hhbmdlZAoJCQlleHBlY3QobW9jay5jYWxscygwKS5kYXRhLm5lc3RlZC52YWx1ZSkudG8uZXF1YWwoJ29yaWdpbmFsJyk7CgkJfSk7CgkJaXQoJ3dpbGwgcmVzZXQgZnVuY3Rpb24gc3RhdGUgaW5jbHVkaW5nIGNhbGxzLCByZXR1cm5zIGFuZCBkYXRhJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQljb250ZXh0LnN0YXRlLmRhdGEuY291bnRlciA9IChjb250ZXh0LnN0YXRlLmRhdGEuY291bnRlciB8fCAwKSArIDE7CgkJCQlyZXR1cm4gY29udGV4dC5yZXQ7CgkJCX0pLmFyZ3MoJ2FyZycpKTsKCQkJbW9jay5yZXQoJ3Rlc3QtcmV0Jyk7CgoJCQltb2NrKCdjYWxsMScpOwoJCQltb2NrKCdjYWxsMicpOwoKCQkJZXhwZWN0KG1vY2suY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDIpOwoJCQlleHBlY3QobW9jay5kYXRhKCdjb3VudGVyJykpLnRvLmVxdWFsKDIpOwoKCQkJbW9jay5yZXNldCgpOwoKCQkJZXhwZWN0KG1vY2suY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDApOwoJCQlleHBlY3QobW9jaygnY2FsbDMnKSkudG8uZXF1YWwodW5kZWZpbmVkKTsgLy8gUmV0dXJuIHZhbHVlcyBjbGVhcmVkCgkJCWV4cGVjdChtb2NrLmRhdGEoJ2NvdW50ZXInKSkudG8uZXF1YWwoMSk7IC8vIFJlc3RhcnRlZCBmcm9tIHNjcmF0Y2gKCQkJZXhwZWN0KG1vY2suZGF0YSgpKS50by5kZWVwLmVxdWFsKHsgY291bnRlcjogMSB9KTsKCQl9KTsKCQlpdCgnd2lsbCBwcm92aWRlIGNvbnRleHQgd2l0aCBjYWxsLCBhcmdzLCByZXQsIHN0YXRlIGFuZCBkYXRhJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQljb250ZXh0LnN0YXRlLmRhdGEuYWxsSXRlbXMgPSBjb250ZXh0LnN0YXRlLmRhdGEuYWxsSXRlbXMgfHwgW107CgkJCQljb250ZXh0LnN0YXRlLmRhdGEuYWxsSXRlbXMucHVzaCguLi5jb250ZXh0LmFyZ3MuaXRlbXMpOwoJCQkJcmV0dXJuIHsKCQkJCQljYWxsOiBjb250ZXh0LmNhbGwsCgkJCQkJYXJnczogY29udGV4dC5hcmdzLAoJCQkJCXJldDogY29udGV4dC5yZXQsCgkJCQkJaGFzU3RhdGU6IHR5cGVvZiBjb250ZXh0LnN0YXRlID09PSAnb2JqZWN0JywKCQkJCQloYXNEYXRhOiB0eXBlb2YgY29udGV4dC5zdGF0ZS5kYXRhID09PSAnb2JqZWN0JwoJCQkJfTsKCQkJfSkuYXJncygnaXRlbXMnKSk7CgkJCW1vY2sucmV0KCdjdXN0b20tcmV0Jyk7CgoJCQljb25zdCByZXN1bHQgPSBtb2NrKFsnYScsICdiJ10pOwoKCQkJZXhwZWN0KHJlc3VsdC5jYWxsKS50by5lcXVhbCgxKTsKCQkJZXhwZWN0KHJlc3VsdC5hcmdzKS50by5kZWVwLmVxdWFsKHsgaXRlbXM6IFsnYScsICdiJ10gfSk7CgkJCWV4cGVjdChyZXN1bHQucmV0KS50by5lcXVhbCgnY3VzdG9tLXJldCcpOwoJCQlleHBlY3QocmVzdWx0Lmhhc1N0YXRlKS50by5lcXVhbCh0cnVlKTsKCQkJZXhwZWN0KHJlc3VsdC5oYXNEYXRhKS50by5lcXVhbCh0cnVlKTsKCgkJCS8vIERhdGEgYWNjdW11bGF0ZXMgYWNyb3NzIGNhbGxzCgkJCW1vY2soWydjJ10pOwoJCQlleHBlY3QobW9jay5kYXRhKCdhbGxJdGVtcycpKS50by5kZWVwLmVxdWFsKFsnYScsICdiJywgJ2MnXSk7CgkJfSk7Cgl9KTsKCglkZXNjcmliZSgnb2JqZWN0JywgKCkgPT4gewoJCWl0KCd3aWxsIGJlIG9iamVjdCB3aXRoIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQlydW46IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZmlyc3RBcmcnKQoJCQl9KSk7CgoJCQltb2NrLnJ1bi5yZXQoJ3Rlc3RSZXQnKTsKCQkJZXhwZWN0KG1vY2sucnVuKCd0ZXN0QXJnJykpLnRvLmVxdWFsKCd0ZXN0UmV0Jyk7CgkJCWV4cGVjdChtb2NrLnJ1bi5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGZpcnN0QXJnOiAndGVzdEFyZycgfSk7CgkJCWV4cGVjdChtb2NrLnJ1bi5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJfSk7CgkJaXQoJ3dpbGwgYmUgb2JqZWN0IHdpdGggbmVzdGVkIG9iamVjdCBhbmQgZnVuY3Rpb24nLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKCQkJCXN1YjogbW9ja3kub2JqZWN0KHsKCQkJCQlydW46IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZmlyc3RBcmcnKQoJCQkJfSkKCQkJfSkpOwoJCQltb2NrLnN1Yi5ydW4ucmV0KCd0ZXN0UmV0Jyk7CgoJCQlleHBlY3QobW9jay5zdWIucnVuKCd0ZXN0QXJnJykpLnRvLmVxdWFsKCd0ZXN0UmV0Jyk7CgkJCWV4cGVjdChtb2NrLnN1Yi5ydW4uY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBmaXJzdEFyZzogJ3Rlc3RBcmcnIH0pOwoJCQlleHBlY3QobW9jay5zdWIucnVuLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCQlpdCgnd2lsbCByZXNldCBhbGwgbmVzdGVkIG1vY2tzIHdoZW4gb2JqZWN0IGlzIHJlc2V0JywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQltZXRob2QxOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2FyZycpLAoJCQkJbmVzdGVkOiBtb2NreS5vYmplY3QoewoJCQkJCW1ldGhvZDI6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnYXJnJykKCQkJCX0pCgkJCX0pKTsKCgkJCW1vY2subWV0aG9kMS5yZXQoJ3JldDEnKTsKCQkJbW9jay5uZXN0ZWQubWV0aG9kMi5yZXQoJ3JldDInKTsKCgkJCW1vY2subWV0aG9kMSgnY2FsbDEnKTsKCQkJbW9jay5uZXN0ZWQubWV0aG9kMignY2FsbDInKTsKCgkJCWV4cGVjdChtb2NrLm1ldGhvZDEuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCQlleHBlY3QobW9jay5uZXN0ZWQubWV0aG9kMi5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgoJCQkvLyBSZXNldCBzaG91bGQgcHJvcGFnYXRlIHRvIGFsbCBuZXN0ZWQgbW9ja3MKCQkJbW9jay5yZXNldCgpOwoKCQkJZXhwZWN0KG1vY2subWV0aG9kMS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMCk7CgkJCWV4cGVjdChtb2NrLm5lc3RlZC5tZXRob2QyLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgwKTsKCQkJZXhwZWN0KG1vY2subWV0aG9kMSgndGVzdCcpKS50by5lcXVhbCh1bmRlZmluZWQpOwoJCQlleHBlY3QobW9jay5uZXN0ZWQubWV0aG9kMigndGVzdCcpKS50by5lcXVhbCh1bmRlZmluZWQpOwoJCX0pOwoJCWl0KCd3aWxsIGJlIG9iamVjdCB3aXRoIHByb3BlcnR5IGdldHRlciBhbmQgc2V0dGVyJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQlhY2Nlc3NvcjogbW9ja3kucHJvcGVydHkoKQoJCQl9KSk7CgoJCQkvLyBJbml0aWFsIHZhbHVlIHNob3VsZCBiZSB1bmRlZmluZWQKCQkJZXhwZWN0KG1vY2suYWNjZXNzb3IpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgoJCQkvLyBTZXQgYSB2YWx1ZQoJCQltb2NrLmFjY2Vzc29yID0gJ3Rlc3RWYWx1ZSc7CgkJCWV4cGVjdChtb2NrLmFjY2Vzc29yKS50by5lcXVhbCgndGVzdFZhbHVlJyk7CgoJCQkvLyBDaGFuZ2UgdGhlIHZhbHVlCgkJCW1vY2suYWNjZXNzb3IgPSAnbmV3VmFsdWUnOwoJCQlleHBlY3QobW9jay5hY2Nlc3NvcikudG8uZXF1YWwoJ25ld1ZhbHVlJyk7CgkJfSk7CgkJaXQoJ3dpbGwgcmVzZXQgYWxsIHByb3BlcnR5IHR5cGVzIHRvIGluaXRpYWwgdmFsdWVzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQljb3VudGVyOiA0MiwKCQkJCW5hbWU6ICdBbGljZScsCgkJCQltZXRob2Q6IG1vY2t5LmZ1bmN0aW9uKCksCgkJCQlhY2Nlc3NvcjogbW9ja3kucHJvcGVydHkoKQoJCQl9KSk7CgoJCQkvLyBNb2RpZnkgYWxsIHByb3BlcnRpZXMKCQkJbW9jay5jb3VudGVyID0gMTAwOwoJCQltb2NrLm5hbWUgPSAnQm9iJzsKCQkJbW9jay5tZXRob2QucmV0KCd0ZXN0Jyk7CgkJCW1vY2subWV0aG9kKCk7CgkJCW1vY2suYWNjZXNzb3IgPSAndmFsdWUnOwoKCQkJLy8gQWRkIGR5bmFtaWMgcHJvcGVydHkKCQkJbW9jay5hZGRlZCA9ICduZXcnOwoKCQkJbW9jay5yZXNldCgpOwoKCQkJLy8gUGxhaW4gdmFsdWVzIHJlc2V0CgkJCWV4cGVjdChtb2NrLmNvdW50ZXIpLnRvLmVxdWFsKDQyKTsKCQkJZXhwZWN0KG1vY2submFtZSkudG8uZXF1YWwoJ0FsaWNlJyk7CgoJCQkvLyBNZXRob2RzIHJlc2V0CgkJCWV4cGVjdChtb2NrLm1ldGhvZC5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMCk7CgoJCQkvLyBtb2NreS5wcm9wZXJ0eSgpIHJlc2V0cyB0byB1bmRlZmluZWQKCQkJZXhwZWN0KG1vY2suYWNjZXNzb3IpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgoJCQkvLyBEeW5hbWljIHByb3BlcnRpZXMgZGVsZXRlZAoJCQlleHBlY3QobW9jay5hZGRlZCkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJZXhwZWN0KCdhZGRlZCcgaW4gbW9jaykudG8uZXF1YWwoZmFsc2UpOwoJCX0pOwoJCWl0KCd3aWxsIHN1cHBvcnQgU3ltYm9sIHByb3BlcnRpZXMgYW5kIHJlc2V0IHRoZW0gY29ycmVjdGx5JywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBjdXN0b21TeW1ib2wgPSBTeW1ib2woJ2N1c3RvbScpOwoJCQljb25zdCBhZGRlZFN5bWJvbCA9IFN5bWJvbCgnYWRkZWQnKTsKCgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKCQkJCVtTeW1ib2wuaXRlcmF0b3JdOiBtb2NreS5mdW5jdGlvbigpLAoJCQkJW2N1c3RvbVN5bWJvbF06ICdpbml0aWFsVmFsdWUnCgkJCX0pKTsKCgkJCS8vIFZlcmlmeSBTeW1ib2wgcHJvcGVydGllcyB3b3JrCgkJCWV4cGVjdCh0eXBlb2YgbW9ja1tTeW1ib2wuaXRlcmF0b3JdKS50by5lcXVhbCgnZnVuY3Rpb24nKTsKCQkJZXhwZWN0KG1vY2tbY3VzdG9tU3ltYm9sXSkudG8uZXF1YWwoJ2luaXRpYWxWYWx1ZScpOwoKCQkJLy8gQ29uZmlndXJlIGFuZCB1c2UgU3ltYm9sIGZ1bmN0aW9uCgkJCW1vY2tbU3ltYm9sLml0ZXJhdG9yXS5yZXQoJ2l0ZXJhdG9yUmVzdWx0Jyk7CgkJCWV4cGVjdChtb2NrW1N5bWJvbC5pdGVyYXRvcl0oKSkudG8uZXF1YWwoJ2l0ZXJhdG9yUmVzdWx0Jyk7CgkJCWV4cGVjdChtb2NrW1N5bWJvbC5pdGVyYXRvcl0uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoKCQkJLy8gTW9kaWZ5IFN5bWJvbCB2YWx1ZSBhbmQgYWRkIGR5bmFtaWMgU3ltYm9sCgkJCW1vY2tbY3VzdG9tU3ltYm9sXSA9ICdtb2RpZmllZFZhbHVlJzsKCQkJbW9ja1thZGRlZFN5bWJvbF0gPSAnYWRkZWQnOwoKCQkJLy8gUmVzZXQKCQkJbW9jay5yZXNldCgpOwoKCQkJLy8gU3ltYm9sIGZ1bmN0aW9uIG1vY2sgd2FzIHJlc2V0CgkJCWV4cGVjdChtb2NrW1N5bWJvbC5pdGVyYXRvcl0uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDApOwoJCQlleHBlY3QobW9ja1tTeW1ib2wuaXRlcmF0b3JdKCkpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgoJCQkvLyBTeW1ib2wgcGxhaW4gcHJvcGVydHkgd2FzIHJlc3RvcmVkCgkJCWV4cGVjdChtb2NrW2N1c3RvbVN5bWJvbF0pLnRvLmVxdWFsKCdpbml0aWFsVmFsdWUnKTsKCgkJCS8vIER5bmFtaWMgU3ltYm9sIHByb3BlcnR5IHdhcyBkZWxldGVkCgkJCWV4cGVjdChtb2NrW2FkZGVkU3ltYm9sXSkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJZXhwZWN0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobW9jaykuaW5jbHVkZXMoYWRkZWRTeW1ib2wpKS50by5lcXVhbChmYWxzZSk7CgkJfSk7CgkJaXQoJ3dpbGwgaGFuZGxlIG51bGwgYW5kIHVuZGVmaW5lZCBwcm9wZXJ0eSB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKCQkJCW51bGxQcm9wOiBudWxsLAoJCQkJdW5kZWZpbmVkUHJvcDogdW5kZWZpbmVkLAoJCQkJemVyb1Byb3A6IDAsCgkJCQlmYWxzZVByb3A6IGZhbHNlLAoJCQkJZW1wdHlTdHJpbmdQcm9wOiAnJwoJCQl9KSk7CgoJCQkvLyBWZXJpZnkgaW5pdGlhbCB2YWx1ZXMKCQkJZXhwZWN0KG1vY2subnVsbFByb3ApLnRvLmVxdWFsKG51bGwpOwoJCQlleHBlY3QobW9jay51bmRlZmluZWRQcm9wKS50by5lcXVhbCh1bmRlZmluZWQpOwoJCQlleHBlY3QobW9jay56ZXJvUHJvcCkudG8uZXF1YWwoMCk7CgkJCWV4cGVjdChtb2NrLmZhbHNlUHJvcCkudG8uZXF1YWwoZmFsc2UpOwoJCQlleHBlY3QobW9jay5lbXB0eVN0cmluZ1Byb3ApLnRvLmVxdWFsKCcnKTsKCgkJCS8vIE1vZGlmeSB2YWx1ZXMKCQkJbW9jay5udWxsUHJvcCA9ICdjaGFuZ2VkJzsKCQkJbW9jay51bmRlZmluZWRQcm9wID0gJ2NoYW5nZWQnOwoJCQltb2NrLnplcm9Qcm9wID0gMTAwOwoJCQltb2NrLmZhbHNlUHJvcCA9IHRydWU7CgkJCW1vY2suZW1wdHlTdHJpbmdQcm9wID0gJ2NoYW5nZWQnOwoKCQkJLy8gUmVzZXQKCQkJbW9jay5yZXNldCgpOwoKCQkJLy8gVmVyaWZ5IHJlc3RvcmVkIHRvIGluaXRpYWwgdmFsdWVzCgkJCWV4cGVjdChtb2NrLm51bGxQcm9wKS50by5lcXVhbChudWxsKTsKCQkJZXhwZWN0KG1vY2sudW5kZWZpbmVkUHJvcCkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJZXhwZWN0KG1vY2suemVyb1Byb3ApLnRvLmVxdWFsKDApOwoJCQlleHBlY3QobW9jay5mYWxzZVByb3ApLnRvLmVxdWFsKGZhbHNlKTsKCQkJZXhwZWN0KG1vY2suZW1wdHlTdHJpbmdQcm9wKS50by5lcXVhbCgnJyk7CgkJfSk7Cgl9KTsKCglkZXNjcmliZSgnY2xhc3MnLCAoKSA9PiB7CgkJaXQoJ3dpbGwgYmUgY2xhc3Mgd2l0aCBjb25zdHJ1Y3RvciBhbmQgbWV0aG9kJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2luaXRBcmcnKSwKCQkJCXJ1bjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdmaXJzdEFyZycpCgkJCX0pKTsKCQkJTW9jay5pbnN0KCkucnVuLnJldCgndGVzdFJldCcpOwoKCQkJY29uc3QgbW9ja0luc3RhbmNlID0gbmV3IE1vY2soJ3Rlc3RPcHRpb24nKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmNvbnN0cnVjdG9yLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgaW5pdEFyZzogJ3Rlc3RPcHRpb24nIH0pOwoJCQlleHBlY3QoTW9jay5pbnN0KCkuY29uc3RydWN0b3IuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoKCQkJZXhwZWN0KG1vY2tJbnN0YW5jZS5ydW4oJ3Rlc3RBcmcnKSkudG8uZXF1YWwoJ3Rlc3RSZXQnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLnJ1bi5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGZpcnN0QXJnOiAndGVzdEFyZycgfSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5ydW4uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCX0pOwoKCQlpdCgnd2lsbCBiZSBjbGFzcyB3aXRoIGNvbnN0cnVjdG9yIGFuZCBidWlsZGVyIG1ldGhvZHMnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJaW5kZXg6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJcmV0dXJuIGNvbnRleHQuc2VsZjsKCQkJCX0pLmFyZ3MoJ2luZGV4JyksCgkJCQluYW1lc3BhY2U6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJcmV0dXJuIGNvbnRleHQuc2VsZjsKCQkJCX0pLmFyZ3MoJ25hbWVzcGFjZScpLAoJCQkJcXVlcnk6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJcmV0dXJuIGNvbnRleHQuc2VsZjsKCQkJCX0pLmFyZ3MoJ3F1ZXJ5JykKCQkJfSkpOwoKCQkJY29uc3QgbW9ja0luc3RhbmNlID0gbmV3IE1vY2soKTsKCQkJbW9ja0luc3RhbmNlLmluZGV4KCd0ZXN0LWluZGV4JykubmFtZXNwYWNlKCd0ZXN0LW5hbWVzcGFjZScpLnF1ZXJ5KHsgdGVzdDogJ3F1ZXJ5JyB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmluZGV4LmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgaW5kZXg6ICd0ZXN0LWluZGV4JyB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmluZGV4LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLm5hbWVzcGFjZS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IG5hbWVzcGFjZTogJ3Rlc3QtbmFtZXNwYWNlJyB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLm5hbWVzcGFjZS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5xdWVyeS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHF1ZXJ5OiB7IHRlc3Q6ICdxdWVyeScgfSB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLnF1ZXJ5LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCgkJaXQoJ3dpbGwgZGVtb25zdHJhdGUgdGhhdCBzdGF0ZS5kYXRhIGlzIHBlci1tZXRob2QsIG5vdCBzaGFyZWQnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IENvdW50ZXIgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJY29uc3RydWN0b3I6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJLy8gc3RhdGUuZGF0YSBoZXJlIGlzIHNlcGFyYXRlIGZyb20gb3RoZXIgbWV0aG9kcwoJCQkJCWNvbnRleHQuc3RhdGUuZGF0YS5jb25zdHJ1Y3RvckRhdGEgPSAnc2V0IGluIGNvbnN0cnVjdG9yJzsKCQkJCX0pLmFyZ3MoJ3N0YXJ0VmFsdWUnKSwKCQkJCWdldENvbnN0cnVjdG9yRGF0YTogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCQkvLyBUaGlzIHN0YXRlLmRhdGEgaXMgZGlmZmVyZW50IGZyb20gY29uc3RydWN0b3IncyBzdGF0ZS5kYXRhCgkJCQkJcmV0dXJuIGNvbnRleHQuc3RhdGUuZGF0YS5jb25zdHJ1Y3RvckRhdGE7IC8vIFdpbGwgYmUgdW5kZWZpbmVkCgkJCQl9KQoJCQl9KSk7CgoJCQljb25zdCBjb3VudGVyID0gbmV3IENvdW50ZXIoMTApOwoJCQkvLyBUaGlzIHdpbGwgYmUgdW5kZWZpbmVkIGJlY2F1c2UgZWFjaCBtZXRob2QgaGFzIGl0cyBvd24gc3RhdGUuZGF0YQoJCQlleHBlY3QoY291bnRlci5nZXRDb25zdHJ1Y3RvckRhdGEoKSkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3RvcmUgZGF0YSBvbiBpbnN0YW5jZSB2aWEgY29udGV4dC5zZWxmIGluIGNvbnN0cnVjdG9yJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBDb3VudGVyID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJCS8vIFN0b3JlIGRhdGEgZGlyZWN0bHkgb24gdGhlIGluc3RhbmNlCgkJCQkJY29udGV4dC5zZWxmLl9jb3VudCA9IGNvbnRleHQuYXJncy5zdGFydFZhbHVlIHx8IDA7CgkJCQkJY29udGV4dC5zZWxmLl9pbml0aWFsaXplZCA9IHRydWU7CgkJCQl9KS5hcmdzKCdzdGFydFZhbHVlJyksCgkJCQlpbmNyZW1lbnQ6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJY29udGV4dC5zZWxmLl9jb3VudCsrOwoJCQkJCXJldHVybiBjb250ZXh0LnNlbGYuX2NvdW50OwoJCQkJfSksCgkJCQlnZXRDb3VudDogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCQlyZXR1cm4gY29udGV4dC5zZWxmLl9jb3VudDsKCQkJCX0pLAoJCQkJaXNJbml0aWFsaXplZDogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCQlyZXR1cm4gY29udGV4dC5zZWxmLl9pbml0aWFsaXplZDsKCQkJCX0pCgkJCX0pKTsKCgkJCWNvbnN0IGNvdW50ZXIxID0gbmV3IENvdW50ZXIoMTApOwoJCQlleHBlY3QoY291bnRlcjEuX2luaXRpYWxpemVkKS50by5lcXVhbCh0cnVlKTsKCQkJZXhwZWN0KGNvdW50ZXIxLmlzSW5pdGlhbGl6ZWQoKSkudG8uZXF1YWwodHJ1ZSk7CgkJCWV4cGVjdChjb3VudGVyMS5nZXRDb3VudCgpKS50by5lcXVhbCgxMCk7CgkJCWV4cGVjdChjb3VudGVyMS5pbmNyZW1lbnQoKSkudG8uZXF1YWwoMTEpOwoJCQlleHBlY3QoY291bnRlcjEuaW5jcmVtZW50KCkpLnRvLmVxdWFsKDEyKTsKCQkJZXhwZWN0KGNvdW50ZXIxLmdldENvdW50KCkpLnRvLmVxdWFsKDEyKTsKCgkJCS8vIFNlY29uZCBpbnN0YW5jZSBzaG91bGQgaGF2ZSBzZXBhcmF0ZSBkYXRhCgkJCWNvbnN0IGNvdW50ZXIyID0gbmV3IENvdW50ZXIoNSk7CgkJCWV4cGVjdChjb3VudGVyMi5nZXRDb3VudCgpKS50by5lcXVhbCg1KTsKCQkJZXhwZWN0KGNvdW50ZXIyLmluY3JlbWVudCgpKS50by5lcXVhbCg2KTsKCgkJCS8vIEZpcnN0IGluc3RhbmNlIHNob3VsZCBiZSB1bmFmZmVjdGVkCgkJCWV4cGVjdChjb3VudGVyMS5nZXRDb3VudCgpKS50by5lcXVhbCgxMik7CgkJfSk7CgoJCWl0KCd3aWxsIHRyYWNrIG51bWJlciBvZiBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoIG51bUluc3RzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3ZhbHVlJykKCQkJfSkpOwoKCQkJZXhwZWN0KE1vY2subnVtSW5zdHMoKSkudG8uZXF1YWwoMCk7CgoJCQljb25zdCBpbnN0MSA9IG5ldyBNb2NrKCdmaXJzdCcpOwoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgxKTsKCgkJCWNvbnN0IGluc3QyID0gbmV3IE1vY2soJ3NlY29uZCcpOwoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgyKTsKCgkJCWNvbnN0IGluc3QzID0gbmV3IE1vY2soJ3RoaXJkJyk7CgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDMpOwoJCX0pOwoKCQlpdCgnd2lsbCByZXNldCBhbGwgaW5zdGFuY2VzIGFuZCBjb3VudGVycycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQljb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd2YWx1ZScpLAoJCQkJcnVuOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2FyZycpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgwKS5ydW4ucmV0KCdmaXJzdC1yZXQnKTsKCQkJTW9jay5pbnN0KDEpLnJ1bi5yZXQoJ3NlY29uZC1yZXQnKTsKCgkJCWNvbnN0IGluc3QxID0gbmV3IE1vY2soJ2ZpcnN0Jyk7CgkJCWNvbnN0IGluc3QyID0gbmV3IE1vY2soJ3NlY29uZCcpOwoKCQkJZXhwZWN0KGluc3QxLnJ1bigndGVzdCcpKS50by5lcXVhbCgnZmlyc3QtcmV0Jyk7CgkJCWV4cGVjdChpbnN0Mi5ydW4oJ3Rlc3QnKSkudG8uZXF1YWwoJ3NlY29uZC1yZXQnKTsKCQkJZXhwZWN0KE1vY2subnVtSW5zdHMoKSkudG8uZXF1YWwoMik7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkucnVuLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCgkJCS8vIFJlc2V0IHNob3VsZCBjbGVhciBldmVyeXRoaW5nCgkJCU1vY2sucmVzZXQoKTsKCgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDApOwoKCQkJLy8gQWZ0ZXIgcmVzZXQsIG5ldyBpbnN0YW5jZXMgc3RhcnQgZnJvbSBpbmRleCAwIGFnYWluCgkJCWNvbnN0IGluc3QzID0gbmV3IE1vY2soJ3RoaXJkJyk7CgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDEpOwoJCQkvLyBSZXR1cm5zIHNob3VsZCBiZSBjbGVhcmVkCgkJCWV4cGVjdChpbnN0My5ydW4oJ3Rlc3QnKSkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJLy8gQ2FsbHMgc2hvdWxkIGJlIGNsZWFyZWQKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5ydW4uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOyAvLyBKdXN0IHRoaXMgb25lIGNhbGwKCQl9KTsKCgkJaXQoJ3dpbGwgcmVzZXQgcGxhaW4gdmFsdWUgcHJvcGVydGllcyB0byBpbml0aWFsIHZhbHVlcycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQluYW1lOiBudWxsLAoJCQkJY291bnQ6IDAKCQkJfSkpOwoKCQkJLy8gQ3JlYXRlIGFuZCBtb2RpZnkgaW5zdGFuY2VzCgkJCWNvbnN0IGluc3QxID0gbmV3IE1vY2soKTsKCQkJaW5zdDEubmFtZSA9ICdmaXJzdCc7CgkJCWluc3QxLmNvdW50ID0gMTA7CgoJCQljb25zdCBpbnN0MiA9IG5ldyBNb2NrKCk7CgkJCWluc3QyLm5hbWUgPSAnc2Vjb25kJzsKCQkJaW5zdDIuY291bnQgPSAyMDsKCgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDIpOwoJCQlleHBlY3QoTW9jay5pbnN0KDApLm5hbWUpLnRvLmVxdWFsKCdmaXJzdCcpOwoJCQlleHBlY3QoTW9jay5pbnN0KDEpLmNvdW50KS50by5lcXVhbCgyMCk7CgoJCQkvLyBSZXNldAoJCQlNb2NrLnJlc2V0KCk7CgoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgwKTsKCgkJCS8vIEFmdGVyIHJlc2V0LCBkZXNjcmlwdGlvbnMgYXJlIGZyZXNoIHdpdGggaW5pdGlhbCB2YWx1ZXMKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5uYW1lKS50by5lcXVhbChudWxsKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5jb3VudCkudG8uZXF1YWwoMCk7CgoJCQkvLyBOZXcgaW5zdGFuY2UgZ2V0cyBpbml0aWFsIHZhbHVlcwoJCQljb25zdCBpbnN0MyA9IG5ldyBNb2NrKCk7CgkJCWV4cGVjdChpbnN0My5uYW1lKS50by5lcXVhbChudWxsKTsKCQkJZXhwZWN0KGluc3QzLmNvdW50KS50by5lcXVhbCgwKTsKCQl9KTsKCgkJaXQoJ3dpbGwgcHJlLWNvbmZpZ3VyZSBpbnN0YW5jZXMgYmVmb3JlIGluc3RhbnRpYXRpb24nLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJcnVuOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2FyZycpCgkJCX0pKTsKCgkJCS8vIENvbmZpZ3VyZSBpbnN0YW5jZXMgYmVmb3JlIHRoZXkncmUgY3JlYXRlZAoJCQlNb2NrLmluc3QoMCkucnVuLnJldCgnZmlyc3QtdmFsdWUnKTsKCQkJTW9jay5pbnN0KDEpLnJ1bi5yZXQoJ3NlY29uZC12YWx1ZScpOwoJCQlNb2NrLmluc3QoMikucnVuLnJldCgndGhpcmQtdmFsdWUnKTsKCgkJCWNvbnN0IGluc3QxID0gbmV3IE1vY2soKTsKCQkJY29uc3QgaW5zdDIgPSBuZXcgTW9jaygpOwoJCQljb25zdCBpbnN0MyA9IG5ldyBNb2NrKCk7CgoJCQlleHBlY3QoaW5zdDEucnVuKCd0ZXN0JykpLnRvLmVxdWFsKCdmaXJzdC12YWx1ZScpOwoJCQlleHBlY3QoaW5zdDIucnVuKCd0ZXN0JykpLnRvLmVxdWFsKCdzZWNvbmQtdmFsdWUnKTsKCQkJZXhwZWN0KGluc3QzLnJ1bigndGVzdCcpKS50by5lcXVhbCgndGhpcmQtdmFsdWUnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3VwcG9ydCBhc3luYyBtZXRob2RzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWZldGNoRGF0YTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdpZCcpLmFzeW5jKCkKCQkJfSkpOwoKCQkJTW9jay5pbnN0KCkuZmV0Y2hEYXRhLnJldCgnYXN5bmMtcmVzdWx0Jyk7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCQkJY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5zdC5mZXRjaERhdGEoJ3Rlc3QtaWQnKTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdhc3luYy1yZXN1bHQnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmZldGNoRGF0YS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGlkOiAndGVzdC1pZCcgfSk7CgkJfSk7CgoJCWl0KCd3aWxsIHRocm93IGVycm9ycyBmcm9tIGNsYXNzIG1ldGhvZHMnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJdGhyb3dFcnJvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdtZXNzYWdlJykKCQkJfSkpOwoKCQkJY29uc3QgdGVzdEVycm9yID0gbmV3IEVycm9yKCdUZXN0IGVycm9yJyk7CgkJCU1vY2suaW5zdCgpLnRocm93RXJyb3IucmV0KHRlc3RFcnJvcik7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCgkJCWV4cGVjdCgoKSA9PiBpbnN0LnRocm93RXJyb3IoJ2ZhaWwnKSkudG8udGhyb3coJ1Rlc3QgZXJyb3InKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLnRocm93RXJyb3IuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBtZXNzYWdlOiAnZmFpbCcgfSk7CgkJfSk7CgoJCWl0KCd3aWxsIGhhbmRsZSBvblJldCBoYW5kbGVycyBpbiBjbGFzcyBtZXRob2RzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNhbGN1bGF0ZTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4JywgJ3knKQoJCQl9KSk7CgoJCQlNb2NrLmluc3QoKS5jYWxjdWxhdGUub25SZXQoKGFyZ3MpID0+IHsKCQkJCXJldHVybiBhcmdzLnggKyBhcmdzLnk7CgkJCX0pOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgoJCQlleHBlY3QoaW5zdC5jYWxjdWxhdGUoNSwgMykpLnRvLmVxdWFsKDgpOwoJCQlleHBlY3QoaW5zdC5jYWxjdWxhdGUoMTAsIDIwKSkudG8uZXF1YWwoMzApOwoJCX0pOwoKCQlpdCgnd2lsbCBoYW5kbGUgZGlmZmVyZW50IHJldHVybiB2YWx1ZXMgcGVyIGNhbGwnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJZ2V0VmFsdWU6IG1vY2t5LmZ1bmN0aW9uKCkKCQkJfSkpOwoKCQkJTW9jay5pbnN0KCkuZ2V0VmFsdWUucmV0KCdkZWZhdWx0Jyk7CgkJCU1vY2suaW5zdCgpLmdldFZhbHVlLnJldCgnZmlyc3QtY2FsbCcsIDEpOwoJCQlNb2NrLmluc3QoKS5nZXRWYWx1ZS5yZXQoJ3NlY29uZC1jYWxsJywgMik7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCgkJCWV4cGVjdChpbnN0LmdldFZhbHVlKCkpLnRvLmVxdWFsKCdmaXJzdC1jYWxsJyk7CgkJCWV4cGVjdChpbnN0LmdldFZhbHVlKCkpLnRvLmVxdWFsKCdzZWNvbmQtY2FsbCcpOwoJCQlleHBlY3QoaW5zdC5nZXRWYWx1ZSgpKS50by5lcXVhbCgnZGVmYXVsdCcpOyAvLyBGYWxscyBiYWNrIHRvIGNhbGwgMAoJCX0pOwoKCQlpdCgnd2lsbCBzdXBwb3J0IGNsYXNzIGluaGVyaXRhbmNlIHdpdGggc3VwZXIgY2FsbHMnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJY29uc3RydWN0b3I6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJY29udGV4dC5zZWxmLm1vY2tJbml0aWFsaXplZCA9IHRydWU7CgkJCQkJY29udGV4dC5zZWxmLm1vY2tWYWx1ZSA9IGNvbnRleHQuYXJncy52YWx1ZTsKCQkJCX0pLmFyZ3MoJ3ZhbHVlJyksCgkJCQlnZXRWYWx1ZTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4JykKCQkJfSkpOwoKCQkJTW9jay5pbnN0KCkuZ2V0VmFsdWUucmV0KCdtb2NrLXZhbHVlJyk7CgoJCQljbGFzcyBDaGlsZCBleHRlbmRzIE1vY2sgewoJCQkJY29uc3RydWN0b3IodmFsdWUpIHsKCQkJCQlzdXBlcih2YWx1ZSk7CgkJCQkJdGhpcy5jaGlsZEluaXRpYWxpemVkID0gdHJ1ZTsKCQkJCQl0aGlzLmNoaWxkVmFsdWUgPSB2YWx1ZSAqIDI7CgkJCQl9CgkJCQlnZXRWYWx1ZSh4KSB7CgkJCQkJY29uc3QgcGFyZW50UmVzdWx0ID0gc3VwZXIuZ2V0VmFsdWUoeCk7CgkJCQkJcmV0dXJuIGBjaGlsZC0ke3BhcmVudFJlc3VsdH1gOwoJCQkJfQoJCQl9CgoJCQljb25zdCBjaGlsZCA9IG5ldyBDaGlsZCgxMCk7CgoJCQkvLyBNb2NrIGNvbnN0cnVjdG9yIHNob3VsZCBoYXZlIHJ1bgoJCQlleHBlY3QoY2hpbGQubW9ja0luaXRpYWxpemVkKS50by5lcXVhbCh0cnVlKTsKCQkJZXhwZWN0KGNoaWxkLm1vY2tWYWx1ZSkudG8uZXF1YWwoMTApOwoJCQlleHBlY3QoTW9jay5pbnN0KCkuY29uc3RydWN0b3IuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB2YWx1ZTogMTAgfSk7CgoJCQkvLyBDaGlsZCBjb25zdHJ1Y3RvciBzaG91bGQgaGF2ZSBydW4gYWZ0ZXIKCQkJZXhwZWN0KGNoaWxkLmNoaWxkSW5pdGlhbGl6ZWQpLnRvLmVxdWFsKHRydWUpOwoJCQlleHBlY3QoY2hpbGQuY2hpbGRWYWx1ZSkudG8uZXF1YWwoMjApOwoKCQkJLy8gQ2hpbGQncyBvdmVycmlkZGVuIG1ldGhvZCBjYWxscyBzdXBlciBhbmQgd3JhcHMgcmVzdWx0CgkJCWNvbnN0IHJlc3VsdCA9IGNoaWxkLmdldFZhbHVlKCd0ZXN0Jyk7CgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdjaGlsZC1tb2NrLXZhbHVlJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5nZXRWYWx1ZS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHg6ICd0ZXN0JyB9KTsKCQl9KTsKCgkJaXQoJ3dpbGwgbm90IGV4cG9zZSBfbW9ja0luZGV4IGluIGRlZXAgZXF1YWwgY29tcGFyaXNvbnMnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJY29uc3RydWN0b3I6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJY29udGV4dC5zZWxmLm5hbWUgPSBjb250ZXh0LmFyZ3MubmFtZTsKCQkJCX0pLmFyZ3MoJ25hbWUnKQoJCQl9KSk7CgoJCQljb25zdCBpbnN0YW5jZSA9IG5ldyBNb2NrKCd0ZXN0Jyk7CgoJCQlleHBlY3QoaW5zdGFuY2UpLnRvLmRlZXAuZXF1YWwoeyBuYW1lOiAndGVzdCcgfSk7CgkJfSk7CgoJCWl0KCd3aWxsIHN5bmMgcGxhaW4gdmFsdWUgbWVtYmVycyBiZXR3ZWVuIGluc3RhbmNlIGFuZCBNb2NrLmluc3QoKScsICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQluYW1lOiBudWxsLAoJCQkJY291bnQ6IDAKCQkJfSkpOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgoJCQkvLyBJbml0aWFsIHZhbHVlcyBmcm9tIGRlZmluaXRpb24KCQkJZXhwZWN0KGluc3QubmFtZSkudG8uZXF1YWwobnVsbCk7CgkJCWV4cGVjdChpbnN0LmNvdW50KS50by5lcXVhbCgwKTsKCgkJCS8vIFNldHRpbmcgb24gaW5zdGFuY2Ugc3luY3MgdG8gTW9jay5pbnN0KCkKCQkJaW5zdC5uYW1lID0gJ3Rlc3QnOwoJCQlpbnN0LmNvdW50ID0gNDI7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkubmFtZSkudG8uZXF1YWwoJ3Rlc3QnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5jb3VudCkudG8uZXF1YWwoNDIpOwoKCQkJLy8gU2V0dGluZyBvbiBNb2NrLmluc3QoKSBzeW5jcyB0byBpbnN0YW5jZQoJCQlNb2NrLmluc3QoMCkubmFtZSA9ICdjaGFuZ2VkJzsKCQkJZXhwZWN0KGluc3QubmFtZSkudG8uZXF1YWwoJ2NoYW5nZWQnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgaXNvbGF0ZSBwbGFpbiB2YWx1ZSBtZW1iZXJzIGJldHdlZW4gY2xhc3MgaW5zdGFuY2VzJywgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCXZhbHVlOiBudWxsCgkJCX0pKTsKCgkJCWNvbnN0IGluc3QxID0gbmV3IE1vY2soKTsKCQkJY29uc3QgaW5zdDIgPSBuZXcgTW9jaygpOwoKCQkJaW5zdDEudmFsdWUgPSAnZmlyc3QnOwoJCQlpbnN0Mi52YWx1ZSA9ICdzZWNvbmQnOwoKCQkJZXhwZWN0KGluc3QxLnZhbHVlKS50by5lcXVhbCgnZmlyc3QnKTsKCQkJZXhwZWN0KGluc3QyLnZhbHVlKS50by5lcXVhbCgnc2Vjb25kJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkudmFsdWUpLnRvLmVxdWFsKCdmaXJzdCcpOwoJCQlleHBlY3QoTW9jay5pbnN0KDEpLnZhbHVlKS50by5lcXVhbCgnc2Vjb25kJyk7CgkJfSk7CgoJCWl0KCd3aWxsIGFsbG93IHByZS1jb25maWd1cmluZyBwbGFpbiB2YWx1ZSBtZW1iZXJzIGJlZm9yZSBpbnN0YW50aWF0aW9uJywgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbmZpZzogbnVsbAoJCQl9KSk7CgoJCQkvLyBQcmUtY29uZmlndXJlIGJlZm9yZSBpbnN0YW50aWF0aW9uCgkJCU1vY2suaW5zdCgwKS5jb25maWcgPSAncHJlc2V0LXZhbHVlJzsKCgkJCWNvbnN0IGluc3QgPSBuZXcgTW9jaygpOwoJCQlleHBlY3QoaW5zdC5jb25maWcpLnRvLmVxdWFsKCdwcmVzZXQtdmFsdWUnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3VwcG9ydCBtaXhpbmcgcGxhaW4gdmFsdWVzIGFuZCBtZXRob2RzIGluIGNsYXNzJywgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCW5hbWU6IG51bGwsCgkJCQlncmVldDogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdncmVldGluZycpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgpLmdyZWV0LnJldCgnSGVsbG8hJyk7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCQkJaW5zdC5uYW1lID0gJ1dvcmxkJzsKCgkJCWV4cGVjdChpbnN0Lm5hbWUpLnRvLmVxdWFsKCdXb3JsZCcpOwoJCQlleHBlY3QoTW9jay5pbnN0KDApLm5hbWUpLnRvLmVxdWFsKCdXb3JsZCcpOwoJCQlleHBlY3QoaW5zdC5ncmVldCgnSGknKSkudG8uZXF1YWwoJ0hlbGxvIScpOwoJCQlleHBlY3QoTW9jay5pbnN0KCkuZ3JlZXQuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBncmVldGluZzogJ0hpJyB9KTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3VwcG9ydCBuZXN0ZWQgb2JqZWN0cyB3aXRoIG1ldGhvZHMnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJZGI6IG1vY2t5Lm9iamVjdCh7CgkJCQkJcXVlcnk6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnc3FsJyksCgkJCQkJY2xvc2U6IG1vY2t5LmZ1bmN0aW9uKCkKCQkJCX0pCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgwKS5kYi5xdWVyeS5yZXQoeyByb3dzOiBbJ2EnLCAnYiddIH0pOwoJCQlNb2NrLmluc3QoMCkuZGIuY2xvc2UucmV0KHRydWUpOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgoJCQlleHBlY3QoaW5zdC5kYi5xdWVyeSgnU0VMRUNUIConKSkudG8uZGVlcC5lcXVhbCh7IHJvd3M6IFsnYScsICdiJ10gfSk7CgkJCWV4cGVjdChpbnN0LmRiLmNsb3NlKCkpLnRvLmVxdWFsKHRydWUpOwoJCQlleHBlY3QoTW9jay5pbnN0KDApLmRiLnF1ZXJ5LmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgc3FsOiAnU0VMRUNUIConIH0pOwoJCX0pOwoJfSk7CgoJZGVzY3JpYmUoJ3NweScsICgpID0+IHsKCQlpdCgnd2lsbCBzcHkgb24gbWV0aG9kLCBjYWxsIHRocm91Z2gsIHRyYWNrIGNhbGxzIGFuZCBwcmVzZXJ2ZSB0aGlzJywgKCkgPT4gewoJCQljb25zdCBvYmogPSB7CgkJCQl2YWx1ZTogNDIsCgkJCQlncmVldDogZnVuY3Rpb24obmFtZSkgewoJCQkJCXJldHVybiBgSGVsbG8sICR7bmFtZX0hYDsKCQkJCX0sCgkJCQlnZXRWYWx1ZTogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuIHRoaXMudmFsdWU7CgkJCQl9CgkJCX07CgoJCQljb25zdCBncmVldFNweSA9IG1vY2t5LnNweShvYmosICdncmVldCcpOwoJCQljb25zdCB2YWx1ZVNweSA9IG1vY2t5LnNweShvYmosICdnZXRWYWx1ZScpOwoKCQkJLy8gQ2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbAoJCQlleHBlY3Qob2JqLmdyZWV0KCdXb3JsZCcpKS50by5lcXVhbCgnSGVsbG8sIFdvcmxkIScpOwoJCQlleHBlY3Qob2JqLmdyZWV0KCdUZXN0JykpLnRvLmVxdWFsKCdIZWxsbywgVGVzdCEnKTsKCgkJCS8vIFRyYWNrcyBtdWx0aXBsZSBjYWxscwoJCQlleHBlY3QoZ3JlZXRTcHkuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDIpOwoJCQlleHBlY3QoZ3JlZXRTcHkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoWydXb3JsZCddKTsKCQkJZXhwZWN0KGdyZWV0U3B5LmNhbGxzKDEpKS50by5kZWVwLmVxdWFsKFsnVGVzdCddKTsKCgkJCS8vIFByZXNlcnZlcyB0aGlzIGNvbnRleHQKCQkJZXhwZWN0KG9iai5nZXRWYWx1ZSgpKS50by5lcXVhbCg0Mik7CgkJCWV4cGVjdCh2YWx1ZVNweS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgoJCQlncmVldFNweS5yZXN0b3JlKCk7CgkJCXZhbHVlU3B5LnJlc3RvcmUoKTsKCQl9KTsKCgkJaXQoJ3dpbGwgb3ZlcnJpZGUgcmV0dXJuIHZhbHVlIHdpdGggcmV0KCkgd2hpbGUgc3RpbGwgdHJhY2tpbmcnLCAoKSA9PiB7CgkJCWNvbnN0IG9iaiA9IHsKCQkJCWdldFZhbHVlOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gJ29yaWdpbmFsJzsKCQkJCX0KCQkJfTsKCgkJCWNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdnZXRWYWx1ZScpOwoJCQlzcHkucmV0KCdvdmVycmlkZGVuJyk7CgoJCQljb25zdCByZXN1bHQgPSBvYmouZ2V0VmFsdWUoKTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdvdmVycmlkZGVuJyk7CgkJCWV4cGVjdChzcHkuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCX0pOwoKCQlpdCgnd2lsbCByZXN0b3JlIG9yaWdpbmFsIG1ldGhvZCcsICgpID0+IHsKCQkJY29uc3Qgb2JqID0gewoJCQkJZG9UaGluZzogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuICdvcmlnaW5hbCc7CgkJCQl9CgkJCX07CgoJCQljb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnZG9UaGluZycpOwoJCQlzcHkucmV0KCdzcGllZCcpOwoKCQkJZXhwZWN0KG9iai5kb1RoaW5nKCkpLnRvLmVxdWFsKCdzcGllZCcpOwoKCQkJc3B5LnJlc3RvcmUoKTsKCgkJCWV4cGVjdChvYmouZG9UaGluZygpKS50by5lcXVhbCgnb3JpZ2luYWwnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3B5IG9uIGNsYXNzIHByb3RvdHlwZSBtZXRob2QnLCAoKSA9PiB7CgkJCWNsYXNzIE15Q2xhc3MgewoJCQkJZ3JlZXQobmFtZSkgewoJCQkJCXJldHVybiBgSGVsbG8sICR7bmFtZX1gOwoJCQkJfQoJCQl9CgoJCQljb25zdCBzcHkgPSBtb2NreS5zcHkoTXlDbGFzcy5wcm90b3R5cGUsICdncmVldCcpOwoKCQkJY29uc3QgaW5zdGFuY2UgPSBuZXcgTXlDbGFzcygpOwoJCQljb25zdCByZXN1bHQgPSBpbnN0YW5jZS5ncmVldCgnVGVzdCcpOwoKCQkJZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJ0hlbGxvLCBUZXN0Jyk7CgkJCWV4cGVjdChzcHkuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCQlleHBlY3Qoc3B5LmNhbGxzKDApKS50by5kZWVwLmVxdWFsKFsnVGVzdCddKTsKCgkJCXNweS5yZXN0b3JlKCk7CgkJfSk7CgoJCWl0KCd3aWxsIHNweSB3aXRoIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGFuZCBwcm92aWRlIGNvbnRleHQub3JpZ2luYWwnLCAoKSA9PiB7CgkJCWNvbnN0IG9iaiA9IHsKCQkJCWFkZDogZnVuY3Rpb24oYSwgYikgewoJCQkJCXJldHVybiBhICsgYjsKCQkJCX0KCQkJfTsKCgkJCS8vIFJlcGxhY2VtZW50IHdpdGggYXJncyBhbmQgY29udGV4dC5vcmlnaW5hbAoJCQljb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnYWRkJywgbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCWNvbnN0IG9yaWdpbmFsUmVzdWx0ID0gY29udGV4dC5vcmlnaW5hbC5hcHBseShjb250ZXh0LnNlbGYsIGNvbnRleHQucmF3QXJncyk7CgkJCQlyZXR1cm4gb3JpZ2luYWxSZXN1bHQgKiAxMDsKCQkJfSkuYXJncygneCcsICd5JykpOwoKCQkJY29uc3QgcmVzdWx0ID0gb2JqLmFkZCgzLCA0KTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKDcwKTsgLy8gKDMgKyA0KSAqIDEwCgkJCWV4cGVjdChzcHkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB4OiAzLCB5OiA0IH0pOwoKCQkJc3B5LnJlc3RvcmUoKTsKCQl9KTsKCX0pOwp9KTsKAAAAAAAAAADNWwAAAAAAAAAAAAA",
|
|
1005
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMtbAAAAAAAAy1sAAAAAAAAAAAAAAADwvw"
|
|
1006
|
+
],
|
|
1007
|
+
[
|
|
1008
|
+
6,
|
|
1009
|
+
1,
|
|
1010
|
+
"revert",
|
|
1011
|
+
null,
|
|
1012
|
+
"BAAAAAAAAAAAAAAAAAAAAAAAAADNWwAAY29uc3QgeyBleHBlY3QgfSA9IHJlcXVpcmUoJ2NoYWknKTsKY29uc3QgbW9ja3kgPSByZXF1aXJlKCcuLi9zcmMvbGlsLW1vY2t5LmpzJyk7CgoKZGVzY3JpYmUoJ2xpbC1tb2NreScsICgpID0+IHsKCWRlc2NyaWJlKCdmdW5jdGlvbicsICgpID0+IHsKCQlpdCgnd2lsbCBidWlsZCBkaXJlY3RseSB3aXRob3V0IG1vY2t5LmNyZWF0ZScsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygneCcsICd5JykuYnVpbGQoKTsKCQkJbW9jay5yZXQoJ3Jlc3VsdCcpOwoKCQkJZXhwZWN0KG1vY2soMSwgMikpLnRvLmVxdWFsKCdyZXN1bHQnKTsKCQkJZXhwZWN0KG1vY2suY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB4OiAxLCB5OiAyIH0pOwoJCX0pOwoJCWl0KCd3aWxsIGJlIGEgZnVuY3Rpb24gd2l0aCBhcmdzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZmlyc3RBcmcnLCB7IHNlY29uZEFyZzogJ3Rlc3REZWZhdWx0JyB9KSk7CgkJCW1vY2sucmV0KCd0ZXN0UmV0Jyk7CgoJCQlleHBlY3QobW9jaygndGVzdEFyZycpKS50by5lcXVhbCgndGVzdFJldCcpOwoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CgkJCQlmaXJzdEFyZzogJ3Rlc3RBcmcnLAoJCQkJc2Vjb25kQXJnOiAndGVzdERlZmF1bHQnCgkJCX0pOwoJCQlleHBlY3QobW9jay5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJfSk7CgkJaXQoJ3dpbGwgYmUgYSBmdW5jdGlvbiB3aXRoIGN1c3RvbSByZXR1cm4nLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCXJldHVybiBjb250ZXh0LnJldDsKCQkJfSkuYXJncygnZmlyc3RBcmcnKSk7CgkJCW1vY2sucmV0KCd0ZXN0UmV0Jyk7CgoJCQlleHBlY3QobW9jaygndGVzdEFyZycpKS50by5lcXVhbCgndGVzdFJldCcpOwoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGZpcnN0QXJnOiAndGVzdEFyZycgfSk7CgkJCWV4cGVjdChtb2NrLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCQlpdCgnd2lsbCB1c2UgYXJnU2VsZWN0IHdpdGggc2luZ2xlIGluZGV4IHRvIHJldHVybiByYXcgYXJndW1lbnQnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hcmdTZWxlY3QoMSkpOwoJCQltb2NrLnJldCgndGVzdFJldCcpOwoKCQkJY29uc3QgcmVzdWx0ID0gbW9jaygnZmlyc3QnLCB7IHRlc3Q6ICdkYXRhJyB9LCAndGhpcmQnKTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCd0ZXN0UmV0Jyk7CgkJCS8vIFdoZW4gYXJnU2VsZWN0IGhhcyBzaW5nbGUgaW5kZXgsIGNhbGxzIHJldHVybnMgdGhlIHJhdyBhcmd1bWVudAoJCQlleHBlY3QobW9jay5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHRlc3Q6ICdkYXRhJyB9KTsKCQl9KTsKCQlpdCgnd2lsbCB1c2UgYXJnU2VsZWN0IHdpdGggbXVsdGlwbGUgaW5kZXhlcyB0byBmaWx0ZXIgbmFtZWQgYXJncycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2ZpcnN0JywgJ3NlY29uZCcsICd0aGlyZCcpLmFyZ1NlbGVjdCgwLCAyKSk7CgoJCQltb2NrKCd2YWx1ZTEnLCAndmFsdWUyJywgJ3ZhbHVlMycpOwoKCQkJLy8gT25seSBmaXJzdCBhbmQgdGhpcmQgYXJlIGNhcHR1cmVkCgkJCWV4cGVjdChtb2NrLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsKCQkJCWZpcnN0OiAndmFsdWUxJywKCQkJCXRoaXJkOiAndmFsdWUzJwoJCQl9KTsKCQl9KTsKCQlpdCgnd2lsbCBkZWVwIGNsb25lIGFyZ3VtZW50cyB0byBwcmV2ZW50IG11dGF0aW9uJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZGF0YScpKTsKCgkJCWNvbnN0IG9iaiA9IHsgbmVzdGVkOiB7IHZhbHVlOiAnb3JpZ2luYWwnIH0gfTsKCQkJbW9jayhvYmopOwoKCQkJLy8gTXV0YXRlIHRoZSBvcmlnaW5hbAoJCQlvYmoubmVzdGVkLnZhbHVlID0gJ211dGF0ZWQnOwoKCQkJLy8gU3RvcmVkIGNhbGwgc2hvdWxkIGJlIHVuY2hhbmdlZAoJCQlleHBlY3QobW9jay5jYWxscygwKS5kYXRhLm5lc3RlZC52YWx1ZSkudG8uZXF1YWwoJ29yaWdpbmFsJyk7CgkJfSk7CgkJaXQoJ3dpbGwgcmVzZXQgZnVuY3Rpb24gc3RhdGUgaW5jbHVkaW5nIGNhbGxzLCByZXR1cm5zIGFuZCBkYXRhJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQljb250ZXh0LnN0YXRlLmRhdGEuY291bnRlciA9IChjb250ZXh0LnN0YXRlLmRhdGEuY291bnRlciB8fCAwKSArIDE7CgkJCQlyZXR1cm4gY29udGV4dC5yZXQ7CgkJCX0pLmFyZ3MoJ2FyZycpKTsKCQkJbW9jay5yZXQoJ3Rlc3QtcmV0Jyk7CgoJCQltb2NrKCdjYWxsMScpOwoJCQltb2NrKCdjYWxsMicpOwoKCQkJZXhwZWN0KG1vY2suY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDIpOwoJCQlleHBlY3QobW9jay5kYXRhKCdjb3VudGVyJykpLnRvLmVxdWFsKDIpOwoKCQkJbW9jay5yZXNldCgpOwoKCQkJZXhwZWN0KG1vY2suY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDApOwoJCQlleHBlY3QobW9jaygnY2FsbDMnKSkudG8uZXF1YWwodW5kZWZpbmVkKTsgLy8gUmV0dXJuIHZhbHVlcyBjbGVhcmVkCgkJCWV4cGVjdChtb2NrLmRhdGEoJ2NvdW50ZXInKSkudG8uZXF1YWwoMSk7IC8vIFJlc3RhcnRlZCBmcm9tIHNjcmF0Y2gKCQkJZXhwZWN0KG1vY2suZGF0YSgpKS50by5kZWVwLmVxdWFsKHsgY291bnRlcjogMSB9KTsKCQl9KTsKCQlpdCgnd2lsbCBwcm92aWRlIGNvbnRleHQgd2l0aCBjYWxsLCBhcmdzLCByZXQsIHN0YXRlIGFuZCBkYXRhJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQljb250ZXh0LnN0YXRlLmRhdGEuYWxsSXRlbXMgPSBjb250ZXh0LnN0YXRlLmRhdGEuYWxsSXRlbXMgfHwgW107CgkJCQljb250ZXh0LnN0YXRlLmRhdGEuYWxsSXRlbXMucHVzaCguLi5jb250ZXh0LmFyZ3MuaXRlbXMpOwoJCQkJcmV0dXJuIHsKCQkJCQljYWxsOiBjb250ZXh0LmNhbGwsCgkJCQkJYXJnczogY29udGV4dC5hcmdzLAoJCQkJCXJldDogY29udGV4dC5yZXQsCgkJCQkJaGFzU3RhdGU6IHR5cGVvZiBjb250ZXh0LnN0YXRlID09PSAnb2JqZWN0JywKCQkJCQloYXNEYXRhOiB0eXBlb2YgY29udGV4dC5zdGF0ZS5kYXRhID09PSAnb2JqZWN0JwoJCQkJfTsKCQkJfSkuYXJncygnaXRlbXMnKSk7CgkJCW1vY2sucmV0KCdjdXN0b20tcmV0Jyk7CgoJCQljb25zdCByZXN1bHQgPSBtb2NrKFsnYScsICdiJ10pOwoKCQkJZXhwZWN0KHJlc3VsdC5jYWxsKS50by5lcXVhbCgxKTsKCQkJZXhwZWN0KHJlc3VsdC5hcmdzKS50by5kZWVwLmVxdWFsKHsgaXRlbXM6IFsnYScsICdiJ10gfSk7CgkJCWV4cGVjdChyZXN1bHQucmV0KS50by5lcXVhbCgnY3VzdG9tLXJldCcpOwoJCQlleHBlY3QocmVzdWx0Lmhhc1N0YXRlKS50by5lcXVhbCh0cnVlKTsKCQkJZXhwZWN0KHJlc3VsdC5oYXNEYXRhKS50by5lcXVhbCh0cnVlKTsKCgkJCS8vIERhdGEgYWNjdW11bGF0ZXMgYWNyb3NzIGNhbGxzCgkJCW1vY2soWydjJ10pOwoJCQlleHBlY3QobW9jay5kYXRhKCdhbGxJdGVtcycpKS50by5kZWVwLmVxdWFsKFsnYScsICdiJywgJ2MnXSk7CgkJfSk7Cgl9KTsKCglkZXNjcmliZSgnb2JqZWN0JywgKCkgPT4gewoJCWl0KCd3aWxsIGJlIG9iamVjdCB3aXRoIGZ1bmN0aW9uJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQlydW46IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZmlyc3RBcmcnKQoJCQl9KSk7CgoJCQltb2NrLnJ1bi5yZXQoJ3Rlc3RSZXQnKTsKCQkJZXhwZWN0KG1vY2sucnVuKCd0ZXN0QXJnJykpLnRvLmVxdWFsKCd0ZXN0UmV0Jyk7CgkJCWV4cGVjdChtb2NrLnJ1bi5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGZpcnN0QXJnOiAndGVzdEFyZycgfSk7CgkJCWV4cGVjdChtb2NrLnJ1bi5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJfSk7CgkJaXQoJ3dpbGwgYmUgb2JqZWN0IHdpdGggbmVzdGVkIG9iamVjdCBhbmQgZnVuY3Rpb24nLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKCQkJCXN1YjogbW9ja3kub2JqZWN0KHsKCQkJCQlydW46IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZmlyc3RBcmcnKQoJCQkJfSkKCQkJfSkpOwoJCQltb2NrLnN1Yi5ydW4ucmV0KCd0ZXN0UmV0Jyk7CgoJCQlleHBlY3QobW9jay5zdWIucnVuKCd0ZXN0QXJnJykpLnRvLmVxdWFsKCd0ZXN0UmV0Jyk7CgkJCWV4cGVjdChtb2NrLnN1Yi5ydW4uY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBmaXJzdEFyZzogJ3Rlc3RBcmcnIH0pOwoJCQlleHBlY3QobW9jay5zdWIucnVuLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCQlpdCgnd2lsbCByZXNldCBhbGwgbmVzdGVkIG1vY2tzIHdoZW4gb2JqZWN0IGlzIHJlc2V0JywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQltZXRob2QxOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2FyZycpLAoJCQkJbmVzdGVkOiBtb2NreS5vYmplY3QoewoJCQkJCW1ldGhvZDI6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnYXJnJykKCQkJCX0pCgkJCX0pKTsKCgkJCW1vY2subWV0aG9kMS5yZXQoJ3JldDEnKTsKCQkJbW9jay5uZXN0ZWQubWV0aG9kMi5yZXQoJ3JldDInKTsKCgkJCW1vY2subWV0aG9kMSgnY2FsbDEnKTsKCQkJbW9jay5uZXN0ZWQubWV0aG9kMignY2FsbDInKTsKCgkJCWV4cGVjdChtb2NrLm1ldGhvZDEuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCQlleHBlY3QobW9jay5uZXN0ZWQubWV0aG9kMi5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgoJCQkvLyBSZXNldCBzaG91bGQgcHJvcGFnYXRlIHRvIGFsbCBuZXN0ZWQgbW9ja3MKCQkJbW9jay5yZXNldCgpOwoKCQkJZXhwZWN0KG1vY2subWV0aG9kMS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMCk7CgkJCWV4cGVjdChtb2NrLm5lc3RlZC5tZXRob2QyLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgwKTsKCQkJZXhwZWN0KG1vY2subWV0aG9kMSgndGVzdCcpKS50by5lcXVhbCh1bmRlZmluZWQpOwoJCQlleHBlY3QobW9jay5uZXN0ZWQubWV0aG9kMigndGVzdCcpKS50by5lcXVhbCh1bmRlZmluZWQpOwoJCX0pOwoJCWl0KCd3aWxsIGJlIG9iamVjdCB3aXRoIHByb3BlcnR5IGdldHRlciBhbmQgc2V0dGVyJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQlhY2Nlc3NvcjogbW9ja3kucHJvcGVydHkoKQoJCQl9KSk7CgoJCQkvLyBJbml0aWFsIHZhbHVlIHNob3VsZCBiZSB1bmRlZmluZWQKCQkJZXhwZWN0KG1vY2suYWNjZXNzb3IpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgoJCQkvLyBTZXQgYSB2YWx1ZQoJCQltb2NrLmFjY2Vzc29yID0gJ3Rlc3RWYWx1ZSc7CgkJCWV4cGVjdChtb2NrLmFjY2Vzc29yKS50by5lcXVhbCgndGVzdFZhbHVlJyk7CgoJCQkvLyBDaGFuZ2UgdGhlIHZhbHVlCgkJCW1vY2suYWNjZXNzb3IgPSAnbmV3VmFsdWUnOwoJCQlleHBlY3QobW9jay5hY2Nlc3NvcikudG8uZXF1YWwoJ25ld1ZhbHVlJyk7CgkJfSk7CgkJaXQoJ3dpbGwgcmVzZXQgYWxsIHByb3BlcnR5IHR5cGVzIHRvIGluaXRpYWwgdmFsdWVzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5Lm9iamVjdCh7CgkJCQljb3VudGVyOiA0MiwKCQkJCW5hbWU6ICdBbGljZScsCgkJCQltZXRob2Q6IG1vY2t5LmZ1bmN0aW9uKCksCgkJCQlhY2Nlc3NvcjogbW9ja3kucHJvcGVydHkoKQoJCQl9KSk7CgoJCQkvLyBNb2RpZnkgYWxsIHByb3BlcnRpZXMKCQkJbW9jay5jb3VudGVyID0gMTAwOwoJCQltb2NrLm5hbWUgPSAnQm9iJzsKCQkJbW9jay5tZXRob2QucmV0KCd0ZXN0Jyk7CgkJCW1vY2subWV0aG9kKCk7CgkJCW1vY2suYWNjZXNzb3IgPSAndmFsdWUnOwoKCQkJLy8gQWRkIGR5bmFtaWMgcHJvcGVydHkKCQkJbW9jay5hZGRlZCA9ICduZXcnOwoKCQkJbW9jay5yZXNldCgpOwoKCQkJLy8gUGxhaW4gdmFsdWVzIHJlc2V0CgkJCWV4cGVjdChtb2NrLmNvdW50ZXIpLnRvLmVxdWFsKDQyKTsKCQkJZXhwZWN0KG1vY2submFtZSkudG8uZXF1YWwoJ0FsaWNlJyk7CgoJCQkvLyBNZXRob2RzIHJlc2V0CgkJCWV4cGVjdChtb2NrLm1ldGhvZC5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMCk7CgoJCQkvLyBtb2NreS5wcm9wZXJ0eSgpIHJlc2V0cyB0byB1bmRlZmluZWQKCQkJZXhwZWN0KG1vY2suYWNjZXNzb3IpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgoJCQkvLyBEeW5hbWljIHByb3BlcnRpZXMgZGVsZXRlZAoJCQlleHBlY3QobW9jay5hZGRlZCkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJZXhwZWN0KCdhZGRlZCcgaW4gbW9jaykudG8uZXF1YWwoZmFsc2UpOwoJCX0pOwoJCWl0KCd3aWxsIHN1cHBvcnQgU3ltYm9sIHByb3BlcnRpZXMgYW5kIHJlc2V0IHRoZW0gY29ycmVjdGx5JywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBjdXN0b21TeW1ib2wgPSBTeW1ib2woJ2N1c3RvbScpOwoJCQljb25zdCBhZGRlZFN5bWJvbCA9IFN5bWJvbCgnYWRkZWQnKTsKCgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKCQkJCVtTeW1ib2wuaXRlcmF0b3JdOiBtb2NreS5mdW5jdGlvbigpLAoJCQkJW2N1c3RvbVN5bWJvbF06ICdpbml0aWFsVmFsdWUnCgkJCX0pKTsKCgkJCS8vIFZlcmlmeSBTeW1ib2wgcHJvcGVydGllcyB3b3JrCgkJCWV4cGVjdCh0eXBlb2YgbW9ja1tTeW1ib2wuaXRlcmF0b3JdKS50by5lcXVhbCgnZnVuY3Rpb24nKTsKCQkJZXhwZWN0KG1vY2tbY3VzdG9tU3ltYm9sXSkudG8uZXF1YWwoJ2luaXRpYWxWYWx1ZScpOwoKCQkJLy8gQ29uZmlndXJlIGFuZCB1c2UgU3ltYm9sIGZ1bmN0aW9uCgkJCW1vY2tbU3ltYm9sLml0ZXJhdG9yXS5yZXQoJ2l0ZXJhdG9yUmVzdWx0Jyk7CgkJCWV4cGVjdChtb2NrW1N5bWJvbC5pdGVyYXRvcl0oKSkudG8uZXF1YWwoJ2l0ZXJhdG9yUmVzdWx0Jyk7CgkJCWV4cGVjdChtb2NrW1N5bWJvbC5pdGVyYXRvcl0uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoKCQkJLy8gTW9kaWZ5IFN5bWJvbCB2YWx1ZSBhbmQgYWRkIGR5bmFtaWMgU3ltYm9sCgkJCW1vY2tbY3VzdG9tU3ltYm9sXSA9ICdtb2RpZmllZFZhbHVlJzsKCQkJbW9ja1thZGRlZFN5bWJvbF0gPSAnYWRkZWQnOwoKCQkJLy8gUmVzZXQKCQkJbW9jay5yZXNldCgpOwoKCQkJLy8gU3ltYm9sIGZ1bmN0aW9uIG1vY2sgd2FzIHJlc2V0CgkJCWV4cGVjdChtb2NrW1N5bWJvbC5pdGVyYXRvcl0uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDApOwoJCQlleHBlY3QobW9ja1tTeW1ib2wuaXRlcmF0b3JdKCkpLnRvLmVxdWFsKHVuZGVmaW5lZCk7CgoJCQkvLyBTeW1ib2wgcGxhaW4gcHJvcGVydHkgd2FzIHJlc3RvcmVkCgkJCWV4cGVjdChtb2NrW2N1c3RvbVN5bWJvbF0pLnRvLmVxdWFsKCdpbml0aWFsVmFsdWUnKTsKCgkJCS8vIER5bmFtaWMgU3ltYm9sIHByb3BlcnR5IHdhcyBkZWxldGVkCgkJCWV4cGVjdChtb2NrW2FkZGVkU3ltYm9sXSkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJZXhwZWN0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobW9jaykuaW5jbHVkZXMoYWRkZWRTeW1ib2wpKS50by5lcXVhbChmYWxzZSk7CgkJfSk7CgkJaXQoJ3dpbGwgaGFuZGxlIG51bGwgYW5kIHVuZGVmaW5lZCBwcm9wZXJ0eSB2YWx1ZXMnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKCQkJCW51bGxQcm9wOiBudWxsLAoJCQkJdW5kZWZpbmVkUHJvcDogdW5kZWZpbmVkLAoJCQkJemVyb1Byb3A6IDAsCgkJCQlmYWxzZVByb3A6IGZhbHNlLAoJCQkJZW1wdHlTdHJpbmdQcm9wOiAnJwoJCQl9KSk7CgoJCQkvLyBWZXJpZnkgaW5pdGlhbCB2YWx1ZXMKCQkJZXhwZWN0KG1vY2subnVsbFByb3ApLnRvLmVxdWFsKG51bGwpOwoJCQlleHBlY3QobW9jay51bmRlZmluZWRQcm9wKS50by5lcXVhbCh1bmRlZmluZWQpOwoJCQlleHBlY3QobW9jay56ZXJvUHJvcCkudG8uZXF1YWwoMCk7CgkJCWV4cGVjdChtb2NrLmZhbHNlUHJvcCkudG8uZXF1YWwoZmFsc2UpOwoJCQlleHBlY3QobW9jay5lbXB0eVN0cmluZ1Byb3ApLnRvLmVxdWFsKCcnKTsKCgkJCS8vIE1vZGlmeSB2YWx1ZXMKCQkJbW9jay5udWxsUHJvcCA9ICdjaGFuZ2VkJzsKCQkJbW9jay51bmRlZmluZWRQcm9wID0gJ2NoYW5nZWQnOwoJCQltb2NrLnplcm9Qcm9wID0gMTAwOwoJCQltb2NrLmZhbHNlUHJvcCA9IHRydWU7CgkJCW1vY2suZW1wdHlTdHJpbmdQcm9wID0gJ2NoYW5nZWQnOwoKCQkJLy8gUmVzZXQKCQkJbW9jay5yZXNldCgpOwoKCQkJLy8gVmVyaWZ5IHJlc3RvcmVkIHRvIGluaXRpYWwgdmFsdWVzCgkJCWV4cGVjdChtb2NrLm51bGxQcm9wKS50by5lcXVhbChudWxsKTsKCQkJZXhwZWN0KG1vY2sudW5kZWZpbmVkUHJvcCkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJZXhwZWN0KG1vY2suemVyb1Byb3ApLnRvLmVxdWFsKDApOwoJCQlleHBlY3QobW9jay5mYWxzZVByb3ApLnRvLmVxdWFsKGZhbHNlKTsKCQkJZXhwZWN0KG1vY2suZW1wdHlTdHJpbmdQcm9wKS50by5lcXVhbCgnJyk7CgkJfSk7Cgl9KTsKCglkZXNjcmliZSgnY2xhc3MnLCAoKSA9PiB7CgkJaXQoJ3dpbGwgYmUgY2xhc3Mgd2l0aCBjb25zdHJ1Y3RvciBhbmQgbWV0aG9kJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2luaXRBcmcnKSwKCQkJCXJ1bjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdmaXJzdEFyZycpCgkJCX0pKTsKCQkJTW9jay5pbnN0KCkucnVuLnJldCgndGVzdFJldCcpOwoKCQkJY29uc3QgbW9ja0luc3RhbmNlID0gbmV3IE1vY2soJ3Rlc3RPcHRpb24nKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmNvbnN0cnVjdG9yLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgaW5pdEFyZzogJ3Rlc3RPcHRpb24nIH0pOwoJCQlleHBlY3QoTW9jay5pbnN0KCkuY29uc3RydWN0b3IuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoKCQkJZXhwZWN0KG1vY2tJbnN0YW5jZS5ydW4oJ3Rlc3RBcmcnKSkudG8uZXF1YWwoJ3Rlc3RSZXQnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLnJ1bi5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGZpcnN0QXJnOiAndGVzdEFyZycgfSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5ydW4uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwoJCX0pOwoKCQlpdCgnd2lsbCBiZSBjbGFzcyB3aXRoIGNvbnN0cnVjdG9yIGFuZCBidWlsZGVyIG1ldGhvZHMnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJaW5kZXg6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJcmV0dXJuIGNvbnRleHQuc2VsZjsKCQkJCX0pLmFyZ3MoJ2luZGV4JyksCgkJCQluYW1lc3BhY2U6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJcmV0dXJuIGNvbnRleHQuc2VsZjsKCQkJCX0pLmFyZ3MoJ25hbWVzcGFjZScpLAoJCQkJcXVlcnk6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJcmV0dXJuIGNvbnRleHQuc2VsZjsKCQkJCX0pLmFyZ3MoJ3F1ZXJ5JykKCQkJfSkpOwoKCQkJY29uc3QgbW9ja0luc3RhbmNlID0gbmV3IE1vY2soKTsKCQkJbW9ja0luc3RhbmNlLmluZGV4KCd0ZXN0LWluZGV4JykubmFtZXNwYWNlKCd0ZXN0LW5hbWVzcGFjZScpLnF1ZXJ5KHsgdGVzdDogJ3F1ZXJ5JyB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmluZGV4LmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsgaW5kZXg6ICd0ZXN0LWluZGV4JyB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmluZGV4LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLm5hbWVzcGFjZS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IG5hbWVzcGFjZTogJ3Rlc3QtbmFtZXNwYWNlJyB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLm5hbWVzcGFjZS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5xdWVyeS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHF1ZXJ5OiB7IHRlc3Q6ICdxdWVyeScgfSB9KTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLnF1ZXJ5LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCQl9KTsKCgkJaXQoJ3dpbGwgZGVtb25zdHJhdGUgdGhhdCBzdGF0ZS5kYXRhIGlzIHBlci1tZXRob2QsIG5vdCBzaGFyZWQnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IENvdW50ZXIgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJY29uc3RydWN0b3I6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJLy8gc3RhdGUuZGF0YSBoZXJlIGlzIHNlcGFyYXRlIGZyb20gb3RoZXIgbWV0aG9kcwoJCQkJCWNvbnRleHQuc3RhdGUuZGF0YS5jb25zdHJ1Y3RvckRhdGEgPSAnc2V0IGluIGNvbnN0cnVjdG9yJzsKCQkJCX0pLmFyZ3MoJ3N0YXJ0VmFsdWUnKSwKCQkJCWdldENvbnN0cnVjdG9yRGF0YTogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCQkvLyBUaGlzIHN0YXRlLmRhdGEgaXMgZGlmZmVyZW50IGZyb20gY29uc3RydWN0b3IncyBzdGF0ZS5kYXRhCgkJCQkJcmV0dXJuIGNvbnRleHQuc3RhdGUuZGF0YS5jb25zdHJ1Y3RvckRhdGE7IC8vIFdpbGwgYmUgdW5kZWZpbmVkCgkJCQl9KQoJCQl9KSk7CgoJCQljb25zdCBjb3VudGVyID0gbmV3IENvdW50ZXIoMTApOwoJCQkvLyBUaGlzIHdpbGwgYmUgdW5kZWZpbmVkIGJlY2F1c2UgZWFjaCBtZXRob2QgaGFzIGl0cyBvd24gc3RhdGUuZGF0YQoJCQlleHBlY3QoY291bnRlci5nZXRDb25zdHJ1Y3RvckRhdGEoKSkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3RvcmUgZGF0YSBvbiBpbnN0YW5jZSB2aWEgY29udGV4dC5zZWxmIGluIGNvbnN0cnVjdG9yJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBDb3VudGVyID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJCS8vIFN0b3JlIGRhdGEgZGlyZWN0bHkgb24gdGhlIGluc3RhbmNlCgkJCQkJY29udGV4dC5zZWxmLl9jb3VudCA9IGNvbnRleHQuYXJncy5zdGFydFZhbHVlIHx8IDA7CgkJCQkJY29udGV4dC5zZWxmLl9pbml0aWFsaXplZCA9IHRydWU7CgkJCQl9KS5hcmdzKCdzdGFydFZhbHVlJyksCgkJCQlpbmNyZW1lbnQ6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJY29udGV4dC5zZWxmLl9jb3VudCsrOwoJCQkJCXJldHVybiBjb250ZXh0LnNlbGYuX2NvdW50OwoJCQkJfSksCgkJCQlnZXRDb3VudDogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCQlyZXR1cm4gY29udGV4dC5zZWxmLl9jb3VudDsKCQkJCX0pLAoJCQkJaXNJbml0aWFsaXplZDogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCQlyZXR1cm4gY29udGV4dC5zZWxmLl9pbml0aWFsaXplZDsKCQkJCX0pCgkJCX0pKTsKCgkJCWNvbnN0IGNvdW50ZXIxID0gbmV3IENvdW50ZXIoMTApOwoJCQlleHBlY3QoY291bnRlcjEuX2luaXRpYWxpemVkKS50by5lcXVhbCh0cnVlKTsKCQkJZXhwZWN0KGNvdW50ZXIxLmlzSW5pdGlhbGl6ZWQoKSkudG8uZXF1YWwodHJ1ZSk7CgkJCWV4cGVjdChjb3VudGVyMS5nZXRDb3VudCgpKS50by5lcXVhbCgxMCk7CgkJCWV4cGVjdChjb3VudGVyMS5pbmNyZW1lbnQoKSkudG8uZXF1YWwoMTEpOwoJCQlleHBlY3QoY291bnRlcjEuaW5jcmVtZW50KCkpLnRvLmVxdWFsKDEyKTsKCQkJZXhwZWN0KGNvdW50ZXIxLmdldENvdW50KCkpLnRvLmVxdWFsKDEyKTsKCgkJCS8vIFNlY29uZCBpbnN0YW5jZSBzaG91bGQgaGF2ZSBzZXBhcmF0ZSBkYXRhCgkJCWNvbnN0IGNvdW50ZXIyID0gbmV3IENvdW50ZXIoNSk7CgkJCWV4cGVjdChjb3VudGVyMi5nZXRDb3VudCgpKS50by5lcXVhbCg1KTsKCQkJZXhwZWN0KGNvdW50ZXIyLmluY3JlbWVudCgpKS50by5lcXVhbCg2KTsKCgkJCS8vIEZpcnN0IGluc3RhbmNlIHNob3VsZCBiZSB1bmFmZmVjdGVkCgkJCWV4cGVjdChjb3VudGVyMS5nZXRDb3VudCgpKS50by5lcXVhbCgxMik7CgkJfSk7CgoJCWl0KCd3aWxsIHRyYWNrIG51bWJlciBvZiBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoIG51bUluc3RzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3ZhbHVlJykKCQkJfSkpOwoKCQkJZXhwZWN0KE1vY2subnVtSW5zdHMoKSkudG8uZXF1YWwoMCk7CgoJCQljb25zdCBpbnN0MSA9IG5ldyBNb2NrKCdmaXJzdCcpOwoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgxKTsKCgkJCWNvbnN0IGluc3QyID0gbmV3IE1vY2soJ3NlY29uZCcpOwoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgyKTsKCgkJCWNvbnN0IGluc3QzID0gbmV3IE1vY2soJ3RoaXJkJyk7CgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDMpOwoJCX0pOwoKCQlpdCgnd2lsbCByZXNldCBhbGwgaW5zdGFuY2VzIGFuZCBjb3VudGVycycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQljb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd2YWx1ZScpLAoJCQkJcnVuOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2FyZycpCgkJCX0pKTsKCgkJCU1vY2suaW5zdCgwKS5ydW4ucmV0KCdmaXJzdC1yZXQnKTsKCQkJTW9jay5pbnN0KDEpLnJ1bi5yZXQoJ3NlY29uZC1yZXQnKTsKCgkJCWNvbnN0IGluc3QxID0gbmV3IE1vY2soJ2ZpcnN0Jyk7CgkJCWNvbnN0IGluc3QyID0gbmV3IE1vY2soJ3NlY29uZCcpOwoKCQkJZXhwZWN0KGluc3QxLnJ1bigndGVzdCcpKS50by5lcXVhbCgnZmlyc3QtcmV0Jyk7CgkJCWV4cGVjdChpbnN0Mi5ydW4oJ3Rlc3QnKSkudG8uZXF1YWwoJ3NlY29uZC1yZXQnKTsKCQkJZXhwZWN0KE1vY2subnVtSW5zdHMoKSkudG8uZXF1YWwoMik7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkucnVuLmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCgkJCS8vIFJlc2V0IHNob3VsZCBjbGVhciBldmVyeXRoaW5nCgkJCU1vY2sucmVzZXQoKTsKCgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDApOwoKCQkJLy8gQWZ0ZXIgcmVzZXQsIG5ldyBpbnN0YW5jZXMgc3RhcnQgZnJvbSBpbmRleCAwIGFnYWluCgkJCWNvbnN0IGluc3QzID0gbmV3IE1vY2soJ3RoaXJkJyk7CgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDEpOwoJCQkvLyBSZXR1cm5zIHNob3VsZCBiZSBjbGVhcmVkCgkJCWV4cGVjdChpbnN0My5ydW4oJ3Rlc3QnKSkudG8uZXF1YWwodW5kZWZpbmVkKTsKCQkJLy8gQ2FsbHMgc2hvdWxkIGJlIGNsZWFyZWQKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5ydW4uY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOyAvLyBKdXN0IHRoaXMgb25lIGNhbGwKCQl9KTsKCgkJaXQoJ3dpbGwgcmVzZXQgcGxhaW4gdmFsdWUgcHJvcGVydGllcyB0byBpbml0aWFsIHZhbHVlcycsIGFzeW5jICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQluYW1lOiBudWxsLAoJCQkJY291bnQ6IDAKCQkJfSkpOwoKCQkJLy8gQ3JlYXRlIGFuZCBtb2RpZnkgaW5zdGFuY2VzCgkJCWNvbnN0IGluc3QxID0gbmV3IE1vY2soKTsKCQkJaW5zdDEubmFtZSA9ICdmaXJzdCc7CgkJCWluc3QxLmNvdW50ID0gMTA7CgoJCQljb25zdCBpbnN0MiA9IG5ldyBNb2NrKCk7CgkJCWluc3QyLm5hbWUgPSAnc2Vjb25kJzsKCQkJaW5zdDIuY291bnQgPSAyMDsKCgkJCWV4cGVjdChNb2NrLm51bUluc3RzKCkpLnRvLmVxdWFsKDIpOwoJCQlleHBlY3QoTW9jay5pbnN0KDApLm5hbWUpLnRvLmVxdWFsKCdmaXJzdCcpOwoJCQlleHBlY3QoTW9jay5pbnN0KDEpLmNvdW50KS50by5lcXVhbCgyMCk7CgoJCQkvLyBSZXNldAoJCQlNb2NrLnJlc2V0KCk7CgoJCQlleHBlY3QoTW9jay5udW1JbnN0cygpKS50by5lcXVhbCgwKTsKCgkJCS8vIEFmdGVyIHJlc2V0LCBkZXNjcmlwdGlvbnMgYXJlIGZyZXNoIHdpdGggaW5pdGlhbCB2YWx1ZXMKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5uYW1lKS50by5lcXVhbChudWxsKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5jb3VudCkudG8uZXF1YWwoMCk7CgoJCQkvLyBOZXcgaW5zdGFuY2UgZ2V0cyBpbml0aWFsIHZhbHVlcwoJCQljb25zdCBpbnN0MyA9IG5ldyBNb2NrKCk7CgkJCWV4cGVjdChpbnN0My5uYW1lKS50by5lcXVhbChudWxsKTsKCQkJZXhwZWN0KGluc3QzLmNvdW50KS50by5lcXVhbCgwKTsKCQl9KTsKCgkJaXQoJ3dpbGwgcHJlLWNvbmZpZ3VyZSBpbnN0YW5jZXMgYmVmb3JlIGluc3RhbnRpYXRpb24nLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJcnVuOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2FyZycpCgkJCX0pKTsKCgkJCS8vIENvbmZpZ3VyZSBpbnN0YW5jZXMgYmVmb3JlIHRoZXkncmUgY3JlYXRlZAoJCQlNb2NrLmluc3QoMCkucnVuLnJldCgnZmlyc3QtdmFsdWUnKTsKCQkJTW9jay5pbnN0KDEpLnJ1bi5yZXQoJ3NlY29uZC12YWx1ZScpOwoJCQlNb2NrLmluc3QoMikucnVuLnJldCgndGhpcmQtdmFsdWUnKTsKCgkJCWNvbnN0IGluc3QxID0gbmV3IE1vY2soKTsKCQkJY29uc3QgaW5zdDIgPSBuZXcgTW9jaygpOwoJCQljb25zdCBpbnN0MyA9IG5ldyBNb2NrKCk7CgoJCQlleHBlY3QoaW5zdDEucnVuKCd0ZXN0JykpLnRvLmVxdWFsKCdmaXJzdC12YWx1ZScpOwoJCQlleHBlY3QoaW5zdDIucnVuKCd0ZXN0JykpLnRvLmVxdWFsKCdzZWNvbmQtdmFsdWUnKTsKCQkJZXhwZWN0KGluc3QzLnJ1bigndGVzdCcpKS50by5lcXVhbCgndGhpcmQtdmFsdWUnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3VwcG9ydCBhc3luYyBtZXRob2RzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWZldGNoRGF0YTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdpZCcpLmFzeW5jKCkKCQkJfSkpOwoKCQkJTW9jay5pbnN0KCkuZmV0Y2hEYXRhLnJldCgnYXN5bmMtcmVzdWx0Jyk7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCQkJY29uc3QgcmVzdWx0ID0gYXdhaXQgaW5zdC5mZXRjaERhdGEoJ3Rlc3QtaWQnKTsKCgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdhc3luYy1yZXN1bHQnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLmZldGNoRGF0YS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGlkOiAndGVzdC1pZCcgfSk7CgkJfSk7CgoJCWl0KCd3aWxsIHRocm93IGVycm9ycyBmcm9tIGNsYXNzIG1ldGhvZHMnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJdGhyb3dFcnJvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdtZXNzYWdlJykKCQkJfSkpOwoKCQkJY29uc3QgdGVzdEVycm9yID0gbmV3IEVycm9yKCdUZXN0IGVycm9yJyk7CgkJCU1vY2suaW5zdCgpLnRocm93RXJyb3IucmV0KHRlc3RFcnJvcik7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCgkJCWV4cGVjdCgoKSA9PiBpbnN0LnRocm93RXJyb3IoJ2ZhaWwnKSkudG8udGhyb3coJ1Rlc3QgZXJyb3InKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgpLnRocm93RXJyb3IuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBtZXNzYWdlOiAnZmFpbCcgfSk7CgkJfSk7CgoJCWl0KCd3aWxsIGhhbmRsZSBvblJldCBoYW5kbGVycyBpbiBjbGFzcyBtZXRob2RzJywgYXN5bmMgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCWNhbGN1bGF0ZTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4JywgJ3knKQoJCQl9KSk7CgoJCQlNb2NrLmluc3QoKS5jYWxjdWxhdGUub25SZXQoKGFyZ3MpID0+IHsKCQkJCXJldHVybiBhcmdzLnggKyBhcmdzLnk7CgkJCX0pOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgoJCQlleHBlY3QoaW5zdC5jYWxjdWxhdGUoNSwgMykpLnRvLmVxdWFsKDgpOwoJCQlleHBlY3QoaW5zdC5jYWxjdWxhdGUoMTAsIDIwKSkudG8uZXF1YWwoMzApOwoJCX0pOwoKCQlpdCgnd2lsbCBoYW5kbGUgZGlmZmVyZW50IHJldHVybiB2YWx1ZXMgcGVyIGNhbGwnLCBhc3luYyAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJZ2V0VmFsdWU6IG1vY2t5LmZ1bmN0aW9uKCkKCQkJfSkpOwoKCQkJTW9jay5pbnN0KCkuZ2V0VmFsdWUucmV0KCdkZWZhdWx0Jyk7CgkJCU1vY2suaW5zdCgpLmdldFZhbHVlLnJldCgnZmlyc3QtY2FsbCcsIDEpOwoJCQlNb2NrLmluc3QoKS5nZXRWYWx1ZS5yZXQoJ3NlY29uZC1jYWxsJywgMik7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCgkJCWV4cGVjdChpbnN0LmdldFZhbHVlKCkpLnRvLmVxdWFsKCdmaXJzdC1jYWxsJyk7CgkJCWV4cGVjdChpbnN0LmdldFZhbHVlKCkpLnRvLmVxdWFsKCdzZWNvbmQtY2FsbCcpOwoJCQlleHBlY3QoaW5zdC5nZXRWYWx1ZSgpKS50by5lcXVhbCgnZGVmYXVsdCcpOyAvLyBGYWxscyBiYWNrIHRvIGNhbGwgMAoJCX0pOwoKCQlpdCgnd2lsbCBzdXBwb3J0IGNsYXNzIGluaGVyaXRhbmNlIHdpdGggc3VwZXIgY2FsbHMnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJY29uc3RydWN0b3I6IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CgkJCQkJY29udGV4dC5zZWxmLm1vY2tJbml0aWFsaXplZCA9IHRydWU7CgkJCQkJY29udGV4dC5zZWxmLm1vY2tWYWx1ZSA9IGNvbnRleHQuYXJncy52YWx1ZTsKCQkJCX0pLmFyZ3MoJ3ZhbHVlJyksCgkJCQlnZXRWYWx1ZTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4JykKCQkJfSkpOwoKCQkJTW9jay5pbnN0KCkuZ2V0VmFsdWUucmV0KCdtb2NrLXZhbHVlJyk7CgoJCQljbGFzcyBDaGlsZCBleHRlbmRzIE1vY2sgewoJCQkJY29uc3RydWN0b3IodmFsdWUpIHsKCQkJCQlzdXBlcih2YWx1ZSk7CgkJCQkJdGhpcy5jaGlsZEluaXRpYWxpemVkID0gdHJ1ZTsKCQkJCQl0aGlzLmNoaWxkVmFsdWUgPSB2YWx1ZSAqIDI7CgkJCQl9CgkJCQlnZXRWYWx1ZSh4KSB7CgkJCQkJY29uc3QgcGFyZW50UmVzdWx0ID0gc3VwZXIuZ2V0VmFsdWUoeCk7CgkJCQkJcmV0dXJuIGBjaGlsZC0ke3BhcmVudFJlc3VsdH1gOwoJCQkJfQoJCQl9CgoJCQljb25zdCBjaGlsZCA9IG5ldyBDaGlsZCgxMCk7CgoJCQkvLyBNb2NrIGNvbnN0cnVjdG9yIHNob3VsZCBoYXZlIHJ1bgoJCQlleHBlY3QoY2hpbGQubW9ja0luaXRpYWxpemVkKS50by5lcXVhbCh0cnVlKTsKCQkJZXhwZWN0KGNoaWxkLm1vY2tWYWx1ZSkudG8uZXF1YWwoMTApOwoJCQlleHBlY3QoTW9jay5pbnN0KCkuY29uc3RydWN0b3IuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyB2YWx1ZTogMTAgfSk7CgoJCQkvLyBDaGlsZCBjb25zdHJ1Y3RvciBzaG91bGQgaGF2ZSBydW4gYWZ0ZXIKCQkJZXhwZWN0KGNoaWxkLmNoaWxkSW5pdGlhbGl6ZWQpLnRvLmVxdWFsKHRydWUpOwoJCQlleHBlY3QoY2hpbGQuY2hpbGRWYWx1ZSkudG8uZXF1YWwoMjApOwoKCQkJLy8gQ2hpbGQncyBvdmVycmlkZGVuIG1ldGhvZCBjYWxscyBzdXBlciBhbmQgd3JhcHMgcmVzdWx0CgkJCWNvbnN0IHJlc3VsdCA9IGNoaWxkLmdldFZhbHVlKCd0ZXN0Jyk7CgkJCWV4cGVjdChyZXN1bHQpLnRvLmVxdWFsKCdjaGlsZC1tb2NrLXZhbHVlJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5nZXRWYWx1ZS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHg6ICd0ZXN0JyB9KTsKCQl9KTsKCgkJaXQoJ3dpbGwgbm90IGV4cG9zZSBfX21vY2t5SW5kZXggaW4gZGVlcCBlcXVhbCBjb21wYXJpc29ucycsICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQljb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKCQkJCQljb250ZXh0LnNlbGYubmFtZSA9IGNvbnRleHQuYXJncy5uYW1lOwoJCQkJfSkuYXJncygnbmFtZScpCgkJCX0pKTsKCgkJCWNvbnN0IGluc3RhbmNlID0gbmV3IE1vY2soJ3Rlc3QnKTsKCgkJCWV4cGVjdChpbnN0YW5jZSkudG8uZGVlcC5lcXVhbCh7IG5hbWU6ICd0ZXN0JyB9KTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3luYyBwbGFpbiB2YWx1ZSBtZW1iZXJzIGJldHdlZW4gaW5zdGFuY2UgYW5kIE1vY2suaW5zdCgpJywgKCkgPT4gewoJCQljb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKCQkJCW5hbWU6IG51bGwsCgkJCQljb3VudDogMAoJCQl9KSk7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCgkJCS8vIEluaXRpYWwgdmFsdWVzIGZyb20gZGVmaW5pdGlvbgoJCQlleHBlY3QoaW5zdC5uYW1lKS50by5lcXVhbChudWxsKTsKCQkJZXhwZWN0KGluc3QuY291bnQpLnRvLmVxdWFsKDApOwoKCQkJLy8gU2V0dGluZyBvbiBpbnN0YW5jZSBzeW5jcyB0byBNb2NrLmluc3QoKQoJCQlpbnN0Lm5hbWUgPSAndGVzdCc7CgkJCWluc3QuY291bnQgPSA0MjsKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS5uYW1lKS50by5lcXVhbCgndGVzdCcpOwoJCQlleHBlY3QoTW9jay5pbnN0KDApLmNvdW50KS50by5lcXVhbCg0Mik7CgoJCQkvLyBTZXR0aW5nIG9uIE1vY2suaW5zdCgpIHN5bmNzIHRvIGluc3RhbmNlCgkJCU1vY2suaW5zdCgwKS5uYW1lID0gJ2NoYW5nZWQnOwoJCQlleHBlY3QoaW5zdC5uYW1lKS50by5lcXVhbCgnY2hhbmdlZCcpOwoJCX0pOwoKCQlpdCgnd2lsbCBpc29sYXRlIHBsYWluIHZhbHVlIG1lbWJlcnMgYmV0d2VlbiBjbGFzcyBpbnN0YW5jZXMnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJdmFsdWU6IG51bGwKCQkJfSkpOwoKCQkJY29uc3QgaW5zdDEgPSBuZXcgTW9jaygpOwoJCQljb25zdCBpbnN0MiA9IG5ldyBNb2NrKCk7CgoJCQlpbnN0MS52YWx1ZSA9ICdmaXJzdCc7CgkJCWluc3QyLnZhbHVlID0gJ3NlY29uZCc7CgoJCQlleHBlY3QoaW5zdDEudmFsdWUpLnRvLmVxdWFsKCdmaXJzdCcpOwoJCQlleHBlY3QoaW5zdDIudmFsdWUpLnRvLmVxdWFsKCdzZWNvbmQnKTsKCQkJZXhwZWN0KE1vY2suaW5zdCgwKS52YWx1ZSkudG8uZXF1YWwoJ2ZpcnN0Jyk7CgkJCWV4cGVjdChNb2NrLmluc3QoMSkudmFsdWUpLnRvLmVxdWFsKCdzZWNvbmQnKTsKCQl9KTsKCgkJaXQoJ3dpbGwgYWxsb3cgcHJlLWNvbmZpZ3VyaW5nIHBsYWluIHZhbHVlIG1lbWJlcnMgYmVmb3JlIGluc3RhbnRpYXRpb24nLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJY29uZmlnOiBudWxsCgkJCX0pKTsKCgkJCS8vIFByZS1jb25maWd1cmUgYmVmb3JlIGluc3RhbnRpYXRpb24KCQkJTW9jay5pbnN0KDApLmNvbmZpZyA9ICdwcmVzZXQtdmFsdWUnOwoKCQkJY29uc3QgaW5zdCA9IG5ldyBNb2NrKCk7CgkJCWV4cGVjdChpbnN0LmNvbmZpZykudG8uZXF1YWwoJ3ByZXNldC12YWx1ZScpOwoJCX0pOwoKCQlpdCgnd2lsbCBzdXBwb3J0IG1peGluZyBwbGFpbiB2YWx1ZXMgYW5kIG1ldGhvZHMgaW4gY2xhc3MnLCAoKSA9PiB7CgkJCWNvbnN0IE1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuY2xhc3MoewoJCQkJbmFtZTogbnVsbCwKCQkJCWdyZWV0OiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2dyZWV0aW5nJykKCQkJfSkpOwoKCQkJTW9jay5pbnN0KCkuZ3JlZXQucmV0KCdIZWxsbyEnKTsKCgkJCWNvbnN0IGluc3QgPSBuZXcgTW9jaygpOwoJCQlpbnN0Lm5hbWUgPSAnV29ybGQnOwoKCQkJZXhwZWN0KGluc3QubmFtZSkudG8uZXF1YWwoJ1dvcmxkJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkubmFtZSkudG8uZXF1YWwoJ1dvcmxkJyk7CgkJCWV4cGVjdChpbnN0LmdyZWV0KCdIaScpKS50by5lcXVhbCgnSGVsbG8hJyk7CgkJCWV4cGVjdChNb2NrLmluc3QoKS5ncmVldC5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IGdyZWV0aW5nOiAnSGknIH0pOwoJCX0pOwoKCQlpdCgnd2lsbCBzdXBwb3J0IG5lc3RlZCBvYmplY3RzIHdpdGggbWV0aG9kcycsICgpID0+IHsKCQkJY29uc3QgTW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5jbGFzcyh7CgkJCQlkYjogbW9ja3kub2JqZWN0KHsKCQkJCQlxdWVyeTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdzcWwnKSwKCQkJCQljbG9zZTogbW9ja3kuZnVuY3Rpb24oKQoJCQkJfSkKCQkJfSkpOwoKCQkJTW9jay5pbnN0KDApLmRiLnF1ZXJ5LnJldCh7IHJvd3M6IFsnYScsICdiJ10gfSk7CgkJCU1vY2suaW5zdCgwKS5kYi5jbG9zZS5yZXQodHJ1ZSk7CgoJCQljb25zdCBpbnN0ID0gbmV3IE1vY2soKTsKCgkJCWV4cGVjdChpbnN0LmRiLnF1ZXJ5KCdTRUxFQ1QgKicpKS50by5kZWVwLmVxdWFsKHsgcm93czogWydhJywgJ2InXSB9KTsKCQkJZXhwZWN0KGluc3QuZGIuY2xvc2UoKSkudG8uZXF1YWwodHJ1ZSk7CgkJCWV4cGVjdChNb2NrLmluc3QoMCkuZGIucXVlcnkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoeyBzcWw6ICdTRUxFQ1QgKicgfSk7CgkJfSk7Cgl9KTsKCglkZXNjcmliZSgnc3B5JywgKCkgPT4gewoJCWl0KCd3aWxsIHNweSBvbiBtZXRob2QsIGNhbGwgdGhyb3VnaCwgdHJhY2sgY2FsbHMgYW5kIHByZXNlcnZlIHRoaXMnLCAoKSA9PiB7CgkJCWNvbnN0IG9iaiA9IHsKCQkJCXZhbHVlOiA0MiwKCQkJCWdyZWV0OiBmdW5jdGlvbihuYW1lKSB7CgkJCQkJcmV0dXJuIGBIZWxsbywgJHtuYW1lfSFgOwoJCQkJfSwKCQkJCWdldFZhbHVlOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gdGhpcy52YWx1ZTsKCQkJCX0KCQkJfTsKCgkJCWNvbnN0IGdyZWV0U3B5ID0gbW9ja3kuc3B5KG9iaiwgJ2dyZWV0Jyk7CgkJCWNvbnN0IHZhbHVlU3B5ID0gbW9ja3kuc3B5KG9iaiwgJ2dldFZhbHVlJyk7CgoJCQkvLyBDYWxscyB0aHJvdWdoIHRvIG9yaWdpbmFsCgkJCWV4cGVjdChvYmouZ3JlZXQoJ1dvcmxkJykpLnRvLmVxdWFsKCdIZWxsbywgV29ybGQhJyk7CgkJCWV4cGVjdChvYmouZ3JlZXQoJ1Rlc3QnKSkudG8uZXF1YWwoJ0hlbGxvLCBUZXN0IScpOwoKCQkJLy8gVHJhY2tzIG11bHRpcGxlIGNhbGxzCgkJCWV4cGVjdChncmVldFNweS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMik7CgkJCWV4cGVjdChncmVldFNweS5jYWxscygwKSkudG8uZGVlcC5lcXVhbChbJ1dvcmxkJ10pOwoJCQlleHBlY3QoZ3JlZXRTcHkuY2FsbHMoMSkpLnRvLmRlZXAuZXF1YWwoWydUZXN0J10pOwoKCQkJLy8gUHJlc2VydmVzIHRoaXMgY29udGV4dAoJCQlleHBlY3Qob2JqLmdldFZhbHVlKCkpLnRvLmVxdWFsKDQyKTsKCQkJZXhwZWN0KHZhbHVlU3B5LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgxKTsKCgkJCWdyZWV0U3B5LnJlc3RvcmUoKTsKCQkJdmFsdWVTcHkucmVzdG9yZSgpOwoJCX0pOwoKCQlpdCgnd2lsbCBvdmVycmlkZSByZXR1cm4gdmFsdWUgd2l0aCByZXQoKSB3aGlsZSBzdGlsbCB0cmFja2luZycsICgpID0+IHsKCQkJY29uc3Qgb2JqID0gewoJCQkJZ2V0VmFsdWU6IGZ1bmN0aW9uKCkgewoJCQkJCXJldHVybiAnb3JpZ2luYWwnOwoJCQkJfQoJCQl9OwoKCQkJY29uc3Qgc3B5ID0gbW9ja3kuc3B5KG9iaiwgJ2dldFZhbHVlJyk7CgkJCXNweS5yZXQoJ292ZXJyaWRkZW4nKTsKCgkJCWNvbnN0IHJlc3VsdCA9IG9iai5nZXRWYWx1ZSgpOwoKCQkJZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoJ292ZXJyaWRkZW4nKTsKCQkJZXhwZWN0KHNweS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJfSk7CgoJCWl0KCd3aWxsIHJlc3RvcmUgb3JpZ2luYWwgbWV0aG9kJywgKCkgPT4gewoJCQljb25zdCBvYmogPSB7CgkJCQlkb1RoaW5nOiBmdW5jdGlvbigpIHsKCQkJCQlyZXR1cm4gJ29yaWdpbmFsJzsKCQkJCX0KCQkJfTsKCgkJCWNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdkb1RoaW5nJyk7CgkJCXNweS5yZXQoJ3NwaWVkJyk7CgoJCQlleHBlY3Qob2JqLmRvVGhpbmcoKSkudG8uZXF1YWwoJ3NwaWVkJyk7CgoJCQlzcHkucmVzdG9yZSgpOwoKCQkJZXhwZWN0KG9iai5kb1RoaW5nKCkpLnRvLmVxdWFsKCdvcmlnaW5hbCcpOwoJCX0pOwoKCQlpdCgnd2lsbCBzcHkgb24gY2xhc3MgcHJvdG90eXBlIG1ldGhvZCcsICgpID0+IHsKCQkJY2xhc3MgTXlDbGFzcyB7CgkJCQlncmVldChuYW1lKSB7CgkJCQkJcmV0dXJuIGBIZWxsbywgJHtuYW1lfWA7CgkJCQl9CgkJCX0KCgkJCWNvbnN0IHNweSA9IG1vY2t5LnNweShNeUNsYXNzLnByb3RvdHlwZSwgJ2dyZWV0Jyk7CgoJCQljb25zdCBpbnN0YW5jZSA9IG5ldyBNeUNsYXNzKCk7CgkJCWNvbnN0IHJlc3VsdCA9IGluc3RhbmNlLmdyZWV0KCdUZXN0Jyk7CgoJCQlleHBlY3QocmVzdWx0KS50by5lcXVhbCgnSGVsbG8sIFRlc3QnKTsKCQkJZXhwZWN0KHNweS5jYWxscygpLmxlbmd0aCkudG8uZXF1YWwoMSk7CgkJCWV4cGVjdChzcHkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoWydUZXN0J10pOwoKCQkJc3B5LnJlc3RvcmUoKTsKCQl9KTsKCgkJaXQoJ3dpbGwgc3B5IHdpdGggcmVwbGFjZW1lbnQgZnVuY3Rpb24gYW5kIHByb3ZpZGUgY29udGV4dC5vcmlnaW5hbCcsICgpID0+IHsKCQkJY29uc3Qgb2JqID0gewoJCQkJYWRkOiBmdW5jdGlvbihhLCBiKSB7CgkJCQkJcmV0dXJuIGEgKyBiOwoJCQkJfQoJCQl9OwoKCQkJLy8gUmVwbGFjZW1lbnQgd2l0aCBhcmdzIGFuZCBjb250ZXh0Lm9yaWdpbmFsCgkJCWNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdhZGQnLCBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewoJCQkJY29uc3Qgb3JpZ2luYWxSZXN1bHQgPSBjb250ZXh0Lm9yaWdpbmFsLmFwcGx5KGNvbnRleHQuc2VsZiwgY29udGV4dC5yYXdBcmdzKTsKCQkJCXJldHVybiBvcmlnaW5hbFJlc3VsdCAqIDEwOwoJCQl9KS5hcmdzKCd4JywgJ3knKSk7CgoJCQljb25zdCByZXN1bHQgPSBvYmouYWRkKDMsIDQpOwoKCQkJZXhwZWN0KHJlc3VsdCkudG8uZXF1YWwoNzApOyAvLyAoMyArIDQpICogMTAKCQkJZXhwZWN0KHNweS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7IHg6IDMsIHk6IDQgfSk7CgoJCQlzcHkucmVzdG9yZSgpOwoJCX0pOwoJfSk7Cn0pOwoAAAAAAAAAAMxbAAAAAAAAAAAAAAAAAAAAAAAAmWUAAAAAAAAAAAAAAAAAAAAAAACZZQAAAAAAAAAAAAA",
|
|
1013
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMtbAAAAAAAAy1sAAAAAAAAAAAAAAADwvw"
|
|
1014
|
+
]
|
|
1015
|
+
]
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
"file": "README.md",
|
|
1019
|
+
"settings":
|
|
1020
|
+
{
|
|
1021
|
+
"buffer_size": 17313,
|
|
1022
|
+
"encoding": "UTF-8",
|
|
1023
|
+
"line_ending": "Unix"
|
|
1024
|
+
},
|
|
1025
|
+
"undo_stack":
|
|
1026
|
+
[
|
|
1027
|
+
[
|
|
1028
|
+
1,
|
|
1029
|
+
1,
|
|
1030
|
+
"revert",
|
|
1031
|
+
null,
|
|
1032
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAAALAAAAIyBsaWwtbW9ja3kAAAAAAAAAACQgAAAAAAAAAAAAAA",
|
|
1033
|
+
"CgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/"
|
|
1034
|
+
],
|
|
1035
|
+
[
|
|
1036
|
+
2,
|
|
1037
|
+
1,
|
|
1038
|
+
"revert",
|
|
1039
|
+
null,
|
|
1040
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAABmIAAAIyBsaWwtbW9ja3kKCkEgbGlnaHR3ZWlnaHQgSmF2YVNjcmlwdCBtb2NraW5nIGxpYnJhcnkgZm9yIHRlc3RpbmcuIENyZWF0ZSBtb2NrIGZ1bmN0aW9ucywgb2JqZWN0cywgY2xhc3NlcywgYW5kIHByb3BlcnRpZXMgd2l0aCBjYWxsIHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgY29udHJvbC4gSW5jbHVkZXMgc3B5IGZ1bmN0aW9uYWxpdHkgZm9yIHRyYWNraW5nIGNhbGxzIHRvIGV4aXN0aW5nIG1ldGhvZHMuCgojIyDwn46vIEZlYXR1cmVzCgotIPCfqrYgKipMaWdodHdlaWdodCoqOiBNaW5pbWFsIGRlcGVuZGVuY2llcywgZm9jdXNlZCBvbiBjb3JlIG1vY2tpbmcgZnVuY3Rpb25hbGl0eQotIPCflKcgKipGbGV4aWJsZSoqOiBCdWlsZGVyIHBhdHRlcm4gZm9yIGNvbXBvc2FibGUgbW9jayBjb25maWd1cmF0aW9uCi0g8J+TiiAqKkNhbGwgVHJhY2tpbmcqKjogQXV0b21hdGljIHRyYWNraW5nIG9mIGFsbCBmdW5jdGlvbiBjYWxscyB3aXRoIGRlZXAtY2xvbmVkIGFyZ3VtZW50cwotIPCfjq0gKipTcHkgU3VwcG9ydCoqOiBUcmFjayBjYWxscyB0byBleGlzdGluZyBtZXRob2RzIHdoaWxlIHByZXNlcnZpbmcgb3IgcmVwbGFjaW5nIGJlaGF2aW9yCi0g8J+Pl++4jyAqKkNsYXNzIE1vY2tzKio6IFBlci1pbnN0YW5jZSBtb2NrIGNvbmZpZ3VyYXRpb24gZm9yIGNvbXBsZXggY2xhc3MgdGVzdGluZwotIOKchSAqKlNpbXBsZSBBUEkqKjogQ2xlYW4sIGludHVpdGl2ZSBBUEkgdGhhdCdzIGVhc3kgdG8gbGVhcm4gYW5kIHVzZQoKIyMg8J+TpSBJbnN0YWxsYXRpb24KCmBgYGJhc2gKbnBtIGluc3RhbGwgbGlsLW1vY2t5CmBgYAoKIyMg8J+agCBRdWljayBTdGFydAoKYGBgamF2YXNjcmlwdApjb25zdCBtb2NreSA9IHJlcXVpcmUoJ2xpbC1tb2NreScpOwoKLy8gQ3JlYXRlIGEgc2ltcGxlIG1vY2sgZnVuY3Rpb24KY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ25hbWUnLCAnYWdlJykpOwptb2NrLnJldCgnc3VjY2VzcycpOwoKbW9jaygnQWxpY2UnLCAzMCk7Cgpjb25zb2xlLmxvZyhtb2NrLmNhbGxzKDApKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDMwIH0KY29uc29sZS5sb2cobW9jay5jYWxscygpLmxlbmd0aCk7IC8vIDEKCi8vIFNweSBvbiBhbiBleGlzdGluZyBtZXRob2QKY29uc3Qgb2JqID0geyBncmVldDogKG5hbWUpID0+IGBIZWxsbywgJHtuYW1lfSFgIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdncmVldCcpOwoKb2JqLmdyZWV0KCdXb3JsZCcpOwpjb25zb2xlLmxvZyhzcHkuY2FsbHMoMCkpOyAvLyBbJ1dvcmxkJ10Kc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn5OWIEFQSSBSZWZlcmVuY2UKCiMjIyDwn5SoIEZ1bmN0aW9uIE1vY2tzCgpDcmVhdGUgbW9jayBmdW5jdGlvbnMgd2l0aCBjb25maWd1cmFibGUgYXJndW1lbnQgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZXM6CgpgYGBqYXZhc2NyaXB0Ci8vIEJhc2ljIGZ1bmN0aW9uIG1vY2sKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpKTsKbW9jay5yZXQoJ3JldHVybiB2YWx1ZScpOwoKLy8gTmFtZWQgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4JywgJ3knKSk7Cm1vY2soJ2hlbGxvJywgJ3dvcmxkJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgeDogJ2hlbGxvJywgeTogJ3dvcmxkJyB9CgovLyBBcmd1bWVudHMgd2l0aCBkZWZhdWx0cwpjb25zdCBtb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnbmFtZScsIHsgYWdlOiAxOCB9KSk7Cm1vY2soJ0FsaWNlJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAxOCB9CgovLyBTZWxlY3Qgc3BlY2lmaWMgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hcmdTZWxlY3QoMSkpOwptb2NrKCdmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnKTsKbW9jay5jYWxscygwKTsgLy8gJ3NlY29uZCcKCi8vIEN1c3RvbSBmdW5jdGlvbiBib2R5CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICByZXR1cm4gY29udGV4dC5hcmdzLnggKyBjb250ZXh0LmFyZ3MueTsKfSkuYXJncygneCcsICd5JykpOwptb2NrLnJldCgxMDApOyAvLyBDYW4gc3RpbGwgb3ZlcnJpZGUgdmlhIHJldAptb2NrKDUsIDMpOyAvLyBSZXR1cm5zIDEwMAoKLy8gQXN5bmMgZnVuY3Rpb25zCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hc3luYygpKTsKYXdhaXQgbW9jaygpOyAvLyBSZXR1cm5zIGEgcHJvbWlzZQpgYGAKCiMjIyDwn5OmIE9iamVjdCBNb2NrcwoKQ3JlYXRlIG1vY2sgb2JqZWN0cyB3aXRoIG5lc3RlZCBtb2NrczoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5vYmplY3QoewogIG1ldGhvZDogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdpbnB1dCcpLAogIG5lc3RlZDogbW9ja3kub2JqZWN0KHsKICAgIGRlZXBNZXRob2Q6IG1vY2t5LmZ1bmN0aW9uKCkKICB9KSwKICB2YWx1ZTogNDIKfSkpOwoKbW9jay5tZXRob2QucmV0KCdyZXN1bHQnKTsKbW9jay5tZXRob2QoJ3Rlc3QnKTsKbW9jay5tZXRob2QuY2FsbHMoMCk7IC8vIHsgaW5wdXQ6ICd0ZXN0JyB9CgovLyBSZXNldCBhbGwgbmVzdGVkIG1vY2tzCm1vY2sucmVzZXQoKTsKYGBgCgojIyMg8J+Pm++4jyBDbGFzcyBNb2NrcwoKQ3JlYXRlIG1vY2sgY2xhc3NlcyB3aXRoIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uOgoKYGBgamF2YXNjcmlwdApjb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKICBjb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJyksCiAgZ3JlZXQ6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZ3JlZXRpbmcnKQp9KSk7CgovLyBQcmUtY29uZmlndXJlIGluc3RhbmNlIGJlaGF2aW9yCk1vY2suaW5zdCgwKS5ncmVldC5yZXQoJ0hlbGxvIScpOwpNb2NrLmluc3QoMSkuZ3JlZXQucmV0KCdIb2xhIScpOwoKY29uc3QgaW5zdGFuY2UxID0gbmV3IE1vY2soJ0FsaWNlJyk7CmNvbnN0IGluc3RhbmNlMiA9IG5ldyBNb2NrKCdCb2InKTsKCmluc3RhbmNlMS5ncmVldCgnSGknKTsgLy8gUmV0dXJucyAnSGVsbG8hJwppbnN0YW5jZTIuZ3JlZXQoJ0hpJyk7IC8vIFJldHVybnMgJ0hvbGEhJwoKLy8gQWNjZXNzIGluc3RhbmNlIG1vY2tzIGFmdGVyIGNyZWF0aW9uCk1vY2suaW5zdCgwKS5jb25zdHJ1Y3Rvci5jYWxscygwKTsgLy8geyBuYW1lOiAnQWxpY2UnIH0KTW9jay5udW1JbnN0cygpOyAvLyAyCmBgYAoKIyMjIPCfjq8gUHJvcGVydHkgTW9ja3MKCkNyZWF0ZSBnZXR0ZXIvc2V0dGVyIHByb3BlcnRpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKICB2YWx1ZTogbW9ja3kucHJvcGVydHkoKQp9KSk7Cgptb2NrLnZhbHVlID0gNDI7CmNvbnNvbGUubG9nKG1vY2sudmFsdWUpOyAvLyA0MgpgYGAKCiMjIyDwn5SNIFNweSBGdW5jdGlvbgoKVHJhY2sgY2FsbHMgdG8gZXhpc3RpbmcgbWV0aG9kcyB3aGlsZSBvcHRpb25hbGx5IHJlcGxhY2luZyB0aGVpciBpbXBsZW1lbnRhdGlvbjoKCmBgYGphdmFzY3JpcHQKLy8gQmFzaWMgc3B5IC0gY2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApjb25zdCBvYmogPSB7IGFkZDogKGEsIGIpID0+IGEgKyBiIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdhZGQnKTsKCm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNQpzcHkuY2FsbHMoMCk7IC8vIFsyLCAzXQoKLy8gT3ZlcnJpZGUgcmV0dXJuIHZhbHVlCnNweS5yZXQoMTAwKTsKb2JqLmFkZCgyLCAzKTsgLy8gUmV0dXJucyAxMDAKCi8vIFNweSB3aXRoIGN1c3RvbSByZXBsYWNlbWVudApjb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnYWRkJywgbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICBjb25zdCByZXN1bHQgPSBjb250ZXh0Lm9yaWdpbmFsLmFwcGx5KGNvbnRleHQuc2VsZiwgY29udGV4dC5yYXdBcmdzKTsKICByZXR1cm4gcmVzdWx0ICogMjsgLy8gRG91YmxlIHRoZSByZXN1bHQKfSkuYXJncygnYScsICdiJykpOwoKb2JqLmFkZCg1LCAzKTsgLy8gUmV0dXJucyAxNiAoNSszKSoyCnNweS5jYWxscygwKTsgLy8geyBhOiA1LCBiOiAzIH0KCi8vIFJlc3RvcmUgb3JpZ2luYWwgbWV0aG9kCnNweS5yZXN0b3JlKCk7Cm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNSBhZ2FpbgoKLy8gU3B5IG9uIGNsYXNzIHByb3RvdHlwZXMKY2xhc3MgTXlDbGFzcyB7CiAgZG9UaGluZygpIHsgcmV0dXJuICdvcmlnaW5hbCc7IH0KfQoKY29uc3Qgc3B5ID0gbW9ja3kuc3B5KE15Q2xhc3MucHJvdG90eXBlLCAnZG9UaGluZycpOwpjb25zdCBpbnN0YW5jZSA9IG5ldyBNeUNsYXNzKCk7Cmluc3RhbmNlLmRvVGhpbmcoKTsgLy8gQ2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApzcHkuY2FsbHMoKS5sZW5ndGg7IC8vIDEKc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn46oIEFkdmFuY2VkIFVzYWdlCgojIyMgUmV0dXJuIFZhbHVlcyBQZXIgQ2FsbAoKQ29uZmlndXJlIGRpZmZlcmVudCByZXR1cm4gdmFsdWVzIGZvciBlYWNoIGNhbGw6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKSk7Cgptb2NrLnJldCgnZGVmYXVsdCcpOyAvLyBDYWxsIDAgKGRlZmF1bHQgZm9yIGFsbCBjYWxscykKbW9jay5yZXQoJ2ZpcnN0JywgMSk7IC8vIENhbGwgMQptb2NrLnJldCgnc2Vjb25kJywgMik7IC8vIENhbGwgMgoKbW9jaygpOyAvLyAnZmlyc3QnCm1vY2soKTsgLy8gJ3NlY29uZCcKbW9jaygpOyAvLyAnZGVmYXVsdCcgKGZhbGxzIGJhY2sgdG8gY2FsbCAwKQpgYGAKCiMjIyBEeW5hbWljIFJldHVybiBWYWx1ZXMKClVzZSBoYW5kbGVycyBmb3IgZHluYW1pYyByZXR1cm4gdmFsdWVzIGJhc2VkIG9uIGFyZ3VtZW50czoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnKSk7Cgptb2NrLm9uUmV0KChhcmdzKSA9PiBhcmdzLnggKiAyKTsKCm1vY2soNSk7IC8vIFJldHVybnMgMTAKbW9jaygzKTsgLy8gUmV0dXJucyA2CmBgYAoKIyMjIEVycm9yIFRocm93aW5nCgpSZXR1cm4gYW4gRXJyb3IgaW5zdGFuY2UgdG8gbWFrZSB0aGUgbW9jayB0aHJvdzoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpKTsKbW9jay5yZXQobmV3IEVycm9yKCdUZXN0IGVycm9yJykpOwoKbW9jaygpOyAvLyBUaHJvd3MgJ1Rlc3QgZXJyb3InCmBgYAoKIyMjIEN1c3RvbSBDb250ZXh0CgpBY2Nlc3MgZnVsbCBjb250ZXh0IGluIGN1c3RvbSBmdW5jdGlvbiBib2RpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICAvLyBjb250ZXh0LnNlbGYgLSBUaGUgJ3RoaXMnIGNvbnRleHQKICAvLyBjb250ZXh0LnN0YXRlIC0gSW50ZXJuYWwgc3RhdGUgb2JqZWN0CiAgLy8gY29udGV4dC5jYWxsIC0gQ2FsbCBudW1iZXIgKDEtaW5kZXhlZCkKICAvLyBjb250ZXh0LmFyZ3MgLSBQcm9jZXNzZWQgYXJndW1lbnRzCiAgLy8gY29udGV4dC5yYXdBcmdzIC0gVW5wcm9jZXNzZWQgYXJndW1lbnRzIGFycmF5CiAgLy8gY29udGV4dC5vcmlnaW5hbCAtIE9yaWdpbmFsIGZ1bmN0aW9uIChpZiBzZXQgdmlhIC5vcmlnaW5hbCgpKQogIC8vIGNvbnRleHQucmV0IC0gQ29uZmlndXJlZCByZXR1cm4gdmFsdWUKCiAgcmV0dXJuIGNvbnRleHQucmV0IHx8ICdkZWZhdWx0JzsKfSkuYXJncygneCcsICd5JykpOwpgYGAKCiMjIyBSZXNldHRpbmcgTW9ja3MKCkFsbCBtb2NrcyBzdXBwb3J0IGAucmVzZXQoKWAgdG8gY2xlYXIgc3RhdGU6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKSk7Cm1vY2sucmV0KCd2YWx1ZScpOwptb2NrKCd0ZXN0Jyk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAxCgptb2NrLnJlc2V0KCk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAwCm1vY2soKTsgLy8gUmV0dXJucyB1bmRlZmluZWQgKHJldCBjbGVhcmVkKQpgYGAKCiMjIPCfp6ogVGVzdGluZyB3aXRoIE1vY2hhL0NoYWkKCmBgYGphdmFzY3JpcHQKY29uc3QgeyBleHBlY3QgfSA9IHJlcXVpcmUoJ2NoYWknKTsKY29uc3QgbW9ja3kgPSByZXF1aXJlKCdsaWwtbW9ja3knKTsKCmRlc2NyaWJlKCdNeSBNb2R1bGUnLCAoKSA9PiB7CiAgaXQoJ2NhbGxzIHRoZSBBUEkgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMnLCAoKSA9PiB7CiAgICBjb25zdCBhcGkgPSB7CiAgICAgIGZldGNoOiAodXJsLCBvcHRpb25zKSA9PiB7IC8qIHJlYWwgaW1wbGVtZW50YXRpb24gKi8gfQogICAgfTsKCiAgICBjb25zdCBzcHkgPSBtb2NreS5zcHkoYXBpLCAnZmV0Y2gnLCBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3VybCcsICdvcHRpb25zJykpOwogICAgc3B5LnJldChQcm9taXNlLnJlc29sdmUoeyBkYXRhOiAndGVzdCcgfSkpOwoKICAgIC8vIFRlc3QgeW91ciBjb2RlIHRoYXQgY2FsbHMgYXBpLmZldGNoKCkKICAgIG15TW9kdWxlLmRvU29tZXRoaW5nKGFwaSk7CgogICAgZXhwZWN0KHNweS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CiAgICAgIHVybDogJy9hcGkvZW5kcG9pbnQnLAogICAgICBvcHRpb25zOiB7IG1ldGhvZDogJ1BPU1QnIH0KICAgIH0pOwoKICAgIHNweS5yZXN0b3JlKCk7CiAgfSk7Cn0pOwpgYGAKCiMjIPCflIQgQ29tcGFyaXNvbiB3aXRoIEplc3QKCmxpbC1tb2NreSBwcm92aWRlcyBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgdG8gSmVzdCBtb2NrcyBidXQgd2l0aCBhIGJ1aWxkZXItYmFzZWQgQVBJOgoKfCBKZXN0IHwgbGlsLW1vY2t5IHwKfC0tLS0tLXwtLS0tLS0tLS0tLXwKfCBgamVzdC5mbigpYCB8IGBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKSlgIHwKfCBgbW9jay5tb2NrUmV0dXJuVmFsdWUodmFsKWAgfCBgbW9jay5yZXQodmFsKWAgfAp8IGBtb2NrLm1vY2suY2FsbHNbMF1bMF1gIHwgYG1vY2suY2FsbHMoMClgIHwKfCBgamVzdC5zcHlPbihvYmosICdtZXRob2QnKWAgfCBgbW9ja3kuc3B5KG9iaiwgJ21ldGhvZCcpYCB8CnwgYHNweS5tb2NrUmVzdG9yZSgpYCB8IGBzcHkucmVzdG9yZSgpYCB8CgoqKktleSBkaWZmZXJlbmNlczoqKgotICoqQnVpbGRlciBwYXR0ZXJuKio6IGxpbC1tb2NreSB1c2VzIGNoYWluYWJsZSBidWlsZGVycyBmb3IgY29uZmlndXJhdGlvbgotICoqTmFtZWQgYXJndW1lbnRzKio6IEJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGFyZ3VtZW50IHRyYWNraW5nCi0gKipQZXItaW5zdGFuY2UgY2xhc3MgbW9ja3MqKjogQ29uZmlndXJlIGRpZmZlcmVudCBiZWhhdmlvciBmb3IgZWFjaCBjbGFzcyBpbnN0YW5jZQotICoqU2ltcGxlciBBUEkqKjogRmV3ZXIgY29uY2VwdHMgdG8gbGVhcm4sIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IKCiMjIPCfk50gTm90ZXMKCiMjIyBCcmVha2luZyBDaGFuZ2VzCgoqKnYxLngqKjogRnVuY3Rpb25zIHdpdGhvdXQgYC5hcmdzKClgIGNvbmZpZ3VyYXRpb24gbm93IHJldHVybiBhbiBhcmd1bWVudHMgYXJyYXkgaW4gYC5jYWxscygpYCBpbnN0ZWFkIG9mIGBudWxsYC4gVGhpcyBlbmFibGVzIHNweSBmdW5jdGlvbmFsaXR5IGJ1dCBtYXkgYWZmZWN0IGV4aXN0aW5nIGNvZGUgdGhhdCBleHBlY3RzIGBudWxsYC4KCiMjIyBCdWlsZGVyIHZzLiBCdWlsdCBNb2NrcwoKLSBCdWlsZGVycyBoYXZlIG1ldGhvZHMgbGlrZSBgLmFyZ3MoKWAsIGAuYXN5bmMoKWAsIGAuYnVpbGQoKWAKLSBCdWlsdCBtb2NrcyBoYXZlIG1ldGhvZHMgbGlrZSBgLnJldCgpYCwgYC5jYWxscygpYCwgYC5yZXNldCgpYAotIENhbGwgYC5idWlsZCgpYCBvciB1c2UgYG1vY2t5LmNyZWF0ZSgpYCB0byBjb252ZXJ0IGEgYnVpbGRlciB0byBhIG1vY2sKCmBgYGphdmFzY3JpcHQKLy8gQnVpbGRlciAobm90IHlldCB1c2FibGUgYXMgYSBtb2NrKQpjb25zdCBidWlsZGVyID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4Jyk7CgovLyBCdWlsdCBtb2NrIChyZWFkeSB0byB1c2UpCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUoYnVpbGRlcik7IC8vIG9yIGJ1aWxkZXIuYnVpbGQoKQptb2NrLnJldCgndmFsdWUnKTsKYGBgCgojIyDwn5OEIExpY2Vuc2UKCk1JVAoKIyMg8J+knSBDb250cmlidXRpbmcKCkNvbnRyaWJ1dGlvbnMgd2VsY29tZSEgUGxlYXNlIG9wZW4gYW4gaXNzdWUgb3IgUFIgb24gR2l0SHViLgoAAAAAAAAAAPofAAAAAAAAAAAAAA",
|
|
1041
|
+
"CgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/"
|
|
1042
|
+
],
|
|
1043
|
+
[
|
|
1044
|
+
3,
|
|
1045
|
+
1,
|
|
1046
|
+
"revert",
|
|
1047
|
+
null,
|
|
1048
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAAA8IAAAIyBsaWwtbW9ja3kKCkEgbGlnaHR3ZWlnaHQgSmF2YVNjcmlwdCBtb2NraW5nIGxpYnJhcnkgZm9yIHRlc3RpbmcuIENyZWF0ZSBtb2NrIGZ1bmN0aW9ucywgb2JqZWN0cywgY2xhc3NlcywgYW5kIHByb3BlcnRpZXMgd2l0aCBjYWxsIHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgY29udHJvbC4gSW5jbHVkZXMgc3B5IGZ1bmN0aW9uYWxpdHkgZm9yIHRyYWNraW5nIGNhbGxzIHRvIGV4aXN0aW5nIG1ldGhvZHMuCgojIyDwn46vIEZlYXR1cmVzCgotIPCfqrYgKipMaWdodHdlaWdodCoqOiBNaW5pbWFsIGRlcGVuZGVuY2llcywgZm9jdXNlZCBvbiBjb3JlIG1vY2tpbmcgZnVuY3Rpb25hbGl0eQotIPCflKcgKipGbGV4aWJsZSoqOiBCdWlsZGVyIHBhdHRlcm4gZm9yIGNvbXBvc2FibGUgbW9jayBjb25maWd1cmF0aW9uCi0g8J+TiiAqKkNhbGwgVHJhY2tpbmcqKjogQXV0b21hdGljIHRyYWNraW5nIG9mIGFsbCBmdW5jdGlvbiBjYWxscyB3aXRoIGRlZXAtY2xvbmVkIGFyZ3VtZW50cwotIPCfjq0gKipTcHkgU3VwcG9ydCoqOiBUcmFjayBjYWxscyB0byBleGlzdGluZyBtZXRob2RzIHdoaWxlIHByZXNlcnZpbmcgb3IgcmVwbGFjaW5nIGJlaGF2aW9yCi0g8J+Pl++4jyAqKkNsYXNzIE1vY2tzKio6IFBlci1pbnN0YW5jZSBtb2NrIGNvbmZpZ3VyYXRpb24gZm9yIGNvbXBsZXggY2xhc3MgdGVzdGluZwotIOKchSAqKlNpbXBsZSBBUEkqKjogQ2xlYW4sIGludHVpdGl2ZSBBUEkgdGhhdCdzIGVhc3kgdG8gbGVhcm4gYW5kIHVzZQoKIyMg8J+TpSBJbnN0YWxsYXRpb24KCmBgYGJhc2gKbnBtIGluc3RhbGwgbGlsLW1vY2t5CmBgYAoKIyMg8J+agCBRdWljayBTdGFydAoKYGBgamF2YXNjcmlwdApjb25zdCBtb2NreSA9IHJlcXVpcmUoJ2xpbC1tb2NreScpOwoKLy8gQ3JlYXRlIGEgc2ltcGxlIG1vY2sgZnVuY3Rpb24KY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnbmFtZScsICdhZ2UnKS5idWlsZCgpOwptb2NrLnJldCgnc3VjY2VzcycpOwoKbW9jaygnQWxpY2UnLCAzMCk7Cgpjb25zb2xlLmxvZyhtb2NrLmNhbGxzKDApKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDMwIH0KY29uc29sZS5sb2cobW9jay5jYWxscygpLmxlbmd0aCk7IC8vIDEKCi8vIFNweSBvbiBhbiBleGlzdGluZyBtZXRob2QKY29uc3Qgb2JqID0geyBncmVldDogKG5hbWUpID0+IGBIZWxsbywgJHtuYW1lfSFgIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdncmVldCcpOwoKb2JqLmdyZWV0KCdXb3JsZCcpOwpjb25zb2xlLmxvZyhzcHkuY2FsbHMoMCkpOyAvLyBbJ1dvcmxkJ10Kc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn5OWIEFQSSBSZWZlcmVuY2UKCiMjIyDwn5SoIEZ1bmN0aW9uIE1vY2tzCgpDcmVhdGUgbW9jayBmdW5jdGlvbnMgd2l0aCBjb25maWd1cmFibGUgYXJndW1lbnQgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZXM6CgpgYGBqYXZhc2NyaXB0Ci8vIEJhc2ljIGZ1bmN0aW9uIG1vY2sKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQoJ3JldHVybiB2YWx1ZScpOwoKLy8gTmFtZWQgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnLCAneScpLmJ1aWxkKCk7Cm1vY2soJ2hlbGxvJywgJ3dvcmxkJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgeDogJ2hlbGxvJywgeTogJ3dvcmxkJyB9CgovLyBBcmd1bWVudHMgd2l0aCBkZWZhdWx0cwpjb25zdCBtb2NrID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJywgeyBhZ2U6IDE4IH0pLmJ1aWxkKCk7Cm1vY2soJ0FsaWNlJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAxOCB9CgovLyBTZWxlY3Qgc3BlY2lmaWMgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hcmdTZWxlY3QoMSkpOwptb2NrKCdmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnKTsKbW9jay5jYWxscygwKTsgLy8gJ3NlY29uZCcKCi8vIEN1c3RvbSBmdW5jdGlvbiBib2R5CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICByZXR1cm4gY29udGV4dC5hcmdzLnggKyBjb250ZXh0LmFyZ3MueTsKfSkuYXJncygneCcsICd5JykpOwptb2NrLnJldCgxMDApOyAvLyBDYW4gc3RpbGwgb3ZlcnJpZGUgdmlhIHJldAptb2NrKDUsIDMpOyAvLyBSZXR1cm5zIDEwMAoKLy8gQXN5bmMgZnVuY3Rpb25zCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hc3luYygpKTsKYXdhaXQgbW9jaygpOyAvLyBSZXR1cm5zIGEgcHJvbWlzZQpgYGAKCiMjIyDwn5OmIE9iamVjdCBNb2NrcwoKQ3JlYXRlIG1vY2sgb2JqZWN0cyB3aXRoIG5lc3RlZCBtb2NrczoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5vYmplY3QoewogIG1ldGhvZDogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdpbnB1dCcpLAogIG5lc3RlZDogbW9ja3kub2JqZWN0KHsKICAgIGRlZXBNZXRob2Q6IG1vY2t5LmZ1bmN0aW9uKCkKICB9KSwKICB2YWx1ZTogNDIKfSkpOwoKbW9jay5tZXRob2QucmV0KCdyZXN1bHQnKTsKbW9jay5tZXRob2QoJ3Rlc3QnKTsKbW9jay5tZXRob2QuY2FsbHMoMCk7IC8vIHsgaW5wdXQ6ICd0ZXN0JyB9CgovLyBSZXNldCBhbGwgbmVzdGVkIG1vY2tzCm1vY2sucmVzZXQoKTsKYGBgCgojIyMg8J+Pm++4jyBDbGFzcyBNb2NrcwoKQ3JlYXRlIG1vY2sgY2xhc3NlcyB3aXRoIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uOgoKYGBgamF2YXNjcmlwdApjb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKICBjb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJyksCiAgZ3JlZXQ6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZ3JlZXRpbmcnKQp9KSk7CgovLyBQcmUtY29uZmlndXJlIGluc3RhbmNlIGJlaGF2aW9yCk1vY2suaW5zdCgwKS5ncmVldC5yZXQoJ0hlbGxvIScpOwpNb2NrLmluc3QoMSkuZ3JlZXQucmV0KCdIb2xhIScpOwoKY29uc3QgaW5zdGFuY2UxID0gbmV3IE1vY2soJ0FsaWNlJyk7CmNvbnN0IGluc3RhbmNlMiA9IG5ldyBNb2NrKCdCb2InKTsKCmluc3RhbmNlMS5ncmVldCgnSGknKTsgLy8gUmV0dXJucyAnSGVsbG8hJwppbnN0YW5jZTIuZ3JlZXQoJ0hpJyk7IC8vIFJldHVybnMgJ0hvbGEhJwoKLy8gQWNjZXNzIGluc3RhbmNlIG1vY2tzIGFmdGVyIGNyZWF0aW9uCk1vY2suaW5zdCgwKS5jb25zdHJ1Y3Rvci5jYWxscygwKTsgLy8geyBuYW1lOiAnQWxpY2UnIH0KTW9jay5udW1JbnN0cygpOyAvLyAyCmBgYAoKIyMjIPCfjq8gUHJvcGVydHkgTW9ja3MKCkNyZWF0ZSBnZXR0ZXIvc2V0dGVyIHByb3BlcnRpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKICB2YWx1ZTogbW9ja3kucHJvcGVydHkoKQp9KSk7Cgptb2NrLnZhbHVlID0gNDI7CmNvbnNvbGUubG9nKG1vY2sudmFsdWUpOyAvLyA0MgpgYGAKCiMjIyDwn5SNIFNweSBGdW5jdGlvbgoKVHJhY2sgY2FsbHMgdG8gZXhpc3RpbmcgbWV0aG9kcyB3aGlsZSBvcHRpb25hbGx5IHJlcGxhY2luZyB0aGVpciBpbXBsZW1lbnRhdGlvbjoKCmBgYGphdmFzY3JpcHQKLy8gQmFzaWMgc3B5IC0gY2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApjb25zdCBvYmogPSB7IGFkZDogKGEsIGIpID0+IGEgKyBiIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdhZGQnKTsKCm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNQpzcHkuY2FsbHMoMCk7IC8vIFsyLCAzXQoKLy8gT3ZlcnJpZGUgcmV0dXJuIHZhbHVlCnNweS5yZXQoMTAwKTsKb2JqLmFkZCgyLCAzKTsgLy8gUmV0dXJucyAxMDAKCi8vIFNweSB3aXRoIGN1c3RvbSByZXBsYWNlbWVudApjb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnYWRkJywgbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICBjb25zdCByZXN1bHQgPSBjb250ZXh0Lm9yaWdpbmFsLmFwcGx5KGNvbnRleHQuc2VsZiwgY29udGV4dC5yYXdBcmdzKTsKICByZXR1cm4gcmVzdWx0ICogMjsgLy8gRG91YmxlIHRoZSByZXN1bHQKfSkuYXJncygnYScsICdiJykpOwoKb2JqLmFkZCg1LCAzKTsgLy8gUmV0dXJucyAxNiAoNSszKSoyCnNweS5jYWxscygwKTsgLy8geyBhOiA1LCBiOiAzIH0KCi8vIFJlc3RvcmUgb3JpZ2luYWwgbWV0aG9kCnNweS5yZXN0b3JlKCk7Cm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNSBhZ2FpbgoKLy8gU3B5IG9uIGNsYXNzIHByb3RvdHlwZXMKY2xhc3MgTXlDbGFzcyB7CiAgZG9UaGluZygpIHsgcmV0dXJuICdvcmlnaW5hbCc7IH0KfQoKY29uc3Qgc3B5ID0gbW9ja3kuc3B5KE15Q2xhc3MucHJvdG90eXBlLCAnZG9UaGluZycpOwpjb25zdCBpbnN0YW5jZSA9IG5ldyBNeUNsYXNzKCk7Cmluc3RhbmNlLmRvVGhpbmcoKTsgLy8gQ2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApzcHkuY2FsbHMoKS5sZW5ndGg7IC8vIDEKc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn46oIEFkdmFuY2VkIFVzYWdlCgojIyMgUmV0dXJuIFZhbHVlcyBQZXIgQ2FsbAoKQ29uZmlndXJlIGRpZmZlcmVudCByZXR1cm4gdmFsdWVzIGZvciBlYWNoIGNhbGw6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cgptb2NrLnJldCgnZGVmYXVsdCcpOyAvLyBDYWxsIDAgKGRlZmF1bHQgZm9yIGFsbCBjYWxscykKbW9jay5yZXQoJ2ZpcnN0JywgMSk7IC8vIENhbGwgMQptb2NrLnJldCgnc2Vjb25kJywgMik7IC8vIENhbGwgMgoKbW9jaygpOyAvLyAnZmlyc3QnCm1vY2soKTsgLy8gJ3NlY29uZCcKbW9jaygpOyAvLyAnZGVmYXVsdCcgKGZhbGxzIGJhY2sgdG8gY2FsbCAwKQpgYGAKCiMjIyBEeW5hbWljIFJldHVybiBWYWx1ZXMKClVzZSBoYW5kbGVycyBmb3IgZHluYW1pYyByZXR1cm4gdmFsdWVzIGJhc2VkIG9uIGFyZ3VtZW50czoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnKSk7Cgptb2NrLm9uUmV0KChhcmdzKSA9PiBhcmdzLnggKiAyKTsKCm1vY2soNSk7IC8vIFJldHVybnMgMTAKbW9jaygzKTsgLy8gUmV0dXJucyA2CmBgYAoKIyMjIEVycm9yIFRocm93aW5nCgpSZXR1cm4gYW4gRXJyb3IgaW5zdGFuY2UgdG8gbWFrZSB0aGUgbW9jayB0aHJvdzoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQobmV3IEVycm9yKCdUZXN0IGVycm9yJykpOwoKbW9jaygpOyAvLyBUaHJvd3MgJ1Rlc3QgZXJyb3InCmBgYAoKIyMjIEN1c3RvbSBDb250ZXh0CgpBY2Nlc3MgZnVsbCBjb250ZXh0IGluIGN1c3RvbSBmdW5jdGlvbiBib2RpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICAvLyBjb250ZXh0LnNlbGYgLSBUaGUgJ3RoaXMnIGNvbnRleHQKICAvLyBjb250ZXh0LnN0YXRlIC0gSW50ZXJuYWwgc3RhdGUgb2JqZWN0CiAgLy8gY29udGV4dC5jYWxsIC0gQ2FsbCBudW1iZXIgKDEtaW5kZXhlZCkKICAvLyBjb250ZXh0LmFyZ3MgLSBQcm9jZXNzZWQgYXJndW1lbnRzCiAgLy8gY29udGV4dC5yYXdBcmdzIC0gVW5wcm9jZXNzZWQgYXJndW1lbnRzIGFycmF5CiAgLy8gY29udGV4dC5vcmlnaW5hbCAtIE9yaWdpbmFsIGZ1bmN0aW9uIChpZiBzZXQgdmlhIC5vcmlnaW5hbCgpKQogIC8vIGNvbnRleHQucmV0IC0gQ29uZmlndXJlZCByZXR1cm4gdmFsdWUKCiAgcmV0dXJuIGNvbnRleHQucmV0IHx8ICdkZWZhdWx0JzsKfSkuYXJncygneCcsICd5JykpOwpgYGAKCiMjIyBSZXNldHRpbmcgTW9ja3MKCkFsbCBtb2NrcyBzdXBwb3J0IGAucmVzZXQoKWAgdG8gY2xlYXIgc3RhdGU6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cm1vY2sucmV0KCd2YWx1ZScpOwptb2NrKCd0ZXN0Jyk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAxCgptb2NrLnJlc2V0KCk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAwCm1vY2soKTsgLy8gUmV0dXJucyB1bmRlZmluZWQgKHJldCBjbGVhcmVkKQpgYGAKCiMjIPCfp6ogVGVzdGluZyB3aXRoIE1vY2hhL0NoYWkKCmBgYGphdmFzY3JpcHQKY29uc3QgeyBleHBlY3QgfSA9IHJlcXVpcmUoJ2NoYWknKTsKY29uc3QgbW9ja3kgPSByZXF1aXJlKCdsaWwtbW9ja3knKTsKCmRlc2NyaWJlKCdNeSBNb2R1bGUnLCAoKSA9PiB7CiAgaXQoJ2NhbGxzIHRoZSBBUEkgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMnLCAoKSA9PiB7CiAgICBjb25zdCBhcGkgPSB7CiAgICAgIGZldGNoOiAodXJsLCBvcHRpb25zKSA9PiB7IC8qIHJlYWwgaW1wbGVtZW50YXRpb24gKi8gfQogICAgfTsKCiAgICBjb25zdCBzcHkgPSBtb2NreS5zcHkoYXBpLCAnZmV0Y2gnLCBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3VybCcsICdvcHRpb25zJykpOwogICAgc3B5LnJldChQcm9taXNlLnJlc29sdmUoeyBkYXRhOiAndGVzdCcgfSkpOwoKICAgIC8vIFRlc3QgeW91ciBjb2RlIHRoYXQgY2FsbHMgYXBpLmZldGNoKCkKICAgIG15TW9kdWxlLmRvU29tZXRoaW5nKGFwaSk7CgogICAgZXhwZWN0KHNweS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CiAgICAgIHVybDogJy9hcGkvZW5kcG9pbnQnLAogICAgICBvcHRpb25zOiB7IG1ldGhvZDogJ1BPU1QnIH0KICAgIH0pOwoKICAgIHNweS5yZXN0b3JlKCk7CiAgfSk7Cn0pOwpgYGAKCiMjIPCflIQgQ29tcGFyaXNvbiB3aXRoIEplc3QKCmxpbC1tb2NreSBwcm92aWRlcyBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgdG8gSmVzdCBtb2NrcyBidXQgd2l0aCBhIGJ1aWxkZXItYmFzZWQgQVBJOgoKfCBKZXN0IHwgbGlsLW1vY2t5IHwKfC0tLS0tLXwtLS0tLS0tLS0tLXwKfCBgamVzdC5mbigpYCB8IGBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKSlgIHwKfCBgbW9jay5tb2NrUmV0dXJuVmFsdWUodmFsKWAgfCBgbW9jay5yZXQodmFsKWAgfAp8IGBtb2NrLm1vY2suY2FsbHNbMF1bMF1gIHwgYG1vY2suY2FsbHMoMClgIHwKfCBgamVzdC5zcHlPbihvYmosICdtZXRob2QnKWAgfCBgbW9ja3kuc3B5KG9iaiwgJ21ldGhvZCcpYCB8CnwgYHNweS5tb2NrUmVzdG9yZSgpYCB8IGBzcHkucmVzdG9yZSgpYCB8CgoqKktleSBkaWZmZXJlbmNlczoqKgotICoqQnVpbGRlciBwYXR0ZXJuKio6IGxpbC1tb2NreSB1c2VzIGNoYWluYWJsZSBidWlsZGVycyBmb3IgY29uZmlndXJhdGlvbgotICoqTmFtZWQgYXJndW1lbnRzKio6IEJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGFyZ3VtZW50IHRyYWNraW5nCi0gKipQZXItaW5zdGFuY2UgY2xhc3MgbW9ja3MqKjogQ29uZmlndXJlIGRpZmZlcmVudCBiZWhhdmlvciBmb3IgZWFjaCBjbGFzcyBpbnN0YW5jZQotICoqU2ltcGxlciBBUEkqKjogRmV3ZXIgY29uY2VwdHMgdG8gbGVhcm4sIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IKCiMjIPCfk50gTm90ZXMKCiMjIyBCcmVha2luZyBDaGFuZ2VzCgoqKnYxLngqKjogRnVuY3Rpb25zIHdpdGhvdXQgYC5hcmdzKClgIGNvbmZpZ3VyYXRpb24gbm93IHJldHVybiBhbiBhcmd1bWVudHMgYXJyYXkgaW4gYC5jYWxscygpYCBpbnN0ZWFkIG9mIGBudWxsYC4gVGhpcyBlbmFibGVzIHNweSBmdW5jdGlvbmFsaXR5IGJ1dCBtYXkgYWZmZWN0IGV4aXN0aW5nIGNvZGUgdGhhdCBleHBlY3RzIGBudWxsYC4KCiMjIyBCdWlsZGVyIHZzLiBCdWlsdCBNb2NrcwoKLSBCdWlsZGVycyBoYXZlIG1ldGhvZHMgbGlrZSBgLmFyZ3MoKWAsIGAuYXN5bmMoKWAsIGAuYnVpbGQoKWAKLSBCdWlsdCBtb2NrcyBoYXZlIG1ldGhvZHMgbGlrZSBgLnJldCgpYCwgYC5jYWxscygpYCwgYC5yZXNldCgpYAotIENhbGwgYC5idWlsZCgpYCBvciB1c2UgYG1vY2t5LmNyZWF0ZSgpYCB0byBjb252ZXJ0IGEgYnVpbGRlciB0byBhIG1vY2sKCmBgYGphdmFzY3JpcHQKLy8gQnVpbGRlciAobm90IHlldCB1c2FibGUgYXMgYSBtb2NrKQpjb25zdCBidWlsZGVyID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4Jyk7CgovLyBCdWlsdCBtb2NrIChyZWFkeSB0byB1c2UpCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUoYnVpbGRlcik7IC8vIG9yIGJ1aWxkZXIuYnVpbGQoKQptb2NrLnJldCgndmFsdWUnKTsKYGBgCgojIyDwn5OEIExpY2Vuc2UKCk1JVAoKIyMg8J+knSBDb250cmlidXRpbmcKCkNvbnRyaWJ1dGlvbnMgd2VsY29tZSEgUGxlYXNlIG9wZW4gYW4gaXNzdWUgb3IgUFIgb24gR2l0SHViLgoAAAAAAAAAAO4fAAAAAAAAAAAAAA",
|
|
1049
|
+
"CgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/"
|
|
1050
|
+
],
|
|
1051
|
+
[
|
|
1052
|
+
4,
|
|
1053
|
+
1,
|
|
1054
|
+
"revert",
|
|
1055
|
+
null,
|
|
1056
|
+
"AgAAAAAAAAAAAAAAAAAAAAAAAAAwIAAAIyBsaWwtbW9ja3kKCkEgbGlnaHR3ZWlnaHQgSmF2YVNjcmlwdCBtb2NraW5nIGxpYnJhcnkgZm9yIHRlc3RpbmcuIENyZWF0ZSBtb2NrIGZ1bmN0aW9ucywgb2JqZWN0cywgY2xhc3NlcywgYW5kIHByb3BlcnRpZXMgd2l0aCBjYWxsIHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgY29udHJvbC4gSW5jbHVkZXMgc3B5IGZ1bmN0aW9uYWxpdHkgZm9yIHRyYWNraW5nIGNhbGxzIHRvIGV4aXN0aW5nIG1ldGhvZHMuCgojIyDwn46vIEZlYXR1cmVzCgotIPCfqrYgKipMaWdodHdlaWdodCoqOiBNaW5pbWFsIGRlcGVuZGVuY2llcywgZm9jdXNlZCBvbiBjb3JlIG1vY2tpbmcgZnVuY3Rpb25hbGl0eQotIPCflKcgKipGbGV4aWJsZSoqOiBCdWlsZGVyIHBhdHRlcm4gZm9yIGNvbXBvc2FibGUgbW9jayBjb25maWd1cmF0aW9uCi0g8J+TiiAqKkNhbGwgVHJhY2tpbmcqKjogQXV0b21hdGljIHRyYWNraW5nIG9mIGFsbCBmdW5jdGlvbiBjYWxscyB3aXRoIGRlZXAtY2xvbmVkIGFyZ3VtZW50cwotIPCfjq0gKipTcHkgU3VwcG9ydCoqOiBUcmFjayBjYWxscyB0byBleGlzdGluZyBtZXRob2RzIHdoaWxlIHByZXNlcnZpbmcgb3IgcmVwbGFjaW5nIGJlaGF2aW9yCi0g8J+Pl++4jyAqKkNsYXNzIE1vY2tzKio6IFBlci1pbnN0YW5jZSBtb2NrIGNvbmZpZ3VyYXRpb24gZm9yIGNvbXBsZXggY2xhc3MgdGVzdGluZwotIOKchSAqKlNpbXBsZSBBUEkqKjogQ2xlYW4sIGludHVpdGl2ZSBBUEkgdGhhdCdzIGVhc3kgdG8gbGVhcm4gYW5kIHVzZQoKIyMg8J+TpSBJbnN0YWxsYXRpb24KCmBgYGJhc2gKbnBtIGluc3RhbGwgbGlsLW1vY2t5CmBgYAoKIyMg8J+agCBRdWljayBTdGFydAoKYGBgamF2YXNjcmlwdApjb25zdCBtb2NreSA9IHJlcXVpcmUoJ2xpbC1tb2NreScpOwoKLy8gQ3JlYXRlIGEgc2ltcGxlIG1vY2sgZnVuY3Rpb24KY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnbmFtZScsICdhZ2UnKS5idWlsZCgpOwptb2NrLnJldCgnc3VjY2VzcycpOwoKbW9jaygnQWxpY2UnLCAzMCk7Cgpjb25zb2xlLmxvZyhtb2NrLmNhbGxzKDApKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDMwIH0KY29uc29sZS5sb2cobW9jay5jYWxscygpLmxlbmd0aCk7IC8vIDEKCi8vIFNweSBvbiBhbiBleGlzdGluZyBtZXRob2QKY29uc3Qgb2JqID0geyBncmVldDogKG5hbWUpID0+IGBIZWxsbywgJHtuYW1lfSFgIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdncmVldCcpOwoKb2JqLmdyZWV0KCdXb3JsZCcpOwpjb25zb2xlLmxvZyhzcHkuY2FsbHMoMCkpOyAvLyBbJ1dvcmxkJ10Kc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn5OWIEFQSSBSZWZlcmVuY2UKCiMjIyDwn5SoIEZ1bmN0aW9uIE1vY2tzCgpDcmVhdGUgbW9jayBmdW5jdGlvbnMgd2l0aCBjb25maWd1cmFibGUgYXJndW1lbnQgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZXM6CgpgYGBqYXZhc2NyaXB0Ci8vIEJhc2ljIGZ1bmN0aW9uIG1vY2sKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQoJ3JldHVybiB2YWx1ZScpOwoKLy8gTmFtZWQgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnLCAneScpLmJ1aWxkKCk7Cm1vY2soJ2hlbGxvJywgJ3dvcmxkJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgeDogJ2hlbGxvJywgeTogJ3dvcmxkJyB9CgovLyBBcmd1bWVudHMgd2l0aCBkZWZhdWx0cwpjb25zdCBtb2NrID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJywgeyBhZ2U6IDE4IH0pLmJ1aWxkKCk7Cm1vY2soJ0FsaWNlJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAxOCB9CgovLyBTZWxlY3Qgc3BlY2lmaWMgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFyZ1NlbGVjdCgxKS5idWlsZCgpOwptb2NrKCdmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnKTsKbW9jay5jYWxscygwKTsgLy8gJ3NlY29uZCcKCi8vIEN1c3RvbSBmdW5jdGlvbiBib2R5CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewogIHJldHVybiBjb250ZXh0LmFyZ3MueCArIGNvbnRleHQuYXJncy55Owp9KS5hcmdzKCd4JywgJ3knKS5idWlsZCgpOwptb2NrLnJldCgxMDApOyAvLyBDYW4gc3RpbGwgb3ZlcnJpZGUgdmlhIHJldAptb2NrKDUsIDMpOyAvLyBSZXR1cm5zIDEwMAoKLy8gQXN5bmMgZnVuY3Rpb25zCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKS5hc3luYygpKTsKYXdhaXQgbW9jaygpOyAvLyBSZXR1cm5zIGEgcHJvbWlzZQpgYGAKCiMjIyDwn5OmIE9iamVjdCBNb2NrcwoKQ3JlYXRlIG1vY2sgb2JqZWN0cyB3aXRoIG5lc3RlZCBtb2NrczoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5vYmplY3QoewogIG1ldGhvZDogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdpbnB1dCcpLAogIG5lc3RlZDogbW9ja3kub2JqZWN0KHsKICAgIGRlZXBNZXRob2Q6IG1vY2t5LmZ1bmN0aW9uKCkKICB9KSwKICB2YWx1ZTogNDIKfSkpOwoKbW9jay5tZXRob2QucmV0KCdyZXN1bHQnKTsKbW9jay5tZXRob2QoJ3Rlc3QnKTsKbW9jay5tZXRob2QuY2FsbHMoMCk7IC8vIHsgaW5wdXQ6ICd0ZXN0JyB9CgovLyBSZXNldCBhbGwgbmVzdGVkIG1vY2tzCm1vY2sucmVzZXQoKTsKYGBgCgojIyMg8J+Pm++4jyBDbGFzcyBNb2NrcwoKQ3JlYXRlIG1vY2sgY2xhc3NlcyB3aXRoIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uOgoKYGBgamF2YXNjcmlwdApjb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKICBjb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJyksCiAgZ3JlZXQ6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZ3JlZXRpbmcnKQp9KSk7CgovLyBQcmUtY29uZmlndXJlIGluc3RhbmNlIGJlaGF2aW9yCk1vY2suaW5zdCgwKS5ncmVldC5yZXQoJ0hlbGxvIScpOwpNb2NrLmluc3QoMSkuZ3JlZXQucmV0KCdIb2xhIScpOwoKY29uc3QgaW5zdGFuY2UxID0gbmV3IE1vY2soJ0FsaWNlJyk7CmNvbnN0IGluc3RhbmNlMiA9IG5ldyBNb2NrKCdCb2InKTsKCmluc3RhbmNlMS5ncmVldCgnSGknKTsgLy8gUmV0dXJucyAnSGVsbG8hJwppbnN0YW5jZTIuZ3JlZXQoJ0hpJyk7IC8vIFJldHVybnMgJ0hvbGEhJwoKLy8gQWNjZXNzIGluc3RhbmNlIG1vY2tzIGFmdGVyIGNyZWF0aW9uCk1vY2suaW5zdCgwKS5jb25zdHJ1Y3Rvci5jYWxscygwKTsgLy8geyBuYW1lOiAnQWxpY2UnIH0KTW9jay5udW1JbnN0cygpOyAvLyAyCmBgYAoKIyMjIPCfjq8gUHJvcGVydHkgTW9ja3MKCkNyZWF0ZSBnZXR0ZXIvc2V0dGVyIHByb3BlcnRpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKICB2YWx1ZTogbW9ja3kucHJvcGVydHkoKQp9KSk7Cgptb2NrLnZhbHVlID0gNDI7CmNvbnNvbGUubG9nKG1vY2sudmFsdWUpOyAvLyA0MgpgYGAKCiMjIyDwn5SNIFNweSBGdW5jdGlvbgoKVHJhY2sgY2FsbHMgdG8gZXhpc3RpbmcgbWV0aG9kcyB3aGlsZSBvcHRpb25hbGx5IHJlcGxhY2luZyB0aGVpciBpbXBsZW1lbnRhdGlvbjoKCmBgYGphdmFzY3JpcHQKLy8gQmFzaWMgc3B5IC0gY2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApjb25zdCBvYmogPSB7IGFkZDogKGEsIGIpID0+IGEgKyBiIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdhZGQnKTsKCm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNQpzcHkuY2FsbHMoMCk7IC8vIFsyLCAzXQoKLy8gT3ZlcnJpZGUgcmV0dXJuIHZhbHVlCnNweS5yZXQoMTAwKTsKb2JqLmFkZCgyLCAzKTsgLy8gUmV0dXJucyAxMDAKCi8vIFNweSB3aXRoIGN1c3RvbSByZXBsYWNlbWVudApjb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnYWRkJywgbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICBjb25zdCByZXN1bHQgPSBjb250ZXh0Lm9yaWdpbmFsLmFwcGx5KGNvbnRleHQuc2VsZiwgY29udGV4dC5yYXdBcmdzKTsKICByZXR1cm4gcmVzdWx0ICogMjsgLy8gRG91YmxlIHRoZSByZXN1bHQKfSkuYXJncygnYScsICdiJykpOwoKb2JqLmFkZCg1LCAzKTsgLy8gUmV0dXJucyAxNiAoNSszKSoyCnNweS5jYWxscygwKTsgLy8geyBhOiA1LCBiOiAzIH0KCi8vIFJlc3RvcmUgb3JpZ2luYWwgbWV0aG9kCnNweS5yZXN0b3JlKCk7Cm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNSBhZ2FpbgoKLy8gU3B5IG9uIGNsYXNzIHByb3RvdHlwZXMKY2xhc3MgTXlDbGFzcyB7CiAgZG9UaGluZygpIHsgcmV0dXJuICdvcmlnaW5hbCc7IH0KfQoKY29uc3Qgc3B5ID0gbW9ja3kuc3B5KE15Q2xhc3MucHJvdG90eXBlLCAnZG9UaGluZycpOwpjb25zdCBpbnN0YW5jZSA9IG5ldyBNeUNsYXNzKCk7Cmluc3RhbmNlLmRvVGhpbmcoKTsgLy8gQ2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApzcHkuY2FsbHMoKS5sZW5ndGg7IC8vIDEKc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn46oIEFkdmFuY2VkIFVzYWdlCgojIyMgUmV0dXJuIFZhbHVlcyBQZXIgQ2FsbAoKQ29uZmlndXJlIGRpZmZlcmVudCByZXR1cm4gdmFsdWVzIGZvciBlYWNoIGNhbGw6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cgptb2NrLnJldCgnZGVmYXVsdCcpOyAvLyBDYWxsIDAgKGRlZmF1bHQgZm9yIGFsbCBjYWxscykKbW9jay5yZXQoJ2ZpcnN0JywgMSk7IC8vIENhbGwgMQptb2NrLnJldCgnc2Vjb25kJywgMik7IC8vIENhbGwgMgoKbW9jaygpOyAvLyAnZmlyc3QnCm1vY2soKTsgLy8gJ3NlY29uZCcKbW9jaygpOyAvLyAnZGVmYXVsdCcgKGZhbGxzIGJhY2sgdG8gY2FsbCAwKQpgYGAKCiMjIyBEeW5hbWljIFJldHVybiBWYWx1ZXMKClVzZSBoYW5kbGVycyBmb3IgZHluYW1pYyByZXR1cm4gdmFsdWVzIGJhc2VkIG9uIGFyZ3VtZW50czoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnKSk7Cgptb2NrLm9uUmV0KChhcmdzKSA9PiBhcmdzLnggKiAyKTsKCm1vY2soNSk7IC8vIFJldHVybnMgMTAKbW9jaygzKTsgLy8gUmV0dXJucyA2CmBgYAoKIyMjIEVycm9yIFRocm93aW5nCgpSZXR1cm4gYW4gRXJyb3IgaW5zdGFuY2UgdG8gbWFrZSB0aGUgbW9jayB0aHJvdzoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQobmV3IEVycm9yKCdUZXN0IGVycm9yJykpOwoKbW9jaygpOyAvLyBUaHJvd3MgJ1Rlc3QgZXJyb3InCmBgYAoKIyMjIEN1c3RvbSBDb250ZXh0CgpBY2Nlc3MgZnVsbCBjb250ZXh0IGluIGN1c3RvbSBmdW5jdGlvbiBib2RpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICAvLyBjb250ZXh0LnNlbGYgLSBUaGUgJ3RoaXMnIGNvbnRleHQKICAvLyBjb250ZXh0LnN0YXRlIC0gSW50ZXJuYWwgc3RhdGUgb2JqZWN0CiAgLy8gY29udGV4dC5jYWxsIC0gQ2FsbCBudW1iZXIgKDEtaW5kZXhlZCkKICAvLyBjb250ZXh0LmFyZ3MgLSBQcm9jZXNzZWQgYXJndW1lbnRzCiAgLy8gY29udGV4dC5yYXdBcmdzIC0gVW5wcm9jZXNzZWQgYXJndW1lbnRzIGFycmF5CiAgLy8gY29udGV4dC5vcmlnaW5hbCAtIE9yaWdpbmFsIGZ1bmN0aW9uIChpZiBzZXQgdmlhIC5vcmlnaW5hbCgpKQogIC8vIGNvbnRleHQucmV0IC0gQ29uZmlndXJlZCByZXR1cm4gdmFsdWUKCiAgcmV0dXJuIGNvbnRleHQucmV0IHx8ICdkZWZhdWx0JzsKfSkuYXJncygneCcsICd5JykpOwpgYGAKCiMjIyBSZXNldHRpbmcgTW9ja3MKCkFsbCBtb2NrcyBzdXBwb3J0IGAucmVzZXQoKWAgdG8gY2xlYXIgc3RhdGU6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cm1vY2sucmV0KCd2YWx1ZScpOwptb2NrKCd0ZXN0Jyk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAxCgptb2NrLnJlc2V0KCk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAwCm1vY2soKTsgLy8gUmV0dXJucyB1bmRlZmluZWQgKHJldCBjbGVhcmVkKQpgYGAKCiMjIPCfp6ogVGVzdGluZyB3aXRoIE1vY2hhL0NoYWkKCmBgYGphdmFzY3JpcHQKY29uc3QgeyBleHBlY3QgfSA9IHJlcXVpcmUoJ2NoYWknKTsKY29uc3QgbW9ja3kgPSByZXF1aXJlKCdsaWwtbW9ja3knKTsKCmRlc2NyaWJlKCdNeSBNb2R1bGUnLCAoKSA9PiB7CiAgaXQoJ2NhbGxzIHRoZSBBUEkgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMnLCAoKSA9PiB7CiAgICBjb25zdCBhcGkgPSB7CiAgICAgIGZldGNoOiAodXJsLCBvcHRpb25zKSA9PiB7IC8qIHJlYWwgaW1wbGVtZW50YXRpb24gKi8gfQogICAgfTsKCiAgICBjb25zdCBzcHkgPSBtb2NreS5zcHkoYXBpLCAnZmV0Y2gnLCBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3VybCcsICdvcHRpb25zJykpOwogICAgc3B5LnJldChQcm9taXNlLnJlc29sdmUoeyBkYXRhOiAndGVzdCcgfSkpOwoKICAgIC8vIFRlc3QgeW91ciBjb2RlIHRoYXQgY2FsbHMgYXBpLmZldGNoKCkKICAgIG15TW9kdWxlLmRvU29tZXRoaW5nKGFwaSk7CgogICAgZXhwZWN0KHNweS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CiAgICAgIHVybDogJy9hcGkvZW5kcG9pbnQnLAogICAgICBvcHRpb25zOiB7IG1ldGhvZDogJ1BPU1QnIH0KICAgIH0pOwoKICAgIHNweS5yZXN0b3JlKCk7CiAgfSk7Cn0pOwpgYGAKCiMjIPCflIQgQ29tcGFyaXNvbiB3aXRoIEplc3QKCmxpbC1tb2NreSBwcm92aWRlcyBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgdG8gSmVzdCBtb2NrcyBidXQgd2l0aCBhIGJ1aWxkZXItYmFzZWQgQVBJOgoKfCBKZXN0IHwgbGlsLW1vY2t5IHwKfC0tLS0tLXwtLS0tLS0tLS0tLXwKfCBgamVzdC5mbigpYCB8IGBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKSlgIHwKfCBgbW9jay5tb2NrUmV0dXJuVmFsdWUodmFsKWAgfCBgbW9jay5yZXQodmFsKWAgfAp8IGBtb2NrLm1vY2suY2FsbHNbMF1bMF1gIHwgYG1vY2suY2FsbHMoMClgIHwKfCBgamVzdC5zcHlPbihvYmosICdtZXRob2QnKWAgfCBgbW9ja3kuc3B5KG9iaiwgJ21ldGhvZCcpYCB8CnwgYHNweS5tb2NrUmVzdG9yZSgpYCB8IGBzcHkucmVzdG9yZSgpYCB8CgoqKktleSBkaWZmZXJlbmNlczoqKgotICoqQnVpbGRlciBwYXR0ZXJuKio6IGxpbC1tb2NreSB1c2VzIGNoYWluYWJsZSBidWlsZGVycyBmb3IgY29uZmlndXJhdGlvbgotICoqTmFtZWQgYXJndW1lbnRzKio6IEJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGFyZ3VtZW50IHRyYWNraW5nCi0gKipQZXItaW5zdGFuY2UgY2xhc3MgbW9ja3MqKjogQ29uZmlndXJlIGRpZmZlcmVudCBiZWhhdmlvciBmb3IgZWFjaCBjbGFzcyBpbnN0YW5jZQotICoqU2ltcGxlciBBUEkqKjogRmV3ZXIgY29uY2VwdHMgdG8gbGVhcm4sIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IKCiMjIPCfk50gTm90ZXMKCiMjIyBCcmVha2luZyBDaGFuZ2VzCgoqKnYxLngqKjogRnVuY3Rpb25zIHdpdGhvdXQgYC5hcmdzKClgIGNvbmZpZ3VyYXRpb24gbm93IHJldHVybiBhbiBhcmd1bWVudHMgYXJyYXkgaW4gYC5jYWxscygpYCBpbnN0ZWFkIG9mIGBudWxsYC4gVGhpcyBlbmFibGVzIHNweSBmdW5jdGlvbmFsaXR5IGJ1dCBtYXkgYWZmZWN0IGV4aXN0aW5nIGNvZGUgdGhhdCBleHBlY3RzIGBudWxsYC4KCiMjIyBCdWlsZGVyIHZzLiBCdWlsdCBNb2NrcwoKLSBCdWlsZGVycyBoYXZlIG1ldGhvZHMgbGlrZSBgLmFyZ3MoKWAsIGAuYXN5bmMoKWAsIGAuYnVpbGQoKWAKLSBCdWlsdCBtb2NrcyBoYXZlIG1ldGhvZHMgbGlrZSBgLnJldCgpYCwgYC5jYWxscygpYCwgYC5yZXNldCgpYAotIENhbGwgYC5idWlsZCgpYCBvciB1c2UgYG1vY2t5LmNyZWF0ZSgpYCB0byBjb252ZXJ0IGEgYnVpbGRlciB0byBhIG1vY2sKCmBgYGphdmFzY3JpcHQKLy8gQnVpbGRlciAobm90IHlldCB1c2FibGUgYXMgYSBtb2NrKQpjb25zdCBidWlsZGVyID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4Jyk7CgovLyBCdWlsdCBtb2NrIChyZWFkeSB0byB1c2UpCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUoYnVpbGRlcik7IC8vIG9yIGJ1aWxkZXIuYnVpbGQoKQptb2NrLnJldCgndmFsdWUnKTsKYGBgCgojIyDwn5OEIExpY2Vuc2UKCk1JVAoKIyMg8J+knSBDb250cmlidXRpbmcKCkNvbnRyaWJ1dGlvbnMgd2VsY29tZSEgUGxlYXNlIG9wZW4gYW4gaXNzdWUgb3IgUFIgb24gR2l0SHViLgoAAAAAAAAAAOgfAAAAAAAAAAAAAA",
|
|
1057
|
+
"CgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/"
|
|
1058
|
+
],
|
|
1059
|
+
[
|
|
1060
|
+
5,
|
|
1061
|
+
1,
|
|
1062
|
+
"revert",
|
|
1063
|
+
null,
|
|
1064
|
+
"AwAAAAAAAAAAAAAAAAAAAAAAAAAqIAAAIyBsaWwtbW9ja3kKCkEgbGlnaHR3ZWlnaHQgSmF2YVNjcmlwdCBtb2NraW5nIGxpYnJhcnkgZm9yIHRlc3RpbmcuIENyZWF0ZSBtb2NrIGZ1bmN0aW9ucywgb2JqZWN0cywgY2xhc3NlcywgYW5kIHByb3BlcnRpZXMgd2l0aCBjYWxsIHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgY29udHJvbC4gSW5jbHVkZXMgc3B5IGZ1bmN0aW9uYWxpdHkgZm9yIHRyYWNraW5nIGNhbGxzIHRvIGV4aXN0aW5nIG1ldGhvZHMuCgojIyDwn46vIEZlYXR1cmVzCgotIPCfqrYgKipMaWdodHdlaWdodCoqOiBNaW5pbWFsIGRlcGVuZGVuY2llcywgZm9jdXNlZCBvbiBjb3JlIG1vY2tpbmcgZnVuY3Rpb25hbGl0eQotIPCflKcgKipGbGV4aWJsZSoqOiBCdWlsZGVyIHBhdHRlcm4gZm9yIGNvbXBvc2FibGUgbW9jayBjb25maWd1cmF0aW9uCi0g8J+TiiAqKkNhbGwgVHJhY2tpbmcqKjogQXV0b21hdGljIHRyYWNraW5nIG9mIGFsbCBmdW5jdGlvbiBjYWxscyB3aXRoIGRlZXAtY2xvbmVkIGFyZ3VtZW50cwotIPCfjq0gKipTcHkgU3VwcG9ydCoqOiBUcmFjayBjYWxscyB0byBleGlzdGluZyBtZXRob2RzIHdoaWxlIHByZXNlcnZpbmcgb3IgcmVwbGFjaW5nIGJlaGF2aW9yCi0g8J+Pl++4jyAqKkNsYXNzIE1vY2tzKio6IFBlci1pbnN0YW5jZSBtb2NrIGNvbmZpZ3VyYXRpb24gZm9yIGNvbXBsZXggY2xhc3MgdGVzdGluZwotIOKchSAqKlNpbXBsZSBBUEkqKjogQ2xlYW4sIGludHVpdGl2ZSBBUEkgdGhhdCdzIGVhc3kgdG8gbGVhcm4gYW5kIHVzZQoKIyMg8J+TpSBJbnN0YWxsYXRpb24KCmBgYGJhc2gKbnBtIGluc3RhbGwgbGlsLW1vY2t5CmBgYAoKIyMg8J+agCBRdWljayBTdGFydAoKYGBgamF2YXNjcmlwdApjb25zdCBtb2NreSA9IHJlcXVpcmUoJ2xpbC1tb2NreScpOwoKLy8gQ3JlYXRlIGEgc2ltcGxlIG1vY2sgZnVuY3Rpb24KY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnbmFtZScsICdhZ2UnKS5idWlsZCgpOwptb2NrLnJldCgnc3VjY2VzcycpOwoKbW9jaygnQWxpY2UnLCAzMCk7Cgpjb25zb2xlLmxvZyhtb2NrLmNhbGxzKDApKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDMwIH0KY29uc29sZS5sb2cobW9jay5jYWxscygpLmxlbmd0aCk7IC8vIDEKCi8vIFNweSBvbiBhbiBleGlzdGluZyBtZXRob2QKY29uc3Qgb2JqID0geyBncmVldDogKG5hbWUpID0+IGBIZWxsbywgJHtuYW1lfSFgIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdncmVldCcpOwoKb2JqLmdyZWV0KCdXb3JsZCcpOwpjb25zb2xlLmxvZyhzcHkuY2FsbHMoMCkpOyAvLyBbJ1dvcmxkJ10Kc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn5OWIEFQSSBSZWZlcmVuY2UKCiMjIyDwn5SoIEZ1bmN0aW9uIE1vY2tzCgpDcmVhdGUgbW9jayBmdW5jdGlvbnMgd2l0aCBjb25maWd1cmFibGUgYXJndW1lbnQgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZXM6CgpgYGBqYXZhc2NyaXB0Ci8vIEJhc2ljIGZ1bmN0aW9uIG1vY2sKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQoJ3JldHVybiB2YWx1ZScpOwoKLy8gTmFtZWQgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnLCAneScpLmJ1aWxkKCk7Cm1vY2soJ2hlbGxvJywgJ3dvcmxkJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgeDogJ2hlbGxvJywgeTogJ3dvcmxkJyB9CgovLyBBcmd1bWVudHMgd2l0aCBkZWZhdWx0cwpjb25zdCBtb2NrID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJywgeyBhZ2U6IDE4IH0pLmJ1aWxkKCk7Cm1vY2soJ0FsaWNlJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAxOCB9CgovLyBTZWxlY3Qgc3BlY2lmaWMgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFyZ1NlbGVjdCgxKS5idWlsZCgpOwptb2NrKCdmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnKTsKbW9jay5jYWxscygwKTsgLy8gJ3NlY29uZCcKCi8vIEN1c3RvbSBmdW5jdGlvbiBib2R5CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewogIHJldHVybiBjb250ZXh0LmFyZ3MueCArIGNvbnRleHQuYXJncy55Owp9KS5hcmdzKCd4JywgJ3knKS5idWlsZCgpOwptb2NrLnJldCgxMDApOyAvLyBDYW4gc3RpbGwgb3ZlcnJpZGUgdmlhIHJldAptb2NrKDUsIDMpOyAvLyBSZXR1cm5zIDEwMAoKLy8gQXN5bmMgZnVuY3Rpb25zCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFzeW5jKCkuYnVpbGQoKTsKYXdhaXQgbW9jaygpOyAvLyBSZXR1cm5zIGEgcHJvbWlzZQpgYGAKCiMjIyDwn5OmIE9iamVjdCBNb2NrcwoKQ3JlYXRlIG1vY2sgb2JqZWN0cyB3aXRoIG5lc3RlZCBtb2NrczoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5vYmplY3QoewogIG1ldGhvZDogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdpbnB1dCcpLAogIG5lc3RlZDogbW9ja3kub2JqZWN0KHsKICAgIGRlZXBNZXRob2Q6IG1vY2t5LmZ1bmN0aW9uKCkKICB9KSwKICB2YWx1ZTogNDIKfSkpOwoKbW9jay5tZXRob2QucmV0KCdyZXN1bHQnKTsKbW9jay5tZXRob2QoJ3Rlc3QnKTsKbW9jay5tZXRob2QuY2FsbHMoMCk7IC8vIHsgaW5wdXQ6ICd0ZXN0JyB9CgovLyBSZXNldCBhbGwgbmVzdGVkIG1vY2tzCm1vY2sucmVzZXQoKTsKYGBgCgojIyMg8J+Pm++4jyBDbGFzcyBNb2NrcwoKQ3JlYXRlIG1vY2sgY2xhc3NlcyB3aXRoIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uOgoKYGBgamF2YXNjcmlwdApjb25zdCBNb2NrID0gbW9ja3kuY3JlYXRlKG1vY2t5LmNsYXNzKHsKICBjb25zdHJ1Y3RvcjogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJyksCiAgZ3JlZXQ6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnZ3JlZXRpbmcnKQp9KSk7CgovLyBQcmUtY29uZmlndXJlIGluc3RhbmNlIGJlaGF2aW9yCk1vY2suaW5zdCgwKS5ncmVldC5yZXQoJ0hlbGxvIScpOwpNb2NrLmluc3QoMSkuZ3JlZXQucmV0KCdIb2xhIScpOwoKY29uc3QgaW5zdGFuY2UxID0gbmV3IE1vY2soJ0FsaWNlJyk7CmNvbnN0IGluc3RhbmNlMiA9IG5ldyBNb2NrKCdCb2InKTsKCmluc3RhbmNlMS5ncmVldCgnSGknKTsgLy8gUmV0dXJucyAnSGVsbG8hJwppbnN0YW5jZTIuZ3JlZXQoJ0hpJyk7IC8vIFJldHVybnMgJ0hvbGEhJwoKLy8gQWNjZXNzIGluc3RhbmNlIG1vY2tzIGFmdGVyIGNyZWF0aW9uCk1vY2suaW5zdCgwKS5jb25zdHJ1Y3Rvci5jYWxscygwKTsgLy8geyBuYW1lOiAnQWxpY2UnIH0KTW9jay5udW1JbnN0cygpOyAvLyAyCmBgYAoKIyMjIPCfjq8gUHJvcGVydHkgTW9ja3MKCkNyZWF0ZSBnZXR0ZXIvc2V0dGVyIHByb3BlcnRpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kub2JqZWN0KHsKICB2YWx1ZTogbW9ja3kucHJvcGVydHkoKQp9KSk7Cgptb2NrLnZhbHVlID0gNDI7CmNvbnNvbGUubG9nKG1vY2sudmFsdWUpOyAvLyA0MgpgYGAKCiMjIyDwn5SNIFNweSBGdW5jdGlvbgoKVHJhY2sgY2FsbHMgdG8gZXhpc3RpbmcgbWV0aG9kcyB3aGlsZSBvcHRpb25hbGx5IHJlcGxhY2luZyB0aGVpciBpbXBsZW1lbnRhdGlvbjoKCmBgYGphdmFzY3JpcHQKLy8gQmFzaWMgc3B5IC0gY2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApjb25zdCBvYmogPSB7IGFkZDogKGEsIGIpID0+IGEgKyBiIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdhZGQnKTsKCm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNQpzcHkuY2FsbHMoMCk7IC8vIFsyLCAzXQoKLy8gT3ZlcnJpZGUgcmV0dXJuIHZhbHVlCnNweS5yZXQoMTAwKTsKb2JqLmFkZCgyLCAzKTsgLy8gUmV0dXJucyAxMDAKCi8vIFNweSB3aXRoIGN1c3RvbSByZXBsYWNlbWVudApjb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnYWRkJywgbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICBjb25zdCByZXN1bHQgPSBjb250ZXh0Lm9yaWdpbmFsLmFwcGx5KGNvbnRleHQuc2VsZiwgY29udGV4dC5yYXdBcmdzKTsKICByZXR1cm4gcmVzdWx0ICogMjsgLy8gRG91YmxlIHRoZSByZXN1bHQKfSkuYXJncygnYScsICdiJykpOwoKb2JqLmFkZCg1LCAzKTsgLy8gUmV0dXJucyAxNiAoNSszKSoyCnNweS5jYWxscygwKTsgLy8geyBhOiA1LCBiOiAzIH0KCi8vIFJlc3RvcmUgb3JpZ2luYWwgbWV0aG9kCnNweS5yZXN0b3JlKCk7Cm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNSBhZ2FpbgoKLy8gU3B5IG9uIGNsYXNzIHByb3RvdHlwZXMKY2xhc3MgTXlDbGFzcyB7CiAgZG9UaGluZygpIHsgcmV0dXJuICdvcmlnaW5hbCc7IH0KfQoKY29uc3Qgc3B5ID0gbW9ja3kuc3B5KE15Q2xhc3MucHJvdG90eXBlLCAnZG9UaGluZycpOwpjb25zdCBpbnN0YW5jZSA9IG5ldyBNeUNsYXNzKCk7Cmluc3RhbmNlLmRvVGhpbmcoKTsgLy8gQ2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApzcHkuY2FsbHMoKS5sZW5ndGg7IC8vIDEKc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn46oIEFkdmFuY2VkIFVzYWdlCgojIyMgUmV0dXJuIFZhbHVlcyBQZXIgQ2FsbAoKQ29uZmlndXJlIGRpZmZlcmVudCByZXR1cm4gdmFsdWVzIGZvciBlYWNoIGNhbGw6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cgptb2NrLnJldCgnZGVmYXVsdCcpOyAvLyBDYWxsIDAgKGRlZmF1bHQgZm9yIGFsbCBjYWxscykKbW9jay5yZXQoJ2ZpcnN0JywgMSk7IC8vIENhbGwgMQptb2NrLnJldCgnc2Vjb25kJywgMik7IC8vIENhbGwgMgoKbW9jaygpOyAvLyAnZmlyc3QnCm1vY2soKTsgLy8gJ3NlY29uZCcKbW9jaygpOyAvLyAnZGVmYXVsdCcgKGZhbGxzIGJhY2sgdG8gY2FsbCAwKQpgYGAKCiMjIyBEeW5hbWljIFJldHVybiBWYWx1ZXMKClVzZSBoYW5kbGVycyBmb3IgZHluYW1pYyByZXR1cm4gdmFsdWVzIGJhc2VkIG9uIGFyZ3VtZW50czoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmNyZWF0ZShtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnKSk7Cgptb2NrLm9uUmV0KChhcmdzKSA9PiBhcmdzLnggKiAyKTsKCm1vY2soNSk7IC8vIFJldHVybnMgMTAKbW9jaygzKTsgLy8gUmV0dXJucyA2CmBgYAoKIyMjIEVycm9yIFRocm93aW5nCgpSZXR1cm4gYW4gRXJyb3IgaW5zdGFuY2UgdG8gbWFrZSB0aGUgbW9jayB0aHJvdzoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQobmV3IEVycm9yKCdUZXN0IGVycm9yJykpOwoKbW9jaygpOyAvLyBUaHJvd3MgJ1Rlc3QgZXJyb3InCmBgYAoKIyMjIEN1c3RvbSBDb250ZXh0CgpBY2Nlc3MgZnVsbCBjb250ZXh0IGluIGN1c3RvbSBmdW5jdGlvbiBib2RpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICAvLyBjb250ZXh0LnNlbGYgLSBUaGUgJ3RoaXMnIGNvbnRleHQKICAvLyBjb250ZXh0LnN0YXRlIC0gSW50ZXJuYWwgc3RhdGUgb2JqZWN0CiAgLy8gY29udGV4dC5jYWxsIC0gQ2FsbCBudW1iZXIgKDEtaW5kZXhlZCkKICAvLyBjb250ZXh0LmFyZ3MgLSBQcm9jZXNzZWQgYXJndW1lbnRzCiAgLy8gY29udGV4dC5yYXdBcmdzIC0gVW5wcm9jZXNzZWQgYXJndW1lbnRzIGFycmF5CiAgLy8gY29udGV4dC5vcmlnaW5hbCAtIE9yaWdpbmFsIGZ1bmN0aW9uIChpZiBzZXQgdmlhIC5vcmlnaW5hbCgpKQogIC8vIGNvbnRleHQucmV0IC0gQ29uZmlndXJlZCByZXR1cm4gdmFsdWUKCiAgcmV0dXJuIGNvbnRleHQucmV0IHx8ICdkZWZhdWx0JzsKfSkuYXJncygneCcsICd5JykpOwpgYGAKCiMjIyBSZXNldHRpbmcgTW9ja3MKCkFsbCBtb2NrcyBzdXBwb3J0IGAucmVzZXQoKWAgdG8gY2xlYXIgc3RhdGU6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cm1vY2sucmV0KCd2YWx1ZScpOwptb2NrKCd0ZXN0Jyk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAxCgptb2NrLnJlc2V0KCk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAwCm1vY2soKTsgLy8gUmV0dXJucyB1bmRlZmluZWQgKHJldCBjbGVhcmVkKQpgYGAKCiMjIPCfp6ogVGVzdGluZyB3aXRoIE1vY2hhL0NoYWkKCmBgYGphdmFzY3JpcHQKY29uc3QgeyBleHBlY3QgfSA9IHJlcXVpcmUoJ2NoYWknKTsKY29uc3QgbW9ja3kgPSByZXF1aXJlKCdsaWwtbW9ja3knKTsKCmRlc2NyaWJlKCdNeSBNb2R1bGUnLCAoKSA9PiB7CiAgaXQoJ2NhbGxzIHRoZSBBUEkgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMnLCAoKSA9PiB7CiAgICBjb25zdCBhcGkgPSB7CiAgICAgIGZldGNoOiAodXJsLCBvcHRpb25zKSA9PiB7IC8qIHJlYWwgaW1wbGVtZW50YXRpb24gKi8gfQogICAgfTsKCiAgICBjb25zdCBzcHkgPSBtb2NreS5zcHkoYXBpLCAnZmV0Y2gnLCBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3VybCcsICdvcHRpb25zJykpOwogICAgc3B5LnJldChQcm9taXNlLnJlc29sdmUoeyBkYXRhOiAndGVzdCcgfSkpOwoKICAgIC8vIFRlc3QgeW91ciBjb2RlIHRoYXQgY2FsbHMgYXBpLmZldGNoKCkKICAgIG15TW9kdWxlLmRvU29tZXRoaW5nKGFwaSk7CgogICAgZXhwZWN0KHNweS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CiAgICAgIHVybDogJy9hcGkvZW5kcG9pbnQnLAogICAgICBvcHRpb25zOiB7IG1ldGhvZDogJ1BPU1QnIH0KICAgIH0pOwoKICAgIHNweS5yZXN0b3JlKCk7CiAgfSk7Cn0pOwpgYGAKCiMjIPCflIQgQ29tcGFyaXNvbiB3aXRoIEplc3QKCmxpbC1tb2NreSBwcm92aWRlcyBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgdG8gSmVzdCBtb2NrcyBidXQgd2l0aCBhIGJ1aWxkZXItYmFzZWQgQVBJOgoKfCBKZXN0IHwgbGlsLW1vY2t5IHwKfC0tLS0tLXwtLS0tLS0tLS0tLXwKfCBgamVzdC5mbigpYCB8IGBtb2NreS5jcmVhdGUobW9ja3kuZnVuY3Rpb24oKSlgIHwKfCBgbW9jay5tb2NrUmV0dXJuVmFsdWUodmFsKWAgfCBgbW9jay5yZXQodmFsKWAgfAp8IGBtb2NrLm1vY2suY2FsbHNbMF1bMF1gIHwgYG1vY2suY2FsbHMoMClgIHwKfCBgamVzdC5zcHlPbihvYmosICdtZXRob2QnKWAgfCBgbW9ja3kuc3B5KG9iaiwgJ21ldGhvZCcpYCB8CnwgYHNweS5tb2NrUmVzdG9yZSgpYCB8IGBzcHkucmVzdG9yZSgpYCB8CgoqKktleSBkaWZmZXJlbmNlczoqKgotICoqQnVpbGRlciBwYXR0ZXJuKio6IGxpbC1tb2NreSB1c2VzIGNoYWluYWJsZSBidWlsZGVycyBmb3IgY29uZmlndXJhdGlvbgotICoqTmFtZWQgYXJndW1lbnRzKio6IEJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGFyZ3VtZW50IHRyYWNraW5nCi0gKipQZXItaW5zdGFuY2UgY2xhc3MgbW9ja3MqKjogQ29uZmlndXJlIGRpZmZlcmVudCBiZWhhdmlvciBmb3IgZWFjaCBjbGFzcyBpbnN0YW5jZQotICoqU2ltcGxlciBBUEkqKjogRmV3ZXIgY29uY2VwdHMgdG8gbGVhcm4sIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IKCiMjIPCfk50gTm90ZXMKCiMjIyBCcmVha2luZyBDaGFuZ2VzCgoqKnYxLngqKjogRnVuY3Rpb25zIHdpdGhvdXQgYC5hcmdzKClgIGNvbmZpZ3VyYXRpb24gbm93IHJldHVybiBhbiBhcmd1bWVudHMgYXJyYXkgaW4gYC5jYWxscygpYCBpbnN0ZWFkIG9mIGBudWxsYC4gVGhpcyBlbmFibGVzIHNweSBmdW5jdGlvbmFsaXR5IGJ1dCBtYXkgYWZmZWN0IGV4aXN0aW5nIGNvZGUgdGhhdCBleHBlY3RzIGBudWxsYC4KCiMjIyBCdWlsZGVyIHZzLiBCdWlsdCBNb2NrcwoKLSBCdWlsZGVycyBoYXZlIG1ldGhvZHMgbGlrZSBgLmFyZ3MoKWAsIGAuYXN5bmMoKWAsIGAuYnVpbGQoKWAKLSBCdWlsdCBtb2NrcyBoYXZlIG1ldGhvZHMgbGlrZSBgLnJldCgpYCwgYC5jYWxscygpYCwgYC5yZXNldCgpYAotIENhbGwgYC5idWlsZCgpYCBvciB1c2UgYG1vY2t5LmNyZWF0ZSgpYCB0byBjb252ZXJ0IGEgYnVpbGRlciB0byBhIG1vY2sKCmBgYGphdmFzY3JpcHQKLy8gQnVpbGRlciAobm90IHlldCB1c2FibGUgYXMgYSBtb2NrKQpjb25zdCBidWlsZGVyID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4Jyk7CgovLyBCdWlsdCBtb2NrIChyZWFkeSB0byB1c2UpCmNvbnN0IG1vY2sgPSBtb2NreS5jcmVhdGUoYnVpbGRlcik7IC8vIG9yIGJ1aWxkZXIuYnVpbGQoKQptb2NrLnJldCgndmFsdWUnKTsKYGBgCgojIyDwn5OEIExpY2Vuc2UKCk1JVAoKIyMg8J+knSBDb250cmlidXRpbmcKCkNvbnRyaWJ1dGlvbnMgd2VsY29tZSEgUGxlYXNlIG9wZW4gYW4gaXNzdWUgb3IgUFIgb24gR2l0SHViLgoAAAAAAAAAAAggAAAAAAAAAAAAAAAAAAAAAAAACCAAAAAAAAAAAAAA",
|
|
1065
|
+
"CgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/"
|
|
1066
|
+
],
|
|
1067
|
+
[
|
|
1068
|
+
3,
|
|
1069
|
+
1,
|
|
1070
|
+
"revert",
|
|
1071
|
+
null,
|
|
1072
|
+
"CAAAAAAAAAAAAAAAAAAAAAAAAABKIAAAIyBsaWwtbW9ja3kKCkEgbGlnaHR3ZWlnaHQgSmF2YVNjcmlwdCBtb2NraW5nIGxpYnJhcnkgZm9yIHRlc3RpbmcuIENyZWF0ZSBtb2NrIGZ1bmN0aW9ucywgb2JqZWN0cywgY2xhc3NlcywgYW5kIHByb3BlcnRpZXMgd2l0aCBjYWxsIHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgY29udHJvbC4gSW5jbHVkZXMgc3B5IGZ1bmN0aW9uYWxpdHkgZm9yIHRyYWNraW5nIGNhbGxzIHRvIGV4aXN0aW5nIG1ldGhvZHMuCgojIyDwn46vIEZlYXR1cmVzCgotIPCfqrYgKipMaWdodHdlaWdodCoqOiBNaW5pbWFsIGRlcGVuZGVuY2llcywgZm9jdXNlZCBvbiBjb3JlIG1vY2tpbmcgZnVuY3Rpb25hbGl0eQotIPCflKcgKipGbGV4aWJsZSoqOiBCdWlsZGVyIHBhdHRlcm4gZm9yIGNvbXBvc2FibGUgbW9jayBjb25maWd1cmF0aW9uCi0g8J+TiiAqKkNhbGwgVHJhY2tpbmcqKjogQXV0b21hdGljIHRyYWNraW5nIG9mIGFsbCBmdW5jdGlvbiBjYWxscyB3aXRoIGRlZXAtY2xvbmVkIGFyZ3VtZW50cwotIPCfjq0gKipTcHkgU3VwcG9ydCoqOiBUcmFjayBjYWxscyB0byBleGlzdGluZyBtZXRob2RzIHdoaWxlIHByZXNlcnZpbmcgb3IgcmVwbGFjaW5nIGJlaGF2aW9yCi0g8J+Pl++4jyAqKkNsYXNzIE1vY2tzKio6IFBlci1pbnN0YW5jZSBtb2NrIGNvbmZpZ3VyYXRpb24gZm9yIGNvbXBsZXggY2xhc3MgdGVzdGluZwotIOKchSAqKlNpbXBsZSBBUEkqKjogQ2xlYW4sIGludHVpdGl2ZSBBUEkgdGhhdCdzIGVhc3kgdG8gbGVhcm4gYW5kIHVzZQoKIyMg8J+TpSBJbnN0YWxsYXRpb24KCmBgYGJhc2gKbnBtIGluc3RhbGwgbGlsLW1vY2t5CmBgYAoKIyMg8J+agCBRdWljayBTdGFydAoKYGBgamF2YXNjcmlwdApjb25zdCBtb2NreSA9IHJlcXVpcmUoJ2xpbC1tb2NreScpOwoKLy8gQ3JlYXRlIGEgc2ltcGxlIG1vY2sgZnVuY3Rpb24KY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnbmFtZScsICdhZ2UnKS5idWlsZCgpOwptb2NrLnJldCgnc3VjY2VzcycpOwoKbW9jaygnQWxpY2UnLCAzMCk7Cgpjb25zb2xlLmxvZyhtb2NrLmNhbGxzKDApKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDMwIH0KY29uc29sZS5sb2cobW9jay5jYWxscygpLmxlbmd0aCk7IC8vIDEKCi8vIFNweSBvbiBhbiBleGlzdGluZyBtZXRob2QKY29uc3Qgb2JqID0geyBncmVldDogKG5hbWUpID0+IGBIZWxsbywgJHtuYW1lfSFgIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdncmVldCcpOwoKb2JqLmdyZWV0KCdXb3JsZCcpOwpjb25zb2xlLmxvZyhzcHkuY2FsbHMoMCkpOyAvLyBbJ1dvcmxkJ10Kc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn5OWIEFQSSBSZWZlcmVuY2UKCiMjIyDwn5SoIEZ1bmN0aW9uIE1vY2tzCgpDcmVhdGUgbW9jayBmdW5jdGlvbnMgd2l0aCBjb25maWd1cmFibGUgYXJndW1lbnQgdHJhY2tpbmcgYW5kIHJldHVybiB2YWx1ZXM6CgpgYGBqYXZhc2NyaXB0Ci8vIEJhc2ljIGZ1bmN0aW9uIG1vY2sKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQoJ3JldHVybiB2YWx1ZScpOwoKLy8gTmFtZWQgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3gnLCAneScpLmJ1aWxkKCk7Cm1vY2soJ2hlbGxvJywgJ3dvcmxkJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgeDogJ2hlbGxvJywgeTogJ3dvcmxkJyB9CgovLyBBcmd1bWVudHMgd2l0aCBkZWZhdWx0cwpjb25zdCBtb2NrID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJywgeyBhZ2U6IDE4IH0pLmJ1aWxkKCk7Cm1vY2soJ0FsaWNlJyk7Cm1vY2suY2FsbHMoMCk7IC8vIHsgbmFtZTogJ0FsaWNlJywgYWdlOiAxOCB9CgovLyBTZWxlY3Qgc3BlY2lmaWMgYXJndW1lbnRzCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFyZ1NlbGVjdCgxKS5idWlsZCgpOwptb2NrKCdmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnKTsKbW9jay5jYWxscygwKTsgLy8gJ3NlY29uZCcKCi8vIEN1c3RvbSBmdW5jdGlvbiBib2R5CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewogIHJldHVybiBjb250ZXh0LmFyZ3MueCArIGNvbnRleHQuYXJncy55Owp9KS5hcmdzKCd4JywgJ3knKS5idWlsZCgpOwptb2NrLnJldCgxMDApOyAvLyBDYW4gc3RpbGwgb3ZlcnJpZGUgdmlhIHJldAptb2NrKDUsIDMpOyAvLyBSZXR1cm5zIDEwMAoKLy8gQXN5bmMgZnVuY3Rpb25zCmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmFzeW5jKCkuYnVpbGQoKTsKYXdhaXQgbW9jaygpOyAvLyBSZXR1cm5zIGEgcHJvbWlzZQpgYGAKCiMjIyDwn5OmIE9iamVjdCBNb2NrcwoKQ3JlYXRlIG1vY2sgb2JqZWN0cyB3aXRoIG5lc3RlZCBtb2NrczoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5Lm9iamVjdCh7CiAgbWV0aG9kOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2lucHV0JyksCiAgbmVzdGVkOiBtb2NreS5vYmplY3QoewogICAgZGVlcE1ldGhvZDogbW9ja3kuZnVuY3Rpb24oKQogIH0pLAogIHZhbHVlOiA0Mgp9KS5idWlsZCgpOwoKbW9jay5tZXRob2QucmV0KCdyZXN1bHQnKTsKbW9jay5tZXRob2QoJ3Rlc3QnKTsKbW9jay5tZXRob2QuY2FsbHMoMCk7IC8vIHsgaW5wdXQ6ICd0ZXN0JyB9CgovLyBSZXNldCBhbGwgbmVzdGVkIG1vY2tzCm1vY2sucmVzZXQoKTsKYGBgCgojIyMg8J+Pm++4jyBDbGFzcyBNb2NrcwoKQ3JlYXRlIG1vY2sgY2xhc3NlcyB3aXRoIHBlci1pbnN0YW5jZSBjb25maWd1cmF0aW9uOgoKYGBgamF2YXNjcmlwdApjb25zdCBNb2NrID0gbW9ja3kuY2xhc3MoewogIGNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ25hbWUnKSwKICBncmVldDogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdncmVldGluZycpCn0pLmJ1aWxkKCk7CgovLyBQcmUtY29uZmlndXJlIGluc3RhbmNlIGJlaGF2aW9yCk1vY2suaW5zdCgwKS5ncmVldC5yZXQoJ0hlbGxvIScpOwpNb2NrLmluc3QoMSkuZ3JlZXQucmV0KCdIb2xhIScpOwoKY29uc3QgaW5zdGFuY2UxID0gbmV3IE1vY2soJ0FsaWNlJyk7CmNvbnN0IGluc3RhbmNlMiA9IG5ldyBNb2NrKCdCb2InKTsKCmluc3RhbmNlMS5ncmVldCgnSGknKTsgLy8gUmV0dXJucyAnSGVsbG8hJwppbnN0YW5jZTIuZ3JlZXQoJ0hpJyk7IC8vIFJldHVybnMgJ0hvbGEhJwoKLy8gQWNjZXNzIGluc3RhbmNlIG1vY2tzIGFmdGVyIGNyZWF0aW9uCk1vY2suaW5zdCgwKS5jb25zdHJ1Y3Rvci5jYWxscygwKTsgLy8geyBuYW1lOiAnQWxpY2UnIH0KTW9jay5udW1JbnN0cygpOyAvLyAyCmBgYAoKIyMjIPCfjq8gUHJvcGVydHkgTW9ja3MKCkNyZWF0ZSBnZXR0ZXIvc2V0dGVyIHByb3BlcnRpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5vYmplY3QoewogIHZhbHVlOiBtb2NreS5wcm9wZXJ0eSgpCn0pLmJ1aWxkKCk7Cgptb2NrLnZhbHVlID0gNDI7CmNvbnNvbGUubG9nKG1vY2sudmFsdWUpOyAvLyA0MgpgYGAKCiMjIyDwn5SNIFNweSBGdW5jdGlvbgoKVHJhY2sgY2FsbHMgdG8gZXhpc3RpbmcgbWV0aG9kcyB3aGlsZSBvcHRpb25hbGx5IHJlcGxhY2luZyB0aGVpciBpbXBsZW1lbnRhdGlvbjoKCmBgYGphdmFzY3JpcHQKLy8gQmFzaWMgc3B5IC0gY2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApjb25zdCBvYmogPSB7IGFkZDogKGEsIGIpID0+IGEgKyBiIH07CmNvbnN0IHNweSA9IG1vY2t5LnNweShvYmosICdhZGQnKTsKCm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNQpzcHkuY2FsbHMoMCk7IC8vIFsyLCAzXQoKLy8gT3ZlcnJpZGUgcmV0dXJuIHZhbHVlCnNweS5yZXQoMTAwKTsKb2JqLmFkZCgyLCAzKTsgLy8gUmV0dXJucyAxMDAKCi8vIFNweSB3aXRoIGN1c3RvbSByZXBsYWNlbWVudApjb25zdCBzcHkgPSBtb2NreS5zcHkob2JqLCAnYWRkJywgbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICBjb25zdCByZXN1bHQgPSBjb250ZXh0Lm9yaWdpbmFsLmFwcGx5KGNvbnRleHQuc2VsZiwgY29udGV4dC5yYXdBcmdzKTsKICByZXR1cm4gcmVzdWx0ICogMjsgLy8gRG91YmxlIHRoZSByZXN1bHQKfSkuYXJncygnYScsICdiJykpOwoKb2JqLmFkZCg1LCAzKTsgLy8gUmV0dXJucyAxNiAoNSszKSoyCnNweS5jYWxscygwKTsgLy8geyBhOiA1LCBiOiAzIH0KCi8vIFJlc3RvcmUgb3JpZ2luYWwgbWV0aG9kCnNweS5yZXN0b3JlKCk7Cm9iai5hZGQoMiwgMyk7IC8vIFJldHVybnMgNSBhZ2FpbgoKLy8gU3B5IG9uIGNsYXNzIHByb3RvdHlwZXMKY2xhc3MgTXlDbGFzcyB7CiAgZG9UaGluZygpIHsgcmV0dXJuICdvcmlnaW5hbCc7IH0KfQoKY29uc3Qgc3B5ID0gbW9ja3kuc3B5KE15Q2xhc3MucHJvdG90eXBlLCAnZG9UaGluZycpOwpjb25zdCBpbnN0YW5jZSA9IG5ldyBNeUNsYXNzKCk7Cmluc3RhbmNlLmRvVGhpbmcoKTsgLy8gQ2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbApzcHkuY2FsbHMoKS5sZW5ndGg7IC8vIDEKc3B5LnJlc3RvcmUoKTsKYGBgCgojIyDwn46oIEFkdmFuY2VkIFVzYWdlCgojIyMgUmV0dXJuIFZhbHVlcyBQZXIgQ2FsbAoKQ29uZmlndXJlIGRpZmZlcmVudCByZXR1cm4gdmFsdWVzIGZvciBlYWNoIGNhbGw6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cgptb2NrLnJldCgnZGVmYXVsdCcpOyAvLyBDYWxsIDAgKGRlZmF1bHQgZm9yIGFsbCBjYWxscykKbW9jay5yZXQoJ2ZpcnN0JywgMSk7IC8vIENhbGwgMQptb2NrLnJldCgnc2Vjb25kJywgMik7IC8vIENhbGwgMgoKbW9jaygpOyAvLyAnZmlyc3QnCm1vY2soKTsgLy8gJ3NlY29uZCcKbW9jaygpOyAvLyAnZGVmYXVsdCcgKGZhbGxzIGJhY2sgdG8gY2FsbCAwKQpgYGAKCiMjIyBEeW5hbWljIFJldHVybiBWYWx1ZXMKClVzZSBoYW5kbGVycyBmb3IgZHluYW1pYyByZXR1cm4gdmFsdWVzIGJhc2VkIG9uIGFyZ3VtZW50czoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygneCcpLmJ1aWxkKCk7Cgptb2NrLm9uUmV0KChhcmdzKSA9PiBhcmdzLnggKiAyKTsKCm1vY2soNSk7IC8vIFJldHVybnMgMTAKbW9jaygzKTsgLy8gUmV0dXJucyA2CmBgYAoKIyMjIEVycm9yIFRocm93aW5nCgpSZXR1cm4gYW4gRXJyb3IgaW5zdGFuY2UgdG8gbWFrZSB0aGUgbW9jayB0aHJvdzoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQobmV3IEVycm9yKCdUZXN0IGVycm9yJykpOwoKbW9jaygpOyAvLyBUaHJvd3MgJ1Rlc3QgZXJyb3InCmBgYAoKIyMjIEN1c3RvbSBDb250ZXh0CgpBY2Nlc3MgZnVsbCBjb250ZXh0IGluIGN1c3RvbSBmdW5jdGlvbiBib2RpZXM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewogIC8vIGNvbnRleHQuc2VsZiAtIFRoZSAndGhpcycgY29udGV4dAogIC8vIGNvbnRleHQuc3RhdGUgLSBJbnRlcm5hbCBzdGF0ZSBvYmplY3QKICAvLyBjb250ZXh0LmNhbGwgLSBDYWxsIG51bWJlciAoMS1pbmRleGVkKQogIC8vIGNvbnRleHQuYXJncyAtIFByb2Nlc3NlZCBhcmd1bWVudHMKICAvLyBjb250ZXh0LnJhd0FyZ3MgLSBVbnByb2Nlc3NlZCBhcmd1bWVudHMgYXJyYXkKICAvLyBjb250ZXh0Lm9yaWdpbmFsIC0gT3JpZ2luYWwgZnVuY3Rpb24gKGlmIHNldCB2aWEgLm9yaWdpbmFsKCkpCiAgLy8gY29udGV4dC5yZXQgLSBDb25maWd1cmVkIHJldHVybiB2YWx1ZQoKICByZXR1cm4gY29udGV4dC5yZXQgfHwgJ2RlZmF1bHQnOwp9KS5hcmdzKCd4JywgJ3knKS5idWlsZCgpOwpgYGAKCiMjIyBSZXNldHRpbmcgTW9ja3MKCkFsbCBtb2NrcyBzdXBwb3J0IGAucmVzZXQoKWAgdG8gY2xlYXIgc3RhdGU6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cm1vY2sucmV0KCd2YWx1ZScpOwptb2NrKCd0ZXN0Jyk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAxCgptb2NrLnJlc2V0KCk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAwCm1vY2soKTsgLy8gUmV0dXJucyB1bmRlZmluZWQgKHJldCBjbGVhcmVkKQpgYGAKCiMjIPCfp6ogVGVzdGluZyB3aXRoIE1vY2hhL0NoYWkKCmBgYGphdmFzY3JpcHQKY29uc3QgeyBleHBlY3QgfSA9IHJlcXVpcmUoJ2NoYWknKTsKY29uc3QgbW9ja3kgPSByZXF1aXJlKCdsaWwtbW9ja3knKTsKCmRlc2NyaWJlKCdNeSBNb2R1bGUnLCAoKSA9PiB7CiAgaXQoJ2NhbGxzIHRoZSBBUEkgd2l0aCBjb3JyZWN0IHBhcmFtZXRlcnMnLCAoKSA9PiB7CiAgICBjb25zdCBhcGkgPSB7CiAgICAgIGZldGNoOiAodXJsLCBvcHRpb25zKSA9PiB7IC8qIHJlYWwgaW1wbGVtZW50YXRpb24gKi8gfQogICAgfTsKCiAgICBjb25zdCBzcHkgPSBtb2NreS5zcHkoYXBpLCAnZmV0Y2gnLCBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3VybCcsICdvcHRpb25zJykpOwogICAgc3B5LnJldChQcm9taXNlLnJlc29sdmUoeyBkYXRhOiAndGVzdCcgfSkpOwoKICAgIC8vIFRlc3QgeW91ciBjb2RlIHRoYXQgY2FsbHMgYXBpLmZldGNoKCkKICAgIG15TW9kdWxlLmRvU29tZXRoaW5nKGFwaSk7CgogICAgZXhwZWN0KHNweS5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CiAgICAgIHVybDogJy9hcGkvZW5kcG9pbnQnLAogICAgICBvcHRpb25zOiB7IG1ldGhvZDogJ1BPU1QnIH0KICAgIH0pOwoKICAgIHNweS5yZXN0b3JlKCk7CiAgfSk7Cn0pOwpgYGAKCiMjIPCflIQgQ29tcGFyaXNvbiB3aXRoIEplc3QKCmxpbC1tb2NreSBwcm92aWRlcyBzaW1pbGFyIGZ1bmN0aW9uYWxpdHkgdG8gSmVzdCBtb2NrcyBidXQgd2l0aCBhIGJ1aWxkZXItYmFzZWQgQVBJOgoKfCBKZXN0IHwgbGlsLW1vY2t5IHwKfC0tLS0tLXwtLS0tLS0tLS0tLXwKfCBgamVzdC5mbigpYCB8IGBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKClgIHwKfCBgbW9jay5tb2NrUmV0dXJuVmFsdWUodmFsKWAgfCBgbW9jay5yZXQodmFsKWAgfAp8IGBtb2NrLm1vY2suY2FsbHNbMF1bMF1gIHwgYG1vY2suY2FsbHMoMClgIHwKfCBgamVzdC5zcHlPbihvYmosICdtZXRob2QnKWAgfCBgbW9ja3kuc3B5KG9iaiwgJ21ldGhvZCcpYCB8CnwgYHNweS5tb2NrUmVzdG9yZSgpYCB8IGBzcHkucmVzdG9yZSgpYCB8CgoqKktleSBkaWZmZXJlbmNlczoqKgotICoqQnVpbGRlciBwYXR0ZXJuKio6IGxpbC1tb2NreSB1c2VzIGNoYWluYWJsZSBidWlsZGVycyBmb3IgY29uZmlndXJhdGlvbgotICoqTmFtZWQgYXJndW1lbnRzKio6IEJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGFyZ3VtZW50IHRyYWNraW5nCi0gKipQZXItaW5zdGFuY2UgY2xhc3MgbW9ja3MqKjogQ29uZmlndXJlIGRpZmZlcmVudCBiZWhhdmlvciBmb3IgZWFjaCBjbGFzcyBpbnN0YW5jZQotICoqU2ltcGxlciBBUEkqKjogRmV3ZXIgY29uY2VwdHMgdG8gbGVhcm4sIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IKCiMjIPCfk50gTm90ZXMKCiMjIyBCcmVha2luZyBDaGFuZ2VzCgoqKnYxLngqKjogRnVuY3Rpb25zIHdpdGhvdXQgYC5hcmdzKClgIGNvbmZpZ3VyYXRpb24gbm93IHJldHVybiBhbiBhcmd1bWVudHMgYXJyYXkgaW4gYC5jYWxscygpYCBpbnN0ZWFkIG9mIGBudWxsYC4gVGhpcyBlbmFibGVzIHNweSBmdW5jdGlvbmFsaXR5IGJ1dCBtYXkgYWZmZWN0IGV4aXN0aW5nIGNvZGUgdGhhdCBleHBlY3RzIGBudWxsYC4KCiMjIyBCdWlsZGVyIHZzLiBCdWlsdCBNb2NrcwoKLSBCdWlsZGVycyBoYXZlIG1ldGhvZHMgbGlrZSBgLmFyZ3MoKWAsIGAuYXN5bmMoKWAsIGAuYnVpbGQoKWAKLSBCdWlsdCBtb2NrcyBoYXZlIG1ldGhvZHMgbGlrZSBgLnJldCgpYCwgYC5jYWxscygpYCwgYC5yZXNldCgpYAotIENhbGwgYC5idWlsZCgpYCB0byBjb252ZXJ0IGEgYnVpbGRlciB0byBhIG1vY2sKCmBgYGphdmFzY3JpcHQKLy8gQnVpbGRlciAobm90IHlldCB1c2FibGUgYXMgYSBtb2NrKQpjb25zdCBidWlsZGVyID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd4Jyk7CgovLyBCdWlsdCBtb2NrIChyZWFkeSB0byB1c2UpCmNvbnN0IG1vY2sgPSBidWlsZGVyLmJ1aWxkKCk7Cm1vY2sucmV0KCd2YWx1ZScpOwpgYGAKCioqTm90ZSoqOiBgbW9ja3kuY3JlYXRlKGJ1aWxkZXIpYCBhbHNvIGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgLSBpdCdzIGp1c3QgYSB3cmFwcGVyIHRoYXQgY2FsbHMgYC5idWlsZCgpYC4KCiMjIPCfk4QgTGljZW5zZQoKTUlUCgojIyDwn6SdIENvbnRyaWJ1dGluZwoKQ29udHJpYnV0aW9ucyB3ZWxjb21lISBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBvciBQUiBvbiBHaXRIdWIuCgAAAAAAAAAAaCAAAAAAAAAAAAAAAAAAAAAAAABoIAAAAAAAAAAAAAAAAAAAAAAAAGggAAAAAAAAAAAAAAAAAAAAAAAAaCAAAAAAAAAAAAAAAAAAAAAAAADWQAAAAAAAAAAAAAAAAAAAAAAAANZAAAAAAAAAAAAAAAAAAAAAAAAA1kAAAAAAAAAAAAAA",
|
|
1073
|
+
"CQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvwAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAMYdAAAAAAAAxh0AAAAAAAAAAAAAAADwvw"
|
|
1074
|
+
],
|
|
1075
|
+
[
|
|
1076
|
+
1,
|
|
1077
|
+
1,
|
|
1078
|
+
"revert",
|
|
1079
|
+
null,
|
|
1080
|
+
"BAAAAAAAAAAAAAAAAAAAAAAAAAARQQAAIyBsaWwtbW9ja3kKCkEgbGlnaHR3ZWlnaHQgSmF2YVNjcmlwdCBtb2NraW5nIGxpYnJhcnkgZm9yIHRlc3RpbmcuIENyZWF0ZSBtb2NrIGZ1bmN0aW9ucywgb2JqZWN0cywgY2xhc3NlcywgYW5kIHByb3BlcnRpZXMgd2l0aCBjYWxsIHRyYWNraW5nIGFuZCByZXR1cm4gdmFsdWUgY29udHJvbC4gSW5jbHVkZXMgc3B5IGZ1bmN0aW9uYWxpdHkgZm9yIHRyYWNraW5nIGNhbGxzIHRvIGV4aXN0aW5nIG1ldGhvZHMuCgojIyDwn46vIEZlYXR1cmVzCgotIPCfqrYgKipMaWdodHdlaWdodCoqOiBNaW5pbWFsIGRlcGVuZGVuY2llcywgZm9jdXNlZCBvbiBjb3JlIG1vY2tpbmcgZnVuY3Rpb25hbGl0eQotIPCflKcgKipGbGV4aWJsZSoqOiBCdWlsZGVyIHBhdHRlcm4gZm9yIGNvbXBvc2FibGUgbW9jayBjb25maWd1cmF0aW9uCi0g8J+TiiAqKkNhbGwgVHJhY2tpbmcqKjogQXV0b21hdGljIHRyYWNraW5nIG9mIGFsbCBmdW5jdGlvbiBjYWxscyB3aXRoIGRlZXAtY2xvbmVkIGFyZ3VtZW50cwotIPCfjq0gKipTcHkgU3VwcG9ydCoqOiBUcmFjayBjYWxscyB0byBleGlzdGluZyBtZXRob2RzIHdoaWxlIHByZXNlcnZpbmcgb3IgcmVwbGFjaW5nIGJlaGF2aW9yCi0g8J+Pl++4jyAqKkNsYXNzIE1vY2tzKio6IFBlci1pbnN0YW5jZSBtb2NrIGNvbmZpZ3VyYXRpb24gZm9yIGNvbXBsZXggY2xhc3MgdGVzdGluZwotIOKchSAqKlNpbXBsZSBBUEkqKjogQ2xlYW4sIGludHVpdGl2ZSBBUEkgdGhhdCdzIGVhc3kgdG8gbGVhcm4gYW5kIHVzZQoKIyMg8J+TpSBJbnN0YWxsYXRpb24KCmBgYGJhc2gKbnBtIGluc3RhbGwgbGlsLW1vY2t5CmBgYAoKIyMg8J+agCBRdWljayBTdGFydAoKYGBgamF2YXNjcmlwdApjb25zdCB7IGV4cGVjdCB9ID0gcmVxdWlyZSgnY2hhaScpOwpjb25zdCBtb2NreSA9IHJlcXVpcmUoJ2xpbC1tb2NreScpOwoKZGVzY3JpYmUoJ1VzZXIgU2VydmljZScsICgpID0+IHsKICBpdCgnY2FsbHMgdGhlIGNhbGxiYWNrIHdpdGggdXNlciBkYXRhJywgKCkgPT4gewogICAgLy8gQ3JlYXRlIGEgbW9jayBmdW5jdGlvbgogICAgY29uc3QgY2FsbGJhY2sgPSBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3VzZXInKS5idWlsZCgpOwoKICAgIC8vIENhbGwgaXQgaW4geW91ciBjb2RlCiAgICBjYWxsYmFjayh7IG5hbWU6ICdBbGljZScsIGFnZTogMzAgfSk7CgogICAgLy8gVmVyaWZ5IGl0IHdhcyBjYWxsZWQgY29ycmVjdGx5CiAgICBleHBlY3QoY2FsbGJhY2suY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoewogICAgICB1c2VyOiB7IG5hbWU6ICdBbGljZScsIGFnZTogMzAgfQogICAgfSk7CiAgICBleHBlY3QoY2FsbGJhY2suY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwogIH0pOwp9KTsKYGBgCgotLS0KCiMjIyDwn5SoIEZ1bmN0aW9uIE1vY2tzCgpNb2NrIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBjYWxsYmFja3MgYW5kIGhhbmRsZXJzOgoKYGBgamF2YXNjcmlwdAovLyBUZXN0aW5nIGNvZGUgdGhhdCBhY2NlcHRzIGEgY2FsbGJhY2sKZnVuY3Rpb24gcHJvY2Vzc1VzZXJzKHVzZXJzLCBvbkNvbXBsZXRlKSB7CiAgY29uc3QgcHJvY2Vzc2VkID0gdXNlcnMubWFwKHUgPT4gKHsgLi4udSwgcHJvY2Vzc2VkOiB0cnVlIH0pKTsKICBvbkNvbXBsZXRlKHByb2Nlc3NlZCk7Cn0KCi8vIENyZWF0ZSBtb2NrIGNhbGxiYWNrIHdpdGggbmFtZWQgYXJndW1lbnRzCmNvbnN0IG9uQ29tcGxldGUgPSBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3Jlc3VsdCcpLmJ1aWxkKCk7CgovLyBSdW4gdGhlIGNvZGUgdW5kZXIgdGVzdApwcm9jZXNzVXNlcnMoW3sgbmFtZTogJ0FsaWNlJyB9XSwgb25Db21wbGV0ZSk7CgovLyBWZXJpZnkgdGhlIGNhbGxiYWNrIHdhcyBjYWxsZWQgY29ycmVjdGx5CmV4cGVjdChvbkNvbXBsZXRlLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsKICByZXN1bHQ6IFt7IG5hbWU6ICdBbGljZScsIHByb2Nlc3NlZDogdHJ1ZSB9XQp9KTsKZXhwZWN0KG9uQ29tcGxldGUuY2FsbHMoKS5sZW5ndGgpLnRvLmVxdWFsKDEpOwpgYGAKCioqQ29tbW9uIHBhdHRlcm5zOioqCgpgYGBqYXZhc2NyaXB0Ci8vIE1vY2sgd2l0aCByZXR1cm4gdmFsdWUKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKbW9jay5yZXQoJ3N1Y2Nlc3MnKTsKY29uc3QgcmVzdWx0ID0gbW9jaygpOwpleHBlY3QocmVzdWx0KS50by5lcXVhbCgnc3VjY2VzcycpOwoKLy8gTW9jayBhc3luYyBmdW5jdGlvbnMKY29uc3QgZmV0Y2hEYXRhID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd1cmwnKS5hc3luYygpLmJ1aWxkKCk7CmZldGNoRGF0YS5yZXQoeyBkYXRhOiBbMSwgMiwgM10gfSk7CmNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRGF0YSgnL2FwaS9kYXRhJyk7CmV4cGVjdChyZXN1bHQuZGF0YSkudG8uZGVlcC5lcXVhbChbMSwgMiwgM10pOwoKLy8gQXJndW1lbnRzIHdpdGggZGVmYXVsdHMKY29uc3QgbG9nZ2VyID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdtZXNzYWdlJywgeyBsZXZlbDogJ2luZm8nIH0pLmJ1aWxkKCk7CmxvZ2dlcignVGVzdCBtZXNzYWdlJyk7CmV4cGVjdChsb2dnZXIuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoewogIG1lc3NhZ2U6ICdUZXN0IG1lc3NhZ2UnLAogIGxldmVsOiAnaW5mbycKfSk7CmBgYAoKIyMjIyAucmV0KCkgLSBTZXQgUmV0dXJuIFZhbHVlcwoKQ29uZmlndXJlIHdoYXQgdGhlIG1vY2sgcmV0dXJucyB3aGVuIGNhbGxlZDoKCmBgYGphdmFzY3JpcHQKY29uc3QgbW9jayA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsKCi8vIFNpbXBsZSByZXR1cm4gdmFsdWUKbW9jay5yZXQoJ2hlbGxvJyk7Cm1vY2soKTsgLy8gUmV0dXJucyAnaGVsbG8nCgovLyBBbnkgdmFsdWUgdHlwZQptb2NrLnJldChudWxsKTsKbW9jay5yZXQoNDIpOwptb2NrLnJldChbMSwgMiwgM10pOwptb2NrLnJldCh7IGRhdGE6ICd2YWx1ZScgfSk7CgovLyBEaWZmZXJlbnQgcmV0dXJuIHBlciBjYWxsIChjYWxsIG51bWJlcnMgYXJlIDEtaW5kZXhlZCkKbW9jay5yZXQoJ2ZpcnN0JywgMSk7ICAgLy8gRmlyc3QgY2FsbAptb2NrLnJldCgnc2Vjb25kJywgMik7ICAvLyBTZWNvbmQgY2FsbAptb2NrLnJldCgnZGVmYXVsdCcpOyAgICAvLyBBbGwgb3RoZXIgY2FsbHMgKGNhbGwgMCBpcyB0aGUgZGVmYXVsdCkKCm1vY2soKTsgLy8gJ2ZpcnN0Jwptb2NrKCk7IC8vICdzZWNvbmQnCm1vY2soKTsgLy8gJ2RlZmF1bHQnCm1vY2soKTsgLy8gJ2RlZmF1bHQnCmBgYAoKKipJbXBvcnRhbnQ6KiogYC5yZXQoKWAgc3RvcmVzIHRoZSB2YWx1ZSAtIGl0IGRvZXNuJ3QgY2FsbCBmdW5jdGlvbnM6CgpgYGBqYXZhc2NyaXB0Ci8vIOKdjCBXUk9ORyAtIHJldHVybnMgdGhlIGZ1bmN0aW9uIGl0c2VsZgptb2NrLnJldCgoKSA9PiBjb21wdXRlKCkpOwoKLy8g4pyFIFJJR0hUIC0gdXNlIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiBmb3IgZHluYW1pYyBiZWhhdmlvcgpjb25zdCBtb2NrID0gbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICByZXR1cm4gY29tcHV0ZSgpOwp9KS5idWlsZCgpOwpgYGAKCioqVGhyb3dpbmcgZXJyb3JzOioqCgpgYGBqYXZhc2NyaXB0Cm1vY2sucmV0KG5ldyBFcnJvcignU29tZXRoaW5nIHdlbnQgd3JvbmcnKSk7Cm1vY2soKTsgLy8gVGhyb3dzICdTb21ldGhpbmcgd2VudCB3cm9uZycKCi8vIERpZmZlcmVudCBlcnJvcnMgcGVyIGNhbGwKbW9jay5yZXQobmV3IEVycm9yKCdGaXJzdCBlcnJvcicpLCAxKTsKbW9jay5yZXQobmV3IEVycm9yKCdTZWNvbmQgZXJyb3InKSwgMik7CmBgYAoKIyMjIyAuY2FsbHMoKSAtIFZlcmlmeSBBcmd1bWVudHMKCkNoZWNrIHdoYXQgYXJndW1lbnRzIHdlcmUgcGFzc2VkIHRvIHRoZSBtb2NrOgoKYGBgamF2YXNjcmlwdApjb25zdCBtb2NrID0gbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCduYW1lJywgJ2FnZScpLmJ1aWxkKCk7Cgptb2NrKCdBbGljZScsIDMwKTsKbW9jaygnQm9iJywgMjUpOwoKLy8gR2V0IHNwZWNpZmljIGNhbGwKbW9jay5jYWxscygwKTsgLy8geyBuYW1lOiAnQWxpY2UnLCBhZ2U6IDMwIH0KbW9jay5jYWxscygxKTsgLy8geyBuYW1lOiAnQm9iJywgYWdlOiAyNSB9CgovLyBHZXQgYWxsIGNhbGxzCm1vY2suY2FsbHMoKTsgLy8gW3sgbmFtZTogJ0FsaWNlJywgYWdlOiAzMCB9LCB7IG5hbWU6ICdCb2InLCBhZ2U6IDI1IH1dCm1vY2suY2FsbHMoKS5sZW5ndGg7IC8vIDIKCi8vIFdpdGhvdXQgLmFyZ3MoKSBjb25maWcsIHJldHVybnMgcmF3IGFyZ3VtZW50cyBhcnJheQpjb25zdCByYXdNb2NrID0gbW9ja3kuZnVuY3Rpb24oKS5idWlsZCgpOwpyYXdNb2NrKCdhJywgJ2InLCAnYycpOwpyYXdNb2NrLmNhbGxzKDApOyAvLyBbJ2EnLCAnYicsICdjJ10KYGBgCgojIyMjIC5yZXNldCgpIC0gQ2xlYXIgU3RhdGUKClJlc2V0IHRoZSBtb2NrIGJhY2sgdG8gaXRzIGluaXRpYWwgc3RhdGU6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigpLmJ1aWxkKCk7Cm1vY2sucmV0KCd2YWx1ZScpOwptb2NrKCd0ZXN0Jyk7Cgptb2NrLmNhbGxzKCkubGVuZ3RoOyAvLyAxCgptb2NrLnJlc2V0KCk7CgovLyBFdmVyeXRoaW5nIGNsZWFyZWQKbW9jay5jYWxscygpLmxlbmd0aDsgLy8gMAptb2NrKCk7IC8vIFJldHVybnMgdW5kZWZpbmVkIChyZXQgY2xlYXJlZCkKYGBgCgojIyMjIFVzaW5nIGNvbnRleHQgZm9yIEN1c3RvbSBJbXBsZW1lbnRhdGlvbnMKCkZvciBkeW5hbWljIGJlaGF2aW9yLCBwYXNzIGEgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyBhIGBjb250ZXh0YCBvYmplY3Q6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IG1vY2sgPSBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewogIC8vIFlvdXIgY3VzdG9tIGxvZ2ljIGhlcmUKICByZXR1cm4gY29udGV4dC5hcmdzLnggKiAyOwp9KS5hcmdzKCd4JykuYnVpbGQoKTsKCm1vY2soNSk7IC8vIFJldHVybnMgMTAKYGBgCgoqKkNvbnRleHQgcHJvcGVydGllczoqKgoKYGBgamF2YXNjcmlwdApjb25zdCBtb2NrID0gbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICAvLyBjb250ZXh0LmFyZ3MgLSBOYW1lZCBhcmd1bWVudHMgKGZyb20gLmFyZ3MoKSBjb25maWcpCiAgLy8gY29udGV4dC5yZXQgLSBWYWx1ZSBzZXQgdmlhIC5yZXQoKQogIC8vIGNvbnRleHQuY2FsbCAtIENhbGwgbnVtYmVyICgxLWluZGV4ZWQpCiAgLy8gY29udGV4dC5zZWxmIC0gVGhlICd0aGlzJyBjb250ZXh0CiAgLy8gY29udGV4dC5zdGF0ZSAtIEludGVybmFsIHN0YXRlIG9iamVjdCAoZm9yIHN0b3JpbmcgY3VzdG9tIGRhdGEpCgogIHJldHVybiBzb21lVmFsdWU7Cn0pLmFyZ3MoJ3BhcmFtMScsICdwYXJhbTInKS5idWlsZCgpOwpgYGAKCioqT3ZlcnJpZGUgcGF0dGVybioqIC0gQWxsb3cgYC5yZXQoKWAgdG8gb3ZlcnJpZGUgZGVmYXVsdCBiZWhhdmlvcjoKCmBgYGphdmFzY3JpcHQKY29uc3QgY29tcHV0ZSA9IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CiAgLy8gQ2hlY2sgaWYgLnJldCgpIHdhcyBjYWxsZWQKICBpZiAoY29udGV4dC5yZXQgIT09IHVuZGVmaW5lZCkKICAgIHJldHVybiBjb250ZXh0LnJldDsKCiAgLy8gRGVmYXVsdCBsb2dpYwogIHJldHVybiBjb250ZXh0LmFyZ3MueCAqIGNvbnRleHQuYXJncy55Owp9KS5hcmdzKCd4JywgJ3knKS5idWlsZCgpOwoKY29tcHV0ZSg1LCAzKTsgLy8gUmV0dXJucyAxNSAoZGVmYXVsdCBsb2dpYykKCmNvbXB1dGUucmV0KDk5OSk7IC8vIE92ZXJyaWRlCmNvbXB1dGUoNSwgMyk7IC8vIFJldHVybnMgOTk5CmBgYAoKKipDb25kaXRpb25hbCBiZWhhdmlvcioqIC0gRGlmZmVyZW50IGxvZ2ljIGJhc2VkIG9uIGFyZ3VtZW50czoKCmBgYGphdmFzY3JpcHQKY29uc3QgdmFsaWRhdG9yID0gbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICBpZiAoY29udGV4dC5hcmdzLnZhbHVlID09PSBudWxsKQogICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBjYW5ub3QgYmUgbnVsbCcpOwoKICBpZiAoY29udGV4dC5hcmdzLnZhbHVlLmxlbmd0aCA8IDMpCiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiAnVG9vIHNob3J0JyB9OwoKICByZXR1cm4geyB2YWxpZDogdHJ1ZSB9Owp9KS5hcmdzKCd2YWx1ZScpLmJ1aWxkKCk7Cgp2YWxpZGF0b3IoJ2FiJyk7IC8vIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogJ1RvbyBzaG9ydCcgfQp2YWxpZGF0b3IoJ2FiYycpOyAvLyB7IHZhbGlkOiB0cnVlIH0KYGBgCgoqKlN0YXRlZnVsIG1vY2tzKiogLSBUcmFjayBzdGF0ZSBhY3Jvc3MgY2FsbHM6CgpgYGBqYXZhc2NyaXB0CmNvbnN0IGNvdW50ZXIgPSBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewogIC8vIFVzZSBjb250ZXh0LnN0YXRlIHRvIHN0b3JlIGRhdGEgYmV0d2VlbiBjYWxscwogIGlmICghY29udGV4dC5zdGF0ZS5jb3VudCkKICAgIGNvbnRleHQuc3RhdGUuY291bnQgPSAwOwoKICBjb250ZXh0LnN0YXRlLmNvdW50Kys7CiAgcmV0dXJuIGNvbnRleHQuc3RhdGUuY291bnQ7Cn0pLmJ1aWxkKCk7Cgpjb3VudGVyKCk7IC8vIDEKY291bnRlcigpOyAvLyAyCmNvdW50ZXIoKTsgLy8gMwoKY291bnRlci5yZXNldCgpOyAvLyBDbGVhcnMgY29udGV4dC5zdGF0ZQpjb3VudGVyKCk7IC8vIDEKYGBgCgoqKkNhbGwtc3BlY2lmaWMgYmVoYXZpb3IqKiAtIERpZmZlcmVudCBsb2dpYyBwZXIgY2FsbDoKCmBgYGphdmFzY3JpcHQKY29uc3QgZmV0Y2hlciA9IG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CiAgaWYgKGNvbnRleHQuY2FsbCA9PT0gMSkKICAgIHJldHVybiB7IHN0YXR1czogJ2xvYWRpbmcnIH07CgogIGlmIChjb250ZXh0LmNhbGwgPT09IDIpCiAgICByZXR1cm4geyBzdGF0dXM6ICdzdWNjZXNzJywgZGF0YTogWzEsIDIsIDNdIH07CgogIHJldHVybiB7IHN0YXR1czogJ2NhY2hlZCcgfTsKfSkuYnVpbGQoKTsKCmZldGNoZXIoKTsgLy8geyBzdGF0dXM6ICdsb2FkaW5nJyB9CmZldGNoZXIoKTsgLy8geyBzdGF0dXM6ICdzdWNjZXNzJywgLi4uIH0KZmV0Y2hlcigpOyAvLyB7IHN0YXR1czogJ2NhY2hlZCcgfQpgYGAKCi0tLQoKIyMjIPCfk6YgT2JqZWN0IE1vY2tzCgpNb2NrIG9iamVjdHMgZm9yIHRlc3RpbmcgQVBJcywgZGF0YWJhc2VzLCBhbmQgc2VydmljZXM6CgpgYGBqYXZhc2NyaXB0Ci8vIE1vY2sgYW4gQVBJIGNsaWVudApjb25zdCBhcGkgPSBtb2NreS5vYmplY3QoewogIGdldDogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd1cmwnKSwKICBwb3N0OiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ3VybCcsICdkYXRhJyksCiAgYmFzZVVSTDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywKICB0aW1lb3V0OiA1MDAwCn0pLmJ1aWxkKCk7CgovLyBDb25maWd1cmUgcmVzcG9uc2VzCmFwaS5nZXQucmV0KHsgc3RhdHVzOiAyMDAsIGRhdGE6IHsgdXNlcnM6IFtdIH0gfSk7CmFwaS5wb3N0LnJldCh7IHN0YXR1czogMjAxLCBkYXRhOiB7IGlkOiAxMjMgfSB9KTsKCi8vIFRlc3QgeW91ciBjb2RlIHRoYXQgdXNlcyB0aGUgQVBJCmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVzZXIoYXBpQ2xpZW50LCB1c2VyRGF0YSkgewogIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXBpQ2xpZW50LnBvc3QoJy91c2VycycsIHVzZXJEYXRhKTsKICByZXR1cm4gcmVzcG9uc2UuZGF0YTsKfQoKY29uc3QgcmVzdWx0ID0gYXdhaXQgY3JlYXRlVXNlcihhcGksIHsgbmFtZTogJ0FsaWNlJyB9KTsKCi8vIFZlcmlmeSB0aGUgQVBJIHdhcyBjYWxsZWQgY29ycmVjdGx5CmV4cGVjdChhcGkucG9zdC5jYWxscygwKSkudG8uZGVlcC5lcXVhbCh7CiAgdXJsOiAnL3VzZXJzJywKICBkYXRhOiB7IG5hbWU6ICdBbGljZScgfQp9KTsKZXhwZWN0KHJlc3VsdCkudG8uZGVlcC5lcXVhbCh7IGlkOiAxMjMgfSk7CmBgYAoKKipJbW11dGFiaWxpdHkgYWZ0ZXIgLmJ1aWxkKCk6KioKCk9uY2UgeW91IGNhbGwgYC5idWlsZCgpYCwgdGhlIG1vY2sgb2JqZWN0J3Mgc3RydWN0dXJlIGlzIGltbXV0YWJsZS4gWW91IGNhbm5vdCBhZGQgb3IgcmVhc3NpZ24gcHJvcGVydGllczoKCmBgYGphdmFzY3JpcHQKLy8g4p2MIFdST05HIC0gY2FuJ3QgbW9kaWZ5IGFmdGVyIC5idWlsZCgpCmNvbnN0IG1vY2sgPSBtb2NreS5vYmplY3QoewogIG1ldGhvZDogbW9ja3kuZnVuY3Rpb24oKQp9KS5idWlsZCgpOwoKbW9jay5tZXRob2QgPSBuZXdJbXBsZW1lbnRhdGlvbjsgLy8gVHlwZUVycm9yOiBDYW5ub3QgYXNzaWduIHRvIHJlYWQgb25seSBwcm9wZXJ0eQptb2NrLm5ld01ldGhvZCA9IG1vY2t5LmZ1bmN0aW9uKCkuYnVpbGQoKTsgLy8gVHlwZUVycm9yOiBDYW5ub3QgYWRkIHByb3BlcnR5CgovLyDinIUgUklHSFQgLSBkZWZpbmUgZXZlcnl0aGluZyB3aGVuIGJ1aWxkaW5nCmNvbnN0IG1vY2sgPSBtb2NreS5vYmplY3QoewogIG1ldGhvZDogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICAgIC8vIFlvdXIgY3VzdG9tIGltcGxlbWVudGF0aW9uIGhlcmUKICAgIHJldHVybiAncmVzdWx0JzsKICB9KQp9KS5idWlsZCgpOwpgYGAKClRoaXMgaW1tdXRhYmlsaXR5IHByZXZlbnRzIGJ1Z3MgYW5kIGVuc3VyZXMgYC5yZXNldCgpYCB3b3JrcyBjb3JyZWN0bHkuIFRvIGNoYW5nZSBiZWhhdmlvciBkdXJpbmcgdGVzdHMsIHVzZSBgLnJldCgpYCBvciBgLnJlc2V0KClgIGluc3RlYWQgb2YgcmVhc3NpZ25pbmcgcHJvcGVydGllcy4KCioqTmVzdGVkIG1vY2tzIGZvciBjb21wbGV4IHN0cnVjdHVyZXM6KioKCmBgYGphdmFzY3JpcHQKY29uc3QgZGIgPSBtb2NreS5vYmplY3QoewogIHVzZXJzOiBtb2NreS5vYmplY3QoewogICAgZmluZEJ5SWQ6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnaWQnKSwKICAgIGNyZWF0ZTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCd1c2VyRGF0YScpCiAgfSksCiAgY29ubmVjdGVkOiB0cnVlCn0pLmJ1aWxkKCk7CgpkYi51c2Vycy5maW5kQnlJZC5yZXQoeyBpZDogMSwgbmFtZTogJ0FsaWNlJyB9KTsKY29uc3QgdXNlciA9IGF3YWl0IGRiLnVzZXJzLmZpbmRCeUlkKDEpOwpgYGAKCioqU3ltYm9sIHByb3BlcnRpZXMgKGFkdmFuY2VkKToqKgoKYGBgamF2YXNjcmlwdApjb25zdCBpdGVyYWJsZSA9IG1vY2t5Lm9iamVjdCh7CiAgW1N5bWJvbC5pdGVyYXRvcl06IG1vY2t5LmZ1bmN0aW9uKCkKfSkuYnVpbGQoKTsKCml0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0ucmV0KCdpdGVyYXRvcicpOwpgYGAKCiMjIyMgT2JqZWN0IC5yZXNldCgpIEJlaGF2aW9yCgpDYWxsaW5nIGAucmVzZXQoKWAgb24gYW4gb2JqZWN0IG1vY2s6Ci0gQ2FsbHMgYC5yZXNldCgpYCBvbiBhbGwgbmVzdGVkIG1vY2tzIChjbGVhcnMgY2FsbHMgYW5kIHJldHVybiB2YWx1ZXMpCi0gUmVzdG9yZXMgcGxhaW4gcHJvcGVydGllcyB0byB0aGVpciBpbml0aWFsIHZhbHVlcwotIERlbGV0ZXMgYW55IHByb3BlcnRpZXMgYWRkZWQgYWZ0ZXIgY3JlYXRpb24KCmBgYGphdmFzY3JpcHQKY29uc3QgYXBpID0gbW9ja3kub2JqZWN0KHsKICBnZXQ6IG1vY2t5LmZ1bmN0aW9uKCksCiAgYmFzZVVSTDogJ2h0dHBzOi8vYXBpLmV4YW1wbGUuY29tJywKICB0aW1lb3V0OiA1MDAwCn0pLmJ1aWxkKCk7CgphcGkuZ2V0LnJldCgncmVzcG9uc2UnKTsKYXBpLmdldCgndGVzdCcpOwphcGkuYmFzZVVSTCA9ICdodHRwczovL290aGVyLmNvbSc7CmFwaS50aW1lb3V0ID0gMTAwMDA7CmFwaS5uZXdQcm9wID0gJ2FkZGVkJzsKCmFwaS5yZXNldCgpOwoKLy8gQWZ0ZXIgcmVzZXQ6Ci8vIC0gYXBpLmdldC5jYWxscygpIGlzIFtdCi8vIC0gYXBpLmdldCByZXR1cm4gdmFsdWVzIGNsZWFyZWQKLy8gLSBhcGkuYmFzZVVSTCBpcyAnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nIChyZXN0b3JlZCkKLy8gLSBhcGkudGltZW91dCBpcyA1MDAwIChyZXN0b3JlZCkKLy8gLSBhcGkubmV3UHJvcCBpcyBkZWxldGVkCmBgYAoKLS0tCgojIyMg8J+Pm++4jyBDbGFzcyBNb2NrcwoKTW9jayBjbGFzc2VzIHdpdGggcGVyLWluc3RhbmNlIGJlaGF2aW9yIC0gcGVyZmVjdCBmb3Igc2VydmljZXMgdGhhdCBnZXQgaW5zdGFudGlhdGVkOgoKYGBgamF2YXNjcmlwdAovLyBNb2NrIGEgTG9nZ2VyIGNsYXNzIHRoYXQgZ2V0cyBpbnN0YW50aWF0ZWQgcGVyIG1vZHVsZQpjb25zdCBMb2dnZXIgPSBtb2NreS5jbGFzcyh7CiAgY29uc3RydWN0b3I6IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnbW9kdWxlTmFtZScpLAogIGluZm86IG1vY2t5LmZ1bmN0aW9uKCkuYXJncygnbWVzc2FnZScpLAogIGVycm9yOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ21lc3NhZ2UnKQp9KS5idWlsZCgpOwoKLy8gVGVzdCBjb2RlIHRoYXQgY3JlYXRlcyBtdWx0aXBsZSBsb2dnZXIgaW5zdGFuY2VzCmNsYXNzIFVzZXJTZXJ2aWNlIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcignVXNlclNlcnZpY2UnKTsKICB9CgogIGFzeW5jIGNyZWF0ZVVzZXIoZGF0YSkgewogICAgdGhpcy5sb2dnZXIuaW5mbygnQ3JlYXRpbmcgdXNlcicpOwogICAgLy8gLi4uIGNyZWF0ZSB1c2VyIGxvZ2ljCiAgICByZXR1cm4geyBpZDogMSwgLi4uZGF0YSB9OwogIH0KfQoKY2xhc3MgQXV0aFNlcnZpY2UgewogIGNvbnN0cnVjdG9yKCkgewogICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKCdBdXRoU2VydmljZScpOwogIH0KCiAgbG9naW4odXNlcm5hbWUpIHsKICAgIHRoaXMubG9nZ2VyLmluZm8oJ1VzZXIgbG9nZ2luZyBpbicpOwogICAgLy8gLi4uIGF1dGggbG9naWMKICB9Cn0KCi8vIENyZWF0ZSB0aGUgc2VydmljZXMgKGVhY2ggY3JlYXRlcyBpdHMgb3duIExvZ2dlciBpbnN0YW5jZSkKY29uc3QgdXNlclNlcnZpY2UgPSBuZXcgVXNlclNlcnZpY2UoKTsKY29uc3QgYXV0aFNlcnZpY2UgPSBuZXcgQXV0aFNlcnZpY2UoKTsKCmF3YWl0IHVzZXJTZXJ2aWNlLmNyZWF0ZVVzZXIoeyBuYW1lOiAnQWxpY2UnIH0pOwphdXRoU2VydmljZS5sb2dpbignYWxpY2UnKTsKCi8vIFZlcmlmeSBlYWNoIGluc3RhbmNlIHdhcyB1c2VkIGNvcnJlY3RseQpleHBlY3QoTG9nZ2VyLmluc3QoMCkuY29uc3RydWN0b3IuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoewogIG1vZHVsZU5hbWU6ICdVc2VyU2VydmljZScKfSk7CmV4cGVjdChMb2dnZXIuaW5zdCgwKS5pbmZvLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsKICBtZXNzYWdlOiAnQ3JlYXRpbmcgdXNlcicKfSk7CgpleHBlY3QoTG9nZ2VyLmluc3QoMSkuY29uc3RydWN0b3IuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoewogIG1vZHVsZU5hbWU6ICdBdXRoU2VydmljZScKfSk7CmV4cGVjdChMb2dnZXIuaW5zdCgxKS5pbmZvLmNhbGxzKDApKS50by5kZWVwLmVxdWFsKHsKICBtZXNzYWdlOiAnVXNlciBsb2dnaW5nIGluJwp9KTsKCmV4cGVjdChMb2dnZXIubnVtSW5zdHMoKSkudG8uZXF1YWwoMik7CmBgYAoKKipQcmUtY29uZmlndXJpbmcgaW5zdGFuY2VzOioqCgpgYGBqYXZhc2NyaXB0Ci8vIENvbmZpZ3VyZSBiZWhhdmlvciBCRUZPUkUgaW5zdGFuY2VzIGFyZSBjcmVhdGVkCmNvbnN0IERhdGFiYXNlID0gbW9ja3kuY2xhc3MoewogIGNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigpLmFyZ3MoJ2Nvbm5lY3Rpb25TdHJpbmcnKSwKICBxdWVyeTogbW9ja3kuZnVuY3Rpb24oKS5hcmdzKCdzcWwnKQp9KS5idWlsZCgpOwoKLy8gRmlyc3QgaW5zdGFuY2UgcmV0dXJucyB1c2VyIGRhdGEKRGF0YWJhc2UuaW5zdCgwKS5xdWVyeS5yZXQoW3sgaWQ6IDEsIG5hbWU6ICdBbGljZScgfV0pOwovLyBTZWNvbmQgaW5zdGFuY2UgcmV0dXJucyBlbXB0eSByZXN1bHRzCkRhdGFiYXNlLmluc3QoMSkucXVlcnkucmV0KFtdKTsKCmNvbnN0IGRiMSA9IG5ldyBEYXRhYmFzZSgncG9zdGdyZXM6Ly9wcmltYXJ5Jyk7CmNvbnN0IGRiMiA9IG5ldyBEYXRhYmFzZSgncG9zdGdyZXM6Ly9yZXBsaWNhJyk7Cgpjb25zdCB1c2VycyA9IGF3YWl0IGRiMS5xdWVyeSgnU0VMRUNUICogRlJPTSB1c2VycycpOyAvLyBbeyBpZDogMSwgLi4uIH1dCmNvbnN0IGVtcHR5ID0gYXdhaXQgZGIyLnF1ZXJ5KCdTRUxFQ1QgKiBGUk9NIHVzZXJzJyk7IC8vIFtdCmBgYAoKIyMjIyBVc2luZyBjb250ZXh0LnNlbGYgZm9yIEluc3RhbmNlIFN0YXRlCgpVc2UgYGNvbnRleHQuc2VsZmAgdG8gYWNjZXNzIGFuZCBtb2RpZnkgaW5zdGFuY2UgcHJvcGVydGllczoKCmBgYGphdmFzY3JpcHQKLy8gTW9jayBhIGNsYXNzIHdoZXJlIG1ldGhvZHMgbmVlZCB0byBhY2Nlc3MgaW5zdGFuY2UgcHJvcGVydGllcwpjb25zdCBDb3VudGVyID0gbW9ja3kuY2xhc3MoewogIGNvbnN0cnVjdG9yOiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewogICAgLy8gU3RvcmUgaW5pdGlhbCB2YWx1ZSBvbiB0aGUgaW5zdGFuY2UKICAgIGNvbnRleHQuc2VsZi5fY291bnQgPSBjb250ZXh0LmFyZ3MuaW5pdGlhbCB8fCAwOwogIH0pLmFyZ3MoJ2luaXRpYWwnKSwKCiAgaW5jcmVtZW50OiBtb2NreS5mdW5jdGlvbigoY29udGV4dCkgPT4gewogICAgLy8gQWNjZXNzIGluc3RhbmNlIHN0YXRlIHZpYSBjb250ZXh0LnNlbGYKICAgIGNvbnRleHQuc2VsZi5fY291bnQrKzsKICAgIHJldHVybiBjb250ZXh0LnNlbGYuX2NvdW50OwogIH0pLAoKICBnZXRDb3VudDogbW9ja3kuZnVuY3Rpb24oKGNvbnRleHQpID0+IHsKICAgIHJldHVybiBjb250ZXh0LnNlbGYuX2NvdW50OwogIH0pCn0pLmJ1aWxkKCk7Cgpjb25zdCBjb3VudGVyID0gbmV3IENvdW50ZXIoMTApOwpjb3VudGVyLmluY3JlbWVudCgpOyAvLyAxMQpjb3VudGVyLmluY3JlbWVudCgpOyAvLyAxMgpjb3VudGVyLmdldENvdW50KCk7ICAvLyAxMgoKLy8gRWFjaCBpbnN0YW5jZSBoYXMgaXRzIG93biBzdGF0ZQpjb25zdCBjb3VudGVyMiA9IG5ldyBDb3VudGVyKDEwMCk7CmNvdW50ZXIyLmluY3JlbWVudCgpOyAvLyAxMDEKY291bnRlci5nZXRDb3VudCgpOyAgIC8vIFN0aWxsIDEyCmBgYAoKIyMjIyBDbGFzcyAucmVzZXQoKSBCZWhhdmlvcgoKQ2FsbGluZyBgLnJlc2V0KClgIG9uIGEgY2xhc3MgbW9jazoKLSBDbGVhcnMgYWxsIGluc3RhbmNlIGNvbmZpZ3VyYXRpb25zCi0gUmVzZXRzIGluc3RhbmNlIGNvdW50ZXIgdG8gMAotIE5leHQgaW5zdGFudGlhdGlvbiBzdGFydHMgZnJlc2ggYXQgaW5zdGFuY2UgMAoKYGBgamF2YXNjcmlwdApjb25zdCBNb2NrID0gbW9ja3kuY2xhc3MoewogIG1ldGhvZDogbW9ja3kuZnVuY3Rpb24oKQp9KS5idWlsZCgpOwoKTW9jay5pbnN0KDApLm1ldGhvZC5yZXQoJ3ZhbHVlJyk7CmNvbnN0IGluc3RhbmNlMSA9IG5ldyBNb2NrKCk7CmNvbnN0IGluc3RhbmNlMiA9IG5ldyBNb2NrKCk7CgpNb2NrLm51bUluc3RzKCk7IC8vIDIKCk1vY2sucmVzZXQoKTsKCi8vIEFmdGVyIHJlc2V0OgovLyAtIEFsbCBpbnN0YW5jZSBjb25maWd1cmF0aW9ucyBjbGVhcmVkCi8vIC0gTW9jay5udW1JbnN0cygpIGlzIDAKLy8gLSBOZXh0IGluc3RhbnRpYXRpb24gc3RhcnRzIGZyZXNoIGF0IGluc3RhbmNlIDAKYGBgCgotLS0KCiMjIyDwn5SNIFNweSBGdW5jdGlvbgoKVHJhY2sgY2FsbHMgdG8gZXhpc3RpbmcgbWV0aG9kcyB3aXRob3V0IGJyZWFraW5nIHRoZWlyIGJlaGF2aW9yOgoKYGBgamF2YXNjcmlwdAovLyBTcHkgb24gYW4gZXhpc3Rpbmcgb2JqZWN0J3MgbWV0aG9kCmNvbnN0IGVtYWlsU2VydmljZSA9IHsKICBzZW5kOiAodG8sIHN1YmplY3QsIGJvZHkpID0+IHsKICAgIC8vIFJlYWwgaW1wbGVtZW50YXRpb24gdGhhdCBzZW5kcyBlbWFpbAogICAgY29uc29sZS5sb2coYFNlbmRpbmcgZW1haWwgdG8gJHt0b31gKTsKICAgIHJldHVybiB7IHNlbnQ6IHRydWUsIGlkOiAnMTIzNDUnIH07CiAgfQp9OwoKLy8gQ3JlYXRlIGEgc3B5IC0gY2FsbHMgdGhyb3VnaCB0byBvcmlnaW5hbCBieSBkZWZhdWx0CmNvbnN0IHNweSA9IG1vY2t5LnNweShlbWFpbFNlcnZpY2UsICdzZW5kJyk7CgovLyBUZXN0IGNvZGUgdGhhdCB1c2VzIHRoZSBlbWFpbCBzZXJ2aWNlCmZ1bmN0aW9uIG5vdGlmeVVzZXIodXNlciwgbWVzc2FnZSkgewogIHJldHVybiBlbWFpbFNlcnZpY2Uuc2VuZCh1c2VyLmVtYWlsLCAnTm90aWZpY2F0aW9uJywgbWVzc2FnZSk7Cn0KCmNvbnN0IHJlc3VsdCA9IG5vdGlmeVVzZXIoeyBlbWFpbDogJ2FsaWNlQGV4YW1wbGUuY29tJyB9LCAnSGVsbG8hJyk7CgovLyBWZXJpZnkgdGhlIG1ldGhvZCB3YXMgY2FsbGVkIGNvcnJlY3RseQpleHBlY3Qoc3B5LmNhbGxzKDApKS50by5kZWVwLmVxdWFsKFsKICAnYWxpY2VAZXhhbXBsZS5jb20nLAogICdOb3RpZmljYXRpb24nLAogICdIZWxsbyEnCl0pOwpleHBlY3QocmVzdWx0KS50by5kZWVwLmVxdWFsKHsgc2VudDogdHJ1ZSwgaWQ6ICcxMjM0NScgfSk7CgovLyBDbGVhbiB1cApzcHkucmVzdG9yZSgpOwpgYGAKCioqT3ZlcnJpZGUgcmV0dXJuIHZhbHVlOioqCgpgYGBqYXZhc2NyaXB0CmNvbnN0IGNhY2hlID0gewogIGdldDogKGtleSkgPT4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KQp9OwoKY29uc3Qgc3B5ID0gbW9ja3kuc3B5KGNhY2hlLCAnZ2V0Jyk7CnNweS5yZXQoJ21vY2tlZC12YWx1ZScpOyAvLyBPdmVycmlkZSByZXR1cm4gdmFsdWUKCmNvbnN0IHZhbHVlID0gY2FjaGUuZ2V0KCd1c2VyLWRhdGEnKTsgLy8gUmV0dXJucyAnbW9ja2VkLXZhbHVlJwpzcHkucmVzdG9yZSgpOwpgYGAKCioqU3B5IHdpdGggY3VzdG9tIHJlcGxhY2VtZW50OioqCgpXaGVuIHVzaW5nIGEgY3VzdG9tIHJlcGxhY2VtZW50LCBjb250ZXh0IGluY2x1ZGVzIGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3Igd29ya2luZyB3aXRoIHRoZSBvcmlnaW5hbCBmdW5jdGlvbjoKCmBgYGphdmFzY3JpcHQKY29uc3QgYW5hbHl0aWNzID0gewogIHRyYWNrOiAoZXZlbnQsIGRhdGEpID0+IHsKICAgIC8vIFJlYWwgaW1wbGVtZW50YXRpb24gcG9zdHMgdG8gYW5hbHl0aWNzIHNlcnZlcgogICAgZmV0Y2goJy9hbmFseXRpY3MnLCB7IG1ldGhvZDogJ1BPU1QnLCBib2R5OiBKU09OLnN0cmluZ2lmeSh7IGV2ZW50LCBkYXRhIH0pIH0pOwogIH0KfTsKCmNvbnN0IHNweSA9IG1vY2t5LnNweShhbmFseXRpY3MsICd0cmFjaycsIG1vY2t5LmZ1bmN0aW9uKChjb250ZXh0KSA9PiB7CiAgLy8gY29udGV4dC5vcmlnaW5hbCAtIFRoZSBvcmlnaW5hbCBmdW5jdGlvbgogIC8vIGNvbnRleHQucmF3QXJncyAtIFVucHJvY2Vzc2VkIGFyZ3VtZW50cyBhcnJheQoKICAvLyBDYWxsIG9yaWdpbmFsIGJ1dCBhbHNvIGFkZCB0ZXN0IGxvZ2dpbmcKICBjb25zb2xlLmxvZygnQW5hbHl0aWNzIGNhbGxlZDonLCBjb250ZXh0LnJhd0FyZ3MpOwogIGNvbnRleHQub3JpZ2luYWwuYXBwbHkoY29udGV4dC5zZWxmLCBjb250ZXh0LnJhd0FyZ3MpOwp9KS5hcmdzKCdldmVudCcsICdkYXRhJykpOwoKYW5hbHl0aWNzLnRyYWNrKCdwYWdlX3ZpZXcnLCB7IHBhZ2U6ICcvaG9tZScgfSk7CmV4cGVjdChzcHkuY2FsbHMoMCkpLnRvLmRlZXAuZXF1YWwoewogIGV2ZW50OiAncGFnZV92aWV3JywKICBkYXRhOiB7IHBhZ2U6ICcvaG9tZScgfQp9KTsKCnNweS5yZXN0b3JlKCk7CmBgYAoKKipTcHkgb24gY2xhc3MgcHJvdG90eXBlcyAoYWZmZWN0cyBhbGwgaW5zdGFuY2VzKToqKgoKYGBgamF2YXNjcmlwdApjbGFzcyBIdHRwQ2xpZW50IHsKICByZXF1ZXN0KHVybCwgb3B0aW9ucykgewogICAgcmV0dXJuIGZldGNoKHVybCwgb3B0aW9ucyk7CiAgfQp9Cgpjb25zdCBzcHkgPSBtb2NreS5zcHkoSHR0cENsaWVudC5wcm90b3R5cGUsICdyZXF1ZXN0Jyk7Cgpjb25zdCBjbGllbnQxID0gbmV3IEh0dHBDbGllbnQoKTsKY29uc3QgY2xpZW50MiA9IG5ldyBIdHRwQ2xpZW50KCk7CgpjbGllbnQxLnJlcXVlc3QoJy9hcGkvdXNlcnMnLCB7IG1ldGhvZDogJ0dFVCcgfSk7CmNsaWVudDIucmVxdWVzdCgnL2FwaS9wb3N0cycsIHsgbWV0aG9kOiAnR0VUJyB9KTsKCi8vIEJvdGggaW5zdGFuY2VzJyBjYWxscyBhcmUgdHJhY2tlZApleHBlY3Qoc3B5LmNhbGxzKCkubGVuZ3RoKS50by5lcXVhbCgyKTsKc3B5LnJlc3RvcmUoKTsKYGBgCgotLS0KCiMjIPCflIQgQ29taW5nIGZyb20gSmVzdD8KCk1pZ3JhdGlvbiBndWlkZSBmb3IgSmVzdCB1c2VyczoKCnwgSmVzdCB8IGxpbC1tb2NreSB8CnwtLS0tLS18LS0tLS0tLS0tLS18CnwgYGplc3QuZm4oKWAgfCBgbW9ja3kuZnVuY3Rpb24oKS5idWlsZCgpYCB8CnwgYG1vY2subW9ja1JldHVyblZhbHVlKHZhbClgIHwgYG1vY2sucmV0KHZhbClgIHwKfCBgbW9jay5tb2NrLmNhbGxzWzBdWzBdYCB8IGBtb2NrLmNhbGxzKDApYCB8CnwgYGplc3Quc3B5T24ob2JqLCAnbWV0aG9kJylgIHwgYG1vY2t5LnNweShvYmosICdtZXRob2QnKWAgfAp8IGBzcHkubW9ja1Jlc3RvcmUoKWAgfCBgc3B5LnJlc3RvcmUoKWAgfAoKKipLZXkgZGlmZmVyZW5jZXM6KioKLSAqKkJ1aWxkZXIgcGF0dGVybioqOiBFeHBsaWNpdCBjb25maWd1cmF0aW9uIHZpYSBjaGFpbmFibGUgYnVpbGRlcnMgYmVmb3JlIGAuYnVpbGQoKWAKLSAqKk5hbWVkIGFyZ3VtZW50cyoqOiBCdWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBhcmd1bWVudCB0cmFja2luZyB3aXRoIGAuYXJncygpYAotICoqUGVyLWluc3RhbmNlIGNsYXNzIG1vY2tzKio6IENvbmZpZ3VyZSBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIGVhY2ggY2xhc3MgaW5zdGFuY2UKLSAqKlNpbXBsZXIgQVBJKio6IEZld2VyIGNvbmNlcHRzLCBtb3JlIHByZWRpY3RhYmxlIGJlaGF2aW9yCgotLS0KCiMjIPCfk4QgTGljZW5zZQoKTUlUCgojIyDwn6SdIENvbnRyaWJ1dGluZwoKQ29udHJpYnV0aW9ucyB3ZWxjb21lISBQbGVhc2Ugb3BlbiBhbiBpc3N1ZSBvciBQUiBvbiBHaXRIdWIuCgAAAAAAAAAAQUEAAAAAAAAAAAAAAAAAAAAAAAChQwAAAAAAAAAAAAAAAAAAAAAAAKFDAAAAAAAAAAAAAA",
|
|
1081
|
+
"AwAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPC/AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8L8AAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwvw"
|
|
1082
|
+
]
|
|
1083
|
+
]
|
|
1084
|
+
}
|
|
1085
|
+
],
|
|
1086
|
+
"build_system": "",
|
|
1087
|
+
"build_system_choices":
|
|
1088
|
+
[
|
|
1089
|
+
],
|
|
1090
|
+
"build_varint": "",
|
|
1091
|
+
"command_palette":
|
|
1092
|
+
{
|
|
1093
|
+
"height": 0.0,
|
|
1094
|
+
"last_filter": "",
|
|
1095
|
+
"selected_items":
|
|
1096
|
+
[
|
|
1097
|
+
[
|
|
1098
|
+
"remove",
|
|
1099
|
+
"Package Control: Remove Package"
|
|
1100
|
+
],
|
|
1101
|
+
[
|
|
1102
|
+
"tab",
|
|
1103
|
+
"Indentation: Convert to Tabs"
|
|
1104
|
+
],
|
|
1105
|
+
[
|
|
1106
|
+
"tabs",
|
|
1107
|
+
"Indentation: Convert to Tabs"
|
|
1108
|
+
],
|
|
1109
|
+
[
|
|
1110
|
+
"word",
|
|
1111
|
+
"Word Wrap: Toggle"
|
|
1112
|
+
],
|
|
1113
|
+
[
|
|
1114
|
+
"convert to ",
|
|
1115
|
+
"Indentation: Convert to Tabs"
|
|
1116
|
+
],
|
|
1117
|
+
[
|
|
1118
|
+
"close",
|
|
1119
|
+
"File: Close All"
|
|
1120
|
+
],
|
|
1121
|
+
[
|
|
1122
|
+
"clo",
|
|
1123
|
+
"File: Close All"
|
|
1124
|
+
],
|
|
1125
|
+
[
|
|
1126
|
+
"wor",
|
|
1127
|
+
"Word Wrap: Toggle"
|
|
1128
|
+
],
|
|
1129
|
+
[
|
|
1130
|
+
"inde",
|
|
1131
|
+
"Indentation: Reindent Lines"
|
|
1132
|
+
],
|
|
1133
|
+
[
|
|
1134
|
+
"save",
|
|
1135
|
+
"File: Save All"
|
|
1136
|
+
],
|
|
1137
|
+
[
|
|
1138
|
+
"indent",
|
|
1139
|
+
"Indentation: Reindent Lines"
|
|
1140
|
+
],
|
|
1141
|
+
[
|
|
1142
|
+
"cl",
|
|
1143
|
+
"File: Close All"
|
|
1144
|
+
],
|
|
1145
|
+
[
|
|
1146
|
+
"lsp",
|
|
1147
|
+
"LSP: Restart Server"
|
|
1148
|
+
],
|
|
1149
|
+
[
|
|
1150
|
+
"lsp re",
|
|
1151
|
+
"LSP: Restart Server"
|
|
1152
|
+
],
|
|
1153
|
+
[
|
|
1154
|
+
"inst",
|
|
1155
|
+
"Package Control: Install Package"
|
|
1156
|
+
],
|
|
1157
|
+
[
|
|
1158
|
+
"title",
|
|
1159
|
+
"Convert Case: Title Case"
|
|
1160
|
+
],
|
|
1161
|
+
[
|
|
1162
|
+
"install",
|
|
1163
|
+
"Package Control: Install Package"
|
|
1164
|
+
]
|
|
1165
|
+
],
|
|
1166
|
+
"width": 0.0
|
|
1167
|
+
},
|
|
1168
|
+
"console":
|
|
1169
|
+
{
|
|
1170
|
+
"height": 0.0,
|
|
1171
|
+
"history":
|
|
1172
|
+
[
|
|
1173
|
+
]
|
|
1174
|
+
},
|
|
1175
|
+
"distraction_free":
|
|
1176
|
+
{
|
|
1177
|
+
"menu_visible": true,
|
|
1178
|
+
"show_minimap": false,
|
|
1179
|
+
"show_open_files": false,
|
|
1180
|
+
"show_tabs": false,
|
|
1181
|
+
"side_bar_visible": false,
|
|
1182
|
+
"status_bar_visible": false
|
|
1183
|
+
},
|
|
1184
|
+
"expanded_folders":
|
|
1185
|
+
[
|
|
1186
|
+
"/app/lil-mocky",
|
|
1187
|
+
"/app/lil-mocky/src",
|
|
1188
|
+
"/app/lil-mocky/test"
|
|
1189
|
+
],
|
|
1190
|
+
"file_history":
|
|
1191
|
+
[
|
|
1192
|
+
"/app/guidegeek-embed/src/js/slices/MapSlice.js",
|
|
1193
|
+
"/app/guidegeek-embed/src/js/libs/device.js",
|
|
1194
|
+
"/app/guidegeek-embed/src/test/unit/mocks/MainStoreMock.js",
|
|
1195
|
+
"/app/guidegeek-embed/src/test/unit/slices/MapSlice.test.js",
|
|
1196
|
+
"/app/guidegeek-embed/src/js/gg/MainStore.js",
|
|
1197
|
+
"/app/guidegeek-embed/src/js/widget/TextMessage.js",
|
|
1198
|
+
"/app/guidegeek-embed/src/gg-common/js/lilMarkyRenderers.js",
|
|
1199
|
+
"/app/guidegeek-embed/src/js/map/MapLine.js",
|
|
1200
|
+
"/app/guidegeek-embed/src/js/map/AdvancedMap.js",
|
|
1201
|
+
"/app/guidegeek-embed/src/js/map/MapMarker.js",
|
|
1202
|
+
"/app/guidegeek-embed/src/js/helpers/mapMessageHelpers.js",
|
|
1203
|
+
"/app/guidegeek-embed/src/scss/widget/_toast-notifier.scss",
|
|
1204
|
+
"/app/guidegeek-embed/src/scss/widget/_map-window.scss",
|
|
1205
|
+
"/app/guidegeek-embed/src/js/widget/MapFilterModal.js",
|
|
1206
|
+
"/app/guidegeek-embed/src/js/widget/MapWindow.js",
|
|
1207
|
+
"/app/guidegeek-embed/src/scss/widget/_card-slider.scss",
|
|
1208
|
+
"/app/guidegeek-embed/src/js/widget/CardSlider.js",
|
|
1209
|
+
"/app/guidegeek-embed/src/scss/widget/_chat-conversation.scss",
|
|
1210
|
+
"/app/guidegeek-embed/src/scss/widget/_text-message.scss",
|
|
1211
|
+
"/app/guidegeek-embed/src/scss/widget/_modal-dialog.scss",
|
|
1212
|
+
"/app/guidegeek-embed/src/scss/widget.scss",
|
|
1213
|
+
"/app/guidegeek-embed/src/scss/widget/_variables.scss",
|
|
1214
|
+
"/app/guidegeek-embed/src/js/map/CardSlider.js",
|
|
1215
|
+
"/app/guidegeek-embed/src/js/widget/PlaceWindow.js",
|
|
1216
|
+
"/app/guidegeek-embed/TODO",
|
|
1217
|
+
"/app/guidegeek-embed/src/test/unit/libs/ComponentElement.test.js",
|
|
1218
|
+
"/app/guidegeek-embed/src/js/widget/PlaceWindowContent.js",
|
|
1219
|
+
"/app/guidegeek-embed/www/map.html",
|
|
1220
|
+
"/app/guidegeek-embed/src/scss/map/_card-slider.scss",
|
|
1221
|
+
"/app/guidegeek-embed/src/scss/map/_base.scss",
|
|
1222
|
+
"/app/guidegeek-embed/src/js/map.js",
|
|
1223
|
+
"/app/guidegeek-embed/src/scss/map.scss",
|
|
1224
|
+
"/app/guidegeek-embed/src/js/widget/ImageSlider.js",
|
|
1225
|
+
"/app/guidegeek-embed/src/js/libs/ComponentElement.js",
|
|
1226
|
+
"/app/guidegeek-embed/src/node_modules/jsdom/lib/jsdom/living/generated/CustomElementConstructor.js",
|
|
1227
|
+
"/app/guidegeek-embed/src/scss/widget/_image-slider.scss",
|
|
1228
|
+
"/app/guidegeek-embed/src/scss/widget/_place-window.scss",
|
|
1229
|
+
"/app/guidegeek-embed/src/js/widget/AppWindow.js",
|
|
1230
|
+
"/app/guidegeek-embed/src/js/helpers/unsplashTracking.js",
|
|
1231
|
+
"/app/guidegeek-embed/src/scss/widget/_content-form.scss",
|
|
1232
|
+
"/app/guidegeek-embed/docker-compose.yml",
|
|
1233
|
+
"/app/guidegeek-embed/src/js/widget/HotelSearchDateModal.js",
|
|
1234
|
+
"/app/guidegeek-embed/src/js/slices/LayoutSlice.js",
|
|
1235
|
+
"/app/guidegeek-embed/src/js/gg/Chat.js",
|
|
1236
|
+
"/app/guidegeek-embed/src/scss/widget/_chat-toggle.scss",
|
|
1237
|
+
"/app/guidegeek-embed/src/scss/widget/_chat-message.scss",
|
|
1238
|
+
"/app/guidegeek-embed/src/scss/widget/_place-search.scss",
|
|
1239
|
+
"/app/guidegeek-embed/src/scss/map/_map-marker.scss",
|
|
1240
|
+
"/home/doug/Downloads/icon-sign-post.svg",
|
|
1241
|
+
"/app/guidegeek-embed/src/js/widget/FeedbackModal.js",
|
|
1242
|
+
"/app/guidegeek-embed/src/js/simple-map.js",
|
|
1243
|
+
"/home/doug/Downloads/icon-dollar-sign.svg",
|
|
1244
|
+
"/app/guidegeek-embed/src/js/map/MapDataHelper.js",
|
|
1245
|
+
"/app/guidegeek-embed/src/js/slices/PlacesSlice.js",
|
|
1246
|
+
"/app/guidegeek-embed/src/js/widget/PlaceHotelSearch.js",
|
|
1247
|
+
"/app/guidegeek-embed/src/js/widget/HotelSearchRoomsModal.js",
|
|
1248
|
+
"/app/guidegeek-embed/src/js/libs/SliceBuddy.js",
|
|
1249
|
+
"/app/guidegeek-embed/src/js/libs/GuideGeekHttp.js",
|
|
1250
|
+
"/app/guidegeek-embed/src/scss/map/_map-cluster.scss",
|
|
1251
|
+
"/app/guidegeek-embed/src/js/libs/AnalyticsClient.js",
|
|
1252
|
+
"/app/guidegeek-embed/src/js/widget/ChatWindow.js",
|
|
1253
|
+
"/app/guidegeek-embed/src/js/widget/ChatToggle.js",
|
|
1254
|
+
"/app/guidegeek-embed/src/js/widget/ChatMessageList.js",
|
|
1255
|
+
"/home/doug/Temp/icon-funnel.svg",
|
|
1256
|
+
"/app/guidegeek-embed/src/js/map/SimpleMap.js",
|
|
1257
|
+
"/app/guidegeek-embed/src/js/widget/createWidget.js",
|
|
1258
|
+
"/app/guidegeek-embed/src/scss/widget/_app-window.scss",
|
|
1259
|
+
"/app/guidegeek-embed/src/scss/widget/_app.scss",
|
|
1260
|
+
"/app/guidegeek-embed/src/js/widget/App.js",
|
|
1261
|
+
"/app/guidegeek-embed/src/js/libs/StoreBuddy.js",
|
|
1262
|
+
"/app/guidegeek-embed/www/dev/index.html",
|
|
1263
|
+
"/app/guidegeek-embed/src/js/gg/messageHelper.js",
|
|
1264
|
+
"/app/guidegeek-embed/src/js/libs/StateStorage.js",
|
|
1265
|
+
"/app/guidegeek-embed/src/package.json",
|
|
1266
|
+
"/app/guidegeek-embed/src/gg-common/js/lilMarkyRenderers.cjs",
|
|
1267
|
+
"/app/guidegeek-embed/src/js/helpers/imageHelpers.js",
|
|
1268
|
+
"/app/guidegeek-embed/sonar-project.properties",
|
|
1269
|
+
"/app/guidegeek-embed/src/js/gg/createWindowApi.js",
|
|
1270
|
+
"/app/guidegeek-embed/src/test/unit/libs/StoreBuddy.test.js",
|
|
1271
|
+
"/app/guidegeek-embed/src/js/widget/createTheme.js",
|
|
1272
|
+
"/app/guidegeek-embed/www/dev/cta.html",
|
|
1273
|
+
"/app/guidegeek-embed/src/js/libs/CrossOrigin.js",
|
|
1274
|
+
"/app/guidegeek-embed/src/js/widget/MessageActions.js",
|
|
1275
|
+
"/app/guidegeek-embed/src/js/libs/StoreBuddyNeo.js",
|
|
1276
|
+
"/app/guidegeek-embed/src/js/libs/DispatcherNeo.js",
|
|
1277
|
+
"/app/guidegeek-embed/src/gulpfile.js",
|
|
1278
|
+
"/app/guidegeek-embed/src/js/test.js",
|
|
1279
|
+
"/app/guidegeek-embed/Jenkinsfile",
|
|
1280
|
+
"/app/guidegeek-embed/src/js/embed.js",
|
|
1281
|
+
"/app/guidegeek-embed/src/test/unit/gg/createWindowApi.test.js",
|
|
1282
|
+
"/app/guidegeek-embed/src/scss/widget/_app-window-header.scss",
|
|
1283
|
+
"/app/guidegeek-embed/src/package-old.json",
|
|
1284
|
+
"/app/guidegeek-embed/Dockerfile",
|
|
1285
|
+
"/app/guidegeek-embed/src/scss/widget/_base.scss",
|
|
1286
|
+
"/app/guidegeek-embed/src/gg-common/js/placeFormat.cjs",
|
|
1287
|
+
"/app/guidegeek-embed/src/js/widget/PlaceTourSearch.js",
|
|
1288
|
+
"/app/guidegeek-embed/src/scss/widget/_content-status.scss",
|
|
1289
|
+
"/app/guidegeek-embed/src/gg-common/js/placeFormat.js",
|
|
1290
|
+
"/app/guidegeek-embed/src/js/libs/registerElements.js",
|
|
1291
|
+
"/app/guidegeek-embed/src/js/widget/PlaceWindowSearch.js",
|
|
1292
|
+
"/app/guidegeek-embed/src/gg-common/scss/_variables.scss",
|
|
1293
|
+
"/app/guidegeek-embed/src/scss/widget/_modal.scss",
|
|
1294
|
+
"/app/guidegeek-embed/src/scss/widget/_modal-form.scss",
|
|
1295
|
+
"/app/guidegeek-embed/src/scss/widget/_modal-control.scss",
|
|
1296
|
+
"/app/guidegeek-embed/src/js/widget/ModalWindow.js",
|
|
1297
|
+
"/app/guidegeek-embed/src/js/widget/CarouselMessage.js",
|
|
1298
|
+
"/app/guidegeek-embed/src/gg-common/scss/_flight-message-card.scss",
|
|
1299
|
+
"/app/guidegeek-embed/src/test/unit/libs/placeFormat.test.js",
|
|
1300
|
+
"/app/guidegeek-embed/src/node_modules/lit/async-directive.js",
|
|
1301
|
+
"/app/guidegeek-embed/src/js/helpers/mapDataHelpers.js",
|
|
1302
|
+
"/app/guidegeek-embed/src/js/markdown.js",
|
|
1303
|
+
"/app/guidegeek-embed/www/embed.js",
|
|
1304
|
+
"/app/guidegeek-embed/src/js/map/AdvancedMapOld.js",
|
|
1305
|
+
"/app/guidegeek-embed/src/js/gg/MainStoreOld.js",
|
|
1306
|
+
"/app/guidegeek-embed/src/js/libs/analytics.js",
|
|
1307
|
+
"/app/guidegeek-embed/src/js/gg/MainProvider.js",
|
|
1308
|
+
"/app/guidegeek-embed/src/js/libs/ProviderBuddy.js",
|
|
1309
|
+
"/app/guidegeek-embed/src/js/libs/Dispatcher.js",
|
|
1310
|
+
"/app/guidegeek-embed/src/js/gg/MainProviderOld.js",
|
|
1311
|
+
"/app/guidegeek-embed/src/js/config/config.js",
|
|
1312
|
+
"/app/guidegeek-embed/src/scss/widget/_control-modal.scss",
|
|
1313
|
+
"/app/guidegeek-embed/src/js/libs/Component.js",
|
|
1314
|
+
"/app/guidegeek-embed/src/js/libs/labels.js",
|
|
1315
|
+
"/app/guidegeek-embed/www/map.css",
|
|
1316
|
+
"/app/guidegeek-embed/src/scss/map/_map-menu.scss",
|
|
1317
|
+
"/home/doug/Temp/icon-bust.svg",
|
|
1318
|
+
"/app/guidegeek-embed/src/gg-common/scss/_wide-neo-message-card.scss",
|
|
1319
|
+
"/app/guidegeek-embed/deploy/deploy-mn-guidegeek-embed.sh"
|
|
1320
|
+
],
|
|
1321
|
+
"find":
|
|
1322
|
+
{
|
|
1323
|
+
"height": 30.0
|
|
1324
|
+
},
|
|
1325
|
+
"find_in_files":
|
|
1326
|
+
{
|
|
1327
|
+
"height": 119.0,
|
|
1328
|
+
"where_history":
|
|
1329
|
+
[
|
|
1330
|
+
]
|
|
1331
|
+
},
|
|
1332
|
+
"find_state":
|
|
1333
|
+
{
|
|
1334
|
+
"case_sensitive": true,
|
|
1335
|
+
"find_history":
|
|
1336
|
+
[
|
|
1337
|
+
"call33",
|
|
1338
|
+
"__mockyIndex",
|
|
1339
|
+
"deepClone",
|
|
1340
|
+
".ret",
|
|
1341
|
+
"objectBuilder",
|
|
1342
|
+
"replacement",
|
|
1343
|
+
"methodName",
|
|
1344
|
+
"spy",
|
|
1345
|
+
"context",
|
|
1346
|
+
"original",
|
|
1347
|
+
"functionBuilder",
|
|
1348
|
+
"original",
|
|
1349
|
+
"functionBuilder",
|
|
1350
|
+
"createFunction",
|
|
1351
|
+
"wireFunction",
|
|
1352
|
+
"mocky.function",
|
|
1353
|
+
".data",
|
|
1354
|
+
"context",
|
|
1355
|
+
"reset"
|
|
1356
|
+
],
|
|
1357
|
+
"highlight": true,
|
|
1358
|
+
"in_selection": false,
|
|
1359
|
+
"preserve_case": false,
|
|
1360
|
+
"regex": false,
|
|
1361
|
+
"replace_history":
|
|
1362
|
+
[
|
|
1363
|
+
],
|
|
1364
|
+
"reverse": false,
|
|
1365
|
+
"scrollbar_highlights": true,
|
|
1366
|
+
"show_context": true,
|
|
1367
|
+
"use_buffer2": true,
|
|
1368
|
+
"use_gitignore": true,
|
|
1369
|
+
"whole_word": false,
|
|
1370
|
+
"wrap": true
|
|
1371
|
+
},
|
|
1372
|
+
"groups":
|
|
1373
|
+
[
|
|
1374
|
+
{
|
|
1375
|
+
"sheets":
|
|
1376
|
+
[
|
|
1377
|
+
{
|
|
1378
|
+
"buffer": 0,
|
|
1379
|
+
"file": "src/lil-mocky.js",
|
|
1380
|
+
"selected": true,
|
|
1381
|
+
"semi_transient": false,
|
|
1382
|
+
"settings":
|
|
1383
|
+
{
|
|
1384
|
+
"buffer_size": 6800,
|
|
1385
|
+
"regions":
|
|
1386
|
+
{
|
|
1387
|
+
},
|
|
1388
|
+
"selection":
|
|
1389
|
+
[
|
|
1390
|
+
[
|
|
1391
|
+
5856,
|
|
1392
|
+
5856
|
|
1393
|
+
]
|
|
1394
|
+
],
|
|
1395
|
+
"settings":
|
|
1396
|
+
{
|
|
1397
|
+
"auto_complete_triggers":
|
|
1398
|
+
[
|
|
1399
|
+
{
|
|
1400
|
+
"characters": "<",
|
|
1401
|
+
"selector": "text.html, text.xml"
|
|
1402
|
+
},
|
|
1403
|
+
{
|
|
1404
|
+
"rhs_empty": true,
|
|
1405
|
+
"selector": "punctuation.accessor"
|
|
1406
|
+
}
|
|
1407
|
+
],
|
|
1408
|
+
"copilot.completion._is_modified": false,
|
|
1409
|
+
"copilot.completion._is_saving": false,
|
|
1410
|
+
"copilot.completion.completion_index": 0,
|
|
1411
|
+
"copilot.completion.completion_style": "popup",
|
|
1412
|
+
"copilot.completion.completions":
|
|
1413
|
+
[
|
|
1414
|
+
{
|
|
1415
|
+
"displayText": "{",
|
|
1416
|
+
"docVersion": 1,
|
|
1417
|
+
"point": 758,
|
|
1418
|
+
"position":
|
|
1419
|
+
{
|
|
1420
|
+
"character": 33,
|
|
1421
|
+
"line": 39
|
|
1422
|
+
},
|
|
1423
|
+
"range":
|
|
1424
|
+
{
|
|
1425
|
+
"end":
|
|
1426
|
+
{
|
|
1427
|
+
"character": 34,
|
|
1428
|
+
"line": 39
|
|
1429
|
+
},
|
|
1430
|
+
"start":
|
|
1431
|
+
{
|
|
1432
|
+
"character": 0,
|
|
1433
|
+
"line": 39
|
|
1434
|
+
}
|
|
1435
|
+
},
|
|
1436
|
+
"region":
|
|
1437
|
+
[
|
|
1438
|
+
725,
|
|
1439
|
+
759
|
|
1440
|
+
],
|
|
1441
|
+
"text": "\tmock.ret = (value, call = 0) => {",
|
|
1442
|
+
"uuid": "70a02f05-e467-4383-904c-9f5796513926"
|
|
1443
|
+
}
|
|
1444
|
+
],
|
|
1445
|
+
"copilot.completion.is_visible": false,
|
|
1446
|
+
"copilot.completion.is_visible_panel_completions": false,
|
|
1447
|
+
"copilot.completion.is_waiting_completion": false,
|
|
1448
|
+
"copilot.completion.is_waiting_panel_completions": false,
|
|
1449
|
+
"copilot.completion.original_layout": null,
|
|
1450
|
+
"lsp_active": true,
|
|
1451
|
+
"lsp_uri": "file:///app/lil-mocky/src/lil-mocky.js",
|
|
1452
|
+
"syntax": "Packages/Babel/JavaScript (Babel).sublime-syntax"
|
|
1453
|
+
},
|
|
1454
|
+
"translation.x": 0.0,
|
|
1455
|
+
"translation.y": 5515.0,
|
|
1456
|
+
"zoom_level": 1.0
|
|
1457
|
+
},
|
|
1458
|
+
"stack_index": 0,
|
|
1459
|
+
"stack_multiselect": false,
|
|
1460
|
+
"type": "text"
|
|
1461
|
+
},
|
|
1462
|
+
{
|
|
1463
|
+
"buffer": 1,
|
|
1464
|
+
"file": "test/lilMockyTest.js",
|
|
1465
|
+
"semi_transient": false,
|
|
1466
|
+
"settings":
|
|
1467
|
+
{
|
|
1468
|
+
"buffer_size": 26009,
|
|
1469
|
+
"regions":
|
|
1470
|
+
{
|
|
1471
|
+
},
|
|
1472
|
+
"selection":
|
|
1473
|
+
[
|
|
1474
|
+
[
|
|
1475
|
+
0,
|
|
1476
|
+
0
|
|
1477
|
+
]
|
|
1478
|
+
],
|
|
1479
|
+
"settings":
|
|
1480
|
+
{
|
|
1481
|
+
"auto_complete_triggers":
|
|
1482
|
+
[
|
|
1483
|
+
{
|
|
1484
|
+
"characters": "<",
|
|
1485
|
+
"selector": "text.html, text.xml"
|
|
1486
|
+
},
|
|
1487
|
+
{
|
|
1488
|
+
"rhs_empty": true,
|
|
1489
|
+
"selector": "punctuation.accessor"
|
|
1490
|
+
}
|
|
1491
|
+
],
|
|
1492
|
+
"copilot.completion._is_modified": false,
|
|
1493
|
+
"copilot.completion.is_visible": false,
|
|
1494
|
+
"copilot.completion.is_visible_panel_completions": false,
|
|
1495
|
+
"copilot.completion.is_waiting_completion": false,
|
|
1496
|
+
"copilot.completion.is_waiting_panel_completions": false,
|
|
1497
|
+
"copilot.completion.original_layout": null,
|
|
1498
|
+
"lsp_active": true,
|
|
1499
|
+
"lsp_uri": "file:///app/lil-mocky/test/lilMockyTest.js",
|
|
1500
|
+
"syntax": "Packages/Babel/JavaScript (Babel).sublime-syntax"
|
|
1501
|
+
},
|
|
1502
|
+
"translation.x": 0.0,
|
|
1503
|
+
"translation.y": 15898.0,
|
|
1504
|
+
"zoom_level": 1.0
|
|
1505
|
+
},
|
|
1506
|
+
"stack_index": 1,
|
|
1507
|
+
"stack_multiselect": false,
|
|
1508
|
+
"type": "text"
|
|
1509
|
+
},
|
|
1510
|
+
{
|
|
1511
|
+
"buffer": 2,
|
|
1512
|
+
"file": "README.md",
|
|
1513
|
+
"semi_transient": false,
|
|
1514
|
+
"settings":
|
|
1515
|
+
{
|
|
1516
|
+
"buffer_size": 17313,
|
|
1517
|
+
"regions":
|
|
1518
|
+
{
|
|
1519
|
+
},
|
|
1520
|
+
"selection":
|
|
1521
|
+
[
|
|
1522
|
+
[
|
|
1523
|
+
0,
|
|
1524
|
+
0
|
|
1525
|
+
]
|
|
1526
|
+
],
|
|
1527
|
+
"settings":
|
|
1528
|
+
{
|
|
1529
|
+
"auto_complete_triggers":
|
|
1530
|
+
[
|
|
1531
|
+
{
|
|
1532
|
+
"characters": "<",
|
|
1533
|
+
"selector": "text.html, text.xml"
|
|
1534
|
+
},
|
|
1535
|
+
{
|
|
1536
|
+
"rhs_empty": true,
|
|
1537
|
+
"selector": "punctuation.accessor"
|
|
1538
|
+
}
|
|
1539
|
+
],
|
|
1540
|
+
"copilot.completion._is_modified": false,
|
|
1541
|
+
"copilot.completion.is_visible": false,
|
|
1542
|
+
"copilot.completion.is_visible_panel_completions": false,
|
|
1543
|
+
"copilot.completion.is_waiting_completion": false,
|
|
1544
|
+
"copilot.completion.is_waiting_panel_completions": false,
|
|
1545
|
+
"copilot.completion.original_layout": null,
|
|
1546
|
+
"lsp_active": true,
|
|
1547
|
+
"lsp_uri": "file:///app/lil-mocky/README.md",
|
|
1548
|
+
"syntax": "Packages/Markdown/Markdown.sublime-syntax"
|
|
1549
|
+
},
|
|
1550
|
+
"translation.x": 0.0,
|
|
1551
|
+
"translation.y": 6161.0,
|
|
1552
|
+
"zoom_level": 1.0
|
|
1553
|
+
},
|
|
1554
|
+
"stack_index": 2,
|
|
1555
|
+
"stack_multiselect": false,
|
|
1556
|
+
"type": "text"
|
|
1557
|
+
}
|
|
1558
|
+
]
|
|
1559
|
+
}
|
|
1560
|
+
],
|
|
1561
|
+
"incremental_find":
|
|
1562
|
+
{
|
|
1563
|
+
"height": 30.0
|
|
1564
|
+
},
|
|
1565
|
+
"input":
|
|
1566
|
+
{
|
|
1567
|
+
"height": 41.0
|
|
1568
|
+
},
|
|
1569
|
+
"layout":
|
|
1570
|
+
{
|
|
1571
|
+
"cells":
|
|
1572
|
+
[
|
|
1573
|
+
[
|
|
1574
|
+
0,
|
|
1575
|
+
0,
|
|
1576
|
+
1,
|
|
1577
|
+
1
|
|
1578
|
+
]
|
|
1579
|
+
],
|
|
1580
|
+
"cols":
|
|
1581
|
+
[
|
|
1582
|
+
0.0,
|
|
1583
|
+
1.0
|
|
1584
|
+
],
|
|
1585
|
+
"rows":
|
|
1586
|
+
[
|
|
1587
|
+
0.0,
|
|
1588
|
+
1.0
|
|
1589
|
+
]
|
|
1590
|
+
},
|
|
1591
|
+
"menu_visible": false,
|
|
1592
|
+
"output.LSP Log Panel":
|
|
1593
|
+
{
|
|
1594
|
+
"height": 0.0,
|
|
1595
|
+
"history":
|
|
1596
|
+
[
|
|
1597
|
+
]
|
|
1598
|
+
},
|
|
1599
|
+
"output.diagnostics":
|
|
1600
|
+
{
|
|
1601
|
+
"height": 0.0,
|
|
1602
|
+
"history":
|
|
1603
|
+
[
|
|
1604
|
+
]
|
|
1605
|
+
},
|
|
1606
|
+
"output.diff_views":
|
|
1607
|
+
{
|
|
1608
|
+
"height": 274.0,
|
|
1609
|
+
"history":
|
|
1610
|
+
[
|
|
1611
|
+
]
|
|
1612
|
+
},
|
|
1613
|
+
"output.find_results":
|
|
1614
|
+
{
|
|
1615
|
+
"height": 0.0,
|
|
1616
|
+
"history":
|
|
1617
|
+
[
|
|
1618
|
+
]
|
|
1619
|
+
},
|
|
1620
|
+
"output.mdpopups":
|
|
1621
|
+
{
|
|
1622
|
+
"height": 0.0,
|
|
1623
|
+
"history":
|
|
1624
|
+
[
|
|
1625
|
+
]
|
|
1626
|
+
},
|
|
1627
|
+
"output.mdpopups-dummy":
|
|
1628
|
+
{
|
|
1629
|
+
"height": 0.0,
|
|
1630
|
+
"history":
|
|
1631
|
+
[
|
|
1632
|
+
]
|
|
1633
|
+
},
|
|
1634
|
+
"pinned_build_system": "",
|
|
1635
|
+
"project": "lil-mocky.sublime-project",
|
|
1636
|
+
"replace":
|
|
1637
|
+
{
|
|
1638
|
+
"height": 56.0
|
|
1639
|
+
},
|
|
1640
|
+
"save_all_on_build": true,
|
|
1641
|
+
"select_file":
|
|
1642
|
+
{
|
|
1643
|
+
"height": 0.0,
|
|
1644
|
+
"last_filter": "",
|
|
1645
|
+
"selected_items":
|
|
1646
|
+
[
|
|
1647
|
+
[
|
|
1648
|
+
"",
|
|
1649
|
+
"src/lil-mocky.js"
|
|
1650
|
+
],
|
|
1651
|
+
[
|
|
1652
|
+
"mockyte",
|
|
1653
|
+
"test/lilMockyTest.js"
|
|
1654
|
+
],
|
|
1655
|
+
[
|
|
1656
|
+
"readme",
|
|
1657
|
+
"README.md"
|
|
1658
|
+
],
|
|
1659
|
+
[
|
|
1660
|
+
"mainstoremo",
|
|
1661
|
+
"src/test/unit/mocks/MainStoreMock.js"
|
|
1662
|
+
],
|
|
1663
|
+
[
|
|
1664
|
+
"mapslice",
|
|
1665
|
+
"src/test/unit/slices/MapSlice.test.js"
|
|
1666
|
+
],
|
|
1667
|
+
[
|
|
1668
|
+
"mapsl",
|
|
1669
|
+
"src/js/slices/MapSlice.js"
|
|
1670
|
+
],
|
|
1671
|
+
[
|
|
1672
|
+
"mainstore",
|
|
1673
|
+
"src/js/gg/MainStore.js"
|
|
1674
|
+
],
|
|
1675
|
+
[
|
|
1676
|
+
"main",
|
|
1677
|
+
"src/js/gg/MainStore.js"
|
|
1678
|
+
],
|
|
1679
|
+
[
|
|
1680
|
+
"mapline",
|
|
1681
|
+
"src/js/map/MapLine.js"
|
|
1682
|
+
],
|
|
1683
|
+
[
|
|
1684
|
+
"advan",
|
|
1685
|
+
"src/js/map/AdvancedMap.js"
|
|
1686
|
+
],
|
|
1687
|
+
[
|
|
1688
|
+
"cardslid",
|
|
1689
|
+
"src/js/widget/CardSlider.js"
|
|
1690
|
+
],
|
|
1691
|
+
[
|
|
1692
|
+
"cardslider",
|
|
1693
|
+
"src/scss/widget/_card-slider.scss"
|
|
1694
|
+
],
|
|
1695
|
+
[
|
|
1696
|
+
"toasnoti",
|
|
1697
|
+
"src/scss/widget/_toast-notifier.scss"
|
|
1698
|
+
],
|
|
1699
|
+
[
|
|
1700
|
+
"mapwindoc",
|
|
1701
|
+
"src/scss/widget/_map-window.scss"
|
|
1702
|
+
],
|
|
1703
|
+
[
|
|
1704
|
+
"mapfilter",
|
|
1705
|
+
"src/js/widget/MapFilterModal.js"
|
|
1706
|
+
],
|
|
1707
|
+
[
|
|
1708
|
+
"mapwind",
|
|
1709
|
+
"src/js/widget/MapWindow.js"
|
|
1710
|
+
],
|
|
1711
|
+
[
|
|
1712
|
+
"toast",
|
|
1713
|
+
"src/scss/widget/_toast-notifier.scss"
|
|
1714
|
+
],
|
|
1715
|
+
[
|
|
1716
|
+
"placewind",
|
|
1717
|
+
"src/js/widget/PlaceWindow.js"
|
|
1718
|
+
],
|
|
1719
|
+
[
|
|
1720
|
+
"modal",
|
|
1721
|
+
"src/scss/widget/_modal-dialog.scss"
|
|
1722
|
+
],
|
|
1723
|
+
[
|
|
1724
|
+
"mapwindow",
|
|
1725
|
+
"src/scss/widget/_map-window.scss"
|
|
1726
|
+
],
|
|
1727
|
+
[
|
|
1728
|
+
"varscs",
|
|
1729
|
+
"src/scss/widget/_variables.scss"
|
|
1730
|
+
],
|
|
1731
|
+
[
|
|
1732
|
+
"modaldia",
|
|
1733
|
+
"src/scss/widget/_modal-dialog.scss"
|
|
1734
|
+
],
|
|
1735
|
+
[
|
|
1736
|
+
"filtermod",
|
|
1737
|
+
"src/js/widget/MapFilterModal.js"
|
|
1738
|
+
],
|
|
1739
|
+
[
|
|
1740
|
+
"mamark",
|
|
1741
|
+
"src/js/map/MapMarker.js"
|
|
1742
|
+
],
|
|
1743
|
+
[
|
|
1744
|
+
"advancedmap",
|
|
1745
|
+
"src/js/map/AdvancedMap.js"
|
|
1746
|
+
],
|
|
1747
|
+
[
|
|
1748
|
+
"ComponentElement.test.js",
|
|
1749
|
+
"src/test/unit/libs/ComponentElement.test.js"
|
|
1750
|
+
],
|
|
1751
|
+
[
|
|
1752
|
+
"mapsli",
|
|
1753
|
+
"src/js/slices/MapSlice.js"
|
|
1754
|
+
],
|
|
1755
|
+
[
|
|
1756
|
+
"todo",
|
|
1757
|
+
"TODO"
|
|
1758
|
+
],
|
|
1759
|
+
[
|
|
1760
|
+
"adva",
|
|
1761
|
+
"src/js/map/AdvancedMap.js"
|
|
1762
|
+
],
|
|
1763
|
+
[
|
|
1764
|
+
"mapmark",
|
|
1765
|
+
"src/js/map/MapMarker.js"
|
|
1766
|
+
],
|
|
1767
|
+
[
|
|
1768
|
+
"cardsl",
|
|
1769
|
+
"src/js/widget/CardSlider.js"
|
|
1770
|
+
],
|
|
1771
|
+
[
|
|
1772
|
+
"carsl",
|
|
1773
|
+
"src/js/map/CardSlider.js"
|
|
1774
|
+
],
|
|
1775
|
+
[
|
|
1776
|
+
"mapwindo",
|
|
1777
|
+
"src/scss/widget/_map-window.scss"
|
|
1778
|
+
],
|
|
1779
|
+
[
|
|
1780
|
+
"mapjs",
|
|
1781
|
+
"src/js/map.js"
|
|
1782
|
+
],
|
|
1783
|
+
[
|
|
1784
|
+
"mapscss",
|
|
1785
|
+
"src/scss/map.scss"
|
|
1786
|
+
],
|
|
1787
|
+
[
|
|
1788
|
+
"cardslscs",
|
|
1789
|
+
"src/scss/map/_card-slider.scss"
|
|
1790
|
+
],
|
|
1791
|
+
[
|
|
1792
|
+
"mainstor",
|
|
1793
|
+
"src/js/gg/MainStore.js"
|
|
1794
|
+
],
|
|
1795
|
+
[
|
|
1796
|
+
"imagesl",
|
|
1797
|
+
"src/js/widget/ImageSlider.js"
|
|
1798
|
+
],
|
|
1799
|
+
[
|
|
1800
|
+
"compele",
|
|
1801
|
+
"src/js/libs/ComponentElement.js"
|
|
1802
|
+
],
|
|
1803
|
+
[
|
|
1804
|
+
"comel",
|
|
1805
|
+
"src/node_modules/jsdom/lib/jsdom/living/generated/CustomElementConstructor.js"
|
|
1806
|
+
],
|
|
1807
|
+
[
|
|
1808
|
+
"mapslc",
|
|
1809
|
+
"src/js/slices/MapSlice.js"
|
|
1810
|
+
],
|
|
1811
|
+
[
|
|
1812
|
+
"widgetscs",
|
|
1813
|
+
"src/scss/widget.scss"
|
|
1814
|
+
],
|
|
1815
|
+
[
|
|
1816
|
+
"text",
|
|
1817
|
+
"src/js/widget/TextMessage.js"
|
|
1818
|
+
],
|
|
1819
|
+
[
|
|
1820
|
+
"comp",
|
|
1821
|
+
"src/js/libs/ComponentElement.js"
|
|
1822
|
+
],
|
|
1823
|
+
[
|
|
1824
|
+
"textmes",
|
|
1825
|
+
"src/js/widget/TextMessage.js"
|
|
1826
|
+
],
|
|
1827
|
+
[
|
|
1828
|
+
"mapwindowscs",
|
|
1829
|
+
"src/scss/widget/_map-window.scss"
|
|
1830
|
+
],
|
|
1831
|
+
[
|
|
1832
|
+
"cardls",
|
|
1833
|
+
"src/js/widget/CardSlider.js"
|
|
1834
|
+
],
|
|
1835
|
+
[
|
|
1836
|
+
"imageslider",
|
|
1837
|
+
"src/scss/widget/_image-slider.scss"
|
|
1838
|
+
],
|
|
1839
|
+
[
|
|
1840
|
+
"maphtml",
|
|
1841
|
+
"www/map.html"
|
|
1842
|
+
],
|
|
1843
|
+
[
|
|
1844
|
+
"mapwin",
|
|
1845
|
+
"src/js/widget/MapWindow.js"
|
|
1846
|
+
],
|
|
1847
|
+
[
|
|
1848
|
+
"placecontent",
|
|
1849
|
+
"src/js/widget/PlaceWindowContent.js"
|
|
1850
|
+
],
|
|
1851
|
+
[
|
|
1852
|
+
"appwind",
|
|
1853
|
+
"src/js/widget/AppWindow.js"
|
|
1854
|
+
],
|
|
1855
|
+
[
|
|
1856
|
+
"docke",
|
|
1857
|
+
"docker-compose.yml"
|
|
1858
|
+
],
|
|
1859
|
+
[
|
|
1860
|
+
"modalscs",
|
|
1861
|
+
"src/scss/widget/_modal-dialog.scss"
|
|
1862
|
+
],
|
|
1863
|
+
[
|
|
1864
|
+
"contenform",
|
|
1865
|
+
"src/scss/widget/_content-form.scss"
|
|
1866
|
+
],
|
|
1867
|
+
[
|
|
1868
|
+
"hoteldate",
|
|
1869
|
+
"src/js/widget/HotelSearchDateModal.js"
|
|
1870
|
+
],
|
|
1871
|
+
[
|
|
1872
|
+
"mapmoda",
|
|
1873
|
+
"src/js/widget/MapFilterModal.js"
|
|
1874
|
+
],
|
|
1875
|
+
[
|
|
1876
|
+
"helpers/map",
|
|
1877
|
+
"src/js/helpers/mapMessageHelpers.js"
|
|
1878
|
+
],
|
|
1879
|
+
[
|
|
1880
|
+
"maphelp",
|
|
1881
|
+
"src/js/map/MapDataHelper.js"
|
|
1882
|
+
],
|
|
1883
|
+
[
|
|
1884
|
+
"mapmar",
|
|
1885
|
+
"src/scss/map/_map-marker.scss"
|
|
1886
|
+
],
|
|
1887
|
+
[
|
|
1888
|
+
"mapwindscs",
|
|
1889
|
+
"src/scss/widget/_map-window.scss"
|
|
1890
|
+
],
|
|
1891
|
+
[
|
|
1892
|
+
"carslider",
|
|
1893
|
+
"src/js/widget/CardSlider.js"
|
|
1894
|
+
],
|
|
1895
|
+
[
|
|
1896
|
+
"cars",
|
|
1897
|
+
"src/js/map/CardSlider.js"
|
|
1898
|
+
],
|
|
1899
|
+
[
|
|
1900
|
+
"chatjs",
|
|
1901
|
+
"src/js/gg/Chat.js"
|
|
1902
|
+
],
|
|
1903
|
+
[
|
|
1904
|
+
"advanced",
|
|
1905
|
+
"src/js/map/AdvancedMap.js"
|
|
1906
|
+
],
|
|
1907
|
+
[
|
|
1908
|
+
"mapmodal",
|
|
1909
|
+
"src/js/widget/MapFilterModal.js"
|
|
1910
|
+
],
|
|
1911
|
+
[
|
|
1912
|
+
"modalscss",
|
|
1913
|
+
"src/scss/widget/_modal-dialog.scss"
|
|
1914
|
+
],
|
|
1915
|
+
[
|
|
1916
|
+
"layout",
|
|
1917
|
+
"src/js/slices/LayoutSlice.js"
|
|
1918
|
+
],
|
|
1919
|
+
[
|
|
1920
|
+
"mapmak",
|
|
1921
|
+
"src/js/map/MapMarker.js"
|
|
1922
|
+
],
|
|
1923
|
+
[
|
|
1924
|
+
"roomod",
|
|
1925
|
+
"src/js/widget/HotelSearchRoomsModal.js"
|
|
1926
|
+
],
|
|
1927
|
+
[
|
|
1928
|
+
"placesl",
|
|
1929
|
+
"src/js/slices/PlacesSlice.js"
|
|
1930
|
+
],
|
|
1931
|
+
[
|
|
1932
|
+
"gghttp",
|
|
1933
|
+
"src/js/libs/GuideGeekHttp.js"
|
|
1934
|
+
],
|
|
1935
|
+
[
|
|
1936
|
+
"gghtt",
|
|
1937
|
+
"src/js/libs/GuideGeekHttp.js"
|
|
1938
|
+
],
|
|
1939
|
+
[
|
|
1940
|
+
"placeslice",
|
|
1941
|
+
"src/js/slices/PlacesSlice.js"
|
|
1942
|
+
],
|
|
1943
|
+
[
|
|
1944
|
+
"guidegeek",
|
|
1945
|
+
"src/js/libs/GuideGeekHttp.js"
|
|
1946
|
+
],
|
|
1947
|
+
[
|
|
1948
|
+
"placecont",
|
|
1949
|
+
"src/js/widget/PlaceWindowContent.js"
|
|
1950
|
+
],
|
|
1951
|
+
[
|
|
1952
|
+
"mapli",
|
|
1953
|
+
"src/js/map/MapLine.js"
|
|
1954
|
+
],
|
|
1955
|
+
[
|
|
1956
|
+
"mapwindoscs",
|
|
1957
|
+
"src/scss/widget/_map-window.scss"
|
|
1958
|
+
],
|
|
1959
|
+
[
|
|
1960
|
+
"mapscs",
|
|
1961
|
+
"src/scss/map/_map-cluster.scss"
|
|
1962
|
+
],
|
|
1963
|
+
[
|
|
1964
|
+
"mapbase",
|
|
1965
|
+
"src/scss/map/_base.scss"
|
|
1966
|
+
],
|
|
1967
|
+
[
|
|
1968
|
+
"mapmod",
|
|
1969
|
+
"src/js/widget/MapFilterModal.js"
|
|
1970
|
+
],
|
|
1971
|
+
[
|
|
1972
|
+
"lilmark",
|
|
1973
|
+
"src/gg-common/js/lilMarkyRenderers.js"
|
|
1974
|
+
],
|
|
1975
|
+
[
|
|
1976
|
+
"feedback",
|
|
1977
|
+
"src/js/widget/FeedbackModal.js"
|
|
1978
|
+
],
|
|
1979
|
+
[
|
|
1980
|
+
"hotelsearch",
|
|
1981
|
+
"src/js/widget/PlaceHotelSearch.js"
|
|
1982
|
+
],
|
|
1983
|
+
[
|
|
1984
|
+
"roommodal",
|
|
1985
|
+
"src/js/widget/HotelSearchRoomsModal.js"
|
|
1986
|
+
],
|
|
1987
|
+
[
|
|
1988
|
+
"mapfil",
|
|
1989
|
+
"src/js/widget/MapFilterModal.js"
|
|
1990
|
+
],
|
|
1991
|
+
[
|
|
1992
|
+
"varscss",
|
|
1993
|
+
"src/scss/widget/_variables.scss"
|
|
1994
|
+
],
|
|
1995
|
+
[
|
|
1996
|
+
"layoutslice",
|
|
1997
|
+
"src/js/slices/LayoutSlice.js"
|
|
1998
|
+
],
|
|
1999
|
+
[
|
|
2000
|
+
"mapfi",
|
|
2001
|
+
"src/js/widget/MapFilterModal.js"
|
|
2002
|
+
],
|
|
2003
|
+
[
|
|
2004
|
+
"mapslic",
|
|
2005
|
+
"src/js/slices/MapSlice.js"
|
|
2006
|
+
],
|
|
2007
|
+
[
|
|
2008
|
+
"store",
|
|
2009
|
+
"src/js/libs/StoreBuddy.js"
|
|
2010
|
+
],
|
|
2011
|
+
[
|
|
2012
|
+
"appcss",
|
|
2013
|
+
"src/scss/widget/_app.scss"
|
|
2014
|
+
],
|
|
2015
|
+
[
|
|
2016
|
+
"create",
|
|
2017
|
+
"src/js/widget/createWidget.js"
|
|
2018
|
+
],
|
|
2019
|
+
[
|
|
2020
|
+
"appjs",
|
|
2021
|
+
"src/js/widget/App.js"
|
|
2022
|
+
],
|
|
2023
|
+
[
|
|
2024
|
+
"mapfilte",
|
|
2025
|
+
"src/js/widget/MapFilterModal.js"
|
|
2026
|
+
],
|
|
2027
|
+
[
|
|
2028
|
+
"hotel",
|
|
2029
|
+
"src/js/widget/PlaceHotelSearch.js"
|
|
2030
|
+
],
|
|
2031
|
+
[
|
|
2032
|
+
"devinde",
|
|
2033
|
+
"www/dev/index.html"
|
|
2034
|
+
],
|
|
2035
|
+
[
|
|
2036
|
+
"app",
|
|
2037
|
+
"src/js/widget/App.js"
|
|
2038
|
+
],
|
|
2039
|
+
[
|
|
2040
|
+
"docker",
|
|
2041
|
+
"docker-compose.yml"
|
|
2042
|
+
],
|
|
2043
|
+
[
|
|
2044
|
+
"placesear",
|
|
2045
|
+
"src/js/widget/PlaceHotelSearch.js"
|
|
2046
|
+
],
|
|
2047
|
+
[
|
|
2048
|
+
"layouts",
|
|
2049
|
+
"src/js/slices/LayoutSlice.js"
|
|
2050
|
+
],
|
|
2051
|
+
[
|
|
2052
|
+
"mapme",
|
|
2053
|
+
"src/js/helpers/mapMessageHelpers.js"
|
|
2054
|
+
],
|
|
2055
|
+
[
|
|
2056
|
+
"mapslider",
|
|
2057
|
+
"src/js/map/CardSlider.js"
|
|
2058
|
+
],
|
|
2059
|
+
[
|
|
2060
|
+
"mains",
|
|
2061
|
+
"src/js/gg/MainStore.js"
|
|
2062
|
+
],
|
|
2063
|
+
[
|
|
2064
|
+
"chatmes",
|
|
2065
|
+
"src/js/widget/ChatMessageList.js"
|
|
2066
|
+
],
|
|
2067
|
+
[
|
|
2068
|
+
"creat",
|
|
2069
|
+
"src/js/widget/createWidget.js"
|
|
2070
|
+
],
|
|
2071
|
+
[
|
|
2072
|
+
"layoutslc",
|
|
2073
|
+
"src/js/slices/LayoutSlice.js"
|
|
2074
|
+
],
|
|
2075
|
+
[
|
|
2076
|
+
"storage",
|
|
2077
|
+
"src/js/libs/StateStorage.js"
|
|
2078
|
+
],
|
|
2079
|
+
[
|
|
2080
|
+
"pack",
|
|
2081
|
+
"src/package.json"
|
|
2082
|
+
],
|
|
2083
|
+
[
|
|
2084
|
+
"mainst",
|
|
2085
|
+
"src/js/gg/MainStore.js"
|
|
2086
|
+
],
|
|
2087
|
+
[
|
|
2088
|
+
"advancedma",
|
|
2089
|
+
"src/js/map/AdvancedMap.js"
|
|
2090
|
+
],
|
|
2091
|
+
[
|
|
2092
|
+
"simple",
|
|
2093
|
+
"src/js/map/SimpleMap.js"
|
|
2094
|
+
],
|
|
2095
|
+
[
|
|
2096
|
+
"advanc",
|
|
2097
|
+
"src/js/map/AdvancedMap.js"
|
|
2098
|
+
],
|
|
2099
|
+
[
|
|
2100
|
+
"packae",
|
|
2101
|
+
"src/package.json"
|
|
2102
|
+
],
|
|
2103
|
+
[
|
|
2104
|
+
"widget/createWidget.js",
|
|
2105
|
+
"src/js/widget/createWidget.js"
|
|
2106
|
+
],
|
|
2107
|
+
[
|
|
2108
|
+
"placewindow",
|
|
2109
|
+
"src/js/widget/PlaceWindow.js"
|
|
2110
|
+
],
|
|
2111
|
+
[
|
|
2112
|
+
"placesearch",
|
|
2113
|
+
"src/js/widget/PlaceHotelSearch.js"
|
|
2114
|
+
],
|
|
2115
|
+
[
|
|
2116
|
+
"chatwin",
|
|
2117
|
+
"src/js/widget/ChatWindow.js"
|
|
2118
|
+
],
|
|
2119
|
+
[
|
|
2120
|
+
"appwin",
|
|
2121
|
+
"src/js/widget/AppWindow.js"
|
|
2122
|
+
],
|
|
2123
|
+
[
|
|
2124
|
+
"slices/MapSlice.js",
|
|
2125
|
+
"src/js/slices/MapSlice.js"
|
|
2126
|
+
],
|
|
2127
|
+
[
|
|
2128
|
+
"simplemap",
|
|
2129
|
+
"src/js/map/SimpleMap.js"
|
|
2130
|
+
],
|
|
2131
|
+
[
|
|
2132
|
+
"js/helpers/imageHelpers.js",
|
|
2133
|
+
"src/js/helpers/imageHelpers.js"
|
|
2134
|
+
],
|
|
2135
|
+
[
|
|
2136
|
+
"helpers/mapMessageHelpers.js",
|
|
2137
|
+
"src/js/helpers/mapMessageHelpers.js"
|
|
2138
|
+
],
|
|
2139
|
+
[
|
|
2140
|
+
"contenfrm",
|
|
2141
|
+
"src/scss/widget/_content-form.scss"
|
|
2142
|
+
],
|
|
2143
|
+
[
|
|
2144
|
+
"cta.html",
|
|
2145
|
+
"www/dev/cta.html"
|
|
2146
|
+
],
|
|
2147
|
+
[
|
|
2148
|
+
"feeb",
|
|
2149
|
+
"src/js/widget/FeedbackModal.js"
|
|
2150
|
+
],
|
|
2151
|
+
[
|
|
2152
|
+
"compoele",
|
|
2153
|
+
"src/js/libs/ComponentElement.js"
|
|
2154
|
+
],
|
|
2155
|
+
[
|
|
2156
|
+
"crossori",
|
|
2157
|
+
"src/js/libs/CrossOrigin.js"
|
|
2158
|
+
]
|
|
2159
|
+
],
|
|
2160
|
+
"width": 0.0
|
|
2161
|
+
},
|
|
2162
|
+
"select_project":
|
|
2163
|
+
{
|
|
2164
|
+
"height": 500.0,
|
|
2165
|
+
"last_filter": "con",
|
|
2166
|
+
"selected_items":
|
|
2167
|
+
[
|
|
2168
|
+
[
|
|
2169
|
+
"con",
|
|
2170
|
+
"~/.config/linux-config.sublime-project"
|
|
2171
|
+
],
|
|
2172
|
+
[
|
|
2173
|
+
"em",
|
|
2174
|
+
"/app/guidegeek-embed/guidegeek-embed.sublime-project"
|
|
2175
|
+
],
|
|
2176
|
+
[
|
|
2177
|
+
"",
|
|
2178
|
+
"/app/guidegeek-embed/guidegeek-embed.sublime-project"
|
|
2179
|
+
],
|
|
2180
|
+
[
|
|
2181
|
+
"api",
|
|
2182
|
+
"/app/guidegeek-api/guidegeek-api.sublime-project"
|
|
2183
|
+
],
|
|
2184
|
+
[
|
|
2185
|
+
"mata",
|
|
2186
|
+
"/app/matadornetwork.com/matadornetwork-com.sublime-project"
|
|
2187
|
+
],
|
|
2188
|
+
[
|
|
2189
|
+
"ma",
|
|
2190
|
+
"/app/matadornetwork.com/matadornetwork-com.sublime-project"
|
|
2191
|
+
],
|
|
2192
|
+
[
|
|
2193
|
+
"ao",
|
|
2194
|
+
"/app/aoc/aoc.sublime-project"
|
|
2195
|
+
],
|
|
2196
|
+
[
|
|
2197
|
+
"aoc",
|
|
2198
|
+
"/app/aoc/aoc.sublime-project"
|
|
2199
|
+
],
|
|
2200
|
+
[
|
|
2201
|
+
"admin",
|
|
2202
|
+
"/app/guidegeek-admin/guidegeek-admin.sublime-project"
|
|
2203
|
+
],
|
|
2204
|
+
[
|
|
2205
|
+
"ad",
|
|
2206
|
+
"/app/guidegeek-admin/guidegeek-admin.sublime-project"
|
|
2207
|
+
],
|
|
2208
|
+
[
|
|
2209
|
+
"pro",
|
|
2210
|
+
"/app/matador-proxy/matador-proxy.sublime-project"
|
|
2211
|
+
],
|
|
2212
|
+
[
|
|
2213
|
+
"lil",
|
|
2214
|
+
"/app/lil-marky/lil-marky.sublime-project"
|
|
2215
|
+
],
|
|
2216
|
+
[
|
|
2217
|
+
"amdin",
|
|
2218
|
+
"/app/guidegeek-admin/guidegeek-admin.sublime-project"
|
|
2219
|
+
],
|
|
2220
|
+
[
|
|
2221
|
+
"guide",
|
|
2222
|
+
"/app/guidegeek.com/guidegeek-com.sublime-project"
|
|
2223
|
+
],
|
|
2224
|
+
[
|
|
2225
|
+
"conf",
|
|
2226
|
+
"~/.config/linux-config.sublime-project"
|
|
2227
|
+
],
|
|
2228
|
+
[
|
|
2229
|
+
"travel",
|
|
2230
|
+
"/app/travelstoke-app/travelstoke-app.sublime-project"
|
|
2231
|
+
],
|
|
2232
|
+
[
|
|
2233
|
+
"trav",
|
|
2234
|
+
"/app/travelstoke-app/travelstoke-app.sublime-project"
|
|
2235
|
+
],
|
|
2236
|
+
[
|
|
2237
|
+
"tr",
|
|
2238
|
+
"/app/travelstoke-app/travelstoke-app.sublime-project"
|
|
2239
|
+
],
|
|
2240
|
+
[
|
|
2241
|
+
"travl",
|
|
2242
|
+
"/app/travelstoke-app/travelstoke-app.sublime-project"
|
|
2243
|
+
],
|
|
2244
|
+
[
|
|
2245
|
+
"confi",
|
|
2246
|
+
"~/.config/linux-config.sublime-project"
|
|
2247
|
+
],
|
|
2248
|
+
[
|
|
2249
|
+
"matador",
|
|
2250
|
+
"/app/matadornetwork.com/matadornetwork-com.sublime-project"
|
|
2251
|
+
],
|
|
2252
|
+
[
|
|
2253
|
+
"ap",
|
|
2254
|
+
"/app/guidegeek-api/guidegeek-api.sublime-project"
|
|
2255
|
+
],
|
|
2256
|
+
[
|
|
2257
|
+
"lilmark",
|
|
2258
|
+
"/app/lil-marky/lil-marky.sublime-project"
|
|
2259
|
+
],
|
|
2260
|
+
[
|
|
2261
|
+
"cloud",
|
|
2262
|
+
"/app/cloudinary-migrator/cloudinary.sublime-project"
|
|
2263
|
+
],
|
|
2264
|
+
[
|
|
2265
|
+
"gui",
|
|
2266
|
+
"/app/guidegeek.com/guidegeek-com.sublime-project"
|
|
2267
|
+
],
|
|
2268
|
+
[
|
|
2269
|
+
"lilmar",
|
|
2270
|
+
"/app/lil-marky/lil-marky.sublime-project"
|
|
2271
|
+
],
|
|
2272
|
+
[
|
|
2273
|
+
"cl",
|
|
2274
|
+
"/app/cloudinary-migrator/cloudinary.sublime-project"
|
|
2275
|
+
],
|
|
2276
|
+
[
|
|
2277
|
+
"lin",
|
|
2278
|
+
"~/.config/linux-config.sublime-project"
|
|
2279
|
+
],
|
|
2280
|
+
[
|
|
2281
|
+
"linux",
|
|
2282
|
+
"~/.config/linux-config.sublime-project"
|
|
2283
|
+
],
|
|
2284
|
+
[
|
|
2285
|
+
"tra",
|
|
2286
|
+
"/app/travelstoke-app/travelstoke-app.sublime-project"
|
|
2287
|
+
],
|
|
2288
|
+
[
|
|
2289
|
+
"trave",
|
|
2290
|
+
"/app/travelstoke-app/travelstoke-app.sublime-project"
|
|
2291
|
+
],
|
|
2292
|
+
[
|
|
2293
|
+
"config",
|
|
2294
|
+
"~/.config/linux-config.sublime-project"
|
|
2295
|
+
],
|
|
2296
|
+
[
|
|
2297
|
+
"lilmak",
|
|
2298
|
+
"/app/lil-marky/lil-marky.sublime-project"
|
|
2299
|
+
],
|
|
2300
|
+
[
|
|
2301
|
+
"crea",
|
|
2302
|
+
"/app/creators.matadornetwork.com/creators-matadornetwork-com.sublime-project"
|
|
2303
|
+
],
|
|
2304
|
+
[
|
|
2305
|
+
"ocn",
|
|
2306
|
+
"/app/cloudinary-migrator/cloudinary.sublime-project"
|
|
2307
|
+
],
|
|
2308
|
+
[
|
|
2309
|
+
"doug",
|
|
2310
|
+
"/app/dougmcleod.ca/dougmcleod-ca.sublime-project"
|
|
2311
|
+
],
|
|
2312
|
+
[
|
|
2313
|
+
"clo",
|
|
2314
|
+
"/app/cloudinary-migrator/cloudinary.sublime-project"
|
|
2315
|
+
],
|
|
2316
|
+
[
|
|
2317
|
+
"LIN",
|
|
2318
|
+
"~/.config/linux-config.sublime-project"
|
|
2319
|
+
],
|
|
2320
|
+
[
|
|
2321
|
+
"li",
|
|
2322
|
+
"~/.config/linux-config.sublime-project"
|
|
2323
|
+
],
|
|
2324
|
+
[
|
|
2325
|
+
"API",
|
|
2326
|
+
"\\\\wsl.localhost\\Gentoo\\app\\guidegeek-api\\guidegeek-api.sublime-project"
|
|
2327
|
+
],
|
|
2328
|
+
[
|
|
2329
|
+
"go",
|
|
2330
|
+
"\\\\wsl.localhost\\Gentoo\\app\\gopttrn.com\\gopttrn-com.sublime-project"
|
|
2331
|
+
],
|
|
2332
|
+
[
|
|
2333
|
+
"ani",
|
|
2334
|
+
"\\\\wsl.localhost\\Gentoo\\app\\animalcrossingprices.com\\animalcrossingprices-com.sublime-project"
|
|
2335
|
+
],
|
|
2336
|
+
[
|
|
2337
|
+
"a",
|
|
2338
|
+
"\\\\wsl.localhost\\Gentoo\\app\\guidegeek-api\\guidegeek-api.sublime-project"
|
|
2339
|
+
],
|
|
2340
|
+
[
|
|
2341
|
+
"embe",
|
|
2342
|
+
"\\\\wsl.localhost\\Gentoo\\app\\guidegeek-embed\\guidegeek-embed.sublime-project"
|
|
2343
|
+
],
|
|
2344
|
+
[
|
|
2345
|
+
"cre",
|
|
2346
|
+
"\\\\wsl.localhost\\Gentoo\\app\\creators.matadornetwork.com\\creators-matadornetwork-com.sublime-project"
|
|
2347
|
+
],
|
|
2348
|
+
[
|
|
2349
|
+
"emb",
|
|
2350
|
+
"\\\\wsl.localhost\\Gentoo\\app\\guidegeek-embed-thales\\guidegeek-embed-thales.sublime-project"
|
|
2351
|
+
],
|
|
2352
|
+
[
|
|
2353
|
+
"tha",
|
|
2354
|
+
"\\\\wsl.localhost\\Gentoo\\app\\guidegeek-embed-thales\\guidegeek-embed-thales.sublime-project"
|
|
2355
|
+
],
|
|
2356
|
+
[
|
|
2357
|
+
"thal",
|
|
2358
|
+
"\\\\wsl.localhost\\Gentoo\\app\\guidegeek-embed-thales\\guidegeek-embed-thales.sublime-project"
|
|
2359
|
+
]
|
|
2360
|
+
],
|
|
2361
|
+
"width": 380.0
|
|
2362
|
+
},
|
|
2363
|
+
"select_symbol":
|
|
2364
|
+
{
|
|
2365
|
+
"height": 0.0,
|
|
2366
|
+
"last_filter": "",
|
|
2367
|
+
"selected_items":
|
|
2368
|
+
[
|
|
2369
|
+
],
|
|
2370
|
+
"width": 0.0
|
|
2371
|
+
},
|
|
2372
|
+
"selected_group": 0,
|
|
2373
|
+
"settings":
|
|
2374
|
+
{
|
|
2375
|
+
"copilot.conversation.code_block_index":
|
|
2376
|
+
{
|
|
2377
|
+
},
|
|
2378
|
+
"copilot.conversation.conversation_entries":
|
|
2379
|
+
[
|
|
2380
|
+
],
|
|
2381
|
+
"copilot.conversation.conversation_id": "",
|
|
2382
|
+
"copilot.conversation.follow_up": "",
|
|
2383
|
+
"copilot.conversation.is_visible": false,
|
|
2384
|
+
"copilot.conversation.is_waiting_conversation": false,
|
|
2385
|
+
"copilot.conversation.last_active_view_id": 215,
|
|
2386
|
+
"copilot.conversation.original_layout": null,
|
|
2387
|
+
"copilot.conversation.reference_block_state":
|
|
2388
|
+
{
|
|
2389
|
+
},
|
|
2390
|
+
"copilot.conversation.suggested_title": "",
|
|
2391
|
+
"copilot.copilotignore.patterns":
|
|
2392
|
+
{
|
|
2393
|
+
},
|
|
2394
|
+
"lsp_show_inlay_hints": false
|
|
2395
|
+
},
|
|
2396
|
+
"show_minimap": false,
|
|
2397
|
+
"show_open_files": false,
|
|
2398
|
+
"show_tabs": false,
|
|
2399
|
+
"side_bar_visible": false,
|
|
2400
|
+
"side_bar_width": 248.0,
|
|
2401
|
+
"status_bar_visible": true,
|
|
2402
|
+
"template_settings":
|
|
2403
|
+
{
|
|
2404
|
+
}
|
|
2405
|
+
}
|