qms-angular 1.1.72 → 1.1.73
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 +43 -4
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/select-access-dialog/model/access-config-custom.model.js +3 -0
- package/esm2015/lib/components/select-access-dialog/model/select-access-config.model.js +4 -1
- package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +9 -5
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +28 -1
- package/fesm2015/qms-angular.js +40 -4
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/select-access-dialog/model/access-config-custom.model.d.ts +3 -0
- package/lib/components/select-access-dialog/model/select-access-config.model.d.ts +4 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +1 -0
- package/package.json +1 -1
@@ -308,11 +308,38 @@ export class QMSCKEditorComponent extends QMSCKEditorBaseComponent {
|
|
308
308
|
const wordsBox = document.querySelector("#" + this.editorId + " .wordcount-content");
|
309
309
|
if (!!wordsBox) {
|
310
310
|
wordsBox.textContent = `${this.LANG.QMSCKEDITOR.WORDS}: ${stats.words} / ${this.LANG.QMSCKEDITOR.CHARACTERS}: ${stats.characters}`;
|
311
|
+
if (this.qmsckData.maxLength) {
|
312
|
+
wordsBox.textContent = `${this.LANG.QMSCKEDITOR.MAXIMIZE} ${this.LANG.QMSCKEDITOR.CHARACTERS}: ${this.qmsckData.maxLength}`;
|
313
|
+
const tempDiv = document.createElement('div');
|
314
|
+
tempDiv.innerHTML = editor.getData();
|
315
|
+
const plainText = tempDiv.textContent || tempDiv.innerText || '';
|
316
|
+
if (plainText.length > this.qmsckData.maxLength) {
|
317
|
+
const trimmedText = plainText.slice(0, this.qmsckData.maxLength);
|
318
|
+
this.editorInstance.setData(trimmedText);
|
319
|
+
setTimeout(() => {
|
320
|
+
const editorElement = this.editorInstance.editing.view.domRoots.get('main');
|
321
|
+
if (editorElement) {
|
322
|
+
editorElement.blur();
|
323
|
+
}
|
324
|
+
}, 0);
|
325
|
+
}
|
326
|
+
}
|
311
327
|
}
|
312
328
|
});
|
313
329
|
if (this.qmsckData.isReadOnly) {
|
314
330
|
editor.isReadOnly = true;
|
315
331
|
}
|
332
|
+
this.editorInstance.editing.view.document.on('keydown', (event, data) => {
|
333
|
+
if (this.qmsckData.maxLength) {
|
334
|
+
const tempDiv = document.createElement('div');
|
335
|
+
tempDiv.innerHTML = editor.getData();
|
336
|
+
const plainText = tempDiv.textContent || tempDiv.innerText || '';
|
337
|
+
if (plainText.length > this.qmsckData.maxLength) {
|
338
|
+
data.preventDefault();
|
339
|
+
event.stop();
|
340
|
+
}
|
341
|
+
}
|
342
|
+
});
|
316
343
|
this._setEditorInstanceObserver(this.editorId);
|
317
344
|
}
|
318
345
|
/**
|
@@ -750,4 +777,4 @@ QMSCKEditorComponent.propDecorators = {
|
|
750
777
|
qmsckContentOutput: [{ type: Output }],
|
751
778
|
onMessage: [{ type: HostListener, args: ["window:message", ["$event"],] }]
|
752
779
|
};
|
753
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvcW1zLWNrZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RNLE9BQU8sRUFBZSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLHVCQUF1QixNQUFNLG9DQUFvQyxDQUFDO0FBR3pFLE9BQU8sZUFBZSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2xILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDhFQUE4RSxDQUFD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V0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQzt3QkFDbkQsS0FBSyxFQUFFLElBQUk7cUJBQ2Q7b0JBQ0Q7d0JBQ0ksT0FBTyxFQUFFLGFBQWE7d0JBQ3RCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7d0JBQ25ELEtBQUssRUFBRSxJQUFJO3FCQUNkO2lCQUNKO2dCQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2dCQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDbEQ7OztZQXREUSxTQUFTO1lBRVQsdUJBQXVCO1lBa0J2Qix3QkFBd0I7WUFNeEIsc0JBQXNCO1lBaEJ0Qiw4QkFBOEI7WUFaMkcsU0FBUztZQUEvRixVQUFVOzs7d0JBNERqRSxLQUFLOzBCQUNMLEtBQUs7Z0NBQ0wsS0FBSztpQ0FDTCxLQUFLOzBDQUNMLEtBQUs7eUJBQ0wsS0FBSyxTQUFDLFVBQVU7dUJBQ2hCLEtBQUssU0FBQyxVQUFVO3VCQUNoQixLQUFLO2lDQUNMLE1BQU07d0JBZU4sWUFBWSxTQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUW1zVXBsb2FkQWRhcHRlciwgUW1zVXBsb2FkQWRhcHRlckNvbmZpZyB9IGZyb20gJy4vY29tbW9uL2NsYXNzZXMvcW1zVXBsb2FkQWRhcHRlcic7XG5pbXBvcnQgeyBDS0VkaXRvckV2ZW50Q29uc3QgfSBmcm9tICcuL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudCc7XG5pbXBvcnQgQ0tFZGl0b3JDb21tb25GdW5jdGlvbnMgZnJvbSAnLi9jb21tb24vZnVuY3Rpb25zL2NvbW1vbi5mdW5jdGlvbic7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckRhdGEgfSBmcm9tICcuL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JQbHVnaW4gfSBmcm9tICcuL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXBsdWdpbi5tb2RlbCc7XG5pbXBvcnQgUU1TQ0tFZGl0b3JMaW5rIGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItdXJsLm1vZGVsJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItYnBtbi9xbXMtY2tlZGl0b3ItYnBtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1mdWxsc2NyZWVuL3Ftcy1ja2VkaXRvci1mdWxsc2NyZWVuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAuY29tcG9uZW50JztcbmltcG9ydCB7IFFNU0NLRWRpdG9yTGlua0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay9xbXMtY2tlZGl0b3ItbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMb2FkVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWxvYWQtdGVtcGxhdGUvcW1zLWNrZWRpdG9yLWxvYWQtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFFNU0NLRWRpdG9yVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLXRlbXBsYXRlL3Ftcy1ja2VkaXRvci10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci10b29sdGlwL3Ftcy1ja2VkaXRvci10b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwIH0gZnJvbSAnLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWltYWdlbWFwLm1vZGVsJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yVGVtcGxhdGUgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdGVtcGxhdGUubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb29sdGlwIH0gZnJvbSAnLi9tb2RlbHMvcW1zLWNrZWRpdG9yLXRvb2x0aXAubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9xbXMtY2tlZGl0b3ItYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JBYm91dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItYWJvdXQvcW1zLWNrZWRpdG9yLWFib3V0LmNvbXBvbmVudCc7XG4vLyBpbXBvcnQgeyBDS0VkaXRvcjUgfSBmcm9tICdAY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvY2tlZGl0b3InO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uRGF0YSB9IGZyb20gXCIuL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBQb3B1cERhdGEgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yZWxhdGVkL21vZGVsL3BvcHVwLWRhdGEubW9kZWxcIjtcbmltcG9ydCB7IFJlbGF0ZWRQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL3JlbGF0ZWQvcG9wdXAvcmVsYXRlZC1wb3B1cC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdHJlZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckZsb3djaGFydENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay1zaW1wbGUvcW1zLWNrZWRpdG9yLWxpbmstc2ltcGxlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JJbWFnZVVwbG9hZFR5cGVDb25zdCB9IGZyb20gJy4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckltYWdlVXBsb2FkVHlwZS5jb25zdCc7XG5pbXBvcnQgeyBWaWRlb1VwbG9hZE1vZGUgfSBmcm9tICcuL2NvbW1vbi9lbnVtcy92aWRlby11cGxvYWQtbW9kZS5lbnVtJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yVmlkZW8gfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdmlkZW8ubW9kZWwnO1xuaW1wb3J0IHsgVmlkZW9Db25zdCB9IGZyb20gJy4uL2NvbXBvbmVudHMvcmVsYXRlZC9jb21tb24vdmlkZW8uY29uc3QnO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcInFtcy1ja2VkaXRvclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcW1zLWNrZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3Ftcy1ja2VkaXRvci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgUU1TQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFFNU0NLRWRpdG9yQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUU1TQ0tFZGl0b3JDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckNvbXBvbmVudFxuICAgIGV4dGVuZHMgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZhbGlkYXRvciwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBxbXNja0RhdGE6IFFNU0NLRWRpdG9yRGF0YTtcbiAgICBASW5wdXQoKSBxbXNja1BsdWdpbjogUU1TQ0tFZGl0b3JQbHVnaW47XG4gICAgQElucHV0KCkgcW1zY2tDb250ZW50SW5wdXQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBxbXNja0NvbnRlbnRGaWVsZHM/OiBbXTtcbiAgICBASW5wdXQoKSBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQ/OiBib29sZWFuO1xuICAgIEBJbnB1dCgnZGlzYWJsZWQnKSBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgncmVxdWlyZWQnKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGVkaXRvcklkID0gJ3Ftc2NrZWRpdG9yJztcbiAgICBAT3V0cHV0KCkgcW1zY2tDb250ZW50T3V0cHV0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIExBTkc6IGFueTtcbiAgICBja0VkaXRvcjogYW55O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBja2VkaXRvckNvbmZpZzogYW55O1xuICAgIGNrRWRpdG9yRXZlbnRDb25zdCA9IENLRWRpdG9yRXZlbnRDb25zdDtcbiAgICBjb3VudFdvcmQ6IG51bWJlcjtcbiAgICBjb3VudENoYXI6IG51bWJlcjtcbiAgICBlZGl0b3JJbnN0YW5jZTogYW55O1xuICAgIGNrVGFnbmFtZTogc3RyaW5nO1xuICAgIHRvb2xiYXJJdGVtUHJlZml4SWQ6IHN0cmluZztcbiAgICBpc1Rvb2xiYXJJdGVtc0lkU2V0OiBib29sZWFuID0gZmFsc2U7XG4gICAgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XG4gICAgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzptZXNzYWdlXCIsIFtcIiRldmVudFwiXSlcbiAgICBvbk1lc3NhZ2UoZXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5kYXRhLmV2ZW50TmFtZSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19URU1QTEFURV9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlRXZlbnRIYW5kbGluZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRlbXBsYXRlRXZlbnRIYW5kbGluZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MSU5LX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMubGlua0V2ZW50SGFuZGxpbmcoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zY2tDb250ZW50RmllbGRzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPT0xUSVBfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfSU1BR0VNQVBfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZU1hcEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU5fUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5icG1uRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQUJPVVRfQ0tFRElUT1JfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5hYm91dENLRWRpdG9yRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfRkxPV0NIQVJUX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9HR0xFX1RPT0xCQVJfTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JST1dTRV9WSURFT19NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlVmlkZW9FdmVudEhhbmRsaW5nKGV2ZW50LmRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IFFNU0NLRWRpdG9yR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBxbXNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQ6IFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2tUYWduYW1lID0gXCJkaXZcIjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b29sYmFySXRlbVByZWZpeElkID0gYCR7dGhpcy5lZGl0b3JJZH1fdG9vbGJhcl9pdGVtX2A7XG4gICAgICAgIHRoaXMubmFtZSA9ICdDS0VkaXRvciBjdXN0b20gYnVpbGQnO1xuICAgICAgICB0aGlzLmNrRWRpdG9yID0gdGhpcy5xbXNja1BsdWdpbi5wbHVnaW5PYmplY3Q7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRvb2xiYXJJdGVtcyA9IHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXI7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFRvZ2dsZVRvb2xiYXIoKSAmJiB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zKSB7XG4gICAgICAgICAgICAvLyBsZXQgc3RyVG9vbGJhcnMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zLnJlcGxhY2UoL3Ftc0Zsb3djaGFydCwvZywgXCJcIik7XG4gICAgICAgICAgICBsZXQgc3RyVG9vbGJhcnMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnFtc2NrRGF0YS5lbmFibGVUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIHN0clRvb2xiYXJzID0gc3RyVG9vbGJhcnMucmVwbGFjZSgvcW1zVGVtcGxhdGUsL2csIFwiXCIpOyAvLyBkaXNhYmxlIHFtc1RlbXBsYXRlIGlmIHVzZXIgZG9uJ3QgaGF2ZSBoYW5kYm9va0FkbWluIFJvbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5xbXNja0RhdGEudmlkZW9VcGxvYWRNb2RlKSB7XG4gICAgICAgICAgICAgICAgc3RyVG9vbGJhcnMgPSBzdHJUb29sYmFycy5yZXBsYWNlKC92aWRlb1VwbG9hZCwvZywgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b29sYmFySXRlbXMgKz0gJywnICsgc3RyVG9vbGJhcnM7IC8vIGRpc2FibGUgcW1zRmxvd2NoYXJ0IHVudGlsIE5LLTQ0MCBkb25lXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ja2VkaXRvckNvbmZpZyA9IENLRWRpdG9yQ29tbW9uRnVuY3Rpb25zLmdldENLRWRpdG9yQ29uZmlndXJhdGlvbih0b29sYmFySXRlbXMsIHRoaXMuTEFORywgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgIGlmICh0aGlzLmNrZWRpdG9yQ29uZmlnKVxuICAgICAgICAgICAgdGhpcy5ja2VkaXRvckNvbmZpZy5jb250YWluZXJJZCA9IHRoaXMuZWRpdG9ySWQ7XG5cbiAgICAgICAgaWYgKHRoaXMucW1zY2tEYXRhLmhpZGVJbWdPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnID0gdGhpcy5oaWRlSW1hZ2VPcHRpb25zKHRoaXMuY2tlZGl0b3JDb25maWcsIHRoaXMucW1zY2tEYXRhLmhpZGVJbWdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0QXBpVXJsKHRoaXMucW1zY2tEYXRhLmFwaVVybCk7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZE1hdGh0eXBlQ29uZmlnKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTWF0aFR5cGVDb25maWcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFRpbWVzdGFtcENvbmZpZygpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRpbWVzdGFtcENvbmZpZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkV1Byb29mcmVhZGVyKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkV1Byb29mcmVhZGVyQ29uZmlnKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkVE9DVG9vbGJhcigpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvZ2dsZVRPQ0NvbmZpZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGdWxsU2NyZWVuQ29uZmlnKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5xbXNja0RhdGEudGFibGVPZkNvbnRlbnRIZWFkaW5ncykge1xuICAgICAgICAgICAgdGhpcy5ja2VkaXRvckNvbmZpZy50YWJsZU9mQ29udGVudEhlYWRpbmdzID0gW107XG4gICAgICAgICAgICBjb25zdCBpdGVtQXJyYXkgPSB0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBpdGVtQXJyYXkuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnLnRhYmxlT2ZDb250ZW50SGVhZGluZ3MucHVzaChpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlOiAoY29udGVudDogYW55KSA9PiB2b2lkO1xuICAgIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBcImNrLWRpc2FibGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNFbmFibGVkV1Byb29mcmVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyh3cHJvb2ZyZWFkZXIpL2dpbTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyICYmXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zcmNVcmwgJiZcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFdQcm9vZnJlYWRlckNvbmZpZygpIHtcbiAgICAgICAgY29uc3Qgd3Byb29mcmVhZGVyQ29uZmlnID0ge1xuICAgICAgICAgICAgd3Byb29mcmVhZGVyOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQgfHxcbiAgICAgICAgICAgIHRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQubGVuZ3RoID09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvL0ZhbGxiYWNrIHZhbHVlIG9mIHNlcnZpY2VJZCBwcm9wZXJ0eSB0byBkZW1vIHNlcnZpY2VJZFxuICAgICAgICAgICAgdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNlcnZpY2VJZCA9XG4gICAgICAgICAgICAgICAgXCIxOktwa3ZRMi02S05Vai1MMVczdTItQzlqMEsxLVp2MnRZMS1DZkRPeC1XZkdSZzItcVh0Y2ktWXl5RTM0LWowOUg0Mi1iMGFDdDMtZDlhXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcbiAgICAgICAgICAgIHdwcm9vZnJlYWRlckNvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZFRvZ2dsZVRvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRvZ2dsZVRvb2xiYXIpL2dtaTtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtc1xuICAgICAgICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXG4gICAgICAgICAgICAmJiB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xO1xuICAgIH1cblxuICAgIGFkZFRvZ2dsZVRvb2xiYXJDb25maWcoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtcy5zcGxpdCgnLCcpO1xuXG4gICAgICAgIGNvbnN0IHRvZ2dsZVRvb2xiYXJDb25maWcgPSB7XG4gICAgICAgICAgICB0b2dnbGVUb29sYmFyQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgdG9vbGJhcjogaXRlbXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxuICAgICAgICAgICAgdG9nZ2xlVG9vbGJhckNvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHFtc0Z1bGxzY3JlZW4pL2dpbTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS5mdWxsU2NyZWVuQ2xhc3MgJiZcbiAgICAgICAgICAgIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTFcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhZGRGdWxsU2NyZWVuQ29uZmlnKCkge1xuICAgICAgICBjb25zdCBmdWxsU2NyZWVuQ29uZmlnID0ge1xuICAgICAgICAgICAgZnVsbFNjcmVlbkNvbmZpZzoge1xuICAgICAgICAgICAgICAgIGNsYXNzOiB0aGlzLnFtc2NrRGF0YS5mdWxsU2NyZWVuQ2xhc3MsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxuICAgICAgICAgICAgZnVsbFNjcmVlbkNvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZFRPQ1Rvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRhYmxlT2ZDb250ZW50cykvZ2ltO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzICYmXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcbiAgICAgICAgICAgIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTFcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhZGRUb2dnbGVUT0NDb25maWcoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xbXNja0RhdGEudGFibGVPZkNvbnRlbnRIZWFkaW5ncy5zcGxpdChcIixcIik7XG4gICAgICAgIGNvbnN0IHRhYmxlT2ZDb250ZW50cyA9IHtcbiAgICAgICAgICAgIHRhYmxlT2ZDb250ZW50czoge1xuICAgICAgICAgICAgICAgIHN1cHBvcnRlZEhlYWRpbmdzOiBpdGVtcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXG4gICAgICAgICAgICB0YWJsZU9mQ29udGVudHNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWRUaW1lc3RhbXBDb25maWcoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRpbWVzdGFtcCkvZ2ltO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS50aW1lc3RhbXBGb3JtYXQgJiZcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFRpbWVzdGFtcENvbmZpZygpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wQ29uZmlnID0ge1xuICAgICAgICAgICAgdGltZXN0YW1wQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgZGF0ZXRpbWVGb3JtYXQ6IHRoaXMucW1zY2tEYXRhLnRpbWVzdGFtcEZvcm1hdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXG4gICAgICAgICAgICB0aW1lc3RhbXBDb25maWdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWRNYXRodHlwZUNvbmZpZygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8oTWF0aFR5cGUpfChDaGVtVHlwZSkvZ2ltO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS5tYXRodHlwZVNlcnZpY2VVcmwgJiZcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZE1hdGhUeXBlQ29uZmlnKCkge1xuICAgICAgICBjb25zdCBtYXRoVHlwZUNvbmZpZyA9IHtcbiAgICAgICAgICAgIG1hdGhUeXBlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIHNlcnZpY2VQcm92aWRlclByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgVVJJOiB0aGlzLnFtc2NrRGF0YS5tYXRodHlwZVNlcnZpY2VVcmwsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcjogXCJhc3B4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXG4gICAgICAgICAgICBtYXRoVHlwZUNvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZWQoeyBlZGl0b3IgfSkge1xuICAgICAgICAvLyB0aGlzLnFtc2NrQ29udGVudElucHV0ID0gZWRpdG9yLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRPdXRwdXQuZW1pdCh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbHVyKHsgZWRpdG9yIH0pIHtcbiAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRJbnB1dCA9IGVkaXRvci5nZXREYXRhKCk7XG4gICAgICAgIHRoaXMucW1zY2tDb250ZW50T3V0cHV0LmVtaXQodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5xbXNja0NvbnRlbnRJbnB1dCAmJiAhdGhpcy5yZXF1aXJlZFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjLnZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIGhpZGVJbWFnZU9wdGlvbnMoY29uZmlnLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1BcnJheSA9IG9wdGlvbnMuc3BsaXQoJywnKTtcbiAgICAgICAgaXRlbUFycmF5LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25maWcuaW1hZ2UudG9vbGJhciA9IGNvbmZpZy5pbWFnZS50b29sYmFyLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtICE9PSBlbGVtZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIG9uUmVhZHlcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZWFkeShlZGl0b3IpIHtcbiAgICAgICAgdGhpcy5lZGl0b3JJbnN0YW5jZSA9IGVkaXRvcjtcbiAgICAgICAgaWYgKHRoaXMucW1zY2tDb250ZW50SW5wdXQpIHtcbiAgICAgICAgICAgIGVkaXRvci5zZXREYXRhKHRoaXMucW1zY2tDb250ZW50SW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdEVkaXRvcihlZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvcihlZGl0b3IpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VVcGxvYWRUeXBlcyA9IENLRWRpdG9ySW1hZ2VVcGxvYWRUeXBlQ29uc3QuUU1TQ0tfSU1BR0VfVFlQRVNfU1VQUE9SVF9ERUZBVUxUO1xuICAgICAgICBjb25zdCBjb25maWc6IFFtc1VwbG9hZEFkYXB0ZXJDb25maWcgPSB7XG4gICAgICAgICAgICBhcGlVcmw6IHRoaXMucW1zY2tEYXRhLmFwaVVybCxcbiAgICAgICAgICAgIExBTkc6IHRoaXMuTEFORyxcbiAgICAgICAgICAgIGltYWdlVXBsb2FkVHlwZXNcbiAgICAgICAgfTtcbiAgICAgICAgZWRpdG9yLnBsdWdpbnMuZ2V0KFwiRmlsZVJlcG9zaXRvcnlcIikuY3JlYXRlVXBsb2FkQWRhcHRlciA9IChsb2FkZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUW1zVXBsb2FkQWRhcHRlcihsb2FkZXIsIGNvbmZpZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZWRpdG9yLnVpXG4gICAgICAgICAgICAuZ2V0RWRpdGFibGVFbGVtZW50KClcbiAgICAgICAgICAgIC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShcbiAgICAgICAgICAgICAgICBlZGl0b3IudWkudmlldy50b29sYmFyLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZWRpdG9yLnVpLmdldEVkaXRhYmxlRWxlbWVudCgpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIC8vIEFwcGVkIFdvcmRjb3VudCB0byBDS2VkaXRvclxuICAgICAgICBlZGl0b3IucGx1Z2lucy5nZXQoXCJXb3JkQ291bnRcIikub24oXCJ1cGRhdGVcIiwgKGV2dCwgc3RhdHMpID0+IHtcbiAgICAgICAgICAgIC8vIFByaW50cyB0aGUgY3VycmVudCBjb250ZW50IHN0YXRpc3RpY3MuXG4gICAgICAgICAgICBjb25zdCB3b3Jkc0JveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyB0aGlzLmVkaXRvcklkICsgXCIgLndvcmRjb3VudC1jb250ZW50XCIpO1xuICAgICAgICAgICAgaWYgKCEhd29yZHNCb3gpIHtcbiAgICAgICAgICAgICAgICB3b3Jkc0JveC50ZXh0Q29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5XT1JEU306ICR7c3RhdHMud29yZHN9IC8gJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQ0hBUkFDVEVSU306ICR7c3RhdHMuY2hhcmFjdGVyc31gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5xbXNja0RhdGEuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgZWRpdG9yLmlzUmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0RWRpdG9ySW5zdGFuY2VPYnNlcnZlcih0aGlzLmVkaXRvcklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGVtcGxhdGUgLSBMb2FkIHRlbXBsYXRlXG4gICAgICovXG4gICAgcHVibGljIHRlbXBsYXRlRXZlbnRIYW5kbGluZygpIHtcbiAgICAgICAgY29uc3QgZGF0YTogUU1TQ0tFZGl0b3JUZW1wbGF0ZSA9IG5ldyBRTVNDS0VkaXRvclRlbXBsYXRlKCk7XG4gICAgICAgIGRhdGEuaWQgPSAwO1xuICAgICAgICBkYXRhLmh0bWwgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xuICAgICAgICBkYXRhLmVkaXQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yVGVtcGxhdGVDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNTQwcHhcIixcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBURE9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgdGVtcGxhdGUgLSBMb2FkIHRlbXBsYXRlXG4gICAgICovXG4gICAgcHVibGljIGxvYWRUZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckxvYWRUZW1wbGF0ZUNvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6IFwiNjUwcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCI3MDBweFwiLFxuICAgICAgICAgICAgZGF0YTogeyBlbmFibGVFZGl0VGVtcGxhdGU6IHRoaXMucW1zY2tEYXRhLmVuYWJsZVRlbXBsYXRlIH0sXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfTE9BRF9URU1QTEFURV9QTFVHSU5fUkVTUCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbmNob3IgLSBMaW5rIC0gSW1hZ2UgbWFwcGluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBsaW5rRXZlbnRIYW5kbGluZyhcbiAgICAgICAgbGluayxcbiAgICAgICAgcW1zY2tDb250ZW50RmllbGRzPyxcbiAgICAgICAgcW1zY2tJc0dldEFuY2hvck1vcmVDb250ZW50P1xuICAgICkge1xuICAgICAgICBpZiAobGluay5ja2VkaXRvcklkICE9IHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgUU1TQ0tFZGl0b3JMaW5rKCk7XG4gICAgICAgIGRhdGEgPSBsaW5rO1xuICAgICAgICBkYXRhLmVkaXRvckNvbnRlbnQgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xuICAgICAgICBpZiAocW1zY2tDb250ZW50RmllbGRzICYmIHFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudCkge1xuICAgICAgICAgICAgZGF0YS5xbXNja0NvbnRlbnRGaWVsZHMgPSBxbXNja0NvbnRlbnRGaWVsZHM7XG4gICAgICAgICAgICBkYXRhLnFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudCA9IHFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudDtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmRlZmF1bHRUYXJnZXROZXdXaW5kb3cgPSB0aGlzLnFtc2NrRGF0YS5kZWZhdWx0VGFyZ2V0TmV3V2luZG93O1xuICAgICAgICBkYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCA9IHRoaXMucW1zY2tEYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZDtcblxuICAgICAgICBsZXQgZGlhbG9nVGVtcGxhdGU7XG4gICAgICAgIGlmICghdGhpcy5xbXNja1BsdWdpbi5zaW1wbGVNb2RlKSB7XG4gICAgICAgICAgICBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JMaW5rQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiNjUwcHhcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IFwiNjYwcHhcIixcbiAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFtc0NrZWRpdG9yTGlua1NpbXBsZUNvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjIwMHB4XCIsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0xJTktfUExVR0lOX1JFU1AsIHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9vbHRpcCBtYXBwaW5nXG4gICAgICovXG4gICAgcHVibGljIHRvb2x0aXBFdmVudEhhbmRsaW5nKHZhbHVlKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yVG9vbHRpcCgpO1xuICAgICAgICBkYXRhLnRleHQgPSB2YWx1ZS50ZXh0O1xuICAgICAgICBkYXRhLmNvbnRlbnQgPSB2YWx1ZS5jb250ZW50O1xuICAgICAgICBkYXRhLmNrRWRpdG9yID0gdGhpcy5xbXNja1BsdWdpbi5wbHVnaW5PYmplY3Q7XG5cbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yVG9vbHRpcENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6IFwiNjUwcHhcIixcbiAgICAgICAgICAgIGhlaWdodDogXCI1NTVweFwiLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19UT09MVElQX1BMVUdJTl9SRVNQLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltYWdlTWFwIG1hcHBpbmdcbiAgICAgKi9cbiAgICBwdWJsaWMgaW1hZ2VNYXBFdmVudEhhbmRsaW5nKHZhbHVlKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9ySW1hZ2VNYXAoKTtcbiAgICAgICAgZGF0YS5uYW1lID0gdmFsdWUubmFtZTtcbiAgICAgICAgZGF0YS5hcmVhcyA9IHZhbHVlLmFyZWFzO1xuICAgICAgICBkYXRhLmltYWdlVXJsID0gdmFsdWUuaW1hZ2VVcmw7XG4gICAgICAgIGRhdGEuaW1hZ2VXaWR0aCA9IHZhbHVlLmltYWdlV2lkdGg7XG4gICAgICAgIGRhdGEuaW1hZ2VIZWlnaHQgPSB2YWx1ZS5pbWFnZUhlaWdodDtcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5tb2R1bGU7XG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcbiAgICAgICAgZGF0YS5lZGl0b3JDb250ZW50ID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcbiAgICAgICAgZGF0YS5saW5rSmF2YVNjcmlwdExpbmtzQWxsb3dlZCA9IHRoaXMucW1zY2tEYXRhLmxpbmtKYXZhU2NyaXB0TGlua3NBbGxvd2VkO1xuICAgICAgICBkYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCA9IHRoaXMucW1zY2tEYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZDtcbiAgICAgICAgZGF0YS5kZWZhdWx0VGFyZ2V0TmV3V2luZG93ID0gdGhpcy5xbXNja0RhdGEuZGVmYXVsdFRhcmdldE5ld1dpbmRvdztcblxuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JJbWFnZU1hcENvbXBvbmVudCwge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19JTUFHRU1BUF9QTFVHSU5fUkVTUCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAgQnVzaW5lc3MgUHJvY2VzcyBNb2RlbCBhbmQgTm90YXRpb25cbiAgICAqL1xuICAgIHB1YmxpYyBicG1uRXZlbnRIYW5kbGluZyhpZDogc3RyaW5nKSB7XG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yQnBtbkRhdGEoKTtcbiAgICAgICAgZGF0YS5pZCA9IGlkO1xuICAgICAgICBkYXRhLm1vZHVsZSA9IHRoaXMucW1zY2tEYXRhLm1vZHVsZTtcbiAgICAgICAgZGF0YS5lbnRpdHlJZCA9IHRoaXMucW1zY2tEYXRhLmVudGl0eUlkO1xuICAgICAgICBkYXRhLmVkaXRvckNvbnRlbnQgPSB0aGlzLnFtc2NrQ29udGVudElucHV0O1xuICAgICAgICBkYXRhLnNob3dQcm9jZXNzRG9jdW1lbnRUcmVlRGF0YUluU3BsaXRWaWV3ID0gdGhpcy5xbXNja0RhdGEuc2hvd1Byb2Nlc3NEb2N1bWVudFRyZWVEYXRhSW5TcGxpdFZpZXc7XG4gICAgICAgIGRhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkID0gdGhpcy5xbXNja0RhdGEuZW5hYmxlZEludGVyY29ubmVjdGVkO1xuICAgICAgICBkYXRhLmVuYWJsZWREZXZpYXRpb25Nb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5lbmFibGVkRGV2aWF0aW9uTW9kdWxlO1xuICAgICAgICBkYXRhLmVuYWJsZWRDaGVja2xpc3RNb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlO1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JCcG1uQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICBtYXhXaWR0aDogXCIxMDB2d1wiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgICAgIG1heEhlaWdodDogXCIxMDB2d1wiLFxuICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBldnQgPSBuZXcgQ3VzdG9tRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUE1OX1BMVUdJTl9SRVNQLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICAvKlxuICAgICBBYm91dCBDS0VkaXRvclxuICAgKi9cbiAgICBwdWJsaWMgYWJvdXRDS0VkaXRvckV2ZW50SGFuZGxpbmcodmVyc2lvbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvckFib3V0Q29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogXCI1MDBweFwiLFxuICAgICAgICAgICAgZGF0YTogdmVyc2lvbixcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlLmNvbXBvbmVudEluc3RhbmNlLmNrRWRpdG9yID0gdGhpcy5lZGl0b3JJbnN0YW5jZTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGVcbiAgICAgICAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7IH0pO1xuICAgIH1cblxuICAgIC8qXG4gICAgICBUb29sYmFyIHRvZ2dsZVxuICBcbiAgICAgIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgd29ya2Fyb3VuZC5cbiAgICAgIFRyYWNraW5nIHN0YXR1cyBhbmQgcHJvZ3Jlc3Mgb2YgdGhlIGlzc3VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ja2VkaXRvci9ja2VkaXRvcjUvaXNzdWVzLzczODNcbiAgXG4gICAgICAtIFJlbmRlciBib3RoIGRlZmF1bHQgdG9vbGJhciBhbmQgdG9nZ2xlIHRvb2xiYXIgYXQgaW5pdCB0aW1lXG4gICAgICAtIFNldCBJRCBmb3IgdG9vbGJhciBpdGVtcyB1c2luZyBpbmRleDpcbiAgICAgICAgKyBGcm9tIGluZGV4IDAgdG8gdG9vbGJhckxlbmd0aCAtIDEgaXMgdGhlIGRlZmF1bHQgdG9vbGJhclxuICAgICAgICArIEZyb20gaW5kZXggdG9vbGJhckxlbmd0aCBvbiBpcyB0aGUgdG9nZ2xlIHRvb2xiYXJcbiAgICAgIC0gU2hvdy9oaWRlIGRlZmF1bHQgYW5kIHRvZ2dsZSB0b29sYmFyIGJ5IHNldCBkaXNwbGF5IG5vbmUgdG8gY29ycmVzcG9uZGluZyB0b29sYmFyIGl0ZW1zIGJhc2VkIG9uIElEXG4gICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlVG9vbGJhckV2ZW50SGFuZGxpbmcoKSB7XG4gICAgICAgIGNvbnN0IHFtc2NrZWRpdG9yID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZWRpdG9ySWQpO1xuICAgICAgICBjb25zdCB0b2dnbGVBdHRyaWJ1dGUgPSAnaXNUb2dnbGVUb29sYmFyJztcblxuICAgICAgICBpZiAocW1zY2tlZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzVG9nZ2xlVG9vbGJhciA9XG4gICAgICAgICAgICAgICAgcW1zY2tlZGl0b3IuZ2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSkgPT0gXCJ0cnVlXCI7XG4gICAgICAgICAgICBpZiAoaXNUb2dnbGVUb29sYmFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VG9vbGJhclZpZXdNb2RlKHRydWUpO1xuICAgICAgICAgICAgICAgIHFtc2NrZWRpdG9yLnNldEF0dHJpYnV0ZSh0b2dnbGVBdHRyaWJ1dGUsICdmYWxzZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0VG9vbGJhclZpZXdNb2RlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBxbXNja2VkaXRvci5zZXRBdHRyaWJ1dGUodG9nZ2xlQXR0cmlidXRlLCAndHJ1ZScpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRUb29sYmFyVmlld01vZGUoc2hvd1RvZ2dsZVRvb2xiYXI6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdG9vbGJhckxlbmd0aCA9IHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXI/LnNwbGl0KCcsJykubGVuZ3RoIHx8IDA7XG4gICAgICAgIC8qXG4gICAgICAgICAgSXRlbXMgaW4gdG9vbGJhciBhcmUgaW5kZXhlZDpcbiAgICAgICAgICAtIEZyb20gaW5kZXggMCB0byB0b29sYmFyTGVuZ3RoIC0gMSBpcyB0aGUgZGVmYXVsdCB0b29sYmFyXG4gICAgICAgICAgLSBGcm9tIGluZGV4IHRvb2xiYXJMZW5ndGggb24gaXMgdGhlIHRvZ2dsZSB0b29sYmFyXG4gICAgICAgICovXG4gICAgICAgICQoYCMke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke3Rvb2xiYXJMZW5ndGggLSAxfWApPy5wcmV2QWxsKCkuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNob3dUb2dnbGVUb29sYmFyID8gJ25vbmUnIDogJyc7XG4gICAgICAgIH0pXG5cbiAgICAgICAgJChgIyR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7dG9vbGJhckxlbmd0aCAtIDF9YCk/LmNzcygnZGlzcGxheScsIHNob3dUb2dnbGVUb29sYmFyID8gJ25vbmUnIDogJycpO1xuXG4gICAgICAgICQoYCMke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke3Rvb2xiYXJMZW5ndGggLSAxfWApPy5uZXh0QWxsKCkuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IHNob3dUb2dnbGVUb29sYmFyID8gJycgOiAnbm9uZSc7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmxvd2NoYXJ0XG4gICAgICovXG4gICAgcHVibGljIGZsb3djaGFydEV2ZW50SGFuZGxpbmcoaWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JGbG93Y2hhcnRDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIjg5dndcIixcbiAgICAgICAgICAgIG1heFdpZHRoOiBcIjEwMHZ3XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNzI1cHhcIixcbiAgICAgICAgICAgIG1heEhlaWdodDogXCIxMDB2d1wiLFxuICAgICAgICAgICAgZGF0YTogaWQsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0ZMT1dDSEFSVF9QTFVHSU5fUkVTUCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQnJvd3NlIFZpZGVvXG4gICAgICovXG4gICAgcHVibGljIGJyb3dzZVZpZGVvRXZlbnRIYW5kbGluZyh2YWx1ZSkge1xuICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0VXBsb2FkVmlkZW9MaXN0KClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpZGVvcyA9IHJlc3BvbnNlIHx8IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dTZWxlY3RGb2xkZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBhcmVhT2ZDdXJyZW50UHJvY2VzczogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgc2hvd0NoZWNrQm94OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBhbGxvd011bHRpcGxlQ2hlY2s6IHRoaXMucW1zY2tEYXRhLnVwbG9hZFZpZGVvQWxsb3dNdWx0aXBsZUNoZWNrLFxuICAgICAgICAgICAgICAgICAgICBvbmx5Q2hlY2tCb3hGb3JDaGlsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlSWQ6IERhdGFUeXBlLmRvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICBvcGVuSWNvbjogXCJmb2xkZXJfb3BlblwiLFxuICAgICAgICAgICAgICAgICAgICBvcGVuSWNvbkNvbG9yOiBcIiMxOTU0QTlcIixcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VJY29uOiBcImZvbGRlcl9maWxsZWRcIixcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VJY29uQ29sb3I6IFwiIzRhY2FmZlwiLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSWNvbjogXCJpbnNlcnRfZHJpdmVfZmlsZVwiLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSWNvblBhdGg6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1JY29uQmFzZTY0OiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBzaW5nbGVTZWxlY3RlZE5vZGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZEFsbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IFBvcHVwRGF0YSA9IG5ldyBQb3B1cERhdGEoKTtcbiAgICAgICAgICAgICAgICBkYXRhLm1vZHVsZUlkID0gMjtcbiAgICAgICAgICAgICAgICBkYXRhLm1vZHVsZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0VMRUNUX1ZJREVPX0ZST01fQVJDSElWRTtcbiAgICAgICAgICAgICAgICBkYXRhLm1vZHVsZVVwbG9hZEltYWdlTmFtZSA9IHRoaXMuTEFORy5RTVNDS0VESVRPUi5TRUxFQ1RfVklERU9fSU1BR0U7XG4gICAgICAgICAgICAgICAgZGF0YS5tb2R1bGVVcGxvYWRGaWxlTmFtZSA9IHRoaXMuTEFORy5RTVNDS0VESVRPUi5BRERfQV9GSUxFO1xuXG4gICAgICAgICAgICAgICAgZGF0YS52aWRlb0RhdGEgPSBuZXcgUU1TQ0tFZGl0b3JWaWRlbyh2YWx1ZS5pZCwgdmFsdWUuc3JjLCB0cnVlLCB2YWx1ZS5wb3N0ZXJcbiAgICAgICAgICAgICAgICAgICAgLCB2YWx1ZS53aWR0aD8udG9TdHJpbmcoKT8uaW5kZXhPZignJScpIDwgMCA/IHZhbHVlLndpZHRoPy50b1N0cmluZygpPy5tYXRjaCgvXFxkL2cpPy5qb2luKCcnKSA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgLCB2YWx1ZS5oZWlnaHQ/LnRvU3RyaW5nKCk/Lm1hdGNoKC9cXGQvZyk/LmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICBkYXRhLmNhblVwZGF0ZVZpZGVvUHJvcGVydGllcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YS50cmVlRGF0YTEgPSB2aWRlb3MubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290SWQ6IGByb290LSR7aXRlbS5yb290SWR9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiAoaXRlbS5wYXJlbnRJZCAhPT0gbnVsbCAmJiBpdGVtLnBhcmVudElkICE9PSBcIlwiKSA/IGByb290LSR7aXRlbS5wYXJlbnRJZH1gIDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3ROYW1lOiBpdGVtLnJvb3ROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViTmFtZTogaXRlbS5zdWJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRJZDogaXRlbS5jaGlsZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGROYW1lOiBpdGVtLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c0lkOiBpdGVtLnN0YXR1c0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiBpdGVtLmRpc3BsYXlJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiBpdGVtLmNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnVybCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGRhdGEudHJlZURhdGEyID0gW107XG4gICAgICAgICAgICAgICAgZGF0YS50cmVlQ29uZmlnMSA9IGNvbmZpZztcbiAgICAgICAgICAgICAgICBkYXRhLmNhblVwbG9hZEltYWdlID0gdmlkZW9zLmxlbmd0aCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICBkYXRhLmNhblVwbG9hZFZpZGVvID0gdGhpcy5xbXNja0RhdGEudmlkZW9VcGxvYWRNb2RlID09PSBWaWRlb1VwbG9hZE1vZGUuQWxsb3dVcGxvYWQ7XG4gICAgICAgICAgICAgICAgZGF0YS5tYXhWaWRlb1RodW1ibmFpbFNpemVLQiA9IHRoaXMucW1zY2tEYXRhLm1heFZpZGVvVGh1bWJuYWlsU2l6ZUtCO1xuICAgICAgICAgICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zZWxlY3RlZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkTGlzdCA9IFtkYXRhLnRyZWVEYXRhMS5maW5kKHggPT4geC5jaGlsZElkID09PSB2YWx1ZS5zZWxlY3RlZElkKV0gfHwgW107XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuZGlzYWJsZWRMaXN0ID0gZGlzYWJsZWRMaXN0Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguY2hpbGRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogeC5jaGlsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUlkOiB4LmRpc3BsYXlJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihSZWxhdGVkUG9wdXBDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IFwiODAwcHhcIixcbiAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBcIjYzMHB4XCIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFwicW1zY2tlZGl0b3ItYnJvd3NlLXZpZGVvLXBvcHVwXCIsXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoQm94ID0gd2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBcIi5xbXNja2VkaXRvci1icm93c2UtdmlkZW8tcG9wdXAgI3Ftc2xpYl9yZWxhdGVkX3BvcHVwX3NlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2hCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEJveC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuXG4gICAgICAgICAgICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJscyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXJscyA9IFtyZXN1bHQuc3JjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LndpZHRoIHx8IHJlc3VsdC53aWR0aCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LndpZHRoID0gVmlkZW9Db25zdC5ERUZBVUxUX1ZJREVPX1dJRFRIO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaGVpZ2h0IHx8IHJlc3VsdC5oZWlnaHQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5oZWlnaHQgPSBWaWRlb0NvbnN0LkRFRkFVTFRfVklERU9fSEVJR0hUO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JST1dTRV9WSURFT19SRVNQLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZGV0YWlsOiB7IHVybHM6IHVybHMsIHRodW1ibmFpbFVybDogcmVzdWx0LnBvc3RlciwgaWQ6IHJlc3VsdC5pZCwgd2lkdGg6IHJlc3VsdC53aWR0aCwgaGVpZ2h0OiByZXN1bHQuaGVpZ2h0IH0gfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3NldEVkaXRvckluc3RhbmNlT2JzZXJ2ZXIoZWRpdG9ySWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25MaXN0ID0+XG4gICAgICAgICAgICBtdXRhdGlvbkxpc3QuZmlsdGVyKG0gPT4gbS50eXBlID09PSAnY2hpbGRMaXN0JykuZm9yRWFjaChtID0+IHtcbiAgICAgICAgICAgICAgICBtLmFkZGVkTm9kZXMuZm9yRWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBhZGRlZCBub2RlIGhhcyB0aGUgc3BlY2lmaWVkIElEXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Rvb2xiYXJJdGVtc0lkU2V0ICYmIChub2RlLnF1ZXJ5U2VsZWN0b3IgJiYgbm9kZS5xdWVyeVNlbGVjdG9yKCcjJyArIGVkaXRvcklkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldElkRm9yVG9vbGJhckl0ZW1zKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcblxuICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignIycgKyBlZGl0b3JJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldElkRm9yVG9vbGJhckl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRJZEZvclRvb2xiYXJJdGVtcygpIHtcbiAgICAgICAgY29uc3QgdG9vbGJhckl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgJHt0aGlzLmVkaXRvcklkID8gJyMnICsgdGhpcy5lZGl0b3JJZCA6ICcnfSAuY2stdG9vbGJhcl9faXRlbXNgKT8uY2hpbGRyZW4gfHwgW107XG4gICAgICAgIGlmICghdG9vbGJhckl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNUb29sYmFySXRlbXNJZFNldCA9IHRydWU7XG4gICAgICAgIChBcnJheS5mcm9tKHRvb2xiYXJJdGVtcykgYXMgSFRNTEVsZW1lbnRbXSkuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGl0ZW0uaWQgPSBgJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHtpbmRleH1gO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XG4gICAgfVxufVxuIl19
|
780
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvcW1zLWNrZWRpdG9yLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RNLE9BQU8sRUFBZSxhQUFhLEVBQUUsaUJBQWlCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxnQkFBZ0IsRUFBMEIsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLHVCQUF1QixNQUFNLG9DQUFvQyxDQUFDO0FBR3pFLE9BQU8sZUFBZSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdFQUF3RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2xILE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLDhFQUE4RSxDQUFD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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBSZW5kZXJlcjIsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgUW1zVXBsb2FkQWRhcHRlciwgUW1zVXBsb2FkQWRhcHRlckNvbmZpZyB9IGZyb20gJy4vY29tbW9uL2NsYXNzZXMvcW1zVXBsb2FkQWRhcHRlcic7XG5pbXBvcnQgeyBDS0VkaXRvckV2ZW50Q29uc3QgfSBmcm9tICcuL2NvbW1vbi9jb25zdGFudHMvY2tlZGl0b3JFdmVudC5jb25zdGFudCc7XG5pbXBvcnQgQ0tFZGl0b3JDb21tb25GdW5jdGlvbnMgZnJvbSAnLi9jb21tb24vZnVuY3Rpb25zL2NvbW1vbi5mdW5jdGlvbic7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckRhdGEgfSBmcm9tICcuL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JQbHVnaW4gfSBmcm9tICcuL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXBsdWdpbi5tb2RlbCc7XG5pbXBvcnQgUU1TQ0tFZGl0b3JMaW5rIGZyb20gJy4vY29tbW9uL21vZGVscy9xbXMtY2tlZGl0b3ItdXJsLm1vZGVsJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItYnBtbi9xbXMtY2tlZGl0b3ItYnBtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1mdWxsc2NyZWVuL3Ftcy1ja2VkaXRvci1mdWxsc2NyZWVuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci1pbWFnZW1hcC9xbXMtY2tlZGl0b3ItaW1hZ2VtYXAuY29tcG9uZW50JztcbmltcG9ydCB7IFFNU0NLRWRpdG9yTGlua0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay9xbXMtY2tlZGl0b3ItbGluay5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JMb2FkVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWxvYWQtdGVtcGxhdGUvcW1zLWNrZWRpdG9yLWxvYWQtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IFFNU0NLRWRpdG9yVGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLXRlbXBsYXRlL3Ftcy1ja2VkaXRvci10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Ftcy1ja2VkaXRvci10b29sdGlwL3Ftcy1ja2VkaXRvci10b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckltYWdlTWFwIH0gZnJvbSAnLi9tb2RlbHMvcW1zLWNrZWRpdG9yLWltYWdlbWFwLm1vZGVsJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yVGVtcGxhdGUgfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdGVtcGxhdGUubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JUb29sdGlwIH0gZnJvbSAnLi9tb2RlbHMvcW1zLWNrZWRpdG9yLXRvb2x0aXAubW9kZWwnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9xbXMtY2tlZGl0b3ItYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JBYm91dENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItYWJvdXQvcW1zLWNrZWRpdG9yLWFib3V0LmNvbXBvbmVudCc7XG4vLyBpbXBvcnQgeyBDS0VkaXRvcjUgfSBmcm9tICdAY2tlZGl0b3IvY2tlZGl0b3I1LWFuZ3VsYXIvY2tlZGl0b3InO1xuaW1wb3J0IHsgUU1TQ0tFZGl0b3JCcG1uRGF0YSB9IGZyb20gXCIuL21vZGVscy9xbXMtY2tlZGl0b3ItYnBtbi1kYXRhLm1vZGVsXCI7XG5pbXBvcnQgeyBQb3B1cERhdGEgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9yZWxhdGVkL21vZGVsL3BvcHVwLWRhdGEubW9kZWxcIjtcbmltcG9ydCB7IFJlbGF0ZWRQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRzL3JlbGF0ZWQvcG9wdXAvcmVsYXRlZC1wb3B1cC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFFNU0NLRWRpdG9yVHJlZVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdHJlZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBRTVNDS0VkaXRvckZsb3djaGFydENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcW1zLWNrZWRpdG9yLWZsb3djaGFydC9xbXMtY2tlZGl0b3ItZmxvd2NoYXJ0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUW1zQ2tlZGl0b3JMaW5rU2ltcGxlQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9xbXMtY2tlZGl0b3ItbGluay1zaW1wbGUvcW1zLWNrZWRpdG9yLWxpbmstc2ltcGxlLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ0tFZGl0b3JJbWFnZVVwbG9hZFR5cGVDb25zdCB9IGZyb20gJy4vY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckltYWdlVXBsb2FkVHlwZS5jb25zdCc7XG5pbXBvcnQgeyBWaWRlb1VwbG9hZE1vZGUgfSBmcm9tICcuL2NvbW1vbi9lbnVtcy92aWRlby11cGxvYWQtbW9kZS5lbnVtJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yVmlkZW8gfSBmcm9tICcuL21vZGVscy9xbXMtY2tlZGl0b3ItdmlkZW8ubW9kZWwnO1xuaW1wb3J0IHsgVmlkZW9Db25zdCB9IGZyb20gJy4uL2NvbXBvbmVudHMvcmVsYXRlZC9jb21tb24vdmlkZW8uY29uc3QnO1xuaW1wb3J0IHsgRGF0YVR5cGUgfSBmcm9tICcuLi9jb21tb24vZW51bS9kYXRhLXR5cGUuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcInFtcy1ja2VkaXRvclwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcW1zLWNrZWRpdG9yLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3Ftcy1ja2VkaXRvci5jb21wb25lbnQuc2Nzc1wiXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgUU1TQ0tFZGl0b3JGdWxsc2NyZWVuQ29tcG9uZW50LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFFNU0NLRWRpdG9yQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUU1TQ0tFZGl0b3JDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBRTVNDS0VkaXRvckNvbXBvbmVudFxuICAgIGV4dGVuZHMgUU1TQ0tFZGl0b3JCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZhbGlkYXRvciwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBxbXNja0RhdGE6IFFNU0NLRWRpdG9yRGF0YTtcbiAgICBASW5wdXQoKSBxbXNja1BsdWdpbjogUU1TQ0tFZGl0b3JQbHVnaW47XG4gICAgQElucHV0KCkgcW1zY2tDb250ZW50SW5wdXQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBxbXNja0NvbnRlbnRGaWVsZHM/OiBbXTtcbiAgICBASW5wdXQoKSBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQ/OiBib29sZWFuO1xuICAgIEBJbnB1dCgnZGlzYWJsZWQnKSBpc0Rpc2FibGVkOiBib29sZWFuO1xuICAgIEBJbnB1dCgncmVxdWlyZWQnKSByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGVkaXRvcklkID0gJ3Ftc2NrZWRpdG9yJztcbiAgICBAT3V0cHV0KCkgcW1zY2tDb250ZW50T3V0cHV0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIExBTkc6IGFueTtcbiAgICBja0VkaXRvcjogYW55O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBja2VkaXRvckNvbmZpZzogYW55O1xuICAgIGNrRWRpdG9yRXZlbnRDb25zdCA9IENLRWRpdG9yRXZlbnRDb25zdDtcbiAgICBjb3VudFdvcmQ6IG51bWJlcjtcbiAgICBjb3VudENoYXI6IG51bWJlcjtcbiAgICBlZGl0b3JJbnN0YW5jZTogYW55O1xuICAgIGNrVGFnbmFtZTogc3RyaW5nO1xuICAgIHRvb2xiYXJJdGVtUHJlZml4SWQ6IHN0cmluZztcbiAgICBpc1Rvb2xiYXJJdGVtc0lkU2V0OiBib29sZWFuID0gZmFsc2U7XG4gICAgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XG4gICAgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG4gICAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzptZXNzYWdlXCIsIFtcIiRldmVudFwiXSlcbiAgICBvbk1lc3NhZ2UoZXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5kYXRhLmV2ZW50TmFtZSkge1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19URU1QTEFURV9QTFVHSU5fTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlRXZlbnRIYW5kbGluZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MT0FEX1RFTVBMQVRFX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMubG9hZFRlbXBsYXRlRXZlbnRIYW5kbGluZygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MSU5LX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMubGlua0V2ZW50SGFuZGxpbmcoXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucW1zY2tDb250ZW50RmllbGRzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX1RPT0xUSVBfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfSU1BR0VNQVBfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5pbWFnZU1hcEV2ZW50SGFuZGxpbmcoZXZlbnQuZGF0YS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JQTU5fUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5icG1uRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQUJPVVRfQ0tFRElUT1JfUExVR0lOX01TRyArIHRoaXMuZWRpdG9ySW5zdGFuY2UuaWQ6XG4gICAgICAgICAgICAgICAgdGhpcy5hYm91dENLRWRpdG9yRXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfRkxPV0NIQVJUX1BMVUdJTl9NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMuZmxvd2NoYXJ0RXZlbnRIYW5kbGluZyhldmVudC5kYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9HR0xFX1RPT0xCQVJfTVNHICsgdGhpcy5lZGl0b3JJbnN0YW5jZS5pZDpcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0JST1dTRV9WSURFT19NU0cgKyB0aGlzLmVkaXRvckluc3RhbmNlLmlkOlxuICAgICAgICAgICAgICAgIHRoaXMuYnJvd3NlVmlkZW9FdmVudEhhbmRsaW5nKGV2ZW50LmRhdGEudmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdG9yXG4gICAgICovXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IFFNU0NLRWRpdG9yR2xvYmFsU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmVlU2VydmljZTogUU1TQ0tFZGl0b3JUcmVlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBxbXNDS0VkaXRvckZ1bGxzY3JlZW5Db21wb25lbnQ6IFFNU0NLRWRpdG9yRnVsbHNjcmVlbkNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuY2tUYWduYW1lID0gXCJkaXZcIjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b29sYmFySXRlbVByZWZpeElkID0gYCR7dGhpcy5lZGl0b3JJZH1fdG9vbGJhcl9pdGVtX2A7XG4gICAgICAgIHRoaXMubmFtZSA9ICdDS0VkaXRvciBjdXN0b20gYnVpbGQnO1xuICAgICAgICB0aGlzLmNrRWRpdG9yID0gdGhpcy5xbXNja1BsdWdpbi5wbHVnaW5PYmplY3Q7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2UgPSByZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZyhyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHRvb2xiYXJJdGVtcyA9IHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXI7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFRvZ2dsZVRvb2xiYXIoKSAmJiB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zKSB7XG4gICAgICAgICAgICAvLyBsZXQgc3RyVG9vbGJhcnMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zLnJlcGxhY2UoL3Ftc0Zsb3djaGFydCwvZywgXCJcIik7XG4gICAgICAgICAgICBsZXQgc3RyVG9vbGJhcnMgPSB0aGlzLnFtc2NrRGF0YS50b2dnbGVkVG9vbGJhckl0ZW1zO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnFtc2NrRGF0YS5lbmFibGVUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIHN0clRvb2xiYXJzID0gc3RyVG9vbGJhcnMucmVwbGFjZSgvcW1zVGVtcGxhdGUsL2csIFwiXCIpOyAvLyBkaXNhYmxlIHFtc1RlbXBsYXRlIGlmIHVzZXIgZG9uJ3QgaGF2ZSBoYW5kYm9va0FkbWluIFJvbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5xbXNja0RhdGEudmlkZW9VcGxvYWRNb2RlKSB7XG4gICAgICAgICAgICAgICAgc3RyVG9vbGJhcnMgPSBzdHJUb29sYmFycy5yZXBsYWNlKC92aWRlb1VwbG9hZCwvZywgXCJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b29sYmFySXRlbXMgKz0gJywnICsgc3RyVG9vbGJhcnM7IC8vIGRpc2FibGUgcW1zRmxvd2NoYXJ0IHVudGlsIE5LLTQ0MCBkb25lXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ja2VkaXRvckNvbmZpZyA9IENLRWRpdG9yQ29tbW9uRnVuY3Rpb25zLmdldENLRWRpdG9yQ29uZmlndXJhdGlvbih0b29sYmFySXRlbXMsIHRoaXMuTEFORywgdGhpcy5sYW5ndWFnZSk7XG4gICAgICAgIGlmICh0aGlzLmNrZWRpdG9yQ29uZmlnKVxuICAgICAgICAgICAgdGhpcy5ja2VkaXRvckNvbmZpZy5jb250YWluZXJJZCA9IHRoaXMuZWRpdG9ySWQ7XG5cbiAgICAgICAgaWYgKHRoaXMucW1zY2tEYXRhLmhpZGVJbWdPcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnID0gdGhpcy5oaWRlSW1hZ2VPcHRpb25zKHRoaXMuY2tlZGl0b3JDb25maWcsIHRoaXMucW1zY2tEYXRhLmhpZGVJbWdPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0QXBpVXJsKHRoaXMucW1zY2tEYXRhLmFwaVVybCk7XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZE1hdGh0eXBlQ29uZmlnKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTWF0aFR5cGVDb25maWcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZFRpbWVzdGFtcENvbmZpZygpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRpbWVzdGFtcENvbmZpZygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkV1Byb29mcmVhZGVyKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkV1Byb29mcmVhZGVyQ29uZmlnKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNFbmFibGVkVE9DVG9vbGJhcigpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZFRvZ2dsZVRPQ0NvbmZpZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGdWxsU2NyZWVuQ29uZmlnKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5xbXNja0RhdGEudGFibGVPZkNvbnRlbnRIZWFkaW5ncykge1xuICAgICAgICAgICAgdGhpcy5ja2VkaXRvckNvbmZpZy50YWJsZU9mQ29udGVudEhlYWRpbmdzID0gW107XG4gICAgICAgICAgICBjb25zdCBpdGVtQXJyYXkgPSB0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICBpdGVtQXJyYXkuZm9yRWFjaChpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNrZWRpdG9yQ29uZmlnLnRhYmxlT2ZDb250ZW50SGVhZGluZ3MucHVzaChpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlOiAoY29udGVudDogYW55KSA9PiB2b2lkO1xuICAgIG9uVG91Y2hlZDogKCkgPT4gdm9pZDtcblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LCBcImNrLWRpc2FibGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNFbmFibGVkV1Byb29mcmVhZGVyKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gLyh3cHJvb2ZyZWFkZXIpL2dpbTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICEhdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyICYmXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zcmNVcmwgJiZcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFdQcm9vZnJlYWRlckNvbmZpZygpIHtcbiAgICAgICAgY29uc3Qgd3Byb29mcmVhZGVyQ29uZmlnID0ge1xuICAgICAgICAgICAgd3Byb29mcmVhZGVyOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQgfHxcbiAgICAgICAgICAgIHRoaXMucW1zY2tEYXRhLndwcm9vZnJlYWRlci5zZXJ2aWNlSWQubGVuZ3RoID09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvL0ZhbGxiYWNrIHZhbHVlIG9mIHNlcnZpY2VJZCBwcm9wZXJ0eSB0byBkZW1vIHNlcnZpY2VJZFxuICAgICAgICAgICAgdGhpcy5xbXNja0RhdGEud3Byb29mcmVhZGVyLnNlcnZpY2VJZCA9XG4gICAgICAgICAgICAgICAgXCIxOktwa3ZRMi02S05Vai1MMVczdTItQzlqMEsxLVp2MnRZMS1DZkRPeC1XZkdSZzItcVh0Y2ktWXl5RTM0LWowOUg0Mi1iMGFDdDMtZDlhXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyB8fCB7fSxcbiAgICAgICAgICAgIHdwcm9vZnJlYWRlckNvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZFRvZ2dsZVRvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRvZ2dsZVRvb2xiYXIpL2dtaTtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtc1xuICAgICAgICAgICAgJiYgISF0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyXG4gICAgICAgICAgICAmJiB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyLnNlYXJjaChwYXR0ZXJuKSA+IC0xO1xuICAgIH1cblxuICAgIGFkZFRvZ2dsZVRvb2xiYXJDb25maWcoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xbXNja0RhdGEudG9nZ2xlZFRvb2xiYXJJdGVtcy5zcGxpdCgnLCcpO1xuXG4gICAgICAgIGNvbnN0IHRvZ2dsZVRvb2xiYXJDb25maWcgPSB7XG4gICAgICAgICAgICB0b2dnbGVUb29sYmFyQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgdG9vbGJhcjogaXRlbXMsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxuICAgICAgICAgICAgdG9nZ2xlVG9vbGJhckNvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZEZ1bGxTY3JlZW5Db25maWcoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHFtc0Z1bGxzY3JlZW4pL2dpbTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS5mdWxsU2NyZWVuQ2xhc3MgJiZcbiAgICAgICAgICAgIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTFcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhZGRGdWxsU2NyZWVuQ29uZmlnKCkge1xuICAgICAgICBjb25zdCBmdWxsU2NyZWVuQ29uZmlnID0ge1xuICAgICAgICAgICAgZnVsbFNjcmVlbkNvbmZpZzoge1xuICAgICAgICAgICAgICAgIGNsYXNzOiB0aGlzLnFtc2NrRGF0YS5mdWxsU2NyZWVuQ2xhc3MsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgdGhpcy5ja0VkaXRvci5kZWZhdWx0Q29uZmlnIHx8IHt9LFxuICAgICAgICAgICAgZnVsbFNjcmVlbkNvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGlzRW5hYmxlZFRPQ1Rvb2xiYXIoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRhYmxlT2ZDb250ZW50cykvZ2ltO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS50YWJsZU9mQ29udGVudEhlYWRpbmdzICYmXG4gICAgICAgICAgICAhIXRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIgJiZcbiAgICAgICAgICAgIHRoaXMucW1zY2tQbHVnaW4uaXRlbVRvb2xiYXIuc2VhcmNoKHBhdHRlcm4pID4gLTFcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhZGRUb2dnbGVUT0NDb25maWcoKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5xbXNja0RhdGEudGFibGVPZkNvbnRlbnRIZWFkaW5ncy5zcGxpdChcIixcIik7XG4gICAgICAgIGNvbnN0IHRhYmxlT2ZDb250ZW50cyA9IHtcbiAgICAgICAgICAgIHRhYmxlT2ZDb250ZW50czoge1xuICAgICAgICAgICAgICAgIHN1cHBvcnRlZEhlYWRpbmdzOiBpdGVtcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXG4gICAgICAgICAgICB0YWJsZU9mQ29udGVudHNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWRUaW1lc3RhbXBDb25maWcoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAvKHRpbWVzdGFtcCkvZ2ltO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS50aW1lc3RhbXBGb3JtYXQgJiZcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZFRpbWVzdGFtcENvbmZpZygpIHtcbiAgICAgICAgY29uc3QgdGltZXN0YW1wQ29uZmlnID0ge1xuICAgICAgICAgICAgdGltZXN0YW1wQ29uZmlnOiB7XG4gICAgICAgICAgICAgICAgZGF0ZXRpbWVGb3JtYXQ6IHRoaXMucW1zY2tEYXRhLnRpbWVzdGFtcEZvcm1hdCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXG4gICAgICAgICAgICB0aW1lc3RhbXBDb25maWdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpc0VuYWJsZWRNYXRodHlwZUNvbmZpZygpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC8oTWF0aFR5cGUpfChDaGVtVHlwZSkvZ2ltO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgISF0aGlzLnFtc2NrRGF0YS5tYXRodHlwZVNlcnZpY2VVcmwgJiZcbiAgICAgICAgICAgICEhdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhciAmJlxuICAgICAgICAgICAgdGhpcy5xbXNja1BsdWdpbi5pdGVtVG9vbGJhci5zZWFyY2gocGF0dGVybikgPiAtMVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZE1hdGhUeXBlQ29uZmlnKCkge1xuICAgICAgICBjb25zdCBtYXRoVHlwZUNvbmZpZyA9IHtcbiAgICAgICAgICAgIG1hdGhUeXBlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIHNlcnZpY2VQcm92aWRlclByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgVVJJOiB0aGlzLnFtc2NrRGF0YS5tYXRodHlwZVNlcnZpY2VVcmwsXG4gICAgICAgICAgICAgICAgICAgIHNlcnZlcjogXCJhc3B4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2tFZGl0b3IuZGVmYXVsdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB0aGlzLmNrRWRpdG9yLmRlZmF1bHRDb25maWcgfHwge30sXG4gICAgICAgICAgICBtYXRoVHlwZUNvbmZpZ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNoYW5nZWQoeyBlZGl0b3IgfSkge1xuICAgICAgICAvLyB0aGlzLnFtc2NrQ29udGVudElucHV0ID0gZWRpdG9yLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRPdXRwdXQuZW1pdCh0aGlzLnFtc2NrQ29udGVudElucHV0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25CbHVyKHsgZWRpdG9yIH0pIHtcbiAgICAgICAgdGhpcy5xbXNja0NvbnRlbnRJbnB1dCA9IGVkaXRvci5nZXREYXRhKCk7XG4gICAgICAgIHRoaXMucW1zY2tDb250ZW50T3V0cHV0LmVtaXQodGhpcy5xbXNja0NvbnRlbnRJbnB1dCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5xbXNja0NvbnRlbnRJbnB1dCAmJiAhdGhpcy5yZXF1aXJlZFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBjLnZhbHVlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIGhpZGVJbWFnZU9wdGlvbnMoY29uZmlnLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1BcnJheSA9IG9wdGlvbnMuc3BsaXQoJywnKTtcbiAgICAgICAgaXRlbUFycmF5LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBjb25maWcuaW1hZ2UudG9vbGJhciA9IGNvbmZpZy5pbWFnZS50b29sYmFyLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtICE9PSBlbGVtZW50O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIG9uUmVhZHlcbiAgICAgKi9cbiAgICBwdWJsaWMgb25SZWFkeShlZGl0b3IpIHtcbiAgICAgICAgdGhpcy5lZGl0b3JJbnN0YW5jZSA9IGVkaXRvcjtcbiAgICAgICAgaWYgKHRoaXMucW1zY2tDb250ZW50SW5wdXQpIHtcbiAgICAgICAgICAgIGVkaXRvci5zZXREYXRhKHRoaXMucW1zY2tDb250ZW50SW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdEVkaXRvcihlZGl0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvcihlZGl0b3IpIHtcbiAgICAgICAgY29uc3QgaW1hZ2VVcGxvYWRUeXBlcyA9IENLRWRpdG9ySW1hZ2VVcGxvYWRUeXBlQ29uc3QuUU1TQ0tfSU1BR0VfVFlQRVNfU1VQUE9SVF9ERUZBVUxUO1xuICAgICAgICBjb25zdCBjb25maWc6IFFtc1VwbG9hZEFkYXB0ZXJDb25maWcgPSB7XG4gICAgICAgICAgICBhcGlVcmw6IHRoaXMucW1zY2tEYXRhLmFwaVVybCxcbiAgICAgICAgICAgIExBTkc6IHRoaXMuTEFORyxcbiAgICAgICAgICAgIGltYWdlVXBsb2FkVHlwZXNcbiAgICAgICAgfTtcbiAgICAgICAgZWRpdG9yLnBsdWdpbnMuZ2V0KFwiRmlsZVJlcG9zaXRvcnlcIikuY3JlYXRlVXBsb2FkQWRhcHRlciA9IChsb2FkZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUW1zVXBsb2FkQWRhcHRlcihsb2FkZXIsIGNvbmZpZyk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZWRpdG9yLnVpXG4gICAgICAgICAgICAuZ2V0RWRpdGFibGVFbGVtZW50KClcbiAgICAgICAgICAgIC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShcbiAgICAgICAgICAgICAgICBlZGl0b3IudWkudmlldy50b29sYmFyLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgZWRpdG9yLnVpLmdldEVkaXRhYmxlRWxlbWVudCgpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIC8vIEFwcGVkIFdvcmRjb3VudCB0byBDS2VkaXRvclxuICAgICAgICBlZGl0b3IucGx1Z2lucy5nZXQoXCJXb3JkQ291bnRcIikub24oXCJ1cGRhdGVcIiwgKGV2dCwgc3RhdHMpID0+IHtcbiAgICAgICAgICAgIC8vIFByaW50cyB0aGUgY3VycmVudCBjb250ZW50IHN0YXRpc3RpY3MuXG4gICAgICAgICAgICBjb25zdCB3b3Jkc0JveCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjXCIgKyB0aGlzLmVkaXRvcklkICsgXCIgLndvcmRjb3VudC1jb250ZW50XCIpO1xuICAgICAgICAgICAgaWYgKCEhd29yZHNCb3gpIHtcbiAgICAgICAgICAgICAgICB3b3Jkc0JveC50ZXh0Q29udGVudCA9IGAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5XT1JEU306ICR7c3RhdHMud29yZHN9IC8gJHt0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQ0hBUkFDVEVSU306ICR7c3RhdHMuY2hhcmFjdGVyc31gO1xuXG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5xbXNja0RhdGEubWF4TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmRzQm94LnRleHRDb250ZW50ID0gYCR7dGhpcy5MQU5HLlFNU0NLRURJVE9SLk1BWElNSVpFfSAke3RoaXMuTEFORy5RTVNDS0VESVRPUi5DSEFSQUNURVJTfTogJHt0aGlzLnFtc2NrRGF0YS5tYXhMZW5ndGh9YDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gZWRpdG9yLmdldERhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhaW5UZXh0ID0gdGVtcERpdi50ZXh0Q29udGVudCB8fCB0ZW1wRGl2LmlubmVyVGV4dCB8fCAnJztcblxuICAgICAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0Lmxlbmd0aCA+IHRoaXMucW1zY2tEYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJpbW1lZFRleHQgPSBwbGFpblRleHQuc2xpY2UoMCwgdGhpcy5xbXNja0RhdGEubWF4TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9ySW5zdGFuY2Uuc2V0RGF0YSh0cmltbWVkVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gdGhpcy5lZGl0b3JJbnN0YW5jZS5lZGl0aW5nLnZpZXcuZG9tUm9vdHMuZ2V0KCdtYWluJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRvckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdG9yRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLnFtc2NrRGF0YS5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICBlZGl0b3IuaXNSZWFkT25seSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVkaXRvckluc3RhbmNlLmVkaXRpbmcudmlldy5kb2N1bWVudC5vbigna2V5ZG93bicsIChldmVudDogYW55LCBkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnFtc2NrRGF0YS5tYXhMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgdGVtcERpdi5pbm5lckhUTUwgPSBlZGl0b3IuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBsYWluVGV4dCA9IHRlbXBEaXYudGV4dENvbnRlbnQgfHwgdGVtcERpdi5pbm5lclRleHQgfHwgJyc7XG5cbiAgICAgICAgICAgICAgICBpZiAocGxhaW5UZXh0Lmxlbmd0aCA+IHRoaXMucW1zY2tEYXRhLm1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX3NldEVkaXRvckluc3RhbmNlT2JzZXJ2ZXIodGhpcy5lZGl0b3JJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHRlbXBsYXRlIC0gTG9hZCB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyB0ZW1wbGF0ZUV2ZW50SGFuZGxpbmcoKSB7XG4gICAgICAgIGNvbnN0IGRhdGE6IFFNU0NLRWRpdG9yVGVtcGxhdGUgPSBuZXcgUU1TQ0tFZGl0b3JUZW1wbGF0ZSgpO1xuICAgICAgICBkYXRhLmlkID0gMDtcbiAgICAgICAgZGF0YS5odG1sID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcbiAgICAgICAgZGF0YS5lZGl0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvclRlbXBsYXRlQ29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjU0MHB4XCIsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVERPXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIHRlbXBsYXRlIC0gTG9hZCB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBsb2FkVGVtcGxhdGVFdmVudEhhbmRsaW5nKCkge1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JMb2FkVGVtcGxhdGVDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNzAwcHhcIixcbiAgICAgICAgICAgIGRhdGE6IHsgZW5hYmxlRWRpdFRlbXBsYXRlOiB0aGlzLnFtc2NrRGF0YS5lbmFibGVUZW1wbGF0ZSB9LFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2tFZGl0b3JFdmVudENvbnN0LlFNU0NLX0xPQURfVEVNUExBVEVfUExVR0lOX1JFU1AsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW5jaG9yIC0gTGluayAtIEltYWdlIG1hcHBpbmdcbiAgICAgKi9cbiAgICBwdWJsaWMgbGlua0V2ZW50SGFuZGxpbmcoXG4gICAgICAgIGxpbmssXG4gICAgICAgIHFtc2NrQ29udGVudEZpZWxkcz8sXG4gICAgICAgIHFtc2NrSXNHZXRBbmNob3JNb3JlQ29udGVudD9cbiAgICApIHtcbiAgICAgICAgaWYgKGxpbmsuY2tlZGl0b3JJZCAhPSB0aGlzLmVkaXRvckluc3RhbmNlLmlkKVxuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGxldCBkYXRhID0gbmV3IFFNU0NLRWRpdG9yTGluaygpO1xuICAgICAgICBkYXRhID0gbGluaztcbiAgICAgICAgZGF0YS5lZGl0b3JDb250ZW50ID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5tb2R1bGU7XG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcbiAgICAgICAgaWYgKHFtc2NrQ29udGVudEZpZWxkcyAmJiBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQpIHtcbiAgICAgICAgICAgIGRhdGEucW1zY2tDb250ZW50RmllbGRzID0gcW1zY2tDb250ZW50RmllbGRzO1xuICAgICAgICAgICAgZGF0YS5xbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQgPSBxbXNja0lzR2V0QW5jaG9yTW9yZUNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5kZWZhdWx0VGFyZ2V0TmV3V2luZG93ID0gdGhpcy5xbXNja0RhdGEuZGVmYXVsdFRhcmdldE5ld1dpbmRvdztcbiAgICAgICAgZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQgPSB0aGlzLnFtc2NrRGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQ7XG5cbiAgICAgICAgbGV0IGRpYWxvZ1RlbXBsYXRlO1xuICAgICAgICBpZiAoIXRoaXMucW1zY2tQbHVnaW4uc2ltcGxlTW9kZSkge1xuICAgICAgICAgICAgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yTGlua0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBcIjY2MHB4XCIsXG4gICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRbXNDa2VkaXRvckxpbmtTaW1wbGVDb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogXCI2NTBweFwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCIyMDBweFwiLFxuICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudCh0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19MSU5LX1BMVUdJTl9SRVNQLCB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDogcmVzdWx0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvb2x0aXAgbWFwcGluZ1xuICAgICAqL1xuICAgIHB1YmxpYyB0b29sdGlwRXZlbnRIYW5kbGluZyh2YWx1ZSkge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvclRvb2x0aXAoKTtcbiAgICAgICAgZGF0YS50ZXh0ID0gdmFsdWUudGV4dDtcbiAgICAgICAgZGF0YS5jb250ZW50ID0gdmFsdWUuY29udGVudDtcbiAgICAgICAgZGF0YS5ja0VkaXRvciA9IHRoaXMucW1zY2tQbHVnaW4ucGx1Z2luT2JqZWN0O1xuXG4gICAgICAgIGNvbnN0IGRpYWxvZ1RlbXBsYXRlID0gdGhpcy5kaWFsb2cub3BlbihRTVNDS0VkaXRvclRvb2x0aXBDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHdpZHRoOiBcIjY1MHB4XCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiNTU1cHhcIixcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfVE9PTFRJUF9QTFVHSU5fUkVTUCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbWFnZU1hcCBtYXBwaW5nXG4gICAgICovXG4gICAgcHVibGljIGltYWdlTWFwRXZlbnRIYW5kbGluZyh2YWx1ZSkge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvckltYWdlTWFwKCk7XG4gICAgICAgIGRhdGEubmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgIGRhdGEuYXJlYXMgPSB2YWx1ZS5hcmVhcztcbiAgICAgICAgZGF0YS5pbWFnZVVybCA9IHZhbHVlLmltYWdlVXJsO1xuICAgICAgICBkYXRhLmltYWdlV2lkdGggPSB2YWx1ZS5pbWFnZVdpZHRoO1xuICAgICAgICBkYXRhLmltYWdlSGVpZ2h0ID0gdmFsdWUuaW1hZ2VIZWlnaHQ7XG4gICAgICAgIGRhdGEubW9kdWxlID0gdGhpcy5xbXNja0RhdGEubW9kdWxlO1xuICAgICAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5xbXNja0RhdGEuZW50aXR5SWQ7XG4gICAgICAgIGRhdGEuZWRpdG9yQ29udGVudCA9IHRoaXMucW1zY2tDb250ZW50SW5wdXQ7XG4gICAgICAgIGRhdGEubGlua0phdmFTY3JpcHRMaW5rc0FsbG93ZWQgPSB0aGlzLnFtc2NrRGF0YS5saW5rSmF2YVNjcmlwdExpbmtzQWxsb3dlZDtcbiAgICAgICAgZGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQgPSB0aGlzLnFtc2NrRGF0YS5lbmFibGVkSW50ZXJjb25uZWN0ZWQ7XG4gICAgICAgIGRhdGEuZGVmYXVsdFRhcmdldE5ld1dpbmRvdyA9IHRoaXMucW1zY2tEYXRhLmRlZmF1bHRUYXJnZXROZXdXaW5kb3c7XG5cbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9ySW1hZ2VNYXBDb21wb25lbnQsIHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfSU1BR0VNQVBfUExVR0lOX1JFU1AsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLypcbiAgICAgIEJ1c2luZXNzIFByb2Nlc3MgTW9kZWwgYW5kIE5vdGF0aW9uXG4gICAgKi9cbiAgICBwdWJsaWMgYnBtbkV2ZW50SGFuZGxpbmcoaWQ6IHN0cmluZykge1xuICAgICAgICBsZXQgZGF0YSA9IG5ldyBRTVNDS0VkaXRvckJwbW5EYXRhKCk7XG4gICAgICAgIGRhdGEuaWQgPSBpZDtcbiAgICAgICAgZGF0YS5tb2R1bGUgPSB0aGlzLnFtc2NrRGF0YS5tb2R1bGU7XG4gICAgICAgIGRhdGEuZW50aXR5SWQgPSB0aGlzLnFtc2NrRGF0YS5lbnRpdHlJZDtcbiAgICAgICAgZGF0YS5lZGl0b3JDb250ZW50ID0gdGhpcy5xbXNja0NvbnRlbnRJbnB1dDtcbiAgICAgICAgZGF0YS5zaG93UHJvY2Vzc0RvY3VtZW50VHJlZURhdGFJblNwbGl0VmlldyA9IHRoaXMucW1zY2tEYXRhLnNob3dQcm9jZXNzRG9jdW1lbnRUcmVlRGF0YUluU3BsaXRWaWV3O1xuICAgICAgICBkYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZCA9IHRoaXMucW1zY2tEYXRhLmVuYWJsZWRJbnRlcmNvbm5lY3RlZDtcbiAgICAgICAgZGF0YS5lbmFibGVkRGV2aWF0aW9uTW9kdWxlID0gdGhpcy5xbXNja0RhdGEuZW5hYmxlZERldmlhdGlvbk1vZHVsZTtcbiAgICAgICAgZGF0YS5lbmFibGVkQ2hlY2tsaXN0TW9kdWxlID0gdGhpcy5xbXNja0RhdGEuZW5hYmxlZENoZWNrbGlzdE1vZHVsZTtcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yQnBtbkNvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgbWF4V2lkdGg6IFwiMTAwdndcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IFwiMTAwdndcIixcbiAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ja0VkaXRvckV2ZW50Q29uc3QuUU1TQ0tfQlBNTl9QTFVHSU5fUkVTUCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG4gICAgLypcbiAgICAgQWJvdXQgQ0tFZGl0b3JcbiAgICovXG4gICAgcHVibGljIGFib3V0Q0tFZGl0b3JFdmVudEhhbmRsaW5nKHZlcnNpb246IHN0cmluZykge1xuICAgICAgICBjb25zdCBkaWFsb2dUZW1wbGF0ZSA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TQ0tFZGl0b3JBYm91dENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6IFwiNTAwcHhcIixcbiAgICAgICAgICAgIGRhdGE6IHZlcnNpb24sXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZS5jb21wb25lbnRJbnN0YW5jZS5ja0VkaXRvciA9IHRoaXMuZWRpdG9ySW5zdGFuY2U7XG4gICAgICAgIGRpYWxvZ1RlbXBsYXRlXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YmNyaWJlKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdCkgPT4geyB9KTtcbiAgICB9XG5cbiAgICAvKlxuICAgICAgVG9vbGJhciB0b2dnbGVcbiAgXG4gICAgICBUaGlzIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuXG4gICAgICBUcmFja2luZyBzdGF0dXMgYW5kIHByb2dyZXNzIG9mIHRoZSBpc3N1ZSBodHRwczovL2dpdGh1Yi5jb20vY2tlZGl0b3IvY2tlZGl0b3I1L2lzc3Vlcy83MzgzXG4gIFxuICAgICAgLSBSZW5kZXIgYm90aCBkZWZhdWx0IHRvb2xiYXIgYW5kIHRvZ2dsZSB0b29sYmFyIGF0IGluaXQgdGltZVxuICAgICAgLSBTZXQgSUQgZm9yIHRvb2xiYXIgaXRlbXMgdXNpbmcgaW5kZXg6XG4gICAgICAgICsgRnJvbSBpbmRleCAwIHRvIHRvb2xiYXJMZW5ndGggLSAxIGlzIHRoZSBkZWZhdWx0IHRvb2xiYXJcbiAgICAgICAgKyBGcm9tIGluZGV4IHRvb2xiYXJMZW5ndGggb24gaXMgdGhlIHRvZ2dsZSB0b29sYmFyXG4gICAgICAtIFNob3cvaGlkZSBkZWZhdWx0IGFuZCB0b2dnbGUgdG9vbGJhciBieSBzZXQgZGlzcGxheSBub25lIHRvIGNvcnJlc3BvbmRpbmcgdG9vbGJhciBpdGVtcyBiYXNlZCBvbiBJRFxuICAgICovXG4gICAgcHVibGljIHRvZ2dsZVRvb2xiYXJFdmVudEhhbmRsaW5nKCkge1xuICAgICAgICBjb25zdCBxbXNja2VkaXRvciA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVkaXRvcklkKTtcbiAgICAgICAgY29uc3QgdG9nZ2xlQXR0cmlidXRlID0gJ2lzVG9nZ2xlVG9vbGJhcic7XG5cbiAgICAgICAgaWYgKHFtc2NrZWRpdG9yKSB7XG4gICAgICAgICAgICBjb25zdCBpc1RvZ2dsZVRvb2xiYXIgPVxuICAgICAgICAgICAgICAgIHFtc2NrZWRpdG9yLmdldEF0dHJpYnV0ZSh0b2dnbGVBdHRyaWJ1dGUpID09IFwidHJ1ZVwiO1xuICAgICAgICAgICAgaWYgKGlzVG9nZ2xlVG9vbGJhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFRvb2xiYXJWaWV3TW9kZSh0cnVlKTtcbiAgICAgICAgICAgICAgICBxbXNja2VkaXRvci5zZXRBdHRyaWJ1dGUodG9nZ2xlQXR0cmlidXRlLCAnZmFsc2UnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldFRvb2xiYXJWaWV3TW9kZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgcW1zY2tlZGl0b3Iuc2V0QXR0cmlidXRlKHRvZ2dsZUF0dHJpYnV0ZSwgJ3RydWUnKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0VG9vbGJhclZpZXdNb2RlKHNob3dUb2dnbGVUb29sYmFyOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJMZW5ndGggPSB0aGlzLnFtc2NrUGx1Z2luLml0ZW1Ub29sYmFyPy5zcGxpdCgnLCcpLmxlbmd0aCB8fCAwO1xuICAgICAgICAvKlxuICAgICAgICAgIEl0ZW1zIGluIHRvb2xiYXIgYXJlIGluZGV4ZWQ6XG4gICAgICAgICAgLSBGcm9tIGluZGV4IDAgdG8gdG9vbGJhckxlbmd0aCAtIDEgaXMgdGhlIGRlZmF1bHQgdG9vbGJhclxuICAgICAgICAgIC0gRnJvbSBpbmRleCB0b29sYmFyTGVuZ3RoIG9uIGlzIHRoZSB0b2dnbGUgdG9vbGJhclxuICAgICAgICAqL1xuICAgICAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8ucHJldkFsbCgpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBzaG93VG9nZ2xlVG9vbGJhciA/ICdub25lJyA6ICcnO1xuICAgICAgICB9KVxuXG4gICAgICAgICQoYCMke3RoaXMudG9vbGJhckl0ZW1QcmVmaXhJZH0ke3Rvb2xiYXJMZW5ndGggLSAxfWApPy5jc3MoJ2Rpc3BsYXknLCBzaG93VG9nZ2xlVG9vbGJhciA/ICdub25lJyA6ICcnKTtcblxuICAgICAgICAkKGAjJHt0aGlzLnRvb2xiYXJJdGVtUHJlZml4SWR9JHt0b29sYmFyTGVuZ3RoIC0gMX1gKT8ubmV4dEFsbCgpLmVhY2goKGluZGV4LCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBzaG93VG9nZ2xlVG9vbGJhciA/ICcnIDogJ25vbmUnO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZsb3djaGFydFxuICAgICAqL1xuICAgIHB1YmxpYyBmbG93Y2hhcnRFdmVudEhhbmRsaW5nKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGlhbG9nVGVtcGxhdGUgPSB0aGlzLmRpYWxvZy5vcGVuKFFNU0NLRWRpdG9yRmxvd2NoYXJ0Q29tcG9uZW50LCB7XG4gICAgICAgICAgICB3aWR0aDogXCI4OXZ3XCIsXG4gICAgICAgICAgICBtYXhXaWR0aDogXCIxMDB2d1wiLFxuICAgICAgICAgICAgaGVpZ2h0OiBcIjcyNXB4XCIsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IFwiMTAwdndcIixcbiAgICAgICAgICAgIGRhdGE6IGlkLFxuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgZGlhbG9nVGVtcGxhdGUuY29tcG9uZW50SW5zdGFuY2UuY2tFZGl0b3IgPSB0aGlzLmVkaXRvckluc3RhbmNlO1xuICAgICAgICBkaWFsb2dUZW1wbGF0ZVxuICAgICAgICAgICAgLmFmdGVyQ2xvc2VkKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJjcmliZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19GTE9XQ0hBUlRfUExVR0lOX1JFU1AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEJyb3dzZSBWaWRlb1xuICAgICAqL1xuICAgIHB1YmxpYyBicm93c2VWaWRlb0V2ZW50SGFuZGxpbmcodmFsdWUpIHtcbiAgICAgICAgdGhpcy50cmVlU2VydmljZVxuICAgICAgICAgICAgLmdldFVwbG9hZFZpZGVvTGlzdCgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3ViY3JpYmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWRlb3MgPSByZXNwb25zZSB8fCBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFsbG93U2VsZWN0Rm9sZGVyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgYXJlYU9mQ3VycmVudFByb2Nlc3M6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIHNob3dDaGVja0JveDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dNdWx0aXBsZUNoZWNrOiB0aGlzLnFtc2NrRGF0YS51cGxvYWRWaWRlb0FsbG93TXVsdGlwbGVDaGVjayxcbiAgICAgICAgICAgICAgICAgICAgb25seUNoZWNrQm94Rm9yQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZUlkOiBEYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgb3Blbkljb246IFwiZm9sZGVyX29wZW5cIixcbiAgICAgICAgICAgICAgICAgICAgb3Blbkljb25Db2xvcjogXCIjMTk1NEE5XCIsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlSWNvbjogXCJmb2xkZXJfZmlsbGVkXCIsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlSWNvbkNvbG9yOiBcIiM0YWNhZmZcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbUljb246IFwiaW5zZXJ0X2RyaXZlX2ZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbUljb25QYXRoOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBpdGVtSWNvbkJhc2U2NDogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlU2VsZWN0ZWROb2RlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRBbGw6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhOiBQb3B1cERhdGEgPSBuZXcgUG9wdXBEYXRhKCk7XG4gICAgICAgICAgICAgICAgZGF0YS5tb2R1bGVJZCA9IDI7XG4gICAgICAgICAgICAgICAgZGF0YS5tb2R1bGVOYW1lID0gdGhpcy5MQU5HLlFNU0NLRURJVE9SLlNFTEVDVF9WSURFT19GUk9NX0FSQ0hJVkU7XG4gICAgICAgICAgICAgICAgZGF0YS5tb2R1bGVVcGxvYWRJbWFnZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuU0VMRUNUX1ZJREVPX0lNQUdFO1xuICAgICAgICAgICAgICAgIGRhdGEubW9kdWxlVXBsb2FkRmlsZU5hbWUgPSB0aGlzLkxBTkcuUU1TQ0tFRElUT1IuQUREX0FfRklMRTtcblxuICAgICAgICAgICAgICAgIGRhdGEudmlkZW9EYXRhID0gbmV3IFFNU0NLRWRpdG9yVmlkZW8odmFsdWUuaWQsIHZhbHVlLnNyYywgdHJ1ZSwgdmFsdWUucG9zdGVyXG4gICAgICAgICAgICAgICAgICAgICwgdmFsdWUud2lkdGg/LnRvU3RyaW5nKCk/LmluZGV4T2YoJyUnKSA8IDAgPyB2YWx1ZS53aWR0aD8udG9TdHJpbmcoKT8ubWF0Y2goL1xcZC9nKT8uam9pbignJykgOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICwgdmFsdWUuaGVpZ2h0Py50b1N0cmluZygpPy5tYXRjaCgvXFxkL2cpPy5qb2luKCcnKSk7XG4gICAgICAgICAgICAgICAgZGF0YS5jYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGEudHJlZURhdGExID0gdmlkZW9zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm9vdElkOiBgcm9vdC0ke2l0ZW0ucm9vdElkfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogKGl0ZW0ucGFyZW50SWQgIT09IG51bGwgJiYgaXRlbS5wYXJlbnRJZCAhPT0gXCJcIikgPyBgcm9vdC0ke2l0ZW0ucGFyZW50SWR9YCA6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICByb290TmFtZTogaXRlbS5yb290TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk5hbWU6IGl0ZW0uc3ViTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkSWQ6IGl0ZW0uY2hpbGRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTmFtZTogaXRlbS5jaGlsZE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNJZDogaXRlbS5zdGF0dXNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogaXRlbS5kaXNwbGF5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogaXRlbS5jb250ZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbS51cmwsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkYXRhLnRyZWVEYXRhMiA9IFtdO1xuICAgICAgICAgICAgICAgIGRhdGEudHJlZUNvbmZpZzEgPSBjb25maWc7XG4gICAgICAgICAgICAgICAgZGF0YS5jYW5VcGxvYWRJbWFnZSA9IHZpZGVvcy5sZW5ndGggPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgZGF0YS5jYW5VcGxvYWRWaWRlbyA9IHRoaXMucW1zY2tEYXRhLnZpZGVvVXBsb2FkTW9kZSA9PT0gVmlkZW9VcGxvYWRNb2RlLkFsbG93VXBsb2FkO1xuICAgICAgICAgICAgICAgIGRhdGEubWF4VmlkZW9UaHVtYm5haWxTaXplS0IgPSB0aGlzLnFtc2NrRGF0YS5tYXhWaWRlb1RodW1ibmFpbFNpemVLQjtcbiAgICAgICAgICAgICAgICBkYXRhLmVudGl0eUlkID0gdGhpcy5xbXNja0RhdGEuZW50aXR5SWQ7XG5cbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuc2VsZWN0ZWRJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXNhYmxlZExpc3QgPSBbZGF0YS50cmVlRGF0YTEuZmluZCh4ID0+IHguY2hpbGRJZCA9PT0gdmFsdWUuc2VsZWN0ZWRJZCldIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmRpc2FibGVkTGlzdCA9IGRpc2FibGVkTGlzdC5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmNoaWxkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IHguY2hpbGROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlJZDogeC5kaXNwbGF5SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUmVsYXRlZFBvcHVwQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBcIjgwMHB4XCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbkhlaWdodDogXCI2MzBweFwiLFxuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiBcInFtc2NrZWRpdG9yLWJyb3dzZS12aWRlby1wb3B1cFwiLFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaEJveCA9IHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIucW1zY2tlZGl0b3ItYnJvd3NlLXZpZGVvLXBvcHVwICNxbXNsaWJfcmVsYXRlZF9wb3B1cF9zZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hCb3guc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcblxuICAgICAgICAgICAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LnNyYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybHMgPSBbcmVzdWx0LnNyY107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC53aWR0aCB8fCByZXN1bHQud2lkdGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC53aWR0aCA9IFZpZGVvQ29uc3QuREVGQVVMVF9WSURFT19XSURUSDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmhlaWdodCB8fCByZXN1bHQuaGVpZ2h0IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaGVpZ2h0ID0gVmlkZW9Db25zdC5ERUZBVUxUX1ZJREVPX0hFSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2dCA9IG5ldyBDdXN0b21FdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNrRWRpdG9yRXZlbnRDb25zdC5RTVNDS19CUk9XU0VfVklERU9fUkVTUCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGRldGFpbDogeyB1cmxzOiB1cmxzLCB0aHVtYm5haWxVcmw6IHJlc3VsdC5wb3N0ZXIsIGlkOiByZXN1bHQuaWQsIHdpZHRoOiByZXN1bHQud2lkdGgsIGhlaWdodDogcmVzdWx0LmhlaWdodCB9IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRFZGl0b3JJbnN0YW5jZU9ic2VydmVyKGVkaXRvcklkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9uTGlzdCA9PlxuICAgICAgICAgICAgbXV0YXRpb25MaXN0LmZpbHRlcihtID0+IG0udHlwZSA9PT0gJ2NoaWxkTGlzdCcpLmZvckVhY2gobSA9PiB7XG4gICAgICAgICAgICAgICAgbS5hZGRlZE5vZGVzLmZvckVhY2goKG5vZGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgYWRkZWQgbm9kZSBoYXMgdGhlIHNwZWNpZmllZCBJRFxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNUb29sYmFySXRlbXNJZFNldCAmJiAobm9kZS5xdWVyeVNlbGVjdG9yICYmIG5vZGUucXVlcnlTZWxlY3RvcignIycgKyBlZGl0b3JJZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZXRJZEZvclRvb2xiYXJJdGVtcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG5cbiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgZWRpdG9ySWQpKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRJZEZvclRvb2xiYXJJdGVtcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2V0SWRGb3JUb29sYmFySXRlbXMoKSB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJJdGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCR7dGhpcy5lZGl0b3JJZCA/ICcjJyArIHRoaXMuZWRpdG9ySWQgOiAnJ30gLmNrLXRvb2xiYXJfX2l0ZW1zYCk/LmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICBpZiAoIXRvb2xiYXJJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzVG9vbGJhckl0ZW1zSWRTZXQgPSB0cnVlO1xuICAgICAgICAoQXJyYXkuZnJvbSh0b29sYmFySXRlbXMpIGFzIEhUTUxFbGVtZW50W10pLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmlkID0gYCR7dGhpcy50b29sYmFySXRlbVByZWZpeElkfSR7aW5kZXh9YDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50b2dnbGVUb29sYmFyRXZlbnRIYW5kbGluZygpO1xuICAgIH1cbn1cbiJdfQ==
|