qms-angular 1.1.82 → 1.1.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/qms-angular.umd.js +25 -7
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/model/en.js +6 -2
- package/esm2015/lib/model/nn.js +6 -2
- package/esm2015/lib/model/no.js +6 -2
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +5 -3
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +5 -3
- package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +3 -1
- package/fesm2015/qms-angular.js +25 -7
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/model/en.d.ts +4 -0
- package/lib/model/nn.d.ts +4 -0
- package/lib/model/no.d.ts +4 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-bpmn.model.d.ts +1 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.d.ts +1 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +1 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +1 -0
- package/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.d.ts +1 -0
- package/package.json +1 -1
- package/qms-angular.metadata.json +1 -1
@@ -95,6 +95,7 @@ export class QMSCKEditorFlowchartComponent extends QMSCKEditorBaseComponent {
|
|
95
95
|
this.ngUnsubscribe = new Subject();
|
96
96
|
this.id = data.id;
|
97
97
|
this.entityId = data.entityId;
|
98
|
+
this.documentId = data.documentId;
|
98
99
|
this.splitView = data.showProcessDocumentTreeDataInSplitView;
|
99
100
|
this.enabledInterconnected = data.enabledInterconnected;
|
100
101
|
this.enabledDeviationModule = data.enabledDeviationModule;
|
@@ -291,10 +292,11 @@ export class QMSCKEditorFlowchartComponent extends QMSCKEditorBaseComponent {
|
|
291
292
|
return new Promise((resolve) => {
|
292
293
|
const jsonContent = this.rappid.getJsonContent();
|
293
294
|
this.flowchart = {
|
294
|
-
id:
|
295
|
+
id: guidHelper.empty,
|
295
296
|
jsonContent: jsonContent,
|
296
297
|
isTemplate: false,
|
297
|
-
templateName: ''
|
298
|
+
templateName: '',
|
299
|
+
documentId: this.documentId
|
298
300
|
};
|
299
301
|
this.flowchartService
|
300
302
|
.flowchartModifying(this.flowchart)
|
@@ -1308,4 +1310,4 @@ QMSCKEditorFlowchartComponent.propDecorators = {
|
|
1308
1310
|
stencilConfiguration: [{ type: Input }],
|
1309
1311
|
onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
|
1310
1312
|
};
|
1311
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWZsb3djaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNsRixPQUFPLGFBQWEsTUFBTSxvREFBb0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxVQUFVLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seURB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QUFZO1lBeUR2QixtQkFBbUIsdUJBMkVuQixNQUFNLFNBQUMsZUFBZTtZQXZFdEIsbUJBQW1COzs7dUJBU3ZCLEtBQUs7cUNBR0wsS0FBSzttQ0FDTCxLQUFLO3dCQThFTCxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvckV2ZW50Q29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckV2ZW50LmNvbnN0YW50XCI7XHJcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3RcIjtcclxuaW1wb3J0IHsgS2V5Ym9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9mbG93Y2hhcnQvc2VydmljZS9rZXlib2FyZC1zZXJ2aWNlXCI7XHJcbmltcG9ydCBSYXBwaWRTZXJ2aWNlIGZyb20gJy4uLy4uL2NvbW1vbi9mbG93Y2hhcnQvc2VydmljZS9raXRjaGVuc2luay1zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGhlbWVQaWNrZXIgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2Zsb3djaGFydC90aGVtZXMvdGhlbWUtcGlja2VyXCI7XHJcbmltcG9ydCB7IGJhc2U2NFN0cmluZ1RvRmlsZSB9IGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2ZpbGVIZWxwZXJcIjtcclxuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlclwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGlhbG9nLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRmxvd2NoYXJ0VGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LXRlbXBsYXRlLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRmxvd2NoYXJ0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclNhdmVBc1RlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXNhdmUtYXMtdGVtcGxhdGUubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2R1bGUvY29uZmlybS9xbXMtY2tlZGl0b3ItY29uZmlybS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3RvYXN0L3Ftcy1ja2VkaXRvci10b2FzdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9xbXMtY2tlZGl0b3ItYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1jb21tb24uc2VydmljZXNcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGbG93Y2hhcnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1mbG93Y2hhcnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXVwbG9hZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNhdmVUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItYnBtbi9zYXZlLXRlbXBsYXRlL3NhdmUtdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcclxuaW1wb3J0IHsgUU1TQlBNTkNvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWJwbW4tY29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZsb3djaGFydFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW1cIjtcclxuaW1wb3J0IHsgU2hhcGVNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3Ftcy1icG1uL21vZGVscy9zaGFwZS1tb2RlbC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZVwiO1xyXG5pbXBvcnQgeyBUYXJnZXRUeXBlTmFtZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvdGFyZ2V0LXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvckxpbmtDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yTGluay5jb25zdGFudFwiO1xyXG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yTGlua1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWxpbmsuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVUYXJnZXQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLXRhcmdldFwiO1xyXG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVBbmNob3IgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLWFuY2hvci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1saW5rLWFuY2hvci1kb2N1bWVudC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaW5rQW5jaG9yIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9saW5rLWFuY2hvci5lbnVtXCI7XHJcbmltcG9ydCB7IFRyZWVDb25maWcsIFRyZWVNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3RyZWVcIjtcclxuaW1wb3J0IHsgRG9jdW1lbnRUcmVlTm9kZURhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RvY3VtZW50LXRyZWUtbm9kZS1kYXRhLm1vZGVsXCI7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQlBNTkNvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLWNvbm5lY3Rpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7IFJlbGF0ZWRJdGVtVHlwZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvcmVsYXRlZC10by1pdGVtLXR5cGVcIjtcclxuaW1wb3J0IHsgUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSwgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQsIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50XCI7XHJcbmltcG9ydCB7IE1vZHVsZVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vbW9kdWxlLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBHZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnRPcHRpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2dldC1zZWFyY2gtcHJvY2Vzcy1kb2N1bWVudC1vcHRpb25cIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUcmVlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFByb2Nlc3NOb2RlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzLW5vZGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7IElSZWxhdGVkIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcmVsYXRlZC9tb2RlbC9yZWxhdGVkLWRhdGEubW9kZWxcIjtcclxuaW1wb3J0IHsgUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vcHJvY2Vzcy1jbGFzc2lmaWNhdGlvbi10eXBlLmVudW1cIjtcclxuaW1wb3J0IHsgUHJvY2Vzc1N0YXR1cyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzU3RhdHVzLmVudW1cIjtcclxuaW1wb3J0IHsgU2hhcGVMaW5rIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcW1zLWJwbW4vbW9kZWxzL2Zsb3ctY2hhcnQtc2hhcGUvc2hhcGUtbGlua1wiO1xyXG5pbXBvcnQgeyBCUE1OTGlua0NvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItYnBtbi9saW5rL2JwbW4tbGluay5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TU2VsZWN0T25lR2xvYmFsU2VydmljZSwgU2VsZWN0T25lRGlhbG9nLCBTZWxlY3RPbmVQb3B1cERhdGEgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9zZWxlY3Qtb25lXCI7XHJcbmltcG9ydCBRTVNDS0VkaXRvclBhcmFtdGVyIGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1wYXJhbWV0ZXIubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlua0F0dGFjaG1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi4vcW1zLWNrZWRpdG9yLWxpbmsvYXR0YWNobWVudHMvbGluay1hdHRhY2htZW50LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvck1vZHVsZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvbW9kdWxlLmVudW1cIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uRGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tZGF0YS5tb2RlbFwiO1xyXG5pbXBvcnQgUU1TQ0tFZGl0b3JGbG93Q2hhcnRGdW5jdGlvbnMgZnJvbSBcIi4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvZmxvd2NoYXJ0LmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IERlZmF1bHRGb3JtU2VsZWN0QWNjZXNzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvc2VsZWN0LWFjY2Vzcy1kaWFsb2cvbW9kZWwvZm9ybS1zZWxlY3QtYWNjZXNzLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU1NlbGVjdEFjY2Vzc0RpYWxvZyB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1hY2Nlc3MtZGlhbG9nXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0RpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYWNjZXNzLWRpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncW1zLWZsb3djaGFydCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcW1zLWNrZWRpdG9yLWZsb3djaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckZsb3djaGFydENvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIGNrRWRpdG9yOiBhbnk7XHJcblxyXG4gICAgUU1TQlBNTkNvbmZpZzogUU1TQlBNTkNvbmZpZyA9IG5ldyBRTVNCUE1OQ29uZmlnKCk7XHJcbiAgICBASW5wdXQoKSBpbnNwZWN0b3JDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgICBASW5wdXQoKSBzdGVuY2lsQ29uZmlndXJhdGlvbjogYW55O1xyXG4gICAgTEFORzogYW55O1xyXG4gICAganNvbkNvbnRlbnQ6IHN0cmluZyA9ICcnO1xyXG4gICAgcmFwcGlkOiBSYXBwaWRTZXJ2aWNlO1xyXG4gICAgaWQgPSAnJztcclxuICAgIGVudGl0eUlkOiBzdHJpbmc7XHJcbiAgICBmbG93Y2hhcnQ6IFFNU0NLRWRpdG9yRmxvd2NoYXJ0ID0gbmV3IFFNU0NLRWRpdG9yRmxvd2NoYXJ0KCk7XHJcbiAgICBmbG93Y2hhcnRUZW1wbGF0ZXM6IFFNU0NLRWRpdG9yRmxvd2NoYXJ0VGVtcGxhdGVbXSA9IFtdO1xyXG4gICAgdG9vbGJhckNvbmZpZzogYW55O1xyXG4gICAgY2tFZGl0b3JDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY2stZWRpdG9yX19lZGl0YWJsZVwiKTtcclxuICAgIHNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgZGlzYWJsZWRDb25uZWN0aW9uVGFiID0gZmFsc2U7XHJcbiAgICBlbmFibGVkSW50ZXJjb25uZWN0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgZW5hYmxlZERldmlhdGlvbk1vZHVsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZW5hYmxlZENoZWNrbGlzdE1vZHVsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgc2hhcGVNb2RlbDogU2hhcGVNb2RlbCA9IG5ldyBTaGFwZU1vZGVsKCk7XHJcbiAgICBzaGFwZUlkOiBhbnk7XHJcbiAgICBwcmVTaGFwZUlkOiBhbnk7XHJcbiAgICB0YXJnZXRzOiBRTVNCUE1OU2hhcGVUYXJnZXRbXSA9IFtdO1xyXG4gICAgYW5jaG9yczogUU1TQlBNTlNoYXBlQW5jaG9yW10gPSBbXTtcclxuICAgIHNwbGl0VmlldzogYm9vbGVhbjtcclxuICAgIHByb2Nlc3NUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG4gICAgZG9jdW1lbnRUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG4gICAgdHJlZVByb2Nlc3NEYXRhOiBEb2N1bWVudFRyZWVOb2RlRGF0YVtdO1xyXG4gICAgdHJlZURvY3VtZW50RGF0YTogRG9jdW1lbnRUcmVlTm9kZURhdGFbXTtcclxuICAgIGxvYWRpbmdSZWxhdGVkRGF0YTogYm9vbGVhbjtcclxuICAgIC8qIERldmlhdGlvbiBjb25uZWN0IHR5cGUgKi9cclxuICAgIGRldmlhdGlvbkRhdGFUcmVlOiBUcmVlTW9kZWxbXTtcclxuICAgIGRldmlhdGlvblNlbGVjdE9uZUNvbmZpZzogVHJlZUNvbmZpZztcclxuXHJcbiAgICAvKiBDaGVja2xpc3QgY29ubmVjdCB0eXBlICovXHJcbiAgICBjaGVja2xpc3REYXRhVHJlZTogVHJlZU1vZGVsW107XHJcbiAgICBjaGVja2xpc3RTZWxlY3RPbmVDb25maWc6IFRyZWVDb25maWc7XHJcblxyXG4gICAgc2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGU7XHJcbiAgICBmbG93Y2hhcnRWaWV3TW9kZSA9IEZsb3djaGFydFZpZXdNb2RlO1xyXG4gICAgcmVsYXRlZEl0ZW1UeXBlID0gUmVsYXRlZEl0ZW1UeXBlO1xyXG5cclxuICAgIHNlbGVjdGVkVmFsdWUgPSAwO1xyXG5cclxuICAgIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZsb3djaGFydFNlcnZpY2U6IFFNU0NLRWRpdG9yRmxvd2NoYXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVwbG9hZFNlcnZpY2U6IFFNU0NLRWRpdG9yVXBsb2FkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IFFNU0NLRWRpdG9yQ29tbW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgICAgICBwcml2YXRlIGxpbmtTZXJ2aWNlOiBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVsYXRlZFNlcnZpY2U6IFFNU0NLRWRpdG9yQlBNTkNvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZTogUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyZWVTZXJ2aWNlOiBRTVNDS0VkaXRvclRyZWVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcW1zUmVsYXRlZFNlcnZpY2U6IFFNU1NlbGVjdE9uZUdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFFNU0NLRWRpdG9yRmxvd2NoYXJ0Q29tcG9uZW50PixcclxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFFNU0NLRWRpdG9yQnBtbkRhdGEsXHJcbiAgICAgICAgcHJpdmF0ZSBhY2Nlc3NEaWFsb2dTZXJ2aWNlOiBBY2Nlc3NEaWFsb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xyXG4gICAgICAgIHRoaXMuZW50aXR5SWQgPSBkYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIHRoaXMuc3BsaXRWaWV3ID0gZGF0YS5zaG93UHJvY2Vzc0RvY3VtZW50VHJlZURhdGFJblNwbGl0VmlldztcclxuICAgICAgICB0aGlzLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCA9IGRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlZERldmlhdGlvbk1vZHVsZSA9IGRhdGEuZW5hYmxlZERldmlhdGlvbk1vZHVsZTtcclxuICAgICAgICB0aGlzLmVuYWJsZWRDaGVja2xpc3RNb2R1bGUgPSBkYXRhLmVuYWJsZWRDaGVja2xpc3RNb2R1bGU7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzQXJlYUljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRG9jdW1lbnRJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRGV2aWF0aW9uSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJDaGVja2xpc3RJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJbnRlcmNvbm5lY3RlZEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcclxuICAgIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5LU19DSEFOR0VfVEVNUExBVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZVRlbXBsYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0LktTX0RFTEVURV9URU1QTEFURSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uRGVsZXRlVGVtcGxhdGUodGhpcy5MQU5HLkJQTU4uREVMRVRFX1RFTVBMQVRFLCB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9URU1QTEFURSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93SW5mb01lc3NhZ2UodGhpcy5MQU5HLkJQTU4uU0VMRUNUX1RFTVBMQVRFLCB0aGlzLkxBTkcuQlBNTi5TRUxFQ1RfVEVNUExBVEVfSU5GT1JNQVRJT04pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5LU19TQVZFX0FTX1RFTVBMQVRFKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TYXZlQXNUZW1wbGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5LU19SRVNFVF9URU1QTEFURSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uUmVzZXRUZW1wbGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuanNvbkNvbnRlbnQgPSBhd2FpdCB0aGlzLmdldEpzb25Db250ZW50KHRoaXMuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJhcHBpZCA9IG5ldyBSYXBwaWRTZXJ2aWNlKFxyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuICAgICAgICAgICAgbmV3IEtleWJvYXJkU2VydmljZSgpLFxyXG4gICAgICAgICAgICB0aGlzLkxBTkcsXHJcbiAgICAgICAgICAgIHRoaXMuaW5zcGVjdG9yQ29uZmlndXJhdGlvbixcclxuICAgICAgICAgICAgdGhpcy5zdGVuY2lsQ29uZmlndXJhdGlvblxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMucmFwcGlkLnN0YXJ0UmFwcGlkKCk7XHJcbiAgICAgICAgY29uc3QgdGhlbWVQaWNrZXIgPSBuZXcgVGhlbWVQaWNrZXIoeyBtYWluVmlldzogdGhpcy5yYXBwaWQsIExBTkc6IHRoaXMuTEFORyB9KTtcclxuICAgICAgICB0aGVtZVBpY2tlci5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RoZW1lcGlja2VyJykpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5qc29uQ29udGVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnJhcHBpZC5ncmFwaC5mcm9tSlNPTihKU09OLnBhcnNlKHRoaXMuanNvbkNvbnRlbnQpKTtcclxuICAgICAgICAgICAgdGhpcy5yYXBwaWQucGFwZXJTY3JvbGxlci5wb3NpdGlvbkNvbnRlbnQoJ3RvcC1sZWZ0JywgeyBwYWRkaW5nOiA1MCwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEZsb3djaGFydENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMuaW5pdFJlbGF0ZWRDb25maWdBbmREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuZmxvd2NoYXJ0VGVtcGxhdGVzID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVUZW1wbGF0ZXModGhpcy5mbG93Y2hhcnRUZW1wbGF0ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRGbG93Y2hhcnRDb25maWcoKSB7XHJcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmVkaXRNb2RlID0gRmxvd2NoYXJ0Vmlld01vZGUuRWRpdDtcclxuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmNvbm5lY3RUeXBlcyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3MsXHJcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5CUE1OLkRPQ1VNRU5UX1BST0NFU1MsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLlBST0NFU1NfRE9DVU1FTlRfQ09OTkVDVElPTl9HVUlERUxJTkUsXHJcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbixcclxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uREVWSUFUSU9OLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5ERVZJQVRJT05fQ09OTkVDVElPTl9HVUlERUxJTkUsXHJcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0aGlzLmVuYWJsZWREZXZpYXRpb25Nb2R1bGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0LFxyXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuQlBNTi5DSEVDS0xJU1QsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNIRUNLTElTVF9DT05ORUNUSU9OX0dVSURFTElORSxcclxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRoaXMuZW5hYmxlZENoZWNrbGlzdE1vZHVsZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rLFxyXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuQlBNTi5MSU5LLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5MSU5LX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxyXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50LFxyXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQVRUQUNITUVOVCxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnJyxcclxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRhcmdldHMpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRzLnB1c2goeyB2YWx1ZTogVGFyZ2V0VHlwZU5hbWUubmV3LCB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJHRVRfQkxBTksgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0cy5wdXNoKHsgdmFsdWU6IFRhcmdldFR5cGVOYW1lLnNhbWUsIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLlRBUkdFVF9TRUxGIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRKc29uQ29udGVudChpZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mbG93Y2hhcnRTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZ2V0Rmxvd2NoYXJ0QnlJZChpZClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0Lmpzb25Db250ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFRlbXBsYXRlcygpOiBQcm9taXNlPFFNU0NLRWRpdG9yRmxvd2NoYXJ0VGVtcGxhdGVbXT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZsb3djaGFydFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5mbG93Y2hhcnRHZXRUZW1wbGF0ZXMoKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplVGVtcGxhdGVzKHRlbXBsYXRlczogUU1TQ0tFZGl0b3JGbG93Y2hhcnRUZW1wbGF0ZVtdKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnJhcHBpZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0ZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy50b29sYmFyQ29uZmlnID0gdGhpcy5yYXBwaWQudG9vbGJhcjtcclxuICAgICAgICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdGhpcy50b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGFyclNlbGVjdCAmJiBhcnJTZWxlY3RbMF0pIHtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaXRlbS5pbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogaXRlbS50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dDaGFydElkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAganNvbkNvbnRlbnQ6IGl0ZW0uanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguaW5kZXggPT09IG9wdGlvbi5pbmRleDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRJdGVtMlRlbXBsYXRlKHRlbXBsYXRlPzogUU1TQ0tFZGl0b3JGbG93Y2hhcnQpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJDb25maWcgPSB0aGlzLnJhcHBpZC50b29sYmFyO1xyXG4gICAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRoaXMudG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgaW5kZXg6IDEsXHJcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0ZW1wbGF0ZS50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBmbG93Q2hhcnRJZDogdGVtcGxhdGUuaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB0ZW1wbGF0ZS50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBqc29uQ29udGVudDogdGVtcGxhdGUuanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVTZWxlY3RlZFZhbHVlKGZsb3dDaGFydElkPzogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyQ29uZmlnID0gdGhpcy5yYXBwaWQudG9vbGJhcjtcclxuICAgICAgICBjb25zdCBhcnJTZWxlY3QgPSB0aGlzLnRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShcclxuICAgICAgICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpLmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZDtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICB0aGlzLnRvb2xiYXJDb25maWcgPSB0aGlzLnJhcHBpZC50b29sYmFyO1xyXG4gICAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRoaXMudG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBjb25zdCBsaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1zZWxlY3Rpb25gKVswXTtcclxuICAgICAgICAgICAgbGlzdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LW9wdGlvbi1jb250ZW50YClbMF0uaW5uZXJIVE1MID0gRmxvd0NoYXJ0Q29uc3QuU0VMRUNUX1RFTVBMQVRFO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzYXZlSW1hZ2VDb250ZW50KCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBqc29uQ29udGVudCA9IHRoaXMucmFwcGlkLmdldEpzb25Db250ZW50KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0ID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQgPyB0aGlzLmlkIDogZ3VpZEhlbHBlci5lbXB0eSxcclxuICAgICAgICAgICAgICAgIGpzb25Db250ZW50OiBqc29uQ29udGVudCxcclxuICAgICAgICAgICAgICAgIGlzVGVtcGxhdGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVOYW1lOiAnJ1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZsb3djaGFydFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5mbG93Y2hhcnRNb2RpZnlpbmcodGhpcy5mbG93Y2hhcnQpXHJcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkluc2VydEltYWdlKCkge1xyXG4gICAgICAgIGNvbnN0IGdyYXBoID0gdGhpcy5yYXBwaWQuZ3JhcGg7XHJcbiAgICAgICAgY29uc3QgcGFwZXIgPSB0aGlzLnJhcHBpZC5wYXBlcjtcclxuICAgICAgICBjb25zdCBncmFwaE9iamVjdCA9IGdyYXBoLnRvSlNPTigpO1xyXG4gICAgICAgIGNvbnN0IGNsaWVudFJlY3QgPSBwYXBlci5wYXBlclRvTG9jYWxSZWN0KHBhcGVyLmdldENvbnRlbnRCQm94KCkpO1xyXG4gICAgICAgIGNvbnN0IGlkID0gYXdhaXQgdGhpcy5zYXZlSW1hZ2VDb250ZW50KCk7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VDb250ZW50ID0gYXdhaXQgdGhpcy5yYXBwaWQuZ2V0SW1hZ2VDb250ZW50KCk7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGJhc2U2NFN0cmluZ1RvRmlsZShpbWFnZUNvbnRlbnQsIGAke0NLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19GTE9XQ0hBUlR9IyR7aWR9YCk7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpdmVVcmwgPSBhd2FpdCB0aGlzLnVwbG9hZFNlcnZpY2UudXBsb2FkSW1hZ2UoZmlsZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoZ3JhcGgsIHBhcGVyLCBncmFwaE9iamVjdC5jZWxscyk7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VtYXAgPSBRTVNDS0VkaXRvckZsb3dDaGFydEZ1bmN0aW9ucy50b0ltYWdlTWFwKGlkLCBncmFwaE9iamVjdC5jZWxscywgY2xpZW50UmVjdCk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geyBrZXk6IGAke0NLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19GTE9XQ0hBUlR9IyR7aWR9YCwgdmFsdWVzOiByZWxhdGl2ZVVybCwgaW1hZ2VtYXA6IGltYWdlbWFwIH1cclxuICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0U2Nyb2xsVG9wQ2tlZGl0b3IodGhpcy5ja0VkaXRvcik7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UocmVzdWx0KTtcclxuICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uuc2V0U2Nyb2xsVG9wRWRpdG9yQ29udGFpbmVyKHRoaXMuY2tFZGl0b3IsIHNjcm9sbFRvcCk7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xyXG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZVRlbXBsYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IGpzb25UZW1wbGF0ZSA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19TRUxFQ1RFRF9KU09OQ09OVEVOVF0gPyB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfU0VMRUNURURfSlNPTkNPTlRFTlRdIDogJyc7XHJcbiAgICAgICAgaWYgKCF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfSVNfU0VMRUNURURfVEVNUExBVEVdKSB7XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19PUkdfSlNPTkNPTlRFTlRdID0gSlNPTi5zdHJpbmdpZnkodGhpcy5yYXBwaWQuZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfSVNfU0VMRUNURURfVEVNUExBVEVdID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGpzb25UZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJhcHBpZC5ncmFwaC5mcm9tSlNPTihKU09OLnBhcnNlKGpzb25UZW1wbGF0ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkRlbGV0ZVRlbXBsYXRlKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSA9IG5ldyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEoKTtcclxuICAgICAgICBkYXRhLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnMTc1cHgnLFxyXG4gICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gd2luZG93W0Zsb3dDaGFydENvbnN0LktTX1NFTEVDVEVEX0ZMT1dDSEFSVF9JRF07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG93Y2hhcnRTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mbG93Y2hhcnREZWxldGVUZW1wbGF0ZShpZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZFZhbHVlKGlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LktTX0lTX1NFTEVDVEVEX1RFTVBMQVRFXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLnN1Y2Nlc3ModGhpcy5MQU5HLlFNU0NLRURJVE9SLkRFTEVURUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UuZXJyb3IodGhpcy5MQU5HLlFNU0NLRURJVE9SLkRFTEVURV9GQUlMRUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblNhdmVBc1RlbXBsYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IGpzb25Db250ZW50ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5yYXBwaWQuZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZSA9IG5ldyBRTVNDS0VkaXRvckZsb3djaGFydCgpO1xyXG4gICAgICAgIHRlbXBsYXRlID0ge1xyXG4gICAgICAgICAgICBpZDogZ3VpZEhlbHBlci5lbXB0eSxcclxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IGpzb25Db250ZW50LFxyXG4gICAgICAgICAgICBpc1RlbXBsYXRlOiB0cnVlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yU2F2ZUFzVGVtcGxhdGUoKTtcclxuICAgICAgICBkYXRhLnRlbXBsYXRlVHlwZSA9IENLRWRpdG9yRXZlbnRDb25zdC5RTVNDS19GTE9XQ0hBUlQ7XHJcbiAgICAgICAgZGF0YS5mbG93Y2hhcnQgPSB0ZW1wbGF0ZTtcclxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oU2F2ZVRlbXBsYXRlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNDUwcHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICcyMjBweCcsXHJcbiAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZmxvd2NoYXJ0LnRlbXBsYXRlTmFtZSA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsb3djaGFydFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZsb3djaGFydE1vZGlmeWluZyhkYXRhLmZsb3djaGFydClcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0FWRUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmxvd2NoYXJ0LmlkID0gcmVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbTJUZW1wbGF0ZShkYXRhLmZsb3djaGFydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFNU0NLRWRpdG9yVG9hc3RTZXJ2aWNlLmVycm9yKHRoaXMuTEFORy5RTVNDS0VESVRPUi5TQVZFX0ZBSUxFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblJlc2V0VGVtcGxhdGUoKSB7XHJcbiAgICAgICAgaWYgKHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19JU19TRUxFQ1RFRF9URU1QTEFURV0pIHtcclxuICAgICAgICAgICAgY29uc3Qgb3JnVGVtcGxhdGUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfT1JHX0pTT05DT05URU5UXSA/IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19PUkdfSlNPTkNPTlRFTlRdIDogJyc7XHJcbiAgICAgICAgICAgIGlmIChvcmdUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yYXBwaWQuZ3JhcGguZnJvbUpTT04oSlNPTi5wYXJzZShvcmdUZW1wbGF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0U2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LktTX0lTX1NFTEVDVEVEX1RFTVBMQVRFXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0luZm9NZXNzYWdlKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSA9IG5ldyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEoKTtcclxuICAgICAgICBkYXRhLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgZGF0YS5jb250ZW50ID0gY29udGVudDtcclxuICAgICAgICBkYXRhLmlzTWVzc2FnZSA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6ICc1MDBweCcsXHJcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzE3NXB4JyxcclxuICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1JlZlxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAvL1RPRE9cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbG9zZURpYWxvZygpIHtcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xyXG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcclxuICAgIH1cclxuXHJcbiAgICBvblRhYkNoYW5nZSgkZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KSB7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlRBQl9OQU1FXSA9ICRldmVudC50YWIudGV4dExhYmVsO1xyXG4gICAgICAgIGlmICgkZXZlbnQudGFiLnRleHRMYWJlbCA9PSB0aGlzLkxBTkcuQlBNTi5QUk9QRVJUSUVTKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFwcGlkLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vI3JlZ2lvbiBJbml0IGRhdGEgdXNpbmcgZm9yIGNvbm5lY3Rpb25cclxuICAgIGluaXRSZWxhdGVkQ29uZmlnQW5kRGF0YSgpIHtcclxuICAgICAgICB0aGlzLnByb2Nlc3NUcmVlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgYXJlYU9mQ3VycmVudFByb2Nlc3M6ICcnLFxyXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXHJcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXHJcbiAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiBmYWxzZSxcclxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLnByb2Nlc3MsXHJcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcclxuICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcjYTRiMGRlJyxcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiB0cnVlLFxyXG4gICAgICAgICAgICBvbmx5Rm9sZGVyOiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogdHJ1ZSxcclxuICAgICAgICAgICAgYXJlYU9mQ3VycmVudFByb2Nlc3M6ICcnLFxyXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IHRydWUsXHJcbiAgICAgICAgICAgIG1vZHVsZUlkOiBEYXRhVHlwZS5kb2N1bWVudCxcclxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiBmYWxzZSxcclxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXHJcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnIzRhY2FmZicsXHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogdHJ1ZSxcclxuICAgICAgICAgICAgb25seUZvbGRlcjogZmFsc2VcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRldmlhdGlvblNlbGVjdE9uZUNvbmZpZyA9IHtcclxuICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICBzaG93Q2hlY2tCb3g6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IGZhbHNlLFxyXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG1vZHVsZUlkOiBEYXRhVHlwZS5kZXZpYXRpb24sXHJcbiAgICAgICAgICAgIG9wZW5JY29uOiAna2V5Ym9hcmRfYXJyb3dfdXAnLFxyXG4gICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiAnIzE5NTRBOScsXHJcbiAgICAgICAgICAgIGNsb3NlSWNvbjogJ2tleWJvYXJkX2Fycm93X2Rvd24nLFxyXG4gICAgICAgICAgICBjbG9zZUljb25Db2xvcjogJycsXHJcbiAgICAgICAgICAgIGl0ZW1JY29uOiAncmVwb3J0X3Byb2JsZW0nLFxyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBjYW5IYXZlRHVwSWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHNlbGVjdE9uZTogdHJ1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tsaXN0U2VsZWN0T25lQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXHJcbiAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiBmYWxzZSxcclxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmNoZWNrbGlzdCxcclxuICAgICAgICAgICAgb3Blbkljb246ICdrZXlib2FyZF9hcnJvd191cCcsXHJcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcclxuICAgICAgICAgICAgY2xvc2VJY29uOiAna2V5Ym9hcmRfYXJyb3dfZG93bicsXHJcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnJyxcclxuICAgICAgICAgICAgaXRlbUljb246ICdmb3JtYXRfbGlzdF9idWxsZXRlZCcsXHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNhbkhhdmVEdXBJZDogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0T25lOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IHRydWU7XHJcbiAgICAgICAgZm9ya0pvaW4odGhpcy5yZWxhdGVkU2VydmljZS5nZXRBcmVhQ2hpbGRyZW5Ob2RlKG51bGwsICF0aGlzLnNwbGl0VmlldywgZmFsc2UsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQpLFxyXG4gICAgICAgICAgICB0aGlzLnJlbGF0ZWRTZXJ2aWNlLmdldEZvbGRlckNoaWxkcmVuKG51bGwsICF0aGlzLnNwbGl0VmlldywgZmFsc2UpLFxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZWREZXZpYXRpb25Nb2R1bGUgPyB0aGlzLnJlbGF0ZWRTZXJ2aWNlLmdldERldmlhdGlvblRyZWVEYXRhKCkgOiBvZihudWxsKSxcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlID8gdGhpcy5yZWxhdGVkU2VydmljZS5nZXRDaGVja2xpc3REYXRhKCkgOiBvZihudWxsKVxyXG4gICAgICAgICkucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbcHJvY2Vzc2VzLCBkb2N1bWVudHMsIGRldmlhdGlvbnMsIGNoZWNrbGlzdHNdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJlYXMgPSBwcm9jZXNzZXMubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkID09PSBndWlkSGVscGVyLmVtcHR5ID8gJycgOiB4LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyZWVQcm9jZXNzRGF0YSA9IGFyZWFzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IGRvY3VtZW50cy5tYXAoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lm5hbWUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiAheC5wYXJlbnRIYW5kYm9va0lkID8gJycgOiB4LnBhcmVudEhhbmRib29rSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHgudHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZURvY3VtZW50RGF0YSA9IGFyZWFzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZGV2aWF0aW9uRGF0YVRyZWUgPSBkZXZpYXRpb25zIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3REYXRhVHJlZSA9IGNoZWNrbGlzdHMgfHwgW107XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nUmVsYXRlZERhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRG9jdW1uZXQgUHJvY2VzcyBTdXBwb3J0IEZ1bmNcclxuICAgIGlzRm9sZGVyKHR5cGU6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGRvY3VtZW50VHlwZXMgPSBbXHJcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuRG9jdW1lbnQsXHJcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuRmlsZURvY3VtZW50LFxyXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLkxpbmtEb2N1bWVudCxcclxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5TaG9ydGN1dERvY3VtZW50XHJcbiAgICAgICAgXTtcclxuICAgICAgICByZXR1cm4gIWRvY3VtZW50VHlwZXMuaW5jbHVkZXModHlwZSk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gU2hhcGUgZnVuY3Rpb24gdXNpbmcgZm9yIGNvbm5lY3Rpb25cclxuICAgIGlzU2VsZWN0ZWRWaWV3KCkge1xyXG4gICAgICAgIHJldHVybiAhIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2hvd0Nvbm5lY3RUeXBlKCkge1xyXG4gICAgICAgIHRoaXMuc2hhcGVJZCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPyB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdIDogJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuc2hhcGVJZCAhPT0gdGhpcy5wcmVTaGFwZUlkICYmIHRoaXMuUU1TQlBNTkNvbmZpZy5lZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuRWRpdCkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLm9uR2V0U2hhcGVBY3Rpdml0eS5lbWl0KHsgc2hhcGVJZDogdGhpcy5zaGFwZUlkIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmdldFNoYXBlQWN0aXZpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5wcmVTaGFwZUlkID0gdGhpcy5zaGFwZUlkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZENvbm5lY3Rpb25UYWIgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBleGNsdWRlZFR5cGVzID0gWydhcHAuTGluayddO1xyXG4gICAgICAgIGlmIChleGNsdWRlZFR5cGVzLmZpbmRJbmRleCh0eXBlID0+IHR5cGUudG9Mb3dlckNhc2UoKSA9PSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0/LnRvTG93ZXJDYXNlKCkpID4gLTEgJiYgdGhpcy5RTVNCUE1OQ29uZmlnLmVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRDb25uZWN0aW9uVGFiID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICEhd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NIT1dfQ09OTkVDVFlQRV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2hhcGVBY3Rpdml0eSgpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XHJcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xyXG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0gc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzO1xyXG4gICAgICAgICAgICBpZiAoISFhdHRyaWJ1dGVzLmxpbmtVcmwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUZyb21TaGFwZUF0cnJpYnV0ZShhdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSBhdHRyaWJ1dGVzLmxpbmtUYXJnZXQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZXQgc2hhcGUgY29ubmVjdCBsYWJlbFxyXG4gICAgICAgICAgICAgICAgaWYgKCEhdGhpcy5zaGFwZU1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNoYXBlTW9kZWwuc2hhcGU/LmNvbm5lY3Rpb25UeXBlSWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb246XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0RFVklBVElPTjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9DSEVDS0xJU1Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0FUVEFDSE1FTlQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0xJTks7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhRnJvbVNoYXBlQXRycmlidXRlKHNoYXBlQXR0cmlidXRlOiBhbnkpIHtcclxuICAgICAgICBpZiAoISFzaGFwZUF0dHJpYnV0ZS5saW5rVXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwoJycsICcnLCBzaGFwZUF0dHJpYnV0ZS5saW5rVGl0bGUpO1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBzaGFwZUF0dHJpYnV0ZS5saW5rVXJsO1xyXG4gICAgICAgICAgICBjb25zdCBoYXNoSW5kZXggPSB1cmwuaW5kZXhPZignIycpO1xyXG4gICAgICAgICAgICBsZXQgZG9jdW1lbnRUeXBlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKCEhc2hhcGVBdHRyaWJ1dGUuY29ubmVjdGlvblR5cGVJZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBzaGFwZUF0dHJpYnV0ZS5jb25uZWN0aW9uVHlwZUlkO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlID0gdGhpcy5nZXRSZWxhdGVkSXRlbUJ5U2hhcGVDb25uZWN0aW9uVHlwZShzaGFwZUF0dHJpYnV0ZS5jb25uZWN0aW9uVHlwZUlkLCB1cmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRUeXBlID0gdGhpcy5nZXREb2N1bWVudFR5cGUodXJsKTtcclxuICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudFR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbGlua0lkID0gdGhpcy5nZXRMaW5rSWQodXJsLCBkb2N1bWVudFR5cGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gbGlua0lkID8gK2xpbmtJZCA6IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPSBkb2N1bWVudFR5cGU7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnROYW1lID0gc2hhcGVBdHRyaWJ1dGUucGFyZW50TmFtZTtcclxuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IHNoYXBlQXR0cmlidXRlLmxpbmtUYXJnZXQ7XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBsb2dvXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLm1hdEljb24gPSAndGV4dF9zbmlwcGV0JztcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uU1ZHSWNvbiA9IHRoaXMuZ2V0U2hhcGVNb2RlbEljb25CeURhdGFUeXBlKGRvY3VtZW50VHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gaGFuZGxlIExpbmtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5saW5rLmxpbmsgPSB1cmw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhbGlua0lkICYmIGRvY3VtZW50VHlwZSA9PSBEYXRhVHlwZS5kb2N1bWVudCAmJiBoYXNoSW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmFuY2hvci5hbmNob3JWYWx1ZSA9IHVybC5zdWJzdHIoaGFzaEluZGV4ICsgMSwgdXJsLmxlbmd0aCAtIGhhc2hJbmRleCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KGxpbmtJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFNoYXBlTW9kZWwoaWQ6IGFueSA9ICcnLCBpdGVtVHlwZTogYW55ID0gJycsIGl0ZW1OYW1lOiBzdHJpbmcgPSAnJywgc3RhdHVzTmFtZTogc3RyaW5nID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbCA9IG5ldyBTaGFwZU1vZGVsKCk7XHJcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZCA9IGlkO1xyXG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pZCA9IGlkO1xyXG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9IGl0ZW1UeXBlO1xyXG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtTmFtZSA9IGl0ZW1OYW1lO1xyXG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5zdGF0dXNOYW1lID0gc3RhdHVzTmFtZTtcclxuICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gVGFyZ2V0VHlwZU5hbWUubmV3O1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpbmtJZCh1cmw6IHN0cmluZywgdHlwZTogRGF0YVR5cGUpIHtcclxuICAgICAgICBsZXQgcGFydGlhbFVybEluZGV4ID0gMDtcclxuICAgICAgICBsZXQgcGFydGlhbFVybExlbmd0aCA9IDA7XHJcbiAgICAgICAgbGV0IGlkID0gJyc7XHJcbiAgICAgICAgbGV0IGZyb20gPSAwO1xyXG4gICAgICAgIGxldCB1cmxMb3dlckNhc2UgPSAhIXVybCA/IHVybC50b0xvd2VyQ2FzZSgpIDogJyc7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcnRpYWxVcmwgPSB0aGlzLmdldFBhcnRpYWxVcmwodHlwZSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICBjb25zdCBoYXNoSW5kZXggPSB1cmxMb3dlckNhc2UuaW5kZXhPZignIycpO1xyXG5cclxuICAgICAgICBpZiAoISFwYXJ0aWFsVXJsKSB7XHJcbiAgICAgICAgICAgIHBhcnRpYWxVcmxJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKHBhcnRpYWxVcmwpO1xyXG5cclxuICAgICAgICAgICAgcGFydGlhbFVybExlbmd0aCA9IHBhcnRpYWxVcmwubGVuZ3RoO1xyXG4gICAgICAgICAgICBmcm9tID0gcGFydGlhbFVybEluZGV4ICsgcGFydGlhbFVybExlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlID09IERhdGFUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSwgaGFzaEluZGV4IC0gZnJvbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW5ndGggPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pLmluZGV4T2YoJy8nKTtcclxuICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1cmxMb3dlckNhc2Uuc3Vic3RyKGZyb20sIGxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09IERhdGFUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBwYXJzZUludChpZCwgMTApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgICAgIGlkID0gJyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJlbGF0ZWRJdGVtQnlTaGFwZUNvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlSWQ6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUsIHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgc3dpdGNoIChjb25uZWN0aW9uVHlwZUlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmRldmlhdGlvbjtcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5jaGVja2xpc3Q7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFydGlhbFVybCh0eXBlOiBEYXRhVHlwZSkge1xyXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMO1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTDtcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTDtcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkw7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTDtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RG9jdW1lbnRUeXBlKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5kb2N1bWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUucHJvY2VzcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5BUkVBX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5hcmVhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmZvbGRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuREVWSUFUSU9OX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5kZXZpYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkNIRUNLTElTVF9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuY2hlY2tsaXN0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZGF0YVR5cGU6IERhdGFUeXBlKSB7XHJcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kb2N1bWVudDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnQnO1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiAncHJvY2Vzcyc7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdwcm9jZXNzX2ludGVyY29ubmVjdGVkJztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb246XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2RldmlhdGlvbic7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuY2hlY2tsaXN0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdjaGVja2xpc3QnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RDb25uZWN0VHlwZShldmVudDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSkge1xyXG4gICAgICAgIHN3aXRjaCAoZXZlbnQpIHtcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuUHJvY2Vzc0RvY3VtZW50KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkRldmlhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5DaGVja2xpc3QoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkF0dGFjaG1lbnREaWFsb2coKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkxpbmsoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSwgMzAwKVxyXG4gICAgfVxyXG5cclxuICAgIGdldEFuY2hvckRvY3VtZW50KGRvY3VtZW50SWQpIHtcclxuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuaXNBbmNob3JMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRBbmNob3JEb2N1bWVudExpc3QoZG9jdW1lbnRJZClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZG9jdW1lbnRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcnMgPSB0aGlzLmV4dHJhY3REb2N1bWVudEFuY2hvcnMoZG9jdW1lbnRzIHx8IFtdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5pc0FuY2hvckxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0cmFjdERvY3VtZW50QW5jaG9ycyhhbmNob3JEb2N1bWVudDogUU1TQ0tFZGl0b3JMaW5rQW5jaG9yRG9jdW1lbnRbXSkge1xyXG4gICAgICAgIGNvbnN0IGFuY2hvcnM6IFFNU0JQTU5TaGFwZUFuY2hvcltdID0gW3sgdmFsdWU6IDAsIHZpZXdWYWx1ZTogJycsIGFuY2hvclZhbHVlOiBMaW5rQW5jaG9yLkJsYW5rIH1dO1xyXG4gICAgICAgIGxldCBpZCA9IDM7XHJcbiAgICAgICAgaWYgKGFuY2hvckRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIGFuY2hvckRvY3VtZW50LmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IGUucmljaFRleHQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb21Db250ZW50ID0gZGl2O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYVRhZ3MgPSBkb21Db250ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYVRhZ3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYVRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0gYVRhZ3NbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSBhbmNob3JzLmZpbmRJbmRleCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmFuY2hvclZhbHVlID09PSB0YWcubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0YWcubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9yVmFsdWU6IHRhZy5uYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiAxLFxyXG4gICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1JfQVRUQUNITUVOVCxcclxuICAgICAgICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQXR0YWNobWVudFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFuY2hvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiAyLFxyXG4gICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BTkNIT1JfUkVMQVRFRF9ET0NVTUVOVCxcclxuICAgICAgICAgICAgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuUmVsYXRlZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBhbmNob3JzO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTaGFwZUFuY2hvcihhbmNob3JWYWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmFuY2hvci5hbmNob3JWYWx1ZSA9IGFuY2hvclZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTH0ke3RoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWR9IyR7YW5jaG9yVmFsdWV9YFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDZWxsVmlldy5tb2RlbC5wcm9wKCdsaW5rVXJsJywgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTaGFwZVRhcmdldCh0YXJnZXRJZDogYW55KSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcclxuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IHRhcmdldElkO1xyXG4gICAgICAgICAgICBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtUYXJnZXQnLCB0YXJnZXRJZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZEFuY2hvckRvY3VtZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcclxuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwgJiYgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtICYmIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlQ29ubmVjdGlvbihzZWxlY3RlZENvbm5lY3Rpb25UeXBlOiBhbnkpIHtcclxuICAgICAgICBsZXQgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcclxuICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuTEFORy5CUE1OLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XHJcbiAgICAgICAgc3dpdGNoIChzZWxlY3RlZENvbm5lY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzczpcclxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uREVMRVRFX0RPQ1VNRU5UX09SX1BST0NFU1M7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfRE9DVU1FTlRfT1JfUFJPQ0VTUztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uOlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuREVMRVRFX1NIQVBFX0RFVklBVElPTjtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9ERVZJQVRJT047XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdDpcclxuICAgICAgICAgICAgICAgIHRpdGxlID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkRFTEVURV9TSEFQRV9DSEVDS0xJU1Q7XHJcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfQ0hFQ0tMSVNUO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rOlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfTElOSztcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9BVFRBQ0hNRU5UO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50OlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfQVRUQUNITUVOVDtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9BVFRBQ0hNRU5UO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd0NvbmZpcm1EaWFsb2codGl0bGUsIGNvbnRlbnQsIGZhbHNlLCAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gdHJ1ZSB8fCAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnICYmIHZhbHVlLmlzQ29uZmlybWVkID09IHRydWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsID0gbmV3IFNoYXBlTW9kZWwoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnbGlua1VybCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVGFyZ2V0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2xpbmtUaXRsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdjb25uZWN0aW9uVHlwZUlkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBzaG93Q29uZmlybURpYWxvZyh0aXRsZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGlzTWVzc2FnZTogYm9vbGVhbiwgY2FsbGJhY2s/OiAocmVzdWx0PzogYW55KSA9PiB2b2lkKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xyXG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICBkYXRhLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgICAgIGRhdGEuaXNNZXNzYWdlID0gaXNNZXNzYWdlO1xyXG4gICAgICAgIGRhdGEuaXNDbG9zZUJ0biA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckNvbmZpcm1Db21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6ICc1MDBweCcsXHJcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzE3NXB4JyxcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dSZWZcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBEb2N1bWVudCBQcm9jZXNzXHJcbiAgICBvcGVuUHJvY2Vzc0RvY3VtZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSA9IG5ldyBTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cERhdGEoKTtcclxuICAgICAgICBkYXRhLm1vZHVsZUlkID0gTW9kdWxlVHlwZS5kb2N1bWVudFByb2Nlc3M7XHJcbiAgICAgICAgZGF0YS5tb2R1bGVOYW1lID0gdGhpcy5MQU5HLkJQTU4uRE9DVU1FTlRfUFJPQ0VTUztcclxuICAgICAgICBkYXRhLnRyZWVEYXRhMSA9IHRoaXMudHJlZVByb2Nlc3NEYXRhO1xyXG4gICAgICAgIGRhdGEudHJlZURhdGEyID0gdGhpcy50cmVlRG9jdW1lbnREYXRhO1xyXG4gICAgICAgIGRhdGEudHJlZUNvbmZpZzEgPSB0aGlzLnByb2Nlc3NUcmVlQ29uZmlnO1xyXG4gICAgICAgIGRhdGEudHJlZUNvbmZpZzIgPSB0aGlzLmRvY3VtZW50VHJlZUNvbmZpZztcclxuICAgICAgICBkYXRhLnNwbGl0VmlldyA9IHRoaXMuc3BsaXRWaWV3O1xyXG4gICAgICAgIGRhdGEuaXNTZWxlY3RPbmUgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6ICc3NjhweCcsXHJcbiAgICAgICAgICAgIG1pbkhlaWdodDogJzY5MHB4JyxcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1tYXQtZGlhbG9nLWNvbnRhaW5lcidcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU2VhcmNoLnN1YnNjcmliZShhc3luYyAoa2V5d29yZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICgha2V5d29yZCB8fCBrZXl3b3JkLnRyaW0oKSA9PT0gJycpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsZXQgZ2V0U2VhcmNoT3B0aW9uID0gbmV3IEdldFNlYXJjaFByb2Nlc3NEb2N1bWVudE9wdGlvbih0cnVlLCB0cnVlLCB0aGlzLmRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkLCB0cnVlLCB0cnVlKTtcclxuICAgICAgICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0ID0gYXdhaXQgdGhpcy50cmVlU2VydmljZS5nZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnQoa2V5d29yZC50cmltKCksIGdldFNlYXJjaE9wdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTZWFyY2hSZWxhdGVkKHNlYXJjaFJlc3VsdCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vbkV4cGFuZFByb2Nlc3NBcmVhLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5nZXRBcmVhQ2hpbGRyZW5Ob2RlKGZvbGRlci5pZCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSwgdGhpcy5kYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuQXJlYSA/IHguaWQudG9TdHJpbmcoKSA6IHgucHJvY2Vzc0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiB4LnN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiB4LnN0YXR1c05hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8gMCA6IHguaXRlbU51bWJlcklkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8gRGF0YVR5cGUuYXJlYSA6IHgudHlwZSA9PT0gUHJvY2Vzc05vZGVUeXBlLlByb2Nlc3MgPyBEYXRhVHlwZS5wcm9jZXNzIDogRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldFByb2Nlc3NBcmVhQ2hpbGRyZW4oYXJlYXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25FeHBhbmRGb2xkZXIuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmdldEZvbGRlckNoaWxkcmVuKGZvbGRlci5pZCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSlcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gcmVzLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC5pZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB0aGlzLmdldFBhcmVudElkKHgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogeC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiB0aGlzLmlzRm9sZGVyKHgudHlwZSkgPyB4LnR5cGUgOiBmb2xkZXIubGV2ZWxUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldEZvbGRlckNoaWxkcmVuKGFyZWFzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU2VsZWN0Rm9sZGVySXRlbS5zdWJzY3JpYmUoKGZvbGRlcikgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZm9sZGVyLml0ZW1UeXBlID09PSBEYXRhVHlwZS5hcmVhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0ZWRTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldEFyZWFDb250ZW50KGZvbGRlci5pZCwgZmFsc2UsIHRoaXMuZW5hYmxlZEludGVyY29ubmVjdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbGUucHJvY2Vzc0lkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGVsZS5wcm9jZXNzTnVtYmVyLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBlbGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVR5cGU6IGVsZS5wcm9jZXNzQ2xhc3NpZmljYXRpb24gPT09IFByb2Nlc3NDbGFzc2lmaWNhdGlvblR5cGVzLlByb2Nlc3NlcyA/IERhdGFUeXBlLnByb2Nlc3MgOiBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZWxlLnN0YXR1cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogdGhpcy5nZXREaXNsYXlOYW1lT2ZQcm9jZXNzU3RhdHVzKGVsZS5zdGF0dXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogZm9sZGVyLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBmb2xkZXIuaXRlbU5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U3BsaXR2aWV3VmFsdWUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvbGRlci5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0ZWRTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldEZvbGRlckNvbnRlbnQoZm9sZGVyLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogSVJlbGF0ZWRbXSA9IHJlcy5tYXAoKGVsZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbGUuaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBlbGUuaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGVsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogRGF0YVR5cGUuZG9jdW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogZWxlLnN0YXR1c05hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBmb2xkZXIuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGZvbGRlci5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBmb2xkZXIubGV2ZWxUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldFNwbGl0dmlld1ZhbHVlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHJlc3VsdFswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwoKG9iai5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2VzcyB8fCBvYmouaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCkgPyBvYmouaXRlbU51bWJlcklkIDogb2JqLmlkLCBvYmouaXRlbVR5cGUsIG9iai5pdGVtTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IHRoaXMuZ2V0TGlua1VSTCh0aGlzLnNoYXBlTW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLlNWR0ljb24gPSB0aGlzLmdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZSh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9iai5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEFuY2hvckRvY3VtZW50KG9iai5pZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBzYXZlIGNvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfRE9DVU1FTlRfUFJPQ0VTUztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpbmtVUkwoc2hhcGVNb2RlbDogU2hhcGVNb2RlbCkge1xyXG4gICAgICAgIHN3aXRjaCAoc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OlxyXG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcclxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcclxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMfSR7c2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWR9YDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcclxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LlBST0NFU1NfSU5URVJDT05ORUNURURfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZGV2aWF0aW9uOlxyXG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuREVWSUFUSU9OX1BBUlRJQUxfVVJMfSR7c2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnRJZH0vJHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmlkfWA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3Q6XHJcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5DSEVDS0xJU1RWMl9QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaWR9YDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmVudElkKGl0ZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5pc0ZvbGRlcihpdGVtLnR5cGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhaXRlbS5wYXJlbnRIYW5kYm9va0lkID8gJycgOiBpdGVtLnBhcmVudEhhbmRib29rSWQudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICFpdGVtLnBhcmVudEZvbGRlcklkID8gJycgOiBpdGVtLnBhcmVudEZvbGRlcklkLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzbGF5TmFtZU9mUHJvY2Vzc1N0YXR1cyhzdGF0dXM6IG51bWJlcikge1xyXG4gICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5pblByb2dyZXNzOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uSU5fUFJPR1JFU1MnO1xyXG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuc2VuZFRvQXBwcm92YWw6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5TRU5EX1RPX0FQUFJPVkFMJztcclxuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmFwcHJvdmVkOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uQVBQUk9WRUQnO1xyXG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMudW5kZXJSZXZpc2lvbjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLlVOREVSX1JFVklTSU9OJztcclxuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmRlbGV0ZWQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5ERUxFVEVEJztcclxuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLnJldmlld09ySGVhcmluZzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLkhFQVJJTkcnO1xyXG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuYXJjaGl2ZWQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5BUkNISVZFRCc7XHJcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5oZWFyaW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdQUk9DRVNTLkhFQVJJTkcnO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uVU5LTk9XTic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG4gICAgLy8jcmVnaW9uIERldmlhdGlvblxyXG4gICAgb3BlbkRldmlhdGlvbigpIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBTZWxlY3RPbmVQb3B1cERhdGEgPSBuZXcgU2VsZWN0T25lUG9wdXBEYXRhKCk7XHJcbiAgICAgICAgZGF0YS5tb2R1bGVJZCA9IE1vZHVsZVR5cGUuZGV2aWF0aW9uO1xyXG4gICAgICAgIGRhdGEubW9kdWxlTmFtZSA9IHRoaXMuTEFORy5CUE1OLkRFVklBVElPTjtcclxuICAgICAgICBkYXRhLnRyZWVEYXRhID0gdGhpcy5kZXZpYXRpb25EYXRhVHJlZTtcclxuICAgICAgICBkYXRhLnRyZWVDb25maWcgPSB0aGlzLmRldmlhdGlvblNlbGVjdE9uZUNvbmZpZztcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlbGVjdE9uZURpYWxvZywge1xyXG4gICAgICAgICAgICB3aWR0aDogJzQwMHB4JyxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnNTY3cHgnLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1hdC1kaWFsb2ctY29udGFpbmVyJ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWFyY2guc3Vic2NyaWJlKChrZXl3b3JkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5zZWFyY2hSZWxhdGVkVG9EZXZpYXRpb24oa2V5d29yZClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSByZXMuY2F0ZWdvcmllcztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnFtc1JlbGF0ZWRTZXJ2aWNlLnNldFNlYXJjaFJlbGF0ZWQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdDogSVJlbGF0ZWRbXSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iaiA9IHJlc3VsdFswXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwob2JqLmlkLCBvYmouaXRlbVR5cGUsIG9iai5pdGVtTmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50SWQgPSBvYmoucGFyZW50SWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50TmFtZSA9IG9iai5wYXJlbnROYW1lXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IHRoaXMuZ2V0TGlua1VSTCh0aGlzLnNoYXBlTW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzYXZlIGNvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfREVWSUFUSU9OO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcbiAgICAvLyNyZWdpb24gQ2hlY2tsaXN0XHJcbiAgICBvcGVuQ2hlY2tsaXN0KCkge1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBuZXcgRGVmYXVsdEZvcm1TZWxlY3RBY2Nlc3MoKTtcclxuICAgICAgICBjb25zdCBhY2Nlc3NEaWFsb2c6IFFNU1NlbGVjdEFjY2Vzc0RpYWxvZyA9IHtcclxuICAgICAgICAgICAgLi4ubmV3IFFNU1NlbGVjdEFjY2Vzc0RpYWxvZygpLFxyXG4gICAgICAgICAgICAuLi5mb3JtVmFsdWUuY29uZmlnLFxyXG4gICAgICAgICAgICAuLi5mb3JtVmFsdWUubW9kZSxcclxuICAgICAgICAgICAgdHJlZURlcGFydG1lbnRDb25maWc6IHtcclxuICAgICAgICAgICAgICAgIC4uLm5ldyBRTVNTZWxlY3RBY2Nlc3NEaWFsb2coKS50cmVlRGVwYXJ0bWVudENvbmZpZyxcclxuICAgICAgICAgICAgICAgIG1vZGVWaWV3OiBmb3JtVmFsdWUuY29uZmlnLm9wdGlvblZpZXdEZXBhcnRtZW50LFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlU2VsZWN0QWxsTm9kZTogZm9ybVZhbHVlLmNvbmZpZy5hY3RpdmVTZWxlY3RBbGxUcmVlLFxyXG4gICAgICAgICAgICAgICAgY2FuQWRkTnVsbFJlc3VsdDogZm9ybVZhbHVlLmNvbmZpZy5jYW5BZGROdWxsUmVzdWx0LFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlSW5jbHVkZUNoaWxkOiBmb3JtVmFsdWUuY29uZmlnLmVuYWJsZUluY2x1ZGVDaGlsZCxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZW5hYmxlU2VsZWN0VXNlckdyb3VwOiB0cnVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgYWNjZXNzRGlhbG9nLnRyZWVEZXBhcnRtZW50Q29uZmlnLmlzU2VsZWN0T25lID0gdHJ1ZTtcclxuICAgICAgICBhY2Nlc3NEaWFsb2cubW9kZVNlbGVjdE9uZVVzZXJHcm91cCA9IHRydWU7XHJcblxyXG4gICAgICAgIGFjY2Vzc0RpYWxvZy51c2VyR3JvdXBDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHNlYXJjaE5hbWU6IHRoaXMuTEFORy5CUE1OLkNIRUNLTElTVFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gMTA7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5hY2Nlc3NEaWFsb2dTZXJ2aWNlLmZpbHRlckFjY2VzcyhwYWdlU2l6ZSwgYWNjZXNzRGlhbG9nKTtcclxuICAgICAgICBkaWFsb2dSZWZcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0Py51c2VyR3JvdXBzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IHJlc3VsdC51c2VyR3JvdXBzWzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbChvYmouaWQsIERhdGFUeXBlLmNoZWNrbGlzdCwgb2JqLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudE5hbWUgPSBvYmouaGVscFRleHQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IHRoaXMuZ2V0TGlua1VSTCh0aGlzLnNoYXBlTW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUodGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzYXZlIGNvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfQ0hFQ0tMSVNUO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuICAgIC8vI3JlZ2lvbiBBdHRhY2htZW50XHJcbiAgICBvcGVuQXR0YWNobWVudERpYWxvZygpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yUGFyYW10ZXIoKTtcclxuICAgICAgICBkYXRhLm1vZHVsZSA9IENLRWRpdG9yTW9kdWxlLmRvY3VtZW50O1xyXG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLmVudGl0eUlkO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihMaW5rQXR0YWNobWVudENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzY1MHB4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnNjUwcHgnLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKG51bGwsIDAsIHJlc3VsdC50aXRsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSByZXN1bHQudXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5tYXRJY29uID0gJ3RleHRfc25pcHBldCc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfQVRUQUNITUVOVDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuICAgIC8vI3JlZ2lvbiBMaW5rXHJcbiAgICBvcGVuTGluaygpIHtcclxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IFNoYXBlTGluaygpO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQlBNTkxpbmtDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6ICczNTBweCcsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzI0NXB4JyxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1hdC1kaWFsb2ctY29udGFpbmVyJyxcclxuICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKG5ld0xpbmspID0+IHtcclxuICAgICAgICAgICAgaWYgKG5ld0xpbmspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmxpbmsubGluayA9IG5ld0xpbmsubGluaztcclxuICAgICAgICAgICAgICAgIHRoaXMubWFwU2hhcGVEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfTElOSztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgbWFwU2hhcGVEYXRhKCkge1xyXG4gICAgICAgIGlmICghIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddKSB7XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtVcmwnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCAhPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsIDogdGhpcy5zaGFwZU1vZGVsLmxpbmsubGluayk7XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtUYXJnZXQnLCBUYXJnZXRUeXBlTmFtZS5uZXcpO1xyXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdsaW5rVGl0bGUnLCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCAhPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtTmFtZSA6ICcnKTtcclxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnY29ubmVjdGlvblR5cGVJZCcsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkKTtcclxuICAgICAgICAgICAgLy8gZGV2aWF0aW9uIGFuZCBjaGVja2xpc3QgaGF2ZSBwYXJlbnQgbmFtZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uXHJcbiAgICAgICAgICAgICAgICB8fCB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3QpXHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdwYXJlbnROYW1lJywgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoZ3JhcGg6IGFueSwgcGFwZXI6IGFueSwgY2VsbHM6IGFueVtdKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgYmJveCA9IGdyYXBoLmdldENlbGwoY2VsbHNbaV0pLmZpbmRWaWV3KHBhcGVyKS5nZXRCQm94VG9DYWxjdWxhdGVBZGRpdGlvbmFsV2lkdGgoKTtcclxuICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gMDtcclxuICAgICAgICAgICAgaWYgKGJib3ggJiYgY2VsbHNbaV0/LnNpemU/LndpZHRoKVxyXG4gICAgICAgICAgICAgICAgY2VsbHNbaV0uYWRkaXRpb25hbFdpZHRoID0gKGJib3gud2lkdGggPiBjZWxsc1tpXS5zaXplLndpZHRoKSA/IChiYm94LndpZHRoIC0gY2VsbHNbaV0uc2l6ZS53aWR0aCkgOiAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
1313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWZsb3djaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNsRixPQUFPLGFBQWEsTUFBTSxvREFBb0QsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxVQUFVLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFdEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seURB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T3RCLHlCQUF5QjtZQXJEZCxZQUFZO1lBeUR2QixtQkFBbUIsdUJBNEVuQixNQUFNLFNBQUMsZUFBZTtZQXhFdEIsbUJBQW1COzs7dUJBU3ZCLEtBQUs7cUNBR0wsS0FBSzttQ0FDTCxLQUFLO3dCQWdGTCxZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvckV2ZW50Q29uc3QgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckV2ZW50LmNvbnN0YW50XCI7XHJcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JGbG93Y2hhcnQuY29uc3RcIjtcclxuaW1wb3J0IHsgS2V5Ym9hcmRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9mbG93Y2hhcnQvc2VydmljZS9rZXlib2FyZC1zZXJ2aWNlXCI7XHJcbmltcG9ydCBSYXBwaWRTZXJ2aWNlIGZyb20gJy4uLy4uL2NvbW1vbi9mbG93Y2hhcnQvc2VydmljZS9raXRjaGVuc2luay1zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGhlbWVQaWNrZXIgfSBmcm9tIFwiLi4vLi4vY29tbW9uL2Zsb3djaGFydC90aGVtZXMvdGhlbWUtcGlja2VyXCI7XHJcbmltcG9ydCB7IGJhc2U2NFN0cmluZ1RvRmlsZSB9IGZyb20gXCIuLi8uLi9jb21tb24vaGVscGVyL2ZpbGVIZWxwZXJcIjtcclxuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlclwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZGlhbG9nLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRmxvd2NoYXJ0VGVtcGxhdGUgfSBmcm9tIFwiLi4vLi4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LXRlbXBsYXRlLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yRmxvd2NoYXJ0IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclNhdmVBc1RlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXNhdmUtYXMtdGVtcGxhdGUubW9kZWxcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9tb2R1bGUvY29uZmlybS9xbXMtY2tlZGl0b3ItY29uZmlybS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3RvYXN0L3Ftcy1ja2VkaXRvci10b2FzdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9xbXMtY2tlZGl0b3ItYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JDb21tb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1jb21tb24uc2VydmljZXNcIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGbG93Y2hhcnRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1mbG93Y2hhcnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLXVwbG9hZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNhdmVUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItYnBtbi9zYXZlLXRlbXBsYXRlL3NhdmUtdGVtcGxhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE1hdFRhYkNoYW5nZUV2ZW50IH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3RhYnNcIjtcclxuaW1wb3J0IHsgUU1TQlBNTkNvbmZpZyB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWJwbW4tY29uZmlnLm1vZGVsXCI7XHJcbmltcG9ydCB7IEZsb3djaGFydFZpZXdNb2RlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9mbG93Y2hhcnQtdmlldy1tb2RlLmVudW1cIjtcclxuaW1wb3J0IHsgU2hhcGVNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3Ftcy1icG1uL21vZGVscy9zaGFwZS1tb2RlbC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZVwiO1xyXG5pbXBvcnQgeyBUYXJnZXRUeXBlTmFtZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvdGFyZ2V0LXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBEYXRhVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvckxpbmtDb25zdCB9IGZyb20gXCIuLi8uLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yTGluay5jb25zdGFudFwiO1xyXG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IE1hdEljb25SZWdpc3RyeSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yTGlua1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcW1zLWNrZWRpdG9yLWxpbmsuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVUYXJnZXQgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLXRhcmdldFwiO1xyXG5pbXBvcnQgeyBRTVNCUE1OU2hhcGVBbmNob3IgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3Ftcy1icG1uLXNoYXBlLWFuY2hvci5tb2RlbFwiO1xyXG5pbXBvcnQgeyBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudCB9IGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1saW5rLWFuY2hvci1kb2N1bWVudC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBMaW5rQW5jaG9yIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi9lbnVtcy9saW5rLWFuY2hvci5lbnVtXCI7XHJcbmltcG9ydCB7IFRyZWVDb25maWcsIFRyZWVNb2RlbCB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3RyZWVcIjtcclxuaW1wb3J0IHsgRG9jdW1lbnRUcmVlTm9kZURhdGEgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RvY3VtZW50LXRyZWUtbm9kZS1kYXRhLm1vZGVsXCI7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFFNU0NLRWRpdG9yQlBNTkNvbm5lY3Rpb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3Ftcy1ja2VkaXRvci1icG1uLWNvbm5lY3Rpb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEb2N1bWVudE5vZGVUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9lbnVtL2RvY3VtZW50LW5vZGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7IFJlbGF0ZWRJdGVtVHlwZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvcmVsYXRlZC10by1pdGVtLXR5cGVcIjtcclxuaW1wb3J0IHsgUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSwgU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBDb21wb25lbnQsIFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1wcm9jZXNzLWRvY3VtZW50XCI7XHJcbmltcG9ydCB7IE1vZHVsZVR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vbW9kdWxlLXR5cGUuZW51bVwiO1xyXG5pbXBvcnQgeyBHZXRTZWFyY2hQcm9jZXNzRG9jdW1lbnRPcHRpb24gfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2dldC1zZWFyY2gtcHJvY2Vzcy1kb2N1bWVudC1vcHRpb25cIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUcmVlU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFByb2Nlc3NOb2RlVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzLW5vZGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7IElSZWxhdGVkIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcmVsYXRlZC9tb2RlbC9yZWxhdGVkLWRhdGEubW9kZWxcIjtcclxuaW1wb3J0IHsgUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2VudW0vcHJvY2Vzcy1jbGFzc2lmaWNhdGlvbi10eXBlLmVudW1cIjtcclxuaW1wb3J0IHsgUHJvY2Vzc1N0YXR1cyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vZW51bS9wcm9jZXNzU3RhdHVzLmVudW1cIjtcclxuaW1wb3J0IHsgU2hhcGVMaW5rIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvcW1zLWJwbW4vbW9kZWxzL2Zsb3ctY2hhcnQtc2hhcGUvc2hhcGUtbGlua1wiO1xyXG5pbXBvcnQgeyBCUE1OTGlua0NvbXBvbmVudCB9IGZyb20gXCIuLi9xbXMtY2tlZGl0b3ItYnBtbi9saW5rL2JwbW4tbGluay5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUU1TU2VsZWN0T25lR2xvYmFsU2VydmljZSwgU2VsZWN0T25lRGlhbG9nLCBTZWxlY3RPbmVQb3B1cERhdGEgfSBmcm9tIFwiLi4vLi4vLi4vY29tcG9uZW50cy9zZWxlY3Qtb25lXCI7XHJcbmltcG9ydCBRTVNDS0VkaXRvclBhcmFtdGVyIGZyb20gXCIuLi8uLi9jb21tb24vbW9kZWxzL3Ftcy1ja2VkaXRvci1wYXJhbWV0ZXIubW9kZWxcIjtcclxuaW1wb3J0IHsgTGlua0F0dGFjaG1lbnRDb21wb25lbnQgfSBmcm9tIFwiLi4vcW1zLWNrZWRpdG9yLWxpbmsvYXR0YWNobWVudHMvbGluay1hdHRhY2htZW50LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDS0VkaXRvck1vZHVsZSB9IGZyb20gXCIuLi8uLi9jb21tb24vZW51bXMvbW9kdWxlLmVudW1cIjtcclxuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uRGF0YSB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWJwbW4tZGF0YS5tb2RlbFwiO1xyXG5pbXBvcnQgUU1TQ0tFZGl0b3JGbG93Q2hhcnRGdW5jdGlvbnMgZnJvbSBcIi4uLy4uL2NvbW1vbi9mdW5jdGlvbnMvZmxvd2NoYXJ0LmZ1bmN0aW9uXCI7XHJcbmltcG9ydCB7IERlZmF1bHRGb3JtU2VsZWN0QWNjZXNzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbXBvbmVudHMvc2VsZWN0LWFjY2Vzcy1kaWFsb2cvbW9kZWwvZm9ybS1zZWxlY3QtYWNjZXNzLm1vZGVsXCI7XHJcbmltcG9ydCB7IFFNU1NlbGVjdEFjY2Vzc0RpYWxvZyB9IGZyb20gXCIuLi8uLi8uLi9jb21wb25lbnRzL3NlbGVjdC1hY2Nlc3MtZGlhbG9nXCI7XHJcbmltcG9ydCB7IEFjY2Vzc0RpYWxvZ1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvYWNjZXNzLWRpYWxvZy5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncW1zLWZsb3djaGFydCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcW1zLWNrZWRpdG9yLWZsb3djaGFydC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckZsb3djaGFydENvbXBvbmVudCBleHRlbmRzIFFNU0NLRWRpdG9yQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBJbnB1dCgpIGNrRWRpdG9yOiBhbnk7XHJcblxyXG4gICAgUU1TQlBNTkNvbmZpZzogUU1TQlBNTkNvbmZpZyA9IG5ldyBRTVNCUE1OQ29uZmlnKCk7XHJcbiAgICBASW5wdXQoKSBpbnNwZWN0b3JDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgICBASW5wdXQoKSBzdGVuY2lsQ29uZmlndXJhdGlvbjogYW55O1xyXG4gICAgTEFORzogYW55O1xyXG4gICAganNvbkNvbnRlbnQ6IHN0cmluZyA9ICcnO1xyXG4gICAgcmFwcGlkOiBSYXBwaWRTZXJ2aWNlO1xyXG4gICAgaWQgPSAnJztcclxuICAgIGVudGl0eUlkOiBzdHJpbmc7XHJcbiAgICBkb2N1bWVudElkOiBudW1iZXI7XHJcbiAgICBmbG93Y2hhcnQ6IFFNU0NLRWRpdG9yRmxvd2NoYXJ0ID0gbmV3IFFNU0NLRWRpdG9yRmxvd2NoYXJ0KCk7XHJcbiAgICBmbG93Y2hhcnRUZW1wbGF0ZXM6IFFNU0NLRWRpdG9yRmxvd2NoYXJ0VGVtcGxhdGVbXSA9IFtdO1xyXG4gICAgdG9vbGJhckNvbmZpZzogYW55O1xyXG4gICAgY2tFZGl0b3JDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiY2stZWRpdG9yX19lZGl0YWJsZVwiKTtcclxuICAgIHNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgZGlzYWJsZWRDb25uZWN0aW9uVGFiID0gZmFsc2U7XHJcbiAgICBlbmFibGVkSW50ZXJjb25uZWN0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgZW5hYmxlZERldmlhdGlvbk1vZHVsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgZW5hYmxlZENoZWNrbGlzdE1vZHVsZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgc2hhcGVNb2RlbDogU2hhcGVNb2RlbCA9IG5ldyBTaGFwZU1vZGVsKCk7XHJcbiAgICBzaGFwZUlkOiBhbnk7XHJcbiAgICBwcmVTaGFwZUlkOiBhbnk7XHJcbiAgICB0YXJnZXRzOiBRTVNCUE1OU2hhcGVUYXJnZXRbXSA9IFtdO1xyXG4gICAgYW5jaG9yczogUU1TQlBNTlNoYXBlQW5jaG9yW10gPSBbXTtcclxuICAgIHNwbGl0VmlldzogYm9vbGVhbjtcclxuICAgIHByb2Nlc3NUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG4gICAgZG9jdW1lbnRUcmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG4gICAgdHJlZVByb2Nlc3NEYXRhOiBEb2N1bWVudFRyZWVOb2RlRGF0YVtdO1xyXG4gICAgdHJlZURvY3VtZW50RGF0YTogRG9jdW1lbnRUcmVlTm9kZURhdGFbXTtcclxuICAgIGxvYWRpbmdSZWxhdGVkRGF0YTogYm9vbGVhbjtcclxuICAgIC8qIERldmlhdGlvbiBjb25uZWN0IHR5cGUgKi9cclxuICAgIGRldmlhdGlvbkRhdGFUcmVlOiBUcmVlTW9kZWxbXTtcclxuICAgIGRldmlhdGlvblNlbGVjdE9uZUNvbmZpZzogVHJlZUNvbmZpZztcclxuXHJcbiAgICAvKiBDaGVja2xpc3QgY29ubmVjdCB0eXBlICovXHJcbiAgICBjaGVja2xpc3REYXRhVHJlZTogVHJlZU1vZGVsW107XHJcbiAgICBjaGVja2xpc3RTZWxlY3RPbmVDb25maWc6IFRyZWVDb25maWc7XHJcblxyXG4gICAgc2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGU7XHJcbiAgICBmbG93Y2hhcnRWaWV3TW9kZSA9IEZsb3djaGFydFZpZXdNb2RlO1xyXG4gICAgcmVsYXRlZEl0ZW1UeXBlID0gUmVsYXRlZEl0ZW1UeXBlO1xyXG5cclxuICAgIHNlbGVjdGVkVmFsdWUgPSAwO1xyXG5cclxuICAgIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZsb3djaGFydFNlcnZpY2U6IFFNU0NLRWRpdG9yRmxvd2NoYXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHVwbG9hZFNlcnZpY2U6IFFNU0NLRWRpdG9yVXBsb2FkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IFFNU0NLRWRpdG9yQ29tbW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgICAgICBwcml2YXRlIGxpbmtTZXJ2aWNlOiBRTVNDS0VkaXRvckxpbmtTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVsYXRlZFNlcnZpY2U6IFFNU0NLRWRpdG9yQlBNTkNvbm5lY3Rpb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZTogUU1TU2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHRyZWVTZXJ2aWNlOiBRTVNDS0VkaXRvclRyZWVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcW1zUmVsYXRlZFNlcnZpY2U6IFFNU1NlbGVjdE9uZUdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPFFNU0NLRWRpdG9yRmxvd2NoYXJ0Q29tcG9uZW50PixcclxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFFNU0NLRWRpdG9yQnBtbkRhdGEsXHJcbiAgICAgICAgcHJpdmF0ZSBhY2Nlc3NEaWFsb2dTZXJ2aWNlOiBBY2Nlc3NEaWFsb2dTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xyXG4gICAgICAgIHRoaXMuZW50aXR5SWQgPSBkYXRhLmVudGl0eUlkO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRJZCA9IGRhdGEuZG9jdW1lbnRJZDtcclxuICAgICAgICB0aGlzLnNwbGl0VmlldyA9IGRhdGEuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXc7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQgPSBkYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZDtcclxuICAgICAgICB0aGlzLmVuYWJsZWREZXZpYXRpb25Nb2R1bGUgPSBkYXRhLmVuYWJsZWREZXZpYXRpb25Nb2R1bGU7XHJcbiAgICAgICAgdGhpcy5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlID0gZGF0YS5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSW50ZXJjb25uZWN0ZWRJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hvd1NoYXBlQ29ubmVjdGlvblZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bWVzc2FnZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbk1lc3NhZ2UoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuS1NfQ0hBTkdFX1RFTVBMQVRFKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VUZW1wbGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChldmVudC5kYXRhID09PSBGbG93Q2hhcnRDb25zdC5LU19ERUxFVEVfVEVNUExBVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkRlbGV0ZVRlbXBsYXRlKHRoaXMuTEFORy5CUE1OLkRFTEVURV9URU1QTEFURSwgdGhpcy5MQU5HLlFNU0NLRURJVE9SX01FU1NBR0UuQ09ORklSTV9ERUxFVEVfVEVNUExBVEUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT09IEZsb3dDaGFydENvbnN0Lk1VU1RfU0VMRUNUX1RFTVBMQVRFKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0luZm9NZXNzYWdlKHRoaXMuTEFORy5CUE1OLlNFTEVDVF9URU1QTEFURSwgdGhpcy5MQU5HLkJQTU4uU0VMRUNUX1RFTVBMQVRFX0lORk9STUFUSU9OKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuS1NfU0FWRV9BU19URU1QTEFURSkge1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZUFzVGVtcGxhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PT0gRmxvd0NoYXJ0Q29uc3QuS1NfUkVTRVRfVEVNUExBVEUpIHtcclxuICAgICAgICAgICAgdGhpcy5vblJlc2V0VGVtcGxhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmpzb25Db250ZW50ID0gYXdhaXQgdGhpcy5nZXRKc29uQ29udGVudCh0aGlzLmlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yYXBwaWQgPSBuZXcgUmFwcGlkU2VydmljZShcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgICAgIG5ldyBLZXlib2FyZFNlcnZpY2UoKSxcclxuICAgICAgICAgICAgdGhpcy5MQU5HLFxyXG4gICAgICAgICAgICB0aGlzLmluc3BlY3RvckNvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgICAgIHRoaXMuc3RlbmNpbENvbmZpZ3VyYXRpb25cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLnJhcHBpZC5zdGFydFJhcHBpZCgpO1xyXG4gICAgICAgIGNvbnN0IHRoZW1lUGlja2VyID0gbmV3IFRoZW1lUGlja2VyKHsgbWFpblZpZXc6IHRoaXMucmFwcGlkLCBMQU5HOiB0aGlzLkxBTkcgfSk7XHJcbiAgICAgICAgdGhlbWVQaWNrZXIucmVuZGVyKCkuJGVsLmFwcGVuZFRvKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0aGVtZXBpY2tlcicpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuanNvbkNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5yYXBwaWQuZ3JhcGguZnJvbUpTT04oSlNPTi5wYXJzZSh0aGlzLmpzb25Db250ZW50KSk7XHJcbiAgICAgICAgICAgIHRoaXMucmFwcGlkLnBhcGVyU2Nyb2xsZXIucG9zaXRpb25Db250ZW50KCd0b3AtbGVmdCcsIHsgcGFkZGluZzogNTAsIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluaXRGbG93Y2hhcnRDb25maWcoKTtcclxuICAgICAgICB0aGlzLmluaXRSZWxhdGVkQ29uZmlnQW5kRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLmZsb3djaGFydFRlbXBsYXRlcyA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGVzKCk7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVGVtcGxhdGVzKHRoaXMuZmxvd2NoYXJ0VGVtcGxhdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0Rmxvd2NoYXJ0Q29uZmlnKCkge1xyXG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5lZGl0TW9kZSA9IEZsb3djaGFydFZpZXdNb2RlLkVkaXQ7XHJcbiAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5jb25uZWN0VHlwZXMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzLFxyXG4gICAgICAgICAgICAgICAgdmlld1ZhbHVlOiB0aGlzLkxBTkcuQlBNTi5ET0NVTUVOVF9QUk9DRVNTLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5QUk9DRVNTX0RPQ1VNRU5UX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxyXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb24sXHJcbiAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRoaXMuTEFORy5CUE1OLkRFVklBVElPTixcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuREVWSUFUSU9OX0NPTk5FQ1RJT05fR1VJREVMSU5FLFxyXG4gICAgICAgICAgICAgICAgY2FuQ29ubmVjdDogdGhpcy5lbmFibGVkRGV2aWF0aW9uTW9kdWxlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdCxcclxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uQ0hFQ0tMSVNULFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DSEVDS0xJU1RfQ09OTkVDVElPTl9HVUlERUxJTkUsXHJcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0aGlzLmVuYWJsZWRDaGVja2xpc3RNb2R1bGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluayxcclxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLkJQTU4uTElOSyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuTElOS19DT05ORUNUSU9OX0dVSURFTElORSxcclxuICAgICAgICAgICAgICAgIGNhbkNvbm5lY3Q6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdmFsdWU6IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudCxcclxuICAgICAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFUVEFDSE1FTlQsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJycsXHJcbiAgICAgICAgICAgICAgICBjYW5Db25uZWN0OiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50YXJnZXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0cy5wdXNoKHsgdmFsdWU6IFRhcmdldFR5cGVOYW1lLm5ldywgdmlld1ZhbHVlOiB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuVEFSR0VUX0JMQU5LIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRhcmdldHMucHVzaCh7IHZhbHVlOiBUYXJnZXRUeXBlTmFtZS5zYW1lLCB2aWV3VmFsdWU6IHRoaXMuTEFORy5RTVNDS0VESVRPUi5UQVJHRVRfU0VMRiB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0SnNvbkNvbnRlbnQoaWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0U2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmdldEZsb3djaGFydEJ5SWQoaWQpXHJcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdC5qc29uQ29udGVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRUZW1wbGF0ZXMoKTogUHJvbWlzZTxRTVNDS0VkaXRvckZsb3djaGFydFRlbXBsYXRlW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mbG93Y2hhcnRTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZmxvd2NoYXJ0R2V0VGVtcGxhdGVzKClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZVRlbXBsYXRlcyh0ZW1wbGF0ZXM6IFFNU0NLRWRpdG9yRmxvd2NoYXJ0VGVtcGxhdGVbXSkge1xyXG4gICAgICAgIGlmICghdGhpcy5yYXBwaWQpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAodGVtcGxhdGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9vbGJhckNvbmZpZyA9IHRoaXMucmFwcGlkLnRvb2xiYXI7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRoaXMudG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChhcnJTZWxlY3QgJiYgYXJyU2VsZWN0WzBdKSB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGl0ZW0uaW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0udGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmbG93Q2hhcnRJZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25Db250ZW50OiBpdGVtLmpzb25Db250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LmluZGV4ID09PSBvcHRpb24uaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSXRlbTJUZW1wbGF0ZSh0ZW1wbGF0ZT86IFFNU0NLRWRpdG9yRmxvd2NoYXJ0KSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyQ29uZmlnID0gdGhpcy5yYXBwaWQudG9vbGJhcjtcclxuICAgICAgICBjb25zdCBhcnJTZWxlY3QgPSB0aGlzLnRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIGluZGV4OiAxLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogdGVtcGxhdGUudGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IHRlbXBsYXRlLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdGVtcGxhdGUudGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICAgICAganNvbkNvbnRlbnQ6IHRlbXBsYXRlLmpzb25Db250ZW50LFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlU2VsZWN0ZWRWYWx1ZShmbG93Q2hhcnRJZD86IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudG9vbGJhckNvbmZpZyA9IHRoaXMucmFwcGlkLnRvb2xiYXI7XHJcbiAgICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdGhpcy50b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5zcGxpY2UoXHJcbiAgICAgICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS5mbG93Q2hhcnRJZCA9PT0gZmxvd0NoYXJ0SWQ7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKSB7XHJcbiAgICAgICAgdGhpcy50b29sYmFyQ29uZmlnID0gdGhpcy5yYXBwaWQudG9vbGJhcjtcclxuICAgICAgICBjb25zdCBhcnJTZWxlY3QgPSB0aGlzLnRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zWzBdLnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtc2VsZWN0aW9uYClbMF07XHJcbiAgICAgICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IEZsb3dDaGFydENvbnN0LlNFTEVDVF9URU1QTEFURTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2F2ZUltYWdlQ29udGVudCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QganNvbkNvbnRlbnQgPSB0aGlzLnJhcHBpZC5nZXRKc29uQ29udGVudCgpO1xyXG4gICAgICAgICAgICB0aGlzLmZsb3djaGFydCA9IHtcclxuICAgICAgICAgICAgICAgIGlkOiBndWlkSGVscGVyLmVtcHR5LFxyXG4gICAgICAgICAgICAgICAganNvbkNvbnRlbnQ6IGpzb25Db250ZW50LFxyXG4gICAgICAgICAgICAgICAgaXNUZW1wbGF0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU5hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnRJZDogdGhpcy5kb2N1bWVudElkXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0U2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmZsb3djaGFydE1vZGlmeWluZyh0aGlzLmZsb3djaGFydClcclxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uSW5zZXJ0SW1hZ2UoKSB7XHJcbiAgICAgICAgY29uc3QgZ3JhcGggPSB0aGlzLnJhcHBpZC5ncmFwaDtcclxuICAgICAgICBjb25zdCBwYXBlciA9IHRoaXMucmFwcGlkLnBhcGVyO1xyXG4gICAgICAgIGNvbnN0IGdyYXBoT2JqZWN0ID0gZ3JhcGgudG9KU09OKCk7XHJcbiAgICAgICAgY29uc3QgY2xpZW50UmVjdCA9IHBhcGVyLnBhcGVyVG9Mb2NhbFJlY3QocGFwZXIuZ2V0Q29udGVudEJCb3goKSk7XHJcbiAgICAgICAgY29uc3QgaWQgPSBhd2FpdCB0aGlzLnNhdmVJbWFnZUNvbnRlbnQoKTtcclxuICAgICAgICBjb25zdCBpbWFnZUNvbnRlbnQgPSBhd2FpdCB0aGlzLnJhcHBpZC5nZXRJbWFnZUNvbnRlbnQoKTtcclxuICAgICAgICBjb25zdCBmaWxlID0gYmFzZTY0U3RyaW5nVG9GaWxlKGltYWdlQ29udGVudCwgYCR7Q0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVH0jJHtpZH1gKTtcclxuICAgICAgICBjb25zdCByZWxhdGl2ZVVybCA9IGF3YWl0IHRoaXMudXBsb2FkU2VydmljZS51cGxvYWRJbWFnZShmaWxlKS50b1Byb21pc2UoKTtcclxuICAgICAgICB0aGlzLmNhbGN1bGF0ZUFkZGl0aW9uYWxXaWR0aChncmFwaCwgcGFwZXIsIGdyYXBoT2JqZWN0LmNlbGxzKTtcclxuICAgICAgICBjb25zdCBpbWFnZW1hcCA9IFFNU0NLRWRpdG9yRmxvd0NoYXJ0RnVuY3Rpb25zLnRvSW1hZ2VNYXAoaWQsIGdyYXBoT2JqZWN0LmNlbGxzLCBjbGllbnRSZWN0KTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB7IGtleTogYCR7Q0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVH0jJHtpZH1gLCB2YWx1ZXM6IHJlbGF0aXZlVXJsLCBpbWFnZW1hcDogaW1hZ2VtYXAgfVxyXG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY29tbW9uU2VydmljZS5nZXRTY3JvbGxUb3BDa2VkaXRvcih0aGlzLmNrRWRpdG9yKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXRTY3JvbGxUb3BFZGl0b3JDb250YWluZXIodGhpcy5ja0VkaXRvciwgc2Nyb2xsVG9wKTtcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9ICcnO1xyXG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlVGVtcGxhdGUoKSB7XHJcbiAgICAgICAgY29uc3QganNvblRlbXBsYXRlID0gd2luZG93W0Zsb3dDaGFydENvbnN0LktTX1NFTEVDVEVEX0pTT05DT05URU5UXSA/IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19TRUxFQ1RFRF9KU09OQ09OVEVOVF0gOiAnJztcclxuICAgICAgICBpZiAoIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19JU19TRUxFQ1RFRF9URU1QTEFURV0pIHtcclxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LktTX09SR19KU09OQ09OVEVOVF0gPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJhcHBpZC5ncmFwaC50b0pTT04oKSk7XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoanNvblRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmFwcGlkLmdyYXBoLmZyb21KU09OKEpTT04ucGFyc2UoanNvblRlbXBsYXRlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uRGVsZXRlVGVtcGxhdGUodGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xyXG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICBkYXRhLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JDb25maXJtQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNTAwcHgnLFxyXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICcxNzVweCcsXHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KTtcclxuICAgICAgICBkaWFsb2dSZWZcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfU0VMRUNURURfRkxPV0NIQVJUX0lEXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsb3djaGFydFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZsb3djaGFydERlbGV0ZVRlbXBsYXRlKGlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkVmFsdWUoaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfSVNfU0VMRUNURURfVEVNUExBVEVdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2Uuc3VjY2Vzcyh0aGlzLkxBTkcuUU1TQ0tFRElUT1IuREVMRVRFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5lcnJvcih0aGlzLkxBTkcuUU1TQ0tFRElUT1IuREVMRVRFX0ZBSUxFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU2F2ZUFzVGVtcGxhdGUoKSB7XHJcbiAgICAgICAgY29uc3QganNvbkNvbnRlbnQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLnJhcHBpZC5ncmFwaC50b0pTT04oKSk7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlID0gbmV3IFFNU0NLRWRpdG9yRmxvd2NoYXJ0KCk7XHJcbiAgICAgICAgdGVtcGxhdGUgPSB7XHJcbiAgICAgICAgICAgIGlkOiBndWlkSGVscGVyLmVtcHR5LFxyXG4gICAgICAgICAgICBqc29uQ29udGVudDoganNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgIGlzVGVtcGxhdGU6IHRydWUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlTmFtZTogJydcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JTYXZlQXNUZW1wbGF0ZSgpO1xyXG4gICAgICAgIGRhdGEudGVtcGxhdGVUeXBlID0gQ0tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVDtcclxuICAgICAgICBkYXRhLmZsb3djaGFydCA9IHRlbXBsYXRlO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihTYXZlVGVtcGxhdGVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgd2lkdGg6ICc0NTBweCcsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzIyMHB4JyxcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcclxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5mbG93Y2hhcnQudGVtcGxhdGVOYW1lID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0U2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmxvd2NoYXJ0TW9kaWZ5aW5nKGRhdGEuZmxvd2NoYXJ0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRTVNDS0VkaXRvclRvYXN0U2VydmljZS5zdWNjZXNzKHRoaXMuTEFORy5RTVNDS0VESVRPUi5TQVZFRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5mbG93Y2hhcnQuaWQgPSByZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtMlRlbXBsYXRlKGRhdGEuZmxvd2NoYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUU1TQ0tFZGl0b3JUb2FzdFNlcnZpY2UuZXJyb3IodGhpcy5MQU5HLlFNU0NLRURJVE9SLlNBVkVfRkFJTEVEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVzZXRUZW1wbGF0ZSgpIHtcclxuICAgICAgICBpZiAod2luZG93W0Zsb3dDaGFydENvbnN0LktTX0lTX1NFTEVDVEVEX1RFTVBMQVRFXSkge1xyXG4gICAgICAgICAgICBjb25zdCBvcmdUZW1wbGF0ZSA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5LU19PUkdfSlNPTkNPTlRFTlRdID8gd2luZG93W0Zsb3dDaGFydENvbnN0LktTX09SR19KU09OQ09OVEVOVF0gOiAnJztcclxuICAgICAgICAgICAgaWYgKG9yZ1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhcHBpZC5ncmFwaC5mcm9tSlNPTihKU09OLnBhcnNlKG9yZ1RlbXBsYXRlKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuS1NfSVNfU0VMRUNURURfVEVNUExBVEVdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93SW5mb01lc3NhZ2UodGl0bGU6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JEaWFsb2dEYXRhID0gbmV3IFFNU0NLRWRpdG9yRGlhbG9nRGF0YSgpO1xyXG4gICAgICAgIGRhdGEudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICBkYXRhLmNvbnRlbnQgPSBjb250ZW50O1xyXG4gICAgICAgIGRhdGEuaXNNZXNzYWdlID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnMTc1cHgnLFxyXG4gICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vVE9ET1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNsb3NlRGlhbG9nKCkge1xyXG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XHJcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldFNjcm9sbFRvcENrZWRpdG9yKHRoaXMuY2tFZGl0b3IpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldFNjcm9sbFRvcEVkaXRvckNvbnRhaW5lcih0aGlzLmNrRWRpdG9yLCBzY3JvbGxUb3ApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVGFiQ2hhbmdlKCRldmVudDogTWF0VGFiQ2hhbmdlRXZlbnQpIHtcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuVEFCX05BTUVdID0gJGV2ZW50LnRhYi50ZXh0TGFiZWw7XHJcbiAgICAgICAgaWYgKCRldmVudC50YWIudGV4dExhYmVsID09IHRoaXMuTEFORy5CUE1OLlBST1BFUlRJRVMpIHtcclxuICAgICAgICAgICAgdGhpcy5yYXBwaWQub25TZWxlY3Rpb25DaGFuZ2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8jcmVnaW9uIEluaXQgZGF0YSB1c2luZyBmb3IgY29ubmVjdGlvblxyXG4gICAgaW5pdFJlbGF0ZWRDb25maWdBbmREYXRhKCkge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1RyZWVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGFsbG93U2VsZWN0Rm9sZGVyOiB0cnVlLFxyXG4gICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogJycsXHJcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcclxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiBmYWxzZSxcclxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUucHJvY2VzcyxcclxuICAgICAgICAgICAgb3Blbkljb25Db2xvcjogJyMxOTU0QTknLFxyXG4gICAgICAgICAgICBjbG9zZUljb25Db2xvcjogJyNhNGIwZGUnLFxyXG4gICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IHRydWUsXHJcbiAgICAgICAgICAgIG9ubHlGb2xkZXI6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFRyZWVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGFsbG93U2VsZWN0Rm9sZGVyOiB0cnVlLFxyXG4gICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogJycsXHJcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcclxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmRvY3VtZW50LFxyXG4gICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IGZhbHNlLFxyXG4gICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogZmFsc2UsXHJcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcclxuICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcjNGFjYWZmJyxcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiB0cnVlLFxyXG4gICAgICAgICAgICBvbmx5Rm9sZGVyOiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuZGV2aWF0aW9uU2VsZWN0T25lQ29uZmlnID0ge1xyXG4gICAgICAgICAgICBhbGxvd1NlbGVjdEZvbGRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgIHNob3dDaGVja0JveDogZmFsc2UsXHJcbiAgICAgICAgICAgIGFsbG93TXVsdGlwbGVDaGVjazogZmFsc2UsXHJcbiAgICAgICAgICAgIG9ubHlDaGVja0JveEZvckNoaWxkOiBmYWxzZSxcclxuICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmRldmlhdGlvbixcclxuICAgICAgICAgICAgb3Blbkljb246ICdrZXlib2FyZF9hcnJvd191cCcsXHJcbiAgICAgICAgICAgIG9wZW5JY29uQ29sb3I6ICcjMTk1NEE5JyxcclxuICAgICAgICAgICAgY2xvc2VJY29uOiAna2V5Ym9hcmRfYXJyb3dfZG93bicsXHJcbiAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiAnJyxcclxuICAgICAgICAgICAgaXRlbUljb246ICdyZXBvcnRfcHJvYmxlbScsXHJcbiAgICAgICAgICAgIHNpbmdsZVNlbGVjdGVkTm9kZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGNhbkhhdmVEdXBJZDogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0T25lOiB0cnVlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVja2xpc3RTZWxlY3RPbmVDb25maWcgPSB7XHJcbiAgICAgICAgICAgIGFsbG93U2VsZWN0Rm9sZGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgc2hvd0NoZWNrQm94OiBmYWxzZSxcclxuICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiBmYWxzZSxcclxuICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBtb2R1bGVJZDogRGF0YVR5cGUuY2hlY2tsaXN0LFxyXG4gICAgICAgICAgICBvcGVuSWNvbjogJ2tleWJvYXJkX2Fycm93X3VwJyxcclxuICAgICAgICAgICAgb3Blbkljb25Db2xvcjogJyMxOTU0QTknLFxyXG4gICAgICAgICAgICBjbG9zZUljb246ICdrZXlib2FyZF9hcnJvd19kb3duJyxcclxuICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6ICcnLFxyXG4gICAgICAgICAgICBpdGVtSWNvbjogJ2Zvcm1hdF9saXN0X2J1bGxldGVkJyxcclxuICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiBmYWxzZSxcclxuICAgICAgICAgICAgY2FuSGF2ZUR1cElkOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RPbmU6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1JlbGF0ZWREYXRhID0gdHJ1ZTtcclxuICAgICAgICBmb3JrSm9pbih0aGlzLnJlbGF0ZWRTZXJ2aWNlLmdldEFyZWFDaGlsZHJlbk5vZGUobnVsbCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSwgdGhpcy5kYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCksXHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0Rm9sZGVyQ2hpbGRyZW4obnVsbCwgIXRoaXMuc3BsaXRWaWV3LCBmYWxzZSksXHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlZERldmlhdGlvbk1vZHVsZSA/IHRoaXMucmVsYXRlZFNlcnZpY2UuZ2V0RGV2aWF0aW9uVHJlZURhdGEoKSA6IG9mKG51bGwpLFxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZWRDaGVja2xpc3RNb2R1bGUgPyB0aGlzLnJlbGF0ZWRTZXJ2aWNlLmdldENoZWNrbGlzdERhdGEoKSA6IG9mKG51bGwpXHJcbiAgICAgICAgKS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKFtwcm9jZXNzZXMsIGRvY3VtZW50cywgZGV2aWF0aW9ucywgY2hlY2tsaXN0c10pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmVhcyA9IHByb2Nlc3Nlcy5tYXAoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWQgPT09IGd1aWRIZWxwZXIuZW1wdHkgPyAnJyA6IHgucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZVByb2Nlc3NEYXRhID0gYXJlYXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyZWFzID0gZG9jdW1lbnRzLm1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHgubmFtZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6ICF4LnBhcmVudEhhbmRib29rSWQgPyAnJyA6IHgucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogeC50eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlRG9jdW1lbnREYXRhID0gYXJlYXM7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXZpYXRpb25EYXRhVHJlZSA9IGRldmlhdGlvbnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrbGlzdERhdGFUcmVlID0gY2hlY2tsaXN0cyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdSZWxhdGVkRGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEb2N1bW5ldCBQcm9jZXNzIFN1cHBvcnQgRnVuY1xyXG4gICAgaXNGb2xkZXIodHlwZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgZG9jdW1lbnRUeXBlcyA9IFtcclxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5Eb2N1bWVudCxcclxuICAgICAgICAgICAgRG9jdW1lbnROb2RlVHlwZS5GaWxlRG9jdW1lbnQsXHJcbiAgICAgICAgICAgIERvY3VtZW50Tm9kZVR5cGUuTGlua0RvY3VtZW50LFxyXG4gICAgICAgICAgICBEb2N1bWVudE5vZGVUeXBlLlNob3J0Y3V0RG9jdW1lbnRcclxuICAgICAgICBdO1xyXG4gICAgICAgIHJldHVybiAhZG9jdW1lbnRUeXBlcy5pbmNsdWRlcyh0eXBlKTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vI3JlZ2lvbiBTaGFwZSBmdW5jdGlvbiB1c2luZyBmb3IgY29ubmVjdGlvblxyXG4gICAgaXNTZWxlY3RlZFZpZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuICEhd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XHJcbiAgICB9XHJcblxyXG4gICAgaXNTaG93Q29ubmVjdFR5cGUoKSB7XHJcbiAgICAgICAgdGhpcy5zaGFwZUlkID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA/IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gOiAnJztcclxuICAgICAgICBpZiAodGhpcy5zaGFwZUlkICE9PSB0aGlzLnByZVNoYXBlSWQgJiYgdGhpcy5RTVNCUE1OQ29uZmlnLmVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMub25HZXRTaGFwZUFjdGl2aXR5LmVtaXQoeyBzaGFwZUlkOiB0aGlzLnNoYXBlSWQgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2hhcGVBY3Rpdml0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZVNoYXBlSWQgPSB0aGlzLnNoYXBlSWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRpc2FibGVkQ29ubmVjdGlvblRhYiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGVkVHlwZXMgPSBbJ2FwcC5MaW5rJ107XHJcbiAgICAgICAgaWYgKGV4Y2x1ZGVkVHlwZXMuZmluZEluZGV4KHR5cGUgPT4gdHlwZS50b0xvd2VyQ2FzZSgpID09IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXT8udG9Mb3dlckNhc2UoKSkgPiAtMSAmJiB0aGlzLlFNU0JQTU5Db25maWcuZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLkVkaXQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZENvbm5lY3Rpb25UYWIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gISF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0hPV19DT05ORUNUWVBFXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaGFwZUFjdGl2aXR5KCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcclxuICAgICAgICBpZiAoISFzZWxlY3RlZENlbGxWaWV3KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXM7XHJcbiAgICAgICAgICAgIGlmICghIWF0dHJpYnV0ZXMubGlua1VybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhRnJvbVNoYXBlQXRycmlidXRlKGF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnRhcmdldC50YXJnZXRJZCA9IGF0dHJpYnV0ZXMubGlua1RhcmdldDtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNldCBzaGFwZSBjb25uZWN0IGxhYmVsXHJcbiAgICAgICAgICAgICAgICBpZiAoISF0aGlzLnNoYXBlTW9kZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuc2hhcGVNb2RlbC5zaGFwZT8uY29ubmVjdGlvblR5cGVJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0RPQ1VNRU5UX1BST0NFU1M7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRldmlhdGlvbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfREVWSUFUSU9OO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3Q6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlFNU0JQTU5Db25maWcuc2hhcGVDb25uZWN0TGFiZWwgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuQ09OTkVDVEVEX0NIRUNLTElTVDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQXR0YWNobWVudDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfQVRUQUNITUVOVDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluazpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaGFwZUNvbm5lY3RMYWJlbCA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5DT05ORUNURURfTElOSztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFGcm9tU2hhcGVBdHJyaWJ1dGUoc2hhcGVBdHRyaWJ1dGU6IGFueSkge1xyXG4gICAgICAgIGlmICghIXNoYXBlQXR0cmlidXRlLmxpbmtVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgnJywgJycsIHNoYXBlQXR0cmlidXRlLmxpbmtUaXRsZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHNoYXBlQXR0cmlidXRlLmxpbmtVcmw7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybC5pbmRleE9mKCcjJyk7XHJcbiAgICAgICAgICAgIGxldCBkb2N1bWVudFR5cGUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAoISFzaGFwZUF0dHJpYnV0ZS5jb25uZWN0aW9uVHlwZUlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IHNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQ7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGUgPSB0aGlzLmdldFJlbGF0ZWRJdGVtQnlTaGFwZUNvbm5lY3Rpb25UeXBlKHNoYXBlQXR0cmlidXRlLmNvbm5lY3Rpb25UeXBlSWQsIHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudFR5cGUgPSB0aGlzLmdldERvY3VtZW50VHlwZSh1cmwpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50VHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2VzcztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsaW5rSWQgPSB0aGlzLmdldExpbmtJZCh1cmwsIGRvY3VtZW50VHlwZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5kaXNwbGF5SWQgPSBsaW5rSWQgPyArbGlua0lkIDogLTE7XHJcbiAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSA9IGRvY3VtZW50VHlwZTtcclxuICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudE5hbWUgPSBzaGFwZUF0dHJpYnV0ZS5wYXJlbnROYW1lO1xyXG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gc2hhcGVBdHRyaWJ1dGUubGlua1RhcmdldDtcclxuICAgICAgICAgICAgLy8gaGFuZGxlIGxvZ29cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubWF0SWNvbiA9ICd0ZXh0X3NuaXBwZXQnO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5TVkdJY29uID0gdGhpcy5nZXRTaGFwZU1vZGVsSWNvbkJ5RGF0YVR5cGUoZG9jdW1lbnRUeXBlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgTGlua1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLmxpbmsubGluayA9IHVybDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoISFsaW5rSWQgJiYgZG9jdW1lbnRUeXBlID09IERhdGFUeXBlLmRvY3VtZW50ICYmIGhhc2hJbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuYW5jaG9yLmFuY2hvclZhbHVlID0gdXJsLnN1YnN0cihoYXNoSW5kZXggKyAxLCB1cmwubGVuZ3RoIC0gaGFzaEluZGV4KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQobGlua0lkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0U2hhcGVNb2RlbChpZDogYW55ID0gJycsIGl0ZW1UeXBlOiBhbnkgPSAnJywgaXRlbU5hbWU6IHN0cmluZyA9ICcnLCBzdGF0dXNOYW1lOiBzdHJpbmcgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsID0gbmV3IFNoYXBlTW9kZWwoKTtcclxuICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkID0gaWQ7XHJcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmlkID0gaWQ7XHJcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlID0gaXRlbVR5cGU7XHJcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1OYW1lID0gaXRlbU5hbWU7XHJcbiAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnN0YXR1c05hbWUgPSBzdGF0dXNOYW1lO1xyXG4gICAgICAgIHRoaXMuc2hhcGVNb2RlbC50YXJnZXQudGFyZ2V0SWQgPSBUYXJnZXRUeXBlTmFtZS5uZXc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlua0lkKHVybDogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSkge1xyXG4gICAgICAgIGxldCBwYXJ0aWFsVXJsSW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBwYXJ0aWFsVXJsTGVuZ3RoID0gMDtcclxuICAgICAgICBsZXQgaWQgPSAnJztcclxuICAgICAgICBsZXQgZnJvbSA9IDA7XHJcbiAgICAgICAgbGV0IHVybExvd2VyQ2FzZSA9ICEhdXJsID8gdXJsLnRvTG93ZXJDYXNlKCkgOiAnJztcclxuXHJcbiAgICAgICAgY29uc3QgcGFydGlhbFVybCA9IHRoaXMuZ2V0UGFydGlhbFVybCh0eXBlKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHVybExvd2VyQ2FzZS5pbmRleE9mKCcjJyk7XHJcblxyXG4gICAgICAgIGlmICghIXBhcnRpYWxVcmwpIHtcclxuICAgICAgICAgICAgcGFydGlhbFVybEluZGV4ID0gdXJsTG93ZXJDYXNlLmluZGV4T2YocGFydGlhbFVybCk7XHJcblxyXG4gICAgICAgICAgICBwYXJ0aWFsVXJsTGVuZ3RoID0gcGFydGlhbFVybC5sZW5ndGg7XHJcbiAgICAgICAgICAgIGZyb20gPSBwYXJ0aWFsVXJsSW5kZXggKyBwYXJ0aWFsVXJsTGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQgJiYgaGFzaEluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGlkID0gdXJsTG93ZXJDYXNlLnN1YnN0cihmcm9tLCBoYXNoSW5kZXggLSBmcm9tKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSkuaW5kZXhPZignLycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZCA9IHVybExvd2VyQ2FzZS5zdWJzdHIoZnJvbSwgbGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT0gRGF0YVR5cGUuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHBhcnNlSW50KGlkLCAxMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgaWQgPSAnJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UmVsYXRlZEl0ZW1CeVNoYXBlQ29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGVJZDogU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSwgdXJsOiBzdHJpbmcpIHtcclxuICAgICAgICBzd2l0Y2ggKGNvbm5lY3Rpb25UeXBlSWQpIHtcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RG9jdW1lbnRUeXBlKHVybCk7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb246XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuZGV2aWF0aW9uO1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmNoZWNrbGlzdDtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJ0aWFsVXJsKHR5cGU6IERhdGFUeXBlKSB7XHJcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkw7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2VzczpcclxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMO1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX0lOVEVSQ09OTkVDVEVEX1BBUlRJQUxfVVJMO1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTDtcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gQ0tFZGl0b3JMaW5rQ29uc3QuRk9MREVSX1BBUlRJQUxfVVJMO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREb2N1bWVudFR5cGUodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuRE9DVU1FTlRfUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmRvY3VtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5wcm9jZXNzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5QUk9DRVNTX0lOVEVSQ09OTkVDVEVEX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkFSRUFfUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmFyZWE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHVybC5pbmRleE9mKENLRWRpdG9yTGlua0NvbnN0LkZPTERFUl9QQVJUSUFMX1VSTCkgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gRGF0YVR5cGUuZm9sZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh1cmwuaW5kZXhPZihDS0VkaXRvckxpbmtDb25zdC5ERVZJQVRJT05fUEFSVElBTF9VUkwpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIERhdGFUeXBlLmRldmlhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodXJsLmluZGV4T2YoQ0tFZGl0b3JMaW5rQ29uc3QuQ0hFQ0tMSVNUX1BBUlRJQUxfVVJMKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBEYXRhVHlwZS5jaGVja2xpc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZShkYXRhVHlwZTogRGF0YVR5cGUpIHtcclxuICAgICAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYXJlYTpcclxuICAgICAgICAgICAgICAgIHJldHVybiAncHJvY2Vzc19hcmVhX291dGxpbmVkJztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdwcm9jZXNzJztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfaW50ZXJjb25uZWN0ZWQnO1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRldmlhdGlvbjpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZGV2aWF0aW9uJztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3Q6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2NoZWNrbGlzdCc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZvbGRlcl9vdXRsaW5lZCc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdENvbm5lY3RUeXBlKGV2ZW50OiBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgc3dpdGNoIChldmVudCkge1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M6XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5Qcm9jZXNzRG9jdW1lbnQoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuRGV2aWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdDpcclxuICAgICAgICAgICAgICAgIHRoaXMub3BlbkNoZWNrbGlzdCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BdHRhY2htZW50OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuQXR0YWNobWVudERpYWxvZygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuTGluaygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9LCAzMDApXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QW5jaG9yRG9jdW1lbnQoZG9jdW1lbnRJZCkge1xyXG4gICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5pc0FuY2hvckxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubGlua1NlcnZpY2VcclxuICAgICAgICAgICAgLmdldEFuY2hvckRvY3VtZW50TGlzdChkb2N1bWVudElkKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkb2N1bWVudHMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9ycyA9IHRoaXMuZXh0cmFjdERvY3VtZW50QW5jaG9ycyhkb2N1bWVudHMgfHwgW10pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLmlzQW5jaG9yTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0RG9jdW1lbnRBbmNob3JzKGFuY2hvckRvY3VtZW50OiBRTVNDS0VkaXRvckxpbmtBbmNob3JEb2N1bWVudFtdKSB7XHJcbiAgICAgICAgY29uc3QgYW5jaG9yczogUU1TQlBNTlNoYXBlQW5jaG9yW10gPSBbeyB2YWx1ZTogMCwgdmlld1ZhbHVlOiAnJywgYW5jaG9yVmFsdWU6IExpbmtBbmNob3IuQmxhbmsgfV07XHJcbiAgICAgICAgbGV0IGlkID0gMztcclxuICAgICAgICBpZiAoYW5jaG9yRG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgYW5jaG9yRG9jdW1lbnQuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICAgICAgICBkaXYuaW5uZXJIVE1MID0gZS5yaWNoVGV4dDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvbUNvbnRlbnQgPSBkaXY7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhVGFncyA9IGRvbUNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKTtcclxuICAgICAgICAgICAgICAgIGlmIChhVGFncykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhVGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWcgPSBhVGFnc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZy5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGFuY2hvcnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguYW5jaG9yVmFsdWUgPT09IHRhZy5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3VmFsdWU6IHRhZy5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmNob3JWYWx1ZTogdGFnLm5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IDEsXHJcbiAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9BVFRBQ0hNRU5ULFxyXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5BdHRhY2htZW50XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYW5jaG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IDIsXHJcbiAgICAgICAgICAgIHZpZXdWYWx1ZTogdGhpcy5MQU5HLlFNU0NLRURJVE9SLkFOQ0hPUl9SRUxBVEVEX0RPQ1VNRU5ULFxyXG4gICAgICAgICAgICBhbmNob3JWYWx1ZTogTGlua0FuY2hvci5SZWxhdGVkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGFuY2hvcnM7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNoYXBlQW5jaG9yKGFuY2hvclZhbHVlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XHJcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuYW5jaG9yLmFuY2hvclZhbHVlID0gYW5jaG9yVmFsdWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkRPQ1VNRU5UX1BBUlRJQUxfVVJMfSR7dGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH0jJHthbmNob3JWYWx1ZX1gXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGxWaWV3Lm1vZGVsLnByb3AoJ2xpbmtVcmwnLCB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVNoYXBlVGFyZ2V0KHRhcmdldElkOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxWaWV3ID0gd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV107XHJcbiAgICAgICAgaWYgKCEhc2VsZWN0ZWRDZWxsVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwudGFyZ2V0LnRhcmdldElkID0gdGFyZ2V0SWQ7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbFZpZXcubW9kZWwucHJvcCgnbGlua1RhcmdldCcsIHRhcmdldElkKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkQW5jaG9yRG9jdW1lbnQoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgICAgIGlmICghIXNlbGVjdGVkQ2VsbFZpZXcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hhcGVNb2RlbCAmJiB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0gJiYgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBbmNob3JEb2N1bWVudCh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVDb25uZWN0aW9uKHNlbGVjdGVkQ29ubmVjdGlvblR5cGU6IGFueSkge1xyXG4gICAgICAgIGxldCB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9BVFRBQ0hNRU5UO1xyXG4gICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5MQU5HLkJQTU4uQ09ORklSTV9ERUxFVEVfQVRUQUNITUVOVDtcclxuICAgICAgICBzd2l0Y2ggKHNlbGVjdGVkQ29ubmVjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5ERUxFVEVfRE9DVU1FTlRfT1JfUFJPQ0VTUztcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9ET0NVTUVOVF9PUl9QUk9DRVNTO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb246XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkNPTk5FQ1RJT05fVFlQRS5ERUxFVEVfU0hBUEVfREVWSUFUSU9OO1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0RFVklBVElPTjtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0OlxyXG4gICAgICAgICAgICAgICAgdGl0bGUgPSB0aGlzLkxBTkcuQlBNTi5DT05ORUNUSU9OX1RZUEUuREVMRVRFX1NIQVBFX0NIRUNLTElTVDtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1JfTUVTU0FHRS5DT05GSVJNX0RFTEVURV9DSEVDS0xJU1Q7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms6XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9MSU5LO1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ6XHJcbiAgICAgICAgICAgICAgICB0aXRsZSA9IHRoaXMuTEFORy5CUE1OLkRFTEVURV9BVFRBQ0hNRU5UO1xyXG4gICAgICAgICAgICAgICAgY29udGVudCA9IHRoaXMuTEFORy5RTVNDS0VESVRPUl9NRVNTQUdFLkNPTkZJUk1fREVMRVRFX0FUVEFDSE1FTlQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93Q29uZmlybURpYWxvZyh0aXRsZSwgY29udGVudCwgZmFsc2UsICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSB0cnVlIHx8ICh0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcgJiYgdmFsdWUuaXNDb25maXJtZWQgPT0gdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwgPSBuZXcgU2hhcGVNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5yZW1vdmVQcm9wKCdsaW5rVXJsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2xpbmtUYXJnZXQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucmVtb3ZlUHJvcCgnbGlua1RpdGxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnJlbW92ZVByb3AoJ2Nvbm5lY3Rpb25UeXBlSWQnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHNob3dDb25maXJtRGlhbG9nKHRpdGxlOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgaXNNZXNzYWdlOiBib29sZWFuLCBjYWxsYmFjaz86IChyZXN1bHQ/OiBhbnkpID0+IHZvaWQpIHtcclxuICAgICAgICBjb25zdCBkYXRhOiBRTVNDS0VkaXRvckRpYWxvZ0RhdGEgPSBuZXcgUU1TQ0tFZGl0b3JEaWFsb2dEYXRhKCk7XHJcbiAgICAgICAgZGF0YS50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIGRhdGEuY29udGVudCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgZGF0YS5pc01lc3NhZ2UgPSBpc01lc3NhZ2U7XHJcbiAgICAgICAgZGF0YS5pc0Nsb3NlQnRuID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQ29uZmlybUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzUwMHB4JyxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnMTc1cHgnLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1JlZlxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8jZW5kcmVnaW9uXHJcblxyXG4gICAgLy8jcmVnaW9uIERvY3VtZW50IFByb2Nlc3NcclxuICAgIG9wZW5Qcm9jZXNzRG9jdW1lbnQoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogU2VsZWN0UHJvY2Vzc0RvY3VtZW50UG9wdXBEYXRhID0gbmV3IFNlbGVjdFByb2Nlc3NEb2N1bWVudFBvcHVwRGF0YSgpO1xyXG4gICAgICAgIGRhdGEubW9kdWxlSWQgPSBNb2R1bGVUeXBlLmRvY3VtZW50UHJvY2VzcztcclxuICAgICAgICBkYXRhLm1vZHVsZU5hbWUgPSB0aGlzLkxBTkcuQlBNTi5ET0NVTUVOVF9QUk9DRVNTO1xyXG4gICAgICAgIGRhdGEudHJlZURhdGExID0gdGhpcy50cmVlUHJvY2Vzc0RhdGE7XHJcbiAgICAgICAgZGF0YS50cmVlRGF0YTIgPSB0aGlzLnRyZWVEb2N1bWVudERhdGE7XHJcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnMSA9IHRoaXMucHJvY2Vzc1RyZWVDb25maWc7XHJcbiAgICAgICAgZGF0YS50cmVlQ29uZmlnMiA9IHRoaXMuZG9jdW1lbnRUcmVlQ29uZmlnO1xyXG4gICAgICAgIGRhdGEuc3BsaXRWaWV3ID0gdGhpcy5zcGxpdFZpZXc7XHJcbiAgICAgICAgZGF0YS5pc1NlbGVjdE9uZSA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZWxlY3RQcm9jZXNzRG9jdW1lbnRQb3B1cENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzc2OHB4JyxcclxuICAgICAgICAgICAgbWluSGVpZ2h0OiAnNjkwcHgnLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLW1hdC1kaWFsb2ctY29udGFpbmVyJ1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWFyY2guc3Vic2NyaWJlKGFzeW5jIChrZXl3b3JkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFrZXl3b3JkIHx8IGtleXdvcmQudHJpbSgpID09PSAnJylcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxldCBnZXRTZWFyY2hPcHRpb24gPSBuZXcgR2V0U2VhcmNoUHJvY2Vzc0RvY3VtZW50T3B0aW9uKHRydWUsIHRydWUsIHRoaXMuZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQsIHRydWUsIHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBzZWFyY2hSZXN1bHQgPSBhd2FpdCB0aGlzLnRyZWVTZXJ2aWNlLmdldFNlYXJjaFByb2Nlc3NEb2N1bWVudChrZXl3b3JkLnRyaW0oKSwgZ2V0U2VhcmNoT3B0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RQcm9jZXNzRG9jdW1lbnRHbG9iYWxTZXJ2aWNlLnNldFNlYXJjaFJlbGF0ZWQoc2VhcmNoUmVzdWx0KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uRXhwYW5kUHJvY2Vzc0FyZWEuc3Vic2NyaWJlKChmb2xkZXIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmdldEFyZWFDaGlsZHJlbk5vZGUoZm9sZGVyLmlkLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlLCB0aGlzLmRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJlYXMgPSByZXMubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LnR5cGUgPT09IFByb2Nlc3NOb2RlVHlwZS5BcmVhID8geC5pZC50b1N0cmluZygpIDogeC5wcm9jZXNzSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHgudHlwZSA9PT0gUHJvY2Vzc05vZGVUeXBlLkFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IHguc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c05hbWU6IHguc3RhdHVzTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5SWQ6IHgudHlwZSA9PT0gUHJvY2Vzc05vZGVUeXBlLkFyZWEgPyAwIDogeC5pdGVtTnVtYmVySWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVR5cGU6IHgudHlwZSA9PT0gUHJvY2Vzc05vZGVUeXBlLkFyZWEgPyBEYXRhVHlwZS5hcmVhIDogeC50eXBlID09PSBQcm9jZXNzTm9kZVR5cGUuUHJvY2VzcyA/IERhdGFUeXBlLnByb2Nlc3MgOiBEYXRhVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0UHJvY2Vzc0FyZWFDaGlsZHJlbihhcmVhcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vbkV4cGFuZEZvbGRlci5zdWJzY3JpYmUoKGZvbGRlcikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbGF0ZWRTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ2hpbGRyZW4oZm9sZGVyLmlkLCAhdGhpcy5zcGxpdFZpZXcsIGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJlYXMgPSByZXMubWFwKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5uYW1lLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHRoaXMuZ2V0UGFyZW50SWQoeCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzSWQ6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTmFtZTogeC5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiB4LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHRoaXMuaXNGb2xkZXIoeC50eXBlKSA/IHgudHlwZSA6IGZvbGRlci5sZXZlbFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0Rm9sZGVyQ2hpbGRyZW4oYXJlYXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2Uub25TZWxlY3RGb2xkZXJJdGVtLnN1YnNjcmliZSgoZm9sZGVyKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmb2xkZXIuaXRlbVR5cGUgPT09IERhdGFUeXBlLmFyZWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZ2V0QXJlYUNvbnRlbnQoZm9sZGVyLmlkLCBmYWxzZSwgdGhpcy5lbmFibGVkSW50ZXJjb25uZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBJUmVsYXRlZFtdID0gcmVzLm1hcCgoZWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5wcm9jZXNzSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogZWxlLnByb2Nlc3NOdW1iZXIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IGVsZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtVHlwZTogZWxlLnByb2Nlc3NDbGFzc2lmaWNhdGlvbiA9PT0gUHJvY2Vzc0NsYXNzaWZpY2F0aW9uVHlwZXMuUHJvY2Vzc2VzID8gRGF0YVR5cGUucHJvY2VzcyA6IERhdGFUeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBlbGUuc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiB0aGlzLmdldERpc2xheU5hbWVPZlByb2Nlc3NTdGF0dXMoZWxlLnN0YXR1cyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBmb2xkZXIuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGZvbGRlci5pdGVtTmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UHJvY2Vzc0RvY3VtZW50R2xvYmFsU2VydmljZS5zZXRTcGxpdHZpZXdWYWx1ZShyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9sZGVyLml0ZW1UeXBlID09PSBEYXRhVHlwZS5mb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRlZFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgICAuZ2V0Rm9sZGVyQ29udGVudChmb2xkZXIuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBJUmVsYXRlZFtdID0gcmVzLm1hcCgoZWxlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZS5pZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGVsZS5pZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogZWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiBEYXRhVHlwZS5kb2N1bWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNOYW1lOiBlbGUuc3RhdHVzTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGZvbGRlci5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZTogZm9sZGVyLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IGZvbGRlci5sZXZlbFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFByb2Nlc3NEb2N1bWVudEdsb2JhbFNlcnZpY2Uuc2V0U3BsaXR2aWV3VmFsdWUocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gcmVzdWx0WzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgob2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzIHx8IG9iai5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkKSA/IG9iai5pdGVtTnVtYmVySWQgOiBvYmouaWQsIG9iai5pdGVtVHlwZSwgb2JqLml0ZW1OYW1lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRG9jdW1lbnRPclByb2Nlc3M7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uU1ZHSWNvbiA9IHRoaXMuZ2V0U2hhcGVNb2RlbEljb25CeURhdGFUeXBlKHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pdGVtVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAob2JqLml0ZW1UeXBlID09PSBEYXRhVHlwZS5kb2N1bWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5jaG9yRG9jdW1lbnQob2JqLmlkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ET0NVTUVOVF9QUk9DRVNTO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlua1VSTChzaGFwZU1vZGVsOiBTaGFwZU1vZGVsKSB7XHJcbiAgICAgICAgc3dpdGNoIChzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1UeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5ET0NVTUVOVF9QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxyXG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuQVJFQV9QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XHJcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5GT0xERVJfUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmRpc3BsYXlJZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUucHJvY2Vzc0ludGVyY29ubmVjdGVkOlxyXG4gICAgICAgICAgICAgICAgc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gYCR7Q0tFZGl0b3JMaW5rQ29uc3QuUFJPQ0VTU19JTlRFUkNPTk5FQ1RFRF9QQVJUSUFMX1VSTH0ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uZGlzcGxheUlkfWA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb246XHJcbiAgICAgICAgICAgICAgICBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgPSBgJHtDS0VkaXRvckxpbmtDb25zdC5ERVZJQVRJT05fUEFSVElBTF9VUkx9JHtzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLnBhcmVudElkfS8ke3NoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaWR9YDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIERhdGFUeXBlLmNoZWNrbGlzdDpcclxuICAgICAgICAgICAgICAgIHNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IGAke0NLRWRpdG9yTGlua0NvbnN0LkNIRUNLTElTVFYyX1BBUlRJQUxfVVJMfSR7c2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5pZH1gO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyZW50SWQoaXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzRm9sZGVyKGl0ZW0udHlwZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuICFpdGVtLnBhcmVudEhhbmRib29rSWQgPyAnJyA6IGl0ZW0ucGFyZW50SGFuZGJvb2tJZC50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gIWl0ZW0ucGFyZW50Rm9sZGVySWQgPyAnJyA6IGl0ZW0ucGFyZW50Rm9sZGVySWQudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREaXNsYXlOYW1lT2ZQcm9jZXNzU3RhdHVzKHN0YXR1czogbnVtYmVyKSB7XHJcbiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmluUHJvZ3Jlc3M6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5JTl9QUk9HUkVTUyc7XHJcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5zZW5kVG9BcHByb3ZhbDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLlNFTkRfVE9fQVBQUk9WQUwnO1xyXG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuYXBwcm92ZWQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5BUFBST1ZFRCc7XHJcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy51bmRlclJldmlzaW9uOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uVU5ERVJfUkVWSVNJT04nO1xyXG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMuZGVsZXRlZDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLkRFTEVURUQnO1xyXG4gICAgICAgICAgICBjYXNlIFByb2Nlc3NTdGF0dXMucmV2aWV3T3JIZWFyaW5nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdDT01NT04uSEVBUklORyc7XHJcbiAgICAgICAgICAgIGNhc2UgUHJvY2Vzc1N0YXR1cy5hcmNoaXZlZDpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQ09NTU9OLkFSQ0hJVkVEJztcclxuICAgICAgICAgICAgY2FzZSBQcm9jZXNzU3RhdHVzLmhlYXJpbmc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1BST0NFU1MuSEVBUklORyc7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0NPTU1PTi5VTktOT1dOJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8jZW5kcmVnaW9uXHJcbiAgICAvLyNyZWdpb24gRGV2aWF0aW9uXHJcbiAgICBvcGVuRGV2aWF0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGE6IFNlbGVjdE9uZVBvcHVwRGF0YSA9IG5ldyBTZWxlY3RPbmVQb3B1cERhdGEoKTtcclxuICAgICAgICBkYXRhLm1vZHVsZUlkID0gTW9kdWxlVHlwZS5kZXZpYXRpb247XHJcbiAgICAgICAgZGF0YS5tb2R1bGVOYW1lID0gdGhpcy5MQU5HLkJQTU4uREVWSUFUSU9OO1xyXG4gICAgICAgIGRhdGEudHJlZURhdGEgPSB0aGlzLmRldmlhdGlvbkRhdGFUcmVlO1xyXG4gICAgICAgIGRhdGEudHJlZUNvbmZpZyA9IHRoaXMuZGV2aWF0aW9uU2VsZWN0T25lQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2VsZWN0T25lRGlhbG9nLCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNDAwcHgnLFxyXG4gICAgICAgICAgICBtaW5IZWlnaHQ6ICc1NjdweCcsXHJcbiAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNlYXJjaC5zdWJzY3JpYmUoKGtleXdvcmQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZWxhdGVkU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLnNlYXJjaFJlbGF0ZWRUb0RldmlhdGlvbihrZXl3b3JkKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlcy5jYXRlZ29yaWVzO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zUmVsYXRlZFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChyZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0OiBJUmVsYXRlZFtdKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqID0gcmVzdWx0WzBdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbChvYmouaWQsIG9iai5pdGVtVHlwZSwgb2JqLml0ZW1OYW1lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnRJZCA9IG9iai5wYXJlbnRJZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5wYXJlbnROYW1lID0gb2JqLnBhcmVudE5hbWVcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLlNWR0ljb24gPSB0aGlzLmdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZSh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9ERVZJQVRJT047XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuICAgIC8vI3JlZ2lvbiBDaGVja2xpc3RcclxuICAgIG9wZW5DaGVja2xpc3QoKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IG5ldyBEZWZhdWx0Rm9ybVNlbGVjdEFjY2VzcygpO1xyXG4gICAgICAgIGNvbnN0IGFjY2Vzc0RpYWxvZzogUU1TU2VsZWN0QWNjZXNzRGlhbG9nID0ge1xyXG4gICAgICAgICAgICAuLi5uZXcgUU1TU2VsZWN0QWNjZXNzRGlhbG9nKCksXHJcbiAgICAgICAgICAgIC4uLmZvcm1WYWx1ZS5jb25maWcsXHJcbiAgICAgICAgICAgIC4uLmZvcm1WYWx1ZS5tb2RlLFxyXG4gICAgICAgICAgICB0cmVlRGVwYXJ0bWVudENvbmZpZzoge1xyXG4gICAgICAgICAgICAgICAgLi4ubmV3IFFNU1NlbGVjdEFjY2Vzc0RpYWxvZygpLnRyZWVEZXBhcnRtZW50Q29uZmlnLFxyXG4gICAgICAgICAgICAgICAgbW9kZVZpZXc6IGZvcm1WYWx1ZS5jb25maWcub3B0aW9uVmlld0RlcGFydG1lbnQsXHJcbiAgICAgICAgICAgICAgICBhY3RpdmVTZWxlY3RBbGxOb2RlOiBmb3JtVmFsdWUuY29uZmlnLmFjdGl2ZVNlbGVjdEFsbFRyZWUsXHJcbiAgICAgICAgICAgICAgICBjYW5BZGROdWxsUmVzdWx0OiBmb3JtVmFsdWUuY29uZmlnLmNhbkFkZE51bGxSZXN1bHQsXHJcbiAgICAgICAgICAgICAgICBlbmFibGVJbmNsdWRlQ2hpbGQ6IGZvcm1WYWx1ZS5jb25maWcuZW5hYmxlSW5jbHVkZUNoaWxkLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlbmFibGVTZWxlY3RVc2VyR3JvdXA6IHRydWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBhY2Nlc3NEaWFsb2cudHJlZURlcGFydG1lbnRDb25maWcuaXNTZWxlY3RPbmUgPSB0cnVlO1xyXG4gICAgICAgIGFjY2Vzc0RpYWxvZy5tb2RlU2VsZWN0T25lVXNlckdyb3VwID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgYWNjZXNzRGlhbG9nLnVzZXJHcm91cENvbmZpZyA9IHtcclxuICAgICAgICAgICAgc2VhcmNoTmFtZTogdGhpcy5MQU5HLkJQTU4uQ0hFQ0tMSVNUXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFnZVNpemUgPSAxMDtcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmFjY2Vzc0RpYWxvZ1NlcnZpY2UuZmlsdGVyQWNjZXNzKHBhZ2VTaXplLCBhY2Nlc3NEaWFsb2cpO1xyXG4gICAgICAgIGRpYWxvZ1JlZlxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQ/LnVzZXJHcm91cHM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgb2JqID0gcmVzdWx0LnVzZXJHcm91cHNbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRTaGFwZU1vZGVsKG9iai5pZCwgRGF0YVR5cGUuY2hlY2tsaXN0LCBvYmoubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50TmFtZSA9IG9iai5oZWxwVGV4dDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcGVNb2RlbC5yZWxhdGVkSXRlbS5saW5rVXJsID0gdGhpcy5nZXRMaW5rVVJMKHRoaXMuc2hhcGVNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ2hlY2tsaXN0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLlNWR0ljb24gPSB0aGlzLmdldFNoYXBlTW9kZWxJY29uQnlEYXRhVHlwZSh0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0uaXRlbVR5cGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHNhdmUgY29ubmVjdGlvblxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9DSEVDS0xJU1Q7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG4gICAgLy8jcmVnaW9uIEF0dGFjaG1lbnRcclxuICAgIG9wZW5BdHRhY2htZW50RGlhbG9nKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JQYXJhbXRlcigpO1xyXG4gICAgICAgIGRhdGEubW9kdWxlID0gQ0tFZGl0b3JNb2R1bGUuZG9jdW1lbnQ7XHJcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMuZW50aXR5SWQ7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKExpbmtBdHRhY2htZW50Q29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiAnNjUwcHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICc2NTBweCcsXHJcbiAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXHJcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdFNoYXBlTW9kZWwobnVsbCwgMCwgcmVzdWx0LnRpdGxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ubGlua1VybCA9IHJlc3VsdC51cmw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkF0dGFjaG1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLm1hdEljb24gPSAndGV4dF9zbmlwcGV0JztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNob3dTaGFwZUNvbm5lY3Rpb25WYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9BVFRBQ0hNRU5UO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vI2VuZHJlZ2lvblxyXG4gICAgLy8jcmVnaW9uIExpbmtcclxuICAgIG9wZW5MaW5rKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgU2hhcGVMaW5rKCk7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihCUE1OTGlua0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICB3aWR0aDogJzM1MHB4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnMjQ1cHgnLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tbWF0LWRpYWxvZy1jb250YWluZXInLFxyXG4gICAgICAgICAgICBkYXRhXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgobmV3TGluaykgPT4ge1xyXG4gICAgICAgICAgICBpZiAobmV3TGluaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0U2hhcGVNb2RlbCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQgPSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbms7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXBlTW9kZWwubGluay5saW5rID0gbmV3TGluay5saW5rO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBTaGFwZURhdGEoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUU1TQlBNTkNvbmZpZy5zaG93U2hhcGVDb25uZWN0aW9uVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5RTVNCUE1OQ29uZmlnLnNoYXBlQ29ubmVjdExhYmVsID0gdGhpcy5MQU5HLkJQTU4uQ09OTkVDVElPTl9UWVBFLkNPTk5FQ1RFRF9MSU5LO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICBtYXBTaGFwZURhdGEoKSB7XHJcbiAgICAgICAgaWYgKCEhd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10pIHtcclxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnbGlua1VybCcsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmtcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLmxpbmtVcmwgOiB0aGlzLnNoYXBlTW9kZWwubGluay5saW5rKTtcclxuICAgICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10ubW9kZWwucHJvcCgnbGlua1RhcmdldCcsIFRhcmdldFR5cGVOYW1lLm5ldyk7XHJcbiAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ2xpbmtUaXRsZScsIHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmtcclxuICAgICAgICAgICAgICAgID8gdGhpcy5zaGFwZU1vZGVsLnJlbGF0ZWRJdGVtLml0ZW1OYW1lIDogJycpO1xyXG4gICAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXS5tb2RlbC5wcm9wKCdjb25uZWN0aW9uVHlwZUlkJywgdGhpcy5zaGFwZU1vZGVsLnNoYXBlLmNvbm5lY3Rpb25UeXBlSWQpO1xyXG4gICAgICAgICAgICAvLyBkZXZpYXRpb24gYW5kIGNoZWNrbGlzdCBoYXZlIHBhcmVudCBuYW1lXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNoYXBlTW9kZWwuc2hhcGUuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb25cclxuICAgICAgICAgICAgICAgIHx8IHRoaXMuc2hhcGVNb2RlbC5zaGFwZS5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdClcclxuICAgICAgICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddLm1vZGVsLnByb3AoJ3BhcmVudE5hbWUnLCB0aGlzLnNoYXBlTW9kZWwucmVsYXRlZEl0ZW0ucGFyZW50TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNhbGN1bGF0ZUFkZGl0aW9uYWxXaWR0aChncmFwaDogYW55LCBwYXBlcjogYW55LCBjZWxsczogYW55W10pIHtcclxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBiYm94ID0gZ3JhcGguZ2V0Q2VsbChjZWxsc1tpXSkuZmluZFZpZXcocGFwZXIpLmdldEJCb3hUb0NhbGN1bGF0ZUFkZGl0aW9uYWxXaWR0aCgpO1xyXG4gICAgICAgICAgICBjZWxsc1tpXS5hZGRpdGlvbmFsV2lkdGggPSAwO1xyXG4gICAgICAgICAgICBpZiAoYmJveCAmJiBjZWxsc1tpXT8uc2l6ZT8ud2lkdGgpXHJcbiAgICAgICAgICAgICAgICBjZWxsc1tpXS5hZGRpdGlvbmFsV2lkdGggPSAoYmJveC53aWR0aCA+IGNlbGxzW2ldLnNpemUud2lkdGgpID8gKGJib3gud2lkdGggLSBjZWxsc1tpXS5zaXplLndpZHRoKSA6IDA7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|