@rushstack/rush-http-build-cache-plugin 5.97.1-pr3481.18 → 5.98.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.
Files changed (60) hide show
  1. package/.heft/build-cache/jest-cache/haste-map-bae913f9b9aa720eb4deeae0a60a4b27-22ae7f4ce9de4306889d8c05e5cc39b9-f6b1af01a3130057bdfe3d86807211f9 +0 -0
  2. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{42/Import_42731f0220476b7d949a2d8f3a6f3333 → 12/Import_12af6d2ca109ffba883fc5079062e0e8} +157 -14
  3. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{c7/commons_c77bee95093c1098b4a591f2dadf398d → 2e/commons_2e52897dfe4222d991674613f5b35882} +1007 -2581
  4. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{26/package_263c59db6933ba9581588638fb19da5c → 2f/package_2f923ac6ad9bbd4966f8472750ef7770} +2 -2
  5. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/34/PrefixProxyTerminalProvider_34b4603b9c4455de1c3cc05820149fdd +65 -0
  6. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{58/index_58c57a8f2a96bf6fdf5db35a2e44baa7 → 46/index_46761981528d09d1a0e438f06cd2c548} +7 -2
  7. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{06/ConfigurationFile_06d7f35feb0bd944d9b9a2a4d9e112c8 → 57/ConfigurationFile_57c950e8ef4673e11bff94304a50823c} +10 -4
  8. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{fa/rushlib_fa830331d24a41292b5cb91040384188 → 69/rushlib_695f6e29167e91482e2906a8d09b3a5a} +17 -28
  9. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893 +116 -0
  10. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/8a/HttpBuildCacheProvidertest_8a1598e1f1b42d6933964acfb7612893.map +1 -0
  11. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be +1551 -0
  12. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/a3/RushHttpBuildCachePlugin_a3e8a9bb172ff361907e770dcf3268be.map +1 -0
  13. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{c2/Async_c2ea5cc2edc0a460dcf394ef8277e88e → b4/Async_b43c9d64ab6a035dbce65b9f1a28e166} +78 -2
  14. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ba/TerminalWritable_ba71b4b7bfe6a26c85f4fd0245057a0a +54 -0
  15. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ce/index_ce3464019fb882539ee9a6f3e36e615a +2 -2
  16. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ce/index_ce3464019fb882539ee9a6f3e36e615a.map +1 -1
  17. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{5d/Text_5da85b5db9a2f06bbe29cdcd91e6fbca → df/Text_df57ddd200e4237e617fc183dcb5fe67} +7 -1
  18. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/{e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941 → ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4} +1210 -909
  19. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/ec/HttpBuildCacheProvider_ecceab34e8340fa24dde11b618ffa8a4.map +1 -0
  20. package/.heft/build-cache/jest-cache/perf-cache-bae913f9b9aa720eb4deeae0a60a4b27-da39a3ee5e6b4b0d3255bfef95601890 +1 -1
  21. package/.rush/temp/operation/_phase_build/state.json +1 -1
  22. package/.rush/temp/operation/_phase_test/all.log +29 -0
  23. package/.rush/temp/operation/_phase_test/state.json +1 -1
  24. package/.rush/temp/package-deps__phase_build.json +5 -5
  25. package/.rush/temp/package-deps__phase_test.json +5 -5
  26. package/.rush/temp/rushstack+rush-http-build-cache-plugin-_phase_build-08118e08afc6d454e5623f20498fd64b5e3e9051.log +10 -0
  27. package/.rush/temp/shrinkwrap-deps.json +10 -10
  28. package/lib/HttpBuildCacheProvider.d.ts +2 -0
  29. package/lib/HttpBuildCacheProvider.d.ts.map +1 -1
  30. package/lib/HttpBuildCacheProvider.js +26 -7
  31. package/lib/HttpBuildCacheProvider.js.map +1 -1
  32. package/lib/RushHttpBuildCachePlugin.d.ts.map +1 -1
  33. package/lib/RushHttpBuildCachePlugin.js +28 -4
  34. package/lib/RushHttpBuildCachePlugin.js.map +1 -1
  35. package/lib/test/HttpBuildCacheProvider.test.d.ts.map +1 -0
  36. package/lib/{HttpBuildCacheProvider.test.js → test/HttpBuildCacheProvider.test.js} +46 -3
  37. package/lib/test/HttpBuildCacheProvider.test.js.map +1 -0
  38. package/package.json +6 -6
  39. package/rush-logs/rush-http-build-cache-plugin._phase_build.log +4 -23
  40. package/rush-logs/rush-http-build-cache-plugin._phase_test.log +16 -16
  41. package/src/HttpBuildCacheProvider.ts +36 -7
  42. package/src/RushHttpBuildCachePlugin.ts +23 -28
  43. package/src/test/HttpBuildCacheProvider.test.ts +115 -0
  44. package/temp/coverage/clover.xml +117 -109
  45. package/temp/coverage/coverage-final.json +2 -2
  46. package/temp/coverage/lcov-report/HttpBuildCacheProvider.ts.html +166 -79
  47. package/temp/coverage/lcov-report/RushHttpBuildCachePlugin.ts.html +29 -44
  48. package/temp/coverage/lcov-report/index.html +24 -24
  49. package/temp/coverage/lcov-report/index.ts.html +1 -1
  50. package/temp/coverage/lcov.info +236 -218
  51. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e5/HttpBuildCacheProvider_e53bd002cf44ae62693f20b8c4682941.map +0 -1
  52. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247 +0 -362
  53. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/e6/RushHttpBuildCachePlugin_e69b4b7cd4f95aa49455690c88f00247.map +0 -1
  54. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa +0 -73
  55. package/.heft/build-cache/jest-cache/jest-transform-cache-bae913f9b9aa720eb4deeae0a60a4b27-474488b31a4a940a3990e9eaf06f1647/f7/HttpBuildCacheProvidertest_f710af633835df558cad54cb165c14fa.map +0 -1
  56. package/.rush/temp/rushstack+rush-http-build-cache-plugin-_phase_build-5e3cfa01506c2ac77af487ee9732b935a5bbe122.log +0 -27
  57. package/lib/HttpBuildCacheProvider.test.d.ts.map +0 -1
  58. package/lib/HttpBuildCacheProvider.test.js.map +0 -1
  59. package/src/HttpBuildCacheProvider.test.ts +0 -58
  60. /package/lib/{HttpBuildCacheProvider.test.d.ts → test/HttpBuildCacheProvider.test.d.ts} +0 -0
@@ -1,10 +1,10 @@
1
- 4b020c56bd52a480c10554d0bf7825f9
1
+ 1f6fe130d2f5ce096048c0a4ef878ac2
2
2
  "use strict";
3
3
 
4
4
  /* istanbul ignore next */
