@vgroup/dialbox 0.3.88 → 0.3.89
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.
|
@@ -130,7 +130,8 @@ export class CallProgressComponent {
|
|
|
130
130
|
await this.onholdOrUnholdParticipant({
|
|
131
131
|
participantId: [this.currentCall?.participantId],
|
|
132
132
|
conferenceId: this.conferenceId,
|
|
133
|
-
hold: false
|
|
133
|
+
hold: false,
|
|
134
|
+
isConference: this.currentCall?.isConference
|
|
134
135
|
});
|
|
135
136
|
this.currentCallList[0].isHold = false;
|
|
136
137
|
}
|
|
@@ -140,7 +141,8 @@ export class CallProgressComponent {
|
|
|
140
141
|
await this.onholdOrUnholdParticipant({
|
|
141
142
|
participantId: conferenceCalllist.map((item) => item.participantId),
|
|
142
143
|
conferenceId: this.conferenceId,
|
|
143
|
-
hold: false
|
|
144
|
+
hold: false,
|
|
145
|
+
isConference: this.currentCall?.isConference
|
|
144
146
|
});
|
|
145
147
|
this.currentCallList.forEach((item) => {
|
|
146
148
|
if (item.isConference) {
|
|
@@ -210,21 +212,9 @@ export class CallProgressComponent {
|
|
|
210
212
|
}
|
|
211
213
|
}
|
|
212
214
|
getStatus(res) {
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
217
|
-
else {
|
|
218
|
-
return false;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
else if (res.direction == "outgoing-call") {
|
|
222
|
-
if (res.status == "answered" || res.status == "participant-hold" || res.status == "participant-mute" || res.status == "participant-join" || res.status == "queued" || res.status == "in-progress" || res.status == "ringing" || res.status == "initiated") {
|
|
223
|
-
return true;
|
|
224
|
-
}
|
|
225
|
-
else {
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
215
|
+
const statusList = ["answered", "participant-hold", "participant-mute", "participant-join", "queued", "in-progress", "ringing", "initiated"];
|
|
216
|
+
if (statusList.includes(res.status)) {
|
|
217
|
+
return true;
|
|
228
218
|
}
|
|
229
219
|
else {
|
|
230
220
|
return false;
|
|
@@ -322,7 +312,8 @@ export class CallProgressComponent {
|
|
|
322
312
|
this.onholdOrUnholdParticipant({
|
|
323
313
|
participantId: [c.participantId],
|
|
324
314
|
conferenceId: this.conferenceId,
|
|
325
|
-
hold: !c.hold
|
|
315
|
+
hold: !c.hold,
|
|
316
|
+
isConference: c?.isConference
|
|
326
317
|
});
|
|
327
318
|
c.hold = !c.hold;
|
|
328
319
|
this.cdr.detectChanges();
|
|
@@ -527,7 +518,8 @@ export class CallProgressComponent {
|
|
|
527
518
|
await this.onholdOrUnholdParticipant({
|
|
528
519
|
participantId: [this.currentCall?.participantId],
|
|
529
520
|
conferenceId: this.conferenceId,
|
|
530
|
-
hold: false
|
|
521
|
+
hold: false,
|
|
522
|
+
isConference: this.currentCall?.isConference
|
|
531
523
|
});
|
|
532
524
|
}
|
|
533
525
|
else {
|
|
@@ -611,7 +603,8 @@ export class CallProgressComponent {
|
|
|
611
603
|
await this.onholdOrUnholdParticipant({
|
|
612
604
|
participantId: this.currentCall?.isIncomingCall ? [this.currentCall?.id] : [this.currentCall?.participantId],
|
|
613
605
|
conferenceId: this.conferenceId,
|
|
614
|
-
hold: true
|
|
606
|
+
hold: true,
|
|
607
|
+
isConference: this.currentCall?.isConference
|
|
615
608
|
});
|
|
616
609
|
data.isHold = false;
|
|
617
610
|
}
|
|
@@ -686,7 +679,8 @@ export class CallProgressComponent {
|
|
|
686
679
|
await this.onholdOrUnholdParticipant({
|
|
687
680
|
participantId: [c?.participantId],
|
|
688
681
|
conferenceId: this.conferenceId,
|
|
689
|
-
hold: c?.isHold
|
|
682
|
+
hold: c?.isHold,
|
|
683
|
+
isConference: c?.isConference
|
|
690
684
|
});
|
|
691
685
|
}
|
|
692
686
|
});
|
|
@@ -826,7 +820,8 @@ export class CallProgressComponent {
|
|
|
826
820
|
await this.onholdOrUnholdParticipant({
|
|
827
821
|
participantId: [c?.participantId],
|
|
828
822
|
conferenceId: this.conferenceId,
|
|
829
|
-
hold: c?.isHold
|
|
823
|
+
hold: c?.isHold,
|
|
824
|
+
isConference: c?.isConference
|
|
830
825
|
});
|
|
831
826
|
}
|
|
832
827
|
else if (callInfo?.isHold && c?.participantId === callInfo?.participantId) {
|
|
@@ -834,7 +829,8 @@ export class CallProgressComponent {
|
|
|
834
829
|
await this.onholdOrUnholdParticipant({
|
|
835
830
|
participantId: [c?.participantId],
|
|
836
831
|
conferenceId: this.conferenceId,
|
|
837
|
-
hold: c?.isHold
|
|
832
|
+
hold: c?.isHold,
|
|
833
|
+
isConference: c?.isConference
|
|
838
834
|
});
|
|
839
835
|
this.currentCall = c;
|
|
840
836
|
}
|
|
@@ -886,7 +882,8 @@ export class CallProgressComponent {
|
|
|
886
882
|
await this.onholdOrUnholdParticipant({
|
|
887
883
|
participantId: [c?.participantId],
|
|
888
884
|
conferenceId: this.conferenceId,
|
|
889
|
-
hold: false
|
|
885
|
+
hold: false,
|
|
886
|
+
isConference: true
|
|
890
887
|
});
|
|
891
888
|
}
|
|
892
889
|
c.isConference = true;
|
|
@@ -1221,4 +1218,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
1221
1218
|
}], incomingCallInitiated: [{
|
|
1222
1219
|
type: Output
|
|
1223
1220
|
}] } });
|
|
1224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFxQjlDLE1BQU0sT0FBTyxxQkFBcUI7SUFxRGhDLHNCQUFzQjtJQUN0QixzRkFBc0Y7SUFDdEYsOEZBQThGO0lBQzlGLGtHQUFrRztJQUNsRyw2RUFBNkU7SUFDN0UsOEZBQThGO0lBQzlGLDZFQUE2RTtJQUM3RSxLQUFLO0lBQ0wsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFBVSxhQUE0QjtRQUF4RyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXpEbkgseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBRTlCLGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUQs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QW9CO3NCQUE3QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBb0JHLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FsbCwgRGV2aWNlIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvZXh0ZW5zaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHdpbGlvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdHdpbGlvLnNlcnZpY2UnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IGtleXBhZCB9IGZyb20gJy4uLy4uLy4uL2tleXBhZCc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cblxuXG5pbnRlcmZhY2UgQ2FsbERldGFpbHMge1xuICBjYWxsU2lkOiBzdHJpbmc7XG4gIGNhbGxTdGF0dXM6IHN0cmluZztcbn1cbmludGVyZmFjZSBDYWxsU3RhdHVzUmVzcG9uc2Uge1xuICBjYWxsRGV0YWlsczogQ2FsbERldGFpbHM7XG4gIHJlc3BvbnNlOiBzdHJpbmc7XG4gIGVycm9yVHlwZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHN0YXR1czogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY2FsbC1wcm9ncmVzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FsbFByb2dyZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBjYWxsRGF0YTogYW55O1xuICBASW5wdXQoKSBzZWxlY3RlZENhbGxlcklkOiBhbnk7XG4gIEBJbnB1dCgpIG5ld0luY29taW5nQ2FsbERhdGE/OiBDYWxsO1xuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxzTGlzdDogYW55ID0gW107XG4gIEBJbnB1dCgpIGRldmljZUlkOiBhbnk7XG4gIEBPdXRwdXQoKSBlbmRDYWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbHNOZXdJbmZvOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBtaW5pbWlzZUV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIGRldmljZT86IERldmljZTtcbiAgY2FsbD86IENhbGwgfCBhbnk7XG4gIHNob3dSaW5nQW5pbWF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHRpbWVyOiBzdHJpbmcgPSAnMDA6MDAnO1xuICBpbnRlcnZhbElkOiBhbnk7XG4gIHNob3dLZXlwYWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAga2V5cGFkVmFsID0ga2V5cGFkO1xuICBjYWxsSW5wdXQ6IHN0cmluZyA9ICcnO1xuICBpc011dGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlzYmFsZUVuZENhbGxCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDb2xsb3BzID0gZmFsc2U7XG4gIGN1cnJlbnRDYWxsOiBhbnk7XG4gIC8vIENvbmZlcmVuY2Ugc3RhdGUgZmxhZ1xuICBpc0NvbmZlcmVuY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNPdXRnb2luZ0NhbGw6IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBJbmNvbWluZyBjYWxsIHZhcmlhYmxlc1xuICBpbmNvbWluZ0NhbGxEaXY6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy9AT3V0cHV0KCkgc2hvd0NhbGxQcm9ncmVzc0V2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxJbml0aWF0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvLyBSZWNvcmRpbmcgdmFyaWFibGVzXG4gIGNhbGxTaWQ6IGFueTtcbiAgaXNSZWNvcmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQYXVzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGltZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHRpbWVFbGFwc2VkID0gMDsgLy8gaW4gc2Vjb25kc1xuICByZWNvcmRDYWxsOiBib29sZWFuID0gZmFsc2U7XG4gIGluY29taW5nQ2FsbFNpZDogYW55O1xuICBjYWxsU3RhdHVzOiBzdHJpbmcgPSAncmluZ2luZyc7XG4gIGluY29taW5nUmVjb3JkQ2FsbD86IGFueTtcbiAgc2VsZWN0ZWRJbmNvbWluZ0NhbGw6IGFueTtcbiAgc2hvd0NvbnRhY3RzUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBZGRSZW1vdmVQYXJ0aWNpcGFudDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbmN1cnJlbnRJbmNvbWluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBoZWxkQ2FsbD86IENhbGwgfCBhbnk7XG4gIGlzQ2FsbE9uSG9sZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb250YWN0czogYW55W10gPSBbXTtcbiAgY3VycmVudENhbGxMaXN0OiBhbnlbXSA9IFtdO1xuICBjb25mZXJlbmNlSWQ6IGFueTtcbiAgYWxsUGFydGljaXBlbnRMaXN0OiBhbnk7XG4gIGlzQ2xpY2tFeHBhbmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDYWxsSW5Qcm9ncmVzcyE6IGJvb2xlYW47XG4gIC8vIGNvbnRhY3RzOiBhbnlbXSA9IFtcbiAgLy8gICB7IG5hbWU6ICdQYW1lbGEgQ294JywgdGl0bGU6ICdQcm9kdWN0IERlc2lnbmVyJywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfSxcbiAgLy8gICB7IG5hbWU6ICdSb2dlciBTLiBXb29kJywgdGl0bGU6ICdKYXZhU2NyaXB0IFByb2dyYW1tZXInLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9LFxuICAvLyAgIHsgbmFtZTogJ1ZpY3RvciBCbGFja3N0b24nLCB0aXRsZTogJ0RhdGFiYXNlIEFkbWluaXN0cmF0b3InLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9LFxuICAvLyAgIHsgbmFtZTogJ1RhbW15IFJpb3MnLCB0aXRsZTogJ1N1cHBvcnQnLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9LFxuICAvLyAgIHsgbmFtZTogJ0NhcmxvcyBIZW5kZXJzb24nLCB0aXRsZTogJ1NvZnR3YXJlIEFyY2hpdGVjdCcsIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIH0sXG4gIC8vICAgeyBuYW1lOiAnRWxpemFiZXRoIEJhaWxleScsIHRpdGxlOiAnSFInLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9XG4gIC8vIF07XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHR3aWxpb1NlcnZpY2U6IFR3aWxpb1NlcnZpY2UpIHtcbiAgICBjb25zb2xlLmxvZygnQ2FsbCBQcm9ncmVzcyBDb21wb25lbnQnKTtcbiAgICB0aGlzLmNhbGwgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ0NhbGwgUHJvZ3Jlc3MgQ29tcG9uZW50IG5nT25Jbml0Jyk7XG4gICAgLy8gU3Vic2NyaWJlIHRvIGluY29taW5nIGNhbGxzIGZyb20gVHdpbGlvU2VydmljZVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY3VycmVudENhbGwuc3Vic2NyaWJlKChpbmNvbWluZzogYW55KSA9PiB7XG4gICAgICAgIGlmICghaW5jb21pbmcpIHsgcmV0dXJuOyB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsIGVtaXR0ZWQ6JywgaW5jb21pbmcpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBjYWxsIHN0YXR1czonLCB0aGlzLmNhbGw/LnN0YXR1cygpKTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gb25nb2luZyBjYWxsLCBzaG93IGNvbmN1cnJlbnQgaW5jb21pbmcgYmFubmVyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ29uY3VycmVudCBpbmNvbWluZyBkZXRlY3RlZCAtIHNob3dpbmcgYmFubmVyJyk7XG4gICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSB0cnVlO1xuICAgICAgICAgIC8vIEFkZCB0byBsaXN0IGlmIG5vdCBwcmVzZW50XG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgfHwgW10pLnNvbWUoKGM6IGFueSkgPT4gYz8ucGFyYW1ldGVycz8uQ2FsbFNpZCA9PT0gaW5jb21pbmc/LnBhcmFtZXRlcnM/LkNhbGxTaWQpO1xuICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0ID0gWy4uLih0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0IHx8IFtdKSwgaW5jb21pbmddO1xuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mby5lbWl0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIC8vIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1YnNjcmliaW5nIHRvIGluY29taW5nIGNhbGxzOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5pc0luY29taW5nQ2FsbCkge1xuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FsbFsnY2FsbEluZm8nXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYWxsRGF0YSkpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5kaXNwbGF5TnVtIHx8IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5mcm9tKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0LXN0YXJ0Q2FsbDEyMycsIGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlKVxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0geyAuLi5jaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSwgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfTtcbiAgICAgICAgdGhpcy5zdGFydENhbGwoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snbmV3SW5jb21pbmdDYWxsc0xpc3QnXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBhY3RpdmUgb25nb2luZyBjYWxsXG4gICAgICAgICAgdGhpcy5jb25mZXJlbmNlSWQgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0WzBdLmNvbmZlcmVuY2VJZDtcbiAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goYXN5bmMgKHJlczphbnkpPT57XG4gICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOmFueSk9Pml0ZW0uaWQgPT0gcmVzLmlkKTtcbiAgICAgICAgICAgICAgaWYoaW5kZXggPT0gLTEgJiYgIXJlcy5pc0xlZnQpe1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgLi4ucmVzLCBcbiAgICAgICAgICAgICAgICAgIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLCBcbiAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxuICAgICAgICAgICAgICAgICAgaXNIb2xkOiByZXMuaXNIb2xkLFxuICAgICAgICAgICAgICAgICAgaXNNdXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogcmVzLmlzQ29uZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgIGlzQWNjZXB0Q2FsbDogdGhpcy5nZXRTdGF0dXMocmVzKSxcbiAgICAgICAgICAgICAgICAgIGRpYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBwaG9uZTogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXG4gICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOnJlcy5pZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcy5uYW1lIHx8IHJlcz8uZnJvbU5hbWUgfHwgcmVzPy50b05hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZihpbmRleCAhPSAtMSAmJiByZXMuaXNMZWZ0KXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0/LmlkID09IHRoaXMuY3VycmVudENhbGw/LmlkKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCA/IHRoaXMuY3VycmVudENhbGxMaXN0WzBdIDoge307XG4gICAgICAgICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsPy5pc0hvbGQgJiYgIXRoaXMuY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZSl7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgaG9sZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0WzBdLmlzSG9sZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHRoaXMuY3VycmVudENhbGw/LmlzSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZlcmVuY2VDYWxsbGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigoaXRlbTphbnkpPT5pdGVtLmlzQ29uZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmZlcmVuY2VDYWxsbGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogY29uZmVyZW5jZUNhbGxsaXN0Lm1hcCgoaXRlbTphbnkpPT5pdGVtLnBhcnRpY2lwYW50SWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaCgoaXRlbTphbnkpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpdGVtLmlzQ29uZmVyZW5jZSl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaXNIb2xkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmlzSG9sZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIGlmKGluZGV4ICE9IC0xKXtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgICAuLi5yZXMsIFxuICAgICAgICAgICAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsIFxuICAgICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIsXG4gICAgICAgICAgICAgICAgICBpc0hvbGQ6IHJlcy5pc0hvbGQsXG4gICAgICAgICAgICAgICAgICBpc011dGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlOiByZXMuaXNDb25mZXJlbmNlLFxuICAgICAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiB0aGlzLmdldFN0YXR1cyhyZXMpLFxuICAgICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHBob25lOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcbiAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6cmVzLmlkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogcmVzLm5hbWUgfHwgcmVzPy5mcm9tTmFtZSB8fCByZXM/LnRvTmFtZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2V7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIC4uLnJlcywgXG4gICAgICAgICAgICAgICAgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsIFxuICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxuICAgICAgICAgICAgICAgIGlzSG9sZDogcmVzLmlzSG9sZCxcbiAgICAgICAgICAgICAgICBpc011dGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogcmVzLmlzQ29uZmVyZW5jZSxcbiAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHRoaXMuZ2V0U3RhdHVzKHJlcyksXG4gICAgICAgICAgICAgICAgZGlhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwaG9uZTogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXG4gICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDpyZXMuaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogcmVzLm5hbWUgfHwgcmVzPy5mcm9tTmFtZSB8fCByZXM/LnRvTmFtZSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgoaXRlbTphbnkpPT4gaXRlbS5pc0FjY2VwdENhbGwgJiYgIWl0ZW0uaXNIb2xkKTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2N1cnJlbnRDYWxsTGlzdCcsIHRoaXMuY3VycmVudENhbGxMaXN0KTtcbiAgICAgICAgfSBlbHNlIGlmKCF0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCl7XG4gICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gW107XG4gICAgICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge307XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFN0YXR1cyhyZXM6IGFueSkge1xuICAgIGlmKHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIpe1xuICAgICAgaWYocmVzLnN0YXR1cyA9PSBcImFuc3dlcmVkXCIgfHwgcmVzLnN0YXR1cyA9PSBcInBhcnRpY2lwYW50LWhvbGRcIiB8fCByZXMuc3RhdHVzID09IFwicGFydGljaXBhbnQtbXV0ZVwiIHx8IHJlcy5zdGF0dXMgPT0gXCJwYXJ0aWNpcGFudC1qb2luXCIgfHwgcmVzLnN0YXR1cyA9PSBcInF1ZXVlZFwiIHx8IHJlcy5zdGF0dXMgPT0gXCJpbi1wcm9ncmVzc1wiKXtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmKHJlcy5kaXJlY3Rpb24gPT0gXCJvdXRnb2luZy1jYWxsXCIpe1xuICAgICAgaWYocmVzLnN0YXR1cyA9PSBcImFuc3dlcmVkXCIgfHwgcmVzLnN0YXR1cyA9PSBcInBhcnRpY2lwYW50LWhvbGRcIiB8fCByZXMuc3RhdHVzID09IFwicGFydGljaXBhbnQtbXV0ZVwiIHx8IHJlcy5zdGF0dXMgPT0gXCJwYXJ0aWNpcGFudC1qb2luXCIgfHwgcmVzLnN0YXR1cyA9PSBcInF1ZXVlZFwiIHx8IHJlcy5zdGF0dXMgPT0gXCJpbi1wcm9ncmVzc1wiIHx8IHJlcy5zdGF0dXMgPT0gXCJyaW5naW5nXCIgfHwgcmVzLnN0YXR1cyA9PSBcImluaXRpYXRlZFwiKXtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xuICAgIC8vIH0sIDMwMDApO1xuXG4gIH1cblxuICBHZXRDb250YWN0c0xpc3QoKSB7XG4gICAgY29uc3QgdG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfHwgJyc7XG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnJlYWRDb250YWN0cyh0b2tlbikuc3Vic2NyaWJlKFxuICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBUEkgUmVzcG9uc2U6JywgcmVzKTtcblxuICAgICAgICAvLyBOb3RlOiBDYXBpdGFsIEIgaW4gcGhvbmVCb29rXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnBob25lQm9vaykge1xuICAgICAgICAgIHRoaXMuY29udGFjdHMgPSByZXMucGhvbmVCb29rO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdDb250YWN0cyBhcnJheTonLCB0aGlzLmNvbnRhY3RzKTtcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlcykpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29udGFjdHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnQ29udGFjdHMgYXJyYXk6JywgdGhpcy5jb250YWN0cyk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY29udGFjdHM6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmNvbnRhY3RzID0gW107XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBhZGRSZXM6IGFueTtcbiAgYXN5bmMgc3RhcnRDYWxsKGNhbGxEYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhjYWxsRGF0YSwgJ2NhbGxEYXRhJyk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgY2hhbm5lbElkOiBlbnZpcm9ubWVudC5jaGFubmVsSWQsXG4gICAgICAgIHVzZXJJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxuICAgICAgICB0bzogY2FsbERhdGEucGhvbmUsXG4gICAgICAgIGZyb21OdW1iZXI6IGNhbGxEYXRhLmZyb20sXG4gICAgICAgIHNjb3BlOiAnbG9jYWwnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmluaXRpYXRlQ2FsbChwYXlsb2FkKTtcbiAgICAgIHRoaXMuY29uZmVyZW5jZUlkID0gcmVzcG9uc2U/LmNhbGxhdXRoPy5pZDtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIGNvbnN0IHsgaWQ6IGNhbGxBdXRoSWQsIHJlY29yZENhbGwgfSA9IGF3YWl0IHRoaXMuZ2V0Q2FsbEF1dGhJZChyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGNhbGxBdXRoSWQpXG4gICAgICAgIHRoaXMucmVjb3JkQ2FsbCA9IHJlY29yZENhbGw7IC8vIFN0b3JlIHRoZSByZWNvcmRDYWxsIHZhbHVlXG4gICAgICAgIGNvbnN0IHRva2VuRGF0YTogYW55ID0gYXdhaXQgdGhpcy5nZXRPdXRnb2luZ0NhbGxUb2tlbihjYWxsQXV0aElkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0VG9EZXZpY2UodG9rZW5EYXRhLnRva2VuLCBjYWxsRGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMucG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZCk7XG5cbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYWRkUmVzID0gYXdhaXQgdGhpcy5hZGRQYXJ0aWNpcGFudFRvQ2FsbCh7XG4gICAgICAgICAgICAgIGZyb206IGNhbGxEYXRhPy5mcm9tLFxuICAgICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogY2FsbERhdGE/LnBob25lLFxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEgPSB7IC4uLmNhbGxEYXRhLCBwYXJ0aWNpcGFudElkOiB0aGlzLmFkZFJlcz8ucGFydGljaXBhbnRJZCxpc0hvbGQ6IGZhbHNlLCBpc0xlZnQ6IGZhbHNlLCBpc0luY29taW5nQ2FsbDogZmFsc2UsIGlzQ29uZmVyZW5jZTogZmFsc2UsIGlzQWNjZXB0Q2FsbDogdHJ1ZX07XG4gICAgICAgICAgICAvLyB0aGlzLmNhbGxbJ2NhbGxJbmZvJ10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FsbERhdGEpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MTExMTExJyk7XG4gICAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRDYWxsID0gey4uLnRoaXMuY2FsbERhdGEsIGltZzogY2FsbERhdGEuaW1nIHx8J2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnfTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgaXNBY2NlcHRDYWxsIGJhc2VkIG9uIGN1cnJlbnQgY2FsbCBzdGF0ZSB0byBlbnN1cmUgVUkgcmVuZGVycyBpZiBhbHJlYWR5IGNvbm5lY3RlZFxuICAgICAgICAgICAgLy8gdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7XG4gICAgICAgICAgICAvLyAgIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgICAgICAgICAvLyAgIGltZzogY2FsbERhdGEuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgICAgIC8vICAgaXNBY2NlcHRDYWxsOiB0cnVlXG4gICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbml0aWFsIHBhcnRpY2lwYW50SWQ6JywgdGhpcy5hZGRSZXM/LnBhcnRpY2lwYW50SWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBpbml0aWFsIHBhcnRpY2lwYW50OicsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMClcbiAgICAgICAgLy8gUG9sbCB0aGUgc3RhdHVzIGZvciAzMC00NSBzZWNvbmRzXG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDEpIHtcbiAgICAgICAgc3dhbChcIkVycm9yXCIsIHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxici8+XCIpLCBcImVycm9yXCIpO1xuICAgICAgICBjb25zb2xlLmxvZygndGVzdDInKVxuICAgICAgICB0aGlzLmVuZENhbGwoKTtcbiAgICAgIH1cblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MycpXG4gICAgICB0aGlzLmVuZENhbGwoKTtcbiAgICB9XG4gIH1cblxuICBvbkhvbGRDYWxsKGM6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGMsICdkc2RzZHNkc2RzZHNhZHNhJyk7XG4gICAgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgIHBhcnRpY2lwYW50SWQ6IFtjLnBhcnRpY2lwYW50SWRdLFxuICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgIGhvbGQ6ICFjLmhvbGRcbiAgICB9KVxuICAgIGMuaG9sZCA9ICFjLmhvbGQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgb25FbmRDYWxsKGM6IGFueSwgaXNBbGxDYWxsRW5kPzogYm9vbGVhbikge1xuICAgIGNvbnNvbGUubG9nKGMsICdkc2RzZHNkc2RzZHNhZHNhJyk7XG4gICAgbGV0IHBhcnRpY2lwYW50SWQgPSBpc0FsbENhbGxFbmQgPyAnYWxsJyA6IGMucGFydGljaXBhbnRJZCB8fCBjLnBhcnRpY2lwYW50SWQ7XG4gICAgbGV0IHJlczogYW55ID0gYXdhaXQgdGhpcy5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgdGhpcy5jb25mZXJlbmNlSWQpO1xuICAgIGlmKHJlcz8uc3RhdHVzID09IDIwMSAmJiByZXM/Lm1lc3NhZ2UgPT0gJ3BhcnRpY2lwYW50IGFscmVhZHkgbGVmdCcpe1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJ0aWNpcGFudElkICE9PSBjLnBhcnRpY2lwYW50SWQpO1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXSA6IG51bGw7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMudHdpbGlvU2VydmljZS5jb25mZXJlbmNlQ2FsbEluZm8uY29uZmVyZW5jZVNpZCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGluaXRpYXRlQ2FsbChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmluaXRpYXRlQ2FsbChwYXlsb2FkKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGFzeW5jIG9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5ob2xkUGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZFBhcnRpY2lwYW50VG9DYWxsKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuYWRkUGFydGljaXBhbnQocGF5bG9hZCkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldENhbGxTdGF0dXNPZlBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkOiBhbnkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTdGF0dXNPZlBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVtb3ZlUGFydGljaXBhbnRzKHBhcnRpY2lwYW50SWQ6IGFueSwgY29uZmVyZW5jZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkLCBjb25mZXJlbmNlSWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRDYWxsQXV0aElkKHJlc3BvbnNlOiBhbnkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJlc3BvbnNlLmNhbGxhdXRoLmlkLFxuICAgICAgcmVjb3JkQ2FsbDogcmVzcG9uc2UuY2FsbGF1dGgucmVjb3JkQ2FsbFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxBdXRoSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q29uZmVyZW5jZUNhbGxUb2tlbih7IGF1dGhJZDogY2FsbEF1dGhJZCB9KS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29ubmVjdFRvRGV2aWNlKHRva2VuOiBhbnksIGNhbGxEYXRhOiBhbnkpIHtcbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XG4gICAgICBjb2RlY1ByZWZlcmVuY2VzOiBbJ29wdXMnLCAncGNtdSddLFxuICAgICAgY2xvc2VQcm90ZWN0aW9uOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UodG9rZW4udmFsdWUsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMuZGV2aWNlLmNvbm5lY3Qoe1xuICAgICAgcGFyYW1zOiB7XG4gICAgICAgIEZyb206IGNhbGxEYXRhLmZyb20sXG4gICAgICAgIFRvOiBjYWxsRGF0YS5waG9uZSxcbiAgICAgICAgRW52OiBlbnZpcm9ubWVudC5hYmIsXG4gICAgICAgIFRva2VuOiB0b2tlbi5pZCxcbiAgICAgICAgRXh0OiBjYWxsRGF0YS5leHROdW1cbiAgICAgIH0sXG4gICAgICBydGNDb25zdHJhaW50czogeyBhdWRpbzogeyBkZXZpY2VJZDogJ2RlZmF1bHQnIH0gfSxcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygndGVzdDk4OTk4MTExMTExJywgdGhpcy5jYWxsKTtcbiAgICAvLyB0aGlzLmNhbGxbJ2NhbGxJbmZvJ10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNhbGxEYXRhKSk7XG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoKSB7XG5cbiAgICB0aGlzLnN0YXJ0VGltZXIoKTtcbiAgICB0aGlzLmRldmljZT8ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhbGw/Lm9uKCdlcnJvcicsIChlcnJvcjogYW55KSA9PiB7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsPy5vbignZGlzY29ubmVjdCcsIChpdGVtOiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCd0ZXN0LWRpc2Nvbm5lY3QnKVxuICAgICAgLy8gdGhpcy5lbmRDYWxsKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhbGw/Lm9uKCdyaW5naW5nJywgKCkgPT4ge1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsPy5vbigncmVqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ3Rlc3Q1JylcbiAgICAgIHRoaXMuZW5kQ2FsbCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsPy5vbignYWNjZXB0JywgKCkgPT4ge1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xuICAgICAgLy8gRW5zdXJlIHRoZSBhY3RpdmUgb3V0Z29pbmcgY2FsbCBpcyBtYXJrZWQgYXMgYWNjZXB0ZWQgc28gdGhlIFVJIHN3aXRjaGVzIHRvIHRoZSBjb25uZWN0ZWQgdmlld1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGlkID0gdGhpcy5jYWxsRGF0YT8ucGFydGljaXBhbnRJZDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5jdXJyZW50Q2FsbExpc3QpICYmIHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoYzogYW55KSA9PiAocGlkICYmIGM/LnBhcnRpY2lwYW50SWQgPT09IHBpZCkgfHwgKCFwaWQgJiYgYz8ucGhvbmUgPT09IHRoaXMuY2FsbERhdGE/LnBob25lKSk7XG4gICAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W2lkeF0uaXNBY2NlcHRDYWxsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpZHhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciB1cGRhdGluZyBhY2NlcHQgc3RhdGU6JywgZSk7XG4gICAgICB9XG4gICAgICAvLyBTdGFydCByZWNvcmRpbmcgaWYgcmVjb3JkQ2FsbCBpcyB0cnVlIGFuZCBjYWxsIGlzIGFjY2VwdGVkIGZvciAzMCBzZWNvbmRzXG4gICAgICAvLyBpZiAodGhpcy5yZWNvcmRDYWxsKSB7XG4gICAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSByZXR1cm47IC8vIElmIGFscmVhZHkgcmVjb3JkaW5nLCBza2lwXG4gICAgICAvLyAgICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xuICAgICAgLy8gICB9LCAzMDAwMCk7XG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcbiAgICAgIC8vIH1cbiAgICB9KTtcbiAgICB0aGlzLmNhbGw/Lm9uKCdtZXNzYWdlUmVjZWl2ZWQnLCAobWVzc2FnZTogYW55KSA9PiB7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXJ0VGltZXIoKSB7XG4gICAgbGV0IHNlY29uZHMgPSAwO1xuICAgIHRoaXMuaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHNlY29uZHMrKztcbiAgICAgIHRoaXMudGltZXIgPSB0aGlzLmZvcm1hdFRpbWUoc2Vjb25kcyk7XG4gICAgfSwgMTAwMCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BUaW1lcigpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgdGhpcy50aW1lciA9ICcwMDowMCc7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFRpbWUodG90YWxTZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDYwKTtcbiAgICBjb25zdCBzZWNvbmRzID0gdG90YWxTZWNvbmRzICUgNjA7XG4gICAgcmV0dXJuIGAke3RoaXMucGFkKG1pbnV0ZXMpfToke3RoaXMucGFkKHNlY29uZHMpfWA7XG4gIH1cblxuICBwcml2YXRlIHBhZCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUgPCAxMCA/IGAwJHt2YWx1ZX1gIDogYCR7dmFsdWV9YDtcbiAgfVxuICBwcml2YXRlIGhhbmRsZUVycm9yKGVycm9yOiBhbnkpIHtcbiAgICBzd2FsKFwiRXJyb3JcIiwgZXJyb3IsIFwiZXJyb3JcIik7XG4gIH1cblxuICAvLyBlbmRDYWxsKCkge1xuICAvLyAgIGNvbnNvbGUubG9nKCdlbmRDYWxsKCkgY2FsbGVkJyk7XG4gIC8vICAgY29uc29sZS5sb2coJ0N1cnJlbnQgY2FsbDonLCB0aGlzLmNhbGw/LnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG4gIC8vICAgY29uc29sZS5sb2coJ0hlbGQgY2FsbCBleGlzdHM6JywgISF0aGlzLmhlbGRDYWxsKTtcblxuICAvLyAgIC8vIERpc2Nvbm5lY3QgdGhlIGN1cnJlbnQgYWN0aXZlIGNhbGxcbiAgLy8gICBpZiAodGhpcy5jYWxsKSB7XG4gIC8vICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xuICAvLyAgICAgdGhpcy5jYWxsID0gdW5kZWZpbmVkO1xuICAvLyAgIH1cblxuICAvLyAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgLy8gICB0aGlzLnN0b3BUaW1lcigpO1xuXG4gIC8vICAgLy8gSWYgdGhlcmUncyBhIGhlbGQgY2FsbCwgbWFrZSBpdCBhY3RpdmVcbiAgLy8gICBpZiAodGhpcy5oZWxkQ2FsbCkge1xuICAvLyAgICAgY29uc29sZS5sb2coJ1Jlc3VtaW5nIGhlbGQgY2FsbDonLCB0aGlzLmhlbGRDYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG5cbiAgLy8gICAgIC8vIE1ha2UgaGVsZCBjYWxsIHRoZSBhY3RpdmUgY2FsbFxuICAvLyAgICAgdGhpcy5jYWxsID0gdGhpcy5oZWxkQ2FsbDtcbiAgLy8gICAgIHRoaXMuaGVsZENhbGwgPSB1bmRlZmluZWQ7XG4gIC8vICAgICAvLyB0aGlzLmlzQ2FsbE9uSG9sZCA9IGZhbHNlO1xuICAvLyAgICAgdGhpcy5pc0NhbGxPbkhvbGQgPSAhIXRoaXMuaGVsZENhbGw7XG5cblxuICAvLyAgICAgLy8gVW5tdXRlIHRoZSByZXN1bWVkIGNhbGxcbiAgLy8gICAgIHRoaXMuY2FsbC5tdXRlKGZhbHNlKTtcblxuICAvLyAgICAgLy8gVXBkYXRlIFVJIHdpdGggdGhlIHJlc3VtZWQgY2FsbCBpbmZvXG4gIC8vICAgICBjb25zdCBmcm9tTnVtYmVyID0gdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgLy8gICAgIGNvbnN0IGNhbGxlck5hbWUgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nO1xuICAvLyAgICAgY29uc3QgY2FsbGVySW1nID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG5cbiAgLy8gICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gIC8vICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gIC8vICAgICAgIHBob25lOiBmcm9tTnVtYmVyLFxuICAvLyAgICAgICBkaXNwbGF5TnVtOiBmcm9tTnVtYmVyLFxuICAvLyAgICAgICBuYW1lOiBjYWxsZXJOYW1lLFxuICAvLyAgICAgICBpbWc6IGNhbGxlckltZ1xuICAvLyAgICAgfTtcblxuICAvLyAgICAgLy8gUmVzdGFydCB0aW1lciBmb3IgdGhlIHJlc3VtZWQgY2FsbFxuICAvLyAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gIC8vICAgICB0aGlzLmRpc2JhbGVFbmRDYWxsQnRuID0gZmFsc2U7XG5cbiAgLy8gICAgIGNvbnNvbGUubG9nKCdIZWxkIGNhbGwgaXMgbm93IGFjdGl2ZTonLCB0aGlzLmNhbGxEYXRhKTtcbiAgLy8gICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgLy8gTm8gaGVsZCBjYWxsLCBjb21wbGV0ZWx5IGVuZFxuICAvLyAgICAgY29uc29sZS5sb2coJ05vIGhlbGQgY2FsbCwgZW5kaW5nIGNvbXBsZXRlbHknKTtcbiAgLy8gICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcbiAgLy8gICAgIHRoaXMubWF4aW1pc2VEaWFscGFkKCk7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgYXN5bmMgZW5kQ2FsbChpc0FsbENhbGxFbmQ/OiBib29sZWFuKSB7XG4gICAgY29uc29sZS5sb2coJ2VuZENhbGwoKSBjYWxsZWQnKTtcbiAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBjYWxsOicsIHRoaXMuY2FsbD8ucGFyYW1ldGVyc1snRnJvbSddKTtcbiAgICBjb25zb2xlLmxvZygnSGVsZCBjYWxsIGV4aXN0czonLCAhIXRoaXMuaGVsZENhbGwpO1xuICAgIC8vIExlYXZpbmcgY29uZmVyZW5jZSBzdGF0ZSB3aGVuIGVuZGluZyBjdXJyZW50IGNhbGwgYWN0aW9uXG4gICAgdGhpcy5pc0NvbmZlcmVuY2UgPSBmYWxzZTtcblxuICAgIC8vIGlmICh0aGlzLmNhbGwpIHtcbiAgICAvLyAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyAgICAgdGhpcy5jYWxsLnJlamVjdCgpO1xuICAgIC8vICAgICB0aGlzLmNhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gfVxuXG4gICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgaWYoaXNBbGxDYWxsRW5kKXtcbiAgICAgIHRoaXMub25FbmRDYWxsKHt9LCBpc0FsbENhbGxFbmQpO1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSBbXTtcbiAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbkVuZENhbGwodGhpcy5jdXJyZW50Q2FsbCwgaXNBbGxDYWxsRW5kKTtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChjOiBhbnkpID0+IGM/LnBhcnRpY2lwYW50SWQgIT09IHRoaXMuY3VycmVudENhbGwucGFydGljaXBhbnRJZCk7XG4gICAgICBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0WzBdLmlzSG9sZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbMF07XG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXSxcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgICAgICAgaG9sZDogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gW107XG4gICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gaWYgKHRoaXMuaGVsZENhbGwpIHtcbiAgICAvLyAgIGlmICh0aGlzLmNhbGwpIHtcbiAgICAvLyAgICAgLy8gdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyAgICAgLy8gdGhpcy5jYWxsID0gdW5kZWZpbmVkO1xuICAgIC8vICAgICB0aGlzLm9uRW5kQ2FsbCh0aGlzLmNhbGw/LmNhbGxJbmZvLCBpc0FsbENhbGxFbmQpO1xuICAgIC8vICAgfVxuICAgIC8vICAgY29uc29sZS5sb2coJ1Jlc3VtaW5nIGhlbGQgY2FsbDonLCB0aGlzLmhlbGRDYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG5cbiAgICAvLyAgIC8vIFByb21vdGUgaGVsZCBjYWxsXG4gICAgLy8gICAvLyB0aGlzLmNhbGwgPSB0aGlzLmhlbGRDYWxsO1xuICAgIC8vICAgdGhpcy5oZWxkQ2FsbCA9IHVuZGVmaW5lZDtcbiAgICAvLyAgIC8vIHRoaXMuaXNDYWxsT25Ib2xkID0gZmFsc2U7XG4gICAgLy8gICAvLyB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlOyAvLyBFbnN1cmUgVUkgcmVuZGVyc1xuXG4gICAgLy8gICAvLyB0aGlzLmNhbGwubXV0ZShmYWxzZSk7XG5cbiAgICAvLyAgIC8vIFVwZGF0ZSBjYWxsRGF0YVxuICAgIC8vICAgY29uc3QgZnJvbU51bWJlciA9IHRoaXMuY2FsbC5wYXJhbWV0ZXJzWydGcm9tJ107XG4gICAgLy8gICBjb25zdCBjYWxsZXJOYW1lID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgICAvLyAgIGNvbnN0IGNhbGxlckltZyA9IHRoaXMuY2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuXG4gICAgLy8gICB0aGlzLmNhbGxEYXRhID0ge1xuICAgIC8vICAgICBwaG9uZTogZnJvbU51bWJlcixcbiAgICAvLyAgICAgZGlzcGxheU51bTogZnJvbU51bWJlcixcbiAgICAvLyAgICAgbmFtZTogY2FsbGVyTmFtZSxcbiAgICAvLyAgICAgaW1nOiBjYWxsZXJJbWdcbiAgICAvLyAgIH07XG5cbiAgICAvLyAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgIC8vICAgdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xuXG4gICAgLy8gICAvLyBGb3JjZSBVSSB1cGRhdGVcbiAgICAvLyAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKTtcblxuICAgIC8vICAgY29uc29sZS5sb2coJ0hlbGQgY2FsbCBpcyBub3cgYWN0aXZlOicsIHRoaXMuY2FsbERhdGEpO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICBjb25zb2xlLmxvZygnTm8gaGVsZCBjYWxsLCBlbmRpbmcgY29tcGxldGVseScpO1xuICAgIC8vICAgY29uc29sZS5sb2coJ3Rlc3Q2JylcbiAgICAvLyAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcbiAgICAvLyAgIGlmICh0aGlzLmNhbGwpIHtcbiAgICAvLyAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyAgICAgdGhpcy5vbkVuZENhbGwodGhpcy5jYWxsPy5jYWxsSW5mbywgaXNBbGxDYWxsRW5kKTtcbiAgICAvLyAgICAgLy8gdGhpcy5jYWxsID0gdW5kZWZpbmVkO1xuICAgIC8vICAgfVxuICAgIC8vICAgdGhpcy5tYXhpbWlzZURpYWxwYWQoKTtcbiAgICAvLyB9XG4gIH1cblxuXG4gIHRvZ2dsZU11dGUoKSB7XG4gICAgdGhpcy5pc011dGUgPSAhdGhpcy5pc011dGU7XG4gICAgdGhpcy5jYWxsPy5tdXRlKHRoaXMuaXNNdXRlKTtcbiAgfVxuICB0b2dnbGVLZXlwYWQoKSB7XG4gICAgdGhpcy5zaG93S2V5cGFkID0gIXRoaXMuc2hvd0tleXBhZDtcbiAgICB0aGlzLmNhbGxJbnB1dCA9ICcnO1xuICB9XG4gIHRvZ2dsZUNvbnRhY3RzUGFuZWwoaXNSZW1vdmU/OiBib29sZWFuKSB7XG4gICAgaWYoaXNSZW1vdmUpe1xuICAgICAgdGhpcy5zaG93Q29udGFjdHNQYW5lbCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50ID0gIXRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50ID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gIXRoaXMuc2hvd0NvbnRhY3RzUGFuZWw7XG4gICAgICB0aGlzLkdldENvbnRhY3RzTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJlbW92ZVBhcnRpY2lwYW50KCkge1xuICAgIC8vIGNvbnN0IGNvbmZlcmVuY2VTSWQgPSB0aGlzLmFkZFJlcz8uY29uZmVyZW5jZVNpZDtcbiAgICB0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQgPSAhdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50O1xuICAgIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0ID0gdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHModGhpcy50d2lsaW9TZXJ2aWNlLmNvbmZlcmVuY2VDYWxsSW5mby5jb25mZXJlbmNlU2lkKTtcbiAgfVxuXG4gIGFzeW5jIGFkZChkYXRhPzogYW55KSB7XG4gICAgLy8gaWYoZGF0YT8uc3RhdHVzICE9ICdyaW5naW5nJyl7XG4gICAgdGhpcy5jb25mZXJlbmNlSWQgPSB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvLmNvbmZlcmVuY2VJZDtcbiAgICBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxICYmIHRoaXMuY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbCl7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmRJbmRleCgoaXRlbTphbnkpPT5pdGVtLnBhcnRpY2lwYW50SWQgPT0gdGhpcy5jdXJyZW50Q2FsbD8ucGFydGljaXBhbnRJZCk7XG4gICAgICBpZihpbmRleCAhPSAtMSkge1xuICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3RbaW5kZXhdLmlzSG9sZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICBwYXJ0aWNpcGFudElkOiB0aGlzLmN1cnJlbnRDYWxsPy5pc0luY29taW5nQ2FsbCA/IFt0aGlzLmN1cnJlbnRDYWxsPy5pZF0gOiBbdGhpcy5jdXJyZW50Q2FsbD8ucGFydGljaXBhbnRJZF0sXG4gICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgIGhvbGQ6IHRydWVcbiAgICAgIH0pO1xuICAgICAgZGF0YS5pc0hvbGQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jYWxsID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmNvbm5lY3QoJycpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbCwgJ2NhbGxDb25uZWN0Jyk7XG4gICAgZGF0YS5pc0FjY2VwdENhbGwgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudENhbGwgPSBkYXRhO1xuICAgIC8vIH0gZWxzZSBpZihkYXRhPy5zdGF0dXMgPT0gJ3JpbmdpbmcnKXtcbiAgICAvLyAgIHRoaXMudHdpbGlvU2VydmljZS5hZGRJbmNvbWluZ1BhcnRpY2lwYW50KGRhdGE/LmlkLCB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvLmNvbmZlcmVuY2VJZCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAvLyAgICAgY29uc29sZS5sb2coZGF0YSwnYmhoaGhoaGhoaGhoaGhoaGhoaGgnKVxuICAgIC8vICAgfSlcbiAgICAvLyB9XG4gICAgXG4gICAgLy8gdGhpcy5kZXZpY2UgPSBuZXcgRGV2aWNlKCk7L1xuICAgIC8vIERldmljZS5jb25uZWN0KHsgY29uZmVyZW5jZU5hbWU6ICdteS1jb25mZXJlbmNlLXJvb20nIH0pO1xuICAgIC8vIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSh7IGNvbmZlcmVuY2VOYW1lOiAnbXktY29uZmVyZW5jZS1yb29tJyB9KTtcbiAgfVxuXG4gIHJlamVjdENhbGxGcm9tTGlzdChkYXRhPzogYW55KSB7XG4gICAgY29uc29sZS5sb2coZGF0YSwnMjY2NTY1NjU1JylcbiAgICAvLyB0aGlzLnR3aWxpb1NlcnZpY2UucmVqZWN0SW5jb21pbmdQYXJ0aWNpcGFudChkYXRhPy5pZCwgdGhpcy50d2lsaW9TZXJ2aWNlLmNvbmZlcmVuY2VDYWxsSW5mby5jb25mZXJlbmNlSWQpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhkYXRhLCdiaGhoaGhoaGhoaGhoaGhoaGhoaCcpXG4gICAgLy8gfSlcbiAgfVxuICBhc3luYyBjYWxsQ29udGFjdChjb250YWN0OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnQWRkaW5nIHBhcnRpY2lwYW50OicsIGNvbnRhY3QpO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmNhbGwnLCB0aGlzLmNhbGwpXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY2FsbCcsIHRoaXMuY2FsbC5zdGF0dXMoKSlcbiAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGFjdGl2ZSBjYWxsXG4gICAgLy8gaWYgKCF0aGlzLmNhbGwgfHwgdGhpcy5jYWxsLnN0YXR1cygpICE9PSAnb3BlbicpIHtcbiAgICAvLyAgIGNvbnNvbGUuZXJyb3IoJ05vIGFjdGl2ZSBjYWxsJyk7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuXG4gICAgLy8gR2V0IHRoZSBwaG9uZSBudW1iZXIgZnJvbSB0aGUgY29udGFjdFxuICAgIGNvbnN0IHBob25lTnVtYmVyID0gY29udGFjdD8ubnVtYmVyc0xpc3Q/LlswXT8ubnVtYmVyO1xuICAgIGNvbnN0IGN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgoYzogYW55KSA9PiBjPy5waG9uZSA9PT0gcGhvbmVOdW1iZXIpO1xuICAgIGlmICghcGhvbmVOdW1iZXIgfHwgY3VycmVudENhbGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHBob25lIG51bWJlciBmb3VuZCBmb3IgY29udGFjdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZih0aGlzLmlzQ29uZmVyZW5jZSl7XG4gICAgICAgIGxldCBkYXRhOmFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xuICAgICAgICAgIGZyb206IHRoaXMuY2FsbERhdGE/LmZyb20gfHwgdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXIsXG4gICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcbiAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcGhvbmVOdW1iZXIsXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAgICAgICAvLyAuLi50aGlzLmNhbGxEYXRhLFxuICAgICAgICAgIHBob25lOiBwaG9uZU51bWJlcixcbiAgICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcbiAgICAgICAgICBuYW1lOiBjb250YWN0Py5uYW1lIHx8IGAke2NvbnRhY3Q/LmZpcnN0TmFtZX0gJHtjb250YWN0Py5sYXN0TmFtZX1gIHx8IHBob25lTnVtYmVyLFxuICAgICAgICAgIGltZzogY29udGFjdD8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxuICAgICAgICAgIGZyb206IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxuICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxuICAgICAgICAgIGlzTGVmdDogZmFsc2UsXG4gICAgICAgICAgaXNDb25mZXJlbmNlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5jYWxsRGF0YSwgJ3RoaXMuY2FsbERhdGE1NjU2JylcbiAgICAgICAgY29uc29sZS5sb2coJ3Rlc3QxMTExMTE1NTU1NTU1NTU1Jyk7XG4gICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmNhbGxEYXRhO1xuICAgICAgICAvLyB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHsuLi50aGlzLmNhbGxEYXRhfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUGFydGljaXBhbnQgYWRkZWQgdG8gY29uZmVyZW5jZTpcIiwgcGhvbmVOdW1iZXIpO1xuICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XG4gICAgICAgIGlmKGM/LnBhcnRpY2lwYW50SWQgJiYgIWM/LmlzSG9sZCl7XG4gICAgICAgICAgYy5pc0hvbGQgPSB0cnVlO1xuICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICAgICAgaG9sZDogYz8uaXNIb2xkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gUHV0IGN1cnJlbnQgY2FsbCBvbiBob2xkXG4gICAgICAvLyB0aGlzLmhlbGRDYWxsID0gdGhpcy5jYWxsO1xuICAgICAgdGhpcy5pc0NhbGxPbkhvbGQgPSB0cnVlO1xuICAgICAgLy8gdGhpcy5oZWxkQ2FsbC5tdXRlKHRydWUpO1xuICAgICAgLy8gdGhpcy5oZWxkQ2FsbFsncGFyYW1ldGVycyddWydjYWxsZXJfbmFtZSddID0geyAuLi50aGlzLmNhbGxEYXRhIH1cbiAgICAgIC8vIHRoaXMuY2FsbD1udWxsXG4gICAgICAvLyBDbG9zZSBjb250YWN0cyBwYW5lbCBhbmQgc2hvdyByaW5nIGFuaW1hdGlvblxuICAgICAgdGhpcy5zaG93Q29udGFjdHNQYW5lbCA9IGZhbHNlO1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XG4gICAgICAvLyBVcGRhdGUgVUkgdG8gcmVmbGVjdCB0aGUgbmV3IG91dGJvdW5kIGxlZyBiZWluZyBkaWFsZWRcbiAgICAgIGNvbnN0IGNvbnRhY3ROYW1lID0gW2NvbnRhY3Q/LmZpcnN0TmFtZSwgY29udGFjdD8ubWlkZGxlTmFtZSwgY29udGFjdD8ubGFzdE5hbWVdXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgIC8vIHRoaXMuY2FsbFsnY2FsbEluZm8nXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYWxsRGF0YSkpO1xuICAgICAgXG4gICAgICAvLyBHZXQgdGhlIGNvbmZlcmVuY2UgSUQgZnJvbSB0aGUgY3VycmVudCBjYWxsIG9yIHVzZSB0aGUgc3RvcmVkIG9uZVxuICAgICAgLy8gY29uc3QgY29uZmVyZW5jZUlkID0gdGhpcy5jb25mZXJlbmNlSWQ7XG5cbiAgICAgIGlmICghdGhpcy5jb25mZXJlbmNlSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIk5vIGNvbmZlcmVuY2VJZCBmb3VuZCBmb3IgYWN0aXZlIGNhbGxcIik7XG4gICAgICAgIHN3YWwoXCJFcnJvclwiLCBcIkNhbm5vdCBhZGQgcGFydGljaXBhbnQ6IGNvbmZlcmVuY2Ugbm90IGZvdW5kXCIsIFwiZXJyb3JcIik7XG4gICAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgcGFydGljaXBhbnQgdG8gdGhlIGNvbmZlcmVuY2VcbiAgICAgIGxldCBkYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcbiAgICAgICAgZnJvbTogdGhpcy5jYWxsRGF0YT8uZnJvbSB8fCB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcbiAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcbiAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IHBob25lTnVtYmVyLFxuICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkXG4gICAgICB9KTtcblxuICAgICAgLy8gdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAgIC8vICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgICAgIC8vICAgcGFydGljaXBhbnRJZDogLFxuICAgICAgLy8gfVxuICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAgICAgLy8gLi4udGhpcy5jYWxsRGF0YSxcbiAgICAgICAgcGhvbmU6IHBob25lTnVtYmVyLFxuICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcbiAgICAgICAgbmFtZTogY29udGFjdD8ubmFtZSB8fCBgJHtjb250YWN0Py5maXJzdE5hbWV9ICR7Y29udGFjdD8ubGFzdE5hbWV9YCB8fCBwaG9uZU51bWJlcixcbiAgICAgICAgaW1nOiBjb250YWN0Py5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxuICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxuICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcbiAgICAgICAgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLFxuICAgICAgICBpc0hvbGQ6IGZhbHNlLFxuICAgICAgICBpc0xlZnQ6IGZhbHNlLFxuICAgICAgICBpc0NvbmZlcmVuY2U6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgY29uc29sZS5sb2codGhpcy5jYWxsRGF0YSwgJ3RoaXMuY2FsbERhdGEnKVxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3Rlc3QxMTExMTEnKTtcbiAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmNhbGxEYXRhO1xuICAgICAgLy8gdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7Li4udGhpcy5jYWxsRGF0YX0pO1xuICAgICAgY29uc29sZS5sb2coXCJQYXJ0aWNpcGFudCBhZGRlZCB0byBjb25mZXJlbmNlOlwiLCBwaG9uZU51bWJlcik7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgcGFydGljaXBhbnQ6JywgZXJyb3IpO1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgLy8gUmVzdG9yZSBoZWxkIGNhbGwgb24gZXJyb3JcbiAgICAgIGlmICh0aGlzLmhlbGRDYWxsKSB7XG4gICAgICAgIC8vIHRoaXMuY2FsbCA9IHRoaXMuaGVsZENhbGw7XG4gICAgICAgIC8vIHRoaXMuaGVsZENhbGwgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8vIHRoaXMuaXNDYWxsT25Ib2xkID0gZmFsc2U7XG4gICAgICAgIC8vIHRoaXMuY2FsbC5tdXRlKGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlU2lkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VTaWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWxsUGFydGljaXBlbnRMaXN0ID0gcmVzLnBhcnRpY2lwYW50cztcbiAgICB9KVxuICB9XG5cbiAgLy8gYWNjZXB0Q29uY3VycmVudENhbGwoaW5jb21pbmdDYWxsOiBhbnkpIHtcbiAgLy8gICBpZiAoIWluY29taW5nQ2FsbCkgcmV0dXJuO1xuXG4gIC8vICAgLy8gUHV0IGN1cnJlbnQgY2FsbCBvbiBob2xkIGluc3RlYWQgb2YgZGlzY29ubmVjdGluZ1xuICAvLyAgIGlmICh0aGlzLmNhbGwpIHtcbiAgLy8gICAgIHRoaXMuaGVsZENhbGwgPSB0aGlzLmNhbGw7XG4gIC8vICAgICB0aGlzLmlzQ2FsbE9uSG9sZCA9IHRydWU7XG4gIC8vICAgICAvLyBNdXRlIHRoZSBoZWxkIGNhbGxcbiAgLy8gICAgIHRoaXMuaGVsZENhbGwubXV0ZSh0cnVlKTtcbiAgLy8gICB9XG5cbiAgLy8gICBpbmNvbWluZ0NhbGwuYWNjZXB0KCk7XG4gIC8vICAgdGhpcy5jYWxsID0gaW5jb21pbmdDYWxsO1xuICAvLyAgIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpbmNvbWluZ0NhbGwucGFyYW1ldGVyc1snRnJvbSddO1xuICAvLyAgIHRoaXMuY2FsbERhdGEubmFtZSA9IGluY29taW5nQ2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ25hbWUnKSB8fCAnLSc7XG4gIC8vICAgdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgLy8gICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XG4gIC8vICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgLy8gICB0aGlzLmRpc2JhbGVFbmRDYWxsQnRuID0gZmFsc2U7XG5cbiAgLy8gICAvLyBSZXNldCB0aW1lciBmb3IgbmV3IGNhbGxcbiAgLy8gICB0aGlzLnN0b3BUaW1lcigpO1xuICAvLyAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgLy8gfVxuXG5cbiAgYWNjZXB0Q29uY3VycmVudENhbGwoaW5jb21pbmdDYWxsOiBhbnkpIHtcbiAgICBpZiAoIWluY29taW5nQ2FsbCkgcmV0dXJuO1xuXG5cbiAgICAvLyBQdXQgY3VycmVudCBjYWxsIG9uIGhvbGQgaW5zdGVhZCBvZiBkaXNjb25uZWN0aW5nXG4gICAgLy8gaWYgKHRoaXMuY2FsbCkge1xuICAgIC8vIC8vICAgdGhpcy5oZWxkQ2FsbCA9IHRoaXMuY2FsbDtcbiAgICAvLyAgIHRoaXMuaXNDYWxsT25Ib2xkID0gdHJ1ZTtcbiAgICAvLyAvLyAgIC8vIE11dGUgdGhlIGhlbGQgY2FsbFxuICAgIC8vIC8vICAgdGhpcy5oZWxkQ2FsbC5tdXRlKHRydWUpO1xuICAgIC8vIC8vIH1cblxuICAgIC8vIC8vIEFjY2VwdCB0aGUgbmV3IGNhbGxcbiAgICAvLyBpbmNvbWluZ0NhbGwuYWNjZXB0KCk7XG4gICAgLy8gdGhpcy5jYWxsID0gaW5jb21pbmdDYWxsO1xuICAgIC8vIHRoaXMuY2FsbERhdGEucGhvbmUgPSBpbmNvbWluZ0NhbGwucGFyYW1ldGVyc1snRnJvbSddO1xuICAgIC8vIHRoaXMuY2FsbERhdGEubmFtZSA9IGluY29taW5nQ2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ25hbWUnKSB8fCAnLSc7XG4gICAgLy8gdGhpcy5jYWxsRGF0YS5pbWcgPSBpbmNvbWluZ0NhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgICAvLyB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XG4gICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgICAvLyB0aGlzLmRpc2JhbGVFbmRDYWxsQnRuID0gZmFsc2U7XG5cbiAgICAvLyAvLyDwn5+iIFJlbW92ZSB0aGUgYWNjZXB0ZWQgY2FsbCBmcm9tIGluY29taW5nIGxpc3RcbiAgICAvLyB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0ID0gKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgfHwgW10pLmZpbHRlcihcbiAgICAvLyAgIChjOiBhbnkpID0+IGM/LnBhcmFtZXRlcnM/LkNhbGxTaWQgIT09IGluY29taW5nQ2FsbD8ucGFyYW1ldGVycz8uQ2FsbFNpZFxuICAgIC8vICk7XG4gICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mby5lbWl0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xuXG4gICAgLy8gLy8g8J+VkiBSZXNldCB0aW1lciBmb3IgbmV3IGNhbGxcbiAgICAvLyB0aGlzLnN0b3BUaW1lcigpO1xuICAgIC8vIHRoaXMuc3RhcnRUaW1lcigpO1xuXG4gICAgLy8gdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgc3dhcENhbGxzKGNhbGxJbmZvOiBhbnkpIHtcbiAgICAvLyBpZiAoIXRoaXMuaGVsZENhbGwgfHwgIXRoaXMuY2FsbCkgcmV0dXJuO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbCwgJ3RoaXMuY2FsbCcpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuaGVsZENhbGwsICd0aGlzLmhlbGRDYWxsJyk7XG4gICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50Q2FsbExpc3QsICd0aGlzLmN1cnJlbnRDYWxsTGlzdCcpO1xuICAgIGNvbnNvbGUubG9nKGNhbGxJbmZvLCAnY2FsbEluZm8gZm9yIHN3YXBDYWxscycpO1xuICAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xuICAgICAgaWYoYz8ucGFydGljaXBhbnRJZCAmJiAhYz8uaXNIb2xkKXtcbiAgICAgICAgYy5pc0hvbGQgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkXSxcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICAgIGhvbGQ6IGM/LmlzSG9sZFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZihjYWxsSW5mbz8uaXNIb2xkICYmIGM/LnBhcnRpY2lwYW50SWQgPT09IGNhbGxJbmZvPy5wYXJ0aWNpcGFudElkKXtcbiAgICAgICAgYy5pc0hvbGQgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgICBob2xkOiBjPy5pc0hvbGRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3VycmVudENhbGwgPSBjO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgLy8gICBwYXJ0aWNpcGFudElkOiB0aGlzLmNhbGw/LmNhbGxJbmZvPy5wYXJ0aWNpcGFudElkLFxuICAgIC8vICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAvLyAgIGhvbGQ6IHRydWVcbiAgICAvLyB9KTtcbiAgICAvLyBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgIC8vICAgcGFydGljaXBhbnRJZDogdGhpcy5oZWxkQ2FsbD8uY2FsbEluZm8/LnBhcnRpY2lwYW50SWQsXG4gICAgLy8gICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgIC8vICAgaG9sZDogZmFsc2VcbiAgICAvLyB9KTtcbiAgICBjb25zb2xlLmxvZygnU3dhcHBpbmcgY2FsbHMuLi4nKTtcbiAgICAvLyBjb25zb2xlLmxvZygnQmVmb3JlIHN3YXAgLSBBY3RpdmUgY2FsbDonLCB0aGlzLmNhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcbiAgICAvLyBjb25zb2xlLmxvZygnQmVmb3JlIHN3YXAgLSBIZWxkIGNhbGw6JywgdGhpcy5oZWxkQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuXG4gICAgLy8gU3dhcCB0aGUgY2FsbHNcbiAgICAvLyBjb25zdCB0ZW1wID0gdGhpcy5jYWxsO1xuICAgIC8vIHRoaXMuY2FsbCA9IHRoaXMuaGVsZENhbGw7XG4gICAgLy8gdGhpcy5oZWxkQ2FsbCA9IHRlbXA7XG5cblxuICAgIC8vIHRoaXMuY2FsbC5tdXRlKGZhbHNlKTtcbiAgICAvLyB0aGlzLmhlbGRDYWxsLm11dGUodHJ1ZSk7XG5cbiAgICAvLyBVcGRhdGUgVUkgd2l0aCBhY3RpdmUgY2FsbCBpbmZvIC0gZXh0cmFjdCBmcm9tIGNhbGwgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnN0IGZyb21OdW1iZXIgPSB0aGlzLmNhbGwucGFyYW1ldGVyc1snRnJvbSddO1xuICAgIC8vIGNvbnN0IGNhbGxlck5hbWUgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nO1xuICAgIC8vIGNvbnN0IGNhbGxlckltZyA9IHRoaXMuY2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgIC8vIGNvbnN0IGRpc3BsYXlOdW1iZXIgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCdkaXNwbGF5TnVtYmVyJykgfHwgJy0nO1xuXG4gICAgLy8gVXBkYXRlIGNhbGxEYXRhIHRvIHJlZnJlc2ggdGhlIG1haW4gVUlcbiAgICAvLyB0aGlzLmNhbGxEYXRhID0ge1xuICAgIC8vICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgICAvLyAgIHBob25lOiBmcm9tTnVtYmVyLFxuICAgIC8vICAgZGlzcGxheU51bTogKGRpc3BsYXlOdW1iZXIgJiYgZGlzcGxheU51bWJlciAhPT0gJy0nKSA/IGRpc3BsYXlOdW1iZXIgOiBmcm9tTnVtYmVyLFxuICAgIC8vICAgbmFtZTogKGNhbGxlck5hbWUgJiYgY2FsbGVyTmFtZSAhPT0gJy0nKSA/IGNhbGxlck5hbWUgOiAodGhpcy5jYWxsRGF0YT8ubmFtZSB8fCBmcm9tTnVtYmVyKSxcbiAgICAvLyAgIGltZzogY2FsbGVySW1nIHx8IHRoaXMuY2FsbERhdGE/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcbiAgICAvLyB9O1xuXG4gICAgLy8gY29uc29sZS5sb2coJ0FmdGVyIHN3YXAgLSBBY3RpdmUgY2FsbDonLCB0aGlzLmNhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcbiAgICAvLyBjb25zb2xlLmxvZygnQWZ0ZXIgc3dhcCAtIEhlbGQgY2FsbDonLCB0aGlzLmhlbGRDYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG4gICAgLy8gY29uc29sZS5sb2coJ1VwZGF0ZWQgY2FsbERhdGE6JywgdGhpcy5jYWxsRGF0YSk7XG4gICAgY29uc29sZS5sb2coJ3RoaXMuY3VycmVudENhbGxMaXN0IGFmdGVyIHN3YXAnLCB0aGlzLmN1cnJlbnRDYWxsTGlzdCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgbWVyZ2VDYWxscygpIHtcbiAgICAvLyBNZXJnZSBmdW5jdGlvbmFsaXR5IC0gdW5tdXRlIGJvdGggY2FsbHMgZm9yIGNvbmZlcmVuY2VcbiAgICBpZiAodGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMSkge1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XG4gICAgICAgIGlmKGM/LnBhcnRpY2lwYW50SWQgJiYgYz8uaXNIb2xkKXtcbiAgICAgICAgICBjLmlzSG9sZCA9IGZhbHNlO1xuICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICAgICAgaG9sZDogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjLmlzQ29uZmVyZW5jZSA9IHRydWU7XG4gICAgICB9KTtcbiAgICAgIC8vIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAvLyAgIHBhcnRpY2lwYW50SWQ6IHRoaXMuaGVsZENhbGw/LmNhbGxJbmZvPy5wYXJ0aWNpcGFudElkLFxuICAgICAgLy8gICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgLy8gICBob2xkOiBmYWxzZVxuICAgICAgLy8gfSk7XG4gICAgICAvLyB0aGlzLmhlbGRDYWxsLm11dGUoZmFsc2UpO1xuICAgICAgLy8gdGhpcy5jYWxsLm11dGUoZmFsc2UpO1xuICAgICAgdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgICAgIHRoaXMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBlbmRIZWxkQ2FsbCgpIHtcbiAgICAvLyBpZiAodGhpcy5oZWxkQ2FsbCkge1xuICAgIC8vICAgdGhpcy5oZWxkQ2FsbC5kaXNjb25uZWN0KCk7XG4gICAgLy8gICB0aGlzLmhlbGRDYWxsID0gdW5kZWZpbmVkO1xuICAgIC8vICAgdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgICAvLyAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAvLyB9XG4gIH1cblxuXG4gIGhhc0RldGFpbGVkSW5mbyhjYWxsRGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFjYWxsRGF0YSkgcmV0dXJuIGZhbHNlO1xuICAgIFxuICAgIC8vIENoZWNrIGlmIHVzZXJJbmZvIGV4aXN0cyBhbmQgaGFzIG1lYW5pbmdmdWwgZGF0YVxuICAgIGlmIChjYWxsRGF0YS51c2VySW5mbyAmJiBjYWxsRGF0YS51c2VySW5mby5jMmNJbmZvcm1hdGlvbikge1xuICAgICAgICBjb25zdCBpbmZvID0gY2FsbERhdGEudXNlckluZm8uYzJjSW5mb3JtYXRpb247XG4gICAgICAgIHJldHVybiAhIShcbiAgICAgICAgICAgIGluZm8uc3ViamVjdCAmJiBpbmZvLnN1YmplY3QgIT09ICctJyB8fFxuICAgICAgICAgICAgaW5mby5lbWFpbCAmJiBpbmZvLmVtYWlsICE9PSAnLScgfHxcbiAgICAgICAgICAgIGluZm8ubWVzc2FnZSAmJiBpbmZvLm1lc3NhZ2UgIT09ICctJyB8fFxuICAgICAgICAgICAgaW5mby5wb2ludE5hbWUgJiYgaW5mby5wb2ludE5hbWUgIT09ICctJyB8fFxuICAgICAgICAgICAgaW5mby5zb3VyY2VOYW1lICYmIGluZm8uc291cmNlTmFtZSAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLmV4dGVuc2lvbiAmJiBpbmZvLmV4dGVuc2lvbiAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLnVybCB8fFxuICAgICAgICAgICAgaW5mby5sYXRpdHVkZSB8fFxuICAgICAgICAgICAgaW5mby5sb25naXR1ZGVcbiAgICAgICAgKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgb25DbGlja0V4cGFuZChkYXRhPzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPT09IGRhdGEgJiYgdGhpcy5pc0NsaWNrRXhwYW5kKSB7XG4gICAgICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsID0gbnVsbDtcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbEluZm8uZW1pdCh7fSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsID0gZGF0YTtcbiAgICBcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsWydpc0NsaWNrRXhwYW5kJ10gPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgJiYgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goKGNhbGw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsICE9PSB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxbJ2lzQ2xpY2tFeHBhbmQnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsSW5mby5lbWl0KHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwpO1xuICAgICAgICBcbiAgICAgICAgaWYoIXRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwudXNlckluZm8gfHwgdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbC51c2VySW5mby5zdGF0dXMgPT0gMjAxKXtcbiAgICAgICAgICAgIC8vIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZ2V0VXNlckluZm9ybWF0aW9uKGluY29taW5nQ2FsbERhdGE6IGFueSkge1xuICAvLyAgIGxldCBkYXRhID0gdGhpcy5mcm9tRW50cmllcyhBcnJheS5mcm9tKGluY29taW5nQ2FsbERhdGEuY3VzdG9tUGFyYW1ldGVycy5lbnRyaWVzKCkpKTtcbiAgLy8gICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKGRhdGFbJ3R3aWxpb0F1dGhJZCddKS5zdWJzY3JpYmUoXG4gIC8vICAgcmVzcG9uc2UgPT4ge1xuICAvLyAgICAgc2V0VGltZW91dCgoKT0+e1xuICAvLyAgICAgICBpbmNvbWluZ0NhbGxEYXRhWyd1c2VySW5mbyddPXJlc3BvbnNlXG4gIC8vICAgICB9LCA1MDAwKVxuICAvLyAgIH0sIGVycm9yID0+IHtcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIHJlamVjdENvbmN1cnJlbnRDYWxsKGluY29taW5nQ2FsbDogYW55KSB7XG5cbiAgICBpZiAoIWluY29taW5nQ2FsbCkgcmV0dXJuO1xuICAgIGlmIChpbmNvbWluZ0NhbGwucmVqZWN0KSB7XG4gICAgICBpbmNvbWluZ0NhbGwucmVqZWN0KCk7XG4gICAgfVxuICAgIGlmIChpbmNvbWluZ0NhbGwuZGlzY29ubmVjdCkgaW5jb21pbmdDYWxsLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyBSZW1vdmUgZnJvbSBsaXN0XG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCA9ICh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0IHx8IFtdKS5maWx0ZXIoKGM6IGFueSkgPT4gYz8ucGFyYW1ldGVycz8uQ2FsbFNpZCAhPT0gaW5jb21pbmdDYWxsPy5wYXJhbWV0ZXJzPy5DYWxsU2lkKTtcbiAgICB0aGlzLmluY29taW5nQ2FsbHNOZXdJbmZvLmVtaXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCk7XG4gICAgLy8gSWYgbm8gbW9yZSBpbmNvbWluZywgaGlkZSBiYW5uZXJcbiAgICBpZiAoIXRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgfHwgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBvbkNhbGxJbnB1dHMobnVtOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobnVtKSB8fCBudW0gPT0gJysnIHx8IG51bSA9PSAnKicgfHwgbnVtID09ICcjJykge1xuICAgICAgICBpZiAobnVtID09ICcjJykge1xuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1oYXNoLS5tcDNgKS5wbGF5KCk7XG4gICAgICAgIH0gZWxzZSBpZiAobnVtID09ICcqJykge1xuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi1zdGFyLS5tcDNgKS5wbGF5KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLSR7bnVtfS0ubXAzYCkucGxheSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dCArIFN0cmluZyhudW0pO1xuICAgICAgICB0aGlzLnNob3dDbGVhckJ0biA9IHRydWU7XG4gICAgICB9XG4gICAgICBsZXQgc3RyID0gU3RyaW5nKG51bSk7XG4gICAgICB0aGlzLmNhbGw/LnNlbmREaWdpdHMoc3RyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG4gIH1cbiAgb25DYWxsSW5wdXRFbnRlcihldjogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuY2FsbD8uc2VuZERpZ2l0cyhTdHJpbmcoZXYua2V5KSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfVxuICB9XG4gIGNsb3NlSW5jb21pbmdDYWxsKGRhdGE6IGFueSkge1xuICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XG4gICAgaWYgKGRhdGEuc2hvdykge1xuICAgICAgLy90aGlzLnNob3dDYWxsUHJvZ3Jlc3NFdmVudC5lbWl0KClcbiAgICAgIC8vIGhhbmRsZSBpbmNvbWluZyBjYWxsIGFjY2VwdGVkXG4gICAgICB0aGlzLnN0YXJ0VGltZXIoKTtcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcbiAgICAgIC8vIHRoaXMuY2FsbCA9IGRhdGEuY2FsbDtcbiAgICAgIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGluY29taW5nRGV0YWlsID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTaWQoKTtcbiAgICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gaW5jb21pbmdEZXRhaWwucmVjb3JkQ2FsbDtcblxuICAgICAgaWYgKHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsKSB7XG4gICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5jb21pbmcgY2FsbCByZWplY3RlZCBvciBhdXRvLWNhbmNlbGxlZFxuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgICAgIC8vIElmIHRoZXJlIGlzIE5PIGFjdGl2ZSBjYWxsLCB0aGVuIHByb3BhZ2F0ZSBlbmQuIE90aGVyd2lzZSBrZWVwIG9uZ29pbmcgVUkuXG4gICAgICBpZiAoIXRoaXMuY2FsbCB8fCB0aGlzLmNhbGwuc3RhdHVzKCkgIT09ICdvcGVuJykge1xuICAgICAgICBjb25zb2xlLmxvZygndGVzdDcnKVxuICAgICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNsZWFySW5wdXRzKCkge1xuICAgIHRoaXMuY2FsbElucHV0ID0gdGhpcy5jYWxsSW5wdXQuc2xpY2UoMCwgLTEpO1xuICB9XG4gIGlzTWluaW1pc2VkOiBib29sZWFuID0gZmFsc2U7XG4gIG1pbmltaXNlRGlhbHBhZCgpIHtcbiAgICB0aGlzLm1pbmltaXNlRXZlbnQuZW1pdCh0cnVlKTtcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gdHJ1ZTtcbiAgfVxuICBtYXhpbWlzZURpYWxwYWQoKSB7XG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQoZmFsc2UpO1xuICAgIHRoaXMuaXNNaW5pbWlzZWQgPSBmYWxzZTtcbiAgfVxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XG4gICAgaWYgKHRoaXMuaXNSZWNvcmRpbmcpIHtcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XG4gICAgfVxuICB9XG4gIHN0YXJ0UmVjb3JkaW5nKCkge1xuICAgIGxldCBzaWQ7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxTaWQgPSBkZXRhaWxzLmNhbGxTaWQ7XG4gICAgdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgPSBkZXRhaWxzLnJlY29yZENhbGw7XG4gICAgc2lkID0gdGhpcy5pbmNvbWluZ0NhbGxTaWQgPyB0aGlzLmluY29taW5nQ2FsbFNpZCA6IHRoaXMuY2FsbFNpZCB8fCB0aGlzLmFkZFJlcz8uY29uZmVyZW5jZVNpZDtcblxuICAgIC8vIGlmICghdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgJiYgIXRoaXMucmVjb3JkQ2FsbCkge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFJlY29yZGluZyhzaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLmlzUmVjb3JkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMudGltZUVsYXBzZWQgPSAwO1xuICAgICAgdGhpcy5zdGFydFRpbWVyMSgpO1xuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcbiAgICB9KTtcbiAgfVxuICBzdG9wUmVjb3JkaW5nKCkge1xuICAgIC8vIGlmICghdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgJiYgIXRoaXMucmVjb3JkQ2FsbCkge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIHBhdXNlUmVjb3JkaW5nKCkge1xuICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsU2lkID0gZGV0YWlscy5jYWxsU2lkO1xuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gZGV0YWlscy5yZWNvcmRDYWxsO1xuICAgIGNvbnN0IHNpZCA9IHRoaXMuaW5jb21pbmdDYWxsU2lkID8gdGhpcy5pbmNvbWluZ0NhbGxTaWQgOiB0aGlzLmNhbGxTaWQ7XG5cbiAgICAvLyBpZiAoIXRoaXMuaW5jb21pbmdSZWNvcmRDYWxsICYmICF0aGlzLnJlY29yZENhbGwpIHtcbiAgICAvLyAgIHJldHVybjtcbiAgICAvLyB9XG5cbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucGF1c2VPclJlc3VtZVJlY29yZGluZyhzaWQsICdwYXVzZScpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nVGltZXIoKTtcbiAgICAgICAgdGhpcy5pc1BhdXNlZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhdXNpbmcgcmVjb3JkaW5nOicsIGVycm9yKTtcbiAgICAgICAgLy8gQ29uc2lkZXIgdXBkYXRpbmcgdGhlIFVJIHRvIHNob3cgdGhlIGVycm9yIHN0YXRlXG4gICAgICB9XG4gICAgKTtcbiAgfVxuICByZXN1bWVSZWNvcmRpbmcoKSB7XG4gICAgbGV0IHNpZDtcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTaWQoKTtcbiAgICB0aGlzLmluY29taW5nQ2FsbFNpZCA9IGRldGFpbHMuY2FsbFNpZDtcbiAgICB0aGlzLmluY29taW5nUmVjb3JkQ2FsbCA9IGRldGFpbHMucmVjb3JkQ2FsbDtcbiAgICBzaWQgPSB0aGlzLmluY29taW5nQ2FsbFNpZCA/IHRoaXMuaW5jb21pbmdDYWxsU2lkIDogdGhpcy5jYWxsU2lkO1xuXG4gICAgLy8gaWYgKCF0aGlzLmluY29taW5nUmVjb3JkQ2FsbCAmJiAhdGhpcy5yZWNvcmRDYWxsKSB7XG4gICAgLy8gICByZXR1cm47IC8vIFNraXAgaWYgcmVjb3JkaW5nIGlzIG5vdCBlbmFibGVkXG4gICAgLy8gfVxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5wYXVzZU9yUmVzdW1lUmVjb3JkaW5nKHNpZCwgJ3Jlc3VtZScpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXJ0VGltZXIxKCk7XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcmVzdW1pbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xuICAgIH0pO1xuICB9XG4gIHN0YXJ0VGltZXIxKCkge1xuICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSBpbnRlcnZhbCgxMDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy50aW1lRWxhcHNlZCsrO1xuICAgIH0pO1xuICB9XG4gIHN0b3BSZWNvcmRpbmdUaW1lcigpIHtcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyAvLyBQYXVzZSB0aGUgdGltZXJcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7ICAgICAgICAvLyBPcHRpb25hbGx5IHJlc2V0IHRoZSBzdWJzY3JpcHRpb25cbiAgICB9XG4gIH1cbiAgZ2V0Rm9ybWF0dGVkVGltZSgpIHtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcih0aGlzLnRpbWVFbGFwc2VkIC8gNjApO1xuICAgIGNvbnN0IHNlY29uZHMgPSB0aGlzLnRpbWVFbGFwc2VkICUgNjA7XG4gICAgcmV0dXJuIGAke21pbnV0ZXN9OiR7c2Vjb25kcyA8IDEwID8gJzAnIDogJyd9JHtzZWNvbmRzfWA7XG4gIH1cbiAgcG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgbWF4VGltZSA9IDMwMDAwOyAvLyBQb2xsIGZvciB1cCB0byAzMCBzZWNvbmRzXG4gICAgY29uc3QgcG9sbEludGVydmFsID0gMzAwMDsgLy8gUG9sbCBldmVyeSAzIHNlY29uZHNcbiAgICBsZXQgZWxhcHNlZFRpbWUgPSAwO1xuICAgIGNvbnN0IGludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICBlbGFwc2VkVGltZSArPSBwb2xsSW50ZXJ2YWw7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBzdGF0dXNSZXNwb25zZSA9IGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU3RhdHVzKGNhbGxBdXRoSWQpLnRvUHJvbWlzZSgpIGFzIENhbGxTdGF0dXNSZXNwb25zZTtcbiAgICAgICAgaWYgKHN0YXR1c1Jlc3BvbnNlICYmIHN0YXR1c1Jlc3BvbnNlLmNhbGxEZXRhaWxzKSB7XG4gICAgICAgICAgdGhpcy5jYWxsU3RhdHVzID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFN0YXR1cztcbiAgICAgICAgICBpZiAodGhpcy5jYWxsU3RhdHVzID09PSAnaW4tcHJvZ3Jlc3MnKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGxTaWQgPSBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscy5jYWxsU2lkO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVjb3JkQ2FsbCAmJiAhdGhpcy5pc1JlY29yZGluZykge1xuICAgICAgICAgICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsU3RhdHVzID09PSAnY29tcGxldGVkJykge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MScpXG4gICAgICAgICAgICB0aGlzLmVuZENhbGwoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYWxsU3RhdHVzID09PSAncmluZ2luZycpIHtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHBvbGxpbmc7IGRvIG5vdCBjbGVhciB0aGUgaW50ZXJ2YWwgeWV0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgfVxuICAgICAgaWYgKGVsYXBzZWRUaW1lID49IG1heFRpbWUpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ01heCBwb2xsaW5nIHRpbWUgcmVhY2hlZC4gU3RvcHBpbmcgcG9sbC4nKTtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIH1cbiAgICB9LCBwb2xsSW50ZXJ2YWwpO1xuICB9XG5cbiAgZ2V0VXNlckluZm9ybWF0aW9uKGlkOiBhbnkpIHtcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKGlkKS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKVxuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuICBpbmNvbWluZ0NhbGxzTmV3TGlzdChkYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhkYXRhLCAnbmV3SW5jb21pbmdDYWxsc0xpc3RPVVInKVxuICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgPSBkYXRhO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsc05ld0luZm8uZW1pdCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0KTtcbiAgfVxuICBzZWxlY3RlZEluY29taW5nQ2FsbEluZm8oZGF0YTogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCA9IGRhdGE7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jYWxsRGF0YS5kaWFsID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiY2FsbC1jb250YWluZXJcIiAqbmdJZj1cIiFpc01pbmltaXNlZFwiXG4gICAgW25nQ2xhc3NdPVwieydjb2xsb3BzJzogaXNDb2xsb3BzLCAnaW5jb21pbmctY2FsbC1jb250YWluZXInOiBzZWxlY3RlZEluY29taW5nQ2FsbD8uaXNDbGlja0V4cGFuZCwgJ2NvbnRhY3RzLW9wZW4nOiBzaG93Q29udGFjdHNQYW5lbCB9XCI+XG4gICAgPCEtLSA8ZGl2IGlkPVwibWluaW1pemUtYnRuLWRpdlwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgbWluaW1pemUtYnRuXCIgKGNsaWNrKT1cIm1pbmltaXNlRGlhbHBhZCgpXCI+XG4gICAgICAgICAgICBtaW5pbWl6ZVxuICAgICAgICA8L3NwYW4+XG4gICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gPGxpYi1pbmNvbWluZy1jYWxsICpuZ0lmPVwiaW5jb21pbmdDYWxsRGl2ICYmICFpc0NvbmN1cnJlbnRJbmNvbWluZ1wiIFtpbmNvbWluZ0NhbGxEYXRhXT1cImNhbGxEYXRhXCJcbiAgICAgICAgW2RldmljZUlkXT1cImRldmljZUlkXCIgW25ld0luY29taW5nQ2FsbHNMaXN0XT1cIm5ld0luY29taW5nQ2FsbHNMaXN0XCJcbiAgICAgICAgKGNsb3NlSW5jb21pbmdDYWxsRGl2KT1cImNsb3NlSW5jb21pbmdDYWxsKCRldmVudClcIiAoaW5jb21pbmdDYWxsc05ld0xpc3QpPVwiaW5jb21pbmdDYWxsc05ld0xpc3QoJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RlZEluY29taW5nQ2FsbEluZm8pPVwic2VsZWN0ZWRJbmNvbWluZ0NhbGxJbmZvKCRldmVudClcIj48L2xpYi1pbmNvbWluZy1jYWxsPiAtLT5cbiAgICB7e2N1cnJlbnRDYWxsTGlzdC5sZW5ndGggfX10dHR0dHR0dHR0dHR0dHR0dHR0dFxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaW5jb21pbmdDYWxsRGl2IHx8IGlzQ29uY3VycmVudEluY29taW5nIHx8IHRydWVcIj5cbiAgICAgICAgPCEtLSBBbGwgdHlwZSBDYWxsIEhvbGQgbGlzdCAgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtYmFubmVyXCIgKm5nSWY9XCJpc0NhbGxPbkhvbGQgJiYgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhlbGRDYWxsIG9mIGN1cnJlbnRDYWxsTGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtY29udGVudFwiICpuZ0lmPVwiaGVsZENhbGw/LmlzSG9sZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaG9sZC1pY29uXCI+cGF1c2VfY2lyY2xlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+SG9sZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbmFtZVwiPnt7aGVsZENhbGw/Lm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1udW1iZXJcIj57e2hlbGRDYWxsPy5waG9uZSB8fCAnJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaGVsZC1idG4gc3dhcC1idG5cIiAoY2xpY2spPVwic3dhcENhbGxzKGhlbGRDYWxsKVwiIHRpdGxlPVwiU3dhcCBjYWxsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlN3YXA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1jb250ZW50XCIgKm5nSWY9XCJoZWxkQ2FsbD8uaXNJbmNvbWluZ0NhbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhvbGQtaWNvblwiPnBob25lX2NhbGxiYWNrPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+SW5jb21pbmcgQ2FsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbmFtZVwiPnt7aGVsZENhbGw/Lm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1udW1iZXJcIj57e2hlbGRDYWxsPy5waG9uZSB8fCAnJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4td3JhcHBlciByZWNlaXZlLWJ0blwiICpuZ0lmPVwiIWhlbGRDYWxsPy5pc0NhbGxDb25uZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwiYWRkKGhlbGRDYWxsKVwiPiBjYWxsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuLXdyYXBwZXIgcmVjZWl2ZS1idG5cIiAqbmdJZj1cIiFoZWxkQ2FsbD8uaXNDYWxsQ29ubmVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfbWVyZ2UgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4td3JhcHBlciByZWNlaXZlLWJ0blwiICpuZ0lmPVwiIWhlbGRDYWxsPy5pc0NhbGxDb25uZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gc3dhcF92ZXJ0IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuLXdyYXBwZXIgcmVqZWN0LWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJyZWplY3RDYWxsRnJvbUxpc3QoaGVsZENhbGwpXCI+IGNhbGxfZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ29tcGFjdCBiYW5uZXJzIGZvciBjb25jdXJyZW50IGluY29taW5nIChvbmUgcGVyIGNhbGwpIC0tPlxuICAgICAgICAgY29uY3VycmVudCBpbmNvbWluZyAob25lIHBlciBjYWxsKXt7IWlzQ29uZmVyZW5jZX19K3t7Y3VycmVudENhbGxMaXN0Lmxlbmd0aH19XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDb25mZXJlbmNlICYmIGN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctYmFubmVycy1jb250YWluZXJcIiAqbmdJZj1cIiFpc0NvbmZlcmVuY2UgJiYgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDEwMCU7dG9wOiAwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGluYyBvZiBjdXJyZW50Q2FsbExpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1iYW5uZXJcIiAqbmdJZj1cImluYz8uaXNJbmNvbWluZ0NhbGwgJiYgIWluYz8uaXNBY2NlcHRDYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHRvcDogKChpc0NhbGxPbkhvbGQgJiYgaGVsZENhbGwpID8gNjQgOiAwKSArIChpICogNzApICsgJ3B4JyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluY29taW5nLWJhbm5lci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluY29tIGluZy1sYWJlbFwiPkluY29taW5nIGNhbGw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctY2FsbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYWxsZXItbmFtZVwiPnt7IGluYz8udXNlckluZm8/LmMyY0luZm9ybWF0aW9uPy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYz8uY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FsbGVyLW51bWJlclwiPnt7IGluYz8udXNlckluZm8/LmMyY0luZm9ybWF0aW9uPy5udW1iZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jPy5wYXJhbWV0ZXJzPy5Gcm9tIHx8ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhbm5lci1idG4gYWNjZXB0LWJ0blwiIChjbGljayk9XCJhZGQoaW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmNhbGw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJiYW5uZXItYnRuIHJlamVjdC1idG5cIiAoY2xpY2spPVwicmVqZWN0Q29uY3VycmVudENhbGwoaW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmNhbGxfZW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRm9yIHNpbmdsZSBpbmNvbWluZyBjYWxsIC0tPlxuICAgICAgICAgc2luZ2xlIGluY29taW5nIGNhbGx7e2N1cnJlbnRDYWxsTGlzdC5sZW5ndGggPT09IDEgfX0tLS0tLS17eyBjdXJyZW50Q2FsbExpc3RbMF0/LmlzSW5jb21pbmdDYWxsfX0tLS0te3sgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsfX1cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIG15LTVcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCIgKm5nSWY9XCJjdXJyZW50Q2FsbExpc3QubGVuZ3RoID09PSAxICYmIGN1cnJlbnRDYWxsTGlzdFswXT8uaXNJbmNvbWluZ0NhbGwgJiYgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbFRvTnVtXCI+SW5jb21pbmcgY2FsbCBvbiA8YnIgLz48c3Bhbj57e2N1cnJlbnRDYWxsTGlzdFswXT8ucGhvbmUgfHwgJ1Vua25vd24gTnVtYmVyJ319PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb25cIiBbbmdDbGFzc109XCJ7J2NhbGwtYW5pbWF0aW9uLXBsYXknOiBzaG93UmluZ0FuaW1hdGlvbn1cIj5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwiY3VycmVudENhbGxMaXN0WzBdPy5pbWdcIiBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyMFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGgxPnt7Y3VycmVudENhbGxMaXN0WzBdPy5jMmNJbmZvcm1hdGlvbj8ubmFtZSB8fCAnVW5rbm93biBOdW1iZXInfX08L2gxPlxuICAgICAgICAgICAgICAgIDxwPnt7Y3VycmVudENhbGxMaXN0WzBdPy5jMmNJbmZvcm1hdGlvbj8ubnVtYmVyfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biByZWNlaXZlLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5ld0luY29taW5nQ2FsbHNMaXN0WzBdPy5pc0NhbGxDb25uZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cImFkZChjdXJyZW50Q2FsbExpc3RbMF0pXCI+IGNhbGwgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biByZWplY3QtYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJvbkVuZENhbGwoY3VycmVudENhbGxMaXN0WzBdKVwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBGb3IgbXVsdGlwbGUgaW5jb21pbmcgY2FsbHMgYnV0IG5vdCBhbnkgY2FsbCBwcm9ncmVzcyAtLT5cbiAgICAgICAgXG5cbiAgICAgICAgPCEtLSBGb3Igc2luZ2xlIGFjdGl2ZSBjYWxsIC0tPlxuICAgICAgICAgc2luZ2xlIGFjdGl2ZSBjYWxse3soIWlzQ29uZmVyZW5jZSAmJiBjdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMSl9fSsrK3t7Y3VycmVudENhbGxMaXN0Lmxlbmd0aCA9PT0gMSB9fSsrK3t7IGN1cnJlbnRDYWxsTGlzdFswXT8uaXNJbmNvbWluZ0NhbGx9fSsrK3t7ICFjdXJyZW50Q2FsbExpc3RbMF0/LmlzQWNjZXB0Q2FsbH19XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNDb25mZXJlbmNlICYmICEhY3VycmVudENhbGxcIiBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiAnZmxleCcsICdmbGV4LWRpcmVjdGlvbic6ICdjb2x1bW4nLCAncG9zaXRpb24nOiAncmVsYXRpdmUnfVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb25cIiBbbmdDbGFzc109XCJ7J2NhbGwtYW5pbWF0aW9uLXBsYXknOiBzaG93UmluZ0FuaW1hdGlvbn1cIj5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwiY3VycmVudENhbGwuaW1nXCIgYWx0PVwiXCIgd2lkdGg9XCIxMjBcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyRGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxoMSBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnOHB4J31cIj57e2N1cnJlbnRDYWxsLm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319PC9oMT5cbiAgICAgICAgICAgICAgICA8cD57e2N1cnJlbnRDYWxsLnBob25lIH19PC9wPlxuICAgICAgICAgICAgICAgIDxoNCBzdHlsZT1cIm1hcmdpbi10b3A6IDRweFwiPnt7dGltZXJ9fTwvaDQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1hY3Rpb24tYnRuc1wiICpuZ0lmPVwiIXNob3dLZXlwYWRcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnMjBweCd9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1idG4tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHN0YXJ0LXN0b3BcIiAqbmdJZj1cIiFpc1JlY29yZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3JlY29yZGluZyc6IGlzUmVjb3JkaW5nLCAnc3RvcHBlZCc6ICFpc1JlY29yZGluZ31cIiAoY2xpY2spPVwidG9nZ2xlUmVjb3JkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImlzUmVjb3JkaW5nID8gJ1N0b3AgUmVjb3JkaW5nJyA6ICdTdGFydCBSZWNvcmRpbmcnXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhdXNlLXJlc3VtZS1idG5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhdXNlUmVjb3JkaW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGF1c2UgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUGF1c2VkXCIgKGNsaWNrKT1cInJlc3VtZVJlY29yZGluZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBsYXlfYXJyb3cgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwidGltZXItZGlzcGxheVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtYXR0ZWRUaW1lKCkgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dLZXlwYWRcIiBjbGFzcz1cInNlbmREaWdpdFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJjYWxsLWlucHV0c1wiIGlkPVwiY2FsbC1pbnB1dFwiIFsobmdNb2RlbCldPVwiY2FsbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpbnB1dC1jbGVhci1idG5cIiAqbmdJZj1cImNhbGxJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcklucHV0cygpXCI+Y2xvc2Vfc21hbGw8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cInNob3dLZXlwYWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2V5LWJ0blwiICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5cGFkVmFsXCIgKGNsaWNrKT1cIm9uQ2FsbElucHV0cyhrZXkubnVtKVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1hbGJoYWJldHNcIj57e2tleS50ZXh0ID8ga2V5LnRleHQgOiAnJm5ic3A7J319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFjdGlvbi1idG5zXCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzExMHB4J31cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiICpuZ0lmPVwiIWluY29taW5nQ2FsbERpdiB8fCBpc0NvbmN1cnJlbnRJbmNvbWluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaGVsZC1idG4gbWVyZ2UtYnRuXCIgKGNsaWNrKT1cIm1lcmdlQ2FsbHMoKVwiIHRpdGxlPVwiTWVyZ2UgY2FsbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPCAyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NZXJnZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1ldmVubHkgbWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1zZWMtYnRuIG1yLTNcIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIiAoY2xpY2spPVwidG9nZ2xlTXV0ZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1zZWMtYnRuIG1yLTNcIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJ0b2dnbGVLZXlwYWQoKVwiPiB0cmFuc2l0aW9uX2Rpc3NvbHZlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG5cIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cImVuZENhbGwoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb250YWN0cy1wYW5lbFwiICpuZ0lmPVwic2hvd0NvbnRhY3RzUGFuZWxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBiYWNrXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoKVwiPiBjaGV2cm9uX2xlZnQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250YWN0czwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgc2VhcmNoXCI+IHNlYXJjaCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0Zvcj1cImxldCBjIG9mIGNvbnRhY3RzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cImMuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiPnt7Yy5maXJzdE5hbWV9fSB7e2MubWlkZGxlTmFtZX19IHt7Yy5sYXN0TmFtZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIj57eyAoYy5udW1iZXJzTGlzdCAmJiBjLm51bWJlcnNMaXN0WzBdPy5udW1iZXIpfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG5cIiAoY2xpY2spPVwiY2FsbENvbnRhY3QoYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkNhbGw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXQtMiBweC0zIGNhbGwtaW5mby13cmFwcGVyIFwiICBbbmdDbGFzc109XCJ7J29wZW4tY29sbG9wcyc6IGlzQ29sbG9wc31cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFuZ2xlLWRvd25cIiAqbmdJZj1cImlzQ29sbG9wc1wiIChjbGljayk9XCJpc0NvbGxvcHMgPSAhaXNDb2xsb3BzXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtdXBcIiAqbmdJZj1cIiFpc0NvbGxvcHNcIiAoY2xpY2spPVwiaXNDb2xsb3BzID0gIWlzQ29sbG9wc1wiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQ29sbG9wc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgPkZpcnN0IE5hbWU6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ID50ZXN0IHR0dHR0PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+TGFzdCBOYW1lOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj50ZXRzdCB0ZXN0IDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+RW1haWw6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5hYmNkZWZ0QHZncm91cC5jb208L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+TnVtYmVyOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPjYzNTQ1OTg1MjY0MjI1PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5MYW5ndWFnZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5FbmdsaXNoPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5JbWFnZSA6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+dGVzdC5qcGcgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5FeHRlbnNpb24gOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPjQ1OTY8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5Ob3RlIDo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPnRlcyB0ZXN0IHRlc3QgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5TdWJqZWN0OjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPmhlbGxvIHdvcmxkIHwgdGVzdDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPk1lc3NhZ2U6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+dGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gY29udGFjdCBsaXN0IHBhbmVsIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtcGFuZWxcIiAqbmdJZj1cInNob3dDb250YWN0c1BhbmVsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGJhY2tcIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCgpXCI+IGNoZXZyb25fbGVmdCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGFjdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgc2VhcmNoXCI+IHNlYXJjaCA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0Zvcj1cImxldCBjIG9mIGNvbnRhY3RzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiIFtzcmNdPVwiYy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiPnt7Yy5maXJzdE5hbWV9fSB7e2MubWlkZGxlTmFtZX19IHt7Yy5sYXN0TmFtZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IChjLm51bWJlcnNMaXN0ICYmIGMubnVtYmVyc0xpc3RbMF0/Lm51bWJlcil9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRhY3QtY2FsbC1idG5cIiAoY2xpY2spPVwiY2FsbENvbnRhY3QoYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5DYWxsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIGNvbmZlcmVuY2UgY2FsbCB2aWV3IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmVyZW5jZS1jYWxsLXZpZXdcIiAqbmdJZj1cImlzQ29uZmVyZW5jZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZi1pY29uIG1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gZ3JvdXBzIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmYtdGl0bGVcIj5Db25mZXJlbmNlIENhbGw8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLXRleHQgY29uZi1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhbGwgb2YgY3VycmVudENhbGxMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FsbD8uaXNDb25mZXJlbmNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpICE9IDBcIj4mPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y2FsbD8ubmFtZSA/IGNhbGw/Lm5hbWUgOiBjYWxsPy5waG9uZSB8fCAnVW5rbm93biBudW1iZXInfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtdGltZXJcIj57eyB0aW1lciB9fTwvZGl2PlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29uZi1yZWNvcmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLXN0b3AtYnRuXCIgKm5nSWY9XCJpc1JlY29yZGluZ1wiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiIHRpdGxlPVwiU3RvcCBSZWNvcmRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHN0b3BfY2lyY2xlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1hY3Rpb24tYnRucyBtdC1hdXRvXCIgKm5nSWY9XCIhc2hvd0tleXBhZFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzIwcHgnfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBzdGFydC1zdG9wXCIgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydyZWNvcmRpbmcnOiBpc1JlY29yZGluZywgJ3N0b3BwZWQnOiAhaXNSZWNvcmRpbmd9XCIgKGNsaWNrKT1cInRvZ2dsZVJlY29yZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWNvcmRpbmctaWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1JlY29yZGluZyAmJiAhaXNQYXVzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXVzZVJlY29yZGluZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1BhdXNlZFwiIChjbGljayk9XCJyZXN1bWVSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNSZWNvcmRpbmdcIiBjbGFzcz1cInRpbWVyLWRpc3BsYXlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVGltZSgpIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dLZXlwYWRcIiBjbGFzcz1cInNlbmREaWdpdCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNhbGwtaW5wdXRzXCIgaWQ9XCJjYWxsLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjYWxsSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25DYWxsSW5wdXRFbnRlcigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRzKClcIj5jbG9zZV9zbWFsbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXktYnRuXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlwYWRWYWxcIiAoY2xpY2spPVwib25DYWxsSW5wdXRzKGtleS5udW0pXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7a2V5Lm51bX19XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtcmVtb3ZlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1idG5cIiAoY2xpY2spPVwiYWRkUmVtb3ZlUGFydGljaXBhbnQoKVwiPlJlbW92ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNNdXRlfVwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHt7IGlzTXV0ZSA/ICdtaWNfb2ZmJyA6ICdtaWMnIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIChjbGljayk9XCJ0b2dnbGVLZXlwYWQoKVwiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWVuZFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuIGRhbmdlclwiIChjbGljayk9XCJlbmRDYWxsKHRydWUpXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBBZGQgcmVtb3ZlIHBhcnRpY2lwYW50IHBhbmVsIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtcGFuZWxcIiAqbmdJZj1cImlzQWRkUmVtb3ZlUGFydGljaXBhbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgYmFja1wiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKHRydWUpXCI+IGNoZXZyb25fbGVmdCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGFjdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgc2VhcmNoXCI+IHNlYXJjaCA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0Zvcj1cImxldCBjIG9mIGFsbFBhcnRpY2lwZW50TGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cImMuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIj57e2M/LnRvTmFtZSB8fCAnVW5rbm93bid9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIj57eyBjPy50byB8fCAnVW5rbm93bid9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtaG9sZC1jb250YWN0IG1yLTJcIiBbbmdDbGFzc109XCJ7ICdvbi1ob2xkJzogYy5ob2xkIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiSG9sZFwiPiBwaG9uZV9wYXVzZWQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImxhYmVsXCI+SG9sZDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1jb250YWN0XCIgKGNsaWNrKT1cIm9uRW5kQ2FsbChjKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgdGl0bGU9XCJDYWxsIEVuZFwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5FbmQ8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwid2F2ZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3YXZlc1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDI0IDE1MCAyOFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCIgc2hhcGUtcmVuZGVyaW5nPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cImdlbnRsZS13YXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNLTE2MCA0NGMzMCAwIDU4LTE4IDg4LTE4cyA1OCAxOCA4OCAxOCA1OC0xOCA4OC0xOCA1OCAxOCA4OCAxOCB2NDRoLTM1MnpcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBhcmFsbGF4XCI+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCIwXCIgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCIzXCIgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHVzZVxuICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIlxuICAgICAgICAgICAgICAgIHg9XCI0OFwiXG4gICAgICAgICAgICAgICAgeT1cIjVcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIlxuICAgICAgICAgICAgICAvPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjdcIiBmaWxsPVwiI2ZmZlwiIC8+XG4gICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJtaW4tY2FsbC1jb250YWluZXJcIiAqbmdJZj1cImlzTWluaW1pc2VkXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZ1bGxzY3JlZW5cIiAoY2xpY2spPVwibWF4aW1pc2VEaWFscGFkKClcIj4gb3Blbl9pbl9mdWxsIDwvc3Bhbj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgd2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbC1hbmltYXRpb25cIiBpZD1cImNhbGwtYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1pbi1hdmF0YXItaW1nXCIgW3NyY109XCJjYWxsRGF0YS5pbWdcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi1jYWxsZXJEZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tjYWxsRGF0YS5uYW1lfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMFwiPnt7Y2FsbERhdGEuZGlzcGxheU51bSA/IGNhbGxEYXRhLmRpc3BsYXlOdW0gOiBjYWxsRGF0YS5waG9uZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWluLWJ0bi1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi10aW1lclwiPnt7dGltZXJ9fTwvZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWluLWNhbGwtc2VjLWJ0blwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWluLWNhbGwtYnRuIGVuZC1jYWxsLWJ0blwiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiIChjbGljayk9XCJlbmRDYWxsKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
1221
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFxQjlDLE1BQU0sT0FBTyxxQkFBcUI7SUFxRGhDLHNCQUFzQjtJQUN0QixzRkFBc0Y7SUFDdEYsOEZBQThGO0lBQzlGLGtHQUFrRztJQUNsRyw2RUFBNkU7SUFDN0UsOEZBQThGO0lBQzlGLDZFQUE2RTtJQUM3RSxLQUFLO0lBQ0wsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFBVSxhQUE0QjtRQUF4RyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXpEbkgseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBRTlCLGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUQs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RUFBRSxLQUFLLENBQUMsRUFBRTtZQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsSUFBUztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0Qsd0JBQXdCLENBQUMsSUFBUztRQUNoQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QztJQUNILENBQUM7O21IQTl2Q1UscUJBQXFCO3VHQUFyQixxQkFBcUIsK2FDN0JsQyxxL3pCQTZjTTs0RkRoYk8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjttS0FLcEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBb0JHLHFCQUFxQjtzQkFBOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FsbCwgRGV2aWNlIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xuaW1wb3J0IHsgRXh0ZW5zaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvZXh0ZW5zaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHdpbGlvU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvdHdpbGlvLnNlcnZpY2UnO1xuaW1wb3J0IHsgZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnRzJztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IGtleXBhZCB9IGZyb20gJy4uLy4uLy4uL2tleXBhZCc7XG5pbXBvcnQgeyBpbnRlcnZhbCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cblxuXG5pbnRlcmZhY2UgQ2FsbERldGFpbHMge1xuICBjYWxsU2lkOiBzdHJpbmc7XG4gIGNhbGxTdGF0dXM6IHN0cmluZztcbn1cbmludGVyZmFjZSBDYWxsU3RhdHVzUmVzcG9uc2Uge1xuICBjYWxsRGV0YWlsczogQ2FsbERldGFpbHM7XG4gIHJlc3BvbnNlOiBzdHJpbmc7XG4gIGVycm9yVHlwZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHN0YXR1czogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY2FsbC1wcm9ncmVzcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2FsbFByb2dyZXNzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBjYWxsRGF0YTogYW55O1xuICBASW5wdXQoKSBzZWxlY3RlZENhbGxlcklkOiBhbnk7XG4gIEBJbnB1dCgpIG5ld0luY29taW5nQ2FsbERhdGE/OiBDYWxsO1xuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxzTGlzdDogYW55ID0gW107XG4gIEBJbnB1dCgpIGRldmljZUlkOiBhbnk7XG4gIEBPdXRwdXQoKSBlbmRDYWxsRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbHNOZXdJbmZvOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKSBtaW5pbWlzZUV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIGRldmljZT86IERldmljZTtcbiAgY2FsbD86IENhbGwgfCBhbnk7XG4gIHNob3dSaW5nQW5pbWF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHRpbWVyOiBzdHJpbmcgPSAnMDA6MDAnO1xuICBpbnRlcnZhbElkOiBhbnk7XG4gIHNob3dLZXlwYWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAga2V5cGFkVmFsID0ga2V5cGFkO1xuICBjYWxsSW5wdXQ6IHN0cmluZyA9ICcnO1xuICBpc011dGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlzYmFsZUVuZENhbGxCdG46IGJvb2xlYW4gPSB0cnVlO1xuICBzaG93Q2xlYXJCdG46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDb2xsb3BzID0gZmFsc2U7XG4gIGN1cnJlbnRDYWxsOiBhbnk7XG4gIC8vIENvbmZlcmVuY2Ugc3RhdGUgZmxhZ1xuICBpc0NvbmZlcmVuY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNPdXRnb2luZ0NhbGw6IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBJbmNvbWluZyBjYWxsIHZhcmlhYmxlc1xuICBpbmNvbWluZ0NhbGxEaXY6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy9AT3V0cHV0KCkgc2hvd0NhbGxQcm9ncmVzc0V2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxJbml0aWF0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvLyBSZWNvcmRpbmcgdmFyaWFibGVzXG4gIGNhbGxTaWQ6IGFueTtcbiAgaXNSZWNvcmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNQYXVzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGltZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHRpbWVFbGFwc2VkID0gMDsgLy8gaW4gc2Vjb25kc1xuICByZWNvcmRDYWxsOiBib29sZWFuID0gZmFsc2U7XG4gIGluY29taW5nQ2FsbFNpZDogYW55O1xuICBjYWxsU3RhdHVzOiBzdHJpbmcgPSAncmluZ2luZyc7XG4gIGluY29taW5nUmVjb3JkQ2FsbD86IGFueTtcbiAgc2VsZWN0ZWRJbmNvbWluZ0NhbGw6IGFueTtcbiAgc2hvd0NvbnRhY3RzUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNBZGRSZW1vdmVQYXJ0aWNpcGFudDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbmN1cnJlbnRJbmNvbWluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBoZWxkQ2FsbD86IENhbGwgfCBhbnk7XG4gIGlzQ2FsbE9uSG9sZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb250YWN0czogYW55W10gPSBbXTtcbiAgY3VycmVudENhbGxMaXN0OiBhbnlbXSA9IFtdO1xuICBjb25mZXJlbmNlSWQ6IGFueTtcbiAgYWxsUGFydGljaXBlbnRMaXN0OiBhbnk7XG4gIGlzQ2xpY2tFeHBhbmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDYWxsSW5Qcm9ncmVzcyE6IGJvb2xlYW47XG4gIC8vIGNvbnRhY3RzOiBhbnlbXSA9IFtcbiAgLy8gICB7IG5hbWU6ICdQYW1lbGEgQ294JywgdGl0bGU6ICdQcm9kdWN0IERlc2lnbmVyJywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfSxcbiAgLy8gICB7IG5hbWU6ICdSb2dlciBTLiBXb29kJywgdGl0bGU6ICdKYXZhU2NyaXB0IFByb2dyYW1tZXInLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9LFxuICAvLyAgIHsgbmFtZTogJ1ZpY3RvciBCbGFja3N0b24nLCB0aXRsZTogJ0RhdGFiYXNlIEFkbWluaXN0cmF0b3InLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9LFxuICAvLyAgIHsgbmFtZTogJ1RhbW15IFJpb3MnLCB0aXRsZTogJ1N1cHBvcnQnLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9LFxuICAvLyAgIHsgbmFtZTogJ0NhcmxvcyBIZW5kZXJzb24nLCB0aXRsZTogJ1NvZnR3YXJlIEFyY2hpdGVjdCcsIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIH0sXG4gIC8vICAgeyBuYW1lOiAnRWxpemFiZXRoIEJhaWxleScsIHRpdGxlOiAnSFInLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9XG4gIC8vIF07XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSwgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHR3aWxpb1NlcnZpY2U6IFR3aWxpb1NlcnZpY2UpIHtcbiAgICBjb25zb2xlLmxvZygnQ2FsbCBQcm9ncmVzcyBDb21wb25lbnQnKTtcbiAgICB0aGlzLmNhbGwgPSB0aGlzLnR3aWxpb1NlcnZpY2UuZGV2aWNlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ0NhbGwgUHJvZ3Jlc3MgQ29tcG9uZW50IG5nT25Jbml0Jyk7XG4gICAgLy8gU3Vic2NyaWJlIHRvIGluY29taW5nIGNhbGxzIGZyb20gVHdpbGlvU2VydmljZVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY3VycmVudENhbGwuc3Vic2NyaWJlKChpbmNvbWluZzogYW55KSA9PiB7XG4gICAgICAgIGlmICghaW5jb21pbmcpIHsgcmV0dXJuOyB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsIGVtaXR0ZWQ6JywgaW5jb21pbmcpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnQ3VycmVudCBjYWxsIHN0YXR1czonLCB0aGlzLmNhbGw/LnN0YXR1cygpKTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gb25nb2luZyBjYWxsLCBzaG93IGNvbmN1cnJlbnQgaW5jb21pbmcgYmFubmVyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ29uY3VycmVudCBpbmNvbWluZyBkZXRlY3RlZCAtIHNob3dpbmcgYmFubmVyJyk7XG4gICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSB0cnVlO1xuICAgICAgICAgIC8vIEFkZCB0byBsaXN0IGlmIG5vdCBwcmVzZW50XG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgfHwgW10pLnNvbWUoKGM6IGFueSkgPT4gYz8ucGFyYW1ldGVycz8uQ2FsbFNpZCA9PT0gaW5jb21pbmc/LnBhcmFtZXRlcnM/LkNhbGxTaWQpO1xuICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0ID0gWy4uLih0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0IHx8IFtdKSwgaW5jb21pbmddO1xuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mby5lbWl0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIC8vIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1YnNjcmliaW5nIHRvIGluY29taW5nIGNhbGxzOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5pc0luY29taW5nQ2FsbCkge1xuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FsbFsnY2FsbEluZm8nXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYWxsRGF0YSkpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5kaXNwbGF5TnVtIHx8IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5mcm9tKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0LXN0YXJ0Q2FsbDEyMycsIGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlKVxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0geyAuLi5jaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSwgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfTtcbiAgICAgICAgdGhpcy5zdGFydENhbGwoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snbmV3SW5jb21pbmdDYWxsc0xpc3QnXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBhY3RpdmUgb25nb2luZyBjYWxsXG4gICAgICAgICAgdGhpcy5jb25mZXJlbmNlSWQgPSB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0WzBdLmNvbmZlcmVuY2VJZDtcbiAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goYXN5bmMgKHJlczphbnkpPT57XG4gICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOmFueSk9Pml0ZW0uaWQgPT0gcmVzLmlkKTtcbiAgICAgICAgICAgICAgaWYoaW5kZXggPT0gLTEgJiYgIXJlcy5pc0xlZnQpe1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgLi4ucmVzLCBcbiAgICAgICAgICAgICAgICAgIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLCBcbiAgICAgICAgICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiLFxuICAgICAgICAgICAgICAgICAgaXNIb2xkOiByZXMuaXNIb2xkLFxuICAgICAgICAgICAgICAgICAgaXNNdXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogcmVzLmlzQ29uZmVyZW5jZSxcbiAgICAgICAgICAgICAgICAgIGlzQWNjZXB0Q2FsbDogdGhpcy5nZXRTdGF0dXMocmVzKSxcbiAgICAgICAgICAgICAgICAgIGRpYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgICBwaG9uZTogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIiA/IHJlcz8uZnJvbSA6IHJlcz8udG8sXG4gICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOnJlcy5pZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IHJlcy5uYW1lIHx8IHJlcz8uZnJvbU5hbWUgfHwgcmVzPy50b05hbWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZihpbmRleCAhPSAtMSAmJiByZXMuaXNMZWZ0KXtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0/LmlkID09IHRoaXMuY3VycmVudENhbGw/LmlkKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCA/IHRoaXMuY3VycmVudENhbGxMaXN0WzBdIDoge307XG4gICAgICAgICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsPy5pc0hvbGQgJiYgIXRoaXMuY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZSl7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgaG9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlOiB0aGlzLmN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0WzBdLmlzSG9sZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHRoaXMuY3VycmVudENhbGw/LmlzSG9sZCAmJiB0aGlzLmN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbmZlcmVuY2VDYWxsbGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigoaXRlbTphbnkpPT5pdGVtLmlzQ29uZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmZlcmVuY2VDYWxsbGlzdC5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogY29uZmVyZW5jZUNhbGxsaXN0Lm1hcCgoaXRlbTphbnkpPT5pdGVtLnBhcnRpY2lwYW50SWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlOiB0aGlzLmN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2VcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKChpdGVtOmFueSk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0ZW0uaXNDb25mZXJlbmNlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pc0hvbGQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uaXNIb2xkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYoaW5kZXggIT0gLTEpe1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0W2luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgIC4uLnJlcywgXG4gICAgICAgICAgICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJywgXG4gICAgICAgICAgICAgICAgICBpc0luY29taW5nQ2FsbDogcmVzLmRpcmVjdGlvbiA9PSBcImluY29taW5nLWNhbGxcIixcbiAgICAgICAgICAgICAgICAgIGlzSG9sZDogcmVzLmlzSG9sZCxcbiAgICAgICAgICAgICAgICAgIGlzTXV0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHJlcy5pc0NvbmZlcmVuY2UsXG4gICAgICAgICAgICAgICAgICBpc0FjY2VwdENhbGw6IHRoaXMuZ2V0U3RhdHVzKHJlcyksXG4gICAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgcGhvbmU6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIgPyByZXM/LmZyb20gOiByZXM/LnRvLFxuICAgICAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDpyZXMuaWQsXG4gICAgICAgICAgICAgICAgICBuYW1lOiByZXMubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZXtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4ucmVzLCBcbiAgICAgICAgICAgICAgICBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJywgXG4gICAgICAgICAgICAgICAgaXNJbmNvbWluZ0NhbGw6IHJlcy5kaXJlY3Rpb24gPT0gXCJpbmNvbWluZy1jYWxsXCIsXG4gICAgICAgICAgICAgICAgaXNIb2xkOiByZXMuaXNIb2xkLFxuICAgICAgICAgICAgICAgIGlzTXV0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNDb25mZXJlbmNlOiByZXMuaXNDb25mZXJlbmNlLFxuICAgICAgICAgICAgICAgIGlzQWNjZXB0Q2FsbDogdGhpcy5nZXRTdGF0dXMocmVzKSxcbiAgICAgICAgICAgICAgICBkaWFsOiB0cnVlLFxuICAgICAgICAgICAgICAgIHBob25lOiByZXMuZGlyZWN0aW9uID09IFwiaW5jb21pbmctY2FsbFwiID8gcmVzPy5mcm9tIDogcmVzPy50byxcbiAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOnJlcy5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiByZXMubmFtZSB8fCByZXM/LmZyb21OYW1lIHx8IHJlcz8udG9OYW1lLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kKChpdGVtOmFueSk9PiBpdGVtLmlzQWNjZXB0Q2FsbCAmJiAhaXRlbS5pc0hvbGQpO1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnY3VycmVudENhbGxMaXN0JywgdGhpcy5jdXJyZW50Q2FsbExpc3QpO1xuICAgICAgICB9IGVsc2UgaWYoIXRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoKXtcbiAgICAgICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSBbXTtcbiAgICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICB0aGlzLmlzQ2FsbEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHVzKHJlczogYW55KSB7XG4gICAgY29uc3Qgc3RhdHVzTGlzdCA9IFtcImFuc3dlcmVkXCIsIFwicGFydGljaXBhbnQtaG9sZFwiLCBcInBhcnRpY2lwYW50LW11dGVcIiwgXCJwYXJ0aWNpcGFudC1qb2luXCIsIFwicXVldWVkXCIsIFwiaW4tcHJvZ3Jlc3NcIiwgXCJyaW5naW5nXCIsXCJpbml0aWF0ZWRcIl07XG4gICAgaWYoc3RhdHVzTGlzdC5pbmNsdWRlcyhyZXMuc3RhdHVzKSl7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgLy8gfSwgMzAwMCk7XG5cbiAgfVxuXG4gIEdldENvbnRhY3RzTGlzdCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB8fCAnJztcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucmVhZENvbnRhY3RzKHRva2VuKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0FQSSBSZXNwb25zZTonLCByZXMpO1xuXG4gICAgICAgIC8vIE5vdGU6IENhcGl0YWwgQiBpbiBwaG9uZUJvb2tcbiAgICAgICAgaWYgKHJlcyAmJiByZXMucGhvbmVCb29rKSB7XG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcy5waG9uZUJvb2s7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvbnRhY3RzIGFycmF5OicsIHRoaXMuY29udGFjdHMpO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgICAgIHRoaXMuY29udGFjdHMgPSByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdDb250YWN0cyBhcnJheTonLCB0aGlzLmNvbnRhY3RzKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjb250YWN0czonLCBlcnJvcik7XG4gICAgICAgIHRoaXMuY29udGFjdHMgPSBbXTtcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIGFkZFJlczogYW55O1xuICBhc3luYyBzdGFydENhbGwoY2FsbERhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGNhbGxEYXRhLCAnY2FsbERhdGEnKTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IHRydWU7XG4gICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICBjaGFubmVsSWQ6IGVudmlyb25tZW50LmNoYW5uZWxJZCxcbiAgICAgICAgdXNlcklkOiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndXNlcklkJyksXG4gICAgICAgIHRvOiBjYWxsRGF0YS5waG9uZSxcbiAgICAgICAgZnJvbU51bWJlcjogY2FsbERhdGEuZnJvbSxcbiAgICAgICAgc2NvcGU6ICdsb2NhbCcsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaW5pdGlhdGVDYWxsKHBheWxvYWQpO1xuICAgICAgdGhpcy5jb25mZXJlbmNlSWQgPSByZXNwb25zZT8uY2FsbGF1dGg/LmlkO1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDApIHtcbiAgICAgICAgY29uc3QgeyBpZDogY2FsbEF1dGhJZCwgcmVjb3JkQ2FsbCB9ID0gYXdhaXQgdGhpcy5nZXRDYWxsQXV0aElkKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5nZXRVc2VySW5mb3JtYXRpb24oY2FsbEF1dGhJZClcbiAgICAgICAgdGhpcy5yZWNvcmRDYWxsID0gcmVjb3JkQ2FsbDsgLy8gU3RvcmUgdGhlIHJlY29yZENhbGwgdmFsdWVcbiAgICAgICAgY29uc3QgdG9rZW5EYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmdldE91dGdvaW5nQ2FsbFRva2VuKGNhbGxBdXRoSWQpO1xuICAgICAgICBhd2FpdCB0aGlzLmNvbm5lY3RUb0RldmljZSh0b2tlbkRhdGEudG9rZW4sIGNhbGxEYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wb2xsQ2FsbFN0YXR1cyhjYWxsQXV0aElkKTtcblxuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hZGRSZXMgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcbiAgICAgICAgICAgICAgZnJvbTogY2FsbERhdGE/LmZyb20sXG4gICAgICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXG4gICAgICAgICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBjYWxsRGF0YT8ucGhvbmUsXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHsgLi4uY2FsbERhdGEsIHBhcnRpY2lwYW50SWQ6IHRoaXMuYWRkUmVzPy5wYXJ0aWNpcGFudElkLGlzSG9sZDogZmFsc2UsIGlzTGVmdDogZmFsc2UsIGlzSW5jb21pbmdDYWxsOiBmYWxzZSwgaXNDb25mZXJlbmNlOiBmYWxzZSwgaXNBY2NlcHRDYWxsOiB0cnVlfTtcbiAgICAgICAgICAgIC8vIHRoaXMuY2FsbFsnY2FsbEluZm8nXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYWxsRGF0YSkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3Rlc3QxMTExMTEnKTtcbiAgICAgICAgICAgIC8vIHRoaXMuY3VycmVudENhbGwgPSB7Li4udGhpcy5jYWxsRGF0YSwgaW1nOiBjYWxsRGF0YS5pbWcgfHwnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyd9O1xuICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBpc0FjY2VwdENhbGwgYmFzZWQgb24gY3VycmVudCBjYWxsIHN0YXRlIHRvIGVuc3VyZSBVSSByZW5kZXJzIGlmIGFscmVhZHkgY29ubmVjdGVkXG4gICAgICAgICAgICAvLyB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHtcbiAgICAgICAgICAgIC8vICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgICAgICAgICAgIC8vICAgaW1nOiBjYWxsRGF0YS5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnLFxuICAgICAgICAgICAgLy8gICBpc0FjY2VwdENhbGw6IHRydWVcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0luaXRpYWwgcGFydGljaXBhbnRJZDonLCB0aGlzLmFkZFJlcz8ucGFydGljaXBhbnRJZCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIGluaXRpYWwgcGFydGljaXBhbnQ6JywgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgICAvLyBQb2xsIHRoZSBzdGF0dXMgZm9yIDMwLTQ1IHNlY29uZHNcbiAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMSkge1xuICAgICAgICBzd2FsKFwiRXJyb3JcIiwgcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyLz5cIiksIFwiZXJyb3JcIik7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MicpXG4gICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IpO1xuICAgICAgY29uc29sZS5sb2coJ3Rlc3QzJylcbiAgICAgIHRoaXMuZW5kQ2FsbCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSG9sZENhbGwoYzogYW55KSB7XG4gICAgY29uc29sZS5sb2coYywgJ2RzZHNkc2RzZHNkc2Fkc2EnKTtcbiAgICB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgcGFydGljaXBhbnRJZDogW2MucGFydGljaXBhbnRJZF0sXG4gICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgaG9sZDogIWMuaG9sZCxcbiAgICAgIGlzQ29uZmVyZW5jZTogYz8uaXNDb25mZXJlbmNlXG4gICAgfSlcbiAgICBjLmhvbGQgPSAhYy5ob2xkO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIG9uRW5kQ2FsbChjOiBhbnksIGlzQWxsQ2FsbEVuZD86IGJvb2xlYW4pIHtcbiAgICBjb25zb2xlLmxvZyhjLCAnZHNkc2RzZHNkc2RzYWRzYScpO1xuICAgIGxldCBwYXJ0aWNpcGFudElkID0gaXNBbGxDYWxsRW5kID8gJ2FsbCcgOiBjLnBhcnRpY2lwYW50SWQgfHwgYy5wYXJ0aWNpcGFudElkO1xuICAgIGxldCByZXM6IGFueSA9IGF3YWl0IHRoaXMuZ2V0UmVtb3ZlUGFydGljaXBhbnRzKHBhcnRpY2lwYW50SWQsIHRoaXMuY29uZmVyZW5jZUlkKTtcbiAgICBpZihyZXM/LnN0YXR1cyA9PSAyMDEgJiYgcmVzPy5tZXNzYWdlID09ICdwYXJ0aWNpcGFudCBhbHJlYWR5IGxlZnQnKXtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0ucGFydGljaXBhbnRJZCAhPT0gYy5wYXJ0aWNpcGFudElkKTtcbiAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAwID8gdGhpcy5jdXJyZW50Q2FsbExpc3RbMF0gOiBudWxsO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvLmNvbmZlcmVuY2VTaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWF0ZUNhbGwocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pbml0aWF0ZUNhbGwocGF5bG9hZCkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBvbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRQYXJ0aWNpcGFudFRvQ2FsbChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmFkZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRDYWxsU3RhdHVzT2ZQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU3RhdHVzT2ZQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkOiBhbnksIGNvbmZlcmVuY2VJZDogYW55KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2FsbEF1dGhJZChyZXNwb25zZTogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5jYWxsYXV0aC5pZCxcbiAgICAgIHJlY29yZENhbGw6IHJlc3BvbnNlLmNhbGxhdXRoLnJlY29yZENhbGxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRPdXRnb2luZ0NhbGxUb2tlbihjYWxsQXV0aElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENvbmZlcmVuY2VDYWxsVG9rZW4oeyBhdXRoSWQ6IGNhbGxBdXRoSWQgfSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RUb0RldmljZSh0b2tlbjogYW55LCBjYWxsRGF0YTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xuICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcbiAgICAgIGNsb3NlUHJvdGVjdGlvbjogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5kZXZpY2UgPSBuZXcgRGV2aWNlKHRva2VuLnZhbHVlLCBvcHRpb25zKTtcbiAgICB0aGlzLmNhbGwgPSBhd2FpdCB0aGlzLmRldmljZS5jb25uZWN0KHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBGcm9tOiBjYWxsRGF0YS5mcm9tLFxuICAgICAgICBUbzogY2FsbERhdGEucGhvbmUsXG4gICAgICAgIEVudjogZW52aXJvbm1lbnQuYWJiLFxuICAgICAgICBUb2tlbjogdG9rZW4uaWQsXG4gICAgICAgIEV4dDogY2FsbERhdGEuZXh0TnVtXG4gICAgICB9LFxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHsgZGV2aWNlSWQ6ICdkZWZhdWx0JyB9IH0sXG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coJ3Rlc3Q5ODk5ODExMTExMScsIHRoaXMuY2FsbCk7XG4gICAgLy8gdGhpcy5jYWxsWydjYWxsSW5mbyddID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjYWxsRGF0YSkpO1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuXG4gICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgdGhpcy5kZXZpY2U/Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsPy5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FsbD8ub24oJ2Rpc2Nvbm5lY3QnLCAoaXRlbTogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygndGVzdC1kaXNjb25uZWN0JylcbiAgICAgIC8vIHRoaXMuZW5kQ2FsbCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsPy5vbigncmluZ2luZycsICgpID0+IHtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FsbD8ub24oJ3JlamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCd0ZXN0NScpXG4gICAgICB0aGlzLmVuZENhbGwoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FsbD8ub24oJ2FjY2VwdCcsICgpID0+IHtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcbiAgICAgIC8vIEVuc3VyZSB0aGUgYWN0aXZlIG91dGdvaW5nIGNhbGwgaXMgbWFya2VkIGFzIGFjY2VwdGVkIHNvIHRoZSBVSSBzd2l0Y2hlcyB0byB0aGUgY29ubmVjdGVkIHZpZXdcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBpZCA9IHRoaXMuY2FsbERhdGE/LnBhcnRpY2lwYW50SWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY3VycmVudENhbGxMaXN0KSAmJiB0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKGM6IGFueSkgPT4gKHBpZCAmJiBjPy5wYXJ0aWNpcGFudElkID09PSBwaWQpIHx8ICghcGlkICYmIGM/LnBob25lID09PSB0aGlzLmNhbGxEYXRhPy5waG9uZSkpO1xuICAgICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpZHhdLmlzQWNjZXB0Q2FsbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaWR4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgdXBkYXRpbmcgYWNjZXB0IHN0YXRlOicsIGUpO1xuICAgICAgfVxuICAgICAgLy8gU3RhcnQgcmVjb3JkaW5nIGlmIHJlY29yZENhbGwgaXMgdHJ1ZSBhbmQgY2FsbCBpcyBhY2NlcHRlZCBmb3IgMzAgc2Vjb25kc1xuICAgICAgLy8gaWYgKHRoaXMucmVjb3JkQ2FsbCkge1xuICAgICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgICBpZiAodGhpcy5pc1JlY29yZGluZykgcmV0dXJuOyAvLyBJZiBhbHJlYWR5IHJlY29yZGluZywgc2tpcFxuICAgICAgLy8gICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcbiAgICAgIC8vICAgfSwgMzAwMDApO1xuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XG4gICAgICAvLyB9XG4gICAgfSk7XG4gICAgdGhpcy5jYWxsPy5vbignbWVzc2FnZVJlY2VpdmVkJywgKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFRpbWVyKCkge1xuICAgIGxldCBzZWNvbmRzID0gMDtcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBzZWNvbmRzKys7XG4gICAgICB0aGlzLnRpbWVyID0gdGhpcy5mb3JtYXRUaW1lKHNlY29uZHMpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wVGltZXIoKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgIHRoaXMudGltZXIgPSAnMDA6MDAnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRUaW1lKHRvdGFsU2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyA2MCk7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHRvdGFsU2Vjb25kcyAlIDYwO1xuICAgIHJldHVybiBgJHt0aGlzLnBhZChtaW51dGVzKX06JHt0aGlzLnBhZChzZWNvbmRzKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlIDwgMTAgPyBgMCR7dmFsdWV9YCA6IGAke3ZhbHVlfWA7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XG4gICAgc3dhbChcIkVycm9yXCIsIGVycm9yLCBcImVycm9yXCIpO1xuICB9XG5cbiAgLy8gZW5kQ2FsbCgpIHtcbiAgLy8gICBjb25zb2xlLmxvZygnZW5kQ2FsbCgpIGNhbGxlZCcpO1xuICAvLyAgIGNvbnNvbGUubG9nKCdDdXJyZW50IGNhbGw6JywgdGhpcy5jYWxsPy5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuICAvLyAgIGNvbnNvbGUubG9nKCdIZWxkIGNhbGwgZXhpc3RzOicsICEhdGhpcy5oZWxkQ2FsbCk7XG5cbiAgLy8gICAvLyBEaXNjb25uZWN0IHRoZSBjdXJyZW50IGFjdGl2ZSBjYWxsXG4gIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAvLyAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcbiAgLy8gICAgIHRoaXMuY2FsbCA9IHVuZGVmaW5lZDtcbiAgLy8gICB9XG5cbiAgLy8gICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gIC8vICAgdGhpcy5zdG9wVGltZXIoKTtcblxuICAvLyAgIC8vIElmIHRoZXJlJ3MgYSBoZWxkIGNhbGwsIG1ha2UgaXQgYWN0aXZlXG4gIC8vICAgaWYgKHRoaXMuaGVsZENhbGwpIHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKCdSZXN1bWluZyBoZWxkIGNhbGw6JywgdGhpcy5oZWxkQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuXG4gIC8vICAgICAvLyBNYWtlIGhlbGQgY2FsbCB0aGUgYWN0aXZlIGNhbGxcbiAgLy8gICAgIHRoaXMuY2FsbCA9IHRoaXMuaGVsZENhbGw7XG4gIC8vICAgICB0aGlzLmhlbGRDYWxsID0gdW5kZWZpbmVkO1xuICAvLyAgICAgLy8gdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgLy8gICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gISF0aGlzLmhlbGRDYWxsO1xuXG5cbiAgLy8gICAgIC8vIFVubXV0ZSB0aGUgcmVzdW1lZCBjYWxsXG4gIC8vICAgICB0aGlzLmNhbGwubXV0ZShmYWxzZSk7XG5cbiAgLy8gICAgIC8vIFVwZGF0ZSBVSSB3aXRoIHRoZSByZXN1bWVkIGNhbGwgaW5mb1xuICAvLyAgICAgY29uc3QgZnJvbU51bWJlciA9IHRoaXMuY2FsbC5wYXJhbWV0ZXJzWydGcm9tJ107XG4gIC8vICAgICBjb25zdCBjYWxsZXJOYW1lID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgLy8gICAgIGNvbnN0IGNhbGxlckltZyA9IHRoaXMuY2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuXG4gIC8vICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAvLyAgICAgICAuLi50aGlzLmNhbGxEYXRhLFxuICAvLyAgICAgICBwaG9uZTogZnJvbU51bWJlcixcbiAgLy8gICAgICAgZGlzcGxheU51bTogZnJvbU51bWJlcixcbiAgLy8gICAgICAgbmFtZTogY2FsbGVyTmFtZSxcbiAgLy8gICAgICAgaW1nOiBjYWxsZXJJbWdcbiAgLy8gICAgIH07XG5cbiAgLy8gICAgIC8vIFJlc3RhcnQgdGltZXIgZm9yIHRoZSByZXN1bWVkIGNhbGxcbiAgLy8gICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAvLyAgICAgdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xuXG4gIC8vICAgICBjb25zb2xlLmxvZygnSGVsZCBjYWxsIGlzIG5vdyBhY3RpdmU6JywgdGhpcy5jYWxsRGF0YSk7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIC8vIE5vIGhlbGQgY2FsbCwgY29tcGxldGVseSBlbmRcbiAgLy8gICAgIGNvbnNvbGUubG9nKCdObyBoZWxkIGNhbGwsIGVuZGluZyBjb21wbGV0ZWx5Jyk7XG4gIC8vICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gIC8vICAgICB0aGlzLm1heGltaXNlRGlhbHBhZCgpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGFzeW5jIGVuZENhbGwoaXNBbGxDYWxsRW5kPzogYm9vbGVhbikge1xuICAgIGNvbnNvbGUubG9nKCdlbmRDYWxsKCkgY2FsbGVkJyk7XG4gICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgY2FsbDonLCB0aGlzLmNhbGw/LnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG4gICAgY29uc29sZS5sb2coJ0hlbGQgY2FsbCBleGlzdHM6JywgISF0aGlzLmhlbGRDYWxsKTtcbiAgICAvLyBMZWF2aW5nIGNvbmZlcmVuY2Ugc3RhdGUgd2hlbiBlbmRpbmcgY3VycmVudCBjYWxsIGFjdGlvblxuICAgIHRoaXMuaXNDb25mZXJlbmNlID0gZmFsc2U7XG5cbiAgICAvLyBpZiAodGhpcy5jYWxsKSB7XG4gICAgLy8gICAgIHRoaXMuY2FsbC5kaXNjb25uZWN0KCk7XG4gICAgLy8gICAgIHRoaXMuY2FsbC5yZWplY3QoKTtcbiAgICAvLyAgICAgdGhpcy5jYWxsID0gdW5kZWZpbmVkO1xuICAgIC8vIH1cblxuICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIGlmKGlzQWxsQ2FsbEVuZCl7XG4gICAgICB0aGlzLm9uRW5kQ2FsbCh7fSwgaXNBbGxDYWxsRW5kKTtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gW107XG4gICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuY3VycmVudENhbGwsIGlzQWxsQ2FsbEVuZCk7XG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigoYzogYW55KSA9PiBjPy5wYXJ0aWNpcGFudElkICE9PSB0aGlzLmN1cnJlbnRDYWxsLnBhcnRpY2lwYW50SWQpO1xuICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXS5pc0hvbGQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0WzBdO1xuICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbdGhpcy5jdXJyZW50Q2FsbD8ucGFydGljaXBhbnRJZF0sXG4gICAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgICAgIGhvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICBpc0NvbmZlcmVuY2U6IHRoaXMuY3VycmVudENhbGw/LmlzQ29uZmVyZW5jZVxuICAgICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiAodGhpcy5oZWxkQ2FsbCkge1xuICAgIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gICAgIHRoaXMub25FbmRDYWxsKHRoaXMuY2FsbD8uY2FsbEluZm8sIGlzQWxsQ2FsbEVuZCk7XG4gICAgLy8gICB9XG4gICAgLy8gICBjb25zb2xlLmxvZygnUmVzdW1pbmcgaGVsZCBjYWxsOicsIHRoaXMuaGVsZENhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcblxuICAgIC8vICAgLy8gUHJvbW90ZSBoZWxkIGNhbGxcbiAgICAvLyAgIC8vIHRoaXMuY2FsbCA9IHRoaXMuaGVsZENhbGw7XG4gICAgLy8gICB0aGlzLmhlbGRDYWxsID0gdW5kZWZpbmVkO1xuICAgIC8vICAgLy8gdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgICAvLyAgIC8vIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7IC8vIEVuc3VyZSBVSSByZW5kZXJzXG5cbiAgICAvLyAgIC8vIHRoaXMuY2FsbC5tdXRlKGZhbHNlKTtcblxuICAgIC8vICAgLy8gVXBkYXRlIGNhbGxEYXRhXG4gICAgLy8gICBjb25zdCBmcm9tTnVtYmVyID0gdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICAvLyAgIGNvbnN0IGNhbGxlck5hbWUgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nO1xuICAgIC8vICAgY29uc3QgY2FsbGVySW1nID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG5cbiAgICAvLyAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgLy8gICAgIHBob25lOiBmcm9tTnVtYmVyLFxuICAgIC8vICAgICBkaXNwbGF5TnVtOiBmcm9tTnVtYmVyLFxuICAgIC8vICAgICBuYW1lOiBjYWxsZXJOYW1lLFxuICAgIC8vICAgICBpbWc6IGNhbGxlckltZ1xuICAgIC8vICAgfTtcblxuICAgIC8vICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgLy8gICB0aGlzLmRpc2JhbGVFbmRDYWxsQnRuID0gZmFsc2U7XG5cbiAgICAvLyAgIC8vIEZvcmNlIFVJIHVwZGF0ZVxuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuXG4gICAgLy8gICBjb25zb2xlLmxvZygnSGVsZCBjYWxsIGlzIG5vdyBhY3RpdmU6JywgdGhpcy5jYWxsRGF0YSk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdObyBoZWxkIGNhbGwsIGVuZGluZyBjb21wbGV0ZWx5Jyk7XG4gICAgLy8gICBjb25zb2xlLmxvZygndGVzdDYnKVxuICAgIC8vICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAgIC8vICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vICAgICB0aGlzLm9uRW5kQ2FsbCh0aGlzLmNhbGw/LmNhbGxJbmZvLCBpc0FsbENhbGxFbmQpO1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gICB9XG4gICAgLy8gICB0aGlzLm1heGltaXNlRGlhbHBhZCgpO1xuICAgIC8vIH1cbiAgfVxuXG5cbiAgdG9nZ2xlTXV0ZSgpIHtcbiAgICB0aGlzLmlzTXV0ZSA9ICF0aGlzLmlzTXV0ZTtcbiAgICB0aGlzLmNhbGw/Lm11dGUodGhpcy5pc011dGUpO1xuICB9XG4gIHRvZ2dsZUtleXBhZCgpIHtcbiAgICB0aGlzLnNob3dLZXlwYWQgPSAhdGhpcy5zaG93S2V5cGFkO1xuICAgIHRoaXMuY2FsbElucHV0ID0gJyc7XG4gIH1cbiAgdG9nZ2xlQ29udGFjdHNQYW5lbChpc1JlbW92ZT86IGJvb2xlYW4pIHtcbiAgICBpZihpc1JlbW92ZSl7XG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQgPSAhdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwgPSAhdGhpcy5zaG93Q29udGFjdHNQYW5lbDtcbiAgICAgIHRoaXMuR2V0Q29udGFjdHNMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgYWRkUmVtb3ZlUGFydGljaXBhbnQoKSB7XG4gICAgLy8gY29uc3QgY29uZmVyZW5jZVNJZCA9IHRoaXMuYWRkUmVzPy5jb25mZXJlbmNlU2lkO1xuICAgIHRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudCA9ICF0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQ7XG4gICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyh0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvLmNvbmZlcmVuY2VTaWQpO1xuICB9XG5cbiAgYXN5bmMgYWRkKGRhdGE/OiBhbnkpIHtcbiAgICAvLyBpZihkYXRhPy5zdGF0dXMgIT0gJ3JpbmdpbmcnKXtcbiAgICB0aGlzLmNvbmZlcmVuY2VJZCA9IHRoaXMudHdpbGlvU2VydmljZS5jb25mZXJlbmNlQ2FsbEluZm8uY29uZmVyZW5jZUlkO1xuICAgIGlmKHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEgJiYgdGhpcy5jdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsKXtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOmFueSk9Pml0ZW0ucGFydGljaXBhbnRJZCA9PSB0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkKTtcbiAgICAgIGlmKGluZGV4ICE9IC0xKSB7XG4gICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpbmRleF0uaXNIb2xkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgIHBhcnRpY2lwYW50SWQ6IHRoaXMuY3VycmVudENhbGw/LmlzSW5jb21pbmdDYWxsID8gW3RoaXMuY3VycmVudENhbGw/LmlkXSA6IFt0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkXSxcbiAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgaG9sZDogdHJ1ZSxcbiAgICAgICAgaXNDb25mZXJlbmNlOiB0aGlzLmN1cnJlbnRDYWxsPy5pc0NvbmZlcmVuY2VcbiAgICAgIH0pO1xuICAgICAgZGF0YS5pc0hvbGQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jYWxsID0gYXdhaXQgdGhpcy50d2lsaW9TZXJ2aWNlLmNvbm5lY3QoJycpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbCwgJ2NhbGxDb25uZWN0Jyk7XG4gICAgZGF0YS5pc0FjY2VwdENhbGwgPSB0cnVlO1xuICAgIHRoaXMuY3VycmVudENhbGwgPSBkYXRhO1xuICAgIC8vIH0gZWxzZSBpZihkYXRhPy5zdGF0dXMgPT0gJ3JpbmdpbmcnKXtcbiAgICAvLyAgIHRoaXMudHdpbGlvU2VydmljZS5hZGRJbmNvbWluZ1BhcnRpY2lwYW50KGRhdGE/LmlkLCB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvLmNvbmZlcmVuY2VJZCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAvLyAgICAgY29uc29sZS5sb2coZGF0YSwnYmhoaGhoaGhoaGhoaGhoaGhoaGgnKVxuICAgIC8vICAgfSlcbiAgICAvLyB9XG4gICAgXG4gICAgLy8gdGhpcy5kZXZpY2UgPSBuZXcgRGV2aWNlKCk7L1xuICAgIC8vIERldmljZS5jb25uZWN0KHsgY29uZmVyZW5jZU5hbWU6ICdteS1jb25mZXJlbmNlLXJvb20nIH0pO1xuICAgIC8vIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSh7IGNvbmZlcmVuY2VOYW1lOiAnbXktY29uZmVyZW5jZS1yb29tJyB9KTtcbiAgfVxuXG4gIHJlamVjdENhbGxGcm9tTGlzdChkYXRhPzogYW55KSB7XG4gICAgY29uc29sZS5sb2coZGF0YSwnMjY2NTY1NjU1JylcbiAgICAvLyB0aGlzLnR3aWxpb1NlcnZpY2UucmVqZWN0SW5jb21pbmdQYXJ0aWNpcGFudChkYXRhPy5pZCwgdGhpcy50d2lsaW9TZXJ2aWNlLmNvbmZlcmVuY2VDYWxsSW5mby5jb25mZXJlbmNlSWQpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgLy8gICBjb25zb2xlLmxvZyhkYXRhLCdiaGhoaGhoaGhoaGhoaGhoaGhoaCcpXG4gICAgLy8gfSlcbiAgfVxuICBhc3luYyBjYWxsQ29udGFjdChjb250YWN0OiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnQWRkaW5nIHBhcnRpY2lwYW50OicsIGNvbnRhY3QpO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmNhbGwnLCB0aGlzLmNhbGwpXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY2FsbCcsIHRoaXMuY2FsbC5zdGF0dXMoKSlcbiAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGFjdGl2ZSBjYWxsXG4gICAgLy8gaWYgKCF0aGlzLmNhbGwgfHwgdGhpcy5jYWxsLnN0YXR1cygpICE9PSAnb3BlbicpIHtcbiAgICAvLyAgIGNvbnNvbGUuZXJyb3IoJ05vIGFjdGl2ZSBjYWxsJyk7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuXG4gICAgLy8gR2V0IHRoZSBwaG9uZSBudW1iZXIgZnJvbSB0aGUgY29udGFjdFxuICAgIGNvbnN0IHBob25lTnVtYmVyID0gY29udGFjdD8ubnVtYmVyc0xpc3Q/LlswXT8ubnVtYmVyO1xuICAgIGNvbnN0IGN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZCgoYzogYW55KSA9PiBjPy5waG9uZSA9PT0gcGhvbmVOdW1iZXIpO1xuICAgIGlmICghcGhvbmVOdW1iZXIgfHwgY3VycmVudENhbGwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHBob25lIG51bWJlciBmb3VuZCBmb3IgY29udGFjdCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZih0aGlzLmlzQ29uZmVyZW5jZSl7XG4gICAgICAgIGxldCBkYXRhOmFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xuICAgICAgICAgIGZyb206IHRoaXMuY2FsbERhdGE/LmZyb20gfHwgdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXIsXG4gICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcbiAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcGhvbmVOdW1iZXIsXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAgICAgICAvLyAuLi50aGlzLmNhbGxEYXRhLFxuICAgICAgICAgIHBob25lOiBwaG9uZU51bWJlcixcbiAgICAgICAgICBkaXNwbGF5TnVtOiBwaG9uZU51bWJlcixcbiAgICAgICAgICBuYW1lOiBjb250YWN0Py5uYW1lIHx8IGAke2NvbnRhY3Q/LmZpcnN0TmFtZX0gJHtjb250YWN0Py5sYXN0TmFtZX1gIHx8IHBob25lTnVtYmVyLFxuICAgICAgICAgIGltZzogY29udGFjdD8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBkYXRhPy5wYXJ0aWNpcGFudElkLFxuICAgICAgICAgIGZyb206IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxuICAgICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICAgICAgICBpc0hvbGQ6IGZhbHNlLFxuICAgICAgICAgIGlzTGVmdDogZmFsc2UsXG4gICAgICAgICAgaXNDb25mZXJlbmNlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5jYWxsRGF0YSwgJ3RoaXMuY2FsbERhdGE1NjU2JylcbiAgICAgICAgY29uc29sZS5sb2coJ3Rlc3QxMTExMTE1NTU1NTU1NTU1Jyk7XG4gICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmNhbGxEYXRhO1xuICAgICAgICAvLyB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHsuLi50aGlzLmNhbGxEYXRhfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUGFydGljaXBhbnQgYWRkZWQgdG8gY29uZmVyZW5jZTpcIiwgcGhvbmVOdW1iZXIpO1xuICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XG4gICAgICAgIGlmKGM/LnBhcnRpY2lwYW50SWQgJiYgIWM/LmlzSG9sZCl7XG4gICAgICAgICAgYy5pc0hvbGQgPSB0cnVlO1xuICAgICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXG4gICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICAgICAgaG9sZDogYz8uaXNIb2xkLFxuICAgICAgICAgICAgaXNDb25mZXJlbmNlOiBjPy5pc0NvbmZlcmVuY2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBQdXQgY3VycmVudCBjYWxsIG9uIGhvbGRcbiAgICAgIC8vIHRoaXMuaGVsZENhbGwgPSB0aGlzLmNhbGw7XG4gICAgICB0aGlzLmlzQ2FsbE9uSG9sZCA9IHRydWU7XG4gICAgICAvLyB0aGlzLmhlbGRDYWxsLm11dGUodHJ1ZSk7XG4gICAgICAvLyB0aGlzLmhlbGRDYWxsWydwYXJhbWV0ZXJzJ11bJ2NhbGxlcl9uYW1lJ10gPSB7IC4uLnRoaXMuY2FsbERhdGEgfVxuICAgICAgLy8gdGhpcy5jYWxsPW51bGxcbiAgICAgIC8vIENsb3NlIGNvbnRhY3RzIHBhbmVsIGFuZCBzaG93IHJpbmcgYW5pbWF0aW9uXG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIC8vIFVwZGF0ZSBVSSB0byByZWZsZWN0IHRoZSBuZXcgb3V0Ym91bmQgbGVnIGJlaW5nIGRpYWxlZFxuICAgICAgY29uc3QgY29udGFjdE5hbWUgPSBbY29udGFjdD8uZmlyc3ROYW1lLCBjb250YWN0Py5taWRkbGVOYW1lLCBjb250YWN0Py5sYXN0TmFtZV1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpO1xuICAgICAgLy8gdGhpcy5jYWxsWydjYWxsSW5mbyddID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhbGxEYXRhKSk7XG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgY29uZmVyZW5jZSBJRCBmcm9tIHRoZSBjdXJyZW50IGNhbGwgb3IgdXNlIHRoZSBzdG9yZWQgb25lXG4gICAgICAvLyBjb25zdCBjb25mZXJlbmNlSWQgPSB0aGlzLmNvbmZlcmVuY2VJZDtcblxuICAgICAgaWYgKCF0aGlzLmNvbmZlcmVuY2VJZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gY29uZmVyZW5jZUlkIGZvdW5kIGZvciBhY3RpdmUgY2FsbFwiKTtcbiAgICAgICAgc3dhbChcIkVycm9yXCIsIFwiQ2Fubm90IGFkZCBwYXJ0aWNpcGFudDogY29uZmVyZW5jZSBub3QgZm91bmRcIiwgXCJlcnJvclwiKTtcbiAgICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBwYXJ0aWNpcGFudCB0byB0aGUgY29uZmVyZW5jZVxuICAgICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xuICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxuICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxuICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcGhvbmVOdW1iZXIsXG4gICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgLy8gICAuLi50aGlzLmNhbGxEYXRhLFxuICAgICAgLy8gICBwYXJ0aWNpcGFudElkOiAsXG4gICAgICAvLyB9XG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgICAvLyAuLi50aGlzLmNhbGxEYXRhLFxuICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXG4gICAgICAgIGRpc3BsYXlOdW06IHBob25lTnVtYmVyLFxuICAgICAgICBuYW1lOiBjb250YWN0Py5uYW1lIHx8IGAke2NvbnRhY3Q/LmZpcnN0TmFtZX0gJHtjb250YWN0Py5sYXN0TmFtZX1gIHx8IHBob25lTnVtYmVyLFxuICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgIHBhcnRpY2lwYW50SWQ6IGRhdGE/LnBhcnRpY2lwYW50SWQsXG4gICAgICAgIGZyb206IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gICAgICAgIGlzSG9sZDogZmFsc2UsXG4gICAgICAgIGlzTGVmdDogZmFsc2UsXG4gICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2VcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmNhbGxEYXRhLCAndGhpcy5jYWxsRGF0YScpXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGVzdDExMTExMScpO1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY2FsbERhdGE7XG4gICAgICAvLyB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHsuLi50aGlzLmNhbGxEYXRhfSk7XG4gICAgICBjb25zb2xlLmxvZyhcIlBhcnRpY2lwYW50IGFkZGVkIHRvIGNvbmZlcmVuY2U6XCIsIHBob25lTnVtYmVyKTtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBwYXJ0aWNpcGFudDonLCBlcnJvcik7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAvLyBSZXN0b3JlIGhlbGQgY2FsbCBvbiBlcnJvclxuICAgICAgaWYgKHRoaXMuaGVsZENhbGwpIHtcbiAgICAgICAgLy8gdGhpcy5jYWxsID0gdGhpcy5oZWxkQ2FsbDtcbiAgICAgICAgLy8gdGhpcy5oZWxkQ2FsbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5jYWxsLm11dGUoZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VTaWQ6IHN0cmluZykge1xuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRBbGxQYXJ0aWNpcGFudHMoY29uZmVyZW5jZVNpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSByZXMucGFydGljaXBhbnRzO1xuICAgIH0pXG4gIH1cblxuICAvLyBhY2NlcHRDb25jdXJyZW50Q2FsbChpbmNvbWluZ0NhbGw6IGFueSkge1xuICAvLyAgIGlmICghaW5jb21pbmdDYWxsKSByZXR1cm47XG5cbiAgLy8gICAvLyBQdXQgY3VycmVudCBjYWxsIG9uIGhvbGQgaW5zdGVhZCBvZiBkaXNjb25uZWN0aW5nXG4gIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAvLyAgICAgdGhpcy5oZWxkQ2FsbCA9IHRoaXMuY2FsbDtcbiAgLy8gICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gdHJ1ZTtcbiAgLy8gICAgIC8vIE11dGUgdGhlIGhlbGQgY2FsbFxuICAvLyAgICAgdGhpcy5oZWxkQ2FsbC5tdXRlKHRydWUpO1xuICAvLyAgIH1cblxuICAvLyAgIGluY29taW5nQ2FsbC5hY2NlcHQoKTtcbiAgLy8gICB0aGlzLmNhbGwgPSBpbmNvbWluZ0NhbGw7XG4gIC8vICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ107XG4gIC8vICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgLy8gICB0aGlzLmNhbGxEYXRhLmltZyA9IGluY29taW5nQ2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAvLyAgIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSBmYWxzZTtcbiAgLy8gICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuICAvLyAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcblxuICAvLyAgIC8vIFJlc2V0IHRpbWVyIGZvciBuZXcgY2FsbFxuICAvLyAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gIC8vICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyB9XG5cblxuICBhY2NlcHRDb25jdXJyZW50Q2FsbChpbmNvbWluZ0NhbGw6IGFueSkge1xuICAgIGlmICghaW5jb21pbmdDYWxsKSByZXR1cm47XG5cblxuICAgIC8vIFB1dCBjdXJyZW50IGNhbGwgb24gaG9sZCBpbnN0ZWFkIG9mIGRpc2Nvbm5lY3RpbmdcbiAgICAvLyBpZiAodGhpcy5jYWxsKSB7XG4gICAgLy8gLy8gICB0aGlzLmhlbGRDYWxsID0gdGhpcy5jYWxsO1xuICAgIC8vICAgdGhpcy5pc0NhbGxPbkhvbGQgPSB0cnVlO1xuICAgIC8vIC8vICAgLy8gTXV0ZSB0aGUgaGVsZCBjYWxsXG4gICAgLy8gLy8gICB0aGlzLmhlbGRDYWxsLm11dGUodHJ1ZSk7XG4gICAgLy8gLy8gfVxuXG4gICAgLy8gLy8gQWNjZXB0IHRoZSBuZXcgY2FsbFxuICAgIC8vIGluY29taW5nQ2FsbC5hY2NlcHQoKTtcbiAgICAvLyB0aGlzLmNhbGwgPSBpbmNvbWluZ0NhbGw7XG4gICAgLy8gdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ107XG4gICAgLy8gdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgICAvLyB0aGlzLmNhbGxEYXRhLmltZyA9IGluY29taW5nQ2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgIC8vIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSBmYWxzZTtcbiAgICAvLyB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuICAgIC8vIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcblxuICAgIC8vIC8vIPCfn6IgUmVtb3ZlIHRoZSBhY2NlcHRlZCBjYWxsIGZyb20gaW5jb21pbmcgbGlzdFxuICAgIC8vIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgPSAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCB8fCBbXSkuZmlsdGVyKFxuICAgIC8vICAgKGM6IGFueSkgPT4gYz8ucGFyYW1ldGVycz8uQ2FsbFNpZCAhPT0gaW5jb21pbmdDYWxsPy5wYXJhbWV0ZXJzPy5DYWxsU2lkXG4gICAgLy8gKTtcbiAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNOZXdJbmZvLmVtaXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCk7XG5cbiAgICAvLyAvLyDwn5WSIFJlc2V0IHRpbWVyIGZvciBuZXcgY2FsbFxuICAgIC8vIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgLy8gdGhpcy5zdGFydFRpbWVyKCk7XG5cbiAgICAvLyB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyBzd2FwQ2FsbHMoY2FsbEluZm86IGFueSkge1xuICAgIC8vIGlmICghdGhpcy5oZWxkQ2FsbCB8fCAhdGhpcy5jYWxsKSByZXR1cm47XG4gICAgY29uc29sZS5sb2codGhpcy5jYWxsLCAndGhpcy5jYWxsJyk7XG4gICAgY29uc29sZS5sb2codGhpcy5oZWxkQ2FsbCwgJ3RoaXMuaGVsZENhbGwnKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmN1cnJlbnRDYWxsTGlzdCwgJ3RoaXMuY3VycmVudENhbGxMaXN0Jyk7XG4gICAgY29uc29sZS5sb2coY2FsbEluZm8sICdjYWxsSW5mbyBmb3Igc3dhcENhbGxzJyk7XG4gICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XG4gICAgICBpZihjPy5wYXJ0aWNpcGFudElkICYmICFjPy5pc0hvbGQpe1xuICAgICAgICBjLmlzSG9sZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgaG9sZDogYz8uaXNIb2xkLFxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogYz8uaXNDb25mZXJlbmNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmKGNhbGxJbmZvPy5pc0hvbGQgJiYgYz8ucGFydGljaXBhbnRJZCA9PT0gY2FsbEluZm8/LnBhcnRpY2lwYW50SWQpe1xuICAgICAgICBjLmlzSG9sZCA9IGZhbHNlO1xuICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkXSxcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICAgIGhvbGQ6IGM/LmlzSG9sZCxcbiAgICAgICAgICBpc0NvbmZlcmVuY2U6IGM/LmlzQ29uZmVyZW5jZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IGM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAvLyAgIHBhcnRpY2lwYW50SWQ6IHRoaXMuY2FsbD8uY2FsbEluZm8/LnBhcnRpY2lwYW50SWQsXG4gICAgLy8gICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgIC8vICAgaG9sZDogdHJ1ZVxuICAgIC8vIH0pO1xuICAgIC8vIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgLy8gICBwYXJ0aWNpcGFudElkOiB0aGlzLmhlbGRDYWxsPy5jYWxsSW5mbz8ucGFydGljaXBhbnRJZCxcbiAgICAvLyAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgLy8gICBob2xkOiBmYWxzZVxuICAgIC8vIH0pO1xuICAgIGNvbnNvbGUubG9nKCdTd2FwcGluZyBjYWxscy4uLicpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdCZWZvcmUgc3dhcCAtIEFjdGl2ZSBjYWxsOicsIHRoaXMuY2FsbC5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdCZWZvcmUgc3dhcCAtIEhlbGQgY2FsbDonLCB0aGlzLmhlbGRDYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG5cbiAgICAvLyBTd2FwIHRoZSBjYWxsc1xuICAgIC8vIGNvbnN0IHRlbXAgPSB0aGlzLmNhbGw7XG4gICAgLy8gdGhpcy5jYWxsID0gdGhpcy5oZWxkQ2FsbDtcbiAgICAvLyB0aGlzLmhlbGRDYWxsID0gdGVtcDtcblxuXG4gICAgLy8gdGhpcy5jYWxsLm11dGUoZmFsc2UpO1xuICAgIC8vIHRoaXMuaGVsZENhbGwubXV0ZSh0cnVlKTtcblxuICAgIC8vIFVwZGF0ZSBVSSB3aXRoIGFjdGl2ZSBjYWxsIGluZm8gLSBleHRyYWN0IGZyb20gY2FsbCBwYXJhbWV0ZXJzXG4gICAgLy8gY29uc3QgZnJvbU51bWJlciA9IHRoaXMuY2FsbC5wYXJhbWV0ZXJzWydGcm9tJ107XG4gICAgLy8gY29uc3QgY2FsbGVyTmFtZSA9IHRoaXMuY2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ25hbWUnKSB8fCAnLSc7XG4gICAgLy8gY29uc3QgY2FsbGVySW1nID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgLy8gY29uc3QgZGlzcGxheU51bWJlciA9IHRoaXMuY2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2Rpc3BsYXlOdW1iZXInKSB8fCAnLSc7XG5cbiAgICAvLyBVcGRhdGUgY2FsbERhdGEgdG8gcmVmcmVzaCB0aGUgbWFpbiBVSVxuICAgIC8vIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgLy8gICAuLi50aGlzLmNhbGxEYXRhLFxuICAgIC8vICAgcGhvbmU6IGZyb21OdW1iZXIsXG4gICAgLy8gICBkaXNwbGF5TnVtOiAoZGlzcGxheU51bWJlciAmJiBkaXNwbGF5TnVtYmVyICE9PSAnLScpID8gZGlzcGxheU51bWJlciA6IGZyb21OdW1iZXIsXG4gICAgLy8gICBuYW1lOiAoY2FsbGVyTmFtZSAmJiBjYWxsZXJOYW1lICE9PSAnLScpID8gY2FsbGVyTmFtZSA6ICh0aGlzLmNhbGxEYXRhPy5uYW1lIHx8IGZyb21OdW1iZXIpLFxuICAgIC8vICAgaW1nOiBjYWxsZXJJbWcgfHwgdGhpcy5jYWxsRGF0YT8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1xuICAgIC8vIH07XG5cbiAgICAvLyBjb25zb2xlLmxvZygnQWZ0ZXIgc3dhcCAtIEFjdGl2ZSBjYWxsOicsIHRoaXMuY2FsbC5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdBZnRlciBzd2FwIC0gSGVsZCBjYWxsOicsIHRoaXMuaGVsZENhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcbiAgICAvLyBjb25zb2xlLmxvZygnVXBkYXRlZCBjYWxsRGF0YTonLCB0aGlzLmNhbGxEYXRhKTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5jdXJyZW50Q2FsbExpc3QgYWZ0ZXIgc3dhcCcsIHRoaXMuY3VycmVudENhbGxMaXN0KTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyBtZXJnZUNhbGxzKCkge1xuICAgIC8vIE1lcmdlIGZ1bmN0aW9uYWxpdHkgLSB1bm11dGUgYm90aCBjYWxscyBmb3IgY29uZmVyZW5jZVxuICAgIGlmICh0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcbiAgICAgICAgaWYoYz8ucGFydGljaXBhbnRJZCAmJiBjPy5pc0hvbGQpe1xuICAgICAgICAgIGMuaXNIb2xkID0gZmFsc2U7XG4gICAgICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgICAgICAgIHBhcnRpY2lwYW50SWQ6IFtjPy5wYXJ0aWNpcGFudElkXSxcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgICBob2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzQ29uZmVyZW5jZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgLy8gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgIC8vICAgcGFydGljaXBhbnRJZDogdGhpcy5oZWxkQ2FsbD8uY2FsbEluZm8/LnBhcnRpY2lwYW50SWQsXG4gICAgICAvLyAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAvLyAgIGhvbGQ6IGZhbHNlXG4gICAgICAvLyB9KTtcbiAgICAgIC8vIHRoaXMuaGVsZENhbGwubXV0ZShmYWxzZSk7XG4gICAgICAvLyB0aGlzLmNhbGwubXV0ZShmYWxzZSk7XG4gICAgICB0aGlzLmlzQ2FsbE9uSG9sZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGVuZEhlbGRDYWxsKCkge1xuICAgIC8vIGlmICh0aGlzLmhlbGRDYWxsKSB7XG4gICAgLy8gICB0aGlzLmhlbGRDYWxsLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyAgIHRoaXMuaGVsZENhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gICB0aGlzLmlzQ2FsbE9uSG9sZCA9IGZhbHNlO1xuICAgIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIH1cbiAgfVxuXG5cbiAgaGFzRGV0YWlsZWRJbmZvKGNhbGxEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNhbGxEYXRhKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdXNlckluZm8gZXhpc3RzIGFuZCBoYXMgbWVhbmluZ2Z1bCBkYXRhXG4gICAgaWYgKGNhbGxEYXRhLnVzZXJJbmZvICYmIGNhbGxEYXRhLnVzZXJJbmZvLmMyY0luZm9ybWF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBjYWxsRGF0YS51c2VySW5mby5jMmNJbmZvcm1hdGlvbjtcbiAgICAgICAgcmV0dXJuICEhKFxuICAgICAgICAgICAgaW5mby5zdWJqZWN0ICYmIGluZm8uc3ViamVjdCAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLmVtYWlsICYmIGluZm8uZW1haWwgIT09ICctJyB8fFxuICAgICAgICAgICAgaW5mby5tZXNzYWdlICYmIGluZm8ubWVzc2FnZSAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLnBvaW50TmFtZSAmJiBpbmZvLnBvaW50TmFtZSAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLnNvdXJjZU5hbWUgJiYgaW5mby5zb3VyY2VOYW1lICE9PSAnLScgfHxcbiAgICAgICAgICAgIGluZm8uZXh0ZW5zaW9uICYmIGluZm8uZXh0ZW5zaW9uICE9PSAnLScgfHxcbiAgICAgICAgICAgIGluZm8udXJsIHx8XG4gICAgICAgICAgICBpbmZvLmxhdGl0dWRlIHx8XG4gICAgICAgICAgICBpbmZvLmxvbmdpdHVkZVxuICAgICAgICApO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBvbkNsaWNrRXhwYW5kKGRhdGE/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCA9PT0gZGF0YSAmJiB0aGlzLmlzQ2xpY2tFeHBhbmQpIHtcbiAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPSBudWxsO1xuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsSW5mby5lbWl0KHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPSBkYXRhO1xuICAgIFxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGxbJ2lzQ2xpY2tFeHBhbmQnXSA9IHRydWU7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCAmJiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaCgoY2FsbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGwgIT09IHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbFsnaXNDbGlja0V4cGFuZCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGxJbmZvLmVtaXQodGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCk7XG4gICAgICAgIFxuICAgICAgICBpZighdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbC51c2VySW5mbyB8fCB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsLnVzZXJJbmZvLnN0YXR1cyA9PSAyMDEpe1xuICAgICAgICAgICAgLy8gdGhpcy5nZXRVc2VySW5mb3JtYXRpb24odGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBnZXRVc2VySW5mb3JtYXRpb24oaW5jb21pbmdDYWxsRGF0YTogYW55KSB7XG4gIC8vICAgbGV0IGRhdGEgPSB0aGlzLmZyb21FbnRyaWVzKEFycmF5LmZyb20oaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmVudHJpZXMoKSkpO1xuICAvLyAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oZGF0YVsndHdpbGlvQXV0aElkJ10pLnN1YnNjcmliZShcbiAgLy8gICByZXNwb25zZSA9PiB7XG4gIC8vICAgICBzZXRUaW1lb3V0KCgpPT57XG4gIC8vICAgICAgIGluY29taW5nQ2FsbERhdGFbJ3VzZXJJbmZvJ109cmVzcG9uc2VcbiAgLy8gICAgIH0sIDUwMDApXG4gIC8vICAgfSwgZXJyb3IgPT4ge1xuICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgcmVqZWN0Q29uY3VycmVudENhbGwoaW5jb21pbmdDYWxsOiBhbnkpIHtcblxuICAgIGlmICghaW5jb21pbmdDYWxsKSByZXR1cm47XG4gICAgaWYgKGluY29taW5nQ2FsbC5yZWplY3QpIHtcbiAgICAgIGluY29taW5nQ2FsbC5yZWplY3QoKTtcbiAgICB9XG4gICAgaWYgKGluY29taW5nQ2FsbC5kaXNjb25uZWN0KSBpbmNvbWluZ0NhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vIFJlbW92ZSBmcm9tIGxpc3RcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0ID0gKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgfHwgW10pLmZpbHRlcigoYzogYW55KSA9PiBjPy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBpbmNvbWluZ0NhbGw/LnBhcmFtZXRlcnM/LkNhbGxTaWQpO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsc05ld0luZm8uZW1pdCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0KTtcbiAgICAvLyBJZiBubyBtb3JlIGluY29taW5nLCBoaWRlIGJhbm5lclxuICAgIGlmICghdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCB8fCB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIG9uQ2FsbElucHV0cyhudW06IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihudW0pIHx8IG51bSA9PSAnKycgfHwgbnVtID09ICcqJyB8fCBudW0gPT0gJyMnKSB7XG4gICAgICAgIGlmIChudW0gPT0gJyMnKSB7XG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLWhhc2gtLm1wM2ApLnBsYXkoKTtcbiAgICAgICAgfSBlbHNlIGlmIChudW0gPT0gJyonKSB7XG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLXN0YXItLm1wM2ApLnBsYXkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtJHtudW19LS5tcDNgKS5wbGF5KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxJbnB1dCA9IHRoaXMuY2FsbElucHV0ICsgU3RyaW5nKG51bSk7XG4gICAgICAgIHRoaXMuc2hvd0NsZWFyQnRuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzdHIgPSBTdHJpbmcobnVtKTtcbiAgICAgIHRoaXMuY2FsbD8uc2VuZERpZ2l0cyhzdHIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cbiAgfVxuICBvbkNhbGxJbnB1dEVudGVyKGV2OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jYWxsPy5zZW5kRGlnaXRzKFN0cmluZyhldi5rZXkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG4gIH1cbiAgY2xvc2VJbmNvbWluZ0NhbGwoZGF0YTogYW55KSB7XG4gICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgICBpZiAoZGF0YS5zaG93KSB7XG4gICAgICAvL3RoaXMuc2hvd0NhbGxQcm9ncmVzc0V2ZW50LmVtaXQoKVxuICAgICAgLy8gaGFuZGxlIGluY29taW5nIGNhbGwgYWNjZXB0ZWRcbiAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgICAgdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xuICAgICAgLy8gdGhpcy5jYWxsID0gZGF0YS5jYWxsO1xuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaW5jb21pbmdEZXRhaWwgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xuICAgICAgdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgPSBpbmNvbWluZ0RldGFpbC5yZWNvcmRDYWxsO1xuXG4gICAgICBpZiAodGhpcy5pbmNvbWluZ1JlY29yZENhbGwpIHtcbiAgICAgICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmNvbWluZyBjYWxsIHJlamVjdGVkIG9yIGF1dG8tY2FuY2VsbGVkXG4gICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuICAgICAgLy8gSWYgdGhlcmUgaXMgTk8gYWN0aXZlIGNhbGwsIHRoZW4gcHJvcGFnYXRlIGVuZC4gT3RoZXJ3aXNlIGtlZXAgb25nb2luZyBVSS5cbiAgICAgIGlmICghdGhpcy5jYWxsIHx8IHRoaXMuY2FsbC5zdGF0dXMoKSAhPT0gJ29wZW4nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0NycpXG4gICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2xlYXJJbnB1dHMoKSB7XG4gICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dC5zbGljZSgwLCAtMSk7XG4gIH1cbiAgaXNNaW5pbWlzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWluaW1pc2VEaWFscGFkKCkge1xuICAgIHRoaXMubWluaW1pc2VFdmVudC5lbWl0KHRydWUpO1xuICAgIHRoaXMuaXNNaW5pbWlzZWQgPSB0cnVlO1xuICB9XG4gIG1heGltaXNlRGlhbHBhZCgpIHtcbiAgICB0aGlzLm1pbmltaXNlRXZlbnQuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5pc01pbmltaXNlZCA9IGZhbHNlO1xuICB9XG4gIHRvZ2dsZVJlY29yZGluZygpIHtcbiAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcbiAgICB9XG4gIH1cbiAgc3RhcnRSZWNvcmRpbmcoKSB7XG4gICAgbGV0IHNpZDtcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTaWQoKTtcbiAgICB0aGlzLmluY29taW5nQ2FsbFNpZCA9IGRldGFpbHMuY2FsbFNpZDtcbiAgICB0aGlzLmluY29taW5nUmVjb3JkQ2FsbCA9IGRldGFpbHMucmVjb3JkQ2FsbDtcbiAgICBzaWQgPSB0aGlzLmluY29taW5nQ2FsbFNpZCA/IHRoaXMuaW5jb21pbmdDYWxsU2lkIDogdGhpcy5jYWxsU2lkIHx8IHRoaXMuYWRkUmVzPy5jb25mZXJlbmNlU2lkO1xuXG4gICAgLy8gaWYgKCF0aGlzLmluY29taW5nUmVjb3JkQ2FsbCAmJiAhdGhpcy5yZWNvcmRDYWxsKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsUmVjb3JkaW5nKHNpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgdGhpcy50aW1lRWxhcHNlZCA9IDA7XG4gICAgICB0aGlzLnN0YXJ0VGltZXIxKCk7XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xuICAgIH0pO1xuICB9XG4gIHN0b3BSZWNvcmRpbmcoKSB7XG4gICAgLy8gaWYgKCF0aGlzLmluY29taW5nUmVjb3JkQ2FsbCAmJiAhdGhpcy5yZWNvcmRDYWxsKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbiAgcGF1c2VSZWNvcmRpbmcoKSB7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxTaWQgPSBkZXRhaWxzLmNhbGxTaWQ7XG4gICAgdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgPSBkZXRhaWxzLnJlY29yZENhbGw7XG4gICAgY29uc3Qgc2lkID0gdGhpcy5pbmNvbWluZ0NhbGxTaWQgPyB0aGlzLmluY29taW5nQ2FsbFNpZCA6IHRoaXMuY2FsbFNpZDtcblxuICAgIC8vIGlmICghdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgJiYgIXRoaXMucmVjb3JkQ2FsbCkge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cblxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5wYXVzZU9yUmVzdW1lUmVjb3JkaW5nKHNpZCwgJ3BhdXNlJykuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmdUaW1lcigpO1xuICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGF1c2luZyByZWNvcmRpbmc6JywgZXJyb3IpO1xuICAgICAgICAvLyBDb25zaWRlciB1cGRhdGluZyB0aGUgVUkgdG8gc2hvdyB0aGUgZXJyb3Igc3RhdGVcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHJlc3VtZVJlY29yZGluZygpIHtcbiAgICBsZXQgc2lkO1xuICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsU2lkID0gZGV0YWlscy5jYWxsU2lkO1xuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gZGV0YWlscy5yZWNvcmRDYWxsO1xuICAgIHNpZCA9IHRoaXMuaW5jb21pbmdDYWxsU2lkID8gdGhpcy5pbmNvbWluZ0NhbGxTaWQgOiB0aGlzLmNhbGxTaWQ7XG5cbiAgICAvLyBpZiAoIXRoaXMuaW5jb21pbmdSZWNvcmRDYWxsICYmICF0aGlzLnJlY29yZENhbGwpIHtcbiAgICAvLyAgIHJldHVybjsgLy8gU2tpcCBpZiByZWNvcmRpbmcgaXMgbm90IGVuYWJsZWRcbiAgICAvLyB9XG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnBhdXNlT3JSZXN1bWVSZWNvcmRpbmcoc2lkLCAncmVzdW1lJykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXN1bWluZyByZWNvcmRpbmcnLCBlcnJvcik7XG4gICAgfSk7XG4gIH1cbiAgc3RhcnRUaW1lcjEoKSB7XG4gICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IGludGVydmFsKDEwMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnRpbWVFbGFwc2VkKys7XG4gICAgfSk7XG4gIH1cbiAgc3RvcFJlY29yZGluZ1RpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IC8vIFBhdXNlIHRoZSB0aW1lclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgICAgICAgIC8vIE9wdGlvbmFsbHkgcmVzZXQgdGhlIHN1YnNjcmlwdGlvblxuICAgIH1cbiAgfVxuICBnZXRGb3JtYXR0ZWRUaW1lKCkge1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRoaXMudGltZUVsYXBzZWQgLyA2MCk7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMudGltZUVsYXBzZWQgJSA2MDtcbiAgICByZXR1cm4gYCR7bWludXRlc306JHtzZWNvbmRzIDwgMTAgPyAnMCcgOiAnJ30ke3NlY29uZHN9YDtcbiAgfVxuICBwb2xsQ2FsbFN0YXR1cyhjYWxsQXV0aElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtYXhUaW1lID0gMzAwMDA7IC8vIFBvbGwgZm9yIHVwIHRvIDMwIHNlY29uZHNcbiAgICBjb25zdCBwb2xsSW50ZXJ2YWwgPSAzMDAwOyAvLyBQb2xsIGV2ZXJ5IDMgc2Vjb25kc1xuICAgIGxldCBlbGFwc2VkVGltZSA9IDA7XG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIGVsYXBzZWRUaW1lICs9IHBvbGxJbnRlcnZhbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTdGF0dXMoY2FsbEF1dGhJZCkudG9Qcm9taXNlKCkgYXMgQ2FsbFN0YXR1c1Jlc3BvbnNlO1xuICAgICAgICBpZiAoc3RhdHVzUmVzcG9uc2UgJiYgc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMpIHtcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0dXMgPSBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscy5jYWxsU3RhdHVzO1xuICAgICAgICAgIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdpbi1wcm9ncmVzcycpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbFNpZCA9IHN0YXR1c1Jlc3BvbnNlLmNhbGxEZXRhaWxzLmNhbGxTaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWNvcmRDYWxsICYmICF0aGlzLmlzUmVjb3JkaW5nKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3Rlc3QxJylcbiAgICAgICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdyaW5naW5nJykge1xuICAgICAgICAgICAgLy8gQ29udGludWUgcG9sbGluZzsgZG8gbm90IGNsZWFyIHRoZSBpbnRlcnZhbCB5ZXRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICB9XG4gICAgICBpZiAoZWxhcHNlZFRpbWUgPj0gbWF4VGltZSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnTWF4IHBvbGxpbmcgdGltZSByZWFjaGVkLiBTdG9wcGluZyBwb2xsLicpO1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgfVxuICAgIH0sIHBvbGxJbnRlcnZhbCk7XG4gIH1cblxuICBnZXRVc2VySW5mb3JtYXRpb24oaWQ6IGFueSkge1xuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oaWQpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpXG4gICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG4gIGluY29taW5nQ2FsbHNOZXdMaXN0KGRhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGRhdGEsICduZXdJbmNvbWluZ0NhbGxzTGlzdE9VUicpXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCA9IGRhdGE7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mby5lbWl0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xuICB9XG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsSW5mbyhkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsID0gZGF0YTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNhbGxEYXRhLmRpYWwgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkXCJcbiAgICBbbmdDbGFzc109XCJ7J2NvbGxvcHMnOiBpc0NvbGxvcHMsICdpbmNvbWluZy1jYWxsLWNvbnRhaW5lcic6IHNlbGVjdGVkSW5jb21pbmdDYWxsPy5pc0NsaWNrRXhwYW5kLCAnY29udGFjdHMtb3Blbic6IHNob3dDb250YWN0c1BhbmVsIH1cIj5cbiAgICA8IS0tIDxkaXYgaWQ9XCJtaW5pbWl6ZS1idG4tZGl2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtaW5pbWl6ZS1idG5cIiAoY2xpY2spPVwibWluaW1pc2VEaWFscGFkKClcIj5cbiAgICAgICAgICAgIG1pbmltaXplXG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgPCEtLSA8bGliLWluY29taW5nLWNhbGwgKm5nSWY9XCJpbmNvbWluZ0NhbGxEaXYgJiYgIWlzQ29uY3VycmVudEluY29taW5nXCIgW2luY29taW5nQ2FsbERhdGFdPVwiY2FsbERhdGFcIlxuICAgICAgICBbZGV2aWNlSWRdPVwiZGV2aWNlSWRcIiBbbmV3SW5jb21pbmdDYWxsc0xpc3RdPVwibmV3SW5jb21pbmdDYWxsc0xpc3RcIlxuICAgICAgICAoY2xvc2VJbmNvbWluZ0NhbGxEaXYpPVwiY2xvc2VJbmNvbWluZ0NhbGwoJGV2ZW50KVwiIChpbmNvbWluZ0NhbGxzTmV3TGlzdCk9XCJpbmNvbWluZ0NhbGxzTmV3TGlzdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGVkSW5jb21pbmdDYWxsSW5mbyk9XCJzZWxlY3RlZEluY29taW5nQ2FsbEluZm8oJGV2ZW50KVwiPjwvbGliLWluY29taW5nLWNhbGw+IC0tPlxuICAgIHt7Y3VycmVudENhbGxMaXN0Lmxlbmd0aCB9fXR0dHR0dHR0dHR0dHR0dHR0dHR0XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmNvbWluZ0NhbGxEaXYgfHwgaXNDb25jdXJyZW50SW5jb21pbmcgfHwgdHJ1ZVwiPlxuICAgICAgICA8IS0tIEFsbCB0eXBlIENhbGwgSG9sZCBsaXN0ICAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1iYW5uZXJcIiAqbmdJZj1cImlzQ2FsbE9uSG9sZCAmJiBjdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaGVsZENhbGwgb2YgY3VycmVudENhbGxMaXN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1jb250ZW50XCIgKm5nSWY9XCJoZWxkQ2FsbD8uaXNIb2xkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBob2xkLWljb25cIj5wYXVzZV9jaXJjbGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbGFiZWxcIj5Ib2xkPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1uYW1lXCI+e3toZWxkQ2FsbD8ubmFtZSB8fCAnVW5rbm93biBudW1iZXInfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLW51bWJlclwiPnt7aGVsZENhbGw/LnBob25lIHx8ICcnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJoZWxkLWJ0biBzd2FwLWJ0blwiIChjbGljayk9XCJzd2FwQ2FsbHMoaGVsZENhbGwpXCIgdGl0bGU9XCJTd2FwIGNhbGxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+U3dhcDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWNvbnRlbnRcIiAqbmdJZj1cImhlbGRDYWxsPy5pc0luY29taW5nQ2FsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaG9sZC1pY29uXCI+cGhvbmVfY2FsbGJhY2s8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbGFiZWxcIj5JbmNvbWluZyBDYWxsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1uYW1lXCI+e3toZWxkQ2FsbD8ubmFtZSB8fCAnVW5rbm93biBudW1iZXInfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLW51bWJlclwiPnt7aGVsZENhbGw/LnBob25lIHx8ICcnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0bi13cmFwcGVyIHJlY2VpdmUtYnRuXCIgKm5nSWY9XCIhaGVsZENhbGw/LmlzQ2FsbENvbm5lY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJhZGQoaGVsZENhbGwpXCI+IGNhbGwgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4td3JhcHBlciByZWNlaXZlLWJ0blwiICpuZ0lmPVwiIWhlbGRDYWxsPy5pc0NhbGxDb25uZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9tZXJnZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0bi13cmFwcGVyIHJlY2VpdmUtYnRuXCIgKm5nSWY9XCIhaGVsZENhbGw/LmlzQ2FsbENvbm5lY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBzd2FwX3ZlcnQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4td3JhcHBlciByZWplY3QtYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cInJlamVjdENhbGxGcm9tTGlzdChoZWxkQ2FsbClcIj4gY2FsbF9lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBDb21wYWN0IGJhbm5lcnMgZm9yIGNvbmN1cnJlbnQgaW5jb21pbmcgKG9uZSBwZXIgY2FsbCkgLS0+XG4gICAgICAgICBjb25jdXJyZW50IGluY29taW5nIChvbmUgcGVyIGNhbGwpe3shaXNDb25mZXJlbmNlfX0re3tjdXJyZW50Q2FsbExpc3QubGVuZ3RofX1cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0NvbmZlcmVuY2UgJiYgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1iYW5uZXJzLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzQ29uZmVyZW5jZSAmJiBjdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTt3aWR0aDogMTAwJTt0b3A6IDBweDtcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW5jIG9mIGN1cnJlbnRDYWxsTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluY29taW5nLWJhbm5lclwiICpuZ0lmPVwiaW5jPy5pc0luY29taW5nQ2FsbCAmJiAhaW5jPy5pc0FjY2VwdENhbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgdG9wOiAoKGlzQ2FsbE9uSG9sZCAmJiBoZWxkQ2FsbCkgPyA2NCA6IDApICsgKGkgKiA3MCkgKyAncHgnIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctYmFubmVyLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluY29taW5nLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5jb20gaW5nLWxhYmVsXCI+SW5jb21pbmcgY2FsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1jYWxsZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhbGxlci1uYW1lXCI+e3sgaW5jPy51c2VySW5mbz8uYzJjSW5mb3JtYXRpb24/Lm5hbWUgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jPy5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ25hbWUnKSB8fCAnLScgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYWxsZXItbnVtYmVyXCI+e3sgaW5jPy51c2VySW5mbz8uYzJjSW5mb3JtYXRpb24/Lm51bWJlciB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmM/LnBhcmFtZXRlcnM/LkZyb20gfHwgJycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYmFubmVyLWJ0biBhY2NlcHQtYnRuXCIgKGNsaWNrKT1cImFkZChpbmMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+Y2FsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhbm5lci1idG4gcmVqZWN0LWJ0blwiIChjbGljayk9XCJyZWplY3RDb25jdXJyZW50Q2FsbChpbmMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+Y2FsbF9lbmQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBGb3Igc2luZ2xlIGluY29taW5nIGNhbGwgLS0+XG4gICAgICAgICBzaW5nbGUgaW5jb21pbmcgY2FsbHt7Y3VycmVudENhbGxMaXN0Lmxlbmd0aCA9PT0gMSB9fS0tLS0tLXt7IGN1cnJlbnRDYWxsTGlzdFswXT8uaXNJbmNvbWluZ0NhbGx9fS0tLS17eyAhY3VycmVudENhbGxMaXN0WzBdPy5pc0FjY2VwdENhbGx9fVxuICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMDAgbXktNVwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIiAqbmdJZj1cImN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPT09IDEgJiYgY3VycmVudENhbGxMaXN0WzBdPy5pc0luY29taW5nQ2FsbCAmJiAhY3VycmVudENhbGxMaXN0WzBdPy5pc0FjY2VwdENhbGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsVG9OdW1cIj5JbmNvbWluZyBjYWxsIG9uIDxiciAvPjxzcGFuPnt7Y3VycmVudENhbGxMaXN0WzBdPy5waG9uZSB8fCAnVW5rbm93biBOdW1iZXInfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvblwiIFtuZ0NsYXNzXT1cInsnY2FsbC1hbmltYXRpb24tcGxheSc6IHNob3dSaW5nQW5pbWF0aW9ufVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgW3NyY109XCJjdXJyZW50Q2FsbExpc3RbMF0/LmltZ1wiIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTIwXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxlckRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICA8aDE+e3tjdXJyZW50Q2FsbExpc3RbMF0/LmMyY0luZm9ybWF0aW9uPy5uYW1lIHx8ICdVbmtub3duIE51bWJlcid9fTwvaDE+XG4gICAgICAgICAgICAgICAgPHA+e3tjdXJyZW50Q2FsbExpc3RbMF0/LmMyY0luZm9ybWF0aW9uPy5udW1iZXJ9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hY3Rpb24tYnRucyBtdC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIHJlY2VpdmUtYnRuXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhbmV3SW5jb21pbmdDYWxsc0xpc3RbMF0/LmlzQ2FsbENvbm5lY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwiYWRkKGN1cnJlbnRDYWxsTGlzdFswXSlcIj4gY2FsbCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIHJlamVjdC1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cIm9uRW5kQ2FsbChjdXJyZW50Q2FsbExpc3RbMF0pXCI+IGNhbGxfZW5kIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEZvciBtdWx0aXBsZSBpbmNvbWluZyBjYWxscyBidXQgbm90IGFueSBjYWxsIHByb2dyZXNzIC0tPlxuICAgICAgICBcblxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgYWN0aXZlIGNhbGwgLS0+XG4gICAgICAgICBzaW5nbGUgYWN0aXZlIGNhbGx7eyghaXNDb25mZXJlbmNlICYmIGN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxKX19Kysre3tjdXJyZW50Q2FsbExpc3QubGVuZ3RoID09PSAxIH19Kysre3sgY3VycmVudENhbGxMaXN0WzBdPy5pc0luY29taW5nQ2FsbH19Kysre3sgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsfX1cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0NvbmZlcmVuY2UgJiYgISFjdXJyZW50Q2FsbFwiIFtuZ1N0eWxlXT1cInsnZGlzcGxheSc6ICdmbGV4JywgJ2ZsZXgtZGlyZWN0aW9uJzogJ2NvbHVtbicsICdwb3NpdGlvbic6ICdyZWxhdGl2ZSd9XCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvblwiIFtuZ0NsYXNzXT1cInsnY2FsbC1hbmltYXRpb24tcGxheSc6IHNob3dSaW5nQW5pbWF0aW9ufVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgW3NyY109XCJjdXJyZW50Q2FsbC5pbWdcIiBhbHQ9XCJcIiB3aWR0aD1cIjEyMFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGgxIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc4cHgnfVwiPnt7Y3VycmVudENhbGwubmFtZSB8fCAnVW5rbm93biBudW1iZXInfX08L2gxPlxuICAgICAgICAgICAgICAgIDxwPnt7Y3VycmVudENhbGwucGhvbmUgfX08L3A+XG4gICAgICAgICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luLXRvcDogNHB4XCI+e3t0aW1lcn19PC9oND5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zXCIgKm5nSWY9XCIhc2hvd0tleXBhZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWJ0bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gc3RhcnQtc3RvcFwiICpuZ0lmPVwiIWlzUmVjb3JkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZydcIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjb3JkaW5nLWljb25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF1c2UtcmVzdW1lLWJ0bnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNSZWNvcmRpbmcgJiYgIWlzUGF1c2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwYXVzZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGxheV9hcnJvdyA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgY2xhc3M9XCJ0aW1lci1kaXNwbGF5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0tleXBhZFwiIGNsYXNzPVwic2VuZERpZ2l0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNhbGwtaW5wdXRzXCIgaWQ9XCJjYWxsLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjYWxsSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25DYWxsSW5wdXRFbnRlcigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRzKClcIj5jbG9zZV9zbWFsbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXktYnRuXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlwYWRWYWxcIiAoY2xpY2spPVwib25DYWxsSW5wdXRzKGtleS5udW0pXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7a2V5Lm51bX19XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnNcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnMTEwcHgnfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCIhaW5jb21pbmdDYWxsRGl2IHx8IGlzQ29uY3VycmVudEluY29taW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJoZWxkLWJ0biBtZXJnZS1idG5cIiAoY2xpY2spPVwibWVyZ2VDYWxscygpXCIgdGl0bGU9XCJNZXJnZSBjYWxsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudENhbGxMaXN0Lmxlbmd0aCA8IDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPk1lcmdlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWV2ZW5seSBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG4gbXItM1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG4gbXItM1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cInRvZ2dsZUtleXBhZCgpXCI+IHRyYW5zaXRpb25fZGlzc29sdmUgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0blwiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biBlbmQtY2FsbC1idG5cIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIiAoY2xpY2spPVwiZW5kQ2FsbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbnRhY3RzLXBhbmVsXCIgKm5nSWY9XCJzaG93Q29udGFjdHNQYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGJhY2tcIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCgpXCI+IGNoZXZyb25fbGVmdCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRhY3RzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzZWFyY2hcIj4gc2VhcmNoIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nRm9yPVwibGV0IGMgb2YgY29udGFjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiIFtzcmNdPVwiYy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tjLmZpcnN0TmFtZX19IHt7Yy5taWRkbGVOYW1lfX0ge3tjLmxhc3ROYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IChjLm51bWJlcnNMaXN0ICYmIGMubnVtYmVyc0xpc3RbMF0/Lm51bWJlcil9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0blwiIChjbGljayk9XCJjYWxsQ29udGFjdChjKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+Q2FsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC0yIHB4LTMgY2FsbC1pbmZvLXdyYXBwZXIgXCIgIFtuZ0NsYXNzXT1cInsnb3Blbi1jb2xsb3BzJzogaXNDb2xsb3BzfVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtZG93blwiICpuZ0lmPVwiaXNDb2xsb3BzXCIgKGNsaWNrKT1cImlzQ29sbG9wcyA9ICFpc0NvbGxvcHNcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS11cFwiICpuZ0lmPVwiIWlzQ29sbG9wc1wiIChjbGljayk9XCJpc0NvbGxvcHMgPSAhaXNDb2xsb3BzXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDb2xsb3BzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiA+Rmlyc3QgTmFtZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgPnRlc3QgdHR0dHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5MYXN0IE5hbWU6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PnRldHN0IHRlc3QgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5FbWFpbDo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPmFiY2RlZnRAdmdyb3VwLmNvbTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5OdW1iZXI6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+NjM1NDU5ODUyNjQyMjU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkxhbmd1YWdlOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkVuZ2xpc2g8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkltYWdlIDo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj50ZXN0LmpwZyA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkV4dGVuc2lvbiA6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+NDU5NjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPk5vdGUgOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+dGVzIHRlc3QgdGVzdCA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlN1YmplY3Q6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+aGVsbG8gd29ybGQgfCB0ZXN0PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+TWVzc2FnZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj50ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBjb250YWN0IGxpc3QgcGFuZWwgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1wYW5lbFwiICpuZ0lmPVwic2hvd0NvbnRhY3RzUGFuZWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgYmFja1wiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKClcIj4gY2hldnJvbl9sZWZ0IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250YWN0czwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzZWFyY2hcIj4gc2VhcmNoIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nRm9yPVwibGV0IGMgb2YgY29udGFjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCJjLmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tjLmZpcnN0TmFtZX19IHt7Yy5taWRkbGVOYW1lfX0ge3tjLmxhc3ROYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCI+e3sgKGMubnVtYmVyc0xpc3QgJiYgYy5udW1iZXJzTGlzdFswXT8ubnVtYmVyKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0blwiIChjbGljayk9XCJjYWxsQ29udGFjdChjKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkNhbGw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gY29uZmVyZW5jZSBjYWxsIHZpZXcgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb25mZXJlbmNlLWNhbGwtdmlld1wiICpuZ0lmPVwiaXNDb25mZXJlbmNlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLWljb24gbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBncm91cHMgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZi10aXRsZVwiPkNvbmZlcmVuY2UgQ2FsbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtdGV4dCBjb25mLW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsbCBvZiBjdXJyZW50Q2FsbExpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYWxsPy5pc0NvbmZlcmVuY2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgIT0gMFwiPiY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjYWxsPy5uYW1lID8gY2FsbD8ubmFtZSA6IGNhbGw/LnBob25lIHx8ICdVbmtub3duIG51bWJlcid9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi10aW1lclwiPnt7IHRpbWVyIH19PC9kaXY+XG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb25mLXJlY29yZFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtc3RvcC1idG5cIiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgKGNsaWNrKT1cInRvZ2dsZVJlY29yZGluZygpXCIgdGl0bGU9XCJTdG9wIFJlY29yZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gc3RvcF9jaXJjbGUgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zIG10LWF1dG9cIiAqbmdJZj1cIiFzaG93S2V5cGFkXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnMjBweCd9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1idG4tY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHN0YXJ0LXN0b3BcIiAqbmdJZj1cIiFpc1JlY29yZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3JlY29yZGluZyc6IGlzUmVjb3JkaW5nLCAnc3RvcHBlZCc6ICFpc1JlY29yZGluZ31cIiAoY2xpY2spPVwidG9nZ2xlUmVjb3JkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImlzUmVjb3JkaW5nID8gJ1N0b3AgUmVjb3JkaW5nJyA6ICdTdGFydCBSZWNvcmRpbmcnXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlY29yZGluZy1pY29uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhdXNlLXJlc3VtZS1idG5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUmVjb3JkaW5nICYmICFpc1BhdXNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhdXNlUmVjb3JkaW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGF1c2UgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBwYXVzZS1yZXN1bWVcIiAqbmdJZj1cImlzUGF1c2VkXCIgKGNsaWNrKT1cInJlc3VtZVJlY29yZGluZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBsYXlfYXJyb3cgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1JlY29yZGluZ1wiIGNsYXNzPVwidGltZXItZGlzcGxheVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRGb3JtYXR0ZWRUaW1lKCkgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0tleXBhZFwiIGNsYXNzPVwic2VuZERpZ2l0IG10LTJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2FsbC1pbnB1dHNcIiBpZD1cImNhbGwtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImNhbGxJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvbkNhbGxJbnB1dEVudGVyKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaW5wdXQtY2xlYXItYnRuXCIgKm5nSWY9XCJjYWxsSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWNvbnRhaW5lciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJzaG93S2V5cGFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cbiAgICAgICAgICAgICAgICAgICAge3trZXkubnVtfX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tYWxiaGFiZXRzXCI+e3trZXkudGV4dCA/IGtleS50ZXh0IDogJyZuYnNwOyd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1yZW1vdmVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVtb3ZlLWJ0blwiIChjbGljayk9XCJhZGRSZW1vdmVQYXJ0aWNpcGFudCgpXCI+UmVtb3ZlPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc011dGV9XCIgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4ge3sgaXNNdXRlID8gJ21pY19vZmYnIDogJ21pYycgfX0gPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZUtleXBhZCgpXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiB0cmFuc2l0aW9uX2Rpc3NvbHZlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtZW5kXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG4gZGFuZ2VyXCIgKGNsaWNrKT1cImVuZENhbGwodHJ1ZSlcIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEFkZCByZW1vdmUgcGFydGljaXBhbnQgcGFuZWwgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1wYW5lbFwiICpuZ0lmPVwiaXNBZGRSZW1vdmVQYXJ0aWNpcGFudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBiYWNrXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwodHJ1ZSlcIj4gY2hldnJvbl9sZWZ0IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250YWN0czwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzZWFyY2hcIj4gc2VhcmNoIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nRm9yPVwibGV0IGMgb2YgYWxsUGFydGljaXBlbnRMaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiIFtzcmNdPVwiYy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtbmFtZVwiPnt7Yz8udG9OYW1lIHx8ICdVbmtub3duJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IGM/LnRvIHx8ICdVbmtub3duJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1ob2xkLWNvbnRhY3QgbXItMlwiIFtuZ0NsYXNzXT1cInsgJ29uLWhvbGQnOiBjLmhvbGQgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Ib2xkQ2FsbChjKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgdGl0bGU9XCJIb2xkXCI+IHBob25lX3BhdXNlZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5Ib2xkPC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWNvbnRhY3RcIiAoY2xpY2spPVwib25FbmRDYWxsKGMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkNhbGwgRW5kXCI+IGNhbGxfZW5kIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkVuZDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3YXZlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIndhdmVzXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiXG4gICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMjQgMTUwIDI4XCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIiBzaGFwZS1yZW5kZXJpbmc9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgPGRlZnM+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGlkPVwiZ2VudGxlLXdhdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0tMTYwIDQ0YzMwIDAgNTgtMTggODgtMThzIDU4IDE4IDg4IDE4IDU4LTE4IDg4LTE4IDU4IDE4IDg4IDE4IHY0NGgtMzUyelwiIC8+XG4gICAgICAgICAgICAgICAgPC9kZWZzPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwicGFyYWxsYXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjBcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjcpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjNcIiBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjUpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8dXNlXG4gICAgICAgICAgICAgICAgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiXG4gICAgICAgICAgICAgICAgeD1cIjQ4XCJcbiAgICAgICAgICAgICAgICB5PVwiNVwiXG4gICAgICAgICAgICAgICAgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC4zKVwiXG4gICAgICAgICAgICAgIC8+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiN1wiIGZpbGw9XCIjZmZmXCIgLz5cbiAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1pbi1jYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiaXNNaW5pbWlzZWRcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgZnVsbHNjcmVlblwiIChjbGljayk9XCJtYXhpbWlzZURpYWxwYWQoKVwiPiBvcGVuX2luX2Z1bGwgPC9zcGFuPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi1jYWxsLWFuaW1hdGlvblwiIGlkPVwiY2FsbC1hdmF0YXJcIj5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwibWluLWF2YXRhci1pbWdcIiBbc3JjXT1cImNhbGxEYXRhLmltZ1wiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLWNhbGxlckRldGFpbHNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2NhbGxEYXRhLm5hbWV9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luOiAwXCI+e3tjYWxsRGF0YS5kaXNwbGF5TnVtID8gY2FsbERhdGEuZGlzcGxheU51bSA6IGNhbGxEYXRhLnBob25lIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtaW4tYnRuLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXRpbWVyXCI+e3t0aW1lcn19PC9kaXY+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtaW4tY2FsbC1zZWMtYnRuXCIgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCJpc011dGVcIj4gbWljX29mZiA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cIiFpc011dGVcIj4gbWljIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtaW4tY2FsbC1idG4gZW5kLWNhbGwtYnRuXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCIgKGNsaWNrKT1cImVuZENhbGwoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfZW5kIDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
|