mis-crystal-design-system 18.0.27 → 18.0.29

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.
@@ -458,8 +458,37 @@ export class TzDrpContainerComponent {
458
458
  const isCurrentDay = this.dayjsInstance().year(currentYearNumber).month(month).date(currentDate).format(this.data.dpConfig.format) ===
459
459
  this.dayjsInstance().format(this.data.dpConfig.format);
460
460
  // Extract date part for comparison (handle both date-only and datetime formats)
461
- const startDateString = this.localSelectedDates?.startDate?.split(' ')[0] || this.localSelectedDates?.startDate;
462
- const endDateString = this.localSelectedDates?.endDate?.split(' ')[0] || this.localSelectedDates?.endDate;
461
+ let startDateString = this.localSelectedDates?.startDate;
462
+ let endDateString = this.localSelectedDates?.endDate;
463
+ // Only extract date part if the format contains time components
464
+ if (this.data.dpConfig.format.includes('HH') || this.data.dpConfig.format.includes('mm') || this.data.dpConfig.format.includes('A')) {
465
+ // For datetime formats, we need to extract just the date part
466
+ // Try to parse the full string and then format it as date-only for comparison
467
+ if (startDateString) {
468
+ const parsedStart = this.parseDateWithMultipleFormats(startDateString);
469
+ if (parsedStart.isValid()) {
470
+ // Extract date part by finding the time boundary - handle spaces in date part
471
+ const timeStartMatch = this.data.dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
472
+ if (timeStartMatch) {
473
+ const timeStartIndex = this.data.dpConfig.format.indexOf(timeStartMatch[0]);
474
+ const dateOnlyFormat = this.data.dpConfig.format.substring(0, timeStartIndex);
475
+ startDateString = parsedStart.format(dateOnlyFormat);
476
+ }
477
+ }
478
+ }
479
+ if (endDateString) {
480
+ const parsedEnd = this.parseDateWithMultipleFormats(endDateString);
481
+ if (parsedEnd.isValid()) {
482
+ // Extract date part by finding the time boundary - handle spaces in date part
483
+ const timeStartMatch = this.data.dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
484
+ if (timeStartMatch) {
485
+ const timeStartIndex = this.data.dpConfig.format.indexOf(timeStartMatch[0]);
486
+ const dateOnlyFormat = this.data.dpConfig.format.substring(0, timeStartIndex);
487
+ endDateString = parsedEnd.format(dateOnlyFormat);
488
+ }
489
+ }
490
+ }
491
+ }
463
492
  // Parse the selected dates to get proper dayjs instances for comparison
464
493
  const startDateParsed = startDateString ? this.parseDateWithMultipleFormats(startDateString) : null;
465
494
  const endDateParsed = endDateString ? this.parseDateWithMultipleFormats(endDateString) : null;
@@ -505,12 +534,49 @@ export class TzDrpContainerComponent {
505
534
  .month(from === "LEFT" ? this.currentMonthNumber : this.nextMonthNumber)
506
535
  .date(day.date);
507
536
  // Extract date part from existing start date for comparison
508
- const startDateString = this.localSelectedDates.startDate?.split(' ')[0] || this.localSelectedDates.startDate;
537
+ let startDateString = this.localSelectedDates.startDate;
538
+ // Only extract date part if the format contains time components
539
+ if (this.data.dpConfig.format.includes('HH') || this.data.dpConfig.format.includes('mm') || this.data.dpConfig.format.includes('A')) {
540
+ // For datetime formats, we need to extract just the date part
541
+ // Try to parse the full string and then format it as date-only for comparison
542
+ if (startDateString) {
543
+ const parsedStart = this.parseDateWithMultipleFormats(startDateString);
544
+ if (parsedStart.isValid()) {
545
+ // Extract date part by finding the time boundary - handle spaces in date part
546
+ const timeStartMatch = this.data.dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
547
+ if (timeStartMatch) {
548
+ const timeStartIndex = this.data.dpConfig.format.indexOf(timeStartMatch[0]);
549
+ const dateOnlyFormat = this.data.dpConfig.format.substring(0, timeStartIndex);
550
+ startDateString = parsedStart.format(dateOnlyFormat);
551
+ }
552
+ }
553
+ }
554
+ }
509
555
  const startDate = startDateString ? this.parseDateWithMultipleFormats(startDateString) : null;
510
556
  // If the selected date is before the start date, make it the new start date
511
557
  if (startDate && dayjsDay.isBefore(startDate, "day")) {
558
+ let formattedDate = dayjsDay.format(this.data.dpConfig.format);
559
+ // If time is enabled, append current time to the date
560
+ if (this.data.dpConfig.enableTime === true) {
561
+ const now = dayjs();
562
+ // Extract date part from the configured format - handle spaces in date part
563
+ // Look for the pattern where time starts (HH, mm, ss, A, a)
564
+ const timeStartMatch = this.data.dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
565
+ if (timeStartMatch) {
566
+ const timeStartIndex = this.data.dpConfig.format.indexOf(timeStartMatch[0]);
567
+ const dateOnlyFormat = this.data.dpConfig.format.substring(0, timeStartIndex);
568
+ const timeOnlyFormat = this.data.dpConfig.format.substring(timeStartIndex + timeStartMatch[1].length);
569
+ const dateString = dayjsDay.format(dateOnlyFormat);
570
+ const timeString = now.format(timeOnlyFormat);
571
+ formattedDate = dateString + timeStartMatch[1] + timeString;
572
+ }
573
+ else {
574
+ // Fallback if no time pattern found
575
+ formattedDate = dayjsDay.format(this.data.dpConfig.format);
576
+ }
577
+ }
512
578
  this.localSelectedDates = {
513
- startDate: dayjsDay.format(this.data.dpConfig.format),
579
+ startDate: formattedDate,
514
580
  endDate: null,
515
581
  selectedRangeLabel: this.CUSTOM_RANGE_LABEL
516
582
  };
@@ -519,20 +585,68 @@ export class TzDrpContainerComponent {
519
585
  return;
520
586
  }
521
587
  this.selectionStarted = false;
588
+ let formattedEndDate = dayjsDay.format(this.data.dpConfig.format);
589
+ // If time is enabled, append current time to the date
590
+ if (this.data.dpConfig.enableTime === true) {
591
+ const now = dayjs();
592
+ // Extract date part from the configured format - handle spaces in date part
593
+ // Look for the pattern where time starts (HH, mm, ss, A, a)
594
+ const timeStartMatch = this.data.dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
595
+ if (timeStartMatch) {
596
+ const timeStartIndex = this.data.dpConfig.format.indexOf(timeStartMatch[0]);
597
+ const dateOnlyFormat = this.data.dpConfig.format.substring(0, timeStartIndex);
598
+ const timeOnlyFormat = this.data.dpConfig.format.substring(timeStartIndex + timeStartMatch[1].length);
599
+ const dateString = dayjsDay.format(dateOnlyFormat);
600
+ const timeString = now.format(timeOnlyFormat);
601
+ formattedEndDate = dateString + timeStartMatch[1] + timeString;
602
+ }
603
+ else {
604
+ // Fallback if no time pattern found
605
+ formattedEndDate = dayjsDay.format(this.data.dpConfig.format);
606
+ }
607
+ }
522
608
  this.localSelectedDates = {
523
609
  ...this.localSelectedDates,
524
- endDate: dayjsDay.format(this.data.dpConfig.format),
610
+ endDate: formattedEndDate,
525
611
  selectedRangeLabel: this.CUSTOM_RANGE_LABEL
526
612
  };
527
613
  }
528
614
  else {
529
615
  this.selectionStarted = true;
616
+ let formattedStartDate = dayjs()
617
+ .year(from === "LEFT" ? this.currentYearNumber : this.nextYearNumber)
618
+ .month(from === "LEFT" ? this.currentMonthNumber : this.nextMonthNumber)
619
+ .date(day.date)
620
+ .format(this.data.dpConfig.format);
621
+ // If time is enabled, append current time to the date
622
+ if (this.data.dpConfig.enableTime === true) {
623
+ const now = dayjs();
624
+ // Extract date part from the configured format - handle spaces in date part
625
+ // Look for the pattern where time starts (HH, mm, ss, A, a)
626
+ const timeStartMatch = this.data.dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
627
+ if (timeStartMatch) {
628
+ const timeStartIndex = this.data.dpConfig.format.indexOf(timeStartMatch[0]);
629
+ const dateOnlyFormat = this.data.dpConfig.format.substring(0, timeStartIndex);
630
+ const timeOnlyFormat = this.data.dpConfig.format.substring(timeStartIndex + timeStartMatch[1].length);
631
+ const dateString = dayjs()
632
+ .year(from === "LEFT" ? this.currentYearNumber : this.nextYearNumber)
633
+ .month(from === "LEFT" ? this.currentMonthNumber : this.nextMonthNumber)
634
+ .date(day.date)
635
+ .format(dateOnlyFormat);
636
+ const timeString = now.format(timeOnlyFormat);
637
+ formattedStartDate = dateString + timeStartMatch[1] + timeString;
638
+ }
639
+ else {
640
+ // Fallback if no time pattern found
641
+ formattedStartDate = dayjs()
642
+ .year(from === "LEFT" ? this.currentYearNumber : this.nextYearNumber)
643
+ .month(from === "LEFT" ? this.currentMonthNumber : this.nextMonthNumber)
644
+ .date(day.date)
645
+ .format(this.data.dpConfig.format);
646
+ }
647
+ }
530
648
  this.localSelectedDates = {
531
- startDate: dayjs()
532
- .year(from === "LEFT" ? this.currentYearNumber : this.nextYearNumber)
533
- .month(from === "LEFT" ? this.currentMonthNumber : this.nextMonthNumber)
534
- .date(day.date)
535
- .format(this.data.dpConfig.format),
649
+ startDate: formattedStartDate,
536
650
  endDate: null,
537
651
  selectedRangeLabel: this.CUSTOM_RANGE_LABEL
538
652
  };
@@ -612,8 +726,37 @@ export class TzDrpContainerComponent {
612
726
  endTime = this.formatTime(this.endHour24, this.endMinute, '');
613
727
  }
614
728
  // Extract only the date part (before any existing time) and append the selected time
615
- const startDateOnly = this.localSelectedDates.startDate?.split(' ')[0] || this.localSelectedDates.startDate;
616
- const endDateOnly = this.localSelectedDates.endDate?.split(' ')[0] || this.localSelectedDates.endDate;
729
+ let startDateOnly = this.localSelectedDates.startDate;
730
+ let endDateOnly = this.localSelectedDates.endDate;
731
+ // Only extract date part if the format contains time components
732
+ if (this.data.dpConfig.format.includes('HH') || this.data.dpConfig.format.includes('mm') || this.data.dpConfig.format.includes('A')) {
733
+ // For datetime formats, we need to extract just the date part
734
+ // Try to parse the full string and then format it as date-only for comparison
735
+ if (startDateOnly) {
736
+ const parsedStart = this.parseDateWithMultipleFormats(startDateOnly);
737
+ if (parsedStart.isValid()) {
738
+ // Extract date part by finding the time boundary - handle spaces in date part
739
+ const timeStartMatch = this.data.dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
740
+ if (timeStartMatch) {
741
+ const timeStartIndex = this.data.dpConfig.format.indexOf(timeStartMatch[0]);
742
+ const dateOnlyFormat = this.data.dpConfig.format.substring(0, timeStartIndex);
743
+ startDateOnly = parsedStart.format(dateOnlyFormat);
744
+ }
745
+ }
746
+ }
747
+ if (endDateOnly) {
748
+ const parsedEnd = this.parseDateWithMultipleFormats(endDateOnly);
749
+ if (parsedEnd.isValid()) {
750
+ // Extract date part by finding the time boundary - handle spaces in date part
751
+ const timeStartMatch = this.data.dpConfig.format.match(/(\s+)(HH|mm|ss|A|a)/);
752
+ if (timeStartMatch) {
753
+ const timeStartIndex = this.data.dpConfig.format.indexOf(timeStartMatch[0]);
754
+ const dateOnlyFormat = this.data.dpConfig.format.substring(0, timeStartIndex);
755
+ endDateOnly = parsedEnd.format(dateOnlyFormat);
756
+ }
757
+ }
758
+ }
759
+ }
617
760
  const startDateWithTime = startDateOnly + ' ' + startTime;
618
761
  const endDateWithTime = endDateOnly + ' ' + endTime;
619
762
  this.data.dateChange({
@@ -982,4 +1125,4 @@ export class TzDrpContainerComponent {
982
1125
  args: ["keydown.esc"]
983
1126
  }] }); })();