5
5
  function cov_ms2xfswbr() {
6
6
  var path = "/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts";
7
- var hash = "68fed68ed90a11f7ae56ba4631d6e8c44c5b590c";
7
+ var hash = "f39662f2cf6af1c0d874c48f29702c0c9cefda13";
8
8
  var global = new Function("return this")();
9
9
  var gcv = "__coverage__";
10
10
  var coverageData = {
@@ -182,22 +182,22 @@ function cov_ms2xfswbr() {
182
182
  },
183
183
  "17": {
184
184
  start: {
185
- line: 27,
186
- column: 8
185
+ line: 24,
186
+ column: 32
187
187
  },
188
188
  end: {
189
- line: 27,
190
- column: 46
189
+ line: 24,
190
+ column: 33
191
191
  }
192
192
  },
193
193
  "18": {
194
194
  start: {
195
- line: 28,
196
- column: 8
195
+ line: 25,
196
+ column: 40
197
197
  },
198
198
  end: {
199
- line: 28,
200
- column: 40
199
+ line: 25,
200
+ column: 44
201
201
  }
202
202
  },
203
203
  "19": {
@@ -207,7 +207,7 @@ function cov_ms2xfswbr() {
207
207
  },
208
208
  end: {
209
209
  line: 29,
210
- column: 56
210
+ column: 46
211
211
  }
212
212
  },
213
213
  "20": {
@@ -217,7 +217,7 @@ function cov_ms2xfswbr() {
217
217
  },
218
218
  end: {
219
219
  line: 30,
220
- column: 95
220
+ column: 40
221
221
  }
222
222
  },
223
223
  "21": {
@@ -227,7 +227,7 @@ function cov_ms2xfswbr() {
227
227
  },
228
228
  end: {
229
229
  line: 31,
230
- column: 79
230
+ column: 56
231
231
  }
232
232
  },
233
233
  "22": {
@@ -237,7 +237,7 @@ function cov_ms2xfswbr() {
237
237
  },
238
238
  end: {
239
239
  line: 32,
240
- column: 89
240
+ column: 95
241
241
  }
242
242
  },
243
243
  "23": {
@@ -247,7 +247,7 @@ function cov_ms2xfswbr() {
247
247
  },
248
248
  end: {
249
249
  line: 33,
250
- column: 96
250
+ column: 79
251
251
  }
252
252
  },
253
253
  "24": {
@@ -257,7 +257,7 @@ function cov_ms2xfswbr() {
257
257
  },
258
258
  end: {
259
259
  line: 34,
260
- column: 83
260
+ column: 89
261
261
  }
262
262
  },
263
263
  "25": {
@@ -267,7 +267,7 @@ function cov_ms2xfswbr() {
267
267
  },
268
268
  end: {
269
269
  line: 35,
270
- column: 50
270
+ column: 96
271
271
  }
272
272
  },
273
273
  "26": {
@@ -277,956 +277,1046 @@ function cov_ms2xfswbr() {
277
277
  },
278
278
  end: {
279
279
  line: 36,
280
- column: 97
280
+ column: 83
281
281
  }
282
282
  },
283
283
  "27": {
284
284
  start: {
285
- line: 40,
285
+ line: 37,
286
286
  column: 8
287
287
  },
288
288
  end: {
289
- line: 40,
290
- column: 155
289
+ line: 37,
290
+ column: 50
291
291
  }
292
292
  },
293
293
  "28": {
294
+ start: {
295
+ line: 38,
296
+ column: 8
297
+ },
298
+ end: {
299
+ line: 38,
300
+ column: 97
301
+ }
302
+ },
303
+ "29": {
304
+ start: {
305
+ line: 39,
306
+ column: 8
307
+ },
308
+ end: {
309
+ line: 39,
310
+ column: 136
311
+ }
312
+ },
313
+ "30": {
294
314
  start: {
295
315
  line: 43,
296
316
  column: 8
297
317
  },
298
318
  end: {
299
- line: 57,
319
+ line: 43,
320
+ column: 155
321
+ }
322
+ },
323
+ "31": {
324
+ start: {
325
+ line: 46,
326
+ column: 8
327
+ },
328
+ end: {
329
+ line: 61,
300
330
  column: 9
301
331
  }
302
332
  },
303
- "29": {
333
+ "32": {
304
334
  start: {
305
- line: 44,
335
+ line: 47,
306
336
  column: 27
307
337
  },
308
338
  end: {
309
- line: 51,
339
+ line: 55,
310
340
  column: 14
311
341
  }
312
342
  },
313
- "30": {
343
+ "33": {
314
344
  start: {
315
- line: 52,
345
+ line: 56,
316
346
  column: 12
317
347
  },
318
348
  end: {
319
- line: 52,
349
+ line: 56,
320
350
  column: 64
321
351
  }
322
352
  },
323
- "31": {
353
+ "34": {
324
354
  start: {
325
- line: 55,
355
+ line: 59,
326
356
  column: 12
327
357
  },
328
358
  end: {
329
- line: 55,
359
+ line: 59,
330
360
  column: 73
331
361
  }
332
362
  },
333
- "32": {
363
+ "35": {
334
364
  start: {
335
- line: 56,
365
+ line: 60,
336
366
  column: 12
337
367
  },
338
368
  end: {
339
- line: 56,
369
+ line: 60,
340
370
  column: 29
341
371
  }
342
372
  },
343
- "33": {
373
+ "36": {
344
374
  start: {
345
- line: 60,
375
+ line: 64,
346
376
  column: 8
347
377
  },
348
378
  end: {
349
- line: 63,
379
+ line: 67,
350
380
  column: 9
351
381
  }
352
382
  },
353
- "34": {
383
+ "37": {
354
384
  start: {
355
- line: 61,
385
+ line: 65,
356
386
  column: 12
357
387
  },
358
388
  end: {
359
- line: 61,
389
+ line: 65,
360
390
  column: 101
361
391
  }
362
392
  },
363
- "35": {
393
+ "38": {
364
394
  start: {
365
- line: 62,
395
+ line: 66,
366
396
  column: 12
367
397
  },
368
398
  end: {
369
- line: 62,
399
+ line: 66,
370
400
  column: 25
371
401
  }
372
402
  },
373
- "36": {
403
+ "39": {
374
404
  start: {
375
- line: 64,
405
+ line: 68,
376
406
  column: 8
377
407
  },
378
408
  end: {
379
- line: 64,
409
+ line: 68,
380
410
  column: 76
381
411
  }
382
412
  },
383
- "37": {
413
+ "40": {
384
414
  start: {
385
- line: 65,
415
+ line: 69,
386
416
  column: 8
387
417
  },
388
418
  end: {
389
- line: 79,
419
+ line: 84,
390
420
  column: 9
391
421
  }
392
422
  },
393
- "38": {
423
+ "41": {
394
424
  start: {
395
- line: 66,
425
+ line: 70,
396
426
  column: 27
397
427
  },
398
428
  end: {
399
- line: 73,
429
+ line: 78,
400
430
  column: 14
401
431
  }
402
432
  },
403
- "39": {
433
+ "42": {
404
434
  start: {
405
- line: 74,
435
+ line: 79,
406
436
  column: 12
407
437
  },
408
438
  end: {
409
- line: 74,
439
+ line: 79,
410
440
  column: 36
411
441
  }
412
442
  },
413
- "40": {
443
+ "43": {
414
444
  start: {
415
- line: 77,
445
+ line: 82,
416
446
  column: 12
417
447
  },
418
448
  end: {
419
- line: 77,
449
+ line: 82,
420
450
  column: 75
421
451
  }
422
452
  },
423
- "41": {
453
+ "44": {
424
454
  start: {
425
- line: 78,
455
+ line: 83,
426
456
  column: 12
427
457
  },
428
458
  end: {
429
- line: 78,
459
+ line: 83,
430
460
  column: 25
431
461
  }
432
462
  },
433
- "42": {
463
+ "45": {
434
464
  start: {
435
- line: 82,
465
+ line: 87,
436
466
  column: 8
437
467
  },
438
468
  end: {
439
- line: 89,
469
+ line: 94,
440
470
  column: 11
441
471
  }
442
472
  },
443
- "43": {
473
+ "46": {
444
474
  start: {
445
- line: 85,
475
+ line: 90,
446
476
  column: 12
447
477
  },
448
478
  end: {
449
- line: 87,
479
+ line: 92,
450
480
  column: 15
451
481
  }
452
482
  },
453
- "44": {
483
+ "47": {
454
484
  start: {
455
- line: 88,
485
+ line: 93,
456
486
  column: 12
457
487
  },
458
488
  end: {
459
- line: 88,
489
+ line: 93,
460
490
  column: 57
461
491
  }
462
492
  },
463
- "45": {
493
+ "48": {
464
494
  start: {
465
- line: 92,
495
+ line: 97,
466
496
  column: 8
467
497
  },
468
498
  end: {
469
- line: 97,
499
+ line: 102,
470
500
  column: 9
471
501
  }
472
502
  },
473
- "46": {
503
+ "49": {
474
504
  start: {
475
- line: 93,
505
+ line: 98,
476
506
  column: 12
477
507
  },
478
508
  end: {
479
- line: 96,
509
+ line: 101,
480
510
  column: 72
481
511
  }
482
512
  },
483
- "47": {
513
+ "50": {
484
514
  start: {
485
- line: 98,
515
+ line: 103,
486
516
  column: 20
487
517
  },
488
518
  end: {
489
- line: 98,
519
+ line: 103,
490
520
  column: 93
491
521
  }
492
522
  },
493
- "48": {
523
+ "51": {
494
524
  start: {
495
- line: 99,
525
+ line: 104,
496
526
  column: 8
497
527
  },
498
528
  end: {
499
- line: 99,
529
+ line: 104,
500
530
  column: 73
501
531
  }
502
532
  },
503
- "49": {
533
+ "52": {
504
534
  start: {
505
- line: 100,
535
+ line: 105,
506
536
  column: 23
507
537
  },
508
538
  end: {
509
- line: 100,
539
+ line: 105,
510
540
  column: 119
511
541
  }
512
542
  },
513
- "50": {
543
+ "53": {
514
544
  start: {
515
- line: 101,
545
+ line: 106,
516
546
  column: 8
517
547
  },
518
548
  end: {
519
- line: 101,
549
+ line: 106,
520
550
  column: 47
521
551
  }
522
552
  },
523
- "51": {
553
+ "54": {
524
554
  start: {
525
- line: 102,
555
+ line: 107,
526
556
  column: 8
527
557
  },
528
558
  end: {
529
- line: 104,
559
+ line: 109,
530
560
  column: 9
531
561
  }
532
562
  },
533
- "52": {
563
+ "55": {
534
564
  start: {
535
- line: 103,
565
+ line: 108,
536
566
  column: 12
537
567
  },
538
568
  end: {
539
- line: 103,
569
+ line: 108,
540
570
  column: 90
541
571
  }
542
572
  },
543
- "53": {
573
+ "56": {
544
574
  start: {
545
- line: 105,
575
+ line: 110,
546
576
  column: 27
547
577
  },
548
578
  end: {
549
- line: 105,
579
+ line: 110,
550
580
  column: 47
551
581
  }
552
582
  },
553
- "54": {
583
+ "57": {
554
584
  start: {
555
- line: 106,
585
+ line: 111,
556
586
  column: 8
557
587
  },
558
588
  end: {
559
- line: 106,
589
+ line: 111,
560
590
  column: 53
561
591
  }
562
592
  },
563
- "55": {
593
+ "58": {
564
594
  start: {
565
- line: 107,
595
+ line: 112,
566
596
  column: 8
567
597
  },
568
598
  end: {
569
- line: 107,
599
+ line: 112,
570
600
  column: 69
571
601
  }
572
602
  },
573
- "56": {
603
+ "59": {
574
604
  start: {
575
- line: 108,
605
+ line: 113,
576
606
  column: 8
577
607
  },
578
608
  end: {
579
- line: 108,
609
+ line: 113,
580
610
  column: 56
581
611
  }
582
612
  },
583
- "57": {
613
+ "60": {
584
614
  start: {
585
- line: 111,
615
+ line: 116,
586
616
  column: 8
587
617
  },
588
618
  end: {
589
- line: 116,
619
+ line: 121,
590
620
  column: 11
591
621
  }
592
622
  },
593
- "58": {
623
+ "61": {
594
624
  start: {
595
- line: 114,
625
+ line: 119,
596
626
  column: 12
597
627
  },
598
628
  end: {
599
- line: 114,
629
+ line: 119,
600
630
  column: 71
601
631
  }
602
632
  },
603
- "59": {
633
+ "62": {
604
634
  start: {
605
- line: 115,
635
+ line: 120,
606
636
  column: 12
607
637
  },
608
638
  end: {
609
- line: 115,
639
+ line: 120,
610
640
  column: 57
611
641
  }
612
642
  },
613
- "60": {
643
+ "63": {
614
644
  start: {
615
- line: 119,
645
+ line: 124,
616
646
  column: 8
617
647
  },
618
648
  end: {
619
- line: 125,
649
+ line: 130,
620
650
  column: 9
621
651
  }
622
652
  },
623
- "61": {
653
+ "64": {
624
654
  start: {
625
- line: 120,
655
+ line: 125,
626
656
  column: 33
627
657
  },
628
658
  end: {
629
- line: 120,
659
+ line: 125,
630
660
  column: 49
631
661
  }
632
662
  },
633
- "62": {
663
+ "65": {
634
664
  start: {
635
- line: 121,
665
+ line: 126,
636
666
  column: 12
637
667
  },
638
668
  end: {
639
- line: 123,
669
+ line: 128,
640
670
  column: 13
641
671
  }
642
672
  },
643
- "63": {
673
+ "66": {
644
674
  start: {
645
- line: 122,
675
+ line: 127,
646
676
  column: 16
647
677
  },
648
678
  end: {
649
- line: 122,
679
+ line: 127,
650
680
  column: 55
651
681
  }
652
682
  },
653
- "64": {
683
+ "67": {
654
684
  start: {
655
- line: 124,
685
+ line: 129,
656
686
  column: 12
657
687
  },
658
688
  end: {
659
- line: 124,
689
+ line: 129,
660
690
  column: 62
661
691
  }
662
692
  },
663
- "65": {
693
+ "68": {
664
694
  start: {
665
- line: 126,
695
+ line: 131,
666
696
  column: 8
667
697
  },
668
698
  end: {
669
- line: 126,
699
+ line: 131,
670
700
  column: 40
671
701
  }
672
702
  },
673
- "66": {
703
+ "69": {
674
704
  start: {
675
- line: 129,
705
+ line: 134,
676
706
  column: 93
677
707
  },
678
708
  end: {
679
- line: 129,
709
+ line: 134,
680
710
  column: 100
681
711
  }
682
712
  },
683
- "67": {
713
+ "70": {
684
714
  start: {
685
- line: 130,
715
+ line: 135,
686
716
  column: 38
687
717
  },
688
718
  end: {
689
- line: 130,
719
+ line: 135,
690
720
  column: 146
691
721
  }
692
722
  },
693
- "68": {
723
+ "71": {
694
724
  start: {
695
- line: 131,
725
+ line: 136,
696
726
  column: 28
697
727
  },
698
728
  end: {
699
- line: 131,
729
+ line: 136,
700
730
  column: 80
701
731
  }
702
732
  },
703
- "69": {
733
+ "72": {
704
734
  start: {
705
- line: 132,
735
+ line: 137,
706
736
  column: 20
707
737
  },
708
738
  end: {
709
- line: 132,
739
+ line: 137,
710
740
  column: 51
711
741
  }
712
742
  },
713
- "70": {
743
+ "73": {
714
744
  start: {
715
- line: 133,
745
+ line: 138,
716
746
  column: 24
717
747
  },
718
748
  end: {
719
- line: 133,
749
+ line: 138,
720
750
  column: 26
721
751
  }
722
752
  },
723
- "71": {
753
+ "74": {
724
754
  start: {
725
- line: 134,
755
+ line: 139,
726
756
  column: 8
727
757
  },
728
758
  end: {
729
- line: 136,
759
+ line: 141,
730
760
  column: 9
731
761
  }
732
762
  },
733
- "72": {
763
+ "75": {
734
764
  start: {
735
- line: 135,
765
+ line: 140,
736
766
  column: 12
737
767
  },
738
768
  end: {
739
- line: 135,
769
+ line: 140,
740
770
  column: 48
741
771
  }
742
772
  },
743
- "73": {
773
+ "76": {
744
774
  start: {
745
- line: 137,
775
+ line: 142,
746
776
  column: 8
747
777
  },
748
778
  end: {
749
- line: 141,
779
+ line: 146,
750
780
  column: 9
751
781
  }
752
782
  },
753
- "74": {
783
+ "77": {
754
784
  start: {
755
- line: 138,
785
+ line: 143,
756
786
  column: 12
757
787
  },
758
788
  end: {
759
- line: 140,
789
+ line: 145,
760
790
  column: 13
761
791
  }
762
792
  },
763
- "75": {
793
+ "78": {
764
794
  start: {
765
- line: 139,
795
+ line: 144,
766
796
  column: 16
767
797
  },
768
798
  end: {
769
- line: 139,
799
+ line: 144,
770
800
  column: 37
771
801
  }
772
802
  },
773
- "76": {
803
+ "79": {
774
804
  start: {
775
- line: 142,
805
+ line: 147,
776
806
  column: 27
777
807
  },
778
808
  end: {
779
- line: 142,
809
+ line: 147,
780
810
  column: 97
781
811
  }
782
812
  },
783
- "77": {
813
+ "80": {
784
814
  start: {
785
- line: 143,
815
+ line: 148,
786
816
  column: 8
787
817
  },
788
818
  end: {
789
- line: 143,
819
+ line: 148,
790
820
  column: 100
791
821
  }
792
822
  },
793
- "78": {
823
+ "81": {
794
824
  start: {
795
- line: 144,
825
+ line: 149,
796
826
  column: 25
797
827
  },
798
828
  end: {
799
- line: 149,
829
+ line: 154,
800
830
  column: 10
801
831
  }
802
832
  },
803
- "79": {
833
+ "82": {
804
834
  start: {
805
- line: 150,
835
+ line: 155,
806
836
  column: 8
807
837
  },
808
838
  end: {
809
- line: 159,
839
+ line: 178,
810
840
  column: 9
811
841
  }
812
842
  },
813
- "80": {
843
+ "83": {
814
844
  start: {
815
- line: 151,
816
- column: 12
845
+ line: 156,
846
+ column: 44
817
847
  },
818
848
  end: {
819
849
  line: 156,
850
+ column: 91
851
+ }
852
+ },
853
+ "84": {
854
+ start: {
855
+ line: 157,
856
+ column: 12
857
+ },
858
+ end: {
859
+ line: 166,
820
860
  column: 13
821
861
  }
822
862
  },
823
- "81": {
863
+ "85": {
824
864
  start: {
825
- line: 155,
865
+ line: 165,
826
866
  column: 16
827
867
  },
828
868
  end: {
829
- line: 155,
869
+ line: 165,
830
870
  column: 135
831
871
  }
832
872
  },
833
- "82": {
873
+ "86": {
834
874
  start: {
835
- line: 157,
875
+ line: 167,
836
876
  column: 12
837
877
  },
838
878
  end: {
839
- line: 157,
879
+ line: 175,
880
+ column: 13
881
+ }
882
+ },
883
+ "87": {
884
+ start: {
885
+ line: 171,
886
+ column: 31
887
+ },
888
+ end: {
889
+ line: 171,
890
+ column: 50
891
+ }
892
+ },
893
+ "88": {
894
+ start: {
895
+ line: 172,
896
+ column: 35
897
+ },
898
+ end: {
899
+ line: 172,
900
+ column: 81
901
+ }
902
+ },
903
+ "89": {
904
+ start: {
905
+ line: 173,
906
+ column: 16
907
+ },
908
+ end: {
909
+ line: 173,
910
+ column: 66
911
+ }
912
+ },
913
+ "90": {
914
+ start: {
915
+ line: 174,
916
+ column: 16
917
+ },
918
+ end: {
919
+ line: 174,
920
+ column: 125
921
+ }
922
+ },
923
+ "91": {
924
+ start: {
925
+ line: 176,
926
+ column: 12
927
+ },
928
+ end: {
929
+ line: 176,
840
930
  column: 80
841
931
  }
842
932
  },
843
- "83": {
933
+ "92": {
844
934
  start: {
845
- line: 158,
935
+ line: 177,
846
936
  column: 12
847
937
  },
848
938
  end: {
849
- line: 158,
939
+ line: 177,
850
940
  column: 25
851
941
  }
852
942
  },
853
- "84": {
943
+ "93": {
854
944
  start: {
855
- line: 160,
945
+ line: 179,
856
946
  column: 23
857
947
  },
858
948
  end: {
859
- line: 160,
949
+ line: 179,
860
950
  column: 82
861
951
  }
862
952
  },
863
- "85": {
953
+ "94": {
864
954
  start: {
865
- line: 161,
955
+ line: 180,
866
956
  column: 8
867
957
  },
868
958
  end: {
869
- line: 161,
959
+ line: 180,
870
960
  column: 147
871
961
  }
872
962
  },
873
- "86": {
963
+ "95": {
874
964
  start: {
875
- line: 162,
965
+ line: 181,
876
966
  column: 8
877
967
  },
878
968
  end: {
879
- line: 162,
969
+ line: 181,
880
970
  column: 22
881
971
  }
882
972
  },
883
- "87": {
973
+ "96": {
884
974
  start: {
885
- line: 165,
975
+ line: 184,
886
976
  column: 8
887
977
  },
888
978
  end: {
889
- line: 167,
979
+ line: 186,
890
980
  column: 9
891
981
  }
892
982
  },
893
- "88": {
983
+ "97": {
894
984
  start: {
895
- line: 166,
985
+ line: 185,
896
986
  column: 12
897
987
  },
898
988
  end: {
899
- line: 166,
989
+ line: 185,
900
990
  column: 19
901
991
  }
902
992
  },
903
- "89": {
993
+ "98": {
904
994
  start: {
905
- line: 168,
995
+ line: 187,
906
996
  column: 26
907
997
  },
908
998
  end: {
909
- line: 168,
999
+ line: 187,
910
1000
  column: 53
911
1001
  }
912
1002
  },
913
- "90": {
1003
+ "99": {
914
1004
  start: {
915
- line: 169,
1005
+ line: 188,
916
1006
  column: 8
917
1007
  },
918
1008
  end: {
919
- line: 171,
1009
+ line: 190,
920
1010
  column: 9
921
1011
  }
922
1012
  },
923
- "91": {
1013
+ "100": {
924
1014
  start: {
925
- line: 170,
1015
+ line: 189,
926
1016
  column: 12
927
1017
  },
928
1018
  end: {
929
- line: 170,
1019
+ line: 189,
930
1020
  column: 67
931
1021
  }
932
1022
  },
933
- "92": {
1023
+ "101": {
934
1024
  start: {
935
- line: 172,
1025
+ line: 191,
936
1026
  column: 8
937
1027
  },
938
1028
  end: {
939
- line: 182,
1029
+ line: 201,
940
1030
  column: 9
941
1031
  }
942
1032
  },
943
- "93": {
1033
+ "102": {
944
1034
  start: {
945
- line: 173,
1035
+ line: 192,
946
1036
  column: 12
947
1037
  },
948
1038
  end: {
949
- line: 181,
1039
+ line: 200,
950
1040
  column: 26
951
1041
  }
952
1042
  },
953
- "94": {
1043
+ "103": {
954
1044
  start: {
955
- line: 183,
1045
+ line: 202,
956
1046
  column: 8
957
1047
  },
958
1048
  end: {
959
- line: 183,
1049
+ line: 202,
960
1050
  column: 27
961
1051
  }
962
1052
  },
963
- "95": {
1053
+ "104": {
964
1054
  start: {
965
- line: 188,
1055
+ line: 207,
966
1056
  column: 8
967
1057
  },
968
1058
  end: {
969
- line: 192,
1059
+ line: 211,
970
1060
  column: 11
971
1061
  }
972
1062
  },
973
- "96": {
1063
+ "105": {
974
1064
  start: {
975
- line: 191,
1065
+ line: 210,
976
1066
  column: 12
977
1067
  },
978
1068
  end: {
979
- line: 191,
1069
+ line: 210,
980
1070
  column: 84
981
1071
  }
982
1072
  },
983
- "97": {
1073
+ "106": {
984
1074
  start: {
985
- line: 193,
1075
+ line: 212,
986
1076
  column: 8
987
1077
  },
988
1078
  end: {
989
- line: 198,
1079
+ line: 217,
990
1080
  column: 9
991
1081
  }
992
1082
  },
993
- "98": {
1083
+ "107": {
994
1084
  start: {
995
- line: 194,
1085
+ line: 213,
996
1086
  column: 35
997
1087
  },
998
1088
  end: {
999
- line: 194,
1089
+ line: 213,
1000
1090
  column: 110
1001
1091
  }
1002
1092
  },
1003
- "99": {
1093
+ "108": {
1004
1094
  start: {
1005
- line: 195,
1095
+ line: 214,
1006
1096
  column: 12
1007
1097
  },
1008
1098
  end: {
1009
- line: 197,
1099
+ line: 216,
1010
1100
  column: 13
1011
1101
  }
1012
1102
  },
1013
- "100": {
1103
+ "109": {
1014
1104
  start: {
1015
- line: 196,
1105
+ line: 215,
1016
1106
  column: 16
1017
1107
  },
1018
1108
  end: {
1019
- line: 196,
1109
+ line: 215,
1020
1110
  column: 45
1021
1111
  }
1022
1112
  },
1023
- "101": {
1113
+ "110": {
1024
1114
  start: {
1025
- line: 201,
1115
+ line: 220,
1026
1116
  column: 8
1027
1117
  },
1028
1118
  end: {
1029
- line: 203,
1119
+ line: 222,
1030
1120
  column: 9
1031
1121
  }
1032
1122
  },
1033
- "102": {
1123
+ "111": {
1034
1124
  start: {
1035
- line: 202,
1125
+ line: 221,
1036
1126
  column: 12
1037
1127
  },
1038
1128
  end: {
1039
- line: 202,
1129
+ line: 221,
1040
1130
  column: 36
1041
1131
  }
1042
1132
  },
1043
- "103": {
1133
+ "112": {
1044
1134
  start: {
1045
- line: 204,
1135
+ line: 223,
1046
1136
  column: 8
1047
1137
  },
1048
1138
  end: {
1049
- line: 236,
1139
+ line: 255,
1050
1140
  column: 9
1051
1141
  }
1052
1142
  },
1053
- "104": {
1143
+ "113": {
1054
1144
  start: {
1055
- line: 213,
1145
+ line: 232,
1056
1146
  column: 16
1057
1147
  },
1058
1148
  end: {
1059
- line: 213,
1149
+ line: 232,
1060
1150
  column: 49
1061
1151
  }
1062
1152
  },
1063
- "105": {
1153
+ "114": {
1064
1154
  start: {
1065
- line: 218,
1155
+ line: 237,
1066
1156
  column: 16
1067
1157
  },
1068
1158
  end: {
1069
- line: 227,
1159
+ line: 246,
1070
1160
  column: 17
1071
1161
  }
1072
1162
  },
1073
- "106": {
1163
+ "115": {
1074
1164
  start: {
1075
- line: 226,
1165
+ line: 245,
1076
1166
  column: 20
1077
1167
  },
1078
1168
  end: {
1079
- line: 226,
1169
+ line: 245,
1080
1170
  column: 44
1081
1171
  }
1082
1172
  },
1083
- "107": {
1173
+ "116": {
1084
1174
  start: {
1085
- line: 228,
1175
+ line: 247,
1086
1176
  column: 16
1087
1177
  },
1088
1178
  end: {
1089
- line: 228,
1179
+ line: 247,
1090
1180
  column: 50
1091
1181
  }
1092
1182
  },
1093
- "108": {
1183
+ "117": {
1094
1184
  start: {
1095
- line: 231,
1185
+ line: 250,
1096
1186
  column: 16
1097
1187
  },
1098
1188
  end: {
1099
- line: 234,
1189
+ line: 253,
1100
1190
  column: 17
1101
1191
  }
1102
1192
  },
1103
- "109": {
1193
+ "118": {
1104
1194
  start: {
1105
- line: 233,
1195
+ line: 252,
1106
1196
  column: 20
1107
1197
  },
1108
1198
  end: {
1109
- line: 233,
1199
+ line: 252,
1110
1200
  column: 44
1111
1201
  }
1112
1202
  },
1113
- "110": {
1203
+ "119": {
1114
1204
  start: {
1115
- line: 238,
1205
+ line: 257,
1116
1206
  column: 8
1117
1207
  },
1118
1208
  end: {
1119
- line: 238,
1209
+ line: 257,
1120
1210
  column: 35
1121
1211
  }
1122
1212
  },
1123
- "111": {
1213
+ "120": {
1124
1214
  start: {
1125
- line: 241,
1215
+ line: 260,
1126
1216
  column: 8
1127
1217
  },
1128
1218
  end: {
1129
- line: 270,
1219
+ line: 289,
1130
1220
  column: 9
1131
1221
  }
1132
1222
  },
1133
- "112": {
1223
+ "121": {
1134
1224
  start: {
1135
- line: 243,
1225
+ line: 262,
1136
1226
  column: 16
1137
1227
  },
1138
1228
  end: {
1139
- line: 243,
1229
+ line: 262,
1140
1230
  column: 103
1141
1231
  }
1142
1232
  },
1143
- "113": {
1233
+ "122": {
1144
1234
  start: {
1145
- line: 244,
1235
+ line: 263,
1146
1236
  column: 16
1147
1237
  },
1148
1238
  end: {
1149
- line: 244,
1239
+ line: 263,
1150
1240
  column: 22
1151
1241
  }
1152
1242
  },
1153
- "114": {
1243
+ "123": {
1154
1244
  start: {
1155
- line: 247,
1245
+ line: 266,
1156
1246
  column: 16
1157
1247
  },
1158
1248
  end: {
1159
- line: 247,
1249
+ line: 266,
1160
1250
  column: 105
1161
1251
  }
1162
1252
  },
1163
- "115": {
1253
+ "124": {
1164
1254
  start: {
1165
- line: 248,
1255
+ line: 267,
1166
1256
  column: 16
1167
1257
  },
1168
1258
  end: {
1169
- line: 248,
1259
+ line: 267,
1170
1260
  column: 22
1171
1261
  }
1172
1262
  },
1173
- "116": {
1263
+ "125": {
1174
1264
  start: {
1175
- line: 251,
1265
+ line: 270,
1176
1266
  column: 16
1177
1267
  },
1178
1268
  end: {
1179
- line: 251,
1269
+ line: 270,
1180
1270
  column: 98
1181
1271
  }
1182
1272
  },
1183
- "117": {
1273
+ "126": {
1184
1274
  start: {
1185
- line: 252,
1275
+ line: 271,
1186
1276
  column: 16
1187
1277
  },
1188
1278
  end: {
1189
- line: 252,
1279
+ line: 271,
1190
1280
  column: 22
1191
1281
  }
1192
1282
  },
1193
- "118": {
1283
+ "127": {
1194
1284
  start: {
1195
- line: 255,
1285
+ line: 274,
1196
1286
  column: 16
1197
1287
  },
1198
1288
  end: {
1199
- line: 255,
1289
+ line: 274,
1200
1290
  column: 103
1201
1291
  }
1202
1292
  },
1203
- "119": {
1293
+ "128": {
1204
1294
  start: {
1205
- line: 256,
1295
+ line: 275,
1206
1296
  column: 16
1207
1297
  },
1208
1298
  end: {
1209
- line: 256,
1299
+ line: 275,
1210
1300
  column: 22
1211
1301
  }
1212
1302
  },
1213
- "120": {
1303
+ "129": {
1214
1304
  start: {
1215
- line: 259,
1305
+ line: 278,
1216
1306
  column: 16
1217
1307
  },
1218
1308
  end: {
1219
- line: 268,
1309
+ line: 287,
1220
1310
  column: 30
1221
1311
  }
1222
1312
  },
1223
- "121": {
1313
+ "130": {
1224
1314
  start: {
1225
- line: 273,
1315
+ line: 292,
1226
1316
  column: 0
1227
1317
  },
1228
1318
  end: {
1229
- line: 273,
1319
+ line: 292,
1230
1320
  column: 56
1231
1321
  }
1232
1322
  }
@@ -1308,385 +1398,385 @@ function cov_ms2xfswbr() {
1308
1398
  name: "(anonymous_3)",
1309
1399
  decl: {
1310
1400
  start: {
1311
- line: 25,
1401
+ line: 27,
1312
1402
  column: 4
1313
1403
  },
1314
1404
  end: {
1315
- line: 25,
1405
+ line: 27,
1316
1406
  column: 5
1317
1407
  }
1318
1408
  },
1319
1409
  loc: {
1320
1410
  start: {
1321
- line: 25,
1411
+ line: 27,
1322
1412
  column: 38
1323
1413
  },
1324
1414
  end: {
1325
- line: 37,
1415
+ line: 40,
1326
1416
  column: 5
1327
1417
  }
1328
1418
  },
1329
- line: 25
1419
+ line: 27
1330
1420
  },
1331
1421
  "4": {
1332
1422
  name: "(anonymous_4)",
1333
1423
  decl: {
1334
1424
  start: {
1335
- line: 38,
1425
+ line: 41,
1336
1426
  column: 4
1337
1427
  },
1338
1428
  end: {
1339
- line: 38,
1429
+ line: 41,
1340
1430
  column: 5
1341
1431
  }
1342
1432
  },
1343
1433
  loc: {
1344
1434
  start: {
1345
- line: 38,
1435
+ line: 41,
1346
1436
  column: 30
1347
1437
  },
1348
1438
  end: {
1349
- line: 41,
1439
+ line: 44,
1350
1440
  column: 5
1351
1441
  }
1352
1442
  },
1353
- line: 38
1443
+ line: 41
1354
1444
  },
1355
1445
  "5": {
1356
1446
  name: "(anonymous_5)",
1357
1447
  decl: {
1358
1448
  start: {
1359
- line: 42,
1449
+ line: 45,
1360
1450
  column: 4
1361
1451
  },
1362
1452
  end: {
1363
- line: 42,
1453
+ line: 45,
1364
1454
  column: 5
1365
1455
  }
1366
1456
  },
1367
1457
  loc: {
1368
1458
  start: {
1369
- line: 42,
1459
+ line: 45,
1370
1460
  column: 61
1371
1461
  },
1372
1462
  end: {
1373
- line: 58,
1463
+ line: 62,
1374
1464
  column: 5
1375
1465
  }
1376
1466
  },
1377
- line: 42
1467
+ line: 45
1378
1468
  },
1379
1469
  "6": {
1380
1470
  name: "(anonymous_6)",
1381
1471
  decl: {
1382
1472
  start: {
1383
- line: 59,
1473
+ line: 63,
1384
1474
  column: 4
1385
1475
  },
1386
1476
  end: {
1387
- line: 59,
1477
+ line: 63,
1388
1478
  column: 5
1389
1479
  }
1390
1480
  },
1391
1481
  loc: {
1392
1482
  start: {
1393
- line: 59,
1483
+ line: 63,
1394
1484
  column: 71
1395
1485
  },
1396
1486
  end: {
1397
- line: 80,
1487
+ line: 85,
1398
1488
  column: 5
1399
1489
  }
1400
1490
  },
1401
- line: 59
1491
+ line: 63
1402
1492
  },
1403
1493
  "7": {
1404
1494
  name: "(anonymous_7)",
1405
1495
  decl: {
1406
1496
  start: {
1407
- line: 81,
1497
+ line: 86,
1408
1498
  column: 4
1409
1499
  },
1410
1500
  end: {
1411
- line: 81,
1501
+ line: 86,
1412
1502
  column: 5
1413
1503
  }
1414
1504
  },
1415
1505
  loc: {
1416
1506
  start: {
1417
- line: 81,
1507
+ line: 86,
1418
1508
  column: 60
1419
1509
  },
1420
1510
  end: {
1421
- line: 90,
1511
+ line: 95,
1422
1512
  column: 5
1423
1513
  }
1424
1514
  },
1425
- line: 81
1515
+ line: 86
1426
1516
  },
1427
1517
  "8": {
1428
1518
  name: "(anonymous_8)",
1429
1519
  decl: {
1430
1520
  start: {
1431
- line: 84,
1521
+ line: 89,
1432
1522
  column: 11
1433
1523
  },
1434
1524
  end: {
1435
- line: 84,
1525
+ line: 89,
1436
1526
  column: 12
1437
1527
  }
1438
1528
  },
1439
1529
  loc: {
1440
1530
  start: {
1441
- line: 84,
1531
+ line: 89,
1442
1532
  column: 39
1443
1533
  },
1444
1534
  end: {
1445
- line: 89,
1535
+ line: 94,
1446
1536
  column: 9
1447
1537
  }
1448
1538
  },
1449
- line: 84
1539
+ line: 89
1450
1540
  },
1451
1541
  "9": {
1452
1542
  name: "(anonymous_9)",
1453
1543
  decl: {
1454
1544
  start: {
1455
- line: 91,
1545
+ line: 96,
1456
1546
  column: 4
1457
1547
  },
1458
1548
  end: {
1459
- line: 91,
1549
+ line: 96,
1460
1550
  column: 5
1461
1551
  }
1462
1552
  },
1463
1553
  loc: {
1464
1554
  start: {
1465
- line: 91,
1555
+ line: 96,
1466
1556
  column: 59
1467
1557
  },
1468
1558
  end: {
1469
- line: 109,
1559
+ line: 114,
1470
1560
  column: 5
1471
1561
  }
1472
1562
  },
1473
- line: 91
1563
+ line: 96
1474
1564
  },
1475
1565
  "10": {
1476
1566
  name: "(anonymous_10)",
1477
1567
  decl: {
1478
1568
  start: {
1479
- line: 110,
1569
+ line: 115,
1480
1570
  column: 4
1481
1571
  },
1482
1572
  end: {
1483
- line: 110,
1573
+ line: 115,
1484
1574
  column: 5
1485
1575
  }
1486
1576
  },
1487
1577
  loc: {
1488
1578
  start: {
1489
- line: 110,
1579
+ line: 115,
1490
1580
  column: 49
1491
1581
  },
1492
1582
  end: {
1493
- line: 117,
1583
+ line: 122,
1494
1584
  column: 5
1495
1585
  }
1496
1586
  },
1497
- line: 110
1587
+ line: 115
1498
1588
  },
1499
1589
  "11": {
1500
1590
  name: "(anonymous_11)",
1501
1591
  decl: {
1502
1592
  start: {
1503
- line: 113,
1593
+ line: 118,
1504
1594
  column: 11
1505
1595
  },
1506
1596
  end: {
1507
- line: 113,
1597
+ line: 118,
1508
1598
  column: 12
1509
1599
  }
1510
1600
  },
1511
1601
  loc: {
1512
1602
  start: {
1513
- line: 113,
1603
+ line: 118,
1514
1604
  column: 39
1515
1605
  },
1516
1606
  end: {
1517
- line: 116,
1607
+ line: 121,
1518
1608
  column: 9
1519
1609
  }
1520
1610
  },
1521
- line: 113
1611
+ line: 118
1522
1612
  },
1523
1613
  "12": {
1524
1614
  name: "(anonymous_12)",
1525
1615
  decl: {
1526
1616
  start: {
1527
- line: 118,
1617
+ line: 123,
1528
1618
  column: 4
1529
1619
  },
1530
1620
  end: {
1531
- line: 118,
1621
+ line: 123,
1532
1622
  column: 5
1533
1623
  }
1534
1624
  },
1535
1625
  loc: {
1536
1626
  start: {
1537
- line: 118,
1627
+ line: 123,
1538
1628
  column: 29
1539
1629
  },
1540
1630
  end: {
1541
- line: 127,
1631
+ line: 132,
1542
1632
  column: 5
1543
1633
  }
1544
1634
  },
1545
- line: 118
1635
+ line: 123
1546
1636
  },
1547
1637
  "13": {
1548
1638
  name: "(anonymous_13)",
1549
1639
  decl: {
1550
1640
  start: {
1551
- line: 128,
1641
+ line: 133,
1552
1642
  column: 4
1553
1643
  },
1554
1644
  end: {
1555
- line: 128,
1645
+ line: 133,
1556
1646
  column: 5
1557
1647
  }
1558
1648
  },
1559
1649
  loc: {
1560
1650
  start: {
1561
- line: 128,
1651
+ line: 133,
1562
1652
  column: 25
1563
1653
  },
1564
1654
  end: {
1565
- line: 163,
1655
+ line: 182,
1566
1656
  column: 5
1567
1657
  }
1568
1658
  },
1569
- line: 128
1659
+ line: 133
1570
1660
  },
1571
1661
  "14": {
1572
1662
  name: "(anonymous_14)",
1573
1663
  decl: {
1574
1664
  start: {
1575
- line: 164,
1665
+ line: 183,
1576
1666
  column: 4
1577
1667
  },
1578
1668
  end: {
1579
- line: 164,
1669
+ line: 183,
1580
1670
  column: 5
1581
1671
  }
1582
1672
  },
1583
1673
  loc: {
1584
1674
  start: {
1585
- line: 164,
1675
+ line: 183,
1586
1676
  column: 38
1587
1677
  },
1588
1678
  end: {
1589
- line: 184,
1679
+ line: 203,
1590
1680
  column: 5
1591
1681
  }
1592
1682
  },
1593
- line: 164
1683
+ line: 183
1594
1684
  },
1595
1685
  "15": {
1596
1686
  name: "(anonymous_15)",
1597
1687
  decl: {
1598
1688
  start: {
1599
- line: 185,
1689
+ line: 204,
1600
1690
  column: 4
1601
1691
  },
1602
1692
  end: {
1603
- line: 185,
1693
+ line: 204,
1604
1694
  column: 5
1605
1695
  }
1606
1696
  },
1607
1697
  loc: {
1608
1698
  start: {
1609
- line: 185,
1699
+ line: 204,
1610
1700
  column: 40
1611
1701
  },
1612
1702
  end: {
1613
- line: 199,
1703
+ line: 218,
1614
1704
  column: 5
1615
1705
  }
1616
1706
  },
1617
- line: 185
1707
+ line: 204
1618
1708
  },
1619
1709
  "16": {
1620
1710
  name: "(anonymous_16)",
1621
1711
  decl: {
1622
1712
  start: {
1623
- line: 190,
1713
+ line: 209,
1624
1714
  column: 11
1625
1715
  },
1626
1716
  end: {
1627
- line: 190,
1717
+ line: 209,
1628
1718
  column: 12
1629
1719
  }
1630
1720
  },
1631
1721
  loc: {
1632
1722
  start: {
1633
- line: 190,
1723
+ line: 209,
1634
1724
  column: 33
1635
1725
  },
1636
1726
  end: {
1637
- line: 192,
1727
+ line: 211,
1638
1728
  column: 9
1639
1729
  }
1640
1730
  },
1641
- line: 190
1731
+ line: 209
1642
1732
  },
1643
1733
  "17": {
1644
1734
  name: "(anonymous_17)",
1645
1735
  decl: {
1646
1736
  start: {
1647
- line: 200,
1737
+ line: 219,
1648
1738
  column: 4
1649
1739
  },
1650
1740
  end: {
1651
- line: 200,
1741
+ line: 219,
1652
1742
  column: 5
1653
1743
  }
1654
1744
  },
1655
1745
  loc: {
1656
1746
  start: {
1657
- line: 200,
1747
+ line: 219,
1658
1748
  column: 57
1659
1749
  },
1660
1750
  end: {
1661
- line: 239,
1751
+ line: 258,
1662
1752
  column: 5
1663
1753
  }
1664
1754
  },
1665
- line: 200
1755
+ line: 219
1666
1756
  },
1667
1757
  "18": {
1668
1758
  name: "(anonymous_18)",
1669
1759
  decl: {
1670
1760
  start: {
1671
- line: 240,
1761
+ line: 259,
1672
1762
  column: 4
1673
1763
  },
1674
1764
  end: {
1675
- line: 240,
1765
+ line: 259,
1676
1766
  column: 5
1677
1767
  }
1678
1768
  },
1679
1769
  loc: {
1680
1770
  start: {
1681
- line: 240,
1771
+ line: 259,
1682
1772
  column: 75
1683
1773
  },
1684
1774
  end: {
1685
- line: 271,
1775
+ line: 290,
1686
1776
  column: 5
1687
1777
  }
1688
1778
  },
1689
- line: 240
1779
+ line: 259
1690
1780
  }
1691
1781
  },
1692
1782
  branchMap: {
@@ -1867,352 +1957,418 @@ function cov_ms2xfswbr() {
1867
1957
  "5": {
1868
1958
  loc: {
1869
1959
  start: {
1870
- line: 32,
1960
+ line: 34,
1871
1961
  column: 28
1872
1962
  },
1873
1963
  end: {
1874
- line: 32,
1964
+ line: 34,
1875
1965
  column: 87
1876
1966
  }
1877
1967
  },
1878
1968
  type: "cond-expr",
1879
1969
  locations: [{
1880
1970
  start: {
1881
- line: 32,
1971
+ line: 34,
1882
1972
  column: 56
1883
1973
  },
1884
1974
  end: {
1885
- line: 32,
1975
+ line: 34,
1886
1976
  column: 67
1887
1977
  }
1888
1978
  }, {
1889
1979
  start: {
1890
- line: 32,
1980
+ line: 34,
1891
1981
  column: 70
1892
1982
  },
1893
1983
  end: {
1894
- line: 32,
1984
+ line: 34,
1895
1985
  column: 87
1896
1986
  }
1897
1987
  }],
1898
- line: 32
1988
+ line: 34
1899
1989
  },
1900
1990
  "6": {
1901
1991
  loc: {
1902
1992
  start: {
1903
- line: 33,
1993
+ line: 35,
1904
1994
  column: 29
1905
1995
  },
1906
1996
  end: {
1907
- line: 33,
1997
+ line: 35,
1908
1998
  column: 95
1909
1999
  }
1910
2000
  },
1911
2001
  type: "cond-expr",
1912
2002
  locations: [{
1913
2003
  start: {
1914
- line: 33,
2004
+ line: 35,
1915
2005
  column: 85
1916
2006
  },
1917
2007
  end: {
1918
- line: 33,
2008
+ line: 35,
1919
2009
  column: 87
1920
2010
  }
1921
2011
  }, {
1922
2012
  start: {
1923
- line: 33,
2013
+ line: 35,
1924
2014
  column: 90
1925
2015
  },
1926
2016
  end: {
1927
- line: 33,
2017
+ line: 35,
1928
2018
  column: 95
1929
2019
  }
1930
2020
  }],
1931
- line: 33
2021
+ line: 35
1932
2022
  },
1933
2023
  "7": {
1934
2024
  loc: {
1935
2025
  start: {
1936
- line: 33,
2026
+ line: 35,
1937
2027
  column: 29
1938
2028
  },
1939
2029
  end: {
1940
- line: 33,
2030
+ line: 35,
1941
2031
  column: 82
1942
2032
  }
1943
2033
  },
1944
2034
  type: "binary-expr",
1945
2035
  locations: [{
1946
2036
  start: {
1947
- line: 33,
2037
+ line: 35,
1948
2038
  column: 29
1949
2039
  },
1950
2040
  end: {
1951
- line: 33,
2041
+ line: 35,
1952
2042
  column: 65
1953
2043
  }
1954
2044
  }, {
1955
2045
  start: {
1956
- line: 33,
2046
+ line: 35,
1957
2047
  column: 69
1958
2048
  },
1959
2049
  end: {
1960
- line: 33,
2050
+ line: 35,
1961
2051
  column: 82
1962
2052
  }
1963
2053
  }],
1964
- line: 33
2054
+ line: 35
1965
2055
  },
1966
2056
  "8": {
1967
2057
  loc: {
1968
2058
  start: {
1969
- line: 34,
2059
+ line: 36,
1970
2060
  column: 24
1971
2061
  },
1972
2062
  end: {
1973
- line: 34,
2063
+ line: 36,
1974
2064
  column: 82
1975
2065
  }
1976
2066
  },
1977
2067
  type: "cond-expr",
1978
2068
  locations: [{
1979
2069
  start: {
1980
- line: 34,
2070
+ line: 36,
1981
2071
  column: 75
1982
2072
  },
1983
2073
  end: {
1984
- line: 34,
2074
+ line: 36,
1985
2075
  column: 77
1986
2076
  }
1987
2077
  }, {
1988
2078
  start: {
1989
- line: 34,
2079
+ line: 36,
1990
2080
  column: 80
1991
2081
  },
1992
2082
  end: {
1993
- line: 34,
2083
+ line: 36,
1994
2084
  column: 82
1995
2085
  }
1996
2086
  }],
1997
- line: 34
2087
+ line: 36
1998
2088
  },
1999
2089
  "9": {
2000
2090
  loc: {
2001
2091
  start: {
2002
- line: 34,
2092
+ line: 36,
2003
2093
  column: 24
2004
2094
  },
2005
2095
  end: {
2006
- line: 34,
2096
+ line: 36,
2007
2097
  column: 72
2008
2098
  }
2009
2099
  },
2010
2100
  type: "binary-expr",
2011
2101
  locations: [{
2012
2102
  start: {
2013
- line: 34,
2103
+ line: 36,
2014
2104
  column: 24
2015
2105
  },
2016
2106
  end: {
2017
- line: 34,
2107
+ line: 36,
2018
2108
  column: 55
2019
2109
  }
2020
2110
  }, {
2021
2111
  start: {
2022
- line: 34,
2112
+ line: 36,
2023
2113
  column: 59
2024
2114
  },
2025
2115
  end: {
2026
- line: 34,
2116
+ line: 36,
2027
2117
  column: 72
2028
2118
  }
2029
2119
  }],
2030
- line: 34
2120
+ line: 36
2031
2121
  },
2032
2122
  "10": {
2033
2123
  loc: {
2034
2124
  start: {
2035
- line: 36,
2125
+ line: 38,
2036
2126
  column: 31
2037
2127
  },
2038
2128
  end: {
2039
- line: 36,
2129
+ line: 38,
2040
2130
  column: 96
2041
2131
  }
2042
2132
  },
2043
2133
  type: "cond-expr",
2044
2134
  locations: [{
2045
2135
  start: {
2046
- line: 36,
2136
+ line: 38,
2047
2137
  column: 89
2048
2138
  },
2049
2139
  end: {
2050
- line: 36,
2140
+ line: 38,
2051
2141
  column: 91
2052
2142
  }
2053
2143
  }, {
2054
2144
  start: {
2055
- line: 36,
2145
+ line: 38,
2056
2146
  column: 94
2057
2147
  },
2058
2148
  end: {
2059
- line: 36,
2149
+ line: 38,
2060
2150
  column: 96
2061
2151
  }
2062
2152
  }],
2063
- line: 36
2153
+ line: 38
2064
2154
  },
2065
2155
  "11": {
2066
2156
  loc: {
2067
2157
  start: {
2068
- line: 36,
2158
+ line: 38,
2069
2159
  column: 31
2070
2160
  },
2071
2161
  end: {
2072
- line: 36,
2162
+ line: 38,
2073
2163
  column: 86
2074
2164
  }
2075
2165
  },
2076
2166
  type: "binary-expr",
2077
2167
  locations: [{
2078
2168
  start: {
2079
- line: 36,
2169
+ line: 38,
2080
2170
  column: 31
2081
2171
  },
2082
2172
  end: {
2083
- line: 36,
2173
+ line: 38,
2084
2174
  column: 69
2085
2175
  }
2086
2176
  }, {
2087
2177
  start: {
2088
- line: 36,
2178
+ line: 38,
2089
2179
  column: 73
2090
2180
  },
2091
2181
  end: {
2092
- line: 36,
2182
+ line: 38,
2093
2183
  column: 86
2094
2184
  }
2095
2185
  }],
2096
- line: 36
2186
+ line: 38
2097
2187
  },
2098
2188
  "12": {
2099
2189
  loc: {
2100
2190
  start: {
2101
- line: 40,
2191
+ line: 39,
2192
+ column: 36
2193
+ },
2194
+ end: {
2195
+ line: 39,
2196
+ column: 135
2197
+ }
2198
+ },
2199
+ type: "cond-expr",
2200
+ locations: [{
2201
+ start: {
2202
+ line: 39,
2203
+ column: 99
2204
+ },
2205
+ end: {
2206
+ line: 39,
2207
+ column: 101
2208
+ }
2209
+ }, {
2210
+ start: {
2211
+ line: 39,
2212
+ column: 104
2213
+ },
2214
+ end: {
2215
+ line: 39,
2216
+ column: 135
2217
+ }
2218
+ }],
2219
+ line: 39
2220
+ },
2221
+ "13": {
2222
+ loc: {
2223
+ start: {
2224
+ line: 39,
2225
+ column: 36
2226
+ },
2227
+ end: {
2228
+ line: 39,
2229
+ column: 96
2230
+ }
2231
+ },
2232
+ type: "binary-expr",
2233
+ locations: [{
2234
+ start: {
2235
+ line: 39,
2236
+ column: 36
2237
+ },
2238
+ end: {
2239
+ line: 39,
2240
+ column: 79
2241
+ }
2242
+ }, {
2243
+ start: {
2244
+ line: 39,
2245
+ column: 83
2246
+ },
2247
+ end: {
2248
+ line: 39,
2249
+ column: 96
2250
+ }
2251
+ }],
2252
+ line: 39
2253
+ },
2254
+ "14": {
2255
+ loc: {
2256
+ start: {
2257
+ line: 43,
2102
2258
  column: 15
2103
2259
  },
2104
2260
  end: {
2105
- line: 40,
2261
+ line: 43,
2106
2262
  column: 154
2107
2263
  }
2108
2264
  },
2109
2265
  type: "cond-expr",
2110
2266
  locations: [{
2111
2267
  start: {
2112
- line: 40,
2268
+ line: 43,
2113
2269
  column: 109
2114
2270
  },
2115
2271
  end: {
2116
- line: 40,
2272
+ line: 43,
2117
2273
  column: 111
2118
2274
  }
2119
2275
  }, {
2120
2276
  start: {
2121
- line: 40,
2277
+ line: 43,
2122
2278
  column: 114
2123
2279
  },
2124
2280
  end: {
2125
- line: 40,
2281
+ line: 43,
2126
2282
  column: 154
2127
2283
  }
2128
2284
  }],
2129
- line: 40
2285
+ line: 43
2130
2286
  },
2131
- "13": {
2287
+ "15": {
2132
2288
  loc: {
2133
2289
  start: {
2134
- line: 40,
2290
+ line: 43,
2135
2291
  column: 15
2136
2292
  },
2137
2293
  end: {
2138
- line: 40,
2294
+ line: 43,
2139
2295
  column: 106
2140
2296
  }
2141
2297
  },
2142
2298
  type: "binary-expr",
2143
2299
  locations: [{
2144
2300
  start: {
2145
- line: 40,
2301
+ line: 43,
2146
2302
  column: 15
2147
2303
  },
2148
2304
  end: {
2149
- line: 40,
2305
+ line: 43,
2150
2306
  column: 89
2151
2307
  }
2152
2308
  }, {
2153
2309
  start: {
2154
- line: 40,
2310
+ line: 43,
2155
2311
  column: 93
2156
2312
  },
2157
2313
  end: {
2158
- line: 40,
2314
+ line: 43,
2159
2315
  column: 106
2160
2316
  }
2161
2317
  }],
2162
- line: 40
2318
+ line: 43
2163
2319
  },
2164
- "14": {
2320
+ "16": {
2165
2321
  loc: {
2166
2322
  start: {
2167
- line: 52,
2323
+ line: 56,
2168
2324
  column: 19
2169
2325
  },
2170
2326
  end: {
2171
- line: 52,
2327
+ line: 56,
2172
2328
  column: 63
2173
2329
  }
2174
2330
  },
2175
2331
  type: "cond-expr",
2176
2332
  locations: [{
2177
2333
  start: {
2178
- line: 52,
2334
+ line: 56,
2179
2335
  column: 45
2180
2336
  },
2181
2337
  end: {
2182
- line: 52,
2338
+ line: 56,
2183
2339
  column: 51
2184
2340
  }
2185
2341
  }, {
2186
2342
  start: {
2187
- line: 52,
2343
+ line: 56,
2188
2344
  column: 54
2189
2345
  },
2190
2346
  end: {
2191
- line: 52,
2347
+ line: 56,
2192
2348
  column: 63
2193
2349
  }
2194
2350
  }],
2195
- line: 52
2351
+ line: 56
2196
2352
  },
2197
- "15": {
2353
+ "17": {
2198
2354
  loc: {
2199
2355
  start: {
2200
- line: 60,
2356
+ line: 64,
2201
2357
  column: 8
2202
2358
  },
2203
2359
  end: {
2204
- line: 63,
2360
+ line: 67,
2205
2361
  column: 9
2206
2362
  }
2207
2363
  },
2208
2364
  type: "if",
2209
2365
  locations: [{
2210
2366
  start: {
2211
- line: 60,
2367
+ line: 64,
2212
2368
  column: 8
2213
2369
  },
2214
2370
  end: {
2215
- line: 63,
2371
+ line: 67,
2216
2372
  column: 9
2217
2373
  }
2218
2374
  }, {
@@ -2225,27 +2381,27 @@ function cov_ms2xfswbr() {
2225
2381
  column: undefined
2226
2382
  }
2227
2383
  }],
2228
- line: 60
2384
+ line: 64
2229
2385
  },
2230
- "16": {
2386
+ "18": {
2231
2387
  loc: {
2232
2388
  start: {
2233
- line: 92,
2389
+ line: 97,
2234
2390
  column: 8
2235
2391
  },
2236
2392
  end: {
2237
- line: 97,
2393
+ line: 102,
2238
2394
  column: 9
2239
2395
  }
2240
2396
  },
2241
2397
  type: "if",
2242
2398
  locations: [{
2243
2399
  start: {
2244
- line: 92,
2400
+ line: 97,
2245
2401
  column: 8
2246
2402
  },
2247
2403
  end: {
2248
- line: 97,
2404
+ line: 102,
2249
2405
  column: 9
2250
2406
  }
2251
2407
  }, {
@@ -2258,93 +2414,93 @@ function cov_ms2xfswbr() {
2258
2414
  column: undefined
2259
2415
  }
2260
2416
  }],
2261
- line: 92
2417
+ line: 97
2262
2418
  },
2263
- "17": {
2419
+ "19": {
2264
2420
  loc: {
2265
2421
  start: {
2266
- line: 98,
2422
+ line: 103,
2267
2423
  column: 51
2268
2424
  },
2269
2425
  end: {
2270
- line: 98,
2426
+ line: 103,
2271
2427
  column: 80
2272
2428
  }
2273
2429
  },
2274
2430
  type: "binary-expr",
2275
2431
  locations: [{
2276
2432
  start: {
2277
- line: 98,
2433
+ line: 103,
2278
2434
  column: 51
2279
2435
  },
2280
2436
  end: {
2281
- line: 98,
2437
+ line: 103,
2282
2438
  column: 74
2283
2439
  }
2284
2440
  }, {
2285
2441
  start: {
2286
- line: 98,
2442
+ line: 103,
2287
2443
  column: 78
2288
2444
  },
2289
2445
  end: {
2290
- line: 98,
2446
+ line: 103,
2291
2447
  column: 80
2292
2448
  }
2293
2449
  }],
2294
- line: 98
2450
+ line: 103
2295
2451
  },
2296
- "18": {
2452
+ "20": {
2297
2453
  loc: {
2298
2454
  start: {
2299
- line: 100,
2455
+ line: 105,
2300
2456
  column: 89
2301
2457
  },
2302
2458
  end: {
2303
- line: 100,
2459
+ line: 105,
2304
2460
  column: 118
2305
2461
  }
2306
2462
  },
2307
2463
  type: "binary-expr",
2308
2464
  locations: [{
2309
2465
  start: {
2310
- line: 100,
2466
+ line: 105,
2311
2467
  column: 89
2312
2468
  },
2313
2469
  end: {
2314
- line: 100,
2470
+ line: 105,
2315
2471
  column: 112
2316
2472
  }
2317
2473
  }, {
2318
2474
  start: {
2319
- line: 100,
2475
+ line: 105,
2320
2476
  column: 116
2321
2477
  },
2322
2478
  end: {
2323
- line: 100,
2479
+ line: 105,
2324
2480
  column: 118
2325
2481
  }
2326
2482
  }],
2327
- line: 100
2483
+ line: 105
2328
2484
  },
2329
- "19": {
2485
+ "21": {
2330
2486
  loc: {
2331
2487
  start: {
2332
- line: 102,
2488
+ line: 107,
2333
2489
  column: 8
2334
2490
  },
2335
2491
  end: {
2336
- line: 104,
2492
+ line: 109,
2337
2493
  column: 9
2338
2494
  }
2339
2495
  },
2340
2496
  type: "if",
2341
2497
  locations: [{
2342
2498
  start: {
2343
- line: 102,
2499
+ line: 107,
2344
2500
  column: 8
2345
2501
  },
2346
2502
  end: {
2347
- line: 104,
2503
+ line: 109,
2348
2504
  column: 9
2349
2505
  }
2350
2506
  }, {
@@ -2357,27 +2513,27 @@ function cov_ms2xfswbr() {
2357
2513
  column: undefined
2358
2514
  }
2359
2515
  }],
2360
- line: 102
2516
+ line: 107
2361
2517
  },
2362
- "20": {
2518
+ "22": {
2363
2519
  loc: {
2364
2520
  start: {
2365
- line: 119,
2521
+ line: 124,
2366
2522
  column: 8
2367
2523
  },
2368
2524
  end: {
2369
- line: 125,
2525
+ line: 130,
2370
2526
  column: 9
2371
2527
  }
2372
2528
  },
2373
2529
  type: "if",
2374
2530
  locations: [{
2375
2531
  start: {
2376
- line: 119,
2532
+ line: 124,
2377
2533
  column: 8
2378
2534
  },
2379
2535
  end: {
2380
- line: 125,
2536
+ line: 130,
2381
2537
  column: 9
2382
2538
  }
2383
2539
  }, {
@@ -2390,27 +2546,27 @@ function cov_ms2xfswbr() {
2390
2546
  column: undefined
2391
2547
  }
2392
2548
  }],
2393
- line: 119
2549
+ line: 124
2394
2550
  },
2395
- "21": {
2551
+ "23": {
2396
2552
  loc: {
2397
2553
  start: {
2398
- line: 121,
2554
+ line: 126,
2399
2555
  column: 12
2400
2556
  },
2401
2557
  end: {
2402
- line: 123,
2558
+ line: 128,
2403
2559
  column: 13
2404
2560
  }
2405
2561
  },
2406
2562
  type: "if",
2407
2563
  locations: [{
2408
2564
  start: {
2409
- line: 121,
2565
+ line: 126,
2410
2566
  column: 12
2411
2567
  },
2412
2568
  end: {
2413
- line: 123,
2569
+ line: 128,
2414
2570
  column: 13
2415
2571
  }
2416
2572
  }, {
@@ -2423,93 +2579,93 @@ function cov_ms2xfswbr() {
2423
2579
  column: undefined
2424
2580
  }
2425
2581
  }],
2426
- line: 121
2582
+ line: 126
2427
2583
  },
2428
- "22": {
2584
+ "24": {
2429
2585
  loc: {
2430
2586
  start: {
2431
- line: 130,
2587
+ line: 135,
2432
2588
  column: 38
2433
2589
  },
2434
2590
  end: {
2435
- line: 130,
2591
+ line: 135,
2436
2592
  column: 146
2437
2593
  }
2438
2594
  },
2439
2595
  type: "cond-expr",
2440
2596
  locations: [{
2441
2597
  start: {
2442
- line: 130,
2598
+ line: 135,
2443
2599
  column: 99
2444
2600
  },
2445
2601
  end: {
2446
- line: 130,
2602
+ line: 135,
2447
2603
  column: 116
2448
2604
  }
2449
2605
  }, {
2450
2606
  start: {
2451
- line: 130,
2607
+ line: 135,
2452
2608
  column: 119
2453
2609
  },
2454
2610
  end: {
2455
- line: 130,
2611
+ line: 135,
2456
2612
  column: 146
2457
2613
  }
2458
2614
  }],
2459
- line: 130
2615
+ line: 135
2460
2616
  },
2461
- "23": {
2617
+ "25": {
2462
2618
  loc: {
2463
2619
  start: {
2464
- line: 130,
2620
+ line: 135,
2465
2621
  column: 38
2466
2622
  },
2467
2623
  end: {
2468
- line: 130,
2624
+ line: 135,
2469
2625
  column: 96
2470
2626
  }
2471
2627
  },
2472
2628
  type: "binary-expr",
2473
2629
  locations: [{
2474
2630
  start: {
2475
- line: 130,
2631
+ line: 135,
2476
2632
  column: 38
2477
2633
  },
2478
2634
  end: {
2479
- line: 130,
2635
+ line: 135,
2480
2636
  column: 64
2481
2637
  }
2482
2638
  }, {
2483
2639
  start: {
2484
- line: 130,
2640
+ line: 135,
2485
2641
  column: 68
2486
2642
  },
2487
2643
  end: {
2488
- line: 130,
2644
+ line: 135,
2489
2645
  column: 96
2490
2646
  }
2491
2647
  }],
2492
- line: 130
2648
+ line: 135
2493
2649
  },
2494
- "24": {
2650
+ "26": {
2495
2651
  loc: {
2496
2652
  start: {
2497
- line: 134,
2653
+ line: 139,
2498
2654
  column: 8
2499
2655
  },
2500
2656
  end: {
2501
- line: 136,
2657
+ line: 141,
2502
2658
  column: 9
2503
2659
  }
2504
2660
  },
2505
2661
  type: "if",
2506
2662
  locations: [{
2507
2663
  start: {
2508
- line: 134,
2664
+ line: 139,
2509
2665
  column: 8
2510
2666
  },
2511
2667
  end: {
2512
- line: 136,
2668
+ line: 141,
2513
2669
  column: 9
2514
2670
  }
2515
2671
  }, {
@@ -2522,27 +2678,27 @@ function cov_ms2xfswbr() {
2522
2678
  column: undefined
2523
2679
  }
2524
2680
  }],
2525
- line: 134
2681
+ line: 139
2526
2682
  },
2527
- "25": {
2683
+ "27": {
2528
2684
  loc: {
2529
2685
  start: {
2530
- line: 138,
2686
+ line: 143,
2531
2687
  column: 12
2532
2688
  },
2533
2689
  end: {
2534
- line: 140,
2690
+ line: 145,
2535
2691
  column: 13
2536
2692
  }
2537
2693
  },
2538
2694
  type: "if",
2539
2695
  locations: [{
2540
2696
  start: {
2541
- line: 138,
2697
+ line: 143,
2542
2698
  column: 12
2543
2699
  },
2544
2700
  end: {
2545
- line: 140,
2701
+ line: 145,
2546
2702
  column: 13
2547
2703
  }
2548
2704
  }, {
@@ -2555,126 +2711,126 @@ function cov_ms2xfswbr() {
2555
2711
  column: undefined
2556
2712
  }
2557
2713
  }],
2558
- line: 138
2714
+ line: 143
2559
2715
  },
2560
- "26": {
2716
+ "28": {
2561
2717
  loc: {
2562
2718
  start: {
2563
- line: 142,
2719
+ line: 147,
2564
2720
  column: 27
2565
2721
  },
2566
2722
  end: {
2567
- line: 142,
2723
+ line: 147,
2568
2724
  column: 97
2569
2725
  }
2570
2726
  },
2571
2727
  type: "binary-expr",
2572
2728
  locations: [{
2573
2729
  start: {
2574
- line: 142,
2730
+ line: 147,
2575
2731
  column: 28
2576
2732
  },
2577
2733
  end: {
2578
- line: 142,
2734
+ line: 147,
2579
2735
  column: 83
2580
2736
  }
2581
2737
  }, {
2582
2738
  start: {
2583
- line: 142,
2739
+ line: 147,
2584
2740
  column: 88
2585
2741
  },
2586
2742
  end: {
2587
- line: 142,
2743
+ line: 147,
2588
2744
  column: 97
2589
2745
  }
2590
2746
  }],
2591
- line: 142
2747
+ line: 147
2592
2748
  },
2593
- "27": {
2749
+ "29": {
2594
2750
  loc: {
2595
2751
  start: {
2596
- line: 142,
2752
+ line: 147,
2597
2753
  column: 28
2598
2754
  },
2599
2755
  end: {
2600
- line: 142,
2756
+ line: 147,
2601
2757
  column: 83
2602
2758
  }
2603
2759
  },
2604
2760
  type: "cond-expr",
2605
2761
  locations: [{
2606
2762
  start: {
2607
- line: 142,
2763
+ line: 147,
2608
2764
  column: 63
2609
2765
  },
2610
2766
  end: {
2611
- line: 142,
2767
+ line: 147,
2612
2768
  column: 69
2613
2769
  }
2614
2770
  }, {
2615
2771
  start: {
2616
- line: 142,
2772
+ line: 147,
2617
2773
  column: 72
2618
2774
  },
2619
2775
  end: {
2620
- line: 142,
2776
+ line: 147,
2621
2777
  column: 83
2622
2778
  }
2623
2779
  }],
2624
- line: 142
2780
+ line: 147
2625
2781
  },
2626
- "28": {
2782
+ "30": {
2627
2783
  loc: {
2628
2784
  start: {
2629
- line: 142,
2785
+ line: 147,
2630
2786
  column: 28
2631
2787
  },
2632
2788
  end: {
2633
- line: 142,
2789
+ line: 147,
2634
2790
  column: 60
2635
2791
  }
2636
2792
  },
2637
2793
  type: "binary-expr",
2638
2794
  locations: [{
2639
2795
  start: {
2640
- line: 142,
2796
+ line: 147,
2641
2797
  column: 28
2642
2798
  },
2643
2799
  end: {
2644
- line: 142,
2800
+ line: 147,
2645
2801
  column: 41
2646
2802
  }
2647
2803
  }, {
2648
2804
  start: {
2649
- line: 142,
2805
+ line: 147,
2650
2806
  column: 45
2651
2807
  },
2652
2808
  end: {
2653
- line: 142,
2809
+ line: 147,
2654
2810
  column: 60
2655
2811
  }
2656
2812
  }],
2657
- line: 142
2813
+ line: 147
2658
2814
  },
2659
- "29": {
2815
+ "31": {
2660
2816
  loc: {
2661
2817
  start: {
2662
- line: 150,
2818
+ line: 155,
2663
2819
  column: 8
2664
2820
  },
2665
2821
  end: {
2666
- line: 159,
2822
+ line: 178,
2667
2823
  column: 9
2668
2824
  }
2669
2825
  },
2670
2826
  type: "if",
2671
2827
  locations: [{
2672
2828
  start: {
2673
- line: 150,
2829
+ line: 155,
2674
2830
  column: 8
2675
2831
  },
2676
2832
  end: {
2677
- line: 159,
2833
+ line: 178,
2678
2834
  column: 9
2679
2835
  }
2680
2836
  }, {
@@ -2687,27 +2843,60 @@ function cov_ms2xfswbr() {
2687
2843
  column: undefined
2688
2844
  }
2689
2845
  }],
2690
- line: 150
2846
+ line: 155
2691
2847
  },
2692
- "30": {
2848
+ "32": {
2849
+ loc: {
2850
+ start: {
2851
+ line: 156,
2852
+ column: 44
2853
+ },
2854
+ end: {
2855
+ line: 156,
2856
+ column: 91
2857
+ }
2858
+ },
2859
+ type: "binary-expr",
2860
+ locations: [{
2861
+ start: {
2862
+ line: 156,
2863
+ column: 44
2864
+ },
2865
+ end: {
2866
+ line: 156,
2867
+ column: 66
2868
+ }
2869
+ }, {
2870
+ start: {
2871
+ line: 156,
2872
+ column: 70
2873
+ },
2874
+ end: {
2875
+ line: 156,
2876
+ column: 91
2877
+ }
2878
+ }],
2879
+ line: 156
2880
+ },
2881
+ "33": {
2693
2882
  loc: {
2694
2883
  start: {
2695
- line: 151,
2884
+ line: 157,
2696
2885
  column: 12
2697
2886
  },
2698
2887
  end: {
2699
- line: 156,
2888
+ line: 166,
2700
2889
  column: 13
2701
2890
  }
2702
2891
  },
2703
2892
  type: "if",
2704
2893
  locations: [{
2705
2894
  start: {
2706
- line: 151,
2895
+ line: 157,
2707
2896
  column: 12
2708
2897
  },
2709
2898
  end: {
2710
- line: 156,
2899
+ line: 166,
2711
2900
  column: 13
2712
2901
  }
2713
2902
  }, {
@@ -2720,126 +2909,168 @@ function cov_ms2xfswbr() {
2720
2909
  column: undefined
2721
2910
  }
2722
2911
  }],
2723
- line: 151
2912
+ line: 157
2724
2913
  },
2725
- "31": {
2914
+ "34": {
2726
2915
  loc: {
2727
2916
  start: {
2728
- line: 151,
2917
+ line: 157,
2729
2918
  column: 16
2730
2919
  },
2731
2920
  end: {
2732
- line: 151,
2733
- column: 104
2921
+ line: 159,
2922
+ column: 69
2734
2923
  }
2735
2924
  },
2736
2925
  type: "binary-expr",
2737
2926
  locations: [{
2738
2927
  start: {
2739
- line: 151,
2928
+ line: 157,
2929
+ column: 16
2930
+ },
2931
+ end: {
2932
+ line: 157,
2933
+ column: 40
2934
+ }
2935
+ }, {
2936
+ start: {
2937
+ line: 158,
2740
2938
  column: 16
2741
2939
  },
2742
2940
  end: {
2743
- line: 151,
2941
+ line: 158,
2744
2942
  column: 47
2745
2943
  }
2746
2944
  }, {
2747
2945
  start: {
2748
- line: 151,
2749
- column: 51
2946
+ line: 159,
2947
+ column: 16
2750
2948
  },
2751
2949
  end: {
2752
- line: 151,
2753
- column: 104
2950
+ line: 159,
2951
+ column: 69
2754
2952
  }
2755
2953
  }],
2756
- line: 151
2954
+ line: 157
2757
2955
  },
2758
- "32": {
2956
+ "35": {
2957
+ loc: {
2958
+ start: {
2959
+ line: 167,
2960
+ column: 12
2961
+ },
2962
+ end: {
2963
+ line: 175,
2964
+ column: 13
2965
+ }
2966
+ },
2967
+ type: "if",
2968
+ locations: [{
2969
+ start: {
2970
+ line: 167,
2971
+ column: 12
2972
+ },
2973
+ end: {
2974
+ line: 175,
2975
+ column: 13
2976
+ }
2977
+ }, {
2978
+ start: {
2979
+ line: undefined,
2980
+ column: undefined
2981
+ },
2982
+ end: {
2983
+ line: undefined,
2984
+ column: undefined
2985
+ }
2986
+ }],
2987
+ line: 167
2988
+ },
2989
+ "36": {
2759
2990
  loc: {
2760
2991
  start: {
2761
- line: 160,
2992
+ line: 179,
2762
2993
  column: 23
2763
2994
  },
2764
2995
  end: {
2765
- line: 160,
2996
+ line: 179,
2766
2997
  column: 82
2767
2998
  }
2768
2999
  },
2769
3000
  type: "cond-expr",
2770
3001
  locations: [{
2771
3002
  start: {
2772
- line: 160,
3003
+ line: 179,
2773
3004
  column: 34
2774
3005
  },
2775
3006
  end: {
2776
- line: 160,
3007
+ line: 179,
2777
3008
  column: 75
2778
3009
  }
2779
3010
  }, {
2780
3011
  start: {
2781
- line: 160,
3012
+ line: 179,
2782
3013
  column: 78
2783
3014
  },
2784
3015
  end: {
2785
- line: 160,
3016
+ line: 179,
2786
3017
  column: 82
2787
3018
  }
2788
3019
  }],
2789
- line: 160
3020
+ line: 179
2790
3021
  },
2791
- "33": {
3022
+ "37": {
2792
3023
  loc: {
2793
3024
  start: {
2794
- line: 161,
3025
+ line: 180,
2795
3026
  column: 97
2796
3027
  },
2797
3028
  end: {
2798
- line: 161,
3029
+ line: 180,
2799
3030
  column: 137
2800
3031
  }
2801
3032
  },
2802
3033
  type: "cond-expr",
2803
3034
  locations: [{
2804
3035
  start: {
2805
- line: 161,
3036
+ line: 180,
2806
3037
  column: 115
2807
3038
  },
2808
3039
  end: {
2809
- line: 161,
3040
+ line: 180,
2810
3041
  column: 121
2811
3042
  }
2812
3043
  }, {
2813
3044
  start: {
2814
- line: 161,
3045
+ line: 180,
2815
3046
  column: 124
2816
3047
  },
2817
3048
  end: {
2818
- line: 161,
3049
+ line: 180,
2819
3050
  column: 137
2820
3051
  }
2821
3052
  }],
2822
- line: 161
3053
+ line: 180
2823
3054
  },
2824
- "34": {
3055
+ "38": {
2825
3056
  loc: {
2826
3057
  start: {
2827
- line: 165,
3058
+ line: 184,
2828
3059
  column: 8
2829
3060
  },
2830
3061
  end: {
2831
- line: 167,
3062
+ line: 186,
2832
3063
  column: 9
2833
3064
  }
2834
3065
  },
2835
3066
  type: "if",
2836
3067
  locations: [{
2837
3068
  start: {
2838
- line: 165,
3069
+ line: 184,
2839
3070
  column: 8
2840
3071
  },
2841
3072
  end: {
2842
- line: 167,
3073
+ line: 186,
2843
3074
  column: 9
2844
3075
  }
2845
3076
  }, {
@@ -2852,27 +3083,27 @@ function cov_ms2xfswbr() {
2852
3083
  column: undefined
2853
3084
  }
2854
3085
  }],
2855
- line: 165
3086
+ line: 184
2856
3087
  },
2857
- "35": {
3088
+ "39": {
2858
3089
  loc: {
2859
3090
  start: {
2860
- line: 169,
3091
+ line: 188,
2861
3092
  column: 8
2862
3093
  },
2863
3094
  end: {
2864
- line: 171,
3095
+ line: 190,
2865
3096
  column: 9
2866
3097
  }
2867
3098
  },
2868
3099
  type: "if",
2869
3100
  locations: [{
2870
3101
  start: {
2871
- line: 169,
3102
+ line: 188,
2872
3103
  column: 8
2873
3104
  },
2874
3105
  end: {
2875
- line: 171,
3106
+ line: 190,
2876
3107
  column: 9
2877
3108
  }
2878
3109
  }, {
@@ -2885,27 +3116,27 @@ function cov_ms2xfswbr() {
2885
3116
  column: undefined
2886
3117
  }
2887
3118
  }],
2888
- line: 169
3119
+ line: 188
2889
3120
  },
2890
- "36": {
3121
+ "40": {
2891
3122
  loc: {
2892
3123
  start: {
2893
- line: 172,
3124
+ line: 191,
2894
3125
  column: 8
2895
3126
  },
2896
3127
  end: {
2897
- line: 182,
3128
+ line: 201,
2898
3129
  column: 9
2899
3130
  }
2900
3131
  },
2901
3132
  type: "if",
2902
3133
  locations: [{
2903
3134
  start: {
2904
- line: 172,
3135
+ line: 191,
2905
3136
  column: 8
2906
3137
  },
2907
3138
  end: {
2908
- line: 182,
3139
+ line: 201,
2909
3140
  column: 9
2910
3141
  }
2911
3142
  }, {
@@ -2918,60 +3149,60 @@ function cov_ms2xfswbr() {
2918
3149
  column: undefined
2919
3150
  }
2920
3151
  }],
2921
- line: 172
3152
+ line: 191
2922
3153
  },
2923
- "37": {
3154
+ "41": {
2924
3155
  loc: {
2925
3156
  start: {
2926
- line: 172,
3157
+ line: 191,
2927
3158
  column: 12
2928
3159
  },
2929
3160
  end: {
2930
- line: 172,
3161
+ line: 191,
2931
3162
  column: 86
2932
3163
  }
2933
3164
  },
2934
3165
  type: "binary-expr",
2935
3166
  locations: [{
2936
3167
  start: {
2937
- line: 172,
3168
+ line: 191,
2938
3169
  column: 12
2939
3170
  },
2940
3171
  end: {
2941
- line: 172,
3172
+ line: 191,
2942
3173
  column: 43
2943
3174
  }
2944
3175
  }, {
2945
3176
  start: {
2946
- line: 172,
3177
+ line: 191,
2947
3178
  column: 47
2948
3179
  },
2949
3180
  end: {
2950
- line: 172,
3181
+ line: 191,
2951
3182
  column: 86
2952
3183
  }
2953
3184
  }],
2954
- line: 172
3185
+ line: 191
2955
3186
  },
2956
- "38": {
3187
+ "42": {
2957
3188
  loc: {
2958
3189
  start: {
2959
- line: 193,
3190
+ line: 212,
2960
3191
  column: 8
2961
3192
  },
2962
3193
  end: {
2963
- line: 198,
3194
+ line: 217,
2964
3195
  column: 9
2965
3196
  }
2966
3197
  },
2967
3198
  type: "if",
2968
3199
  locations: [{
2969
3200
  start: {
2970
- line: 193,
3201
+ line: 212,
2971
3202
  column: 8
2972
3203
  },
2973
3204
  end: {
2974
- line: 198,
3205
+ line: 217,
2975
3206
  column: 9
2976
3207
  }
2977
3208
  }, {
@@ -2984,93 +3215,93 @@ function cov_ms2xfswbr() {
2984
3215
  column: undefined
2985
3216
  }
2986
3217
  }],
2987
- line: 193
3218
+ line: 212
2988
3219
  },
2989
- "39": {
3220
+ "43": {
2990
3221
  loc: {
2991
3222
  start: {
2992
- line: 194,
3223
+ line: 213,
2993
3224
  column: 35
2994
3225
  },
2995
3226
  end: {
2996
- line: 194,
3227
+ line: 213,
2997
3228
  column: 110
2998
3229
  }
2999
3230
  },
3000
3231
  type: "cond-expr",
3001
3232
  locations: [{
3002
3233
  start: {
3003
- line: 194,
3234
+ line: 213,
3004
3235
  column: 89
3005
3236
  },
3006
3237
  end: {
3007
- line: 194,
3238
+ line: 213,
3008
3239
  column: 95
3009
3240
  }
3010
3241
  }, {
3011
3242
  start: {
3012
- line: 194,
3243
+ line: 213,
3013
3244
  column: 98
3014
3245
  },
3015
3246
  end: {
3016
- line: 194,
3247
+ line: 213,
3017
3248
  column: 110
3018
3249
  }
3019
3250
  }],
3020
- line: 194
3251
+ line: 213
3021
3252
  },
3022
- "40": {
3253
+ "44": {
3023
3254
  loc: {
3024
3255
  start: {
3025
- line: 194,
3256
+ line: 213,
3026
3257
  column: 35
3027
3258
  },
3028
3259
  end: {
3029
- line: 194,
3260
+ line: 213,
3030
3261
  column: 86
3031
3262
  }
3032
3263
  },
3033
3264
  type: "binary-expr",
3034
3265
  locations: [{
3035
3266
  start: {
3036
- line: 194,
3267
+ line: 213,
3037
3268
  column: 35
3038
3269
  },
3039
3270
  end: {
3040
- line: 194,
3271
+ line: 213,
3041
3272
  column: 69
3042
3273
  }
3043
3274
  }, {
3044
3275
  start: {
3045
- line: 194,
3276
+ line: 213,
3046
3277
  column: 73
3047
3278
  },
3048
3279
  end: {
3049
- line: 194,
3280
+ line: 213,
3050
3281
  column: 86
3051
3282
  }
3052
3283
  }],
3053
- line: 194
3284
+ line: 213
3054
3285
  },
3055
- "41": {
3286
+ "45": {
3056
3287
  loc: {
3057
3288
  start: {
3058
- line: 195,
3289
+ line: 214,
3059
3290
  column: 12
3060
3291
  },
3061
3292
  end: {
3062
- line: 197,
3293
+ line: 216,
3063
3294
  column: 13
3064
3295
  }
3065
3296
  },
3066
3297
  type: "if",
3067
3298
  locations: [{
3068
3299
  start: {
3069
- line: 195,
3300
+ line: 214,
3070
3301
  column: 12
3071
3302
  },
3072
3303
  end: {
3073
- line: 197,
3304
+ line: 216,
3074
3305
  column: 13
3075
3306
  }
3076
3307
  }, {
@@ -3083,60 +3314,60 @@ function cov_ms2xfswbr() {
3083
3314
  column: undefined
3084
3315
  }
3085
3316
  }],
3086
- line: 195
3317
+ line: 214
3087
3318
  },
3088
- "42": {
3319
+ "46": {
3089
3320
  loc: {
3090
3321
  start: {
3091
- line: 195,
3322
+ line: 214,
3092
3323
  column: 16
3093
3324
  },
3094
3325
  end: {
3095
- line: 195,
3326
+ line: 214,
3096
3327
  column: 63
3097
3328
  }
3098
3329
  },
3099
3330
  type: "binary-expr",
3100
3331
  locations: [{
3101
3332
  start: {
3102
- line: 195,
3333
+ line: 214,
3103
3334
  column: 16
3104
3335
  },
3105
3336
  end: {
3106
- line: 195,
3337
+ line: 214,
3107
3338
  column: 31
3108
3339
  }
3109
3340
  }, {
3110
3341
  start: {
3111
- line: 195,
3342
+ line: 214,
3112
3343
  column: 35
3113
3344
  },
3114
3345
  end: {
3115
- line: 195,
3346
+ line: 214,
3116
3347
  column: 63
3117
3348
  }
3118
3349
  }],
3119
- line: 195
3350
+ line: 214
3120
3351
  },
3121
- "43": {
3352
+ "47": {
3122
3353
  loc: {
3123
3354
  start: {
3124
- line: 201,
3355
+ line: 220,
3125
3356
  column: 8
3126
3357
  },
3127
3358
  end: {
3128
- line: 203,
3359
+ line: 222,
3129
3360
  column: 9
3130
3361
  }
3131
3362
  },
3132
3363
  type: "if",
3133
3364
  locations: [{
3134
3365
  start: {
3135
- line: 201,
3366
+ line: 220,
3136
3367
  column: 8
3137
3368
  },
3138
3369
  end: {
3139
- line: 203,
3370
+ line: 222,
3140
3371
  column: 9
3141
3372
  }
3142
3373
  }, {
@@ -3149,87 +3380,87 @@ function cov_ms2xfswbr() {
3149
3380
  column: undefined
3150
3381
  }
3151
3382
  }],
3152
- line: 201
3383
+ line: 220
3153
3384
  },
3154
- "44": {
3385
+ "48": {
3155
3386
  loc: {
3156
3387
  start: {
3157
- line: 204,
3388
+ line: 223,
3158
3389
  column: 8
3159
3390
  },
3160
3391
  end: {
3161
- line: 236,
3392
+ line: 255,
3162
3393
  column: 9
3163
3394
  }
3164
3395
  },
3165
3396
  type: "switch",
3166
3397
  locations: [{
3167
3398
  start: {
3168
- line: 205,
3399
+ line: 224,
3169
3400
  column: 12
3170
3401
  },
3171
3402
  end: {
3172
- line: 214,
3403
+ line: 233,
3173
3404
  column: 13
3174
3405
  }
3175
3406
  }, {
3176
3407
  start: {
3177
- line: 215,
3408
+ line: 234,
3178
3409
  column: 12
3179
3410
  },
3180
3411
  end: {
3181
- line: 215,
3412
+ line: 234,
3182
3413
  column: 21
3183
3414
  }
3184
3415
  }, {
3185
3416
  start: {
3186
- line: 216,
3417
+ line: 235,
3187
3418
  column: 12
3188
3419
  },
3189
3420
  end: {
3190
- line: 216,
3421
+ line: 235,
3191
3422
  column: 21
3192
3423
  }
3193
3424
  }, {
3194
3425
  start: {
3195
- line: 217,
3426
+ line: 236,
3196
3427
  column: 12
3197
3428
  },
3198
3429
  end: {
3199
- line: 229,
3430
+ line: 248,
3200
3431
  column: 13
3201
3432
  }
3202
3433
  }, {
3203
3434
  start: {
3204
- line: 230,
3435
+ line: 249,
3205
3436
  column: 12
3206
3437
  },
3207
3438
  end: {
3208
- line: 235,
3439
+ line: 254,
3209
3440
  column: 13
3210
3441
  }
3211
3442
  }],
3212
- line: 204
3443
+ line: 223
3213
3444
  },
3214
- "45": {
3445
+ "49": {
3215
3446
  loc: {
3216
3447
  start: {
3217
- line: 218,
3448
+ line: 237,
3218
3449
  column: 16
3219
3450
  },
3220
3451
  end: {
3221
- line: 227,
3452
+ line: 246,
3222
3453
  column: 17
3223
3454
  }
3224
3455
  },
3225
3456
  type: "if",
3226
3457
  locations: [{
3227
3458
  start: {
3228
- line: 218,
3459
+ line: 237,
3229
3460
  column: 16
3230
3461
  },
3231
3462
  end: {
3232
- line: 227,
3463
+ line: 246,
3233
3464
  column: 17
3234
3465
  }
3235
3466
  }, {
@@ -3242,69 +3473,69 @@ function cov_ms2xfswbr() {
3242
3473
  column: undefined
3243
3474
  }
3244
3475
  }],
3245
- line: 218
3476
+ line: 237
3246
3477
  },
3247
- "46": {
3478
+ "50": {
3248
3479
  loc: {
3249
3480
  start: {
3250
- line: 218,
3481
+ line: 237,
3251
3482
  column: 20
3252
3483
  },
3253
3484
  end: {
3254
- line: 218,
3485
+ line: 237,
3255
3486
  column: 82
3256
3487
  }
3257
3488
  },
3258
3489
  type: "binary-expr",
3259
3490
  locations: [{
3260
3491
  start: {
3261
- line: 218,
3492
+ line: 237,
3262
3493
  column: 20
3263
3494
  },
3264
3495
  end: {
3265
- line: 218,
3496
+ line: 237,
3266
3497
  column: 43
3267
3498
  }
3268
3499
  }, {
3269
3500
  start: {
3270
- line: 218,
3501
+ line: 237,
3271
3502
  column: 48
3272
3503
  },
3273
3504
  end: {
3274
- line: 218,
3505
+ line: 237,
3275
3506
  column: 58
3276
3507
  }
3277
3508
  }, {
3278
3509
  start: {
3279
- line: 218,
3510
+ line: 237,
3280
3511
  column: 62
3281
3512
  },
3282
3513
  end: {
3283
- line: 218,
3514
+ line: 237,
3284
3515
  column: 81
3285
3516
  }
3286
3517
  }],
3287
- line: 218
3518
+ line: 237
3288
3519
  },
3289
- "47": {
3520
+ "51": {
3290
3521
  loc: {
3291
3522
  start: {
3292
- line: 231,
3523
+ line: 250,
3293
3524
  column: 16
3294
3525
  },
3295
3526
  end: {
3296
- line: 234,
3527
+ line: 253,
3297
3528
  column: 17
3298
3529
  }
3299
3530
  },
3300
3531
  type: "if",
3301
3532
  locations: [{
3302
3533
  start: {
3303
- line: 231,
3534
+ line: 250,
3304
3535
  column: 16
3305
3536
  },
3306
3537
  end: {
3307
- line: 234,
3538
+ line: 253,
3308
3539
  column: 17
3309
3540
  }
3310
3541
  }, {
@@ -3317,67 +3548,67 @@ function cov_ms2xfswbr() {
3317
3548
  column: undefined
3318
3549
  }
3319
3550
  }],
3320
- line: 231
3551
+ line: 250
3321
3552
  },
3322
- "48": {
3553
+ "52": {
3323
3554
  loc: {
3324
3555
  start: {
3325
- line: 241,
3556
+ line: 260,
3326
3557
  column: 8
3327
3558
  },
3328
3559
  end: {
3329
- line: 270,
3560
+ line: 289,
3330
3561
  column: 9
3331
3562
  }
3332
3563
  },
3333
3564
  type: "switch",
3334
3565
  locations: [{
3335
3566
  start: {
3336
- line: 242,
3567
+ line: 261,
3337
3568
  column: 12
3338
3569
  },
3339
3570
  end: {
3340
- line: 245,
3571
+ line: 264,
3341
3572
  column: 13
3342
3573
  }
3343
3574
  }, {
3344
3575
  start: {
3345
- line: 246,
3576
+ line: 265,
3346
3577
  column: 12
3347
3578
  },
3348
3579
  end: {
3349
- line: 249,
3580
+ line: 268,
3350
3581
  column: 13
3351
3582
  }
3352
3583
  }, {
3353
3584
  start: {
3354
- line: 250,
3585
+ line: 269,
3355
3586
  column: 12
3356
3587
  },
3357
3588
  end: {
3358
- line: 253,
3589
+ line: 272,
3359
3590
  column: 13
3360
3591
  }
3361
3592
  }, {
3362
3593
  start: {
3363
- line: 254,
3594
+ line: 273,
3364
3595
  column: 12
3365
3596
  },
3366
3597
  end: {
3367
- line: 257,
3598
+ line: 276,
3368
3599
  column: 13
3369
3600
  }
3370
3601
  }, {
3371
3602
  start: {
3372
- line: 258,
3603
+ line: 277,
3373
3604
  column: 12
3374
3605
  },
3375
3606
  end: {
3376
- line: 269,
3607
+ line: 288,
3377
3608
  column: 13
3378
3609
  }
3379
3610
  }],
3380
- line: 241
3611
+ line: 260
3381
3612
  }
3382
3613
  },
3383
3614
  s: {
@@ -3502,7 +3733,16 @@ function cov_ms2xfswbr() {
3502
3733
  "118": 0,
3503
3734
  "119": 0,
3504
3735
  "120": 0,
3505
- "121": 0
3736
+ "121": 0,
3737
+ "122": 0,
3738
+ "123": 0,
3739
+ "124": 0,
3740
+ "125": 0,
3741
+ "126": 0,
3742
+ "127": 0,
3743
+ "128": 0,
3744
+ "129": 0,
3745
+ "130": 0
3506
3746
  },
3507
3747
  f: {
3508
3748
  "0": 0,
@@ -3560,7 +3800,7 @@ function cov_ms2xfswbr() {
3560
3800
  "31": [0, 0],
3561
3801
  "32": [0, 0],
3562
3802
  "33": [0, 0],
3563
- "34": [0, 0],
3803
+ "34": [0, 0, 0],
3564
3804
  "35": [0, 0],
3565
3805
  "36": [0, 0],
3566
3806
  "37": [0, 0],
@@ -3570,22 +3810,26 @@ function cov_ms2xfswbr() {
3570
3810
  "41": [0, 0],
3571
3811
  "42": [0, 0],
3572
3812
  "43": [0, 0],
3573
- "44": [0, 0, 0, 0, 0],
3813
+ "44": [0, 0],
3574
3814
  "45": [0, 0],
3575
- "46": [0, 0, 0],
3815
+ "46": [0, 0],
3576
3816
  "47": [0, 0],
3577
- "48": [0, 0, 0, 0, 0]
3817
+ "48": [0, 0, 0, 0, 0],
3818
+ "49": [0, 0],
3819
+ "50": [0, 0, 0],
3820
+ "51": [0, 0],
3821
+ "52": [0, 0, 0, 0, 0]
3578
3822
  },
3579
3823
  inputSourceMap: {
3580
3824
  version: 3,
3581
3825
  file: "/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts",
3582
3826
  sources: ["/home/vsts/work/1/s/rush-plugins/rush-http-build-cache-plugin/src/HttpBuildCacheProvider.ts"],
3583
3827
  names: [],
3584
- mappings: "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",
3585
- sourcesContent: ["import { ITerminal, Executable } from '@rushstack/node-core-library';\nimport {\n ICloudBuildCacheProvider,\n ICredentialCacheEntry,\n CredentialCache,\n RushSession,\n EnvironmentConfiguration\n} from '@rushstack/rush-sdk';\nimport fetch, { BodyInit, Response } from 'node-fetch';\n\nenum CredentialsOptions {\n Optional,\n Required,\n Omit\n}\n\nenum FailureType {\n None,\n Informational,\n Warning,\n Error,\n Authentication\n}\n\nexport interface IHttpBuildCacheTokenHandler {\n exec: string;\n args?: string[];\n}\n\n/**\n * @public\n */\nexport interface IHttpBuildCacheProviderOptions {\n url: string;\n tokenHandler?: IHttpBuildCacheTokenHandler;\n uploadMethod?: string;\n headers?: Record<string, string>;\n cacheKeyPrefix?: string;\n isCacheWriteAllowed: boolean;\n pluginName: string;\n rushProjectRoot: string;\n}\n\nexport class HttpBuildCacheProvider implements ICloudBuildCacheProvider {\n private readonly _pluginName: string;\n private readonly _rushSession: RushSession;\n private readonly _rushProjectRoot: string;\n private readonly _environmentCredential: string | undefined;\n private readonly _isCacheWriteAllowedByConfiguration: boolean;\n private readonly _url: URL;\n private readonly _uploadMethod: string;\n private readonly _headers: Record<string, string>;\n private readonly _cacheKeyPrefix: string;\n private readonly _tokenHandler: IHttpBuildCacheTokenHandler | undefined;\n private __credentialCacheId: string | undefined;\n\n public get isCacheWriteAllowed(): boolean {\n return EnvironmentConfiguration.buildCacheWriteAllowed ?? this._isCacheWriteAllowedByConfiguration;\n }\n\n public constructor(options: IHttpBuildCacheProviderOptions, rushSession: RushSession) {\n this._pluginName = options.pluginName;\n this._rushSession = rushSession;\n this._rushProjectRoot = options.rushProjectRoot;\n\n this._environmentCredential = EnvironmentConfiguration.buildCacheCredential;\n this._isCacheWriteAllowedByConfiguration = options.isCacheWriteAllowed;\n this._url = new URL(options.url.endsWith('/') ? options.url : options.url + '/');\n this._uploadMethod = options.uploadMethod ?? 'PUT';\n this._headers = options.headers ?? {};\n this._tokenHandler = options.tokenHandler;\n this._cacheKeyPrefix = options.cacheKeyPrefix ?? '';\n }\n\n public async tryGetCacheEntryBufferByIdAsync(\n terminal: ITerminal,\n cacheId: string\n ): Promise<Buffer | undefined> {\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: 'GET',\n body: undefined,\n warningText: 'Could not get cache entry',\n readBody: true\n });\n\n return Buffer.isBuffer(result) ? result : undefined;\n } catch (e) {\n terminal.writeWarningLine(`Error getting cache entry: ${e}`);\n return undefined;\n }\n }\n\n public async trySetCacheEntryBufferAsync(\n terminal: ITerminal,\n cacheId: string,\n objectBuffer: Buffer\n ): Promise<boolean> {\n if (!this.isCacheWriteAllowed) {\n terminal.writeErrorLine('Writing to cache is not allowed in the current configuration.');\n return false;\n }\n\n terminal.writeDebugLine('Uploading object with cacheId: ', cacheId);\n\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: this._uploadMethod,\n body: objectBuffer,\n warningText: 'Could not write cache entry',\n readBody: false\n });\n\n return result !== false;\n } catch (e) {\n terminal.writeWarningLine(`Error uploading cache entry: ${e}`);\n return false;\n }\n }\n\n public async updateCachedCredentialAsync(terminal: ITerminal, credential: string): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.setCacheEntry(this._credentialCacheId, {\n credential: credential\n });\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n public async updateCachedCredentialInteractiveAsync(terminal: ITerminal): Promise<void> {\n if (!this._tokenHandler) {\n throw new Error(\n `The interactive cloud credentials flow is not configured.\\n` +\n `Set the 'tokenHandler' setting in 'common/config/rush-plugins/${this._pluginName}.json' to a command that writes your credentials to standard output and exits with code 0 ` +\n `or provide your credentials to rush using the --credential flag instead. Credentials must be the ` +\n `'Authorization' header expected by ${this._url.href}`\n );\n }\n\n const cmd: string = `${this._tokenHandler.exec} ${(this._tokenHandler.args || []).join(' ')}`;\n terminal.writeVerboseLine(`Running '${cmd}' to get credentials`);\n const result = Executable.spawnSync(this._tokenHandler.exec, this._tokenHandler.args || []);\n\n terminal.writeErrorLine(result.stderr);\n\n if (result.error) {\n throw new Error(`Could not obtain credentials. The command '${cmd}' failed.`);\n }\n\n const credential = result.stdout.trim();\n terminal.writeVerboseLine('Got credentials');\n\n await this.updateCachedCredentialAsync(terminal, credential);\n\n terminal.writeLine('Updated credentials cache');\n }\n\n public async deleteCachedCredentialsAsync(terminal: ITerminal): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.deleteCacheEntry(this._credentialCacheId);\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n private get _credentialCacheId(): string {\n if (!this.__credentialCacheId) {\n const cacheIdParts: string[] = [this._url.href];\n\n if (this._isCacheWriteAllowedByConfiguration) {\n cacheIdParts.push('cacheWriteAllowed');\n }\n\n this.__credentialCacheId = cacheIdParts.join('|');\n }\n\n return this.__credentialCacheId;\n }\n\n private async _http(options: {\n terminal: ITerminal;\n relUrl: string;\n method: string;\n body: BodyInit | undefined;\n warningText: string;\n readBody: boolean;\n credentialOptions?: CredentialsOptions;\n }): Promise<Buffer | boolean> {\n const { terminal, relUrl, method, body, warningText, readBody, credentialOptions } = options;\n const safeCredentialOptions = credentialOptions ?? CredentialsOptions.Optional;\n const credentials = await this._tryGetCredentials(safeCredentialOptions);\n const url = new URL(relUrl, this._url).href;\n\n const headers: Record<string, string> = {};\n if (typeof credentials === 'string') {\n headers.Authorization = credentials;\n }\n\n for (const [key, value] of Object.entries(this._headers)) {\n if (typeof value === 'string') {\n headers[key] = value;\n }\n }\n\n const bodyLength = (body as { length: number })?.length || 'unknown';\n\n terminal.writeDebugLine(`[http-build-cache] request: ${method} ${url} ${bodyLength} bytes`);\n\n const response = await fetch(url, {\n method: method,\n headers: headers,\n body: body,\n redirect: 'follow'\n });\n\n if (!response.ok) {\n if (typeof credentials !== 'string' && safeCredentialOptions === CredentialsOptions.Optional) {\n // We tried fetching the resource without credentials and that did not work out\n // Try again but require credentials this time\n // This will trigger the provider to request credentials\n return await this._http({ ...options, credentialOptions: CredentialsOptions.Required });\n }\n\n this._reportFailure(terminal, method, response, false, warningText);\n return false;\n }\n\n const result: Buffer | boolean = readBody ? Buffer.from(await response.arrayBuffer()) : true;\n\n terminal.writeDebugLine(\n `[http-build-cache] actual response: ${response.status} ${url} ${\n result === true ? 'true' : result.length\n } bytes`\n );\n\n return result;\n }\n\n private async _tryGetCredentials(options: CredentialsOptions.Required): Promise<string>;\n private async _tryGetCredentials(options: CredentialsOptions.Optional): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions.Omit): Promise<undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined> {\n if (options === CredentialsOptions.Omit) {\n return;\n }\n\n let credentials: string | undefined = this._environmentCredential;\n\n if (credentials === undefined) {\n credentials = await this._tryGetCredentialsFromCache();\n }\n\n if (typeof credentials !== 'string' && options === CredentialsOptions.Required) {\n throw new Error(\n [\n `Credentials for ${this._url.href} have not been provided.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n\n return credentials;\n }\n\n private async _tryGetCredentialsFromCache(): Promise<string | undefined> {\n let cacheEntry: ICredentialCacheEntry | undefined;\n\n await CredentialCache.usingAsync(\n {\n supportEditing: false\n },\n (credentialsCache: CredentialCache) => {\n cacheEntry = credentialsCache.tryGetCacheEntry(this._credentialCacheId);\n }\n );\n\n if (cacheEntry) {\n const expirationTime: number | undefined = cacheEntry.expires?.getTime();\n if (!expirationTime || expirationTime >= Date.now()) {\n return cacheEntry.credential;\n }\n }\n }\n\n private _getFailureType(requestMethod: string, response: Response, isRedirect: boolean): FailureType {\n if (response.ok) {\n return FailureType.None;\n }\n\n switch (response.status) {\n case 503: {\n // We select 503 specifically because this represents \"service unavailable\" and\n // \"rate limit throttle\" errors, which are transient issues.\n //\n // There are other 5xx errors, such as 501, that can occur if the request is\n // malformed, so as a general rule we want to let through other 5xx errors\n // so the user can troubleshoot.\n\n // Don't fail production builds with warnings for transient issues\n return FailureType.Informational;\n }\n\n case 401:\n case 403:\n case 407: {\n if (requestMethod === 'GET' && (isRedirect || response.redirected)) {\n // Cache misses for GET requests are not errors\n // This is a workaround behavior where a server can issue a redirect and we fail to authenticate at the new location.\n // We do not want to signal this as an authentication failure because the authorization header is not passed on to redirects.\n // i.e The authentication header was accepted for the first request and therefore subsequent failures\n // where it was not present should not be attributed to the header.\n // This scenario usually comes up with services that redirect to pre-signed URLS that don't actually exist.\n // Those services then usually treat the 404 as a 403 to prevent leaking information.\n return FailureType.None;\n }\n\n return FailureType.Authentication;\n }\n\n case 404: {\n if (requestMethod === 'GET') {\n // Cache misses for GET requests are not errors\n return FailureType.None;\n }\n }\n }\n\n // Let dev builds succeed, let Prod builds fail\n return FailureType.Warning;\n }\n\n private _reportFailure(\n terminal: ITerminal,\n requestMethod: string,\n response: Response,\n isRedirect: boolean,\n message: string\n ): void {\n switch (this._getFailureType(requestMethod, response, isRedirect)) {\n default: {\n terminal.writeErrorLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Warning: {\n terminal.writeWarningLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Informational: {\n terminal.writeLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.None: {\n terminal.writeDebugLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Authentication: {\n throw new Error(\n [\n `${this._url.href} responded with ${response.status}: ${response.statusText}.`,\n `Credentials may be misconfigured or have expired.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n }\n }\n}\n"]
3828
+ mappings: "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",
3829
+ sourcesContent: ["import { ITerminal, Executable, Async } from '@rushstack/node-core-library';\nimport {\n ICloudBuildCacheProvider,\n ICredentialCacheEntry,\n CredentialCache,\n RushSession,\n EnvironmentConfiguration\n} from '@rushstack/rush-sdk';\nimport fetch, { BodyInit, Response } from 'node-fetch';\n\nenum CredentialsOptions {\n Optional,\n Required,\n Omit\n}\n\nenum FailureType {\n None,\n Informational,\n Warning,\n Error,\n Authentication\n}\n\nexport interface IHttpBuildCacheTokenHandler {\n exec: string;\n args?: string[];\n}\n\n/**\n * @public\n */\nexport interface IHttpBuildCacheProviderOptions {\n url: string;\n tokenHandler?: IHttpBuildCacheTokenHandler;\n uploadMethod?: string;\n minHttpRetryDelayMs?: number;\n headers?: Record<string, string>;\n cacheKeyPrefix?: string;\n isCacheWriteAllowed: boolean;\n pluginName: string;\n rushProjectRoot: string;\n}\n\nconst MAX_HTTP_CACHE_ATTEMPTS: number = 3;\nconst DEFAULT_MIN_HTTP_RETRY_DELAY_MS = 2500;\n\nexport class HttpBuildCacheProvider implements ICloudBuildCacheProvider {\n private readonly _pluginName: string;\n private readonly _rushSession: RushSession;\n private readonly _rushProjectRoot: string;\n private readonly _environmentCredential: string | undefined;\n private readonly _isCacheWriteAllowedByConfiguration: boolean;\n private readonly _url: URL;\n private readonly _uploadMethod: string;\n private readonly _headers: Record<string, string>;\n private readonly _cacheKeyPrefix: string;\n private readonly _tokenHandler: IHttpBuildCacheTokenHandler | undefined;\n private readonly _minHttpRetryDelayMs: number;\n private __credentialCacheId: string | undefined;\n\n public get isCacheWriteAllowed(): boolean {\n return EnvironmentConfiguration.buildCacheWriteAllowed ?? this._isCacheWriteAllowedByConfiguration;\n }\n\n public constructor(options: IHttpBuildCacheProviderOptions, rushSession: RushSession) {\n this._pluginName = options.pluginName;\n this._rushSession = rushSession;\n this._rushProjectRoot = options.rushProjectRoot;\n\n this._environmentCredential = EnvironmentConfiguration.buildCacheCredential;\n this._isCacheWriteAllowedByConfiguration = options.isCacheWriteAllowed;\n this._url = new URL(options.url.endsWith('/') ? options.url : options.url + '/');\n this._uploadMethod = options.uploadMethod ?? 'PUT';\n this._headers = options.headers ?? {};\n this._tokenHandler = options.tokenHandler;\n this._cacheKeyPrefix = options.cacheKeyPrefix ?? '';\n this._minHttpRetryDelayMs = options.minHttpRetryDelayMs ?? DEFAULT_MIN_HTTP_RETRY_DELAY_MS;\n }\n\n public async tryGetCacheEntryBufferByIdAsync(\n terminal: ITerminal,\n cacheId: string\n ): Promise<Buffer | undefined> {\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: 'GET',\n body: undefined,\n warningText: 'Could not get cache entry',\n readBody: true,\n maxAttempts: MAX_HTTP_CACHE_ATTEMPTS\n });\n\n return Buffer.isBuffer(result) ? result : undefined;\n } catch (e) {\n terminal.writeWarningLine(`Error getting cache entry: ${e}`);\n return undefined;\n }\n }\n\n public async trySetCacheEntryBufferAsync(\n terminal: ITerminal,\n cacheId: string,\n objectBuffer: Buffer\n ): Promise<boolean> {\n if (!this.isCacheWriteAllowed) {\n terminal.writeErrorLine('Writing to cache is not allowed in the current configuration.');\n return false;\n }\n\n terminal.writeDebugLine('Uploading object with cacheId: ', cacheId);\n\n try {\n const result = await this._http({\n terminal: terminal,\n relUrl: `${this._cacheKeyPrefix}${cacheId}`,\n method: this._uploadMethod,\n body: objectBuffer,\n warningText: 'Could not write cache entry',\n readBody: false,\n maxAttempts: MAX_HTTP_CACHE_ATTEMPTS\n });\n\n return result !== false;\n } catch (e) {\n terminal.writeWarningLine(`Error uploading cache entry: ${e}`);\n return false;\n }\n }\n\n public async updateCachedCredentialAsync(terminal: ITerminal, credential: string): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.setCacheEntry(this._credentialCacheId, {\n credential: credential\n });\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n public async updateCachedCredentialInteractiveAsync(terminal: ITerminal): Promise<void> {\n if (!this._tokenHandler) {\n throw new Error(\n `The interactive cloud credentials flow is not configured.\\n` +\n `Set the 'tokenHandler' setting in 'common/config/rush-plugins/${this._pluginName}.json' to a command that writes your credentials to standard output and exits with code 0 ` +\n `or provide your credentials to rush using the --credential flag instead. Credentials must be the ` +\n `'Authorization' header expected by ${this._url.href}`\n );\n }\n\n const cmd: string = `${this._tokenHandler.exec} ${(this._tokenHandler.args || []).join(' ')}`;\n terminal.writeVerboseLine(`Running '${cmd}' to get credentials`);\n const result = Executable.spawnSync(this._tokenHandler.exec, this._tokenHandler.args || []);\n\n terminal.writeErrorLine(result.stderr);\n\n if (result.error) {\n throw new Error(`Could not obtain credentials. The command '${cmd}' failed.`);\n }\n\n const credential = result.stdout.trim();\n terminal.writeVerboseLine('Got credentials');\n\n await this.updateCachedCredentialAsync(terminal, credential);\n\n terminal.writeLine('Updated credentials cache');\n }\n\n public async deleteCachedCredentialsAsync(terminal: ITerminal): Promise<void> {\n await CredentialCache.usingAsync(\n {\n supportEditing: true\n },\n async (credentialsCache: CredentialCache) => {\n credentialsCache.deleteCacheEntry(this._credentialCacheId);\n await credentialsCache.saveIfModifiedAsync();\n }\n );\n }\n\n private get _credentialCacheId(): string {\n if (!this.__credentialCacheId) {\n const cacheIdParts: string[] = [this._url.href];\n\n if (this._isCacheWriteAllowedByConfiguration) {\n cacheIdParts.push('cacheWriteAllowed');\n }\n\n this.__credentialCacheId = cacheIdParts.join('|');\n }\n\n return this.__credentialCacheId;\n }\n\n private async _http(options: {\n terminal: ITerminal;\n relUrl: string;\n method: string;\n body: BodyInit | undefined;\n warningText: string;\n readBody: boolean;\n maxAttempts: number;\n credentialOptions?: CredentialsOptions;\n }): Promise<Buffer | boolean> {\n const { terminal, relUrl, method, body, warningText, readBody, credentialOptions } = options;\n const safeCredentialOptions = credentialOptions ?? CredentialsOptions.Optional;\n const credentials = await this._tryGetCredentials(safeCredentialOptions);\n const url = new URL(relUrl, this._url).href;\n\n const headers: Record<string, string> = {};\n if (typeof credentials === 'string') {\n headers.Authorization = credentials;\n }\n\n for (const [key, value] of Object.entries(this._headers)) {\n if (typeof value === 'string') {\n headers[key] = value;\n }\n }\n\n const bodyLength = (body as { length: number })?.length || 'unknown';\n\n terminal.writeDebugLine(`[http-build-cache] request: ${method} ${url} ${bodyLength} bytes`);\n\n const response = await fetch(url, {\n method: method,\n headers: headers,\n body: body,\n redirect: 'follow'\n });\n\n if (!response.ok) {\n const isNonCredentialResponse = response.status >= 500 && response.status < 600;\n\n if (\n !isNonCredentialResponse &&\n typeof credentials !== 'string' &&\n safeCredentialOptions === CredentialsOptions.Optional\n ) {\n // If we don't already have credentials yet, and we got a response from the server\n // that is a \"normal\" failure (4xx), then we assume that credentials are probably\n // required. Re-attempt the request, requiring credentials this time.\n //\n // This counts as part of the \"first attempt\", so it is not included in the max attempts\n return await this._http({ ...options, credentialOptions: CredentialsOptions.Required });\n }\n\n if (options.maxAttempts > 1) {\n // Pause a bit before retrying in case the server is busy\n // Add some random jitter to the retry so we can spread out load on the remote service\n // A proper solution might add exponential back off in case the retry count is high (10 or more)\n const factor = 1.0 + Math.random(); // A random number between 1.0 and 2.0\n const retryDelay = Math.floor(factor * this._minHttpRetryDelayMs);\n\n await Async.sleep(retryDelay);\n\n return await this._http({ ...options, maxAttempts: options.maxAttempts - 1 });\n }\n\n this._reportFailure(terminal, method, response, false, warningText);\n return false;\n }\n\n const result: Buffer | boolean = readBody ? Buffer.from(await response.arrayBuffer()) : true;\n\n terminal.writeDebugLine(\n `[http-build-cache] actual response: ${response.status} ${url} ${\n result === true ? 'true' : result.length\n } bytes`\n );\n\n return result;\n }\n\n private async _tryGetCredentials(options: CredentialsOptions.Required): Promise<string>;\n private async _tryGetCredentials(options: CredentialsOptions.Optional): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions.Omit): Promise<undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined>;\n private async _tryGetCredentials(options: CredentialsOptions): Promise<string | undefined> {\n if (options === CredentialsOptions.Omit) {\n return;\n }\n\n let credentials: string | undefined = this._environmentCredential;\n\n if (credentials === undefined) {\n credentials = await this._tryGetCredentialsFromCache();\n }\n\n if (typeof credentials !== 'string' && options === CredentialsOptions.Required) {\n throw new Error(\n [\n `Credentials for ${this._url.href} have not been provided.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n\n return credentials;\n }\n\n private async _tryGetCredentialsFromCache(): Promise<string | undefined> {\n let cacheEntry: ICredentialCacheEntry | undefined;\n\n await CredentialCache.usingAsync(\n {\n supportEditing: false\n },\n (credentialsCache: CredentialCache) => {\n cacheEntry = credentialsCache.tryGetCacheEntry(this._credentialCacheId);\n }\n );\n\n if (cacheEntry) {\n const expirationTime: number | undefined = cacheEntry.expires?.getTime();\n if (!expirationTime || expirationTime >= Date.now()) {\n return cacheEntry.credential;\n }\n }\n }\n\n private _getFailureType(requestMethod: string, response: Response, isRedirect: boolean): FailureType {\n if (response.ok) {\n return FailureType.None;\n }\n\n switch (response.status) {\n case 503: {\n // We select 503 specifically because this represents \"service unavailable\" and\n // \"rate limit throttle\" errors, which are transient issues.\n //\n // There are other 5xx errors, such as 501, that can occur if the request is\n // malformed, so as a general rule we want to let through other 5xx errors\n // so the user can troubleshoot.\n\n // Don't fail production builds with warnings for transient issues\n return FailureType.Informational;\n }\n\n case 401:\n case 403:\n case 407: {\n if (requestMethod === 'GET' && (isRedirect || response.redirected)) {\n // Cache misses for GET requests are not errors\n // This is a workaround behavior where a server can issue a redirect and we fail to authenticate at the new location.\n // We do not want to signal this as an authentication failure because the authorization header is not passed on to redirects.\n // i.e The authentication header was accepted for the first request and therefore subsequent failures\n // where it was not present should not be attributed to the header.\n // This scenario usually comes up with services that redirect to pre-signed URLS that don't actually exist.\n // Those services then usually treat the 404 as a 403 to prevent leaking information.\n return FailureType.None;\n }\n\n return FailureType.Authentication;\n }\n\n case 404: {\n if (requestMethod === 'GET') {\n // Cache misses for GET requests are not errors\n return FailureType.None;\n }\n }\n }\n\n // Let dev builds succeed, let Prod builds fail\n return FailureType.Warning;\n }\n\n private _reportFailure(\n terminal: ITerminal,\n requestMethod: string,\n response: Response,\n isRedirect: boolean,\n message: string\n ): void {\n switch (this._getFailureType(requestMethod, response, isRedirect)) {\n default: {\n terminal.writeErrorLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Warning: {\n terminal.writeWarningLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Informational: {\n terminal.writeLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.None: {\n terminal.writeDebugLine(`${message}: HTTP ${response.status}: ${response.statusText}`);\n break;\n }\n\n case FailureType.Authentication: {\n throw new Error(\n [\n `${this._url.href} responded with ${response.status}: ${response.statusText}.`,\n `Credentials may be misconfigured or have expired.`,\n `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`,\n ``,\n `For local developers, run:`,\n ``,\n ` rush update-cloud-credentials --interactive`,\n ``\n ].join('\\n')\n );\n }\n }\n }\n}\n"]
3586
3830
  },
3587
3831
  _coverageSchema: "1a1c01bbd47fc00a2c39e90264f33305004495a9",
3588
- hash: "68fed68ed90a11f7ae56ba4631d6e8c44c5b590c"
3832
+ hash: "f39662f2cf6af1c0d874c48f29702c0c9cefda13"
3589
3833
  };
3590
3834
  var coverage = global[gcv] || (global[gcv] = {});
3591
3835
  if (!coverage[path] || coverage[path].hash !== hash) {
@@ -3687,35 +3931,41 @@ cov_ms2xfswbr().s[11]++;
3687
3931
  (cov_ms2xfswbr().b[4][0]++, FailureType) ||
3688
3932
  /* istanbul ignore next */
3689
3933
  (cov_ms2xfswbr().b[4][1]++, FailureType = {}));
3934
+ const MAX_HTTP_CACHE_ATTEMPTS =
3935
+ /* istanbul ignore next */
3936
+ (cov_ms2xfswbr().s[17]++, 3);
3937
+ const DEFAULT_MIN_HTTP_RETRY_DELAY_MS =
3938
+ /* istanbul ignore next */
3939
+ (cov_ms2xfswbr().s[18]++, 2500);
3690
3940
  class HttpBuildCacheProvider {
3691
3941
  constructor(options, rushSession) {
3692
3942
  /* istanbul ignore next */
3693
3943
  cov_ms2xfswbr().f[3]++;
3694
- var _a, _b, _c;
3944
+ var _a, _b, _c, _d;
3695
3945
  /* istanbul ignore next */
3696
- cov_ms2xfswbr().s[17]++;
3946
+ cov_ms2xfswbr().s[19]++;
3697
3947
  this._pluginName = options.pluginName;
3698
3948
  /* istanbul ignore next */
3699
- cov_ms2xfswbr().s[18]++;
3949
+ cov_ms2xfswbr().s[20]++;
3700
3950
  this._rushSession = rushSession;
3701
3951
  /* istanbul ignore next */
3702
- cov_ms2xfswbr().s[19]++;
3952
+ cov_ms2xfswbr().s[21]++;
3703
3953
  this._rushProjectRoot = options.rushProjectRoot;
3704
3954
  /* istanbul ignore next */
3705
- cov_ms2xfswbr().s[20]++;
3955
+ cov_ms2xfswbr().s[22]++;
3706
3956
  this._environmentCredential = rush_sdk_1.EnvironmentConfiguration.buildCacheCredential;
3707
3957
  /* istanbul ignore next */
3708
- cov_ms2xfswbr().s[21]++;
3958
+ cov_ms2xfswbr().s[23]++;
3709
3959
  this._isCacheWriteAllowedByConfiguration = options.isCacheWriteAllowed;
3710
3960
  /* istanbul ignore next */
3711
- cov_ms2xfswbr().s[22]++;
3961
+ cov_ms2xfswbr().s[24]++;
3712
3962
  this._url = new URL(options.url.endsWith('/') ?
3713
3963
  /* istanbul ignore next */
3714
3964
  (cov_ms2xfswbr().b[5][0]++, options.url) :
3715
3965
  /* istanbul ignore next */
3716
3966
  (cov_ms2xfswbr().b[5][1]++, options.url + '/'));
3717
3967
  /* istanbul ignore next */
3718
- cov_ms2xfswbr().s[23]++;
3968
+ cov_ms2xfswbr().s[25]++;
3719
3969
  this._uploadMethod =
3720
3970
  /* istanbul ignore next */
3721
3971
  (cov_ms2xfswbr().b[7][0]++, (_a = options.uploadMethod) !== null) &&
@@ -3726,7 +3976,7 @@ class HttpBuildCacheProvider {
3726
3976
  /* istanbul ignore next */
3727
3977
  (cov_ms2xfswbr().b[6][1]++, 'PUT');
3728
3978
  /* istanbul ignore next */
3729
- cov_ms2xfswbr().s[24]++;
3979
+ cov_ms2xfswbr().s[26]++;
3730
3980
  this._headers =
3731
3981
  /* istanbul ignore next */
3732
3982
  (cov_ms2xfswbr().b[9][0]++, (_b = options.headers) !== null) &&
@@ -3737,10 +3987,10 @@ class HttpBuildCacheProvider {
3737
3987
  /* istanbul ignore next */
3738
3988
  (cov_ms2xfswbr().b[8][1]++, {});
3739
3989
  /* istanbul ignore next */
3740
- cov_ms2xfswbr().s[25]++;
3990
+ cov_ms2xfswbr().s[27]++;
3741
3991
  this._tokenHandler = options.tokenHandler;
3742
3992
  /* istanbul ignore next */
3743
- cov_ms2xfswbr().s[26]++;
3993
+ cov_ms2xfswbr().s[28]++;
3744
3994
  this._cacheKeyPrefix =
3745
3995
  /* istanbul ignore next */
3746
3996
  (cov_ms2xfswbr().b[11][0]++, (_c = options.cacheKeyPrefix) !== null) &&
@@ -3750,222 +4000,235 @@ class HttpBuildCacheProvider {
3750
4000
  (cov_ms2xfswbr().b[10][0]++, _c) :
3751
4001
  /* istanbul ignore next */
3752
4002
  (cov_ms2xfswbr().b[10][1]++, '');
4003
+ /* istanbul ignore next */
4004
+ cov_ms2xfswbr().s[29]++;
4005
+ this._minHttpRetryDelayMs =
4006
+ /* istanbul ignore next */
4007
+ (cov_ms2xfswbr().b[13][0]++, (_d = options.minHttpRetryDelayMs) !== null) &&
4008
+ /* istanbul ignore next */
4009
+ (cov_ms2xfswbr().b[13][1]++, _d !== void 0) ?
4010
+ /* istanbul ignore next */
4011
+ (cov_ms2xfswbr().b[12][0]++, _d) :
4012
+ /* istanbul ignore next */
4013
+ (cov_ms2xfswbr().b[12][1]++, DEFAULT_MIN_HTTP_RETRY_DELAY_MS);
3753
4014
  }
3754
4015
  get isCacheWriteAllowed() {
3755
4016
  /* istanbul ignore next */
3756
4017
  cov_ms2xfswbr().f[4]++;
3757
4018
  var _a;
3758
4019
  /* istanbul ignore next */
3759
- cov_ms2xfswbr().s[27]++;
4020
+ cov_ms2xfswbr().s[30]++;
3760
4021
  return (
3761
4022
  /* istanbul ignore next */
3762
- (cov_ms2xfswbr().b[13][0]++, (_a = rush_sdk_1.EnvironmentConfiguration.buildCacheWriteAllowed) !== null) &&
4023
+ (cov_ms2xfswbr().b[15][0]++, (_a = rush_sdk_1.EnvironmentConfiguration.buildCacheWriteAllowed) !== null) &&
3763
4024
  /* istanbul ignore next */
3764
- (cov_ms2xfswbr().b[13][1]++, _a !== void 0) ?
4025
+ (cov_ms2xfswbr().b[15][1]++, _a !== void 0) ?
3765
4026
  /* istanbul ignore next */
3766
- (cov_ms2xfswbr().b[12][0]++, _a) :
4027
+ (cov_ms2xfswbr().b[14][0]++, _a) :
3767
4028
  /* istanbul ignore next */
3768
- (cov_ms2xfswbr().b[12][1]++, this._isCacheWriteAllowedByConfiguration)
4029
+ (cov_ms2xfswbr().b[14][1]++, this._isCacheWriteAllowedByConfiguration)
3769
4030
  );
3770
4031
  }
3771
4032
  async tryGetCacheEntryBufferByIdAsync(terminal, cacheId) {
3772
4033
  /* istanbul ignore next */
3773
4034
  cov_ms2xfswbr().f[5]++;
3774
- cov_ms2xfswbr().s[28]++;
4035
+ cov_ms2xfswbr().s[31]++;
3775
4036
  try {
3776
4037
  const result =
3777
4038
  /* istanbul ignore next */
3778
- (cov_ms2xfswbr().s[29]++, await this._http({
4039
+ (cov_ms2xfswbr().s[32]++, await this._http({
3779
4040
  terminal: terminal,
3780
4041
  relUrl: `${this._cacheKeyPrefix}${cacheId}`,
3781
4042
  method: 'GET',
3782
4043
  body: undefined,
3783
4044
  warningText: 'Could not get cache entry',
3784
- readBody: true
4045
+ readBody: true,
4046
+ maxAttempts: MAX_HTTP_CACHE_ATTEMPTS
3785
4047
  }));
3786
4048
  /* istanbul ignore next */
3787
- cov_ms2xfswbr().s[30]++;
4049
+ cov_ms2xfswbr().s[33]++;
3788
4050
  return Buffer.isBuffer(result) ?
3789
4051
  /* istanbul ignore next */
3790
- (cov_ms2xfswbr().b[14][0]++, result) :
4052
+ (cov_ms2xfswbr().b[16][0]++, result) :
3791
4053
  /* istanbul ignore next */
3792
- (cov_ms2xfswbr().b[14][1]++, undefined);
4054
+ (cov_ms2xfswbr().b[16][1]++, undefined);
3793
4055
  } catch (e) {
3794
4056
  /* istanbul ignore next */
3795
- cov_ms2xfswbr().s[31]++;
4057
+ cov_ms2xfswbr().s[34]++;
3796
4058
  terminal.writeWarningLine(`Error getting cache entry: ${e}`);
3797
4059
  /* istanbul ignore next */
3798
- cov_ms2xfswbr().s[32]++;
4060
+ cov_ms2xfswbr().s[35]++;
3799
4061
  return undefined;
3800
4062
  }
3801
4063
  }
3802
4064
  async trySetCacheEntryBufferAsync(terminal, cacheId, objectBuffer) {
3803
4065
  /* istanbul ignore next */
3804
4066
  cov_ms2xfswbr().f[6]++;
3805
- cov_ms2xfswbr().s[33]++;
4067
+ cov_ms2xfswbr().s[36]++;
3806
4068
  if (!this.isCacheWriteAllowed) {
3807
4069
  /* istanbul ignore next */
3808
- cov_ms2xfswbr().b[15][0]++;
3809
- cov_ms2xfswbr().s[34]++;
4070
+ cov_ms2xfswbr().b[17][0]++;
4071
+ cov_ms2xfswbr().s[37]++;
3810
4072
  terminal.writeErrorLine('Writing to cache is not allowed in the current configuration.');
3811
4073
  /* istanbul ignore next */
3812
- cov_ms2xfswbr().s[35]++;
4074
+ cov_ms2xfswbr().s[38]++;
3813
4075
  return false;
3814
4076
  } else
3815
4077
  /* istanbul ignore next */
3816
4078
  {
3817
- cov_ms2xfswbr().b[15][1]++;
4079
+ cov_ms2xfswbr().b[17][1]++;
3818
4080
  }
3819
- cov_ms2xfswbr().s[36]++;
4081
+ cov_ms2xfswbr().s[39]++;
3820
4082
  terminal.writeDebugLine('Uploading object with cacheId: ', cacheId);
3821
4083
  /* istanbul ignore next */
3822
- cov_ms2xfswbr().s[37]++;
4084
+ cov_ms2xfswbr().s[40]++;
3823
4085
  try {
3824
4086
  const result =
3825
4087
  /* istanbul ignore next */
3826
- (cov_ms2xfswbr().s[38]++, await this._http({
4088
+ (cov_ms2xfswbr().s[41]++, await this._http({
3827
4089
  terminal: terminal,
3828
4090
  relUrl: `${this._cacheKeyPrefix}${cacheId}`,
3829
4091
  method: this._uploadMethod,
3830
4092
  body: objectBuffer,
3831
4093
  warningText: 'Could not write cache entry',
3832
- readBody: false
4094
+ readBody: false,
4095
+ maxAttempts: MAX_HTTP_CACHE_ATTEMPTS
3833
4096
  }));
3834
4097
  /* istanbul ignore next */
3835
- cov_ms2xfswbr().s[39]++;
4098
+ cov_ms2xfswbr().s[42]++;
3836
4099
  return result !== false;
3837
4100
  } catch (e) {
3838
4101
  /* istanbul ignore next */
3839
- cov_ms2xfswbr().s[40]++;
4102
+ cov_ms2xfswbr().s[43]++;
3840
4103
  terminal.writeWarningLine(`Error uploading cache entry: ${e}`);
3841
4104
  /* istanbul ignore next */
3842
- cov_ms2xfswbr().s[41]++;
4105
+ cov_ms2xfswbr().s[44]++;
3843
4106
  return false;
3844
4107
  }
3845
4108
  }
3846
4109
  async updateCachedCredentialAsync(terminal, credential) {
3847
4110
  /* istanbul ignore next */
3848
4111
  cov_ms2xfswbr().f[7]++;
3849
- cov_ms2xfswbr().s[42]++;
4112
+ cov_ms2xfswbr().s[45]++;
3850
4113
  await rush_sdk_1.CredentialCache.usingAsync({
3851
4114
  supportEditing: true
3852
4115
  }, async credentialsCache => {
3853
4116
  /* istanbul ignore next */
3854
4117
  cov_ms2xfswbr().f[8]++;
3855
- cov_ms2xfswbr().s[43]++;
4118
+ cov_ms2xfswbr().s[46]++;
3856
4119
  credentialsCache.setCacheEntry(this._credentialCacheId, {
3857
4120
  credential: credential
3858
4121
  });
3859
4122
  /* istanbul ignore next */
3860
- cov_ms2xfswbr().s[44]++;
4123
+ cov_ms2xfswbr().s[47]++;
3861
4124
  await credentialsCache.saveIfModifiedAsync();
3862
4125
  });
3863
4126
  }
3864
4127
  async updateCachedCredentialInteractiveAsync(terminal) {
3865
4128
  /* istanbul ignore next */
3866
4129
  cov_ms2xfswbr().f[9]++;
3867
- cov_ms2xfswbr().s[45]++;
4130
+ cov_ms2xfswbr().s[48]++;
3868
4131
  if (!this._tokenHandler) {
3869
4132
  /* istanbul ignore next */
3870
- cov_ms2xfswbr().b[16][0]++;
3871
- cov_ms2xfswbr().s[46]++;
4133
+ cov_ms2xfswbr().b[18][0]++;
4134
+ cov_ms2xfswbr().s[49]++;
3872
4135
  throw new Error(`The interactive cloud credentials flow is not configured.\n` + `Set the 'tokenHandler' setting in 'common/config/rush-plugins/${this._pluginName}.json' to a command that writes your credentials to standard output and exits with code 0 ` + `or provide your credentials to rush using the --credential flag instead. Credentials must be the ` + `'Authorization' header expected by ${this._url.href}`);
3873
4136
  } else
3874
4137
  /* istanbul ignore next */
3875
4138
  {
3876
- cov_ms2xfswbr().b[16][1]++;
4139
+ cov_ms2xfswbr().b[18][1]++;
3877
4140
  }
3878
4141
  const cmd =
3879
4142
  /* istanbul ignore next */
3880
- (cov_ms2xfswbr().s[47]++, `${this._tokenHandler.exec} ${(
4143
+ (cov_ms2xfswbr().s[50]++, `${this._tokenHandler.exec} ${(
3881
4144
  /* istanbul ignore next */
3882
- (cov_ms2xfswbr().b[17][0]++, this._tokenHandler.args) ||
4145
+ (cov_ms2xfswbr().b[19][0]++, this._tokenHandler.args) ||
3883
4146
  /* istanbul ignore next */
3884
- (cov_ms2xfswbr().b[17][1]++, [])).join(' ')}`);
4147
+ (cov_ms2xfswbr().b[19][1]++, [])).join(' ')}`);
3885
4148
  /* istanbul ignore next */
3886
- cov_ms2xfswbr().s[48]++;
4149
+ cov_ms2xfswbr().s[51]++;
3887
4150
  terminal.writeVerboseLine(`Running '${cmd}' to get credentials`);
3888
4151
  const result =
3889
4152
  /* istanbul ignore next */
3890
- (cov_ms2xfswbr().s[49]++, node_core_library_1.Executable.spawnSync(this._tokenHandler.exec,
4153
+ (cov_ms2xfswbr().s[52]++, node_core_library_1.Executable.spawnSync(this._tokenHandler.exec,
3891
4154
  /* istanbul ignore next */
3892
- (cov_ms2xfswbr().b[18][0]++, this._tokenHandler.args) ||
4155
+ (cov_ms2xfswbr().b[20][0]++, this._tokenHandler.args) ||
3893
4156
  /* istanbul ignore next */
3894
- (cov_ms2xfswbr().b[18][1]++, [])));
4157
+ (cov_ms2xfswbr().b[20][1]++, [])));
3895
4158
  /* istanbul ignore next */
3896
- cov_ms2xfswbr().s[50]++;
4159
+ cov_ms2xfswbr().s[53]++;
3897
4160
  terminal.writeErrorLine(result.stderr);
3898
4161
  /* istanbul ignore next */
3899
- cov_ms2xfswbr().s[51]++;
4162
+ cov_ms2xfswbr().s[54]++;
3900
4163
  if (result.error) {
3901
4164
  /* istanbul ignore next */
3902
- cov_ms2xfswbr().b[19][0]++;
3903
- cov_ms2xfswbr().s[52]++;
4165
+ cov_ms2xfswbr().b[21][0]++;
4166
+ cov_ms2xfswbr().s[55]++;
3904
4167
  throw new Error(`Could not obtain credentials. The command '${cmd}' failed.`);
3905
4168
  } else
3906
4169
  /* istanbul ignore next */
3907
4170
  {
3908
- cov_ms2xfswbr().b[19][1]++;
4171
+ cov_ms2xfswbr().b[21][1]++;
3909
4172
  }
3910
4173
  const credential =
3911
4174
  /* istanbul ignore next */
3912
- (cov_ms2xfswbr().s[53]++, result.stdout.trim());
4175
+ (cov_ms2xfswbr().s[56]++, result.stdout.trim());
3913
4176
  /* istanbul ignore next */
3914
- cov_ms2xfswbr().s[54]++;
4177
+ cov_ms2xfswbr().s[57]++;
3915
4178
  terminal.writeVerboseLine('Got credentials');
3916
4179
  /* istanbul ignore next */
3917
- cov_ms2xfswbr().s[55]++;
4180
+ cov_ms2xfswbr().s[58]++;
3918
4181
  await this.updateCachedCredentialAsync(terminal, credential);
3919
4182
  /* istanbul ignore next */
3920
- cov_ms2xfswbr().s[56]++;
4183
+ cov_ms2xfswbr().s[59]++;
3921
4184
  terminal.writeLine('Updated credentials cache');
3922
4185
  }
3923
4186
  async deleteCachedCredentialsAsync(terminal) {
3924
4187
  /* istanbul ignore next */
3925
4188
  cov_ms2xfswbr().f[10]++;
3926
- cov_ms2xfswbr().s[57]++;
4189
+ cov_ms2xfswbr().s[60]++;
3927
4190
  await rush_sdk_1.CredentialCache.usingAsync({
3928
4191
  supportEditing: true
3929
4192
  }, async credentialsCache => {
3930
4193
  /* istanbul ignore next */
3931
4194
  cov_ms2xfswbr().f[11]++;
3932
- cov_ms2xfswbr().s[58]++;
4195
+ cov_ms2xfswbr().s[61]++;
3933
4196
  credentialsCache.deleteCacheEntry(this._credentialCacheId);
3934
4197
  /* istanbul ignore next */
3935
- cov_ms2xfswbr().s[59]++;
4198
+ cov_ms2xfswbr().s[62]++;
3936
4199
  await credentialsCache.saveIfModifiedAsync();
3937
4200
  });
3938
4201
  }
3939
4202
  get _credentialCacheId() {
3940
4203
  /* istanbul ignore next */
3941
4204
  cov_ms2xfswbr().f[12]++;
3942
- cov_ms2xfswbr().s[60]++;
4205
+ cov_ms2xfswbr().s[63]++;
3943
4206
  if (!this.__credentialCacheId) {
3944
4207
  /* istanbul ignore next */
3945
- cov_ms2xfswbr().b[20][0]++;
4208
+ cov_ms2xfswbr().b[22][0]++;
3946
4209
  const cacheIdParts =
3947
4210
  /* istanbul ignore next */
3948
- (cov_ms2xfswbr().s[61]++, [this._url.href]);
4211
+ (cov_ms2xfswbr().s[64]++, [this._url.href]);
3949
4212
  /* istanbul ignore next */
3950
- cov_ms2xfswbr().s[62]++;
4213
+ cov_ms2xfswbr().s[65]++;
3951
4214
  if (this._isCacheWriteAllowedByConfiguration) {
3952
4215
  /* istanbul ignore next */
3953
- cov_ms2xfswbr().b[21][0]++;
3954
- cov_ms2xfswbr().s[63]++;
4216
+ cov_ms2xfswbr().b[23][0]++;
4217
+ cov_ms2xfswbr().s[66]++;
3955
4218
  cacheIdParts.push('cacheWriteAllowed');
3956
4219
  } else
3957
4220
  /* istanbul ignore next */
3958
4221
  {
3959
- cov_ms2xfswbr().b[21][1]++;
4222
+ cov_ms2xfswbr().b[23][1]++;
3960
4223
  }
3961
- cov_ms2xfswbr().s[64]++;
4224
+ cov_ms2xfswbr().s[67]++;
3962
4225
  this.__credentialCacheId = cacheIdParts.join('|');
3963
4226
  } else
3964
4227
  /* istanbul ignore next */
3965
4228
  {
3966
- cov_ms2xfswbr().b[20][1]++;
4229
+ cov_ms2xfswbr().b[22][1]++;
3967
4230
  }
3968
- cov_ms2xfswbr().s[65]++;
4231
+ cov_ms2xfswbr().s[68]++;
3969
4232
  return this.__credentialCacheId;
3970
4233
  }
3971
4234
  async _http(options) {
@@ -3981,178 +4244,216 @@ class HttpBuildCacheProvider {
3981
4244
  credentialOptions
3982
4245
  } =
3983
4246
  /* istanbul ignore next */
3984
- (cov_ms2xfswbr().s[66]++, options);
4247
+ (cov_ms2xfswbr().s[69]++, options);
3985
4248
  const safeCredentialOptions =
3986
4249
  /* istanbul ignore next */
3987
- (cov_ms2xfswbr().s[67]++,
4250
+ (cov_ms2xfswbr().s[70]++,
3988
4251
  /* istanbul ignore next */
3989
- (cov_ms2xfswbr().b[23][0]++, credentialOptions !== null) &&
4252
+ (cov_ms2xfswbr().b[25][0]++, credentialOptions !== null) &&
3990
4253
  /* istanbul ignore next */
3991
- (cov_ms2xfswbr().b[23][1]++, credentialOptions !== void 0) ?
4254
+ (cov_ms2xfswbr().b[25][1]++, credentialOptions !== void 0) ?
3992
4255
  /* istanbul ignore next */
3993
- (cov_ms2xfswbr().b[22][0]++, credentialOptions) :
4256
+ (cov_ms2xfswbr().b[24][0]++, credentialOptions) :
3994
4257
  /* istanbul ignore next */
3995
- (cov_ms2xfswbr().b[22][1]++, CredentialsOptions.Optional));
4258
+ (cov_ms2xfswbr().b[24][1]++, CredentialsOptions.Optional));
3996
4259
  const credentials =
3997
4260
  /* istanbul ignore next */
3998
- (cov_ms2xfswbr().s[68]++, await this._tryGetCredentials(safeCredentialOptions));
4261
+ (cov_ms2xfswbr().s[71]++, await this._tryGetCredentials(safeCredentialOptions));
3999
4262
  const url =
4000
4263
  /* istanbul ignore next */
4001
- (cov_ms2xfswbr().s[69]++, new URL(relUrl, this._url).href);
4264
+ (cov_ms2xfswbr().s[72]++, new URL(relUrl, this._url).href);
4002
4265
  const headers =
4003
4266
  /* istanbul ignore next */
4004
- (cov_ms2xfswbr().s[70]++, {});
4267
+ (cov_ms2xfswbr().s[73]++, {});
4005
4268
  /* istanbul ignore next */
4006
- cov_ms2xfswbr().s[71]++;
4269
+ cov_ms2xfswbr().s[74]++;
4007
4270
  if (typeof credentials === 'string') {
4008
4271
  /* istanbul ignore next */
4009
- cov_ms2xfswbr().b[24][0]++;
4010
- cov_ms2xfswbr().s[72]++;
4272
+ cov_ms2xfswbr().b[26][0]++;
4273
+ cov_ms2xfswbr().s[75]++;
4011
4274
  headers.Authorization = credentials;
4012
4275
  } else
4013
4276
  /* istanbul ignore next */
4014
4277
  {
4015
- cov_ms2xfswbr().b[24][1]++;
4278
+ cov_ms2xfswbr().b[26][1]++;
4016
4279
  }
4017
- cov_ms2xfswbr().s[73]++;
4280
+ cov_ms2xfswbr().s[76]++;
4018
4281
  for (const [key, value] of Object.entries(this._headers)) {
4019
4282
  /* istanbul ignore next */
4020
- cov_ms2xfswbr().s[74]++;
4283
+ cov_ms2xfswbr().s[77]++;
4021
4284
  if (typeof value === 'string') {
4022
4285
  /* istanbul ignore next */
4023
- cov_ms2xfswbr().b[25][0]++;
4024
- cov_ms2xfswbr().s[75]++;
4286
+ cov_ms2xfswbr().b[27][0]++;
4287
+ cov_ms2xfswbr().s[78]++;
4025
4288
  headers[key] = value;
4026
4289
  } else
4027
4290
  /* istanbul ignore next */
4028
4291
  {
4029
- cov_ms2xfswbr().b[25][1]++;
4292
+ cov_ms2xfswbr().b[27][1]++;
4030
4293
  }
4031
4294
  }
4032
4295
  const bodyLength =
4033
4296
  /* istanbul ignore next */
4034
- (cov_ms2xfswbr().s[76]++,
4297
+ (cov_ms2xfswbr().s[79]++,
4035
4298
  /* istanbul ignore next */
4036
- (cov_ms2xfswbr().b[26][0]++,
4299
+ (cov_ms2xfswbr().b[28][0]++,
4037
4300
  /* istanbul ignore next */
4038
- (cov_ms2xfswbr().b[28][0]++, body === null) ||
4301
+ (cov_ms2xfswbr().b[30][0]++, body === null) ||
4039
4302
  /* istanbul ignore next */
4040
- (cov_ms2xfswbr().b[28][1]++, body === void 0) ?
4303
+ (cov_ms2xfswbr().b[30][1]++, body === void 0) ?
4041
4304
  /* istanbul ignore next */
4042
- (cov_ms2xfswbr().b[27][0]++, void 0) :
4305
+ (cov_ms2xfswbr().b[29][0]++, void 0) :
4043
4306
  /* istanbul ignore next */
4044
- (cov_ms2xfswbr().b[27][1]++, body.length)) ||
4307
+ (cov_ms2xfswbr().b[29][1]++, body.length)) ||
4045
4308
  /* istanbul ignore next */
4046
- (cov_ms2xfswbr().b[26][1]++, 'unknown'));
4309
+ (cov_ms2xfswbr().b[28][1]++, 'unknown'));
4047
4310
  /* istanbul ignore next */
4048
- cov_ms2xfswbr().s[77]++;
4311
+ cov_ms2xfswbr().s[80]++;
4049
4312
  terminal.writeDebugLine(`[http-build-cache] request: ${method} ${url} ${bodyLength} bytes`);
4050
4313
  const response =
4051
4314
  /* istanbul ignore next */
4052
- (cov_ms2xfswbr().s[78]++, await (0, node_fetch_1.default)(url, {
4315
+ (cov_ms2xfswbr().s[81]++, await (0, node_fetch_1.default)(url, {
4053
4316
  method: method,
4054
4317
  headers: headers,
4055
4318
  body: body,
4056
4319
  redirect: 'follow'
4057
4320
  }));
4058
4321
  /* istanbul ignore next */
4059
- cov_ms2xfswbr().s[79]++;
4322
+ cov_ms2xfswbr().s[82]++;
4060
4323
  if (!response.ok) {
4061
4324
  /* istanbul ignore next */
4062
- cov_ms2xfswbr().b[29][0]++;
4063
- cov_ms2xfswbr().s[80]++;
4325
+ cov_ms2xfswbr().b[31][0]++;
4326
+ const isNonCredentialResponse =
4327
+ /* istanbul ignore next */
4328
+ (cov_ms2xfswbr().s[83]++,
4329
+ /* istanbul ignore next */
4330
+ (cov_ms2xfswbr().b[32][0]++, response.status >= 500) &&
4331
+ /* istanbul ignore next */
4332
+ (cov_ms2xfswbr().b[32][1]++, response.status < 600));
4333
+ /* istanbul ignore next */
4334
+ cov_ms2xfswbr().s[84]++;
4064
4335
  if (
4065
4336
  /* istanbul ignore next */
4066
- (cov_ms2xfswbr().b[31][0]++, typeof credentials !== 'string') &&
4337
+ (cov_ms2xfswbr().b[34][0]++, !isNonCredentialResponse) &&
4067
4338
  /* istanbul ignore next */
4068
- (cov_ms2xfswbr().b[31][1]++, safeCredentialOptions === CredentialsOptions.Optional)) {
4339
+ (cov_ms2xfswbr().b[34][1]++, typeof credentials !== 'string') &&
4340
+ /* istanbul ignore next */
4341
+ (cov_ms2xfswbr().b[34][2]++, safeCredentialOptions === CredentialsOptions.Optional)) {
4069
4342
  /* istanbul ignore next */
4070
- cov_ms2xfswbr().b[30][0]++;
4071
- cov_ms2xfswbr().s[81]++;
4072
- // We tried fetching the resource without credentials and that did not work out
4073
- // Try again but require credentials this time
4074
- // This will trigger the provider to request credentials
4343
+ cov_ms2xfswbr().b[33][0]++;
4344
+ cov_ms2xfswbr().s[85]++;
4345
+ // If we don't already have credentials yet, and we got a response from the server
4346
+ // that is a "normal" failure (4xx), then we assume that credentials are probably
4347
+ // required. Re-attempt the request, requiring credentials this time.
4348
+ //
4349
+ // This counts as part of the "first attempt", so it is not included in the max attempts
4075
4350
  return await this._http(Object.assign(Object.assign({}, options), {
4076
4351
  credentialOptions: CredentialsOptions.Required
4077
4352
  }));
4078
4353
  } else
4079
4354
  /* istanbul ignore next */
4080
4355
  {
4081
- cov_ms2xfswbr().b[30][1]++;
4356
+ cov_ms2xfswbr().b[33][1]++;
4357
+ }
4358
+ cov_ms2xfswbr().s[86]++;
4359
+ if (options.maxAttempts > 1) {
4360
+ /* istanbul ignore next */
4361
+ cov_ms2xfswbr().b[35][0]++;
4362
+ // Pause a bit before retrying in case the server is busy
4363
+ // Add some random jitter to the retry so we can spread out load on the remote service
4364
+ // A proper solution might add exponential back off in case the retry count is high (10 or more)
4365
+ const factor =
4366
+ /* istanbul ignore next */
4367
+ (cov_ms2xfswbr().s[87]++, 1.0 + Math.random()); // A random number between 1.0 and 2.0
4368
+ const retryDelay =
4369
+ /* istanbul ignore next */
4370
+ (cov_ms2xfswbr().s[88]++, Math.floor(factor * this._minHttpRetryDelayMs));
4371
+ /* istanbul ignore next */
4372
+ cov_ms2xfswbr().s[89]++;
4373
+ await node_core_library_1.Async.sleep(retryDelay);
4374
+ /* istanbul ignore next */
4375
+ cov_ms2xfswbr().s[90]++;
4376
+ return await this._http(Object.assign(Object.assign({}, options), {
4377
+ maxAttempts: options.maxAttempts - 1
4378
+ }));
4379
+ } else
4380
+ /* istanbul ignore next */
4381
+ {
4382
+ cov_ms2xfswbr().b[35][1]++;
4082
4383
  }
4083
- cov_ms2xfswbr().s[82]++;
4384
+ cov_ms2xfswbr().s[91]++;
4084
4385
  this._reportFailure(terminal, method, response, false, warningText);
4085
4386
  /* istanbul ignore next */
4086
- cov_ms2xfswbr().s[83]++;
4387
+ cov_ms2xfswbr().s[92]++;
4087
4388
  return false;
4088
4389
  } else
4089
4390
  /* istanbul ignore next */
4090
4391
  {
4091
- cov_ms2xfswbr().b[29][1]++;
4392
+ cov_ms2xfswbr().b[31][1]++;
4092
4393
  }
4093
4394
  const result =
4094
4395
  /* istanbul ignore next */
4095
- (cov_ms2xfswbr().s[84]++, readBody ?
4396
+ (cov_ms2xfswbr().s[93]++, readBody ?
4096
4397
  /* istanbul ignore next */
4097
- (cov_ms2xfswbr().b[32][0]++, Buffer.from(await response.arrayBuffer())) :
4398
+ (cov_ms2xfswbr().b[36][0]++, Buffer.from(await response.arrayBuffer())) :
4098
4399
  /* istanbul ignore next */
4099
- (cov_ms2xfswbr().b[32][1]++, true));
4400
+ (cov_ms2xfswbr().b[36][1]++, true));
4100
4401
  /* istanbul ignore next */
4101
- cov_ms2xfswbr().s[85]++;
4402
+ cov_ms2xfswbr().s[94]++;
4102
4403
  terminal.writeDebugLine(`[http-build-cache] actual response: ${response.status} ${url} ${result === true ?
4103
4404
  /* istanbul ignore next */
4104
- (cov_ms2xfswbr().b[33][0]++, 'true') :
4405
+ (cov_ms2xfswbr().b[37][0]++, 'true') :
4105
4406
  /* istanbul ignore next */
4106
- (cov_ms2xfswbr().b[33][1]++, result.length)} bytes`);
4407
+ (cov_ms2xfswbr().b[37][1]++, result.length)} bytes`);
4107
4408
  /* istanbul ignore next */
4108
- cov_ms2xfswbr().s[86]++;
4409
+ cov_ms2xfswbr().s[95]++;
4109
4410
  return result;
4110
4411
  }
4111
4412
  async _tryGetCredentials(options) {
4112
4413
  /* istanbul ignore next */
4113
4414
  cov_ms2xfswbr().f[14]++;
4114
- cov_ms2xfswbr().s[87]++;
4415
+ cov_ms2xfswbr().s[96]++;
4115
4416
  if (options === CredentialsOptions.Omit) {
4116
4417
  /* istanbul ignore next */
4117
- cov_ms2xfswbr().b[34][0]++;
4118
- cov_ms2xfswbr().s[88]++;
4418
+ cov_ms2xfswbr().b[38][0]++;
4419
+ cov_ms2xfswbr().s[97]++;
4119
4420
  return;
4120
4421
  } else
4121
4422
  /* istanbul ignore next */
4122
4423
  {
4123
- cov_ms2xfswbr().b[34][1]++;
4424
+ cov_ms2xfswbr().b[38][1]++;
4124
4425
  }
4125
4426
  let credentials =
4126
4427
  /* istanbul ignore next */
4127
- (cov_ms2xfswbr().s[89]++, this._environmentCredential);
4428
+ (cov_ms2xfswbr().s[98]++, this._environmentCredential);
4128
4429
  /* istanbul ignore next */
4129
- cov_ms2xfswbr().s[90]++;
4430
+ cov_ms2xfswbr().s[99]++;
4130
4431
  if (credentials === undefined) {
4131
4432
  /* istanbul ignore next */
4132
- cov_ms2xfswbr().b[35][0]++;
4133
- cov_ms2xfswbr().s[91]++;
4433
+ cov_ms2xfswbr().b[39][0]++;
4434
+ cov_ms2xfswbr().s[100]++;
4134
4435
  credentials = await this._tryGetCredentialsFromCache();
4135
4436
  } else
4136
4437
  /* istanbul ignore next */
4137
4438
  {
4138
- cov_ms2xfswbr().b[35][1]++;
4439
+ cov_ms2xfswbr().b[39][1]++;
4139
4440
  }
4140
- cov_ms2xfswbr().s[92]++;
4441
+ cov_ms2xfswbr().s[101]++;
4141
4442
  if (
4142
4443
  /* istanbul ignore next */
4143
- (cov_ms2xfswbr().b[37][0]++, typeof credentials !== 'string') &&
4444
+ (cov_ms2xfswbr().b[41][0]++, typeof credentials !== 'string') &&
4144
4445
  /* istanbul ignore next */
4145
- (cov_ms2xfswbr().b[37][1]++, options === CredentialsOptions.Required)) {
4446
+ (cov_ms2xfswbr().b[41][1]++, options === CredentialsOptions.Required)) {
4146
4447
  /* istanbul ignore next */
4147
- cov_ms2xfswbr().b[36][0]++;
4148
- cov_ms2xfswbr().s[93]++;
4448
+ cov_ms2xfswbr().b[40][0]++;
4449
+ cov_ms2xfswbr().s[102]++;
4149
4450
  throw new Error([`Credentials for ${this._url.href} have not been provided.`, `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`, ``, `For local developers, run:`, ``, ` rush update-cloud-credentials --interactive`, ``].join('\n'));
4150
4451
  } else
4151
4452
  /* istanbul ignore next */
4152
4453
  {
4153
- cov_ms2xfswbr().b[36][1]++;
4454
+ cov_ms2xfswbr().b[40][1]++;
4154
4455
  }
4155
- cov_ms2xfswbr().s[94]++;
4456
+ cov_ms2xfswbr().s[103]++;
4156
4457
  return credentials;
4157
4458
  }
4158
4459
  async _tryGetCredentialsFromCache() {
@@ -4161,75 +4462,75 @@ class HttpBuildCacheProvider {
4161
4462
  var _a;
4162
4463
  let cacheEntry;
4163
4464
  /* istanbul ignore next */
4164
- cov_ms2xfswbr().s[95]++;
4465
+ cov_ms2xfswbr().s[104]++;
4165
4466
  await rush_sdk_1.CredentialCache.usingAsync({
4166
4467
  supportEditing: false
4167
4468
  }, credentialsCache => {
4168
4469
  /* istanbul ignore next */
4169
4470
  cov_ms2xfswbr().f[16]++;
4170
- cov_ms2xfswbr().s[96]++;
4471
+ cov_ms2xfswbr().s[105]++;
4171
4472
  cacheEntry = credentialsCache.tryGetCacheEntry(this._credentialCacheId);
4172
4473
  });
4173
4474
  /* istanbul ignore next */
4174
- cov_ms2xfswbr().s[97]++;
4475
+ cov_ms2xfswbr().s[106]++;
4175
4476
  if (cacheEntry) {
4176
4477
  /* istanbul ignore next */
4177
- cov_ms2xfswbr().b[38][0]++;
4478
+ cov_ms2xfswbr().b[42][0]++;
4178
4479
  const expirationTime =
4179
4480
  /* istanbul ignore next */
4180
- (cov_ms2xfswbr().s[98]++,
4481
+ (cov_ms2xfswbr().s[107]++,
4181
4482
  /* istanbul ignore next */
4182
- (cov_ms2xfswbr().b[40][0]++, (_a = cacheEntry.expires) === null) ||
4483
+ (cov_ms2xfswbr().b[44][0]++, (_a = cacheEntry.expires) === null) ||
4183
4484
  /* istanbul ignore next */
4184
- (cov_ms2xfswbr().b[40][1]++, _a === void 0) ?
4485
+ (cov_ms2xfswbr().b[44][1]++, _a === void 0) ?
4185
4486
  /* istanbul ignore next */
4186
- (cov_ms2xfswbr().b[39][0]++, void 0) :
4487
+ (cov_ms2xfswbr().b[43][0]++, void 0) :
4187
4488
  /* istanbul ignore next */
4188
- (cov_ms2xfswbr().b[39][1]++, _a.getTime()));
4489
+ (cov_ms2xfswbr().b[43][1]++, _a.getTime()));
4189
4490
  /* istanbul ignore next */
4190
- cov_ms2xfswbr().s[99]++;
4491
+ cov_ms2xfswbr().s[108]++;
4191
4492
  if (
4192
4493
  /* istanbul ignore next */
4193
- (cov_ms2xfswbr().b[42][0]++, !expirationTime) ||
4494
+ (cov_ms2xfswbr().b[46][0]++, !expirationTime) ||
4194
4495
  /* istanbul ignore next */
4195
- (cov_ms2xfswbr().b[42][1]++, expirationTime >= Date.now())) {
4496
+ (cov_ms2xfswbr().b[46][1]++, expirationTime >= Date.now())) {
4196
4497
  /* istanbul ignore next */
4197
- cov_ms2xfswbr().b[41][0]++;
4198
- cov_ms2xfswbr().s[100]++;
4498
+ cov_ms2xfswbr().b[45][0]++;
4499
+ cov_ms2xfswbr().s[109]++;
4199
4500
  return cacheEntry.credential;
4200
4501
  } else
4201
4502
  /* istanbul ignore next */
4202
4503
  {
4203
- cov_ms2xfswbr().b[41][1]++;
4504
+ cov_ms2xfswbr().b[45][1]++;
4204
4505
  }
4205
4506
  } else
4206
4507
  /* istanbul ignore next */
4207
4508
  {
4208
- cov_ms2xfswbr().b[38][1]++;
4509
+ cov_ms2xfswbr().b[42][1]++;
4209
4510
  }
4210
4511
  }
4211
4512
  _getFailureType(requestMethod, response, isRedirect) {
4212
4513
  /* istanbul ignore next */
4213
4514
  cov_ms2xfswbr().f[17]++;
4214
- cov_ms2xfswbr().s[101]++;
4515
+ cov_ms2xfswbr().s[110]++;
4215
4516
  if (response.ok) {
4216
4517
  /* istanbul ignore next */
4217
- cov_ms2xfswbr().b[43][0]++;
4218
- cov_ms2xfswbr().s[102]++;
4518
+ cov_ms2xfswbr().b[47][0]++;
4519
+ cov_ms2xfswbr().s[111]++;
4219
4520
  return FailureType.None;
4220
4521
  } else
4221
4522
  /* istanbul ignore next */
4222
4523
  {
4223
- cov_ms2xfswbr().b[43][1]++;
4524
+ cov_ms2xfswbr().b[47][1]++;
4224
4525
  }
4225
- cov_ms2xfswbr().s[103]++;
4526
+ cov_ms2xfswbr().s[112]++;
4226
4527
  switch (response.status) {
4227
4528
  case 503:
4228
4529
  /* istanbul ignore next */
4229
- cov_ms2xfswbr().b[44][0]++;
4530
+ cov_ms2xfswbr().b[48][0]++;
4230
4531
  {
4231
4532
  /* istanbul ignore next */
4232
- cov_ms2xfswbr().s[104]++;
4533
+ cov_ms2xfswbr().s[113]++;
4233
4534
  // We select 503 specifically because this represents "service unavailable" and
4234
4535
  // "rate limit throttle" errors, which are transient issues.
4235
4536
  //
@@ -4241,26 +4542,26 @@ class HttpBuildCacheProvider {
4241
4542
  }
4242
4543
  case 401:
4243
4544
  /* istanbul ignore next */
4244
- cov_ms2xfswbr().b[44][1]++;
4545
+ cov_ms2xfswbr().b[48][1]++;
4245
4546
  case 403:
4246
4547
  /* istanbul ignore next */
4247
- cov_ms2xfswbr().b[44][2]++;
4548
+ cov_ms2xfswbr().b[48][2]++;
4248
4549
  case 407:
4249
4550
  /* istanbul ignore next */
4250
- cov_ms2xfswbr().b[44][3]++;
4551
+ cov_ms2xfswbr().b[48][3]++;
4251
4552
  {
4252
4553
  /* istanbul ignore next */
4253
- cov_ms2xfswbr().s[105]++;
4554
+ cov_ms2xfswbr().s[114]++;
4254
4555
  if (
4255
4556
  /* istanbul ignore next */
4256
- (cov_ms2xfswbr().b[46][0]++, requestMethod === 'GET') && (
4557
+ (cov_ms2xfswbr().b[50][0]++, requestMethod === 'GET') && (
4257
4558
  /* istanbul ignore next */
4258
- (cov_ms2xfswbr().b[46][1]++, isRedirect) ||
4559
+ (cov_ms2xfswbr().b[50][1]++, isRedirect) ||
4259
4560
  /* istanbul ignore next */
4260
- (cov_ms2xfswbr().b[46][2]++, response.redirected))) {
4561
+ (cov_ms2xfswbr().b[50][2]++, response.redirected))) {
4261
4562
  /* istanbul ignore next */
4262
- cov_ms2xfswbr().b[45][0]++;
4263
- cov_ms2xfswbr().s[106]++;
4563
+ cov_ms2xfswbr().b[49][0]++;
4564
+ cov_ms2xfswbr().s[115]++;
4264
4565
  // Cache misses for GET requests are not errors
4265
4566
  // This is a workaround behavior where a server can issue a redirect and we fail to authenticate at the new location.
4266
4567
  // We do not want to signal this as an authentication failure because the authorization header is not passed on to redirects.
@@ -4272,96 +4573,96 @@ class HttpBuildCacheProvider {
4272
4573
  } else
4273
4574
  /* istanbul ignore next */
4274
4575
  {
4275
- cov_ms2xfswbr().b[45][1]++;
4576
+ cov_ms2xfswbr().b[49][1]++;
4276
4577
  }
4277
- cov_ms2xfswbr().s[107]++;
4578
+ cov_ms2xfswbr().s[116]++;
4278
4579
  return FailureType.Authentication;
4279
4580
  }
4280
4581
  case 404:
4281
4582
  /* istanbul ignore next */
4282
- cov_ms2xfswbr().b[44][4]++;
4583
+ cov_ms2xfswbr().b[48][4]++;
4283
4584
  {
4284
4585
  /* istanbul ignore next */
4285
- cov_ms2xfswbr().s[108]++;
4586
+ cov_ms2xfswbr().s[117]++;
4286
4587
  if (requestMethod === 'GET') {
4287
4588
  /* istanbul ignore next */
4288
- cov_ms2xfswbr().b[47][0]++;
4289
- cov_ms2xfswbr().s[109]++;
4589
+ cov_ms2xfswbr().b[51][0]++;
4590
+ cov_ms2xfswbr().s[118]++;
4290
4591
  // Cache misses for GET requests are not errors
4291
4592
  return FailureType.None;
4292
4593
  } else
4293
4594
  /* istanbul ignore next */
4294
4595
  {
4295
- cov_ms2xfswbr().b[47][1]++;
4596
+ cov_ms2xfswbr().b[51][1]++;
4296
4597
  }
4297
4598
  }
4298
4599
  }
4299
4600
  // Let dev builds succeed, let Prod builds fail
4300
4601
  /* istanbul ignore next */
4301
- cov_ms2xfswbr().s[110]++;
4602
+ cov_ms2xfswbr().s[119]++;
4302
4603
  return FailureType.Warning;
4303
4604
  }
4304
4605
  _reportFailure(terminal, requestMethod, response, isRedirect, message) {
4305
4606
  /* istanbul ignore next */
4306
4607
  cov_ms2xfswbr().f[18]++;
4307
- cov_ms2xfswbr().s[111]++;
4608
+ cov_ms2xfswbr().s[120]++;
4308
4609
  switch (this._getFailureType(requestMethod, response, isRedirect)) {
4309
4610
  default:
4310
4611
  /* istanbul ignore next */
4311
- cov_ms2xfswbr().b[48][0]++;
4612
+ cov_ms2xfswbr().b[52][0]++;
4312
4613
  {
4313
4614
  /* istanbul ignore next */
4314
- cov_ms2xfswbr().s[112]++;
4615
+ cov_ms2xfswbr().s[121]++;
4315
4616
  terminal.writeErrorLine(`${message}: HTTP ${response.status}: ${response.statusText}`);
4316
4617
  /* istanbul ignore next */
4317
- cov_ms2xfswbr().s[113]++;
4618
+ cov_ms2xfswbr().s[122]++;
4318
4619
  break;
4319
4620
  }
4320
4621
  case FailureType.Warning:
4321
4622
  /* istanbul ignore next */
4322
- cov_ms2xfswbr().b[48][1]++;
4623
+ cov_ms2xfswbr().b[52][1]++;
4323
4624
  {
4324
4625
  /* istanbul ignore next */
4325
- cov_ms2xfswbr().s[114]++;
4626
+ cov_ms2xfswbr().s[123]++;
4326
4627
  terminal.writeWarningLine(`${message}: HTTP ${response.status}: ${response.statusText}`);
4327
4628
  /* istanbul ignore next */
4328
- cov_ms2xfswbr().s[115]++;
4629
+ cov_ms2xfswbr().s[124]++;
4329
4630
  break;
4330
4631
  }
4331
4632
  case FailureType.Informational:
4332
4633
  /* istanbul ignore next */
4333
- cov_ms2xfswbr().b[48][2]++;
4634
+ cov_ms2xfswbr().b[52][2]++;
4334
4635
  {
4335
4636
  /* istanbul ignore next */
4336
- cov_ms2xfswbr().s[116]++;
4637
+ cov_ms2xfswbr().s[125]++;
4337
4638
  terminal.writeLine(`${message}: HTTP ${response.status}: ${response.statusText}`);
4338
4639
  /* istanbul ignore next */
4339
- cov_ms2xfswbr().s[117]++;
4640
+ cov_ms2xfswbr().s[126]++;
4340
4641
  break;
4341
4642
  }
4342
4643
  case FailureType.None:
4343
4644
  /* istanbul ignore next */
4344
- cov_ms2xfswbr().b[48][3]++;
4645
+ cov_ms2xfswbr().b[52][3]++;
4345
4646
  {
4346
4647
  /* istanbul ignore next */
4347
- cov_ms2xfswbr().s[118]++;
4648
+ cov_ms2xfswbr().s[127]++;
4348
4649
  terminal.writeDebugLine(`${message}: HTTP ${response.status}: ${response.statusText}`);
4349
4650
  /* istanbul ignore next */
4350
- cov_ms2xfswbr().s[119]++;
4651
+ cov_ms2xfswbr().s[128]++;
4351
4652
  break;
4352
4653
  }
4353
4654
  case FailureType.Authentication:
4354
4655
  /* istanbul ignore next */
4355
- cov_ms2xfswbr().b[48][4]++;
4656
+ cov_ms2xfswbr().b[52][4]++;
4356
4657
  {
4357
4658
  /* istanbul ignore next */
4358
- cov_ms2xfswbr().s[120]++;
4659
+ cov_ms2xfswbr().s[129]++;
4359
4660
  throw new Error([`${this._url.href} responded with ${response.status}: ${response.statusText}.`, `Credentials may be misconfigured or have expired.`, `In CI, verify that RUSH_BUILD_CACHE_CREDENTIAL contains a valid Authorization header value.`, ``, `For local developers, run:`, ``, ` rush update-cloud-credentials --interactive`, ``].join('\n'));
4360
4661
  }
4361
4662
  }
4362
4663
  }
4363
4664
  }
4364
4665
  /* istanbul ignore next */
4365
- cov_ms2xfswbr().s[121]++;
4666
+ cov_ms2xfswbr().s[130]++;
4366
4667
  exports.HttpBuildCacheProvider = HttpBuildCacheProvider;
4367
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QWMsQ0FBQyxHQUFHa0UsT0FBTyxVQUFVekIsUUFBUSxDQUFDTyxNQUFNLEtBQUtQLFFBQVEsQ0FBQzBCLFVBQVUsRUFBRSxDQUFDO1VBQUM7VUFBQW5IO1VBQ3ZGOztNQUdGLEtBQUtFLFdBQVcsQ0FBQzhHLGNBQWM7UUFBQTtRQUFBaEg7UUFBRTtVQUFBO1VBQUFBO1VBQy9CLE1BQU0sSUFBSTBELEtBQUssQ0FDYixDQUNFLEdBQUcsSUFBSSxDQUFDekMsSUFBSSxDQUFDMEMsSUFBSSxtQkFBbUI4QixRQUFRLENBQUNPLE1BQU0sS0FBS1AsUUFBUSxDQUFDMEIsVUFBVSxHQUFHLEVBQzlFLG1EQUFtRCxFQUNuRCw2RkFBNkYsRUFDN0YsRUFBRSxFQUNGLDRCQUE0QixFQUM1QixFQUFFLEVBQ0YsaURBQWlELEVBQ2pELEVBQUUsQ0FDSCxDQUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiOztJQUNGO0VBRUw7O0FBQ0Q7QUFBQS9EO0FBL1ZEb0giLCJuYW1lcyI6WyJjb3ZfbXMyeGZzd2JyIiwiQ3JlZGVudGlhbHNPcHRpb25zIiwiRmFpbHVyZVR5cGUiLCJIdHRwQnVpbGRDYWNoZVByb3ZpZGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicnVzaFNlc3Npb24iLCJfcGx1Z2luTmFtZSIsInBsdWdpbk5hbWUiLCJfcnVzaFNlc3Npb24iLCJfcnVzaFByb2plY3RSb290IiwicnVzaFByb2plY3RSb290IiwiX2Vudmlyb25tZW50Q3JlZGVudGlhbCIsInJ1c2hfc2RrXzEiLCJidWlsZENhY2hlQ3JlZGVudGlhbCIsIl9pc0NhY2hlV3JpdGVBbGxvd2VkQnlDb25maWd1cmF0aW9uIiwiaXNDYWNoZVdyaXRlQWxsb3dlZCIsIl91cmwiLCJVUkwiLCJ1cmwiLCJlbmRzV2l0aCIsIl91cGxvYWRNZXRob2QiLCJ1cGxvYWRNZXRob2QiLCJfaGVhZGVycyIsImhlYWRlcnMiLCJfdG9rZW5IYW5kbGVyIiwidG9rZW5IYW5kbGVyIiwiX2NhY2hlS2V5UHJlZml4IiwiY2FjaGVLZXlQcmVmaXgiLCJidWlsZENhY2hlV3JpdGVBbGxvd2VkIiwidHJ5R2V0Q2FjaGVFbnRyeUJ1ZmZlckJ5SWRBc3luYyIsInRlcm1pbmFsIiwiY2FjaGVJZCIsInJlc3VsdCIsIl9odHRwIiwicmVsVXJsIiwibWV0aG9kIiwiYm9keSIsInVuZGVmaW5lZCIsIndhcm5pbmdUZXh0IiwicmVhZEJvZHkiLCJCdWZmZXIiLCJpc0J1ZmZlciIsImUiLCJ3cml0ZVdhcm5pbmdMaW5lIiwidHJ5U2V0Q2FjaGVFbnRyeUJ1ZmZlckFzeW5jIiwib2JqZWN0QnVmZmVyIiwid3JpdGVFcnJvckxpbmUiLCJ3cml0ZURlYnVnTGluZSIsInVwZGF0ZUNhY2hlZENyZWRlbnRpYWxBc3luYyIsImNyZWRlbnRpYWwiLCJ1c2luZ0FzeW5jIiwic3VwcG9ydEVkaXRpbmciLCJjcmVkZW50aWFsc0NhY2hlIiwic2V0Q2FjaGVFbnRyeSIsIl9jcmVkZW50aWFsQ2FjaGVJZCIsInNhdmVJZk1vZGlmaWVkQXN5bmMiLCJ1cGRhdGVDYWNoZWRDcmVkZW50aWFsSW50ZXJhY3RpdmVBc3luYyIsIkVycm9yIiwiaHJlZiIsImNtZCIsImV4ZWMiLCJhcmdzIiwiam9pbiIsIndyaXRlVmVyYm9zZUxpbmUiLCJub2RlX2NvcmVfbGlicmFyeV8xIiwic3Bhd25TeW5jIiwic3RkZXJyIiwiZXJyb3IiLCJzdGRvdXQiLCJ0cmltIiwid3JpdGVMaW5lIiwiZGVsZXRlQ2FjaGVkQ3JlZGVudGlhbHNBc3luYyIsImRlbGV0ZUNhY2hlRW50cnkiLCJfX2NyZWRlbnRpYWxDYWNoZUlkIiwiY2FjaGVJZFBhcnRzIiwicHVzaCIsImNyZWRlbnRpYWxPcHRpb25zIiwic2FmZUNyZWRlbnRpYWxPcHRpb25zIiwiT3B0aW9uYWwiLCJjcmVkZW50aWFscyIsIl90cnlHZXRDcmVkZW50aWFscyIsIkF1dGhvcml6YXRpb24iLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJib2R5TGVuZ3RoIiwibGVuZ3RoIiwicmVzcG9uc2UiLCJyZWRpcmVjdCIsIm9rIiwiUmVxdWlyZWQiLCJfcmVwb3J0RmFpbHVyZSIsImZyb20iLCJhcnJheUJ1ZmZlciIsInN0YXR1cyIsIk9taXQiLCJfdHJ5R2V0Q3JlZGVudGlhbHNGcm9tQ2FjaGUiLCJjYWNoZUVudHJ5IiwidHJ5R2V0Q2FjaGVFbnRyeSIsImV4cGlyYXRpb25UaW1lIiwiZXhwaXJlcyIsImdldFRpbWUiLCJEYXRlIiwibm93IiwiX2dldEZhaWx1cmVUeXBlIiwicmVxdWVzdE1ldGhvZCIsImlzUmVkaXJlY3QiLCJOb25lIiwiSW5mb3JtYXRpb25hbCIsInJlZGlyZWN0ZWQiLCJBdXRoZW50aWNhdGlvbiIsIldhcm5pbmciLCJtZXNzYWdlIiwic3RhdHVzVGV4dCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIvaG9tZS92c3RzL3dvcmsvMS9zL3J1c2gtcGx1Z2lucy9ydXNoLWh0dHAtYnVpbGQtY2FjaGUtcGx1Z2luL3NyYy9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUZXJtaW5hbCwgRXhlY3V0YWJsZSB9IGZyb20gJ0BydXNoc3RhY2svbm9kZS1jb3JlLWxpYnJhcnknO1xuaW1wb3J0IHtcbiAgSUNsb3VkQnVpbGRDYWNoZVByb3ZpZGVyLFxuICBJQ3JlZGVudGlhbENhY2hlRW50cnksXG4gIENyZWRlbnRpYWxDYWNoZSxcbiAgUnVzaFNlc3Npb24sXG4gIEVudmlyb25tZW50Q29uZmlndXJhdGlvblxufSBmcm9tICdAcnVzaHN0YWNrL3J1c2gtc2RrJztcbmltcG9ydCBmZXRjaCwgeyBCb2R5SW5pdCwgUmVzcG9uc2UgfSBmcm9tICdub2RlLWZldGNoJztcblxuZW51bSBDcmVkZW50aWFsc09wdGlvbnMge1xuICBPcHRpb25hbCxcbiAgUmVxdWlyZWQsXG4gIE9taXRcbn1cblxuZW51bSBGYWlsdXJlVHlwZSB7XG4gIE5vbmUsXG4gIEluZm9ybWF0aW9uYWwsXG4gIFdhcm5pbmcsXG4gIEVycm9yLFxuICBBdXRoZW50aWNhdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElIdHRwQnVpbGRDYWNoZVRva2VuSGFuZGxlciB7XG4gIGV4ZWM6IHN0cmluZztcbiAgYXJncz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSHR0cEJ1aWxkQ2FjaGVQcm92aWRlck9wdGlvbnMge1xuICB1cmw6IHN0cmluZztcbiAgdG9rZW5IYW5kbGVyPzogSUh0dHBCdWlsZENhY2hlVG9rZW5IYW5kbGVyO1xuICB1cGxvYWRNZXRob2Q/OiBzdHJpbmc7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBjYWNoZUtleVByZWZpeD86IHN0cmluZztcbiAgaXNDYWNoZVdyaXRlQWxsb3dlZDogYm9vbGVhbjtcbiAgcGx1Z2luTmFtZTogc3RyaW5nO1xuICBydXNoUHJvamVjdFJvb3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBCdWlsZENhY2hlUHJvdmlkZXIgaW1wbGVtZW50cyBJQ2xvdWRCdWlsZENhY2hlUHJvdmlkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9wbHVnaW5OYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J1c2hTZXNzaW9uOiBSdXNoU2Vzc2lvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcnVzaFByb2plY3RSb290OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Vudmlyb25tZW50Q3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0NhY2hlV3JpdGVBbGxvd2VkQnlDb25maWd1cmF0aW9uOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF91cmw6IFVSTDtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXBsb2FkTWV0aG9kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2hlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NhY2hlS2V5UHJlZml4OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuSGFuZGxlcjogSUh0dHBCdWlsZENhY2hlVG9rZW5IYW5kbGVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9fY3JlZGVudGlhbENhY2hlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZ2V0IGlzQ2FjaGVXcml0ZUFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Q29uZmlndXJhdGlvbi5idWlsZENhY2hlV3JpdGVBbGxvd2VkID8/IHRoaXMuX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogSUh0dHBCdWlsZENhY2hlUHJvdmlkZXJPcHRpb25zLCBydXNoU2Vzc2lvbjogUnVzaFNlc3Npb24pIHtcbiAgICB0aGlzLl9wbHVnaW5OYW1lID0gb3B0aW9ucy5wbHVnaW5OYW1lO1xuICAgIHRoaXMuX3J1c2hTZXNzaW9uID0gcnVzaFNlc3Npb247XG4gICAgdGhpcy5fcnVzaFByb2plY3RSb290ID0gb3B0aW9ucy5ydXNoUHJvamVjdFJvb3Q7XG5cbiAgICB0aGlzLl9lbnZpcm9ubWVudENyZWRlbnRpYWwgPSBFbnZpcm9ubWVudENvbmZpZ3VyYXRpb24uYnVpbGRDYWNoZUNyZWRlbnRpYWw7XG4gICAgdGhpcy5faXNDYWNoZVdyaXRlQWxsb3dlZEJ5Q29uZmlndXJhdGlvbiA9IG9wdGlvbnMuaXNDYWNoZVdyaXRlQWxsb3dlZDtcbiAgICB0aGlzLl91cmwgPSBuZXcgVVJMKG9wdGlvbnMudXJsLmVuZHNXaXRoKCcvJykgPyBvcHRpb25zLnVybCA6IG9wdGlvbnMudXJsICsgJy8nKTtcbiAgICB0aGlzLl91cGxvYWRNZXRob2QgPSBvcHRpb25zLnVwbG9hZE1ldGhvZCA/PyAnUFVUJztcbiAgICB0aGlzLl9oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgIHRoaXMuX3Rva2VuSGFuZGxlciA9IG9wdGlvbnMudG9rZW5IYW5kbGVyO1xuICAgIHRoaXMuX2NhY2hlS2V5UHJlZml4ID0gb3B0aW9ucy5jYWNoZUtleVByZWZpeCA/PyAnJztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB0cnlHZXRDYWNoZUVudHJ5QnVmZmVyQnlJZEFzeW5jKFxuICAgIHRlcm1pbmFsOiBJVGVybWluYWwsXG4gICAgY2FjaGVJZDogc3RyaW5nXG4gICk6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2h0dHAoe1xuICAgICAgICB0ZXJtaW5hbDogdGVybWluYWwsXG4gICAgICAgIHJlbFVybDogYCR7dGhpcy5fY2FjaGVLZXlQcmVmaXh9JHtjYWNoZUlkfWAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGJvZHk6IHVuZGVmaW5lZCxcbiAgICAgICAgd2FybmluZ1RleHQ6ICdDb3VsZCBub3QgZ2V0IGNhY2hlIGVudHJ5JyxcbiAgICAgICAgcmVhZEJvZHk6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHJlc3VsdCkgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGVybWluYWwud3JpdGVXYXJuaW5nTGluZShgRXJyb3IgZ2V0dGluZyBjYWNoZSBlbnRyeTogJHtlfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdHJ5U2V0Q2FjaGVFbnRyeUJ1ZmZlckFzeW5jKFxuICAgIHRlcm1pbmFsOiBJVGVybWluYWwsXG4gICAgY2FjaGVJZDogc3RyaW5nLFxuICAgIG9iamVjdEJ1ZmZlcjogQnVmZmVyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pc0NhY2hlV3JpdGVBbGxvd2VkKSB7XG4gICAgICB0ZXJtaW5hbC53cml0ZUVycm9yTGluZSgnV3JpdGluZyB0byBjYWNoZSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKCdVcGxvYWRpbmcgb2JqZWN0IHdpdGggY2FjaGVJZDogJywgY2FjaGVJZCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faHR0cCh7XG4gICAgICAgIHRlcm1pbmFsOiB0ZXJtaW5hbCxcbiAgICAgICAgcmVsVXJsOiBgJHt0aGlzLl9jYWNoZUtleVByZWZpeH0ke2NhY2hlSWR9YCxcbiAgICAgICAgbWV0aG9kOiB0aGlzLl91cGxvYWRNZXRob2QsXG4gICAgICAgIGJvZHk6IG9iamVjdEJ1ZmZlcixcbiAgICAgICAgd2FybmluZ1RleHQ6ICdDb3VsZCBub3Qgd3JpdGUgY2FjaGUgZW50cnknLFxuICAgICAgICByZWFkQm9keTogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0ICE9PSBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0ZXJtaW5hbC53cml0ZVdhcm5pbmdMaW5lKGBFcnJvciB1cGxvYWRpbmcgY2FjaGUgZW50cnk6ICR7ZX1gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBkYXRlQ2FjaGVkQ3JlZGVudGlhbEFzeW5jKHRlcm1pbmFsOiBJVGVybWluYWwsIGNyZWRlbnRpYWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IENyZWRlbnRpYWxDYWNoZS51c2luZ0FzeW5jKFxuICAgICAge1xuICAgICAgICBzdXBwb3J0RWRpdGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGFzeW5jIChjcmVkZW50aWFsc0NhY2hlOiBDcmVkZW50aWFsQ2FjaGUpID0+IHtcbiAgICAgICAgY3JlZGVudGlhbHNDYWNoZS5zZXRDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkLCB7XG4gICAgICAgICAgY3JlZGVudGlhbDogY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgY3JlZGVudGlhbHNDYWNoZS5zYXZlSWZNb2RpZmllZEFzeW5jKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDYWNoZWRDcmVkZW50aWFsSW50ZXJhY3RpdmVBc3luYyh0ZXJtaW5hbDogSVRlcm1pbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLl90b2tlbkhhbmRsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBpbnRlcmFjdGl2ZSBjbG91ZCBjcmVkZW50aWFscyBmbG93IGlzIG5vdCBjb25maWd1cmVkLlxcbmAgK1xuICAgICAgICAgIGBTZXQgdGhlICd0b2tlbkhhbmRsZXInIHNldHRpbmcgaW4gJ2NvbW1vbi9jb25maWcvcnVzaC1wbHVnaW5zLyR7dGhpcy5fcGx1Z2luTmFtZX0uanNvbicgdG8gYSBjb21tYW5kIHRoYXQgd3JpdGVzIHlvdXIgY3JlZGVudGlhbHMgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0cyB3aXRoIGNvZGUgMCBgICtcbiAgICAgICAgICBgb3IgcHJvdmlkZSB5b3VyIGNyZWRlbnRpYWxzIHRvIHJ1c2ggdXNpbmcgdGhlIC0tY3JlZGVudGlhbCBmbGFnIGluc3RlYWQuIENyZWRlbnRpYWxzIG11c3QgYmUgdGhlIGAgK1xuICAgICAgICAgIGAnQXV0aG9yaXphdGlvbicgaGVhZGVyIGV4cGVjdGVkIGJ5ICR7dGhpcy5fdXJsLmhyZWZ9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbWQ6IHN0cmluZyA9IGAke3RoaXMuX3Rva2VuSGFuZGxlci5leGVjfSAkeyh0aGlzLl90b2tlbkhhbmRsZXIuYXJncyB8fCBbXSkuam9pbignICcpfWA7XG4gICAgdGVybWluYWwud3JpdGVWZXJib3NlTGluZShgUnVubmluZyAnJHtjbWR9JyB0byBnZXQgY3JlZGVudGlhbHNgKTtcbiAgICBjb25zdCByZXN1bHQgPSBFeGVjdXRhYmxlLnNwYXduU3luYyh0aGlzLl90b2tlbkhhbmRsZXIuZXhlYywgdGhpcy5fdG9rZW5IYW5kbGVyLmFyZ3MgfHwgW10pO1xuXG4gICAgdGVybWluYWwud3JpdGVFcnJvckxpbmUocmVzdWx0LnN0ZGVycik7XG5cbiAgICBpZiAocmVzdWx0LmVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBvYnRhaW4gY3JlZGVudGlhbHMuIFRoZSBjb21tYW5kICcke2NtZH0nIGZhaWxlZC5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcmVkZW50aWFsID0gcmVzdWx0LnN0ZG91dC50cmltKCk7XG4gICAgdGVybWluYWwud3JpdGVWZXJib3NlTGluZSgnR290IGNyZWRlbnRpYWxzJyk7XG5cbiAgICBhd2FpdCB0aGlzLnVwZGF0ZUNhY2hlZENyZWRlbnRpYWxBc3luYyh0ZXJtaW5hbCwgY3JlZGVudGlhbCk7XG5cbiAgICB0ZXJtaW5hbC53cml0ZUxpbmUoJ1VwZGF0ZWQgY3JlZGVudGlhbHMgY2FjaGUnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVDYWNoZWRDcmVkZW50aWFsc0FzeW5jKHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBDcmVkZW50aWFsQ2FjaGUudXNpbmdBc3luYyhcbiAgICAgIHtcbiAgICAgICAgc3VwcG9ydEVkaXRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBhc3luYyAoY3JlZGVudGlhbHNDYWNoZTogQ3JlZGVudGlhbENhY2hlKSA9PiB7XG4gICAgICAgIGNyZWRlbnRpYWxzQ2FjaGUuZGVsZXRlQ2FjaGVFbnRyeSh0aGlzLl9jcmVkZW50aWFsQ2FjaGVJZCk7XG4gICAgICAgIGF3YWl0IGNyZWRlbnRpYWxzQ2FjaGUuc2F2ZUlmTW9kaWZpZWRBc3luYygpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfY3JlZGVudGlhbENhY2hlSWQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX19jcmVkZW50aWFsQ2FjaGVJZCkge1xuICAgICAgY29uc3QgY2FjaGVJZFBhcnRzOiBzdHJpbmdbXSA9IFt0aGlzLl91cmwuaHJlZl07XG5cbiAgICAgIGlmICh0aGlzLl9pc0NhY2hlV3JpdGVBbGxvd2VkQnlDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNhY2hlSWRQYXJ0cy5wdXNoKCdjYWNoZVdyaXRlQWxsb3dlZCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9fY3JlZGVudGlhbENhY2hlSWQgPSBjYWNoZUlkUGFydHMuam9pbignfCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fY3JlZGVudGlhbENhY2hlSWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9odHRwKG9wdGlvbnM6IHtcbiAgICB0ZXJtaW5hbDogSVRlcm1pbmFsO1xuICAgIHJlbFVybDogc3RyaW5nO1xuICAgIG1ldGhvZDogc3RyaW5nO1xuICAgIGJvZHk6IEJvZHlJbml0IHwgdW5kZWZpbmVkO1xuICAgIHdhcm5pbmdUZXh0OiBzdHJpbmc7XG4gICAgcmVhZEJvZHk6IGJvb2xlYW47XG4gICAgY3JlZGVudGlhbE9wdGlvbnM/OiBDcmVkZW50aWFsc09wdGlvbnM7XG4gIH0pOiBQcm9taXNlPEJ1ZmZlciB8IGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHRlcm1pbmFsLCByZWxVcmwsIG1ldGhvZCwgYm9keSwgd2FybmluZ1RleHQsIHJlYWRCb2R5LCBjcmVkZW50aWFsT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBzYWZlQ3JlZGVudGlhbE9wdGlvbnMgPSBjcmVkZW50aWFsT3B0aW9ucyA/PyBDcmVkZW50aWFsc09wdGlvbnMuT3B0aW9uYWw7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLl90cnlHZXRDcmVkZW50aWFscyhzYWZlQ3JlZGVudGlhbE9wdGlvbnMpO1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVsVXJsLCB0aGlzLl91cmwpLmhyZWY7XG5cbiAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgaWYgKHR5cGVvZiBjcmVkZW50aWFscyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhlYWRlcnMuQXV0aG9yaXphdGlvbiA9IGNyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2hlYWRlcnMpKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBib2R5TGVuZ3RoID0gKGJvZHkgYXMgeyBsZW5ndGg6IG51bWJlciB9KT8ubGVuZ3RoIHx8ICd1bmtub3duJztcblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKGBbaHR0cC1idWlsZC1jYWNoZV0gcmVxdWVzdDogJHttZXRob2R9ICR7dXJsfSAke2JvZHlMZW5ndGh9IGJ5dGVzYCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYm9keTogYm9keSxcbiAgICAgIHJlZGlyZWN0OiAnZm9sbG93J1xuICAgIH0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgaWYgKHR5cGVvZiBjcmVkZW50aWFscyAhPT0gJ3N0cmluZycgJiYgc2FmZUNyZWRlbnRpYWxPcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuT3B0aW9uYWwpIHtcbiAgICAgICAgLy8gV2UgdHJpZWQgZmV0Y2hpbmcgdGhlIHJlc291cmNlIHdpdGhvdXQgY3JlZGVudGlhbHMgYW5kIHRoYXQgZGlkIG5vdCB3b3JrIG91dFxuICAgICAgICAvLyBUcnkgYWdhaW4gYnV0IHJlcXVpcmUgY3JlZGVudGlhbHMgdGhpcyB0aW1lXG4gICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBwcm92aWRlciB0byByZXF1ZXN0IGNyZWRlbnRpYWxzXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9odHRwKHsgLi4ub3B0aW9ucywgY3JlZGVudGlhbE9wdGlvbnM6IENyZWRlbnRpYWxzT3B0aW9ucy5SZXF1aXJlZCB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVwb3J0RmFpbHVyZSh0ZXJtaW5hbCwgbWV0aG9kLCByZXNwb25zZSwgZmFsc2UsIHdhcm5pbmdUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IEJ1ZmZlciB8IGJvb2xlYW4gPSByZWFkQm9keSA/IEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpIDogdHJ1ZTtcblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKFxuICAgICAgYFtodHRwLWJ1aWxkLWNhY2hlXSBhY3R1YWwgcmVzcG9uc2U6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3VybH0gJHtcbiAgICAgICAgcmVzdWx0ID09PSB0cnVlID8gJ3RydWUnIDogcmVzdWx0Lmxlbmd0aFxuICAgICAgfSBieXRlc2BcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3RyeUdldENyZWRlbnRpYWxzKG9wdGlvbnM6IENyZWRlbnRpYWxzT3B0aW9ucy5SZXF1aXJlZCk6IFByb21pc2U8c3RyaW5nPjtcbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zLk9wdGlvbmFsKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMuT21pdCk6IFByb21pc2U8dW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmIChvcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuT21pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjcmVkZW50aWFsczogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5fZW52aXJvbm1lbnRDcmVkZW50aWFsO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5fdHJ5R2V0Q3JlZGVudGlhbHNGcm9tQ2FjaGUoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNyZWRlbnRpYWxzICE9PSAnc3RyaW5nJyAmJiBvcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuUmVxdWlyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgW1xuICAgICAgICAgIGBDcmVkZW50aWFscyBmb3IgJHt0aGlzLl91cmwuaHJlZn0gaGF2ZSBub3QgYmVlbiBwcm92aWRlZC5gLFxuICAgICAgICAgIGBJbiBDSSwgdmVyaWZ5IHRoYXQgUlVTSF9CVUlMRF9DQUNIRV9DUkVERU5USUFMIGNvbnRhaW5zIGEgdmFsaWQgQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUuYCxcbiAgICAgICAgICBgYCxcbiAgICAgICAgICBgRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpgLFxuICAgICAgICAgIGBgLFxuICAgICAgICAgIGAgICAgcnVzaCB1cGRhdGUtY2xvdWQtY3JlZGVudGlhbHMgLS1pbnRlcmFjdGl2ZWAsXG4gICAgICAgICAgYGBcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFsc0Zyb21DYWNoZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBjYWNoZUVudHJ5OiBJQ3JlZGVudGlhbENhY2hlRW50cnkgfCB1bmRlZmluZWQ7XG5cbiAgICBhd2FpdCBDcmVkZW50aWFsQ2FjaGUudXNpbmdBc3luYyhcbiAgICAgIHtcbiAgICAgICAgc3VwcG9ydEVkaXRpbmc6IGZhbHNlXG4gICAgICB9LFxuICAgICAgKGNyZWRlbnRpYWxzQ2FjaGU6IENyZWRlbnRpYWxDYWNoZSkgPT4ge1xuICAgICAgICBjYWNoZUVudHJ5ID0gY3JlZGVudGlhbHNDYWNoZS50cnlHZXRDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGNhY2hlRW50cnkpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb25UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQgPSBjYWNoZUVudHJ5LmV4cGlyZXM/LmdldFRpbWUoKTtcbiAgICAgIGlmICghZXhwaXJhdGlvblRpbWUgfHwgZXhwaXJhdGlvblRpbWUgPj0gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXR1cm4gY2FjaGVFbnRyeS5jcmVkZW50aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldEZhaWx1cmVUeXBlKHJlcXVlc3RNZXRob2Q6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlLCBpc1JlZGlyZWN0OiBib29sZWFuKTogRmFpbHVyZVR5cGUge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLk5vbmU7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgNTAzOiB7XG4gICAgICAgIC8vIFdlIHNlbGVjdCA1MDMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhpcyByZXByZXNlbnRzIFwic2VydmljZSB1bmF2YWlsYWJsZVwiIGFuZFxuICAgICAgICAvLyBcInJhdGUgbGltaXQgdGhyb3R0bGVcIiBlcnJvcnMsIHdoaWNoIGFyZSB0cmFuc2llbnQgaXNzdWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVyZSBhcmUgb3RoZXIgNXh4IGVycm9ycywgc3VjaCBhcyA1MDEsIHRoYXQgY2FuIG9jY3VyIGlmIHRoZSByZXF1ZXN0IGlzXG4gICAgICAgIC8vIG1hbGZvcm1lZCwgc28gYXMgYSBnZW5lcmFsIHJ1bGUgd2Ugd2FudCB0byBsZXQgdGhyb3VnaCBvdGhlciA1eHggZXJyb3JzXG4gICAgICAgIC8vIHNvIHRoZSB1c2VyIGNhbiB0cm91Ymxlc2hvb3QuXG5cbiAgICAgICAgLy8gRG9uJ3QgZmFpbCBwcm9kdWN0aW9uIGJ1aWxkcyB3aXRoIHdhcm5pbmdzIGZvciB0cmFuc2llbnQgaXNzdWVzXG4gICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5JbmZvcm1hdGlvbmFsO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDQwMTpcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgY2FzZSA0MDc6IHtcbiAgICAgICAgaWYgKHJlcXVlc3RNZXRob2QgPT09ICdHRVQnICYmIChpc1JlZGlyZWN0IHx8IHJlc3BvbnNlLnJlZGlyZWN0ZWQpKSB7XG4gICAgICAgICAgLy8gQ2FjaGUgbWlzc2VzIGZvciBHRVQgcmVxdWVzdHMgYXJlIG5vdCBlcnJvcnNcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBiZWhhdmlvciB3aGVyZSBhIHNlcnZlciBjYW4gaXNzdWUgYSByZWRpcmVjdCBhbmQgd2UgZmFpbCB0byBhdXRoZW50aWNhdGUgYXQgdGhlIG5ldyBsb2NhdGlvbi5cbiAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzaWduYWwgdGhpcyBhcyBhbiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIGJlY2F1c2UgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGlzIG5vdCBwYXNzZWQgb24gdG8gcmVkaXJlY3RzLlxuICAgICAgICAgIC8vIGkuZSBUaGUgYXV0aGVudGljYXRpb24gaGVhZGVyIHdhcyBhY2NlcHRlZCBmb3IgdGhlIGZpcnN0IHJlcXVlc3QgYW5kIHRoZXJlZm9yZSBzdWJzZXF1ZW50IGZhaWx1cmVzXG4gICAgICAgICAgLy8gd2hlcmUgaXQgd2FzIG5vdCBwcmVzZW50IHNob3VsZCBub3QgYmUgYXR0cmlidXRlZCB0byB0aGUgaGVhZGVyLlxuICAgICAgICAgIC8vIFRoaXMgc2NlbmFyaW8gdXN1YWxseSBjb21lcyB1cCB3aXRoIHNlcnZpY2VzIHRoYXQgcmVkaXJlY3QgdG8gcHJlLXNpZ25lZCBVUkxTIHRoYXQgZG9uJ3QgYWN0dWFsbHkgZXhpc3QuXG4gICAgICAgICAgLy8gVGhvc2Ugc2VydmljZXMgdGhlbiB1c3VhbGx5IHRyZWF0IHRoZSA0MDQgYXMgYSA0MDMgdG8gcHJldmVudCBsZWFraW5nIGluZm9ybWF0aW9uLlxuICAgICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5Ob25lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDQwNDoge1xuICAgICAgICBpZiAocmVxdWVzdE1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAvLyBDYWNoZSBtaXNzZXMgZm9yIEdFVCByZXF1ZXN0cyBhcmUgbm90IGVycm9yc1xuICAgICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5Ob25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGV0IGRldiBidWlsZHMgc3VjY2VlZCwgbGV0IFByb2QgYnVpbGRzIGZhaWxcbiAgICByZXR1cm4gRmFpbHVyZVR5cGUuV2FybmluZztcbiAgfVxuXG4gIHByaXZhdGUgX3JlcG9ydEZhaWx1cmUoXG4gICAgdGVybWluYWw6IElUZXJtaW5hbCxcbiAgICByZXF1ZXN0TWV0aG9kOiBzdHJpbmcsXG4gICAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICAgIGlzUmVkaXJlY3Q6IGJvb2xlYW4sXG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5fZ2V0RmFpbHVyZVR5cGUocmVxdWVzdE1ldGhvZCwgcmVzcG9uc2UsIGlzUmVkaXJlY3QpKSB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlRXJyb3JMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5XYXJuaW5nOiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlV2FybmluZ0xpbmUoYCR7bWVzc2FnZX06IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEZhaWx1cmVUeXBlLkluZm9ybWF0aW9uYWw6IHtcbiAgICAgICAgdGVybWluYWwud3JpdGVMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5Ob25lOiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5BdXRoZW50aWNhdGlvbjoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYCR7dGhpcy5fdXJsLmhyZWZ9IHJlc3BvbmRlZCB3aXRoICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fS5gLFxuICAgICAgICAgICAgYENyZWRlbnRpYWxzIG1heSBiZSBtaXNjb25maWd1cmVkIG9yIGhhdmUgZXhwaXJlZC5gLFxuICAgICAgICAgICAgYEluIENJLCB2ZXJpZnkgdGhhdCBSVVNIX0JVSUxEX0NBQ0hFX0NSRURFTlRJQUwgY29udGFpbnMgYSB2YWxpZCBBdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZS5gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpgLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgICAgIHJ1c2ggdXBkYXRlLWNsb3VkLWNyZWRlbnRpYWxzIC0taW50ZXJhY3RpdmVgLFxuICAgICAgICAgICAgYGBcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
4668
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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VyxDQUFDMEgsY0FBYztRQUFBO1FBQUE7UUFBRTtVQUFBO1VBQUE7VUFDL0IsTUFBTSxJQUFJN0QsS0FBSyxDQUNiLENBQ0UsR0FBRyxJQUFJLENBQUM1QyxJQUFJLENBQUM2QyxJQUFJLG1CQUFtQjhCLFFBQVEsQ0FBQ0ksTUFBTSxLQUFLSixRQUFRLENBQUNpQyxVQUFVLEdBQUcsRUFDOUUsbURBQW1ELEVBQ25ELDZGQUE2RixFQUM3RixFQUFFLEVBQ0YsNEJBQTRCLEVBQzVCLEVBQUUsRUFDRixpREFBaUQsRUFDakQsRUFBRSxDQUNILENBQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2I7O0lBQ0Y7RUFFTDs7QUFDRDtBQUFBO0FBeFhENEQiLCJuYW1lcyI6WyJDcmVkZW50aWFsc09wdGlvbnMiLCJGYWlsdXJlVHlwZSIsIk1BWF9IVFRQX0NBQ0hFX0FUVEVNUFRTIiwiREVGQVVMVF9NSU5fSFRUUF9SRVRSWV9ERUxBWV9NUyIsIkh0dHBCdWlsZENhY2hlUHJvdmlkZXIiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJydXNoU2Vzc2lvbiIsIl9wbHVnaW5OYW1lIiwicGx1Z2luTmFtZSIsIl9ydXNoU2Vzc2lvbiIsIl9ydXNoUHJvamVjdFJvb3QiLCJydXNoUHJvamVjdFJvb3QiLCJfZW52aXJvbm1lbnRDcmVkZW50aWFsIiwicnVzaF9zZGtfMSIsImJ1aWxkQ2FjaGVDcmVkZW50aWFsIiwiX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb24iLCJpc0NhY2hlV3JpdGVBbGxvd2VkIiwiX3VybCIsIlVSTCIsInVybCIsImVuZHNXaXRoIiwiX3VwbG9hZE1ldGhvZCIsInVwbG9hZE1ldGhvZCIsIl9oZWFkZXJzIiwiaGVhZGVycyIsIl90b2tlbkhhbmRsZXIiLCJ0b2tlbkhhbmRsZXIiLCJfY2FjaGVLZXlQcmVmaXgiLCJjYWNoZUtleVByZWZpeCIsIl9taW5IdHRwUmV0cnlEZWxheU1zIiwibWluSHR0cFJldHJ5RGVsYXlNcyIsImJ1aWxkQ2FjaGVXcml0ZUFsbG93ZWQiLCJ0cnlHZXRDYWNoZUVudHJ5QnVmZmVyQnlJZEFzeW5jIiwidGVybWluYWwiLCJjYWNoZUlkIiwicmVzdWx0IiwiX2h0dHAiLCJyZWxVcmwiLCJtZXRob2QiLCJib2R5IiwidW5kZWZpbmVkIiwid2FybmluZ1RleHQiLCJyZWFkQm9keSIsIm1heEF0dGVtcHRzIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJlIiwid3JpdGVXYXJuaW5nTGluZSIsInRyeVNldENhY2hlRW50cnlCdWZmZXJBc3luYyIsIm9iamVjdEJ1ZmZlciIsIndyaXRlRXJyb3JMaW5lIiwid3JpdGVEZWJ1Z0xpbmUiLCJ1cGRhdGVDYWNoZWRDcmVkZW50aWFsQXN5bmMiLCJjcmVkZW50aWFsIiwidXNpbmdBc3luYyIsInN1cHBvcnRFZGl0aW5nIiwiY3JlZGVudGlhbHNDYWNoZSIsInNldENhY2hlRW50cnkiLCJfY3JlZGVudGlhbENhY2hlSWQiLCJzYXZlSWZNb2RpZmllZEFzeW5jIiwidXBkYXRlQ2FjaGVkQ3JlZGVudGlhbEludGVyYWN0aXZlQXN5bmMiLCJFcnJvciIsImhyZWYiLCJjbWQiLCJleGVjIiwiYXJncyIsImpvaW4iLCJ3cml0ZVZlcmJvc2VMaW5lIiwibm9kZV9jb3JlX2xpYnJhcnlfMSIsInNwYXduU3luYyIsInN0ZGVyciIsImVycm9yIiwic3Rkb3V0IiwidHJpbSIsIndyaXRlTGluZSIsImRlbGV0ZUNhY2hlZENyZWRlbnRpYWxzQXN5bmMiLCJkZWxldGVDYWNoZUVudHJ5IiwiX19jcmVkZW50aWFsQ2FjaGVJZCIsImNhY2hlSWRQYXJ0cyIsInB1c2giLCJjcmVkZW50aWFsT3B0aW9ucyIsInNhZmVDcmVkZW50aWFsT3B0aW9ucyIsIk9wdGlvbmFsIiwiY3JlZGVudGlhbHMiLCJfdHJ5R2V0Q3JlZGVudGlhbHMiLCJBdXRob3JpemF0aW9uIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiYm9keUxlbmd0aCIsImxlbmd0aCIsInJlc3BvbnNlIiwicmVkaXJlY3QiLCJvayIsImlzTm9uQ3JlZGVudGlhbFJlc3BvbnNlIiwic3RhdHVzIiwiUmVxdWlyZWQiLCJmYWN0b3IiLCJNYXRoIiwicmFuZG9tIiwicmV0cnlEZWxheSIsImZsb29yIiwic2xlZXAiLCJfcmVwb3J0RmFpbHVyZSIsImZyb20iLCJhcnJheUJ1ZmZlciIsIk9taXQiLCJfdHJ5R2V0Q3JlZGVudGlhbHNGcm9tQ2FjaGUiLCJjYWNoZUVudHJ5IiwidHJ5R2V0Q2FjaGVFbnRyeSIsImV4cGlyYXRpb25UaW1lIiwiZXhwaXJlcyIsImdldFRpbWUiLCJEYXRlIiwibm93IiwiX2dldEZhaWx1cmVUeXBlIiwicmVxdWVzdE1ldGhvZCIsImlzUmVkaXJlY3QiLCJOb25lIiwiSW5mb3JtYXRpb25hbCIsInJlZGlyZWN0ZWQiLCJBdXRoZW50aWNhdGlvbiIsIldhcm5pbmciLCJtZXNzYWdlIiwic3RhdHVzVGV4dCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIvaG9tZS92c3RzL3dvcmsvMS9zL3J1c2gtcGx1Z2lucy9ydXNoLWh0dHAtYnVpbGQtY2FjaGUtcGx1Z2luL3NyYy9IdHRwQnVpbGRDYWNoZVByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElUZXJtaW5hbCwgRXhlY3V0YWJsZSwgQXN5bmMgfSBmcm9tICdAcnVzaHN0YWNrL25vZGUtY29yZS1saWJyYXJ5JztcbmltcG9ydCB7XG4gIElDbG91ZEJ1aWxkQ2FjaGVQcm92aWRlcixcbiAgSUNyZWRlbnRpYWxDYWNoZUVudHJ5LFxuICBDcmVkZW50aWFsQ2FjaGUsXG4gIFJ1c2hTZXNzaW9uLFxuICBFbnZpcm9ubWVudENvbmZpZ3VyYXRpb25cbn0gZnJvbSAnQHJ1c2hzdGFjay9ydXNoLXNkayc7XG5pbXBvcnQgZmV0Y2gsIHsgQm9keUluaXQsIFJlc3BvbnNlIH0gZnJvbSAnbm9kZS1mZXRjaCc7XG5cbmVudW0gQ3JlZGVudGlhbHNPcHRpb25zIHtcbiAgT3B0aW9uYWwsXG4gIFJlcXVpcmVkLFxuICBPbWl0XG59XG5cbmVudW0gRmFpbHVyZVR5cGUge1xuICBOb25lLFxuICBJbmZvcm1hdGlvbmFsLFxuICBXYXJuaW5nLFxuICBFcnJvcixcbiAgQXV0aGVudGljYXRpb25cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJSHR0cEJ1aWxkQ2FjaGVUb2tlbkhhbmRsZXIge1xuICBleGVjOiBzdHJpbmc7XG4gIGFyZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUh0dHBCdWlsZENhY2hlUHJvdmlkZXJPcHRpb25zIHtcbiAgdXJsOiBzdHJpbmc7XG4gIHRva2VuSGFuZGxlcj86IElIdHRwQnVpbGRDYWNoZVRva2VuSGFuZGxlcjtcbiAgdXBsb2FkTWV0aG9kPzogc3RyaW5nO1xuICBtaW5IdHRwUmV0cnlEZWxheU1zPzogbnVtYmVyO1xuICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY2FjaGVLZXlQcmVmaXg/OiBzdHJpbmc7XG4gIGlzQ2FjaGVXcml0ZUFsbG93ZWQ6IGJvb2xlYW47XG4gIHBsdWdpbk5hbWU6IHN0cmluZztcbiAgcnVzaFByb2plY3RSb290OiBzdHJpbmc7XG59XG5cbmNvbnN0IE1BWF9IVFRQX0NBQ0hFX0FUVEVNUFRTOiBudW1iZXIgPSAzO1xuY29uc3QgREVGQVVMVF9NSU5fSFRUUF9SRVRSWV9ERUxBWV9NUyA9IDI1MDA7XG5cbmV4cG9ydCBjbGFzcyBIdHRwQnVpbGRDYWNoZVByb3ZpZGVyIGltcGxlbWVudHMgSUNsb3VkQnVpbGRDYWNoZVByb3ZpZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGx1Z2luTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydXNoU2Vzc2lvbjogUnVzaFNlc3Npb247XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J1c2hQcm9qZWN0Um9vdDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9lbnZpcm9ubWVudENyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNDYWNoZVdyaXRlQWxsb3dlZEJ5Q29uZmlndXJhdGlvbjogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXJsOiBVUkw7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VwbG9hZE1ldGhvZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYWNoZUtleVByZWZpeDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90b2tlbkhhbmRsZXI6IElIdHRwQnVpbGRDYWNoZVRva2VuSGFuZGxlciB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluSHR0cFJldHJ5RGVsYXlNczogbnVtYmVyO1xuICBwcml2YXRlIF9fY3JlZGVudGlhbENhY2hlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgZ2V0IGlzQ2FjaGVXcml0ZUFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Q29uZmlndXJhdGlvbi5idWlsZENhY2hlV3JpdGVBbGxvd2VkID8/IHRoaXMuX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogSUh0dHBCdWlsZENhY2hlUHJvdmlkZXJPcHRpb25zLCBydXNoU2Vzc2lvbjogUnVzaFNlc3Npb24pIHtcbiAgICB0aGlzLl9wbHVnaW5OYW1lID0gb3B0aW9ucy5wbHVnaW5OYW1lO1xuICAgIHRoaXMuX3J1c2hTZXNzaW9uID0gcnVzaFNlc3Npb247XG4gICAgdGhpcy5fcnVzaFByb2plY3RSb290ID0gb3B0aW9ucy5ydXNoUHJvamVjdFJvb3Q7XG5cbiAgICB0aGlzLl9lbnZpcm9ubWVudENyZWRlbnRpYWwgPSBFbnZpcm9ubWVudENvbmZpZ3VyYXRpb24uYnVpbGRDYWNoZUNyZWRlbnRpYWw7XG4gICAgdGhpcy5faXNDYWNoZVdyaXRlQWxsb3dlZEJ5Q29uZmlndXJhdGlvbiA9IG9wdGlvbnMuaXNDYWNoZVdyaXRlQWxsb3dlZDtcbiAgICB0aGlzLl91cmwgPSBuZXcgVVJMKG9wdGlvbnMudXJsLmVuZHNXaXRoKCcvJykgPyBvcHRpb25zLnVybCA6IG9wdGlvbnMudXJsICsgJy8nKTtcbiAgICB0aGlzLl91cGxvYWRNZXRob2QgPSBvcHRpb25zLnVwbG9hZE1ldGhvZCA/PyAnUFVUJztcbiAgICB0aGlzLl9oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzID8/IHt9O1xuICAgIHRoaXMuX3Rva2VuSGFuZGxlciA9IG9wdGlvbnMudG9rZW5IYW5kbGVyO1xuICAgIHRoaXMuX2NhY2hlS2V5UHJlZml4ID0gb3B0aW9ucy5jYWNoZUtleVByZWZpeCA/PyAnJztcbiAgICB0aGlzLl9taW5IdHRwUmV0cnlEZWxheU1zID0gb3B0aW9ucy5taW5IdHRwUmV0cnlEZWxheU1zID8/IERFRkFVTFRfTUlOX0hUVFBfUkVUUllfREVMQVlfTVM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdHJ5R2V0Q2FjaGVFbnRyeUJ1ZmZlckJ5SWRBc3luYyhcbiAgICB0ZXJtaW5hbDogSVRlcm1pbmFsLFxuICAgIGNhY2hlSWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPEJ1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9odHRwKHtcbiAgICAgICAgdGVybWluYWw6IHRlcm1pbmFsLFxuICAgICAgICByZWxVcmw6IGAke3RoaXMuX2NhY2hlS2V5UHJlZml4fSR7Y2FjaGVJZH1gLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBib2R5OiB1bmRlZmluZWQsXG4gICAgICAgIHdhcm5pbmdUZXh0OiAnQ291bGQgbm90IGdldCBjYWNoZSBlbnRyeScsXG4gICAgICAgIHJlYWRCb2R5OiB0cnVlLFxuICAgICAgICBtYXhBdHRlbXB0czogTUFYX0hUVFBfQ0FDSEVfQVRURU1QVFNcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHJlc3VsdCkgPyByZXN1bHQgOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGVybWluYWwud3JpdGVXYXJuaW5nTGluZShgRXJyb3IgZ2V0dGluZyBjYWNoZSBlbnRyeTogJHtlfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdHJ5U2V0Q2FjaGVFbnRyeUJ1ZmZlckFzeW5jKFxuICAgIHRlcm1pbmFsOiBJVGVybWluYWwsXG4gICAgY2FjaGVJZDogc3RyaW5nLFxuICAgIG9iamVjdEJ1ZmZlcjogQnVmZmVyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICghdGhpcy5pc0NhY2hlV3JpdGVBbGxvd2VkKSB7XG4gICAgICB0ZXJtaW5hbC53cml0ZUVycm9yTGluZSgnV3JpdGluZyB0byBjYWNoZSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKCdVcGxvYWRpbmcgb2JqZWN0IHdpdGggY2FjaGVJZDogJywgY2FjaGVJZCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5faHR0cCh7XG4gICAgICAgIHRlcm1pbmFsOiB0ZXJtaW5hbCxcbiAgICAgICAgcmVsVXJsOiBgJHt0aGlzLl9jYWNoZUtleVByZWZpeH0ke2NhY2hlSWR9YCxcbiAgICAgICAgbWV0aG9kOiB0aGlzLl91cGxvYWRNZXRob2QsXG4gICAgICAgIGJvZHk6IG9iamVjdEJ1ZmZlcixcbiAgICAgICAgd2FybmluZ1RleHQ6ICdDb3VsZCBub3Qgd3JpdGUgY2FjaGUgZW50cnknLFxuICAgICAgICByZWFkQm9keTogZmFsc2UsXG4gICAgICAgIG1heEF0dGVtcHRzOiBNQVhfSFRUUF9DQUNIRV9BVFRFTVBUU1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZXN1bHQgIT09IGZhbHNlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRlcm1pbmFsLndyaXRlV2FybmluZ0xpbmUoYEVycm9yIHVwbG9hZGluZyBjYWNoZSBlbnRyeTogJHtlfWApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDYWNoZWRDcmVkZW50aWFsQXN5bmModGVybWluYWw6IElUZXJtaW5hbCwgY3JlZGVudGlhbDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgQ3JlZGVudGlhbENhY2hlLnVzaW5nQXN5bmMoXG4gICAgICB7XG4gICAgICAgIHN1cHBvcnRFZGl0aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgYXN5bmMgKGNyZWRlbnRpYWxzQ2FjaGU6IENyZWRlbnRpYWxDYWNoZSkgPT4ge1xuICAgICAgICBjcmVkZW50aWFsc0NhY2hlLnNldENhY2hlRW50cnkodGhpcy5fY3JlZGVudGlhbENhY2hlSWQsIHtcbiAgICAgICAgICBjcmVkZW50aWFsOiBjcmVkZW50aWFsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBjcmVkZW50aWFsc0NhY2hlLnNhdmVJZk1vZGlmaWVkQXN5bmMoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHVwZGF0ZUNhY2hlZENyZWRlbnRpYWxJbnRlcmFjdGl2ZUFzeW5jKHRlcm1pbmFsOiBJVGVybWluYWwpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX3Rva2VuSGFuZGxlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGhlIGludGVyYWN0aXZlIGNsb3VkIGNyZWRlbnRpYWxzIGZsb3cgaXMgbm90IGNvbmZpZ3VyZWQuXFxuYCArXG4gICAgICAgICAgYFNldCB0aGUgJ3Rva2VuSGFuZGxlcicgc2V0dGluZyBpbiAnY29tbW9uL2NvbmZpZy9ydXNoLXBsdWdpbnMvJHt0aGlzLl9wbHVnaW5OYW1lfS5qc29uJyB0byBhIGNvbW1hbmQgdGhhdCB3cml0ZXMgeW91ciBjcmVkZW50aWFscyB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXRzIHdpdGggY29kZSAwIGAgK1xuICAgICAgICAgIGBvciBwcm92aWRlIHlvdXIgY3JlZGVudGlhbHMgdG8gcnVzaCB1c2luZyB0aGUgLS1jcmVkZW50aWFsIGZsYWcgaW5zdGVhZC4gQ3JlZGVudGlhbHMgbXVzdCBiZSB0aGUgYCArXG4gICAgICAgICAgYCdBdXRob3JpemF0aW9uJyBoZWFkZXIgZXhwZWN0ZWQgYnkgJHt0aGlzLl91cmwuaHJlZn1gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNtZDogc3RyaW5nID0gYCR7dGhpcy5fdG9rZW5IYW5kbGVyLmV4ZWN9ICR7KHRoaXMuX3Rva2VuSGFuZGxlci5hcmdzIHx8IFtdKS5qb2luKCcgJyl9YDtcbiAgICB0ZXJtaW5hbC53cml0ZVZlcmJvc2VMaW5lKGBSdW5uaW5nICcke2NtZH0nIHRvIGdldCBjcmVkZW50aWFsc2ApO1xuICAgIGNvbnN0IHJlc3VsdCA9IEV4ZWN1dGFibGUuc3Bhd25TeW5jKHRoaXMuX3Rva2VuSGFuZGxlci5leGVjLCB0aGlzLl90b2tlbkhhbmRsZXIuYXJncyB8fCBbXSk7XG5cbiAgICB0ZXJtaW5hbC53cml0ZUVycm9yTGluZShyZXN1bHQuc3RkZXJyKTtcblxuICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IG9idGFpbiBjcmVkZW50aWFscy4gVGhlIGNvbW1hbmQgJyR7Y21kfScgZmFpbGVkLmApO1xuICAgIH1cblxuICAgIGNvbnN0IGNyZWRlbnRpYWwgPSByZXN1bHQuc3Rkb3V0LnRyaW0oKTtcbiAgICB0ZXJtaW5hbC53cml0ZVZlcmJvc2VMaW5lKCdHb3QgY3JlZGVudGlhbHMnKTtcblxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ2FjaGVkQ3JlZGVudGlhbEFzeW5jKHRlcm1pbmFsLCBjcmVkZW50aWFsKTtcblxuICAgIHRlcm1pbmFsLndyaXRlTGluZSgnVXBkYXRlZCBjcmVkZW50aWFscyBjYWNoZScpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlbGV0ZUNhY2hlZENyZWRlbnRpYWxzQXN5bmModGVybWluYWw6IElUZXJtaW5hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IENyZWRlbnRpYWxDYWNoZS51c2luZ0FzeW5jKFxuICAgICAge1xuICAgICAgICBzdXBwb3J0RWRpdGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGFzeW5jIChjcmVkZW50aWFsc0NhY2hlOiBDcmVkZW50aWFsQ2FjaGUpID0+IHtcbiAgICAgICAgY3JlZGVudGlhbHNDYWNoZS5kZWxldGVDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkKTtcbiAgICAgICAgYXdhaXQgY3JlZGVudGlhbHNDYWNoZS5zYXZlSWZNb2RpZmllZEFzeW5jKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9jcmVkZW50aWFsQ2FjaGVJZCgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5fX2NyZWRlbnRpYWxDYWNoZUlkKSB7XG4gICAgICBjb25zdCBjYWNoZUlkUGFydHM6IHN0cmluZ1tdID0gW3RoaXMuX3VybC5ocmVmXTtcblxuICAgICAgaWYgKHRoaXMuX2lzQ2FjaGVXcml0ZUFsbG93ZWRCeUNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgY2FjaGVJZFBhcnRzLnB1c2goJ2NhY2hlV3JpdGVBbGxvd2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX19jcmVkZW50aWFsQ2FjaGVJZCA9IGNhY2hlSWRQYXJ0cy5qb2luKCd8Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19jcmVkZW50aWFsQ2FjaGVJZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2h0dHAob3B0aW9uczoge1xuICAgIHRlcm1pbmFsOiBJVGVybWluYWw7XG4gICAgcmVsVXJsOiBzdHJpbmc7XG4gICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgYm9keTogQm9keUluaXQgfCB1bmRlZmluZWQ7XG4gICAgd2FybmluZ1RleHQ6IHN0cmluZztcbiAgICByZWFkQm9keTogYm9vbGVhbjtcbiAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgIGNyZWRlbnRpYWxPcHRpb25zPzogQ3JlZGVudGlhbHNPcHRpb25zO1xuICB9KTogUHJvbWlzZTxCdWZmZXIgfCBib29sZWFuPiB7XG4gICAgY29uc3QgeyB0ZXJtaW5hbCwgcmVsVXJsLCBtZXRob2QsIGJvZHksIHdhcm5pbmdUZXh0LCByZWFkQm9keSwgY3JlZGVudGlhbE9wdGlvbnMgfSA9IG9wdGlvbnM7XG4gICAgY29uc3Qgc2FmZUNyZWRlbnRpYWxPcHRpb25zID0gY3JlZGVudGlhbE9wdGlvbnMgPz8gQ3JlZGVudGlhbHNPcHRpb25zLk9wdGlvbmFsO1xuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5fdHJ5R2V0Q3JlZGVudGlhbHMoc2FmZUNyZWRlbnRpYWxPcHRpb25zKTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlbFVybCwgdGhpcy5fdXJsKS5ocmVmO1xuXG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGlmICh0eXBlb2YgY3JlZGVudGlhbHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBoZWFkZXJzLkF1dGhvcml6YXRpb24gPSBjcmVkZW50aWFscztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLl9oZWFkZXJzKSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaGVhZGVyc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYm9keUxlbmd0aCA9IChib2R5IGFzIHsgbGVuZ3RoOiBudW1iZXIgfSk/Lmxlbmd0aCB8fCAndW5rbm93bic7XG5cbiAgICB0ZXJtaW5hbC53cml0ZURlYnVnTGluZShgW2h0dHAtYnVpbGQtY2FjaGVdIHJlcXVlc3Q6ICR7bWV0aG9kfSAke3VybH0gJHtib2R5TGVuZ3RofSBieXRlc2ApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IGJvZHksXG4gICAgICByZWRpcmVjdDogJ2ZvbGxvdydcbiAgICB9KTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGlzTm9uQ3JlZGVudGlhbFJlc3BvbnNlID0gcmVzcG9uc2Uuc3RhdHVzID49IDUwMCAmJiByZXNwb25zZS5zdGF0dXMgPCA2MDA7XG5cbiAgICAgIGlmIChcbiAgICAgICAgIWlzTm9uQ3JlZGVudGlhbFJlc3BvbnNlICYmXG4gICAgICAgIHR5cGVvZiBjcmVkZW50aWFscyAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc2FmZUNyZWRlbnRpYWxPcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuT3B0aW9uYWxcbiAgICAgICkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBhbHJlYWR5IGhhdmUgY3JlZGVudGlhbHMgeWV0LCBhbmQgd2UgZ290IGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIC8vIHRoYXQgaXMgYSBcIm5vcm1hbFwiIGZhaWx1cmUgKDR4eCksIHRoZW4gd2UgYXNzdW1lIHRoYXQgY3JlZGVudGlhbHMgYXJlIHByb2JhYmx5XG4gICAgICAgIC8vIHJlcXVpcmVkLiBSZS1hdHRlbXB0IHRoZSByZXF1ZXN0LCByZXF1aXJpbmcgY3JlZGVudGlhbHMgdGhpcyB0aW1lLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGNvdW50cyBhcyBwYXJ0IG9mIHRoZSBcImZpcnN0IGF0dGVtcHRcIiwgc28gaXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBtYXggYXR0ZW1wdHNcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2h0dHAoeyAuLi5vcHRpb25zLCBjcmVkZW50aWFsT3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zLlJlcXVpcmVkIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5tYXhBdHRlbXB0cyA+IDEpIHtcbiAgICAgICAgLy8gUGF1c2UgYSBiaXQgYmVmb3JlIHJldHJ5aW5nIGluIGNhc2UgdGhlIHNlcnZlciBpcyBidXN5XG4gICAgICAgIC8vIEFkZCBzb21lIHJhbmRvbSBqaXR0ZXIgdG8gdGhlIHJldHJ5IHNvIHdlIGNhbiBzcHJlYWQgb3V0IGxvYWQgb24gdGhlIHJlbW90ZSBzZXJ2aWNlXG4gICAgICAgIC8vIEEgcHJvcGVyIHNvbHV0aW9uIG1pZ2h0IGFkZCBleHBvbmVudGlhbCBiYWNrIG9mZiBpbiBjYXNlIHRoZSByZXRyeSBjb3VudCBpcyBoaWdoICgxMCBvciBtb3JlKVxuICAgICAgICBjb25zdCBmYWN0b3IgPSAxLjAgKyBNYXRoLnJhbmRvbSgpOyAvLyBBIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAxLjAgYW5kIDIuMFxuICAgICAgICBjb25zdCByZXRyeURlbGF5ID0gTWF0aC5mbG9vcihmYWN0b3IgKiB0aGlzLl9taW5IdHRwUmV0cnlEZWxheU1zKTtcblxuICAgICAgICBhd2FpdCBBc3luYy5zbGVlcChyZXRyeURlbGF5KTtcblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faHR0cCh7IC4uLm9wdGlvbnMsIG1heEF0dGVtcHRzOiBvcHRpb25zLm1heEF0dGVtcHRzIC0gMSB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVwb3J0RmFpbHVyZSh0ZXJtaW5hbCwgbWV0aG9kLCByZXNwb25zZSwgZmFsc2UsIHdhcm5pbmdUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IEJ1ZmZlciB8IGJvb2xlYW4gPSByZWFkQm9keSA/IEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpIDogdHJ1ZTtcblxuICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKFxuICAgICAgYFtodHRwLWJ1aWxkLWNhY2hlXSBhY3R1YWwgcmVzcG9uc2U6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3VybH0gJHtcbiAgICAgICAgcmVzdWx0ID09PSB0cnVlID8gJ3RydWUnIDogcmVzdWx0Lmxlbmd0aFxuICAgICAgfSBieXRlc2BcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3RyeUdldENyZWRlbnRpYWxzKG9wdGlvbnM6IENyZWRlbnRpYWxzT3B0aW9ucy5SZXF1aXJlZCk6IFByb21pc2U8c3RyaW5nPjtcbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zLk9wdGlvbmFsKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMuT21pdCk6IFByb21pc2U8dW5kZWZpbmVkPjtcbiAgcHJpdmF0ZSBhc3luYyBfdHJ5R2V0Q3JlZGVudGlhbHMob3B0aW9uczogQ3JlZGVudGlhbHNPcHRpb25zKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFscyhvcHRpb25zOiBDcmVkZW50aWFsc09wdGlvbnMpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGlmIChvcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuT21pdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBjcmVkZW50aWFsczogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5fZW52aXJvbm1lbnRDcmVkZW50aWFsO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNyZWRlbnRpYWxzID0gYXdhaXQgdGhpcy5fdHJ5R2V0Q3JlZGVudGlhbHNGcm9tQ2FjaGUoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNyZWRlbnRpYWxzICE9PSAnc3RyaW5nJyAmJiBvcHRpb25zID09PSBDcmVkZW50aWFsc09wdGlvbnMuUmVxdWlyZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgW1xuICAgICAgICAgIGBDcmVkZW50aWFscyBmb3IgJHt0aGlzLl91cmwuaHJlZn0gaGF2ZSBub3QgYmVlbiBwcm92aWRlZC5gLFxuICAgICAgICAgIGBJbiBDSSwgdmVyaWZ5IHRoYXQgUlVTSF9CVUlMRF9DQUNIRV9DUkVERU5USUFMIGNvbnRhaW5zIGEgdmFsaWQgQXV0aG9yaXphdGlvbiBoZWFkZXIgdmFsdWUuYCxcbiAgICAgICAgICBgYCxcbiAgICAgICAgICBgRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpgLFxuICAgICAgICAgIGBgLFxuICAgICAgICAgIGAgICAgcnVzaCB1cGRhdGUtY2xvdWQtY3JlZGVudGlhbHMgLS1pbnRlcmFjdGl2ZWAsXG4gICAgICAgICAgYGBcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF90cnlHZXRDcmVkZW50aWFsc0Zyb21DYWNoZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBjYWNoZUVudHJ5OiBJQ3JlZGVudGlhbENhY2hlRW50cnkgfCB1bmRlZmluZWQ7XG5cbiAgICBhd2FpdCBDcmVkZW50aWFsQ2FjaGUudXNpbmdBc3luYyhcbiAgICAgIHtcbiAgICAgICAgc3VwcG9ydEVkaXRpbmc6IGZhbHNlXG4gICAgICB9LFxuICAgICAgKGNyZWRlbnRpYWxzQ2FjaGU6IENyZWRlbnRpYWxDYWNoZSkgPT4ge1xuICAgICAgICBjYWNoZUVudHJ5ID0gY3JlZGVudGlhbHNDYWNoZS50cnlHZXRDYWNoZUVudHJ5KHRoaXMuX2NyZWRlbnRpYWxDYWNoZUlkKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKGNhY2hlRW50cnkpIHtcbiAgICAgIGNvbnN0IGV4cGlyYXRpb25UaW1lOiBudW1iZXIgfCB1bmRlZmluZWQgPSBjYWNoZUVudHJ5LmV4cGlyZXM/LmdldFRpbWUoKTtcbiAgICAgIGlmICghZXhwaXJhdGlvblRpbWUgfHwgZXhwaXJhdGlvblRpbWUgPj0gRGF0ZS5ub3coKSkge1xuICAgICAgICByZXR1cm4gY2FjaGVFbnRyeS5jcmVkZW50aWFsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldEZhaWx1cmVUeXBlKHJlcXVlc3RNZXRob2Q6IHN0cmluZywgcmVzcG9uc2U6IFJlc3BvbnNlLCBpc1JlZGlyZWN0OiBib29sZWFuKTogRmFpbHVyZVR5cGUge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLk5vbmU7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgNTAzOiB7XG4gICAgICAgIC8vIFdlIHNlbGVjdCA1MDMgc3BlY2lmaWNhbGx5IGJlY2F1c2UgdGhpcyByZXByZXNlbnRzIFwic2VydmljZSB1bmF2YWlsYWJsZVwiIGFuZFxuICAgICAgICAvLyBcInJhdGUgbGltaXQgdGhyb3R0bGVcIiBlcnJvcnMsIHdoaWNoIGFyZSB0cmFuc2llbnQgaXNzdWVzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGVyZSBhcmUgb3RoZXIgNXh4IGVycm9ycywgc3VjaCBhcyA1MDEsIHRoYXQgY2FuIG9jY3VyIGlmIHRoZSByZXF1ZXN0IGlzXG4gICAgICAgIC8vIG1hbGZvcm1lZCwgc28gYXMgYSBnZW5lcmFsIHJ1bGUgd2Ugd2FudCB0byBsZXQgdGhyb3VnaCBvdGhlciA1eHggZXJyb3JzXG4gICAgICAgIC8vIHNvIHRoZSB1c2VyIGNhbiB0cm91Ymxlc2hvb3QuXG5cbiAgICAgICAgLy8gRG9uJ3QgZmFpbCBwcm9kdWN0aW9uIGJ1aWxkcyB3aXRoIHdhcm5pbmdzIGZvciB0cmFuc2llbnQgaXNzdWVzXG4gICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5JbmZvcm1hdGlvbmFsO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDQwMTpcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgY2FzZSA0MDc6IHtcbiAgICAgICAgaWYgKHJlcXVlc3RNZXRob2QgPT09ICdHRVQnICYmIChpc1JlZGlyZWN0IHx8IHJlc3BvbnNlLnJlZGlyZWN0ZWQpKSB7XG4gICAgICAgICAgLy8gQ2FjaGUgbWlzc2VzIGZvciBHRVQgcmVxdWVzdHMgYXJlIG5vdCBlcnJvcnNcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgd29ya2Fyb3VuZCBiZWhhdmlvciB3aGVyZSBhIHNlcnZlciBjYW4gaXNzdWUgYSByZWRpcmVjdCBhbmQgd2UgZmFpbCB0byBhdXRoZW50aWNhdGUgYXQgdGhlIG5ldyBsb2NhdGlvbi5cbiAgICAgICAgICAvLyBXZSBkbyBub3Qgd2FudCB0byBzaWduYWwgdGhpcyBhcyBhbiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIGJlY2F1c2UgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGlzIG5vdCBwYXNzZWQgb24gdG8gcmVkaXJlY3RzLlxuICAgICAgICAgIC8vIGkuZSBUaGUgYXV0aGVudGljYXRpb24gaGVhZGVyIHdhcyBhY2NlcHRlZCBmb3IgdGhlIGZpcnN0IHJlcXVlc3QgYW5kIHRoZXJlZm9yZSBzdWJzZXF1ZW50IGZhaWx1cmVzXG4gICAgICAgICAgLy8gd2hlcmUgaXQgd2FzIG5vdCBwcmVzZW50IHNob3VsZCBub3QgYmUgYXR0cmlidXRlZCB0byB0aGUgaGVhZGVyLlxuICAgICAgICAgIC8vIFRoaXMgc2NlbmFyaW8gdXN1YWxseSBjb21lcyB1cCB3aXRoIHNlcnZpY2VzIHRoYXQgcmVkaXJlY3QgdG8gcHJlLXNpZ25lZCBVUkxTIHRoYXQgZG9uJ3QgYWN0dWFsbHkgZXhpc3QuXG4gICAgICAgICAgLy8gVGhvc2Ugc2VydmljZXMgdGhlbiB1c3VhbGx5IHRyZWF0IHRoZSA0MDQgYXMgYSA0MDMgdG8gcHJldmVudCBsZWFraW5nIGluZm9ybWF0aW9uLlxuICAgICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5Ob25lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEZhaWx1cmVUeXBlLkF1dGhlbnRpY2F0aW9uO1xuICAgICAgfVxuXG4gICAgICBjYXNlIDQwNDoge1xuICAgICAgICBpZiAocmVxdWVzdE1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAvLyBDYWNoZSBtaXNzZXMgZm9yIEdFVCByZXF1ZXN0cyBhcmUgbm90IGVycm9yc1xuICAgICAgICAgIHJldHVybiBGYWlsdXJlVHlwZS5Ob25lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTGV0IGRldiBidWlsZHMgc3VjY2VlZCwgbGV0IFByb2QgYnVpbGRzIGZhaWxcbiAgICByZXR1cm4gRmFpbHVyZVR5cGUuV2FybmluZztcbiAgfVxuXG4gIHByaXZhdGUgX3JlcG9ydEZhaWx1cmUoXG4gICAgdGVybWluYWw6IElUZXJtaW5hbCxcbiAgICByZXF1ZXN0TWV0aG9kOiBzdHJpbmcsXG4gICAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICAgIGlzUmVkaXJlY3Q6IGJvb2xlYW4sXG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICk6IHZvaWQge1xuICAgIHN3aXRjaCAodGhpcy5fZ2V0RmFpbHVyZVR5cGUocmVxdWVzdE1ldGhvZCwgcmVzcG9uc2UsIGlzUmVkaXJlY3QpKSB7XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlRXJyb3JMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5XYXJuaW5nOiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlV2FybmluZ0xpbmUoYCR7bWVzc2FnZX06IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEZhaWx1cmVUeXBlLkluZm9ybWF0aW9uYWw6IHtcbiAgICAgICAgdGVybWluYWwud3JpdGVMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5Ob25lOiB7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlRGVidWdMaW5lKGAke21lc3NhZ2V9OiBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBGYWlsdXJlVHlwZS5BdXRoZW50aWNhdGlvbjoge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgW1xuICAgICAgICAgICAgYCR7dGhpcy5fdXJsLmhyZWZ9IHJlc3BvbmRlZCB3aXRoICR7cmVzcG9uc2Uuc3RhdHVzfTogJHtyZXNwb25zZS5zdGF0dXNUZXh0fS5gLFxuICAgICAgICAgICAgYENyZWRlbnRpYWxzIG1heSBiZSBtaXNjb25maWd1cmVkIG9yIGhhdmUgZXhwaXJlZC5gLFxuICAgICAgICAgICAgYEluIENJLCB2ZXJpZnkgdGhhdCBSVVNIX0JVSUxEX0NBQ0hFX0NSRURFTlRJQUwgY29udGFpbnMgYSB2YWxpZCBBdXRob3JpemF0aW9uIGhlYWRlciB2YWx1ZS5gLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgRm9yIGxvY2FsIGRldmVsb3BlcnMsIHJ1bjpgLFxuICAgICAgICAgICAgYGAsXG4gICAgICAgICAgICBgICAgIHJ1c2ggdXBkYXRlLWNsb3VkLWNyZWRlbnRpYWxzIC0taW50ZXJhY3RpdmVgLFxuICAgICAgICAgICAgYGBcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=