valtech-components 4.0.1021 → 4.0.1022
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/organisms/survey-builder/survey-builder.component.mjs +61 -39
- package/esm2022/lib/components/organisms/survey-builder/survey-builder.i18n.mjs +3 -1
- package/esm2022/lib/components/organisms/survey-response/survey-response.component.mjs +5 -6
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +67 -44
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/survey-builder/survey-builder.component.d.ts +1 -0
- package/lib/components/organisms/survey-response/survey-response.component.d.ts +4 -5
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -691,6 +691,10 @@ export class SurveyBuilderComponent {
|
|
|
691
691
|
const key = count === 1 ? 'reviewQuestionCount' : 'reviewQuestionsCount';
|
|
692
692
|
return this.interpolate(this.t(key), { count });
|
|
693
693
|
}
|
|
694
|
+
sectionQuestionCountText(count) {
|
|
695
|
+
const key = count === 1 ? 'reviewQuestionCount' : 'reviewQuestionsCount';
|
|
696
|
+
return this.interpolate(this.t(key), { count });
|
|
697
|
+
}
|
|
694
698
|
previewProps() {
|
|
695
699
|
return {
|
|
696
700
|
token: 'survey-builder-preview',
|
|
@@ -968,6 +972,11 @@ export class SurveyBuilderComponent {
|
|
|
968
972
|
@for (group of questionGroups(); track group.id; let sectionIndex = $index) {
|
|
969
973
|
@if (activeSectionId() === group.id) {
|
|
970
974
|
<section class="survey-builder__question-section">
|
|
975
|
+
<div class="survey-builder__section-summary">
|
|
976
|
+
<span>{{ interpolate(t('sectionCounter'), { count: sectionIndex + 1 }) }}</span>
|
|
977
|
+
<strong>{{ group.label || t('sectionNamePlaceholder') }}</strong>
|
|
978
|
+
<small>{{ sectionQuestionCountText(group.rows.length) }}</small>
|
|
979
|
+
</div>
|
|
971
980
|
<div class="survey-builder__section-head">
|
|
972
981
|
<div class="survey-builder__section-fields">
|
|
973
982
|
<val-form-field [label]="t('sectionNameLabel')">
|
|
@@ -1077,25 +1086,11 @@ export class SurveyBuilderComponent {
|
|
|
1077
1086
|
}
|
|
1078
1087
|
}
|
|
1079
1088
|
|
|
1080
|
-
|
|
1081
|
-
[props]="{
|
|
1082
|
-
token: 'survey-builder-add-question',
|
|
1083
|
-
text: t('addQuestion'),
|
|
1084
|
-
color: 'dark',
|
|
1085
|
-
fill: 'outline',
|
|
1086
|
-
shape: 'round',
|
|
1087
|
-
size: 'default',
|
|
1088
|
-
type: 'button',
|
|
1089
|
-
state: 'ENABLED',
|
|
1090
|
-
icon: { name: 'add-outline', slot: 'start' },
|
|
1091
|
-
}"
|
|
1092
|
-
(onClick)="addQuestion(currentSectionId())"
|
|
1093
|
-
/>
|
|
1094
|
-
@if (isWizard()) {
|
|
1089
|
+
@if (!isWizard()) {
|
|
1095
1090
|
<val-button
|
|
1096
1091
|
[props]="{
|
|
1097
|
-
token: 'survey-builder-add-
|
|
1098
|
-
text: t('
|
|
1092
|
+
token: 'survey-builder-add-question',
|
|
1093
|
+
text: t('addQuestion'),
|
|
1099
1094
|
color: 'dark',
|
|
1100
1095
|
fill: 'outline',
|
|
1101
1096
|
shape: 'round',
|
|
@@ -1104,9 +1099,27 @@ export class SurveyBuilderComponent {
|
|
|
1104
1099
|
state: 'ENABLED',
|
|
1105
1100
|
icon: { name: 'add-outline', slot: 'start' },
|
|
1106
1101
|
}"
|
|
1107
|
-
(onClick)="
|
|
1102
|
+
(onClick)="addQuestion(currentSectionId())"
|
|
1108
1103
|
/>
|
|
1109
1104
|
}
|
|
1105
|
+
@if (isWizard()) {
|
|
1106
|
+
<div class="survey-builder__section-actions">
|
|
1107
|
+
<val-button
|
|
1108
|
+
[props]="{
|
|
1109
|
+
token: 'survey-builder-add-section',
|
|
1110
|
+
text: t('addSection'),
|
|
1111
|
+
color: 'dark',
|
|
1112
|
+
fill: 'outline',
|
|
1113
|
+
shape: 'round',
|
|
1114
|
+
size: 'default',
|
|
1115
|
+
type: 'button',
|
|
1116
|
+
state: 'ENABLED',
|
|
1117
|
+
icon: { name: 'add-outline', slot: 'start' },
|
|
1118
|
+
}"
|
|
1119
|
+
(onClick)="addSection()"
|
|
1120
|
+
/>
|
|
1121
|
+
</div>
|
|
1122
|
+
}
|
|
1110
1123
|
</div>
|
|
1111
1124
|
}
|
|
1112
1125
|
|
|
@@ -1143,7 +1156,7 @@ export class SurveyBuilderComponent {
|
|
|
1143
1156
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
1144
1157
|
}
|
|
1145
1158
|
</div>
|
|
1146
|
-
`, isInline: true, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__question-section{display:flex;flex-direction:column;gap:
|
|
1159
|
+
`, isInline: true, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__question-section{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-sm, 10px);background:rgba(var(--ion-text-color-rgb, 0, 0, 0),.025)}.survey-builder__section-summary{display:grid;gap:3px;padding-bottom:8px;border-bottom:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__section-summary span,.survey-builder__section-summary small{color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.68);font-size:.8125rem;font-weight:700}.survey-builder__section-summary strong{color:var(--ion-text-color, #000);font-size:1rem}.survey-builder__section-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.survey-builder__section-head strong{color:var(--ion-text-color, #000);font-size:.875rem}.survey-builder__section-tabs{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px}.survey-builder__section-tab{flex:0 0 auto;min-height:36px;padding:7px 12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:999px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__section-tab--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:16px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__section-actions{display:flex;justify-content:flex-end}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-text-color, #000)}.survey-builder__empty{margin:0;font-size:.875rem;color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72)}.survey-builder__optional-note{margin:0;color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72);font-size:.875rem;line-height:1.35}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.68);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__row-editor-actions{display:flex;justify-content:flex-end}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: TextInputComponent, selector: "val-text-input", inputs: ["preset", "props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: FormFieldComponent, selector: "val-form-field", inputs: ["label"] }, { kind: "component", type: FieldSchemaEditorComponent, selector: "val-field-schema-editor", inputs: ["props"], outputs: ["save", "changed"] }] }); }
|
|
1147
1160
|
}
|
|
1148
1161
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SurveyBuilderComponent, decorators: [{
|
|
1149
1162
|
type: Component,
|
|
@@ -1388,6 +1401,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1388
1401
|
@for (group of questionGroups(); track group.id; let sectionIndex = $index) {
|
|
1389
1402
|
@if (activeSectionId() === group.id) {
|
|
1390
1403
|
<section class="survey-builder__question-section">
|
|
1404
|
+
<div class="survey-builder__section-summary">
|
|
1405
|
+
<span>{{ interpolate(t('sectionCounter'), { count: sectionIndex + 1 }) }}</span>
|
|
1406
|
+
<strong>{{ group.label || t('sectionNamePlaceholder') }}</strong>
|
|
1407
|
+
<small>{{ sectionQuestionCountText(group.rows.length) }}</small>
|
|
1408
|
+
</div>
|
|
1391
1409
|
<div class="survey-builder__section-head">
|
|
1392
1410
|
<div class="survey-builder__section-fields">
|
|
1393
1411
|
<val-form-field [label]="t('sectionNameLabel')">
|
|
@@ -1497,25 +1515,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1497
1515
|
}
|
|
1498
1516
|
}
|
|
1499
1517
|
|
|
1500
|
-
|
|
1501
|
-
[props]="{
|
|
1502
|
-
token: 'survey-builder-add-question',
|
|
1503
|
-
text: t('addQuestion'),
|
|
1504
|
-
color: 'dark',
|
|
1505
|
-
fill: 'outline',
|
|
1506
|
-
shape: 'round',
|
|
1507
|
-
size: 'default',
|
|
1508
|
-
type: 'button',
|
|
1509
|
-
state: 'ENABLED',
|
|
1510
|
-
icon: { name: 'add-outline', slot: 'start' },
|
|
1511
|
-
}"
|
|
1512
|
-
(onClick)="addQuestion(currentSectionId())"
|
|
1513
|
-
/>
|
|
1514
|
-
@if (isWizard()) {
|
|
1518
|
+
@if (!isWizard()) {
|
|
1515
1519
|
<val-button
|
|
1516
1520
|
[props]="{
|
|
1517
|
-
token: 'survey-builder-add-
|
|
1518
|
-
text: t('
|
|
1521
|
+
token: 'survey-builder-add-question',
|
|
1522
|
+
text: t('addQuestion'),
|
|
1519
1523
|
color: 'dark',
|
|
1520
1524
|
fill: 'outline',
|
|
1521
1525
|
shape: 'round',
|
|
@@ -1524,9 +1528,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1524
1528
|
state: 'ENABLED',
|
|
1525
1529
|
icon: { name: 'add-outline', slot: 'start' },
|
|
1526
1530
|
}"
|
|
1527
|
-
(onClick)="
|
|
1531
|
+
(onClick)="addQuestion(currentSectionId())"
|
|
1528
1532
|
/>
|
|
1529
1533
|
}
|
|
1534
|
+
@if (isWizard()) {
|
|
1535
|
+
<div class="survey-builder__section-actions">
|
|
1536
|
+
<val-button
|
|
1537
|
+
[props]="{
|
|
1538
|
+
token: 'survey-builder-add-section',
|
|
1539
|
+
text: t('addSection'),
|
|
1540
|
+
color: 'dark',
|
|
1541
|
+
fill: 'outline',
|
|
1542
|
+
shape: 'round',
|
|
1543
|
+
size: 'default',
|
|
1544
|
+
type: 'button',
|
|
1545
|
+
state: 'ENABLED',
|
|
1546
|
+
icon: { name: 'add-outline', slot: 'start' },
|
|
1547
|
+
}"
|
|
1548
|
+
(onClick)="addSection()"
|
|
1549
|
+
/>
|
|
1550
|
+
</div>
|
|
1551
|
+
}
|
|
1530
1552
|
</div>
|
|
1531
1553
|
}
|
|
1532
1554
|
|
|
@@ -1563,7 +1585,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1563
1585
|
<val-button [props]="saveProps()" (onClick)="save()" />
|
|
1564
1586
|
}
|
|
1565
1587
|
</div>
|
|
1566
|
-
`, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__question-section{display:flex;flex-direction:column;gap:
|
|
1588
|
+
`, styles: [":host{display:block}.survey-builder{display:flex;flex-direction:column;gap:16px}.survey-builder__questions{display:flex;flex-direction:column;gap:12px}.survey-builder__question-section{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-sm, 10px);background:rgba(var(--ion-text-color-rgb, 0, 0, 0),.025)}.survey-builder__section-summary{display:grid;gap:3px;padding-bottom:8px;border-bottom:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__section-summary span,.survey-builder__section-summary small{color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.68);font-size:.8125rem;font-weight:700}.survey-builder__section-summary strong{color:var(--ion-text-color, #000);font-size:1rem}.survey-builder__section-head{display:flex;justify-content:space-between;align-items:center;gap:8px}.survey-builder__section-head strong{color:var(--ion-text-color, #000);font-size:.875rem}.survey-builder__section-tabs{display:flex;gap:8px;overflow-x:auto;padding-bottom:2px}.survey-builder__section-tab{flex:0 0 auto;min-height:36px;padding:7px 12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:999px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__section-tab--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__presentation{display:flex;flex-direction:column;gap:12px;padding-top:4px}.survey-builder__section,.survey-builder__review{display:flex;flex-direction:column;gap:12px}.survey-builder__steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:16px;margin-bottom:12px}.survey-builder__step{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:8px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .12));border-radius:8px;background:var(--ion-card-background, var(--ion-background-color, #fff));color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72);font-size:.8125rem;font-weight:700;cursor:pointer}.survey-builder__step span{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:999px;background:var(--ion-color-light, #f4f5f8);color:inherit;font-size:.75rem}.survey-builder__step--active{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__wizard-actions{display:flex;justify-content:flex-end;gap:8px}.survey-builder__section-actions{display:flex;justify-content:flex-end}.survey-builder__review{padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__review strong{color:var(--ion-text-color, #000)}.survey-builder__review span:not(.survey-builder__questions-label){color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72);font-size:.875rem}.survey-builder__image-field{display:flex;flex-direction:column;gap:10px}.survey-builder__image-preview{position:relative;width:100%}.survey-builder__image-preview img{display:block;width:100%;aspect-ratio:16 / 9;object-fit:contain;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:8px;background:var(--ion-color-light, #f4f5f8)}.survey-builder__image-clear{position:absolute;top:8px;right:8px;display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:0;border-radius:999px;background:#0009;color:#fff;cursor:pointer}.survey-builder__image-upload{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 18px;border:2px dashed var(--ion-color-dark, #2f2c3a);border-radius:20px;color:var(--ion-color-dark, #2f2c3a);font-size:.875rem;font-weight:600;cursor:pointer}.survey-builder__image-upload:hover{border-color:var(--ion-color-primary);color:var(--ion-color-primary)}.survey-builder__image-upload--loading{opacity:.7;cursor:default}.survey-builder__image-upload ion-spinner{width:16px;height:16px}.survey-builder__image-upload input{display:none}.survey-builder__questions-label{font-size:.8125rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ion-text-color, #000)}.survey-builder__empty{margin:0;font-size:.875rem;color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72)}.survey-builder__optional-note{margin:0;color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.72);font-size:.875rem;line-height:1.35}.survey-builder__row{display:flex;flex-direction:column;gap:12px;padding:12px;border:1px solid var(--ion-border-color, rgba(0, 0, 0, .1));border-radius:var(--val-radius-md, 12px);background:var(--ion-card-background, var(--ion-background-color, #fff))}.survey-builder__row-head{display:flex;flex-direction:column;gap:8px}.survey-builder__row-text{display:flex;flex-direction:column;gap:2px;min-width:0}.survey-builder__row-text strong{color:var(--ion-text-color, #000);font-size:.9375rem}.survey-builder__row-text span{color:rgba(var(--ion-text-color-rgb, 0, 0, 0),.68);font-size:.8125rem}.survey-builder__row-actions{display:flex;gap:4px;flex-wrap:wrap}.survey-builder__row-editor{display:flex;flex-direction:column;gap:12px;padding-top:12px;border-top:1px solid var(--ion-border-color, rgba(0, 0, 0, .1))}.survey-builder__row-editor-actions{display:flex;justify-content:flex-end}.survey-builder__error{margin:0;color:var(--ion-color-danger);font-size:.875rem;font-weight:700}@media (min-width: 576px){.survey-builder__row-head{flex-direction:row;align-items:flex-start;justify-content:space-between}.survey-builder__row-text{flex:1}}\n"] }]
|
|
1567
1589
|
}], ctorParameters: () => [], propDecorators: { props: [{
|
|
1568
1590
|
type: Input
|
|
1569
1591
|
}], saved: [{
|
|
@@ -1571,4 +1593,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1571
1593
|
}], draft: [{
|
|
1572
1594
|
type: Output
|
|
1573
1595
|
}] } });
|
|
1574
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9zdXJ2ZXktYnVpbGRlci9zdXJ2ZXktYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUVwRyxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7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ZixrQkFBa0IsOEVBQ2xCLDBCQUEwQjs7NEZBc3FCakIsc0JBQXNCO2tCQWpyQmxDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsT0FBTzt3QkFDUCxVQUFVO3dCQUNWLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLDBCQUEwQjtxQkFDM0IsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1WlQ7d0RBOFFRLEtBQUs7c0JBQWIsS0FBSztnQkFDYSxLQUFLO3NCQUF2QixNQUFNO2dCQU9ZLEtBQUs7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgc2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uSWNvbiwgSW9uU3Bpbm5lciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHsgYWRkSWNvbnMgfSBmcm9tICdpb25pY29ucyc7XG5pbXBvcnQgeyBjbG91ZFVwbG9hZE91dGxpbmUsIGV5ZU91dGxpbmUsIHRyYXNoT3V0bGluZSB9IGZyb20gJ2lvbmljb25zL2ljb25zJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JlcXVlc3RzL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0Rm9ybUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVxdWVzdHMvcmVxdWVzdC1mb3JtLWJ1aWxkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZFNjaGVtYURlZiwgUmVxdWVzdFR5cGVQcmVzZW50YXRpb24gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0cy90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvdmFsdGVjaC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3RleHQtaW5wdXQvdGV4dC1pbnB1dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9ybUZpZWxkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2Zvcm0tZmllbGQvZm9ybS1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRklFTERfVFlQRVNfV0lUSF9PUFRJT05TLFxuICBGaWVsZFNjaGVtYUVkaXRvckNvbXBvbmVudCxcbn0gZnJvbSAnLi4vZmllbGQtc2NoZW1hLWVkaXRvci9maWVsZC1zY2hlbWEtZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGSUVMRF9TQ0hFTUFfRURJVE9SX0kxOE4gfSBmcm9tICcuLi9maWVsZC1zY2hlbWEtZWRpdG9yL2ZpZWxkLXNjaGVtYS1lZGl0b3IuaTE4bic7XG5pbXBvcnQgeyBFZGl0YWJsZUZpZWxkRGVmLCBGaWVsZFNjaGVtYUVkaXRvck1ldGFkYXRhIH0gZnJvbSAnLi4vZmllbGQtc2NoZW1hLWVkaXRvci90eXBlcyc7XG5pbXBvcnQge1xuICBTdXJ2ZXlCdWlsZGVyTWV0YWRhdGEsXG4gIFN1cnZleUJ1aWxkZXJTYXZlRXZlbnQsXG4gIFN1cnZleURyYWZ0RXZlbnQsXG4gIFNVUlZFWV9RVUVTVElPTl9UWVBFUyxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBTVVJWRVlfQlVJTERFUl9JMThOIH0gZnJvbSAnLi9zdXJ2ZXktYnVpbGRlci5pMThuJztcbmltcG9ydCB7IFN1cnZleVByZXZpZXdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vc3VydmV5LXByZXZpZXctbW9kYWwuY29tcG9uZW50JztcblxuY29uc3QgTkFNRVNQQUNFID0gJ1N1cnZleUJ1aWxkZXInO1xuY29uc3QgRURJVE9SX05BTUVTUEFDRSA9ICdGaWVsZFNjaGVtYUVkaXRvcic7XG5jb25zdCBERUZBVUxUX1RZUEVfUFJFRklYID0gJ3N1cnZleSc7XG5cbmxldCByb3dVaWQgPSAwO1xuXG5pbnRlcmZhY2UgU3VydmV5UXVlc3Rpb25TZWN0aW9uIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgc3VidGl0bGU6IHN0cmluZztcbiAgcm93czogRWRpdGFibGVGaWVsZERlZltdO1xufVxuXG5pbnRlcmZhY2UgV2l6YXJkU3RlcCB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogdmFsLXN1cnZleS1idWlsZGVyXG4gKlxuICogQXV0b3LDrWEgZGUgdW5hIGVuY3Vlc3RhOiB0w610dWxvLCBzdWJ0w610dWxvLCBwcmVndW50YXMg4oCUIGFybWEgbyBhY3R1YWxpemEgdW5cbiAqIGBSZXF1ZXN0VHlwZUNvbmZpZ2AgY29uIGBUeXBlOiBcIjxwcmVmaXg+OjxzbHVnPlwiYCAoQURSLTA5MiksIGBza2lwUmV2aWV3OlxuICogdHJ1ZWAgKGNhZGEgcmVzcHVlc3RhIHNlIGFncmVnYSwgbm8gc2UgcmV2aXNhIHVuYSBwb3IgdW5hKSB5IGVsIGBFbnRpdHlSZWZgXG4gKiBxdWUgbGUgcGFzYSBlbCBjb25zdW1lciAoZWouIGVsIGV2ZW50byBkZSBiaW5nbyBkdWXDsW8gZGUgbGEgZW5jdWVzdGEpLlxuICpcbiAqIENhZGEgcHJlZ3VudGEgc2UgZWRpdGEgY29uIGB2YWwtZmllbGQtc2NoZW1hLWVkaXRvcmAsIGVsIG1pc21vIGVkaXRvciBxdWUgdXNhXG4gKiBlbCBjaGVja291dCBkZSBiaW5nbyDigJQgZGUgYWjDrSBxdWUgdW5hIHByZWd1bnRhIHRlbmdhIHRpcG8sIHBsYWNlaG9sZGVyLCBub3RhXG4gKiB5IG9wY2lvbmVzLCBubyBzb2xvIHRleHRvLiBMYSB2MSBkZSBlc3RlIGNvbXBvbmVudGUgdGVuw61hIHN1IHByb3BpbyBlZGl0b3JcbiAqIHBvYnJlIChkb3MgdGlwb3MsIHNpbiBvcGNpb25lcyk7IGxhIEZhc2UgNSBkZWwgQURSLTA5MiBsbyByZWVtcGxhesOzIHBvciBlbFxuICogb3JnYW5pc20gY29tcGFydGlkbyBlbiB2ZXogZGUgbWVqb3JhcmxvIHBvciBkdXBsaWNhZG8uXG4gKlxuICogRWwgY2F0w6Fsb2dvIHF1ZSBvZnJlY2Ugc2FsZSBkZSBgU1VSVkVZX1FVRVNUSU9OX1RZUEVTYCDigJQgYWNvdGFkbyBhIGxvIHF1ZVxuICogYHZhbC1zdXJ2ZXktcmVzcG9uc2VgIHNhYmUgcmVuZGVyaXphciwgbm8gYSBsbyBxdWUgZWwgZWRpdG9yIHNhYmUgZWRpdGFyLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtc3VydmV5LWJ1aWxkZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgSW9uSWNvbixcbiAgICBJb25TcGlubmVyLFxuICAgIFRleHRJbnB1dENvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgRm9ybUZpZWxkQ29tcG9uZW50LFxuICAgIEZpZWxkU2NoZW1hRWRpdG9yQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlclwiPlxuICAgICAgQGlmIChpc1dpemFyZCgpKSB7XG4gICAgICAgIDxuYXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc3RlcHNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3dpemFyZFN0ZXBzTGFiZWwnKVwiPlxuICAgICAgICAgIEBmb3IgKHN0ZXAgb2Ygd2l6YXJkU3RlcHMoKTsgdHJhY2sgc3RlcC5pZDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3N0ZXBcIlxuICAgICAgICAgICAgICBbY2xhc3Muc3VydmV5LWJ1aWxkZXJfX3N0ZXAtLWFjdGl2ZV09XCJ3aXphcmRTdGVwKCkgPT09IGlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwid2l6YXJkU3RlcCgpID09PSBpID8gJ3N0ZXAnIDogbnVsbFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJnb1RvU3RlcChpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGkgKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICB7eyBzdGVwLmxhYmVsIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbmF2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKCFpc1dpemFyZCgpKSB7XG4gICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgndGl0bGVMYWJlbCcpXCI+XG4gICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHRpdGxlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3RpdGxlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWJ0aXRsZUxhYmVsJylcIj5cbiAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VidGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VidGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHNob3dXaXphcmRTZWN0aW9uKDApKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1cnZleU5hbWVMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VydmV5TmFtZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdXJ2ZXlOYW1lUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgndGl0bGVMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogdGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgndGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWJ0aXRsZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWJ0aXRsZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWJ0aXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdwcmVzZW50YXRpb25MYWJlbCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtZmllbGRcIj5cbiAgICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnaGVhZGVySW1hZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBoZWFkZXJJbWFnZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdoZWFkZXJJbWFnZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgQGlmIChoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImhlYWRlckltYWdlQ29udHJvbC52YWx1ZVwiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1jbGVhclwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2ltYWdlUmVtb3ZlJylcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyUHJlc2VudGF0aW9uSW1hZ2UoJ2hlYWRlcicpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAocHJvcHMucHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQpIHtcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZFwiIFtjbGFzcy5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkLS1sb2FkaW5nXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdoZWFkZXInXCI+XG4gICAgICAgICAgICAgICAgQGlmICh1cGxvYWRpbmdJbWFnZSgpID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIC8+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3VkLXVwbG9hZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlID8gdCgnaW1hZ2VDaGFuZ2UnKSA6IHQoJ2ltYWdlVXBsb2FkJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS93ZWJwLGltYWdlL2dpZiwuanBnLC5qcGVnLC5wbmcsLndlYnAsLmdpZlwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcidcIlxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZCgnaGVhZGVyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKCFpc1dpemFyZCgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsXCI+e3sgdCgncHJlc2VudGF0aW9uTGFiZWwnKSB9fTwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZFwiPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnaGVhZGVySW1hZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogaGVhZGVySW1hZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnaGVhZGVySW1hZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgQGlmIChoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtcHJldmlld1wiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWNsZWFyXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2ltYWdlUmVtb3ZlJylcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclByZXNlbnRhdGlvbkltYWdlKCdoZWFkZXInKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHByb3BzLnByZXNlbnRhdGlvbkltYWdlVXBsb2FkKSB7XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkXCIgW2NsYXNzLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQtLWxvYWRpbmddPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcidcIj5cbiAgICAgICAgICAgICAgQGlmICh1cGxvYWRpbmdJbWFnZSgpID09PSAnaGVhZGVyJykge1xuICAgICAgICAgICAgICAgIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIiAvPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3VkLXVwbG9hZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3Bhbj57eyBoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUgPyB0KCdpbWFnZUNoYW5nZScpIDogdCgnaW1hZ2VVcGxvYWQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL2pwZWcsaW1hZ2UvcG5nLGltYWdlL3dlYnAsaW1hZ2UvZ2lmLC5qcGcsLmpwZWcsLnBuZywud2VicCwuZ2lmXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcidcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25QcmVzZW50YXRpb25GaWxlU2VsZWN0ZWQoJ2hlYWRlcicsICRldmVudClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19vcHRpb25hbC1ub3RlXCI+e3sgdCgnc3VjY2Vzc09wdGlvbmFsTm90ZScpIH19PC9wPlxuICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1Y2Nlc3NUaXRsZUxhYmVsJylcIj5cbiAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VjY2Vzc1RpdGxlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1Y2Nlc3NUaXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc01lc3NhZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1Y2Nlc3NNZXNzYWdlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1Y2Nlc3NNZXNzYWdlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZFwiPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc0ltYWdlTGFiZWwnKVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1Y2Nlc3NJbWFnZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWNjZXNzSW1hZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgQGlmIChzdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWVcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtY2xlYXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnaW1hZ2VSZW1vdmUnKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyUHJlc2VudGF0aW9uSW1hZ2UoJ3N1Y2Nlc3MnKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHByb3BzLnByZXNlbnRhdGlvbkltYWdlVXBsb2FkKSB7XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkXCIgW2NsYXNzLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQtLWxvYWRpbmddPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnXCI+XG4gICAgICAgICAgICAgIEBpZiAodXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIC8+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvdWQtdXBsb2FkLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUgPyB0KCdpbWFnZUNoYW5nZScpIDogdCgnaW1hZ2VVcGxvYWQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL2pwZWcsaW1hZ2UvcG5nLGltYWdlL3dlYnAsaW1hZ2UvZ2lmLC5qcGcsLmpwZWcsLnBuZywud2VicCwuZ2lmXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUHJlc2VudGF0aW9uRmlsZVNlbGVjdGVkKCdzdWNjZXNzJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICBAaWYgKHNob3dXaXphcmRTZWN0aW9uKDIpKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdzdGVwQ2xvc2UnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8cCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19vcHRpb25hbC1ub3RlXCI+e3sgdCgnc3VjY2Vzc09wdGlvbmFsTm90ZScpIH19PC9wPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc1RpdGxlTGFiZWwnKVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1Y2Nlc3NUaXRsZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWNjZXNzVGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWNjZXNzTWVzc2FnZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWNjZXNzTWVzc2FnZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWNjZXNzTWVzc2FnZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWZpZWxkXCI+XG4gICAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1Y2Nlc3NJbWFnZUxhYmVsJylcIj5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1Y2Nlc3NJbWFnZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWNjZXNzSW1hZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIEBpZiAoc3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZVwiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1jbGVhclwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2ltYWdlUmVtb3ZlJylcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyUHJlc2VudGF0aW9uSW1hZ2UoJ3N1Y2Nlc3MnKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJ0cmFzaC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHByb3BzLnByZXNlbnRhdGlvbkltYWdlVXBsb2FkKSB7XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWRcIiBbY2xhc3Muc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZC0tbG9hZGluZ109XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnc3VjY2VzcydcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHVwbG9hZGluZ0ltYWdlKCkgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIC8+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImNsb3VkLXVwbG9hZC1vdXRsaW5lXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZSA/IHQoJ2ltYWdlQ2hhbmdlJykgOiB0KCdpbWFnZVVwbG9hZCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2Uvd2VicCxpbWFnZS9naWYsLmpwZywuanBlZywucG5nLC53ZWJwLC5naWZcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdzdWNjZXNzJ1wiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUHJlc2VudGF0aW9uRmlsZVNlbGVjdGVkKCdzdWNjZXNzJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHNob3dXaXphcmRTZWN0aW9uKDEpKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9uc1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdxdWVzdGlvbnNMYWJlbCcpIH19PC9zcGFuPlxuXG4gICAgICAgIEBpZiAoIXF1ZXN0aW9ucygpLmxlbmd0aCkge1xuICAgICAgICAgIDxwIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2VtcHR5XCI+e3sgdCgnbm9RdWVzdGlvbnMnKSB9fTwvcD5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAocXVlc3Rpb25Hcm91cHMoKS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19zZWN0aW9uLXRhYnNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ3NlY3Rpb25UYWJzTGFiZWwnKVwiPlxuICAgICAgICAgICAgQGZvciAoZ3JvdXAgb2YgcXVlc3Rpb25Hcm91cHMoKTsgdHJhY2sgZ3JvdXAuaWQ7IGxldCBzZWN0aW9uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tdGFiXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tdGFiLS1hY3RpdmVdPVwiYWN0aXZlU2VjdGlvbklkKCkgPT09IGdyb3VwLmlkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiYWN0aXZlU2VjdGlvbklkKCkgPT09IGdyb3VwLmlkID8gJ3RydWUnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNlY3Rpb24oZ3JvdXAuaWQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdyb3VwLmxhYmVsIHx8IHQoJ3NlY3Rpb25RdWVzdGlvbnNMYWJlbCcpICsgJyAnICsgKHNlY3Rpb25JbmRleCArIDEpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGZvciAoZ3JvdXAgb2YgcXVlc3Rpb25Hcm91cHMoKTsgdHJhY2sgZ3JvdXAuaWQ7IGxldCBzZWN0aW9uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICBAaWYgKGFjdGl2ZVNlY3Rpb25JZCgpID09PSBncm91cC5pZCkge1xuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9uLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi1oZWFkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi1maWVsZHNcIj5cbiAgICAgICAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3NlY3Rpb25OYW1lTGFiZWwnKVwiPlxuICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0XG4gICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgY29udHJvbDogc2VjdGlvbk5hbWVDb250cm9sKGdyb3VwLmlkKSxcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdCgnc2VjdGlvbk5hbWVQbGFjZWhvbGRlcicpLFxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tc3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc2VjdGlvblN1YnRpdGxlTGFiZWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbDogc2VjdGlvblN1YnRpdGxlQ29udHJvbChncm91cC5pZCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdCgnc2VjdGlvblN1YnRpdGxlUGxhY2Vob2xkZXInKSxcbiAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLWFkZC1xdWVzdGlvbi0nICsgZ3JvdXAuaWQsXG4gICAgICAgICAgICAgICAgICB0ZXh0OiB0KCdhZGRRdWVzdGlvblRvU2VjdGlvbicpLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICAgICAgc3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgICAgICAgICAgIGljb246IHsgbmFtZTogJ2FkZC1vdXRsaW5lJywgc2xvdDogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFF1ZXN0aW9uKGdyb3VwLmlkKVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgQGZvciAocm93IG9mIGdyb3VwLnJvd3M7IHRyYWNrIHJvdy5pZDsgbGV0IGkgPSAkaW5kZXg7IGxldCBmaXJzdCA9ICRmaXJzdDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICAgICAgICAgICAgICBAbGV0IGdsb2JhbEluZGV4ID0gcm93R2xvYmFsSW5kZXgoZ3JvdXAuaWQsIGkpO1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3Jvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LWhlYWRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyByb3cubGFiZWwgfHwgdCgndW50aXRsZWRRdWVzdGlvbicpIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlTGFiZWwocm93LnR5cGUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChyb3cucmVxdWlyZWQgPyAnIMK3ICcgKyB0KCdyZXF1aXJlZFRhZycpIDogJycpXG4gICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3Jvdy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImljb25BY3Rpb24oJ3EtYWRkLScgKyByb3cuaWQsICdhZGQtb3V0bGluZScsIGFkZFF1ZXN0aW9uQXJpYUxhYmVsKHJvdy5zZWN0aW9uTGFiZWwpLCBmYWxzZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFF1ZXN0aW9uKHJvdy5zZWN0aW9uSWQgfHwgZ3JvdXAuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiaWNvbkFjdGlvbigncS11cC0nICsgcm93LmlkLCAnYXJyb3ctdXAtb3V0bGluZScsIHQoJ21vdmVVcCcpLCBmaXJzdClcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm1vdmUoZ2xvYmFsSW5kZXgsIC0xKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImljb25BY3Rpb24oJ3EtZG93bi0nICsgcm93LmlkLCAnYXJyb3ctZG93bi1vdXRsaW5lJywgdCgnbW92ZURvd24nKSwgbGFzdClcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cIm1vdmUoZ2xvYmFsSW5kZXgsIDEpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiaWNvbkFjdGlvbigncS1jb3B5LScgKyByb3cuaWQsICdjb3B5LW91dGxpbmUnLCB0KCdkdXBsaWNhdGVRdWVzdGlvbicpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwiZHVwbGljYXRlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLWVkaXQtJyArIHJvdy5pZCwgJ2NyZWF0ZS1vdXRsaW5lJywgdCgnZWRpdFF1ZXN0aW9uJykpXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVFZGl0KHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLXJlbW92ZS0nICsgcm93LmlkLCAndHJhc2gtb3V0bGluZScsIHQoJ3JlbW92ZVF1ZXN0aW9uJyksIGZhbHNlLCAnZGFuZ2VyJylcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cInJlbW92ZVF1ZXN0aW9uKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICBAaWYgKGVkaXRpbmdJZCgpID09PSByb3cuaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LWVkaXRvclwiPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLWZpZWxkLXNjaGVtYS1lZGl0b3JcbiAgICAgICAgICAgICAgICAgICAgICAjZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImVkaXRvclByb3BzKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2VkKT1cImRyYWZ0UXVlc3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHNhdmUpPVwiYXBwbHlRdWVzdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3ctZWRpdG9yLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW46ICdxLWRvbmUtJyArIHJvdy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdCgnZG9uZUVkaXRpbmcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImVkaXRvci5zdWJtaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci1hZGQtcXVlc3Rpb24nLFxuICAgICAgICAgICAgdGV4dDogdCgnYWRkUXVlc3Rpb24nKSxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgc3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgICAgIGljb246IHsgbmFtZTogJ2FkZC1vdXRsaW5lJywgc2xvdDogJ3N0YXJ0JyB9LFxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChvbkNsaWNrKT1cImFkZFF1ZXN0aW9uKGN1cnJlbnRTZWN0aW9uSWQoKSlcIlxuICAgICAgICAvPlxuICAgICAgICBAaWYgKGlzV2l6YXJkKCkpIHtcbiAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci1hZGQtc2VjdGlvbicsXG4gICAgICAgICAgICAgIHRleHQ6IHQoJ2FkZFNlY3Rpb24nKSxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgc3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgICAgICAgaWNvbjogeyBuYW1lOiAnYWRkLW91dGxpbmUnLCBzbG90OiAnc3RhcnQnIH0sXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFNlY3Rpb24oKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd1dpemFyZFNlY3Rpb24oMykpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcmV2aWV3XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsXCI+e3sgdCgncmV2aWV3VGl0bGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Ryb25nPnt7IHRpdGxlQ29udHJvbC52YWx1ZSB8fCB0KCd1bnRpdGxlZFF1ZXN0aW9uJykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBzdWJ0aXRsZUNvbnRyb2wudmFsdWUgfHwgdCgncmV2aWV3Tm9TdWJ0aXRsZScpIH19PC9zcGFuPlxuICAgICAgICAgIDxzcGFuPnt7IHJldmlld1F1ZXN0aW9uc0NvdW50KCkgfX08L3NwYW4+XG4gICAgICAgICAgQGlmIChoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ3Jldmlld0hlYWRlckltYWdlJykgfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuPnt7IHN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUgPyB0KCdyZXZpZXdTdWNjZXNzSW1hZ2UnKSA6IHQoJ3Jldmlld0RlZmF1bHRDbG9zZScpIH19PC9zcGFuPlxuICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJwcmV2aWV3UHJvcHMoKVwiIChvbkNsaWNrKT1cIm9wZW5QcmV2aWV3KClcIiAvPlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAodmFsaWRhdGlvbkVycm9yKCkpIHtcbiAgICAgICAgPHAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fZXJyb3JcIj57eyB2YWxpZGF0aW9uRXJyb3IoKSB9fTwvcD5cbiAgICAgIH1cblxuICAgICAgQGlmIChpc1dpemFyZCgpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fd2l6YXJkLWFjdGlvbnNcIj5cbiAgICAgICAgICBAaWYgKHdpemFyZFN0ZXAoKSA+IDApIHtcbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJ3aXphcmRCYWNrUHJvcHMoKVwiIChvbkNsaWNrKT1cInByZXZpb3VzU3RlcCgpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmICh3aXphcmRTdGVwKCkgPCB3aXphcmRTdGVwcygpLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJ3aXphcmROZXh0UHJvcHMoKVwiIChvbkNsaWNrKT1cIm5leHRTdGVwKClcIiAvPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInNhdmVQcm9wcygpXCIgKG9uQ2xpY2spPVwic2F2ZSgpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJzYXZlUHJvcHMoKVwiIChvbkNsaWNrKT1cInNhdmUoKVwiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIDpob3N0IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDE2cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb24tc2VjdGlvbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdmFsLXJhZGl1cy1zbSwgMTBweCk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24taGVhZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24taGVhZCBzdHJvbmcge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLXRleHQtY29sb3IsICMwMDApO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19zZWN0aW9uLXRhYnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDJweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi10YWIge1xuICAgICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMzZweDtcbiAgICAgICAgcGFkZGluZzogN3B4IDEycHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xMikpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgICAgY29sb3I6IHJnYmEodmFyKC0taW9uLXRleHQtY29sb3ItcmdiLCAwLCAwLCAwKSwgMC43Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tdGFiLS1hY3RpdmUge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcHJlc2VudGF0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nLXRvcDogNHB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19zZWN0aW9uLFxuICAgICAgLnN1cnZleS1idWlsZGVyX19yZXZpZXcge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3N0ZXBzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgbWlubWF4KDAsIDFmcikpO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc3RlcCB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7XG4gICAgICAgIHBhZGRpbmc6IDhweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgICAgY29sb3I6IHJnYmEodmFyKC0taW9uLXRleHQtY29sb3ItcmdiLCAwLCAwLCAwKSwgMC43Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3N0ZXAgc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDIwcHg7XG4gICAgICAgIGhlaWdodDogMjBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCwgI2Y0ZjVmOCk7XG4gICAgICAgIGNvbG9yOiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3N0ZXAtLWFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX193aXphcmQtYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yZXZpZXcge1xuICAgICAgICBwYWRkaW5nOiAxMnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS12YWwtcmFkaXVzLW1kLCAxMnB4KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNhcmQtYmFja2dyb3VuZCwgdmFyKC0taW9uLWJhY2tncm91bmQtY29sb3IsICNmZmYpKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcmV2aWV3IHN0cm9uZyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JldmlldyBzcGFuOm5vdCguc3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucy1sYWJlbCkge1xuICAgICAgICBjb2xvcjogcmdiYSh2YXIoLS1pb24tdGV4dC1jb2xvci1yZ2IsIDAsIDAsIDApLCAwLjcyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtZmllbGQge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXByZXZpZXcge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS1wcmV2aWV3IGltZyB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiAxNiAvIDk7XG4gICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtY2xlYXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogOHB4O1xuICAgICAgICByaWdodDogOHB4O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAzMnB4O1xuICAgICAgICBoZWlnaHQ6IDMycHg7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgbWluLWhlaWdodDogNDRweDtcbiAgICAgICAgcGFkZGluZzogMTBweCAxOHB4O1xuICAgICAgICBib3JkZXI6IDJweCBkYXNoZWQgdmFyKC0taW9uLWNvbG9yLWRhcmssICMyZjJjM2EpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmssICMyZjJjM2EpO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZDpob3ZlciB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQtLWxvYWRpbmcge1xuICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkIGlvbi1zcGlubmVyIHtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkIGlucHV0IHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2VtcHR5IHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBjb2xvcjogcmdiYSh2YXIoLS1pb24tdGV4dC1jb2xvci1yZ2IsIDAsIDAsIDApLCAwLjcyKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fb3B0aW9uYWwtbm90ZSB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgY29sb3I6IHJnYmEodmFyKC0taW9uLXRleHQtY29sb3ItcmdiLCAwLCAwLCAwKSwgMC43Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXZhbC1yYWRpdXMtbWQsIDEycHgpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciwgI2ZmZikpO1xuICAgICAgfVxuICAgICAgLyogTW9iaWxlLWZpcnN0OiBlbCB0ZXh0byBkZSBsYSBwcmVndW50YSB5IHN1cyBhY2Npb25lcyBhcGlsYWRvcy4gRW4gZmlsYVxuICAgICAgICAgZmlqYSwgY2luY28gYm90b25lcyBsZSBjb21lbiBlbCBhbmNobyBhbCB0ZXh0byB5IGxvIHBhcnRlbiBlbiBtdWNoYXNcbiAgICAgICAgIGzDrW5lYXMgYW5nb3N0YXMg4oCUIGp1c3RvIGVuIGVsIHZpZXdwb3J0IGRvbmRlIG3DoXMgc2UgdXNhLiAqL1xuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctaGVhZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctdGV4dCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMnB4O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHN0cm9uZyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctdGV4dCBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEodmFyKC0taW9uLXRleHQtY29sb3ItcmdiLCAwLCAwLCAwKSwgMC42OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1lZGl0b3Ige1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiAxMnB4O1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93LWVkaXRvci1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fZXJyb3Ige1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFuZ2VyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA1NzZweCkge1xuICAgICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkIHtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgfVxuICAgICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHtcbiAgICAgICAgICBmbGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU3VydmV5QnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIHByb3BzOiBTdXJ2ZXlCdWlsZGVyTWV0YWRhdGEgPSB7fTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNhdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxTdXJ2ZXlCdWlsZGVyU2F2ZUV2ZW50PigpO1xuICAvKipcbiAgICogRW1pdGUgbG8gZXNjcml0bywgeWEgdmFsaWRhZG8sIFNJTiBndWFyZGFybG8uIFNvbG8gY29uIGBwcm9wcy5wZXJzaXN0OlxuICAgKiBmYWxzZWAg4oCUIHZlciBlbCBjb21lbnRhcmlvIGRlIGVzZSBjYW1wbzogY3VhbmRvIGxhIGFwcCB0aWVuZSBlbmRwb2ludFxuICAgKiBwcm9waW8sIGd1YXJkYXIgZGVzZGUgYWPDoSBzZSBzYWx0YSBsYSB2YWxpZGFjacOzbiBkZSBsYSBlbnRpZGFkIGR1ZcOxYSB5IGVsXG4gICAqIHBlcm1pc28gZGUgbGEgdmVydGljYWwuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZHJhZnQgPSBuZXcgRXZlbnRFbWl0dGVyPFN1cnZleURyYWZ0RXZlbnQ+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXF1ZXN0cyA9IGluamVjdChSZXF1ZXN0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoUmVxdWVzdEZvcm1CdWlsZGVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JzID0gaW5qZWN0KFZhbHRlY2hFcnJvclNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1vZGFscyA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xuXG4gIHJlYWRvbmx5IHN1cnZleU5hbWVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICByZWFkb25seSB0aXRsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1YnRpdGxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgaGVhZGVySW1hZ2VDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICByZWFkb25seSBzdWNjZXNzVGl0bGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICByZWFkb25seSBzdWNjZXNzTWVzc2FnZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NJbWFnZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHF1ZXN0aW9ucyA9IHNpZ25hbDxFZGl0YWJsZUZpZWxkRGVmW10+KFtdKTtcbiAgcmVhZG9ubHkgZWRpdGluZ0lkID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgd2l6YXJkU3RlcCA9IHNpZ25hbCgwKTtcbiAgcmVhZG9ubHkgdmFsaWRhdGlvbkVycm9yID0gc2lnbmFsKCcnKTtcbiAgcmVhZG9ubHkgc2F2aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgdXBsb2FkaW5nSW1hZ2UgPSBzaWduYWw8J2hlYWRlcicgfCAnc3VjY2VzcycgfCAnJz4oJycpO1xuICByZWFkb25seSBzZWN0aW9uSWRzID0gc2lnbmFsPHN0cmluZ1tdPihbJ19fZGVmYXVsdF9fJ10pO1xuICByZWFkb25seSBzZWN0aW9uTmFtZXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuICByZWFkb25seSBzZWN0aW9uU3VidGl0bGVzID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KTtcbiAgcmVhZG9ubHkgYWN0aXZlU2VjdGlvbklkID0gc2lnbmFsKCdfX2RlZmF1bHRfXycpO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlY3Rpb25OYW1lQ29udHJvbHM6IFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sPiA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IHNlY3Rpb25TdWJ0aXRsZUNvbnRyb2xzOiBSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbD4gPSB7fTtcblxuICByZWFkb25seSBxdWVzdGlvbkdyb3VwcyA9IGNvbXB1dGVkPFN1cnZleVF1ZXN0aW9uU2VjdGlvbltdPigoKSA9PiB0aGlzLmdyb3VwUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25zKCkpKTtcblxuICByZWFkb25seSB3aXphcmRTdGVwcyA9IGNvbXB1dGVkPFdpemFyZFN0ZXBbXT4oKCkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7IGlkOiAnc3RhcnQnLCBsYWJlbDogdGhpcy50KCdzdGVwU3RhcnQnKSB9LFxuICAgICAgeyBpZDogJ3F1ZXN0aW9ucycsIGxhYmVsOiB0aGlzLnQoJ3N0ZXBRdWVzdGlvbnMnKSB9LFxuICAgICAgeyBpZDogJ2Nsb3NlJywgbGFiZWw6IHRoaXMudCgnc3RlcENsb3NlJykgfSxcbiAgICAgIHsgaWQ6ICdyZXZpZXcnLCBsYWJlbDogdGhpcy50KCdzdGVwUmV2aWV3JykgfSxcbiAgICBdO1xuICB9KTtcblxuICBwcml2YXRlIGdyb3VwUXVlc3Rpb25zKHJvd3M6IEVkaXRhYmxlRmllbGREZWZbXSk6IFN1cnZleVF1ZXN0aW9uU2VjdGlvbltdIHtcbiAgICBjb25zdCBncm91cHM6IFN1cnZleVF1ZXN0aW9uU2VjdGlvbltdID0gdGhpcy5zZWN0aW9uSWRzKCkubWFwKGlkID0+ICh7XG4gICAgICBpZCxcbiAgICAgIGxhYmVsOiB0aGlzLnNlY3Rpb25OYW1lcygpW2lkXSA/PyAnJyxcbiAgICAgIHN1YnRpdGxlOiB0aGlzLnNlY3Rpb25TdWJ0aXRsZXMoKVtpZF0gPz8gJycsXG4gICAgICByb3dzOiBbXSxcbiAgICB9KSk7XG4gICAgY29uc3QgaW5kZXggPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCwgcG9zaXRpb24pID0+IGluZGV4LnNldChncm91cC5pZCwgcG9zaXRpb24pKTtcblxuICAgIHJvd3MuZm9yRWFjaChxdWVzdGlvbiA9PiB7XG4gICAgICBjb25zdCBzZWN0aW9uID0gKHF1ZXN0aW9uLnNlY3Rpb25MYWJlbCA/PyAnJykudHJpbSgpO1xuICAgICAgY29uc3Qgc2VjdGlvbktleSA9IHF1ZXN0aW9uLnNlY3Rpb25JZCB8fCAoc2VjdGlvbiA/IHRoaXMuZm9ybUJ1aWxkZXIudG9Ub2tlbihzZWN0aW9uKSA6ICdfX2RlZmF1bHRfXycpO1xuICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLnNlY3Rpb25OYW1lcygpW3NlY3Rpb25LZXldID8/IHNlY3Rpb247XG4gICAgICBsZXQgcG9zaXRpb24gPSBpbmRleC5nZXQoc2VjdGlvbktleSk7XG4gICAgICBpZiAocG9zaXRpb24gPT0gbnVsbCkge1xuICAgICAgICBwb3NpdGlvbiA9IGdyb3Vwcy5sZW5ndGg7XG4gICAgICAgIGluZGV4LnNldChzZWN0aW9uS2V5LCBwb3NpdGlvbik7XG4gICAgICAgIGdyb3Vwcy5wdXNoKHsgaWQ6IHNlY3Rpb25LZXksIGxhYmVsLCBzdWJ0aXRsZTogdGhpcy5zZWN0aW9uU3VidGl0bGVzKClbc2VjdGlvbktleV0gPz8gJycsIHJvd3M6IFtdIH0pO1xuICAgICAgfVxuICAgICAgZ3JvdXBzW3Bvc2l0aW9uXS5yb3dzLnB1c2gocXVlc3Rpb24pO1xuICAgIH0pO1xuXG4gICAgaWYgKCFncm91cHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0SWQgPSAnX19kZWZhdWx0X18nO1xuICAgICAgZ3JvdXBzLnB1c2goeyBpZDogZGVmYXVsdElkLCBsYWJlbDogdGhpcy5zZWN0aW9uTmFtZXMoKVtkZWZhdWx0SWRdID8/ICcnLCBzdWJ0aXRsZTogdGhpcy5zZWN0aW9uU3VidGl0bGVzKClbZGVmYXVsdElkXSA/PyAnJywgcm93czogW10gfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwcztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplU2VjdGlvbklkKHNlY3Rpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHNlY3Rpb25JZCA/PyAnJykudHJpbSgpIHx8ICdfX2RlZmF1bHRfXyc7XG4gIH1cblxuICBwcml2YXRlIHF1ZXN0aW9uR3JvdXBCeUlkKHNlY3Rpb25JZDogc3RyaW5nKTogU3VydmV5UXVlc3Rpb25TZWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkdyb3VwcygpLmZpbmQoZ3JvdXAgPT4gZ3JvdXAuaWQgPT09IHNlY3Rpb25JZCk7XG4gIH1cblxuICBzZWN0aW9uTmFtZUNvbnRyb2woc2VjdGlvbklkOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHNlY3Rpb25JZCk7XG4gICAgaWYgKCF0aGlzLnNlY3Rpb25OYW1lQ29udHJvbHNbbm9ybWFsaXplZF0pIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5zZWN0aW9uTmFtZXMoKVtub3JtYWxpemVkXSA/PyAnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gKHZhbHVlID8/ICcnKS50cmltKCk7XG4gICAgICAgIHRoaXMuc2VjdGlvbk5hbWVzLnVwZGF0ZSh2YWx1ZXMgPT4gKHsgLi4udmFsdWVzLCBbbm9ybWFsaXplZF06IHZhbHVlIH0pKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT5cbiAgICAgICAgICByb3dzLm1hcChyb3cgPT5cbiAgICAgICAgICAgIHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHJvdy5zZWN0aW9uSWQpID09PSBub3JtYWxpemVkXG4gICAgICAgICAgICAgID8geyAuLi5yb3csIHNlY3Rpb25JZDogbm9ybWFsaXplZCwgc2VjdGlvbkxhYmVsOiBsYWJlbCB8fCB1bmRlZmluZWQgfVxuICAgICAgICAgICAgICA6IHJvd1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zZWN0aW9uTmFtZUNvbnRyb2xzW25vcm1hbGl6ZWRdID0gY29udHJvbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZWN0aW9uTmFtZUNvbnRyb2xzW25vcm1hbGl6ZWRdO1xuICB9XG5cbiAgc2VjdGlvblN1YnRpdGxlQ29udHJvbChzZWN0aW9uSWQ6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVTZWN0aW9uSWQoc2VjdGlvbklkKTtcbiAgICBpZiAoIXRoaXMuc2VjdGlvblN1YnRpdGxlQ29udHJvbHNbbm9ybWFsaXplZF0pIHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGhpcy5zZWN0aW9uU3VidGl0bGVzKClbbm9ybWFsaXplZF0gPz8gJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gICAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICB0aGlzLnNlY3Rpb25TdWJ0aXRsZXMudXBkYXRlKHZhbHVlcyA9PiAoeyAuLi52YWx1ZXMsIFtub3JtYWxpemVkXTogdmFsdWUgfSkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlY3Rpb25TdWJ0aXRsZUNvbnRyb2xzW25vcm1hbGl6ZWRdID0gY29udHJvbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zZWN0aW9uU3VidGl0bGVDb250cm9sc1tub3JtYWxpemVkXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb3dlZEltYWdlVHlwZXMgPSBbJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcG5nJywgJ2ltYWdlL3dlYnAnLCAnaW1hZ2UvZ2lmJ107XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4SW1hZ2VCeXRlcyA9IDEwICogMTAyNCAqIDEwMjQ7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKE5BTUVTUEFDRSkpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKE5BTUVTUEFDRSwgU1VSVkVZX0JVSUxERVJfSTE4Tik7XG4gICAgfVxuICAgIC8vIEVsIG5vbWJyZSBkZWwgdGlwbyBkZSBjYWRhIHByZWd1bnRhIHNlIG11ZXN0cmEgZW4gbGEgZmlsYSBjb2xhcHNhZGEsIHF1ZVxuICAgIC8vIGRpYnVqYSBlc3RlIGNvbXBvbmVudGUgeSBubyBlbCBlZGl0b3Ig4oCUIHNpIG5hZGllIG1vbnTDsyB1biBlZGl0b3IgdG9kYXbDrWEsXG4gICAgLy8gZWwgbmFtZXNwYWNlIG5vIGV4aXN0aXLDrWEgeSBsYSBmaWxhIG1vc3RyYXLDrWEgbGEgY2xhdmUgY3J1ZGEuXG4gICAgaWYgKCF0aGlzLmkxOG4uaGFzTmFtZXNwYWNlKEVESVRPUl9OQU1FU1BBQ0UpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhFRElUT1JfTkFNRVNQQUNFLCBGSUVMRF9TQ0hFTUFfRURJVE9SX0kxOE4pO1xuICAgIH1cbiAgICB0aGlzLnN1Y2Nlc3NUaXRsZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5kZWZhdWx0U3VjY2Vzc1RpdGxlKCkpO1xuICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2VDb250cm9sLnNldFZhbHVlKHRoaXMuZGVmYXVsdFN1Y2Nlc3NNZXNzYWdlKCkpO1xuICAgIGFkZEljb25zKHsgY2xvdWRVcGxvYWRPdXRsaW5lLCBleWVPdXRsaW5lLCB0cmFzaE91dGxpbmUgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBTZW1icmFkbyBkaXJlY3RvOiBsYSBhcHAgeWEgdGVuw61hIGxhIGVuY3Vlc3RhLCBubyBoYWNlIGZhbHRhIGxlZXJsYS5cbiAgICBpZiAodGhpcy5wcm9wcy5pbml0aWFsKSB7XG4gICAgICB0aGlzLmh5ZHJhdGUoXG4gICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbC5uYW1lLFxuICAgICAgICB0aGlzLnByb3BzLmluaXRpYWwubGFiZWwsXG4gICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbC5zdWJ0aXRsZSxcbiAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsLnF1ZXN0aW9ucyxcbiAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsLnByZXNlbnRhdGlvblxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnR5cGVJZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjZmcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnJlcXVlc3RzLmdldFJlcXVlc3RUeXBlKHRoaXMucHJvcHMudHlwZUlkKSk7XG4gICAgICBjb25zdCBtZXRhZGF0YU5hbWUgPVxuICAgICAgICB0eXBlb2YgY2ZnLm1ldGFkYXRhPy5bJ25hbWUnXSA9PT0gJ3N0cmluZycgPyBjZmcubWV0YWRhdGFbJ25hbWUnXSA6ICcnO1xuICAgICAgdGhpcy5oeWRyYXRlKFxuICAgICAgICBtZXRhZGF0YU5hbWUgfHwgY2ZnLmxhYmVsLFxuICAgICAgICBjZmcubGFiZWwsXG4gICAgICAgIGNmZy5zdWJ0aXRsZSA/PyAnJyxcbiAgICAgICAgY2ZnLmZpZWxkU2NoZW1hLFxuICAgICAgICBjZmcucHJlc2VudGF0aW9uLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ3N1cnZleUJ1aWxkZXIubG9hZCcsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnbG9hZEVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogTkFNRVNQQUNFLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCBOQU1FU1BBQ0UpO1xuICB9XG5cbiAgdHlwZUxhYmVsKHR5cGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoYHR5cGUke3R5cGV9YCwgRURJVE9SX05BTUVTUEFDRSk7XG4gIH1cblxuICBxdWVzdGlvblR5cGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5xdWVzdGlvblR5cGVzPy5sZW5ndGggPyB0aGlzLnByb3BzLnF1ZXN0aW9uVHlwZXMgOiBTVVJWRVlfUVVFU1RJT05fVFlQRVM7XG4gIH1cblxuICBpc1dpemFyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5sYXlvdXQgPT09ICd3aXphcmQnO1xuICB9XG5cbiAgc2hvd1dpemFyZFNlY3Rpb24oc3RlcDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNXaXphcmQoKSAmJiB0aGlzLndpemFyZFN0ZXAoKSA9PT0gc3RlcDtcbiAgfVxuXG4gIGdvVG9TdGVwKHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1dpemFyZCgpKSByZXR1cm47XG4gICAgaWYgKHN0ZXAgPD0gdGhpcy53aXphcmRTdGVwKCkpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgICB0aGlzLndpemFyZFN0ZXAuc2V0KHN0ZXApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB3aGlsZSAodGhpcy53aXphcmRTdGVwKCkgPCBzdGVwKSB7XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVXaXphcmRTdGVwKHRoaXMud2l6YXJkU3RlcCgpKSkgcmV0dXJuO1xuICAgICAgdGhpcy53aXphcmRTdGVwLnVwZGF0ZShjdXJyZW50ID0+IGN1cnJlbnQgKyAxKTtcbiAgICB9XG4gIH1cblxuICBuZXh0U3RlcCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVXaXphcmRTdGVwKHRoaXMud2l6YXJkU3RlcCgpKSkgcmV0dXJuO1xuICAgIHRoaXMud2l6YXJkU3RlcC51cGRhdGUoc3RlcCA9PiBNYXRoLm1pbihzdGVwICsgMSwgdGhpcy53aXphcmRTdGVwcygpLmxlbmd0aCAtIDEpKTtcbiAgfVxuXG4gIHByZXZpb3VzU3RlcCgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuICAgIHRoaXMud2l6YXJkU3RlcC51cGRhdGUoc3RlcCA9PiBNYXRoLm1heChzdGVwIC0gMSwgMCkpO1xuICB9XG5cbiAgd2l6YXJkQmFja1Byb3BzKCk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci13aXphcmQtYmFjaycsXG4gICAgICB0ZXh0OiB0aGlzLnQoJ3ByZXZpb3VzJyksXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuICB9XG5cbiAgd2l6YXJkTmV4dFByb3BzKCk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci13aXphcmQtbmV4dCcsXG4gICAgICB0ZXh0OiB0aGlzLnQoJ25leHQnKSxcbiAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICBmaWxsOiAnc29saWQnLFxuICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuICB9XG5cbiAgc2F2ZVByb3BzKCk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci1zYXZlJyxcbiAgICAgIHRleHQ6IHRoaXMudCgnc2F2ZScpLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICBleHBhbmQ6IHRoaXMuaXNXaXphcmQoKSA/IHVuZGVmaW5lZCA6ICdibG9jaycsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHN0YXRlOiB0aGlzLnNhdmluZygpID8gQ29tcG9uZW50U3RhdGVzLldPUktJTkcgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICB9O1xuICB9XG5cbiAgY2xvc2VTdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDI7XG4gIH1cblxuICByZXZpZXdTdGVwKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDM7XG4gIH1cblxuICBjdXJyZW50U2VjdGlvbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLmlzV2l6YXJkKCkpIHJldHVybiB0aGlzLnF1ZXN0aW9uR3JvdXBzKClbMF0/LmlkO1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZVNlY3Rpb25JZCgpO1xuICB9XG5cbiAgc2VsZWN0U2VjdGlvbihzZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlU2VjdGlvbklkLnNldCh0aGlzLm5vcm1hbGl6ZVNlY3Rpb25JZChzZWN0aW9uSWQpKTtcbiAgfVxuXG4gIGludGVycG9sYXRlKHRlbXBsYXRlOiBzdHJpbmcsIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlcykucmVkdWNlKFxuICAgICAgKHRleHQsIFtrZXksIHZhbHVlXSkgPT4gdGV4dC5yZXBsYWNlQWxsKGB7JHtrZXl9fWAsIFN0cmluZyh2YWx1ZSkpLFxuICAgICAgdGVtcGxhdGVcbiAgICApO1xuICB9XG5cbiAgZWRpdG9yUHJvcHMocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogRmllbGRTY2hlbWFFZGl0b3JNZXRhZGF0YSB7XG4gICAgcmV0dXJuIHsgbW9kZTogJ2VkaXQnLCBmaWVsZDogcm93LCBhbGxvd2VkVHlwZXM6IHRoaXMucXVlc3Rpb25UeXBlcygpLCBzaG93U2VjdGlvbjogZmFsc2UgfTtcbiAgfVxuXG4gIGljb25BY3Rpb24oXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBpY29uOiBzdHJpbmcsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIGNvbG9yOiBDb2xvciA9ICdkYXJrJ1xuICApOiBCdXR0b25NZXRhZGF0YSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgdGV4dDogJycsXG4gICAgICBhcmlhTGFiZWw6IGxhYmVsLFxuICAgICAgY29sb3IsXG4gICAgICBmaWxsOiAnY2xlYXInLFxuICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBzdGF0ZTogZGlzYWJsZWQgPyBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgICAgIGljb246IHsgbmFtZTogaWNvbiwgc2xvdDogJ2ljb24tb25seScgfSxcbiAgICB9O1xuICB9XG5cbiAgYWRkUXVlc3Rpb25BcmlhTGFiZWwoc2VjdGlvbkxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWN0aW9uID0gKHNlY3Rpb25MYWJlbCA/PyAnJykudHJpbSgpO1xuICAgIGlmICghc2VjdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMudCgnYWRkUXVlc3Rpb25Ub1NlY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMudCgnYWRkUXVlc3Rpb25Ub1NlY3Rpb24nKX0gKCR7c2VjdGlvbn0pYDtcbiAgfVxuXG4gIGFkZFF1ZXN0aW9uKHNlY3Rpb25JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWN0aW9uSWQgPSB0aGlzLm5vcm1hbGl6ZVNlY3Rpb25JZChzZWN0aW9uSWQpO1xuICAgIGNvbnN0IHRhcmdldEdyb3VwID0gdGhpcy5xdWVzdGlvbkdyb3VwQnlJZChub3JtYWxpemVkU2VjdGlvbklkKTtcbiAgICBjb25zdCBzZWN0aW9uTGFiZWwgPSB0aGlzLnNlY3Rpb25OYW1lQ29udHJvbChub3JtYWxpemVkU2VjdGlvbklkKS52YWx1ZS50cmltKCkgfHwgdGFyZ2V0R3JvdXA/LmxhYmVsIHx8ICcnO1xuICAgIGNvbnN0IHJvdzogRWRpdGFibGVGaWVsZERlZiA9IHtcbiAgICAgIGlkOiBgcm93LSR7cm93VWlkKyt9YCxcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgcGxhY2Vob2xkZXJUZXh0OiAnJyxcbiAgICAgIGhpbnRUZXh0OiAnJyxcbiAgICAgIG5vdGVUZXh0OiAnJyxcbiAgICAgIHR5cGU6IHRoaXMucXVlc3Rpb25UeXBlcygpWzBdLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBzZWN0aW9uSWQ6IG5vcm1hbGl6ZWRTZWN0aW9uSWQsXG4gICAgICBzZWN0aW9uTGFiZWw6IHNlY3Rpb25MYWJlbCB8fCB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBbLi4ucm93c107XG4gICAgICBjb25zdCBpbnNlcnRpb25JbmRleCA9IHRoaXMubmV4dFF1ZXN0aW9uSW5kZXhGb3JTZWN0aW9uKG5leHQsIG5vcm1hbGl6ZWRTZWN0aW9uSWQpO1xuICAgICAgbmV4dC5zcGxpY2UoaW5zZXJ0aW9uSW5kZXgsIDAsIHJvdyk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcblxuICAgIC8vIFVuYSBwcmVndW50YSByZWNpw6luIGFncmVnYWRhIGVzdMOhIHZhY8OtYTogYWJyaXJsYSBlcyBlbCDDum5pY28gcGFzb1xuICAgIC8vIHNpZ3VpZW50ZSBwb3NpYmxlLCB5IGRlamFybGEgY2VycmFkYSBsYSBoYXLDrWEgdmVyIGNvbW8gdW5hIGZpbGEgcm90YS5cbiAgICB0aGlzLmVkaXRpbmdJZC5zZXQocm93LmlkKTtcbiAgfVxuXG4gIGFkZFNlY3Rpb24oKTogdm9pZCB7XG4gICAgY29uc3QgaWQgPSBgc2VjdGlvbi0ke3Jvd1VpZCsrfWA7XG4gICAgdGhpcy5zZWN0aW9uSWRzLnVwZGF0ZShpZHMgPT4gWy4uLmlkcywgaWRdKTtcbiAgICB0aGlzLnNlY3Rpb25OYW1lcy51cGRhdGUodmFsdWVzID0+ICh7IC4uLnZhbHVlcywgW2lkXTogJycgfSkpO1xuICAgIHRoaXMuc2VjdGlvblN1YnRpdGxlcy51cGRhdGUodmFsdWVzID0+ICh7IC4uLnZhbHVlcywgW2lkXTogJycgfSkpO1xuICAgIHRoaXMuc2VjdGlvbk5hbWVDb250cm9sKGlkKTtcbiAgICB0aGlzLnNlY3Rpb25TdWJ0aXRsZUNvbnRyb2woaWQpO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgdGhpcy5hY3RpdmVTZWN0aW9uSWQuc2V0KGlkKTtcbiAgICBpZiAodGhpcy5pc1dpemFyZCgpKSB0aGlzLndpemFyZFN0ZXAuc2V0KDEpO1xuICB9XG5cbiAgcm93R2xvYmFsSW5kZXgoc2VjdGlvbklkOiBzdHJpbmcsIGdyb3VwUm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHNlY3Rpb25JZCk7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnF1ZXN0aW9ucygpKSB7XG4gICAgICBpZiAodGhpcy5ub3JtYWxpemVTZWN0aW9uSWQocm93LnNlY3Rpb25JZCkgPT09IG5vcm1hbGl6ZWQpIHtcbiAgICAgICAgaWYgKGdyb3VwUm93SW5kZXggPT09IDApIHJldHVybiBpbmRleDtcbiAgICAgICAgZ3JvdXBSb3dJbmRleCAtPSAxO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgubWluKGluZGV4IC0gMSwgMCk7XG4gIH1cblxuICBuZXh0UXVlc3Rpb25JbmRleEZvclNlY3Rpb24ocm93czogRWRpdGFibGVGaWVsZERlZltdLCBzZWN0aW9uSWQ6IHN0cmluZyk6IG51bWJlciB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHNlY3Rpb25JZCk7XG4gICAgaWYgKCFyb3dzLmxlbmd0aCkgcmV0dXJuIDA7XG4gICAgaWYgKCFub3JtYWxpemVkKSByZXR1cm4gcm93cy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gcm93cy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgICAgaWYgKHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHJvd3NbaV0uc2VjdGlvbklkKSA9PT0gbm9ybWFsaXplZCkge1xuICAgICAgICByZXR1cm4gaSArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb3dzLmxlbmd0aDtcbiAgfVxuXG4gIHRvZ2dsZUVkaXQocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0aW5nSWQudXBkYXRlKGN1cnJlbnQgPT4gKGN1cnJlbnQgPT09IHJvdy5pZCA/ICcnIDogcm93LmlkKSk7XG4gIH1cblxuICByZW1vdmVRdWVzdGlvbihyb3c6IEVkaXRhYmxlRmllbGREZWYpOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXN0aW9ucy51cGRhdGUocm93cyA9PiByb3dzLmZpbHRlcihyID0+IHIuaWQgIT09IHJvdy5pZCkpO1xuICAgIGlmICh0aGlzLmVkaXRpbmdJZCgpID09PSByb3cuaWQpIHRoaXMuZWRpdGluZ0lkLnNldCgnJyk7XG4gIH1cblxuICBkdXBsaWNhdGUocm93OiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgY29uc3QgY29weTogRWRpdGFibGVGaWVsZERlZiA9IHtcbiAgICAgIC4uLnJvdyxcbiAgICAgIGlkOiBgcm93LSR7cm93VWlkKyt9YCxcbiAgICAgIC8vIFNpbiB0b2tlbiBwcm9waW8gbGEgY29waWEgcGlzYXLDrWEgbGFzIHJlc3B1ZXN0YXMgZGVsIG9yaWdpbmFsOiBkb3NcbiAgICAgIC8vIGNhbXBvcyBjb24gZWwgbWlzbW8gYG5hbWVgIHNvbiBlbCBtaXNtbyBjYW1wbyBwYXJhIGVsIGJhY2tlbmQuXG4gICAgICBuYW1lOiB0aGlzLmZvcm1CdWlsZGVyLnVuaXF1ZUZpZWxkTmFtZShyb3cubmFtZSB8fCByb3cubGFiZWwsIHRoaXMucXVlc3Rpb25zKCkpLFxuICAgICAgb3B0aW9uczogcm93Lm9wdGlvbnMgPyByb3cub3B0aW9ucy5tYXAobyA9PiAoeyAuLi5vIH0pKSA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gcm93cy5maW5kSW5kZXgociA9PiByLmlkID09PSByb3cuaWQpO1xuICAgICAgcmV0dXJuIFsuLi5yb3dzLnNsaWNlKDAsIGluZGV4ICsgMSksIGNvcHksIC4uLnJvd3Muc2xpY2UoaW5kZXggKyAxKV07XG4gICAgfSk7XG4gIH1cblxuICBtb3ZlKGluZGV4OiBudW1iZXIsIGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBpbmRleCArIGRlbHRhO1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHtcbiAgICAgIGlmICh0YXJnZXQgPCAwIHx8IHRhcmdldCA+PSByb3dzLmxlbmd0aCkgcmV0dXJuIHJvd3M7XG4gICAgICBjb25zdCBuZXh0ID0gWy4uLnJvd3NdO1xuICAgICAgW25leHRbaW5kZXhdLCBuZXh0W3RhcmdldF1dID0gW25leHRbdGFyZ2V0XSwgbmV4dFtpbmRleF1dO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR3VhcmRhIGxvIHF1ZSBzZSBlc3TDoSBlc2NyaWJpZW5kbywgc2luIGNlcnJhciBlbCBlZGl0b3IgbmkgdmFsaWRhci5cbiAgICpcbiAgICogU2luIGVzdG8sIGxvIHRpcGVhZG8gc29sbyBleGlzdMOtYSBkZW50cm8gZGVsIGVkaXRvciBoYXN0YSBxdWUgYWxndWllblxuICAgKiB0b2NhYmEgXCJMaXN0b1wiOiBsYSBmaWxhIHNlZ3XDrWEgZGljaWVuZG8gXCJQcmVndW50YSBzaW4gdGV4dG9cIiB5LCBwZW9yLFxuICAgKiBcIkd1YXJkYXIgZW5jdWVzdGFcIiBmYWxsYWJhIGNvbiBcInRvZGFzIGxhcyBwcmVndW50YXMgbmVjZXNpdGFuIHRleHRvXCIgc29icmVcbiAgICogdW5hIHByZWd1bnRhIHF1ZSBlbiBwYW50YWxsYSBjbGFyYW1lbnRlIHRlbsOtYSB0ZXh0by4gVG9jYXIgXCJMaXN0b1wiIGVyYSB1blxuICAgKiBwYXNvIG9ibGlnYXRvcmlvIHF1ZSBubyBzZSB2ZcOtYSBwb3IgbmluZ8O6biBsYWRvLlxuICAgKi9cbiAgZHJhZnRRdWVzdGlvbihmaWVsZDogRWRpdGFibGVGaWVsZERlZik6IHZvaWQge1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHJvd3MubWFwKHIgPT4gKHIuaWQgPT09IGZpZWxkLmlkID8gdGhpcy53aXRoUmVzb2x2ZWRTZWN0aW9uKHsgLi4uciwgLi4uZmllbGQgfSkgOiByKSkpO1xuICAgIGlmICh0aGlzLnZhbGlkYXRpb25FcnJvcigpKSB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuICB9XG5cbiAgYXBwbHlRdWVzdGlvbihmaWVsZDogRWRpdGFibGVGaWVsZERlZik6IHZvaWQge1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+XG4gICAgICByb3dzLm1hcChyID0+XG4gICAgICAgIHIuaWQgPT09IGZpZWxkLmlkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLnRoaXMud2l0aFJlc29sdmVkU2VjdGlvbihmaWVsZCksXG4gICAgICAgICAgICAgIG5hbWU6IHRoaXMuZm9ybUJ1aWxkZXIudW5pcXVlRmllbGROYW1lKFxuICAgICAgICAgICAgICAgIGZpZWxkLm5hbWUgfHwgZmllbGQubGFiZWwsXG4gICAgICAgICAgICAgICAgcm93cy5maWx0ZXIobyA9PiBvLmlkICE9PSByLmlkKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogclxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5lZGl0aW5nSWQuc2V0KCcnKTtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoUmVzb2x2ZWRTZWN0aW9uKGZpZWxkOiBFZGl0YWJsZUZpZWxkRGVmKTogRWRpdGFibGVGaWVsZERlZiB7XG4gICAgY29uc3QgbGFiZWwgPSAoZmllbGQuc2VjdGlvbkxhYmVsID8/ICcnKS50cmltKCk7XG4gICAgY29uc3QgaWQgPSB0aGlzLm5vcm1hbGl6ZVNlY3Rpb25JZChmaWVsZC5zZWN0aW9uSWQpO1xuICAgIGlmICh0aGlzLmlzV2l6YXJkKCkpIHtcbiAgICAgIGNvbnN0IHNlY3Rpb25MYWJlbCA9IGxhYmVsIHx8IHRoaXMuc2VjdGlvbk5hbWVDb250cm9sKGlkKS52YWx1ZS50cmltKCkgfHwgdGhpcy5zZWN0aW9uTmFtZXMoKVtpZF0gfHwgJyc7XG4gICAgICBjb25zdCBzZWN0aW9uU3VidGl0bGUgPVxuICAgICAgICAoZmllbGQuc2VjdGlvblN1YnRpdGxlID8/ICcnKS50cmltKCkgfHxcbiAgICAgICAgdGhpcy5zZWN0aW9uU3VidGl0bGVDb250cm9sKGlkKS52YWx1ZS50cmltKCkgfHxcbiAgICAgICAgdGhpcy5zZWN0aW9uU3VidGl0bGVzKClbaWRdIHx8XG4gICAgICAgICcnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZmllbGQsXG4gICAgICAgIHNlY3Rpb25JZDogaWQsXG4gICAgICAgIHNlY3Rpb25MYWJlbDogc2VjdGlvbkxhYmVsIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgc2VjdGlvblN1YnRpdGxlOiBzZWN0aW9uU3VidGl0bGUgfHwgdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzV2l6YXJkKCkgJiYgaWQgPT09ICdfX2RlZmF1bHRfXycgJiYgbGFiZWwpIHtcbiAgICAgIHJldHVybiB7IC4uLmZpZWxkLCBzZWN0aW9uSWQ6IHRoaXMuZm9ybUJ1aWxkZXIudG9Ub2tlbihsYWJlbCksIHNlY3Rpb25MYWJlbDogbGFiZWwgfTtcbiAgICB9XG4gICAgcmV0dXJuIHsgLi4uZmllbGQsIHNlY3Rpb25JZDogaWQsIHNlY3Rpb25MYWJlbDogbGFiZWwgfHwgdW5kZWZpbmVkIH07XG4gIH1cblxuICBhc3luYyBvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZChzbG90OiAnaGVhZGVyJyB8ICdzdWNjZXNzJywgZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTtcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIGlmICghZmlsZSB8fCAhdGhpcy5wcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCB8fCB0aGlzLnVwbG9hZGluZ0ltYWdlKCkpIHJldHVybjtcblxuICAgIGlmIChmaWxlLnR5cGUgJiYgIXRoaXMuYWxsb3dlZEltYWdlVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnaW1hZ2VUeXBlRXJyb3InKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLm1heEltYWdlQnl0ZXMpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ2ltYWdlU2l6ZUVycm9yJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBsb2FkaW5nSW1hZ2Uuc2V0KHNsb3QpO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHRoaXMucHJvcHMucHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQoc2xvdCwgZmlsZSk7XG4gICAgICBpZiAoc2xvdCA9PT0gJ2hlYWRlcicpIHtcbiAgICAgICAgdGhpcy5oZWFkZXJJbWFnZUNvbnRyb2wuc2V0VmFsdWUodXJsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3VjY2Vzc0ltYWdlQ29udHJvbC5zZXRWYWx1ZSh1cmwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiBgc3VydmV5QnVpbGRlci5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCBzbG90PSR7c2xvdH1gLFxuICAgICAgICBmYWxsYmFja0tleTogJ2ltYWdlVXBsb2FkRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51cGxvYWRpbmdJbWFnZS5zZXQoJycpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyUHJlc2VudGF0aW9uSW1hZ2Uoc2xvdDogJ2hlYWRlcicgfCAnc3VjY2VzcycpOiB2b2lkIHtcbiAgICBpZiAoc2xvdCA9PT0gJ2hlYWRlcicpIHtcbiAgICAgIHRoaXMuaGVhZGVySW1hZ2VDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdWNjZXNzSW1hZ2VDb250cm9sLnNldFZhbHVlKCcnKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc2F2aW5nKCkpIHJldHVybjtcbiAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQoJycpO1xuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQmVmb3JlU2F2ZSgpKSByZXR1cm47XG5cbiAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5xdWVzdGlvbnMoKTtcbiAgICBjb25zdCBmaWVsZFNjaGVtYTogRmllbGRTY2hlbWFEZWZbXSA9IFtdO1xuICAgIHJvd3MuZm9yRWFjaCgocm93LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZm9ybUJ1aWxkZXIudW5pcXVlRmllbGROYW1lKHJvdy5uYW1lIHx8IHJvdy5sYWJlbCwgZmllbGRTY2hlbWEpO1xuICAgICAgZmllbGRTY2hlbWEucHVzaChcbiAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jcmVhdGVGaWVsZFNjaGVtYShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbGFiZWw6IHJvdy5sYWJlbC50cmltKCksXG4gICAgICAgICAgICB0eXBlOiByb3cudHlwZSxcbiAgICAgICAgICAgIHJlcXVpcmVkOiByb3cucmVxdWlyZWQsXG4gICAgICAgICAgICBzZWN0aW9uSWQ6IHJvdy5zZWN0aW9uSWQsXG4gICAgICAgICAgICBzZWN0aW9uTGFiZWw6IHRoaXMuc2VjdGlvbk5hbWVDb250cm9sKHJvdy5zZWN0aW9uSWQpLnZhbHVlLnRyaW0oKSB8fCByb3cuc2VjdGlvbkxhYmVsLFxuICAgICAgICAgICAgc2VjdGlvblN1YnRpdGxlOiB0aGlzLnNlY3Rpb25TdWJ0aXRsZUNvbnRyb2wocm93LnNlY3Rpb25JZCkudmFsdWUudHJpbSgpIHx8IHJvdy5zZWN0aW9uU3VidGl0bGUsXG4gICAgICAgICAgICBzZWN0aW9uT3JkZXI6IHRoaXMuc2VjdGlvbk9yZGVyRm9yKHJvdy5zZWN0aW9uSWQsIHJvd3MpLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXJUZXh0OiByb3cucGxhY2Vob2xkZXJUZXh0LFxuICAgICAgICAgICAgaGludFRleHQ6IHJvdy5oaW50VGV4dCxcbiAgICAgICAgICAgIG5vdGVUZXh0OiByb3cubm90ZVRleHQsXG4gICAgICAgICAgICBvcHRpb25zOiByb3cub3B0aW9ucyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGluZGV4XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBzdWJ0aXRsZSA9IHRoaXMuc3VidGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKTtcbiAgICBjb25zdCBwcmVzZW50YXRpb24gPSB0aGlzLnByZXNlbnRhdGlvblBheWxvYWQoKTtcblxuICAgIC8vIExhIGFwcCBndWFyZGE6IGFjw6Egc29sbyBzZSB2YWxpZGEgeSBzZSBlbnRyZWdhIGxvIGVzY3JpdG8uXG4gICAgaWYgKHRoaXMucHJvcHMucGVyc2lzdCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZHJhZnQuZW1pdCh7XG4gICAgICAgIG5hbWU6IHRoaXMuc3VydmV5TmFtZUNvbnRyb2wudmFsdWUudHJpbSgpIHx8IHRpdGxlLFxuICAgICAgICBsYWJlbDogdGl0bGUsXG4gICAgICAgIHN1YnRpdGxlLFxuICAgICAgICBwcmVzZW50YXRpb24sXG4gICAgICAgIHF1ZXN0aW9uczogZmllbGRTY2hlbWEsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmluZy5zZXQodHJ1ZSk7XG5cbiAgICAvLyBgdHlwZUlkYCBkZXJpdmFkbyBkZWwgdMOtdHVsbzogc2lydmUgcGFyYSB1biB0aXBvIGRlIHNvbGljaXR1ZCBkZVxuICAgIC8vIHBsYXRhZm9ybWEsIGRvbmRlIGVsIHTDrXR1bG8gRVMgbGEgaWRlbnRpZGFkLiBQYXJhIHVuYSBlbmN1ZXN0YSBhdGFkYSBhXG4gICAgLy8gdW5hIGVudGlkYWQgTk8gYWxjYW56YSDigJQgZG9zIGV2ZW50b3MgY29uIGVsIG1pc21vIHTDrXR1bG8gY29saXNpb25hcsOtYW4gZW5cbiAgICAvLyBlbCBtaXNtbyB0aXBvIHkgY29tcGFydGlyw61hbiByZXNwdWVzdGFzLiBQb3IgZXNvIHVuYSB2ZXJ0aWNhbCB1c2Egc3VcbiAgICAvLyBlbmRwb2ludCAoYHBlcnNpc3Q6IGZhbHNlYCkgeSBhcm1hIGVsIGlkIGNvbiBsYSBlbnRpZGFkIGFkZW50cm8uXG4gICAgY29uc3QgdHlwZUlkID1cbiAgICAgIHRoaXMucHJvcHMudHlwZUlkID8/IGAke3RoaXMucHJvcHMudHlwZVByZWZpeCA/PyBERUZBVUxUX1RZUEVfUFJFRklYfToke3RoaXMuZm9ybUJ1aWxkZXIudG9Ub2tlbih0aXRsZSl9YDtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBuYW1lOiB0aGlzLnN1cnZleU5hbWVDb250cm9sLnZhbHVlLnRyaW0oKSB8fCB0aXRsZSxcbiAgICAgIGxhYmVsOiB0aXRsZSxcbiAgICAgIHN1YnRpdGxlLFxuICAgICAgcHJlc2VudGF0aW9uLFxuICAgICAgZW50aXR5UmVmOiB0aGlzLnByb3BzLmVudGl0eVJlZixcbiAgICAgIHNraXBSZXZpZXc6IHRydWUsXG4gICAgICBza2lwU3VibWl0dGVySWRlbnRpdHk6IHRydWUsXG4gICAgICBmaWVsZFNjaGVtYSxcbiAgICAgIGFsbG93QW5vbnltb3VzOiB0aGlzLnByb3BzLmFsbG93QW5vbnltb3VzID8/IHRydWUsXG4gICAgICB2aXNpYmlsaXR5OiB0aGlzLnByb3BzLnZpc2liaWxpdHkgPz8gKCdQVUJMSUMnIGFzIGNvbnN0KSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2FsbCQgPSB0aGlzLnByb3BzLnR5cGVJZFxuICAgICAgPyB0aGlzLnJlcXVlc3RzLnVwZGF0ZVJlcXVlc3RUeXBlKHRoaXMucHJvcHMudHlwZUlkLCBwYXlsb2FkKVxuICAgICAgOiB0aGlzLnJlcXVlc3RzLmNyZWF0ZVJlcXVlc3RUeXBlKHsgLi4ucGF5bG9hZCwgdHlwZUlkIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR5cGVDb25maWcgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShjYWxsJCk7XG4gICAgICB0aGlzLnNhdmluZy5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5zYXZlZC5lbWl0KHsgdHlwZUNvbmZpZyB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuc2F2aW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdzdXJ2ZXlCdWlsZGVyLnNhdmUnLFxuICAgICAgICBmYWxsYmFja0tleTogJ3NhdmVFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IE5BTUVTUEFDRSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaHlkcmF0ZShcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgbGFiZWw6IHN0cmluZyxcbiAgICBzdWJ0aXRsZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uczogRmllbGRTY2hlbWFEZWZbXSxcbiAgICBwcmVzZW50YXRpb24/OiBSZXF1ZXN0VHlwZVByZXNlbnRhdGlvblxuICApOiB2b2lkIHtcbiAgICB0aGlzLnN1cnZleU5hbWVDb250cm9sLnNldFZhbHVlKG5hbWUgPz8gJycpO1xuICAgIHRoaXMudGl0bGVDb250cm9sLnNldFZhbHVlKGxhYmVsID8/ICcnKTtcbiAgICB0aGlzLnN1YnRpdGxlQ29udHJvbC5zZXRWYWx1ZShzdWJ0aXRsZSA/PyAnJyk7XG4gICAgdGhpcy5oZWFkZXJJbWFnZUNvbnRyb2wuc2V0VmFsdWUocHJlc2VudGF0aW9uPy5oZWFkZXJJbWFnZVVybCA/PyAnJyk7XG4gICAgdGhpcy5zdWNjZXNzVGl0bGVDb250cm9sLnNldFZhbHVlKHByZXNlbnRhdGlvbj8uc3VjY2Vzc1RpdGxlIHx8IHRoaXMuZGVmYXVsdFN1Y2Nlc3NUaXRsZSgpKTtcbiAgICB0aGlzLnN1Y2Nlc3NNZXNzYWdlQ29udHJvbC5zZXRWYWx1ZShwcmVzZW50YXRpb24/LnN1Y2Nlc3NNZXNzYWdlIHx8IHRoaXMuZGVmYXVsdFN1Y2Nlc3NNZXNzYWdlKCkpO1xuICAgIHRoaXMuc3VjY2Vzc0ltYWdlQ29udHJvbC5zZXRWYWx1ZShwcmVzZW50YXRpb24/LnN1Y2Nlc3NJbWFnZVVybCA/PyAnJyk7XG4gICAgY29uc3Qgcm93cyA9IFsuLi4ocXVlc3Rpb25zID8/IFtdKV0uc29ydCgoYSwgYikgPT4gYS5vcmRlciAtIGIub3JkZXIpLm1hcChmID0+IHRoaXMucm93RnJvbUZpZWxkKGYpKTtcbiAgICBjb25zdCBpZHMgPSBbLi4ubmV3IFNldChyb3dzLm1hcChyb3cgPT4gdGhpcy5ub3JtYWxpemVTZWN0aW9uSWQocm93LnNlY3Rpb25JZCkpKV07XG4gICAgdGhpcy5zZWN0aW9uSWRzLnNldChpZHMubGVuZ3RoID8gaWRzIDogWydfX2RlZmF1bHRfXyddKTtcbiAgICBjb25zdCBuYW1lczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIGNvbnN0IHN1YnRpdGxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICAgIHJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLm5vcm1hbGl6ZVNlY3Rpb25JZChyb3cuc2VjdGlvbklkKTtcbiAgICAgIGlmIChyb3cuc2VjdGlvbkxhYmVsICYmIG5hbWVzW2lkXSA9PT0gdW5kZWZpbmVkKSBuYW1lc1tpZF0gPSByb3cuc2VjdGlvbkxhYmVsO1xuICAgICAgaWYgKHJvdy5zZWN0aW9uU3VidGl0bGUgJiYgc3VidGl0bGVzW2lkXSA9PT0gdW5kZWZpbmVkKSBzdWJ0aXRsZXNbaWRdID0gcm93LnNlY3Rpb25TdWJ0aXRsZTtcbiAgICB9KTtcbiAgICB0aGlzLnNlY3Rpb25OYW1lcy5zZXQobmFtZXMpO1xuICAgIHRoaXMuc2VjdGlvblN1YnRpdGxlcy5zZXQoc3VidGl0bGVzKTtcbiAgICB0aGlzLnF1ZXN0aW9ucy5zZXQocm93cyk7XG4gICAgdGhpcy5hY3RpdmVTZWN0aW9uSWQuc2V0KHRoaXMuc2VjdGlvbklkcygpWzBdID8/ICdfX2RlZmF1bHRfXycpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVzZW50YXRpb25QYXlsb2FkKCk6IFJlcXVlc3RUeXBlUHJlc2VudGF0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwcmVzZW50YXRpb24gPSB7XG4gICAgICBoZWFkZXJJbWFnZVVybDogdGhpcy5oZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUudHJpbSgpLFxuICAgICAgc3VjY2Vzc1RpdGxlOiB0aGlzLnN1Y2Nlc3NUaXRsZUNvbnRyb2wudmFsdWUudHJpbSgpIHx8IHRoaXMuZGVmYXVsdFN1Y2Nlc3NUaXRsZSgpLFxuICAgICAgc3VjY2Vzc01lc3NhZ2U6IHRoaXMuc3VjY2Vzc01lc3NhZ2VDb250cm9sLnZhbHVlLnRyaW0oKSB8fCB0aGlzLmRlZmF1bHRTdWNjZXNzTWVzc2FnZSgpLFxuICAgICAgc3VjY2Vzc0ltYWdlVXJsOiB0aGlzLnN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUudHJpbSgpLFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocHJlc2VudGF0aW9uKS5zb21lKEJvb2xlYW4pID8gcHJlc2VudGF0aW9uIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0U3VjY2Vzc1RpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudCgnZGVmYXVsdFN1Y2Nlc3NUaXRsZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0U3VjY2Vzc01lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50KCdkZWZhdWx0U3VjY2Vzc01lc3NhZ2UnKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVXaXphcmRTdGVwKHN0ZXA6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgIGlmICghdGhpcy5pc1dpemFyZCgpKSByZXR1cm4gdHJ1ZTtcblxuICAgICAgaWYgKCF0aGlzLnN1cnZleU5hbWVDb250cm9sLnZhbHVlLnRyaW0oKSkge1xuICAgICAgICB0aGlzLnN1cnZleU5hbWVDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnbm9TdXJ2ZXlOYW1lJykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKSkge1xuICAgICAgICB0aGlzLnRpdGxlQ29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vVGl0bGUnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1dpemFyZCgpICYmIHN0ZXAgPT09IDEpIHtcbiAgICAgIGlmICghdGhpcy5xdWVzdGlvbnMoKS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnbm9RdWVzdGlvbnMnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZVJvd3ModGhpcy5xdWVzdGlvbnMoKSkpIHJldHVybiBmYWxzZTtcbiAgICAgIGNvbnN0IGVtcHR5U2VjdGlvbiA9IHRoaXMucXVlc3Rpb25Hcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwLmlkICE9PSAnX19kZWZhdWx0X18nICYmICFncm91cC5yb3dzLmxlbmd0aCk7XG4gICAgICBpZiAoZW1wdHlTZWN0aW9uKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlU2VjdGlvbklkLnNldChlbXB0eVNlY3Rpb24uaWQpO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdub1F1ZXN0aW9uc0luU2VjdGlvbicpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5pc1dpemFyZCgpICYmIHN0ZXAgPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUm93cyh0aGlzLnF1ZXN0aW9ucygpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQmVmb3JlU2F2ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMudmFsaWRhdGVXaXphcmRTdGVwKDApKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9ucygpLmxlbmd0aCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnbm9RdWVzdGlvbnMnKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGhpcy52YWxpZGF0ZVJvd3ModGhpcy5xdWVzdGlvbnMoKSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpcy5pc1dpemFyZCgpKSB7XG4gICAgICBjb25zdCBlbXB0eVNlY3Rpb24gPSB0aGlzLnF1ZXN0aW9uR3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cC5pZCAhPT0gJ19fZGVmYXVsdF9fJyAmJiAhZ3JvdXAucm93cy5sZW5ndGgpO1xuICAgICAgaWYgKGVtcHR5U2VjdGlvbikge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdub1F1ZXN0aW9uc0luU2VjdGlvbicpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVSb3dzKHJvd3M6IEVkaXRhYmxlRmllbGREZWZbXSk6IGJvb2xlYW4ge1xuICAgIGlmICghcm93cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vUXVlc3Rpb25zJykpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAocm93cy5zb21lKHIgPT4gIXIubGFiZWwudHJpbSgpKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnZW1wdHlRdWVzdGlvbkxhYmVsJykpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBFbCBlZGl0b3IgeWEgbG8gdmFsaWRhIGFsIGNlcnJhciBjYWRhIHByZWd1bnRhLCBwZXJvIHVuYSBwcmVndW50YSBhYmllcnRhXG4gICAgLy8gKG8gY2FyZ2FkYSBkZSB1bmEgZW5jdWVzdGEgdmllamEpIHB1ZWRlIGxsZWdhciBhY8OhIHNpbiBvcGNpb25lcy5cbiAgICBpZiAocm93cy5zb21lKHIgPT4gRklFTERfVFlQRVNfV0lUSF9PUFRJT05TLmluY2x1ZGVzKHIudHlwZSkgJiYgIXIub3B0aW9ucz8ubGVuZ3RoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnbWlzc2luZ09wdGlvbnMnKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSByb3dGcm9tRmllbGQoZjogRmllbGRTY2hlbWFEZWYpOiBFZGl0YWJsZUZpZWxkRGVmIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGByb3ctJHtyb3dVaWQrK31gLFxuICAgICAgbmFtZTogZi5uYW1lLFxuICAgICAgbGFiZWw6IGYubGFiZWwgPz8gJycsXG4gICAgICBwbGFjZWhvbGRlclRleHQ6IGYucGxhY2Vob2xkZXJUZXh0ID8/ICcnLFxuICAgICAgaGludFRleHQ6IGYuaGludFRleHQgPz8gJycsXG4gICAgICBub3RlVGV4dDogZi5ub3RlVGV4dCA/PyAnJyxcbiAgICAgIHR5cGU6IGYudHlwZSxcbiAgICAgIHJlcXVpcmVkOiAhIWYucmVxdWlyZWQsXG4gICAgICBzZWN0aW9uSWQ6IGYuc2VjdGlvbklkLFxuICAgICAgc2VjdGlvbkxhYmVsOiBmLnNlY3Rpb25MYWJlbCA/PyAnJyxcbiAgICAgIHNlY3Rpb25TdWJ0aXRsZTogZi5zZWN0aW9uU3VidGl0bGUgPz8gJycsXG4gICAgICBzZWN0aW9uT3JkZXI6IGYuc2VjdGlvbk9yZGVyLFxuICAgICAgb3B0aW9uczogZi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICByZXZpZXdRdWVzdGlvbnNDb3VudCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5xdWVzdGlvbnMoKS5sZW5ndGg7XG4gICAgY29uc3Qga2V5ID0gY291bnQgPT09IDEgPyAncmV2aWV3UXVlc3Rpb25Db3VudCcgOiAncmV2aWV3UXVlc3Rpb25zQ291bnQnO1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlKHRoaXMudChrZXkpLCB7IGNvdW50IH0pO1xuICB9XG5cbiAgcHJldmlld1Byb3BzKCk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci1wcmV2aWV3JyxcbiAgICAgIHRleHQ6IHRoaXMudCgncHJldmlldycpLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICBpY29uOiB7IG5hbWU6ICdleWUtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgb3BlblByZXZpZXcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbHMub3BlbkFkYXB0aXZlKFxuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IFN1cnZleVByZXZpZXdNb2RhbENvbXBvbmVudCxcbiAgICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgICBtb2RhbFRpdGxlOiB0aGlzLnQoJ3ByZXZpZXdUaXRsZScpLFxuICAgICAgICAgIGNsb3NlTGFiZWw6IHRoaXMudCgnY2xvc2VQcmV2aWV3JyksXG4gICAgICAgICAgdGl0bGU6IHRoaXMudGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKSB8fCB0aGlzLnQoJ3VudGl0bGVkUXVlc3Rpb24nKSxcbiAgICAgICAgICBzdWJ0aXRsZTogdGhpcy5zdWJ0aXRsZUNvbnRyb2wudmFsdWUudHJpbSgpLFxuICAgICAgICAgIHByZXNlbnRhdGlvbjogdGhpcy5wcmVzZW50YXRpb25QYXlsb2FkKCksXG4gICAgICAgICAgc3VjY2Vzc1RpdGxlOiB0aGlzLnN1Y2Nlc3NUaXRsZUNvbnRyb2wudmFsdWUudHJpbSgpIHx8IHRoaXMuZGVmYXVsdFN1Y2Nlc3NUaXRsZSgpLFxuICAgICAgICAgIHN1Y2Nlc3NNZXNzYWdlOlxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZUNvbnRyb2wudmFsdWUudHJpbSgpIHx8IHRoaXMuZGVmYXVsdFN1Y2Nlc3NNZXNzYWdlKCksXG4gICAgICAgICAgcmVxdWlyZWRTdWZmaXg6IGAgwrcgJHt0aGlzLnQoJ3JlcXVpcmVkVGFnJyl9YCxcbiAgICAgICAgICBxdWVzdGlvbnM6IHRoaXMucXVlc3Rpb25zKCkubWFwKChxdWVzdGlvbiwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgICAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUgfHwgdGhpcy5mb3JtQnVpbGRlci50b1Rva2VuKHF1ZXN0aW9uLmxhYmVsKSxcbiAgICAgICAgICAgIHR5cGVMYWJlbDogdGhpcy50eXBlTGFiZWwocXVlc3Rpb24udHlwZSksXG4gICAgICAgICAgICBzZWN0aW9uSWQ6IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHF1ZXN0aW9uLnNlY3Rpb25JZCksXG4gICAgICAgICAgICBzZWN0aW9uTGFiZWw6IHRoaXMuc2VjdGlvbk5hbWVDb250cm9sKHF1ZXN0aW9uLnNlY3Rpb25JZCkudmFsdWUudHJpbSgpIHx8IHF1ZXN0aW9uLnNlY3Rpb25MYWJlbCxcbiAgICAgICAgICAgIHNlY3Rpb25TdWJ0aXRsZTogdGhpcy5zZWN0aW9uU3VidGl0bGVDb250cm9sKHF1ZXN0aW9uLnNlY3Rpb25JZCkudmFsdWUudHJpbSgpIHx8IHF1ZXN0aW9uLnNlY3Rpb25TdWJ0aXRsZSxcbiAgICAgICAgICAgIHNlY3Rpb25PcmRlcjogdGhpcy5zZWN0aW9uT3JkZXJGb3IocXVlc3Rpb24uc2VjdGlvbklkLCB0aGlzLnF1ZXN0aW9ucygpKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgJ3dpZGUnLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlY3Rpb25PcmRlckZvcihcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByb3dzOiBBcnJheTxQaWNrPEVkaXRhYmxlRmllbGREZWYsICdzZWN0aW9uSWQnIHwgJ3NlY3Rpb25MYWJlbCc+PlxuICApOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5ub3JtYWxpemVTZWN0aW9uSWQoc2VjdGlvbklkKTtcbiAgICBjb25zdCBzZWN0aW9uSWRzID0gWy4uLm5ldyBTZXQocm93cy5tYXAocm93ID0+IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHJvdy5zZWN0aW9uSWQpKS5maWx0ZXIoQm9vbGVhbikpXTtcbiAgICBjb25zdCBpbmRleCA9IHNlY3Rpb25JZHMuaW5kZXhPZihpZCk7XG4gICAgcmV0dXJuIGluZGV4ID49IDAgPyBpbmRleCA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
1596
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VydmV5LWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9zdXJ2ZXktYnVpbGRlci9zdXJ2ZXktYnVpbGRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNwQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUVwRyxPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7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TSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25JY29uLCBJb25TcGlubmVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IGNsb3VkVXBsb2FkT3V0bGluZSwgZXllT3V0bGluZSwgdHJhc2hPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmVxdWVzdHMvcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcXVlc3RGb3JtQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXF1ZXN0cy9yZXF1ZXN0LWZvcm0tYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZpZWxkU2NoZW1hRGVmLCBSZXF1ZXN0VHlwZVByZXNlbnRhdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JlcXVlc3RzL3R5cGVzJztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IENvbG9yIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgVmFsdGVjaEVycm9yU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy92YWx0ZWNoLWVycm9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0SW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdGV4dC1pbnB1dC90ZXh0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZm9ybS1maWVsZC9mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBGSUVMRF9UWVBFU19XSVRIX09QVElPTlMsXG4gIEZpZWxkU2NoZW1hRWRpdG9yQ29tcG9uZW50LFxufSBmcm9tICcuLi9maWVsZC1zY2hlbWEtZWRpdG9yL2ZpZWxkLXNjaGVtYS1lZGl0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IEZJRUxEX1NDSEVNQV9FRElUT1JfSTE4TiB9IGZyb20gJy4uL2ZpZWxkLXNjaGVtYS1lZGl0b3IvZmllbGQtc2NoZW1hLWVkaXRvci5pMThuJztcbmltcG9ydCB7IEVkaXRhYmxlRmllbGREZWYsIEZpZWxkU2NoZW1hRWRpdG9yTWV0YWRhdGEgfSBmcm9tICcuLi9maWVsZC1zY2hlbWEtZWRpdG9yL3R5cGVzJztcbmltcG9ydCB7XG4gIFN1cnZleUJ1aWxkZXJNZXRhZGF0YSxcbiAgU3VydmV5QnVpbGRlclNhdmVFdmVudCxcbiAgU3VydmV5RHJhZnRFdmVudCxcbiAgU1VSVkVZX1FVRVNUSU9OX1RZUEVTLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNVUlZFWV9CVUlMREVSX0kxOE4gfSBmcm9tICcuL3N1cnZleS1idWlsZGVyLmkxOG4nO1xuaW1wb3J0IHsgU3VydmV5UHJldmlld01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9zdXJ2ZXktcHJldmlldy1tb2RhbC5jb21wb25lbnQnO1xuXG5jb25zdCBOQU1FU1BBQ0UgPSAnU3VydmV5QnVpbGRlcic7XG5jb25zdCBFRElUT1JfTkFNRVNQQUNFID0gJ0ZpZWxkU2NoZW1hRWRpdG9yJztcbmNvbnN0IERFRkFVTFRfVFlQRV9QUkVGSVggPSAnc3VydmV5JztcblxubGV0IHJvd1VpZCA9IDA7XG5cbmludGVyZmFjZSBTdXJ2ZXlRdWVzdGlvblNlY3Rpb24ge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBzdWJ0aXRsZTogc3RyaW5nO1xuICByb3dzOiBFZGl0YWJsZUZpZWxkRGVmW107XG59XG5cbmludGVyZmFjZSBXaXphcmRTdGVwIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1cblxuLyoqXG4gKiB2YWwtc3VydmV5LWJ1aWxkZXJcbiAqXG4gKiBBdXRvcsOtYSBkZSB1bmEgZW5jdWVzdGE6IHTDrXR1bG8sIHN1YnTDrXR1bG8sIHByZWd1bnRhcyDigJQgYXJtYSBvIGFjdHVhbGl6YSB1blxuICogYFJlcXVlc3RUeXBlQ29uZmlnYCBjb24gYFR5cGU6IFwiPHByZWZpeD46PHNsdWc+XCJgIChBRFItMDkyKSwgYHNraXBSZXZpZXc6XG4gKiB0cnVlYCAoY2FkYSByZXNwdWVzdGEgc2UgYWdyZWdhLCBubyBzZSByZXZpc2EgdW5hIHBvciB1bmEpIHkgZWwgYEVudGl0eVJlZmBcbiAqIHF1ZSBsZSBwYXNhIGVsIGNvbnN1bWVyIChlai4gZWwgZXZlbnRvIGRlIGJpbmdvIGR1ZcOxbyBkZSBsYSBlbmN1ZXN0YSkuXG4gKlxuICogQ2FkYSBwcmVndW50YSBzZSBlZGl0YSBjb24gYHZhbC1maWVsZC1zY2hlbWEtZWRpdG9yYCwgZWwgbWlzbW8gZWRpdG9yIHF1ZSB1c2FcbiAqIGVsIGNoZWNrb3V0IGRlIGJpbmdvIOKAlCBkZSBhaMOtIHF1ZSB1bmEgcHJlZ3VudGEgdGVuZ2EgdGlwbywgcGxhY2Vob2xkZXIsIG5vdGFcbiAqIHkgb3BjaW9uZXMsIG5vIHNvbG8gdGV4dG8uIExhIHYxIGRlIGVzdGUgY29tcG9uZW50ZSB0ZW7DrWEgc3UgcHJvcGlvIGVkaXRvclxuICogcG9icmUgKGRvcyB0aXBvcywgc2luIG9wY2lvbmVzKTsgbGEgRmFzZSA1IGRlbCBBRFItMDkyIGxvIHJlZW1wbGF6w7MgcG9yIGVsXG4gKiBvcmdhbmlzbSBjb21wYXJ0aWRvIGVuIHZleiBkZSBtZWpvcmFybG8gcG9yIGR1cGxpY2Fkby5cbiAqXG4gKiBFbCBjYXTDoWxvZ28gcXVlIG9mcmVjZSBzYWxlIGRlIGBTVVJWRVlfUVVFU1RJT05fVFlQRVNgIOKAlCBhY290YWRvIGEgbG8gcXVlXG4gKiBgdmFsLXN1cnZleS1yZXNwb25zZWAgc2FiZSByZW5kZXJpemFyLCBubyBhIGxvIHF1ZSBlbCBlZGl0b3Igc2FiZSBlZGl0YXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1zdXJ2ZXktYnVpbGRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBJb25JY29uLFxuICAgIElvblNwaW5uZXIsXG4gICAgVGV4dElucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkNvbXBvbmVudCxcbiAgICBGb3JtRmllbGRDb21wb25lbnQsXG4gICAgRmllbGRTY2hlbWFFZGl0b3JDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyXCI+XG4gICAgICBAaWYgKGlzV2l6YXJkKCkpIHtcbiAgICAgICAgPG5hdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19zdGVwc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnd2l6YXJkU3RlcHNMYWJlbCcpXCI+XG4gICAgICAgICAgQGZvciAoc3RlcCBvZiB3aXphcmRTdGVwcygpOyB0cmFjayBzdGVwLmlkOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc3RlcFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5zdXJ2ZXktYnVpbGRlcl9fc3RlcC0tYWN0aXZlXT1cIndpemFyZFN0ZXAoKSA9PT0gaVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJ3aXphcmRTdGVwKCkgPT09IGkgPyAnc3RlcCcgOiBudWxsXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9TdGVwKGkpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaSArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgIHt7IHN0ZXAubGFiZWwgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9uYXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoIWlzV2l6YXJkKCkpIHtcbiAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCd0aXRsZUxhYmVsJylcIj5cbiAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogdGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgndGl0bGVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1YnRpdGxlTGFiZWwnKVwiPlxuICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWJ0aXRsZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdzdWJ0aXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd1dpemFyZFNlY3Rpb24oMCkpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VydmV5TmFtZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdXJ2ZXlOYW1lQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1cnZleU5hbWVQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCd0aXRsZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiB0aXRsZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCd0aXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1YnRpdGxlTGFiZWwnKVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1YnRpdGxlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1YnRpdGxlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucy1sYWJlbFwiPnt7IHQoJ3ByZXNlbnRhdGlvbkxhYmVsJykgfX08L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZFwiPlxuICAgICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdoZWFkZXJJbWFnZUxhYmVsJylcIj5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IGhlYWRlckltYWdlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ2hlYWRlckltYWdlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICBAaWYgKGhlYWRlckltYWdlQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaGVhZGVySW1hZ2VDb250cm9sLnZhbHVlXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWNsZWFyXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnaW1hZ2VSZW1vdmUnKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJQcmVzZW50YXRpb25JbWFnZSgnaGVhZGVyJylcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2gtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChwcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZCkge1xuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkXCIgW2NsYXNzLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQtLWxvYWRpbmddPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ2hlYWRlcidcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHVwbG9hZGluZ0ltYWdlKCkgPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCIgLz5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvdWQtdXBsb2FkLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWUgPyB0KCdpbWFnZUNoYW5nZScpIDogdCgnaW1hZ2VVcGxvYWQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAgIGFjY2VwdD1cImltYWdlL2pwZWcsaW1hZ2UvcG5nLGltYWdlL3dlYnAsaW1hZ2UvZ2lmLC5qcGcsLmpwZWcsLnBuZywud2VicCwuZ2lmXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnaGVhZGVyJ1wiXG4gICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uUHJlc2VudGF0aW9uRmlsZVNlbGVjdGVkKCdoZWFkZXInLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoIWlzV2l6YXJkKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19wcmVzZW50YXRpb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdwcmVzZW50YXRpb25MYWJlbCcpIH19PC9zcGFuPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWZpZWxkXCI+XG4gICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdoZWFkZXJJbWFnZUxhYmVsJylcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBoZWFkZXJJbWFnZUNvbnRyb2wsIHBsYWNlaG9sZGVyOiB0KCdoZWFkZXJJbWFnZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICBAaWYgKGhlYWRlckltYWdlQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1wcmV2aWV3XCI+XG4gICAgICAgICAgICAgIDxpbWcgW3NyY109XCJoZWFkZXJJbWFnZUNvbnRyb2wudmFsdWVcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtY2xlYXJcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnaW1hZ2VSZW1vdmUnKVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyUHJlc2VudGF0aW9uSW1hZ2UoJ2hlYWRlcicpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2gtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocHJvcHMucHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQpIHtcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWRcIiBbY2xhc3Muc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZC0tbG9hZGluZ109XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnaGVhZGVyJ1wiPlxuICAgICAgICAgICAgICBAaWYgKHVwbG9hZGluZ0ltYWdlKCkgPT09ICdoZWFkZXInKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1zcGlubmVyIG5hbWU9XCJjcmVzY2VudFwiIC8+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvdWQtdXBsb2FkLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxzcGFuPnt7IGhlYWRlckltYWdlQ29udHJvbC52YWx1ZSA/IHQoJ2ltYWdlQ2hhbmdlJykgOiB0KCdpbWFnZVVwbG9hZCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2Uvd2VicCxpbWFnZS9naWYsLmpwZywuanBlZywucG5nLC53ZWJwLC5naWZcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnaGVhZGVyJ1wiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblByZXNlbnRhdGlvbkZpbGVTZWxlY3RlZCgnaGVhZGVyJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxwIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX29wdGlvbmFsLW5vdGVcIj57eyB0KCdzdWNjZXNzT3B0aW9uYWxOb3RlJykgfX08L3A+XG4gICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc1RpdGxlTGFiZWwnKVwiPlxuICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBzdWNjZXNzVGl0bGVDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc1RpdGxlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWNjZXNzTWVzc2FnZUxhYmVsJylcIj5cbiAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VjY2Vzc01lc3NhZ2VDb250cm9sLCBwbGFjZWhvbGRlcjogdCgnc3VjY2Vzc01lc3NhZ2VQbGFjZWhvbGRlcicpIH1cIiAvPlxuICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWZpZWxkXCI+XG4gICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWNjZXNzSW1hZ2VMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VjY2Vzc0ltYWdlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1Y2Nlc3NJbWFnZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICBAaWYgKHN1Y2Nlc3NJbWFnZUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtcHJldmlld1wiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZVwiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS1jbGVhclwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdpbWFnZVJlbW92ZScpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJQcmVzZW50YXRpb25JbWFnZSgnc3VjY2VzcycpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwidHJhc2gtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAocHJvcHMucHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQpIHtcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWRcIiBbY2xhc3Muc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZC0tbG9hZGluZ109XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnc3VjY2VzcydcIj5cbiAgICAgICAgICAgICAgQGlmICh1cGxvYWRpbmdJbWFnZSgpID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCIgLz5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG91ZC11cGxvYWQtb3V0bGluZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4+e3sgc3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZSA/IHQoJ2ltYWdlQ2hhbmdlJykgOiB0KCdpbWFnZVVwbG9hZCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvanBlZyxpbWFnZS9wbmcsaW1hZ2Uvd2VicCxpbWFnZS9naWYsLmpwZywuanBlZywucG5nLC53ZWJwLC5naWZcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ1cGxvYWRpbmdJbWFnZSgpID09PSAnc3VjY2VzcydcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25QcmVzZW50YXRpb25GaWxlU2VsZWN0ZWQoJ3N1Y2Nlc3MnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd1dpemFyZFNlY3Rpb24oMikpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc2VjdGlvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucy1sYWJlbFwiPnt7IHQoJ3N0ZXBDbG9zZScpIH19PC9zcGFuPlxuICAgICAgICAgIDxwIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX29wdGlvbmFsLW5vdGVcIj57eyB0KCdzdWNjZXNzT3B0aW9uYWxOb3RlJykgfX08L3A+XG4gICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzdWNjZXNzVGl0bGVMYWJlbCcpXCI+XG4gICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VjY2Vzc1RpdGxlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1Y2Nlc3NUaXRsZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgPC92YWwtZm9ybS1maWVsZD5cbiAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3N1Y2Nlc3NNZXNzYWdlTGFiZWwnKVwiPlxuICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJ7IGNvbnRyb2w6IHN1Y2Nlc3NNZXNzYWdlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1Y2Nlc3NNZXNzYWdlUGxhY2Vob2xkZXInKSB9XCIgLz5cbiAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtZmllbGRcIj5cbiAgICAgICAgICAgIDx2YWwtZm9ybS1maWVsZCBbbGFiZWxdPVwidCgnc3VjY2Vzc0ltYWdlTGFiZWwnKVwiPlxuICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cInsgY29udHJvbDogc3VjY2Vzc0ltYWdlQ29udHJvbCwgcGxhY2Vob2xkZXI6IHQoJ3N1Y2Nlc3NJbWFnZVBsYWNlaG9sZGVyJykgfVwiIC8+XG4gICAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgQGlmIChzdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9faW1hZ2UtcHJldmlld1wiPlxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJzdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLWNsZWFyXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnaW1hZ2VSZW1vdmUnKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJQcmVzZW50YXRpb25JbWFnZSgnc3VjY2VzcycpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInRyYXNoLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAocHJvcHMucHJlc2VudGF0aW9uSW1hZ2VVcGxvYWQpIHtcbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZFwiIFtjbGFzcy5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkLS1sb2FkaW5nXT1cInVwbG9hZGluZ0ltYWdlKCkgPT09ICdzdWNjZXNzJ1wiPlxuICAgICAgICAgICAgICAgIEBpZiAodXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCIgLz5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwiY2xvdWQtdXBsb2FkLW91dGxpbmVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBzdWNjZXNzSW1hZ2VDb250cm9sLnZhbHVlID8gdCgnaW1hZ2VDaGFuZ2UnKSA6IHQoJ2ltYWdlVXBsb2FkJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS9qcGVnLGltYWdlL3BuZyxpbWFnZS93ZWJwLGltYWdlL2dpZiwuanBnLC5qcGVnLC5wbmcsLndlYnAsLmdpZlwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBsb2FkaW5nSW1hZ2UoKSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25QcmVzZW50YXRpb25GaWxlU2VsZWN0ZWQoJ3N1Y2Nlc3MnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd1dpemFyZFNlY3Rpb24oMSkpIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3F1ZXN0aW9ucy1sYWJlbFwiPnt7IHQoJ3F1ZXN0aW9uc0xhYmVsJykgfX08L3NwYW4+XG5cbiAgICAgICAgQGlmICghcXVlc3Rpb25zKCkubGVuZ3RoKSB7XG4gICAgICAgICAgPHAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fZW1wdHlcIj57eyB0KCdub1F1ZXN0aW9ucycpIH19PC9wPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChxdWVzdGlvbkdyb3VwcygpLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tdGFic1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnc2VjdGlvblRhYnNMYWJlbCcpXCI+XG4gICAgICAgICAgICBAZm9yIChncm91cCBvZiBxdWVzdGlvbkdyb3VwcygpOyB0cmFjayBncm91cC5pZDsgbGV0IHNlY3Rpb25JbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi10YWJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi10YWItLWFjdGl2ZV09XCJhY3RpdmVTZWN0aW9uSWQoKSA9PT0gZ3JvdXAuaWRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJhY3RpdmVTZWN0aW9uSWQoKSA9PT0gZ3JvdXAuaWQgPyAndHJ1ZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U2VjdGlvbihncm91cC5pZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZ3JvdXAubGFiZWwgfHwgdCgnc2VjdGlvblF1ZXN0aW9uc0xhYmVsJykgKyAnICcgKyAoc2VjdGlvbkluZGV4ICsgMSkgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICBAZm9yIChncm91cCBvZiBxdWVzdGlvbkdyb3VwcygpOyB0cmFjayBncm91cC5pZDsgbGV0IHNlY3Rpb25JbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgIEBpZiAoYWN0aXZlU2VjdGlvbklkKCkgPT09IGdyb3VwLmlkKSB7XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb24tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19zZWN0aW9uLXN1bW1hcnlcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgaW50ZXJwb2xhdGUodCgnc2VjdGlvbkNvdW50ZXInKSwgeyBjb3VudDogc2VjdGlvbkluZGV4ICsgMSB9KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyBncm91cC5sYWJlbCB8fCB0KCdzZWN0aW9uTmFtZVBsYWNlaG9sZGVyJykgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPHNtYWxsPnt7IHNlY3Rpb25RdWVzdGlvbkNvdW50VGV4dChncm91cC5yb3dzLmxlbmd0aCkgfX08L3NtYWxsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24taGVhZFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tZmllbGRzXCI+XG4gICAgICAgICAgICAgICAgPHZhbC1mb3JtLWZpZWxkIFtsYWJlbF09XCJ0KCdzZWN0aW9uTmFtZUxhYmVsJylcIj5cbiAgICAgICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dFxuICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IHNlY3Rpb25OYW1lQ29udHJvbChncm91cC5pZCksXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHQoJ3NlY3Rpb25OYW1lUGxhY2Vob2xkZXInKSxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvdmFsLWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19zZWN0aW9uLXN1YnRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8dmFsLWZvcm0tZmllbGQgW2xhYmVsXT1cInQoJ3NlY3Rpb25TdWJ0aXRsZUxhYmVsJylcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2w6IHNlY3Rpb25TdWJ0aXRsZUNvbnRyb2woZ3JvdXAuaWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHQoJ3NlY3Rpb25TdWJ0aXRsZVBsYWNlaG9sZGVyJyksXG4gICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L3ZhbC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci1hZGQtcXVlc3Rpb24tJyArIGdyb3VwLmlkLFxuICAgICAgICAgICAgICAgICAgdGV4dDogdCgnYWRkUXVlc3Rpb25Ub1NlY3Rpb24nKSxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICAgICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICAgICAgICBpY29uOiB7IG5hbWU6ICdhZGQtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJhZGRRdWVzdGlvbihncm91cC5pZClcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIEBmb3IgKHJvdyBvZiBncm91cC5yb3dzOyB0cmFjayByb3cuaWQ7IGxldCBpID0gJGluZGV4OyBsZXQgZmlyc3QgPSAkZmlyc3Q7IGxldCBsYXN0ID0gJGxhc3QpIHtcbiAgICAgICAgICAgICAgQGxldCBnbG9iYWxJbmRleCA9IHJvd0dsb2JhbEluZGV4KGdyb3VwLmlkLCBpKTtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcm93LmxhYmVsIHx8IHQoJ3VudGl0bGVkUXVlc3Rpb24nKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUxhYmVsKHJvdy50eXBlKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAocm93LnJlcXVpcmVkID8gJyDCtyAnICsgdCgncmVxdWlyZWRUYWcnKSA6ICcnKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLWFkZC0nICsgcm93LmlkLCAnYWRkLW91dGxpbmUnLCBhZGRRdWVzdGlvbkFyaWFMYWJlbChyb3cuc2VjdGlvbkxhYmVsKSwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJhZGRRdWVzdGlvbihyb3cuc2VjdGlvbklkIHx8IGdyb3VwLmlkKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImljb25BY3Rpb24oJ3EtdXAtJyArIHJvdy5pZCwgJ2Fycm93LXVwLW91dGxpbmUnLCB0KCdtb3ZlVXAnKSwgZmlyc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJtb3ZlKGdsb2JhbEluZGV4LCAtMSlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJpY29uQWN0aW9uKCdxLWRvd24tJyArIHJvdy5pZCwgJ2Fycm93LWRvd24tb3V0bGluZScsIHQoJ21vdmVEb3duJyksIGxhc3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJtb3ZlKGdsb2JhbEluZGV4LCAxKVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cImljb25BY3Rpb24oJ3EtY29weS0nICsgcm93LmlkLCAnY29weS1vdXRsaW5lJywgdCgnZHVwbGljYXRlUXVlc3Rpb24nKSlcIlxuICAgICAgICAgICAgICAgICAgICAgIChvbkNsaWNrKT1cImR1cGxpY2F0ZShyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiaWNvbkFjdGlvbigncS1lZGl0LScgKyByb3cuaWQsICdjcmVhdGUtb3V0bGluZScsIHQoJ2VkaXRRdWVzdGlvbicpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlRWRpdChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwiaWNvbkFjdGlvbigncS1yZW1vdmUtJyArIHJvdy5pZCwgJ3RyYXNoLW91dGxpbmUnLCB0KCdyZW1vdmVRdWVzdGlvbicpLCBmYWxzZSwgJ2RhbmdlcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJyZW1vdmVRdWVzdGlvbihyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgQGlmIChlZGl0aW5nSWQoKSA9PT0gcm93LmlkKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VydmV5LWJ1aWxkZXJfX3Jvdy1lZGl0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC1maWVsZC1zY2hlbWEtZWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgI2VkaXRvclxuICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJlZGl0b3JQcm9wcyhyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlZCk9XCJkcmFmdFF1ZXN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChzYXZlKT1cImFwcGx5UXVlc3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fcm93LWVkaXRvci1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHZhbC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiAncS1kb25lLScgKyByb3cuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHQoJ2RvbmVFZGl0aW5nJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25DbGljayk9XCJlZGl0b3Iuc3VibWl0KClcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGlmICghaXNXaXphcmQoKSkge1xuICAgICAgICAgIDx2YWwtYnV0dG9uXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLWFkZC1xdWVzdGlvbicsXG4gICAgICAgICAgICAgIHRleHQ6IHQoJ2FkZFF1ZXN0aW9uJyksXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICAgICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIHN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgICAgICAgIGljb246IHsgbmFtZTogJ2FkZC1vdXRsaW5lJywgc2xvdDogJ3N0YXJ0JyB9LFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJhZGRRdWVzdGlvbihjdXJyZW50U2VjdGlvbklkKCkpXCJcbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoaXNXaXphcmQoKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8dmFsLWJ1dHRvblxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHRva2VuOiAnc3VydmV5LWJ1aWxkZXItYWRkLXNlY3Rpb24nLFxuICAgICAgICAgICAgICAgIHRleHQ6IHQoJ2FkZFNlY3Rpb24nKSxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICAgICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgICAgICAgICAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgICAgc3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgICAgICAgICBpY29uOiB7IG5hbWU6ICdhZGQtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cImFkZFNlY3Rpb24oKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cblxuICAgICAgQGlmIChzaG93V2l6YXJkU2VjdGlvbigzKSkge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19yZXZpZXdcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWxcIj57eyB0KCdyZXZpZXdUaXRsZScpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgdGl0bGVDb250cm9sLnZhbHVlIHx8IHQoJ3VudGl0bGVkUXVlc3Rpb24nKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDxzcGFuPnt7IHN1YnRpdGxlQ29udHJvbC52YWx1ZSB8fCB0KCdyZXZpZXdOb1N1YnRpdGxlJykgfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4+e3sgcmV2aWV3UXVlc3Rpb25zQ291bnQoKSB9fTwvc3Bhbj5cbiAgICAgICAgICBAaWYgKGhlYWRlckltYWdlQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgPHNwYW4+e3sgdCgncmV2aWV3SGVhZGVySW1hZ2UnKSB9fTwvc3Bhbj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4+e3sgc3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZSA/IHQoJ3Jldmlld1N1Y2Nlc3NJbWFnZScpIDogdCgncmV2aWV3RGVmYXVsdENsb3NlJykgfX08L3NwYW4+XG4gICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInByZXZpZXdQcm9wcygpXCIgKG9uQ2xpY2spPVwib3BlblByZXZpZXcoKVwiIC8+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmICh2YWxpZGF0aW9uRXJyb3IoKSkge1xuICAgICAgICA8cCBjbGFzcz1cInN1cnZleS1idWlsZGVyX19lcnJvclwiPnt7IHZhbGlkYXRpb25FcnJvcigpIH19PC9wPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGlzV2l6YXJkKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cInN1cnZleS1idWlsZGVyX193aXphcmQtYWN0aW9uc1wiPlxuICAgICAgICAgIEBpZiAod2l6YXJkU3RlcCgpID4gMCkge1xuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIndpemFyZEJhY2tQcm9wcygpXCIgKG9uQ2xpY2spPVwicHJldmlvdXNTdGVwKClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHdpemFyZFN0ZXAoKSA8IHdpemFyZFN0ZXBzKCkubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cIndpemFyZE5leHRQcm9wcygpXCIgKG9uQ2xpY2spPVwibmV4dFN0ZXAoKVwiIC8+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwic2F2ZVByb3BzKClcIiAob25DbGljayk9XCJzYXZlKClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInNhdmVQcm9wcygpXCIgKG9uQ2xpY2spPVwic2F2ZSgpXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19xdWVzdGlvbi1zZWN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiAxMnB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS12YWwtcmFkaXVzLXNtLCAxMHB4KTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tdGV4dC1jb2xvci1yZ2IsIDAsIDAsIDApLCAwLjAyNSk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tc3VtbWFyeSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogM3B4O1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogOHB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi1zdW1tYXJ5IHNwYW4sXG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tc3VtbWFyeSBzbWFsbCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKHZhcigtLWlvbi10ZXh0LWNvbG9yLXJnYiwgMCwgMCwgMCksIDAuNjgpO1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi1zdW1tYXJ5IHN0cm9uZyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi1oZWFkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi1oZWFkIHN0cm9uZyB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tdGV4dC1jb2xvciwgIzAwMCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tdGFicyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19zZWN0aW9uLXRhYiB7XG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgICBtaW4taGVpZ2h0OiAzNnB4O1xuICAgICAgICBwYWRkaW5nOiA3cHggMTJweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEyKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciwgI2ZmZikpO1xuICAgICAgICBjb2xvcjogcmdiYSh2YXIoLS1pb24tdGV4dC1jb2xvci1yZ2IsIDAsIDAsIDApLCAwLjcyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc2VjdGlvbi10YWItLWFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19wcmVzZW50YXRpb24ge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEycHg7XG4gICAgICAgIHBhZGRpbmctdG9wOiA0cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24sXG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JldmlldyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc3RlcHMge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCBtaW5tYXgoMCwgMWZyKSk7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19zdGVwIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgbWluLWhlaWdodDogNDBweDtcbiAgICAgICAgcGFkZGluZzogOHB4O1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMTIpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciwgI2ZmZikpO1xuICAgICAgICBjb2xvcjogcmdiYSh2YXIoLS1pb24tdGV4dC1jb2xvci1yZ2IsIDAsIDAsIDApLCAwLjcyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc3RlcCBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB3aWR0aDogMjBweDtcbiAgICAgICAgaGVpZ2h0OiAyMHB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LCAjZjRmNWY4KTtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fc3RlcC0tYWN0aXZlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3dpemFyZC1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3NlY3Rpb24tYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JldmlldyB7XG4gICAgICAgIHBhZGRpbmc6IDEycHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWlvbi1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXZhbC1yYWRpdXMtbWQsIDEycHgpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY2FyZC1iYWNrZ3JvdW5kLCB2YXIoLS1pb24tYmFja2dyb3VuZC1jb2xvciwgI2ZmZikpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yZXZpZXcgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcmV2aWV3IHNwYW46bm90KC5zdXJ2ZXktYnVpbGRlcl9fcXVlc3Rpb25zLWxhYmVsKSB7XG4gICAgICAgIGNvbG9yOiByZ2JhKHZhcigtLWlvbi10ZXh0LWNvbG9yLXJnYiwgMCwgMCwgMCksIDAuNzIpO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS1maWVsZCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtcHJldmlldyB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXByZXZpZXcgaW1nIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBhc3BlY3QtcmF0aW86IDE2IC8gOTtcbiAgICAgICAgb2JqZWN0LWZpdDogY29udGFpbjtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsICNmNGY1ZjgpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS1jbGVhciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA4cHg7XG4gICAgICAgIHJpZ2h0OiA4cHg7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDMycHg7XG4gICAgICAgIGhlaWdodDogMzJweDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjYpO1xuICAgICAgICBjb2xvcjogI2ZmZjtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtaW4taGVpZ2h0OiA0NHB4O1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDE4cHg7XG4gICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCB2YXIoLS1pb24tY29sb3ItZGFyaywgIzJmMmMzYSk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyaywgIzJmMmMzYSk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9faW1hZ2UtdXBsb2FkOmhvdmVyIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX2ltYWdlLXVwbG9hZC0tbG9hZGluZyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQgaW9uLXNwaW5uZXIge1xuICAgICAgICB3aWR0aDogMTZweDtcbiAgICAgICAgaGVpZ2h0OiAxNnB4O1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19pbWFnZS11cGxvYWQgaW5wdXQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19xdWVzdGlvbnMtbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fZW1wdHkge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgIGNvbG9yOiByZ2JhKHZhcigtLWlvbi10ZXh0LWNvbG9yLXJnYiwgMCwgMCwgMCksIDAuNzIpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19vcHRpb25hbC1ub3RlIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogcmdiYSh2YXIoLS1pb24tdGV4dC1jb2xvci1yZ2IsIDAsIDAsIDApLCAwLjcyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg3NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzU7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3JvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZzogMTJweDtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0taW9uLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjEpKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tdmFsLXJhZGl1cy1tZCwgMTJweCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jYXJkLWJhY2tncm91bmQsIHZhcigtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjZmZmKSk7XG4gICAgICB9XG4gICAgICAvKiBNb2JpbGUtZmlyc3Q6IGVsIHRleHRvIGRlIGxhIHByZWd1bnRhIHkgc3VzIGFjY2lvbmVzIGFwaWxhZG9zLiBFbiBmaWxhXG4gICAgICAgICBmaWphLCBjaW5jbyBib3RvbmVzIGxlIGNvbWVuIGVsIGFuY2hvIGFsIHRleHRvIHkgbG8gcGFydGVuIGVuIG11Y2hhc1xuICAgICAgICAgbMOtbmVhcyBhbmdvc3RhcyDigJQganVzdG8gZW4gZWwgdmlld3BvcnQgZG9uZGUgbcOhcyBzZSB1c2EuICovXG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1oZWFkIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAycHg7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93LXRleHQgc3Ryb25nIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjMDAwKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjkzNzVyZW07XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy10ZXh0IHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSh2YXIoLS1pb24tdGV4dC1jb2xvci1yZ2IsIDAsIDAsIDApLCAwLjY4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjgxMjVyZW07XG4gICAgICB9XG4gICAgICAuc3VydmV5LWJ1aWxkZXJfX3Jvdy1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIH1cbiAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93LWVkaXRvciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1pb24tYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMSkpO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19yb3ctZWRpdG9yLWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgfVxuICAgICAgLnN1cnZleS1idWlsZGVyX19lcnJvciB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYW5nZXIpO1xuICAgICAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuICAgICAgQG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KSB7XG4gICAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93LWhlYWQge1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICB9XG4gICAgICAgIC5zdXJ2ZXktYnVpbGRlcl9fcm93LXRleHQge1xuICAgICAgICAgIGZsZXg6IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBTdXJ2ZXlCdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcHJvcHM6IFN1cnZleUJ1aWxkZXJNZXRhZGF0YSA9IHt9O1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2F2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFN1cnZleUJ1aWxkZXJTYXZlRXZlbnQ+KCk7XG4gIC8qKlxuICAgKiBFbWl0ZSBsbyBlc2NyaXRvLCB5YSB2YWxpZGFkbywgU0lOIGd1YXJkYXJsby4gU29sbyBjb24gYHByb3BzLnBlcnNpc3Q6XG4gICAqIGZhbHNlYCDigJQgdmVyIGVsIGNvbWVudGFyaW8gZGUgZXNlIGNhbXBvOiBjdWFuZG8gbGEgYXBwIHRpZW5lIGVuZHBvaW50XG4gICAqIHByb3BpbywgZ3VhcmRhciBkZXNkZSBhY8OhIHNlIHNhbHRhIGxhIHZhbGlkYWNpw7NuIGRlIGxhIGVudGlkYWQgZHVlw7FhIHkgZWxcbiAgICogcGVybWlzbyBkZSBsYSB2ZXJ0aWNhbC5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBkcmFmdCA9IG5ldyBFdmVudEVtaXR0ZXI8U3VydmV5RHJhZnRFdmVudD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcXVlc3RzID0gaW5qZWN0KFJlcXVlc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlciA9IGluamVjdChSZXF1ZXN0Rm9ybUJ1aWxkZXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcnMgPSBpbmplY3QoVmFsdGVjaEVycm9yU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxzID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG5cbiAgcmVhZG9ubHkgc3VydmV5TmFtZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHRpdGxlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgc3VidGl0bGVDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICByZWFkb25seSBoZWFkZXJJbWFnZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NUaXRsZUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XG4gIHJlYWRvbmx5IHN1Y2Nlc3NNZXNzYWdlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgc3VjY2Vzc0ltYWdlQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgcmVhZG9ubHkgcXVlc3Rpb25zID0gc2lnbmFsPEVkaXRhYmxlRmllbGREZWZbXT4oW10pO1xuICByZWFkb25seSBlZGl0aW5nSWQgPSBzaWduYWwoJycpO1xuICByZWFkb25seSB3aXphcmRTdGVwID0gc2lnbmFsKDApO1xuICByZWFkb25seSB2YWxpZGF0aW9uRXJyb3IgPSBzaWduYWwoJycpO1xuICByZWFkb25seSBzYXZpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSB1cGxvYWRpbmdJbWFnZSA9IHNpZ25hbDwnaGVhZGVyJyB8ICdzdWNjZXNzJyB8ICcnPignJyk7XG4gIHJlYWRvbmx5IHNlY3Rpb25JZHMgPSBzaWduYWw8c3RyaW5nW10+KFsnX19kZWZhdWx0X18nXSk7XG4gIHJlYWRvbmx5IHNlY3Rpb25OYW1lcyA9IHNpZ25hbDxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSk7XG4gIHJlYWRvbmx5IHNlY3Rpb25TdWJ0aXRsZXMgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pO1xuICByZWFkb25seSBhY3RpdmVTZWN0aW9uSWQgPSBzaWduYWwoJ19fZGVmYXVsdF9fJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvbk5hbWVDb250cm9sczogUmVjb3JkPHN0cmluZywgRm9ybUNvbnRyb2w+ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VjdGlvblN1YnRpdGxlQ29udHJvbHM6IFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sPiA9IHt9O1xuXG4gIHJlYWRvbmx5IHF1ZXN0aW9uR3JvdXBzID0gY29tcHV0ZWQ8U3VydmV5UXVlc3Rpb25TZWN0aW9uW10+KCgpID0+IHRoaXMuZ3JvdXBRdWVzdGlvbnModGhpcy5xdWVzdGlvbnMoKSkpO1xuXG4gIHJlYWRvbmx5IHdpemFyZFN0ZXBzID0gY29tcHV0ZWQ8V2l6YXJkU3RlcFtdPigoKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgaWQ6ICdzdGFydCcsIGxhYmVsOiB0aGlzLnQoJ3N0ZXBTdGFydCcpIH0sXG4gICAgICB7IGlkOiAncXVlc3Rpb25zJywgbGFiZWw6IHRoaXMudCgnc3RlcFF1ZXN0aW9ucycpIH0sXG4gICAgICB7IGlkOiAnY2xvc2UnLCBsYWJlbDogdGhpcy50KCdzdGVwQ2xvc2UnKSB9LFxuICAgICAgeyBpZDogJ3JldmlldycsIGxhYmVsOiB0aGlzLnQoJ3N0ZXBSZXZpZXcnKSB9LFxuICAgIF07XG4gIH0pO1xuXG4gIHByaXZhdGUgZ3JvdXBRdWVzdGlvbnMocm93czogRWRpdGFibGVGaWVsZERlZltdKTogU3VydmV5UXVlc3Rpb25TZWN0aW9uW10ge1xuICAgIGNvbnN0IGdyb3VwczogU3VydmV5UXVlc3Rpb25TZWN0aW9uW10gPSB0aGlzLnNlY3Rpb25JZHMoKS5tYXAoaWQgPT4gKHtcbiAgICAgIGlkLFxuICAgICAgbGFiZWw6IHRoaXMuc2VjdGlvbk5hbWVzKClbaWRdID8/ICcnLFxuICAgICAgc3VidGl0bGU6IHRoaXMuc2VjdGlvblN1YnRpdGxlcygpW2lkXSA/PyAnJyxcbiAgICAgIHJvd3M6IFtdLFxuICAgIH0pKTtcbiAgICBjb25zdCBpbmRleCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwLCBwb3NpdGlvbikgPT4gaW5kZXguc2V0KGdyb3VwLmlkLCBwb3NpdGlvbikpO1xuXG4gICAgcm93cy5mb3JFYWNoKHF1ZXN0aW9uID0+IHtcbiAgICAgIGNvbnN0IHNlY3Rpb24gPSAocXVlc3Rpb24uc2VjdGlvbkxhYmVsID8/ICcnKS50cmltKCk7XG4gICAgICBjb25zdCBzZWN0aW9uS2V5ID0gcXVlc3Rpb24uc2VjdGlvbklkIHx8IChzZWN0aW9uID8gdGhpcy5mb3JtQnVpbGRlci50b1Rva2VuKHNlY3Rpb24pIDogJ19fZGVmYXVsdF9fJyk7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMuc2VjdGlvbk5hbWVzKClbc2VjdGlvbktleV0gPz8gc2VjdGlvbjtcbiAgICAgIGxldCBwb3NpdGlvbiA9IGluZGV4LmdldChzZWN0aW9uS2V5KTtcbiAgICAgIGlmIChwb3NpdGlvbiA9PSBudWxsKSB7XG4gICAgICAgIHBvc2l0aW9uID0gZ3JvdXBzLmxlbmd0aDtcbiAgICAgICAgaW5kZXguc2V0KHNlY3Rpb25LZXksIHBvc2l0aW9uKTtcbiAgICAgICAgZ3JvdXBzLnB1c2goeyBpZDogc2VjdGlvbktleSwgbGFiZWwsIHN1YnRpdGxlOiB0aGlzLnNlY3Rpb25TdWJ0aXRsZXMoKVtzZWN0aW9uS2V5XSA/PyAnJywgcm93czogW10gfSk7XG4gICAgICB9XG4gICAgICBncm91cHNbcG9zaXRpb25dLnJvd3MucHVzaChxdWVzdGlvbik7XG4gICAgfSk7XG5cbiAgICBpZiAoIWdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRJZCA9ICdfX2RlZmF1bHRfXyc7XG4gICAgICBncm91cHMucHVzaCh7IGlkOiBkZWZhdWx0SWQsIGxhYmVsOiB0aGlzLnNlY3Rpb25OYW1lcygpW2RlZmF1bHRJZF0gPz8gJycsIHN1YnRpdGxlOiB0aGlzLnNlY3Rpb25TdWJ0aXRsZXMoKVtkZWZhdWx0SWRdID8/ICcnLCByb3dzOiBbXSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBzO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVTZWN0aW9uSWQoc2VjdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIHJldHVybiAoc2VjdGlvbklkID8/ICcnKS50cmltKCkgfHwgJ19fZGVmYXVsdF9fJztcbiAgfVxuXG4gIHByaXZhdGUgcXVlc3Rpb25Hcm91cEJ5SWQoc2VjdGlvbklkOiBzdHJpbmcpOiBTdXJ2ZXlRdWVzdGlvblNlY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnF1ZXN0aW9uR3JvdXBzKCkuZmluZChncm91cCA9PiBncm91cC5pZCA9PT0gc2VjdGlvbklkKTtcbiAgfVxuXG4gIHNlY3Rpb25OYW1lQ29udHJvbChzZWN0aW9uSWQ6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVTZWN0aW9uSWQoc2VjdGlvbklkKTtcbiAgICBpZiAoIXRoaXMuc2VjdGlvbk5hbWVDb250cm9sc1tub3JtYWxpemVkXSkge1xuICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLnNlY3Rpb25OYW1lcygpW25vcm1hbGl6ZWRdID8/ICcnLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xuICAgICAgY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSAodmFsdWUgPz8gJycpLnRyaW0oKTtcbiAgICAgICAgdGhpcy5zZWN0aW9uTmFtZXMudXBkYXRlKHZhbHVlcyA9PiAoeyAuLi52YWx1ZXMsIFtub3JtYWxpemVkXTogdmFsdWUgfSkpO1xuICAgICAgICB0aGlzLnF1ZXN0aW9ucy51cGRhdGUocm93cyA9PlxuICAgICAgICAgIHJvd3MubWFwKHJvdyA9PlxuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVTZWN0aW9uSWQocm93LnNlY3Rpb25JZCkgPT09IG5vcm1hbGl6ZWRcbiAgICAgICAgICAgICAgPyB7IC4uLnJvdywgc2VjdGlvbklkOiBub3JtYWxpemVkLCBzZWN0aW9uTGFiZWw6IGxhYmVsIHx8IHVuZGVmaW5lZCB9XG4gICAgICAgICAgICAgIDogcm93XG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNlY3Rpb25OYW1lQ29udHJvbHNbbm9ybWFsaXplZF0gPSBjb250cm9sO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlY3Rpb25OYW1lQ29udHJvbHNbbm9ybWFsaXplZF07XG4gIH1cblxuICBzZWN0aW9uU3VidGl0bGVDb250cm9sKHNlY3Rpb25JZDogc3RyaW5nKTogRm9ybUNvbnRyb2wge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0aGlzLm5vcm1hbGl6ZVNlY3Rpb25JZChzZWN0aW9uSWQpO1xuICAgIGlmICghdGhpcy5zZWN0aW9uU3VidGl0bGVDb250cm9sc1tub3JtYWxpemVkXSkge1xuICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh0aGlzLnNlY3Rpb25TdWJ0aXRsZXMoKVtub3JtYWxpemVkXSA/PyAnJywgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcbiAgICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuc2VjdGlvblN1YnRpdGxlcy51cGRhdGUodmFsdWVzID0+ICh7IC4uLnZhbHVlcywgW25vcm1hbGl6ZWRdOiB2YWx1ZSB9KSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VjdGlvblN1YnRpdGxlQ29udHJvbHNbbm9ybWFsaXplZF0gPSBjb250cm9sO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNlY3Rpb25TdWJ0aXRsZUNvbnRyb2xzW25vcm1hbGl6ZWRdO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbGxvd2VkSW1hZ2VUeXBlcyA9IFsnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnLCAnaW1hZ2Uvd2VicCcsICdpbWFnZS9naWYnXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXhJbWFnZUJ5dGVzID0gMTAgKiAxMDI0ICogMTAyNDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UoTkFNRVNQQUNFKSkge1xuICAgICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMoTkFNRVNQQUNFLCBTVVJWRVlfQlVJTERFUl9JMThOKTtcbiAgICB9XG4gICAgLy8gRWwgbm9tYnJlIGRlbCB0aXBvIGRlIGNhZGEgcHJlZ3VudGEgc2UgbXVlc3RyYSBlbiBsYSBmaWxhIGNvbGFwc2FkYSwgcXVlXG4gICAgLy8gZGlidWphIGVzdGUgY29tcG9uZW50ZSB5IG5vIGVsIGVkaXRvciDigJQgc2kgbmFkaWUgbW9udMOzIHVuIGVkaXRvciB0b2RhdsOtYSxcbiAgICAvLyBlbCBuYW1lc3BhY2Ugbm8gZXhpc3RpcsOtYSB5IGxhIGZpbGEgbW9zdHJhcsOtYSBsYSBjbGF2ZSBjcnVkYS5cbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UoRURJVE9SX05BTUVTUEFDRSkpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKEVESVRPUl9OQU1FU1BBQ0UsIEZJRUxEX1NDSEVNQV9FRElUT1JfSTE4Tik7XG4gICAgfVxuICAgIHRoaXMuc3VjY2Vzc1RpdGxlQ29udHJvbC5zZXRWYWx1ZSh0aGlzLmRlZmF1bHRTdWNjZXNzVGl0bGUoKSk7XG4gICAgdGhpcy5zdWNjZXNzTWVzc2FnZUNvbnRyb2wuc2V0VmFsdWUodGhpcy5kZWZhdWx0U3VjY2Vzc01lc3NhZ2UoKSk7XG4gICAgYWRkSWNvbnMoeyBjbG91ZFVwbG9hZE91dGxpbmUsIGV5ZU91dGxpbmUsIHRyYXNoT3V0bGluZSB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFNlbWJyYWRvIGRpcmVjdG86IGxhIGFwcCB5YSB0ZW7DrWEgbGEgZW5jdWVzdGEsIG5vIGhhY2UgZmFsdGEgbGVlcmxhLlxuICAgIGlmICh0aGlzLnByb3BzLmluaXRpYWwpIHtcbiAgICAgIHRoaXMuaHlkcmF0ZShcbiAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsLm5hbWUsXG4gICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbC5sYWJlbCxcbiAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsLnN1YnRpdGxlLFxuICAgICAgICB0aGlzLnByb3BzLmluaXRpYWwucXVlc3Rpb25zLFxuICAgICAgICB0aGlzLnByb3BzLmluaXRpYWwucHJlc2VudGF0aW9uXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucHJvcHMudHlwZUlkKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNmZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMucmVxdWVzdHMuZ2V0UmVxdWVzdFR5cGUodGhpcy5wcm9wcy50eXBlSWQpKTtcbiAgICAgIGNvbnN0IG1ldGFkYXRhTmFtZSA9XG4gICAgICAgIHR5cGVvZiBjZmcubWV0YWRhdGE/LlsnbmFtZSddID09PSAnc3RyaW5nJyA/IGNmZy5tZXRhZGF0YVsnbmFtZSddIDogJyc7XG4gICAgICB0aGlzLmh5ZHJhdGUoXG4gICAgICAgIG1ldGFkYXRhTmFtZSB8fCBjZmcubGFiZWwsXG4gICAgICAgIGNmZy5sYWJlbCxcbiAgICAgICAgY2ZnLnN1YnRpdGxlID8/ICcnLFxuICAgICAgICBjZmcuZmllbGRTY2hlbWEsXG4gICAgICAgIGNmZy5wcmVzZW50YXRpb24sXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnc3VydmV5QnVpbGRlci5sb2FkJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICdsb2FkRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiBOQU1FU1BBQ0UsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIE5BTUVTUEFDRSk7XG4gIH1cblxuICB0eXBlTGFiZWwodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udChgdHlwZSR7dHlwZX1gLCBFRElUT1JfTkFNRVNQQUNFKTtcbiAgfVxuXG4gIHF1ZXN0aW9uVHlwZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLnF1ZXN0aW9uVHlwZXM/Lmxlbmd0aCA/IHRoaXMucHJvcHMucXVlc3Rpb25UeXBlcyA6IFNVUlZFWV9RVUVTVElPTl9UWVBFUztcbiAgfVxuXG4gIGlzV2l6YXJkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmxheW91dCA9PT0gJ3dpemFyZCc7XG4gIH1cblxuICBzaG93V2l6YXJkU2VjdGlvbihzdGVwOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1dpemFyZCgpICYmIHRoaXMud2l6YXJkU3RlcCgpID09PSBzdGVwO1xuICB9XG5cbiAgZ29Ub1N0ZXAoc3RlcDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzV2l6YXJkKCkpIHJldHVybjtcbiAgICBpZiAoc3RlcCA8PSB0aGlzLndpemFyZFN0ZXAoKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KCcnKTtcbiAgICAgIHRoaXMud2l6YXJkU3RlcC5zZXQoc3RlcCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHdoaWxlICh0aGlzLndpemFyZFN0ZXAoKSA8IHN0ZXApIHtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZVdpemFyZFN0ZXAodGhpcy53aXphcmRTdGVwKCkpKSByZXR1cm47XG4gICAgICB0aGlzLndpemFyZFN0ZXAudXBkYXRlKGN1cnJlbnQgPT4gY3VycmVudCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIG5leHRTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZVdpemFyZFN0ZXAodGhpcy53aXphcmRTdGVwKCkpKSByZXR1cm47XG4gICAgdGhpcy53aXphcmRTdGVwLnVwZGF0ZShzdGVwID0+IE1hdGgubWluKHN0ZXAgKyAxLCB0aGlzLndpemFyZFN0ZXBzKCkubGVuZ3RoIC0gMSkpO1xuICB9XG5cbiAgcHJldmlvdXNTdGVwKCk6IHZvaWQge1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gICAgdGhpcy53aXphcmRTdGVwLnVwZGF0ZShzdGVwID0+IE1hdGgubWF4KHN0ZXAgLSAxLCAwKSk7XG4gIH1cblxuICB3aXphcmRCYWNrUHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXdpemFyZC1iYWNrJyxcbiAgICAgIHRleHQ6IHRoaXMudCgncHJldmlvdXMnKSxcbiAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICB3aXphcmROZXh0UHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXdpemFyZC1uZXh0JyxcbiAgICAgIHRleHQ6IHRoaXMudCgnbmV4dCcpLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICBzYXZlUHJvcHMoKTogQnV0dG9uTWV0YWRhdGEge1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbjogJ3N1cnZleS1idWlsZGVyLXNhdmUnLFxuICAgICAgdGV4dDogdGhpcy50KCdzYXZlJyksXG4gICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgZmlsbDogJ3NvbGlkJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgIGV4cGFuZDogdGhpcy5pc1dpemFyZCgpID8gdW5kZWZpbmVkIDogJ2Jsb2NrJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IHRoaXMuc2F2aW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuV09SS0lORyA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgIH07XG4gIH1cblxuICBjbG9zZVN0ZXAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMjtcbiAgfVxuXG4gIHJldmlld1N0ZXAoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gMztcbiAgfVxuXG4gIGN1cnJlbnRTZWN0aW9uSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuaXNXaXphcmQoKSkgcmV0dXJuIHRoaXMucXVlc3Rpb25Hcm91cHMoKVswXT8uaWQ7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlU2VjdGlvbklkKCk7XG4gIH1cblxuICBzZWxlY3RTZWN0aW9uKHNlY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmVTZWN0aW9uSWQuc2V0KHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHNlY3Rpb25JZCkpO1xuICB9XG5cbiAgaW50ZXJwb2xhdGUodGVtcGxhdGU6IHN0cmluZywgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWVzKS5yZWR1Y2UoXG4gICAgICAodGV4dCwgW2tleSwgdmFsdWVdKSA9PiB0ZXh0LnJlcGxhY2VBbGwoYHske2tleX19YCwgU3RyaW5nKHZhbHVlKSksXG4gICAgICB0ZW1wbGF0ZVxuICAgICk7XG4gIH1cblxuICBlZGl0b3JQcm9wcyhyb3c6IEVkaXRhYmxlRmllbGREZWYpOiBGaWVsZFNjaGVtYUVkaXRvck1ldGFkYXRhIHtcbiAgICByZXR1cm4geyBtb2RlOiAnZWRpdCcsIGZpZWxkOiByb3csIGFsbG93ZWRUeXBlczogdGhpcy5xdWVzdGlvblR5cGVzKCksIHNob3dTZWN0aW9uOiBmYWxzZSB9O1xuICB9XG5cbiAgaWNvbkFjdGlvbihcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIGljb246IHN0cmluZyxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgY29sb3I6IENvbG9yID0gJ2RhcmsnXG4gICk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICB0ZXh0OiAnJyxcbiAgICAgIGFyaWFMYWJlbDogbGFiZWwsXG4gICAgICBjb2xvcixcbiAgICAgIGZpbGw6ICdjbGVhcicsXG4gICAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICAgIHNpemU6ICdzbWFsbCcsXG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHN0YXRlOiBkaXNhYmxlZCA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgaWNvbjogeyBuYW1lOiBpY29uLCBzbG90OiAnaWNvbi1vbmx5JyB9LFxuICAgIH07XG4gIH1cblxuICBhZGRRdWVzdGlvbkFyaWFMYWJlbChzZWN0aW9uTGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlY3Rpb24gPSAoc2VjdGlvbkxhYmVsID8/ICcnKS50cmltKCk7XG4gICAgaWYgKCFzZWN0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy50KCdhZGRRdWVzdGlvblRvU2VjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy50KCdhZGRRdWVzdGlvblRvU2VjdGlvbicpfSAoJHtzZWN0aW9ufSlgO1xuICB9XG5cbiAgYWRkUXVlc3Rpb24oc2VjdGlvbklkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlY3Rpb25JZCA9IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHNlY3Rpb25JZCk7XG4gICAgY29uc3QgdGFyZ2V0R3JvdXAgPSB0aGlzLnF1ZXN0aW9uR3JvdXBCeUlkKG5vcm1hbGl6ZWRTZWN0aW9uSWQpO1xuICAgIGNvbnN0IHNlY3Rpb25MYWJlbCA9IHRoaXMuc2VjdGlvbk5hbWVDb250cm9sKG5vcm1hbGl6ZWRTZWN0aW9uSWQpLnZhbHVlLnRyaW0oKSB8fCB0YXJnZXRHcm91cD8ubGFiZWwgfHwgJyc7XG4gICAgY29uc3Qgcm93OiBFZGl0YWJsZUZpZWxkRGVmID0ge1xuICAgICAgaWQ6IGByb3ctJHtyb3dVaWQrK31gLFxuICAgICAgbmFtZTogJycsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBwbGFjZWhvbGRlclRleHQ6ICcnLFxuICAgICAgaGludFRleHQ6ICcnLFxuICAgICAgbm90ZVRleHQ6ICcnLFxuICAgICAgdHlwZTogdGhpcy5xdWVzdGlvblR5cGVzKClbMF0sXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIHNlY3Rpb25JZDogbm9ybWFsaXplZFNlY3Rpb25JZCxcbiAgICAgIHNlY3Rpb25MYWJlbDogc2VjdGlvbkxhYmVsIHx8IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IFsuLi5yb3dzXTtcbiAgICAgIGNvbnN0IGluc2VydGlvbkluZGV4ID0gdGhpcy5uZXh0UXVlc3Rpb25JbmRleEZvclNlY3Rpb24obmV4dCwgbm9ybWFsaXplZFNlY3Rpb25JZCk7XG4gICAgICBuZXh0LnNwbGljZShpbnNlcnRpb25JbmRleCwgMCwgcm93KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuXG4gICAgLy8gVW5hIHByZWd1bnRhIHJlY2nDqW4gYWdyZWdhZGEgZXN0w6EgdmFjw61hOiBhYnJpcmxhIGVzIGVsIMO6bmljbyBwYXNvXG4gICAgLy8gc2lndWllbnRlIHBvc2libGUsIHkgZGVqYXJsYSBjZXJyYWRhIGxhIGhhcsOtYSB2ZXIgY29tbyB1bmEgZmlsYSByb3RhLlxuICAgIHRoaXMuZWRpdGluZ0lkLnNldChyb3cuaWQpO1xuICB9XG5cbiAgYWRkU2VjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9IGBzZWN0aW9uLSR7cm93VWlkKyt9YDtcbiAgICB0aGlzLnNlY3Rpb25JZHMudXBkYXRlKGlkcyA9PiBbLi4uaWRzLCBpZF0pO1xuICAgIHRoaXMuc2VjdGlvbk5hbWVzLnVwZGF0ZSh2YWx1ZXMgPT4gKHsgLi4udmFsdWVzLCBbaWRdOiAnJyB9KSk7XG4gICAgdGhpcy5zZWN0aW9uU3VidGl0bGVzLnVwZGF0ZSh2YWx1ZXMgPT4gKHsgLi4udmFsdWVzLCBbaWRdOiAnJyB9KSk7XG4gICAgdGhpcy5zZWN0aW9uTmFtZUNvbnRyb2woaWQpO1xuICAgIHRoaXMuc2VjdGlvblN1YnRpdGxlQ29udHJvbChpZCk7XG4gICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KCcnKTtcbiAgICB0aGlzLmFjdGl2ZVNlY3Rpb25JZC5zZXQoaWQpO1xuICAgIGlmICh0aGlzLmlzV2l6YXJkKCkpIHRoaXMud2l6YXJkU3RlcC5zZXQoMSk7XG4gIH1cblxuICByb3dHbG9iYWxJbmRleChzZWN0aW9uSWQ6IHN0cmluZywgZ3JvdXBSb3dJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVTZWN0aW9uSWQoc2VjdGlvbklkKTtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucXVlc3Rpb25zKCkpIHtcbiAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZVNlY3Rpb25JZChyb3cuc2VjdGlvbklkKSA9PT0gbm9ybWFsaXplZCkge1xuICAgICAgICBpZiAoZ3JvdXBSb3dJbmRleCA9PT0gMCkgcmV0dXJuIGluZGV4O1xuICAgICAgICBncm91cFJvd0luZGV4IC09IDE7XG4gICAgICB9XG4gICAgICBpbmRleCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5taW4oaW5kZXggLSAxLCAwKTtcbiAgfVxuXG4gIG5leHRRdWVzdGlvbkluZGV4Rm9yU2VjdGlvbihyb3dzOiBFZGl0YWJsZUZpZWxkRGVmW10sIHNlY3Rpb25JZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVTZWN0aW9uSWQoc2VjdGlvbklkKTtcbiAgICBpZiAoIXJvd3MubGVuZ3RoKSByZXR1cm4gMDtcbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHJldHVybiByb3dzLmxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSByb3dzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaSAtPSAxKSB7XG4gICAgICBpZiAodGhpcy5ub3JtYWxpemVTZWN0aW9uSWQocm93c1tpXS5zZWN0aW9uSWQpID09PSBub3JtYWxpemVkKSB7XG4gICAgICAgIHJldHVybiBpICsgMTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJvd3MubGVuZ3RoO1xuICB9XG5cbiAgdG9nZ2xlRWRpdChyb3c6IEVkaXRhYmxlRmllbGREZWYpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRpbmdJZC51cGRhdGUoY3VycmVudCA9PiAoY3VycmVudCA9PT0gcm93LmlkID8gJycgOiByb3cuaWQpKTtcbiAgfVxuXG4gIHJlbW92ZVF1ZXN0aW9uKHJvdzogRWRpdGFibGVGaWVsZERlZik6IHZvaWQge1xuICAgIHRoaXMucXVlc3Rpb25zLnVwZGF0ZShyb3dzID0+IHJvd3MuZmlsdGVyKHIgPT4gci5pZCAhPT0gcm93LmlkKSk7XG4gICAgaWYgKHRoaXMuZWRpdGluZ0lkKCkgPT09IHJvdy5pZCkgdGhpcy5lZGl0aW5nSWQuc2V0KCcnKTtcbiAgfVxuXG4gIGR1cGxpY2F0ZShyb3c6IEVkaXRhYmxlRmllbGREZWYpOiB2b2lkIHtcbiAgICBjb25zdCBjb3B5OiBFZGl0YWJsZUZpZWxkRGVmID0ge1xuICAgICAgLi4ucm93LFxuICAgICAgaWQ6IGByb3ctJHtyb3dVaWQrK31gLFxuICAgICAgLy8gU2luIHRva2VuIHByb3BpbyBsYSBjb3BpYSBwaXNhcsOtYSBsYXMgcmVzcHVlc3RhcyBkZWwgb3JpZ2luYWw6IGRvc1xuICAgICAgLy8gY2FtcG9zIGNvbiBlbCBtaXNtbyBgbmFtZWAgc29uIGVsIG1pc21vIGNhbXBvIHBhcmEgZWwgYmFja2VuZC5cbiAgICAgIG5hbWU6IHRoaXMuZm9ybUJ1aWxkZXIudW5pcXVlRmllbGROYW1lKHJvdy5uYW1lIHx8IHJvdy5sYWJlbCwgdGhpcy5xdWVzdGlvbnMoKSksXG4gICAgICBvcHRpb25zOiByb3cub3B0aW9ucyA/IHJvdy5vcHRpb25zLm1hcChvID0+ICh7IC4uLm8gfSkpIDogdW5kZWZpbmVkLFxuICAgIH07XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSByb3dzLmZpbmRJbmRleChyID0+IHIuaWQgPT09IHJvdy5pZCk7XG4gICAgICByZXR1cm4gWy4uLnJvd3Muc2xpY2UoMCwgaW5kZXggKyAxKSwgY29weSwgLi4ucm93cy5zbGljZShpbmRleCArIDEpXTtcbiAgICB9KTtcbiAgfVxuXG4gIG1vdmUoaW5kZXg6IG51bWJlciwgZGVsdGE6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGluZGV4ICsgZGVsdGE7XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4ge1xuICAgICAgaWYgKHRhcmdldCA8IDAgfHwgdGFyZ2V0ID49IHJvd3MubGVuZ3RoKSByZXR1cm4gcm93cztcbiAgICAgIGNvbnN0IG5leHQgPSBbLi4ucm93c107XG4gICAgICBbbmV4dFtpbmRleF0sIG5leHRbdGFyZ2V0XV0gPSBbbmV4dFt0YXJnZXRdLCBuZXh0W2luZGV4XV07XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHdWFyZGEgbG8gcXVlIHNlIGVzdMOhIGVzY3JpYmllbmRvLCBzaW4gY2VycmFyIGVsIGVkaXRvciBuaSB2YWxpZGFyLlxuICAgKlxuICAgKiBTaW4gZXN0bywgbG8gdGlwZWFkbyBzb2xvIGV4aXN0w61hIGRlbnRybyBkZWwgZWRpdG9yIGhhc3RhIHF1ZSBhbGd1aWVuXG4gICAqIHRvY2FiYSBcIkxpc3RvXCI6IGxhIGZpbGEgc2VndcOtYSBkaWNpZW5kbyBcIlByZWd1bnRhIHNpbiB0ZXh0b1wiIHksIHBlb3IsXG4gICAqIFwiR3VhcmRhciBlbmN1ZXN0YVwiIGZhbGxhYmEgY29uIFwidG9kYXMgbGFzIHByZWd1bnRhcyBuZWNlc2l0YW4gdGV4dG9cIiBzb2JyZVxuICAgKiB1bmEgcHJlZ3VudGEgcXVlIGVuIHBhbnRhbGxhIGNsYXJhbWVudGUgdGVuw61hIHRleHRvLiBUb2NhciBcIkxpc3RvXCIgZXJhIHVuXG4gICAqIHBhc28gb2JsaWdhdG9yaW8gcXVlIG5vIHNlIHZlw61hIHBvciBuaW5nw7puIGxhZG8uXG4gICAqL1xuICBkcmFmdFF1ZXN0aW9uKGZpZWxkOiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT4gcm93cy5tYXAociA9PiAoci5pZCA9PT0gZmllbGQuaWQgPyB0aGlzLndpdGhSZXNvbHZlZFNlY3Rpb24oeyAuLi5yLCAuLi5maWVsZCB9KSA6IHIpKSk7XG4gICAgaWYgKHRoaXMudmFsaWRhdGlvbkVycm9yKCkpIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gIH1cblxuICBhcHBseVF1ZXN0aW9uKGZpZWxkOiBFZGl0YWJsZUZpZWxkRGVmKTogdm9pZCB7XG4gICAgdGhpcy5xdWVzdGlvbnMudXBkYXRlKHJvd3MgPT5cbiAgICAgIHJvd3MubWFwKHIgPT5cbiAgICAgICAgci5pZCA9PT0gZmllbGQuaWRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4udGhpcy53aXRoUmVzb2x2ZWRTZWN0aW9uKGZpZWxkKSxcbiAgICAgICAgICAgICAgbmFtZTogdGhpcy5mb3JtQnVpbGRlci51bmlxdWVGaWVsZE5hbWUoXG4gICAgICAgICAgICAgICAgZmllbGQubmFtZSB8fCBmaWVsZC5sYWJlbCxcbiAgICAgICAgICAgICAgICByb3dzLmZpbHRlcihvID0+IG8uaWQgIT09IHIuaWQpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiByXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmVkaXRpbmdJZC5zZXQoJycpO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG4gIH1cblxuICBwcml2YXRlIHdpdGhSZXNvbHZlZFNlY3Rpb24oZmllbGQ6IEVkaXRhYmxlRmllbGREZWYpOiBFZGl0YWJsZUZpZWxkRGVmIHtcbiAgICBjb25zdCBsYWJlbCA9IChmaWVsZC5zZWN0aW9uTGFiZWwgPz8gJycpLnRyaW0oKTtcbiAgICBjb25zdCBpZCA9IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKGZpZWxkLnNlY3Rpb25JZCk7XG4gICAgaWYgKHRoaXMuaXNXaXphcmQoKSkge1xuICAgICAgY29uc3Qgc2VjdGlvbkxhYmVsID0gbGFiZWwgfHwgdGhpcy5zZWN0aW9uTmFtZUNvbnRyb2woaWQpLnZhbHVlLnRyaW0oKSB8fCB0aGlzLnNlY3Rpb25OYW1lcygpW2lkXSB8fCAnJztcbiAgICAgIGNvbnN0IHNlY3Rpb25TdWJ0aXRsZSA9XG4gICAgICAgIChmaWVsZC5zZWN0aW9uU3VidGl0bGUgPz8gJycpLnRyaW0oKSB8fFxuICAgICAgICB0aGlzLnNlY3Rpb25TdWJ0aXRsZUNvbnRyb2woaWQpLnZhbHVlLnRyaW0oKSB8fFxuICAgICAgICB0aGlzLnNlY3Rpb25TdWJ0aXRsZXMoKVtpZF0gfHxcbiAgICAgICAgJyc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgc2VjdGlvbklkOiBpZCxcbiAgICAgICAgc2VjdGlvbkxhYmVsOiBzZWN0aW9uTGFiZWwgfHwgdW5kZWZpbmVkLFxuICAgICAgICBzZWN0aW9uU3VidGl0bGU6IHNlY3Rpb25TdWJ0aXRsZSB8fCB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaXNXaXphcmQoKSAmJiBpZCA9PT0gJ19fZGVmYXVsdF9fJyAmJiBsYWJlbCkge1xuICAgICAgcmV0dXJuIHsgLi4uZmllbGQsIHNlY3Rpb25JZDogdGhpcy5mb3JtQnVpbGRlci50b1Rva2VuKGxhYmVsKSwgc2VjdGlvbkxhYmVsOiBsYWJlbCB9O1xuICAgIH1cbiAgICByZXR1cm4geyAuLi5maWVsZCwgc2VjdGlvbklkOiBpZCwgc2VjdGlvbkxhYmVsOiBsYWJlbCB8fCB1bmRlZmluZWQgfTtcbiAgfVxuXG4gIGFzeW5jIG9uUHJlc2VudGF0aW9uRmlsZVNlbGVjdGVkKHNsb3Q6ICdoZWFkZXInIHwgJ3N1Y2Nlc3MnLCBldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IGZpbGUgPSBpbnB1dC5maWxlcz8uWzBdO1xuICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgaWYgKCFmaWxlIHx8ICF0aGlzLnByb3BzLnByZXNlbnRhdGlvbkltYWdlVXBsb2FkIHx8IHRoaXMudXBsb2FkaW5nSW1hZ2UoKSkgcmV0dXJuO1xuXG4gICAgaWYgKGZpbGUudHlwZSAmJiAhdGhpcy5hbGxvd2VkSW1hZ2VUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdpbWFnZVR5cGVFcnJvcicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4SW1hZ2VCeXRlcykge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnaW1hZ2VTaXplRXJyb3InKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGxvYWRpbmdJbWFnZS5zZXQoc2xvdCk7XG4gICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KCcnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5wcm9wcy5wcmVzZW50YXRpb25JbWFnZVVwbG9hZChzbG90LCBmaWxlKTtcbiAgICAgIGlmIChzbG90ID09PSAnaGVhZGVyJykge1xuICAgICAgICB0aGlzLmhlYWRlckltYWdlQ29udHJvbC5zZXRWYWx1ZSh1cmwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdWNjZXNzSW1hZ2VDb250cm9sLnNldFZhbHVlKHVybCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6IGBzdXJ2ZXlCdWlsZGVyLnByZXNlbnRhdGlvbkltYWdlVXBsb2FkIHNsb3Q9JHtzbG90fWAsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnaW1hZ2VVcGxvYWRFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IE5BTUVTUEFDRSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVwbG9hZGluZ0ltYWdlLnNldCgnJyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJQcmVzZW50YXRpb25JbWFnZShzbG90OiAnaGVhZGVyJyB8ICdzdWNjZXNzJyk6IHZvaWQge1xuICAgIGlmIChzbG90ID09PSAnaGVhZGVyJykge1xuICAgICAgdGhpcy5oZWFkZXJJbWFnZUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnN1Y2Nlc3NJbWFnZUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICB9XG5cbiAgYXN5bmMgc2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5zYXZpbmcoKSkgcmV0dXJuO1xuICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCgnJyk7XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVCZWZvcmVTYXZlKCkpIHJldHVybjtcblxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy50aXRsZUNvbnRyb2wudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnF1ZXN0aW9ucygpO1xuICAgIGNvbnN0IGZpZWxkU2NoZW1hOiBGaWVsZFNjaGVtYURlZltdID0gW107XG4gICAgcm93cy5mb3JFYWNoKChyb3csIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5mb3JtQnVpbGRlci51bmlxdWVGaWVsZE5hbWUocm93Lm5hbWUgfHwgcm93LmxhYmVsLCBmaWVsZFNjaGVtYSk7XG4gICAgICBmaWVsZFNjaGVtYS5wdXNoKFxuICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNyZWF0ZUZpZWxkU2NoZW1hKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBsYWJlbDogcm93LmxhYmVsLnRyaW0oKSxcbiAgICAgICAgICAgIHR5cGU6IHJvdy50eXBlLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IHJvdy5yZXF1aXJlZCxcbiAgICAgICAgICAgIHNlY3Rpb25JZDogcm93LnNlY3Rpb25JZCxcbiAgICAgICAgICAgIHNlY3Rpb25MYWJlbDogdGhpcy5zZWN0aW9uTmFtZUNvbnRyb2wocm93LnNlY3Rpb25JZCkudmFsdWUudHJpbSgpIHx8IHJvdy5zZWN0aW9uTGFiZWwsXG4gICAgICAgICAgICBzZWN0aW9uU3VidGl0bGU6IHRoaXMuc2VjdGlvblN1YnRpdGxlQ29udHJvbChyb3cuc2VjdGlvbklkKS52YWx1ZS50cmltKCkgfHwgcm93LnNlY3Rpb25TdWJ0aXRsZSxcbiAgICAgICAgICAgIHNlY3Rpb25PcmRlcjogdGhpcy5zZWN0aW9uT3JkZXJGb3Iocm93LnNlY3Rpb25JZCwgcm93cyksXG4gICAgICAgICAgICBwbGFjZWhvbGRlclRleHQ6IHJvdy5wbGFjZWhvbGRlclRleHQsXG4gICAgICAgICAgICBoaW50VGV4dDogcm93LmhpbnRUZXh0LFxuICAgICAgICAgICAgbm90ZVRleHQ6IHJvdy5ub3RlVGV4dCxcbiAgICAgICAgICAgIG9wdGlvbnM6IHJvdy5vcHRpb25zLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5kZXhcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1YnRpdGxlID0gdGhpcy5zdWJ0aXRsZUNvbnRyb2wudmFsdWUudHJpbSgpO1xuICAgIGNvbnN0IHByZXNlbnRhdGlvbiA9IHRoaXMucHJlc2VudGF0aW9uUGF5bG9hZCgpO1xuXG4gICAgLy8gTGEgYXBwIGd1YXJkYTogYWPDoSBzb2xvIHNlIHZhbGlkYSB5IHNlIGVudHJlZ2EgbG8gZXNjcml0by5cbiAgICBpZiAodGhpcy5wcm9wcy5wZXJzaXN0ID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5kcmFmdC5lbWl0KHtcbiAgICAgICAgbmFtZTogdGhpcy5zdXJ2ZXlOYW1lQ29udHJvbC52YWx1ZS50cmltKCkgfHwgdGl0bGUsXG4gICAgICAgIGxhYmVsOiB0aXRsZSxcbiAgICAgICAgc3VidGl0bGUsXG4gICAgICAgIHByZXNlbnRhdGlvbixcbiAgICAgICAgcXVlc3Rpb25zOiBmaWVsZFNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2F2aW5nLnNldCh0cnVlKTtcblxuICAgIC8vIGB0eXBlSWRgIGRlcml2YWRvIGRlbCB0w610dWxvOiBzaXJ2ZSBwYXJhIHVuIHRpcG8gZGUgc29saWNpdHVkIGRlXG4gICAgLy8gcGxhdGFmb3JtYSwgZG9uZGUgZWwgdMOtdHVsbyBFUyBsYSBpZGVudGlkYWQuIFBhcmEgdW5hIGVuY3Vlc3RhIGF0YWRhIGFcbiAgICAvLyB1bmEgZW50aWRhZCBOTyBhbGNhbnphIOKAlCBkb3MgZXZlbnRvcyBjb24gZWwgbWlzbW8gdMOtdHVsbyBjb2xpc2lvbmFyw61hbiBlblxuICAgIC8vIGVsIG1pc21vIHRpcG8geSBjb21wYXJ0aXLDrWFuIHJlc3B1ZXN0YXMuIFBvciBlc28gdW5hIHZlcnRpY2FsIHVzYSBzdVxuICAgIC8vIGVuZHBvaW50IChgcGVyc2lzdDogZmFsc2VgKSB5IGFybWEgZWwgaWQgY29uIGxhIGVudGlkYWQgYWRlbnRyby5cbiAgICBjb25zdCB0eXBlSWQgPVxuICAgICAgdGhpcy5wcm9wcy50eXBlSWQgPz8gYCR7dGhpcy5wcm9wcy50eXBlUHJlZml4ID8/IERFRkFVTFRfVFlQRV9QUkVGSVh9OiR7dGhpcy5mb3JtQnVpbGRlci50b1Rva2VuKHRpdGxlKX1gO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIG5hbWU6IHRoaXMuc3VydmV5TmFtZUNvbnRyb2wudmFsdWUudHJpbSgpIHx8IHRpdGxlLFxuICAgICAgbGFiZWw6IHRpdGxlLFxuICAgICAgc3VidGl0bGUsXG4gICAgICBwcmVzZW50YXRpb24sXG4gICAgICBlbnRpdHlSZWY6IHRoaXMucHJvcHMuZW50aXR5UmVmLFxuICAgICAgc2tpcFJldmlldzogdHJ1ZSxcbiAgICAgIHNraXBTdWJtaXR0ZXJJZGVudGl0eTogdHJ1ZSxcbiAgICAgIGZpZWxkU2NoZW1hLFxuICAgICAgYWxsb3dBbm9ueW1vdXM6IHRoaXMucHJvcHMuYWxsb3dBbm9ueW1vdXMgPz8gdHJ1ZSxcbiAgICAgIHZpc2liaWxpdHk6IHRoaXMucHJvcHMudmlzaWJpbGl0eSA/PyAoJ1BVQkxJQycgYXMgY29uc3QpLFxuICAgIH07XG5cbiAgICBjb25zdCBjYWxsJCA9IHRoaXMucHJvcHMudHlwZUlkXG4gICAgICA/IHRoaXMucmVxdWVzdHMudXBkYXRlUmVxdWVzdFR5cGUodGhpcy5wcm9wcy50eXBlSWQsIHBheWxvYWQpXG4gICAgICA6IHRoaXMucmVxdWVzdHMuY3JlYXRlUmVxdWVzdFR5cGUoeyAuLi5wYXlsb2FkLCB0eXBlSWQgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdHlwZUNvbmZpZyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKGNhbGwkKTtcbiAgICAgIHRoaXMuc2F2aW5nLnNldChmYWxzZSk7XG4gICAgICB0aGlzLnNhdmVkLmVtaXQoeyB0eXBlQ29uZmlnIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zYXZpbmcuc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ3N1cnZleUJ1aWxkZXIuc2F2ZScsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnc2F2ZUVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogTkFNRVNQQUNFLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoeWRyYXRlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBsYWJlbDogc3RyaW5nLFxuICAgIHN1YnRpdGxlOiBzdHJpbmcsXG4gICAgcXVlc3Rpb25zOiBGaWVsZFNjaGVtYURlZltdLFxuICAgIHByZXNlbnRhdGlvbj86IFJlcXVlc3RUeXBlUHJlc2VudGF0aW9uXG4gICk6IHZvaWQge1xuICAgIHRoaXMuc3VydmV5TmFtZUNvbnRyb2wuc2V0VmFsdWUobmFtZSA/PyAnJyk7XG4gICAgdGhpcy50aXRsZUNvbnRyb2wuc2V0VmFsdWUobGFiZWwgPz8gJycpO1xuICAgIHRoaXMuc3VidGl0bGVDb250cm9sLnNldFZhbHVlKHN1YnRpdGxlID8/ICcnKTtcbiAgICB0aGlzLmhlYWRlckltYWdlQ29udHJvbC5zZXRWYWx1ZShwcmVzZW50YXRpb24/LmhlYWRlckltYWdlVXJsID8/ICcnKTtcbiAgICB0aGlzLnN1Y2Nlc3NUaXRsZUNvbnRyb2wuc2V0VmFsdWUocHJlc2VudGF0aW9uPy5zdWNjZXNzVGl0bGUgfHwgdGhpcy5kZWZhdWx0U3VjY2Vzc1RpdGxlKCkpO1xuICAgIHRoaXMuc3VjY2Vzc01lc3NhZ2VDb250cm9sLnNldFZhbHVlKHByZXNlbnRhdGlvbj8uc3VjY2Vzc01lc3NhZ2UgfHwgdGhpcy5kZWZhdWx0U3VjY2Vzc01lc3NhZ2UoKSk7XG4gICAgdGhpcy5zdWNjZXNzSW1hZ2VDb250cm9sLnNldFZhbHVlKHByZXNlbnRhdGlvbj8uc3VjY2Vzc0ltYWdlVXJsID8/ICcnKTtcbiAgICBjb25zdCByb3dzID0gWy4uLihxdWVzdGlvbnMgPz8gW10pXS5zb3J0KChhLCBiKSA9PiBhLm9yZGVyIC0gYi5vcmRlcikubWFwKGYgPT4gdGhpcy5yb3dGcm9tRmllbGQoZikpO1xuICAgIGNvbnN0IGlkcyA9IFsuLi5uZXcgU2V0KHJvd3MubWFwKHJvdyA9PiB0aGlzLm5vcm1hbGl6ZVNlY3Rpb25JZChyb3cuc2VjdGlvbklkKSkpXTtcbiAgICB0aGlzLnNlY3Rpb25JZHMuc2V0KGlkcy5sZW5ndGggPyBpZHMgOiBbJ19fZGVmYXVsdF9fJ10pO1xuICAgIGNvbnN0IG5hbWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3Qgc3VidGl0bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgcm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHJvdy5zZWN0aW9uSWQpO1xuICAgICAgaWYgKHJvdy5zZWN0aW9uTGFiZWwgJiYgbmFtZXNbaWRdID09PSB1bmRlZmluZWQpIG5hbWVzW2lkXSA9IHJvdy5zZWN0aW9uTGFiZWw7XG4gICAgICBpZiAocm93LnNlY3Rpb25TdWJ0aXRsZSAmJiBzdWJ0aXRsZXNbaWRdID09PSB1bmRlZmluZWQpIHN1YnRpdGxlc1tpZF0gPSByb3cuc2VjdGlvblN1YnRpdGxlO1xuICAgIH0pO1xuICAgIHRoaXMuc2VjdGlvbk5hbWVzLnNldChuYW1lcyk7XG4gICAgdGhpcy5zZWN0aW9uU3VidGl0bGVzLnNldChzdWJ0aXRsZXMpO1xuICAgIHRoaXMucXVlc3Rpb25zLnNldChyb3dzKTtcbiAgICB0aGlzLmFjdGl2ZVNlY3Rpb25JZC5zZXQodGhpcy5zZWN0aW9uSWRzKClbMF0gPz8gJ19fZGVmYXVsdF9fJyk7XG4gIH1cblxuICBwcml2YXRlIHByZXNlbnRhdGlvblBheWxvYWQoKTogUmVxdWVzdFR5cGVQcmVzZW50YXRpb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByZXNlbnRhdGlvbiA9IHtcbiAgICAgIGhlYWRlckltYWdlVXJsOiB0aGlzLmhlYWRlckltYWdlQ29udHJvbC52YWx1ZS50cmltKCksXG4gICAgICBzdWNjZXNzVGl0bGU6IHRoaXMuc3VjY2Vzc1RpdGxlQ29udHJvbC52YWx1ZS50cmltKCkgfHwgdGhpcy5kZWZhdWx0U3VjY2Vzc1RpdGxlKCksXG4gICAgICBzdWNjZXNzTWVzc2FnZTogdGhpcy5zdWNjZXNzTWVzc2FnZUNvbnRyb2wudmFsdWUudHJpbSgpIHx8IHRoaXMuZGVmYXVsdFN1Y2Nlc3NNZXNzYWdlKCksXG4gICAgICBzdWNjZXNzSW1hZ2VVcmw6IHRoaXMuc3VjY2Vzc0ltYWdlQ29udHJvbC52YWx1ZS50cmltKCksXG4gICAgfTtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhwcmVzZW50YXRpb24pLnNvbWUoQm9vbGVhbikgPyBwcmVzZW50YXRpb24gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRTdWNjZXNzVGl0bGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50KCdkZWZhdWx0U3VjY2Vzc1RpdGxlJyk7XG4gIH1cblxuICBwcml2YXRlIGRlZmF1bHRTdWNjZXNzTWVzc2FnZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnQoJ2RlZmF1bHRTdWNjZXNzTWVzc2FnZScpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVdpemFyZFN0ZXAoc3RlcDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KCcnKTtcbiAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgaWYgKCF0aGlzLmlzV2l6YXJkKCkpIHJldHVybiB0cnVlO1xuXG4gICAgICBpZiAoIXRoaXMuc3VydmV5TmFtZUNvbnRyb2wudmFsdWUudHJpbSgpKSB7XG4gICAgICAgIHRoaXMuc3VydmV5TmFtZUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdub1N1cnZleU5hbWUnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy50aXRsZUNvbnRyb2wudmFsdWUudHJpbSgpKSB7XG4gICAgICAgIHRoaXMudGl0bGVDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnbm9UaXRsZScpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzV2l6YXJkKCkgJiYgc3RlcCA9PT0gMSkge1xuICAgICAgaWYgKCF0aGlzLnF1ZXN0aW9ucygpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdub1F1ZXN0aW9ucycpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlUm93cyh0aGlzLnF1ZXN0aW9ucygpKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgY29uc3QgZW1wdHlTZWN0aW9uID0gdGhpcy5xdWVzdGlvbkdyb3VwcygpLmZpbmQoZ3JvdXAgPT4gZ3JvdXAuaWQgIT09ICdfX2RlZmF1bHRfXycgJiYgIWdyb3VwLnJvd3MubGVuZ3RoKTtcbiAgICAgIGlmIChlbXB0eVNlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTZWN0aW9uSWQuc2V0KGVtcHR5U2VjdGlvbi5pZCk7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vUXVlc3Rpb25zSW5TZWN0aW9uJykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzV2l6YXJkKCkgJiYgc3RlcCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSb3dzKHRoaXMucXVlc3Rpb25zKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVCZWZvcmVTYXZlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZVdpemFyZFN0ZXAoMCkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoIXRoaXMucXVlc3Rpb25zKCkubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdub1F1ZXN0aW9ucycpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlUm93cyh0aGlzLnF1ZXN0aW9ucygpKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLmlzV2l6YXJkKCkpIHtcbiAgICAgIGNvbnN0IGVtcHR5U2VjdGlvbiA9IHRoaXMucXVlc3Rpb25Hcm91cHMoKS5maW5kKGdyb3VwID0+IGdyb3VwLmlkICE9PSAnX19kZWZhdWx0X18nICYmICFncm91cC5yb3dzLmxlbmd0aCk7XG4gICAgICBpZiAoZW1wdHlTZWN0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9yLnNldCh0aGlzLnQoJ25vUXVlc3Rpb25zSW5TZWN0aW9uJykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVJvd3Mocm93czogRWRpdGFibGVGaWVsZERlZltdKTogYm9vbGVhbiB7XG4gICAgaWYgKCFyb3dzLmxlbmd0aCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3Iuc2V0KHRoaXMudCgnbm9RdWVzdGlvbnMnKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChyb3dzLnNvbWUociA9PiAhci5sYWJlbC50cmltKCkpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdlbXB0eVF1ZXN0aW9uTGFiZWwnKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEVsIGVkaXRvciB5YSBsbyB2YWxpZGEgYWwgY2VycmFyIGNhZGEgcHJlZ3VudGEsIHBlcm8gdW5hIHByZWd1bnRhIGFiaWVydGFcbiAgICAvLyAobyBjYXJnYWRhIGRlIHVuYSBlbmN1ZXN0YSB2aWVqYSkgcHVlZGUgbGxlZ2FyIGFjw6Egc2luIG9wY2lvbmVzLlxuICAgIGlmIChyb3dzLnNvbWUociA9PiBGSUVMRF9UWVBFU19XSVRIX09QVElPTlMuaW5jbHVkZXMoci50eXBlKSAmJiAhci5vcHRpb25zPy5sZW5ndGgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvci5zZXQodGhpcy50KCdtaXNzaW5nT3B0aW9ucycpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHJvd0Zyb21GaWVsZChmOiBGaWVsZFNjaGVtYURlZik6IEVkaXRhYmxlRmllbGREZWYge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogYHJvdy0ke3Jvd1VpZCsrfWAsXG4gICAgICBuYW1lOiBmLm5hbWUsXG4gICAgICBsYWJlbDogZi5sYWJlbCA/PyAnJyxcbiAgICAgIHBsYWNlaG9sZGVyVGV4dDogZi5wbGFjZWhvbGRlclRleHQgPz8gJycsXG4gICAgICBoaW50VGV4dDogZi5oaW50VGV4dCA/PyAnJyxcbiAgICAgIG5vdGVUZXh0OiBmLm5vdGVUZXh0ID8/ICcnLFxuICAgICAgdHlwZTogZi50eXBlLFxuICAgICAgcmVxdWlyZWQ6ICEhZi5yZXF1aXJlZCxcbiAgICAgIHNlY3Rpb25JZDogZi5zZWN0aW9uSWQsXG4gICAgICBzZWN0aW9uTGFiZWw6IGYuc2VjdGlvbkxhYmVsID8/ICcnLFxuICAgICAgc2VjdGlvblN1YnRpdGxlOiBmLnNlY3Rpb25TdWJ0aXRsZSA/PyAnJyxcbiAgICAgIHNlY3Rpb25PcmRlcjogZi5zZWN0aW9uT3JkZXIsXG4gICAgICBvcHRpb25zOiBmLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHJldmlld1F1ZXN0aW9uc0NvdW50KCk6IHN0cmluZyB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLnF1ZXN0aW9ucygpLmxlbmd0aDtcbiAgICBjb25zdCBrZXkgPSBjb3VudCA9PT0gMSA/ICdyZXZpZXdRdWVzdGlvbkNvdW50JyA6ICdyZXZpZXdRdWVzdGlvbnNDb3VudCc7XG4gICAgcmV0dXJuIHRoaXMuaW50ZXJwb2xhdGUodGhpcy50KGtleSksIHsgY291bnQgfSk7XG4gIH1cblxuICBzZWN0aW9uUXVlc3Rpb25Db3VudFRleHQoY291bnQ6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5ID0gY291bnQgPT09IDEgPyAncmV2aWV3UXVlc3Rpb25Db3VudCcgOiAncmV2aWV3UXVlc3Rpb25zQ291bnQnO1xuICAgIHJldHVybiB0aGlzLmludGVycG9sYXRlKHRoaXMudChrZXkpLCB7IGNvdW50IH0pO1xuICB9XG5cbiAgcHJldmlld1Byb3BzKCk6IEJ1dHRvbk1ldGFkYXRhIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46ICdzdXJ2ZXktYnVpbGRlci1wcmV2aWV3JyxcbiAgICAgIHRleHQ6IHRoaXMudCgncHJldmlldycpLFxuICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgIHNoYXBlOiAncm91bmQnLFxuICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICBzdGF0ZTogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gICAgICBpY29uOiB7IG5hbWU6ICdleWUtb3V0bGluZScsIHNsb3Q6ICdzdGFydCcgfSxcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgb3BlblByZXZpZXcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbHMub3BlbkFkYXB0aXZlKFxuICAgICAge1xuICAgICAgICBjb21wb25lbnQ6IFN1cnZleVByZXZpZXdNb2RhbENvbXBvbmVudCxcbiAgICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgICBtb2RhbFRpdGxlOiB0aGlzLnQoJ3ByZXZpZXdUaXRsZScpLFxuICAgICAgICAgIGNsb3NlTGFiZWw6IHRoaXMudCgnY2xvc2VQcmV2aWV3JyksXG4gICAgICAgICAgdGl0bGU6IHRoaXMudGl0bGVDb250cm9sLnZhbHVlLnRyaW0oKSB8fCB0aGlzLnQoJ3VudGl0bGVkUXVlc3Rpb24nKSxcbiAgICAgICAgICBzdWJ0aXRsZTogdGhpcy5zdWJ0aXRsZUNvbnRyb2wudmFsdWUudHJpbSgpLFxuICAgICAgICAgIHByZXNlbnRhdGlvbjogdGhpcy5wcmVzZW50YXRpb25QYXlsb2FkKCksXG4gICAgICAgICAgc3VjY2Vzc1RpdGxlOiB0aGlzLnN1Y2Nlc3NUaXRsZUNvbnRyb2wudmFsdWUudHJpbSgpIHx8IHRoaXMuZGVmYXVsdFN1Y2Nlc3NUaXRsZSgpLFxuICAgICAgICAgIHN1Y2Nlc3NNZXNzYWdlOlxuICAgICAgICAgICAgdGhpcy5zdWNjZXNzTWVzc2FnZUNvbnRyb2wudmFsdWUudHJpbSgpIHx8IHRoaXMuZGVmYXVsdFN1Y2Nlc3NNZXNzYWdlKCksXG4gICAgICAgICAgcmVxdWlyZWRTdWZmaXg6IGAgwrcgJHt0aGlzLnQoJ3JlcXVpcmVkVGFnJyl9YCxcbiAgICAgICAgICBxdWVzdGlvbnM6IHRoaXMucXVlc3Rpb25zKCkubWFwKChxdWVzdGlvbiwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAuLi5xdWVzdGlvbixcbiAgICAgICAgICAgIG9yZGVyOiBpbmRleCxcbiAgICAgICAgICAgIG5hbWU6IHF1ZXN0aW9uLm5hbWUgfHwgdGhpcy5mb3JtQnVpbGRlci50b1Rva2VuKHF1ZXN0aW9uLmxhYmVsKSxcbiAgICAgICAgICAgIHR5cGVMYWJlbDogdGhpcy50eXBlTGFiZWwocXVlc3Rpb24udHlwZSksXG4gICAgICAgICAgICBzZWN0aW9uSWQ6IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHF1ZXN0aW9uLnNlY3Rpb25JZCksXG4gICAgICAgICAgICBzZWN0aW9uTGFiZWw6IHRoaXMuc2VjdGlvbk5hbWVDb250cm9sKHF1ZXN0aW9uLnNlY3Rpb25JZCkudmFsdWUudHJpbSgpIHx8IHF1ZXN0aW9uLnNlY3Rpb25MYWJlbCxcbiAgICAgICAgICAgIHNlY3Rpb25TdWJ0aXRsZTogdGhpcy5zZWN0aW9uU3VidGl0bGVDb250cm9sKHF1ZXN0aW9uLnNlY3Rpb25JZCkudmFsdWUudHJpbSgpIHx8IHF1ZXN0aW9uLnNlY3Rpb25TdWJ0aXRsZSxcbiAgICAgICAgICAgIHNlY3Rpb25PcmRlcjogdGhpcy5zZWN0aW9uT3JkZXJGb3IocXVlc3Rpb24uc2VjdGlvbklkLCB0aGlzLnF1ZXN0aW9ucygpKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgJ3dpZGUnLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlY3Rpb25PcmRlckZvcihcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICByb3dzOiBBcnJheTxQaWNrPEVkaXRhYmxlRmllbGREZWYsICdzZWN0aW9uSWQnIHwgJ3NlY3Rpb25MYWJlbCc+PlxuICApOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy5ub3JtYWxpemVTZWN0aW9uSWQoc2VjdGlvbklkKTtcbiAgICBjb25zdCBzZWN0aW9uSWRzID0gWy4uLm5ldyBTZXQocm93cy5tYXAocm93ID0+IHRoaXMubm9ybWFsaXplU2VjdGlvbklkKHJvdy5zZWN0aW9uSWQpKS5maWx0ZXIoQm9vbGVhbikpXTtcbiAgICBjb25zdCBpbmRleCA9IHNlY3Rpb25JZHMuaW5kZXhPZihpZCk7XG4gICAgcmV0dXJuIGluZGV4ID49IDAgPyBpbmRleCA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|