@rangertechnologies/ngnxt 2.1.73 → 2.1.75
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/custom-button/custom-button.component.mjs +4 -4
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +20 -18
- package/esm2022/lib/components/custom-date/custom-date.component.mjs +4 -4
- package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +4 -4
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +105 -97
- package/esm2022/lib/components/custom-image/custom-image.component.mjs +8 -7
- package/esm2022/lib/components/custom-input/custom-input.component.mjs +8 -7
- package/esm2022/lib/components/custom-label/custom-label.component.mjs +4 -4
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +4 -4
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +7 -6
- package/esm2022/lib/components/custom-table/custom-table.component.mjs +6 -5
- package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +8 -7
- package/esm2022/lib/components/custom-time/custom-time.component.mjs +4 -4
- package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +4 -4
- package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +5 -5
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +8 -7
- package/esm2022/lib/components/file-view/file-view.component.mjs +5 -5
- package/esm2022/lib/components/loader/loader.component.mjs +5 -5
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +8 -6
- package/esm2022/lib/components/search-box/search-box.component.mjs +6 -5
- package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +9 -8
- package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +4 -4
- package/esm2022/lib/i18n.component.mjs +4 -4
- package/esm2022/lib/i18n.module.mjs +5 -5
- package/esm2022/lib/i18n.pipe.mjs +4 -4
- package/esm2022/lib/i18n.service.mjs +4 -4
- package/esm2022/lib/nxt-app.component.mjs +4 -4
- package/esm2022/lib/nxt-app.module.mjs +5 -5
- package/esm2022/lib/nxt-app.service.mjs +4 -4
- package/esm2022/lib/pages/booklet/booklet.component.mjs +71 -66
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +85 -93
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +323 -259
- package/esm2022/lib/pages/summary-page/summary-page.component.mjs +13 -12
- package/esm2022/lib/pipe/get-value.pipe.mjs +4 -4
- package/esm2022/lib/sample.mjs +3157 -327
- package/esm2022/lib/services/change.service.mjs +4 -4
- package/esm2022/lib/services/data.service.mjs +4 -4
- package/esm2022/lib/services/salesforce.service.mjs +4 -4
- package/esm2022/lib/services/shared.service.mjs +4 -4
- package/esm2022/lib/services/storage.service.mjs +10 -8
- package/esm2022/lib/wrapper.mjs +96 -92
- package/fesm2022/rangertechnologies-ngnxt.mjs +4004 -1086
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/wrapper.d.ts +93 -90
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.75.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.73.tgz +0 -0
|
@@ -246,20 +246,21 @@ export class QuestionnaireComponent {
|
|
|
246
246
|
this.spinnerType = "ball-spin-clockwise-fade";
|
|
247
247
|
}
|
|
248
248
|
// HA 02FEB24 On date change need to store the changed value so passing the question
|
|
249
|
+
// RS 09DEC24 Changed keys
|
|
249
250
|
onDateChanged(event, ques) {
|
|
250
251
|
//console.log('Inside the onDateChanged');
|
|
251
252
|
//to change the border color
|
|
252
|
-
if (this.qbItem.
|
|
253
|
+
if (this.qbItem.progressBar) {
|
|
253
254
|
//console.log('Inside the progressBar cond');
|
|
254
255
|
this.inpValue =
|
|
255
256
|
event.date.day + "/" + event.date.month + "/" + event.date.year;
|
|
256
|
-
if (this.questionItem.
|
|
257
|
+
if (this.questionItem.type == "Book") {
|
|
257
258
|
this.selectDate = event.date.day + "/" + event.date.month + "/" + event.date.year;
|
|
258
259
|
}
|
|
259
260
|
}
|
|
260
261
|
else {
|
|
261
262
|
//console.log('Inside the ELSE of progressBar cond');
|
|
262
|
-
if (this.questionItem.
|
|
263
|
+
if (this.questionItem.type == "Book") {
|
|
263
264
|
this.selectDate = event.date.day + "-" + event.date.month + "-" + event.date.year;
|
|
264
265
|
}
|
|
265
266
|
this.inpValue =
|
|
@@ -269,12 +270,12 @@ export class QuestionnaireComponent {
|
|
|
269
270
|
htmlElement
|
|
270
271
|
.item(0)
|
|
271
272
|
.setAttribute("style", "border-color:#87be1c;width:100%");
|
|
272
|
-
this.dateMap.set(this.questionItem.
|
|
273
|
+
this.dateMap.set(this.questionItem.id, event);
|
|
273
274
|
if (event.date.day === 0 &&
|
|
274
275
|
event.date.month === 0 &&
|
|
275
276
|
event.date.year === 0) {
|
|
276
|
-
this.dateMap.delete(this.questionItem.
|
|
277
|
-
this.answerMap.delete(this.questionItem.
|
|
277
|
+
this.dateMap.delete(this.questionItem.id);
|
|
278
|
+
this.answerMap.delete(this.questionItem.id);
|
|
278
279
|
}
|
|
279
280
|
//console.log('this.inpValue = '+this.inpValue);
|
|
280
281
|
//console.log('this.selectDate = '+this.selectDate);
|
|
@@ -336,9 +337,10 @@ export class QuestionnaireComponent {
|
|
|
336
337
|
this.processQB();
|
|
337
338
|
}
|
|
338
339
|
}
|
|
340
|
+
// RS 09DEC24 Changed keys
|
|
339
341
|
date_TimeMap() {
|
|
340
|
-
this.selectedhourMap.set(this.questionItem.
|
|
341
|
-
this.selectedminuteMap.set(this.questionItem.
|
|
342
|
+
this.selectedhourMap.set(this.questionItem.id, this.selectedHour);
|
|
343
|
+
this.selectedminuteMap.set(this.questionItem.id, this.selectedMinute);
|
|
342
344
|
}
|
|
343
345
|
day() {
|
|
344
346
|
this.myDatePickerOptions = {
|
|
@@ -419,10 +421,11 @@ export class QuestionnaireComponent {
|
|
|
419
421
|
getProperTime(def, input) {
|
|
420
422
|
return input === "" ? def : input;
|
|
421
423
|
}
|
|
424
|
+
// RS 09DEC24 Changed keys
|
|
422
425
|
//Summary Question Clickable Logic
|
|
423
426
|
handleEditClick(value) {
|
|
424
427
|
this.backicon = false;
|
|
425
|
-
if (this.abItem?.
|
|
428
|
+
if (this.abItem?.status == "Pending") {
|
|
426
429
|
if (value == null) {
|
|
427
430
|
return;
|
|
428
431
|
}
|
|
@@ -434,7 +437,7 @@ export class QuestionnaireComponent {
|
|
|
434
437
|
for (let i = arrayLength; i > lengthValue; i--) {
|
|
435
438
|
this.questionStack.pop();
|
|
436
439
|
}
|
|
437
|
-
if (this.qbItem.
|
|
440
|
+
if (this.qbItem.progressBar === true) {
|
|
438
441
|
var arrayLength1 = this.questionName.length;
|
|
439
442
|
for (let j = arrayLength1; j > lengthValue; j--) {
|
|
440
443
|
this.questionName.pop();
|
|
@@ -458,48 +461,48 @@ export class QuestionnaireComponent {
|
|
|
458
461
|
}
|
|
459
462
|
var questionTxt = '';
|
|
460
463
|
this.clearError();
|
|
461
|
-
this.handleEvent.emit(this.qbItem.
|
|
464
|
+
this.handleEvent.emit(this.qbItem.nextTrackingId);
|
|
462
465
|
this.recordId = null;
|
|
463
466
|
var cQuestion = new Question();
|
|
464
467
|
cQuestion = this.questionItem;
|
|
465
468
|
// MR 30JAN24 - Added Condition for this.questionItem.Questions__r (Book Question and Non-Book)
|
|
466
|
-
if (this.questionItem.
|
|
469
|
+
if (this.questionItem.subQuestions) {
|
|
467
470
|
// Create an array of objects to store the values
|
|
468
|
-
for (var i = 0; i < this.questionItem.
|
|
469
|
-
if (this.questionItem.
|
|
470
|
-
var questionText = this.questionItem.
|
|
471
|
+
for (var i = 0; i < this.questionItem.subQuestions.length; i++) {
|
|
472
|
+
if (this.questionItem.subQuestions[i].questionText) {
|
|
473
|
+
var questionText = this.questionItem.subQuestions[i].questionText.replace(/<[^>]+>/g, ''); // Remove HTML tags from the questionText value
|
|
471
474
|
}
|
|
472
475
|
else {
|
|
473
476
|
questionText = 'undefined';
|
|
474
477
|
}
|
|
475
|
-
const input = this.questionItem.
|
|
478
|
+
const input = this.questionItem.subQuestions[i].input;
|
|
476
479
|
const obj = { [questionText]: input }; // Create an object with the questionText as the key and the input as the value
|
|
477
480
|
this.summaryData.push(obj); // Add the object to the data array
|
|
478
481
|
}
|
|
479
482
|
}
|
|
480
483
|
else {
|
|
481
|
-
var questionText = this.questionItem.
|
|
484
|
+
var questionText = this.questionItem.questionText.replace(/<[^>]+>/g, '');
|
|
482
485
|
const input = this.questionItem.input;
|
|
483
486
|
const obj = { [questionText]: input }; // Create an object with the questionText as the key and the input as the value
|
|
484
487
|
this.summaryData.push(obj); // Add the object to the data array
|
|
485
488
|
}
|
|
486
|
-
var typ = cQuestion.
|
|
487
|
-
// this.sques += cQuestion.
|
|
488
|
-
var quesValue = cQuestion.
|
|
489
|
+
var typ = cQuestion.type;
|
|
490
|
+
// this.sques += cQuestion.question + '@@##$$';
|
|
491
|
+
var quesValue = cQuestion.questionText;
|
|
489
492
|
var mailformat = "^[^.][a-zA-Z0-9!#$%&'*+-/=?^_`{|}~]+[^.]@[^-][a-zA-Z0-9.-]+[^-].[a-zA-Z]{2,}$";
|
|
490
493
|
// Process Inputs
|
|
491
494
|
if (this.checkboxFlag) {
|
|
492
495
|
this.inpValue = "";
|
|
493
496
|
// Save all the selected options in the inpValue
|
|
494
497
|
for (var ov of this.optionValues.filter((item) => item.checked)) {
|
|
495
|
-
this.inpValue += ov.
|
|
496
|
-
this.recordId = ov.
|
|
498
|
+
this.inpValue += ov.value + "@@##$$";
|
|
499
|
+
this.recordId = ov.nextQuestion;
|
|
497
500
|
}
|
|
498
501
|
this.inpValue = this.trimLastDummy(this.inpValue);
|
|
499
502
|
}
|
|
500
503
|
else if (this.emailFlag) {
|
|
501
504
|
if (this.inpValue && this.inpValue.match(mailformat)) {
|
|
502
|
-
this.recordId = this.questionItem.
|
|
505
|
+
this.recordId = this.questionItem.nextQuestion;
|
|
503
506
|
}
|
|
504
507
|
else {
|
|
505
508
|
this.questionItem.error = new ErrorWrapper();
|
|
@@ -510,14 +513,14 @@ export class QuestionnaireComponent {
|
|
|
510
513
|
var isNotValidAccNum = this.isNotValidAccNumber(this.inpValue);
|
|
511
514
|
if (isNotValidAccNum) {
|
|
512
515
|
this.notValidAccNum = true;
|
|
513
|
-
this.recordId = this.questionItem.
|
|
516
|
+
this.recordId = this.questionItem.nextQuestion;
|
|
514
517
|
return;
|
|
515
518
|
}
|
|
516
519
|
this.notValidAccNum = false;
|
|
517
520
|
}
|
|
518
521
|
else if (this.numberFlag) {
|
|
519
522
|
if (this.inpValue) {
|
|
520
|
-
this.recordId = this.questionItem.
|
|
523
|
+
this.recordId = this.questionItem.nextQuestion;
|
|
521
524
|
}
|
|
522
525
|
else {
|
|
523
526
|
this.questionItem.error = new ErrorWrapper();
|
|
@@ -527,20 +530,20 @@ export class QuestionnaireComponent {
|
|
|
527
530
|
else if (this.bookFlag) {
|
|
528
531
|
this.inpValue = "";
|
|
529
532
|
var hasMissingInput = false;
|
|
530
|
-
for (var item of this.questionItem.
|
|
533
|
+
for (var item of this.questionItem.subQuestions) {
|
|
531
534
|
var count = 0;
|
|
532
|
-
if (item.
|
|
535
|
+
if (item.type == "Date" || item.type == "Time") {
|
|
533
536
|
//this one
|
|
534
537
|
this.change();
|
|
535
|
-
if (item.
|
|
538
|
+
if (item.type == "Date") {
|
|
536
539
|
//console.log('Inside the date type cond = '+this.selectDate);
|
|
537
540
|
this.inpValue = this.selectDate;
|
|
538
541
|
//console.log(this.inpValue)
|
|
539
542
|
//console.log(this.selectDate)
|
|
540
543
|
}
|
|
541
|
-
if (item.
|
|
544
|
+
if (item.type == "Time") {
|
|
542
545
|
//console.log(this.selectedHour+this.selectedMeridiem+this.selectedMinute)
|
|
543
|
-
if (this.questionItem.
|
|
546
|
+
if (this.questionItem.x24Hours === false) {
|
|
544
547
|
this.questionItem.input =
|
|
545
548
|
(this.selectedMeridiem === "PM" && this.selectedHour != "12"
|
|
546
549
|
? Number(this.selectedHour) + 12
|
|
@@ -550,7 +553,7 @@ export class QuestionnaireComponent {
|
|
|
550
553
|
if (this.selectedMeridiem === "AM" && this.selectedHour === "12") {
|
|
551
554
|
this.questionItem.input = "00" + ":" + this.selectedMinute + " AM";
|
|
552
555
|
}
|
|
553
|
-
if (this.qbItem.
|
|
556
|
+
if (this.qbItem.progressBar) {
|
|
554
557
|
if (this.selectDate) {
|
|
555
558
|
this.inpValue = this.selectDate + " " + this.questionItem.input;
|
|
556
559
|
}
|
|
@@ -567,10 +570,10 @@ export class QuestionnaireComponent {
|
|
|
567
570
|
}
|
|
568
571
|
}
|
|
569
572
|
}
|
|
570
|
-
if (this.questionItem.
|
|
573
|
+
if (this.questionItem.x24Hours === true) {
|
|
571
574
|
this.questionItem.input =
|
|
572
575
|
this.selectedHour + ":" + this.selectedMinute;
|
|
573
|
-
if (this.qbItem.
|
|
576
|
+
if (this.qbItem.progressBar) {
|
|
574
577
|
this.inpValue = this.questionItem.input;
|
|
575
578
|
}
|
|
576
579
|
else {
|
|
@@ -591,7 +594,7 @@ export class QuestionnaireComponent {
|
|
|
591
594
|
this.date_TimeMap();
|
|
592
595
|
}
|
|
593
596
|
// HA 31-JAN-24 Added text error condition
|
|
594
|
-
if (item.
|
|
597
|
+
if (item.type == "Text") {
|
|
595
598
|
if (!item.input) {
|
|
596
599
|
item.input = "";
|
|
597
600
|
item.error = new ErrorWrapper();
|
|
@@ -599,36 +602,36 @@ export class QuestionnaireComponent {
|
|
|
599
602
|
}
|
|
600
603
|
// this.inpValue = item.input; 634
|
|
601
604
|
}
|
|
602
|
-
if (!item.
|
|
603
|
-
// ((item.
|
|
604
|
-
// (item.
|
|
605
|
-
(item.
|
|
605
|
+
if (!item.isOptional &&
|
|
606
|
+
// ((item.type != "File" && !item.input && item.type != 'Date' && item.type != 'Time') ||
|
|
607
|
+
// (item.type == "File" && this.attachments.length == 0))
|
|
608
|
+
(item.type == "File" && this.attachments.length == 0)) {
|
|
606
609
|
item.error = new ErrorWrapper();
|
|
607
610
|
hasMissingInput = true;
|
|
608
611
|
}
|
|
609
|
-
if (item.
|
|
612
|
+
if (item.type == "Radio") {
|
|
610
613
|
if (!item.input) {
|
|
611
614
|
item.error = new ErrorWrapper();
|
|
612
615
|
hasMissingInput = true;
|
|
613
616
|
}
|
|
614
617
|
}
|
|
615
|
-
if (item.
|
|
618
|
+
if (item.type == "Dropdown") {
|
|
616
619
|
if (!item.input) {
|
|
617
620
|
item.input = "";
|
|
618
621
|
item.error = new ErrorWrapper();
|
|
619
622
|
hasMissingInput = true;
|
|
620
623
|
}
|
|
621
624
|
}
|
|
622
|
-
if (item.
|
|
625
|
+
if (item.type == "Email") {
|
|
623
626
|
if (item.input && item.input.match(mailformat)) {
|
|
624
|
-
this.recordId = cQuestion.
|
|
627
|
+
this.recordId = cQuestion.nextQuestion;
|
|
625
628
|
}
|
|
626
629
|
else {
|
|
627
630
|
item.error = new ErrorWrapper();
|
|
628
631
|
hasMissingInput = true;
|
|
629
632
|
}
|
|
630
633
|
}
|
|
631
|
-
if (item.
|
|
634
|
+
if (item.type == "File" && this.attachments.length > 0) {
|
|
632
635
|
for (var attachmentItem of this.attachments) {
|
|
633
636
|
this.inpValue +=
|
|
634
637
|
attachmentItem.attachmentId +
|
|
@@ -636,14 +639,14 @@ export class QuestionnaireComponent {
|
|
|
636
639
|
attachmentItem.attachmentName +
|
|
637
640
|
",";
|
|
638
641
|
if (item.input == this.inpValue) {
|
|
639
|
-
this.recordId = cQuestion.
|
|
642
|
+
this.recordId = cQuestion.nextQuestion;
|
|
640
643
|
//console.log('inside' + recordId);
|
|
641
644
|
}
|
|
642
645
|
}
|
|
643
646
|
// this.attachments = [];
|
|
644
647
|
} //item.input == this.inpValue;
|
|
645
648
|
this.inpValue += (item.input != undefined ? item.input : "") + "@@##$$";
|
|
646
|
-
questionTxt += item.
|
|
649
|
+
questionTxt += item.question + "@@##$$";
|
|
647
650
|
//console.log('inside book1' + this.inpValue)
|
|
648
651
|
}
|
|
649
652
|
if (hasMissingInput) {
|
|
@@ -655,20 +658,20 @@ export class QuestionnaireComponent {
|
|
|
655
658
|
else if (this.listFlag) {
|
|
656
659
|
this.inpValue = '';
|
|
657
660
|
var hasMissingInput = false;
|
|
658
|
-
if (this.localSubQMap.has(this.questionItem.
|
|
661
|
+
if (this.localSubQMap.has(this.questionItem.id)) {
|
|
659
662
|
this.subAnsMap = new Map();
|
|
660
|
-
for (var localQues of this.localSubQMap.get(this.questionItem.
|
|
663
|
+
for (var localQues of this.localSubQMap.get(this.questionItem.id)) {
|
|
661
664
|
if (!localQues.input) {
|
|
662
665
|
localQues.error = new ErrorWrapper();
|
|
663
666
|
hasMissingInput = true;
|
|
664
667
|
}
|
|
665
|
-
if (!this.subAnsMap.has(localQues.
|
|
668
|
+
if (!this.subAnsMap.has(localQues.id)) {
|
|
666
669
|
// console.log('inside ans map')
|
|
667
|
-
this.subAnsMap.set(localQues.
|
|
670
|
+
this.subAnsMap.set(localQues.id, localQues.input);
|
|
668
671
|
}
|
|
669
672
|
else {
|
|
670
673
|
// console.log('inside ans map else')
|
|
671
|
-
this.subAnsMap.set(localQues.
|
|
674
|
+
this.subAnsMap.set(localQues.id, this.subAnsMap.get(localQues.id) + '$$@@##' + localQues.input);
|
|
672
675
|
}
|
|
673
676
|
}
|
|
674
677
|
if (hasMissingInput) {
|
|
@@ -697,7 +700,7 @@ export class QuestionnaireComponent {
|
|
|
697
700
|
this.selectedMinute = this.getProperTime("00", this.selectedMinute);
|
|
698
701
|
this.selectedMeridiem = this.getProperTime("AM", this.selectedMeridiem);
|
|
699
702
|
//console.log(this.inpValue.length);
|
|
700
|
-
if (this.questionItem.
|
|
703
|
+
if (this.questionItem.x24Hours === false) {
|
|
701
704
|
this.questionItem.input =
|
|
702
705
|
(this.selectedMeridiem === "PM" && this.selectedHour != "12"
|
|
703
706
|
? Number(this.selectedHour) + 12
|
|
@@ -707,24 +710,24 @@ export class QuestionnaireComponent {
|
|
|
707
710
|
if (this.selectedMeridiem === "AM" && this.selectedHour === "12") {
|
|
708
711
|
this.questionItem.input = "00" + ":" + this.selectedMinute + " AM";
|
|
709
712
|
}
|
|
710
|
-
if (this.qbItem.
|
|
713
|
+
if (this.qbItem.progressBar) {
|
|
711
714
|
this.inpValue = this.inpValue + " " + this.questionItem.input;
|
|
712
715
|
}
|
|
713
716
|
else {
|
|
714
717
|
this.inpValue = this.inpValue + "T" + this.questionItem.input;
|
|
715
718
|
}
|
|
716
719
|
}
|
|
717
|
-
if (this.questionItem.
|
|
720
|
+
if (this.questionItem.x24Hours === true) {
|
|
718
721
|
this.questionItem.input =
|
|
719
722
|
this.selectedHour + ":" + this.selectedMinute;
|
|
720
|
-
if (this.qbItem.
|
|
723
|
+
if (this.qbItem.progressBar) {
|
|
721
724
|
this.inpValue = this.inpValue + " " + this.questionItem.input;
|
|
722
725
|
}
|
|
723
726
|
else {
|
|
724
727
|
this.inpValue = this.inpValue + "T" + this.questionItem.input;
|
|
725
728
|
}
|
|
726
729
|
}
|
|
727
|
-
if (this.qbItem.
|
|
730
|
+
if (this.qbItem.progressBar) {
|
|
728
731
|
//console.log("ans => " + this.inpValue);
|
|
729
732
|
var date1 = this.inpValue.split(" ");
|
|
730
733
|
date1 = date1[0].split("/");
|
|
@@ -751,7 +754,7 @@ export class QuestionnaireComponent {
|
|
|
751
754
|
}
|
|
752
755
|
else if (this.timeFlag && this.dtFlag && !this.dateFlag) {
|
|
753
756
|
this.date_TimeMap();
|
|
754
|
-
if (this.questionItem.
|
|
757
|
+
if (this.questionItem.x24Hours === false) {
|
|
755
758
|
this.inpValue =
|
|
756
759
|
(this.selectedMeridiem === "PM" && this.selectedHour != "12"
|
|
757
760
|
? Number(this.selectedHour) + 12
|
|
@@ -794,7 +797,7 @@ export class QuestionnaireComponent {
|
|
|
794
797
|
}
|
|
795
798
|
}
|
|
796
799
|
// Check for the answer before saving to the DB
|
|
797
|
-
if (!this.questionItem.
|
|
800
|
+
if (!this.questionItem.isOptional && !this.inpValue) {
|
|
798
801
|
// Show error that the question must be answered
|
|
799
802
|
this.questionItem.error = new ErrorWrapper();
|
|
800
803
|
// VD disabled
|
|
@@ -805,36 +808,36 @@ export class QuestionnaireComponent {
|
|
|
805
808
|
}
|
|
806
809
|
// Save the Answer in the DB
|
|
807
810
|
this.answerWrap = new AnswerWrapper();
|
|
808
|
-
this.answerWrap.abId = this.abItem.
|
|
809
|
-
this.answerWrap.quesId = cQuestion.
|
|
811
|
+
this.answerWrap.abId = this.abItem.id;
|
|
812
|
+
this.answerWrap.quesId = cQuestion.id;
|
|
810
813
|
this.answerWrap.quesValue = quesValue;
|
|
811
814
|
this.answerWrap.qTyp = typ;
|
|
812
815
|
// HA 02FEB24 To display the values in summary using this
|
|
813
816
|
this.allInputValues = [];
|
|
814
817
|
this.subQuestions.forEach(element => {
|
|
815
818
|
var inputValue = {};
|
|
816
|
-
inputValue['Id'] = element?.
|
|
817
|
-
inputValue['
|
|
818
|
-
inputValue['
|
|
819
|
-
inputValue['
|
|
819
|
+
inputValue['Id'] = element?.id;
|
|
820
|
+
inputValue['type'] = element?.type;
|
|
821
|
+
inputValue['referenceField'] = element?.referenceField;
|
|
822
|
+
inputValue['questionText'] = element?.questionText;
|
|
820
823
|
inputValue['input'] = element?.input;
|
|
821
824
|
inputValue ? this.allInputValues.push(inputValue) : this.allInputValues;
|
|
822
825
|
});
|
|
823
826
|
this.answerWrap.myVal = this.allInputValues;
|
|
824
827
|
this.answerWrap.ansValue = this.inpValue;
|
|
825
|
-
this.answerWrap.groupText = cQuestion.
|
|
828
|
+
this.answerWrap.groupText = cQuestion.groupName;
|
|
826
829
|
console.log('this.answerWrap.qTyp', this.answerWrap.qTyp);
|
|
827
830
|
if (this.answerWrap.qTyp == "Alphanumeric") {
|
|
828
831
|
this.answerWrap.ansValue = 'ES' + this.inpValue;
|
|
829
832
|
// console.log('Bank condition');
|
|
830
833
|
// console.log(this.answerWrap.ansValue);
|
|
831
834
|
}
|
|
832
|
-
/*if (cQuestion.
|
|
835
|
+
/*if (cQuestion.type == 'Book'){
|
|
833
836
|
for (var qb of cQuestion.Questions__r.records){
|
|
834
|
-
//console.log(qb.
|
|
837
|
+
//console.log(qb.question+'****'+"@@##$$")
|
|
835
838
|
}
|
|
836
839
|
}*/
|
|
837
|
-
//this.answerWrap.squesValue = cQuestion.
|
|
840
|
+
//this.answerWrap.squesValue = cQuestion.question;
|
|
838
841
|
this.questionItem.input = this.inpValue;
|
|
839
842
|
// emit the current question with input to parent
|
|
840
843
|
let questionAns = {};
|
|
@@ -844,87 +847,88 @@ export class QuestionnaireComponent {
|
|
|
844
847
|
this.handleQuestion.emit(questionAns);
|
|
845
848
|
console.log('questionItem-->');
|
|
846
849
|
console.log(this.questionItem);
|
|
847
|
-
this.answerWrap.squesValue = questionTxt ? questionTxt : cQuestion.
|
|
850
|
+
this.answerWrap.squesValue = questionTxt ? questionTxt : cQuestion.question;
|
|
848
851
|
this.saveAnswer();
|
|
849
852
|
}
|
|
853
|
+
// RS 09DEC24 Changed keys
|
|
850
854
|
next() {
|
|
851
855
|
var cQuestion = new Question();
|
|
852
856
|
cQuestion = this.questionItem;
|
|
853
|
-
var typ = cQuestion.
|
|
857
|
+
var typ = cQuestion.type;
|
|
854
858
|
// If no error then move to next steps
|
|
855
859
|
if (this.questionItem.error) {
|
|
856
860
|
return;
|
|
857
861
|
}
|
|
858
|
-
this.questionStack.push(cQuestion.
|
|
862
|
+
this.questionStack.push(cQuestion.id);
|
|
859
863
|
// this.questionName.push(cQuestion.Name);
|
|
860
864
|
// CONDITIONAL vs OPTIONONLY & UNCONDITIONAL
|
|
861
865
|
// HA 31-JAN-24 Added ternary even in else conditions below
|
|
862
866
|
if (cQuestion?.RecordType?.Name == "CONDITIONAL") {
|
|
863
|
-
for (var cOpt of cQuestion.
|
|
867
|
+
for (var cOpt of cQuestion.options) {
|
|
864
868
|
// Radio / Data
|
|
865
|
-
//console.log('Option => ' + cOpt.
|
|
866
|
-
if (cOpt.
|
|
867
|
-
//console.log('Match Found using ' + cOpt.
|
|
868
|
-
if (cOpt.
|
|
869
|
-
this.recordId = cOpt.
|
|
869
|
+
//console.log('Option => ' + cOpt.value + ' matching with ' + ansVal);
|
|
870
|
+
if (cOpt.value == this.inpValue) {
|
|
871
|
+
//console.log('Match Found using ' + cOpt.nextQuestion);
|
|
872
|
+
if (cOpt.nextQuestion) {
|
|
873
|
+
this.recordId = cOpt.nextQuestion;
|
|
870
874
|
}
|
|
871
875
|
else {
|
|
872
|
-
this.recordId = cQuestion.
|
|
876
|
+
this.recordId = cQuestion.nextQuestion;
|
|
873
877
|
}
|
|
874
878
|
//console.log('conditional record id'+ this.recordId);
|
|
875
879
|
}
|
|
876
880
|
}
|
|
877
881
|
// Could be of type Data and existing value
|
|
878
882
|
if (this.recordId && typ == "Data") {
|
|
879
|
-
this.recordId = cQuestion.
|
|
883
|
+
this.recordId = cQuestion.nextQuestion;
|
|
880
884
|
}
|
|
881
885
|
}
|
|
882
886
|
else if (cQuestion?.RecordType?.Name == "OPTIONONLY") {
|
|
883
887
|
// OPTIONONLY logic
|
|
884
|
-
this.recordId = cQuestion.
|
|
888
|
+
this.recordId = cQuestion.nextQuestion;
|
|
885
889
|
}
|
|
886
890
|
else if (cQuestion?.RecordType?.Name == "UNCONDITIONAL") {
|
|
887
891
|
//Unconditional logic
|
|
888
892
|
//console.log("inside unconditional");
|
|
889
893
|
//inside Book Type
|
|
890
|
-
if (cQuestion.
|
|
894
|
+
if (cQuestion.type == "Book" && cQuestion.questionNumber != '6') {
|
|
891
895
|
//console.log("inside book");
|
|
892
|
-
for (let opt of cQuestion.
|
|
893
|
-
//console.log(opt.
|
|
894
|
-
if (opt.
|
|
895
|
-
for (var opt1 of opt.
|
|
896
|
-
if (this.valueName == opt1.
|
|
897
|
-
this.recordId = opt1.
|
|
896
|
+
for (let opt of cQuestion.subQuestions) {
|
|
897
|
+
//console.log(opt.type);
|
|
898
|
+
if (opt.type == "Dropdown" || opt.type == "Radio") {
|
|
899
|
+
for (var opt1 of opt.options) {
|
|
900
|
+
if (this.valueName == opt1.value) {
|
|
901
|
+
this.recordId = opt1.nextQuestion || cQuestion.nextQuestion;
|
|
898
902
|
}
|
|
899
903
|
else {
|
|
900
904
|
//console.log('Else'+this.recordId)
|
|
901
|
-
this.recordId = cQuestion.
|
|
905
|
+
this.recordId = cQuestion.nextQuestion;
|
|
902
906
|
}
|
|
903
907
|
}
|
|
904
908
|
}
|
|
905
909
|
else {
|
|
906
|
-
this.recordId = cQuestion.
|
|
910
|
+
this.recordId = cQuestion.nextQuestion;
|
|
907
911
|
}
|
|
908
912
|
}
|
|
909
913
|
}
|
|
910
|
-
else if (cQuestion.
|
|
911
|
-
for (let opt of cQuestion.
|
|
912
|
-
if (opt.
|
|
913
|
-
for (var opt1 of opt.
|
|
914
|
-
if (this.valueName == opt1.
|
|
915
|
-
this.recordId = opt1.
|
|
914
|
+
else if (cQuestion.type == "Book" && cQuestion.questionNumber == '6') {
|
|
915
|
+
for (let opt of cQuestion.subQuestions) {
|
|
916
|
+
if (opt.type == "Dropdown" || opt.type == "Radio") {
|
|
917
|
+
for (var opt1 of opt.options) {
|
|
918
|
+
if (this.valueName == opt1.value) {
|
|
919
|
+
this.recordId = opt1.nextQuestion;
|
|
916
920
|
}
|
|
917
921
|
}
|
|
918
922
|
}
|
|
919
923
|
}
|
|
920
924
|
}
|
|
921
925
|
else {
|
|
922
|
-
this.recordId = cQuestion.
|
|
926
|
+
this.recordId = cQuestion.nextQuestion;
|
|
923
927
|
}
|
|
924
928
|
}
|
|
925
929
|
// HA 31-JAN-24 Added else to keep the assignment default
|
|
926
930
|
else {
|
|
927
|
-
this.recordId = cQuestion.
|
|
931
|
+
this.recordId = cQuestion.nextQuestion;
|
|
928
932
|
}
|
|
929
933
|
// CATEGORIZATION
|
|
930
934
|
//this.stepperCateg();
|
|
@@ -960,7 +964,7 @@ export class QuestionnaireComponent {
|
|
|
960
964
|
var newStr = '';
|
|
961
965
|
for (var ansStr of ansWrap.ansValue.split('@@##$$')) {
|
|
962
966
|
for (var ansStr1 of ansStr.split('$$@@##')) {
|
|
963
|
-
// if(ansStr1.includes('answerString')){ //remove the answer string
|
|
967
|
+
// if(ansStr1.includes('answerString')){ //remove the answer string
|
|
964
968
|
// const withoutAnswerString = ansStr1.replace("answerString: ", "");
|
|
965
969
|
// ansStr1 = withoutAnswerString;
|
|
966
970
|
// }
|
|
@@ -969,7 +973,7 @@ export class QuestionnaireComponent {
|
|
|
969
973
|
newStr = ansStr1;
|
|
970
974
|
}
|
|
971
975
|
else {
|
|
972
|
-
newStr += '; ' + ansStr1; //comma(,) changed as semi colon(;) because of address contains comma(,)
|
|
976
|
+
newStr += '; ' + ansStr1; //comma(,) changed as semi colon(;) because of address contains comma(,)
|
|
973
977
|
if (this.attachmentsMap.has(ansWrap.quesId)) {
|
|
974
978
|
for (var att of this.attachmentsMap.get(ansWrap.quesId)) {
|
|
975
979
|
newStr = newStr.replace(att.attachmentId, '');
|
|
@@ -1010,11 +1014,11 @@ export class QuestionnaireComponent {
|
|
|
1010
1014
|
if (this.pop === true) {
|
|
1011
1015
|
this.questionName.pop();
|
|
1012
1016
|
}
|
|
1013
|
-
this.handleEvent.emit(this.qbItem.
|
|
1017
|
+
this.handleEvent.emit(this.qbItem.backTrackingId);
|
|
1014
1018
|
var cQuestion = new Question();
|
|
1015
1019
|
cQuestion = this.questionItem;
|
|
1016
|
-
if (cQuestion.
|
|
1017
|
-
this.handleEvent.emit(this.qbItem.
|
|
1020
|
+
if (cQuestion.questionNumber == '1') {
|
|
1021
|
+
this.handleEvent.emit(this.qbItem.back);
|
|
1018
1022
|
}
|
|
1019
1023
|
this.answerCount--;
|
|
1020
1024
|
this.updateProgress();
|
|
@@ -1036,7 +1040,7 @@ export class QuestionnaireComponent {
|
|
|
1036
1040
|
//console.log(this.questionStack);
|
|
1037
1041
|
}
|
|
1038
1042
|
handleBackClickNew() {
|
|
1039
|
-
this.handleEvent.emit(this.qbItem.
|
|
1043
|
+
this.handleEvent.emit(this.qbItem.edit);
|
|
1040
1044
|
}
|
|
1041
1045
|
//updating status once Q&A completed.
|
|
1042
1046
|
updateAnswerBook = (uuid) => {
|
|
@@ -1060,12 +1064,20 @@ export class QuestionnaireComponent {
|
|
|
1060
1064
|
});
|
|
1061
1065
|
}
|
|
1062
1066
|
else {
|
|
1063
|
-
// VD 15FEB24 - used processNew method
|
|
1067
|
+
// VD 15FEB24 - used processNew method
|
|
1068
|
+
// VD 31NOV24 param changes with new method
|
|
1064
1069
|
let paramMap = { createAnswerBookFlag: false };
|
|
1065
1070
|
paramMap['c__qb_id'] = uuid;
|
|
1066
1071
|
paramMap["c__record_id"] = '';
|
|
1072
|
+
let para = {
|
|
1073
|
+
dataType: "AnswerBook",
|
|
1074
|
+
operation: "Update",
|
|
1075
|
+
param1: uuid,
|
|
1076
|
+
paramJSON: JSON.stringify(paramMap),
|
|
1077
|
+
languageCode: ''
|
|
1078
|
+
};
|
|
1067
1079
|
// VD 12Jun24 - translation changes
|
|
1068
|
-
this.sfService.remoteAction("NxtController.
|
|
1080
|
+
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para)], this.successupdateAB, this.failureupdateAB);
|
|
1069
1081
|
}
|
|
1070
1082
|
};
|
|
1071
1083
|
successupdateAB = (response) => {
|
|
@@ -1073,15 +1085,15 @@ export class QuestionnaireComponent {
|
|
|
1073
1085
|
let data = response;
|
|
1074
1086
|
if (data) {
|
|
1075
1087
|
this.handleSubmit.emit(data);
|
|
1076
|
-
this.abItem.
|
|
1088
|
+
this.abItem.status = "Completed";
|
|
1077
1089
|
this.deleteAnswers(data.AnswerBook);
|
|
1078
1090
|
}
|
|
1079
1091
|
};
|
|
1080
1092
|
// VD for delete answers
|
|
1081
1093
|
deleteAnswers(answerbook) {
|
|
1082
1094
|
if (this.serv == "api") {
|
|
1083
|
-
if (answerbook && answerbook.
|
|
1084
|
-
const ansBookId = answerbook.
|
|
1095
|
+
if (answerbook && answerbook.status == 'Completed') {
|
|
1096
|
+
const ansBookId = answerbook.id;
|
|
1085
1097
|
let paramMap = { createAnswerBookFlag: false };
|
|
1086
1098
|
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1087
1099
|
paramMap['c__qb_id'] = '';
|
|
@@ -1138,13 +1150,21 @@ export class QuestionnaireComponent {
|
|
|
1138
1150
|
// MR 30JAN24 - Passing flag from NGNXT
|
|
1139
1151
|
let paramMap = { createAnswerBookFlag: true };
|
|
1140
1152
|
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1153
|
+
// VD 31NOV24 param changes with new method
|
|
1141
1154
|
paramMap['c__qb_id'] = uuid;
|
|
1142
1155
|
paramMap["c__record_id"] = '';
|
|
1156
|
+
let para1 = {
|
|
1157
|
+
dataType: "QuestionBook",
|
|
1158
|
+
operation: "read",
|
|
1159
|
+
param1: uuid,
|
|
1160
|
+
paramJSON: JSON.stringify(paramMap),
|
|
1161
|
+
languageCode: ''
|
|
1162
|
+
};
|
|
1143
1163
|
// , JSON.stringify(paramMap)
|
|
1144
1164
|
// VD 12Jun24 - translation changes
|
|
1145
1165
|
this.sfService.remoteAction(
|
|
1146
1166
|
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1147
|
-
"NxtController.
|
|
1167
|
+
"NxtController.processData", [JSON.stringify(para1)], this.successReadBook, this.failureReadBook);
|
|
1148
1168
|
}
|
|
1149
1169
|
};
|
|
1150
1170
|
successReadBook = (response) => {
|
|
@@ -1156,45 +1176,45 @@ export class QuestionnaireComponent {
|
|
|
1156
1176
|
this.handleBook.emit(response);
|
|
1157
1177
|
}
|
|
1158
1178
|
// console.log('readingQuestion using ' + this.qbItem);
|
|
1159
|
-
if (this.abItem?.
|
|
1160
|
-
if (this.abItem.
|
|
1161
|
-
this.abItem.
|
|
1162
|
-
this.readQuestion(this.qbItem.
|
|
1179
|
+
if (this.abItem?.status == "Pending") {
|
|
1180
|
+
if (this.abItem.answers == null ||
|
|
1181
|
+
this.abItem.answers.length == 0) {
|
|
1182
|
+
this.readQuestion(this.qbItem.firstQuestion);
|
|
1163
1183
|
}
|
|
1164
1184
|
else {
|
|
1165
1185
|
// Populate the existing answers
|
|
1166
1186
|
var lastQuestionId = "";
|
|
1167
|
-
for (var ansObject of this.abItem.
|
|
1168
|
-
lastQuestionId = ansObject.
|
|
1169
|
-
this.questionStack.push(ansObject.
|
|
1170
|
-
this.answerMap.set(ansObject.
|
|
1171
|
-
quesValue: ansObject.
|
|
1172
|
-
ansValue: ansObject.
|
|
1173
|
-
quesId: ansObject.
|
|
1174
|
-
qTyp: ansObject.
|
|
1175
|
-
groupText: ansObject.
|
|
1187
|
+
for (var ansObject of this.abItem.answers) {
|
|
1188
|
+
lastQuestionId = ansObject.quesId;
|
|
1189
|
+
this.questionStack.push(ansObject.quesId);
|
|
1190
|
+
this.answerMap.set(ansObject.quesId, {
|
|
1191
|
+
quesValue: ansObject.quesValue,
|
|
1192
|
+
ansValue: ansObject.ansValue,
|
|
1193
|
+
quesId: ansObject.quesId,
|
|
1194
|
+
qTyp: ansObject.qTyp,
|
|
1195
|
+
groupText: ansObject.groupText,
|
|
1176
1196
|
});
|
|
1177
1197
|
//console.log(this.questionStack)
|
|
1178
|
-
if (ansObject.
|
|
1179
|
-
var av1 = ansObject.
|
|
1198
|
+
if (ansObject.qTyp == "Book") {
|
|
1199
|
+
var av1 = ansObject.ansValue.split("@@##$$");
|
|
1180
1200
|
// //console.log("book log");
|
|
1181
1201
|
// //console.log("bookid" + av1[0]);
|
|
1182
|
-
this.attachmentsMap.set(ansObject.
|
|
1202
|
+
this.attachmentsMap.set(ansObject.quesId, [
|
|
1183
1203
|
{ attachmentName: av1[1], attachmentId: av1[0] },
|
|
1184
1204
|
]);
|
|
1185
1205
|
// //console.log(this.attachmentsMap);
|
|
1186
1206
|
}
|
|
1187
|
-
else if (ansObject.
|
|
1207
|
+
else if (ansObject.qTyp == "File") {
|
|
1188
1208
|
// //console.log("inside if");
|
|
1189
1209
|
var attList;
|
|
1190
1210
|
var att;
|
|
1191
|
-
for (var attVar of ansObject.
|
|
1211
|
+
for (var attVar of ansObject.ansValue.split(",")) {
|
|
1192
1212
|
var attIdName = attVar.split("@@##$$");
|
|
1193
1213
|
att.attachmentName = attIdName[1];
|
|
1194
1214
|
att.attachmentId = attIdName[0];
|
|
1195
1215
|
attList.push(att);
|
|
1196
1216
|
}
|
|
1197
|
-
this.attachmentsMap.set(ansObject.
|
|
1217
|
+
this.attachmentsMap.set(ansObject.quesId, attList);
|
|
1198
1218
|
// //console.log(this.attachmentsMap);
|
|
1199
1219
|
}
|
|
1200
1220
|
}
|
|
@@ -1204,7 +1224,7 @@ export class QuestionnaireComponent {
|
|
|
1204
1224
|
this.readQuestion(lastQuestionId);
|
|
1205
1225
|
}
|
|
1206
1226
|
}
|
|
1207
|
-
else if (this.abItem?.
|
|
1227
|
+
else if (this.abItem?.status == "Completed") {
|
|
1208
1228
|
this.handleEvent.emit("Summaryupdated");
|
|
1209
1229
|
this.spinner.hide(this.spinnerName);
|
|
1210
1230
|
// Temporary Fix for duplicate answers on the summary.
|
|
@@ -1212,12 +1232,13 @@ export class QuestionnaireComponent {
|
|
|
1212
1232
|
this.percent = 100;
|
|
1213
1233
|
this.progressStyle = "100%";
|
|
1214
1234
|
if (this.serv != 'api') {
|
|
1215
|
-
|
|
1235
|
+
// VD 31NOV24 wrapper changes
|
|
1236
|
+
for (var answer of this.abItem.answers) {
|
|
1216
1237
|
var answers = {};
|
|
1217
|
-
if (answer.
|
|
1238
|
+
if (answer.qTyp == "File") {
|
|
1218
1239
|
var files = "";
|
|
1219
1240
|
var fIndex = 0;
|
|
1220
|
-
var fileList = answer.
|
|
1241
|
+
var fileList = answer.ansValue.split(",");
|
|
1221
1242
|
for (var fileIdName of fileList) {
|
|
1222
1243
|
var fileName = fileIdName.split("@#$");
|
|
1223
1244
|
if (fIndex == 0) {
|
|
@@ -1229,21 +1250,21 @@ export class QuestionnaireComponent {
|
|
|
1229
1250
|
fIndex++;
|
|
1230
1251
|
}
|
|
1231
1252
|
answers = {
|
|
1232
|
-
groupText: answer.
|
|
1233
|
-
quesValue: answer.
|
|
1253
|
+
groupText: answer.groupText,
|
|
1254
|
+
quesValue: answer.quesValue,
|
|
1234
1255
|
ansValue: files,
|
|
1235
1256
|
};
|
|
1236
1257
|
// this.summary.push(answers);
|
|
1237
1258
|
}
|
|
1238
|
-
else if (answer.
|
|
1259
|
+
else if (answer.qTyp == "Book") {
|
|
1239
1260
|
/* var quesNo=0;
|
|
1240
|
-
if(answer.
|
|
1261
|
+
if(answer.ansValue.includes("@@##$$")){
|
|
1241
1262
|
//console.log('line 1223');
|
|
1242
|
-
for (var bqAnswerValue of answer.
|
|
1243
|
-
var quesValue=answer.
|
|
1263
|
+
for (var bqAnswerValue of answer.ansValue.split("@@##$$")) {
|
|
1264
|
+
var quesValue=answer.questionText.split("@@##$$");
|
|
1244
1265
|
answers = {};
|
|
1245
1266
|
answers = {
|
|
1246
|
-
// groupText:answer.
|
|
1267
|
+
// groupText:answer.questionText,
|
|
1247
1268
|
quesValue: "<p>"+ quesValue[quesNo]+"<p>",
|
|
1248
1269
|
ansValue: bqAnswerValue,
|
|
1249
1270
|
};
|
|
@@ -1251,12 +1272,12 @@ export class QuestionnaireComponent {
|
|
|
1251
1272
|
this.summary.push(answers);
|
|
1252
1273
|
}
|
|
1253
1274
|
}*/
|
|
1254
|
-
if (answer.
|
|
1255
|
-
var answervalues = answer.
|
|
1275
|
+
if (answer.ansValue.includes("@@##$$")) {
|
|
1276
|
+
var answervalues = answer.ansValue.split("@@##$$");
|
|
1256
1277
|
//console.log('value')
|
|
1257
1278
|
answers = {
|
|
1258
|
-
//groupText:answer.
|
|
1259
|
-
quesValue: answer.
|
|
1279
|
+
//groupText:answer.groupText,
|
|
1280
|
+
quesValue: answer.quesValue,
|
|
1260
1281
|
ansValue: answervalues,
|
|
1261
1282
|
};
|
|
1262
1283
|
//console.log(answers)
|
|
@@ -1264,19 +1285,19 @@ export class QuestionnaireComponent {
|
|
|
1264
1285
|
}
|
|
1265
1286
|
else {
|
|
1266
1287
|
answers = {
|
|
1267
|
-
//groupText:answer.
|
|
1268
|
-
quesValue: answer.
|
|
1269
|
-
ansValue: answer.
|
|
1288
|
+
//groupText:answer.groupText,
|
|
1289
|
+
quesValue: answer.quesValue,
|
|
1290
|
+
ansValue: answer.ansValue,
|
|
1270
1291
|
};
|
|
1271
1292
|
// this.summary.push(answers);
|
|
1272
1293
|
}
|
|
1273
1294
|
}
|
|
1274
1295
|
else {
|
|
1275
|
-
// var ans1 = answer.
|
|
1296
|
+
// var ans1 = answer.ansValue.split("@@##$$");
|
|
1276
1297
|
answers = {
|
|
1277
|
-
//groupText:answer.
|
|
1278
|
-
quesValue: answer.
|
|
1279
|
-
ansValue: answer.
|
|
1298
|
+
//groupText:answer.groupText,
|
|
1299
|
+
quesValue: answer.quesValue,
|
|
1300
|
+
ansValue: answer.ansValue,
|
|
1280
1301
|
};
|
|
1281
1302
|
// this.summary.push(answers);
|
|
1282
1303
|
}
|
|
@@ -1293,19 +1314,27 @@ export class QuestionnaireComponent {
|
|
|
1293
1314
|
this.dataService.getAPIData(this.tkn, ["AnswerBook", "read", uuid], this.successAnswerBookRead, this.failureAnswerBookRead);
|
|
1294
1315
|
}
|
|
1295
1316
|
else {
|
|
1296
|
-
// VD 15FEB24 - used processNew method
|
|
1317
|
+
// VD 15FEB24 - used processNew method
|
|
1297
1318
|
let paramMap = { createAnswerBookFlag: false };
|
|
1298
1319
|
paramMap['c__qb_id'] = uuid;
|
|
1299
1320
|
paramMap["c__record_id"] = '';
|
|
1321
|
+
// VD 31NOV24 param changes with new method
|
|
1322
|
+
let para2 = {
|
|
1323
|
+
dataType: "AnswerBook",
|
|
1324
|
+
operation: "read",
|
|
1325
|
+
param1: uuid,
|
|
1326
|
+
paramJSON: JSON.stringify(paramMap),
|
|
1327
|
+
languageCode: ''
|
|
1328
|
+
};
|
|
1300
1329
|
// VD 12Jun24 - translation changes
|
|
1301
|
-
this.sfService.remoteAction("NxtController.
|
|
1330
|
+
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para2)], this.successAnswerBookRead, this.failureAnswerBookRead);
|
|
1302
1331
|
}
|
|
1303
1332
|
};
|
|
1304
1333
|
successAnswerBookRead = (response) => {
|
|
1305
|
-
if (this.abItem?.
|
|
1306
|
-
for (var answer of this.abItem.
|
|
1307
|
-
var av = answer.
|
|
1308
|
-
var answers = { quesValue: answer.
|
|
1334
|
+
if (this.abItem?.status == "Completed") {
|
|
1335
|
+
for (var answer of this.abItem.answers) {
|
|
1336
|
+
var av = answer.ansValue.split("@@##$$");
|
|
1337
|
+
var answers = { quesValue: answer.quesValue, ansValue: av, groupText: answer.groupText };
|
|
1309
1338
|
//console.log(answers)
|
|
1310
1339
|
this.summary.push(answers);
|
|
1311
1340
|
}
|
|
@@ -1349,17 +1378,28 @@ export class QuestionnaireComponent {
|
|
|
1349
1378
|
let paramMap = { createAnswerBookFlag: false };
|
|
1350
1379
|
paramMap['c__qb_id'] = uuid;
|
|
1351
1380
|
paramMap["c__record_id"] = '';
|
|
1381
|
+
// VD 31NOV24 param changes with new method
|
|
1382
|
+
let para2 = {
|
|
1383
|
+
dataType: "Question",
|
|
1384
|
+
operation: "read",
|
|
1385
|
+
param1: uuid,
|
|
1386
|
+
paramJSON: JSON.stringify(paramMap),
|
|
1387
|
+
languageCode: ''
|
|
1388
|
+
};
|
|
1352
1389
|
this.sfService.remoteAction(
|
|
1353
1390
|
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1354
|
-
"NxtController.
|
|
1391
|
+
"NxtController.processData", [JSON.stringify(para2)], this.successRead, this.failureRead);
|
|
1355
1392
|
}
|
|
1356
1393
|
};
|
|
1357
1394
|
successRead = (response) => {
|
|
1395
|
+
this.spinner.hide(this.spinnerName);
|
|
1396
|
+
// VD disabled
|
|
1397
|
+
this.isButtonDisabled = false;
|
|
1358
1398
|
console.log('Inside the successRead');
|
|
1359
1399
|
console.log(response);
|
|
1360
1400
|
// HA 02FEB24 For testing for used this and in future it can be used to test with static data
|
|
1361
1401
|
// var ab = ['first','last','123','12-12-2000','22','Male','12 cross 1','EmContact','98765','A','Single'];
|
|
1362
|
-
// for(const [index,item] of response.question.
|
|
1402
|
+
// for(const [index,item] of response.question.subQuestions.entries()){
|
|
1363
1403
|
// item.input = ab[index];
|
|
1364
1404
|
// }
|
|
1365
1405
|
// console.log(this.questionItem);
|
|
@@ -1369,35 +1409,35 @@ export class QuestionnaireComponent {
|
|
|
1369
1409
|
this.answerWrap = new AnswerWrapper();
|
|
1370
1410
|
this.optionValues = [];
|
|
1371
1411
|
this.subQuestions = [];
|
|
1372
|
-
this.resetFlag(this.questionItem.
|
|
1412
|
+
this.resetFlag(this.questionItem.type);
|
|
1373
1413
|
}
|
|
1374
1414
|
this.questionItem = response.question;
|
|
1375
1415
|
// console.log(this.questionItem);
|
|
1376
|
-
if (this.questionItem.
|
|
1416
|
+
if (this.questionItem.type === 'Alphanumeric') {
|
|
1377
1417
|
this.splCCBackClick = true;
|
|
1378
1418
|
}
|
|
1379
|
-
this.currentQuestionId = this.questionItem.
|
|
1380
|
-
this.handlePage.emit(this.questionItem.
|
|
1419
|
+
this.currentQuestionId = this.questionItem.id;
|
|
1420
|
+
this.handlePage.emit(this.questionItem.trackingId);
|
|
1381
1421
|
// Handle the subQuestion options
|
|
1382
1422
|
if (response.sqOptions) {
|
|
1383
1423
|
//var newRecords = [];
|
|
1384
|
-
for (var q of this.questionItem.
|
|
1424
|
+
for (var q of this.questionItem.subQuestions) {
|
|
1385
1425
|
//console.log(q.Name);
|
|
1386
|
-
var sq = response.sqOptions[q.
|
|
1426
|
+
var sq = response.sqOptions[q.id];
|
|
1387
1427
|
if (sq) {
|
|
1388
1428
|
//console.log('found options for subquestion ' + q.Name);
|
|
1389
|
-
if (!q.
|
|
1390
|
-
q.
|
|
1429
|
+
if (!q.options) {
|
|
1430
|
+
q.options = sq.options;
|
|
1391
1431
|
}
|
|
1392
1432
|
}
|
|
1393
1433
|
}
|
|
1394
1434
|
}
|
|
1395
1435
|
this.processQuestion();
|
|
1396
|
-
this.innerhtml = this.sanitizer.bypassSecurityTrustHtml(this.questionItem.
|
|
1436
|
+
this.innerhtml = this.sanitizer.bypassSecurityTrustHtml(this.questionItem.additionalRichContent);
|
|
1397
1437
|
this.trackId();
|
|
1398
1438
|
};
|
|
1399
1439
|
trackId() {
|
|
1400
|
-
var qtrackId = this.questionItem.
|
|
1440
|
+
var qtrackId = this.questionItem.trackingId;
|
|
1401
1441
|
//console.log('trackId-question'+qtrackId);
|
|
1402
1442
|
}
|
|
1403
1443
|
failureRead = (response) => {
|
|
@@ -1430,12 +1470,20 @@ export class QuestionnaireComponent {
|
|
|
1430
1470
|
});
|
|
1431
1471
|
}
|
|
1432
1472
|
else {
|
|
1433
|
-
// VD 15FEB24 - used processNew method
|
|
1473
|
+
// VD 15FEB24 - used processNew method
|
|
1434
1474
|
let paramMap = { createAnswerBookFlag: false };
|
|
1435
1475
|
paramMap['c__qb_id'] = '';
|
|
1436
1476
|
paramMap["c__record_id"] = '';
|
|
1477
|
+
// VD 31NOV24 param changes with new method
|
|
1478
|
+
let para3 = {
|
|
1479
|
+
dataType: "Answer",
|
|
1480
|
+
operation: "create",
|
|
1481
|
+
param1: JSON.stringify(this.answerWrap),
|
|
1482
|
+
paramJSON: JSON.stringify(paramMap),
|
|
1483
|
+
languageCode: ''
|
|
1484
|
+
};
|
|
1437
1485
|
// VD 12Jun24 - translation changes
|
|
1438
|
-
this.sfService.remoteAction("NxtController.
|
|
1486
|
+
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para3)], this.successSave, this.failureSave);
|
|
1439
1487
|
}
|
|
1440
1488
|
};
|
|
1441
1489
|
htmlDecode(input) {
|
|
@@ -1468,7 +1516,7 @@ export class QuestionnaireComponent {
|
|
|
1468
1516
|
// if(!this.back){
|
|
1469
1517
|
// this.questionName.push(this.questionItem.Name)
|
|
1470
1518
|
// }
|
|
1471
|
-
if (this.qbItem.
|
|
1519
|
+
if (this.qbItem.progressBar === true) {
|
|
1472
1520
|
if (!this.back) {
|
|
1473
1521
|
this.questionName.push(this.questionItem.Name);
|
|
1474
1522
|
}
|
|
@@ -1478,23 +1526,23 @@ export class QuestionnaireComponent {
|
|
|
1478
1526
|
}
|
|
1479
1527
|
this.currentName = this.questionItem.Name;
|
|
1480
1528
|
this.pathquestion = this.questionName.indexOf(this.currentName);
|
|
1481
|
-
this.possibilities = this.qbItem.
|
|
1529
|
+
this.possibilities = this.qbItem.possibilities;
|
|
1482
1530
|
}
|
|
1483
1531
|
this.myDatePickerOptions;
|
|
1484
1532
|
this.day();
|
|
1485
1533
|
//console.log('processing question ' + this.questionItem.Name + ' existing answers are ' + this.answerMap.size); // => ' + JSON.stringify(this.questionItem));
|
|
1486
1534
|
// Set the Flags to show right fields
|
|
1487
|
-
this.setFlag(this.questionItem.
|
|
1535
|
+
this.setFlag(this.questionItem.type);
|
|
1488
1536
|
//console.log('After the setFlag method dtFlag = '+this.dtFlag);
|
|
1489
1537
|
// Check the existing answer from answerMap
|
|
1490
|
-
if (this.answerMap.has(this.questionItem.
|
|
1538
|
+
if (this.answerMap.has(this.questionItem.id)) {
|
|
1491
1539
|
// //console.log("existing answer found for this.questionItem.Name");
|
|
1492
|
-
var eAnswer = this.answerMap.get(this.questionItem.
|
|
1540
|
+
var eAnswer = this.answerMap.get(this.questionItem.id);
|
|
1493
1541
|
// Get the existing answer from the Map
|
|
1494
1542
|
this.inpValue = eAnswer.ansValue;
|
|
1495
1543
|
//console.log('inpValue has been set to ' + this.inpValue);
|
|
1496
|
-
if (this.attachmentsMap.has(this.questionItem.
|
|
1497
|
-
this.attachments = this.attachmentsMap.get(this.questionItem.
|
|
1544
|
+
if (this.attachmentsMap.has(this.questionItem.id)) {
|
|
1545
|
+
this.attachments = this.attachmentsMap.get(this.questionItem.id);
|
|
1498
1546
|
}
|
|
1499
1547
|
}
|
|
1500
1548
|
else {
|
|
@@ -1509,24 +1557,24 @@ export class QuestionnaireComponent {
|
|
|
1509
1557
|
}
|
|
1510
1558
|
if (this.checkboxFlag) {
|
|
1511
1559
|
// Set the Options for Checkbox
|
|
1512
|
-
this.setOptions(this.questionItem.
|
|
1560
|
+
this.setOptions(this.questionItem.options);
|
|
1513
1561
|
}
|
|
1514
1562
|
else if (this.bookFlag) {
|
|
1515
1563
|
//console.log('Inise the expected bookFlag cond');
|
|
1516
1564
|
//console.log('dtFlag = '+this.dtFlag);
|
|
1517
1565
|
// HA 20FEB24 Label Fix
|
|
1518
|
-
this.questionItem.
|
|
1519
|
-
element.
|
|
1566
|
+
this.questionItem.subQuestions.forEach(element => {
|
|
1567
|
+
element.questionText = element.questionText.replace(/<[^>]+>/g, '');
|
|
1520
1568
|
});
|
|
1521
|
-
this.setSubQuestions(this.questionItem.
|
|
1569
|
+
this.setSubQuestions(this.questionItem.subQuestions);
|
|
1522
1570
|
}
|
|
1523
1571
|
else if (this.listFlag) {
|
|
1524
1572
|
// Set the LocalSubQuestions
|
|
1525
1573
|
// console.log('inside list flag');
|
|
1526
1574
|
// console.log(this.questionItem.Questions__r.records);
|
|
1527
1575
|
// console.log(this.abItem.Questions__r.records);
|
|
1528
|
-
if (!this.localSubQMap.has(this.questionItem.
|
|
1529
|
-
this.setSubQuestions(this.questionItem.
|
|
1576
|
+
if (!this.localSubQMap.has(this.questionItem.id)) {
|
|
1577
|
+
this.setSubQuestions(this.questionItem.subQuestions);
|
|
1530
1578
|
}
|
|
1531
1579
|
}
|
|
1532
1580
|
else if (this.dtFlag) {
|
|
@@ -1535,19 +1583,19 @@ export class QuestionnaireComponent {
|
|
|
1535
1583
|
this.selectedMinute = "";
|
|
1536
1584
|
this.selDate = "";
|
|
1537
1585
|
// 2021-5-16T00:00
|
|
1538
|
-
if (this.dateMap.has(this.questionItem.
|
|
1539
|
-
this.selDate = this.dateMap.get(this.questionItem.
|
|
1586
|
+
if (this.dateMap.has(this.questionItem.id)) {
|
|
1587
|
+
this.selDate = this.dateMap.get(this.questionItem.id);
|
|
1540
1588
|
}
|
|
1541
|
-
if (this.selectedhourMap.has(this.questionItem.
|
|
1542
|
-
this.selectedHour = this.selectedhourMap.get(this.questionItem.
|
|
1589
|
+
if (this.selectedhourMap.has(this.questionItem.id)) {
|
|
1590
|
+
this.selectedHour = this.selectedhourMap.get(this.questionItem.id);
|
|
1543
1591
|
}
|
|
1544
|
-
if (this.selectedminuteMap.has(this.questionItem.
|
|
1545
|
-
this.selectedMinute = this.selectedminuteMap.get(this.questionItem.
|
|
1592
|
+
if (this.selectedminuteMap.has(this.questionItem.id)) {
|
|
1593
|
+
this.selectedMinute = this.selectedminuteMap.get(this.questionItem.id);
|
|
1546
1594
|
}
|
|
1547
|
-
if (this.questionItem.
|
|
1595
|
+
if (this.questionItem.x24Hours === true) {
|
|
1548
1596
|
this.hours.push("13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "00");
|
|
1549
1597
|
}
|
|
1550
|
-
if (this.questionItem.
|
|
1598
|
+
if (this.questionItem.x24Hours === false) {
|
|
1551
1599
|
this.hours = this.hours.slice(0, 12);
|
|
1552
1600
|
}
|
|
1553
1601
|
if (this.dtFlag && this.inpValue) {
|
|
@@ -1558,16 +1606,16 @@ export class QuestionnaireComponent {
|
|
|
1558
1606
|
this.questionItem.input = dtVal[1];
|
|
1559
1607
|
this.questionItem.input = dtval0[1];
|
|
1560
1608
|
}
|
|
1561
|
-
if (this.questionItem.
|
|
1562
|
-
this.questionItem.
|
|
1563
|
-
if (this.questionItem.
|
|
1609
|
+
if (this.questionItem.isDateBackward ||
|
|
1610
|
+
this.questionItem.isDateForward) {
|
|
1611
|
+
if (this.questionItem.isDateBackward === true) {
|
|
1564
1612
|
this.myDatePickerOptions.disableSince = {
|
|
1565
1613
|
year: this.today.getFullYear(),
|
|
1566
1614
|
month: this.today.getMonth() + 1,
|
|
1567
1615
|
day: this.today.getDate() + 1,
|
|
1568
1616
|
};
|
|
1569
1617
|
}
|
|
1570
|
-
if (this.questionItem.
|
|
1618
|
+
if (this.questionItem.isDateForward === true) {
|
|
1571
1619
|
this.myDatePickerOptions.disableUntil = {
|
|
1572
1620
|
year: this.today.getFullYear(),
|
|
1573
1621
|
month: this.today.getMonth() + 1,
|
|
@@ -1580,10 +1628,10 @@ export class QuestionnaireComponent {
|
|
|
1580
1628
|
this.fileUI();
|
|
1581
1629
|
// logic
|
|
1582
1630
|
this.allowedFileExtension =
|
|
1583
|
-
this.questionItem.
|
|
1631
|
+
this.questionItem.allowedFileExtensions?.split(";");
|
|
1584
1632
|
//console.log(this.allowedFileExtension);
|
|
1585
1633
|
}
|
|
1586
|
-
if (this.qbItem.
|
|
1634
|
+
if (this.qbItem.progressBar === true) {
|
|
1587
1635
|
this.updateProgress();
|
|
1588
1636
|
}
|
|
1589
1637
|
};
|
|
@@ -1702,13 +1750,13 @@ export class QuestionnaireComponent {
|
|
|
1702
1750
|
setOptions(records) {
|
|
1703
1751
|
for (var opt of records) {
|
|
1704
1752
|
var ov = new OptionValue();
|
|
1705
|
-
ov.
|
|
1753
|
+
ov.id = opt.id;
|
|
1706
1754
|
ov.Name = opt.Name;
|
|
1707
|
-
ov.
|
|
1708
|
-
ov.
|
|
1755
|
+
ov.value = opt.value;
|
|
1756
|
+
ov.nextQuestion = opt.nextQuestion;
|
|
1709
1757
|
ov.checked = false;
|
|
1710
1758
|
if (this.inpValue &&
|
|
1711
|
-
this.inpValue.split("@@##$$").includes(opt.
|
|
1759
|
+
this.inpValue.split("@@##$$").includes(opt.value)) {
|
|
1712
1760
|
ov.checked = true;
|
|
1713
1761
|
}
|
|
1714
1762
|
this.optionValues.push(ov);
|
|
@@ -1730,7 +1778,7 @@ export class QuestionnaireComponent {
|
|
|
1730
1778
|
// console.log(this.inpValue);
|
|
1731
1779
|
if (this.inpValue) {
|
|
1732
1780
|
var aIndex = 0;
|
|
1733
|
-
// search changed as semi colon because of address contains comma
|
|
1781
|
+
// search changed as semi colon because of address contains comma
|
|
1734
1782
|
if ((this.inpValue.search("; ") == -1)) {
|
|
1735
1783
|
// const withoutAnswerString = this.inpValue.replace("answerString: ", ""); //remove the answer string
|
|
1736
1784
|
// this.inpValue = withoutAnswerString;
|
|
@@ -1752,13 +1800,13 @@ export class QuestionnaireComponent {
|
|
|
1752
1800
|
// console.log('after setting values from inpvalue qa map are');
|
|
1753
1801
|
// console.log(qaMap);
|
|
1754
1802
|
for (var ques of records) {
|
|
1755
|
-
if (ques.
|
|
1756
|
-
this.valueName1 = ques.
|
|
1803
|
+
if (ques.type == "File") {
|
|
1804
|
+
this.valueName1 = ques.allowedFileExtensions;
|
|
1757
1805
|
//console.log(this.valueName1);
|
|
1758
1806
|
}
|
|
1759
1807
|
var ans = '';
|
|
1760
|
-
if (qaMap.has(ques.
|
|
1761
|
-
ques.input = qaMap.get(ques.
|
|
1808
|
+
if (qaMap.has(ques.questionNumber)) {
|
|
1809
|
+
ques.input = qaMap.get(ques.questionNumber);
|
|
1762
1810
|
// console.log('after fetching map values');
|
|
1763
1811
|
// console.log(ques.input);
|
|
1764
1812
|
if (ques.input.indexOf('$$@@##') > 0) {
|
|
@@ -1770,18 +1818,18 @@ export class QuestionnaireComponent {
|
|
|
1770
1818
|
// console.log(ques.input);
|
|
1771
1819
|
}
|
|
1772
1820
|
}
|
|
1773
|
-
if ((ques.
|
|
1821
|
+
if ((ques.type === "Date") && (ques.isDateBackward || ques.isDateForward)) {
|
|
1774
1822
|
//console.log('Inside the date backward/forward cond');
|
|
1775
|
-
if (ques.
|
|
1776
|
-
//console.log('Inside the
|
|
1823
|
+
if (ques.isDateBackward === true) {
|
|
1824
|
+
//console.log('Inside the isDateBackward');
|
|
1777
1825
|
this.myDatePickerOptions.disableSince = {
|
|
1778
1826
|
year: this.today.getFullYear(),
|
|
1779
1827
|
month: this.today.getMonth() + 1,
|
|
1780
1828
|
day: this.today.getDate() + 1,
|
|
1781
1829
|
};
|
|
1782
1830
|
}
|
|
1783
|
-
if (ques.
|
|
1784
|
-
//console.log('Inside the
|
|
1831
|
+
if (ques.isDateForward === true) {
|
|
1832
|
+
//console.log('Inside the isDateForward');
|
|
1785
1833
|
this.myDatePickerOptions.disableUntil = {
|
|
1786
1834
|
year: this.today.getFullYear(),
|
|
1787
1835
|
month: this.today.getMonth() + 1,
|
|
@@ -1793,7 +1841,7 @@ export class QuestionnaireComponent {
|
|
|
1793
1841
|
this.subQuestions.push(ques);
|
|
1794
1842
|
for (var i = 0; i < this.subQuestions.length; i++) {
|
|
1795
1843
|
// to show/hide the dependent dropdown only field using the dropDownOnly boolean
|
|
1796
|
-
if (this.subQuestions[i].
|
|
1844
|
+
if (this.subQuestions[i].size == 4) {
|
|
1797
1845
|
this.subQuestions[i].dropDownOnly = true;
|
|
1798
1846
|
}
|
|
1799
1847
|
else {
|
|
@@ -1818,7 +1866,7 @@ export class QuestionnaireComponent {
|
|
|
1818
1866
|
if (this.allInputValues.length > 0) {
|
|
1819
1867
|
this.subQuestions.forEach(element => {
|
|
1820
1868
|
for (let singleInput of this.allInputValues) {
|
|
1821
|
-
if (element.
|
|
1869
|
+
if (element.id == singleInput.id) {
|
|
1822
1870
|
element.input = singleInput.input;
|
|
1823
1871
|
}
|
|
1824
1872
|
}
|
|
@@ -1827,11 +1875,11 @@ export class QuestionnaireComponent {
|
|
|
1827
1875
|
}
|
|
1828
1876
|
optionChange(selValue) {
|
|
1829
1877
|
let radioTrackingId = "";
|
|
1830
|
-
for (var opt of this.questionItem.
|
|
1831
|
-
//console.log('optionChange TrackingId'+opt.
|
|
1832
|
-
if (opt.
|
|
1833
|
-
//console.log('inside if'+opt.
|
|
1834
|
-
radioTrackingId = opt.
|
|
1878
|
+
for (var opt of this.questionItem.options) {
|
|
1879
|
+
//console.log('optionChange TrackingId'+opt.trackingId);
|
|
1880
|
+
if (opt.value == selValue) {
|
|
1881
|
+
//console.log('inside if'+opt.trackingId)
|
|
1882
|
+
radioTrackingId = opt.trackingId;
|
|
1835
1883
|
}
|
|
1836
1884
|
}
|
|
1837
1885
|
this.handleEvent.emit(radioTrackingId);
|
|
@@ -1900,7 +1948,7 @@ export class QuestionnaireComponent {
|
|
|
1900
1948
|
return isNotValidStr;
|
|
1901
1949
|
}
|
|
1902
1950
|
clearSQError(quesId) {
|
|
1903
|
-
var sqList = this.subQuestions.filter((item) => item.
|
|
1951
|
+
var sqList = this.subQuestions.filter((item) => item.id == quesId);
|
|
1904
1952
|
for (var sq of sqList) {
|
|
1905
1953
|
sq.error = null;
|
|
1906
1954
|
}
|
|
@@ -1940,7 +1988,7 @@ export class QuestionnaireComponent {
|
|
|
1940
1988
|
// Upload the file to Salesforce when the limit is within range
|
|
1941
1989
|
if (!local.fileExceededLimit) {
|
|
1942
1990
|
let fileWrapper = new AttachmentWrapper();
|
|
1943
|
-
fileWrapper.parentId = local.abItem.
|
|
1991
|
+
fileWrapper.parentId = local.abItem.id;
|
|
1944
1992
|
fileWrapper.fileName = local.attachment.name;
|
|
1945
1993
|
fileWrapper.fileContent = fileContent;
|
|
1946
1994
|
local.createAttachment(fileWrapper);
|
|
@@ -1953,7 +2001,7 @@ export class QuestionnaireComponent {
|
|
|
1953
2001
|
successAttachmentCreate = (response) => {
|
|
1954
2002
|
let createdAttachment = new Attachment(response.attachmentId, response.attachmentName, this.attachment.lastModifiedDate);
|
|
1955
2003
|
this.attachments.push(createdAttachment);
|
|
1956
|
-
this.attachmentsMap.set(this.questionItem.
|
|
2004
|
+
this.attachmentsMap.set(this.questionItem.id, this.attachments);
|
|
1957
2005
|
this.spinner.hide(this.spinnerName);
|
|
1958
2006
|
};
|
|
1959
2007
|
successAttachmentDelete = (response) => {
|
|
@@ -1970,11 +2018,11 @@ export class QuestionnaireComponent {
|
|
|
1970
2018
|
//console.log('inside failureAttachmentDelete');
|
|
1971
2019
|
};
|
|
1972
2020
|
handleSubmitClick() {
|
|
1973
|
-
this.handleEvent.emit(this.qbItem.
|
|
1974
|
-
this.updateAnswerBook(this.abItem.
|
|
2021
|
+
this.handleEvent.emit(this.qbItem.submitTrackingId);
|
|
2022
|
+
this.updateAnswerBook(this.abItem.id);
|
|
1975
2023
|
}
|
|
1976
2024
|
handleCancelClick() {
|
|
1977
|
-
this.handleEvent.emit(this.qbItem.
|
|
2025
|
+
this.handleEvent.emit(this.qbItem.cancelTrackingId);
|
|
1978
2026
|
}
|
|
1979
2027
|
createAttachment = (fileWrapper) => {
|
|
1980
2028
|
if (this.serv == "api") {
|
|
@@ -1997,12 +2045,20 @@ export class QuestionnaireComponent {
|
|
|
1997
2045
|
});
|
|
1998
2046
|
}
|
|
1999
2047
|
else {
|
|
2000
|
-
// VD 15FEB24 - used processNew method
|
|
2048
|
+
// VD 15FEB24 - used processNew method
|
|
2001
2049
|
let paramMap = { createAnswerBookFlag: false };
|
|
2002
2050
|
paramMap['c__qb_id'] = '';
|
|
2003
2051
|
paramMap["c__record_id"] = '';
|
|
2004
2052
|
// VD 12Jun24 - translation changes
|
|
2005
|
-
|
|
2053
|
+
// VD 31NOV24 param changes with new method
|
|
2054
|
+
let para3 = {
|
|
2055
|
+
dataType: "Attachment",
|
|
2056
|
+
operation: "create",
|
|
2057
|
+
param1: JSON.stringify(fileWrapper),
|
|
2058
|
+
paramJSON: JSON.stringify(paramMap),
|
|
2059
|
+
languageCode: ''
|
|
2060
|
+
};
|
|
2061
|
+
this.sfService.remoteAction("NxtController.processData", [JSON.stringify(para3)], this.successAttachmentCreate, this.failureAttachmentCreate);
|
|
2006
2062
|
}
|
|
2007
2063
|
};
|
|
2008
2064
|
deleteAttachment(attachmentId) {
|
|
@@ -2031,11 +2087,19 @@ export class QuestionnaireComponent {
|
|
|
2031
2087
|
});
|
|
2032
2088
|
}
|
|
2033
2089
|
else {
|
|
2034
|
-
// VD 15FEB24 - used processNew method
|
|
2090
|
+
// VD 15FEB24 - used processNew method
|
|
2035
2091
|
let paramMap = { createAnswerBookFlag: false };
|
|
2036
2092
|
paramMap['c__qb_id'] = '';
|
|
2037
2093
|
paramMap["c__record_id"] = '';
|
|
2038
|
-
|
|
2094
|
+
// VD 31NOV24 param changes with new method
|
|
2095
|
+
let para4 = {
|
|
2096
|
+
dataType: "Attachment",
|
|
2097
|
+
operation: "delete",
|
|
2098
|
+
param1: fileId,
|
|
2099
|
+
paramJSON: JSON.stringify(paramMap),
|
|
2100
|
+
languageCode: ''
|
|
2101
|
+
};
|
|
2102
|
+
this.sfService.remoteAction("NxtController.processData", [fileId, JSON.stringify(para4)], this.successAttachmentDelete, this.failureAttachmentDelete);
|
|
2039
2103
|
}
|
|
2040
2104
|
};
|
|
2041
2105
|
getFileName(fileNamewithIdandType) {
|
|
@@ -2058,7 +2122,7 @@ export class QuestionnaireComponent {
|
|
|
2058
2122
|
// }
|
|
2059
2123
|
// Update Function for the Progress Bar
|
|
2060
2124
|
updateProgress() {
|
|
2061
|
-
if (this.qbItem.
|
|
2125
|
+
if (this.qbItem.progressBar === true) {
|
|
2062
2126
|
let j = [];
|
|
2063
2127
|
for (let i = 0; i < this.possibilities.total; i++) {
|
|
2064
2128
|
var pathposs = Object.values(this.possibilities.paths[i].questions);
|
|
@@ -2174,62 +2238,62 @@ export class QuestionnaireComponent {
|
|
|
2174
2238
|
// console.log('inside structLocalSubQuestion');
|
|
2175
2239
|
for (var i = 0; i < this.subQuestions.length; i++) {
|
|
2176
2240
|
var localSubQuestion = new LocalQuestion();
|
|
2177
|
-
localSubQuestion.
|
|
2241
|
+
localSubQuestion.id = this.subQuestions[i].id;
|
|
2178
2242
|
localSubQuestion.Name = this.subQuestions[i].Name;
|
|
2179
|
-
localSubQuestion.
|
|
2180
|
-
localSubQuestion.
|
|
2181
|
-
localSubQuestion.
|
|
2182
|
-
localSubQuestion.
|
|
2183
|
-
localSubQuestion.
|
|
2184
|
-
localSubQuestion.
|
|
2185
|
-
localSubQuestion.
|
|
2186
|
-
localSubQuestion.
|
|
2187
|
-
localSubQuestion.
|
|
2188
|
-
localSubQuestion.
|
|
2189
|
-
localSubQuestion.
|
|
2190
|
-
localSubQuestion.uniqueSubQId = '' + this.subQuestions[i].
|
|
2243
|
+
localSubQuestion.question = this.subQuestions[i].question;
|
|
2244
|
+
localSubQuestion.questionText = this.subQuestions[i].questionText;
|
|
2245
|
+
localSubQuestion.type = this.subQuestions[i].type;
|
|
2246
|
+
localSubQuestion.title = this.subQuestions[i].title;
|
|
2247
|
+
localSubQuestion.subTitle = this.subQuestions[i].subTitle;
|
|
2248
|
+
localSubQuestion.isOptional = this.subQuestions[i].isOptional;
|
|
2249
|
+
localSubQuestion.errorMessage = this.subQuestions[i].errorMessage;
|
|
2250
|
+
localSubQuestion.nextQuestion = this.subQuestions[i].nextQuestion;
|
|
2251
|
+
localSubQuestion.groupName = this.subQuestions[i].groupName;
|
|
2252
|
+
localSubQuestion.questionNumber = this.subQuestions[i].questionNumber;
|
|
2253
|
+
localSubQuestion.allowedFileExtensions = this.subQuestions[i].allowedFileExtensions;
|
|
2254
|
+
localSubQuestion.uniqueSubQId = '' + this.subQuestions[i].id + i;
|
|
2191
2255
|
localSubQuestion.input = this.subQuestions[i].input;
|
|
2192
2256
|
this.localSubQuestions.push(localSubQuestion);
|
|
2193
2257
|
}
|
|
2194
2258
|
// console.log('final local sub questions');
|
|
2195
2259
|
// console.log(this.localSubQuestions);
|
|
2196
|
-
// console.log(this.questionItem.
|
|
2197
|
-
this.localSubQMap.set(this.questionItem.
|
|
2260
|
+
// console.log(this.questionItem.id);
|
|
2261
|
+
this.localSubQMap.set(this.questionItem.id, this.localSubQuestions);
|
|
2198
2262
|
this.localSubQuestions = [];
|
|
2199
2263
|
// console.log('final key localSubQMap map');
|
|
2200
2264
|
// console.log(this.localSubQMap);
|
|
2201
2265
|
}
|
|
2202
2266
|
addInputBox(question, index) {
|
|
2203
|
-
var arra = this.localSubQMap.get(this.questionItem.
|
|
2267
|
+
var arra = this.localSubQMap.get(this.questionItem.id);
|
|
2204
2268
|
var qIndex = arra.indexOf(question);
|
|
2205
2269
|
var ques = new LocalQuestion();
|
|
2206
2270
|
Object.assign(ques, question);
|
|
2207
2271
|
//console.log((ques.uniqueSubQId).substring(18, (ques.uniqueSubQId).length)+1);
|
|
2208
2272
|
if (this.keyIndex == index) {
|
|
2209
|
-
ques.uniqueSubQId = ques.
|
|
2273
|
+
ques.uniqueSubQId = ques.id + (String(index + 1));
|
|
2210
2274
|
this.keyIndex++;
|
|
2211
2275
|
}
|
|
2212
2276
|
else {
|
|
2213
2277
|
this.keyIndex++;
|
|
2214
|
-
ques.uniqueSubQId = ques.
|
|
2278
|
+
ques.uniqueSubQId = ques.id + (String(this.keyIndex));
|
|
2215
2279
|
}
|
|
2216
2280
|
ques.input = '';
|
|
2217
2281
|
arra.splice(qIndex + 1, 0, ques);
|
|
2218
|
-
this.localSubQMap.set(this.questionItem.
|
|
2282
|
+
this.localSubQMap.set(this.questionItem.id, arra);
|
|
2219
2283
|
//console.log(this.localSubQMap);
|
|
2220
2284
|
}
|
|
2221
2285
|
removeAddress(quesUniqueId, qName) {
|
|
2222
2286
|
//console.log(quesUniqueId)
|
|
2223
|
-
var val = this.localSubQMap.get(this.questionItem.
|
|
2287
|
+
var val = this.localSubQMap.get(this.questionItem.id);
|
|
2224
2288
|
var keyindex = 0;
|
|
2225
2289
|
for (let i = 0; i < val.length; i++) {
|
|
2226
2290
|
if (val[i].Name == qName) {
|
|
2227
2291
|
keyindex++;
|
|
2228
2292
|
}
|
|
2229
2293
|
}
|
|
2230
|
-
if (this.localSubQMap.has(this.questionItem.
|
|
2294
|
+
if (this.localSubQMap.has(this.questionItem.id) && keyindex > 1) {
|
|
2231
2295
|
var reorder = val.filter((item) => item.uniqueSubQId !== quesUniqueId);
|
|
2232
|
-
this.localSubQMap.set(this.questionItem.
|
|
2296
|
+
this.localSubQMap.set(this.questionItem.id, reorder);
|
|
2233
2297
|
keyindex--;
|
|
2234
2298
|
}
|
|
2235
2299
|
}
|
|
@@ -2239,18 +2303,18 @@ export class QuestionnaireComponent {
|
|
|
2239
2303
|
//Single Add button functionality for List type
|
|
2240
2304
|
Add(question) {
|
|
2241
2305
|
this.addFlag = false;
|
|
2242
|
-
var arra = this.localSubQMap.get(this.questionItem.
|
|
2306
|
+
var arra = this.localSubQMap.get(this.questionItem.id);
|
|
2243
2307
|
var index = arra.length;
|
|
2244
2308
|
var a = arra.slice(-1).pop();
|
|
2245
|
-
this.indexCount = a.
|
|
2309
|
+
this.indexCount = a.questionNumber;
|
|
2246
2310
|
for (var i = 0; i < this.indexCount; i++) {
|
|
2247
2311
|
var ques = new LocalQuestion();
|
|
2248
2312
|
Object.assign(ques, question[i]);
|
|
2249
2313
|
this.keyIndex++;
|
|
2250
|
-
ques.uniqueSubQId = ques.
|
|
2314
|
+
ques.uniqueSubQId = ques.id + (String(this.keyIndex));
|
|
2251
2315
|
ques.input = '';
|
|
2252
2316
|
arra.splice(index + (this.indexCount - 1), 0, ques);
|
|
2253
|
-
this.localSubQMap.set(this.questionItem.
|
|
2317
|
+
this.localSubQMap.set(this.questionItem.id, arra);
|
|
2254
2318
|
}
|
|
2255
2319
|
this.addFlag = true;
|
|
2256
2320
|
}
|
|
@@ -2279,12 +2343,12 @@ export class QuestionnaireComponent {
|
|
|
2279
2343
|
getValue(item) {
|
|
2280
2344
|
return Object.values(item)[0];
|
|
2281
2345
|
}
|
|
2282
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.
|
|
2283
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionnaireComponent, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion", handleBook: "handleBook", handleSubmit: "handleSubmit" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\n<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<!-- <app-loader></app-loader> -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.Title__c\">\n <h1>{{ questionItem?.Title__c }}</h1>\n <div>{{ questionItem?.SubTitle__c }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.Group__c }}\n </h3>\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\n </div>\n </div>\n </div>\n\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.Question_Text__c\" style=\"display: flex;\">\n <span>{{questionItem?.Question_No__c}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.Is_Title__c\">\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\n {{ questionItem?.Question_Text__c }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'Book'\">\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{ questionItem?.Question_Text__c }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'File' \">\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\n 'custom-select': !qbItem?.Progress_Bar__c\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\n {{ opt.Value__c }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.Error_Message__c }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.Value__c\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.Value__c\"\n (change)=\"optionChange(opt.Value__c)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.Value__c\"> {{ opt.Value__c }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.Value__c\"\n (change)=\"optionChange(opt.Value__c)\" />\n {{ opt.Value__c }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.Value__c }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.Type__c === 'File' &&\n !qbItem?.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.Progress_Bar__c\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel__c ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span>{{ ques?.Question_Text__c }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <!-- VD to show lable-->\n <div *ngIf=\"ques.Type__c === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.Title__c\" [labelValue]=\"ques.Question__c\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <label>{{ ques.Question_Text__c }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.Tracking_ID__c\"\n [focusEvent]=\"clearSQError(ques?.Id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.Question__c\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <div *ngIf=\"ques.Type__c === 'File'\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.Type__c === 'File' &&\n !qbItem.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\n [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.Error_Message__c\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.Back__c\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.Back__c }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.Next__c\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.Next__c }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.Status__c === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.Summary_Text__c}}</h2>\n <p>{{this.qbItem.Summary_Sub_Text__c}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.Progress_Bar__c\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\n <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.Question_No__c }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.Question_Text__c }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.Question_Text__c }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.Progress_Bar__c }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <h3 class=\"summary-h\">\n {{ qbItem.Summary_Text__c }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed' && qbItem.Cancel__c\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.Cancel__c }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.Submit__c\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.Submit__c }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.Edit__c\">\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.Edit__c }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#F8F8F8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.MyDatePicker, selector: "my-date-picker", inputs: ["placeholder", "locale", "disabled", "options", "defaultMonth", "selDate", "selector"], outputs: ["dateChanged", "inputFieldChanged", "calendarViewChanged", "calendarToggle", "inputFocusBlur"], exportAs: ["mydatepicker"] }, { kind: "component", type: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["disableAnimation", "bdColor", "zIndex", "color", "type", "size", "fullScreen", "name", "template", "showSpinner"] }, { kind: "component", type: i13.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "component", type: i14.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i15.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i16.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i17.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i18.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i19.DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: i20.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "pipe", type: i22.I18nPipe, name: "i18n" }], encapsulation: i0.ViewEncapsulation.None });
|
|
2346
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QuestionnaireComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.SharedService }, { token: i5.ActivatedRoute }, { token: i6.DomSanitizer }, { token: i7.NgxSpinnerService }, { token: i8.UntypedFormBuilder }, { token: i9.DeviceDetectorService }, { token: i0.ElementRef }, { token: i10.I18nService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2347
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: QuestionnaireComponent, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion", handleBook: "handleBook", handleSubmit: "handleSubmit" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\n<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<!-- <app-loader></app-loader> -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.progressBar }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.progressBar\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n 'custom-select': !qbItem?.progressBar\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.errorMessage }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.progressBar\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.type === 'File' &&\n !qbItem?.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.progressBar\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span>{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <!-- VD to show lable-->\n <div *ngIf=\"ques.type === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <label>{{ ques.questionText }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.trackingId\"\n [focusEvent]=\"clearSQError(ques?.id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.question\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.type === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.type === 'File' &&\n !qbItem.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.question }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.next\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.questionText }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#f8f8f8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.MyDatePicker, selector: "my-date-picker", inputs: ["placeholder", "locale", "disabled", "options", "defaultMonth", "selDate", "selector"], outputs: ["dateChanged", "inputFieldChanged", "calendarViewChanged", "calendarToggle", "inputFocusBlur"], exportAs: ["mydatepicker"] }, { kind: "component", type: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["disableAnimation", "bdColor", "zIndex", "color", "type", "size", "fullScreen", "name", "template", "showSpinner"] }, { kind: "component", type: i13.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "component", type: i14.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i15.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i16.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i17.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i18.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i19.DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: i20.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "pipe", type: i22.I18nPipe, name: "i18n" }], encapsulation: i0.ViewEncapsulation.None });
|
|
2284
2348
|
}
|
|
2285
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.
|
|
2349
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: QuestionnaireComponent, decorators: [{
|
|
2286
2350
|
type: Component,
|
|
2287
|
-
args: [{ selector: "lib-questionnaire", encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\n<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<!-- <app-loader></app-loader> -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.Title__c\">\n <h1>{{ questionItem?.Title__c }}</h1>\n <div>{{ questionItem?.SubTitle__c }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.Group__c }}\n </h3>\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\n </div>\n </div>\n </div>\n\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.Question_Text__c\" style=\"display: flex;\">\n <span>{{questionItem?.Question_No__c}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.Is_Title__c\">\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\n {{ questionItem?.Question_Text__c }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'Book'\">\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{ questionItem?.Question_Text__c }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'File' \">\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\n 'custom-select': !qbItem?.Progress_Bar__c\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\n {{ opt.Value__c }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.Error_Message__c }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.Value__c\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.Value__c\"\n (change)=\"optionChange(opt.Value__c)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.Value__c\"> {{ opt.Value__c }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.Value__c\"\n (change)=\"optionChange(opt.Value__c)\" />\n {{ opt.Value__c }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.Value__c }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.Type__c === 'File' &&\n !qbItem?.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.Progress_Bar__c\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel__c ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span>{{ ques?.Question_Text__c }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <!-- VD to show lable-->\n <div *ngIf=\"ques.Type__c === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.Title__c\" [labelValue]=\"ques.Question__c\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <label>{{ ques.Question_Text__c }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.Tracking_ID__c\"\n [focusEvent]=\"clearSQError(ques?.Id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.Question__c\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <div *ngIf=\"ques.Type__c === 'File'\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.Type__c === 'File' &&\n !qbItem.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\n [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.Error_Message__c\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.Back__c\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.Back__c }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.Next__c\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.Next__c }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.Status__c === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.Summary_Text__c}}</h2>\n <p>{{this.qbItem.Summary_Sub_Text__c}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.Progress_Bar__c\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\n <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.Question_No__c }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.Question_Text__c }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.Question_Text__c }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.Progress_Bar__c }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <h3 class=\"summary-h\">\n {{ qbItem.Summary_Text__c }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed' && qbItem.Cancel__c\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.Cancel__c }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.Submit__c\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.Submit__c }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.Edit__c\">\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.Edit__c }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#F8F8F8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"] }]
|
|
2351
|
+
args: [{ selector: "lib-questionnaire", encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\n<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<!-- <app-loader></app-loader> -->\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.progressBar }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.progressBar\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\n 'custom-select': !qbItem?.progressBar\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.errorMessage }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.progressBar\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.type === 'File' &&\n !qbItem?.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.progressBar\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span>{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.type === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <!-- VD to show lable-->\n <div *ngIf=\"ques.type === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <label>{{ ques.questionText }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.trackingId\"\n [focusEvent]=\"clearSQError(ques?.id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.question\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.type === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.type === 'File' &&\n !qbItem.progressBar\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.question }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.next\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.questionText }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#f8f8f8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555;padding-left:2px}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"] }]
|
|
2288
2352
|
}], ctorParameters: function () { return [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.SharedService }, { type: i5.ActivatedRoute }, { type: i6.DomSanitizer }, { type: i7.NgxSpinnerService }, { type: i8.UntypedFormBuilder }, { type: i9.DeviceDetectorService }, { type: i0.ElementRef }, { type: i10.I18nService }]; }, propDecorators: { qbId: [{
|
|
2289
2353
|
type: Input
|
|
2290
2354
|
}], insuranceStartDate: [{
|
|
@@ -2306,4 +2370,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
2306
2370
|
}], handleSubmit: [{
|
|
2307
2371
|
type: Output
|
|
2308
2372
|
}] } });
|
|
2309
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUViLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEdBQ1AsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVl0QixNQUFNLE9BQU8sc0JBQXNCO0lBNk12QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFFRDtJQXZOQSxJQUFJLENBQVM7SUFDYixrQkFBa0IsQ0FBUztJQUMzQixJQUFJLENBQVM7SUFDYixHQUFHLENBQVM7SUFDWixHQUFHLENBQVMsQ0FBQyw4QkFBOEI7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lB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SUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRyxxQkFBcUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNHLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBUztRQUNkLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVM7UUFDaEIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7d0dBMzJFVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixtVEFIdEIsQ0FBQyxhQUFhLENBQUMsK0NDeEQ1Qiw2eHBDQW11Qk07OzRGRHhxQk8sc0JBQXNCO2tCQVBsQyxTQUFTOytCQUNFLG1CQUFtQixpQkFFZCxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsYUFBYSxDQUFDOzJZQUlqQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgRWxlbWVudFJlZixcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQgeyBTYWxlc2ZvcmNlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zYWxlc2ZvcmNlLnNlcnZpY2VcIjtcbmltcG9ydCB7IElNeURhdGVNb2RlbCwgSU15RHBPcHRpb25zIH0gZnJvbSBcIm15ZGF0ZXBpY2tlclwiO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyLCBTYWZlSHRtbCB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XG4vL2ltcG9ydCB7IE5neEluZGV4ZWREQlNlcnZpY2UsIEluZGV4RGV0YWlsc30gZnJvbSAnbmd4LWluZGV4ZWQtZGInO1xuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JzsgXG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZVwiO1xuXG5pbXBvcnQge1xuICBRdWVzdGlvbixcbiAgUXVlc3Rpb25Cb29rLFxuICBBbnN3ZXJCb29rLFxuICBBbnN3ZXJXcmFwcGVyLFxuICBPcHRpb24sXG4gIE9wdGlvblZhbHVlLFxuICBBdHRhY2htZW50V3JhcHBlcixcbiAgQXR0YWNobWVudCxcbiAgTG9jYWxRdWVzdGlvblxufSBmcm9tIFwiLi4vLi4vd3JhcHBlclwiO1xuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL2Vycm9yV3JhcHBlclwiO1xuXG5pbXBvcnQge1xuICBURVNUUVVFU1RJT04sXG4gIERUUVVFU1RJT04sXG4gIEZJTEVRVUVTVElPTixcbiAgVEFRVUVTVElPTixcbiAgUkFESU9RVUVTVElPTixcbiAgQ0hFQ0tRVUVTVElPTixcbiAgQk9PS1FVRVNUSU9OLFxuICBURVNUUUIsXG59IGZyb20gXCIuLi8uLi9zYW1wbGVcIjtcbmltcG9ydCB7IGZyb20gfSBmcm9tIFwicnhqc1wiO1xuLy8gSEEgMTlERUMyMyBpbXBvcnRlZCB0cmFuc2xhdGlvbiBzZXJ2aWNlXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImxpYi1xdWVzdGlvbm5haXJlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbFwiLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtDaGFuZ2VTZXJ2aWNlXSxcbiAgc3R5bGVVcmxzOiBbXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50LmNzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25uYWlyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHFiSWQ6IHN0cmluZztcbiAgQElucHV0KCkgaW5zdXJhbmNlU3RhcnREYXRlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlcnY6IHN0cmluZztcbiAgQElucHV0KCkgdGtuOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwaTogc3RyaW5nOyAvLyBWRCBnZXR0aW5nIHRoZSBhcGkgYXMgaW5wdXRcbiAgQE91dHB1dCgpIGhhbmRsZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVCb29rOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcGFyYW1zOiBQYXJhbXM7XG4gIHB1YmxpYyBkZXZpY2VJbmZvID0gbnVsbDtcbiAgcHVibGljIGFiSXRlbTogQW5zd2VyQm9vaztcbiAgcHVibGljIHFiSXRlbTogUXVlc3Rpb25Cb29rO1xuICBwdWJsaWMgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgcHVibGljIGFuc3dlcldyYXA6IEFuc3dlcldyYXBwZXI7XG5cbiAgLy8gQ09ORElUSU9OQUwgVFlQRVNcbiAgcHVibGljIHJhZGlvRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGF0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBPUFRJT05PTkxZIFRZUEVTXG4gIHB1YmxpYyBkcm9wZG93bkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrYm94RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFVOQ09ORElUSU9OQUwgVFlQRVNcbiAgcHVibGljIHRleHRGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGR0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGltZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGRhdGVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZW1haWxGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBudW1iZXJGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBhbHBoYW51bWVyaWNGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBib29rRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbGlzdEZsYWc6IGJvb2xlYW49IGZhbHNlO1xuICAvL0JhY2sgYnV0dG9uXG4gIHB1YmxpYyBiYWNrQnV0dG9uRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBWRCBkaXNhYmxlZFxuICBwdWJsaWMgaXNCdXR0b25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb3B0aW9uVmFsdWVzOiBPcHRpb25WYWx1ZVtdID0gW107XG4gIHB1YmxpYyBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW10gPSBbXTtcbiAgcHVibGljIGlucFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBhbnN3ZXJNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBkYXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc2VsZWN0ZWRob3VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc2VsZWN0ZWRtaW51dGVNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBhdHRhY2htZW50c01hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNxT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGxvY2FsU3ViUXVlc3Rpb25zOiBMb2NhbFF1ZXN0aW9uW10gPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uU3RhY2sgPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uTmFtZSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudHM6IGFueVtdID0gW107XG4gIHB1YmxpYyBhdHRhY2htZW50SWRMaXN0OiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYXR0YWNobWVudDogYW55O1xuICBwdWJsaWMgYWxsb3dlZEZpbGVFeHRlbnNpb246IHN0cmluZ1tdO1xuICBwdWJsaWMgZmlsZUV4Y2VlZGVkTGltaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGZpbGVUeXBlSW5jb3JyZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBiYWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBiYWNraWNvbjogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBjaGVjazogYm9vbGVhbjtcbiAgcHVibGljIHBvcDogYm9vbGVhbjtcbiAgcHVibGljIGxvY2FsRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgY3VycmVudE5hbWU6IHN0cmluZztcbiAgcHVibGljIHBhdGhxdWVzdGlvbjogbnVtYmVyO1xuICBwdWJsaWMgcGVyY2VudDogbnVtYmVyO1xuICBwdWJsaWMgY291bnQ6IG51bWJlcjtcbiAgcHVibGljIHRhRm9jdXNPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG5vdFZhbGlkQWNjTnVtOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzcGxDQ0JhY2tDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3VtbWFyeSA9IFtdO1xuICBwdWJsaWMgbG9jYWxTdWJRTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMga2V5SW5kZXg6IG51bWJlciA9IDA7XG4gIC8vcHVibGljIHNxdWVzOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxEYXRlOiBhbnkgPSB7fTtcbiAgcHVibGljIHNlbGVjdERhdGU6IHN0cmluZztcbiAgcHJpdmF0ZSB0b2RheTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgZWw6IEhUTUxFbGVtZW50O1xuICBwdWJsaWMgaW5uZXJodG1sOiBhbnk7XG4gIHB1YmxpYyBwb3NzaWJpbGl0aWVzOiBhbnk7XG4gIHB1YmxpYyBpbm5lcmh0bWwxOiBhbnk7XG4gIHB1YmxpYyBzdW1tYXJ5RGF0YSA9W107XG5cbiAgcHVibGljIGhvdXJzOiBhbnlbXSA9IFtcbiAgICBcIjAxXCIsXG4gICAgXCIwMlwiLFxuICAgIFwiMDNcIixcbiAgICBcIjA0XCIsXG4gICAgXCIwNVwiLFxuICAgIFwiMDZcIixcbiAgICBcIjA3XCIsXG4gICAgXCIwOFwiLFxuICAgIFwiMDlcIixcbiAgICBcIjEwXCIsXG4gICAgXCIxMVwiLFxuICAgIFwiMTJcIixcbiAgXTtcblxuICBwdWJsaWMgbWludXRlczogc3RyaW5nW10gPSBbXG4gICAgXCIwMFwiLFxuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICAgIFwiMTNcIixcbiAgICBcIjE0XCIsXG4gICAgXCIxNVwiLFxuICAgIFwiMTZcIixcbiAgICBcIjE3XCIsXG4gICAgXCIxOFwiLFxuICAgIFwiMTlcIixcbiAgICBcIjIwXCIsXG4gICAgXCIyMVwiLFxuICAgIFwiMjJcIixcbiAgICBcIjIzXCIsXG4gICAgXCIyNFwiLFxuICAgIFwiMjVcIixcbiAgICBcIjI2XCIsXG4gICAgXCIyN1wiLFxuICAgIFwiMjhcIixcbiAgICBcIjI5XCIsXG4gICAgXCIzMFwiLFxuICAgIFwiMzFcIixcbiAgICBcIjMyXCIsXG4gICAgXCIzM1wiLFxuICAgIFwiMzRcIixcbiAgICBcIjM1XCIsXG4gICAgXCIzNlwiLFxuICAgIFwiMzdcIixcbiAgICBcIjM4XCIsXG4gICAgXCIzOVwiLFxuICAgIFwiNDBcIixcbiAgICBcIjQxXCIsXG4gICAgXCI0MlwiLFxuICAgIFwiNDNcIixcbiAgICBcIjQ0XCIsXG4gICAgXCI0NVwiLFxuICAgIFwiNDZcIixcbiAgICBcIjQ3XCIsXG4gICAgXCI0OFwiLFxuICAgIFwiNDlcIixcbiAgICBcIjUwXCIsXG4gICAgXCI1MVwiLFxuICAgIFwiNTJcIixcbiAgICBcIjUzXCIsXG4gICAgXCI1NFwiLFxuICAgIFwiNTVcIixcbiAgICBcIjU2XCIsXG4gICAgXCI1N1wiLFxuICAgIFwiNThcIixcbiAgICBcIjU5XCIsXG4gIF07XG5cbiAgcHVibGljIHNlbGVjdGVkSG91cjogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNlbGVjdGVkTWludXRlOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgc2VsZWN0ZWRNZXJpZGllbTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHZhbHVlTmFtZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHZhbHVlTmFtZTE6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBib29rRmxhZ0FjY2VwdDogc3RyaW5nW107XG4gIHB1YmxpYyByZWNvcmRJZDogc3RyaW5nO1xuICBwdWJsaWMgY3VycmVudFF1ZXN0aW9uSWQ6IHN0cmluZztcbiAgcHVibGljIHNwaW5uZXJUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgbmV4dFZhbHVlOnN0cmluZyA9Jyc7XG5cbiAgc3RhcnRfZGF0ZT86IGFueTtcblxuICAvL3NlYXJjaCBjb21wb25lbnRcbiAgcHVibGljIHRlbXBvQWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkUG9zdGFsY29kZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQcm92aW5jZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRDaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZEFyZWE6IHN0cmluZztcbiAgcHVibGljIGxvY2FsYWRkcmVzczogYW55W10gPSBbXTtcblxuICBwdWJsaWMgYWxsQWRkcmVzcyA6YW55IFtdID0gW107XG4gIHB1YmxpYyBQb3N0YWxDb2RlOnN0cmluZztcbiAgcHVibGljIHBsYWNlczogYW55W10gPSBbXTtcbiAgcHVibGljIHByb3ZpbmNlOmFueVtdPVtdO1xuIFxuICAvLyBSRVEtMDEgUFJPR1JFU1MgQkFSXG4gIHB1YmxpYyBwcm9ncmVzc1N0eWxlOiBzdHJpbmcgPSBcIjAlXCI7XG4gIHB1YmxpYyBhbnN3ZXJDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIGluZGV4Q291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBhZGRGbGFnOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgbXlEYXRlUGlja2VyT3B0aW9uczogSU15RHBPcHRpb25zID0ge307XG4gIGluZGl2aWR1YWxCb29rQnV0dG9uOiBib29sZWFuO1xuXG4gIHB1YmxpYyBhbGxJbnB1dFZhbHVlcyA9IFtdOyAvLyBIQSAwMkZFQjI0IFRvIHN0b3JlIGFsbCB0aGUgaW5wdXQgdmFsdWVzXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgc3Bpbm5lcjogTmd4U3Bpbm5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICAvL3ByaXZhdGUgZGJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcbiAgKSB7XG4gICAgLy8gVkQgMTBBdWcyNC1zcGlubmVyIGNoYW5nZXNcbiAgICB0aGlzLnNwaW5uZXJOYW1lID0gXCJzcDFcIjtcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlLWZhZGVcIjtcbiAgfVxuXG4gIC8vIEhBIDAyRkVCMjQgT24gZGF0ZSBjaGFuZ2UgbmVlZCB0byBzdG9yZSB0aGUgY2hhbmdlZCB2YWx1ZSBzbyBwYXNzaW5nIHRoZSBxdWVzdGlvblxuICBvbkRhdGVDaGFuZ2VkKGV2ZW50OiBJTXlEYXRlTW9kZWwsIHF1ZXM6IGFueSkge1xuICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgb25EYXRlQ2hhbmdlZCcpO1xuICAgIC8vdG8gY2hhbmdlIHRoZSBib3JkZXIgY29sb3JcbiAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCIvXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCIvXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRUxTRSBvZiBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jID09XCJCb29rXCIpe1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xuICAgIH1cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBodG1sRWxlbWVudFxuICAgICAgLml0ZW0oMClcbiAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlci1jb2xvcjojODdiZTFjO3dpZHRoOjEwMCVcIik7XG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgZXZlbnQpO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmRhdGUuZGF5ID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLnllYXIgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgdGhpcy5hbnN3ZXJNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5zZWxlY3REYXRlID0gJyt0aGlzLnNlbGVjdERhdGUpO1xuICAgIC8vIEhBIDAyRkVCMjQgQXNzaWduaW5nIGlucHV0IHZhbHVlIHRvIHF1ZXMgaW5wdXRcbiAgICBxdWVzLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGV2aWNlSW5mbyA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XG4gICAgICBpZiAocGFyYW1zWydpZCddKSB7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSB0cnVlO1xuICAgICAgfWVsc2UgaWYocGFyYW1zWydib29rbGV0SWQnXSl7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSBcIkFNXCI7XG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICAvL2NvbnNvbGUubG9nKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhZGRyZXNzJykpO1xuICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSl7XG4gICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ0xlbmd0aD0nK3RoaXMubG9jYWxhZGRyZXNzLmxlbmd0aCk7XG4gICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgIH0pOyBcbiAgICAgIHRoaXMuYWxsQWRkcmVzcy5zb3J0KGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYodGhpcy5kZXZpY2VJbmZvLm9zID09PSAnaU9TJyl7XG4gICAgICAgIGxldCBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKFwiYWRkcmVzc0RCXCIpO1xuICAgICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROZXcgPSBldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdDtcbiAgICAgICAgICBsZXQgZGJOZXcgPSB0YXJnZXROZXcucmVzdWx0O1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3ROZXcgPSBkYk5ldy50cmFuc2FjdGlvbignYWRkcmVzc1RhYmxlJylcbiAgICAgICAgICAgICAgICAub2JqZWN0U3RvcmUoJ2FkZHJlc3NUYWJsZScpXG4gICAgICAgICAgICAgICAgLmdldCgxKTtcbiAgICAgICAgICByZXF1ZXN0TmV3Lm9uc3VjY2VzcyA9ICgpPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0ZW1wVmFyID0gcmVxdWVzdE5ldy5yZXN1bHQ7XG4gICAgICAgICAgICAgIHRoaXMubG9jYWxhZGRyZXNzID0gSlNPTi5wYXJzZSh0ZW1wVmFyLndob2xlQWRkcmVzc1N0cmluZyk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9jYWxhZGRyZXNzLmluZGV4T2YoaXRlbSkgPT0gaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTsgXG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcy5zb3J0KGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICAgICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG4vLyBjYWxsIHdoZW4gYm9va0lkIGNoYW5nZXNcbiAgbmdPbkNoYW5nZXMoc2ltcGxlY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmKHNpbXBsZWNoYW5nZXNbJ3FiSWQnXSl7XG4gICAgICB0aGlzLnByb2Nlc3NRQigpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGVfVGltZU1hcCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkaG91ck1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICB0aGlzLnNlbGVjdGVkbWludXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gIH1cblxuICBkYXkoKSB7XG4gICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zID0ge1xuICAgICAgZGF0ZUZvcm1hdDogXCJkZC5tbS55eXl5XCIsXG4gICAgICBzdW5IaWdobGlnaHQ6IGZhbHNlLFxuICAgICAgZGlzYWJsZURhdGVSYW5nZXM6IFtdLFxuICAgICAgc2hvd0NsZWFyRGF0ZUJ0bjogZmFsc2UsXG4gICAgICBkaXNhYmxlU2luY2U6IHtcbiAgICAgICAgeWVhcjogMCxcbiAgICAgICAgbW9udGg6IDAsXG4gICAgICAgIGRheTogMCxcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlVW50aWw6IHtcbiAgICAgICAgeWVhcjogMCxcbiAgICAgICAgbW9udGg6IDAsXG4gICAgICAgIGRheTogMCxcbiAgICAgIH0sXG4gICAgICBzaG93VG9kYXlCdG46IGZhbHNlLFxuICAgICAgZGF5TGFiZWxzOiB7XG4gICAgICAgIHN1OiBcIkRvbVwiLFxuICAgICAgICBtbzogXCJMdW5cIixcbiAgICAgICAgdHU6IFwiTWFyXCIsXG4gICAgICAgIHdlOiBcIk1pw6lcIixcbiAgICAgICAgdGg6IFwiSnVlXCIsXG4gICAgICAgIGZyOiBcIlZpZVwiLFxuICAgICAgICBzYTogXCJTw6FiXCIsXG4gICAgICB9LFxuICAgICAgbW9udGhMYWJlbHM6IHtcbiAgICAgICAgMTogXCJFbmVcIixcbiAgICAgICAgMjogXCJGZWJcIixcbiAgICAgICAgMzogXCJNYXJcIixcbiAgICAgICAgNDogXCJBYnJcIixcbiAgICAgICAgNTogXCJNYXlvXCIsXG4gICAgICAgIDY6IFwiSnVuXCIsXG4gICAgICAgIDc6IFwiSnVsXCIsXG4gICAgICAgIDg6IFwiQWdvXCIsXG4gICAgICAgIDk6IFwiU2VwXCIsXG4gICAgICAgIDEwOiBcIk9jdFwiLFxuICAgICAgICAxMTogXCJOb3ZcIixcbiAgICAgICAgMTI6IFwiRGljXCIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjaGFuZ2UoKSB7XG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgLml0ZW0oMClcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXI6IDFweCBzb2xpZCByZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgIC5pdGVtKDApXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogMXB4IHNvbGlkICM4N2JlMWMgO3dpZHRoOjEwMCVcIik7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1FCKCkge1xuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcbiAgICAvL3RoaXMucWJJdGVtXG4gICAgY29uc29sZS5sb2codGhpcy5xYklkKTtcbiAgICAvL2NvbnNvbGUubG9nKCdWZXJzaW9uIGluIHByb2Nlc3MgaXMgOGJmMTFlZmE3ZjkxYTM5MWQ5NTdiZjZiNTA3OGVkYzdlNjU2YjY3YycpO1xuICAgIGlmICh0aGlzLnFiSWQpIHtcbiAgICAgIGlmICh0aGlzLnFiSWQubGVuZ3RoID09IDE4KSB7XG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uQm9vayh0aGlzLnFiSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBlbHNlIHBhcnQnKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgUXVlc3Rpb24gRGlyZWN0bHkgZm9yIHRlc3RpbmcnKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBEVFFVRVNUSU9OO1xuICAgICAgICB0aGlzLnFiSXRlbSA9IFRFU1RRQjtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0cmltTGFzdER1bW15KGlucHV0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDAsIGlucHV0Lmxlbmd0aCAtIDYpKTtcbiAgfVxuXG4gIGdldFByb3BlclRpbWUoZGVmOiBzdHJpbmcsIGlucHV0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09IFwiXCIgPyBkZWYgOiBpbnB1dDtcbiAgfVxuXG4gIC8vU3VtbWFyeSBRdWVzdGlvbiBDbGlja2FibGUgTG9naWNcbiAgaGFuZGxlRWRpdENsaWNrKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhY2tpY29uID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuYWJJdGVtPy5TdGF0dXNfX2MgPT0gXCJQZW5kaW5nXCIpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHZhbHVlKTtcbiAgICAgIC8vY29uc29sZS5sb2coJyBpbiBzaWRlIHN1bW1hcnlvcGVuJysgdGhpcy5zdW1tYXJ5Lmxlbmd0aCk7XG5cbiAgICAgIC8vQXNzaWduIHF1ZXN0aW9uIHN0YWNrIGxlbmd0aCBmcm9tIHN1bW1hcnkgcGFydFxuICAgICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIHZhciBsZW5ndGhWYWx1ZSA9IHRoaXMucXVlc3Rpb25TdGFjay5pbmRleE9mKHZhbHVlKTtcblxuICAgICAgZm9yIChsZXQgaSA9IGFycmF5TGVuZ3RoOyBpID4gbGVuZ3RoVmFsdWU7IGktLSkge1xuICAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jID09PSB0cnVlKSB7XG4gICAgICAgIHZhciBhcnJheUxlbmd0aDEgPSB0aGlzLnF1ZXN0aW9uTmFtZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGogPSBhcnJheUxlbmd0aDE7IGogPiBsZW5ndGhWYWx1ZTsgai0tKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5leHRDbGljaygpIHtcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICB0aGlzLnNwaW5uZXIuc2hvdyh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuYmFja0J1dHRvbkZsYWcgPSBmYWxzZTtcbiAgICB0aGlzLkFuc3dlclNhdmUoKTtcbiAgfVxuXG4gIEFuc3dlclNhdmUoKXtcbiAgICAvL3RoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICBpZiAodGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcXVlc3Rpb25UeHQ9Jyc7XG4gICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLk5leHRfVHJhY2tpbmdfSURfX2MpO1xuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgLy8gTVIgMzBKQU4yNCAtIEFkZGVkIENvbmRpdGlvbiBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yIChCb29rIFF1ZXN0aW9uIGFuZCBOb24tQm9vaylcbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9iamVjdHMgdG8gc3RvcmUgdGhlIHZhbHVlc1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMubGVuZ3RoO2krKykge1xuICAgICAgICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzW2ldLlF1ZXN0aW9uX1RleHRfX2Mpe1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uVGV4dCA9IHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzW2ldLlF1ZXN0aW9uX1RleHRfX2MucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7IC8vIFJlbW92ZSBIVE1MIHRhZ3MgZnJvbSB0aGUgUXVlc3Rpb25fVGV4dF9fYyB2YWx1ZVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcXVlc3Rpb25UZXh0ID0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uaW5wdXQ7XG4gICAgICAgICAgY29uc3Qgb2JqID0geyBbcXVlc3Rpb25UZXh0XTogaW5wdXQgfTsgLy8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBxdWVzdGlvblRleHQgYXMgdGhlIGtleSBhbmQgdGhlIGlucHV0IGFzIHRoZSB2YWx1ZVxuICAgICAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9UZXh0X19jLnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgIH1cblxuICAgICAgICAgdmFyIHR5cCA9IGNRdWVzdGlvbi5UeXBlX19jO1xuICAgIC8vIHRoaXMuc3F1ZXMgKz0gY1F1ZXN0aW9uLlF1ZXN0aW9uX19jICsgJ0BAIyMkJCc7XG4gICAgdmFyIHF1ZXNWYWx1ZSA9IGNRdWVzdGlvbi5RdWVzdGlvbl9UZXh0X19jO1xuICAgIHZhciBtYWlsZm9ybWF0ID1cbiAgICAgIFwiXlteLl1bYS16QS1aMC05ISMkJSYnKistLz0/Xl9ge3x9fl0rW14uXUBbXi1dW2EtekEtWjAtOS4tXStbXi1dLlthLXpBLVpdezIsfSRcIjtcblxuICAgIC8vIFByb2Nlc3MgSW5wdXRzXG4gICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIC8vIFNhdmUgYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zIGluIHRoZSBpbnBWYWx1ZVxuICAgICAgZm9yICh2YXIgb3Ygb2YgdGhpcy5vcHRpb25WYWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gb3YuVmFsdWVfX2MgKyBcIkBAIyMkJFwiO1xuICAgICAgICB0aGlzLnJlY29yZElkID0gb3YuTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVtYWlsRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmFscGhhbnVtZXJpY0ZsYWcpIHtcbiAgICAgIHZhciBpc05vdFZhbGlkQWNjTnVtID0gdGhpcy5pc05vdFZhbGlkQWNjTnVtYmVyKHRoaXMuaW5wVmFsdWUpO1xuICAgICAgaWYgKGlzTm90VmFsaWRBY2NOdW0pIHtcbiAgICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IHRydWU7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bWJlckZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaXRlbSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgXG4gICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIkRhdGVcIiB8fCBpdGVtLlR5cGVfX2MgPT0gXCJUaW1lXCIpIHtcbiAgICAgICAgICAvL3RoaXMgb25lXG4gICAgICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIkRhdGVcIil7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSB0eXBlIGNvbmQgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XG4gICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGU7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSlcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdERhdGUpXG4gICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgIGlmKGl0ZW0uVHlwZV9fYyA9PSBcIlRpbWVcIil7XG4gICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkSG91cit0aGlzLnNlbGVjdGVkTWVyaWRpZW0rdGhpcy5zZWxlY3RlZE1pbnV0ZSlcbiAgICAgICAgICAgICBcbiAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcbiAgICAgICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiQU1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciA9PT0gXCIxMlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgICAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMzEtSkFOLTI0IFJlbW92ZWQgdGhlIHNlbGVjdEhvdXIgYW5kIHNlbGVjdE1pbnV0ZSBjb25kaXRpb25cbiAgICAgICAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8IHRoaXMuc2VsRGF0ZSA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmlucFZhbHVlIHx8ICF0aGlzLnNlbGVjdERhdGUpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgbnVsbCBjb25kaXRpb24gb2YgaW5wdXQnKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgICAgICAgICBodG1sRWxlbWVudFxuICAgICAgICAgICAgICAuaXRlbSgwKVxuICAgICAgICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlci1ib3R0b206IDFweCBzb2xpZCByZWQgIWltcG9ydGFudDtcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICB9XG4gICAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgdGV4dCBlcnJvciBjb25kaXRpb25cbiAgICAgIGlmKGl0ZW0uVHlwZV9fYz09IFwiVGV4dFwiKXtcbiAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XG4gICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMuaW5wVmFsdWUgPSBpdGVtLmlucHV0OyA2MzRcbiAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIWl0ZW0uSXNfT3B0aW9uYWxfX2MgJiZcbiAgICAgICAgLy8gICgoaXRlbS5UeXBlX19jICE9IFwiRmlsZVwiICYmICFpdGVtLmlucHV0ICYmIGl0ZW0uVHlwZV9fYyAhPSAnRGF0ZScgJiYgaXRlbS5UeXBlX19jICE9ICdUaW1lJykgfHxcbiAgICAgICAgIC8vICAgKGl0ZW0uVHlwZV9fYyA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PSAwKSlcbiAgICAgICAgIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uVHlwZV9fYyA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgJiYgaXRlbS5pbnB1dC5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uVHlwZV9fYyA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScgKyByZWNvcmRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcbiAgICAgICAgfSAvL2l0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZTtcblxuICAgICAgICB0aGlzLmlucFZhbHVlICs9IChpdGVtLmlucHV0ICE9IHVuZGVmaW5lZCA/IGl0ZW0uaW5wdXQgOiBcIlwiKSArIFwiQEAjIyQkXCI7XG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0uUXVlc3Rpb25fX2MgKyBcIkBAIyMkJFwiO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgYm9vazEnICsgdGhpcy5pbnBWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIHF1ZXN0aW9uVHh0ID0gcXVlc3Rpb25UeHQgPyB0aGlzLnRyaW1MYXN0RHVtbXkocXVlc3Rpb25UeHQpIDogcXVlc3Rpb25UeHQ7XG4gICAgfSBcbiAgICBlbHNlIGlmICh0aGlzLmxpc3RGbGFnKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gJyc7XG4gICAgICB2YXIgaGFzTWlzc2luZ0lucHV0ID0gZmFsc2U7XG4gICAgICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKXtcbiAgICAgICAgdGhpcy5zdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGZvciAodmFyIGxvY2FsUXVlcyBvZiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgICAgICBpZighbG9jYWxRdWVzLmlucHV0KSB7XG4gICAgICAgICAgICAgIGxvY2FsUXVlcy5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBpZighdGhpcy5zdWJBbnNNYXAuaGFzKGxvY2FsUXVlcy5JZCkpe1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhbnMgbWFwJylcbiAgICAgICAgICAgIHRoaXMuc3ViQW5zTWFwLnNldChsb2NhbFF1ZXMuSWQsbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhbnMgbWFwIGVsc2UnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5JZCx0aGlzLnN1YkFuc01hcC5nZXQobG9jYWxRdWVzLklkKSArICckJEBAIyMnK2xvY2FsUXVlcy5pbnB1dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZpbGUgdHdvJylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJBbnNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9ICh2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnKSArICdAQCMjJCQnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kcm9wZG93bkZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcbiAgICAgIC8vdGhpcyBvbmVcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjEyXCIsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjAwXCIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUubGVuZ3RoKTtcblxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiVFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJhbnMgPT4gXCIgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgICAgICB2YXIgZGF0ZTE6IGFueSA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgIGRhdGUxID0gZGF0ZTFbMF0uc3BsaXQoXCIvXCIpO1xuICAgICAgICAgIGRhdGUxID0gW2RhdGUxWzJdLCBkYXRlMVsxXSwgZGF0ZTFbMF1dLmpvaW4oXCItXCIpO1xuICAgICAgICAgIGRhdGUxID0gbmV3IERhdGUoZGF0ZTEpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coZGF0ZTEpXG4gICAgICAgICAgdmFyIGRhdGUyOiBhbnkgPSB0aGlzLmluc3VyYW5jZVN0YXJ0RGF0ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTIgPSBuZXcgRGF0ZShkYXRlMlswXSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMik7XG4gICAgICAgICAgaWYgKGRhdGUxIDwgZGF0ZTIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPVxuICAgICAgICAgICAgICBcIk5vIGVzIHBvc2libGUgZGFyIGRlIGFsdGEgbGEgcmVjbGFtYWNpw7NuIGRlYmlkbyBhIHF1ZSBsYSBmZWNoYSBkZWwgaW5jaWRlbnRlIGVzIGFudGVyaW9yIGEgbGEgZmVjaGEgZGUgY29udHJhdGFjacOzbiBkZSBsYSBww7NsaXphXCI7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8ICF0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLmRhdGVGbGFnKSB7XG4gICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9XG4gICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcbiAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDUpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMudGltZUZsYWcpIHtcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA3IHx8IHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlRmxhZykge1xuICAgICAgLy9jb25zb2xlLmxvZygnZm91cicpXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudEl0ZW0gb2YgdGhpcy5hdHRhY2htZW50cykge1xuICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cbiAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICBcIkAjJFwiICtcbiAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcbiAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmaWxlc3NzJyArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZS5zdWJzdHIoMCwgdGhpcy5pbnBWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHRoZSBhbnN3ZXIgYmVmb3JlIHNhdmluZyB0byB0aGUgREJcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25JdGVtLklzX09wdGlvbmFsX19jICYmICF0aGlzLmlucFZhbHVlKSB7XG4gICAgICAvLyBTaG93IGVycm9yIHRoYXQgdGhlIHF1ZXN0aW9uIG11c3QgYmUgYW5zd2VyZWRcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgLy8gVkQgZGlzYWJsZWRcbiAgICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2VcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU2F2ZSB0aGUgQW5zd2VyIGluIHRoZSBEQlxuICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFiSWQgPSB0aGlzLmFiSXRlbS5JZDtcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc0lkID0gY1F1ZXN0aW9uLklkO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzVmFsdWUgPSBxdWVzVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnFUeXAgPSB0eXA7XG4gICAgLy8gSEEgMDJGRUIyNCBUbyBkaXNwbGF5IHRoZSB2YWx1ZXMgaW4gc3VtbWFyeSB1c2luZyB0aGlzXG4gICAgdGhpcy5hbGxJbnB1dFZhbHVlcyA9IFtdO1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IHt9O1xuICAgICAgaW5wdXRWYWx1ZVsnSWQnXSA9IGVsZW1lbnQ/LklkO1xuICAgICAgaW5wdXRWYWx1ZVsnVHlwZV9fYyddID0gZWxlbWVudD8uVHlwZV9fYztcbiAgICAgIGlucHV0VmFsdWVbJ1JlZmVyZW5jZV9GaWVsZF9fYyddID0gZWxlbWVudD8uUmVmZXJlbmNlX0ZpZWxkX19jO1xuICAgICAgaW5wdXRWYWx1ZVsnUXVlc3Rpb25fVGV4dF9fYyddID0gZWxlbWVudD8uUXVlc3Rpb25fVGV4dF9fYztcbiAgICAgIGlucHV0VmFsdWVbJ2lucHV0J10gPSBlbGVtZW50Py5pbnB1dDtcbiAgICAgIGlucHV0VmFsdWUgPyB0aGlzLmFsbElucHV0VmFsdWVzLnB1c2goaW5wdXRWYWx1ZSkgOiB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIH0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5teVZhbCA9IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlID0gdGhpcy5pbnBWYWx1ZTtcbiAgICB0aGlzLmFuc3dlcldyYXAuZ3JvdXBUZXh0ID0gY1F1ZXN0aW9uLkdyb3VwX19jO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmFuc3dlcldyYXAucVR5cCcsdGhpcy5hbnN3ZXJXcmFwLnFUeXApO1xuICAgaWYodGhpcy5hbnN3ZXJXcmFwLnFUeXAgPT0gXCJBbHBoYW51bWVyaWNcIil7XG4gICAgICB0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUgPSAnRVMnKyB0aGlzLmlucFZhbHVlO1xuICAgICAgLy8gY29uc29sZS5sb2coJ0JhbmsgY29uZGl0aW9uJyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUpO1xuICAgIH1cbiAgICAvKmlmIChjUXVlc3Rpb24uVHlwZV9fYyA9PSAnQm9vaycpe1xuICAgIGZvciAodmFyIHFiIG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcyl7XG4gICAgICAvL2NvbnNvbGUubG9nKHFiLlF1ZXN0aW9uX19jKycqKioqJytcIkBAIyMkJFwiKVxuICAgIH0gXG4gIH0qL1xuICAgIC8vdGhpcy5hbnN3ZXJXcmFwLnNxdWVzVmFsdWUgPSBjUXVlc3Rpb24uUXVlc3Rpb25fX2M7XG4gICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSB0aGlzLmlucFZhbHVlO1xuICAgIC8vIGVtaXQgdGhlIGN1cnJlbnQgcXVlc3Rpb24gd2l0aCBpbnB1dCB0byBwYXJlbnRcbiAgICBsZXQgcXVlc3Rpb25BbnMgPSB7fVxuICAgIHF1ZXN0aW9uQW5zWydxdWVzdGlvbkRldGFpbCddID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgcXVlc3Rpb25BbnNbJ2Fuc3dlckJvb2tEZXRhaWwnXSA9IHRoaXMuYWJJdGVtO1xuICAgIGNvbnNvbGUubG9nKHF1ZXN0aW9uQW5zKTtcbiAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlc3Rpb25BbnMpO1xuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbkl0ZW0tLT4nKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnNxdWVzVmFsdWUgPSBxdWVzdGlvblR4dCA/IHF1ZXN0aW9uVHh0IDogY1F1ZXN0aW9uLlF1ZXN0aW9uX19jO1xuICAgIHRoaXMuc2F2ZUFuc3dlcigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHZhciB0eXAgPSBjUXVlc3Rpb24uVHlwZV9fYztcbiAgICAvLyBJZiBubyBlcnJvciB0aGVuIG1vdmUgdG8gbmV4dCBzdGVwc1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKGNRdWVzdGlvbi5JZCk7XG4gICAgLy8gIHRoaXMucXVlc3Rpb25OYW1lLnB1c2goY1F1ZXN0aW9uLk5hbWUpO1xuICAgIFxuICAgIC8vIENPTkRJVElPTkFMIHZzIE9QVElPTk9OTFkgJiBVTkNPTkRJVElPTkFMXG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIHRlcm5hcnkgZXZlbiBpbiBlbHNlIGNvbmRpdGlvbnMgYmVsb3dcbiAgICBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiQ09ORElUSU9OQUxcIikge1xuICAgICAgZm9yICh2YXIgY09wdCBvZiBjUXVlc3Rpb24uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgIC8vIFJhZGlvIC8gRGF0YVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdPcHRpb24gPT4gJyArIGNPcHQuVmFsdWVfX2MgKyAnIG1hdGNoaW5nIHdpdGggJyArIGFuc1ZhbCk7XG4gICAgICAgIGlmIChjT3B0LlZhbHVlX19jID09IHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdNYXRjaCBGb3VuZCB1c2luZyAnICsgY09wdC5OZXh0X1F1ZXN0aW9uX19jKTtcbiAgICAgICAgICBpZihjT3B0Lk5leHRfUXVlc3Rpb25fX2Mpe1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNPcHQuTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2NvbmRpdGlvbmFsIHJlY29yZCBpZCcrIHRoaXMucmVjb3JkSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBDb3VsZCBiZSBvZiB0eXBlIERhdGEgYW5kIGV4aXN0aW5nIHZhbHVlXG4gICAgICBpZiAodGhpcy5yZWNvcmRJZCAmJiB0eXAgPT0gXCJEYXRhXCIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiT1BUSU9OT05MWVwiKSB7XG4gICAgICAvLyAgT1BUSU9OT05MWSBsb2dpY1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiVU5DT05ESVRJT05BTFwiKSB7XG4gICAgICAvL1VuY29uZGl0aW9uYWwgIGxvZ2ljXG4gICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIHVuY29uZGl0aW9uYWxcIik7XG4gICAgICAvL2luc2lkZSBCb29rIFR5cGVcbiAgICAgIGlmIChjUXVlc3Rpb24uVHlwZV9fYyA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgIT0nNicpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImluc2lkZSBib29rXCIpO1xuICAgICAgICBmb3IgKGxldCBvcHQgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhvcHQuVHlwZV9fYyk7XG4gICAgICAgICAgaWYgKG9wdC5UeXBlX19jID09IFwiRHJvcGRvd25cIiB8fCBvcHQuVHlwZV9fYyA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0LlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lID09IG9wdDEuVmFsdWVfX2MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID1vcHQxLk5leHRfUXVlc3Rpb25fX2MgfHwgY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnRWxzZScrdGhpcy5yZWNvcmRJZClcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24uVHlwZV9fYyA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPT0nNicgKSB7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uUXVlc3Rpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgICBpZiAob3B0LlR5cGVfX2MgPT0gXCJEcm9wZG93blwiIHx8IG9wdC5UeXBlX19jID09IFwiUmFkaW9cIil7XG4gICAgICAgICAgZm9yICh2YXIgb3B0MSBvZiBvcHQuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZU5hbWUgPT0gb3B0MS5WYWx1ZV9fYykge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG9wdDEuTmV4dF9RdWVzdGlvbl9fYzsgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9ICAgIFxuICAgICAgXG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgZWxzZSB0byBrZWVwIHRoZSBhc3NpZ25tZW50IGRlZmF1bHRcbiAgICBlbHNle1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgIH1cblxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuXG4gICAgLy8gQ2FsbGluZyB0aGUgcHJvZ3JlcyBiYXIgdXBkYXRlIGZ1bmN0aW9uXG4gICAgdGhpcy5hbnN3ZXJDb3VudCsrO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcblxuXG4gICAgLy8gQ0FURUdPUklaQVRJT05cbiAgICAvL3RoaXMuc3RlcHBlckNhdGVnKCk7XG5cbiAgICBpZiAodGhpcy5yZWNvcmRJZCkge1xuICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5yZWNvcmRJZCk7XG4gICAgICB0aGlzLnBvcCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9wID0gZmFsc2U7XG4gICAgICAvLyBWRCBkaXNhYmxlZFxuICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuXG4gICAgICB0aGlzLnJlc2V0RmxhZyh0eXApO1xuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBudWxsO1xuXG4gICAgICAvLyBTaG93IFN1bW1hcnlcbiAgICAgIGZvciAodmFyIHEgb2YgdGhpcy5xdWVzdGlvblN0YWNrKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0hhbmRsaW5nIFF1ZXN0aW9uID0+ICcgKyBxKTtcbiAgICAgICAgdmFyIGFuc1dyYXAgPSB0aGlzLmFuc3dlck1hcC5nZXQocSk7XG4gICAgICAgIGlmIChhbnNXcmFwKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgQW5zd2VyIGZvciAnICsgYW5zV3JhcC5xdWVzSWQgKyAnIG9mIHR5cGUgJyArIGFuc1dyYXAucVR5cCk7XG4gICAgICAgICAgaWYoYW5zV3JhcC5xVHlwID09ICdGaWxlJyB8fCBhbnNXcmFwLnFUeXAgPT0gJ0Jvb2snfHxhbnNXcmFwLnFUeXAgPT0gJ0xpc3QnIHx8IGFuc1dyYXAucVR5cCA9PSAnQ2hlY2tib3gnKXtcbiAgICAgICAgICAgIHZhciBuZXdTdHIgPSAnJztcbiAgICAgICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiBhbnNXcmFwLmFuc1ZhbHVlLnNwbGl0KCdAQCMjJCQnKSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBhbnNTdHIxIG9mIGFuc1N0ci5zcGxpdCgnJCRAQCMjJykpIHtcbiAgICAgICAgICAgICAgLy8gIGlmKGFuc1N0cjEuaW5jbHVkZXMoJ2Fuc3dlclN0cmluZycpKXsgLy9yZW1vdmUgdGhlIGFuc3dlciBzdHJpbmcgIFxuICAgICAgICAgICAgICAgLy8gICBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gYW5zU3RyMS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgLy8gIGFuc1N0cjEgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xuICAgICAgICAgICAgICAvLyAgfVxuICAgICAgICAgICAgICAgIGlmIChhbnNTdHIxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gYW5zU3RyMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSAnOyAnICsgYW5zU3RyMTsgIC8vY29tbWEoLCkgY2hhbmdlZCBhcyBzZW1pIGNvbG9uKDspIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSgsKSBcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5hdHRhY2htZW50c01hcC5oYXMoYW5zV3JhcC5xdWVzSWQpKXtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGF0dCBvZiB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldChhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gbmV3U3RyLnJlcGxhY2UoYXR0LmF0dGFjaG1lbnRJZCwnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IChuZXdTdHIucmVwbGFjZSgnLCwnLCcsICcpKS5yZXBsYWNlKCcsICwnLCcsICcpO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIuc3RhcnRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygxLCBuZXdTdHIubGVuZ3RoKSA6IChuZXdTdHIuZW5kc1dpdGgoJywnKSA/IG5ld1N0ci5zdWJzdHJpbmcoMCwgbmV3U3RyLmxlbmd0aCAtIDEpIDogbmV3U3RyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuc1dyYXAuYW5zVmFsdWUgPSBuZXdTdHI7XG4gICAgICAgICAgICBhbnNXcmFwLm15VmFsID0gdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIENoZWNrIGlmIHRoZSBzdW1tYXJ5IGFscmVhZHkgY29udGFpbnMgYW4gZW50cnkgZm9yIHRoZSBzYW1lIHF1ZXNJZFxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQW5zV3JhcCA9IHRoaXMuc3VtbWFyeS5maW5kKGl0ZW0gPT4gaXRlbS5xdWVzSWQgPT09IGFuc1dyYXAucXVlc0lkKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdBbnNXcmFwKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBleGlzdHMsIHVwZGF0ZSB0aGUgYW5zVmFsdWUgYW5kIG15VmFsXG4gICAgICAgICAgICBleGlzdGluZ0Fuc1dyYXAuYW5zVmFsdWUgPSBhbnNXcmFwLmFuc1ZhbHVlO1xuICAgICAgICAgICAgZXhpc3RpbmdBbnNXcmFwLm15VmFsID0gYW5zV3JhcC5teVZhbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgaXQgZG9lc24ndCBleGlzdCwgcHVzaCB0aGUgYW5zV3JhcCB0byB0aGUgc3VtbWFyeSBhcnJheVxuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zV3JhcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYmFja2ljb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGV4dCh2YWx1ZSkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZUJhY2tDbGljaygpIHtcbiAgICB0aGlzLmJhY2sgPSB0cnVlO1xuICAgIGlmICh0aGlzLnBvcCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5CYWNrX1RyYWNraW5nX0lEX19jKTtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIGlmKGNRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyA9PScxJyl7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQmFja19fYyk7XG4gICAgfVxuICAgIFxuXG4gICAgdGhpcy5hbnN3ZXJDb3VudC0tO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcblxuICAgIGlmICh0aGlzLnN1bW1hcnkpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ3N1bW1hcnkgdHJ1ZScpO1xuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgfVxuICAgIGlmKHRoaXMuc3VtbWFyeURhdGEpe1xuICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9W107XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgcHJldmlvdXMgcXVlc3Rpb24gZnJvbSBEQlxuICAgIC8vIFZEIGRpc2FibGVkXG4gICAvLyB0aGlzLnNoYXJlZFNlcnZpY2Uuc2hvd0xvYWRlcigpO1xuICAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpKTtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XG4gIH1cblxuICBoYW5kbGVCYWNrQ2xpY2tOZXcoKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLkVkaXRfX2MpO1xuICB9XG5cbiAgLy91cGRhdGluZyBzdGF0dXMgb25jZSBRJkEgY29tcGxldGVkLlxuXG4gIHByaXZhdGUgdXBkYXRlQW5zd2VyQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiQW5zd2VyQm9va1wiLCBcIlVwZGF0ZVwiLCB1dWlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXG4gICAgICAvLyApO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyQm9vaycsJ1VwZGF0ZScsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgIChkYXRhKT0+e1xuICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQW5zd2VyQm9va1wiLCBcIlVwZGF0ZVwiLCB1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxuICAgICAgICB0aGlzLmZhaWx1cmV1cGRhdGVBQlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3N1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICBsZXQgZGF0YSA9IHJlc3BvbnNlO1xuICAgIGlmKGRhdGEpe1xuICAgICAgdGhpcy5oYW5kbGVTdWJtaXQuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9IFwiQ29tcGxldGVkXCI7XG4gICAgICB0aGlzLmRlbGV0ZUFuc3dlcnMoZGF0YS5BbnN3ZXJCb29rKVxuICAgIH1cbiAgfTtcblxuICAvLyBWRCBmb3IgZGVsZXRlIGFuc3dlcnNcbiAgZGVsZXRlQW5zd2VycyhhbnN3ZXJib29rKXtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIil7IFxuICAgICAgaWYoYW5zd2VyYm9vayAmJiBhbnN3ZXJib29rLlN0YXR1c19fYyA9PSAnQ29tcGxldGVkJyl7XG4gICAgICAgIGNvbnN0IGFuc0Jvb2tJZCA9IGFuc3dlcmJvb2suSWQ7XG4gICAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlckJvb2snLCdkZWxldGUnLGFuc0Jvb2tJZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGEpPT57XG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzRGVsZXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuIC8vIFZEIGZvciBkZWxldGUgYW5zd2Vyc1xuICBwcml2YXRlIHN1Y2Nlc3NEZWxldGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgIGlmKHJlc3BvbnNlLnN0YXR1cyA9PSAnc3VjY2Vzcycpe1xuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgfWVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignZXJyb3InLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmYWlsdXJldXBkYXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdzdGF0dXMgZmFpbGVkJylcbiAgfTtcblxuICBwcml2YXRlIHJlYWRRdWVzdGlvbkJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICAgLy8gKTtcbiAgICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdRdWVzdGlvbkJvb2snLCdyZWFkJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAvLyB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgICAgLy8gVkQgZGlzYWJsZWRcbiAgICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlKCk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE1SIDMwSkFOMjQgLSBQYXNzaW5nIGZsYWcgZnJvbSBOR05YVFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICAvLyAsIEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKVxuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWQsIEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHN1Y2Nlc3NSZWFkQm9vaycpO1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICBpZihyZXNwb25zZSAhPSBudWxsIHx8IHJlc3BvbnNlICE9IHVuZGVmaW5lZCl7XG4gICAgICB0aGlzLnFiSXRlbSA9IHJlc3BvbnNlLnF1ZXN0aW9uYm9vaztcbiAgICAgIHRoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICAgIHRoaXMuaGFuZGxlQm9vay5lbWl0KHJlc3BvbnNlKTtcblxuICAgIH1cbiAgIC8vIGNvbnNvbGUubG9nKCdyZWFkaW5nUXVlc3Rpb24gdXNpbmcgJyArIHRoaXMucWJJdGVtKTtcbiAgICBpZiAodGhpcy5hYkl0ZW0/LlN0YXR1c19fYyA9PSBcIlBlbmRpbmdcIikge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yID09IG51bGwgfHxcbiAgICAgICAgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzLmxlbmd0aCA9PSAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5xYkl0ZW0uRmlyc3RfUXVlc3Rpb25fX2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUG9wdWxhdGUgdGhlIGV4aXN0aW5nIGFuc3dlcnNcbiAgICAgICAgdmFyIGxhc3RRdWVzdGlvbklkID0gXCJcIjtcblxuICAgICAgICBmb3IgKHZhciBhbnNPYmplY3Qgb2YgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgbGFzdFF1ZXN0aW9uSWQgPSBhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jO1xuXG4gICAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnB1c2goYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYyk7XG5cbiAgICAgICAgICB0aGlzLmFuc3dlck1hcC5zZXQoYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYywge1xuICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnNPYmplY3QuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgYW5zVmFsdWU6IGFuc09iamVjdC5BbnN3ZXJfTG9uZ19fYyxcbiAgICAgICAgICAgIHF1ZXNJZDogYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYyxcbiAgICAgICAgICAgIHFUeXA6IGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jLFxuICAgICAgICAgICAgZ3JvdXBUZXh0OmFuc09iamVjdC5RdWVzdGlvbl9Hcm91cF9UZXh0X19jLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spXG4gICAgICAgICAgaWYgKGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jID09IFwiQm9va1wiKSB7XG4gICAgICAgICAgICB2YXIgYXYxID0gYW5zT2JqZWN0LkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgLy8gLy9jb25zb2xlLmxvZyhcImJvb2sgbG9nXCIpO1xuXG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImJvb2tpZFwiICsgYXYxWzBdKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MsIFtcbiAgICAgICAgICAgICAgeyBhdHRhY2htZW50TmFtZTogYXYxWzFdLCBhdHRhY2htZW50SWQ6IGF2MVswXSB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFuc09iamVjdC5RdWVzdGlvbl9UeXBlX19jID09IFwiRmlsZVwiKSB7XG4gICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImluc2lkZSBpZlwiKTtcbiAgICAgICAgICAgIHZhciBhdHRMaXN0O1xuICAgICAgICAgICAgdmFyIGF0dDtcbiAgICAgICAgICAgIGZvciAodmFyIGF0dFZhciBvZiBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCIsXCIpKSB7XG4gICAgICAgICAgICAgIHZhciBhdHRJZE5hbWUgPSBhdHRWYXIuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50TmFtZSA9IGF0dElkTmFtZVsxXTtcbiAgICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnRJZCA9IGF0dElkTmFtZVswXTtcbiAgICAgICAgICAgICAgYXR0TGlzdC5wdXNoKGF0dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLCBhdHRMaXN0KTtcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmFuc3dlck1hcCk7XG4gICAgICAgIC8vIFJlYWQgdGhlIGxhc3QgYW5zd2VyZWQgcXVlc3Rpb25cbiAgICAgICAgdGhpcy5yZWFkUXVlc3Rpb24obGFzdFF1ZXN0aW9uSWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5hYkl0ZW0/LlN0YXR1c19fYyA9PSBcIkNvbXBsZXRlZFwiKSB7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcbiAgICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICAgIHRoaXMucGVyY2VudCA9IDEwMDtcbiAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xuICAgICAgaWYodGhpcy5zZXJ2ICE9ICdhcGknKXtcbiAgICAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgIHZhciBhbnN3ZXJzID0ge307XG4gICAgICAgICAgaWYgKGFuc3dlci5RdWVzdGlvbl9UeXBlX19jID09IFwiRmlsZVwiKSB7XG4gICAgICAgICAgICB2YXIgZmlsZXMgPSBcIlwiO1xuICAgICAgICAgICAgdmFyIGZJbmRleCA9IDA7XG4gICAgICAgICAgICB2YXIgZmlsZUxpc3QgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgZm9yICh2YXIgZmlsZUlkTmFtZSBvZiBmaWxlTGlzdCkge1xuICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBmaWxlSWROYW1lLnNwbGl0KFwiQCMkXCIpO1xuICAgICAgICAgICAgICBpZiAoZkluZGV4ID09IDApIHtcbiAgICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVOYW1lWzFdO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbGVzID0gZmlsZXMgKyBcIiAsXCIgKyBmaWxlTmFtZVsxXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmSW5kZXgrKztcbiAgICAgICAgICAgIH1cbiAgXG4gICAgICAgICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAgICAgICBncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXG4gICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcbiAgICAgICAgICAgICAgYW5zVmFsdWU6IGZpbGVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAvLyAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuUXVlc3Rpb25fVHlwZV9fYyA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICAgLyogIHZhciBxdWVzTm89MDtcbiAgICAgICAgICAgaWYoYW5zd2VyLkFuc3dlcl9Mb25nX19jLmluY2x1ZGVzKFwiQEAjIyQkXCIpKXtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnbGluZSAxMjIzJyk7XG4gICAgICAgICAgICAgIGZvciAodmFyIGJxQW5zd2VyVmFsdWUgb2YgYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHF1ZXNWYWx1ZT1hbnN3ZXIuUXVlc3Rpb25fVGV4dF9fYy5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAgICBhbnN3ZXJzID0ge307XG4gICAgICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgICAgLy8gZ3JvdXBUZXh0OmFuc3dlci5RdWVzdGlvbl9UZXh0X19jLFxuICAgICAgICAgICAgICAgICAgcXVlc1ZhbHVlOiAgXCImbHQ7cCZndDtcIisgcXVlc1ZhbHVlW3F1ZXNOb10rXCImbHQ7cCZndDtcIixcbiAgICAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBicUFuc3dlclZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcXVlc05vKys7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICB9Ki9cbiAgICAgICAgICAgIGlmKGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAgIHZhciBhbnN3ZXJ2YWx1ZXMgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3ZhbHVlJylcbiAgICAgICAgICAgICAgYW5zd2VycyA9IHsgICAgICBcbiAgICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5RdWVzdGlvbl9Hcm91cF9UZXh0X19jLFxuICAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlcnZhbHVlcyxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcbiAgICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgIGFuc3dlcnMgPSB7ICAgICAgXG4gICAgICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXG4gICAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXIuQW5zd2VyX0xvbmdfX2MsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgLy8gdmFyIGFuczEgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICBhbnN3ZXJzID0geyAgICAgIFxuICAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLkFuc3dlcl9Mb25nX19jLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgIFxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGZhaWx1cmVSZWFkQm9vaycpO1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRBbnN3ZXJib29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9IFwiYXBpXCIpIHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgICAgdGhpcy50a24sXG4gICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCxcbiAgICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQW5zd2VyQm9va1wiLCBcInJlYWRcIiwgdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCxcbiAgICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIHN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiQ29tcGxldGVkXCIpIHtcbiAgICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMpIHtcbiAgICAgICAgdmFyIGF2ID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICB2YXIgYW5zd2VycyA9IHsgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLCBhbnNWYWx1ZTogYXYsIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyB9O1xuICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZUFuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XG4gICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkUXVlc3Rpb24gPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIlF1ZXN0aW9uXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICAgLy8gKTtcbiAgICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IHRydWUgfTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnUXVlc3Rpb24nLCdyZWFkJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgICAoZGF0YSk9PntcbiAgICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gICAgICAgICAgLy8gVkQgZGlzYWJsZWRcbiAgICAgICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzUmVhZChKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgLy8gLy8gVkQgMTVGRUIyNCAtIG1ha2UgY3JlYXRlQW5zd2VyQm9va0ZsYWcgZmFsc2Ugb25seVxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG5cbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIlF1ZXN0aW9uXCIsIFwicmVhZFwiLCB1dWlkLCBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkLFxuICAgICAgICB0aGlzLmZhaWx1cmVSZWFkXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCcpO1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAvLyBIQSAwMkZFQjI0IEZvciB0ZXN0aW5nIGZvciB1c2VkIHRoaXMgYW5kIGluIGZ1dHVyZSBpdCBjYW4gYmUgdXNlZCB0byB0ZXN0IHdpdGggc3RhdGljIGRhdGFcbiAgICAvLyB2YXIgYWIgPSBbJ2ZpcnN0JywnbGFzdCcsJzEyMycsJzEyLTEyLTIwMDAnLCcyMicsJ01hbGUnLCcxMiBjcm9zcyAxJywnRW1Db250YWN0JywnOTg3NjUnLCdBJywnU2luZ2xlJ107XG4gICAgLy8gZm9yKGNvbnN0IFtpbmRleCxpdGVtXSBvZiByZXNwb25zZS5xdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcy5lbnRyaWVzKCkpe1xuICAgIC8vICAgaXRlbS5pbnB1dCA9IGFiW2luZGV4XTtcbiAgICAvLyB9XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcblxuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbSkge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gICAgICB0aGlzLnJlc2V0RmxhZyh0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jKTtcbiAgICB9XG4gICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbjtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG5cbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jID09PSAnQWxwaGFudW1lcmljJyl7XG4gICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gdGhpcy5xdWVzdGlvbkl0ZW0uSWQ7XG4gICAgdGhpcy5oYW5kbGVQYWdlLmVtaXQodGhpcy5xdWVzdGlvbkl0ZW0uVHJhY2tpbmdfSURfX2MpO1xuICAgIC8vIEhhbmRsZSB0aGUgc3ViUXVlc3Rpb24gb3B0aW9uc1xuICAgIGlmIChyZXNwb25zZS5zcU9wdGlvbnMpIHtcbiAgICAgIC8vdmFyIG5ld1JlY29yZHMgPSBbXTtcbiAgICAgIGZvciAodmFyIHEgb2YgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhxLk5hbWUpO1xuICAgICAgICB2YXIgc3EgPSByZXNwb25zZS5zcU9wdGlvbnNbcS5JZF07XG4gICAgICAgIGlmIChzcSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZvdW5kIG9wdGlvbnMgZm9yIHN1YnF1ZXN0aW9uICcgKyBxLk5hbWUpO1xuICAgICAgICAgIGlmICghcS5RdWVzdGlvbl9PcHRpb25zX19yKSB7XG4gICAgICAgICAgICBxLlF1ZXN0aW9uX09wdGlvbnNfX3IgPSBzcS5RdWVzdGlvbl9PcHRpb25zX19yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xuICAgIHRoaXMuaW5uZXJodG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5BZGRpdGlvbmFsX1JpY2hfX2NcbiAgICApO1xuICAgIHRoaXMudHJhY2tJZCgpO1xuICB9O1xuXG4gIHRyYWNrSWQoKSB7XG4gICAgdmFyIHF0cmFja0lkID0gdGhpcy5xdWVzdGlvbkl0ZW0uVHJhY2tpbmdfSURfX2M7XG4gICAgLy9jb25zb2xlLmxvZygndHJhY2tJZC1xdWVzdGlvbicrcXRyYWNrSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWlsdXJlUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xuICAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICB9O1xuXG4gIHByaXZhdGUgc2F2ZUFuc3dlciA9ICgpID0+IHtcbiAgICAvLyBTZXQgdGhlIEFuc3dlciBOdW1iZXIgYmFzZWQgb24gdGhlIFF1ZXN0aW9uIFN0YWNrIExlbmd0aFxuICAgIGlmICh0aGlzLmlucFZhbHVlICE9IFwiLlwiKSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFuc051bWJlciA9IHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggKyAxO1xuXG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkFuc3dlclwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzU2F2ZSxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlU2F2ZVxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXInLCdjcmVhdGUnLEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGEgY2FtZSBzdWNlc3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzU2F2ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAgICB0aGlzLmZhaWx1cmVTYXZlXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBodG1sRGVjb2RlKGlucHV0KSB7XG4gICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xuICAgIHJldHVybiBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzU2F2ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgIC8vdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xuICAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KHJlc3BvbnNlLmFuc3dlci5xdWVzSWQsIHJlc3BvbnNlLmFuc3dlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPSByZXNwb25zZS5lcnJvci5lcnJvck1zZztcbiAgICB9XG4gICAgaWYoIXRoaXMuYmFja0J1dHRvbkZsYWcpe1xuICAgICAgdGhpcy5uZXh0KCk7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZVNhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZVNhdmUnKTtcbiAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgfTtcblxuICBwcml2YXRlIHByb2Nlc3NRdWVzdGlvbiA9ICgpID0+IHtcbiAgICAvLyBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBwcm9jZXNzUXVlc3Rpb24nKTtcbiAgICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICAgdGhpcy5wb3AgPSB0cnVlO1xuXG4gICAgLy8gaWYoIXRoaXMuYmFjayl7XG4gICAgLy8gICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpXG4gICAgLy8gfVxuXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKCF0aGlzLmJhY2spIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYmFjayA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMucXVlc3Rpb25OYW1lWzBdID09PSB0aGlzLnF1ZXN0aW9uTmFtZVsxXSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jdXJyZW50TmFtZSA9IHRoaXMucXVlc3Rpb25JdGVtLk5hbWU7XG4gICAgICB0aGlzLnBhdGhxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25OYW1lLmluZGV4T2YodGhpcy5jdXJyZW50TmFtZSk7XG4gICAgICB0aGlzLnBvc3NpYmlsaXRpZXMgPSB0aGlzLnFiSXRlbS5Qb3NzaWJpbGl0aWVzX19jO1xuICAgIH1cblxuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucztcbiAgICB0aGlzLmRheSgpO1xuICAgIC8vY29uc29sZS5sb2coJ3Byb2Nlc3NpbmcgcXVlc3Rpb24gJyArIHRoaXMucXVlc3Rpb25JdGVtLk5hbWUgKyAnIGV4aXN0aW5nIGFuc3dlcnMgYXJlICcgKyB0aGlzLmFuc3dlck1hcC5zaXplKTsgLy8gPT4gJyArIEpTT04uc3RyaW5naWZ5KHRoaXMucXVlc3Rpb25JdGVtKSk7XG5cbiAgICAvLyBTZXQgdGhlIEZsYWdzIHRvIHNob3cgcmlnaHQgZmllbGRzXG4gICAgdGhpcy5zZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MpO1xuICAgIC8vY29uc29sZS5sb2coJ0FmdGVyIHRoZSBzZXRGbGFnIG1ldGhvZCBkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcblxuICAgIC8vIENoZWNrIHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSBhbnN3ZXJNYXBcbiAgICBpZiAodGhpcy5hbnN3ZXJNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJleGlzdGluZyBhbnN3ZXIgZm91bmQgZm9yIHRoaXMucXVlc3Rpb25JdGVtLk5hbWVcIik7XG4gICAgICB2YXIgZUFuc3dlciA9IHRoaXMuYW5zd2VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIHRoZSBNYXBcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBlQW5zd2VyLmFuc1ZhbHVlO1xuICAgICAgLy9jb25zb2xlLmxvZygnaW5wVmFsdWUgaGFzIGJlZW4gc2V0IHRvICcgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHJlbW92aW5nIGF0dGFjaG1lbnQgYXJyYXknKTtcbiAgICAgIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XG4gICAgaWYodGhpcy5zcGxDQ0JhY2tDbGljayAmJiB0aGlzLmlucFZhbHVlICYmIHRoaXMuaW5wVmFsdWUuaW5jbHVkZXMoJ0VTJykpe1xuICAgICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgaWYgY29uZCcpO1xuICAgICAgdGhpcy5zcGxDQ0JhY2tDbGljayA9IGZhbHNlO1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZSgnRVMnLCcnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja2JveEZsYWcpIHtcbiAgICAgIC8vIFNldCB0aGUgT3B0aW9ucyBmb3IgQ2hlY2tib3hcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIGV4cGVjdGVkIGJvb2tGbGFnIGNvbmQnKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ2R0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xuLy8gIEhBIDIwRkVCMjQgTGFiZWwgRml4XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LlF1ZXN0aW9uX1RleHRfX2MgPSBlbGVtZW50LlF1ZXN0aW9uX1RleHRfX2MucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgIC8vIFNldCB0aGUgTG9jYWxTdWJRdWVzdGlvbnNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgbGlzdCBmbGFnJyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFiSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgICBpZighdGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSl7XG4gICAgICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgIH0gXG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZykge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIHVuZXhwZWN0ZWQgZHRGbGFnIGNvbmQnKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gXCJcIjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBcIlwiO1xuICAgICAgdGhpcy5zZWxEYXRlID0gXCJcIjtcbiAgICAgIC8vIDIwMjEtNS0xNlQwMDowMFxuICAgICAgaWYgKHRoaXMuZGF0ZU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgIHRoaXMuc2VsRGF0ZSA9IHRoaXMuZGF0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRob3VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSB0aGlzLnNlbGVjdGVkaG91ck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xuICAgICAgICB0aGlzLmhvdXJzLnB1c2goXG4gICAgICAgICAgXCIxM1wiLFxuICAgICAgICAgIFwiMTRcIixcbiAgICAgICAgICBcIjE1XCIsXG4gICAgICAgICAgXCIxNlwiLFxuICAgICAgICAgIFwiMTdcIixcbiAgICAgICAgICBcIjE4XCIsXG4gICAgICAgICAgXCIxOVwiLFxuICAgICAgICAgIFwiMjBcIixcbiAgICAgICAgICBcIjIxXCIsXG4gICAgICAgICAgXCIyMlwiLFxuICAgICAgICAgIFwiMjNcIixcbiAgICAgICAgICBcIjAwXCJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaG91cnMgPSB0aGlzLmhvdXJzLnNsaWNlKDAsIDEyKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgIHZhciBkdFZhbCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJUXCIpOyBcbiAgICAgICAgdmFyIGR0dmFsMCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gZHRWYWxbMF07XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdHZhbDBbMF07XG5cbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdHZhbDBbMV07XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfQmFja3dhcmRfX2MgfHxcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9Gb3J3YXJkX19jXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfQmFja3dhcmRfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVNpbmNlID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpICsgMSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5Jc19EYXRlX0ZvcndhcmRfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVVudGlsID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgIHRoaXMuZmlsZVVJKCk7XG4gICAgICAvLyBsb2dpY1xuICAgICAgdGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbiA9XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYz8uc3BsaXQoXCI7XCIpO1xuICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmFsbG93ZWRGaWxlRXh0ZW5zaW9uKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIH1cbiAgfTtcblxuICBzZXRGbGFnKHR5cCkge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBzZXRGbGFnIGZvciAnICsgdHlwKTtcblxuICAgIGlmICh0eXApIHtcbiAgICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICAgdGhpcy50ZXh0RmxhZyA9IHRydWU7XG5cbiAgICAgICAgLy90aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgICB0aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYU51bWVyaWNcIikge1xuICAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSB0cnVlO1xuICAgICAgICAvKmlmKHRoaXMuaW5wVmFsdWUubGVuZ3RoID09PSAwKXtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlPSdFUydcbiAgICAgICAgfSovXG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICAgdGhpcy5lbWFpbEZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgdGhpcy5maWxlRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRpbWVGbGFnID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICAgdGhpcy50YUZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgIHRoaXMucmFkaW9GbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRHJvcGRvd25cIikge1xuICAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICAgdGhpcy5jaGVja2JveEZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgdGhpcy5ib29rRmxhZyA9IHRydWU7XG4gICAgICB9ZWxzZSBpZiAodHlwID09ICdMaXN0Jyl7XG4gICAgICAgIHRoaXMubGlzdEZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUaW1lXCIpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBUaW1lIGNvbmQnKTtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRpbWVGbGFnID0gdHJ1ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmR0RmxhZyk7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIERhdGUgY29uZCcpO1xuICAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZHRGbGFnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldEZsYWcodHlwKSB7XG4gICAgaWYgKHR5cCkge1xuICAgICAgLy8gU2V0IHRoZSBGbGFnc1xuICAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xuICAgICAgICB0aGlzLnRleHRGbGFnID0gZmFsc2U7XG4gICAgICAgIC8vdGhpcy5udW1iZXJGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XG4gICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYW51bWVyaWNcIikge1xuICAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xuICAgICAgICB0aGlzLmVtYWlsRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgdGhpcy5maWxlRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUZXh0QXJlYVwiKSB7XG4gICAgICAgIHRoaXMudGFGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgdGhpcy5yYWRpb0ZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRHJvcGRvd25cIikge1xuICAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJDaGVja2JveFwiKSB7XG4gICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICB0aGlzLmJvb2tGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgICB0aGlzLmxpc3RGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xuICAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xuICAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0T3B0aW9ucyhyZWNvcmRzKSB7XG4gICAgZm9yICh2YXIgb3B0IG9mIHJlY29yZHMpIHtcbiAgICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xuICAgICAgb3YuSWQgPSBvcHQuSWQ7XG4gICAgICBvdi5OYW1lID0gb3B0Lk5hbWU7XG4gICAgICBvdi5WYWx1ZV9fYyA9IG9wdC5WYWx1ZV9fYztcbiAgICAgIG92Lk5leHRfUXVlc3Rpb25fX2MgPSBvcHQuTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIG92LmNoZWNrZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlucFZhbHVlICYmXG4gICAgICAgIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikuaW5jbHVkZXMob3B0LlZhbHVlX19jKVxuICAgICAgKSB7XG4gICAgICAgIG92LmNoZWNrZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wdGlvblZhbHVlcy5wdXNoKG92KTtcbiAgICB9XG4gIH1cblxuICAvLyBDYXB0dXJlIGFuZCBQcm9jZXNzIENoaWxkIEV2ZW50XG4gIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIGNoaWxkRXZlbnRDYXB0dXJlICcpO1xuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgIC8vIEhBIDMxLUpBTi0yNCBBc3NpZ24gdmFsdWVzIHRvIGRyb3Bkb3duIHF1ZXN0aW9uXG4gICAgcXVlcy5pbnB1dCA9IGV2ZW50Py52YWx1ZU9iajtcbiAgICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXG4gIH1cblxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgc2V0U3ViUXVlc3Rpb25zJyk7XG4gICAgLy8gY29uc29sZS5sb2cocmVjb3Jkcyk7XG4gICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpO1xuICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgICB2YXIgYUluZGV4ID0gMDtcbiAgICAgIC8vIHNlYXJjaCBjaGFuZ2VkIGFzIHNlbWkgY29sb24gYmVjYXVzZSBvZiBhZGRyZXNzIGNvbnRhaW5zIGNvbW1hIFxuICAgICAgaWYgKCh0aGlzLmlucFZhbHVlLnNlYXJjaChcIjsgXCIpID09IC0xKSkge1xuICAgICAgIC8vIGNvbnN0IHdpdGhvdXRBbnN3ZXJTdHJpbmcgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoXCJhbnN3ZXJTdHJpbmc6IFwiLCBcIlwiKTsgLy9yZW1vdmUgdGhlIGFuc3dlciBzdHJpbmdcbiAgICAgICAvLyB0aGlzLmlucFZhbHVlID0gd2l0aG91dEFuc3dlclN0cmluZztcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyAnQEAjIyQkJyA7XG4gICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiB0aGlzLmlucFZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpKSB7XG4gICAgICAgICAgYUluZGV4Kys7XG4gICAgICAgICAgcWFNYXAuc2V0KGFJbmRleCwgYW5zU3RyKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCBmb3IgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCI7IFwiKSkge1xuICAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgcWFNYXAgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgc2V0dGluZyB2YWx1ZXMgZnJvbSBpbnB2YWx1ZSBxYSBtYXAgYXJlJyk7XG4gICAgLy8gY29uc29sZS5sb2cocWFNYXApO1xuXG4gICAgZm9yICh2YXIgcXVlcyBvZiByZWNvcmRzKSB7XG4gICAgICBpZiAocXVlcy5UeXBlX19jID09IFwiRmlsZVwiKSB7XG4gICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2M7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy52YWx1ZU5hbWUxKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFucyA9ICcnO1xuICAgICAgaWYgKHFhTWFwLmhhcyhxdWVzLlF1ZXN0aW9uX05vX19jKSkge1xuICAgICAgICAgIHF1ZXMuaW5wdXQgPSBxYU1hcC5nZXQocXVlcy5RdWVzdGlvbl9Ob19fYyk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIGZldGNoaW5nIG1hcCB2YWx1ZXMnKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgICBpZihxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpID4gMCl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYW5zd2VyIHN1cHBvc2VkIHRvIGJlIHRyaW1tZWQnKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgICAgYW5zID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcocXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSs2LHF1ZXMuaW5wdXQubGVuZ3RoKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGFucyk7XG4gICAgICAgICAgICBxdWVzLmlucHV0ID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcoMCxxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBpZiAoKHF1ZXMuVHlwZV9fYyA9PT0gXCJEYXRlXCIpICYmIChxdWVzLklzX0RhdGVfQmFja3dhcmRfX2MgfHwgcXVlcy5Jc19EYXRlX0ZvcndhcmRfX2MpKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSBiYWNrd2FyZC9mb3J3YXJkIGNvbmQnKTtcbiAgICAgICAgaWYgKHF1ZXMuSXNfRGF0ZV9CYWNrd2FyZF9fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgSXNfRGF0ZV9CYWNrd2FyZF9fYycpO1xuICAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlU2luY2UgPSB7XG4gICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCkgKyAxLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXMuSXNfRGF0ZV9Gb3J3YXJkX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBJc19EYXRlX0ZvcndhcmRfX2MnKTtcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVVudGlsID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHF1ZXMpO1xuICAgICAgZm9yKHZhciBpPTA7IGk8dGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoO2krKyl7XG4gICAgICAgIC8vIHRvIHNob3cvaGlkZSB0aGUgZGVwZW5kZW50IGRyb3Bkb3duIG9ubHkgZmllbGQgdXNpbmcgdGhlIGRyb3BEb3duT25seSBib29sZWFuXG4gICAgICAgIGlmKHRoaXMuc3ViUXVlc3Rpb25zW2ldLlNpemVfX2MgPT0gNCl7XG4gICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gdHJ1ZTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKGFucyAhPSAnJyl7XG4gICAgICAgIGZvcih2YXIgYW4gb2YgKGFucy5zcGxpdCgnJCRAQCMjJykpKXtcbiAgICAgICAgICB2YXIgc1EgPSBuZXcgUXVlc3Rpb24oKTtcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHNRLHF1ZXMpO1xuICAgICAgICAgIHNRLmlucHV0ID0gYW47XG4gICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChzUSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudmFsdWVOYW1lMSAhPSBudWxsICYmIHRoaXMudmFsdWVOYW1lMS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmJvb2tGbGFnQWNjZXB0ID0gdGhpcy52YWx1ZU5hbWUxLnNwbGl0KFwiO1wiKTtcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5zdWJRdWVzdGlvbnMpO1xuICAgIH1cbiAgICB0aGlzLnN0cnVjdExvY2FsU3ViUXVlc3Rpb24obnVsbCk7XG4gICAgLy8gSEEgMDJGRUIyNCBPbiBFZGl0IHRvIGRpc3BsYXkgdGhlIHZhbHVlIHVzaWluZyB0aGlzXG4gICAgaWYodGhpcy5hbGxJbnB1dFZhbHVlcy5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGZvcihsZXQgc2luZ2xlSW5wdXQgb2YgdGhpcy5hbGxJbnB1dFZhbHVlcyl7XG4gICAgICAgICAgaWYoZWxlbWVudC5JZCA9PSBzaW5nbGVJbnB1dC5JZCl7XG4gICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gc2luZ2xlSW5wdXQuaW5wdXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvcHRpb25DaGFuZ2Uoc2VsVmFsdWUpIHtcbiAgICBsZXQgcmFkaW9UcmFja2luZ0lkOiBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAodmFyIG9wdCBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ29wdGlvbkNoYW5nZSBUcmFja2luZ0lkJytvcHQuVHJhY2tpbmdfSURfX2MpO1xuICAgICAgaWYgKG9wdC5WYWx1ZV9fYyA9PSBzZWxWYWx1ZSkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgaWYnK29wdC5UcmFja2luZ19JRF9fYylcbiAgICAgICAgcmFkaW9UcmFja2luZ0lkID0gb3B0LlRyYWNraW5nX0lEX19jO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChyYWRpb1RyYWNraW5nSWQpO1xuICAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgIC8vIC8vY29uc29sZS5sb2coJ2luc2lkZSBvcHRpb25DaGFuZ2UgdXNpbmcgJyArIHNlbFZhbHVlKTtcblxuICAgIHRoaXMuaW5wVmFsdWUgPSBzZWxWYWx1ZTtcbiAgfVxuXG4gIGNsZWFyRXJyb3IoKSB7XG4gICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzSWQpIHtcbiAgICBxdWVzSWQuZXJyb3IgPSBudWxsO1xuICB9XG5cbiAgaW5wdXRWYWxpZGF0ZShlKSB7XG4gICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcbiAgICAvLyBPbmx5IEFTQ0lJIGNoYXJhY3RlciBpbiB0aGF0IHJhbmdlIGFsbG93ZWRcbiAgICB2YXIgQVNDSUlDb2RlID0gKGUud2hpY2gpID8gZS53aGljaCA6IGUua2V5Q29kZTtcbiAgICBpZiAoQVNDSUlDb2RlID4gMzEgJiYgKEFTQ0lJQ29kZSA8IDQ4IHx8IEFTQ0lJQ29kZSA+IDU3KSl7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBDQ09uQ2hhbmdlKGlucFZhbHVlOiBzdHJpbmcpIHtcblxuICAgICAgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gNykge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDEyKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTcpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyMikge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuXG4gIH1cblxuICBpc05vdFZhbGlkQWNjTnVtYmVyKHM6IHN0cmluZykge1xuICAgIHMgPSBzLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG4gICAgcyA9ICdFUycgKyBzO1xuICAgIHZhciBpc05vdFZhbGlkU3RyID0gZmFsc2U7XG4gICAgaWYgKHMubGVuZ3RoID09IDI0KSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPD0gMSAmJiAvW2EtekEtWl0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZhbGlkIGNoYXI6IFwiICsgcy5jaGFyQXQoaSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPiAxICYmIC9bMC05XS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgbnVtZXJpYzogXCIgKyBzLmNoYXJBdChpKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGNoYXJcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgYWNjIG51bWJlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzTm90VmFsaWRTdHI7XG4gIH1cblxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5JZCA9PSBxdWVzSWQpO1xuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICAgc3EuZXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHVwbG9hZEZpbGUoZXZlbnQscXVlcz86YW55KSB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHVwbG9hZCcpO1xuICAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgIHRoaXMuZmlsZVR5cGVJbmNvcnJlY3QgPSBmYWxzZTtcbiAgICB2YXIgbG9jYWwgPSB0aGlzO1xuICAgIGxvY2FsLmF0dGFjaG1lbnQgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAgLy8gVmFsaWRhdGUgdGhlIGZpbGUgZXh0ZW5zaW9uXG4gICAgLy9jb25zb2xlLmxvZyhsb2NhbC5hdHRhY2htZW50KTtcbiAgICBsZXQgZmlsZU5hbWVXaXRoVHlwZTogc3RyaW5nID1cbiAgICAgIGxvY2FsLmF0dGFjaG1lbnQgJiYgbG9jYWwuYXR0YWNobWVudC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKFxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBnXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wbmdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBkZlwiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBlZ1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpY1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpZlwiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBHXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QTkdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBERlwiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBFR1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJQ1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJRlwiKVxuICAgICkge1xuICAgICAgbG9jYWwuZmlsZVR5cGVJbmNvcnJlY3QgPSB0cnVlO1xuICAgIH1cbiAgICAvLyBSZXR1cm4gd2hlbiB0aGUgZmlsZSB0eXBlIGlzIGluY29ycmVjdFxuICAgIGlmIChsb2NhbC5maWxlVHlwZUluY29ycmVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgZmlsZUNvbnRlbnQ6IGFueTtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmaWxlQ29udGVudCA9IHJlYWRlci5yZXN1bHQ7XG4gICAgICBsb2NhbC5maWxlRXhjZWVkZWRMaW1pdCA9IGxvY2FsLmF0dGFjaG1lbnQuc2l6ZSA+IDMyNDI4ODA7IC8vVmFsaWRhdGluZyBmaWxlIHNpemVcbiAgICAgIC8vIFVwbG9hZCB0aGUgZmlsZSB0byBTYWxlc2ZvcmNlIHdoZW4gdGhlIGxpbWl0IGlzIHdpdGhpbiByYW5nZVxuICAgICAgaWYgKCFsb2NhbC5maWxlRXhjZWVkZWRMaW1pdCkge1xuICAgICAgICBsZXQgZmlsZVdyYXBwZXIgPSBuZXcgQXR0YWNobWVudFdyYXBwZXIoKTtcbiAgICAgICAgZmlsZVdyYXBwZXIucGFyZW50SWQgPSBsb2NhbC5hYkl0ZW0uSWQ7XG4gICAgICAgIGZpbGVXcmFwcGVyLmZpbGVOYW1lID0gbG9jYWwuYXR0YWNobWVudC5uYW1lO1xuICAgICAgICBmaWxlV3JhcHBlci5maWxlQ29udGVudCA9IGZpbGVDb250ZW50O1xuICAgICAgICBsb2NhbC5jcmVhdGVBdHRhY2htZW50KGZpbGVXcmFwcGVyKTtcbiAgICAgICAgcXVlcy5pbnB1dCA9IGZpbGVXcmFwcGVyLmZpbGVOYW1lO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZXZlbnQudGFyZ2V0LmZpbGVzWzBdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgICBsZXQgY3JlYXRlZEF0dGFjaG1lbnQ6IEF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudChcbiAgICAgIHJlc3BvbnNlLmF0dGFjaG1lbnRJZCxcbiAgICAgIHJlc3BvbnNlLmF0dGFjaG1lbnROYW1lLFxuICAgICAgdGhpcy5hdHRhY2htZW50Lmxhc3RNb2RpZmllZERhdGVcbiAgICApO1xuICAgIHRoaXMuYXR0YWNobWVudHMucHVzaChjcmVhdGVkQXR0YWNobWVudCk7XG4gICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIHRoaXMuYXR0YWNobWVudHMpO1xuICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICB9O1xuXG4gIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzW2ldLmF0dGFjaG1lbnRJZCA9PT0gdGhpcy5hdHRhY2htZW50SWQpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUnKTtcbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlJyk7XG4gIH07XG5cbiAgaGFuZGxlU3VibWl0Q2xpY2soKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLlN1Ym1pdF9UcmFja2luZ19JRF9fYyk7XG4gICAgdGhpcy51cGRhdGVBbnN3ZXJCb29rKHRoaXMuYWJJdGVtLklkKTtcbiAgfVxuXG4gIGhhbmRsZUNhbmNlbENsaWNrKCkge1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5DYW5jZWxfVHJhY2tpbmdfSURfX2MpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBdHRhY2htZW50ID0gKGZpbGVXcmFwcGVyOiBhbnkpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiQXR0YWNobWVudFwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlcildLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgICAvLyApO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQXR0YWNobWVudCcsJ2NyZWF0ZScsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgIChkYXRhKT0+e1xuICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUoZXJyb3IpO1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUsXG4gICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50SWQ6IHN0cmluZykge1xuICAgIHRoaXMuYXR0YWNobWVudElkID0gYXR0YWNobWVudElkO1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChcImRlbGV0ZUF0dGFjaG1lbnRcIik7XG4gICAgdGhpcy5kZWxldGVTRkF0dGFjaG1lbnQoYXR0YWNobWVudElkKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlU0ZBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJkZWxldGVcIiwgZmlsZUlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZSxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZVxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdkZWxldGUnLGZpbGVJZCAsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlKGVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcblxuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJBdHRhY2htZW50XCIsIFwiZGVsZXRlXCIsIGZpbGVJZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlLFxuICAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEZpbGVOYW1lKGZpbGVOYW1ld2l0aElkYW5kVHlwZSkge1xuICAgIC8vdHJ1bmNhdGUgZmlsZSBwYXRoXG4gICAgdmFyIGZpbGVOYW1lV2l0aFR5cGUgPSBmaWxlTmFtZXdpdGhJZGFuZFR5cGUuc3Vic3RyKFxuICAgICAgZmlsZU5hbWV3aXRoSWRhbmRUeXBlLmluZGV4T2YoXCI6Ojo6XCIpICsgNFxuICAgICk7XG4gICAgcmV0dXJuIGZpbGVOYW1lV2l0aFR5cGU7IC8vZmlsZU5hbWVXaXRoVHlwZS5yZXBsYWNlKC9eKC4qKFxcL3xcXFxcKSkoLispJC8sICckMycpO1xuICB9XG4gIGZpbGVVSSgpIHtcbiAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB9XG4gIH1cblxuICAvL1VwZGF0ZSBmdW5jdGlvbiBmb3IgY2F0ZWdvcml6YXRpb25cbiAgLy8gc3RlcHBlckNhdGVnKCkge1xuICAvLyAgIHRoaXMuZmlyc3RGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gIC8vICAgICBmaXJzdEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgLy8gICB9KTtcbiAgLy8gICB0aGlzLnNlY29uZEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcbiAgLy8gICAgIHNlY29uZEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgLy8gICB9KTtcblxuICAvLyB9XG5cbiAgLy8gVXBkYXRlIEZ1bmN0aW9uIGZvciB0aGUgUHJvZ3Jlc3MgQmFyXG4gIHVwZGF0ZVByb2dyZXNzKCkge1xuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcbiAgICAgIGxldCBqID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucG9zc2liaWxpdGllcy50b3RhbDsgaSsrKSB7XG4gICAgICAgIHZhciBwYXRocG9zcyA9IE9iamVjdC52YWx1ZXModGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW2ldLnF1ZXN0aW9ucyk7XG4gICAgICAgIGlmIChwYXRocG9zc1t0aGlzLnBhdGhxdWVzdGlvbl0gPT09IHRoaXMuY3VycmVudE5hbWUpIHtcbiAgICAgICAgICBqLnB1c2goaSk7XG4gICAgICAgICAgdGhpcy5jaGVjayA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jaGVjayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IGpbMF07XG4gICAgICB9XG4gICAgICBpZiAoai5sZW5ndGggPiAxKSB7XG4gICAgICAgIHZhciB3aWR0aCA9XG4gICAgICAgICAgOTAgKiAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAvIHRoaXMucG9zc2liaWxpdGllcy5tYXhRdWVzdGlvbnMpO1xuICAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICAgfSBlbHNlIGlmIChqLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgd2lkdGggPVxuICAgICAgICAgIDkwICpcbiAgICAgICAgICAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAvXG4gICAgICAgICAgICB0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbdGhpcy5jb3VudF0uY291bnQpO1xuICAgICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBNYXRoLnJvdW5kKHdpZHRoKSArIFwiJVwiO1xuICAgICAgfVxuICAgICAgdGhpcy5wZXJjZW50ID0gK01hdGgucm91bmQod2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIHRvd25OYW1lKGFyZWEpIHtcbiAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBhcmVhLnRvd247XG4gICAgLy9jb25zb2xlLmxvZygndGhpcyB2YWx1ZT0nK3RoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICB9XG5cbiAgZ2V0VG93bkxvY2FsKCkge1xuICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3MpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZhbC50b3duLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyh2YWwuY291bnRyeSlcbiAgICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcbiAgICAgICAgICBpZiAodGhpcy50ZW1wb0FkZHJlc3MubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuICB9XG5cbiAgY2xlYXJMaXN0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgICB9LCA1MDApO1xuICB9XG5cbiAgc2V0U2VhcmNoTGlzdFdpZHRoKCkge1xuICAgIC8vdG8gcmVzaXplIHNlYXJjaCBsaXN0IGJhc2VkIG9uIHRoZSBzY3JlZW4gc2l6ZVxuICAgIGNvbnN0IHNlYXJjaEJveFdpZHRoID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXV0b2NvbXBsZXRlLWlucHV0XCIpLm9mZnNldFdpZHRoO1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS53aWR0aCA9IHNlYXJjaEJveFdpZHRoICsgXCJweFwiO1xuICB9XG5cbiAgICBnZXRDb2RlKCl7XG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMuYWxsQWRkcmVzcykge1xuICAgICAgICAgIGlmICh2YWwuemlwQ29kZS5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh2YWwuY291bnRyeSlcbiAgICAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXG4gICAgICAgICAgICBpZiAodGhpcy50ZW1wb0FkZHJlc3MubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XG4gICAgfVxuICAgIGdldFBvc3RhbGNvZGUodmFsdWUpe1xuICAgICB0aGlzLnBsYWNlcz1bXTtcbiAgICAgdGhpcy5wcm92aW5jZT1bXTtcbiAgICAgIHZhciBwcm92aW5jZTtcbiAgICAgIHZhciB0b3duO1xuICAgICAgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUgPSB2YWx1ZS56aXBDb2RlO1xuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWUuY291bnRyeTtcbiAgICAgIHRoaXMudGVtcG9BZGRyZXNzPVtdO1xuXG4gXG4gICAgICBmb3IodmFyIHZhbCBvZiB0aGlzLmxvY2FsYWRkcmVzcyl7XG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID09IHZhbC56aXBDb2RlICl7XG4gICAgICAgICAgdGhpcy5wbGFjZXMucHVzaCh2YWwpO1xuICAgICAgICAgIHRoaXMucHJvdmluY2UucHVzaCh2YWwpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbC5jb3VudHJ5O1xuICAgICAgICAgIHByb3ZpbmNlID0gdmFsLnByb3ZpbmNlXG4gICAgICAgICAgdG93biA9IHZhbC50b3duO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih0aGlzLnBsYWNlcy5sZW5ndGggPT0gMSl7XG4gICAgICAgIFxuICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2UgPXByb3ZpbmNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9IHRvd247XG4gICAgICB9ZWxzZSBpZih0aGlzLnBsYWNlcy5sZW5ndGggPjEgfHwgdGhpcy5wbGFjZXMubGVuZ3RoID09MCl7XG4gICAgICAgIFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaXR5ID0nJztcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2U9Jyc7XG4gICAgICB9XG4gICAgfVxuICAgIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPT0gNSl7XG4gICAgICAgIHRoaXMuZ2V0UG9zdGFsY29kZSh7emlwQ29kZTp0aGlzLnNlbGVjdGVkUG9zdGFsY29kZX0pO1xuICAgICAgfVxuXG4gICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdExpc3QnKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfSwgNTAwKTtcbiAgIH1cblxuXG4gICAvL1BsdXMgYnV0dG9uIGltcGxlbWVudGF0aW9uLlxuICAgc3RydWN0TG9jYWxTdWJRdWVzdGlvbihxdWVzOiBMb2NhbFF1ZXN0aW9uKXtcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24nKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnN1YlF1ZXN0aW9ucy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIHZhciBsb2NhbFN1YlF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLklkID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uSWQ7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5OYW1lID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uTmFtZTtcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlF1ZXN0aW9uX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uUXVlc3Rpb25fX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5RdWVzdGlvbl9UZXh0X19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uUXVlc3Rpb25fVGV4dF9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlR5cGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5UeXBlX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uVGl0bGVfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5UaXRsZV9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlN1YlRpdGxlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uU3ViVGl0bGVfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5Jc19PcHRpb25hbF9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLklzX09wdGlvbmFsX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uRXJyb3JfTWVzc2FnZV9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkVycm9yX01lc3NhZ2VfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLkdyb3VwX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uR3JvdXBfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlF1ZXN0aW9uX05vX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5BbGxvd2VkX0ZpbGVfRXh0ZW5zaW9uc19fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnVuaXF1ZVN1YlFJZCA9ICcnK3RoaXMuc3ViUXVlc3Rpb25zW2ldLklkICsgaTsgXG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pbnB1dCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xuICAgICAgICAgIHRoaXMubG9jYWxTdWJRdWVzdGlvbnMucHVzaChsb2NhbFN1YlF1ZXN0aW9uKTtcbiAgICAgIH1cbiAgLy8gY29uc29sZS5sb2coJ2ZpbmFsIGxvY2FsIHN1YiBxdWVzdGlvbnMnKTtcbiAgLy8gY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyk7XG4gIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuICB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zID0gW107XG4gIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBrZXkgbG9jYWxTdWJRTWFwIG1hcCcpO1xuICAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XG4gIH1cblxuICBhZGRJbnB1dEJveChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbiwgaW5kZXg6IG51bWJlcil7XG4gICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgIHZhciBxSW5kZXggPSBhcnJhLmluZGV4T2YocXVlc3Rpb24pO1xuICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgICBPYmplY3QuYXNzaWduKHF1ZXMsIHF1ZXN0aW9uKTtcbiAgICAvL2NvbnNvbGUubG9nKChxdWVzLnVuaXF1ZVN1YlFJZCkuc3Vic3RyaW5nKDE4LCAocXVlcy51bmlxdWVTdWJRSWQpLmxlbmd0aCkrMSk7XG4gICAgaWYodGhpcy5rZXlJbmRleCA9PSBpbmRleCl7XG4gICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuSWQgKyAoU3RyaW5nKGluZGV4KzEpKTtcbiAgICAgIHRoaXMua2V5SW5kZXgrKztcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMua2V5SW5kZXgrKztcbiAgICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5JZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgIH1cbiAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgYXJyYS5zcGxpY2UocUluZGV4KzEsIDAsIHF1ZXMpO1xuXG4gICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLGFycmEpO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlFNYXApO1xuICB9XG5cbiAgcmVtb3ZlQWRkcmVzcyhxdWVzVW5pcXVlSWQ6IHN0cmluZywgcU5hbWU6IHN0cmluZykge1xuICAgIC8vY29uc29sZS5sb2cocXVlc1VuaXF1ZUlkKVxuICAgIHZhciB2YWwgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgIHZhciBrZXlpbmRleCA9IDA7XG5cbiAgICBmb3IobGV0IGk9MDsgaTx2YWwubGVuZ3RoOyBpKyspe1xuICAgICAgaWYodmFsW2ldLk5hbWUgPT0gcU5hbWUpe1xuICAgICAgICBrZXlpbmRleCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkgJiYga2V5aW5kZXggPjEpe1xuICAgICAgdmFyIHJlb3JkZXIgPSB2YWwuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnVuaXF1ZVN1YlFJZCAhPT0gcXVlc1VuaXF1ZUlkKVxuICAgICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLHJlb3JkZXIpO1xuICAgICAga2V5aW5kZXgtLTtcbiAgICB9XG4gIH1cblxuICBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhpZDogU3RyaW5nKXtcbiAgICByZXR1cm4gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KGlkKTtcbiAgfVxuXG4gIC8vU2luZ2xlIEFkZCBidXR0b24gZnVuY3Rpb25hbGl0eSBmb3IgTGlzdCB0eXBlXG5BZGQocXVlc3Rpb246IExvY2FsUXVlc3Rpb24pe1xuICAgIHRoaXMuYWRkRmxhZyA9ICBmYWxzZTtcbiAgICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgdmFyIGluZGV4ICA9IGFycmEubGVuZ3RoO1xuICAgIHZhciBhID0gYXJyYS5zbGljZSgtMSkucG9wKCk7XG4gICAgdGhpcy5pbmRleENvdW50ICA9IGEuUXVlc3Rpb25fTm9fX2M7XG4gICAgXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmluZGV4Q291bnQgOyBpKyspIHtcbiAgICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgICAgIE9iamVjdC5hc3NpZ24ocXVlcywgcXVlc3Rpb25baV0pO1xuICAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLklkICsgKFN0cmluZyh0aGlzLmtleUluZGV4KSk7XG4gICAgICBxdWVzLmlucHV0ID0gJyc7XG4gICAgICBhcnJhLnNwbGljZShpbmRleCsodGhpcy5pbmRleENvdW50LTEpLCAwLCBxdWVzKTtcbiAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsYXJyYSk7XG4gICAgfSAgXG4gICAgdGhpcy5hZGRGbGFnID0gdHJ1ZTtcbiAgfVxuICBcbiAgaGFuZGxlTG9jYXRpb25TZWxlY3RlZChsb2NhdGlvbjogYW55LHF1ZXM6YW55KSB7XG4gICAgcXVlcy5pbnB1dCA9IGxvY2F0aW9uO1xuICB9XG5cbiAgc2VsZWN0ZWRJbnB1dChpbnB1dDphbnkgLHF1ZXM6YW55KXsgXG4gICAgcXVlcy5pbnB1dCA9IGlucHV0O1xuICB9XG5cbiAgaGFuZGxlVGV4dGFyZWFWYWx1ZUNoYW5nZSh2YWx1ZSA6c3RyaW5nKXtcbiAgICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGV4dC1hcmVhIHRleHQ6JywgdmFsdWUpO1xuICB9XG4gIGdldERhdGEoZGF0YTphbnkpe1xuICAgY29uc29sZS5sb2coJ3RhYmxlIGRhdGEnLGRhdGEpO1xuICB9XG5cbiAgZGVwZW5kZW50Q2hhbmdlKHZhbHVlOmFueSl7XG4gIHRoaXMubmV4dFZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBkaXNwbGF5RGF0ZShkYXRlU2VsZWN0ZWQ6IGFueSxxdWVzOmFueSl7XG4gICAgLy8gUGFyc2UgdGhlIGRhdGUgc3RyaW5nIHVzaW5nIG1vbWVudCBhbmQgYXNzaWduIGl0IHRvIHRoaXMuc2VsZWN0ZWREYXRlXG4gICAgcXVlcy5pbnB1dCA9IG1vbWVudChkYXRlU2VsZWN0ZWQudmFsdWUgLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBnZXRLZXkoaXRlbTogYW55KTogYW55IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gIH1cbiAgXG4gIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gIH1cbn0iLCI8IS0tIFNwaW5uZXIgLS0+XG48bmd4LXNwaW5uZXIgc2l6ZT1cIm1lZGl1bVwiIFtuYW1lXT1cInNwaW5uZXJOYW1lXCIgW3R5cGVdPVwic3Bpbm5lclR5cGVcIj48L25neC1zcGlubmVyPlxuPCEtLSBjdXN0b20gbG9hZGVyIC0tPlxuPCEtLSA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+IC0tPlxuPCEtLSBCYWNrIFByb2Nlc3NpbmcgLS0+XG48IS0tIDxkaXYgKm5nSWY9XCJiYWNraWNvbiA9PSBmYWxzZVwiID5cbiAgPGRpdiBjbGFzcz1cImJhY2tpY29uXCIgPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUJhY2tDbGljaygpXCIgW2NsYXNzXT1cIiBhYkl0ZW0/LlN0YXR1c19fYyA9PSAnQ29tcGxldGVkJyA/ICdzdW1tYXJ5LXZvbHZlcic6J2FwcC1iYWNrMSdcIj5cbiAgICA8aW1nIGNsYXNzPVwiaWNvbi1hcnJvdy1iYWNrXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWFycm93LWJhY2sucG5nXCIgYWx0PVwiU2Nyb2xsIGRvd25cIj4ge3sgcWJJdGVtPy5CYWNrX19jIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+IC0tPlxuXG48IS0tIFF1ZXN0aW9uIEhhbmxkaW5nIC0tPlxuPCEtLSBWRCByZW1vdmVkIHVud2FudGVkIGNvbmRpdGlvbiAtLT5cbjxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW1cIiBjbGFzcz1cInF1ZXN0aW9uZGl2MSBwYWRkLWJvdHRvbVwiPlxuICA8IS0tIFByb2dyZXNzIEJhciAmIFRpdGxlIC0tPlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlRpdGxlX19jXCI+XG4gICAgPGgxPnt7IHF1ZXN0aW9uSXRlbT8uVGl0bGVfX2MgfX08L2gxPlxuICAgIDxkaXY+e3sgcXVlc3Rpb25JdGVtPy5TdWJUaXRsZV9fYyB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFByb2dyZXNzICYgR3JvdXBpbmcgLS0+XG4gIDxkaXY+XG4gICAgPCEtLSBQaWUgQ2hhcnQgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7IGJnQ29sb3I6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3NcIiAqbmdJZj1cInFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICAgIDxjaXJjbGUtcHJvZ3Jlc3MgY2xhc3M9XCJ0aXRsZWJhclwiIFtwZXJjZW50XT1cInRoaXMucGVyY2VudFwiIFtyYWRpdXNdPVwiNDBcIiBbc3BhY2VdPVwiLTRcIiBbb3V0ZXJTdHJva2VXaWR0aF09XCI0XCJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPSBcIicjZGQyZTEzJ1wiIFtiYWNrZ3JvdW5kR3JhZGllbnRTdG9wQ29sb3JdPVwiJyNmOWJmYmQnXCIgW3RpdGxlQ29sb3JdPVwiJyNmM2VkZWQnXCIgXG4gICAgICAgIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiIFt0aXRsZV09XCJ0aGlzLnBlcmNlbnQrJyUnXCIgW3Nob3dTdWJ0aXRsZV09XCJmYWxzZVwiIFtzaG93QmFja2dyb3VuZF09XCJ0cnVlXCIgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIjMwMFwiXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XG4gICAgICAgIDwvY2lyY2xlLXByb2dyZXNzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNob3cgdGhlIEdyb3VwL01vZHVsZSByZWxhdGVkIHRvIHRoZSBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkdyb3VwX19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHF1ZXN0aW9uYWxpZ246ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibnh0LWxhcmdlVGl0bGVcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LWZvbnQ2IG15dC10ZXh0M1wiPlxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uR3JvdXBfX2MgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5TdWJfVGV4dF9fYyAhPSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250NSBteXQtdGV4dDFcIj57e3F1ZXN0aW9uSXRlbT8uU3ViX1RleHRfX2N9fTwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlN1Yl9UZXh0X19jID09PSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250MTAgbXl0LXRleHQyXCI+e3txdWVzdGlvbkl0ZW0/LlN1Yl9UZXh0X19jfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFF1ZXN0aW9uIEhhbmRsaW5nIC0tPlxuICAgIDwhLS0gVkQgMTBBdWcyNC0gcXVlc3Rpb24gbm8gLS0+XG4gIDxkaXY+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9UZXh0X19jXCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxuICAgICAgPHNwYW4+e3txdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX05vX19jfX0uPC9zcGFuPlxuICAgICAgPHAgY2xhc3M9XCJueHQtbGFiZWxcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgIHt7cXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFRpdGxlIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5Jc19UaXRsZV9fY1wiPlxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jICE9ICdCb29rJyAmJiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2MhPSc2JyAmJiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2MhPSc5J1wiPiBcbiAgICAgICAgPGgzIGNsYXNzPVwicXVlc3Rpb25hbGlnbiAgbXl0LWZvbnQzIG15dC1hbGlnbiBteXQtdGV4dDRcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jfX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSB1bndhbnRlZCBzdHlsaW5nIGNsYXNzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxdWVzdGlvbkl0ZW0uSXNfVGl0bGVfX2NcIiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdoZWFkZXItc3R5bGUnIDogJ3F1ZXN0aW9uLWYtc2l6ZSdcIj5cbiAgICAgIDxkaXYgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIiA+XG4gICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYyB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlR5cGVfX2MgPT0gJ0Jvb2snXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jPT0nNidcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTMyMVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+XG4gICAgICAgICAge3sgcXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jIH19XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlR5cGVfX2MgPT0gJ0ZpbGUnIFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9Ob19fYz09JzknXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC0zNDVcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jfX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBZGRpdGlvbmFsIEluZm8gLS0+XG4gIDwhLS0gVGhlIGJlbG93IGNvZGUgY2FuIGJlIHdyaXR0ZW4gZWZmZWN0aXZlbHkgbmVzdGVkIG5nSWYgZm9yIFJpY2ggVGV4dCAmIE90aGVyIG9udyBmb3IgUHJvZ3Jlc3MgQmFyIC0tPlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCIgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibnh0LWFkZGl0aW9uYWwgXCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uQWRkaXRpb25hbF9SaWNoX19jICYmICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnQgcXVlcy1hbGVydDFcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mbyBmYS0zeCBpcG9zaXRpb24gaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgPGRpdiBjbGFzcz1cImluZm9kaXZcIiBbaW5uZXJIVE1MXT1cImlubmVyaHRtbFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIERyb3Bkb3duLS0+XG4gIDxkaXYgKm5nSWY9XCJkcm9wZG93bkZsYWdcIiA+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPHNlbGVjdCBjbGFzcz1cIm54dGRyb3Bkb3duXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdkdC1saW5lIG54dC1teXQtYWxpZ24zIG54dC1teXQtYWxpZ24yIGRwRG93biBueHQtZHJvcGJveCBkb3duMSBteXQtZHJvcGJveCBteXQtYm9yZGVyLXIgbXl0LWZvbnQxJzogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgJ2N1c3RvbS1zZWxlY3QnOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgfVwiIGNsYXNzPVwibXItc20tMiBkZC1oZWlnaHQgbnh0LWRyb3Bib3ggXCIgIGlkPVwiZHJvcGRvd25cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNoYW5nZSk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgPyAnI2ZmZicgOiAnJ1xuICAgICAgICB9fVwiIHN0eWxlLmNvbG9yPVwie3sgcXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIiBjbGFzcz1cIm9wdGlvblwiIHZhbHVlPVwie3sgb3B0LlZhbHVlX19jIH19XCI+XG4gICAgICAgICAge3sgb3B0LlZhbHVlX19jIH19XG4gICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiLlwiIGRpc2FibGVkIGhpZGRlbj57eydwbGVhc2VNYWtlQ2hvaWNlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tVkQgUmFkaW8gdXBkYXRlIC0tPlxuICA8ZGl2ICpuZ0lmPVwicmFkaW9GbGFnIHx8IGRhdGFGbGFnXCIgY2xhc3M9XCJcIj5cbiAgICA8c3BhbiAqbmdJZj1cInRoaXMucXVlc3Rpb25JdGVtLmVycm9yXCIgY2xhc3M9XCJueHQtZXJyb3ItbXNnXCI+IHt7IHF1ZXN0aW9uSXRlbT8uRXJyb3JfTWVzc2FnZV9fYyB9fTwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWN1c3RvbS1yYWRpby1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgXG4gICAgICBbY2xhc3NdPVwiIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uIGludmFsaWQnIDogJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uJ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIFtpZF09XCJvcHQuVmFsdWVfX2NcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIlxuICAgICAgICAgIG5hbWU9XCJpbnBWYWx1ZVwiXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdC5WYWx1ZV9fY1wiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LlZhbHVlX19jKVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpby1sYWJlbFwiIFtmb3JdPVwib3B0LlZhbHVlX19jXCI+IHt7IG9wdC5WYWx1ZV9fYyB9fTwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIiBjbGFzcz1cInJhZGlvIG54dC1yYWRpb09wdGlvblwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW9jb250YWluZXIgY29udGFpbmVyIG15dC1mb250NFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbaWRdPVwib3B0LklkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIG5hbWU9XCJpbnBWYWx1ZVwiIFt2YWx1ZV09XCJvcHQuVmFsdWVfX2NcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJvcHRpb25DaGFuZ2Uob3B0LlZhbHVlX19jKVwiIC8+XG4gICAgICAgICAge3sgb3B0LlZhbHVlX19jIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PiAgXG4gIDwhLS0gQ2hlY2tib3ggLS0+XG4gIDxkaXYgKm5nSWY9XCJjaGVja2JveEZsYWdcIiBjbGFzcz1cIlwiPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmVycm9yXCIgY2xhc3M9XCJjb25kLWRpdjJcIj5cbiAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uRXJyb3JfTWVzc2FnZV9fYyB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJueHQtY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvblZhbHVlc1wiIGNsYXNzPVwibnh0LWNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibnh0LWNvbnRhaW5lcjFcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm54dC1jaGVja2JveFwiIFtpZF09XCJpdGVtLklkXCIgWyhuZ01vZGVsKV09XCJpdGVtLmNoZWNrZWRcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1jaGVja2JveC1sYWJlbFwiPnt7IGl0ZW0uVmFsdWVfX2MgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZXh0IC0tPlxuICA8ZGl2ICpuZ0lmPVwidGV4dEZsYWdcIj5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBUbyByZWR1Y2UgdGhlIG1hcmdpbiAtLT5cbiAgICA8ZGl2IFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzdGlvbkl0ZW0/LlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiPlxuICAgICAgPGlucHV0IGNsYXNzPVwibnh0LWlucHV0XCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgXG4gICAgICAgaWQ9XCJ0ZXh0LWlucHV0LWlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XG4gICAgICA8IS0tIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgbnh0LWNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPiAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZXh0IEFyZWEgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0YUZsYWdcIiA+XG4gICAgPGRpdj5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm54dC1pbnB1dCBueHQtdGV4dC1hcmVhXCIgaWQ9XCJ0YS1pbnB1dC1pZFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAoZm9jdXNvdXQpPVwidGFGb2N1c091dCA9IHRydWVcIlxuICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiPjwvdGV4dGFyZWE+XG4gICAgICA8IS0tIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgbnh0LWNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCI+PC9pPiAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBDQyBOdW1iZXIgRm9ybWF0IC0tPlxuICA8ZGl2ICpuZ0lmPVwibnVtYmVyRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJUZXh0XCIgcGxhY2Vob2xkZXI9XCIwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMFwiIFtuZ0NsYXNzXT1cInsgYm94b3V0bGluZTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cIm51bWJlci1pbnB1dC1pZFwiIChuZ01vZGVsQ2hhbmdlKT1cIkNDT25DaGFuZ2UoJGV2ZW50KVwiIHJlcXVpcmVkPVwiXCIgbWF4bGVuZ3RoPVwiMjlcIlxuICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXjAtOSBdL2csJycpO1wiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6LXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIC8+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjogIzg3YmUxYzsgbWFyZ2luLWxlZnQ6IC0ycmVtOyB6LWluZGV4OiAxOyBwYWRkaW5nOiA1cHg7XCJcbiAgICAgICAgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gRU5ELS0+XG5cbiAgPCEtLSBBbHBoYU51bWVyaWMgLS0+XG4gIDxkaXYgKm5nSWY9XCJhbHBoYW51bWVyaWNGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj4gPCEtLVVJIG5vdCBjb21wbGV0ZWQtLT5cbiAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246cmVsYXRpdmU7XCI+XG4gICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgPGlucHV0IHR5cGU9dGV4dCBwbGFjZWhvbGRlcj1cInt7J3plcm9PZlplcm8nIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIHN0eWxlPVwicGFkZGluZzo1cHggNXB4IDVweCAxNTBweDtcIiBpZD1cInlvdXJpZGhlcmVcIi8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRW1haWwgLS0+XG4gIDxkaXYgKm5nSWY9XCJlbWFpbEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgaWQ9XCJlbWFpbC1pbnB1dC1pZFwiXG4gICAgICAgIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgLz5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiAjODdiZTFjOyBtYXJnaW4tbGVmdDogLTJyZW07IHotaW5kZXg6IDE7IHBhZGRpbmc6IDVweFwiXG4gICAgICAgICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGF0ZVRpbWUgLS0+XG4gIDxkaXYgKm5nSWY9XCJkdEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nWmVybyBueHRteXQtdGltZTFcIiA+XG4gICAgPCEtLSBFcnJvciBIYW5kbGluZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuXG4gICAgPCEtLSBEYXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJkYXRlRmxhZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRoZXNlIGxhYmVscyB3ZXJlIG9jY3VwaW5nIHRoZSBlbXB0eSBzcGFjZSB3aGVuIGRhdGUgcXVlc3Rpb24gY29tZXMtLT5cbiAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5EYXRlX1RleHRfX2MgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IEFkZGl0aW9uYWwgcGFyYW0gdG8gdXBkYXRlIHRoZSBxdWVzdGlvbiAtLT5cbiAgICAgICAgICA8bXktZGF0ZS1waWNrZXIgbmFtZT1cIm15ZGF0ZVwiIFtvcHRpb25zXT1cIm15RGF0ZVBpY2tlck9wdGlvbnNcIiBpZD1cImRhdGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudCwgcXVlc3Rpb25JdGVtKVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJ7eydzZWxlY3REYXRlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGltZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwidGltZUZsYWdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LlRpbWVfVGV4dF9fYyB9fTwvbGFiZWw+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2N9XCIgXG4gICAgICAgICAgICAgIGlkPVwiZGF0ZWFuZFRpbWVcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJzogcXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMCA/ICcnIDogJydcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG54dG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cbiAgICAgICAgICAgICAge3sgaG91ciB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5NTTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5YMjRfSG91cnNfX2MgPT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBbbmdDbGFzc109XCJ7Jyc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsICdkYXRlYW5kVGltZSc6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jfVwiPjwvZGl2PiAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGkgY2xhc3M9XCJmYSBjaGVjay1pY29uM1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBdHRhY2htZW50IC8gRmlsZSAtLT5cbiAgPGRpdiAqbmdJZj1cImZpbGVGbGFnXCI+XG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWRcIiBmb3I9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1pbWFnZS1vIGZhLTV4IGljb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wbHVzIGZhLTJ4IHBpY3R1cmUtdXBsb2FkLWNoaWxkIHBpYy11cGxvYWQgaWNvbG9yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBhbGxvd2VkRmlsZUV4dGVuc2lvbiB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsdGhpcy5xdWVzdGlvbkl0ZW0pXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8dWwgKm5nSWY9XCJcbiAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcXVlc3Rpb25JdGVtPy5UeXBlX19jID09PSAnRmlsZScgJiZcbiAgICAgICAgIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICBcIiBjbGFzcz1cImF0dGFjaC11bGlzdCBjb2wtbWQtMTJcIj5cbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lfX08c3BhbiBjbGFzcz1cImF0dGFjaC1saXN0XCIgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCI+WDwvc3Bhbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cblxuICAgIDwhLS0gQXR0YWNobWVudCBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwibnh0ZmlsZS11cGxvYWRpbmctYm94XCI+XG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIFwiPnt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgXG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmLU5hbWVcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPiB7eyBxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2N9fTwvc3Bhbj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmlsZS1sYWJlbCBcIj5cbiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vZmlsZS11cGxvYWQucG5nXCIgY2xhc3M9XCJmaWxlLWljb25cIi8+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQm9vayAtLT5cbiAgPGRpdiAqbmdJZj1cImJvb2tGbGFnXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdmb3JtLWdyb3VwIGNvbnRlbnQtYm94JyA6ICdmb3JtLWdyb3VwJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICcnIDogJ254dC1teXQtYWxpZ24zJ1wiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2NvbC1sZy0nICsgcXVlcy5TaXplX19jICsgJyBwYWRkaW5nbm9uZScgOiAnY29sLW1kLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2Ygc3ViUXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5JZFwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBkb3duMjogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgcXVlcz8uUXVlc3Rpb25fVGV4dF9fYyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG54dG15dC1kYXRlVGltZU5ld1wiICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGltZScgfHwgcXVlcy5UeXBlX19jID09PSAnRGF0ZSdcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LkRhdGVfVGV4dF9fYyB9fTwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlYW5kdGltZVwiPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBBZGRpdGlvbmFsIHBhcmFtIHRvIHVwZGF0ZSB0aGUgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8bXktZGF0ZS1waWNrZXIgbmFtZT1cIm15ZGF0ZVwiIFtvcHRpb25zXT1cIm15RGF0ZVBpY2tlck9wdGlvbnNcIiBpZD1cImRhdGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudCwgcXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbERhdGVcIiBjbGFzcz1cImRhdGUtcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJ7eydzZWxlY3REYXRlJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiID5cbiAgICAgICAgICAgICAgICAgIDwvbXktZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGltZSdcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5UaW1lX1RleHRfX2MgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlYW5kVGltZTogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jfVwiIFxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZGF0ZWFuZFRpbWVcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJzogcXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMCA/ICcnIDogJydcIlxuICAgICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCIoY2xlYXJTUUVycm9yKSBcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cImhvdXJzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93SG91ciBueHRteXQtdGltZSBteXQtaG91clwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIb3VyXCIgaWQ9XCJob3VyXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+SEg8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaG91clwiICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgaG91ciB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1pbnV0ZXNcIiBjbGFzcz1cImRhdGV0aW1lIG54dHNob3dtaW51dGUgbnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWludXRlXCIgaWQ9XCJtaW51dGVcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5NTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJtaW51dGVcIiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBtaW51dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBjb2xvbjE6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZS1waWNrZXIgW21pbkRhdGVdPVwicXVlcy5taW5EYXRlXCIgW2RhdGVdPVwicXVlcy5pbnB1dFwiIChkYXRlQ2hhbmdlKT1cImRpc3BsYXlEYXRlKCRldmVudCxxdWVzKVwiPjwvYXBwLWN1c3RvbS1kYXRlLXBpY2tlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFZEIHRvIHNob3cgbGFibGUtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTGFiZWwnXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1sYWJlbCBbbGFiZWxTdHlsZV09XCJxdWVzLlRpdGxlX19jXCIgW2xhYmVsVmFsdWVdPVwicXVlcy5RdWVzdGlvbl9fY1wiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWxhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxuICAgICAgICAgICAgPGxhYmVsPnt7IHF1ZXMuUXVlc3Rpb25fVGV4dF9fYyB9fTwvbGFiZWw+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInF1ZXM/LmlucHV0XCJcbiAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCIgXG4gICAgICAgICAgICAgICAgICBbaWRWYWx1ZV09XCJxdWVzPy5UcmFja2luZ19JRF9fY1wiXG4gICAgICAgICAgICAgICAgICBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcz8uSWQpXCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzPy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcz8uUXVlc3Rpb25fX2NcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwic2VsZWN0ZWRJbnB1dCgkZXZlbnQscXVlcylcIj5cbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTG9jYXRpb24nXCI+XG4gICAgICAgICAgICA8IS0tIGZvciBwaWNrIGxvY2F0aW9uIC0tPlxuICAgICAgICAgICAgPCEtLSBIQTEwMDEyMDI0IEFkZGVkIEFwaSBrZXkgYXMgaW5wdXQgLS0+XG4gICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gW2FwaUtleV09XCJxYkl0ZW1bJ0FwaV9LZXlfX2MnXVwiIFthZGRyZXNzXT1cInF1ZXMuaW5wdXRcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJoYW5kbGVMb2NhdGlvblNlbGVjdGVkKCRldmVudCxxdWVzKVwiPjwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0QXJlYSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRleHQtYXJlYSBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtyb3dzXT1cIjNcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLlF1ZXN0aW9uX19jIFwiICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS10ZXh0LWFyZWE+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5JZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLklkKVwiXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBpY3R1cmUtdXBsb2FkIGN1c3RvbS1maWxlLXVwbG9hZCBiZ2NvbG9yLXdcIiBmb3I9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1pbWFnZS1vIGZhLTV4IGljb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJcbiAgICAgICAgICAgICAgICAgICAgZmEgZmEtcGx1cyBmYS0yeFxuICAgICAgICAgICAgICAgICAgICBwaWN0dXJlLXVwbG9hZC1jaGlsZFxuICAgICAgICAgICAgICAgICAgICBwaWMtdXBsb2FkXG4gICAgICAgICAgICAgICAgICAgIGljb2xvclxuICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBib29rRmxhZ0FjY2VwdCB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDx1bCAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzPy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgcXVlcy5UeXBlX19jID09PSAnRmlsZScgJiZcbiAgICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgICAgICBcIiBjbGFzcz1cImF0dGFjaC11bGlzdCBjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgICAgICAgICAge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZVxuICAgICAgICAgICAgICAgIH19PHNwYW4gY2xhc3M9XCJhdHRhY2gtbGlzdFwiIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiPlg8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15dC1ib3hcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJueHRmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiPnt7IHF1ZXM/LlF1ZXN0aW9uX19jIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAge3snYXR0YWNoJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tdGFibGUgXG4gICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXRhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRHJvcGRvd24nXCIgY2xhc3M9XCJueHRkcm9wZG93blwiPlxuICAgICAgICAgICAgPCEtLSBmb3IgY29tbW9uIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duIFtmcm9tU2hlbmdlbF09XCJxYkl0ZW0uaXNTaGVuZ2VsX19jXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicXVlcy5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIlxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInF1ZXMuaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tLXt7J3NlbGVjdCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19LS0tXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZV09XCJxdWVzPy5FcnJvcl9NZXNzYWdlX19jXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgICAgPGFwcC1kcm9wZG93bi13aXRoLWZsYWcgKm5nSWY9XCJxdWVzLmlzRGVwZW5kZW50UGlja2xpc3QgJiYgIXF1ZXMuZHJvcERvd25Pbmx5XCIgIFtjZXJ0aWZpZWRdPVwicXVlcy5jZXJ0aWZpZWRGbGFnXCIgIFtKb2JQZXJmb3JtZXJDZXJ0aWZpY2F0ZXNdPVwicXVlcy5jZXJ0aWZpY2F0ZUxpc3RcIiAoZmxhZ0Ryb3BEb3duQ2hhbmdlKT1cImRlcGVuZGVudENoYW5nZSgkZXZlbnQpXCI+PC9hcHAtZHJvcGRvd24td2l0aC1mbGFnPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tTGlzdCBzdGFydC0tPlxuICA8ZGl2ICpuZ0lmPVwibGlzdEZsYWdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1teXQtYWxpZ24zXCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uSWQpO2xldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJueHQtZGlzLWZsZXggbXl0LWZvbnQzIG15dC1mb250N1wiPnt7IHF1ZXM/LlF1ZXN0aW9uX19jIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICdueHQtZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgbnh0Ym9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgICB9XCIgaWQ9XCJ0ZXh0XCIgW2lkXT1cInF1ZXMudW5pcXVlU3ViUUlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzKVwiXG4gICAgICAgICAgICBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyBxdWVzLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHBsYWNlaG9sZGVyPVwie3sgcXVlcy5RdWVzdGlvbl9fYyB9fVwiXG4gICAgICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhZGRGbGFnXCI+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJBZGQoZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLklkKSlcIiBjbGFzcz1cImJ0blwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiID48L2k+e3snYWRkJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L2J1dHRvbj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tTGlzdCBFbmQtLT5cblxuICA8IS0tIEFjdGlvbnMgLS0+XG4gIDwhLS0gVkQgYnV0dG9uIGNvbmRpdGlvbiByZW1vdmVkLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4ZXJcIj5cbiAgICA8IS0tIEJhY2t3YXJkIC8gQmFjayAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgICA8IS0tVkQgZGlzYWJsZWQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImJhY2tidXR0b25cIiBcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uQmFja19fY1wiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1sZWZ0LWJ0JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5JzpcbiAgICAgICAgICAgICAgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICB9XCIgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGljaygpXCI+XG4gICAgICAgICAge3sgcWJJdGVtPy5CYWNrX19jIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb3J3YXJkIC8gTmV4dCAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDxkaXYgICpuZ0lmPVwicWJJdGVtLk5leHRfX2NcIiA+XG4gICAgICA8ZGl2IGNsYXNzPVwibnh0YnV0dG9uXCI+XG4gICAgICAgICA8IS0tVkQgZGlzYWJsZWQgLS0+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzQnV0dG9uRGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnbnh0LXJ1c3R5JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5JzpcbiAgICAgICAgICAgICAgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICB9XCIgKGNsaWNrKT1cImhhbmRsZU5leHRDbGljaygpXCI+XG4gICAgICAgICAge3sgcWJJdGVtLk5leHRfX2MgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBTdW1tYXJ5IC0tPlxuPGRpdiAqbmdJZj1cInRoaXMuYWJJdGVtPy5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJjb2wtbGctMTJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgPGgyPnt7dGhpcy5xYkl0ZW0uU3VtbWFyeV9UZXh0X19jfX08L2gyPlxuICA8cD57e3RoaXMucWJJdGVtLlN1bW1hcnlfU3ViX1RleHRfX2N9fTwvcD5cbjwvZGl2PlxuXG48ZGl2ICpuZ0lmPVwic3VtbWFyeSAmJiBzdW1tYXJ5Lmxlbmd0aCA+IDBcIiBoZWlnaHQ9XCIxMDAlICFpbXBvcnRhbnRcIiBjbGFzcz1cImNvbC1tZC0xMlwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbC1tZC0xMic6IXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICAgICAgIH1cIj5cbiAgICA8aDEgY2xhc3M9XCJueHQtaGVhZGVyMSBueHQtc3VtbWFyeXBhZGRcIiA+e3sgcWJJdGVtLlN1YlRpdGxlX19jIH19PC9oMT4gICAgICAgICBcbiAgPGRpdiBpZD1cIm54dC1wcm9ncmVzczJcIiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyBcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxYSBvZiBzdW1tYXJ5XCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgc3VtbWFyeTogICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uRWRpdF9fY1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPHAgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFZEIFF1ZXN0aW9uIE5vIGFkZGVkIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jID09PSAnQ29tcGxldGVkJyB9XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPjxzcGFuPnt7IHFhLlF1ZXN0aW9uX05vX19jIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IHFhLnF1ZXNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1hbnN3ZXJcIiA+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgaW4gc3VtbWFyeSBmb3IgYm9vayB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09ICdCb29rJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHFhLm15VmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IHZhbC5RdWVzdGlvbl9UZXh0X19jIH19OjxzcGFuPnt7IHZhbC5pbnB1dCB9fTwvc3Bhbj48L3A+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgdmFsdWUgZm9yIGRpcmVjdCBxdWVzdGlvbiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZScgJiYgcWEucVR5cCAhPSAnQm9vaydcIj57eyBxYS5RdWVzdGlvbl9UZXh0X19jIH19IDxzcGFuPjwvc3Bhbj57eyBxYS5hbnNWYWx1ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fYyAmJiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCdcIiBzdHlsZT1cImJhY2tncm91bmQ6ICNkZWRkZGQ7XCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnh0LWVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuXG5cbiAgPGRpdiBpZD1cIm54dC1wcm9ncmVzczJcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgXCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igbnh0c3VtbWFyeS10b3AnIDogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCIgPlxuICAgICAgPGRpdiBpZD1cIm54dC1wcm9ncmVzcy1zdW1tYXJ5XCIgKm5nSWY9XCJxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICAgIDxjaXJjbGUtcHJvZ3Jlc3MgY2xhc3M9XCJ0aXRsZWJhclwiIFtwZXJjZW50XT1cInRoaXMucGVyY2VudFwiIFtyYWRpdXNdPVwiNDBcIiBbc3BhY2VdPVwiLTRcIiBbb3V0ZXJTdHJva2VXaWR0aF09XCI0XCJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPSBcIicjZGQyZTEzJ1wiIFtiYWNrZ3JvdW5kR3JhZGllbnRTdG9wQ29sb3JdPVwiJyNmOWJmYmQnXCIgW3RpdGxlQ29sb3JdPVwiJyNmM2VkZWQnXCIgXG4gICAgICAgIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiIFt0aXRsZV09XCJ0aGlzLnBlcmNlbnQrJyUnXCIgW3Nob3dTdWJ0aXRsZV09XCJmYWxzZVwiIFtzaG93QmFja2dyb3VuZF09XCJ0cnVlXCIgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIjMwMFwiXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XG4gICAgICA8L2NpcmNsZS1wcm9ncmVzcz5cbiAgICAgIFxuICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgJiYgcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiIFxuICAgICAgW25nQ2xhc3NdPVwieyBzdW1tYXJ5VGl0bGU6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJueHQtc3ViVGl0bGVcIiA+e3sgcWJJdGVtLlN1bW1hcnlfVGV4dF9fYyB9fTwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJueHQtc3ViVGl0bGUxXCIgPnt7IHFiSXRlbS5TdW1tYXJ5X1N1Yl9UZXh0X19jfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgPGgzIGNsYXNzPVwic3VtbWFyeS1oXCI+XG4gICAgICAgIHt7IHFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgfX1cbiAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbiBzdW0tcXVlcyBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdW0tcXVlcyBxdWVzdGlvbiBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdzdW0tcXVlczEgcXVlc3Rpb24xIHN1bW1hcnktY29tcGxldGVkIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWFuc3dlclwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4ZXIxXCIgKm5nSWY9XCJhYkl0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jID09ICdDb21wbGV0ZWQnICYmIHFiSXRlbS5DYW5jZWxfX2NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2J0bi10ZXh0JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5DYW5jZWxfX2MgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gR3JvdXAgQWN0aW9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImFsaWduLWVkaXQtc3VibWl0XCIgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCI+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5TdWJtaXRfX2NcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieyAnYnRuLXRleHQyJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiIFxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0Q2xpY2soKVwiPlxuICAgICAgICB7eyBxYkl0ZW0uU3VibWl0X19jIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fY1wiPlxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2dyZXknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY31cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGlja05ldygpXCI+XG4gICAgICAgIHt7IHFiSXRlbS5FZGl0X19jIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG48L2Rpdj4iXX0=
|
|
2373
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUViLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEdBQ1AsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVd0QixNQUFNLE9BQU8sc0JBQXNCO0lBMk12QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFFRDtJQXJOQSxJQUFJLENBQVM7SUFDYixrQkFBa0IsQ0FBUztJQUMzQixJQUFJLENBQVM7SUFDYixHQUFHLENBQVM7SUFDWixHQUFHLENBQVMsQ0FBQyw4QkFBOEI7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lB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QyxRQUFRLEVBQUUsQ0FBQztJQUMzRyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQVM7UUFDZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQyxDQUFDO3VHQXA2RVcsc0JBQXNCOzJGQUF0QixzQkFBc0IsbVRBSHRCLENBQUMsYUFBYSxDQUFDLCtDQ3JENUIsK3pvQ0FzdUJNOzsyRkQ5cUJPLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxtQkFBbUIsaUJBRWQsaUJBQWlCLENBQUMsSUFBSSxhQUMxQixDQUFDLGFBQWEsQ0FBQzsyWUFJakIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIEVsZW1lbnRSZWYsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBJTXlEYXRlTW9kZWwsIElNeURwT3B0aW9ucyB9IGZyb20gXCJteWRhdGVwaWNrZXJcIjtcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBOZ3hTcGlubmVyU2VydmljZSB9IGZyb20gXCJuZ3gtc3Bpbm5lclwiO1xuLy9pbXBvcnQgeyBOZ3hJbmRleGVkREJTZXJ2aWNlLCBJbmRleERldGFpbHN9IGZyb20gJ25neC1pbmRleGVkLWRiJztcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVkU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgUXVlc3Rpb24sXG4gIFF1ZXN0aW9uQm9vayxcbiAgQW5zd2VyQm9vayxcbiAgQW5zd2VyV3JhcHBlcixcbiAgT3B0aW9uLFxuICBPcHRpb25WYWx1ZSxcbiAgQXR0YWNobWVudFdyYXBwZXIsXG4gIEF0dGFjaG1lbnQsXG4gIExvY2FsUXVlc3Rpb25cbn0gZnJvbSBcIi4uLy4uL3dyYXBwZXJcIjtcbmltcG9ydCB7IEVycm9yV3JhcHBlciB9IGZyb20gXCIuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXJcIjtcbmltcG9ydCB7XG4gIFRFU1RRVUVTVElPTixcbiAgRFRRVUVTVElPTixcbiAgRklMRVFVRVNUSU9OLFxuICBUQVFVRVNUSU9OLFxuICBSQURJT1FVRVNUSU9OLFxuICBDSEVDS1FVRVNUSU9OLFxuICBCT09LUVVFU1RJT04sXG4gIFRFU1RRQixcbn0gZnJvbSBcIi4uLy4uL3NhbXBsZVwiO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gXCJyeGpzXCI7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2kxOG4uc2VydmljZVwiO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImxpYi1xdWVzdGlvbm5haXJlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuaHRtbFwiLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtDaGFuZ2VTZXJ2aWNlXSxcbiAgc3R5bGVVcmxzOiBbXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50LmNzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25uYWlyZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHFiSWQ6IHN0cmluZztcbiAgQElucHV0KCkgaW5zdXJhbmNlU3RhcnREYXRlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNlcnY6IHN0cmluZztcbiAgQElucHV0KCkgdGtuOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwaTogc3RyaW5nOyAvLyBWRCBnZXR0aW5nIHRoZSBhcGkgYXMgaW5wdXRcbiAgQE91dHB1dCgpIGhhbmRsZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlUGFnZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVCb29rOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVN1Ym1pdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcGFyYW1zOiBQYXJhbXM7XG4gIHB1YmxpYyBkZXZpY2VJbmZvID0gbnVsbDtcbiAgcHVibGljIGFiSXRlbTogQW5zd2VyQm9vaztcbiAgcHVibGljIHFiSXRlbTogUXVlc3Rpb25Cb29rO1xuICBwdWJsaWMgcXVlc3Rpb25JdGVtOiBRdWVzdGlvbjtcbiAgcHVibGljIGFuc3dlcldyYXA6IEFuc3dlcldyYXBwZXI7XG4gXG4gIC8vIENPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyByYWRpb0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGRhdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gXG4gIC8vIE9QVElPTk9OTFkgVFlQRVNcbiAgcHVibGljIGRyb3Bkb3duRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2hlY2tib3hGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gXG4gIC8vIFVOQ09ORElUSU9OQUwgVFlQRVNcbiAgcHVibGljIHRleHRGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGR0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGltZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGRhdGVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZW1haWxGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBudW1iZXJGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBhbHBoYW51bWVyaWNGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBib29rRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbGlzdEZsYWc6IGJvb2xlYW49IGZhbHNlO1xuICAvL0JhY2sgYnV0dG9uXG4gIHB1YmxpYyBiYWNrQnV0dG9uRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBWRCBkaXNhYmxlZFxuICBwdWJsaWMgaXNCdXR0b25EaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgb3B0aW9uVmFsdWVzOiBPcHRpb25WYWx1ZVtdID0gW107XG4gIHB1YmxpYyBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW10gPSBbXTtcbiAgcHVibGljIGlucFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBhbnN3ZXJNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBkYXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc2VsZWN0ZWRob3VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc2VsZWN0ZWRtaW51dGVNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBhdHRhY2htZW50c01hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNxT3B0aW9ucyA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGxvY2FsU3ViUXVlc3Rpb25zOiBMb2NhbFF1ZXN0aW9uW10gPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uU3RhY2sgPSBbXTtcbiAgcHVibGljIHF1ZXN0aW9uTmFtZSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudHM6IGFueVtdID0gW107XG4gIHB1YmxpYyBhdHRhY2htZW50SWRMaXN0OiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgYXR0YWNobWVudDogYW55O1xuICBwdWJsaWMgYWxsb3dlZEZpbGVFeHRlbnNpb246IHN0cmluZ1tdO1xuICBwdWJsaWMgZmlsZUV4Y2VlZGVkTGltaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGZpbGVUeXBlSW5jb3JyZWN0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBiYWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBiYWNraWNvbjogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBjaGVjazogYm9vbGVhbjtcbiAgcHVibGljIHBvcDogYm9vbGVhbjtcbiAgcHVibGljIGxvY2FsRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgY3VycmVudE5hbWU6IHN0cmluZztcbiAgcHVibGljIHBhdGhxdWVzdGlvbjogbnVtYmVyO1xuICBwdWJsaWMgcGVyY2VudDogbnVtYmVyO1xuICBwdWJsaWMgY291bnQ6IG51bWJlcjtcbiAgcHVibGljIHRhRm9jdXNPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG5vdFZhbGlkQWNjTnVtOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzcGxDQ0JhY2tDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3VtbWFyeSA9IFtdO1xuICBwdWJsaWMgbG9jYWxTdWJRTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMga2V5SW5kZXg6IG51bWJlciA9IDA7XG4gIC8vcHVibGljIHNxdWVzOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxEYXRlOiBhbnkgPSB7fTtcbiAgcHVibGljIHNlbGVjdERhdGU6IHN0cmluZztcbiAgcHJpdmF0ZSB0b2RheTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgZWw6IEhUTUxFbGVtZW50O1xuICBwdWJsaWMgaW5uZXJodG1sOiBhbnk7XG4gIHB1YmxpYyBwb3NzaWJpbGl0aWVzOiBhbnk7XG4gIHB1YmxpYyBpbm5lcmh0bWwxOiBhbnk7XG4gIHB1YmxpYyBzdW1tYXJ5RGF0YSA9W107XG4gXG4gIHB1YmxpYyBob3VyczogYW55W10gPSBbXG4gICAgXCIwMVwiLFxuICAgIFwiMDJcIixcbiAgICBcIjAzXCIsXG4gICAgXCIwNFwiLFxuICAgIFwiMDVcIixcbiAgICBcIjA2XCIsXG4gICAgXCIwN1wiLFxuICAgIFwiMDhcIixcbiAgICBcIjA5XCIsXG4gICAgXCIxMFwiLFxuICAgIFwiMTFcIixcbiAgICBcIjEyXCIsXG4gIF07XG4gXG4gIHB1YmxpYyBtaW51dGVzOiBzdHJpbmdbXSA9IFtcbiAgICBcIjAwXCIsXG4gICAgXCIwMVwiLFxuICAgIFwiMDJcIixcbiAgICBcIjAzXCIsXG4gICAgXCIwNFwiLFxuICAgIFwiMDVcIixcbiAgICBcIjA2XCIsXG4gICAgXCIwN1wiLFxuICAgIFwiMDhcIixcbiAgICBcIjA5XCIsXG4gICAgXCIxMFwiLFxuICAgIFwiMTFcIixcbiAgICBcIjEyXCIsXG4gICAgXCIxM1wiLFxuICAgIFwiMTRcIixcbiAgICBcIjE1XCIsXG4gICAgXCIxNlwiLFxuICAgIFwiMTdcIixcbiAgICBcIjE4XCIsXG4gICAgXCIxOVwiLFxuICAgIFwiMjBcIixcbiAgICBcIjIxXCIsXG4gICAgXCIyMlwiLFxuICAgIFwiMjNcIixcbiAgICBcIjI0XCIsXG4gICAgXCIyNVwiLFxuICAgIFwiMjZcIixcbiAgICBcIjI3XCIsXG4gICAgXCIyOFwiLFxuICAgIFwiMjlcIixcbiAgICBcIjMwXCIsXG4gICAgXCIzMVwiLFxuICAgIFwiMzJcIixcbiAgICBcIjMzXCIsXG4gICAgXCIzNFwiLFxuICAgIFwiMzVcIixcbiAgICBcIjM2XCIsXG4gICAgXCIzN1wiLFxuICAgIFwiMzhcIixcbiAgICBcIjM5XCIsXG4gICAgXCI0MFwiLFxuICAgIFwiNDFcIixcbiAgICBcIjQyXCIsXG4gICAgXCI0M1wiLFxuICAgIFwiNDRcIixcbiAgICBcIjQ1XCIsXG4gICAgXCI0NlwiLFxuICAgIFwiNDdcIixcbiAgICBcIjQ4XCIsXG4gICAgXCI0OVwiLFxuICAgIFwiNTBcIixcbiAgICBcIjUxXCIsXG4gICAgXCI1MlwiLFxuICAgIFwiNTNcIixcbiAgICBcIjU0XCIsXG4gICAgXCI1NVwiLFxuICAgIFwiNTZcIixcbiAgICBcIjU3XCIsXG4gICAgXCI1OFwiLFxuICAgIFwiNTlcIixcbiAgXTtcbiBcbiAgcHVibGljIHNlbGVjdGVkSG91cjogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNlbGVjdGVkTWludXRlOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgc2VsZWN0ZWRNZXJpZGllbTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHZhbHVlTmFtZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHZhbHVlTmFtZTE6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBib29rRmxhZ0FjY2VwdDogc3RyaW5nW107XG4gIHB1YmxpYyByZWNvcmRJZDogc3RyaW5nO1xuICBwdWJsaWMgY3VycmVudFF1ZXN0aW9uSWQ6IHN0cmluZztcbiAgcHVibGljIHNwaW5uZXJUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgbmV4dFZhbHVlOnN0cmluZyA9Jyc7XG4gXG4gIHN0YXJ0X2RhdGU/OiBhbnk7XG4gXG4gIC8vc2VhcmNoIGNvbXBvbmVudFxuICBwdWJsaWMgdGVtcG9BZGRyZXNzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQb3N0YWxjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZFByb3ZpbmNlOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZENpdHk6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkQXJlYTogc3RyaW5nO1xuICBwdWJsaWMgbG9jYWxhZGRyZXNzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYWxsQWRkcmVzcyA6YW55IFtdID0gW107XG4gIHB1YmxpYyBQb3N0YWxDb2RlOnN0cmluZztcbiAgcHVibGljIHBsYWNlczogYW55W10gPSBbXTtcbiAgcHVibGljIHByb3ZpbmNlOmFueVtdPVtdO1xuIFxuICAvLyBSRVEtMDEgUFJPR1JFU1MgQkFSXG4gIHB1YmxpYyBwcm9ncmVzc1N0eWxlOiBzdHJpbmcgPSBcIjAlXCI7XG4gIHB1YmxpYyBhbnN3ZXJDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIGluZGV4Q291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBhZGRGbGFnOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIG15RGF0ZVBpY2tlck9wdGlvbnM6IElNeURwT3B0aW9ucyA9IHt9O1xuICBpbmRpdmlkdWFsQm9va0J1dHRvbjogYm9vbGVhbjtcbiBcbiAgcHVibGljIGFsbElucHV0VmFsdWVzID0gW107IC8vIEhBIDAyRkVCMjQgVG8gc3RvcmUgYWxsIHRoZSBpbnB1dCB2YWx1ZXNcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSxcbiAgICBwcml2YXRlIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIHNwaW5uZXI6IE5neFNwaW5uZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2Zvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgLy9wcml2YXRlIGRiU2VydmljZTogTmd4SW5kZXhlZERCU2VydmljZSxcbiAgICBwcml2YXRlIGRldmljZVNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcbiAgICBlbDogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlXG4gICkge1xuICAgIC8vIFZEIDEwQXVnMjQtc3Bpbm5lciBjaGFuZ2VzXG4gICAgdGhpcy5zcGlubmVyTmFtZSA9IFwic3AxXCI7XG4gICAgdGhpcy5zcGlubmVyVHlwZSA9IFwiYmFsbC1zcGluLWNsb2Nrd2lzZS1mYWRlXCI7XG4gIH1cbiBcbiAgLy8gSEEgMDJGRUIyNCBPbiBkYXRlIGNoYW5nZSBuZWVkIHRvIHN0b3JlIHRoZSBjaGFuZ2VkIHZhbHVlIHNvIHBhc3NpbmcgdGhlIHF1ZXN0aW9uXG4gIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIG9uRGF0ZUNoYW5nZWQoZXZlbnQ6IElNeURhdGVNb2RlbCwgcXVlczogYW55KSB7XG4gICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBvbkRhdGVDaGFuZ2VkJyk7XG4gICAgLy90byBjaGFuZ2UgdGhlIGJvcmRlciBjb2xvclxuICAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0Jhcikge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUgPT1cIkJvb2tcIil7XG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZSA9ICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIEVMU0Ugb2YgcHJvZ3Jlc3NCYXIgY29uZCcpO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCItXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCItXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgZXZlbnQuZGF0ZS55ZWFyICsgXCItXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCItXCIgKyBldmVudC5kYXRlLmRheTtcbiAgICB9XG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgaHRtbEVsZW1lbnRcbiAgICAgIC5pdGVtKDApXG4gICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXItY29sb3I6Izg3YmUxYzt3aWR0aDoxMDAlXCIpO1xuICAgIHRoaXMuZGF0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsIGV2ZW50KTtcbiAgICBpZiAoXG4gICAgICBldmVudC5kYXRlLmRheSA9PT0gMCAmJlxuICAgICAgZXZlbnQuZGF0ZS5tb250aCA9PT0gMCAmJlxuICAgICAgZXZlbnQuZGF0ZS55ZWFyID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmRhdGVNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICAgIHRoaXMuYW5zd2VyTWFwLmRlbGV0ZSh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgfVxuICAgIC8vY29uc29sZS5sb2coJ3RoaXMuaW5wVmFsdWUgPSAnK3RoaXMuaW5wVmFsdWUpO1xuICAgIC8vY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0RGF0ZSA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAvLyBIQSAwMkZFQjI0IEFzc2lnbmluZyBpbnB1dCB2YWx1ZSB0byBxdWVzIGlucHV0XG4gICAgcXVlcy5pbnB1dCA9IHRoaXMuaW5wVmFsdWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRldmljZUluZm8gPSB0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xuICAgICAgaWYgKHBhcmFtc1snaWQnXSkge1xuICAgICAgICB0aGlzLmluZGl2aWR1YWxCb29rQnV0dG9uID0gdHJ1ZTtcbiAgICAgIH1lbHNlIGlmKHBhcmFtc1snYm9va2xldElkJ10pe1xuICAgICAgICB0aGlzLmluZGl2aWR1YWxCb29rQnV0dG9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5zZWxlY3RlZE1lcmlkaWVtID0gXCJBTVwiO1xuICAgIHRoaXMucHJvY2Vzc1FCKCk7XG4gICAgLy9jb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYWRkcmVzcycpKTtcbiAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFkZHJlc3NcIikpe1xuICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCdMZW5ndGg9Jyt0aGlzLmxvY2FsYWRkcmVzcy5sZW5ndGgpO1xuICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxhZGRyZXNzLmluZGV4T2YoaXRlbSkgPT0gaW5kZXgpe1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWxsQWRkcmVzcy5zb3J0KGZ1bmN0aW9uKGEsIGIpe1xuICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYodGhpcy5kZXZpY2VJbmZvLm9zID09PSAnaU9TJyl7XG4gICAgICAgIGxldCBvcGVuUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKFwiYWRkcmVzc0RCXCIpO1xuICAgICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXROZXcgPSBldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdDtcbiAgICAgICAgICBsZXQgZGJOZXcgPSB0YXJnZXROZXcucmVzdWx0O1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3ROZXcgPSBkYk5ldy50cmFuc2FjdGlvbignYWRkcmVzc1RhYmxlJylcbiAgICAgICAgICAgICAgICAub2JqZWN0U3RvcmUoJ2FkZHJlc3NUYWJsZScpXG4gICAgICAgICAgICAgICAgLmdldCgxKTtcbiAgICAgICAgICByZXF1ZXN0TmV3Lm9uc3VjY2VzcyA9ICgpPT4ge1xuICAgICAgICAgICAgICBjb25zdCB0ZW1wVmFyID0gcmVxdWVzdE5ldy5yZXN1bHQ7XG4gICAgICAgICAgICAgIHRoaXMubG9jYWxhZGRyZXNzID0gSlNPTi5wYXJzZSh0ZW1wVmFyLndob2xlQWRkcmVzc1N0cmluZyk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG9jYWxhZGRyZXNzLmluZGV4T2YoaXRlbSkgPT0gaW5kZXgpe1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cbi8vIGNhbGwgd2hlbiBib29rSWQgY2hhbmdlc1xuICBuZ09uQ2hhbmdlcyhzaW1wbGVjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYoc2ltcGxlY2hhbmdlc1sncWJJZCddKXtcbiAgICAgIHRoaXMucHJvY2Vzc1FCKCk7XG4gICAgfVxuICB9XG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBkYXRlX1RpbWVNYXAoKSB7XG4gICAgdGhpcy5zZWxlY3RlZGhvdXJNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLCB0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICB9XG4gXG4gIGRheSgpIHtcbiAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMgPSB7XG4gICAgICBkYXRlRm9ybWF0OiBcImRkLm1tLnl5eXlcIixcbiAgICAgIHN1bkhpZ2hsaWdodDogZmFsc2UsXG4gICAgICBkaXNhYmxlRGF0ZVJhbmdlczogW10sXG4gICAgICBzaG93Q2xlYXJEYXRlQnRuOiBmYWxzZSxcbiAgICAgIGRpc2FibGVTaW5jZToge1xuICAgICAgICB5ZWFyOiAwLFxuICAgICAgICBtb250aDogMCxcbiAgICAgICAgZGF5OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc2FibGVVbnRpbDoge1xuICAgICAgICB5ZWFyOiAwLFxuICAgICAgICBtb250aDogMCxcbiAgICAgICAgZGF5OiAwLFxuICAgICAgfSxcbiAgICAgIHNob3dUb2RheUJ0bjogZmFsc2UsXG4gICAgICBkYXlMYWJlbHM6IHtcbiAgICAgICAgc3U6IFwiRG9tXCIsXG4gICAgICAgIG1vOiBcIkx1blwiLFxuICAgICAgICB0dTogXCJNYXJcIixcbiAgICAgICAgd2U6IFwiTWnDqVwiLFxuICAgICAgICB0aDogXCJKdWVcIixcbiAgICAgICAgZnI6IFwiVmllXCIsXG4gICAgICAgIHNhOiBcIlPDoWJcIixcbiAgICAgIH0sXG4gICAgICBtb250aExhYmVsczoge1xuICAgICAgICAxOiBcIkVuZVwiLFxuICAgICAgICAyOiBcIkZlYlwiLFxuICAgICAgICAzOiBcIk1hclwiLFxuICAgICAgICA0OiBcIkFiclwiLFxuICAgICAgICA1OiBcIk1heW9cIixcbiAgICAgICAgNjogXCJKdW5cIixcbiAgICAgICAgNzogXCJKdWxcIixcbiAgICAgICAgODogXCJBZ29cIixcbiAgICAgICAgOTogXCJTZXBcIixcbiAgICAgICAgMTA6IFwiT2N0XCIsXG4gICAgICAgIDExOiBcIk5vdlwiLFxuICAgICAgICAxMjogXCJEaWNcIixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuIFxuICBjaGFuZ2UoKSB7XG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgLml0ZW0oMClcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXI6IDFweCBzb2xpZCByZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgIC5pdGVtKDApXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogMXB4IHNvbGlkICM4N2JlMWMgO3dpZHRoOjEwMCVcIik7XG4gICAgfVxuICB9XG4gXG4gIHByb2Nlc3NRQigpIHtcbiAgICBcbiAgICBjb25zb2xlLmxvZygnUHJvY2Vzc1FCJyk7XG4gICAgLy90aGlzLnFiSXRlbVxuICAgIGNvbnNvbGUubG9nKHRoaXMucWJJZCk7XG4gICAgLy9jb25zb2xlLmxvZygnVmVyc2lvbiBpbiBwcm9jZXNzIGlzIDhiZjExZWZhN2Y5MWEzOTFkOTU3YmY2YjUwNzhlZGM3ZTY1NmI2N2MnKTtcbiAgICBpZiAodGhpcy5xYklkKSB7XG4gICAgICBpZiAodGhpcy5xYklkLmxlbmd0aCA9PSAxOCkge1xuICAgICAgICB0aGlzLnJlYWRRdWVzdGlvbkJvb2sodGhpcy5xYklkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZWxzZSBwYXJ0Jyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIFF1ZXN0aW9uIERpcmVjdGx5IGZvciB0ZXN0aW5nJyk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gRFRRVUVTVElPTjtcbiAgICAgICAgdGhpcy5xYkl0ZW0gPSBURVNUUUI7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gXG4gIHRyaW1MYXN0RHVtbXkoaW5wdXQ6IHN0cmluZykge1xuICAgIHJldHVybiAoaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoMCwgaW5wdXQubGVuZ3RoIC0gNikpO1xuICB9XG4gXG4gIGdldFByb3BlclRpbWUoZGVmOiBzdHJpbmcsIGlucHV0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09IFwiXCIgPyBkZWYgOiBpbnB1dDtcbiAgfVxuICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgLy9TdW1tYXJ5IFF1ZXN0aW9uIENsaWNrYWJsZSBMb2dpY1xuICBoYW5kbGVFZGl0Q2xpY2sodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuYmFja2ljb24gPSBmYWxzZTtcbiAgICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIlBlbmRpbmdcIikge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odmFsdWUpO1xuICAgICAgLy9jb25zb2xlLmxvZygnIGluIHNpZGUgc3VtbWFyeW9wZW4nKyB0aGlzLnN1bW1hcnkubGVuZ3RoKTtcbiBcbiAgICAgIC8vQXNzaWduIHF1ZXN0aW9uIHN0YWNrIGxlbmd0aCBmcm9tIHN1bW1hcnkgcGFydFxuICAgICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIHZhciBsZW5ndGhWYWx1ZSA9IHRoaXMucXVlc3Rpb25TdGFjay5pbmRleE9mKHZhbHVlKTtcbiBcbiAgICAgIGZvciAobGV0IGkgPSBhcnJheUxlbmd0aDsgaSA+IGxlbmd0aFZhbHVlOyBpLS0pIHtcbiAgICAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyID09PSB0cnVlKSB7XG4gICAgICAgIHZhciBhcnJheUxlbmd0aDEgPSB0aGlzLnF1ZXN0aW9uTmFtZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGogPSBhcnJheUxlbmd0aDE7IGogPiBsZW5ndGhWYWx1ZTsgai0tKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9IFtdO1xuICAgIH1cbiAgfVxuIFxuICBoYW5kbGVOZXh0Q2xpY2soKSB7XG4gICAvLyB0aGlzLnNoYXJlZFNlcnZpY2Uuc2hvd0xvYWRlcigpO1xuICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLmJhY2tCdXR0b25GbGFnID0gZmFsc2U7XG4gICAgdGhpcy5BbnN3ZXJTYXZlKCk7XG4gIH1cbiBcbiAgQW5zd2VyU2F2ZSgpe1xuICAgIC8vdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbklkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBxdWVzdGlvblR4dD0nJztcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0ubmV4dFRyYWNraW5nSWQpO1xuICAgIHRoaXMucmVjb3JkSWQgPSBudWxsO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgLy8gTVIgMzBKQU4yNCAtIEFkZGVkIENvbmRpdGlvbiBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yIChCb29rIFF1ZXN0aW9uIGFuZCBOb24tQm9vaylcbiAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9iamVjdHMgdG8gc3RvcmUgdGhlIHZhbHVlc1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0KXtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpOyAvLyBSZW1vdmUgSFRNTCB0YWdzIGZyb20gdGhlIHF1ZXN0aW9uVGV4dCB2YWx1ZVxuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgcXVlc3Rpb25UZXh0ID0gJ3VuZGVmaW5lZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xuICAgICAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgIH1cbiBcbiAgICAgICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcbiAgICAvLyB0aGlzLnNxdWVzICs9IGNRdWVzdGlvbi5xdWVzdGlvbiArICdAQCMjJCQnO1xuICAgIHZhciBxdWVzVmFsdWUgPSBjUXVlc3Rpb24ucXVlc3Rpb25UZXh0O1xuICAgIHZhciBtYWlsZm9ybWF0ID1cbiAgICAgIFwiXlteLl1bYS16QS1aMC05ISMkJSYnKistLz0/Xl9ge3x9fl0rW14uXUBbXi1dW2EtekEtWjAtOS4tXStbXi1dLlthLXpBLVpdezIsfSRcIjtcbiBcbiAgICAvLyBQcm9jZXNzIElucHV0c1xuICAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICAvLyBTYXZlIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpbiB0aGUgaW5wVmFsdWVcbiAgICAgIGZvciAodmFyIG92IG9mIHRoaXMub3B0aW9uVmFsdWVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jaGVja2VkKSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IG92LnZhbHVlICsgXCJAQCMjJCRcIjtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG92Lm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmVtYWlsRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxwaGFudW1lcmljRmxhZykge1xuICAgICAgdmFyIGlzTm90VmFsaWRBY2NOdW0gPSB0aGlzLmlzTm90VmFsaWRBY2NOdW1iZXIodGhpcy5pbnBWYWx1ZSk7XG4gICAgICBpZiAoaXNOb3RWYWxpZEFjY051bSkge1xuICAgICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLm5leHRRdWVzdGlvbjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJGbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xuICAgICAgZm9yICh2YXIgaXRlbSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcbiBcbiAgICAgICAgaWYoaXRlbS50eXBlID09IFwiRGF0ZVwiIHx8IGl0ZW0udHlwZSA9PSBcIlRpbWVcIikge1xuICAgICAgICAgIC8vdGhpcyBvbmVcbiAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgICAgICAgaWYoaXRlbS50eXBlID09IFwiRGF0ZVwiKXtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIHR5cGUgY29uZCA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKVxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0RGF0ZSlcbiBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgaWYoaXRlbS50eXBlID09IFwiVGltZVwiKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRIb3VyK3RoaXMuc2VsZWN0ZWRNZXJpZGllbSt0aGlzLnNlbGVjdGVkTWludXRlKVxuIFxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBQTVwiO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfVxuIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSBzZWxlY3RIb3VyIGFuZCBzZWxlY3RNaW51dGUgY29uZGl0aW9uXG4gICAgICAgICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLnNlbERhdGUgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbnBWYWx1ZSB8fCAhdGhpcy5zZWxlY3REYXRlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG51bGwgY29uZGl0aW9uIG9mIGlucHV0Jyk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgICAgICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgICAgICAgLml0ZW0oMClcbiAgICAgICAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXItYm90dG9tOiAxcHggc29saWQgcmVkICFpbXBvcnRhbnQ7XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgfVxuICAgICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIHRleHQgZXJyb3IgY29uZGl0aW9uXG4gICAgICBpZihpdGVtLnR5cGU9PSBcIlRleHRcIil7XG4gICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmlucFZhbHVlID0gaXRlbS5pbnB1dDsgNjM0XG4gICAgICB9XG4gXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXRlbS5pc09wdGlvbmFsICYmXG4gICAgICAgIC8vICAoKGl0ZW0udHlwZSAhPSBcIkZpbGVcIiAmJiAhaXRlbS5pbnB1dCAmJiBpdGVtLnR5cGUgIT0gJ0RhdGUnICYmIGl0ZW0udHlwZSAhPSAnVGltZScpIHx8XG4gICAgICAgICAvLyAgIChpdGVtLnR5cGUgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMCkpXG4gICAgICAgICAoaXRlbS50eXBlID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiUmFkaW9cIikge1xuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJEcm9wZG93blwiKSB7XG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgICBpdGVtLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiRW1haWxcIikge1xuICAgICAgICAgIGlmIChpdGVtLmlucHV0ICYmIGl0ZW0uaW5wdXQubWF0Y2gobWFpbGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlJyArIHJlY29yZElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgICAgICB9IC8vaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlO1xuIFxuICAgICAgICB0aGlzLmlucFZhbHVlICs9IChpdGVtLmlucHV0ICE9IHVuZGVmaW5lZCA/IGl0ZW0uaW5wdXQgOiBcIlwiKSArIFwiQEAjIyQkXCI7XG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0ucXVlc3Rpb24gKyBcIkBAIyMkJFwiO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgYm9vazEnICsgdGhpcy5pbnBWYWx1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIHF1ZXN0aW9uVHh0ID0gcXVlc3Rpb25UeHQgPyB0aGlzLnRyaW1MYXN0RHVtbXkocXVlc3Rpb25UeHQpIDogcXVlc3Rpb25UeHQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSAnJztcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcbiAgICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpe1xuICAgICAgICB0aGlzLnN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yICh2YXIgbG9jYWxRdWVzIG9mIHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICAgICAgIGlmKCFsb2NhbFF1ZXMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgbG9jYWxRdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGlmKCF0aGlzLnN1YkFuc01hcC5oYXMobG9jYWxRdWVzLmlkKSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5pZCxsb2NhbFF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAgZWxzZScpXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLmlkLHRoaXMuc3ViQW5zTWFwLmdldChsb2NhbFF1ZXMuaWQpICsgJyQkQEAjIycrbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiBcbiAgICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2ZpbGUgdHdvJylcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJBbnNNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9ICh2YWx1ZSAhPSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnKSArICdAQCMjJCQnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5kcm9wZG93bkZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8PSAxKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcbiAgICAgIC8vdGhpcyBvbmVcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjEyXCIsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIjAwXCIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUubGVuZ3RoKTtcbiBcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImFucyA9PiBcIiArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICAgIHZhciBkYXRlMTogYW55ID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTEgPSBkYXRlMVswXS5zcGxpdChcIi9cIik7XG4gICAgICAgICAgZGF0ZTEgPSBbZGF0ZTFbMl0sIGRhdGUxWzFdLCBkYXRlMVswXV0uam9pbihcIi1cIik7XG4gICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMSlcbiAgICAgICAgICB2YXIgZGF0ZTI6IGFueSA9IHRoaXMuaW5zdXJhbmNlU3RhcnREYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGRhdGUyWzBdKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUyKTtcbiAgICAgICAgICBpZiAoZGF0ZTEgPCBkYXRlMikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9XG4gICAgICAgICAgICAgIFwiTm8gZXMgcG9zaWJsZSBkYXIgZGUgYWx0YSBsYSByZWNsYW1hY2nDs24gZGViaWRvIGEgcXVlIGxhIGZlY2hhIGRlbCBpbmNpZGVudGUgZXMgYW50ZXJpb3IgYSBsYSBmZWNoYSBkZSBjb250cmF0YWNpw7NuIGRlIGxhIHDDs2xpemFcIjtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMuZGF0ZUZsYWcpIHtcbiAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA1KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLnRpbWVGbGFnKSB7XG4gICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNyB8fCB0aGlzLnNlbERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ2ZvdXInKVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xuICAgICAgICAgICAgXCJAIyRcIiArXG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICBcIixcIjtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmlsZXNzcycgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wVmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiBcbiAgICAvLyBDaGVjayBmb3IgdGhlIGFuc3dlciBiZWZvcmUgc2F2aW5nIHRvIHRoZSBEQlxuICAgIGlmICghdGhpcy5xdWVzdGlvbkl0ZW0uaXNPcHRpb25hbCAmJiAhdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgLy8gU2hvdyBlcnJvciB0aGF0IHRoZSBxdWVzdGlvbiBtdXN0IGJlIGFuc3dlcmVkXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFNhdmUgdGhlIEFuc3dlciBpbiB0aGUgREJcbiAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hYklkID0gdGhpcy5hYkl0ZW0uaWQ7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNJZCA9IGNRdWVzdGlvbi5pZDtcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc1ZhbHVlID0gcXVlc1ZhbHVlO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xVHlwID0gdHlwO1xuICAgIC8vIEhBIDAyRkVCMjQgVG8gZGlzcGxheSB0aGUgdmFsdWVzIGluIHN1bW1hcnkgdXNpbmcgdGhpc1xuICAgIHRoaXMuYWxsSW5wdXRWYWx1ZXMgPSBbXTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIGlucHV0VmFsdWUgPSB7fTtcbiAgICAgIGlucHV0VmFsdWVbJ0lkJ10gPSBlbGVtZW50Py5pZDtcbiAgICAgIGlucHV0VmFsdWVbJ3R5cGUnXSA9IGVsZW1lbnQ/LnR5cGU7XG4gICAgICBpbnB1dFZhbHVlWydyZWZlcmVuY2VGaWVsZCddID0gZWxlbWVudD8ucmVmZXJlbmNlRmllbGQ7XG4gICAgICBpbnB1dFZhbHVlWydxdWVzdGlvblRleHQnXSA9IGVsZW1lbnQ/LnF1ZXN0aW9uVGV4dDtcbiAgICAgIGlucHV0VmFsdWVbJ2lucHV0J10gPSBlbGVtZW50Py5pbnB1dDtcbiAgICAgIGlucHV0VmFsdWUgPyB0aGlzLmFsbElucHV0VmFsdWVzLnB1c2goaW5wdXRWYWx1ZSkgOiB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIH0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5teVZhbCA9IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlID0gdGhpcy5pbnBWYWx1ZTtcbiAgICB0aGlzLmFuc3dlcldyYXAuZ3JvdXBUZXh0ID0gY1F1ZXN0aW9uLmdyb3VwTmFtZTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5hbnN3ZXJXcmFwLnFUeXAnLHRoaXMuYW5zd2VyV3JhcC5xVHlwKTtcbiAgIGlmKHRoaXMuYW5zd2VyV3JhcC5xVHlwID09IFwiQWxwaGFudW1lcmljXCIpe1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlID0gJ0VTJysgdGhpcy5pbnBWYWx1ZTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdCYW5rIGNvbmRpdGlvbicpO1xuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlKTtcbiAgICB9XG4gICAgLyppZiAoY1F1ZXN0aW9uLnR5cGUgPT0gJ0Jvb2snKXtcbiAgICBmb3IgKHZhciBxYiBvZiBjUXVlc3Rpb24uUXVlc3Rpb25zX19yLnJlY29yZHMpe1xuICAgICAgLy9jb25zb2xlLmxvZyhxYi5xdWVzdGlvbisnKioqKicrXCJAQCMjJCRcIilcbiAgICB9XG4gIH0qL1xuICAgIC8vdGhpcy5hbnN3ZXJXcmFwLnNxdWVzVmFsdWUgPSBjUXVlc3Rpb24ucXVlc3Rpb247XG4gICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSB0aGlzLmlucFZhbHVlO1xuICAgIC8vIGVtaXQgdGhlIGN1cnJlbnQgcXVlc3Rpb24gd2l0aCBpbnB1dCB0byBwYXJlbnRcbiAgICBsZXQgcXVlc3Rpb25BbnMgPSB7fVxuICAgIHF1ZXN0aW9uQW5zWydxdWVzdGlvbkRldGFpbCddID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgcXVlc3Rpb25BbnNbJ2Fuc3dlckJvb2tEZXRhaWwnXSA9IHRoaXMuYWJJdGVtO1xuICAgIGNvbnNvbGUubG9nKHF1ZXN0aW9uQW5zKTtcbiAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlc3Rpb25BbnMpO1xuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbkl0ZW0tLT4nKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnNxdWVzVmFsdWUgPSBxdWVzdGlvblR4dCA/IHF1ZXN0aW9uVHh0IDogY1F1ZXN0aW9uLnF1ZXN0aW9uO1xuICAgIHRoaXMuc2F2ZUFuc3dlcigpO1xuICB9XG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICBuZXh0KCkge1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgdmFyIHR5cCA9IGNRdWVzdGlvbi50eXBlO1xuICAgIC8vIElmIG5vIGVycm9yIHRoZW4gbW92ZSB0byBuZXh0IHN0ZXBzXG4gICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuIFxuICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKGNRdWVzdGlvbi5pZCk7XG4gICAgLy8gIHRoaXMucXVlc3Rpb25OYW1lLnB1c2goY1F1ZXN0aW9uLk5hbWUpO1xuIFxuICAgIC8vIENPTkRJVElPTkFMIHZzIE9QVElPTk9OTFkgJiBVTkNPTkRJVElPTkFMXG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIHRlcm5hcnkgZXZlbiBpbiBlbHNlIGNvbmRpdGlvbnMgYmVsb3dcbiAgICBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiQ09ORElUSU9OQUxcIikge1xuICAgICAgZm9yICh2YXIgY09wdCBvZiBjUXVlc3Rpb24ub3B0aW9ucykge1xuICAgICAgICAvLyBSYWRpbyAvIERhdGFcbiAgICAgICAgLy9jb25zb2xlLmxvZygnT3B0aW9uID0+ICcgKyBjT3B0LnZhbHVlICsgJyBtYXRjaGluZyB3aXRoICcgKyBhbnNWYWwpO1xuICAgICAgICBpZiAoY09wdC52YWx1ZSA9PSB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnTWF0Y2ggRm91bmQgdXNpbmcgJyArIGNPcHQubmV4dFF1ZXN0aW9uKTtcbiAgICAgICAgICBpZihjT3B0Lm5leHRRdWVzdGlvbil7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY09wdC5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2NvbmRpdGlvbmFsIHJlY29yZCBpZCcrIHRoaXMucmVjb3JkSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBDb3VsZCBiZSBvZiB0eXBlIERhdGEgYW5kIGV4aXN0aW5nIHZhbHVlXG4gICAgICBpZiAodGhpcy5yZWNvcmRJZCAmJiB0eXAgPT0gXCJEYXRhXCIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJPUFRJT05PTkxZXCIpIHtcbiAgICAgIC8vICBPUFRJT05PTkxZIGxvZ2ljXG4gICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIlVOQ09ORElUSU9OQUxcIikge1xuICAgICAgLy9VbmNvbmRpdGlvbmFsICBsb2dpY1xuICAgICAgLy9jb25zb2xlLmxvZyhcImluc2lkZSB1bmNvbmRpdGlvbmFsXCIpO1xuICAgICAgLy9pbnNpZGUgQm9vayBUeXBlXG4gICAgICBpZiAoY1F1ZXN0aW9uLnR5cGUgPT0gXCJCb29rXCIgJiYgY1F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyICE9JzYnKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgYm9va1wiKTtcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKG9wdC50eXBlKTtcbiAgICAgICAgICBpZiAob3B0LnR5cGUgPT0gXCJEcm9wZG93blwiIHx8IG9wdC50eXBlID09IFwiUmFkaW9cIikge1xuICAgICAgICAgICAgZm9yICh2YXIgb3B0MSBvZiBvcHQub3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lID09IG9wdDEudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID1vcHQxLm5leHRRdWVzdGlvbiB8fCBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0Vsc2UnK3RoaXMucmVjb3JkSWQpXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmKGNRdWVzdGlvbi50eXBlID09IFwiQm9va1wiICYmIGNRdWVzdGlvbi5xdWVzdGlvbk51bWJlciA9PSc2JyApIHtcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAgICBpZiAob3B0LnR5cGUgPT0gXCJEcm9wZG93blwiIHx8IG9wdC50eXBlID09IFwiUmFkaW9cIil7XG4gICAgICAgICAgZm9yICh2YXIgb3B0MSBvZiBvcHQub3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lID09IG9wdDEudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBvcHQxLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuIFxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgZWxzZSB0byBrZWVwIHRoZSBhc3NpZ25tZW50IGRlZmF1bHRcbiAgICBlbHNle1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgfVxuIFxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuIFxuICAgIC8vIENhbGxpbmcgdGhlIHByb2dyZXMgYmFyIHVwZGF0ZSBmdW5jdGlvblxuICAgIHRoaXMuYW5zd2VyQ291bnQrKztcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG4gXG4gXG4gICAgLy8gQ0FURUdPUklaQVRJT05cbiAgICAvL3RoaXMuc3RlcHBlckNhdGVnKCk7XG4gXG4gICAgaWYgKHRoaXMucmVjb3JkSWQpIHtcbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucmVjb3JkSWQpO1xuICAgICAgdGhpcy5wb3AgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcCA9IGZhbHNlO1xuICAgICAgLy8gVkQgZGlzYWJsZWRcbiAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAvLyBSZXNldCB0aGUgVmFyaWFibGVzXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgICB0aGlzLm9wdGlvblZhbHVlcyA9IFtdO1xuICAgICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiBcbiAgICAgIHRoaXMucmVzZXRGbGFnKHR5cCk7XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbSA9IG51bGw7XG4gXG4gICAgICAvLyBTaG93IFN1bW1hcnlcbiAgICAgIGZvciAodmFyIHEgb2YgdGhpcy5xdWVzdGlvblN0YWNrKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0hhbmRsaW5nIFF1ZXN0aW9uID0+ICcgKyBxKTtcbiAgICAgICAgdmFyIGFuc1dyYXAgPSB0aGlzLmFuc3dlck1hcC5nZXQocSk7XG4gICAgICAgIGlmIChhbnNXcmFwKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgQW5zd2VyIGZvciAnICsgYW5zV3JhcC5xdWVzSWQgKyAnIG9mIHR5cGUgJyArIGFuc1dyYXAucVR5cCk7XG4gICAgICAgICAgaWYoYW5zV3JhcC5xVHlwID09ICdGaWxlJyB8fCBhbnNXcmFwLnFUeXAgPT0gJ0Jvb2snfHxhbnNXcmFwLnFUeXAgPT0gJ0xpc3QnIHx8IGFuc1dyYXAucVR5cCA9PSAnQ2hlY2tib3gnKXtcbiAgICAgICAgICAgIHZhciBuZXdTdHIgPSAnJztcbiAgICAgICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiBhbnNXcmFwLmFuc1ZhbHVlLnNwbGl0KCdAQCMjJCQnKSkge1xuICAgICAgICAgICAgICBmb3IgKHZhciBhbnNTdHIxIG9mIGFuc1N0ci5zcGxpdCgnJCRAQCMjJykpIHtcbiAgICAgICAgICAgICAgLy8gIGlmKGFuc1N0cjEuaW5jbHVkZXMoJ2Fuc3dlclN0cmluZycpKXsgLy9yZW1vdmUgdGhlIGFuc3dlciBzdHJpbmdcbiAgICAgICAgICAgICAgIC8vICAgY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IGFuc1N0cjEucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIC8vICBhbnNTdHIxID0gd2l0aG91dEFuc3dlclN0cmluZztcbiAgICAgICAgICAgICAgLy8gIH1cbiAgICAgICAgICAgICAgICBpZiAoYW5zU3RyMS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3U3RyLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IGFuc1N0cjE7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgKz0gJzsgJyArIGFuc1N0cjE7ICAvL2NvbW1hKCwpIGNoYW5nZWQgYXMgc2VtaSBjb2xvbig7KSBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWEoLClcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5hdHRhY2htZW50c01hcC5oYXMoYW5zV3JhcC5xdWVzSWQpKXtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGF0dCBvZiB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldChhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gbmV3U3RyLnJlcGxhY2UoYXR0LmF0dGFjaG1lbnRJZCwnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IChuZXdTdHIucmVwbGFjZSgnLCwnLCcsICcpKS5yZXBsYWNlKCcsICwnLCcsICcpO1xuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIuc3RhcnRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygxLCBuZXdTdHIubGVuZ3RoKSA6IChuZXdTdHIuZW5kc1dpdGgoJywnKSA/IG5ld1N0ci5zdWJzdHJpbmcoMCwgbmV3U3RyLmxlbmd0aCAtIDEpIDogbmV3U3RyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuc1dyYXAuYW5zVmFsdWUgPSBuZXdTdHI7XG4gICAgICAgICAgICBhbnNXcmFwLm15VmFsID0gdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIENoZWNrIGlmIHRoZSBzdW1tYXJ5IGFscmVhZHkgY29udGFpbnMgYW4gZW50cnkgZm9yIHRoZSBzYW1lIHF1ZXNJZFxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQW5zV3JhcCA9IHRoaXMuc3VtbWFyeS5maW5kKGl0ZW0gPT4gaXRlbS5xdWVzSWQgPT09IGFuc1dyYXAucXVlc0lkKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdBbnNXcmFwKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBleGlzdHMsIHVwZGF0ZSB0aGUgYW5zVmFsdWUgYW5kIG15VmFsXG4gICAgICAgICAgICBleGlzdGluZ0Fuc1dyYXAuYW5zVmFsdWUgPSBhbnNXcmFwLmFuc1ZhbHVlO1xuICAgICAgICAgICAgZXhpc3RpbmdBbnNXcmFwLm15VmFsID0gYW5zV3JhcC5teVZhbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgaXQgZG9lc24ndCBleGlzdCwgcHVzaCB0aGUgYW5zV3JhcCB0byB0aGUgc3VtbWFyeSBhcnJheVxuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zV3JhcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYmFja2ljb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gXG4gIGdldFRleHQodmFsdWUpIHtcbiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XG4gICAgLy9jb25zb2xlLmxvZyggZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudCk7XG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudFxuICAgICk7XG4gIH1cbiBcbiAgaGFuZGxlQmFja0NsaWNrKCkge1xuICAgIHRoaXMuYmFjayA9IHRydWU7XG4gICAgaWYgKHRoaXMucG9wID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmJhY2tUcmFja2luZ0lkKTtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIGlmKGNRdWVzdGlvbi5xdWVzdGlvbk51bWJlciA9PScxJyl7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uYmFjayk7XG4gICAgfVxuIFxuIFxuICAgIHRoaXMuYW5zd2VyQ291bnQtLTtcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgLy8gQ0FURUdPUklaQVRJT05cbiAgICAvL3RoaXMuc3RlcHBlckNhdGVnKCk7XG4gXG4gICAgaWYgKHRoaXMuc3VtbWFyeSkge1xuICAgICAgLy9jb25zb2xlLmxvZygnc3VtbWFyeSB0cnVlJyk7XG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICB9XG4gICAgaWYodGhpcy5zdW1tYXJ5RGF0YSl7XG4gICAgICB0aGlzLnN1bW1hcnlEYXRhID1bXTtcbiAgICB9XG4gXG4gICAgLy8gUmVhZCB0aGUgcHJldmlvdXMgcXVlc3Rpb24gZnJvbSBEQlxuICAgIC8vIFZEIGRpc2FibGVkXG4gICAvLyB0aGlzLnNoYXJlZFNlcnZpY2Uuc2hvd0xvYWRlcigpO1xuICAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpKTtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XG4gIH1cbiBcbiAgaGFuZGxlQmFja0NsaWNrTmV3KCkge1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5lZGl0KTtcbiAgfVxuIFxuICAvL3VwZGF0aW5nIHN0YXR1cyBvbmNlIFEmQSBjb21wbGV0ZWQuXG4gXG4gIHByaXZhdGUgdXBkYXRlQW5zd2VyQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiQW5zd2VyQm9va1wiLCBcIlVwZGF0ZVwiLCB1dWlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXG4gICAgICAvLyApO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyQm9vaycsJ1VwZGF0ZScsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgIChkYXRhKT0+e1xuICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kXG4gICAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICBsZXQgcGFyYSA9IHtcbiAgICAgICAgZGF0YVR5cGU6IFwiQW5zd2VyQm9va1wiLFxuICAgICAgICBvcGVyYXRpb246IFwiVXBkYXRlXCIsXG4gICAgICAgIHBhcmFtMTogdXVpZCxcbiAgICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgICB9XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhKV0sXG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxuICAgICAgICB0aGlzLmZhaWx1cmV1cGRhdGVBQlxuICAgICAgKTtcbiAgICB9XG4gIH1cbiBcbiAgcHJpdmF0ZSBzdWNjZXNzdXBkYXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgbGV0IGRhdGEgPSByZXNwb25zZTtcbiAgICBpZihkYXRhKXtcbiAgICAgIHRoaXMuaGFuZGxlU3VibWl0LmVtaXQoZGF0YSk7XG4gICAgICB0aGlzLmFiSXRlbS5zdGF0dXMgPSBcIkNvbXBsZXRlZFwiO1xuICAgICAgdGhpcy5kZWxldGVBbnN3ZXJzKGRhdGEuQW5zd2VyQm9vaylcbiAgICB9XG4gIH07XG4gXG4gIC8vIFZEIGZvciBkZWxldGUgYW5zd2Vyc1xuICBkZWxldGVBbnN3ZXJzKGFuc3dlcmJvb2spe1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKXtcbiAgICAgIGlmKGFuc3dlcmJvb2sgJiYgYW5zd2VyYm9vay5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcpe1xuICAgICAgICBjb25zdCBhbnNCb29rSWQgPSBhbnN3ZXJib29rLmlkO1xuICAgICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXJCb29rJywnZGVsZXRlJyxhbnNCb29rSWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAgIChkYXRhKT0+e1xuICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgIHRoaXMuc3VjY2Vzc0RlbGV0ZUFCKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gVkQgZm9yIGRlbGV0ZSBhbnN3ZXJzXG4gIHByaXZhdGUgc3VjY2Vzc0RlbGV0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgIGlmKHJlc3BvbnNlLnN0YXR1cyA9PSAnc3VjY2Vzcycpe1xuICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgIH1lbHNlIHtcbiAgICAgY29uc29sZS5lcnJvcignZXJyb3InLCByZXNwb25zZS5tZXNzYWdlKTtcbiAgICB9XG4gfVxuXG4gcHJpdmF0ZSBmYWlsdXJldXBkYXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ3N0YXR1cyBmYWlsZWQnKVxuIH07XG5cbiBwcml2YXRlIHJlYWRRdWVzdGlvbkJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgIC8vICAgdGhpcy50a24sXG4gICAgIC8vICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICAvLyApO1xuICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiB0cnVlIH07XG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnUXVlc3Rpb25Cb29rJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgKGRhdGEpPT57XG4gICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgLy8gdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gICAgICAgLy8gVkQgZGlzYWJsZWRcbiAgICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlKCk7XG4gICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2soSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgIH1cbiAgICAgKVxuICAgfSBlbHNlIHtcbiAgICAgLy8gTVIgMzBKQU4yNCAtIFBhc3NpbmcgZmxhZyBmcm9tIE5HTlhUXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IHRydWUgfTtcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIGxldCBwYXJhMSA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIlF1ZXN0aW9uQm9va1wiLFxuICAgICAgb3BlcmF0aW9uOiBcInJlYWRcIixcbiAgICAgIHBhcmFtMTogdXVpZCxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4gICAgIC8vICwgSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApXG4vLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmExKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2ssXG4gICAgICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tcbiAgICAgKTtcbiAgIH1cbiB9XG4gcHJpdmF0ZSBzdWNjZXNzUmVhZEJvb2sgPSAocmVzcG9uc2UpID0+IHtcbiAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHN1Y2Nlc3NSZWFkQm9vaycpO1xuICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgaWYocmVzcG9uc2UgIT0gbnVsbCB8fCByZXNwb25zZSAhPSB1bmRlZmluZWQpe1xuICAgICB0aGlzLnFiSXRlbSA9IHJlc3BvbnNlLnF1ZXN0aW9uYm9vaztcbiAgICAgdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xuICAgICB0aGlzLmhhbmRsZUJvb2suZW1pdChyZXNwb25zZSk7XG5cbiAgIH1cbiAgLy8gY29uc29sZS5sb2coJ3JlYWRpbmdRdWVzdGlvbiB1c2luZyAnICsgdGhpcy5xYkl0ZW0pO1xuICAgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJQZW5kaW5nXCIpIHtcbiAgICAgaWYgKFxuICAgICAgIHRoaXMuYWJJdGVtLmFuc3dlcnMgPT0gbnVsbCB8fFxuICAgICAgIHRoaXMuYWJJdGVtLmFuc3dlcnMubGVuZ3RoID09IDBcbiAgICAgKSB7XG4gICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5xYkl0ZW0uZmlyc3RRdWVzdGlvbik7XG4gICAgIH0gZWxzZSB7XG4gICAgICAgLy8gUG9wdWxhdGUgdGhlIGV4aXN0aW5nIGFuc3dlcnNcbiAgICAgICB2YXIgbGFzdFF1ZXN0aW9uSWQgPSBcIlwiO1xuXG4gICAgICAgZm9yICh2YXIgYW5zT2JqZWN0IG9mIHRoaXMuYWJJdGVtLmFuc3dlcnMpIHtcbiAgICAgICAgIGxhc3RRdWVzdGlvbklkID0gYW5zT2JqZWN0LnF1ZXNJZDtcblxuICAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnB1c2goYW5zT2JqZWN0LnF1ZXNJZCk7XG5cbiAgICAgICAgIHRoaXMuYW5zd2VyTWFwLnNldChhbnNPYmplY3QucXVlc0lkLCB7XG4gICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zT2JqZWN0LnF1ZXNWYWx1ZSxcbiAgICAgICAgICAgYW5zVmFsdWU6IGFuc09iamVjdC5hbnNWYWx1ZSxcbiAgICAgICAgICAgcXVlc0lkOiBhbnNPYmplY3QucXVlc0lkLFxuICAgICAgICAgICBxVHlwOiBhbnNPYmplY3QucVR5cCxcbiAgICAgICAgICAgZ3JvdXBUZXh0OmFuc09iamVjdC5ncm91cFRleHQsXG4gICAgICAgICB9KTtcblxuICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spXG4gICAgICAgICBpZiAoYW5zT2JqZWN0LnFUeXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgICAgdmFyIGF2MSA9IGFuc09iamVjdC5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgLy8gLy9jb25zb2xlLmxvZyhcImJvb2sgbG9nXCIpO1xuXG4gICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiYm9va2lkXCIgKyBhdjFbMF0pO1xuICAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldChhbnNPYmplY3QucXVlc0lkLCBbXG4gICAgICAgICAgICAgeyBhdHRhY2htZW50TmFtZTogYXYxWzFdLCBhdHRhY2htZW50SWQ6IGF2MVswXSB9LFxuICAgICAgICAgICBdKTtcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2codGhpcy5hdHRhY2htZW50c01hcCk7XG4gICAgICAgICB9IGVsc2UgaWYgKGFuc09iamVjdC5xVHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGlmXCIpO1xuICAgICAgICAgICB2YXIgYXR0TGlzdDtcbiAgICAgICAgICAgdmFyIGF0dDtcbiAgICAgICAgICAgZm9yICh2YXIgYXR0VmFyIG9mIGFuc09iamVjdC5hbnNWYWx1ZS5zcGxpdChcIixcIikpIHtcbiAgICAgICAgICAgICB2YXIgYXR0SWROYW1lID0gYXR0VmFyLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50TmFtZSA9IGF0dElkTmFtZVsxXTtcbiAgICAgICAgICAgICBhdHQuYXR0YWNobWVudElkID0gYXR0SWROYW1lWzBdO1xuICAgICAgICAgICAgIGF0dExpc3QucHVzaChhdHQpO1xuICAgICAgICAgICB9XG4gICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIGF0dExpc3QpO1xuICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcbiAgICAgICAgIH1cbiAgICAgICB9XG5cbiAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XG4gICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmFuc3dlck1hcCk7XG4gICAgICAgLy8gUmVhZCB0aGUgbGFzdCBhbnN3ZXJlZCBxdWVzdGlvblxuICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKGxhc3RRdWVzdGlvbklkKTtcbiAgICAgfVxuICAgfSBlbHNlIGlmICh0aGlzLmFiSXRlbT8uc3RhdHVzID09IFwiQ29tcGxldGVkXCIpIHtcbiAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAvLyBUZW1wb3JhcnkgRml4IGZvciBkdXBsaWNhdGUgYW5zd2VycyBvbiB0aGUgc3VtbWFyeS5cbiAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgIHRoaXMucGVyY2VudCA9IDEwMDtcbiAgICAgdGhpcy5wcm9ncmVzc1N0eWxlID0gXCIxMDAlXCI7XG4gICAgIGlmKHRoaXMuc2VydiAhPSAnYXBpJyl7XG4gICAgICAvLyBWRCAzMU5PVjI0IHdyYXBwZXIgY2hhbmdlc1xuICAgICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5hbnN3ZXJzKSB7XG4gICAgICAgICB2YXIgYW5zd2VycyA9IHt9O1xuICAgICAgICAgaWYgKGFuc3dlci5xVHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgICAgIHZhciBmaWxlcyA9IFwiXCI7XG4gICAgICAgICAgIHZhciBmSW5kZXggPSAwO1xuICAgICAgICAgICB2YXIgZmlsZUxpc3QgPSBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICBmb3IgKHZhciBmaWxlSWROYW1lIG9mIGZpbGVMaXN0KSB7XG4gICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gZmlsZUlkTmFtZS5zcGxpdChcIkAjJFwiKTtcbiAgICAgICAgICAgICBpZiAoZkluZGV4ID09IDApIHtcbiAgICAgICAgICAgICAgIGZpbGVzID0gZmlsZU5hbWVbMV07XG4gICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgIGZpbGVzID0gZmlsZXMgKyBcIiAsXCIgKyBmaWxlTmFtZVsxXTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgZkluZGV4Kys7XG4gICAgICAgICAgIH1cblxuICAgICAgICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAgICAgIGdyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0LFxuICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSxcbiAgICAgICAgICAgICBhbnNWYWx1ZTogZmlsZXMsXG4gICAgICAgICAgIH07XG4gICAgICAgICAvLyAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5xVHlwID09IFwiQm9va1wiKSB7XG4gICAgICAgICAgIC8qICB2YXIgcXVlc05vPTA7XG4gICAgICAgICAgaWYoYW5zd2VyLmFuc1ZhbHVlLmluY2x1ZGVzKFwiQEAjIyQkXCIpKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdsaW5lIDEyMjMnKTtcbiAgICAgICAgICAgICBmb3IgKHZhciBicUFuc3dlclZhbHVlIG9mIGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKSkge1xuICAgICAgICAgICAgICAgdmFyIHF1ZXNWYWx1ZT1hbnN3ZXIucXVlc3Rpb25UZXh0LnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgICAgYW5zd2VycyA9IHt9O1xuICAgICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgICAvLyBncm91cFRleHQ6YW5zd2VyLnF1ZXN0aW9uVGV4dCxcbiAgICAgICAgICAgICAgICAgcXVlc1ZhbHVlOiAgXCImbHQ7cCZndDtcIisgcXVlc1ZhbHVlW3F1ZXNOb10rXCImbHQ7cCZndDtcIixcbiAgICAgICAgICAgICAgICAgYW5zVmFsdWU6IGJxQW5zd2VyVmFsdWUsXG4gICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgcXVlc05vKys7XG4gICAgICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9Ki9cbiAgICAgICAgICAgaWYoYW5zd2VyLmFuc1ZhbHVlLmluY2x1ZGVzKFwiQEAjIyQkXCIpKXtcbiAgICAgICAgICAgICB2YXIgYW5zd2VydmFsdWVzID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3ZhbHVlJylcbiAgICAgICAgICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0LFxuICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXJ2YWx1ZXMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXJzKVxuICAgICAgICAgICAvLyB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSxcbiAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXIuYW5zVmFsdWUsXG4gICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgICB9XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHZhciBhbnMxID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXG4gICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLFxuICAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXIuYW5zVmFsdWUsXG4gICAgICAgICAgIH07XG4gICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9XG5cbiAgIH1cbiB9O1xuXG4gcHJpdmF0ZSBmYWlsdXJlUmVhZEJvb2sgPSAocmVzcG9uc2UpID0+IHtcbiAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGZhaWx1cmVSZWFkQm9vaycpO1xuICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuIH07XG5cbiBwcml2YXRlIHJlYWRBbnN3ZXJib29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgaWYodGhpcy5zZXJ2ID0gXCJhcGlcIikge1xuICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAgdGhpcy50a24sXG4gICAgICAgW1wiQW5zd2VyQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgKTtcbiAgIH0gZWxzZSB7XG4gICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYTIgPSB7XG4gICAgICBkYXRhVHlwZTogXCJBbnN3ZXJCb29rXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTIpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCxcbiAgICAgICB0aGlzLmZhaWx1cmVBbnN3ZXJCb29rUmVhZFxuICAgICApO1xuICAgfVxuIH1cblxuXG4gcHJpdmF0ZSBzdWNjZXNzQW5zd2VyQm9va1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgIGlmICh0aGlzLmFiSXRlbT8uc3RhdHVzID09IFwiQ29tcGxldGVkXCIpIHtcbiAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLmFuc3dlcnMpIHtcbiAgICAgICB2YXIgYXYgPSBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgdmFyIGFuc3dlcnMgPSB7IHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSwgYW5zVmFsdWU6IGF2LCBncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCB9O1xuICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VycylcbiAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgfVxuICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcbiAgIH1cbiB9O1xuXG4gcHJpdmF0ZSBmYWlsdXJlQW5zd2VyQm9va1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgcmVhZFF1ZXN0aW9uID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIlF1ZXN0aW9uXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NSZWFkLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVJlYWRcbiAgICAgLy8gKTtcbiAgICAgLy90aGlzLnNoYXJlZFNlcnZpY2Uuc2hvd0xvYWRlcigpO1xuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiB0cnVlIH07XG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnUXVlc3Rpb24nLCdyZWFkJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgIChkYXRhKT0+e1xuICAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gICAgICAgICAvLyBWRCBkaXNhYmxlZFxuICAgICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgIHRoaXMuc3VjY2Vzc1JlYWQoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICAgLy90aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgfVxuICAgICAgIClcbiAgIH0gZWxzZSB7XG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgIC8vIC8vIFZEIDE1RkVCMjQgLSBtYWtlIGNyZWF0ZUFuc3dlckJvb2tGbGFnIGZhbHNlIG9ubHlcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMiA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIlF1ZXN0aW9uXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMildLFxuICAgICAgIHRoaXMuc3VjY2Vzc1JlYWQsXG4gICAgICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICApO1xuICAgfVxuIH1cblxuIHByaXZhdGUgc3VjY2Vzc1JlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gIC8vIFZEIGRpc2FibGVkXG4gIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWQnKTtcbiAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgIC8vIEhBIDAyRkVCMjQgRm9yIHRlc3RpbmcgZm9yIHVzZWQgdGhpcyBhbmQgaW4gZnV0dXJlIGl0IGNhbiBiZSB1c2VkIHRvIHRlc3Qgd2l0aCBzdGF0aWMgZGF0YVxuICAgLy8gdmFyIGFiID0gWydmaXJzdCcsJ2xhc3QnLCcxMjMnLCcxMi0xMi0yMDAwJywnMjInLCdNYWxlJywnMTIgY3Jvc3MgMScsJ0VtQ29udGFjdCcsJzk4NzY1JywnQScsJ1NpbmdsZSddO1xuICAgLy8gZm9yKGNvbnN0IFtpbmRleCxpdGVtXSBvZiByZXNwb25zZS5xdWVzdGlvbi5zdWJRdWVzdGlvbnMuZW50cmllcygpKXtcbiAgIC8vICAgaXRlbS5pbnB1dCA9IGFiW2luZGV4XTtcbiAgIC8vIH1cbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcbiAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcblxuICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtKSB7XG4gICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgICB0aGlzLm9wdGlvblZhbHVlcyA9IFtdO1xuICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuICAgICB0aGlzLnJlc2V0RmxhZyh0aGlzLnF1ZXN0aW9uSXRlbS50eXBlKTtcbiAgIH1cbiAgIHRoaXMucXVlc3Rpb25JdGVtID0gcmVzcG9uc2UucXVlc3Rpb247XG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG5cbiAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUgPT09ICdBbHBoYW51bWVyaWMnKXtcbiAgICAgdGhpcy5zcGxDQ0JhY2tDbGljayA9IHRydWU7XG4gICB9XG5cbiAgIHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pZDtcbiAgIHRoaXMuaGFuZGxlUGFnZS5lbWl0KHRoaXMucXVlc3Rpb25JdGVtLnRyYWNraW5nSWQpO1xuICAgLy8gSGFuZGxlIHRoZSBzdWJRdWVzdGlvbiBvcHRpb25zXG4gICBpZiAocmVzcG9uc2Uuc3FPcHRpb25zKSB7XG4gICAgIC8vdmFyIG5ld1JlY29yZHMgPSBbXTtcbiAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKHEuTmFtZSk7XG4gICAgICAgdmFyIHNxID0gcmVzcG9uc2Uuc3FPcHRpb25zW3EuaWRdO1xuICAgICAgIGlmIChzcSkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZygnZm91bmQgb3B0aW9ucyBmb3Igc3VicXVlc3Rpb24gJyArIHEuTmFtZSk7XG4gICAgICAgICBpZiAoIXEub3B0aW9ucykge1xuICAgICAgICAgICBxLm9wdGlvbnMgPSBzcS5vcHRpb25zO1xuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgIHRoaXMuaW5uZXJodG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmFkZGl0aW9uYWxSaWNoQ29udGVudFxuICAgKTtcbiAgIHRoaXMudHJhY2tJZCgpO1xuIH07XG5cbiB0cmFja0lkKCkge1xuICAgdmFyIHF0cmFja0lkID0gdGhpcy5xdWVzdGlvbkl0ZW0udHJhY2tpbmdJZDtcbiAgIC8vY29uc29sZS5sb2coJ3RyYWNrSWQtcXVlc3Rpb24nK3F0cmFja0lkKTtcbiB9XG5cbiBwcml2YXRlIGZhaWx1cmVSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcbiAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuIH07XG5cbiBwcml2YXRlIHNhdmVBbnN3ZXIgPSAoKSA9PiB7XG4gICAvLyBTZXQgdGhlIEFuc3dlciBOdW1iZXIgYmFzZWQgb24gdGhlIFF1ZXN0aW9uIFN0YWNrIExlbmd0aFxuICAgaWYgKHRoaXMuaW5wVmFsdWUgIT0gXCIuXCIpIHtcbiAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IG51bGw7XG4gICB9XG4gICB0aGlzLmFuc3dlcldyYXAuYW5zTnVtYmVyID0gdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCArIDE7XG5cbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKV0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzU2F2ZSxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVTYXZlXG4gICAgIC8vICk7XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlcicsJ2NyZWF0ZScsSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgKGRhdGEpPT57XG4gICAgICAgY29uc29sZS5sb2coJ2RhdGEgY2FtZSBzdWNlc3NmdWxseScpO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgIHRoaXMuc3VjY2Vzc1NhdmUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgIH1cbiAgICAgKVxuICAgfSBlbHNlIHtcbiAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYTMgPSB7XG4gICAgICBkYXRhVHlwZTogXCJBbnN3ZXJcIixcbiAgICAgIG9wZXJhdGlvbjogXCJjcmVhdGVcIixcbiAgICAgIHBhcmFtMTogSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKSxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4vLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEzKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzU2F2ZSxcbiAgICAgICB0aGlzLmZhaWx1cmVTYXZlXG4gICAgICk7XG4gICB9XG4gfTtcblxuIGh0bWxEZWNvZGUoaW5wdXQpIHtcbiAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGlucHV0LCBcInRleHQvaHRtbFwiKTtcbiAgIHJldHVybiBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50O1xuIH1cblxuIHByaXZhdGUgc3VjY2Vzc1NhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgLy90aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XG4gICAgIHRoaXMuYW5zd2VyTWFwLnNldChyZXNwb25zZS5hbnN3ZXIucXVlc0lkLCByZXNwb25zZS5hbnN3ZXIpO1xuICAgfSBlbHNlIHtcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yLmVycm9yTXNnID0gcmVzcG9uc2UuZXJyb3IuZXJyb3JNc2c7XG4gICB9XG4gICBpZighdGhpcy5iYWNrQnV0dG9uRmxhZyl7XG4gICAgIHRoaXMubmV4dCgpO1xuICAgfVxuIH07XG5cbiBwcml2YXRlIGZhaWx1cmVTYXZlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZVNhdmUnKTtcbiAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xuIH07XG5cbiBwcml2YXRlIHByb2Nlc3NRdWVzdGlvbiA9ICgpID0+IHtcbiAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2Nlc3NRdWVzdGlvbicpO1xuICAgLy8gY29uc29sZS5sb2coJ3NwbENDQmFja0NsaWNrID0gJyt0aGlzLnNwbENDQmFja0NsaWNrKTtcbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XG4gICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcbiAgIHRoaXMucG9wID0gdHJ1ZTtcblxuICAgLy8gaWYoIXRoaXMuYmFjayl7XG4gICAvLyAgIHRoaXMucXVlc3Rpb25OYW1lLnB1c2godGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSlcbiAgIC8vIH1cblxuICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyID09PSB0cnVlKSB7XG4gICAgIGlmICghdGhpcy5iYWNrKSB7XG4gICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKTtcbiAgICAgfVxuICAgICB0aGlzLmJhY2sgPSBmYWxzZTtcbiAgICAgaWYgKHRoaXMucXVlc3Rpb25OYW1lWzBdID09PSB0aGlzLnF1ZXN0aW9uTmFtZVsxXSkge1xuICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgICB9XG5cbiAgICAgdGhpcy5jdXJyZW50TmFtZSA9IHRoaXMucXVlc3Rpb25JdGVtLk5hbWU7XG4gICAgIHRoaXMucGF0aHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbk5hbWUuaW5kZXhPZih0aGlzLmN1cnJlbnROYW1lKTtcbiAgICAgdGhpcy5wb3NzaWJpbGl0aWVzID0gdGhpcy5xYkl0ZW0ucG9zc2liaWxpdGllcztcbiAgIH1cblxuICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zO1xuICAgdGhpcy5kYXkoKTtcbiAgIC8vY29uc29sZS5sb2coJ3Byb2Nlc3NpbmcgcXVlc3Rpb24gJyArIHRoaXMucXVlc3Rpb25JdGVtLk5hbWUgKyAnIGV4aXN0aW5nIGFuc3dlcnMgYXJlICcgKyB0aGlzLmFuc3dlck1hcC5zaXplKTsgLy8gPT4gJyArIEpTT04uc3RyaW5naWZ5KHRoaXMucXVlc3Rpb25JdGVtKSk7XG5cbiAgIC8vIFNldCB0aGUgRmxhZ3MgdG8gc2hvdyByaWdodCBmaWVsZHNcbiAgIHRoaXMuc2V0RmxhZyh0aGlzLnF1ZXN0aW9uSXRlbS50eXBlKTtcbiAgIC8vY29uc29sZS5sb2coJ0FmdGVyIHRoZSBzZXRGbGFnIG1ldGhvZCBkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcblxuICAgLy8gQ2hlY2sgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIGFuc3dlck1hcFxuICAgaWYgKHRoaXMuYW5zd2VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgLy8gIC8vY29uc29sZS5sb2coXCJleGlzdGluZyBhbnN3ZXIgZm91bmQgZm9yIHRoaXMucXVlc3Rpb25JdGVtLk5hbWVcIik7XG4gICAgIHZhciBlQW5zd2VyID0gdGhpcy5hbnN3ZXJNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSB0aGUgTWFwXG4gICAgIHRoaXMuaW5wVmFsdWUgPSBlQW5zd2VyLmFuc1ZhbHVlO1xuICAgICAvL2NvbnNvbGUubG9nKCdpbnBWYWx1ZSBoYXMgYmVlbiBzZXQgdG8gJyArIHRoaXMuaW5wVmFsdWUpO1xuICAgICBpZiAodGhpcy5hdHRhY2htZW50c01hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgICAgdGhpcy5hdHRhY2htZW50cyA9IHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICAgfVxuICAgfSBlbHNlIHtcbiAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHJlbW92aW5nIGF0dGFjaG1lbnQgYXJyYXknKTtcbiAgICAgdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgfVxuICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XG4gICBpZih0aGlzLnNwbENDQmFja0NsaWNrICYmIHRoaXMuaW5wVmFsdWUgJiYgdGhpcy5pbnBWYWx1ZS5pbmNsdWRlcygnRVMnKSl7XG4gICAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlmIGNvbmQnKTtcbiAgICAgdGhpcy5zcGxDQ0JhY2tDbGljayA9IGZhbHNlO1xuICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZS5yZXBsYWNlKCdFUycsJycpO1xuICAgfVxuXG4gICBpZiAodGhpcy5jaGVja2JveEZsYWcpIHtcbiAgICAgLy8gU2V0IHRoZSBPcHRpb25zIGZvciBDaGVja2JveFxuICAgICB0aGlzLnNldE9wdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0ub3B0aW9ucyk7XG4gICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIGV4cGVjdGVkIGJvb2tGbGFnIGNvbmQnKTtcbiAgICAgLy9jb25zb2xlLmxvZygnZHRGbGFnID0gJyt0aGlzLmR0RmxhZyk7XG4vLyAgSEEgMjBGRUIyNCBMYWJlbCBGaXhcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgZWxlbWVudC5xdWVzdGlvblRleHQgPSBlbGVtZW50LnF1ZXN0aW9uVGV4dC5yZXBsYWNlKC88W14+XSs+L2csICcnKTtcbiAgICAgfSk7XG4gICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucyk7XG4gICB9IGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgLy8gU2V0IHRoZSBMb2NhbFN1YlF1ZXN0aW9uc1xuICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGxpc3QgZmxhZycpO1xuICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuYWJJdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgaWYoIXRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpe1xuICAgICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucyk7XG4gICAgIH1cbiAgIH0gZWxzZSBpZiAodGhpcy5kdEZsYWcpIHtcbiAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIHVuZXhwZWN0ZWQgZHRGbGFnIGNvbmQnKTtcbiAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBcIlwiO1xuICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gXCJcIjtcbiAgICAgdGhpcy5zZWxEYXRlID0gXCJcIjtcbiAgICAgLy8gMjAyMS01LTE2VDAwOjAwXG4gICAgIGlmICh0aGlzLmRhdGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAgIHRoaXMuc2VsRGF0ZSA9IHRoaXMuZGF0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICB9XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkaG91ck1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSB0aGlzLnNlbGVjdGVkaG91ck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICB9XG4gICAgIGlmICh0aGlzLnNlbGVjdGVkbWludXRlTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICB9XG4gICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gdHJ1ZSkge1xuICAgICAgIHRoaXMuaG91cnMucHVzaChcbiAgICAgICAgIFwiMTNcIixcbiAgICAgICAgIFwiMTRcIixcbiAgICAgICAgIFwiMTVcIixcbiAgICAgICAgIFwiMTZcIixcbiAgICAgICAgIFwiMTdcIixcbiAgICAgICAgIFwiMThcIixcbiAgICAgICAgIFwiMTlcIixcbiAgICAgICAgIFwiMjBcIixcbiAgICAgICAgIFwiMjFcIixcbiAgICAgICAgIFwiMjJcIixcbiAgICAgICAgIFwiMjNcIixcbiAgICAgICAgIFwiMDBcIlxuICAgICAgICk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSBmYWxzZSkge1xuICAgICAgIHRoaXMuaG91cnMgPSB0aGlzLmhvdXJzLnNsaWNlKDAsIDEyKTtcbiAgICAgfVxuICAgICBpZiAodGhpcy5kdEZsYWcgJiYgdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgIHZhciBkdFZhbCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJUXCIpO1xuICAgICAgIHZhciBkdHZhbDAgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiIFwiKTtcbiAgICAgICB0aGlzLmlucFZhbHVlID0gZHRWYWxbMF07XG4gICAgICAgdGhpcy5pbnBWYWx1ZSA9IGR0dmFsMFswXTtcblxuICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gZHRWYWxbMV07XG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdHZhbDBbMV07XG4gICAgIH1cbiAgICAgaWYgKFxuICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlzRGF0ZUJhY2t3YXJkIHx8XG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlRm9yd2FyZFxuICAgICApIHtcbiAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlQmFja3dhcmQgPT09IHRydWUpIHtcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlU2luY2UgPSB7XG4gICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCkgKyAxLFxuICAgICAgICAgfTtcbiAgICAgICB9XG4gICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmlzRGF0ZUZvcndhcmQgPT09IHRydWUpIHtcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XG4gICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgfVxuICAgfSBlbHNlIGlmICh0aGlzLmZpbGVGbGFnKSB7XG4gICAgIHRoaXMuZmlsZVVJKCk7XG4gICAgIC8vIGxvZ2ljXG4gICAgIHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24gPVxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5hbGxvd2VkRmlsZUV4dGVuc2lvbnM/LnNwbGl0KFwiO1wiKTtcbiAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmFsbG93ZWRGaWxlRXh0ZW5zaW9uKTtcbiAgIH1cblxuICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyID09PSB0cnVlKSB7XG4gICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgIH1cbiB9O1xuXG4gc2V0RmxhZyh0eXApIHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBzZXRGbGFnIGZvciAnICsgdHlwKTtcblxuICAgaWYgKHR5cCkge1xuICAgICAvLyBTZXQgdGhlIEZsYWdzXG4gICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICB0aGlzLnRleHRGbGFnID0gdHJ1ZTtcblxuICAgICAgIC8vdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFOdW1lcmljXCIpIHtcbiAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSB0cnVlO1xuICAgICAgIC8qaWYodGhpcy5pbnBWYWx1ZS5sZW5ndGggPT09IDApe1xuICAgICAgICAgdGhpcy5pbnBWYWx1ZT0nRVMnXG4gICAgICAgfSovXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xuICAgICAgIHRoaXMuZW1haWxGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICB0aGlzLmZpbGVGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICB0aGlzLnRhRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiUmFkaW9cIikge1xuICAgICAgIHRoaXMucmFkaW9GbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEcm9wZG93blwiKSB7XG4gICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQm9va1wiKSB7XG4gICAgICAgdGhpcy5ib29rRmxhZyA9IHRydWU7XG4gICAgIH1lbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICB0aGlzLmxpc3RGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUaW1lXCIpIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIFRpbWUgY29uZCcpO1xuICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcbiAgICAgICB0aGlzLnRpbWVGbGFnID0gdHJ1ZTtcbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZHRGbGFnKTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlXCIpIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIERhdGUgY29uZCcpO1xuICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gdHJ1ZTtcbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuZHRGbGFnKTtcbiAgICAgfVxuICAgfVxuIH1cblxuIHJlc2V0RmxhZyh0eXApIHtcbiAgIGlmICh0eXApIHtcbiAgICAgLy8gU2V0IHRoZSBGbGFnc1xuICAgICBpZiAodHlwID09IFwiVGV4dFwiKSB7XG4gICAgICAgdGhpcy50ZXh0RmxhZyA9IGZhbHNlO1xuICAgICAgIC8vdGhpcy5udW1iZXJGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiTnVtYmVyXCIpIHtcbiAgICAgICB0aGlzLm51bWJlckZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYW51bWVyaWNcIikge1xuICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICB0aGlzLmVtYWlsRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMuZmlsZUZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICB0aGlzLnRhRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICB0aGlzLnJhZGlvRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgIHRoaXMuYm9va0ZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICB0aGlzLmxpc3RGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgIH1cbiAgIH1cbiB9XG5cbiBzZXRPcHRpb25zKHJlY29yZHMpIHtcbiAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XG4gICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xuICAgICBvdi5pZCA9IG9wdC5pZDtcbiAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xuICAgICBvdi52YWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgb3YubmV4dFF1ZXN0aW9uID0gb3B0Lm5leHRRdWVzdGlvbjtcbiAgICAgb3YuY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgIGlmIChcbiAgICAgICB0aGlzLmlucFZhbHVlICYmXG4gICAgICAgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKS5pbmNsdWRlcyhvcHQudmFsdWUpXG4gICAgICkge1xuICAgICAgIG92LmNoZWNrZWQgPSB0cnVlO1xuICAgICB9XG5cbiAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XG4gICB9XG4gfVxuXG4gLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcbiAgIGNvbnNvbGUubG9nKCdpbnNpZGUgY2hpbGRFdmVudENhcHR1cmUgJyk7XG4gICBjb25zb2xlLmxvZyhldmVudCk7XG4gICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgLy8gSEEgMzEtSkFOLTI0IEFzc2lnbiB2YWx1ZXMgdG8gZHJvcGRvd24gcXVlc3Rpb25cbiAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmo7XG4gICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXG4gfVxuXG4gc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcbiAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgc2V0U3ViUXVlc3Rpb25zJyk7XG4gICAvLyBjb25zb2xlLmxvZyhyZWNvcmRzKTtcbiAgIHZhciBxYU1hcCA9IG5ldyBNYXAoKTtcbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpO1xuICAgaWYgKHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgdmFyIGFJbmRleCA9IDA7XG4gICAgIC8vIHNlYXJjaCBjaGFuZ2VkIGFzIHNlbWkgY29sb24gYmVjYXVzZSBvZiBhZGRyZXNzIGNvbnRhaW5zIGNvbW1hXG4gICAgIGlmICgodGhpcy5pbnBWYWx1ZS5zZWFyY2goXCI7IFwiKSA9PSAtMSkpIHtcbiAgICAgIC8vIGNvbnN0IHdpdGhvdXRBbnN3ZXJTdHJpbmcgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoXCJhbnN3ZXJTdHJpbmc6IFwiLCBcIlwiKTsgLy9yZW1vdmUgdGhlIGFuc3dlciBzdHJpbmdcbiAgICAgIC8vIHRoaXMuaW5wVmFsdWUgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xuICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgJ0BAIyMkJCcgO1xuICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiB0aGlzLmlucFZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpKSB7XG4gICAgICAgICBhSW5kZXgrKztcbiAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCBmb3IgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcbiAgICAgICB9XG4gICAgIH0gZWxzZSB7XG4gICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCI7IFwiKSkge1xuICAgICAgICAgYUluZGV4Kys7XG4gICAgICAgICBxYU1hcC5zZXQoYUluZGV4LCBhbnNTdHIpO1xuICAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgcWFNYXAgJyArIGFJbmRleCArICcgd2l0aCAnICsgYW5zU3RyKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cbiAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBzZXR0aW5nIHZhbHVlcyBmcm9tIGlucHZhbHVlIHFhIG1hcCBhcmUnKTtcbiAgIC8vIGNvbnNvbGUubG9nKHFhTWFwKTtcblxuICAgZm9yICh2YXIgcXVlcyBvZiByZWNvcmRzKSB7XG4gICAgIGlmIChxdWVzLnR5cGUgPT0gXCJGaWxlXCIpIHtcbiAgICAgICB0aGlzLnZhbHVlTmFtZTEgPSBxdWVzLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucztcbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudmFsdWVOYW1lMSk7XG4gICAgIH1cblxuICAgICB2YXIgYW5zID0gJyc7XG4gICAgIGlmIChxYU1hcC5oYXMocXVlcy5xdWVzdGlvbk51bWJlcikpIHtcbiAgICAgICAgIHF1ZXMuaW5wdXQgPSBxYU1hcC5nZXQocXVlcy5xdWVzdGlvbk51bWJlcik7XG4gICAgICAgICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgZmV0Y2hpbmcgbWFwIHZhbHVlcycpO1xuICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICBpZihxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpID4gMCl7XG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhbnN3ZXIgc3VwcG9zZWQgdG8gYmUgdHJpbW1lZCcpO1xuICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgICAgYW5zID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcocXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSs2LHF1ZXMuaW5wdXQubGVuZ3RoKTtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2coYW5zKTtcbiAgICAgICAgICAgcXVlcy5pbnB1dCA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKDAscXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSk7XG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgfVxuICAgICAgIH1cblxuICAgICBpZiAoKHF1ZXMudHlwZSA9PT0gXCJEYXRlXCIpICYmIChxdWVzLmlzRGF0ZUJhY2t3YXJkIHx8IHF1ZXMuaXNEYXRlRm9yd2FyZCkpIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGRhdGUgYmFja3dhcmQvZm9yd2FyZCBjb25kJyk7XG4gICAgICAgaWYgKHF1ZXMuaXNEYXRlQmFja3dhcmQgPT09IHRydWUpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgaXNEYXRlQmFja3dhcmQnKTtcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlU2luY2UgPSB7XG4gICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCkgKyAxLFxuICAgICAgICAgfTtcbiAgICAgICB9XG4gICAgICAgaWYgKHF1ZXMuaXNEYXRlRm9yd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBpc0RhdGVGb3J3YXJkJyk7XG4gICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVVudGlsID0ge1xuICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpLFxuICAgICAgICAgfTtcbiAgICAgICB9XG4gICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMpO1xuICAgICB9XG5cbiAgICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChxdWVzKTtcbiAgICAgZm9yKHZhciBpPTA7IGk8dGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoO2krKyl7XG4gICAgICAgLy8gdG8gc2hvdy9oaWRlIHRoZSBkZXBlbmRlbnQgZHJvcGRvd24gb25seSBmaWVsZCB1c2luZyB0aGUgZHJvcERvd25Pbmx5IGJvb2xlYW5cbiAgICAgICBpZih0aGlzLnN1YlF1ZXN0aW9uc1tpXS5zaXplID09IDQpe1xuICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gdHJ1ZTtcbiAgICAgICB9ZWxzZXtcbiAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zW2ldLmRyb3BEb3duT25seSA9IGZhbHNlO1xuICAgICAgIH1cbiAgICAgfVxuICAgICBpZihhbnMgIT0gJycpe1xuICAgICAgIGZvcih2YXIgYW4gb2YgKGFucy5zcGxpdCgnJCRAQCMjJykpKXtcbiAgICAgICAgIHZhciBzUSA9IG5ldyBRdWVzdGlvbigpO1xuICAgICAgICAgT2JqZWN0LmFzc2lnbihzUSxxdWVzKTtcbiAgICAgICAgIHNRLmlucHV0ID0gYW47XG4gICAgICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHNRKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cbiAgIGlmICh0aGlzLnZhbHVlTmFtZTEgIT0gbnVsbCAmJiB0aGlzLnZhbHVlTmFtZTEubGVuZ3RoID4gMCkge1xuICAgICB0aGlzLmJvb2tGbGFnQWNjZXB0ID0gdGhpcy52YWx1ZU5hbWUxLnNwbGl0KFwiO1wiKTtcbiAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnN1YlF1ZXN0aW9ucyk7XG4gICB9XG4gICB0aGlzLnN0cnVjdExvY2FsU3ViUXVlc3Rpb24obnVsbCk7XG4gICAvLyBIQSAwMkZFQjI0IE9uIEVkaXQgdG8gZGlzcGxheSB0aGUgdmFsdWUgdXNpaW5nIHRoaXNcbiAgIGlmKHRoaXMuYWxsSW5wdXRWYWx1ZXMubGVuZ3RoID4gMCl7XG4gICAgIHRoaXMuc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgZm9yKGxldCBzaW5nbGVJbnB1dCBvZiB0aGlzLmFsbElucHV0VmFsdWVzKXtcbiAgICAgICAgIGlmKGVsZW1lbnQuaWQgPT0gc2luZ2xlSW5wdXQuaWQpe1xuICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gc2luZ2xlSW5wdXQuaW5wdXQ7XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9KTtcbiAgIH1cbiB9XG5cbiBvcHRpb25DaGFuZ2Uoc2VsVmFsdWUpIHtcbiAgIGxldCByYWRpb1RyYWNraW5nSWQ6IHN0cmluZyA9IFwiXCI7XG4gICBmb3IgKHZhciBvcHQgb2YgdGhpcy5xdWVzdGlvbkl0ZW0ub3B0aW9ucykge1xuICAgICAvL2NvbnNvbGUubG9nKCdvcHRpb25DaGFuZ2UgVHJhY2tpbmdJZCcrb3B0LnRyYWNraW5nSWQpO1xuICAgICBpZiAob3B0LnZhbHVlID09IHNlbFZhbHVlKSB7XG4gICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGlmJytvcHQudHJhY2tpbmdJZClcbiAgICAgICByYWRpb1RyYWNraW5nSWQgPSBvcHQudHJhY2tpbmdJZDtcbiAgICAgfVxuICAgfVxuXG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQocmFkaW9UcmFja2luZ0lkKTtcbiAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgLy8gLy9jb25zb2xlLmxvZygnaW5zaWRlIG9wdGlvbkNoYW5nZSB1c2luZyAnICsgc2VsVmFsdWUpO1xuXG4gICB0aGlzLmlucFZhbHVlID0gc2VsVmFsdWU7XG4gfVxuXG4gY2xlYXJFcnJvcigpIHtcbiAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG51bGw7XG4gICB9XG4gfVxuXG4gY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzSWQpIHtcbiAgIHF1ZXNJZC5lcnJvciA9IG51bGw7XG4gfVxuXG4gaW5wdXRWYWxpZGF0ZShlKSB7XG4gICB2YXIga2V5Q29kZSA9IGUua2V5Q29kZSB8fCBlLndoaWNoO1xuICAgLy8gT25seSBBU0NJSSBjaGFyYWN0ZXIgaW4gdGhhdCByYW5nZSBhbGxvd2VkXG4gICB2YXIgQVNDSUlDb2RlID0gKGUud2hpY2gpID8gZS53aGljaCA6IGUua2V5Q29kZTtcbiAgIGlmIChBU0NJSUNvZGUgPiAzMSAmJiAoQVNDSUlDb2RlIDwgNDggfHwgQVNDSUlDb2RlID4gNTcpKXtcbiAgICAgcmV0dXJuIGZhbHNlO1xuICAgfWVsc2V7XG4gICAgIHJldHVybiB0cnVlO1xuICAgfVxuIH1cblxuIENDT25DaGFuZ2UoaW5wVmFsdWU6IHN0cmluZykge1xuXG4gICAgIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMikge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cbiAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDcpIHtcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAxMikge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cbiAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDE3KSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMjIpIHtcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICB9XG5cbiB9XG5cbiBpc05vdFZhbGlkQWNjTnVtYmVyKHM6IHN0cmluZykge1xuICAgcyA9IHMucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbiAgIHMgPSAnRVMnICsgcztcbiAgIHZhciBpc05vdFZhbGlkU3RyID0gZmFsc2U7XG4gICBpZiAocy5sZW5ndGggPT0gMjQpIHtcbiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgaWYgKGkgPD0gMSAmJiAvW2EtekEtWl0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgY2hhcjogXCIgKyBzLmNoYXJBdChpKSk7XG4gICAgICAgfSBlbHNlIGlmIChpID4gMSAmJiAvWzAtOV0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgbnVtZXJpYzogXCIgKyBzLmNoYXJBdChpKSk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGNoYXJcIik7XG4gICAgICAgfVxuICAgICB9XG4gICB9IGVsc2Uge1xuICAgICBpc05vdFZhbGlkU3RyID0gdHJ1ZTtcbiAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGFjYyBudW1iZXJcIik7XG4gICB9XG4gICByZXR1cm4gaXNOb3RWYWxpZFN0cjtcbiB9XG5cbiBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICB2YXIgc3FMaXN0ID0gdGhpcy5zdWJRdWVzdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlkID09IHF1ZXNJZCk7XG4gICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgc3EuZXJyb3IgPSBudWxsO1xuICAgfVxuIH1cblxuIHVwbG9hZEZpbGUoZXZlbnQscXVlcz86YW55KSB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgdXBsb2FkJyk7XG4gICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgIHRoaXMuZmlsZVR5cGVJbmNvcnJlY3QgPSBmYWxzZTtcbiAgIHZhciBsb2NhbCA9IHRoaXM7XG4gICBsb2NhbC5hdHRhY2htZW50ID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgLy8gVmFsaWRhdGUgdGhlIGZpbGUgZXh0ZW5zaW9uXG4gICAvL2NvbnNvbGUubG9nKGxvY2FsLmF0dGFjaG1lbnQpO1xuICAgbGV0IGZpbGVOYW1lV2l0aFR5cGU6IHN0cmluZyA9XG4gICAgIGxvY2FsLmF0dGFjaG1lbnQgJiYgbG9jYWwuYXR0YWNobWVudC5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICBpZiAoXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmpwZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wbmdcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIucGRmXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmpwZWdcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpY1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5oZWlmXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkpQR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QTkdcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuUERGXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkpQRUdcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJQ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5IRUlGXCIpXG4gICApIHtcbiAgICAgbG9jYWwuZmlsZVR5cGVJbmNvcnJlY3QgPSB0cnVlO1xuICAgfVxuICAgLy8gUmV0dXJuIHdoZW4gdGhlIGZpbGUgdHlwZSBpcyBpbmNvcnJlY3RcbiAgIGlmIChsb2NhbC5maWxlVHlwZUluY29ycmVjdCkge1xuICAgICByZXR1cm47XG4gICB9XG4gICBsZXQgZmlsZUNvbnRlbnQ6IGFueTtcbiAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuXG4gICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICBmaWxlQ29udGVudCA9IHJlYWRlci5yZXN1bHQ7XG4gICAgIGxvY2FsLmZpbGVFeGNlZWRlZExpbWl0ID0gbG9jYWwuYXR0YWNobWVudC5zaXplID4gMzI0Mjg4MDsgLy9WYWxpZGF0aW5nIGZpbGUgc2l6ZVxuICAgICAvLyBVcGxvYWQgdGhlIGZpbGUgdG8gU2FsZXNmb3JjZSB3aGVuIHRoZSBsaW1pdCBpcyB3aXRoaW4gcmFuZ2VcbiAgICAgaWYgKCFsb2NhbC5maWxlRXhjZWVkZWRMaW1pdCkge1xuICAgICAgIGxldCBmaWxlV3JhcHBlciA9IG5ldyBBdHRhY2htZW50V3JhcHBlcigpO1xuICAgICAgIGZpbGVXcmFwcGVyLnBhcmVudElkID0gbG9jYWwuYWJJdGVtLmlkO1xuICAgICAgIGZpbGVXcmFwcGVyLmZpbGVOYW1lID0gbG9jYWwuYXR0YWNobWVudC5uYW1lO1xuICAgICAgIGZpbGVXcmFwcGVyLmZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7XG4gICAgICAgbG9jYWwuY3JlYXRlQXR0YWNobWVudChmaWxlV3JhcHBlcik7XG4gICAgICAgcXVlcy5pbnB1dCA9IGZpbGVXcmFwcGVyLmZpbGVOYW1lO1xuICAgICB9XG4gICB9O1xuICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XG4gICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xuIH1cblxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIGxldCBjcmVhdGVkQXR0YWNobWVudDogQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KFxuICAgICByZXNwb25zZS5hdHRhY2htZW50SWQsXG4gICAgIHJlc3BvbnNlLmF0dGFjaG1lbnROYW1lLFxuICAgICB0aGlzLmF0dGFjaG1lbnQubGFzdE1vZGlmaWVkRGF0ZVxuICAgKTtcbiAgIHRoaXMuYXR0YWNobWVudHMucHVzaChjcmVhdGVkQXR0YWNobWVudCk7XG4gICB0aGlzLmF0dGFjaG1lbnRzTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5hdHRhY2htZW50cyk7XG4gICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiB9O1xuXG4gcHJpdmF0ZSBzdWNjZXNzQXR0YWNobWVudERlbGV0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzW2ldLmF0dGFjaG1lbnRJZCA9PT0gdGhpcy5hdHRhY2htZW50SWQpIHtcbiAgICAgICB0aGlzLmF0dGFjaG1lbnRzLnNwbGljZShpLCAxKTtcbiAgICAgfVxuICAgfVxuIH07XG5cbiBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUnKTtcbiB9O1xuXG4gcHJpdmF0ZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlJyk7XG4gfTtcblxuIGhhbmRsZVN1Ym1pdENsaWNrKCkge1xuICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLnN1Ym1pdFRyYWNraW5nSWQpO1xuICAgdGhpcy51cGRhdGVBbnN3ZXJCb29rKHRoaXMuYWJJdGVtLmlkKTtcbiB9XG5cbiBoYW5kbGVDYW5jZWxDbGljaygpIHtcbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5jYW5jZWxUcmFja2luZ0lkKTtcbiB9XG5cbiBwcml2YXRlIGNyZWF0ZUF0dGFjaG1lbnQgPSAoZmlsZVdyYXBwZXI6IGFueSkgPT4ge1xuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQXR0YWNobWVudCcsJ2NyZWF0ZScsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgKGRhdGEpPT57XG4gICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUoZXJyb3IpO1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICBsZXQgcGFyYTMgPSB7XG4gICAgICBkYXRhVHlwZTogXCJBdHRhY2htZW50XCIsXG4gICAgICBvcGVyYXRpb246IFwiY3JlYXRlXCIsXG4gICAgICBwYXJhbTE6IEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKSxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTMpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcbiAgICAgKTtcbiAgIH1cbiB9XG5cbiBkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnRJZDogc3RyaW5nKSB7XG4gICB0aGlzLmF0dGFjaG1lbnRJZCA9IGF0dGFjaG1lbnRJZDtcbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChcImRlbGV0ZUF0dGFjaG1lbnRcIik7XG4gICB0aGlzLmRlbGV0ZVNGQXR0YWNobWVudChhdHRhY2htZW50SWQpO1xuIH1cblxuIHByaXZhdGUgZGVsZXRlU0ZBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgIC8vICAgdGhpcy50a24sXG4gICAgIC8vICAgW1wiQXR0YWNobWVudFwiLCBcImRlbGV0ZVwiLCBmaWxlSWRdLFxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUsXG4gICAgIC8vICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZVxuICAgICAvLyApO1xuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBdHRhY2htZW50JywnZGVsZXRlJyxmaWxlSWQgLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAoZGF0YSk9PntcbiAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcbiAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZShlcnJvcik7XG4gICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICB9XG4gICAgIClcbiAgIH0gZWxzZSB7XG4gICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgbGV0IHBhcmE0ID0ge1xuICAgICAgZGF0YVR5cGU6IFwiQXR0YWNobWVudFwiLFxuICAgICAgb3BlcmF0aW9uOiBcImRlbGV0ZVwiLFxuICAgICAgcGFyYW0xOiBmaWxlSWQsXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW2ZpbGVJZCxKU09OLnN0cmluZ2lmeShwYXJhNCldLFxuICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUsXG4gICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZVxuICAgICApO1xuICAgfVxuIH1cblxuIGdldEZpbGVOYW1lKGZpbGVOYW1ld2l0aElkYW5kVHlwZSkge1xuICAgLy90cnVuY2F0ZSBmaWxlIHBhdGhcbiAgIHZhciBmaWxlTmFtZVdpdGhUeXBlID0gZmlsZU5hbWV3aXRoSWRhbmRUeXBlLnN1YnN0cihcbiAgICAgZmlsZU5hbWV3aXRoSWRhbmRUeXBlLmluZGV4T2YoXCI6Ojo6XCIpICsgNFxuICAgKTtcbiAgIHJldHVybiBmaWxlTmFtZVdpdGhUeXBlOyAvL2ZpbGVOYW1lV2l0aFR5cGUucmVwbGFjZSgvXiguKihcXC98XFxcXCkpKC4rKSQvLCAnJDMnKTtcbiB9XG4gZmlsZVVJKCkge1xuICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB7XG4gICB9XG4gfVxuXG4gLy9VcGRhdGUgZnVuY3Rpb24gZm9yIGNhdGVnb3JpemF0aW9uXG4gLy8gc3RlcHBlckNhdGVnKCkge1xuIC8vICAgdGhpcy5maXJzdEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcbiAvLyAgICAgZmlyc3RDdHJsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gLy8gICB9KTtcbiAvLyAgIHRoaXMuc2Vjb25kRm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuIC8vICAgICBzZWNvbmRDdHJsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gLy8gICB9KTtcblxuIC8vIH1cblxuIC8vIFVwZGF0ZSBGdW5jdGlvbiBmb3IgdGhlIFByb2dyZXNzIEJhclxuIHVwZGF0ZVByb2dyZXNzKCkge1xuICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyID09PSB0cnVlKSB7XG4gICAgIGxldCBqID0gW107XG4gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3NzaWJpbGl0aWVzLnRvdGFsOyBpKyspIHtcbiAgICAgICB2YXIgcGF0aHBvc3MgPSBPYmplY3QudmFsdWVzKHRoaXMucG9zc2liaWxpdGllcy5wYXRoc1tpXS5xdWVzdGlvbnMpO1xuICAgICAgIGlmIChwYXRocG9zc1t0aGlzLnBhdGhxdWVzdGlvbl0gPT09IHRoaXMuY3VycmVudE5hbWUpIHtcbiAgICAgICAgIGoucHVzaChpKTtcbiAgICAgICAgIHRoaXMuY2hlY2sgPSB0cnVlO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICB0aGlzLmNoZWNrID0gZmFsc2U7XG4gICAgICAgfVxuICAgICB9XG4gICAgIGlmIChqLmxlbmd0aCA9PT0gMSkge1xuICAgICAgIHRoaXMuY291bnQgPSBqWzBdO1xuICAgICB9XG4gICAgIGlmIChqLmxlbmd0aCA+IDEpIHtcbiAgICAgICB2YXIgd2lkdGggPVxuICAgICAgICAgOTAgKiAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAvIHRoaXMucG9zc2liaWxpdGllcy5tYXhRdWVzdGlvbnMpO1xuICAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IE1hdGgucm91bmQod2lkdGgpICsgXCIlXCI7XG4gICAgIH0gZWxzZSBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICB2YXIgd2lkdGggPVxuICAgICAgICAgOTAgKlxuICAgICAgICAgKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggL1xuICAgICAgICAgICB0aGlzLnBvc3NpYmlsaXRpZXMucGF0aHNbdGhpcy5jb3VudF0uY291bnQpO1xuICAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IE1hdGgucm91bmQod2lkdGgpICsgXCIlXCI7XG4gICAgIH1cbiAgICAgdGhpcy5wZXJjZW50ID0gK01hdGgucm91bmQod2lkdGgpO1xuICAgfVxuIH1cblxuIHRvd25OYW1lKGFyZWEpIHtcbiAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGFyZWEudG93bjtcbiAgIC8vY29uc29sZS5sb2coJ3RoaXMgdmFsdWU9Jyt0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuIH1cblxuIGdldFRvd25Mb2NhbCgpIHtcbiAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMubG9jYWxhZGRyZXNzKSB7XG4gICAgICAgaWYgKFxuICAgICAgICAgdmFsLnRvd24uc3Vic3RyaW5nKDAsIHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGgpID09IHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZyh2YWwuY291bnRyeSlcbiAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXG4gICAgICAgICBpZiAodGhpcy50ZW1wb0FkZHJlc3MubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9XG4gICB9XG4gICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XG4gfVxuXG4gY2xlYXJMaXN0KCkge1xuICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICB9LCA1MDApO1xuIH1cblxuIHNldFNlYXJjaExpc3RXaWR0aCgpIHtcbiAgIC8vdG8gcmVzaXplIHNlYXJjaCBsaXN0IGJhc2VkIG9uIHRoZSBzY3JlZW4gc2l6ZVxuICAgY29uc3Qgc2VhcmNoQm94V2lkdGggPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhdXRvY29tcGxldGUtaW5wdXRcIikub2Zmc2V0V2lkdGg7XG4gICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUud2lkdGggPSBzZWFyY2hCb3hXaWR0aCArIFwicHhcIjtcbiB9XG5cbiAgIGdldENvZGUoKXtcbiAgICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCA+IDApIHtcbiAgICAgICBmb3IgKHZhciB2YWwgb2YgdGhpcy5hbGxBZGRyZXNzKSB7XG4gICAgICAgICBpZiAodmFsLnppcENvZGUuc3Vic3RyaW5nKDAsIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUpIHtcbiAgICAgICAgICAgLy9jb25zb2xlLmxvZyh2YWwuY291bnRyeSlcbiAgICAgICAgICAgdGhpcy50ZW1wb0FkZHJlc3MucHVzaCh2YWwpO1xuICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxuICAgICAgICAgICBpZiAodGhpcy50ZW1wb0FkZHJlc3MubGVuZ3RoID09IDYpIHtcbiAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgIH1cbiAgICAgfVxuICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcbiAgICAgdGhpcy5zZXRTZWFyY2hMaXN0V2lkdGgoKTtcbiAgIH1cbiAgIGdldFBvc3RhbGNvZGUodmFsdWUpe1xuICAgIHRoaXMucGxhY2VzPVtdO1xuICAgIHRoaXMucHJvdmluY2U9W107XG4gICAgIHZhciBwcm92aW5jZTtcbiAgICAgdmFyIHRvd247XG4gICAgIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID0gdmFsdWUuemlwQ29kZTtcbiAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWUuY291bnRyeTtcbiAgICAgdGhpcy50ZW1wb0FkZHJlc3M9W107XG5cblxuICAgICBmb3IodmFyIHZhbCBvZiB0aGlzLmxvY2FsYWRkcmVzcyl7XG4gICAgICAgaWYodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUgPT0gdmFsLnppcENvZGUgKXtcbiAgICAgICAgIHRoaXMucGxhY2VzLnB1c2godmFsKTtcbiAgICAgICAgIHRoaXMucHJvdmluY2UucHVzaCh2YWwpO1xuICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsLmNvdW50cnk7XG4gICAgICAgICBwcm92aW5jZSA9IHZhbC5wcm92aW5jZVxuICAgICAgICAgdG93biA9IHZhbC50b3duO1xuICAgICAgIH1cbiAgICAgfVxuICAgICBpZih0aGlzLnBsYWNlcy5sZW5ndGggPT0gMSl7XG5cbiAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2UgPXByb3ZpbmNlO1xuICAgICAgIHRoaXMuc2VsZWN0ZWRDaXR5ID0gdG93bjtcbiAgICAgfWVsc2UgaWYodGhpcy5wbGFjZXMubGVuZ3RoID4xIHx8IHRoaXMucGxhY2VzLmxlbmd0aCA9PTApe1xuXG4gICAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9Jyc7XG4gICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2U9Jyc7XG4gICAgIH1cbiAgIH1cbiAgIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgIGlmKHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCA9PSA1KXtcbiAgICAgICB0aGlzLmdldFBvc3RhbGNvZGUoe3ppcENvZGU6dGhpcy5zZWxlY3RlZFBvc3RhbGNvZGV9KTtcbiAgICAgfVxuXG4gIHNldFRpbWVvdXQoKCk9PiB7XG4gICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RMaXN0Jykuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgfSwgNTAwKTtcbiAgfVxuXG5cbiAgLy9QbHVzIGJ1dHRvbiBpbXBsZW1lbnRhdGlvbi5cbiAgc3RydWN0TG9jYWxTdWJRdWVzdGlvbihxdWVzOiBMb2NhbFF1ZXN0aW9uKXtcbiAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgc3RydWN0TG9jYWxTdWJRdWVzdGlvbicpO1xuICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoOyBpKyspe1xuICAgICAgIHZhciBsb2NhbFN1YlF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uaWQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pZDtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLk5hbWU7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnF1ZXN0aW9uID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb247XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnF1ZXN0aW9uVGV4dCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uVGV4dDtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24udHlwZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnR5cGU7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnRpdGxlID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0udGl0bGU7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnN1YlRpdGxlID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uc3ViVGl0bGU7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmlzT3B0aW9uYWwgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pc09wdGlvbmFsO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5lcnJvck1lc3NhZ2UgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5lcnJvck1lc3NhZ2U7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLm5leHRRdWVzdGlvbiA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLm5leHRRdWVzdGlvbjtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uZ3JvdXBOYW1lID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uZ3JvdXBOYW1lO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvbk51bWJlciA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uTnVtYmVyO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5hbGxvd2VkRmlsZUV4dGVuc2lvbnMgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5hbGxvd2VkRmlsZUV4dGVuc2lvbnM7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnVuaXF1ZVN1YlFJZCA9ICcnK3RoaXMuc3ViUXVlc3Rpb25zW2ldLmlkICsgaTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uaW5wdXQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pbnB1dDtcbiAgICAgICAgIHRoaXMubG9jYWxTdWJRdWVzdGlvbnMucHVzaChsb2NhbFN1YlF1ZXN0aW9uKTtcbiAgICAgfVxuIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBsb2NhbCBzdWIgcXVlc3Rpb25zJyk7XG4gLy8gY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyk7XG4gLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCx0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcbiB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zID0gW107XG4gLy8gY29uc29sZS5sb2coJ2ZpbmFsIGtleSBsb2NhbFN1YlFNYXAgbWFwJyk7XG4gLy8gY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlFNYXApO1xuIH1cblxuIGFkZElucHV0Qm94KHF1ZXN0aW9uOiBMb2NhbFF1ZXN0aW9uLCBpbmRleDogbnVtYmVyKXtcbiAgIHZhciBhcnJhID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgIHZhciBxSW5kZXggPSBhcnJhLmluZGV4T2YocXVlc3Rpb24pO1xuICAgdmFyIHF1ZXM6IExvY2FsUXVlc3Rpb24gPSBuZXcgTG9jYWxRdWVzdGlvbigpO1xuICAgT2JqZWN0LmFzc2lnbihxdWVzLCBxdWVzdGlvbik7XG4gICAvL2NvbnNvbGUubG9nKChxdWVzLnVuaXF1ZVN1YlFJZCkuc3Vic3RyaW5nKDE4LCAocXVlcy51bmlxdWVTdWJRSWQpLmxlbmd0aCkrMSk7XG4gICBpZih0aGlzLmtleUluZGV4ID09IGluZGV4KXtcbiAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLmlkICsgKFN0cmluZyhpbmRleCsxKSk7XG4gICAgIHRoaXMua2V5SW5kZXgrKztcbiAgIH1lbHNle1xuICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5pZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgfVxuICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgYXJyYS5zcGxpY2UocUluZGV4KzEsIDAsIHF1ZXMpO1xuXG4gICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsYXJyYSk7XG4gICAvL2NvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcbiB9XG5cbiByZW1vdmVBZGRyZXNzKHF1ZXNVbmlxdWVJZDogc3RyaW5nLCBxTmFtZTogc3RyaW5nKSB7XG4gICAvL2NvbnNvbGUubG9nKHF1ZXNVbmlxdWVJZClcbiAgIHZhciB2YWwgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgdmFyIGtleWluZGV4ID0gMDtcblxuICAgZm9yKGxldCBpPTA7IGk8dmFsLmxlbmd0aDsgaSsrKXtcbiAgICAgaWYodmFsW2ldLk5hbWUgPT0gcU5hbWUpe1xuICAgICAgIGtleWluZGV4Kys7XG4gICAgIH1cbiAgIH1cblxuICAgaWYodGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSAmJiBrZXlpbmRleCA+MSl7XG4gICAgIHZhciByZW9yZGVyID0gdmFsLmZpbHRlcigoaXRlbSkgPT4gaXRlbS51bmlxdWVTdWJRSWQgIT09IHF1ZXNVbmlxdWVJZClcbiAgICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLHJlb3JkZXIpO1xuICAgICBrZXlpbmRleC0tO1xuICAgfVxuIH1cblxuIGdldExvY2FsU3ViUXVlc3Rpb25zKGlkOiBTdHJpbmcpe1xuICAgcmV0dXJuIHRoaXMubG9jYWxTdWJRTWFwLmdldChpZCk7XG4gfVxuXG4gLy9TaW5nbGUgQWRkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBMaXN0IHR5cGVcbkFkZChxdWVzdGlvbjogTG9jYWxRdWVzdGlvbil7XG4gICB0aGlzLmFkZEZsYWcgPSAgZmFsc2U7XG4gICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICB2YXIgaW5kZXggID0gYXJyYS5sZW5ndGg7XG4gICB2YXIgYSA9IGFycmEuc2xpY2UoLTEpLnBvcCgpO1xuICAgdGhpcy5pbmRleENvdW50ICA9IGEucXVlc3Rpb25OdW1iZXI7XG5cbiAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbmRleENvdW50IDsgaSsrKSB7XG4gICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcbiAgICAgT2JqZWN0LmFzc2lnbihxdWVzLCBxdWVzdGlvbltpXSk7XG4gICAgIHRoaXMua2V5SW5kZXgrKztcbiAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLmlkICsgKFN0cmluZyh0aGlzLmtleUluZGV4KSk7XG4gICAgIHF1ZXMuaW5wdXQgPSAnJztcbiAgICAgYXJyYS5zcGxpY2UoaW5kZXgrKHRoaXMuaW5kZXhDb3VudC0xKSwgMCwgcXVlcyk7XG4gICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsYXJyYSk7XG4gICB9XG4gICB0aGlzLmFkZEZsYWcgPSB0cnVlO1xuIH1cblxuIGhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQobG9jYXRpb246IGFueSxxdWVzOmFueSkge1xuICAgcXVlcy5pbnB1dCA9IGxvY2F0aW9uO1xuIH1cblxuIHNlbGVjdGVkSW5wdXQoaW5wdXQ6YW55ICxxdWVzOmFueSl7XG4gICBxdWVzLmlucHV0ID0gaW5wdXQ7XG4gfVxuXG4gaGFuZGxlVGV4dGFyZWFWYWx1ZUNoYW5nZSh2YWx1ZSA6c3RyaW5nKXtcbiAgIGNvbnNvbGUubG9nKCdTZWxlY3RlZCB0ZXh0LWFyZWEgdGV4dDonLCB2YWx1ZSk7XG4gfVxuIGdldERhdGEoZGF0YTphbnkpe1xuICBjb25zb2xlLmxvZygndGFibGUgZGF0YScsZGF0YSk7XG4gfVxuXG4gZGVwZW5kZW50Q2hhbmdlKHZhbHVlOmFueSl7XG4gdGhpcy5uZXh0VmFsdWUgPSB2YWx1ZTtcbiB9XG5cbiBkaXNwbGF5RGF0ZShkYXRlU2VsZWN0ZWQ6IGFueSxxdWVzOmFueSl7XG4gICAvLyBQYXJzZSB0aGUgZGF0ZSBzdHJpbmcgdXNpbmcgbW9tZW50IGFuZCBhc3NpZ24gaXQgdG8gdGhpcy5zZWxlY3RlZERhdGVcbiAgIHF1ZXMuaW5wdXQgPSBtb21lbnQoZGF0ZVNlbGVjdGVkLnZhbHVlICwgJ1lZWVktTU0tREQgSEg6bW06c3MnKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKS50b1N0cmluZygpO1xuIH1cblxuIGdldEtleShpdGVtOiBhbnkpOiBhbnkge1xuICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0ZW0pWzBdO1xuIH1cblxuIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XG4gICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpdGVtKVswXTtcbiB9XG59IiwiPCEtLSBTcGlubmVyIC0tPlxuPG5neC1zcGlubmVyIHNpemU9XCJtZWRpdW1cIiBbbmFtZV09XCJzcGlubmVyTmFtZVwiIFt0eXBlXT1cInNwaW5uZXJUeXBlXCI+PC9uZ3gtc3Bpbm5lcj5cbjwhLS0gY3VzdG9tIGxvYWRlciAtLT5cbjwhLS0gPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPiAtLT5cbjwhLS0gQmFjayBQcm9jZXNzaW5nIC0tPlxuPCEtLSA8ZGl2ICpuZ0lmPVwiYmFja2ljb24gPT0gZmFsc2VcIiA+XG4gIDxkaXYgY2xhc3M9XCJiYWNraWNvblwiID5cbiAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiIFtjbGFzc109XCIgYWJJdGVtPy5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcgPyAnc3VtbWFyeS12b2x2ZXInOidhcHAtYmFjazEnXCI+XG4gICAgPGltZyBjbGFzcz1cImljb24tYXJyb3ctYmFja1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1hcnJvdy1iYWNrLnBuZ1wiIGFsdD1cIlNjcm9sbCBkb3duXCI+IHt7IHFiSXRlbT8uYmFjayB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PiAtLT5cblxuPCEtLSBRdWVzdGlvbiBIYW5sZGluZyAtLT5cbjwhLS0gVkQgcmVtb3ZlZCB1bndhbnRlZCBjb25kaXRpb24gLS0+XG48IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG48ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtXCIgY2xhc3M9XCJxdWVzdGlvbmRpdjEgcGFkZC1ib3R0b21cIj5cbiAgPCEtLSBQcm9ncmVzcyBCYXIgJiBUaXRsZSAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50aXRsZVwiPlxuICAgIDxoMT57eyBxdWVzdGlvbkl0ZW0/LnRpdGxlIH19PC9oMT5cbiAgICA8ZGl2Pnt7IHF1ZXN0aW9uSXRlbT8uc3ViVGl0bGUgfX08L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBQcm9ncmVzcyAmIEdyb3VwaW5nIC0tPlxuICA8ZGl2PlxuICAgIDwhLS0gUGllIENoYXJ0IFByb2dyZXNzIC0tPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwieyBiZ0NvbG9yOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIj5cbiAgICAgIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3NcIiAqbmdJZj1cInFiSXRlbT8ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgICAgPGNpcmNsZS1wcm9ncmVzcyBjbGFzcz1cInRpdGxlYmFyXCIgW3BlcmNlbnRdPVwidGhpcy5wZXJjZW50XCIgW3JhZGl1c109XCI0MFwiIFtzcGFjZV09XCItNFwiIFtvdXRlclN0cm9rZVdpZHRoXT1cIjRcIlxuICAgICAgICBbaW5uZXJTdHJva2VXaWR0aF09XCI0XCIgW291dGVyU3Ryb2tlQ29sb3JdPVwiJyNlMGIxYjAnXCIgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNlN2U4ZWEnXCIgW2FuaW1hdGlvbl09XCJ0cnVlXCIgW2JhY2tncm91bmRQYWRkaW5nXT0gXCIwXCJcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09IFwiJyNkZDJlMTMnXCIgW2JhY2tncm91bmRHcmFkaWVudFN0b3BDb2xvcl09XCInI2Y5YmZiZCdcIiBbdGl0bGVDb2xvcl09XCInI2YzZWRlZCdcIiBcbiAgICAgICAgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCIgW3RpdGxlXT1cInRoaXMucGVyY2VudCsnJSdcIiBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCIgW3Nob3dCYWNrZ3JvdW5kXT1cInRydWVcIiBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMzAwXCJcbiAgICAgICAgW3N0YXJ0RnJvbVplcm9dPVwiZmFsc2VcIiBbcmVzcG9uc2l2ZV09XCJmYWxzZVwiID5cbiAgICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gICAgPCEtLSBTaG93IHRoZSBHcm91cC9Nb2R1bGUgcmVsYXRlZCB0byB0aGUgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5ncm91cE5hbWUgJiYgcWJJdGVtLnByb2dyZXNzQmFyXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBxdWVzdGlvbmFsaWduOiAhcWJJdGVtPy5wcm9ncmVzc0JhciB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibnh0LWxhcmdlVGl0bGVcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LWZvbnQ2IG15dC10ZXh0M1wiPlxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uZ3JvdXBOYW1lIH19XG4gICAgICAgIDwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uc3ViVGV4dCAhPSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250NSBteXQtdGV4dDFcIj57e3F1ZXN0aW9uSXRlbT8uc3ViVGV4dH19PC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uc3ViVGV4dCA9PT0gJ8K/RW4gcXXDqSBwYcOtcyBvY3VycmnDsz8nXCIgY2xhc3M9XCJteXQtZm9udDEwIG15dC10ZXh0MlwiPnt7cXVlc3Rpb25JdGVtPy5zdWJUZXh0fX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICA8IS0tIFF1ZXN0aW9uIEhhbmRsaW5nIC0tPlxuICAgIDwhLS0gVkQgMTBBdWcyNC0gcXVlc3Rpb24gbm8gLS0+XG4gIDxkaXY+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5xdWVzdGlvblRleHRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7XCI+XG4gICAgICA8c3Bhbj57e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25OdW1iZXJ9fS48L3NwYW4+XG4gICAgICA8cCBjbGFzcz1cIm54dC1sYWJlbFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIFRpdGxlIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5pc1RpdGxlXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgIT0gJ0Jvb2snICYmIHF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlciE9JzYnICYmIHF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlciE9JzknXCI+IFxuICAgICAgICA8aDMgY2xhc3M9XCJxdWVzdGlvbmFsaWduICBteXQtZm9udDMgbXl0LWFsaWduIG15dC10ZXh0NFwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSB1bndhbnRlZCBzdHlsaW5nIGNsYXNzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxdWVzdGlvbkl0ZW0uaXNUaXRsZVwiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2hlYWRlci1zdHlsZScgOiAncXVlc3Rpb24tZi1zaXplJ1wiPlxuICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCIgPlxuICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgPT0gJ0Jvb2snXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyPT0nNidcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTMyMVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIFxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50eXBlID09ICdGaWxlJyBcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25OdW1iZXI9PSc5J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzQ1XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cblxuICA8IS0tIEFkZGl0aW9uYWwgSW5mbyAtLT5cbiAgPCEtLSBUaGUgYmVsb3cgY29kZSBjYW4gYmUgd3JpdHRlbiBlZmZlY3RpdmVseSBuZXN0ZWQgbmdJZiBmb3IgUmljaCBUZXh0ICYgT3RoZXIgb253IGZvciBQcm9ncmVzcyBCYXIgLS0+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50ICYmIHFiSXRlbS5wcm9ncmVzc0JhclwiID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm54dC1hZGRpdGlvbmFsIFwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmFkZGl0aW9uYWxSaWNoQ29udGVudCAmJiAhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnQgcXVlcy1hbGVydDFcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mbyBmYS0zeCBpcG9zaXRpb24gaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgPGRpdiBjbGFzcz1cImluZm9kaXZcIiBbaW5uZXJIVE1MXT1cImlubmVyaHRtbFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIERyb3Bkb3duLS0+XG4gIDxkaXYgKm5nSWY9XCJkcm9wZG93bkZsYWdcIiA+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPHNlbGVjdCBjbGFzcz1cIm54dGRyb3Bkb3duXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdkdC1saW5lIG54dC1teXQtYWxpZ24zIG54dC1teXQtYWxpZ24yIGRwRG93biBueHQtZHJvcGJveCBkb3duMSBteXQtZHJvcGJveCBteXQtYm9yZGVyLXIgbXl0LWZvbnQxJzogcWJJdGVtPy5wcm9ncmVzc0JhcixcbiAgICAgICAgICAnY3VzdG9tLXNlbGVjdCc6ICFxYkl0ZW0/LnByb2dyZXNzQmFyXG4gICAgICAgIH1cIiBjbGFzcz1cIm1yLXNtLTIgZGQtaGVpZ2h0IG54dC1kcm9wYm94IFwiICBpZD1cImRyb3Bkb3duXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjaGFuZ2UpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6IGlucFZhbHVlPy5sZW5ndGggPiAwID8gJyNmZmYnIDogJydcbiAgICAgICAgfX1cIiBzdHlsZS5jb2xvcj1cInt7IHF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0ub3B0aW9uc1wiIGNsYXNzPVwib3B0aW9uXCIgdmFsdWU9XCJ7eyBvcHQudmFsdWUgfX1cIj5cbiAgICAgICAgICB7eyBvcHQudmFsdWUgfX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCIuXCIgZGlzYWJsZWQgaGlkZGVuPnt7J3BsZWFzZU1ha2VDaG9pY2UnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fTwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS1WRCBSYWRpbyB1cGRhdGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJyYWRpb0ZsYWcgfHwgZGF0YUZsYWdcIiBjbGFzcz1cIlwiPlxuICAgIDxzcGFuICpuZ0lmPVwidGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcIiBjbGFzcz1cIm54dC1lcnJvci1tc2dcIj4ge3sgcXVlc3Rpb25JdGVtPy5lcnJvck1lc3NhZ2UgfX08L3NwYW4+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1jdXN0b20tcmFkaW8tY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLm9wdGlvbnNcIiBcbiAgICAgIFtjbGFzc109XCIgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAnbnh0LWN1c3RvbS1yYWRpby1vcHRpb24gaW52YWxpZCcgOiAnbnh0LWN1c3RvbS1yYWRpby1vcHRpb24nXCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgW2lkXT1cIm9wdC52YWx1ZVwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiXG4gICAgICAgICAgbmFtZT1cImlucFZhbHVlXCJcbiAgICAgICAgICBbdmFsdWVdPVwib3B0LnZhbHVlXCJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9wdGlvbkNoYW5nZShvcHQudmFsdWUpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibnh0LXJhZGlvLWxhYmVsXCIgW2Zvcl09XCJvcHQudmFsdWVcIj4ge3sgb3B0LnZhbHVlIH19PC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLm9wdGlvbnMucmVjb3Jkc1wiIGNsYXNzPVwicmFkaW8gbnh0LXJhZGlvT3B0aW9uXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpb2NvbnRhaW5lciBjb250YWluZXIgbXl0LWZvbnQ0XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtpZF09XCJvcHQuaWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgbmFtZT1cImlucFZhbHVlXCIgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9wdGlvbkNoYW5nZShvcHQudmFsdWUpXCIgLz5cbiAgICAgICAgICB7eyBvcHQudmFsdWUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+ICBcbiAgPCEtLSBDaGVja2JveCAtLT5cbiAgPGRpdiAqbmdJZj1cImNoZWNrYm94RmxhZ1wiIGNsYXNzPVwiXCI+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxuICAgICAge3sgcXVlc3Rpb25JdGVtPy5lcnJvck1lc3NhZ2UgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWNoZWNrYm94LWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25WYWx1ZXNcIiBjbGFzcz1cIm54dC1jaGVja2JveC13cmFwcGVyXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1jb250YWluZXIxXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJueHQtY2hlY2tib3hcIiBbaWRdPVwiaXRlbS5pZFwiIFsobmdNb2RlbCldPVwiaXRlbS5jaGVja2VkXCIgKGNsaWNrKT1cImNsZWFyRXJyb3IoKVwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJueHQtY2hlY2tib3gtbGFiZWxcIj57eyBpdGVtLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVGV4dCAtLT5cbiAgPGRpdiAqbmdJZj1cInRleHRGbGFnXCI+XG4gICAgPCEtLSBIQSAzMS1KQU4tMjQgVG8gcmVkdWNlIHRoZSBtYXJnaW4gLS0+XG4gICAgPGRpdiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlc3Rpb25JdGVtPy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIj5cbiAgICAgIDxpbnB1dCBjbGFzcz1cIm54dC1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIFxuICAgICAgIGlkPVwidGV4dC1pbnB1dC1pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIiAvPlxuICAgICAgPCEtLSA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIG54dC1jaGVjay1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT4gLS0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVGV4dCBBcmVhIC0tPlxuICA8ZGl2ICpuZ0lmPVwidGFGbGFnXCIgPlxuICAgIDxkaXY+XG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XCJueHQtaW5wdXQgbnh0LXRleHQtYXJlYVwiIGlkPVwidGEtaW5wdXQtaWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNsaWNrKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgKGZvY3Vzb3V0KT1cInRhRm9jdXNPdXQgPSB0cnVlXCJcbiAgICAgICAgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIj48L3RleHRhcmVhPlxuICAgICAgPCEtLSA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIG54dC1jaGVjay1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1wiPjwvaT4gLS0+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ0MgTnVtYmVyIEZvcm1hdCAtLT5cbiAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICA8ZGl2ICpuZ0lmPVwibnVtYmVyRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJUZXh0XCIgcGxhY2Vob2xkZXI9XCIwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMFwiIFtuZ0NsYXNzXT1cInsgYm94b3V0bGluZTogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIGlkPVwibnVtYmVyLWlucHV0LWlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwiQ0NPbkNoYW5nZSgkZXZlbnQpXCIgcmVxdWlyZWQ9XCJcIiBtYXhsZW5ndGg9XCIyOVwiXG4gICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teMC05IF0vZywnJyk7XCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO1wiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgLz5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiAjODdiZTFjOyBtYXJnaW4tbGVmdDogLTJyZW07IHotaW5kZXg6IDE7IHBhZGRpbmc6IDVweDtcIlxuICAgICAgICAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBFTkQtLT5cblxuICA8IS0tIEFscGhhTnVtZXJpYyAtLT5cbiAgPGRpdiAqbmdJZj1cImFscGhhbnVtZXJpY0ZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPiA8IS0tVUkgbm90IGNvbXBsZXRlZC0tPlxuICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZTtcIj5cbiAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICA8aW5wdXQgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPVwie3snemVyb09mWmVybycgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgc3R5bGU9XCJwYWRkaW5nOjVweCA1cHggNXB4IDE1MHB4O1wiIGlkPVwieW91cmlkaGVyZVwiLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFbWFpbCAtLT5cbiAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICA8ZGl2ICpuZ0lmPVwiZW1haWxGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgaWQ9XCJlbWFpbC1pbnB1dC1pZFwiXG4gICAgICAgIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgLz5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiAjODdiZTFjOyBtYXJnaW4tbGVmdDogLTJyZW07IHotaW5kZXg6IDE7IHBhZGRpbmc6IDVweFwiXG4gICAgICAgICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGF0ZVRpbWUgLS0+XG4gIDxkaXYgKm5nSWY9XCJkdEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nWmVybyBueHRteXQtdGltZTFcIiA+XG4gICAgPCEtLSBFcnJvciBIYW5kbGluZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuXG4gICAgPCEtLSBEYXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJkYXRlRmxhZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRoZXNlIGxhYmVscyB3ZXJlIG9jY3VwaW5nIHRoZSBlbXB0eSBzcGFjZSB3aGVuIGRhdGUgcXVlc3Rpb24gY29tZXMtLT5cbiAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5kYXRlVGV4dCB9fTwvbGFiZWw+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgQWRkaXRpb25hbCBwYXJhbSB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIC0tPlxuICAgICAgICAgIDxteS1kYXRlLXBpY2tlciBuYW1lPVwibXlkYXRlXCIgW29wdGlvbnNdPVwibXlEYXRlUGlja2VyT3B0aW9uc1wiIGlkPVwiZGF0ZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LCBxdWVzdGlvbkl0ZW0pXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsRGF0ZVwiIGNsYXNzPVwiZGF0ZS1waWNrZXJcIiBwbGFjZWhvbGRlcj1cInt7J3NlbGVjdERhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICA8L215LWRhdGUtcGlja2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaW1lIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJ0aW1lRmxhZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8udGltZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2R0LWxpbmUgZGF0ZS1saW5lIG54dC1kdC10aW1lJzogcWJJdGVtPy5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5wcm9ncmVzc0Jhcn1cIiBcbiAgICAgICAgICAgICAgaWQ9XCJkYXRlYW5kVGltZVwiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwicXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnOiBxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwID8gJycgOiAnJ1wiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCIoY2xlYXJTUUVycm9yKSBcIj5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbnh0bXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+SEg8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxuICAgICAgICAgICAgICB7eyBob3VyIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1pbnV0ZXNcIiBjbGFzcz1cImRhdGV0aW1lIG54dHNob3dtaW51dGUgbnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWludXRlXCIgaWQ9XCJtaW51dGVcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPk1NPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJtaW51dGVcIiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAge3sgbWludXRlIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8ueDI0SG91cnMgPT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBbbmdDbGFzc109XCJ7Jyc6IHFiSXRlbS5wcm9ncmVzc0JhciwgJ2RhdGVhbmRUaW1lJzogIXFiSXRlbS5wcm9ncmVzc0Jhcn1cIj48L2Rpdj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgY2hlY2staWNvbjNcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQXR0YWNobWVudCAvIEZpbGUgLS0+XG4gIDxkaXYgKm5nSWY9XCJmaWxlRmxhZ1wiPlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWRcIiBmb3I9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1pbWFnZS1vIGZhLTV4IGljb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wbHVzIGZhLTJ4IHBpY3R1cmUtdXBsb2FkLWNoaWxkIHBpYy11cGxvYWQgaWNvbG9yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBhbGxvd2VkRmlsZUV4dGVuc2lvbiB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsdGhpcy5xdWVzdGlvbkl0ZW0pXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8dWwgKm5nSWY9XCJcbiAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcXVlc3Rpb25JdGVtPy50eXBlID09PSAnRmlsZScgJiZcbiAgICAgICAgIXFiSXRlbT8ucHJvZ3Jlc3NCYXJcbiAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWV9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPCEtLSBBdHRhY2htZW50IFByb2dyZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkaW5nLWJveFwiPlxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidXBsb2FkaW5nLWZpbGUtbmFtZSBcIj57eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHRmaWxlLXVwbG9hZC1ib3hcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgIFxuICAgICAgICA8IS0tPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+LS0+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPiB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dH19PC9zcGFuPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWxlLWxhYmVsIFwiPlxuICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9maWxlLXVwbG9hZC5wbmdcIiBjbGFzcz1cImZpbGUtaWNvblwiLz5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJ7eyd0b0J1eVRpY2tldCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgbXVsdGlwbGVcbiAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuXCI+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgPCEtLSBCb29rIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYm9va0ZsYWdcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJ2Zvcm0tZ3JvdXAgY29udGVudC1ib3gnIDogJ2Zvcm0tZ3JvdXAnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJycgOiAnbnh0LW15dC1hbGlnbjMnXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWwgPyAnY29sLWxnLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJyA6ICdjb2wtbWQtJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBzdWJRdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLmlkXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHF1ZXM/LnF1ZXN0aW9uVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG54dG15dC1kYXRlVGltZU5ld1wiICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGltZScgfHwgcXVlcy50eXBlID09PSAnRGF0ZSdcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LmRhdGVUZXh0IH19PC9sYWJlbD4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVhbmR0aW1lXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IEFkZGl0aW9uYWwgcGFyYW0gdG8gdXBkYXRlIHRoZSBxdWVzdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxteS1kYXRlLXBpY2tlciBuYW1lPVwibXlkYXRlXCIgW29wdGlvbnNdPVwibXlEYXRlUGlja2VyT3B0aW9uc1wiIGlkPVwiZGF0ZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LCBxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsRGF0ZVwiIGNsYXNzPVwiZGF0ZS1waWNrZXJcIiBwbGFjZWhvbGRlcj1cInt7J3NlbGVjdERhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgPlxuICAgICAgICAgICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUaW1lJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LnRpbWVUZXh0IH19PC9sYWJlbD4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVhbmR0aW1lXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2R0LWxpbmUgZGF0ZS1saW5lIG54dC1kdC10aW1lJzogcWJJdGVtPy5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRlYW5kVGltZTogIXFiSXRlbT8ucHJvZ3Jlc3NCYXJ9XCIgXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkYXRlYW5kVGltZVwiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwicXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnOiBxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwID8gJycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIihjbGVhclNRRXJyb3IpIFwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG54dG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5ISDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBob3VyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwibWludXRlc1wiIGNsYXNzPVwiZGF0ZXRpbWUgbnh0c2hvd21pbnV0ZSBueHRteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNaW51dGVcIiBpZD1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPk1NPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm1pbnV0ZVwiICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZS1waWNrZXIgW21pbkRhdGVdPVwicXVlcy5taW5EYXRlXCIgW2RhdGVdPVwicXVlcy5pbnB1dFwiIChkYXRlQ2hhbmdlKT1cImRpc3BsYXlEYXRlKCRldmVudCxxdWVzKVwiPjwvYXBwLWN1c3RvbS1kYXRlLXBpY2tlcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIFZEIHRvIHNob3cgbGFibGUtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGFiZWwnXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1sYWJlbCBbbGFiZWxTdHlsZV09XCJxdWVzLnRpdGxlXCIgW2xhYmVsVmFsdWVdPVwicXVlcy5xdWVzdGlvblwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWxhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0J1wiPlxuICAgICAgICAgICAgPGxhYmVsPnt7IHF1ZXMucXVlc3Rpb25UZXh0IH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcz8uaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIiBcbiAgICAgICAgICAgICAgICAgIFtpZFZhbHVlXT1cInF1ZXM/LnRyYWNraW5nSWRcIlxuICAgICAgICAgICAgICAgICAgW2ZvY3VzRXZlbnRdPVwiY2xlYXJTUUVycm9yKHF1ZXM/LmlkKVwiXG4gICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcz8uZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInF1ZXM/LnF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dFZhbHVlKT1cInNlbGVjdGVkSW5wdXQoJGV2ZW50LHF1ZXMpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydhcGlLZXknXVwiIFthZGRyZXNzXT1cInF1ZXMuaW5wdXRcIiAobG9jYXRpb25TZWxlY3RlZCk9XCJoYW5kbGVMb2NhdGlvblNlbGVjdGVkKCRldmVudCxxdWVzKVwiPjwvYXBwLXBpY2stbG9jYXRpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0QXJlYSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRleHQtYXJlYSBbdmFsdWVdPVwicXVlcy5pbnB1dFwiIFtyb3dzXT1cIjNcIiBbZXJyb3JdPVwicXVlcy5lcnJvclwiIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uIFwiICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWN1c3RvbS10ZXh0LWFyZWE+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdFbWFpbCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLmlkKVwiXG4gICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWQgY3VzdG9tLWZpbGUtdXBsb2FkIGJnY29sb3Itd1wiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIlxuICAgICAgICAgICAgICAgICAgICBmYSBmYS1wbHVzIGZhLTJ4XG4gICAgICAgICAgICAgICAgICAgIHBpY3R1cmUtdXBsb2FkLWNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHBpYy11cGxvYWRcbiAgICAgICAgICAgICAgICAgICAgaWNvbG9yXG4gICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGJvb2tGbGFnQWNjZXB0IH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHVsICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBxdWVzLnR5cGUgPT09ICdGaWxlJyAmJlxuICAgICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcbiAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYm94XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cblxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJueHRmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiPnt7IHF1ZXM/LnF1ZXN0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAge3snYXR0YWNoJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tdGFibGUgXG4gICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcbiAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXRhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRHJvcGRvd24nXCIgY2xhc3M9XCJueHRkcm9wZG93blwiPlxuICAgICAgICAgICAgPCEtLSBmb3IgY29tbW9uIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duIFtmcm9tU2hlbmdlbF09XCJxYkl0ZW0uaXNTaGVuZ2VsXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicXVlcy5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwaU1ldGFdPVwicXVlcy5zdWJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInF1ZXMuaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tLXt7J3NlbGVjdCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19LS0tXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZV09XCJxdWVzPy5lcnJvck1lc3NhZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcz8uZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICA8YXBwLWRyb3Bkb3duLXdpdGgtZmxhZyAqbmdJZj1cInF1ZXMuaXNEZXBlbmRlbnRQaWNrbGlzdCAmJiAhcXVlcy5kcm9wRG93bk9ubHlcIiAgW2NlcnRpZmllZF09XCJxdWVzLmNlcnRpZmllZEZsYWdcIiAgW0pvYlBlcmZvcm1lckNlcnRpZmljYXRlc109XCJxdWVzLmNlcnRpZmljYXRlTGlzdFwiIChmbGFnRHJvcERvd25DaGFuZ2UpPVwiZGVwZW5kZW50Q2hhbmdlKCRldmVudClcIj48L2FwcC1kcm9wZG93bi13aXRoLWZsYWc+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS1MaXN0IHN0YXJ0LS0+XG4gIDxkaXYgKm5nSWY9XCJsaXN0RmxhZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LW15dC1hbGlnbjNcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIGdldExvY2FsU3ViUXVlc3Rpb25zKHF1ZXN0aW9uSXRlbS5pZCk7bGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kaXMtZmxleCBteXQtZm9udDMgbXl0LWZvbnQ3XCI+e3sgcXVlcz8ucXVlc3Rpb24gfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHQnXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgJ254dC1kaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBueHRib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgICB9XCIgaWQ9XCJ0ZXh0XCIgW2lkXT1cInF1ZXMudW5pcXVlU3ViUUlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzKVwiXG4gICAgICAgICAgICBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyBxdWVzLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHBsYWNlaG9sZGVyPVwie3sgcXVlcy5xdWVzdGlvbiB9fVwiXG4gICAgICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhZGRGbGFnXCI+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJBZGQoZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLmlkKSlcIiBjbGFzcz1cImJ0blwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiID48L2k+e3snYWRkJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L2J1dHRvbj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tTGlzdCBFbmQtLT5cblxuICA8IS0tIEFjdGlvbnMgLS0+XG4gIDwhLS0gVkQgYnV0dG9uIGNvbmRpdGlvbiByZW1vdmVkLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4ZXJcIj5cbiAgICA8IS0tIEJhY2t3YXJkIC8gQmFjayAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgICA8IS0tVkQgZGlzYWJsZWQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImJhY2tidXR0b25cIiBcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uYmFja1wiPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1sZWZ0LWJ0JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnknOlxuICAgICAgICAgICAgICAhcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbT8uYmFjayB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9yd2FyZCAvIE5leHQgLS0+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2ICAqbmdJZj1cInFiSXRlbS5uZXh0XCIgPlxuICAgICAgPGRpdiBjbGFzcz1cIm54dGJ1dHRvblwiPlxuICAgICAgICAgPCEtLVZEIGRpc2FibGVkIC0tPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1ydXN0eSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5JzpcbiAgICAgICAgICAgICAgIXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlTmV4dENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0ubmV4dCB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwidGhpcy5hYkl0ZW0/LnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cImNvbC1sZy0xMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICA8aDI+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5VGV4dH19PC9oMj5cbiAgPHA+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5U3ViVGV4dH19PC9wPlxuPC9kaXY+XG5cbjxkaXYgKm5nSWY9XCJzdW1tYXJ5ICYmIHN1bW1hcnkubGVuZ3RoID4gMFwiIGhlaWdodD1cIjEwMCUgIWltcG9ydGFudFwiIGNsYXNzPVwiY29sLW1kLTEyXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY29sLW1kLTEyJzohcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgICAgICB9XCI+XG4gICAgPGgxIGNsYXNzPVwibnh0LWhlYWRlcjEgbnh0LXN1bW1hcnlwYWRkXCIgPnt7IHFiSXRlbS5zdWJUaXRsZSB9fTwvaDE+ICAgICAgICAgXG4gIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3MyXCIgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyBcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IHN1bW1hcnk6ICAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPHAgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIFZEIFF1ZXN0aW9uIE5vIGFkZGVkIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPjxzcGFuPnt7IHFhLnF1ZXN0aW9uTnVtYmVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIHt7IHFhLnF1ZXNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1hbnN3ZXJcIiA+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT09ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgaW4gc3VtbWFyeSBmb3IgYm9vayB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09ICdCb29rJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHFhLm15VmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IHZhbC5xdWVzdGlvblRleHQgfX06PHNwYW4+e3sgdmFsLmlucHV0IH19PC9zcGFuPjwvcD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBEaXNwbGF5aW5nIHRoZSB2YWx1ZSBmb3IgZGlyZWN0IHF1ZXN0aW9uIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJyAmJiBxYS5xVHlwICE9ICdCb29rJ1wiPnt7IHFhLnF1ZXN0aW9uVGV4dCB9fSA8c3Bhbj48L3NwYW4+e3sgcWEuYW5zVmFsdWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwibnh0LWljb24tZWRpdGlvc1wiLz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuXG4gIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3MyXCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXIgXCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igbnh0c3VtbWFyeS10b3AnIDogcWJJdGVtLnByb2dyZXNzQmFyIH1cIiA+XG4gICAgICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzLXN1bW1hcnlcIiAqbmdJZj1cInFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgICA8Y2lyY2xlLXByb2dyZXNzIGNsYXNzPVwidGl0bGViYXJcIiBbcGVyY2VudF09XCJ0aGlzLnBlcmNlbnRcIiBbcmFkaXVzXT1cIjQwXCIgW3NwYWNlXT1cIi00XCIgW291dGVyU3Ryb2tlV2lkdGhdPVwiNFwiXG4gICAgICAgIFtpbm5lclN0cm9rZVdpZHRoXT1cIjRcIiBbb3V0ZXJTdHJva2VDb2xvcl09XCInI2UwYjFiMCdcIiBbaW5uZXJTdHJva2VDb2xvcl09XCInI2U3ZThlYSdcIiBbYW5pbWF0aW9uXT1cInRydWVcIiBbYmFja2dyb3VuZFBhZGRpbmddPSBcIjBcIlxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT0gXCInI2RkMmUxMydcIiBbYmFja2dyb3VuZEdyYWRpZW50U3RvcENvbG9yXT1cIicjZjliZmJkJ1wiIFt0aXRsZUNvbG9yXT1cIicjZjNlZGVkJ1wiIFxuICAgICAgICBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIiBbdGl0bGVdPVwidGhpcy5wZXJjZW50KyclJ1wiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIiBbc2hvd0JhY2tncm91bmRdPVwidHJ1ZVwiIFthbmltYXRpb25EdXJhdGlvbl09XCIzMDBcIlxuICAgICAgICBbc3RhcnRGcm9tWmVyb109XCJmYWxzZVwiIFtyZXNwb25zaXZlXT1cImZhbHNlXCIgPlxuICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+XG4gICAgICBcbiAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uc3VtbWFyeVRleHQgJiYgcWJJdGVtLnByb2dyZXNzQmFyXCIgXG4gICAgICBbbmdDbGFzc109XCJ7IHN1bW1hcnlUaXRsZTogcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibnh0LXN1YlRpdGxlXCIgPnt7IHFiSXRlbS5zdW1tYXJ5VGV4dCB9fTwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJueHQtc3ViVGl0bGUxXCIgPnt7IHFiSXRlbS5zdW1tYXJ5U3ViVGV4dH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgPGgzIGNsYXNzPVwic3VtbWFyeS1oXCI+XG4gICAgICAgIHt7IHFiSXRlbS5zdW1tYXJ5VGV4dCB9fVxuICAgICAgPC9oMz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZnVsbC1zdW1tYXJ5JzogcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICA8ZGl2IGNsYXNzPVwic3VtbWFyeS1ncm91cFRleHQgbXl0LWZvbnQyXCI+XG4gICAgICA8IS0tIDxwPkluZm9ybWUgZGUgZGHDsW88L3A+IC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIiA+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcWJJdGVtLmVkaXRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbiBzdW0tcXVlcyBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdW0tcXVlcyBxdWVzdGlvbiBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdzdW0tcXVlczEgcXVlc3Rpb24xIHN1bW1hcnktY29tcGxldGVkIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0ICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWFuc3dlclwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4ZXIxXCIgKm5nSWY9XCJhYkl0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzID09ICdDb21wbGV0ZWQnICYmIHFiSXRlbS5jYW5jZWxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2J0bi10ZXh0JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNhbmNlbENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0uY2FuY2VsIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAtLT5cblxuICA8IS0tIEdyb3VwIEFjdGlvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJhbGlnbi1lZGl0LXN1Ym1pdFwiICpuZ0lmPVwiYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxYkl0ZW0uc3VibWl0XCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsgJ2J0bi10ZXh0Mic6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5wcm9ncmVzc0JhciB9XCIgXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVTdWJtaXRDbGljaygpXCI+XG4gICAgICAgIHt7IHFiSXRlbS5zdWJtaXQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5lZGl0XCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnZ3JleSc6IHFiSXRlbS5wcm9ncmVzc0JhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5wcm9ncmVzc0Jhcn1cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGlja05ldygpXCI+XG4gICAgICAgIHt7IHFiSXRlbS5lZGl0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG48L2Rpdj4iXX0=
|