984
1127
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TzDrpContainerComponent, { className: "TzDrpContainerComponent" }); })();
985
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVyYW5nZXBpY2tlcl92Mi90ei1kcnAtY29udGFpbmVyL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdwQyxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8saUJBQWlCLE1BQU0sZ0NBQWdDLENBQUE7QUFDOUQsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7SUNQdkMsQUFERiwyQkFBd0QsaUJBS3JEO0lBRkMsb05BQVMsMkJBQWlCLEtBQUM7SUFHM0IsWUFDRjtJQUNGLEFBREUsaUJBQVMsRUFDTDs7OztJQU5KLGNBQStEO0lBQS9ELGdHQUErRDtJQUk3RCxjQUNGO0lBREUsOENBQ0Y7Ozs7SUFSSiwrQkFBMEY7SUFDeEYsK0VBQXdEO0lBU2xELEFBQU4sMkJBQUssaUJBQW9IO0lB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RGxDLFVBQVU7a0JBRFQsWUFBWTttQkFBQyxhQUFhOztrRkFqSmhCLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDT05UQUlORVJfREFUQSwgREFURV9GT1JNQVQgfSBmcm9tIFwiLi4vZGF0ZXJhbmdlcGlja2VyLWNvbnN0YW50c1wiO1xuaW1wb3J0IHsgSUN1cnJlbnRNb250aCwgSUN1cnJlbnRNb250aERhdGVzLCBJRGF0ZVBpY2tlckRhdGEsIElXZWVrRGF5LCBJU2VsZWN0ZWREYXRlc0NvbmZpZywgUmFuZ2VJdGVtIH0gZnJvbSBcIi4uL21vZGVscy9kcnAtY29uZmlnLm1vZGVsXCI7XG5pbXBvcnQgeyBnZXRNb250aCB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcIm1pcy1jcnlzdGFsLWRlc2lnbi1zeXN0ZW0vdG9hc3RcIjtcblxuaW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSAnZGF5anMnO1xuaW1wb3J0IHRpbWV6b25lIGZyb20gJ2RheWpzL3BsdWdpbi90aW1lem9uZSc7XG5pbXBvcnQgdXRjIGZyb20gJ2RheWpzL3BsdWdpbi91dGMnO1xuaW1wb3J0IGlzU2FtZU9yQWZ0ZXIgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQWZ0ZXInO1xuaW1wb3J0IGlzU2FtZU9yQmVmb3JlIGZyb20gJ2RheWpzL3BsdWdpbi9pc1NhbWVPckJlZm9yZSc7XG5pbXBvcnQgY3VzdG9tUGFyc2VGb3JtYXQgZnJvbSAnZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0J1xuaW1wb3J0IGlzQmV0d2VlbiBmcm9tICdkYXlqcy9wbHVnaW4vaXNCZXR3ZWVuJztcbmRheWpzLmV4dGVuZChpc0JldHdlZW4pO1xuZGF5anMuZXh0ZW5kKHV0Yyk7XG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckFmdGVyKTtcbmRheWpzLmV4dGVuZChpc1NhbWVPckJlZm9yZSk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtdHotZHJwXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vdHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuc2Nzc1wiXVxufSlcbmV4cG9ydCBjbGFzcyBUekRycENvbnRhaW5lckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ1VTVE9NX1JBTkdFX0xBQkVMID0gXCJDdXN0b20gUmFuZ2VcIjtcbiAgZGF0YTogSURhdGVQaWNrZXJEYXRhO1xuICBwcml2YXRlIGRheWpzSW5zdGFuY2UgPSAoLi4uYXJncykgPT4ge1xuICAgIHJldHVybiBkYXlqcyguLi5hcmdzKTtcbiAgfTtcblxuICAvKipcbiAgICogUGFyc2UgZGF0ZSBzdHJpbmcgdXNpbmcgY29uZmlndXJlZCBmb3JtYXQgd2l0aCBmYWxsYmFja1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGRhdGVTdHJpbmc6IHN0cmluZyk6IGRheWpzLkRheWpzIHtcbiAgICBpZiAoIWRhdGVTdHJpbmcgfHwgZGF0ZVN0cmluZyA9PT0gJ0ludmFsaWQgRGF0ZScgfHwgZGF0ZVN0cmluZyA9PT0gJ3VuZGVmaW5lZCcgfHwgZGF0ZVN0cmluZyA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gZGF5anMoJ2ludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvLyBGaXJzdCB0cnkgdGhlIGNvbmZpZ3VyZWQgZm9ybWF0XG4gICAgY29uc3QgY29uZmlndXJlZEZvcm1hdCA9IHRoaXMuZGF0YT8uZHBDb25maWc/LmZvcm1hdDtcbiAgICBpZiAoY29uZmlndXJlZEZvcm1hdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gZGF5anMoZGF0ZVN0cmluZywgY29uZmlndXJlZEZvcm1hdCk7XG4gICAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ29udGludWUgdG8gZmFsbGJhY2sgZm9ybWF0c1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIHRvIGNvbW1vbiBmb3JtYXRzIGlmIGNvbmZpZ3VyZWQgZm9ybWF0IGZhaWxzXG4gICAgY29uc3QgZmFsbGJhY2tGb3JtYXRzID0gW1xuICAgICAgJ0REL01NTS9ZWVlZJyxcbiAgICAgICdERC9NTS9ZWVlZJyxcbiAgICAgICdERC1NTU0tWVlZWScsXG4gICAgICAnREQtTU0tWVlZWScsXG4gICAgICAnWVlZWS1NTS1ERCdcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBmb3JtYXQgb2YgZmFsbGJhY2tGb3JtYXRzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBkYXlqcyhkYXRlU3RyaW5nLCBmb3JtYXQpO1xuICAgICAgICBpZiAocGFyc2VkLmlzVmFsaWQoKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIENvbnRpbnVlIHRvIG5leHQgZm9ybWF0XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgYWxsIGZvcm1hdHMgZmFpbCwgdHJ5IHBhcnNpbmcgd2l0aG91dCBmb3JtYXQgKGxldCBkYXlqcyBndWVzcylcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gZGF5anMoZGF0ZVN0cmluZyk7XG4gICAgICBpZiAocGFyc2VkLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhaWxlZCB0byBwYXJzZSBkYXRlIHdpdGggYW55IGZvcm1hdDonLCBkYXRlU3RyaW5nLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRheWpzKCdpbnZhbGlkJyk7XG4gIH1cbiAgcHJpdmF0ZSByYXdXZWVrRGF5czogc3RyaW5nW10gPSBbXCJTVU5cIiwgXCJNT05cIiwgXCJUVUVcIiwgXCJXRURcIiwgXCJUSFVcIiwgXCJGUklcIiwgXCJTQVRcIl07XG4gIHdlZWtEYXlzOiBJV2Vla0RheVtdID0gW107XG4gIGN1cnJlbnRNb250aE51bWJlcjogbnVtYmVyO1xuICBjdXJyZW50TW9udGg6IElDdXJyZW50TW9udGg7XG4gIGN1cnJlbnRZZWFyTnVtYmVyOiBudW1iZXI7XG4gIGN1cnJlbnRNb250aERhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICBuZXh0TW9udGhOdW1iZXI6IG51bWJlcjtcbiAgbmV4dE1vbnRoOiBJQ3VycmVudE1vbnRoO1xuICBuZXh0WWVhck51bWJlcjogbnVtYmVyO1xuICBuZXh0TW9udGhEYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgaXNQcmV2aW91c01vbnRoRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNOZXh0TW9udGhEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3Rpb25TdGFydGVkID0gZmFsc2U7XG4gIGxvY2FsU2VsZWN0ZWREYXRlczogSVNlbGVjdGVkRGF0ZXNDb25maWc7XG4gIGlzRGF0ZXNWYWxpZCA9IGZhbHNlOyAgXG4gIHNlbGVjdGVkSXRlbUxhYmVsID0gdGhpcy5DVVNUT01fUkFOR0VfTEFCRUw7XG4gIC8vIFRpbWUgc2VsZWN0aW9uIHByb3BlcnRpZXNcbiAgc3RhcnRIb3VyOiBudW1iZXIgPSAxMjtcbiAgc3RhcnRNaW51dGU6IG51bWJlciA9IDA7XG4gIHN0YXJ0QW1QbTogc3RyaW5nID0gJ0FNJztcbiAgZW5kSG91cjogbnVtYmVyID0gMTI7XG4gIGVuZE1pbnV0ZTogbnVtYmVyID0gMDtcbiAgZW5kQW1QbTogc3RyaW5nID0gJ0FNJztcbiAgXG4gIC8vIEZvciAyNC1ob3VyIGZvcm1hdCwgc3RvcmUgYWN0dWFsIDI0LWhvdXIgdmFsdWVzXG4gIHN0YXJ0SG91cjI0OiBudW1iZXIgPSAxMjtcbiAgZW5kSG91cjI0OiBudW1iZXIgPSAxMjtcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENPTlRBSU5FUl9EQVRBKSBkYXRhOiBJRGF0ZVBpY2tlckRhdGEsIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMgPSB0aGlzLmRhdGEuZGF0ZXM7XG4gICAgdGhpcy5pc0RhdGVzVmFsaWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLmVuZERhdGUpIHtcbiAgICAgIHRoaXMuaXNEYXRlc1ZhbGlkID0gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBzZWxlY3RlZEl0ZW1MYWJlbCBmcm9tIGRhdGEuc2VsZWN0ZWRSYW5nZUxhYmVsIGlmIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmRhdGEuc2VsZWN0ZWRSYW5nZUxhYmVsKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhYmVsID0gdGhpcy5kYXRhLnNlbGVjdGVkUmFuZ2VMYWJlbDtcbiAgICB9XG4gICAgXG4gICAgLy8gSW5pdGlhbGl6ZSBkYXlqc0luc3RhbmNlIHdpdGggdGltZXpvbmUgaGFuZGxpbmdcbiAgICBpZiAodGhpcy5kYXRhPy5kcENvbmZpZz8udGltZXpvbmUpIHtcbiAgICAgIHRoaXMuZGF5anNJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIGRheWpzLnR6KGFyZ3NbMF0sIGFyZ3NbMV0gfHwgJ0REL01NL1lZWVknLCB0aGlzLmRhdGEuZHBDb25maWcudGltZXpvbmUpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgcGFyc2luZyBkYXRlIHdpdGggdGltZXpvbmU6JywgZXJyb3IsICdhcmdzOicsIGFyZ3MpO1xuICAgICAgICAgIHJldHVybiBkYXlqcyhhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLm1vbnRoKCk7XG4gICAgdGhpcy5uZXh0TW9udGhOdW1iZXIgPSB0aGlzLmRheWpzSW5zdGFuY2UoKS5hZGQoMSwgXCJtb250aFwiKS5tb250aCgpO1xuICAgIHRoaXMuY3VycmVudE1vbnRoID0gZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIHRoaXMubmV4dE1vbnRoID0gZ2V0TW9udGgodGhpcy5uZXh0TW9udGhOdW1iZXIpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSB0aGlzLmRheWpzSW5zdGFuY2UoKS55ZWFyKCk7XG4gICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLnllYXIoKTtcbiAgICB0aGlzLndlZWtEYXlzID0gdGhpcy5yYXdXZWVrRGF5cy5tYXAoKGRheSwgaW5kZXgpID0+ICh7XG4gICAgICBsYWJlbDogYCR7ZGF5WzBdfSR7ZGF5LnNsaWNlKDEpLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIGlzQ3VycmVudERheTogdGhpcy5kYXlqc0luc3RhbmNlKCkuZGF5KCkgPT09IGluZGV4XG4gICAgfSkpO1xuICAgIGlmICghdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0KSB7XG4gICAgICB0aGlzLmRhdGEuZHBDb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMuZGF0YS5kcENvbmZpZyxcbiAgICAgICAgZm9ybWF0OiBEQVRFX0ZPUk1BVFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREYXRlSW5zdGFuY2UoKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgICB0aGlzLmluaXRpYWxpemVUaW1lVmFsdWVzKCk7XG5cbiAgICBpZih0aGlzLmRhdGE/LnNob3dQcmV2TW9udGggJiYgIXRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQpe1xuICAgICAgdGhpcy5uYXZpZ2F0ZU1vbnRoKCdQUkVWSU9VUycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHJhY3REYXlNb250aChkYXk6IGFueSwgbW9udGg6IGFueSwgeWVhcjogYW55KTogYW55IHtcbiAgICByZXR1cm4gYCR7ZGF5fSAke21vbnRofSAke3llYXJ9YDtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJrZXlkb3duLmVzY1wiKVxuICBjbG9zZU9uRXNjKCkge1xuICAgIHRoaXMuY2FuY2VsRGF0ZVBpY2tlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50RGF0ZUluc3RhbmNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgZm9yIHBhcnNpbmcgKGhhbmRsZSBib3RoIGRhdGUtb25seSBhbmQgZGF0ZXRpbWUgZm9ybWF0cylcbiAgICBjb25zdCBzdGFydERhdGVTdHJpbmcgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uc3RhcnREYXRlPy5zcGxpdCgnICcpWzBdIHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGU7XG4gICAgY29uc3QgZW5kRGF0ZVN0cmluZyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5lbmREYXRlPy5zcGxpdCgnICcpWzBdIHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5lbmREYXRlO1xuICAgIFxuICAgIC8vIFZhbGlkYXRlIGRhdGUgc3RyaW5ncyBiZWZvcmUgcGFyc2luZ1xuICAgIGlmICghc3RhcnREYXRlU3RyaW5nIHx8IHN0YXJ0RGF0ZVN0cmluZyA9PT0gJ0ludmFsaWQgRGF0ZScgfHwgc3RhcnREYXRlU3RyaW5nID09PSAndW5kZWZpbmVkJyB8fCBzdGFydERhdGVTdHJpbmcgPT09ICdudWxsJykge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgY29uc3Qgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlU3RyaW5nKTtcbiAgICBjb25zdCBzZWxlY3RlZEVuZERhdGUgPSBlbmREYXRlU3RyaW5nID8gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGVuZERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICBcbiAgICBpZiAoc2VsZWN0ZWRTdGFydERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUueWVhcigpO1xuICAgICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHNlbGVjdGVkU3RhcnREYXRlLmFkZCgxLCBcIm1vbnRoXCIpLnllYXIoKTtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUuZ2V0KFwibW9udGhcIik7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHNlbGVjdGVkU3RhcnREYXRlLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgICBpZih0aGlzLmN1cnJlbnRNb250aE51bWJlciA9PT0gLTEpe1xuICAgICAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IDExXG4gICAgICB9XG4gICAgICBpZih0aGlzLm5leHRNb250aE51bWJlciA9PT0gLTEpe1xuICAgICAgICB0aGlzLm5leHRNb250aE51bWJlciA9IDExXG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRNb250aCA9IGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoID0gZ2V0TW9udGgodGhpcy5uZXh0TW9udGhOdW1iZXIpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGVuZCBkYXRlLCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IG1vbnRoXG4gICAgaWYgKHNlbGVjdGVkRW5kRGF0ZSAmJiBzZWxlY3RlZEVuZERhdGUuaXNWYWxpZCgpICYmIHNlbGVjdGVkRW5kRGF0ZS5pc0FmdGVyKHNlbGVjdGVkU3RhcnREYXRlLCAnbW9udGgnKSkge1xuICAgICAgdGhpcy5uZXh0TW9udGhOdW1iZXIgPSBzZWxlY3RlZEVuZERhdGUubW9udGgoKTtcbiAgICAgIHRoaXMubmV4dFllYXJOdW1iZXIgPSBzZWxlY3RlZEVuZERhdGUueWVhcigpO1xuICAgICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgfVxuICAgIFxuICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIsIHRoaXMuY3VycmVudFllYXJOdW1iZXIpO1xuICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjdWxhdGVNaW5NYXhEYXlzKCkge1xuICAgIGNvbnN0IGN1cnJlbnRJbnN0YW5jZSA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcikubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIGNvbnN0IG1pbkRhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgaWYgKG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICB0aGlzLmlzUHJldmlvdXNNb250aERpc2FibGVkID0gbWluRGF0ZS5pc1NhbWVPckFmdGVyKGN1cnJlbnRJbnN0YW5jZSwgXCJtb250aFwiKTtcbiAgICB9XG4gICAgY29uc3QgbWF4RGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpIDogZGF5anMoJ2ludmFsaWQnKTtcbiAgICBpZiAobWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuaXNOZXh0TW9udGhEaXNhYmxlZCA9IG1heERhdGUuaXNTYW1lT3JCZWZvcmUoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgfVxuXG4gIG5hdmlnYXRlTW9udGgoZGlyZWN0aW9uOiBcIk5FWFRcIiB8IFwiUFJFVklPVVNcIik6IHZvaWQge1xuICAgIGxldCB0aGlzTW9udGg6IERheWpzID0gZGF5anMoKS55ZWFyKHRoaXMuY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICB0aGlzTW9udGggPSB0aGlzTW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSB0aGlzTW9udGgubW9udGgoKTtcbiAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHRoaXNNb250aC5jbG9uZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyID09PSAwICYmIGRpcmVjdGlvbiA9PT0gXCJQUkVWSU9VU1wiKSB7XG4gICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXItLTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgIHRoaXMubmV4dFllYXJOdW1iZXIrKztcbiAgICB9ZWxzZSBpZiAodGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPT09IDAgJiYgZGlyZWN0aW9uID09PSBcIk5FWFRcIikge1xuICAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKys7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5leHRNb250aE51bWJlciA9PT0gMTEgJiYgZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlci0tO1xuICAgIH1lbHNle1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gdGhpcy5jdXJyZW50WWVhck51bWJlcjtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgdGhpcy5jYWxjdWxhdGVNaW5NYXhEYXlzKCk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlRGF0ZXMobW9udGg6IG51bWJlciwgY3VycmVudFllYXJOdW1iZXI6IG51bWJlcik6IElDdXJyZW50TW9udGhEYXRlc1tdIHtcbiAgICBsZXQgZGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gICAgY29uc3QgZGF5c0luTW9udGggPSBkYXlqcygpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXlzSW5Nb250aCgpO1xuICAgIGZvciAobGV0IGN1cnJlbnREYXRlID0gMTsgY3VycmVudERhdGUgPD0gZGF5c0luTW9udGg7IGN1cnJlbnREYXRlKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBkYXlqcygpLnllYXIoY3VycmVudFllYXJOdW1iZXIpLm1vbnRoKG1vbnRoKS5kYXRlKGN1cnJlbnREYXRlKTtcbiAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgIGxldCBpc0Rpc2FibGVkRGF5ID0gdGhpcy5kYXRhLmRhdGVzRGlzYWJsZWQuc29tZShkID0+IGQgPT09IGRhdGVTdHJpbmcpO1xuICAgICAgLy8gUGFyc2UgbWluL21heCBkYXRlcyBzYWZlbHkgLSB0cnkgZGF0ZS1vbmx5IGZvcm1hdCBmaXJzdCwgdGhlbiBmdWxsIGZvcm1hdFxuICAgICAgbGV0IG1pbkRhdGUgPSBudWxsO1xuICAgICAgbGV0IG1heERhdGUgPSBudWxsO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBvbmx5IGZvciBjb21wYXJpc29uXG4gICAgICAgICAgY29uc3QgbWluRGF0ZVN0ciA9IHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLnNwbGl0KCcgJylbMF07XG4gICAgICAgICAgbWluRGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhtaW5EYXRlU3RyKTtcbiAgICAgICAgICBpZiAoIW1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICBtaW5EYXRlID0gZGF5anModGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHBhcnNpbmcgbWluIGRhdGU6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IG1heERhdGVTdHIgPSB0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZS5zcGxpdCgnICcpWzBdO1xuICAgICAgICAgIG1heERhdGUgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMobWF4RGF0ZVN0cik7XG4gICAgICAgICAgaWYgKCFtYXhEYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgbWF4RGF0ZSA9IGRheWpzKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBwYXJzaW5nIG1heCBkYXRlOicsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWluRGF0ZSAmJiBtaW5EYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICBpc0Rpc2FibGVkRGF5ID0gbWluRGF0ZS5pc0FmdGVyKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc0Rpc2FibGVkRGF5ICYmIG1heERhdGUgJiYgbWF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IG1heERhdGUuaXNCZWZvcmUoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZGF0YT8uZHBDb25maWc/Lm1heEFsbG93ZWRSYW5nZSA+IDAgJiZcbiAgICAgICAgIWlzRGlzYWJsZWREYXkgJiZcbiAgICAgICAgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGUgPz8gZmFsc2UpICYmICghKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLmVuZERhdGUgPz8gZmFsc2UpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGRheWpzKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgIGNvbnN0IG1heEVuZERhdGUgPSBzdGFydERhdGUuY2xvbmUoKS5hZGQodGhpcy5kYXRhLmRwQ29uZmlnLm1heEFsbG93ZWRSYW5nZSAtIDEsICdkYXlzJyk7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBkYXRlLmlzQWZ0ZXIobWF4RW5kRGF0ZSwgJ2RheScpIFxuICAgICAgfVxuICAgICAgY29uc3QgaXNDdXJyZW50RGF5ID1cbiAgICAgICAgdGhpcy5kYXlqc0luc3RhbmNlKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT1cbiAgICAgICAgdGhpcy5kYXlqc0luc3RhbmNlKCkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmb3IgY29tcGFyaXNvbiAoaGFuZGxlIGJvdGggZGF0ZS1vbmx5IGFuZCBkYXRldGltZSBmb3JtYXRzKVxuICAgICAgY29uc3Qgc3RhcnREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZT8uc3BsaXQoJyAnKVswXSB8fCB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uc3RhcnREYXRlO1xuICAgICAgY29uc3QgZW5kRGF0ZVN0cmluZyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5lbmREYXRlPy5zcGxpdCgnICcpWzBdIHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5lbmREYXRlO1xuICAgICAgXG4gICAgICAvLyBQYXJzZSB0aGUgc2VsZWN0ZWQgZGF0ZXMgdG8gZ2V0IHByb3BlciBkYXlqcyBpbnN0YW5jZXMgZm9yIGNvbXBhcmlzb25cbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVBhcnNlZCA9IHN0YXJ0RGF0ZVN0cmluZyA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICAgIGNvbnN0IGVuZERhdGVQYXJzZWQgPSBlbmREYXRlU3RyaW5nID8gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGVuZERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICAgIFxuICAgICAgY29uc3QgaXNTZWxlY3RlZFN0YXJ0RGF5ID1cbiAgICAgICAgIWlzRGlzYWJsZWREYXkgJiZcbiAgICAgICAgc3RhcnREYXRlUGFyc2VkICYmXG4gICAgICAgIHN0YXJ0RGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiZcbiAgICAgICAgZGF0ZS5pc1NhbWUoc3RhcnREYXRlUGFyc2VkLCAnZGF5Jyk7XG4gICAgICAgIFxuICAgICAgY29uc3QgaXNTZWxlY3RlZEVuZERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgIGVuZERhdGVQYXJzZWQgJiZcbiAgICAgICAgZW5kRGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiZcbiAgICAgICAgZGF0ZS5pc1NhbWUoZW5kRGF0ZVBhcnNlZCwgJ2RheScpO1xuICAgICAgICBcbiAgICAgIC8vIEZvciByYW5nZSBjYWxjdWxhdGlvbiwgdXNlIHRoZSBhbHJlYWR5IHBhcnNlZCBkYXRlc1xuICAgICAgY29uc3QgaXNBZnRlclNlbGVjdGVkU3RhcnREYXRlID0gc3RhcnREYXRlUGFyc2VkID8gdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUpLmlzQWZ0ZXIoc3RhcnREYXRlUGFyc2VkLCBcImRheVwiKSA6IGZhbHNlO1xuICAgICAgY29uc3QgaXNCZWZvcmVTZWxlY3RlZEVuZERhdGUgPSBlbmREYXRlUGFyc2VkID8gdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUpLmlzQmVmb3JlKGVuZERhdGVQYXJzZWQsIFwiZGF5XCIpIDogZmFsc2U7XG4gICAgICBcbiAgICAgIGNvbnN0IGluUmFuZ2VEYXkgPVxuICAgICAgICBzdGFydERhdGVQYXJzZWQgJiYgZW5kRGF0ZVBhcnNlZCAmJlxuICAgICAgICBzdGFydERhdGVQYXJzZWQuaXNWYWxpZCgpICYmIGVuZERhdGVQYXJzZWQuaXNWYWxpZCgpICYmXG4gICAgICAgIGlzQWZ0ZXJTZWxlY3RlZFN0YXJ0RGF0ZSAmJlxuICAgICAgICBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZTtcbiAgICAgIGRhdGVzLnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF0ZSxcbiAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICBpc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgIGluUmFuZ2VEYXksXG4gICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhLm1lc3NhZ2VzLmZpbmQocSA9PiBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICBpc0Rpc2FibGVkRGF5XG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGRhdGVzWzBdLndlZWtEYXk7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGRhdGVzLnVuc2hpZnQoeyBkYXRlOiAwLCB3ZWVrRGF5OiBpIC0gMSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgc2VsZWN0RGF5KGZyb206IFwiTEVGVFwiIHwgXCJSSUdIVFwiLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcykge1xuICAgIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gICAgaWYgKCFkYXkuaXNEaXNhYmxlZERheSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbCA9IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhcnRlZCkge1xuICAgICAgICBjb25zdCBkYXlqc0RheSA9IGRheWpzKClcbiAgICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXIgOiB0aGlzLm5leHRZZWFyTnVtYmVyKVxuICAgICAgICAgIC5tb250aChmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyIDogdGhpcy5uZXh0TW9udGhOdW1iZXIpXG4gICAgICAgICAgLmRhdGUoZGF5LmRhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmcm9tIGV4aXN0aW5nIHN0YXJ0IGRhdGUgZm9yIGNvbXBhcmlzb25cbiAgICAgICAgY29uc3Qgc3RhcnREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlPy5zcGxpdCgnICcpWzBdIHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZTtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gc3RhcnREYXRlU3RyaW5nID8gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHN0YXJ0RGF0ZVN0cmluZykgOiBudWxsO1xuICAgICAgICBcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlLCBtYWtlIGl0IHRoZSBuZXcgc3RhcnQgZGF0ZVxuICAgICAgICBpZiAoc3RhcnREYXRlICYmIGRheWpzRGF5LmlzQmVmb3JlKHN0YXJ0RGF0ZSwgXCJkYXlcIikpIHtcbiAgICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICAgIHN0YXJ0RGF0ZTogZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLFxuICAgICAgICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgICAgICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogdGhpcy5DVVNUT01fUkFOR0VfTEFCRUxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIsIHRoaXMuY3VycmVudFllYXJOdW1iZXIpO1xuICAgICAgICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMsXG4gICAgICAgICAgZW5kRGF0ZTogZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpLFxuICAgICAgICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogdGhpcy5DVVNUT01fUkFOR0VfTEFCRUxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzID0ge1xuICAgICAgICAgIHN0YXJ0RGF0ZTogZGF5anMoKVxuICAgICAgICAgICAgLnllYXIoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyIDogdGhpcy5uZXh0WWVhck51bWJlcilcbiAgICAgICAgICAgIC5tb250aChmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyIDogdGhpcy5uZXh0TW9udGhOdW1iZXIpXG4gICAgICAgICAgICAuZGF0ZShkYXkuZGF0ZSlcbiAgICAgICAgICAgIC5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCksXG4gICAgICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICAgICAgdGhpcy5pc0RhdGVzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkYXkudG9hc3RNZXNzYWdlKSB7XG4gICAgICB0aGlzLnRvYXN0LmRpc3BsYXlNc2coZGF5LnRvYXN0TWVzc2FnZSwgNDAwMCk7XG4gICAgfVxuICB9XG4gIHNlbGVjdFJhbmdlKGl0ZW06IFJhbmdlSXRlbSkge1xuICAgIGlmICghaXRlbSkgcmV0dXJuO1xuICBcbiAgICBsZXQgc3RhcnREYXRlID0gdGhpcy5kYXlqc0luc3RhbmNlKGl0ZW0udmFsdWVbMF0pOyAgXG4gICAgbGV0IGVuZERhdGUgPSB0aGlzLmRheWpzSW5zdGFuY2UoaXRlbS52YWx1ZVsxXSk7ICBcbiAgXG4gICAgY29uc3Qgc3RhcnREYXRlU3RyID0gc3RhcnREYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICBjb25zdCBlbmREYXRlU3RyID0gZW5kRGF0ZS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gIFxuICAgIGNvbnN0IGlzQW55RGF0ZURpc2FibGVkID0gdGhpcy5kYXRhLmRhdGVzRGlzYWJsZWQuc29tZSgoZGF0ZSkgPT5cbiAgICAgIHRoaXMuZGF5anNJbnN0YW5jZShkYXRlICwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkuaXNCZXR3ZWVuKHN0YXJ0RGF0ZVN0ciwgZW5kRGF0ZVN0ciwgbnVsbCwgJ1tdJylcbiAgICApO1xuICBcbiAgICBjb25zdCBtaW5EYXRlID0gISF0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSA/IHRoaXMuZGF5anNJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGNvbnN0IG1heERhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gIFxuICAgIGNvbnN0IGlzV2l0aGluTGltaXRzID1cbiAgICAgICghbWluRGF0ZS5pc1ZhbGlkKCkgfHwgIXN0YXJ0RGF0ZS5pc0JlZm9yZShtaW5EYXRlLCBcImRheVwiKSkgJiZcbiAgICAgICghbWF4RGF0ZS5pc1ZhbGlkKCkgfHwgIWVuZERhdGUuaXNBZnRlcihtYXhEYXRlLCBcImRheVwiKSk7XG4gIFxuICAgIGlmICghaXNXaXRoaW5MaW1pdHMgfHwgaXNBbnlEYXRlRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhcIlNlbGVjdGVkIHJhbmdlIGNvbnRhaW5zIGRpc2FibGVkIGRhdGVzIG9yIGlzIG91dCBvZiBib3VuZHMuXCIsIDQwMDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbCA9IGl0ZW0ubGFiZWw7XG4gICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSBzdGFydERhdGUubW9udGgoKTtcbiAgICB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyID0gc3RhcnREYXRlLnllYXIoKTtcbiAgXG4gICAgaWYgKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID09PSAxMSkge1xuICAgICAgdGhpcy5uZXh0TW9udGhOdW1iZXIgPSAwO1xuICAgICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHRoaXMuY3VycmVudFllYXJOdW1iZXIgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyICsgMTtcbiAgICAgIHRoaXMubmV4dFllYXJOdW1iZXIgPSB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyO1xuICAgIH1cbiAgXG4gICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMgPSB7IFxuICAgICAgc3RhcnREYXRlOiBzdGFydERhdGVTdHIsIFxuICAgICAgZW5kRGF0ZTogZW5kRGF0ZVN0cixcbiAgICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogaXRlbS5sYWJlbFxuICAgIH07XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gIFxuICAgIHRoaXMuaXNEYXRlc1ZhbGlkID0gISEodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLmVuZERhdGUpO1xuICB9XG4gIHJlc2V0UmFuZ2UoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbCA9IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMO1xuICAgIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzID0ge1xuICAgICAgc3RhcnREYXRlOiBudWxsLFxuICAgICAgZW5kRGF0ZTogbnVsbCxcbiAgICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogdGhpcy5DVVNUT01fUkFOR0VfTEFCRUxcbiAgICB9O1xuICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuaXNEYXRlc1ZhbGlkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gIH1cbiAgXG4gIGFwcGx5RGF0ZXMoKSB7XG4gICAgLy8gSWYgdGltZSBpcyBlbmFibGVkLCBhcHBlbmQgdGltZSB0byB0aGUgZGF0ZXMgYmVmb3JlIGFwcGx5aW5nXG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICBsZXQgc3RhcnRUaW1lOiBzdHJpbmc7XG4gICAgICBsZXQgZW5kVGltZTogc3RyaW5nO1xuICAgICAgXG4gICAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHRoaXMuZm9ybWF0VGltZSh0aGlzLnN0YXJ0SG91ciwgdGhpcy5zdGFydE1pbnV0ZSwgdGhpcy5zdGFydEFtUG0pO1xuICAgICAgICBlbmRUaW1lID0gdGhpcy5mb3JtYXRUaW1lKHRoaXMuZW5kSG91ciwgdGhpcy5lbmRNaW51dGUsIHRoaXMuZW5kQW1QbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFRpbWUgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy5zdGFydEhvdXIyNCwgdGhpcy5zdGFydE1pbnV0ZSwgJycpO1xuICAgICAgICBlbmRUaW1lID0gdGhpcy5mb3JtYXRUaW1lKHRoaXMuZW5kSG91cjI0LCB0aGlzLmVuZE1pbnV0ZSwgJycpO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBFeHRyYWN0IG9ubHkgdGhlIGRhdGUgcGFydCAoYmVmb3JlIGFueSBleGlzdGluZyB0aW1lKSBhbmQgYXBwZW5kIHRoZSBzZWxlY3RlZCB0aW1lXG4gICAgICBjb25zdCBzdGFydERhdGVPbmx5ID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlPy5zcGxpdCgnICcpWzBdIHx8IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZTtcbiAgICAgIGNvbnN0IGVuZERhdGVPbmx5ID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZT8uc3BsaXQoJyAnKVswXSB8fCB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlO1xuICAgICAgXG4gICAgICBjb25zdCBzdGFydERhdGVXaXRoVGltZSA9IHN0YXJ0RGF0ZU9ubHkgKyAnICcgKyBzdGFydFRpbWU7XG4gICAgICBjb25zdCBlbmREYXRlV2l0aFRpbWUgPSBlbmREYXRlT25seSArICcgJyArIGVuZFRpbWU7XG4gICAgICBcbiAgICAgIHRoaXMuZGF0YS5kYXRlQ2hhbmdlKHtcbiAgICAgICAgc3RhcnREYXRlOiBzdGFydERhdGVXaXRoVGltZSxcbiAgICAgICAgZW5kRGF0ZTogZW5kRGF0ZVdpdGhUaW1lXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLmRhdGVDaGFuZ2UodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMpO1xuICAgIH1cbiAgfVxuICBcbiAgY2FuY2VsRGF0ZVBpY2tlcigpIHtcbiAgICB0aGlzLmRhdGEuY2xvc2UoKTtcbiAgfVxuICBcbiAgLy8gVGltZS1yZWxhdGVkIG1ldGhvZHNcbiAgb25TdGFydEhvdXJJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICB0aGlzLnN0YXJ0SG91ciA9IHRoaXMudmFsaWRhdGVIb3VySW5wdXQodGhpcy5zdGFydEhvdXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0SG91cjI0ID0gdGhpcy52YWxpZGF0ZUhvdXJJbnB1dDI0KHRoaXMuc3RhcnRIb3VyMjQpO1xuICAgIH1cbiAgfVxuICBcbiAgb25TdGFydE1pbnV0ZUlucHV0KCkge1xuICAgIHRoaXMuc3RhcnRNaW51dGUgPSB0aGlzLnZhbGlkYXRlTWludXRlSW5wdXQodGhpcy5zdGFydE1pbnV0ZSk7XG4gIH1cbiAgXG4gIG9uRW5kSG91cklucHV0KCkge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIHRoaXMuZW5kSG91ciA9IHRoaXMudmFsaWRhdGVIb3VySW5wdXQodGhpcy5lbmRIb3VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmRIb3VyMjQgPSB0aGlzLnZhbGlkYXRlSG91cklucHV0MjQodGhpcy5lbmRIb3VyMjQpO1xuICAgIH1cbiAgfVxuICBcbiAgb25FbmRNaW51dGVJbnB1dCgpIHtcbiAgICB0aGlzLmVuZE1pbnV0ZSA9IHRoaXMudmFsaWRhdGVNaW51dGVJbnB1dCh0aGlzLmVuZE1pbnV0ZSk7XG4gIH1cbiAgXG4gIHZhbGlkYXRlSG91cklucHV0KGhvdXI6IG51bWJlcikge1xuICAgIC8vIEFwcGx5IGJvdW5kcyBiYXNlZCBvbiBmb3JtYXRcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyAxMi1ob3VyIGZvcm1hdDogMS0xMlxuICAgICAgaWYgKGhvdXIgPCAxKSBob3VyID0gMTtcbiAgICAgIGlmIChob3VyID4gMTIpIGhvdXIgPSAxMjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMjQtaG91ciBmb3JtYXQ6IDAtMjNcbiAgICAgIGlmIChob3VyIDwgMCkgaG91ciA9IDA7XG4gICAgICBpZiAoaG91ciA+IDIzKSBob3VyID0gMjM7XG4gICAgfVxuICAgIHJldHVybiBob3VyO1xuICB9XG4gIFxuICAvLyBTcGVjaWFsIHZhbGlkYXRpb24gZm9yIDI0LWhvdXIgZm9ybWF0XG4gIHZhbGlkYXRlSG91cklucHV0MjQoaG91cjogbnVtYmVyKSB7XG4gICAgaWYgKGhvdXIgPCAwKSBob3VyID0gMDtcbiAgICBpZiAoaG91ciA+IDIzKSBob3VyID0gMjM7XG4gICAgcmV0dXJuIGhvdXI7XG4gIH1cbiAgXG4gIHZhbGlkYXRlTWludXRlSW5wdXQobWludXRlOiBudW1iZXIpIHtcbiAgICBpZiAobWludXRlIDwgMCkgbWludXRlID0gMDtcbiAgICBpZiAobWludXRlID4gNTkpIG1pbnV0ZSA9IDU5O1xuICAgIHJldHVybiBtaW51dGU7XG4gIH1cbiAgXG4gIHB1YmxpYyBpczEySG91ckZvcm1hdCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnQScpIHx8IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ2EnKTtcbiAgfVxuICBcbiAgcHJpdmF0ZSBmb3JtYXRUaW1lKGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIGFtUG06IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgcmV0dXJuIGAke2hvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9ICR7YW1QbX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgMjQtaG91ciBmb3JtYXQsIGp1c3QgcmV0dXJuIHRoZSBob3VyIGFuZCBtaW51dGVcbiAgICAgIHJldHVybiBgJHtob3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX06JHttaW51dGUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVGltZVZhbHVlcygpOiB2b2lkIHtcbiAgICAvLyBJbml0aWFsaXplIHRpbWUgdmFsdWVzIGZyb20gZXhpc3Rpbmcgc2VsZWN0ZWQgZGF0ZXMgaWYgdGhleSBjb250YWluIHRpbWVcbiAgICBsZXQgc3RhcnRUaW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBsZXQgZW5kVGltZUluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgXG4gICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lICYmIHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSkge1xuICAgICAgY29uc3Qgc3RhcnREYXRlUGFydHMgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUuc3BsaXQoJyAnKTtcbiAgICAgIGlmIChzdGFydERhdGVQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3RhcnREYXRlUGFydHMuc2xpY2UoMSkuam9pbignICcpOyAvLyBIYW5kbGUgbXVsdGlwbGUgc3BhY2VzXG4gICAgICAgIHRoaXMucGFyc2VUaW1lU3RyaW5nKHRpbWVQYXJ0LCB0cnVlKTtcbiAgICAgICAgc3RhcnRUaW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgY29uc3QgZW5kRGF0ZVBhcnRzID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZS5zcGxpdCgnICcpO1xuICAgICAgaWYgKGVuZERhdGVQYXJ0cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZW5kRGF0ZVBhcnRzLnNsaWNlKDEpLmpvaW4oJyAnKTsgLy8gSGFuZGxlIG11bHRpcGxlIHNwYWNlc1xuICAgICAgICB0aGlzLnBhcnNlVGltZVN0cmluZyh0aW1lUGFydCwgZmFsc2UpO1xuICAgICAgICBlbmRUaW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBJZiBubyBleGlzdGluZyB0aW1lIGZvdW5kLCBzZXQgY3VycmVudCB0aW1lIGFzIGRlZmF1bHRcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUpIHtcbiAgICAgIGlmICghc3RhcnRUaW1lSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VGltZUFzRGVmYXVsdCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIGlmICghZW5kVGltZUluaXRpYWxpemVkKSB7XG4gICAgICAgIHRoaXMuc2V0Q3VycmVudFRpbWVBc0RlZmF1bHQoZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3VycmVudFRpbWVBc0RlZmF1bHQoaXNTdGFydDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IGRheWpzKCk7XG4gICAgY29uc3QgY3VycmVudEhvdXIgPSBub3cuaG91cigpO1xuICAgIGNvbnN0IGN1cnJlbnRNaW51dGUgPSBub3cubWludXRlKCk7XG4gICAgXG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgLy8gQ29udmVydCBjdXJyZW50IHRpbWUgdG8gMTItaG91ciBmb3JtYXRcbiAgICAgIGxldCBob3VyMTIgPSBjdXJyZW50SG91cjtcbiAgICAgIGxldCBhbVBtID0gJ0FNJztcbiAgICAgIFxuICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAwKSB7XG4gICAgICAgIGhvdXIxMiA9IDEyO1xuICAgICAgICBhbVBtID0gJ0FNJztcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPT09IDEyKSB7XG4gICAgICAgIGhvdXIxMiA9IDEyO1xuICAgICAgICBhbVBtID0gJ1BNJztcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPiAxMikge1xuICAgICAgICBob3VyMTIgPSBjdXJyZW50SG91ciAtIDEyO1xuICAgICAgICBhbVBtID0gJ1BNJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFtUG0gPSAnQU0nO1xuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICB0aGlzLnN0YXJ0SG91ciA9IGhvdXIxMjtcbiAgICAgICAgdGhpcy5zdGFydE1pbnV0ZSA9IGN1cnJlbnRNaW51dGU7XG4gICAgICAgIHRoaXMuc3RhcnRBbVBtID0gYW1QbTtcbiAgICAgICAgdGhpcy5zdGFydEhvdXIyNCA9IGN1cnJlbnRIb3VyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbmRIb3VyID0gaG91cjEyO1xuICAgICAgICB0aGlzLmVuZE1pbnV0ZSA9IGN1cnJlbnRNaW51dGU7XG4gICAgICAgIHRoaXMuZW5kQW1QbSA9IGFtUG07XG4gICAgICAgIHRoaXMuZW5kSG91cjI0ID0gY3VycmVudEhvdXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSBjdXJyZW50IHRpbWUgZGlyZWN0bHkgZm9yIDI0LWhvdXIgZm9ybWF0XG4gICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICB0aGlzLnN0YXJ0SG91cjI0ID0gY3VycmVudEhvdXI7XG4gICAgICAgIHRoaXMuc3RhcnRNaW51dGUgPSBjdXJyZW50TWludXRlO1xuICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXIgPSAxMjtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbSA9ICdBTSc7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXIgPSAxMjtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbSA9ICdQTSc7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPiAxMikge1xuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyID0gY3VycmVudEhvdXIgLSAxMjtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbSA9ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXIgPSBjdXJyZW50SG91cjtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbSA9ICdBTSc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5kSG91cjI0ID0gY3VycmVudEhvdXI7XG4gICAgICAgIHRoaXMuZW5kTWludXRlID0gY3VycmVudE1pbnV0ZTtcbiAgICAgICAgLy8gQWxzbyBzZXQgMTItaG91ciB2YWx1ZXMgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgIGlmIChjdXJyZW50SG91ciA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZW5kSG91ciA9IDEyO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbSA9ICdBTSc7XG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudEhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyID0gMTI7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtID0gJ1BNJztcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyID0gY3VycmVudEhvdXIgLSAxMjtcbiAgICAgICAgICB0aGlzLmVuZEFtUG0gPSAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW5kSG91ciA9IGN1cnJlbnRIb3VyO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbSA9ICdBTSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVGltZVN0cmluZyh0aW1lU3RyaW5nOiBzdHJpbmcsIGlzU3RhcnQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyBQYXJzZSAxMi1ob3VyIGZvcm1hdDogXCIxMDowMCBQTVwiXG4gICAgICBjb25zdCBtYXRjaCA9IHRpbWVTdHJpbmcubWF0Y2goLyhcXGQrKTooXFxkKylcXHMqKEFNfFBNKS9pKTtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBob3VyID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludChtYXRjaFsyXSk7XG4gICAgICAgIGNvbnN0IGFtUG0gPSBtYXRjaFszXS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzU3RhcnQpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91ciA9IGhvdXI7XG4gICAgICAgICAgdGhpcy5zdGFydE1pbnV0ZSA9IG1pbnV0ZTtcbiAgICAgICAgICB0aGlzLnN0YXJ0QW1QbSA9IGFtUG07XG4gICAgICAgICAgLy8gQWxzbyBzZXQgMjQtaG91ciB2YWx1ZSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91cjI0ID0gaG91ciA9PT0gMTIgPyAoYW1QbSA9PT0gJ1BNJyA/IDEyIDogMCkgOiAoYW1QbSA9PT0gJ1BNJyA/IGhvdXIgKyAxMiA6IGhvdXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZW5kSG91ciA9IGhvdXI7XG4gICAgICAgICAgdGhpcy5lbmRNaW51dGUgPSBtaW51dGU7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtID0gYW1QbTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAyNC1ob3VyIHZhbHVlIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICAgIHRoaXMuZW5kSG91cjI0ID0gaG91ciA9PT0gMTIgPyAoYW1QbSA9PT0gJ1BNJyA/IDEyIDogMCkgOiAoYW1QbSA9PT0gJ1BNJyA/IGhvdXIgKyAxMiA6IGhvdXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcnNlIDI0LWhvdXIgZm9ybWF0OiBcIjIyOjAwXCJcbiAgICAgIGNvbnN0IG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCgvKFxcZCspOihcXGQrKS8pO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhvdXIyNCA9IHBhcnNlSW50KG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3QgbWludXRlID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzU3RhcnQpIHtcbiAgICAgICAgICAvLyBTdG9yZSBkaXJlY3RseSBpbiAyNC1ob3VyIGZvcm1hdFxuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyMjQgPSBob3VyMjQ7XG4gICAgICAgICAgdGhpcy5zdGFydE1pbnV0ZSA9IG1pbnV0ZTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3kgKHRob3VnaCBub3QgdXNlZCBpbiAyNC1ob3VyIG1vZGUpXG4gICAgICAgICAgaWYgKGhvdXIyNCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXIgPSAxMjtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gJ0FNJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA9PT0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRIb3VyID0gMTI7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0QW1QbSA9ICdQTSc7XG4gICAgICAgICAgfSBlbHNlIGlmIChob3VyMjQgPiAxMikge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXIgPSBob3VyMjQgLSAxMjtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gJ1BNJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXIgPSBob3VyMjQ7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0QW1QbSA9ICdBTSc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFN0b3JlIGRpcmVjdGx5IGluIDI0LWhvdXIgZm9ybWF0XG4gICAgICAgICAgdGhpcy5lbmRIb3VyMjQgPSBob3VyMjQ7XG4gICAgICAgICAgdGhpcy5lbmRNaW51dGUgPSBtaW51dGU7XG4gICAgICAgICAgLy8gQWxzbyBzZXQgMTItaG91ciB2YWx1ZXMgZm9yIGNvbnNpc3RlbmN5ICh0aG91Z2ggbm90IHVzZWQgaW4gMjQtaG91ciBtb2RlKVxuICAgICAgICAgIGlmIChob3VyMjQgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91ciA9IDEyO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtID0gJ0FNJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA9PT0gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91ciA9IDEyO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtID0gJ1BNJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLmVuZEhvdXIgPSBob3VyMjQgLSAxMjtcbiAgICAgICAgICAgIHRoaXMuZW5kQW1QbSA9ICdQTSc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91ciA9IGhvdXIyNDtcbiAgICAgICAgICAgIHRoaXMuZW5kQW1QbSA9ICdBTSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lclwiIGFyaWEtbGFiZWw9XCJkYXRlIHJhbmdlIHBpY2tlclwiIGNka1RyYXBGb2N1cyBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwidHJ1ZVwiPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fdmlld1wiPlxuICAgIDxkaXYgdGFiaW5kZXg9XCItMVwiIGNka0ZvY3VzSW5pdGlhbD48L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YT8uZHBDb25maWc/LnJhbmdlcz8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fcmFuZ2VzXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGE/LmRwQ29uZmlnPy5yYW5nZXMgPz8gW11cIiA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtcmFuZ2UnIDogc2VsZWN0ZWRJdGVtTGFiZWwgPT09IGl0ZW0ubGFiZWx9XCJcbiAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UmFuZ2UoaXRlbSlcIlxuICAgICAgICAgIGNsYXNzPVwibWlzLWJ0blwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PiA8YnV0dG9uIGNsYXNzPVwibWlzLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlLXJhbmdlJyA6IHNlbGVjdGVkSXRlbUxhYmVsID09PSAnQ3VzdG9tIFJhbmdlJ31cIiAoY2xpY2spPVwicmVzZXRSYW5nZSgpXCI+Q3VzdG9tIFJhbmdlPC9idXR0b24+IDwvZGl2PlxuICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlcl9fbGVmdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2hlYWRlcl9fcHJhYnVcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYXJyb3dfX2ljb25cIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgKGNsaWNrKT1cIiFpc1ByZXZpb3VzTW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdQUkVWSU9VUycpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiIWlzUHJldmlvdXNNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ1BSRVZJT1VTJylcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBNb250aFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNQcmV2aW91c01vbnRoRGlzYWJsZWRcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuPiB7eyBjdXJyZW50TW9udGggfX0ge3sgY3VycmVudFllYXJOdW1iZXIgfX0gPC9zcGFuPlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICA8IS0tIEJ1dHRvbiB2aXNpYmxlIGluIG1vYmlsZSB2aWV3IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvbiBtb2JpbGVfdmlld1wiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQgJiYgbmF2aWdhdGVNb250aCgnTkVYVCcpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQgJiYgbmF2aWdhdGVNb250aCgnTkVYVCcpXCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiTmV4dCBNb250aFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2Rpc2FibGVkLW1vbnRoJzogaXNOZXh0TW9udGhEaXNhYmxlZFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2JvZHlcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX3dlZWtkYXlcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5c1wiPlxuICAgICAgICAgICAgPHNwYW4+e3sgd2Vla0RheS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlzXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19kYXlcIiBcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXNhbWUtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXN0YXJ0LWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1lbmQtZGF5JzogZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheSxcbiAgICAgICAgICAgICAgJ2luLXJhbmdlLWRheSc6IGRheS5pblJhbmdlRGF5LFxuICAgICAgICAgICAgICAnaXMtdmFsaWQtZGF0ZSc6IGRheS5kYXRlID4gMCAmJiAhKGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXkpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgY3VycmVudE1vbnRoRGF0ZXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheSgnTEVGVCcsIGRheSlcIlxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbGVjdERheSgnTEVGVCcsIGRheSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF5LmRhdGUgPiAwXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIGN1cnJlbnRNb250aCwgY3VycmVudFllYXJOdW1iZXIpXCI+XG4gICAgICAgICAgICAgIHt7IGRheS5kYXRlIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXJfX3JpZ2h0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9faGVhZGVyX19wcmFidVwiPlxuICAgICAgICA8ZGl2PjwvZGl2PlxuICAgICAgICA8c3Bhbj4ge3sgbmV4dE1vbnRoIH19IHt7IG5leHRZZWFyTnVtYmVyIH19IDwvc3Bhbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYXJyb3dfX2ljb24gcGNfdmlld1wiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQgJiYgbmF2aWdhdGVNb250aCgnTkVYVCcpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiIWlzTmV4dE1vbnRoRGlzYWJsZWQgJiYgbmF2aWdhdGVNb250aCgnTkVYVCcpXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc05leHRNb250aERpc2FibGVkXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB3ZWVrRGF5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheXNcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdzZWxlY3RlZC1zYW1lLWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1zdGFydC1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtZW5kLWRheSc6IGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnZGlzYWJsZWQtZGF5JzogZGF5LmlzRGlzYWJsZWREYXksXG4gICAgICAgICAgICAgICdpbi1yYW5nZS1kYXknOiBkYXkuaW5SYW5nZURheSxcbiAgICAgICAgICAgICAgJ2lzLXZhbGlkLWRhdGUnOiBkYXkuZGF0ZSA+IDAgJiYgIShkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5KVxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIG5leHRNb250aERhdGVzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3REYXkoJ1JJR0hUJywgZGF5KVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VsZWN0RGF5KCdSSUdIVCcsIGRheSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF5LmRhdGUgPiAwXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cImRheS5pc0Rpc2FibGVkRGF5ID8gLTEgOiAwXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXRyYWN0RGF5TW9udGgoZGF5LmRhdGUsIG5leHRNb250aCwgbmV4dFllYXJOdW1iZXIpXCI+XG4gICAgICAgICAgICAgIHt7IGRheS5kYXRlIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgPCEtLSBUaW1lIFNlbGVjdGlvbiBTZWN0aW9uIC0tPlxuICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fdGltZVwiICpuZ0lmPVwiZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlXCI+XG4gICAgPGRpdiBjbGFzcz1cInRpbWUtc2VjdGlvblwiPlxuICAgICAgPGg0PkZyb208L2g0PlxuICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXRzXCI+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgW25nTW9kZWxdPVwiaXMxMkhvdXJGb3JtYXQoKSA/IHN0YXJ0SG91ciA6IHN0YXJ0SG91cjI0XCIgXG4gICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiaXMxMkhvdXJGb3JtYXQoKSA/IChzdGFydEhvdXIgPSAkZXZlbnQpIDogKHN0YXJ0SG91cjI0ID0gJGV2ZW50KTsgb25TdGFydEhvdXJJbnB1dCgpXCJcbiAgICAgICAgICBbbWluXT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxIDogMFwiIFxuICAgICAgICAgIFttYXhdPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEyIDogMjNcIiBcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0IGhvdXItaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiSEhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aW1lLXNlcGFyYXRvclwiPjo8L3NwYW4+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzdGFydE1pbnV0ZVwiIFxuICAgICAgICAgIChpbnB1dCk9XCJvblN0YXJ0TWludXRlSW5wdXQoKVwiXG4gICAgICAgICAgbWluPVwiMFwiIFxuICAgICAgICAgIG1heD1cIjU5XCIgXG4gICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dCBtaW51dGUtaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTU1cIj5cbiAgICAgICAgPHNlbGVjdCBcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0YXJ0QW1QbVwiIFxuICAgICAgICAgIGNsYXNzPVwiYW0tcG0tc2VsZWN0b3JcIlxuICAgICAgICAgICpuZ0lmPVwiaXMxMkhvdXJGb3JtYXQoKVwiPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwidGltZS1zZWN0aW9uXCI+XG4gICAgICA8aDQ+VG88L2g0PlxuICAgICAgPGRpdiBjbGFzcz1cInRpbWUtaW5wdXRzXCI+XG4gICAgICAgIDxpbnB1dCBcbiAgICAgICAgICB0eXBlPVwibnVtYmVyXCIgXG4gICAgICAgICAgW25nTW9kZWxdPVwiaXMxMkhvdXJGb3JtYXQoKSA/IGVuZEhvdXIgOiBlbmRIb3VyMjRcIiBcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJpczEySG91ckZvcm1hdCgpID8gKGVuZEhvdXIgPSAkZXZlbnQpIDogKGVuZEhvdXIyNCA9ICRldmVudCk7IG9uRW5kSG91cklucHV0KClcIlxuICAgICAgICAgIFttaW5dPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEgOiAwXCIgXG4gICAgICAgICAgW21heF09XCJpczEySG91ckZvcm1hdCgpID8gMTIgOiAyM1wiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgaG91ci1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJISFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yXCI+Ojwvc3Bhbj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImVuZE1pbnV0ZVwiIFxuICAgICAgICAgIChpbnB1dCk9XCJvbkVuZE1pbnV0ZUlucHV0KClcIlxuICAgICAgICAgIG1pbj1cIjBcIiBcbiAgICAgICAgICBtYXg9XCI1OVwiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgbWludXRlLWlucHV0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIk1NXCI+XG4gICAgICAgIDxzZWxlY3QgXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJlbmRBbVBtXCIgXG4gICAgICAgICAgY2xhc3M9XCJhbS1wbS1zZWxlY3RvclwiXG4gICAgICAgICAgKm5nSWY9XCJpczEySG91ckZvcm1hdCgpXCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgXG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXJfX2Zvb3RlclwiPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwibm9uZVwiIGlkPSdtb2JpbGUtZm9vdGVyLWJ0bicgKGNsaWNrKT1cImNhbmNlbERhdGVQaWNrZXIoKVwiPkNhbmNlbDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWlzLWJ1dHRvbiB0eXBlPVwicHJpbWFyeVwiIGlkPVwibW9iaWxlLWZvb3Rlci1idG5cIiAoY2xpY2spPVwiYXBwbHlEYXRlcygpXCIgW2Rpc2FibGVkXT1cIiFpc0RhdGVzVmFsaWRcIj5BcHBseTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
1128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHotZHJwLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9kYXRlcmFuZ2VwaWNrZXJfdjIvdHotZHJwLWNvbnRhaW5lci90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2RhdGVyYW5nZXBpY2tlcl92Mi90ei1kcnAtY29udGFpbmVyL3R6LWRycC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUdwQyxPQUFPLEtBQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sYUFBYSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sY0FBYyxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8saUJBQWlCLE1BQU0sZ0NBQWdDLENBQUE7QUFDOUQsT0FBTyxTQUFTLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7SUNQdkMsQUFERiwyQkFBd0QsaUJBS3JEO0lBRkMsb05BQVMsMkJBQWlCLEtBQUM7SUFHM0IsWUFDRjtJQUNGLEFBREUsaUJBQVMsRUFDTDs7OztJQU5KLGNBQStEO0lBQS9ELGdHQUErRDtJQUk3RCxjQUNGO0lBREUsOENBQ0Y7Ozs7SUFSSiwrQkFBMEY7SUFDeEYsK0VBQXdEO0lBU2xELEFBQU4sMkJBQUssaUJBQW9IO0lB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O1lBQWpCLDRDQUFpQjtZQWdCRyxjQUF1QztZQUF2Qyw0REFBdUM7WUFvRUgsZUFBMEI7WUFBMUIsNENBQTBCOzs7aUZEdExqRyx1QkFBdUI7Y0FMbkMsU0FBUzsyQkFDRSxZQUFZOztzQkE0RlQsTUFBTTt1QkFBQyxjQUFjO2dEQTBEbEMsVUFBVTtrQkFEVCxZQUFZO21CQUFDLGFBQWE7O2tGQWpKaEIsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENPTlRBSU5FUl9EQVRBLCBEQVRFX0ZPUk1BVCB9IGZyb20gXCIuLi9kYXRlcmFuZ2VwaWNrZXItY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBJQ3VycmVudE1vbnRoLCBJQ3VycmVudE1vbnRoRGF0ZXMsIElEYXRlUGlja2VyRGF0YSwgSVdlZWtEYXksIElTZWxlY3RlZERhdGVzQ29uZmlnLCBSYW5nZUl0ZW0gfSBmcm9tIFwiLi4vbW9kZWxzL2RycC1jb25maWcubW9kZWxcIjtcbmltcG9ydCB7IGdldE1vbnRoIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS90b2FzdFwiO1xuXG5pbXBvcnQgZGF5anMsIHsgRGF5anMgfSBmcm9tICdkYXlqcyc7XG5pbXBvcnQgdGltZXpvbmUgZnJvbSAnZGF5anMvcGx1Z2luL3RpbWV6b25lJztcbmltcG9ydCB1dGMgZnJvbSAnZGF5anMvcGx1Z2luL3V0Yyc7XG5pbXBvcnQgaXNTYW1lT3JBZnRlciBmcm9tICdkYXlqcy9wbHVnaW4vaXNTYW1lT3JBZnRlcic7XG5pbXBvcnQgaXNTYW1lT3JCZWZvcmUgZnJvbSAnZGF5anMvcGx1Z2luL2lzU2FtZU9yQmVmb3JlJztcbmltcG9ydCBjdXN0b21QYXJzZUZvcm1hdCBmcm9tICdkYXlqcy9wbHVnaW4vY3VzdG9tUGFyc2VGb3JtYXQnXG5pbXBvcnQgaXNCZXR3ZWVuIGZyb20gJ2RheWpzL3BsdWdpbi9pc0JldHdlZW4nO1xuZGF5anMuZXh0ZW5kKGlzQmV0d2Vlbik7XG5kYXlqcy5leHRlbmQodXRjKTtcbmRheWpzLmV4dGVuZCh0aW1lem9uZSk7XG5kYXlqcy5leHRlbmQoY3VzdG9tUGFyc2VGb3JtYXQpO1xuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQWZ0ZXIpO1xuZGF5anMuZXh0ZW5kKGlzU2FtZU9yQmVmb3JlKTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy10ei1kcnBcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi90ei1kcnAtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzXCJdXG59KVxuZXhwb3J0IGNsYXNzIFR6RHJwQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBDVVNUT01fUkFOR0VfTEFCRUwgPSBcIkN1c3RvbSBSYW5nZVwiO1xuICBkYXRhOiBJRGF0ZVBpY2tlckRhdGE7XG4gIHByaXZhdGUgZGF5anNJbnN0YW5jZSA9ICguLi5hcmdzKSA9PiB7XG4gICAgcmV0dXJuIGRheWpzKC4uLmFyZ3MpO1xuICB9O1xuXG4gIC8qKlxuICAgKiBQYXJzZSBkYXRlIHN0cmluZyB1c2luZyBjb25maWd1cmVkIGZvcm1hdCB3aXRoIGZhbGxiYWNrXG4gICAqL1xuICBwcml2YXRlIHBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoZGF0ZVN0cmluZzogc3RyaW5nKTogZGF5anMuRGF5anMge1xuICAgIGlmICghZGF0ZVN0cmluZyB8fCBkYXRlU3RyaW5nID09PSAnSW52YWxpZCBEYXRlJyB8fCBkYXRlU3RyaW5nID09PSAndW5kZWZpbmVkJyB8fCBkYXRlU3RyaW5nID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiBkYXlqcygnaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8vIEZpcnN0IHRyeSB0aGUgY29uZmlndXJlZCBmb3JtYXRcbiAgICBjb25zdCBjb25maWd1cmVkRm9ybWF0ID0gdGhpcy5kYXRhPy5kcENvbmZpZz8uZm9ybWF0O1xuICAgIGlmIChjb25maWd1cmVkRm9ybWF0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBkYXlqcyhkYXRlU3RyaW5nLCBjb25maWd1cmVkRm9ybWF0KTtcbiAgICAgICAgaWYgKHBhcnNlZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBDb250aW51ZSB0byBmYWxsYmFjayBmb3JtYXRzXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gY29tbW9uIGZvcm1hdHMgaWYgY29uZmlndXJlZCBmb3JtYXQgZmFpbHNcbiAgICBjb25zdCBmYWxsYmFja0Zvcm1hdHMgPSBbXG4gICAgICAnREQvTU1NL1lZWVknLFxuICAgICAgJ0REL01NL1lZWVknLFxuICAgICAgJ0RELU1NTS1ZWVlZJyxcbiAgICAgICdERC1NTS1ZWVlZJyxcbiAgICAgICdZWVlZLU1NLUREJ1xuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmYWxsYmFja0Zvcm1hdHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IGRheWpzKGRhdGVTdHJpbmcsIGZvcm1hdCk7XG4gICAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBmb3JtYXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBhbGwgZm9ybWF0cyBmYWlsLCB0cnkgcGFyc2luZyB3aXRob3V0IGZvcm1hdCAobGV0IGRheWpzIGd1ZXNzKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSBkYXlqcyhkYXRlU3RyaW5nKTtcbiAgICAgIGlmIChwYXJzZWQuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZWQ7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFpbGVkIHRvIHBhcnNlIGRhdGUgd2l0aCBhbnkgZm9ybWF0OicsIGRhdGVTdHJpbmcsIGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF5anMoJ2ludmFsaWQnKTtcbiAgfVxuICBwcml2YXRlIHJhd1dlZWtEYXlzOiBzdHJpbmdbXSA9IFtcIlNVTlwiLCBcIk1PTlwiLCBcIlRVRVwiLCBcIldFRFwiLCBcIlRIVVwiLCBcIkZSSVwiLCBcIlNBVFwiXTtcbiAgd2Vla0RheXM6IElXZWVrRGF5W10gPSBbXTtcbiAgY3VycmVudE1vbnRoTnVtYmVyOiBudW1iZXI7XG4gIGN1cnJlbnRNb250aDogSUN1cnJlbnRNb250aDtcbiAgY3VycmVudFllYXJOdW1iZXI6IG51bWJlcjtcbiAgY3VycmVudE1vbnRoRGF0ZXM6IElDdXJyZW50TW9udGhEYXRlc1tdID0gW107XG4gIG5leHRNb250aE51bWJlcjogbnVtYmVyO1xuICBuZXh0TW9udGg6IElDdXJyZW50TW9udGg7XG4gIG5leHRZZWFyTnVtYmVyOiBudW1iZXI7XG4gIG5leHRNb250aERhdGVzOiBJQ3VycmVudE1vbnRoRGF0ZXNbXSA9IFtdO1xuICBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc05leHRNb250aERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHNlbGVjdGlvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgbG9jYWxTZWxlY3RlZERhdGVzOiBJU2VsZWN0ZWREYXRlc0NvbmZpZztcbiAgaXNEYXRlc1ZhbGlkID0gZmFsc2U7ICBcbiAgc2VsZWN0ZWRJdGVtTGFiZWwgPSB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTDtcbiAgLy8gVGltZSBzZWxlY3Rpb24gcHJvcGVydGllc1xuICBzdGFydEhvdXI6IG51bWJlciA9IDEyO1xuICBzdGFydE1pbnV0ZTogbnVtYmVyID0gMDtcbiAgc3RhcnRBbVBtOiBzdHJpbmcgPSAnQU0nO1xuICBlbmRIb3VyOiBudW1iZXIgPSAxMjtcbiAgZW5kTWludXRlOiBudW1iZXIgPSAwO1xuICBlbmRBbVBtOiBzdHJpbmcgPSAnQU0nO1xuICBcbiAgLy8gRm9yIDI0LWhvdXIgZm9ybWF0LCBzdG9yZSBhY3R1YWwgMjQtaG91ciB2YWx1ZXNcbiAgc3RhcnRIb3VyMjQ6IG51bWJlciA9IDEyO1xuICBlbmRIb3VyMjQ6IG51bWJlciA9IDEyO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQ09OVEFJTkVSX0RBVEEpIGRhdGE6IElEYXRlUGlja2VyRGF0YSwgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHRoaXMuZGF0YS5kYXRlcztcbiAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSkge1xuICAgICAgdGhpcy5pc0RhdGVzVmFsaWQgPSB0cnVlO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGVkSXRlbUxhYmVsIGZyb20gZGF0YS5zZWxlY3RlZFJhbmdlTGFiZWwgaWYgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuZGF0YS5zZWxlY3RlZFJhbmdlTGFiZWwpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtTGFiZWwgPSB0aGlzLmRhdGEuc2VsZWN0ZWRSYW5nZUxhYmVsO1xuICAgIH1cbiAgICBcbiAgICAvLyBJbml0aWFsaXplIGRheWpzSW5zdGFuY2Ugd2l0aCB0aW1lem9uZSBoYW5kbGluZ1xuICAgIGlmICh0aGlzLmRhdGE/LmRwQ29uZmlnPy50aW1lem9uZSkge1xuICAgICAgdGhpcy5kYXlqc0luc3RhbmNlID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZGF5anMudHooYXJnc1swXSwgYXJnc1sxXSB8fCAnREQvTU0vWVlZWScsIHRoaXMuZGF0YS5kcENvbmZpZy50aW1lem9uZSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdFcnJvciBwYXJzaW5nIGRhdGUgd2l0aCB0aW1lem9uZTonLCBlcnJvciwgJ2FyZ3M6JywgYXJncyk7XG4gICAgICAgICAgcmV0dXJuIGRheWpzKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID0gdGhpcy5kYXlqc0luc3RhbmNlKCkubW9udGgoKTtcbiAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLmFkZCgxLCBcIm1vbnRoXCIpLm1vbnRoKCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBnZXRNb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgdGhpcy5jdXJyZW50WWVhck51bWJlciA9IHRoaXMuZGF5anNJbnN0YW5jZSgpLnllYXIoKTtcbiAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gdGhpcy5kYXlqc0luc3RhbmNlKCkuYWRkKDEsIFwibW9udGhcIikueWVhcigpO1xuICAgIHRoaXMud2Vla0RheXMgPSB0aGlzLnJhd1dlZWtEYXlzLm1hcCgoZGF5LCBpbmRleCkgPT4gKHtcbiAgICAgIGxhYmVsOiBgJHtkYXlbMF19JHtkYXkuc2xpY2UoMSkudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgaXNDdXJyZW50RGF5OiB0aGlzLmRheWpzSW5zdGFuY2UoKS5kYXkoKSA9PT0gaW5kZXhcbiAgICB9KSk7XG4gICAgaWYgKCF0aGlzLmRhdGE/LmRwQ29uZmlnPy5mb3JtYXQpIHtcbiAgICAgIHRoaXMuZGF0YS5kcENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5kYXRhLmRwQ29uZmlnLFxuICAgICAgICBmb3JtYXQ6IERBVEVfRk9STUFUXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudERhdGVJbnN0YW5jZSgpO1xuICAgIHRoaXMuY2FsY3VsYXRlTWluTWF4RGF5cygpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZVRpbWVWYWx1ZXMoKTtcblxuICAgIGlmKHRoaXMuZGF0YT8uc2hvd1ByZXZNb250aCAmJiAhdGhpcy5pc1ByZXZpb3VzTW9udGhEaXNhYmxlZCl7XG4gICAgICB0aGlzLm5hdmlnYXRlTW9udGgoJ1BSRVZJT1VTJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0cmFjdERheU1vbnRoKGRheTogYW55LCBtb250aDogYW55LCB5ZWFyOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBgJHtkYXl9ICR7bW9udGh9ICR7eWVhcn1gO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcihcImtleWRvd24uZXNjXCIpXG4gIGNsb3NlT25Fc2MoKSB7XG4gICAgdGhpcy5jYW5jZWxEYXRlUGlja2VyKCk7XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnREYXRlSW5zdGFuY2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcz8uc3RhcnREYXRlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmb3IgcGFyc2luZyAoaGFuZGxlIGJvdGggZGF0ZS1vbmx5IGFuZCBkYXRldGltZSBmb3JtYXRzKVxuICAgIGNvbnN0IHN0YXJ0RGF0ZVN0cmluZyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzPy5zdGFydERhdGU/LnNwbGl0KCcgJylbMF0gfHwgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZTtcbiAgICBjb25zdCBlbmREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LmVuZERhdGU/LnNwbGl0KCcgJylbMF0gfHwgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LmVuZERhdGU7XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgZGF0ZSBzdHJpbmdzIGJlZm9yZSBwYXJzaW5nXG4gICAgaWYgKCFzdGFydERhdGVTdHJpbmcgfHwgc3RhcnREYXRlU3RyaW5nID09PSAnSW52YWxpZCBEYXRlJyB8fCBzdGFydERhdGVTdHJpbmcgPT09ICd1bmRlZmluZWQnIHx8IHN0YXJ0RGF0ZVN0cmluZyA9PT0gJ251bGwnKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5uZXh0TW9udGhOdW1iZXIsIHRoaXMubmV4dFllYXJOdW1iZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBjb25zdCBzZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpO1xuICAgIGNvbnN0IHNlbGVjdGVkRW5kRGF0ZSA9IGVuZERhdGVTdHJpbmcgPyB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoZW5kRGF0ZVN0cmluZykgOiBudWxsO1xuICAgIFxuICAgIGlmIChzZWxlY3RlZFN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS55ZWFyKCk7XG4gICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikueWVhcigpO1xuICAgICAgdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPSBzZWxlY3RlZFN0YXJ0RGF0ZS5nZXQoXCJtb250aFwiKTtcbiAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gc2VsZWN0ZWRTdGFydERhdGUuYWRkKDEsIFwibW9udGhcIikubW9udGgoKTtcbiAgICAgIGlmKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID09PSAtMSl7XG4gICAgICAgIHRoaXMuY3VycmVudE1vbnRoTnVtYmVyID0gMTFcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMubmV4dE1vbnRoTnVtYmVyID09PSAtMSl7XG4gICAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gMTFcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gZ2V0TW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgICAgdGhpcy5uZXh0TW9udGggPSBnZXRNb250aCh0aGlzLm5leHRNb250aE51bWJlcik7XG4gICAgfVxuICAgIFxuICAgIC8vIElmIHdlIGhhdmUgYW4gZW5kIGRhdGUsIHVzZSBpdCB0byBkZXRlcm1pbmUgdGhlIG5leHQgbW9udGhcbiAgICBpZiAoc2VsZWN0ZWRFbmREYXRlICYmIHNlbGVjdGVkRW5kRGF0ZS5pc1ZhbGlkKCkgJiYgc2VsZWN0ZWRFbmREYXRlLmlzQWZ0ZXIoc2VsZWN0ZWRTdGFydERhdGUsICdtb250aCcpKSB7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlciA9IHNlbGVjdGVkRW5kRGF0ZS5tb250aCgpO1xuICAgICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHNlbGVjdGVkRW5kRGF0ZS55ZWFyKCk7XG4gICAgICB0aGlzLm5leHRNb250aCA9IGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyKTtcbiAgICB9XG4gICAgXG4gICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gIH1cblxuICBwcml2YXRlIGNhbGN1bGF0ZU1pbk1heERheXMoKSB7XG4gICAgY29uc3QgY3VycmVudEluc3RhbmNlID0gdGhpcy5kYXlqc0luc3RhbmNlKCkueWVhcih0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKS5tb250aCh0aGlzLmN1cnJlbnRNb250aE51bWJlcik7XG4gICAgY29uc3QgbWluRGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpIDogZGF5anMoJ2ludmFsaWQnKTtcbiAgICBpZiAobWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgIHRoaXMuaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgPSBtaW5EYXRlLmlzU2FtZU9yQWZ0ZXIoY3VycmVudEluc3RhbmNlLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBjb25zdCBtYXhEYXRlID0gISF0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSA/IHRoaXMuZGF5anNJbnN0YW5jZSh0aGlzLmRhdGEuZHBDb25maWcubWF4RGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCkgOiBkYXlqcygnaW52YWxpZCcpO1xuICAgIGlmIChtYXhEYXRlLmlzVmFsaWQoKSkge1xuICAgICAgdGhpcy5pc05leHRNb250aERpc2FibGVkID0gbWF4RGF0ZS5pc1NhbWVPckJlZm9yZShjdXJyZW50SW5zdGFuY2UsIFwibW9udGhcIik7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGVNb250aChkaXJlY3Rpb246IFwiTkVYVFwiIHwgXCJQUkVWSU9VU1wiKTogdm9pZCB7XG4gICAgbGV0IHRoaXNNb250aDogRGF5anMgPSBkYXlqcygpLnllYXIodGhpcy5jdXJyZW50WWVhck51bWJlcikubW9udGgodGhpcy5jdXJyZW50TW9udGhOdW1iZXIpO1xuICAgIGlmIChkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgIHRoaXNNb250aCA9IHRoaXNNb250aC5hZGQoMSwgXCJtb250aFwiKTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gXCJQUkVWSU9VU1wiKSB7XG4gICAgIHRoaXNNb250aCA9IHRoaXNNb250aC5zdWJ0cmFjdCgxLCBcIm1vbnRoXCIpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHRoaXNNb250aC5tb250aCgpO1xuICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gdGhpc01vbnRoLmNsb25lKCkuYWRkKDEsIFwibW9udGhcIikubW9udGgoKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aCA9IGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICB0aGlzLm5leHRNb250aCA9IGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyKTtcbiAgICBpZiAodGhpcy5uZXh0TW9udGhOdW1iZXIgPT09IDAgJiYgZGlyZWN0aW9uID09PSBcIlBSRVZJT1VTXCIpIHtcbiAgICAgdGhpcy5jdXJyZW50WWVhck51bWJlci0tO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPT09IDExICYmIGRpcmVjdGlvbiA9PT0gXCJORVhUXCIpIHtcbiAgICAgdGhpcy5uZXh0WWVhck51bWJlcisrO1xuICAgIH1lbHNlIGlmICh0aGlzLmN1cnJlbnRNb250aE51bWJlciA9PT0gMCAmJiBkaXJlY3Rpb24gPT09IFwiTkVYVFwiKSB7XG4gICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIrKztcbiAgICB9IGVsc2UgaWYgKHRoaXMubmV4dE1vbnRoTnVtYmVyID09PSAxMSAmJiBkaXJlY3Rpb24gPT09IFwiUFJFVklPVVNcIikge1xuICAgICB0aGlzLm5leHRZZWFyTnVtYmVyLS07XG4gICAgfWVsc2V7XG4gICAgIHRoaXMubmV4dFllYXJOdW1iZXIgPSB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgICB0aGlzLmNhbGN1bGF0ZU1pbk1heERheXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVEYXRlcyhtb250aDogbnVtYmVyLCBjdXJyZW50WWVhck51bWJlcjogbnVtYmVyKTogSUN1cnJlbnRNb250aERhdGVzW10ge1xuICAgIGxldCBkYXRlczogSUN1cnJlbnRNb250aERhdGVzW10gPSBbXTtcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRheXNJbk1vbnRoKCk7XG4gICAgZm9yIChsZXQgY3VycmVudERhdGUgPSAxOyBjdXJyZW50RGF0ZSA8PSBkYXlzSW5Nb250aDsgY3VycmVudERhdGUrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IGRheWpzKCkueWVhcihjdXJyZW50WWVhck51bWJlcikubW9udGgobW9udGgpLmRhdGUoY3VycmVudERhdGUpO1xuICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgbGV0IGlzRGlzYWJsZWREYXkgPSB0aGlzLmRhdGEuZGF0ZXNEaXNhYmxlZC5zb21lKGQgPT4gZCA9PT0gZGF0ZVN0cmluZyk7XG4gICAgICAvLyBQYXJzZSBtaW4vbWF4IGRhdGVzIHNhZmVseSAtIHRyeSBkYXRlLW9ubHkgZm9ybWF0IGZpcnN0LCB0aGVuIGZ1bGwgZm9ybWF0XG4gICAgICBsZXQgbWluRGF0ZSA9IG51bGw7XG4gICAgICBsZXQgbWF4RGF0ZSA9IG51bGw7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IG9ubHkgZm9yIGNvbXBhcmlzb25cbiAgICAgICAgICBjb25zdCBtaW5EYXRlU3RyID0gdGhpcy5kYXRhLmRwQ29uZmlnLm1pbkRhdGUuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICBtaW5EYXRlID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKG1pbkRhdGVTdHIpO1xuICAgICAgICAgIGlmICghbWluRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIG1pbkRhdGUgPSBkYXlqcyh0aGlzLmRhdGEuZHBDb25maWcubWluRGF0ZSwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRXJyb3IgcGFyc2luZyBtaW4gZGF0ZTonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgbWF4RGF0ZVN0ciA9IHRoaXMuZGF0YS5kcENvbmZpZy5tYXhEYXRlLnNwbGl0KCcgJylbMF07XG4gICAgICAgICAgbWF4RGF0ZSA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhtYXhEYXRlU3RyKTtcbiAgICAgICAgICBpZiAoIW1heERhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICBtYXhEYXRlID0gZGF5anModGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHBhcnNpbmcgbWF4IGRhdGU6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmICghaXNEaXNhYmxlZERheSAmJiBtaW5EYXRlICYmIG1pbkRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIGlzRGlzYWJsZWREYXkgPSBtaW5EYXRlLmlzQWZ0ZXIoZGF0ZSwgXCJkYXlcIik7XG4gICAgICB9XG4gICAgICBpZiAoIWlzRGlzYWJsZWREYXkgJiYgbWF4RGF0ZSAmJiBtYXhEYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICBpc0Rpc2FibGVkRGF5ID0gbWF4RGF0ZS5pc0JlZm9yZShkYXRlLCBcImRheVwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5kYXRhPy5kcENvbmZpZz8ubWF4QWxsb3dlZFJhbmdlID4gMCAmJlxuICAgICAgICAhaXNEaXNhYmxlZERheSAmJlxuICAgICAgICAodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZSA/PyBmYWxzZSkgJiYgKCEodGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSA/PyBmYWxzZSkpXG4gICAgICApIHtcbiAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gZGF5anModGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgY29uc3QgbWF4RW5kRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpLmFkZCh0aGlzLmRhdGEuZHBDb25maWcubWF4QWxsb3dlZFJhbmdlIC0gMSwgJ2RheXMnKTtcbiAgICAgICAgaXNEaXNhYmxlZERheSA9IGRhdGUuaXNBZnRlcihtYXhFbmREYXRlLCAnZGF5JykgXG4gICAgICB9XG4gICAgICBjb25zdCBpc0N1cnJlbnREYXkgPVxuICAgICAgICB0aGlzLmRheWpzSW5zdGFuY2UoKS55ZWFyKGN1cnJlbnRZZWFyTnVtYmVyKS5tb250aChtb250aCkuZGF0ZShjdXJyZW50RGF0ZSkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpID09PVxuICAgICAgICB0aGlzLmRheWpzSW5zdGFuY2UoKS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZvciBjb21wYXJpc29uIChoYW5kbGUgYm90aCBkYXRlLW9ubHkgYW5kIGRhdGV0aW1lIGZvcm1hdHMpXG4gICAgICBsZXQgc3RhcnREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LnN0YXJ0RGF0ZTtcbiAgICAgIGxldCBlbmREYXRlU3RyaW5nID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXM/LmVuZERhdGU7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgZXh0cmFjdCBkYXRlIHBhcnQgaWYgdGhlIGZvcm1hdCBjb250YWlucyB0aW1lIGNvbXBvbmVudHNcbiAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdISCcpIHx8IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ21tJykgfHwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnQScpKSB7XG4gICAgICAgIC8vIEZvciBkYXRldGltZSBmb3JtYXRzLCB3ZSBuZWVkIHRvIGV4dHJhY3QganVzdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgZnVsbCBzdHJpbmcgYW5kIHRoZW4gZm9ybWF0IGl0IGFzIGRhdGUtb25seSBmb3IgY29tcGFyaXNvblxuICAgICAgICBpZiAoc3RhcnREYXRlU3RyaW5nKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU3RhcnQgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlU3RyaW5nKTtcbiAgICAgICAgICBpZiAocGFyc2VkU3RhcnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBieSBmaW5kaW5nIHRoZSB0aW1lIGJvdW5kYXJ5IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydE1hdGNoID0gdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5tYXRjaCgvKFxccyspKEhIfG1tfHNzfEF8YSkvKTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RhcnRNYXRjaCkge1xuICAgICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcoMCwgdGltZVN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgICBzdGFydERhdGVTdHJpbmcgPSBwYXJzZWRTdGFydC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5kRGF0ZVN0cmluZykge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEVuZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhlbmREYXRlU3RyaW5nKTtcbiAgICAgICAgICBpZiAocGFyc2VkRW5kLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgYnkgZmluZGluZyB0aGUgdGltZSBib3VuZGFyeSAtIGhhbmRsZSBzcGFjZXMgaW4gZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgICAgZW5kRGF0ZVN0cmluZyA9IHBhcnNlZEVuZC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBQYXJzZSB0aGUgc2VsZWN0ZWQgZGF0ZXMgdG8gZ2V0IHByb3BlciBkYXlqcyBpbnN0YW5jZXMgZm9yIGNvbXBhcmlzb25cbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVBhcnNlZCA9IHN0YXJ0RGF0ZVN0cmluZyA/IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhzdGFydERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICAgIGNvbnN0IGVuZERhdGVQYXJzZWQgPSBlbmREYXRlU3RyaW5nID8gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKGVuZERhdGVTdHJpbmcpIDogbnVsbDtcbiAgICAgIFxuICAgICAgY29uc3QgaXNTZWxlY3RlZFN0YXJ0RGF5ID1cbiAgICAgICAgIWlzRGlzYWJsZWREYXkgJiZcbiAgICAgICAgc3RhcnREYXRlUGFyc2VkICYmXG4gICAgICAgIHN0YXJ0RGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiZcbiAgICAgICAgZGF0ZS5pc1NhbWUoc3RhcnREYXRlUGFyc2VkLCAnZGF5Jyk7XG4gICAgICAgIFxuICAgICAgY29uc3QgaXNTZWxlY3RlZEVuZERheSA9XG4gICAgICAgICFpc0Rpc2FibGVkRGF5ICYmXG4gICAgICAgIGVuZERhdGVQYXJzZWQgJiZcbiAgICAgICAgZW5kRGF0ZVBhcnNlZC5pc1ZhbGlkKCkgJiZcbiAgICAgICAgZGF0ZS5pc1NhbWUoZW5kRGF0ZVBhcnNlZCwgJ2RheScpO1xuICAgICAgICBcbiAgICAgIC8vIEZvciByYW5nZSBjYWxjdWxhdGlvbiwgdXNlIHRoZSBhbHJlYWR5IHBhcnNlZCBkYXRlc1xuICAgICAgY29uc3QgaXNBZnRlclNlbGVjdGVkU3RhcnREYXRlID0gc3RhcnREYXRlUGFyc2VkID8gdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUpLmlzQWZ0ZXIoc3RhcnREYXRlUGFyc2VkLCBcImRheVwiKSA6IGZhbHNlO1xuICAgICAgY29uc3QgaXNCZWZvcmVTZWxlY3RlZEVuZERhdGUgPSBlbmREYXRlUGFyc2VkID8gdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUpLmlzQmVmb3JlKGVuZERhdGVQYXJzZWQsIFwiZGF5XCIpIDogZmFsc2U7XG4gICAgICBcbiAgICAgIGNvbnN0IGluUmFuZ2VEYXkgPVxuICAgICAgICBzdGFydERhdGVQYXJzZWQgJiYgZW5kRGF0ZVBhcnNlZCAmJlxuICAgICAgICBzdGFydERhdGVQYXJzZWQuaXNWYWxpZCgpICYmIGVuZERhdGVQYXJzZWQuaXNWYWxpZCgpICYmXG4gICAgICAgIGlzQWZ0ZXJTZWxlY3RlZFN0YXJ0RGF0ZSAmJlxuICAgICAgICBpc0JlZm9yZVNlbGVjdGVkRW5kRGF0ZTtcbiAgICAgIGRhdGVzLnB1c2goe1xuICAgICAgICBkYXRlOiBjdXJyZW50RGF0ZSxcbiAgICAgICAgd2Vla0RheTogZGF0ZS5kYXkoKSxcbiAgICAgICAgaXNDdXJyZW50RGF5LFxuICAgICAgICBpc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgIGlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgIGluUmFuZ2VEYXksXG4gICAgICAgIHRvYXN0TWVzc2FnZTogdGhpcy5kYXRhLm1lc3NhZ2VzLmZpbmQocSA9PiBkYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA9PT0gcS5kYXRlKT8ubWVzc2FnZSB8fCBcIlwiLFxuICAgICAgICBpc0Rpc2FibGVkRGF5XG4gICAgICB9KTtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IGRhdGVzWzBdLndlZWtEYXk7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGRhdGVzLnVuc2hpZnQoeyBkYXRlOiAwLCB3ZWVrRGF5OiBpIC0gMSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVzO1xuICB9XG5cbiAgc2VsZWN0RGF5KGZyb206IFwiTEVGVFwiIHwgXCJSSUdIVFwiLCBkYXk6IElDdXJyZW50TW9udGhEYXRlcykge1xuICAgIGlmIChkYXkuZGF0ZSA8PSAwKSByZXR1cm47XG4gICAgaWYgKCFkYXkuaXNEaXNhYmxlZERheSkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1MYWJlbCA9IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3RhcnRlZCkge1xuICAgICAgICBjb25zdCBkYXlqc0RheSA9IGRheWpzKClcbiAgICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXIgOiB0aGlzLm5leHRZZWFyTnVtYmVyKVxuICAgICAgICAgIC5tb250aChmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyIDogdGhpcy5uZXh0TW9udGhOdW1iZXIpXG4gICAgICAgICAgLmRhdGUoZGF5LmRhdGUpO1xuICAgICAgICAgIFxuICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmcm9tIGV4aXN0aW5nIHN0YXJ0IGRhdGUgZm9yIGNvbXBhcmlzb25cbiAgICAgICAgbGV0IHN0YXJ0RGF0ZVN0cmluZyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIE9ubHkgZXh0cmFjdCBkYXRlIHBhcnQgaWYgdGhlIGZvcm1hdCBjb250YWlucyB0aW1lIGNvbXBvbmVudHNcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ0hIJykgfHwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnbW0nKSB8fCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykpIHtcbiAgICAgICAgICAvLyBGb3IgZGF0ZXRpbWUgZm9ybWF0cywgd2UgbmVlZCB0byBleHRyYWN0IGp1c3QgdGhlIGRhdGUgcGFydFxuICAgICAgICAgIC8vIFRyeSB0byBwYXJzZSB0aGUgZnVsbCBzdHJpbmcgYW5kIHRoZW4gZm9ybWF0IGl0IGFzIGRhdGUtb25seSBmb3IgY29tcGFyaXNvblxuICAgICAgICAgIGlmIChzdGFydERhdGVTdHJpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFN0YXJ0ID0gdGhpcy5wYXJzZURhdGVXaXRoTXVsdGlwbGVGb3JtYXRzKHN0YXJ0RGF0ZVN0cmluZyk7XG4gICAgICAgICAgICBpZiAocGFyc2VkU3RhcnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICAgIGlmICh0aW1lU3RhcnRNYXRjaCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgICAgICBzdGFydERhdGVTdHJpbmcgPSBwYXJzZWRTdGFydC5mb3JtYXQoZGF0ZU9ubHlGb3JtYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBjb25zdCBzdGFydERhdGUgPSBzdGFydERhdGVTdHJpbmcgPyB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlU3RyaW5nKSA6IG51bGw7XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0ZWQgZGF0ZSBpcyBiZWZvcmUgdGhlIHN0YXJ0IGRhdGUsIG1ha2UgaXQgdGhlIG5ldyBzdGFydCBkYXRlXG4gICAgICAgIGlmIChzdGFydERhdGUgJiYgZGF5anNEYXkuaXNCZWZvcmUoc3RhcnREYXRlLCBcImRheVwiKSkge1xuICAgICAgICAgIGxldCBmb3JtYXR0ZWREYXRlID0gZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIElmIHRpbWUgaXMgZW5hYmxlZCwgYXBwZW5kIGN1cnJlbnQgdGltZSB0byB0aGUgZGF0ZVxuICAgICAgICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAgIC8vIExvb2sgZm9yIHRoZSBwYXR0ZXJuIHdoZXJlIHRpbWUgc3RhcnRzIChISCwgbW0sIHNzLCBBLCBhKVxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcodGltZVN0YXJ0SW5kZXggKyB0aW1lU3RhcnRNYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRheWpzRGF5LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmcgPSBub3cuZm9ybWF0KHRpbWVPbmx5Rm9ybWF0KTtcbiAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IGRhdGVTdHJpbmcgKyB0aW1lU3RhcnRNYXRjaFsxXSArIHRpbWVTdHJpbmc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBGYWxsYmFjayBpZiBubyB0aW1lIHBhdHRlcm4gZm91bmRcbiAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IGRheWpzRGF5LmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMgPSB7XG4gICAgICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZERhdGUsXG4gICAgICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLmN1cnJlbnRNb250aE51bWJlciwgdGhpcy5jdXJyZW50WWVhck51bWJlcik7XG4gICAgICAgICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICBcbiAgICAgICAgbGV0IGZvcm1hdHRlZEVuZERhdGUgPSBkYXlqc0RheS5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgIFxuICAgICAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCBjdXJyZW50IHRpbWUgdG8gdGhlIGRhdGVcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICAgICAgICAvLyBFeHRyYWN0IGRhdGUgcGFydCBmcm9tIHRoZSBjb25maWd1cmVkIGZvcm1hdCAtIGhhbmRsZSBzcGFjZXMgaW4gZGF0ZSBwYXJ0XG4gICAgICAgICAgLy8gTG9vayBmb3IgdGhlIHBhdHRlcm4gd2hlcmUgdGltZSBzdGFydHMgKEhILCBtbSwgc3MsIEEsIGEpXG4gICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICAgIGlmICh0aW1lU3RhcnRNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lT25seUZvcm1hdCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKHRpbWVTdGFydEluZGV4ICsgdGltZVN0YXJ0TWF0Y2hbMV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGRheWpzRGF5LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nID0gbm93LmZvcm1hdCh0aW1lT25seUZvcm1hdCk7XG4gICAgICAgICAgICBmb3JtYXR0ZWRFbmREYXRlID0gZGF0ZVN0cmluZyArIHRpbWVTdGFydE1hdGNoWzFdICsgdGltZVN0cmluZztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2sgaWYgbm8gdGltZSBwYXR0ZXJuIGZvdW5kXG4gICAgICAgICAgICBmb3JtYXR0ZWRFbmREYXRlID0gZGF5anNEYXkuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMgPSB7XG4gICAgICAgICAgLi4udGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMsXG4gICAgICAgICAgZW5kRGF0ZTogZm9ybWF0dGVkRW5kRGF0ZSxcbiAgICAgICAgICBzZWxlY3RlZFJhbmdlTGFiZWw6IHRoaXMuQ1VTVE9NX1JBTkdFX0xBQkVMXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgbGV0IGZvcm1hdHRlZFN0YXJ0RGF0ZSA9IGRheWpzKClcbiAgICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXIgOiB0aGlzLm5leHRZZWFyTnVtYmVyKVxuICAgICAgICAgIC5tb250aChmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudE1vbnRoTnVtYmVyIDogdGhpcy5uZXh0TW9udGhOdW1iZXIpXG4gICAgICAgICAgLmRhdGUoZGF5LmRhdGUpXG4gICAgICAgICAgLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgICAgICAgXG4gICAgICAgIC8vIElmIHRpbWUgaXMgZW5hYmxlZCwgYXBwZW5kIGN1cnJlbnQgdGltZSB0byB0aGUgZGF0ZVxuICAgICAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBub3cgPSBkYXlqcygpO1xuICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGZyb20gdGhlIGNvbmZpZ3VyZWQgZm9ybWF0IC0gaGFuZGxlIHNwYWNlcyBpbiBkYXRlIHBhcnRcbiAgICAgICAgICAvLyBMb29rIGZvciB0aGUgcGF0dGVybiB3aGVyZSB0aW1lIHN0YXJ0cyAoSEgsIG1tLCBzcywgQSwgYSlcbiAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRJbmRleCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5kZXhPZih0aW1lU3RhcnRNYXRjaFswXSk7XG4gICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVPbmx5Rm9ybWF0ID0gdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5zdWJzdHJpbmcodGltZVN0YXJ0SW5kZXggKyB0aW1lU3RhcnRNYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gZGF5anMoKVxuICAgICAgICAgICAgICAueWVhcihmcm9tID09PSBcIkxFRlRcIiA/IHRoaXMuY3VycmVudFllYXJOdW1iZXIgOiB0aGlzLm5leHRZZWFyTnVtYmVyKVxuICAgICAgICAgICAgICAubW9udGgoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRNb250aE51bWJlciA6IHRoaXMubmV4dE1vbnRoTnVtYmVyKVxuICAgICAgICAgICAgICAuZGF0ZShkYXkuZGF0ZSlcbiAgICAgICAgICAgICAgLmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nID0gbm93LmZvcm1hdCh0aW1lT25seUZvcm1hdCk7XG4gICAgICAgICAgICBmb3JtYXR0ZWRTdGFydERhdGUgPSBkYXRlU3RyaW5nICsgdGltZVN0YXJ0TWF0Y2hbMV0gKyB0aW1lU3RyaW5nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFjayBpZiBubyB0aW1lIHBhdHRlcm4gZm91bmRcbiAgICAgICAgICAgIGZvcm1hdHRlZFN0YXJ0RGF0ZSA9IGRheWpzKClcbiAgICAgICAgICAgICAgLnllYXIoZnJvbSA9PT0gXCJMRUZUXCIgPyB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyIDogdGhpcy5uZXh0WWVhck51bWJlcilcbiAgICAgICAgICAgICAgLm1vbnRoKGZyb20gPT09IFwiTEVGVFwiID8gdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgOiB0aGlzLm5leHRNb250aE51bWJlcilcbiAgICAgICAgICAgICAgLmRhdGUoZGF5LmRhdGUpXG4gICAgICAgICAgICAgIC5mb3JtYXQodGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHtcbiAgICAgICAgICBzdGFydERhdGU6IGZvcm1hdHRlZFN0YXJ0RGF0ZSxcbiAgICAgICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgICAgIHNlbGVjdGVkUmFuZ2VMYWJlbDogdGhpcy5DVVNUT01fUkFOR0VfTEFCRUxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE1vbnRoRGF0ZXMgPSB0aGlzLmdlbmVyYXRlRGF0ZXModGhpcy5jdXJyZW50TW9udGhOdW1iZXIsIHRoaXMuY3VycmVudFllYXJOdW1iZXIpO1xuICAgICAgdGhpcy5uZXh0TW9udGhEYXRlcyA9IHRoaXMuZ2VuZXJhdGVEYXRlcyh0aGlzLm5leHRNb250aE51bWJlciwgdGhpcy5uZXh0WWVhck51bWJlcik7XG4gICAgICB0aGlzLmlzRGF0ZXNWYWxpZCA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlKSB7XG4gICAgICAgIHRoaXMuaXNEYXRlc1ZhbGlkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRheS50b2FzdE1lc3NhZ2UpIHtcbiAgICAgIHRoaXMudG9hc3QuZGlzcGxheU1zZyhkYXkudG9hc3RNZXNzYWdlLCA0MDAwKTtcbiAgICB9XG4gIH1cbiAgc2VsZWN0UmFuZ2UoaXRlbTogUmFuZ2VJdGVtKSB7XG4gICAgaWYgKCFpdGVtKSByZXR1cm47XG4gIFxuICAgIGxldCBzdGFydERhdGUgPSB0aGlzLmRheWpzSW5zdGFuY2UoaXRlbS52YWx1ZVswXSk7ICBcbiAgICBsZXQgZW5kRGF0ZSA9IHRoaXMuZGF5anNJbnN0YW5jZShpdGVtLnZhbHVlWzFdKTsgIFxuICBcbiAgICBjb25zdCBzdGFydERhdGVTdHIgPSBzdGFydERhdGUuZm9ybWF0KHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpO1xuICAgIGNvbnN0IGVuZERhdGVTdHIgPSBlbmREYXRlLmZvcm1hdCh0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KTtcbiAgXG4gICAgY29uc3QgaXNBbnlEYXRlRGlzYWJsZWQgPSB0aGlzLmRhdGEuZGF0ZXNEaXNhYmxlZC5zb21lKChkYXRlKSA9PlxuICAgICAgdGhpcy5kYXlqc0luc3RhbmNlKGRhdGUgLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KS5pc0JldHdlZW4oc3RhcnREYXRlU3RyLCBlbmREYXRlU3RyLCBudWxsLCAnW10nKVxuICAgICk7XG4gIFxuICAgIGNvbnN0IG1pbkRhdGUgPSAhIXRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlID8gdGhpcy5kYXlqc0luc3RhbmNlKHRoaXMuZGF0YS5kcENvbmZpZy5taW5EYXRlLCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0KSA6IGRheWpzKCdpbnZhbGlkJyk7XG4gICAgY29uc3QgbWF4RGF0ZSA9ICEhdGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUgPyB0aGlzLmRheWpzSW5zdGFuY2UodGhpcy5kYXRhLmRwQ29uZmlnLm1heERhdGUsIHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQpIDogZGF5anMoJ2ludmFsaWQnKTtcbiAgXG4gICAgY29uc3QgaXNXaXRoaW5MaW1pdHMgPVxuICAgICAgKCFtaW5EYXRlLmlzVmFsaWQoKSB8fCAhc3RhcnREYXRlLmlzQmVmb3JlKG1pbkRhdGUsIFwiZGF5XCIpKSAmJlxuICAgICAgKCFtYXhEYXRlLmlzVmFsaWQoKSB8fCAhZW5kRGF0ZS5pc0FmdGVyKG1heERhdGUsIFwiZGF5XCIpKTtcbiAgXG4gICAgaWYgKCFpc1dpdGhpbkxpbWl0cyB8fCBpc0FueURhdGVEaXNhYmxlZCkge1xuICAgICAgdGhpcy50b2FzdC5kaXNwbGF5TXNnKFwiU2VsZWN0ZWQgcmFuZ2UgY29udGFpbnMgZGlzYWJsZWQgZGF0ZXMgb3IgaXMgb3V0IG9mIGJvdW5kcy5cIiwgNDAwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICBcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUxhYmVsID0gaXRlbS5sYWJlbDtcbiAgICB0aGlzLmN1cnJlbnRNb250aE51bWJlciA9IHN0YXJ0RGF0ZS5tb250aCgpO1xuICAgIHRoaXMuY3VycmVudFllYXJOdW1iZXIgPSBzdGFydERhdGUueWVhcigpO1xuICBcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGhOdW1iZXIgPT09IDExKSB7XG4gICAgICB0aGlzLm5leHRNb250aE51bWJlciA9IDA7XG4gICAgICB0aGlzLm5leHRZZWFyTnVtYmVyID0gdGhpcy5jdXJyZW50WWVhck51bWJlciArIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubmV4dE1vbnRoTnVtYmVyID0gdGhpcy5jdXJyZW50TW9udGhOdW1iZXIgKyAxO1xuICAgICAgdGhpcy5uZXh0WWVhck51bWJlciA9IHRoaXMuY3VycmVudFllYXJOdW1iZXI7XG4gICAgfVxuICBcbiAgICB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyA9IHsgXG4gICAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZVN0ciwgXG4gICAgICBlbmREYXRlOiBlbmREYXRlU3RyLFxuICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiBpdGVtLmxhYmVsXG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRNb250aCA9IGdldE1vbnRoKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyKTtcbiAgICB0aGlzLm5leHRNb250aCA9IGdldE1vbnRoKHRoaXMubmV4dE1vbnRoTnVtYmVyKTtcbiAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgXG4gICAgdGhpcy5pc0RhdGVzVmFsaWQgPSAhISh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5zdGFydERhdGUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZSk7XG4gIH1cbiAgcmVzZXRSYW5nZSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbUxhYmVsID0gdGhpcy5DVVNUT01fUkFOR0VfTEFCRUw7XG4gICAgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMgPSB7XG4gICAgICBzdGFydERhdGU6IG51bGwsXG4gICAgICBlbmREYXRlOiBudWxsLFxuICAgICAgc2VsZWN0ZWRSYW5nZUxhYmVsOiB0aGlzLkNVU1RPTV9SQU5HRV9MQUJFTFxuICAgIH07XG4gICAgdGhpcy5zZWxlY3Rpb25TdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy5pc0RhdGVzVmFsaWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMuY3VycmVudE1vbnRoTnVtYmVyLCB0aGlzLmN1cnJlbnRZZWFyTnVtYmVyKTtcbiAgICB0aGlzLm5leHRNb250aERhdGVzID0gdGhpcy5nZW5lcmF0ZURhdGVzKHRoaXMubmV4dE1vbnRoTnVtYmVyLCB0aGlzLm5leHRZZWFyTnVtYmVyKTtcbiAgfVxuICBcbiAgYXBwbHlEYXRlcygpIHtcbiAgICAvLyBJZiB0aW1lIGlzIGVuYWJsZWQsIGFwcGVuZCB0aW1lIHRvIHRoZSBkYXRlcyBiZWZvcmUgYXBwbHlpbmdcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWUpIHtcbiAgICAgIGxldCBzdGFydFRpbWU6IHN0cmluZztcbiAgICAgIGxldCBlbmRUaW1lOiBzdHJpbmc7XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgICAgc3RhcnRUaW1lID0gdGhpcy5mb3JtYXRUaW1lKHRoaXMuc3RhcnRIb3VyLCB0aGlzLnN0YXJ0TWludXRlLCB0aGlzLnN0YXJ0QW1QbSk7XG4gICAgICAgIGVuZFRpbWUgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy5lbmRIb3VyLCB0aGlzLmVuZE1pbnV0ZSwgdGhpcy5lbmRBbVBtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IHRoaXMuZm9ybWF0VGltZSh0aGlzLnN0YXJ0SG91cjI0LCB0aGlzLnN0YXJ0TWludXRlLCAnJyk7XG4gICAgICAgIGVuZFRpbWUgPSB0aGlzLmZvcm1hdFRpbWUodGhpcy5lbmRIb3VyMjQsIHRoaXMuZW5kTWludXRlLCAnJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEV4dHJhY3Qgb25seSB0aGUgZGF0ZSBwYXJ0IChiZWZvcmUgYW55IGV4aXN0aW5nIHRpbWUpIGFuZCBhcHBlbmQgdGhlIHNlbGVjdGVkIHRpbWVcbiAgICAgIGxldCBzdGFydERhdGVPbmx5ID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlO1xuICAgICAgbGV0IGVuZERhdGVPbmx5ID0gdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuZW5kRGF0ZTtcbiAgICAgIFxuICAgICAgLy8gT25seSBleHRyYWN0IGRhdGUgcGFydCBpZiB0aGUgZm9ybWF0IGNvbnRhaW5zIHRpbWUgY29tcG9uZW50c1xuICAgICAgaWYgKHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuaW5jbHVkZXMoJ0hIJykgfHwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnbW0nKSB8fCB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykpIHtcbiAgICAgICAgLy8gRm9yIGRhdGV0aW1lIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXh0cmFjdCBqdXN0IHRoZSBkYXRlIHBhcnRcbiAgICAgICAgLy8gVHJ5IHRvIHBhcnNlIHRoZSBmdWxsIHN0cmluZyBhbmQgdGhlbiBmb3JtYXQgaXQgYXMgZGF0ZS1vbmx5IGZvciBjb21wYXJpc29uXG4gICAgICAgIGlmIChzdGFydERhdGVPbmx5KSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkU3RhcnQgPSB0aGlzLnBhcnNlRGF0ZVdpdGhNdWx0aXBsZUZvcm1hdHMoc3RhcnREYXRlT25seSk7XG4gICAgICAgICAgaWYgKHBhcnNlZFN0YXJ0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gRXh0cmFjdCBkYXRlIHBhcnQgYnkgZmluZGluZyB0aGUgdGltZSBib3VuZGFyeSAtIGhhbmRsZSBzcGFjZXMgaW4gZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RhcnRNYXRjaCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQubWF0Y2goLyhcXHMrKShISHxtbXxzc3xBfGEpLyk7XG4gICAgICAgICAgICBpZiAodGltZVN0YXJ0TWF0Y2gpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0SW5kZXggPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluZGV4T2YodGltZVN0YXJ0TWF0Y2hbMF0pO1xuICAgICAgICAgICAgICBjb25zdCBkYXRlT25seUZvcm1hdCA9IHRoaXMuZGF0YS5kcENvbmZpZy5mb3JtYXQuc3Vic3RyaW5nKDAsIHRpbWVTdGFydEluZGV4KTtcbiAgICAgICAgICAgICAgc3RhcnREYXRlT25seSA9IHBhcnNlZFN0YXJ0LmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbmREYXRlT25seSkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZEVuZCA9IHRoaXMucGFyc2VEYXRlV2l0aE11bHRpcGxlRm9ybWF0cyhlbmREYXRlT25seSk7XG4gICAgICAgICAgaWYgKHBhcnNlZEVuZC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIEV4dHJhY3QgZGF0ZSBwYXJ0IGJ5IGZpbmRpbmcgdGhlIHRpbWUgYm91bmRhcnkgLSBoYW5kbGUgc3BhY2VzIGluIGRhdGUgcGFydFxuICAgICAgICAgICAgY29uc3QgdGltZVN0YXJ0TWF0Y2ggPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0Lm1hdGNoKC8oXFxzKykoSEh8bW18c3N8QXxhKS8pO1xuICAgICAgICAgICAgaWYgKHRpbWVTdGFydE1hdGNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRpbWVTdGFydEluZGV4ID0gdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmRleE9mKHRpbWVTdGFydE1hdGNoWzBdKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0ZU9ubHlGb3JtYXQgPSB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LnN1YnN0cmluZygwLCB0aW1lU3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgIGVuZERhdGVPbmx5ID0gcGFyc2VkRW5kLmZvcm1hdChkYXRlT25seUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZVdpdGhUaW1lID0gc3RhcnREYXRlT25seSArICcgJyArIHN0YXJ0VGltZTtcbiAgICAgIGNvbnN0IGVuZERhdGVXaXRoVGltZSA9IGVuZERhdGVPbmx5ICsgJyAnICsgZW5kVGltZTtcbiAgICAgIFxuICAgICAgdGhpcy5kYXRhLmRhdGVDaGFuZ2Uoe1xuICAgICAgICBzdGFydERhdGU6IHN0YXJ0RGF0ZVdpdGhUaW1lLFxuICAgICAgICBlbmREYXRlOiBlbmREYXRlV2l0aFRpbWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEuZGF0ZUNoYW5nZSh0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcyk7XG4gICAgfVxuICB9XG4gIFxuICBjYW5jZWxEYXRlUGlja2VyKCkge1xuICAgIHRoaXMuZGF0YS5jbG9zZSgpO1xuICB9XG4gIFxuICAvLyBUaW1lLXJlbGF0ZWQgbWV0aG9kc1xuICBvblN0YXJ0SG91cklucHV0KCkge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIHRoaXMuc3RhcnRIb3VyID0gdGhpcy52YWxpZGF0ZUhvdXJJbnB1dCh0aGlzLnN0YXJ0SG91cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRIb3VyMjQgPSB0aGlzLnZhbGlkYXRlSG91cklucHV0MjQodGhpcy5zdGFydEhvdXIyNCk7XG4gICAgfVxuICB9XG4gIFxuICBvblN0YXJ0TWludXRlSW5wdXQoKSB7XG4gICAgdGhpcy5zdGFydE1pbnV0ZSA9IHRoaXMudmFsaWRhdGVNaW51dGVJbnB1dCh0aGlzLnN0YXJ0TWludXRlKTtcbiAgfVxuICBcbiAgb25FbmRIb3VySW5wdXQoKSB7XG4gICAgaWYgKHRoaXMuaXMxMkhvdXJGb3JtYXQoKSkge1xuICAgICAgdGhpcy5lbmRIb3VyID0gdGhpcy52YWxpZGF0ZUhvdXJJbnB1dCh0aGlzLmVuZEhvdXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuZEhvdXIyNCA9IHRoaXMudmFsaWRhdGVIb3VySW5wdXQyNCh0aGlzLmVuZEhvdXIyNCk7XG4gICAgfVxuICB9XG4gIFxuICBvbkVuZE1pbnV0ZUlucHV0KCkge1xuICAgIHRoaXMuZW5kTWludXRlID0gdGhpcy52YWxpZGF0ZU1pbnV0ZUlucHV0KHRoaXMuZW5kTWludXRlKTtcbiAgfVxuICBcbiAgdmFsaWRhdGVIb3VySW5wdXQoaG91cjogbnVtYmVyKSB7XG4gICAgLy8gQXBwbHkgYm91bmRzIGJhc2VkIG9uIGZvcm1hdFxuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIC8vIDEyLWhvdXIgZm9ybWF0OiAxLTEyXG4gICAgICBpZiAoaG91ciA8IDEpIGhvdXIgPSAxO1xuICAgICAgaWYgKGhvdXIgPiAxMikgaG91ciA9IDEyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyNC1ob3VyIGZvcm1hdDogMC0yM1xuICAgICAgaWYgKGhvdXIgPCAwKSBob3VyID0gMDtcbiAgICAgIGlmIChob3VyID4gMjMpIGhvdXIgPSAyMztcbiAgICB9XG4gICAgcmV0dXJuIGhvdXI7XG4gIH1cbiAgXG4gIC8vIFNwZWNpYWwgdmFsaWRhdGlvbiBmb3IgMjQtaG91ciBmb3JtYXRcbiAgdmFsaWRhdGVIb3VySW5wdXQyNChob3VyOiBudW1iZXIpIHtcbiAgICBpZiAoaG91ciA8IDApIGhvdXIgPSAwO1xuICAgIGlmIChob3VyID4gMjMpIGhvdXIgPSAyMztcbiAgICByZXR1cm4gaG91cjtcbiAgfVxuICBcbiAgdmFsaWRhdGVNaW51dGVJbnB1dChtaW51dGU6IG51bWJlcikge1xuICAgIGlmIChtaW51dGUgPCAwKSBtaW51dGUgPSAwO1xuICAgIGlmIChtaW51dGUgPiA1OSkgbWludXRlID0gNTk7XG4gICAgcmV0dXJuIG1pbnV0ZTtcbiAgfVxuICBcbiAgcHVibGljIGlzMTJIb3VyRm9ybWF0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGEuZHBDb25maWcuZm9ybWF0LmluY2x1ZGVzKCdBJykgfHwgdGhpcy5kYXRhLmRwQ29uZmlnLmZvcm1hdC5pbmNsdWRlcygnYScpO1xuICB9XG4gIFxuICBwcml2YXRlIGZvcm1hdFRpbWUoaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlciwgYW1QbTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICByZXR1cm4gYCR7aG91ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9OiR7bWludXRlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKX0gJHthbVBtfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciAyNC1ob3VyIGZvcm1hdCwganVzdCByZXR1cm4gdGhlIGhvdXIgYW5kIG1pbnV0ZVxuICAgICAgcmV0dXJuIGAke2hvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpfToke21pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUaW1lVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgdGltZSB2YWx1ZXMgZnJvbSBleGlzdGluZyBzZWxlY3RlZCBkYXRlcyBpZiB0aGV5IGNvbnRhaW4gdGltZVxuICAgIGxldCBzdGFydFRpbWVJbml0aWFsaXplZCA9IGZhbHNlO1xuICAgIGxldCBlbmRUaW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICBcbiAgICBpZiAodGhpcy5kYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgJiYgdGhpcy5sb2NhbFNlbGVjdGVkRGF0ZXMuc3RhcnREYXRlKSB7XG4gICAgICBjb25zdCBzdGFydERhdGVQYXJ0cyA9IHRoaXMubG9jYWxTZWxlY3RlZERhdGVzLnN0YXJ0RGF0ZS5zcGxpdCgnICcpO1xuICAgICAgaWYgKHN0YXJ0RGF0ZVBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgdGltZVBhcnQgPSBzdGFydERhdGVQYXJ0cy5zbGljZSgxKS5qb2luKCcgJyk7IC8vIEhhbmRsZSBtdWx0aXBsZSBzcGFjZXNcbiAgICAgICAgdGhpcy5wYXJzZVRpbWVTdHJpbmcodGltZVBhcnQsIHRydWUpO1xuICAgICAgICBzdGFydFRpbWVJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSAmJiB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlKSB7XG4gICAgICBjb25zdCBlbmREYXRlUGFydHMgPSB0aGlzLmxvY2FsU2VsZWN0ZWREYXRlcy5lbmREYXRlLnNwbGl0KCcgJyk7XG4gICAgICBpZiAoZW5kRGF0ZVBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgdGltZVBhcnQgPSBlbmREYXRlUGFydHMuc2xpY2UoMSkuam9pbignICcpOyAvLyBIYW5kbGUgbXVsdGlwbGUgc3BhY2VzXG4gICAgICAgIHRoaXMucGFyc2VUaW1lU3RyaW5nKHRpbWVQYXJ0LCBmYWxzZSk7XG4gICAgICAgIGVuZFRpbWVJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIElmIG5vIGV4aXN0aW5nIHRpbWUgZm91bmQsIHNldCBjdXJyZW50IHRpbWUgYXMgZGVmYXVsdFxuICAgIGlmICh0aGlzLmRhdGEuZHBDb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgaWYgKCFzdGFydFRpbWVJbml0aWFsaXplZCkge1xuICAgICAgICB0aGlzLnNldEN1cnJlbnRUaW1lQXNEZWZhdWx0KHRydWUpO1xuICAgICAgfVxuICAgICAgaWYgKCFlbmRUaW1lSW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50VGltZUFzRGVmYXVsdChmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDdXJyZW50VGltZUFzRGVmYXVsdChpc1N0YXJ0OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gZGF5anMoKTtcbiAgICBjb25zdCBjdXJyZW50SG91ciA9IG5vdy5ob3VyKCk7XG4gICAgY29uc3QgY3VycmVudE1pbnV0ZSA9IG5vdy5taW51dGUoKTtcbiAgICBcbiAgICBpZiAodGhpcy5pczEySG91ckZvcm1hdCgpKSB7XG4gICAgICAvLyBDb252ZXJ0IGN1cnJlbnQgdGltZSB0byAxMi1ob3VyIGZvcm1hdFxuICAgICAgbGV0IGhvdXIxMiA9IGN1cnJlbnRIb3VyO1xuICAgICAgbGV0IGFtUG0gPSAnQU0nO1xuICAgICAgXG4gICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnQU0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgaG91cjEyID0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgIGhvdXIxMiA9IGN1cnJlbnRIb3VyIC0gMTI7XG4gICAgICAgIGFtUG0gPSAnUE0nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYW1QbSA9ICdBTSc7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuc3RhcnRIb3VyID0gaG91cjEyO1xuICAgICAgICB0aGlzLnN0YXJ0TWludXRlID0gY3VycmVudE1pbnV0ZTtcbiAgICAgICAgdGhpcy5zdGFydEFtUG0gPSBhbVBtO1xuICAgICAgICB0aGlzLnN0YXJ0SG91cjI0ID0gY3VycmVudEhvdXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuZEhvdXIgPSBob3VyMTI7XG4gICAgICAgIHRoaXMuZW5kTWludXRlID0gY3VycmVudE1pbnV0ZTtcbiAgICAgICAgdGhpcy5lbmRBbVBtID0gYW1QbTtcbiAgICAgICAgdGhpcy5lbmRIb3VyMjQgPSBjdXJyZW50SG91cjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIGN1cnJlbnQgdGltZSBkaXJlY3RseSBmb3IgMjQtaG91ciBmb3JtYXRcbiAgICAgIGlmIChpc1N0YXJ0KSB7XG4gICAgICAgIHRoaXMuc3RhcnRIb3VyMjQgPSBjdXJyZW50SG91cjtcbiAgICAgICAgdGhpcy5zdGFydE1pbnV0ZSA9IGN1cnJlbnRNaW51dGU7XG4gICAgICAgIC8vIEFsc28gc2V0IDEyLWhvdXIgdmFsdWVzIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICBpZiAoY3VycmVudEhvdXIgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91ciA9IDEyO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gJ0FNJztcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91ciA9IDEyO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gJ1BNJztcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA+IDEyKSB7XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXIgPSBjdXJyZW50SG91ciAtIDEyO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0SG91ciA9IGN1cnJlbnRIb3VyO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gJ0FNJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbmRIb3VyMjQgPSBjdXJyZW50SG91cjtcbiAgICAgICAgdGhpcy5lbmRNaW51dGUgPSBjdXJyZW50TWludXRlO1xuICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgaWYgKGN1cnJlbnRIb3VyID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyID0gMTI7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtID0gJ0FNJztcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50SG91ciA9PT0gMTIpIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXIgPSAxMjtcbiAgICAgICAgICB0aGlzLmVuZEFtUG0gPSAnUE0nO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRIb3VyID4gMTIpIHtcbiAgICAgICAgICB0aGlzLmVuZEhvdXIgPSBjdXJyZW50SG91ciAtIDEyO1xuICAgICAgICAgIHRoaXMuZW5kQW1QbSA9ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyID0gY3VycmVudEhvdXI7XG4gICAgICAgICAgdGhpcy5lbmRBbVBtID0gJ0FNJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VUaW1lU3RyaW5nKHRpbWVTdHJpbmc6IHN0cmluZywgaXNTdGFydDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzMTJIb3VyRm9ybWF0KCkpIHtcbiAgICAgIC8vIFBhcnNlIDEyLWhvdXIgZm9ybWF0OiBcIjEwOjAwIFBNXCJcbiAgICAgIGNvbnN0IG1hdGNoID0gdGltZVN0cmluZy5tYXRjaCgvKFxcZCspOihcXGQrKVxccyooQU18UE0pL2kpO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhvdXIgPSBwYXJzZUludChtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgICAgY29uc3QgYW1QbSA9IG1hdGNoWzNdLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyID0gaG91cjtcbiAgICAgICAgICB0aGlzLnN0YXJ0TWludXRlID0gbWludXRlO1xuICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gYW1QbTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAyNC1ob3VyIHZhbHVlIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICAgIHRoaXMuc3RhcnRIb3VyMjQgPSBob3VyID09PSAxMiA/IChhbVBtID09PSAnUE0nID8gMTIgOiAwKSA6IChhbVBtID09PSAnUE0nID8gaG91ciArIDEyIDogaG91cik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbmRIb3VyID0gaG91cjtcbiAgICAgICAgICB0aGlzLmVuZE1pbnV0ZSA9IG1pbnV0ZTtcbiAgICAgICAgICB0aGlzLmVuZEFtUG0gPSBhbVBtO1xuICAgICAgICAgIC8vIEFsc28gc2V0IDI0LWhvdXIgdmFsdWUgZm9yIGNvbnNpc3RlbmN5XG4gICAgICAgICAgdGhpcy5lbmRIb3VyMjQgPSBob3VyID09PSAxMiA/IChhbVBtID09PSAnUE0nID8gMTIgOiAwKSA6IChhbVBtID09PSAnUE0nID8gaG91ciArIDEyIDogaG91cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUGFyc2UgMjQtaG91ciBmb3JtYXQ6IFwiMjI6MDBcIlxuICAgICAgY29uc3QgbWF0Y2ggPSB0aW1lU3RyaW5nLm1hdGNoKC8oXFxkKyk6KFxcZCspLyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgaG91cjI0ID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludChtYXRjaFsyXSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNTdGFydCkge1xuICAgICAgICAgIC8vIFN0b3JlIGRpcmVjdGx5IGluIDI0LWhvdXIgZm9ybWF0XG4gICAgICAgICAgdGhpcy5zdGFydEhvdXIyNCA9IGhvdXIyNDtcbiAgICAgICAgICB0aGlzLnN0YXJ0TWludXRlID0gbWludXRlO1xuICAgICAgICAgIC8vIEFsc28gc2V0IDEyLWhvdXIgdmFsdWVzIGZvciBjb25zaXN0ZW5jeSAodGhvdWdoIG5vdCB1c2VkIGluIDI0LWhvdXIgbW9kZSlcbiAgICAgICAgICBpZiAoaG91cjI0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91ciA9IDEyO1xuICAgICAgICAgICAgdGhpcy5zdGFydEFtUG0gPSAnQU0nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID09PSAxMikge1xuICAgICAgICAgICAgdGhpcy5zdGFydEhvdXIgPSAxMjtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gJ1BNJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGhvdXIyNCA+IDEyKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91ciA9IGhvdXIyNCAtIDEyO1xuICAgICAgICAgICAgdGhpcy5zdGFydEFtUG0gPSAnUE0nO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0SG91ciA9IGhvdXIyNDtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbVBtID0gJ0FNJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RvcmUgZGlyZWN0bHkgaW4gMjQtaG91ciBmb3JtYXRcbiAgICAgICAgICB0aGlzLmVuZEhvdXIyNCA9IGhvdXIyNDtcbiAgICAgICAgICB0aGlzLmVuZE1pbnV0ZSA9IG1pbnV0ZTtcbiAgICAgICAgICAvLyBBbHNvIHNldCAxMi1ob3VyIHZhbHVlcyBmb3IgY29uc2lzdGVuY3kgKHRob3VnaCBub3QgdXNlZCBpbiAyNC1ob3VyIG1vZGUpXG4gICAgICAgICAgaWYgKGhvdXIyNCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyID0gMTI7XG4gICAgICAgICAgICB0aGlzLmVuZEFtUG0gPSAnQU0nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID09PSAxMikge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyID0gMTI7XG4gICAgICAgICAgICB0aGlzLmVuZEFtUG0gPSAnUE0nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaG91cjI0ID4gMTIpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kSG91ciA9IGhvdXIyNCAtIDEyO1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtID0gJ1BNJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbmRIb3VyID0gaG91cjI0O1xuICAgICAgICAgICAgdGhpcy5lbmRBbVBtID0gJ0FNJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyXCIgYXJpYS1sYWJlbD1cImRhdGUgcmFuZ2UgcGlja2VyXCIgY2RrVHJhcEZvY3VzIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX192aWV3XCI+XG4gICAgPGRpdiB0YWJpbmRleD1cIi0xXCIgY2RrRm9jdXNJbml0aWFsPjwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJkYXRhPy5kcENvbmZpZz8ucmFuZ2VzPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19yYW5nZXNcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YT8uZHBDb25maWc/LnJhbmdlcyA/PyBbXVwiID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZS1yYW5nZScgOiBzZWxlY3RlZEl0ZW1MYWJlbCA9PT0gaXRlbS5sYWJlbH1cIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSYW5nZShpdGVtKVwiXG4gICAgICAgICAgY2xhc3M9XCJtaXMtYnRuXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXY+IDxidXR0b24gY2xhc3M9XCJtaXMtYnRuXCIgW25nQ2xhc3NdPVwieydhY3RpdmUtcmFuZ2UnIDogc2VsZWN0ZWRJdGVtTGFiZWwgPT09ICdDdXN0b20gUmFuZ2UnfVwiIChjbGljayk9XCJyZXNldFJhbmdlKClcIj5DdXN0b20gUmFuZ2U8L2J1dHRvbj4gPC9kaXY+XG4gIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyX19sZWZ0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9faGVhZGVyX19wcmFidVwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvblwiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAoY2xpY2spPVwiIWlzUHJldmlvdXNNb250aERpc2FibGVkICYmIG5hdmlnYXRlTW9udGgoJ1BSRVZJT1VTJylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNQcmV2aW91c01vbnRoRGlzYWJsZWQgJiYgbmF2aWdhdGVNb250aCgnUFJFVklPVVMnKVwiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIE1vbnRoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc1ByZXZpb3VzTW9udGhEaXNhYmxlZFxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBkPVwiTTE5LjcwNzEgOC43MDcxMUMyMC4wOTc2IDguMzE2NTggMjAuMDk3NiA3LjY4MzQyIDE5LjcwNzEgNy4yOTI4OUwxMy4zNDMxIDAuOTI4OTMzQzEyLjk1MjYgMC41Mzg0MDkgMTIuMzE5NSAwLjUzODQwOSAxMS45Mjg5IDAuOTI4OTMzQzExLjUzODQgMS4zMTk0NiAxMS41Mzg0IDEuOTUyNjIgMTEuOTI4OSAyLjM0MzE1TDE3LjU4NTggOEwxMS45Mjg5IDEzLjY1NjlDMTEuNTM4NCAxNC4wNDc0IDExLjUzODQgMTQuNjgwNSAxMS45Mjg5IDE1LjA3MTFDMTIuMzE5NSAxNS40NjE2IDEyLjk1MjYgMTUuNDYxNiAxMy4zNDMxIDE1LjA3MTFMMTkuNzA3MSA4LjcwNzExWk0tOC43NDIyOGUtMDggOUwxOSA5TDE5IDdMOC43NDIyOGUtMDggN0wtOC43NDIyOGUtMDggOVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzE4MUYzM1wiXG4gICAgICAgICAgICA+PC9wYXRoPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4+IHt7IGN1cnJlbnRNb250aCB9fSB7eyBjdXJyZW50WWVhck51bWJlciB9fSA8L3NwYW4+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgIDwhLS0gQnV0dG9uIHZpc2libGUgaW4gbW9iaWxlIHZpZXcgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2Fycm93X19pY29uIG1vYmlsZV92aWV3XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChjbGljayk9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJOZXh0IE1vbnRoXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnZGlzYWJsZWQtbW9udGgnOiBpc05leHRNb250aERpc2FibGVkXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGQ9XCJNMTkuNzA3MSA4LjcwNzExQzIwLjA5NzYgOC4zMTY1OCAyMC4wOTc2IDcuNjgzNDIgMTkuNzA3MSA3LjI5Mjg5TDEzLjM0MzEgMC45Mjg5MzNDMTIuOTUyNiAwLjUzODQwOSAxMi4zMTk1IDAuNTM4NDA5IDExLjkyODkgMC45Mjg5MzNDMTEuNTM4NCAxLjMxOTQ2IDExLjUzODQgMS45NTI2MiAxMS45Mjg5IDIuMzQzMTVMMTcuNTg1OCA4TDExLjkyODkgMTMuNjU2OUMxMS41Mzg0IDE0LjA0NzQgMTEuNTM4NCAxNC42ODA1IDExLjkyODkgMTUuMDcxMUMxMi4zMTk1IDE1LjQ2MTYgMTIuOTUyNiAxNS40NjE2IDEzLjM0MzEgMTUuMDcxMUwxOS43MDcxIDguNzA3MTFaTS04Ljc0MjI4ZS0wOCA5TDE5IDlMMTkgN0w4Ljc0MjI4ZS0wOCA3TC04Ljc0MjI4ZS0wOCA5WlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjMTgxRjMzXCJcbiAgICAgICAgICAgID48L3BhdGg+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fd2Vla2RheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB3ZWVrRGF5LmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheXNcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRhdGVyYW5nZXBpY2tlci1jb250YWluZXJfX2RheVwiIFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc2FtZS1kYXknOiBkYXkuaXNTZWxlY3RlZFN0YXJ0RGF5ICYmIGRheS5pc1NlbGVjdGVkRW5kRGF5LFxuICAgICAgICAgICAgICAnc2VsZWN0ZWQtc3RhcnQtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLWVuZC1kYXknOiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ2Rpc2FibGVkLWRheSc6IGRheS5pc0Rpc2FibGVkRGF5LFxuICAgICAgICAgICAgICAnaW4tcmFuZ2UtZGF5JzogZGF5LmluUmFuZ2VEYXksXG4gICAgICAgICAgICAgICdpcy12YWxpZC1kYXRlJzogZGF5LmRhdGUgPiAwICYmICEoZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSlcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRheSBvZiBjdXJyZW50TW9udGhEYXRlc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KCdMRUZUJywgZGF5KVwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VsZWN0RGF5KCdMRUZUJywgZGF5KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXkuZGF0ZSA+IDBcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiZGF5LmlzRGlzYWJsZWREYXkgPyAtMSA6IDBcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJldHJhY3REYXlNb250aChkYXkuZGF0ZSwgY3VycmVudE1vbnRoLCBjdXJyZW50WWVhck51bWJlcilcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0ZXBpY2tlcl9fcmlnaHRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19oZWFkZXJfX3ByYWJ1XCI+XG4gICAgICAgIDxkaXY+PC9kaXY+XG4gICAgICAgIDxzcGFuPiB7eyBuZXh0TW9udGggfX0ge3sgbmV4dFllYXJOdW1iZXIgfX0gPC9zcGFuPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19hcnJvd19faWNvbiBwY192aWV3XCJcbiAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgIChjbGljayk9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIChrZXl1cC5lbnRlcik9XCIhaXNOZXh0TW9udGhEaXNhYmxlZCAmJiBuYXZpZ2F0ZU1vbnRoKCdORVhUJylcIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdkaXNhYmxlZC1tb250aCc6IGlzTmV4dE1vbnRoRGlzYWJsZWRcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk0xOS43MDcxIDguNzA3MTFDMjAuMDk3NiA4LjMxNjU4IDIwLjA5NzYgNy42ODM0MiAxOS43MDcxIDcuMjkyODlMMTMuMzQzMSAwLjkyODkzM0MxMi45NTI2IDAuNTM4NDA5IDEyLjMxOTUgMC41Mzg0MDkgMTEuOTI4OSAwLjkyODkzM0MxMS41Mzg0IDEuMzE5NDYgMTEuNTM4NCAxLjk1MjYyIDExLjkyODkgMi4zNDMxNUwxNy41ODU4IDhMMTEuOTI4OSAxMy42NTY5QzExLjUzODQgMTQuMDQ3NCAxMS41Mzg0IDE0LjY4MDUgMTEuOTI4OSAxNS4wNzExQzEyLjMxOTUgMTUuNDYxNiAxMi45NTI2IDE1LjQ2MTYgMTMuMzQzMSAxNS4wNzExTDE5LjcwNzEgOC43MDcxMVpNLTguNzQyMjhlLTA4IDlMMTkgOUwxOSA3TDguNzQyMjhlLTA4IDdMLTguNzQyMjhlLTA4IDlaXCJcbiAgICAgICAgICAgICAgZmlsbD1cIiMxODFGMzNcIlxuICAgICAgICAgICAgPjwvcGF0aD5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX19ib2R5XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5c1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX193ZWVrZGF5XCIgKm5nRm9yPVwibGV0IHdlZWtEYXkgb2Ygd2Vla0RheXNcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHdlZWtEYXkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5c1wiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyLWNvbnRhaW5lcl9fZGF5XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXNhbWUtZGF5JzogZGF5LmlzU2VsZWN0ZWRTdGFydERheSAmJiBkYXkuaXNTZWxlY3RlZEVuZERheSxcbiAgICAgICAgICAgICAgJ3NlbGVjdGVkLXN0YXJ0LWRheSc6IGRheS5pc1NlbGVjdGVkU3RhcnREYXksXG4gICAgICAgICAgICAgICdzZWxlY3RlZC1lbmQtZGF5JzogZGF5LmlzU2VsZWN0ZWRFbmREYXksXG4gICAgICAgICAgICAgICdkaXNhYmxlZC1kYXknOiBkYXkuaXNEaXNhYmxlZERheSxcbiAgICAgICAgICAgICAgJ2luLXJhbmdlLWRheSc6IGRheS5pblJhbmdlRGF5LFxuICAgICAgICAgICAgICAnaXMtdmFsaWQtZGF0ZSc6IGRheS5kYXRlID4gMCAmJiAhKGRheS5pc1NlbGVjdGVkU3RhcnREYXkgJiYgZGF5LmlzU2VsZWN0ZWRFbmREYXkpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgbmV4dE1vbnRoRGF0ZXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheSgnUklHSFQnLCBkYXkpXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWxlY3REYXkoJ1JJR0hUJywgZGF5KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXkuZGF0ZSA+IDBcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiZGF5LmlzRGlzYWJsZWREYXkgPyAtMSA6IDBcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInJldHJhY3REYXlNb250aChkYXkuZGF0ZSwgbmV4dE1vbnRoLCBuZXh0WWVhck51bWJlcilcIj5cbiAgICAgICAgICAgICAge3sgZGF5LmRhdGUgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIFxuICA8IS0tIFRpbWUgU2VsZWN0aW9uIFNlY3Rpb24gLS0+XG4gIDxkaXYgY2xhc3M9XCJkYXRlcmFuZ2VwaWNrZXItY29udGFpbmVyX190aW1lXCIgKm5nSWY9XCJkYXRhLmRwQ29uZmlnLmVuYWJsZVRpbWUgPT09IHRydWVcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGltZS1zZWN0aW9uXCI+XG4gICAgICA8aDQ+RnJvbTwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dHNcIj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbmdNb2RlbF09XCJpczEySG91ckZvcm1hdCgpID8gc3RhcnRIb3VyIDogc3RhcnRIb3VyMjRcIiBcbiAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJpczEySG91ckZvcm1hdCgpID8gKHN0YXJ0SG91ciA9ICRldmVudCkgOiAoc3RhcnRIb3VyMjQgPSAkZXZlbnQpOyBvblN0YXJ0SG91cklucHV0KClcIlxuICAgICAgICAgIFttaW5dPVwiaXMxMkhvdXJGb3JtYXQoKSA/IDEgOiAwXCIgXG4gICAgICAgICAgW21heF09XCJpczEySG91ckZvcm1hdCgpID8gMTIgOiAyM1wiIFxuICAgICAgICAgIHN0ZXA9XCIxXCJcbiAgICAgICAgICBjbGFzcz1cInRpbWUtaW5wdXQgaG91ci1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJISFwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRpbWUtc2VwYXJhdG9yXCI+Ojwvc3Bhbj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0YXJ0TWludXRlXCIgXG4gICAgICAgICAgKGlucHV0KT1cIm9uU3RhcnRNaW51dGVJbnB1dCgpXCJcbiAgICAgICAgICBtaW49XCIwXCIgXG4gICAgICAgICAgbWF4PVwiNTlcIiBcbiAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aW1lLWlucHV0IG1pbnV0ZS1pbnB1dFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJNTVwiPlxuICAgICAgICA8c2VsZWN0IFxuICAgICAgICAgIFsobmdNb2RlbCldPVwic3RhcnRBbVBtXCIgXG4gICAgICAgICAgY2xhc3M9XCJhbS1wbS1zZWxlY3RvclwiXG4gICAgICAgICAgKm5nSWY9XCJpczEySG91ckZvcm1hdCgpXCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLXNlY3Rpb25cIj5cbiAgICAgIDxoND5UbzwvaDQ+XG4gICAgICA8ZGl2IGNsYXNzPVwidGltZS1pbnB1dHNcIj5cbiAgICAgICAgPGlucHV0IFxuICAgICAgICAgIHR5cGU9XCJudW1iZXJcIiBcbiAgICAgICAgICBbbmdNb2RlbF09XCJpczEySG91ckZvcm1hdCgpID8gZW5kSG91ciA6IGVuZEhvdXIyNFwiIFxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImlzMTJIb3VyRm9ybWF0KCkgPyAoZW5kSG91ciA9ICRldmVudCkgOiAoZW5kSG91cjI0ID0gJGV2ZW50KTsgb25FbmRIb3VySW5wdXQoKVwiXG4gICAgICAgICAgW21pbl09XCJpczEySG91ckZvcm1hdCgpID8gMSA6IDBcIiBcbiAgICAgICAgICBbbWF4XT1cImlzMTJIb3VyRm9ybWF0KCkgPyAxMiA6IDIzXCIgXG4gICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dCBob3VyLWlucHV0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkhIXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGltZS1zZXBhcmF0b3JcIj46PC9zcGFuPlxuICAgICAgICA8aW5wdXQgXG4gICAgICAgICAgdHlwZT1cIm51bWJlclwiIFxuICAgICAgICAgIFsobmdNb2RlbCldPVwiZW5kTWludXRlXCIgXG4gICAgICAgICAgKGlucHV0KT1cIm9uRW5kTWludXRlSW5wdXQoKVwiXG4gICAgICAgICAgbWluPVwiMFwiIFxuICAgICAgICAgIG1heD1cIjU5XCIgXG4gICAgICAgICAgc3RlcD1cIjFcIlxuICAgICAgICAgIGNsYXNzPVwidGltZS1pbnB1dCBtaW51dGUtaW5wdXRcIlxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTU1cIj5cbiAgICAgICAgPHNlbGVjdCBcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImVuZEFtUG1cIiBcbiAgICAgICAgICBjbGFzcz1cImFtLXBtLXNlbGVjdG9yXCJcbiAgICAgICAgICAqbmdJZj1cImlzMTJIb3VyRm9ybWF0KClcIj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgPGRpdiBjbGFzcz1cImRhdGVyYW5nZXBpY2tlcl9fZm9vdGVyXCI+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJub25lXCIgaWQ9J21vYmlsZS1mb290ZXItYnRuJyAoY2xpY2spPVwiY2FuY2VsRGF0ZVBpY2tlcigpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtaXMtYnV0dG9uIHR5cGU9XCJwcmltYXJ5XCIgaWQ9XCJtb2JpbGUtZm9vdGVyLWJ0blwiIChjbGljayk9XCJhcHBseURhdGVzKClcIiBbZGlzYWJsZWRdPVwiIWlzRGF0ZXNWYWxpZFwiPkFwcGx5PC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+Il19