qms-angular 1.1.26 → 1.1.28
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 +645 -544
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/common/models/qms-flat-node.model.js +1 -1
- package/esm2015/lib/common/models/qms-tree-node.model.js +1 -1
- package/esm2015/lib/common/themes.const.js +2 -1
- package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +3 -3
- package/esm2015/lib/components/breadcrumb/breadcrumb.js +10 -4
- package/esm2015/lib/components/comment/comment.js +17 -11
- package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.js +9 -2
- package/esm2015/lib/components/qms-nav-drawer/qms-nav-drawer.component.js +3 -3
- package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +3 -3
- package/esm2015/lib/components/qms-paginator/qms-paginator.component.js +9 -2
- package/esm2015/lib/components/related/list-other-related/list-related.component.js +9 -2
- package/esm2015/lib/components/related/model/popup-data.model.js +2 -1
- package/esm2015/lib/components/related/popup/related-popup.component.js +58 -24
- package/esm2015/lib/components/related/risk/analysis/analysis.component.js +9 -2
- package/esm2015/lib/components/related/risk/list/list.component.js +9 -2
- package/esm2015/lib/components/related/risk/result/result.component.js +9 -2
- package/esm2015/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.js +9 -2
- package/esm2015/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.js +8 -3
- package/esm2015/lib/components/select-access-dialog/select-access-dialog.component.js +2 -2
- package/esm2015/lib/components/select-department/select-department.component.js +6 -38
- package/esm2015/lib/components/select-department-tree/model/department-paging.model.js +1 -2
- package/esm2015/lib/components/select-department-tree/model/select-department-tree.config.js +2 -5
- package/esm2015/lib/components/select-department-tree/select-department-tree.component.js +114 -164
- package/esm2015/lib/components/select-department-tree/select-department-tree.module.js +2 -4
- package/esm2015/lib/components/select-dialog/select-dialog.js +8 -4
- package/esm2015/lib/components/select-include-children/select-include-children.component.js +3 -3
- package/esm2015/lib/components/select-one/select-one-next.component.js +3 -3
- package/esm2015/lib/components/select-one/select-one.component.js +3 -3
- package/esm2015/lib/components/select-process-document/select-process-document.component.js +3 -3
- package/esm2015/lib/components/tree/basic-tree.component.js +4 -4
- package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.js +9 -2
- package/esm2015/lib/directives/chip-input/chip-input-select-trigger.directive.js +3 -3
- package/esm2015/lib/directives/chips/chip.directive.js +2 -2
- package/esm2015/lib/directives/dropdown-menu/dropdown-item.directive.js +2 -2
- package/esm2015/lib/directives/file-upload/file-upload-display.directive.js +3 -3
- package/esm2015/lib/directives/file-upload/file-upload-multiple-display.directive.js +3 -3
- package/esm2015/lib/directives/file-upload/file-upload-multiple.directive.js +3 -3
- package/esm2015/lib/directives/file-upload/file-upload.directive.js +2 -2
- package/esm2015/lib/directives/search-field.directive.js +2 -2
- package/esm2015/lib/model/en.js +4 -2
- package/esm2015/lib/model/no.js +4 -2
- package/esm2015/lib/pipe/dateFormat.pipe.js +9 -2
- package/esm2015/lib/qms-angular.component.js +9 -2
- package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +10 -1
- package/esm2015/lib/qms-ckeditor-components/common/classes/qmsUploadAdapter.js +21 -15
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorImageUploadType.const.js +4 -0
- package/esm2015/lib/qms-ckeditor-components/common/enums/ckeditor-bpmn-expand.enum.js +8 -0
- package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +6 -9
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +39 -11
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +2 -2
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +53 -56
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +9 -4
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +28 -11
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +33 -2
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-upload.service.js +6 -2
- package/esm2015/qms-angular.js +11 -11
- package/fesm2015/qms-angular.js +589 -468
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/common/models/qms-flat-node.model.d.ts +0 -1
- package/lib/common/models/qms-tree-node.model.d.ts +0 -1
- package/lib/common/themes.const.d.ts +1 -0
- package/lib/components/breadcrumb/breadcrumb-item.directive.d.ts +2 -2
- package/lib/components/breadcrumb/breadcrumb.d.ts +3 -0
- package/lib/components/comment/comment.d.ts +3 -0
- package/lib/components/edit-file-name-dialog/edit-file-name-dialog.d.ts +3 -0
- package/lib/components/qms-paginator/qms-paginator.component.d.ts +3 -0
- package/lib/components/related/list-other-related/list-related.component.d.ts +3 -0
- package/lib/components/related/model/popup-data.model.d.ts +2 -0
- package/lib/components/related/popup/related-popup.component.d.ts +13 -2
- package/lib/components/related/risk/analysis/analysis.component.d.ts +3 -0
- package/lib/components/related/risk/list/list.component.d.ts +3 -0
- package/lib/components/related/risk/result/result.component.d.ts +3 -0
- package/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.d.ts +3 -0
- package/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.d.ts +5 -3
- package/lib/components/select-department/select-department.component.d.ts +0 -19
- package/lib/components/select-department-tree/model/select-department-tree.config.d.ts +0 -3
- package/lib/components/select-department-tree/select-department-tree.component.d.ts +23 -51
- package/lib/components/select-dialog/select-dialog.d.ts +2 -1
- package/lib/components/upload-file-error-dialog/upload-file-error-dialog.d.ts +3 -0
- package/lib/directives/chip-input/chip-input-select-trigger.directive.d.ts +1 -1
- package/lib/directives/file-upload/file-upload-display.directive.d.ts +1 -1
- package/lib/directives/file-upload/file-upload-multiple-display.directive.d.ts +1 -1
- package/lib/directives/file-upload/file-upload-multiple.directive.d.ts +2 -2
- package/lib/model/en.d.ts +2 -0
- package/lib/model/no.d.ts +2 -0
- package/lib/pipe/dateFormat.pipe.d.ts +3 -0
- package/lib/qms-angular.component.d.ts +3 -0
- package/lib/qms-ckeditor-components/common/classes/qmsUploadAdapter.d.ts +1 -1
- package/lib/qms-ckeditor-components/common/constants/ckeditorImageUploadType.const.d.ts +3 -0
- package/lib/qms-ckeditor-components/common/enums/ckeditor-bpmn-expand.enum.d.ts +6 -0
- package/lib/qms-ckeditor-components/common/functions/common.function.d.ts +2 -4
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +1 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +4 -2
- package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +3 -1
- package/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.d.ts +1 -0
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +1 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +2 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-upload.service.d.ts +1 -1
- package/package.json +1 -1
- package/qms-angular.d.ts +10 -10
- package/qms-angular.metadata.json +1 -1
- package/src/assets/jointjs/scss/bpmn.scss +22 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/anchor/anchorcommand.js +13 -3
- package/src/assets/qms-ckeditor-plugin/src/plugins/anchor/anchorui.js +7 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/bpmndialogcommand.js +12 -3
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkcommand.js +35 -33
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkdialogcommand.js +9 -6
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkediting.js +28 -14
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkimageediting.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkimageui.js +97 -92
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkui.js +40 -28
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/ui/linkformview.js +24 -24
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/utils.js +8 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/table/converters/downcast.js +2 -2
- package/src/assets/qms-ckeditor-plugin/src/plugins/template/loadtemplatedialogcommand.js +20 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/theme/video.css +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/video/videoediting.js +3 -2
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/uploadvideocommand.js +1 -1
- package/src/lib/components/related/popup/related-popup.component.scss +19 -0
- package/src/lib/components/select-department/select-department.component.scss +5 -25
- package/src/lib/components/select-department-tree/select-department-tree.component.scss +182 -381
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.scss +4 -0
- package/src/lib/qms-ckeditor-components/qms-ckeditor.component.scss +4 -0
@@ -27,6 +27,8 @@ export class BpmnService {
|
|
27
27
|
this.isReset = false;
|
28
28
|
this.isSelectedTemplate = false;
|
29
29
|
this.jsonOriginalContent = '';
|
30
|
+
this.isFullScreen = false;
|
31
|
+
this.isExpandedPanel = true;
|
30
32
|
}
|
31
33
|
buildDiagram(diagramTemplates, diagramTemplate, bpmnTheme, jsonContent, editMode, LANG) {
|
32
34
|
window[`IS_NOT_SHOW_AGAIN`] = false;
|
@@ -804,6 +806,34 @@ export class BpmnService {
|
|
804
806
|
model[method]();
|
805
807
|
});
|
806
808
|
graph.stopBatch('selection');
|
809
|
+
},
|
810
|
+
toggleFullscreen: () => {
|
811
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
812
|
+
this.isFullScreen = !this.isFullScreen;
|
813
|
+
if (this.isFullScreen) {
|
814
|
+
document.querySelectorAll('[id^="cdk-overlay-"]')[0].classList.add('full-screen-bpmn-editor_cdk-overlay');
|
815
|
+
(_a = document.getElementById('leftpanel')) === null || _a === void 0 ? void 0 : _a.classList.add('full-screen-bpmn-editor_panel');
|
816
|
+
(_b = document.getElementById('rightpanel')) === null || _b === void 0 ? void 0 : _b.classList.add('full-screen-bpmn-editor_panel');
|
817
|
+
if (this.isExpandedPanel) {
|
818
|
+
(_c = document.getElementById('paperpanel')) === null || _c === void 0 ? void 0 : _c.classList.add('full-screen-bpmn-editor_paperpanel');
|
819
|
+
}
|
820
|
+
else {
|
821
|
+
(_d = document.getElementById('paperpanel')) === null || _d === void 0 ? void 0 : _d.classList.add('full-screen-bpmn-editor_paperpanel-expandpanel');
|
822
|
+
}
|
823
|
+
}
|
824
|
+
else {
|
825
|
+
document.querySelectorAll('[id^="cdk-overlay-"]')[0].classList.remove('full-screen-bpmn-editor_cdk-overlay');
|
826
|
+
(_e = document.getElementById('leftpanel')) === null || _e === void 0 ? void 0 : _e.classList.remove('full-screen-bpmn-editor_panel');
|
827
|
+
(_f = document.getElementById('rightpanel')) === null || _f === void 0 ? void 0 : _f.classList.remove('full-screen-bpmn-editor_panel');
|
828
|
+
if (this.isExpandedPanel) {
|
829
|
+
(_g = document.getElementById('paperpanel')) === null || _g === void 0 ? void 0 : _g.classList.remove('full-screen-bpmn-editor_paperpanel');
|
830
|
+
document.getElementById('paperpanel').style.height = '400px';
|
831
|
+
}
|
832
|
+
else {
|
833
|
+
(_h = document.getElementById('paperpanel')) === null || _h === void 0 ? void 0 : _h.classList.remove('full-screen-bpmn-editor_paperpanel-expandpanel');
|
834
|
+
document.getElementById('paperpanel').style.height = '500px';
|
835
|
+
}
|
836
|
+
}
|
807
837
|
}
|
808
838
|
};
|
809
839
|
toolbar.on({
|
@@ -819,7 +849,8 @@ export class BpmnService {
|
|
819
849
|
'to-front:pointerclick': toolbarCommands.applyOnSelection.bind(this, 'toFront'),
|
820
850
|
'to-back:pointerclick': toolbarCommands.applyOnSelection.bind(this, 'toBack'),
|
821
851
|
'snapline:change': toolbarCommands.changeSnapLines.bind(this),
|
822
|
-
'grid-size:change': paper.setGridSize.bind(paper)
|
852
|
+
'grid-size:change': paper.setGridSize.bind(paper),
|
853
|
+
'fullscreen:pointerclick': toolbarCommands.toggleFullscreen
|
823
854
|
});
|
824
855
|
toolbar.render().$el.appendTo('#toolbar-container');
|
825
856
|
// const zoomTool = new joint.ui.Toolbar({
|
@@ -1191,4 +1222,4 @@ BpmnService.decorators = [
|
|
1191
1222
|
providedIn: 'root'
|
1192
1223
|
},] }
|
1193
1224
|
];
|
1194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLGlCQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sZUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFLN0UsSUFBSSxLQUFVLENBQUM7QUFDZixJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksYUFBa0IsQ0FBQztBQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUlqQyxNQUFNLE9BQU8sV0FBVztJQUh4QjtRQUlTLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLHVCQUFrQixHQUFHLEtBQUssQ0FB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QUN4QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUNYLE9BQU8sR0FBRyxJQUFJLENBQUM7b0JBQ2YsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFVBQVU7UUFDM0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDVixLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDakI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs7O1lBcHdDRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCAqIGFzICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgSW5zcGVjdG9yRnVuY3Rpb24gZnJvbSAnLi4vY29tbW9uL2JwbW4vaW5zcGVjdG9yLmZ1bmN0aW9uJztcclxuaW1wb3J0IFRvb2xiYXJGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi90b29sYmFyLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRmxvd2NoYXJ0LmNvbnN0JztcclxuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMvZmxvd2NoYXJ0LXZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSAnLi4vY29tbW9uL2hlbHBlci9ndWlkSGVscGVyJztcclxuXHJcbi8qIERlY2xhcmUgam9pbnRqcyBvYmplY3QgKi9cclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueTtcclxubGV0IGdyYXBoOiBhbnk7XHJcbmxldCBwYXBlcjogYW55O1xyXG5sZXQgdG9vbGJhckNvbmZpZzogYW55O1xyXG5jb25zdCBicG1uMiA9IGpvaW50LnNoYXBlcy5icG1uMjtcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQnBtblNlcnZpY2Uge1xyXG4gIHB1YmxpYyBpc1NhdmVBc1RlbXBsYXRlID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRGVsZXRlVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1RlbXAgPSB0cnVlO1xyXG4gIHB1YmxpYyBqc29uVGVtcENvbnRlbnQgPSAnJztcclxuICBwdWJsaWMgaXNSZXNldCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1NlbGVjdGVkVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMganNvbk9yaWdpbmFsQ29udGVudCA9ICcnO1xyXG5cclxuICBidWlsZERpYWdyYW0oXHJcbiAgICBkaWFncmFtVGVtcGxhdGVzOiBhbnksXHJcbiAgICBkaWFncmFtVGVtcGxhdGU6IGFueSxcclxuICAgIGJwbW5UaGVtZTogc3RyaW5nLFxyXG4gICAganNvbkNvbnRlbnQ6IGFueSxcclxuICAgIGVkaXRNb2RlOiBhbnksXHJcbiAgICBMQU5HOiBhbnlcclxuICApIHtcclxuICAgIHdpbmRvd1tgSVNfTk9UX1NIT1dfQUdBSU5gXSA9IGZhbHNlO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkVESVRfTU9ERV0gPSBlZGl0TW9kZTtcclxuICAgIGpvaW50LnNldFRoZW1lKGJwbW5UaGVtZSk7XHJcblxyXG4gICAgaWYgKGpzb25Db250ZW50KSB7XHJcbiAgICAgIGpzb25Db250ZW50ID0gSlNPTi5wYXJzZShqc29uQ29udGVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBqc29uQ29udGVudCA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdkQXV0aCA9IHdpbmRvd1tgZ2RBdXRoYF07XHJcbiAgICBjb25zdCBnZExvYWQgPSB3aW5kb3dbYGdkTG9hZGBdO1xyXG4gICAgY29uc3QgZ2RTYXZlID0gd2luZG93W2BnZFNhdmVgXTtcclxuICAgIGNvbnN0IGlucHV0cyA9IEluc3BlY3RvckZ1bmN0aW9uLmdldEluc3BlY3RvckNvbmZpZ3VyYXRpb24oYnBtbjIsIExBTkcpO1xyXG5cclxuICAgIGxldCBmcmVlVHJhbnNmb3JtID0gbnVsbDtcclxuXHJcbiAgICB0b29sYmFyQ29uZmlnID0gVG9vbGJhckZ1bmN0aW9uLmdldFRvb2xiYXJDb25maWd1cmF0aW9uKExBTkcpO1xyXG4gICAgLyogUU1TLTE0MDQ6IEN1c3RvbWl6YXRpb246IEFkZCB0ZW1wbGF0ZSBsaXN0ICovXHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scyAmJiBkaWFncmFtVGVtcGxhdGVzKSB7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgIGRpYWdyYW1UZW1wbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgICAgICBpbmRleDogaXRlbS5pbmRleCxcclxuICAgICAgICAgICAgY29udGVudDogaXRlbS50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICAgIGZsb3dDaGFydElkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICBuYW1lOiBpdGVtLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IGl0ZW0uanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB4LmluZGV4ID09PSBvcHRpb24uaW5kZXg7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ3JhcGggPSBuZXcgam9pbnQuZGlhLkdyYXBoKHsgdHlwZTogJ2JwbW4nIH0pO1xyXG4gICAgY29uc3QgY29tbWFuZE1hbmFnZXIgPSBuZXcgam9pbnQuZGlhLkNvbW1hbmRNYW5hZ2VyKHsgZ3JhcGggfSk7XHJcbiAgICBjb25zdCBrZXlib2FyZCA9IG5ldyBqb2ludC51aS5LZXlib2FyZCgpO1xyXG4gICAgY29uc3QgY2xpcGJvYXJkID0gbmV3IGpvaW50LnVpLkNsaXBib2FyZCgpO1xyXG5cclxuICAgIHBhcGVyID0gbmV3IGpvaW50LmRpYS5QYXBlcih7XHJcbiAgICAgIHdpZHRoOiA4MDAsXHJcbiAgICAgIGhlaWdodDogNjAwLFxyXG4gICAgICBtb2RlbDogZ3JhcGgsXHJcbiAgICAgIGdyaWRTaXplOiAxMCxcclxuICAgICAgZHJhd0dyaWQ6IHRydWUsXHJcbiAgICAgIGFzeW5jOiB0cnVlLFxyXG4gICAgICBzb3J0aW5nOiBqb2ludC5kaWEuUGFwZXIuc29ydGluZy5BUFBST1gsXHJcbiAgICAgIGludGVyYWN0aXZlOiB7IGxpbmtNb3ZlOiBmYWxzZSB9LFxyXG4gICAgICBzbmFwTGFiZWxzOiB0cnVlLFxyXG4gICAgICAvLyBDb25uZWN0aW9uc1xyXG4gICAgICBkZWZhdWx0TGluayhlbGVtZW50Vmlldykge1xyXG4gICAgICAgIHJldHVybiBuZXcgYnBtbjIuRmxvdyh7XHJcbiAgICAgICAgICB6OiBlbGVtZW50Vmlldy5tb2RlbC5nZXQoJ3onKSAtIDEsXHJcbiAgICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgICBsaW5lOiB7XHJcbiAgICAgICAgICAgICAgZmxvd1R5cGU6ICdzZXF1ZW5jZSdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICB2YWxpZGF0ZUNvbm5lY3Rpb24oY2VsbFZpZXdTLCBtYWduZXRTLCBjZWxsVmlld1QsIG1hZ25ldFQsIGVuZCkge1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNlbGxWaWV3Uy5tb2RlbDtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBjZWxsVmlld1QubW9kZWw7XHJcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbG9vcCBsaW5rc1xyXG4gICAgICAgIGlmIChzb3VyY2UgPT09IHRhcmdldCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkb24ndCBhbGxvdyBsaW5rIHRvIGxpbmsgY29ubmVjdGlvblxyXG4gICAgICAgIGlmIChzb3VyY2UuaXNMaW5rKCkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhcmdldC5pc0xpbmsoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBkb24ndCBhbGxvdyBncm91cCBjb25uZWN0aW9uc1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZVR5cGUgPSBzb3VyY2UuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0VHlwZSA9IHRhcmdldC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gJ2JwbW4yLkdyb3VwJyB8fCB0YXJnZXRUeXBlID09PSAnYnBtbjIuR3JvdXAnKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0QW5jaG9yOiB7XHJcbiAgICAgICAgbmFtZTogJ3BlcnBlbmRpY3VsYXInXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHRDb25uZWN0aW9uUG9pbnQ6IHtcclxuICAgICAgICBuYW1lOiAnYm91bmRhcnknLFxyXG4gICAgICAgIGFyZ3M6IHsgc3Ryb2tlOiB0cnVlIH1cclxuICAgICAgfSxcclxuICAgICAgLy8gRW1iZWRkaW5nXHJcbiAgICAgIGVtYmVkZGluZ01vZGU6IHRydWUsXHJcbiAgICAgIGZyb250UGFyZW50T25seTogZmFsc2UsXHJcbiAgICAgIHZhbGlkYXRlRW1iZWRkaW5nKGNoaWxkVmlldywgcGFyZW50Vmlldykge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkVHlwZSA9IGNoaWxkVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcgJiYgY2hpbGRUeXBlICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuQWN0aXZpdHknICYmIGNoaWxkVHlwZSA9PT0gJ2JwbW4yLkV2ZW50Jykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgLy8gSGlnaGxpZ2h0aW5nXHJcbiAgICAgIGhpZ2hsaWdodGluZzoge1xyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIG5hbWU6ICdtYXNrJyxcclxuICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICBzdHJva2U6ICcjMzQ5OGRiJyxcclxuICAgICAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogMyxcclxuICAgICAgICAgICAgICAnc3Ryb2tlLWxpbmVqb2luJzogJ3JvdW5kJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KS5vbih7XHJcbiAgICAgICdibGFuazpwb2ludGVyZG93bic6IChldnQsIHgsIHkpID0+IHtcclxuICAgICAgICBjbG9zZVRvb2xzKCk7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZENlbGxWaWV3KG51bGwpO1xyXG5cclxuICAgICAgICAvLyBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcclxuICAgICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ3NoaWZ0JywgZXZ0KSkge1xyXG4gICAgICAgICAgc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2JsYW5rOmNvbnRleHRtZW51JzogKGV2dCwgeCwgeSkgPT4ge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxsVmlldyhjZWxsVmlldyk7XHJcblxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2xpbms6bW91c2VlbnRlcic6IChsaW5rVmlldykgPT4ge1xyXG4gICAgICAgIC8vIE9wZW4gdG9vbCBvbmx5IGlmIHRoZXJlIGlzIG5vbmUgeWV0XHJcbiAgICAgICAgaWYgKGxpbmtWaWV3Lmhhc1Rvb2xzKCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgICAgIG5hbWU6ICdsaW5rLWhvdmVyJyxcclxuICAgICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcyh7IHZlcnRleEFkZGluZzogZmFsc2UgfSksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnbGluazptb3VzZWxlYXZlJzogKGxpbmtWaWV3KSA9PiB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIGhvdmVyIHRvb2wsIG5vdCB0aGUgcG9pbnRlcmRvd24gdG9vbFxyXG4gICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygnbGluay1ob3ZlcicpKSB7XHJcbiAgICAgICAgICBsaW5rVmlldy5yZW1vdmVUb29scygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgICdsaW5rOmNvbm5lY3QnOiAobGlua1ZpZXcpID0+IHtcclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIGxpbmsgdHlwZSBiYXNlZCBvbiB0aGUgY29ubmVjdGVkIGVsZW1lbnRzXHJcbiAgICAgICAgY29uc3QgbGluayA9IGxpbmtWaWV3Lm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGxpbmsuZ2V0U291cmNlQ2VsbCgpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGxpbmsuZ2V0VGFyZ2V0Q2VsbCgpO1xyXG4gICAgICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluay5zZXQoJ3onLCAtMSk7XHJcbiAgICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlLmdldCgndHlwZScpLCB0YXJnZXQuZ2V0KCd0eXBlJyldO1xyXG4gICAgICAgIGNvbnN0IGxpbmtUeXBlID0gbGluay5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQW5ub3RhdGlvbicpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQW5ub3RhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQ29udmVyc2F0aW9uJykgPiAtMSkge1xyXG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkNvbnZlcnNhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuRGF0YU9iamVjdCcpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhU3RvcmUnKSA+IC0xKSB7XHJcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5EYXRhQXNzb2NpYXRpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlua1R5cGUgIT09ICdicG1uMi5GbG93Jykge1xyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkZsb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc25hcGxpbmVzID0gbmV3IGpvaW50LnVpLlNuYXBsaW5lcyh7IHBhcGVyIH0pO1xyXG5cclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSBuZXcgam9pbnQudWkuUGFwZXJTY3JvbGxlcih7XHJcbiAgICAgIGF1dG9SZXNpemVQYXBlcjogdHJ1ZSxcclxuICAgICAgcGFkZGluZzogMjAsXHJcbiAgICAgIHBhcGVyLFxyXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBwYXBlclNjcm9sbGVyLiRlbC5hcHBlbmRUbygnI3BhcGVyLWNvbnRhaW5lcicpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIucmVuZGVyKCkuY2VudGVyKCk7XHJcblxyXG4gICAgcGFwZXIub24oJ2JsYW5rOm1vdXNld2hlZWwnLCBfLnBhcnRpYWwob25Nb3VzZXdoZWVsLCBudWxsKSwgdGhpcyk7XHJcbiAgICBwYXBlci5vbignY2VsbDptb3VzZXdoZWVsJywgb25Nb3VzZXdoZWVsLCB0aGlzKTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2V3aGVlbChjZWxsVmlldywgZXZ0LCB4LCB5LCBkZWx0YSkge1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb20oZGVsdGEgKiAwLjEsIHsgbWluOiAwLjIsIG1heDogNSwgZ3JpZDogMC4xLCBveDogeCwgb3k6IHkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU0VMRUNUSU9OICovXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSBuZXcgam9pbnQudWkuU2VsZWN0aW9uKHtcclxuICAgICAgcGFwZXIsXHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxyXG4gICAgICBmaWx0ZXI6IFsnYnBtbjIuSGVhZGVyZWRQb29sJ10gLy8gZG9uJ3QgYWxsb3cgdG8gc2VsZWN0IGEgcG9vbFxyXG4gICAgfSk7XHJcblxyXG4gICAgLyogU1RFTkNJTCAqL1xyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWwgPSBuZXcgam9pbnQudWkuU3RlbmNpbCh7XHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICBwYXBlcixcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgIGRyYWdFbmRDbG9uZShjZWxsKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmUgPSBjZWxsLmNsb25lKCk7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsb25lLmdldCgndHlwZScpO1xyXG5cclxuICAgICAgICAvLyBzb21lIHR5cGVzIG9mIHRoZSBlbGVtZW50cyBuZWVkIHJlc2l6aW5nIGFmdGVyIHRoZXkgYXJlIGRyb3BwZWRcclxuICAgICAgICBjb25zdCBzaXplTXVsdGlwbGllciA9IHsgJ2JwbW4yLkhlYWRlcmVkUG9vbCc6IDgsICdicG1uLkNob3Jlb2dyYXBoeSc6IDIgfVt0eXBlXTtcclxuICAgICAgICBpZiAoc2l6ZU11bHRpcGxpZXIpIHtcclxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2l6ZSA9IGNsb25lLmdldCgnc2l6ZScpO1xyXG4gICAgICAgICAgY2xvbmUuc2V0KCdzaXplJywge1xyXG4gICAgICAgICAgICB3aWR0aDogb3JpZ2luYWxTaXplLndpZHRoICogc2l6ZU11bHRpcGxpZXIsXHJcbiAgICAgICAgICAgIGhlaWdodDogb3JpZ2luYWxTaXplLmhlaWdodCAqIHNpemVNdWx0aXBsaWVyXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgICBjbG9uZS5zZXQoJ3BhZGRpbmcnLCB7IHRvcDogMCwgbGVmdDogMzAsIHJpZ2h0OiAwLCBib3R0b206IDAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc3RlbmNpbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyNzdGVuY2lsLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIHN0ZW5jaWwubG9hZChbXHJcbiAgICAgIG5ldyBicG1uMi5BY3Rpdml0eSh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkdhdGV3YXkoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5FdmVudCh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkNvbnZlcnNhdGlvbih7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkRhdGFPYmplY3Qoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5EYXRhU3RvcmUoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Bbm5vdGF0aW9uKHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keToge1xyXG4gICAgICAgICAgICBmaWxsOiAnI2ZmZmZmZidcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Hcm91cCh7XHJcbiAgICAgICAgc2l6ZToge1xyXG4gICAgICAgICAgd2lkdGg6IDgwLFxyXG4gICAgICAgICAgaGVpZ2h0OiA4MFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHRleHQ6ICdHcm91cCcsXHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgLy8gTGVnYWN5IEJQTU4gU2hhcGVzXHJcbiAgICAgIG5ldyBicG1uMi5IZWFkZXJlZFBvb2woe1xyXG4gICAgICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBsZWZ0OiAxNSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LFxyXG4gICAgICAgIHNpemU6IHsgd2lkdGg6IDgwLCBoZWlnaHQ6IDUwIH0sXHJcbiAgICAgICAgbGFuZXM6IFt7IGxhYmVsOiAnTGFuZSAxJyB9LCB7IGxhYmVsOiAnTGFuZSAyJyB9XSxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keTogeyBmaWxsOiAnI0ZGRkZGRicgfSxcclxuICAgICAgICAgIGhlYWRlckxhYmVsOiB7IHRleHQ6ICdIZWFkZXInIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgam9pbnQuc2hhcGVzLmJwbW4uQ2hvcmVvZ3JhcGh5KHtcclxuICAgICAgICBwYXJ0aWNpcGFudHM6IFsnUGFydGljaXBhbnQgMScsICdQYXJ0aWNpcGFudCAyJ10sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGpvaW50LnNoYXBlcy5icG1uLk1lc3NhZ2Uoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICB0ZXh0OiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgXSk7XHJcblxyXG4gICAgam9pbnQubGF5b3V0LkdyaWRMYXlvdXQubGF5b3V0KHN0ZW5jaWwuZ2V0R3JhcGgoKSwge1xyXG4gICAgICBjb2x1bW5zOiAxMDAsXHJcbiAgICAgIGNvbHVtbldpZHRoOiAnY29tcGFjdCcsXHJcbiAgICAgIG1hcmdpblg6IDIwLFxyXG4gICAgICBtYXJnaW5ZOiAyMCxcclxuICAgICAgY29sdW1uR2FwOiA0MCxcclxuICAgICAgdmVydGljYWxHYXA6IDIwLFxyXG4gICAgICByZXNpemVUb0ZpdDogZmFsc2VcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNldFNlbGVjdGVkQ2VsbFZpZXcgPSB0aGlzLnNldFNlbGVjdGVkQ2VsbFZpZXc7XHJcbiAgICAvLyBDcmVhdGUgdG9vbHRpcHMgZm9yIGFsbCB0aGUgc2hhcGVzIGluIHN0ZW5jaWwuXHJcbiAgICBzdGVuY2lsLm9uKCdlbGVtZW50OmRyb3AnLCAoZWxlbWVudFZpZXcpID0+IHtcclxuICAgICAgLy8gb3BlbiBpbnNwZWN0b3IgYWZ0ZXIgYSBuZXcgZWxlbWVudCBkcm9wcGVkIGZyb20gc3RlbmNpbFxyXG4gICAgICBvcGVuVG9vbHMoZWxlbWVudFZpZXcpO1xyXG4gICAgICBzZXRTZWxlY3RlZENlbGxWaWV3KGVsZW1lbnRWaWV3KTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiBLRVlCT0FSRCAqL1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XHJcbiAgICAgIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAga2V5Ym9hcmQub24oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gQ29weSBhbGwgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbGlua3MuXHJcbiAgICAgICAgICAgIGNsaXBib2FyZC5jb3B5RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrdic6ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZTogeyBkeDogMjAsIGR5OiAyMCB9LFxyXG4gICAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gXy5maWx0ZXIocGFzdGVkQ2VsbHMsIChjZWxsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNlbGwuaXNFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xyXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgbWFuaXB1bGF0ZSB0aGUgcGFzdGVkIGVsZW1lbnRzLlxyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChlbGVtZW50cyk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3ggc2hpZnQrZGVsZXRlJzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdkZWxldGUgYmFja3NwYWNlJzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZ3JhcGgucmVtb3ZlQ2VsbHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24udG9BcnJheSgpKTtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3onOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnVuZG8oKTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XHJcbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwreSc6ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgbm90aWZ5ID0gaXNTZWxlY3RlZENlbGxWaWV3SW5TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgY29tbWFuZE1hbmFnZXIucmVkbygpO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcclxuICAgICAgICAgICAgICBzZXRTZWxlY3RlZENlbGxWaWV3KG51bGwpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCthJzogKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChncmFwaC5nZXRFbGVtZW50cygpKTtcclxuICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3BsdXMnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oMC4yLCB7IG1heDogNSwgZ3JpZDogMC4yIH0pO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCttaW51cyc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdrZXlkb3duOnNoaWZ0JzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignY3Jvc3NoYWlyJyk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdrZXl1cDpzaGlmdCc6ICgpID0+IHtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBvcGVuVG9vbHMoY2VsbFZpZXcpIHtcclxuICAgICAgaWYgKCFjZWxsVmlldykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjbG9zZVRvb2xzKCk7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBjZWxsVmlldy5tb2RlbDtcclxuICAgICAgY29uc3QgdHlwZSA9IGNlbGwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgIC8vIGNvbnN0IHRhYmxOYW1lID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlRBQl9OQU1FXTtcclxuICAgICAgLy8gaWYgKHRhYmxOYW1lID09PSBGbG93Q2hhcnRDb25zdC5UQUJfQlBNTl9DSE9SRU9HUkFQSFkpIHtcclxuICAgICAgLy8gICBjb25zdCBpbnNwZWN0b3IgPSBqb2ludC51aS5JbnNwZWN0b3IuY3JlYXRlKCcjaW5zcGVjdG9yLWNvbnRhaW5lcicsIHtcclxuICAgICAgLy8gICAgIGNlbGwsXHJcbiAgICAgIC8vICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgLy8gICAgIGdyb3Vwczoge1xyXG4gICAgICAvLyAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxyXG4gICAgICAvLyAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxyXG4gICAgICAvLyAgICAgICBmb250c2l6ZTogeyBpbmRleDogMyB9LFxyXG4gICAgICAvLyAgICAgICBhcHBlYXJhbmNlOiB7IGluZGV4OiA0IH1cclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9KTtcclxuICAgICAgLy8gfVxyXG5cclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgICAgY2VsbCxcclxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxyXG4gICAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChbXSk7XHJcbiAgICAgIC8vIEFkZCB0aGUgY2VsbCBpbnRvIHRoZSBzZWxlY3Rpb24gY29sbGVjdGlvbiBzaWxlbnRseVxyXG4gICAgICAvLyBzbyBubyBzZWxlY3Rpb24gYm94IGlzIHJlbmRlcmVkIGFib3ZlIHRoZSBjZWxsVmlldy5cclxuICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24uYWRkKGNlbGwsIHsgc2lsZW50OiB0cnVlIH0pO1xyXG5cclxuICAgICAgaWYgKGNlbGwuaXNFbGVtZW50KCkpIHtcclxuICAgICAgICBsZXQgbWluU2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBicG1uMi5IZWFkZXJlZFBvb2wpIHtcclxuICAgICAgICAgIG1pblNpemUgPSBjZWxsLmdldE1pbmltYWxTaXplKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1pblNpemUgPSB7IHdpZHRoOiAzMCwgaGVpZ2h0OiAzMCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnJlZVRyYW5zZm9ybSA9IG5ldyBqb2ludC51aS5GcmVlVHJhbnNmb3JtKHtcclxuICAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAgICAgYWxsb3dPcnRob2dvbmFsUmVzaXplOiBmYWxzZSxcclxuICAgICAgICAgIGFsbG93Um90YXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgbWluV2lkdGg6IG1pblNpemUud2lkdGgsXHJcbiAgICAgICAgICBtaW5IZWlnaHQ6IG1pblNpemUuaGVpZ2h0XHJcbiAgICAgICAgfSkucmVuZGVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XHJcbiAgICAgICAgICBjZWxsVmlldyxcclxuICAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICB0eXBlOiAndG9vbGJhcicsXHJcbiAgICAgICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxyXG4gICAgICAgICAgYm94Q29udGVudDogKGNlbGxWaWV3KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZWxsVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xyXG4gICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGFsby5yZW5kZXIoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNlbGwuaXNMaW5rKCkpIHtcclxuICAgICAgICBjb25zdCBucyA9IGpvaW50LmxpbmtUb29scztcclxuICAgICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICAgICAgICBuYW1lOiAnbGluay1wb2ludGVyZG93bicsXHJcbiAgICAgICAgICB0b29sczogW1xyXG4gICAgICAgICAgICBuZXcgbnMuVmVydGljZXMoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFuY2hvcigpLFxyXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QW5jaG9yKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpLFxyXG4gICAgICAgICAgICBuZXcgbnMuU2VnbWVudHMoKSxcclxuICAgICAgICAgICAgbmV3IG5zLkJvdW5kYXJ5KHsgcGFkZGluZzogMTUgfSksXHJcbiAgICAgICAgICAgIG5ldyBucy5SZW1vdmUoeyBvZmZzZXQ6IC0yMCwgZGlzdGFuY2U6IDQwIH0pXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNlbGxWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFFNUy0yMzY0OiBzaG93IGxpbmsgYW5kIHBvaXRlciBjaGFuZ2UgdG8gaGFuZCAqL1xyXG4gICAgICAvLyBpZiAod2luZG93W2BldmVudGBdW2B0eXBlYF0gPT09ICdtb3VzZW92ZXInICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIC8vICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYGpvaW50LWVsZW1lbnRgKTtcclxuICAgICAgLy8gICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgIGNvbnN0IHNoYXBlSWQgPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICAvLyAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcclxuICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgICAgICBpZiAobGlzdFtpXS5hdHRyaWJ1dGVzWzBdLm5vZGVWYWx1ZSAhPT0gc2hhcGVJZCkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsTW9kZWwgPSB3aW5kb3dbYFNIQVBFX0RFVEFJTF9NT0RFTGBdO1xyXG4gICAgICAvLyAgICAgICBpZiAoIXNoYXBlRGV0YWlsTW9kZWwpIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgLy8gICAgICAgICBjb250aW51ZTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBjb25zdCBpbmRleCA9IHNoYXBlRGV0YWlsTW9kZWwuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgIC8vICAgICAgICAgcmV0dXJuIHguc2hhcGVJZCA9PT0gc2hhcGVJZDtcclxuICAgICAgLy8gICAgICAgfSk7XHJcbiAgICAgIC8vICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgLy8gICAgICAgICBjb250aW51ZTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBjb25zdCBzaGFwZURldGFpbCA9IHNoYXBlRGV0YWlsTW9kZWxbaW5kZXhdO1xyXG4gICAgICAvLyAgICAgICBsZXQgY29ubmVjdGlvbk5hbWUgPSAnJztcclxuICAgICAgLy8gICAgICAgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQWN0aXZpdHkpIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgLy8gICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTktfVE9fQUNUSVZJVFknKTtcclxuICAgICAgLy8gICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkxpbmspIHtcclxuICAgICAgLy8gICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTksnKTtcclxuICAgICAgLy8gICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzKSB7XHJcbiAgICAgIC8vICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxyXG4gICAgICAvLyAgICAgICAgIHN3aXRjaCAoc2hhcGVEZXRhaWwuZG9jdW1lbnRNb2RlbC5yZWxhdGVkSXRlbXNbMF0uaXRlbVR5cGUpIHtcclxuICAgICAgLy8gICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmRvY3VtZW50OlxyXG4gICAgICAvLyAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTktfVE9fRE9DVU1FTlQnKTtcclxuICAgICAgLy8gICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5wcm9jZXNzOlxyXG4gICAgICAvLyAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTktfVE9fUFJPQ0VTUycpO1xyXG4gICAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgICAgLy8gICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmFyZWE6XHJcbiAgICAgIC8vICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19BUkVBJyk7XHJcbiAgICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuaGFuZGJvb2s6XHJcbiAgICAgIC8vICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gdHJhbnNsYXRlLmluc3RhbnQoJ1BST0NFU1MuTElOS19UT19GT0xERVInKTtcclxuICAgICAgLy8gICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkFjdGl2aXR5KSB7XHJcbiAgICAgIC8vICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcclxuICAgICAgLy8gICAgICAgICBjZWxsVmlldyxcclxuICAgICAgLy8gICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxyXG4gICAgICAvLyAgICAgICAgIGJveENvbnRlbnQ6IGNvbm5lY3Rpb25OYW1lXHJcbiAgICAgIC8vICAgICAgIH0pO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbmRlcigpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZXNpemUnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2Nsb25lJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuXHJcbiAgICAgIC8vICAgY29uc3Qgc2hhcGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tcm90YXRpb24nKTtcclxuICAgICAgLy8gICBpZiAoc2hhcGVFbGVtZW50ICYmIHNoYXBlRWxlbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlRWxlbWVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgICAgICBpZiAoIXNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QuY29udGFpbnMoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJykpIHtcclxuICAgICAgLy8gICAgICAgICBzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LmFkZCgnam9pbnQtZnJlZS10cmFuc2Zvcm0nKTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSBlbHNlIGlmICh3aW5kb3dbYGV2ZW50YF1bYHR5cGVgXSA9PT0gJ21vdXNlb3V0JyAmJiBlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xyXG4gICAgICAvLyAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XHJcbiAgICAgIC8vICAgICBjZWxsVmlldyxcclxuICAgICAgLy8gICAgIHRoZW1lOiAnZGVmYXVsdCcsXHJcbiAgICAgIC8vICAgICBib3hDb250ZW50OiAnJ1xyXG4gICAgICAvLyAgIH0pO1xyXG4gICAgICAvLyAgIGhhbG8ucmVuZGVyKCk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JlbW92ZScpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZXNpemUnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgnY2xvbmUnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyb3RhdGUnKTtcclxuICAgICAgLy8gICBjb25zdCBzaGFwZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduby1yb3RhdGlvbicpO1xyXG4gICAgICAvLyAgIGlmIChzaGFwZUVsZW1lbnQgJiYgc2hhcGVFbGVtZW50Lmxlbmd0aCA+IDApIHtcclxuICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QucmVtb3ZlKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xyXG4gICAgICAvLyAgICAgfVxyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICAvKiBRTVMtMjEyNTogU2hvdyBwcm9jZXNzIGNvbm5lY3QgdHlwZSAqL1xyXG4gICAgICAvLyAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TSE9XX0NPTk5FQ1RZUEVdID0gdHJ1ZTtcclxuICAgICAgLy8gICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy5pZDtcclxuICAgICAgLy8gICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGU7XHJcbiAgICAgIC8vICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF9MT0FESU5HXSA9IHRydWU7XHJcbiAgICAgIC8vIH1cclxuICAgICAgLyogUU1TLTIxMjU6IFNob3cgcHJvY2VzcyBjb25uZWN0IHR5cGUgKi9cclxuXHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TSE9XX0NPTk5FQ1RZUEVdID0gdHJ1ZTtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF9MT0FESU5HXSA9IHRydWU7XHJcbiAgICAgIC8qIFFNUy0xNDA0OiBDdXN0b21pemF0aW9uICovXHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl0gPSBwYXBlcjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjbG9zZVRvb2xzKCkge1xyXG4gICAgICBwYXBlci5yZW1vdmVUb29scygpO1xyXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcclxuICAgICAgam9pbnQudWkuRnJlZVRyYW5zZm9ybS5jbGVhcihwYXBlcik7XHJcbiAgICAgIGZyZWVUcmFuc2Zvcm0gPSBudWxsO1xyXG4gICAgICBqb2ludC51aS5IYWxvLmNsZWFyKHBhcGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pIHtcclxuICAgICAgY29uc3QgbW9kZWxzID0gc2VsZWN0aW9uLmNvbGxlY3Rpb24udG9BcnJheSgpIHx8IFtdO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZFNoYXBlSWQgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdO1xyXG4gICAgICByZXR1cm4gISFzZWxlY3RlZFNoYXBlSWQgJiYgbW9kZWxzLmZpbHRlcihtb2RlbCA9PiBtb2RlbC5hdHRyaWJ1dGVzLmlkID09IHNlbGVjdGVkU2hhcGVJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gc2hvd1N0YXR1cyhtZXNzYWdlLCB0eXBlKSB7XHJcbiAgICAgICQoJy5zdGF0dXMnKS5yZW1vdmVDbGFzcygnaW5mbyBlcnJvciBzdWNjZXNzJykuYWRkQ2xhc3ModHlwZSkuaHRtbChtZXNzYWdlKTtcclxuICAgICAgJCgnI3N0YXR1c2Jhci1jb250YWluZXInKVxyXG4gICAgICAgIC5kZXF1ZXVlKClcclxuICAgICAgICAuYWRkQ2xhc3MoJ2FjdGl2ZScpXHJcbiAgICAgICAgLmRlbGF5KDMwMDApXHJcbiAgICAgICAgLnF1ZXVlKCgpID0+IHtcclxuICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBsaW5rQ29uc3RydWN0b3IpIHtcclxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcclxuICAgICAgY29uc3QgbGluazIgPSBuZXcgbGlua0NvbnN0cnVjdG9yKHtcclxuICAgICAgICBzb3VyY2U6IGxpbmsuc291cmNlKCksXHJcbiAgICAgICAgdGFyZ2V0OiBsaW5rLnRhcmdldCgpLFxyXG4gICAgICAgIHZlcnRpY2VzOiBsaW5rLnZlcnRpY2VzKClcclxuICAgICAgfSk7XHJcbiAgICAgIGxpbmsucmVtb3ZlKCk7XHJcbiAgICAgIGxpbmsyLnNldCgneicsIC0xKTtcclxuICAgICAgbGluazIuYWRkVG8oZ3JhcGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdyYXBoLm9uKCdjaGFuZ2UnLCAoY2VsbCwgb3B0KSA9PiB7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VUZXh0SW5zaWRlKGNlbGwpO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlTGlua0xhYmVsKGNlbGwsIDEyKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZUFsbGlnbWVudChjZWxsLCBvcHQpO1xyXG4gICAgICBpZiAoIW9wdC5pbnNwZWN0b3IgfHwgIWZyZWVUcmFuc2Zvcm0gfHwgY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWluU2l6ZSA9IGNlbGwuZ2V0TWluaW1hbFNpemUoKTtcclxuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbldpZHRoID0gbWluU2l6ZS53aWR0aDtcclxuICAgICAgZnJlZVRyYW5zZm9ybS5vcHRpb25zLm1pbkhlaWdodCA9IG1pblNpemUuaGVpZ2h0O1xyXG4gICAgfSk7XHJcblxyXG4gICAgLyogVE9PTEJBUiAqL1xyXG4gICAgY29uc3QgdG9vbGJhciA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcclxuICAgICAgdG9vbHM6IHRvb2xiYXJDb25maWcudG9vbHMsXHJcbiAgICAgIHJlZmVyZW5jZXM6IHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLFxyXG4gICAgICAgIGNvbW1hbmRNYW5hZ2VyXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRvb2xiYXJDb21tYW5kcyA9IHtcclxuICAgICAgdG9KU09OOiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgd2luZG93RmVhdHVyZXMgPSAnbWVudWJhcj1ubyxsb2NhdGlvbj1ubyxyZXNpemFibGU9eWVzLHNjcm9sbGJhcnM9eWVzLHN0YXR1cz1ubyc7XHJcbiAgICAgICAgY29uc3Qgd2luZG93TmFtZSA9IF8udW5pcXVlSWQoJ2pzb25fb3V0cHV0Jyk7XHJcbiAgICAgICAgY29uc3QganNvbldpbmRvdyA9IHdpbmRvdy5vcGVuKCcnLCB3aW5kb3dOYW1lLCB3aW5kb3dGZWF0dXJlcyk7XHJcblxyXG4gICAgICAgIGpzb25XaW5kb3cuZG9jdW1lbnQud3JpdGUoSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpKTtcclxuICAgICAgfSxcclxuICAgICAgbG9hZEdyYXBoOiAoKSA9PiB7XHJcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcclxuICAgICAgICAgIHNob3dTdGF0dXMoJ2xvYWRpbmcuLicsICdpbmZvJyk7XHJcbiAgICAgICAgICBnZExvYWQoKG5hbWUsIGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5wYXJzZShjb250ZW50KTtcclxuICAgICAgICAgICAgICBncmFwaC5mcm9tSlNPTihqc29uKTtcclxuICAgICAgICAgICAgICBjb25zdCBlbEZpbGVOYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xyXG4gICAgICAgICAgICAgIGVsRmlsZU5hbWUudmFsdWUgPSBuYW1lLnJlcGxhY2UoLy5qc29uJC8sICcnKTtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkZWQuJywgJ3N1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBzYXZlR3JhcGg6ICgpID0+IHtcclxuICAgICAgICBnZEF1dGgoKCkgPT4ge1xyXG4gICAgICAgICAgc2hvd1N0YXR1cygnc2F2aW5nLi4nLCAnaW5mbycpO1xyXG4gICAgICAgICAgLy8gbGV0IG5hbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKS52YWx1ZTtcclxuICAgICAgICAgIGNvbnN0IG5hbWUgPSA8SFRNTEJ1dHRvbkVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJyk7XHJcbiAgICAgICAgICBnZFNhdmUobmFtZS52YWx1ZSwgSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpLCAoZmlsZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZmlsZSkge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmVkLicsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnZmFpbGVkLicsICdlcnJvcicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCB0cnVlKTtcclxuICAgICAgfSxcclxuICAgICAgb25TZWxlY3RlZDogKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50Lmpzb25Db250ZW50KSB7XHJcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfRkxPV0NIQVJUX0lEXSA9IGV2ZW50LmZsb3dDaGFydElkO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0pTT05fQ09OVEVOVF0gPSBldmVudC5qc29uQ29udGVudDtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV0gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk9SR19KU09OQ09OVEVOVF0gPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuQ0hBTkdJTkdfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2xlYXI6ICgpID0+IHtcclxuICAgICAgICBncmFwaC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuICAgICAgfSxcclxuICAgICAgb25EZWxldGVUZW1wbGF0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlID0gd2luZG93W0Zsb3dDaGFydENvbnN0LklTX1NFTEVDVEVEX1RFTVBMQVRFXTtcclxuICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUpIHtcclxuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ERUxFVEVfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0Lk1VU1RfU0VMRUNUX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25TYXZlQXNUZW1wbGF0ZTogKCkgPT4ge1xyXG4gICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5TQVZFX0FTX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvblJlc2V0VG9UZW1wVGVtcGxhdGU6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV07XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuUkVTRVRfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjaGFuZ2VTbmFwTGluZXMoY2hlY2tlZCkge1xyXG4gICAgICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgICBzbmFwbGluZXMuc3RhcnRMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSB0aGlzLnNuYXBsaW5lcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc25hcGxpbmVzLnN0b3BMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIGFwcGx5T25TZWxlY3Rpb24obWV0aG9kKSB7XHJcbiAgICAgICAgZ3JhcGguc3RhcnRCYXRjaCgnc2VsZWN0aW9uJyk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBtb2RlbFttZXRob2RdKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZ3JhcGguc3RvcEJhdGNoKCdzZWxlY3Rpb24nKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRvb2xiYXIub24oe1xyXG4gICAgICAndG9qc29uOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b0pTT04sXHJcbiAgICAgICdsb2FkOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5sb2FkR3JhcGgsXHJcbiAgICAgICdzYXZlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5zYXZlR3JhcGgsXHJcbiAgICAgICdjbGVhcjpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25DbGVhcixcclxuICAgICAgJ3ByaW50OnBvaW50ZXJjbGljayc6IF8uYmluZChwYXBlci5wcmludCwgcGFwZXIpLFxyXG4gICAgICAnc2F2ZUFzVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uU2F2ZUFzVGVtcGxhdGUsXHJcbiAgICAgICdzZWxlY3RUZW1wbGF0ZTpvcHRpb246c2VsZWN0JzogdG9vbGJhckNvbW1hbmRzLm9uU2VsZWN0ZWQsXHJcbiAgICAgICdkZWxldGVUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25EZWxldGVUZW1wbGF0ZSxcclxuICAgICAgJ3Jlc2V0VG9UZW1wVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uUmVzZXRUb1RlbXBUZW1wbGF0ZSxcclxuICAgICAgJ3RvLWZyb250OnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5hcHBseU9uU2VsZWN0aW9uLmJpbmQodGhpcywgJ3RvRnJvbnQnKSxcclxuICAgICAgJ3RvLWJhY2s6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9CYWNrJyksXHJcbiAgICAgICdzbmFwbGluZTpjaGFuZ2UnOiB0b29sYmFyQ29tbWFuZHMuY2hhbmdlU25hcExpbmVzLmJpbmQodGhpcyksXHJcbiAgICAgICdncmlkLXNpemU6Y2hhbmdlJzogcGFwZXIuc2V0R3JpZFNpemUuYmluZChwYXBlcilcclxuICAgIH0pO1xyXG5cclxuICAgIHRvb2xiYXIucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjdG9vbGJhci1jb250YWluZXInKTtcclxuXHJcbiAgICAvLyBjb25zdCB6b29tVG9vbCA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcclxuICAgIC8vICAgLy8gaW5pdGkgYWxpemUgdG9vbHMgd2l0aCBkZWZhdWx0IHNldHRpbmdzXHJcbiAgICAvLyAgIHRvb2xzOiBbJ3pvb21Ub0ZpdCcsICd6b29tSW4nLCAnem9vbU91dCddLFxyXG4gICAgLy8gICByZWZlcmVuY2VzOiB7XHJcbiAgICAvLyAgICAgcGFwZXJTY3JvbGxlcixcclxuICAgIC8vICAgICBjb21tYW5kTWFuYWdlclxyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICAvLyB6b29tVG9vbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN6b29tVG9vbGJhcicpO1xyXG5cclxuICAgIG5ldyBqb2ludC51aS5Ub29sdGlwKHtcclxuICAgICAgdGFyZ2V0OiAnW2RhdGEtdG9vbHRpcF0nLFxyXG4gICAgICBjb250ZW50KGVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsLmRhdGFzZXQudG9vbHRpcDtcclxuICAgICAgfSxcclxuICAgICAgdG9wOiAnLmpvaW50LXRvb2xiYXInLFxyXG4gICAgICBwYWRkaW5nOiAxMCxcclxuICAgICAgZGlyZWN0aW9uOiAndG9wJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxyXG4gICAgc3RlbmNpbFxyXG4gICAgICAuZ2V0R3JhcGgoKVxyXG4gICAgICAuZ2V0KCdjZWxscycpXHJcbiAgICAgIC5lYWNoKChjZWxsKSA9PiB7XHJcbiAgICAgICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xyXG4gICAgICAgICAgdGFyZ2V0OiBgLmpvaW50LXN0ZW5jaWwgW21vZGVsLWlkPVwiJHtjZWxsLmlkfVwiXWAsXHJcbiAgICAgICAgICBjb250ZW50OiBjZWxsLmdldCgndHlwZScpLnNwbGl0KCcuJylbMV0sXHJcbiAgICAgICAgICBib3R0b206ICcuam9pbnQtc3RlbmNpbCcsXHJcbiAgICAgICAgICBkaXJlY3Rpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgcGFkZGluZzogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKGpvaW50LnNoYXBlcy5icG1uLmljb25zLCB0aGlzLmJ1aWxkTmV3SWNvbnMoKSk7XHJcbiAgICAvKiBMb2FkICBwcm9jZXNzIGRpZ3JhbSAqL1xyXG4gICAgdGhpcy5sb2FkUHJvY2Vzc0RpYWdyYW0oanNvbkNvbnRlbnQpO1xyXG4gICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5wb3NpdGlvbkNvbnRlbnQoJ3RvcC1sZWZ0JywgeyBwYWRkaW5nOiA1MCwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcclxuXHJcbiAgICAvKiBTZXQgZyByYXBoIG9iamVjdCAqL1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXSA9IGdyYXBoO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSXSA9IHBhcGVyO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXSA9IHBhcGVyU2Nyb2xsZXI7XHJcbiAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuT1JHX0pTT05DT05URU5UXSA9IHRoaXMuanNvbk9yaWdpbmFsQ29udGVudDtcclxuICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ESUFHUkFNX0xPQURFRCwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gIH1cclxuXHJcbiAgYnVpbGROZXdJY29ucyh7IGNvbG9yID0gJyMwMDAnIH0gPSB7fSkge1xyXG4gICAgY29uc3Qgc3ZnSWNvbnMgPSB7XHJcbiAgICAgIG1lc3NhZ2UxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjEyIDEyIDE2IDE2XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuMlwiIGQ9XCJNMTIuNSAxNS4zMTN2OS4zNzRoMTV2LTkuMzc1em0wIDBsNy41IDUuNjI0IDcuNS01LjYyNVwiLz48L3N2Zz5gLFxyXG4gICAgICBtZXNzYWdlMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIxMiAxMiAxNiAxNlwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIGQ9XCJNMTIuNSAxNC4zNDRsNy41IDUuNjI1IDcuNS01LjYyNXptMCAuOTM3djkuMzc1aDE1di05LjM3NUwyMCAyMC45MDZ6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHRpbWVyMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48ZyBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCI+PGNpcmNsZSBjeD1cIjIwXCIgY3k9XCIyMFwiIHI9XCIxMFwiLz48cGF0aCBkPVwiTTIwIDEwdjNtNS0ybC0xLjUgM201LjUgMWwtMyAxLjVtNCAzLjVoLTNtMiA1bC0zLTEuNU0yNSAyOWwtMS41LTNNMjAgMzB2LTNtLTUgMmwxLjUtM00xMSAyNWwzLTEuNU0xMCAyMGgzbS0yLTVsMyAxLjVtMS01LjVsMS41IDNtNS41LTFsLTIgN2g0XCIvPjwvZz48L3N2Zz5gLFxyXG4gICAgICBjb25kaXRpb25hbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiA+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuNTYzIDExLjU2M2gxNi44NzR2MTYuODc0SDExLjU2M1YxMS41NjNtMi44MTMgMi44MTNoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjVtLTExLjI1IDMuNzVoMTEuMjV6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGxpbmsxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE0LjQwNiAxOC4xMjVoOC40Mzh2LTIuODEzTDI3LjUzIDIwbC00LjY4NyA0LjY4OHYtMi44MTNoLTkuMzc1di0zLjc1XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGxpbmsyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xNC40MDYgMTguMTI1aDguNDM4di0yLjgxM0wyNy41MyAyMGwtNC42ODcgNC42ODh2LTIuODEzaC05LjM3NXYtMy43NVwiLz48L3N2Zz5gLFxyXG4gICAgICBzaWduYWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMy4xNyAyNC44NTFoMTMuNzA2bC02Ljg1My0xMS44NzktNi44NTQgMTEuODh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHNpZ25hbDI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiAgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMy4xNyAyNC44NTFoMTMuNzA2bC02Ljg1My0xMS44NzktNi44NTQgMTEuODh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGVycm9yMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yNi40IDE1LjQ1NWwtMy4yMzggMTIuNThMMTcuNyAxOC4zNyAxMy43NiAyMy44bDMuNDc4LTEyLjQxMiA1LjU3NiA4LjcyIDMuNTg2LTQuNjUyelwiLz48L3N2Zz5gLFxyXG4gICAgICBlcnJvcjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI2LjQgMTUuNDU1bC0zLjIzOCAxMi41OEwxNy43IDE4LjM3IDEzLjc2IDIzLjhsMy40NzgtMTIuNDEyIDUuNTc2IDguNzIgMy41ODYtNC42NTJ6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGVzY2FsYXRpb24xOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTIwIDEzLjIxOWw1LjYyNSAxNC4wNjJMMjAgMjAuOTUzbC01LjYyNSA2LjMyOHpcIi8+PC9zdmc+YCxcclxuICAgICAgZXNjYWxhdGlvbjI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTIwIDEzLjIxOWw1LjYyNSAxNC4wNjJMMjAgMjAuOTUzbC01LjYyNSA2LjMyOHpcIi8+PC9zdmc+YCxcclxuICAgICAgdGVybWluYXRpb24xOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiMjBcIiByPVwiMTAuNVwiIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+PC9zdmc+YCxcclxuICAgICAgdGVybWluYXRpb24yOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiMjBcIiByPVwiMTAuNVwiIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGNvbXBlbnNhdGlvbjE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTkgMTMuNDM4djEzLjEyNEwxMi40MzcgMjAgMTkgMTMuNDM3bTYuNTYzIDB2MTMuMTI2TDE5IDIwbDYuNTYzLTYuNTYzelwiLz48L3N2Zz5gLFxyXG4gICAgICBjb21wZW5zYXRpb24yOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xOSAxMy40Mzh2MTMuMTI0TDEyLjQzNyAyMCAxOSAxMy40MzdtNi41NjMgMHYxMy4xMjZMMTkgMjBsNi41NjMtNi41NjN6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGNhbmNlbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMjg0IDE0LjI3NGwyLjg2Ny0yLjg2OCA1LjczNSA1LjczNSA1LjczNS01LjczNSAyLjg2OCAyLjg2OC01LjczNSA1LjczNSA1LjczNSA1LjczNS0yLjg2OCAyLjg2Ny01LjczNS01LjczNS01LjczNSA1LjczNS0yLjg2Ny0yLjg2NyA1LjczNS01LjczNS01LjczNS01LjczNXpcIi8+PC9zdmc+YCxcclxuICAgICAgY2FuY2VsMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMjg0IDE0LjI3NGwyLjg2Ny0yLjg2OCA1LjczNSA1LjczNSA1LjczNS01LjczNSAyLjg2OCAyLjg2OC01LjczNSA1LjczNSA1LjczNSA1LjczNS0yLjg2OCAyLjg2Ny01LjczNS01LjczNS01LjczNSA1LjczNS0yLjg2Ny0yLjg2NyA1LjczNS01LjczNS01LjczNS01LjczNXpcIi8+PC9zdmc+YCxcclxuICAgICAgbXVsdGlwbGUxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTI0LjUyIDI2LjM5aC05LjQ0M2wtMi45MTgtOC45ODIgNy42NC01LjU1IDcuNjQgNS41NTEtMi45MTkgOC45OHpcIi8+PC9zdmc+YCxcclxuICAgICAgbXVsdGlwbGUyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yNC41MiAyNi4zOWgtOS40NDNsLTIuOTE4LTguOTgyIDcuNjQtNS41NSA3LjY0IDUuNTUxLTIuOTE5IDguOTh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHBhcmFsbGVsMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xMS4zNDQgMTcuMjAzdjUuNjI1aDUuODZ2Ni4zMjhoNS42MjR2LTYuMzI4aDYuMzI4di01LjYyNWgtNi4zMjh2LTUuODZoLTUuNjI1djUuODZ6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHBhcmFsbGVsMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMzQ0IDE3LjIwM3Y1LjYyNWg1Ljg2djYuMzI4aDUuNjI0di02LjMyOGg2LjMyOHYtNS42MjVoLTYuMzI4di01Ljg2aC01LjYyNXY1Ljg2elwiLz48L3N2Zz5gXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGljb25zID0ge307XHJcblxyXG4gICAgT2JqZWN0LmtleXMoc3ZnSWNvbnMpLmZvckVhY2goKGljb25OYW1lKSA9PiB7XHJcbiAgICAgIGljb25zW2ljb25OYW1lXSA9IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnSWNvbnNbaWNvbk5hbWVdKX1gO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaWNvbnM7XHJcbiAgfVxyXG5cclxuICBsb2FkUHJvY2Vzc0RpYWdyYW0oanNvbkNvbnRlbnQ/OiBzdHJpbmcpIHtcclxuICAgIGlmICghanNvbkNvbnRlbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZ3JhcGguZnJvbUpTT04oanNvbkNvbnRlbnQpO1xyXG4gIH1cclxuXHJcbiAgYWRkSXRlbVRlbXBsYXRlKGZsb3dDaGFydElkPzogc3RyaW5nLCBkaWFncmFtVGVtcGxhdGU/OiBhbnkpIHtcclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICAgIGluZGV4OiAxLFxyXG4gICAgICAgICAgY29udGVudDogZGlhZ3JhbVRlbXBsYXRlLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgIGZsb3dDaGFydElkLFxyXG4gICAgICAgICAgbmFtZTogZGlhZ3JhbVRlbXBsYXRlLm5hbWUsXHJcbiAgICAgICAgICBqc29uQ29udGVudDogZGlhZ3JhbVRlbXBsYXRlLmpzb25Db250ZW50LFxyXG4gICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdEl0ZW0oZmxvd0NoYXJ0SWQ/OiBzdHJpbmcpIHtcclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzKSB7XHJcbiAgICAgIGNvbnN0IGFyclNlbGVjdCA9IHRvb2xiYXJDb25maWcudG9vbHMuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0udHlwZSA9PT0gJ3NlbGVjdC1ib3gnO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKGFyclNlbGVjdCkge1xyXG4gICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnNwbGljZShcclxuICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoaSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaS5mbG93Q2hhcnRJZCA9PT0gZmxvd0NoYXJ0SWQ7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIDFcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZENlbGxWaWV3KGNlbGxWaWV3KSB7XHJcbiAgICBpZiAoY2VsbFZpZXcpIHtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBjZWxsVmlldztcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMudHlwZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IG51bGw7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gJyc7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSUQsICcqJyk7XHJcbiAgfVxyXG5cclxuICBnZXRUZW1wR3JhcGgoKSB7XHJcbiAgICBpZiAodGhpcy5qc29uVGVtcENvbnRlbnQpIHtcclxuICAgICAgdGhpcy5sb2FkUHJvY2Vzc0RpYWdyYW0oSlNPTi5wYXJzZSh0aGlzLmpzb25UZW1wQ29udGVudCkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1RlbXAgPSB0cnVlO1xyXG4gICAgdGhpcy5pc1Jlc2V0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldE9yaWdpbkZvclNlbGYoKSB7XHJcbiAgICByZXR1cm4gJyonO1xyXG4gIH1cclxuXHJcbiAgc2V0RGVmYXVsdFNlbGVjdGVkVmFsdWUoKSB7XHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtc2VsZWN0aW9uYClbMF07XHJcbiAgICAgICAgbGlzdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LW9wdGlvbi1jb250ZW50YClbMF0uaW5uZXJIVE1MID0gRmxvd0NoYXJ0Q29uc3QuU0VMRUNUX1RFTVBMQVRFO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgaXNTaG93Q29uZmlybU1lc3NhZ2UoKSB7XHJcbiAgICBjb25zdCBteUdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgIGNvbnN0IGpzb24gPSBteUdyYXBoLnRvSlNPTigpO1xyXG4gICAgaWYgKGpzb24uY2VsbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0gPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJhbnNpdGlvblBvaW50KGpzb25Db250ZW50OiBvYmplY3QsIHBhcGVyU2Nyb2xsZXI6IGFueSkge1xyXG4gICAgaWYgKGpzb25Db250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGNlbGxzID0ganNvbkNvbnRlbnRbYGNlbGxzYF07XHJcbiAgICAgIGlmIChjZWxscykge1xyXG4gICAgICAgIGxldCB4ID0gMDtcclxuICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGUucG9zaXRpb24gJiYgZS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgICB5ID0gZS5wb3NpdGlvbi55O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnggPCB4KSB7XHJcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZS5wb3NpdGlvbi55IDwgeSkge1xyXG4gICAgICAgICAgICAgIHkgPSBlLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHggIT09IDAgJiYgeSAhPT0gMCkge1xyXG4gICAgICAgICAgeCA9IHggPiAyMCA/IHggLSAyMCA6IHg7XHJcbiAgICAgICAgICB5ID0geSA+IDIwID8geSAtIDIwIDogeTtcclxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIudHJhbnNpdGlvblRvUG9pbnQoeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuU2hhcGVGdW5jdGlvbmFsaXR5KExBTkc6IGFueSkge1xyXG4gICAgY29uc3QgbXlDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgaWYgKCEhbXlDZWxsVmlldykge1xyXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcclxuICAgICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORyk7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBteUNlbGxWaWV3Lm1vZGVsO1xyXG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgICAgY2VsbCxcclxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxyXG4gICAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRab29tVG9GaXQoZWRpdE1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb21Ub0ZpdCh7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQYXBlckNlbnRlcihlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvQ2VudGVyKHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBhcGVyVG9wTGVmdChlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvVG9wTGVmdCh7IHBhZGRpbmc6IDUwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTY3JvbGxUb0NvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tgZ3JhcGhgXTtcclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgaWYgKGdyYXBoICYmIHBhcGVyU2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QganNvbkNvbnRlbnRPYmogPSBncmFwaC50b0pTT04oKTtcclxuICAgICAgaWYgKGpzb25Db250ZW50T2JqICYmIGpzb25Db250ZW50T2JqLmNlbGxzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLnNjcm9sbFRvQ29udGVudCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuY2VudGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlVGV4dEluc2lkZShjZWxsOiBhbnkpIHtcclxuICAgIGlmIChjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRXZlbnQnKSB7XHJcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICcyMCUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICcyMCUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZXaWR0aCA9ICc3MCUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZkhlaWdodCA9ICc3MCUnO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuR2F0ZXdheScgfHxcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkNvbnZlcnNhdGlvbicgfHxcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkRhdGFPYmplY3QnIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhU3RvcmUnXHJcbiAgICApIHtcclxuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAndG9wJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VMaW5rTGFiZWwoY2VsbDogYW55LCBkZWZTaXplOiBudW1iZXIpIHtcclxuICAgIGlmIChjZWxsLmlzTGluaygpKSB7XHJcbiAgICAgIGxldCBzaXplID0gZGVmU2l6ZTtcclxuICAgICAgbGV0IHJlZlBvcyA9IDA7XHJcbiAgICAgIGNvbnN0IGxpbmtJZCA9IGNlbGwuaWQ7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXHJcbiAgICAgIGdyYXBoLmdldExpbmtzKCkuZXZlcnkoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAobGlua0lkID09PSBlLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZlBvcyArPSAxO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXS5hdHRyaWJ1dGVzLmF0dHJzLnRleHQgJiZcclxuICAgICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10uYXR0cmlidXRlcy5hdHRycy50ZXh0Wydmb250LXNpemUnXVxyXG4gICAgICApIHtcclxuICAgICAgICBzaXplID0gZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ107XHJcbiAgICAgIH1cclxuICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLnByb3AoJ2xhYmVscy8wL2F0dHJzL2xhYmVsL2ZvbnRTaXplJywgc2l6ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUFsbGlnbWVudChjZWxsOiBhbnksIG9wdDogYW55KSB7XHJcbiAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgb3B0LmRpcmVjdGlvbiAmJlxyXG4gICAgICAob3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcclxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAndG9wLXJpZ2h0JyB8fFxyXG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tcmlnaHQnIHx8XHJcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS1sZWZ0JylcclxuICAgICkge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IGhlYWRlckxhYmVsQW5jaG9yID0gY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsWyd0ZXh0LWFuY2hvciddO1xyXG4gICAgICB0aGlzLnNldEhlYWRlckF0dHJpYnV0ZShjZWxsLCBoZWFkZXJMYWJlbEFuY2hvciwgaGVpZ2h0KTtcclxuXHJcbiAgICAgIC8vIHVwZGF0ZSBsYXN0IGxhbmUgdmFsdWVcclxuICAgICAgaWYgKCF0aGlzLmlzVW5kZWZpbmVkU2l6ZShjZWxsLmF0dHJpYnV0ZXMpKSB7XHJcbiAgICAgICAgY29uc3QgaCA9IGNlbGwuYXR0cmlidXRlcy5zaXplLmhlaWdodDtcclxuICAgICAgICBjb25zdCB0ID0gdGhpcy5nZXRUb3RhbExhbmVIZWlnaHQoY2VsbC5hdHRyaWJ1dGVzKTtcclxuICAgICAgICBjb25zdCBiID0gaCAtIHQ7XHJcbiAgICAgICAgaWYgKGIgPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBzID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLnNsaWNlKC0xKVswXS5zaXplICsgYjtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5hdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICBjZWxsLmF0dHJpYnV0ZXMubGFuZXNbaW5kZXhdLnNpemUgPSBzO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGxhbmUgPSBgbGFuZXNfJHtpbmRleH1gO1xyXG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnNpemUgPSBzO1xyXG4gICAgICAgICAgY2VsbC5tZXRyaWNzLmxhbmVzW2xhbmVdLnRha2VuVXBTcGFjZUJ5TGFuZUFuZFN1YmxhbmVzID0gcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcclxuXHJcbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKG9wdC5wcm9wZXJ0eVBhdGggJiYgb3B0LnByb3BlcnR5UGF0aCA9PT0gJ2F0dHJzL2hlYWRlckxhYmVsL3RleHQtYW5jaG9yJykge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgIGNvbnN0IHRleHRBbmNob3IgPSBvcHQucHJvcGVydHlWYWx1ZTtcclxuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgdGV4dEFuY2hvciwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEhlYWRlckF0dHJpYnV0ZShjZWxsOiBhbnksIHRleHRBbmNob3I6IHN0cmluZywgaGVpZ2h0OiBudW1iZXIpIHtcclxuICAgIHN3aXRjaCAodGV4dEFuY2hvcikge1xyXG4gICAgICBjYXNlICdlbmQnOlxyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gODtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnbWlkZGxlJzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAvIDI7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IGhlaWdodCAtIDg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNVbmRlZmluZWRTaXplKGF0dHJpYnV0ZXMpIHtcclxuICAgIGxldCBiUmVzdWx0ID0gZmFsc2U7XHJcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXR0cmlidXRlcy5sYW5lcy5ldmVyeSgoZSkgPT4ge1xyXG4gICAgICAgIGlmICghZS5zaXplKSB7XHJcbiAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcykge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhdHRyaWJ1dGVzLmxhbmVzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICBpZiAoZS5zaXplKSB7XHJcbiAgICAgICAgICB0b3RhbCArPSBlLnNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0b3RhbDtcclxuICB9XHJcbn1cclxuIl19
|
1225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvc2VydmljZXMvcW1zLWNrZWRpdG9yLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLGlCQUFpQixNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sZUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFLN0UsSUFBSSxLQUFVLENBQUM7QUFDZixJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksYUFBa0IsQ0FBQztBQUN2QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUlqQyxNQUFNLE9BQU8sV0FBVztJQUh4QjtRQUlTLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLFdBQU0sR0FBRyxJQUFJLENBQUM7UUFDZCxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLHVCQUFrQixHQUFHLEtBQUssQ0FB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QUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDVixLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztpQkFDakI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzs7O1lBbHlDRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFycyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCAqIGFzICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgSW5zcGVjdG9yRnVuY3Rpb24gZnJvbSAnLi4vY29tbW9uL2JwbW4vaW5zcGVjdG9yLmZ1bmN0aW9uJztcclxuaW1wb3J0IFRvb2xiYXJGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vYnBtbi90b29sYmFyLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRmxvd2NoYXJ0LmNvbnN0JztcclxuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tICcuLi9jb21tb24vZW51bXMvZmxvd2NoYXJ0LXZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSAnLi4vY29tbW9uL2hlbHBlci9ndWlkSGVscGVyJztcclxuXHJcbi8qIERlY2xhcmUgam9pbnRqcyBvYmplY3QgKi9cclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueTtcclxubGV0IGdyYXBoOiBhbnk7XHJcbmxldCBwYXBlcjogYW55O1xyXG5sZXQgdG9vbGJhckNvbmZpZzogYW55O1xyXG5jb25zdCBicG1uMiA9IGpvaW50LnNoYXBlcy5icG1uMjtcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQnBtblNlcnZpY2Uge1xyXG4gIHB1YmxpYyBpc1NhdmVBc1RlbXBsYXRlID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRGVsZXRlVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1RlbXAgPSB0cnVlO1xyXG4gIHB1YmxpYyBqc29uVGVtcENvbnRlbnQgPSAnJztcclxuICBwdWJsaWMgaXNSZXNldCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1NlbGVjdGVkVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMganNvbk9yaWdpbmFsQ29udGVudCA9ICcnO1xyXG4gIHB1YmxpYyBpc0Z1bGxTY3JlZW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNFeHBhbmRlZFBhbmVsID0gdHJ1ZTtcclxuXHJcbiAgYnVpbGREaWFncmFtKFxyXG4gICAgZGlhZ3JhbVRlbXBsYXRlczogYW55LFxyXG4gICAgZGlhZ3JhbVRlbXBsYXRlOiBhbnksXHJcbiAgICBicG1uVGhlbWU6IHN0cmluZyxcclxuICAgIGpzb25Db250ZW50OiBhbnksXHJcbiAgICBlZGl0TW9kZTogYW55LFxyXG4gICAgTEFORzogYW55XHJcbiAgKSB7XHJcbiAgICB3aW5kb3dbYElTX05PVF9TSE9XX0FHQUlOYF0gPSBmYWxzZTtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5FRElUX01PREVdID0gZWRpdE1vZGU7XHJcbiAgICBqb2ludC5zZXRUaGVtZShicG1uVGhlbWUpO1xyXG5cclxuICAgIGlmIChqc29uQ29udGVudCkge1xyXG4gICAgICBqc29uQ29udGVudCA9IEpTT04ucGFyc2UoanNvbkNvbnRlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAganNvbkNvbnRlbnQgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBnZEF1dGggPSB3aW5kb3dbYGdkQXV0aGBdO1xyXG4gICAgY29uc3QgZ2RMb2FkID0gd2luZG93W2BnZExvYWRgXTtcclxuICAgIGNvbnN0IGdkU2F2ZSA9IHdpbmRvd1tgZ2RTYXZlYF07XHJcbiAgICBjb25zdCBpbnB1dHMgPSBJbnNwZWN0b3JGdW5jdGlvbi5nZXRJbnNwZWN0b3JDb25maWd1cmF0aW9uKGJwbW4yLCBMQU5HKTtcclxuXHJcbiAgICBsZXQgZnJlZVRyYW5zZm9ybSA9IG51bGw7XHJcblxyXG4gICAgdG9vbGJhckNvbmZpZyA9IFRvb2xiYXJGdW5jdGlvbi5nZXRUb29sYmFyQ29uZmlndXJhdGlvbihMQU5HKTtcclxuICAgIC8qIFFNUy0xNDA0OiBDdXN0b21pemF0aW9uOiBBZGQgdGVtcGxhdGUgbGlzdCAqL1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMgJiYgZGlhZ3JhbVRlbXBsYXRlcykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICBkaWFncmFtVGVtcGxhdGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICAgICAgaW5kZXg6IGl0ZW0uaW5kZXgsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0udGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICBmbG93Q2hhcnRJZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgbmFtZTogaXRlbS50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICAgIGpzb25Db250ZW50OiBpdGVtLmpzb25Db250ZW50LFxyXG4gICAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGFyclNlbGVjdFswXS5vcHRpb25zLmZpbmRJbmRleCgoeCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geC5pbmRleCA9PT0gb3B0aW9uLmluZGV4O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdyYXBoID0gbmV3IGpvaW50LmRpYS5HcmFwaCh7IHR5cGU6ICdicG1uJyB9KTtcclxuICAgIGNvbnN0IGNvbW1hbmRNYW5hZ2VyID0gbmV3IGpvaW50LmRpYS5Db21tYW5kTWFuYWdlcih7IGdyYXBoIH0pO1xyXG4gICAgY29uc3Qga2V5Ym9hcmQgPSBuZXcgam9pbnQudWkuS2V5Ym9hcmQoKTtcclxuICAgIGNvbnN0IGNsaXBib2FyZCA9IG5ldyBqb2ludC51aS5DbGlwYm9hcmQoKTtcclxuXHJcbiAgICBwYXBlciA9IG5ldyBqb2ludC5kaWEuUGFwZXIoe1xyXG4gICAgICB3aWR0aDogODAwLFxyXG4gICAgICBoZWlnaHQ6IDYwMCxcclxuICAgICAgbW9kZWw6IGdyYXBoLFxyXG4gICAgICBncmlkU2l6ZTogMTAsXHJcbiAgICAgIGRyYXdHcmlkOiB0cnVlLFxyXG4gICAgICBhc3luYzogdHJ1ZSxcclxuICAgICAgc29ydGluZzogam9pbnQuZGlhLlBhcGVyLnNvcnRpbmcuQVBQUk9YLFxyXG4gICAgICBpbnRlcmFjdGl2ZTogeyBsaW5rTW92ZTogZmFsc2UgfSxcclxuICAgICAgc25hcExhYmVsczogdHJ1ZSxcclxuICAgICAgLy8gQ29ubmVjdGlvbnNcclxuICAgICAgZGVmYXVsdExpbmsoZWxlbWVudFZpZXcpIHtcclxuICAgICAgICByZXR1cm4gbmV3IGJwbW4yLkZsb3coe1xyXG4gICAgICAgICAgejogZWxlbWVudFZpZXcubW9kZWwuZ2V0KCd6JykgLSAxLFxyXG4gICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgbGluZToge1xyXG4gICAgICAgICAgICAgIGZsb3dUeXBlOiAnc2VxdWVuY2UnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgdmFsaWRhdGVDb25uZWN0aW9uKGNlbGxWaWV3UywgbWFnbmV0UywgY2VsbFZpZXdULCBtYWduZXRULCBlbmQpIHtcclxuICAgICAgICBjb25zdCBzb3VyY2UgPSBjZWxsVmlld1MubW9kZWw7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gY2VsbFZpZXdULm1vZGVsO1xyXG4gICAgICAgIC8vIGRvbid0IGFsbG93IGxvb3AgbGlua3NcclxuICAgICAgICBpZiAoc291cmNlID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbGluayB0byBsaW5rIGNvbm5lY3Rpb25cclxuICAgICAgICBpZiAoc291cmNlLmlzTGluaygpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXQuaXNMaW5rKCkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgZ3JvdXAgY29ubmVjdGlvbnNcclxuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlLmdldCgndHlwZScpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFR5cGUgPSB0YXJnZXQuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdicG1uMi5Hcm91cCcgfHwgdGFyZ2V0VHlwZSA9PT0gJ2JwbW4yLkdyb3VwJykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdEFuY2hvcjoge1xyXG4gICAgICAgIG5hbWU6ICdwZXJwZW5kaWN1bGFyJ1xyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0Q29ubmVjdGlvblBvaW50OiB7XHJcbiAgICAgICAgbmFtZTogJ2JvdW5kYXJ5JyxcclxuICAgICAgICBhcmdzOiB7IHN0cm9rZTogdHJ1ZSB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIEVtYmVkZGluZ1xyXG4gICAgICBlbWJlZGRpbmdNb2RlOiB0cnVlLFxyXG4gICAgICBmcm9udFBhcmVudE9ubHk6IGZhbHNlLFxyXG4gICAgICB2YWxpZGF0ZUVtYmVkZGluZyhjaGlsZFZpZXcsIHBhcmVudFZpZXcpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRUeXBlID0gcGFyZW50Vmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBjb25zdCBjaGlsZFR5cGUgPSBjaGlsZFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgaWYgKHBhcmVudFR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnICYmIGNoaWxkVHlwZSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkFjdGl2aXR5JyAmJiBjaGlsZFR5cGUgPT09ICdicG1uMi5FdmVudCcpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIEhpZ2hsaWdodGluZ1xyXG4gICAgICBoaWdobGlnaHRpbmc6IHtcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBuYW1lOiAnbWFzaycsXHJcbiAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnIzM0OThkYicsXHJcbiAgICAgICAgICAgICAgJ3N0cm9rZS13aWR0aCc6IDMsXHJcbiAgICAgICAgICAgICAgJ3N0cm9rZS1saW5lam9pbic6ICdyb3VuZCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkub24oe1xyXG4gICAgICAnYmxhbms6cG9pbnRlcmRvd24nOiAoZXZ0LCB4LCB5KSA9PiB7XHJcbiAgICAgICAgY2xvc2VUb29scygpO1xyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgLy8gc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgaWYgKGtleWJvYXJkLmlzQWN0aXZlKCdzaGlmdCcsIGV2dCkpIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5zdGFydFNlbGVjdGluZyhldnQsIHgsIHkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgICdibGFuazpjb250ZXh0bWVudSc6IChldnQsIHgsIHkpID0+IHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2NlbGw6cG9pbnRlcnVwJzogKGNlbGxWaWV3KSA9PiB7XHJcbiAgICAgICAgb3BlblRvb2xzKGNlbGxWaWV3KTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbFZpZXcoY2VsbFZpZXcpO1xyXG5cclxuICAgICAgfSxcclxuXHJcbiAgICAgICdsaW5rOm1vdXNlZW50ZXInOiAobGlua1ZpZXcpID0+IHtcclxuICAgICAgICAvLyBPcGVuIHRvb2wgb25seSBpZiB0aGVyZSBpcyBub25lIHlldFxyXG4gICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygpKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBucyA9IGpvaW50LmxpbmtUb29scztcclxuICAgICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICAgICAgICBuYW1lOiAnbGluay1ob3ZlcicsXHJcbiAgICAgICAgICB0b29sczogW1xyXG4gICAgICAgICAgICBuZXcgbnMuVmVydGljZXMoeyB2ZXJ0ZXhBZGRpbmc6IGZhbHNlIH0pLFxyXG4gICAgICAgICAgICBuZXcgbnMuU291cmNlQXJyb3doZWFkKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5UYXJnZXRBcnJvd2hlYWQoKVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsaW5rVmlldy5hZGRUb29scyh0b29sc1ZpZXcpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2xpbms6bW91c2VsZWF2ZSc6IChsaW5rVmlldykgPT4ge1xyXG4gICAgICAgIC8vIFJlbW92ZSBvbmx5IHRoZSBob3ZlciB0b29sLCBub3QgdGhlIHBvaW50ZXJkb3duIHRvb2xcclxuICAgICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoJ2xpbmstaG92ZXInKSkge1xyXG4gICAgICAgICAgbGlua1ZpZXcucmVtb3ZlVG9vbHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnbGluazpjb25uZWN0JzogKGxpbmtWaWV3KSA9PiB7XHJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBsaW5rIHR5cGUgYmFzZWQgb24gdGhlIGNvbm5lY3RlZCBlbGVtZW50c1xyXG4gICAgICAgIGNvbnN0IGxpbmsgPSBsaW5rVmlldy5tb2RlbDtcclxuICAgICAgICBjb25zdCBzb3VyY2UgPSBsaW5rLmdldFNvdXJjZUNlbGwoKTtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBsaW5rLmdldFRhcmdldENlbGwoKTtcclxuICAgICAgICBpZiAoIXNvdXJjZSB8fCAhdGFyZ2V0KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmsuc2V0KCd6JywgLTEpO1xyXG4gICAgICAgIGNvbnN0IHR5cGVzID0gW3NvdXJjZS5nZXQoJ3R5cGUnKSwgdGFyZ2V0LmdldCgndHlwZScpXTtcclxuICAgICAgICBjb25zdCBsaW5rVHlwZSA9IGxpbmsuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkFubm90YXRpb24nKSA+IC0xKSB7XHJcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5Bbm5vdGF0aW9uTGluaycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkFubm90YXRpb25MaW5rKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkNvbnZlcnNhdGlvbicpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkNvbnZlcnNhdGlvbkxpbmsnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5Db252ZXJzYXRpb25MaW5rKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkRhdGFPYmplY3QnKSA+IC0xKSB7XHJcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5EYXRhQXNzb2NpYXRpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuRGF0YVN0b3JlJykgPiAtMSkge1xyXG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRGF0YUFzc29jaWF0aW9uKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxpbmtUeXBlICE9PSAnYnBtbjIuRmxvdycpIHtcclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5GbG93KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNuYXBsaW5lcyA9IG5ldyBqb2ludC51aS5TbmFwbGluZXMoeyBwYXBlciB9KTtcclxuXHJcbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gbmV3IGpvaW50LnVpLlBhcGVyU2Nyb2xsZXIoe1xyXG4gICAgICBhdXRvUmVzaXplUGFwZXI6IHRydWUsXHJcbiAgICAgIHBhZGRpbmc6IDIwLFxyXG4gICAgICBwYXBlcixcclxuICAgICAgc2Nyb2xsV2hpbGVEcmFnZ2luZzogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgcGFwZXJTY3JvbGxlci4kZWwuYXBwZW5kVG8oJyNwYXBlci1jb250YWluZXInKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XHJcbiAgICBwYXBlclNjcm9sbGVyLnJlbmRlcigpLmNlbnRlcigpO1xyXG5cclxuICAgIHBhcGVyLm9uKCdibGFuazptb3VzZXdoZWVsJywgXy5wYXJ0aWFsKG9uTW91c2V3aGVlbCwgbnVsbCksIHRoaXMpO1xyXG4gICAgcGFwZXIub24oJ2NlbGw6bW91c2V3aGVlbCcsIG9uTW91c2V3aGVlbCwgdGhpcyk7XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNld2hlZWwoY2VsbFZpZXcsIGV2dCwgeCwgeSwgZGVsdGEpIHtcclxuICAgICAgcGFwZXJTY3JvbGxlci56b29tKGRlbHRhICogMC4xLCB7IG1pbjogMC4yLCBtYXg6IDUsIGdyaWQ6IDAuMSwgb3g6IHgsIG95OiB5IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIFNFTEVDVElPTiAqL1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV3IGpvaW50LnVpLlNlbGVjdGlvbih7XHJcbiAgICAgIHBhcGVyLFxyXG4gICAgICBncmFwaCxcclxuICAgICAgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSxcclxuICAgICAgZmlsdGVyOiBbJ2JwbW4yLkhlYWRlcmVkUG9vbCddIC8vIGRvbid0IGFsbG93IHRvIHNlbGVjdCBhIHBvb2xcclxuICAgIH0pO1xyXG5cclxuICAgIC8qIFNURU5DSUwgKi9cclxuXHJcbiAgICBjb25zdCBzdGVuY2lsID0gbmV3IGpvaW50LnVpLlN0ZW5jaWwoe1xyXG4gICAgICBncmFwaCxcclxuICAgICAgcGFwZXIsXHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICBkcmFnRW5kQ2xvbmUoY2VsbCkge1xyXG4gICAgICAgIGNvbnN0IGNsb25lID0gY2VsbC5jbG9uZSgpO1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjbG9uZS5nZXQoJ3R5cGUnKTtcclxuXHJcbiAgICAgICAgLy8gc29tZSB0eXBlcyBvZiB0aGUgZWxlbWVudHMgbmVlZCByZXNpemluZyBhZnRlciB0aGV5IGFyZSBkcm9wcGVkXHJcbiAgICAgICAgY29uc3Qgc2l6ZU11bHRpcGxpZXIgPSB7ICdicG1uMi5IZWFkZXJlZFBvb2wnOiA4LCAnYnBtbi5DaG9yZW9ncmFwaHknOiAyIH1bdHlwZV07XHJcbiAgICAgICAgaWYgKHNpemVNdWx0aXBsaWVyKSB7XHJcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbFNpemUgPSBjbG9uZS5nZXQoJ3NpemUnKTtcclxuICAgICAgICAgIGNsb25lLnNldCgnc2l6ZScsIHtcclxuICAgICAgICAgICAgd2lkdGg6IG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNpemVNdWx0aXBsaWVyLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IG9yaWdpbmFsU2l6ZS5oZWlnaHQgKiBzaXplTXVsdGlwbGllclxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgICAgY2xvbmUuc2V0KCdwYWRkaW5nJywgeyB0b3A6IDAsIGxlZnQ6IDMwLCByaWdodDogMCwgYm90dG9tOiAwIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHN0ZW5jaWwucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjc3RlbmNpbC1jb250YWluZXInKTtcclxuXHJcbiAgICBzdGVuY2lsLmxvYWQoW1xyXG4gICAgICBuZXcgYnBtbjIuQWN0aXZpdHkoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5HYXRld2F5KHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuRXZlbnQoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Db252ZXJzYXRpb24oe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5EYXRhT2JqZWN0KHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuRGF0YVN0b3JlKHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuQW5ub3RhdGlvbih7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgZmlsbDogJyNmZmZmZmYnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuR3JvdXAoe1xyXG4gICAgICAgIHNpemU6IHtcclxuICAgICAgICAgIHdpZHRoOiA4MCxcclxuICAgICAgICAgIGhlaWdodDogODBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICB0ZXh0OiAnR3JvdXAnLFxyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIC8vIExlZ2FjeSBCUE1OIFNoYXBlc1xyXG4gICAgICBuZXcgYnBtbjIuSGVhZGVyZWRQb29sKHtcclxuICAgICAgICBwYWRkaW5nOiB7IHRvcDogMCwgbGVmdDogMTUsIHJpZ2h0OiAwLCBib3R0b206IDAgfSxcclxuICAgICAgICBzaXplOiB7IHdpZHRoOiA4MCwgaGVpZ2h0OiA1MCB9LFxyXG4gICAgICAgIGxhbmVzOiBbeyBsYWJlbDogJ0xhbmUgMScgfSwgeyBsYWJlbDogJ0xhbmUgMicgfV0sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGJvZHk6IHsgZmlsbDogJyNGRkZGRkYnIH0sXHJcbiAgICAgICAgICBoZWFkZXJMYWJlbDogeyB0ZXh0OiAnSGVhZGVyJyB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGpvaW50LnNoYXBlcy5icG1uLkNob3Jlb2dyYXBoeSh7XHJcbiAgICAgICAgcGFydGljaXBhbnRzOiBbJ1BhcnRpY2lwYW50IDEnLCAnUGFydGljaXBhbnQgMiddLFxyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBqb2ludC5zaGFwZXMuYnBtbi5NZXNzYWdlKHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgdGV4dDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIF0pO1xyXG5cclxuICAgIGpvaW50LmxheW91dC5HcmlkTGF5b3V0LmxheW91dChzdGVuY2lsLmdldEdyYXBoKCksIHtcclxuICAgICAgY29sdW1uczogMTAwLFxyXG4gICAgICBjb2x1bW5XaWR0aDogJ2NvbXBhY3QnLFxyXG4gICAgICBtYXJnaW5YOiAyMCxcclxuICAgICAgbWFyZ2luWTogMjAsXHJcbiAgICAgIGNvbHVtbkdhcDogNDAsXHJcbiAgICAgIHZlcnRpY2FsR2FwOiAyMCxcclxuICAgICAgcmVzaXplVG9GaXQ6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZXRTZWxlY3RlZENlbGxWaWV3ID0gdGhpcy5zZXRTZWxlY3RlZENlbGxWaWV3O1xyXG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxyXG4gICAgc3RlbmNpbC5vbignZWxlbWVudDpkcm9wJywgKGVsZW1lbnRWaWV3KSA9PiB7XHJcbiAgICAgIC8vIG9wZW4gaW5zcGVjdG9yIGFmdGVyIGEgbmV3IGVsZW1lbnQgZHJvcHBlZCBmcm9tIHN0ZW5jaWxcclxuICAgICAgb3BlblRvb2xzKGVsZW1lbnRWaWV3KTtcclxuICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhlbGVtZW50Vmlldyk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgLyogS0VZQk9BUkQgKi9cclxuICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuRWRpdCkge1xyXG4gICAgICBpbml0aWFsaXplS2V5Ym9hcmRTaG9ydGN1dHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBpbml0aWFsaXplS2V5Ym9hcmRTaG9ydGN1dHMoKSB7XHJcbiAgICAgIGtleWJvYXJkLm9uKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICdjdHJsK2MnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIENvcHkgYWxsIHNlbGVjdGVkIGVsZW1lbnRzIGFuZCB0aGVpciBhc3NvY2lhdGVkIGxpbmtzLlxyXG4gICAgICAgICAgICBjbGlwYm9hcmQuY29weUVsZW1lbnRzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLCBncmFwaCk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3YnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhc3RlZENlbGxzID0gY2xpcGJvYXJkLnBhc3RlQ2VsbHMoZ3JhcGgsIHtcclxuICAgICAgICAgICAgICB0cmFuc2xhdGU6IHsgZHg6IDIwLCBkeTogMjAgfSxcclxuICAgICAgICAgICAgICB1c2VMb2NhbFN0b3JhZ2U6IHRydWVcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IF8uZmlsdGVyKHBhc3RlZENlbGxzLCAoY2VsbCkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBjZWxsLmlzRWxlbWVudCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBwYXN0ZWQgZWxlbWVudHMgZ2V0IHNlbGVjdGVkIGltbWVkaWF0ZWx5LiBUaGlzIG1ha2VzIHRoZSBVWCBiZXR0ZXIgYXNcclxuICAgICAgICAgICAgLy8gdGhlIHVzZXIgY2FuIGltbWVkaWF0ZWx5IG1hbmlwdWxhdGUgdGhlIHBhc3RlZCBlbGVtZW50cy5cclxuICAgICAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoZWxlbWVudHMpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCt4IHNoaWZ0K2RlbGV0ZSc6ICgpID0+IHtcclxuICAgICAgICAgICAgY2xpcGJvYXJkLmN1dEVsZW1lbnRzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLCBncmFwaCk7XHJcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQ2VsbFZpZXcobnVsbCk7XHJcblxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnZGVsZXRlIGJhY2tzcGFjZSc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGdyYXBoLnJlbW92ZUNlbGxzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSk7XHJcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQ2VsbFZpZXcobnVsbCk7XHJcblxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCt6JzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICBjb21tYW5kTWFuYWdlci51bmRvKCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xyXG4gICAgICAgICAgICAgIHNldFNlbGVjdGVkQ2VsbFZpZXcobnVsbCk7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3knOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XHJcbiAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRDZWxsVmlldyhudWxsKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrYSc6ICgpID0+IHtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoZ3JhcGguZ2V0RWxlbWVudHMoKSk7XHJcbiAgICAgICAgICAgIHNldFNlbGVjdGVkQ2VsbFZpZXcobnVsbCk7XHJcblxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCtwbHVzJzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKDAuMiwgeyBtYXg6IDUsIGdyaWQ6IDAuMiB9KTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrbWludXMnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oLTAuMiwgeyBtaW46IDAuMiwgZ3JpZDogMC4yIH0pO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAna2V5dXA6c2hpZnQnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gb3BlblRvb2xzKGNlbGxWaWV3KSB7XHJcbiAgICAgIGlmICghY2VsbFZpZXcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY2xvc2VUb29scygpO1xyXG4gICAgICBjb25zdCBjZWxsID0gY2VsbFZpZXcubW9kZWw7XHJcbiAgICAgIGNvbnN0IHR5cGUgPSBjZWxsLmdldCgndHlwZScpO1xyXG4gICAgICAvLyBjb25zdCB0YWJsTmFtZSA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5UQUJfTkFNRV07XHJcbiAgICAgIC8vIGlmICh0YWJsTmFtZSA9PT0gRmxvd0NoYXJ0Q29uc3QuVEFCX0JQTU5fQ0hPUkVPR1JBUEhZKSB7XHJcbiAgICAgIC8vICAgY29uc3QgaW5zcGVjdG9yID0gam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgIC8vICAgICBjZWxsLFxyXG4gICAgICAvLyAgICAgaW5wdXRzOiBpbnB1dHNbdHlwZV0sXHJcbiAgICAgIC8vICAgICBncm91cHM6IHtcclxuICAgICAgLy8gICAgICAgZ2VuZXJhbDogeyBsYWJlbDogdHlwZSwgaW5kZXg6IDEgfSxcclxuICAgICAgLy8gICAgICAgZGVmYXVsdHM6IHsgaW5kZXg6IDIgfSxcclxuICAgICAgLy8gICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgLy8gICAgICAgYXBwZWFyYW5jZTogeyBpbmRleDogNCB9XHJcbiAgICAgIC8vICAgICB9XHJcbiAgICAgIC8vICAgfSk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jcmVhdGUoJyNpbnNwZWN0b3ItY29udGFpbmVyJywge1xyXG4gICAgICAgIGNlbGwsXHJcbiAgICAgICAgaW5wdXRzOiBpbnB1dHNbdHlwZV0sXHJcbiAgICAgICAgZ3JvdXBzOiB7XHJcbiAgICAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxyXG4gICAgICAgICAgZGVmYXVsdHM6IHsgaW5kZXg6IDIgfSxcclxuICAgICAgICAgIGZvbnRzaXplOiB7IGluZGV4OiAzIH0sXHJcbiAgICAgICAgICBhcHBlYXJhbmNlOiB7IGluZGV4OiA0IH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoW10pO1xyXG4gICAgICAvLyBBZGQgdGhlIGNlbGwgaW50byB0aGUgc2VsZWN0aW9uIGNvbGxlY3Rpb24gc2lsZW50bHlcclxuICAgICAgLy8gc28gbm8gc2VsZWN0aW9uIGJveCBpcyByZW5kZXJlZCBhYm92ZSB0aGUgY2VsbFZpZXcuXHJcbiAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLmFkZChjZWxsLCB7IHNpbGVudDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgIGlmIChjZWxsLmlzRWxlbWVudCgpKSB7XHJcbiAgICAgICAgbGV0IG1pblNpemU7XHJcblxyXG4gICAgICAgIGlmIChjZWxsIGluc3RhbmNlb2YgYnBtbjIuSGVhZGVyZWRQb29sKSB7XHJcbiAgICAgICAgICBtaW5TaXplID0gY2VsbC5nZXRNaW5pbWFsU2l6ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBtaW5TaXplID0geyB3aWR0aDogMzAsIGhlaWdodDogMzAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZyZWVUcmFuc2Zvcm0gPSBuZXcgam9pbnQudWkuRnJlZVRyYW5zZm9ybSh7XHJcbiAgICAgICAgICBjZWxsVmlldyxcclxuICAgICAgICAgIGFsbG93T3J0aG9nb25hbFJlc2l6ZTogZmFsc2UsXHJcbiAgICAgICAgICBhbGxvd1JvdGF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgIG1pbldpZHRoOiBtaW5TaXplLndpZHRoLFxyXG4gICAgICAgICAgbWluSGVpZ2h0OiBtaW5TaXplLmhlaWdodFxyXG4gICAgICAgIH0pLnJlbmRlcigpO1xyXG5cclxuICAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xyXG4gICAgICAgICAgY2VsbFZpZXcsXHJcbiAgICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgdHlwZTogJ3Rvb2xiYXInLFxyXG4gICAgICAgICAgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSxcclxuICAgICAgICAgIGJveENvbnRlbnQ6IChjZWxsVmlldykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY2VsbFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcclxuICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XHJcbiAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGhhbG8ucmVuZGVyKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjZWxsLmlzTGluaygpKSB7XHJcbiAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XHJcbiAgICAgICAgY29uc3QgdG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xyXG4gICAgICAgICAgbmFtZTogJ2xpbmstcG9pbnRlcmRvd24nLFxyXG4gICAgICAgICAgdG9vbHM6IFtcclxuICAgICAgICAgICAgbmV3IG5zLlZlcnRpY2VzKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBbmNob3IoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFuY2hvcigpLFxyXG4gICAgICAgICAgICBuZXcgbnMuU291cmNlQXJyb3doZWFkKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5UYXJnZXRBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlNlZ21lbnRzKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5Cb3VuZGFyeSh7IHBhZGRpbmc6IDE1IH0pLFxyXG4gICAgICAgICAgICBuZXcgbnMuUmVtb3ZlKHsgb2Zmc2V0OiAtMjAsIGRpc3RhbmNlOiA0MCB9KVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjZWxsVmlldy5hZGRUb29scyh0b29sc1ZpZXcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBRTVMtMjM2NDogc2hvdyBsaW5rIGFuZCBwb2l0ZXIgY2hhbmdlIHRvIGhhbmQgKi9cclxuICAgICAgLy8gaWYgKHdpbmRvd1tgZXZlbnRgXVtgdHlwZWBdID09PSAnbW91c2VvdmVyJyAmJiBlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xyXG4gICAgICAvLyAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBqb2ludC1lbGVtZW50YCk7XHJcbiAgICAgIC8vICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vICAgICBjb25zdCBzaGFwZUlkID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy5pZDtcclxuICAgICAgLy8gICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpwcmVmZXItZm9yLW9mXHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICAgICAgaWYgKGxpc3RbaV0uYXR0cmlidXRlc1swXS5ub2RlVmFsdWUgIT09IHNoYXBlSWQpIHtcclxuICAgICAgLy8gICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgLy8gICAgICAgICBjb250aW51ZTtcclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBjb25zdCBzaGFwZURldGFpbE1vZGVsID0gd2luZG93W2BTSEFQRV9ERVRBSUxfTU9ERUxgXTtcclxuICAgICAgLy8gICAgICAgaWYgKCFzaGFwZURldGFpbE1vZGVsKSB7XHJcbiAgICAgIC8vICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XHJcbiAgICAgIC8vICAgICAgICAgY29udGludWU7XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgY29uc3QgaW5kZXggPSBzaGFwZURldGFpbE1vZGVsLmZpbmRJbmRleCgoeCkgPT4ge1xyXG4gICAgICAvLyAgICAgICAgIHJldHVybiB4LnNoYXBlSWQgPT09IHNoYXBlSWQ7XHJcbiAgICAgIC8vICAgICAgIH0pO1xyXG4gICAgICAvLyAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgIC8vICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XHJcbiAgICAgIC8vICAgICAgICAgY29udGludWU7XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgICAgY29uc3Qgc2hhcGVEZXRhaWwgPSBzaGFwZURldGFpbE1vZGVsW2luZGV4XTtcclxuICAgICAgLy8gICAgICAgbGV0IGNvbm5lY3Rpb25OYW1lID0gJyc7XHJcbiAgICAgIC8vICAgICAgIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkFjdGl2aXR5KSB7XHJcbiAgICAgIC8vICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XHJcbiAgICAgIC8vICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnUFJPQ0VTUy5MSU5LX1RPX0FDVElWSVRZJyk7XHJcbiAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rKSB7XHJcbiAgICAgIC8vICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnUFJPQ0VTUy5MSU5LJyk7XHJcbiAgICAgIC8vICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2Vzcykge1xyXG4gICAgICAvLyAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcclxuICAgICAgLy8gICAgICAgICBzd2l0Y2ggKHNoYXBlRGV0YWlsLmRvY3VtZW50TW9kZWwucmVsYXRlZEl0ZW1zWzBdLml0ZW1UeXBlKSB7XHJcbiAgICAgIC8vICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5kb2N1bWVudDpcclxuICAgICAgLy8gICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnUFJPQ0VTUy5MSU5LX1RPX0RPQ1VNRU5UJyk7XHJcbiAgICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUucHJvY2VzczpcclxuICAgICAgLy8gICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSB0cmFuc2xhdGUuaW5zdGFudCgnUFJPQ0VTUy5MSU5LX1RPX1BST0NFU1MnKTtcclxuICAgICAgLy8gICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgIC8vICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5hcmVhOlxyXG4gICAgICAvLyAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTktfVE9fQVJFQScpO1xyXG4gICAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgICAgLy8gICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmhhbmRib29rOlxyXG4gICAgICAvLyAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IHRyYW5zbGF0ZS5pbnN0YW50KCdQUk9DRVNTLkxJTktfVE9fRk9MREVSJyk7XHJcbiAgICAgIC8vICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAvLyAgICAgICAgIH1cclxuICAgICAgLy8gICAgICAgfVxyXG4gICAgICAvLyAgICAgICBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCAhPT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BY3Rpdml0eSkge1xyXG4gICAgICAvLyAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAvLyAgICAgICB9XHJcbiAgICAgIC8vICAgICAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XHJcbiAgICAgIC8vICAgICAgICAgY2VsbFZpZXcsXHJcbiAgICAgIC8vICAgICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcclxuICAgICAgLy8gICAgICAgICBib3hDb250ZW50OiBjb25uZWN0aW9uTmFtZVxyXG4gICAgICAvLyAgICAgICB9KTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW5kZXIoKTtcclxuICAgICAgLy8gICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JlbW92ZScpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVzaXplJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdjbG9uZScpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xyXG4gICAgICAvLyAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XHJcbiAgICAgIC8vICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyb3RhdGUnKTtcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9XHJcblxyXG4gICAgICAvLyAgIGNvbnN0IHNoYXBlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25vLXJvdGF0aW9uJyk7XHJcbiAgICAgIC8vICAgaWYgKHNoYXBlRWxlbWVudCAmJiBzaGFwZUVsZW1lbnQubGVuZ3RoID4gMCkge1xyXG4gICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gICAgICAgaWYgKCFzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpKSB7XHJcbiAgICAgIC8vICAgICAgICAgc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5hZGQoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJyk7XHJcbiAgICAgIC8vICAgICAgIH1cclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0gZWxzZSBpZiAod2luZG93W2BldmVudGBdW2B0eXBlYF0gPT09ICdtb3VzZW91dCcgJiYgZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgLy8gICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xyXG4gICAgICAvLyAgICAgY2VsbFZpZXcsXHJcbiAgICAgIC8vICAgICB0aGVtZTogJ2RlZmF1bHQnLFxyXG4gICAgICAvLyAgICAgYm94Q29udGVudDogJydcclxuICAgICAgLy8gICB9KTtcclxuICAgICAgLy8gICBoYWxvLnJlbmRlcigpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZW1vdmUnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgncmVzaXplJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ2Nsb25lJyk7XHJcbiAgICAgIC8vICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xyXG4gICAgICAvLyAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcclxuICAgICAgLy8gICBoYWxvLnJlbW92ZUhhbmRsZSgncm90YXRlJyk7XHJcbiAgICAgIC8vICAgY29uc3Qgc2hhcGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tcm90YXRpb24nKTtcclxuICAgICAgLy8gICBpZiAoc2hhcGVFbGVtZW50ICYmIHNoYXBlRWxlbWVudC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIC8vICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlRWxlbWVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAvLyAgICAgICBzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LnJlbW92ZSgnam9pbnQtZnJlZS10cmFuc2Zvcm0nKTtcclxuICAgICAgLy8gICAgIH1cclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgIC8vICAgLyogUU1TLTIxMjU6IFNob3cgcHJvY2VzcyBjb25uZWN0IHR5cGUgKi9cclxuICAgICAgLy8gICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0hPV19DT05ORUNUWVBFXSA9IHRydWU7XHJcbiAgICAgIC8vICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XHJcbiAgICAgIC8vICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy50eXBlO1xyXG4gICAgICAvLyAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9GTE9XQ0hBUlRfTE9BRElOR10gPSB0cnVlO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8qIFFNUy0yMTI1OiBTaG93IHByb2Nlc3MgY29ubmVjdCB0eXBlICovXHJcblxyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0hPV19DT05ORUNUWVBFXSA9IHRydWU7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9GTE9XQ0hBUlRfTE9BRElOR10gPSB0cnVlO1xyXG4gICAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbiAqL1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdID0gcGFwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvc2VUb29scygpIHtcclxuICAgICAgcGFwZXIucmVtb3ZlVG9vbHMoKTtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XHJcbiAgICAgIGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0uY2xlYXIocGFwZXIpO1xyXG4gICAgICBmcmVlVHJhbnNmb3JtID0gbnVsbDtcclxuICAgICAgam9pbnQudWkuSGFsby5jbGVhcihwYXBlcik7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNTZWxlY3RlZENlbGxWaWV3SW5TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IG1vZGVscyA9IHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSB8fCBbXTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRTaGFwZUlkID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXTtcclxuICAgICAgcmV0dXJuICEhc2VsZWN0ZWRTaGFwZUlkICYmIG1vZGVscy5maWx0ZXIobW9kZWwgPT4gbW9kZWwuYXR0cmlidXRlcy5pZCA9PSBzZWxlY3RlZFNoYXBlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNob3dTdGF0dXMobWVzc2FnZSwgdHlwZSkge1xyXG4gICAgICAkKCcuc3RhdHVzJykucmVtb3ZlQ2xhc3MoJ2luZm8gZXJyb3Igc3VjY2VzcycpLmFkZENsYXNzKHR5cGUpLmh0bWwobWVzc2FnZSk7XHJcbiAgICAgICQoJyNzdGF0dXNiYXItY29udGFpbmVyJylcclxuICAgICAgICAuZGVxdWV1ZSgpXHJcbiAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxyXG4gICAgICAgIC5kZWxheSgzMDAwKVxyXG4gICAgICAgIC5xdWV1ZSgoKSA9PiB7XHJcbiAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZXBsYWNlTGluayhncmFwaCwgbGluaywgbGlua0NvbnN0cnVjdG9yKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXHJcbiAgICAgIGNvbnN0IGxpbmsyID0gbmV3IGxpbmtDb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgc291cmNlOiBsaW5rLnNvdXJjZSgpLFxyXG4gICAgICAgIHRhcmdldDogbGluay50YXJnZXQoKSxcclxuICAgICAgICB2ZXJ0aWNlczogbGluay52ZXJ0aWNlcygpXHJcbiAgICAgIH0pO1xyXG4gICAgICBsaW5rLnJlbW92ZSgpO1xyXG4gICAgICBsaW5rMi5zZXQoJ3onLCAtMSk7XHJcbiAgICAgIGxpbmsyLmFkZFRvKGdyYXBoKTtcclxuICAgIH1cclxuXHJcbiAgICBncmFwaC5vbignY2hhbmdlJywgKGNlbGwsIG9wdCkgPT4ge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlVGV4dEluc2lkZShjZWxsKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZUxpbmtMYWJlbChjZWxsLCAxMik7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VBbGxpZ21lbnQoY2VsbCwgb3B0KTtcclxuICAgICAgaWYgKCFvcHQuaW5zcGVjdG9yIHx8ICFmcmVlVHJhbnNmb3JtIHx8IGNlbGwuZ2V0KCd0eXBlJykgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1pblNpemUgPSBjZWxsLmdldE1pbmltYWxTaXplKCk7XHJcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5XaWR0aCA9IG1pblNpemUud2lkdGg7XHJcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5IZWlnaHQgPSBtaW5TaXplLmhlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qIFRPT0xCQVIgKi9cclxuICAgIGNvbnN0IHRvb2xiYXIgPSBuZXcgam9pbnQudWkuVG9vbGJhcih7XHJcbiAgICAgIHRvb2xzOiB0b29sYmFyQ29uZmlnLnRvb2xzLFxyXG4gICAgICByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgcGFwZXJTY3JvbGxlcixcclxuICAgICAgICBjb21tYW5kTWFuYWdlclxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b29sYmFyQ29tbWFuZHMgPSB7XHJcbiAgICAgIHRvSlNPTjogKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd0ZlYXR1cmVzID0gJ21lbnViYXI9bm8sbG9jYXRpb249bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9bm8nO1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd05hbWUgPSBfLnVuaXF1ZUlkKCdqc29uX291dHB1dCcpO1xyXG4gICAgICAgIGNvbnN0IGpzb25XaW5kb3cgPSB3aW5kb3cub3BlbignJywgd2luZG93TmFtZSwgd2luZG93RmVhdHVyZXMpO1xyXG5cclxuICAgICAgICBqc29uV2luZG93LmRvY3VtZW50LndyaXRlKEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGxvYWRHcmFwaDogKCkgPT4ge1xyXG4gICAgICAgIGdkQXV0aCgoKSA9PiB7XHJcbiAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkaW5nLi4nLCAnaW5mbycpO1xyXG4gICAgICAgICAgZ2RMb2FkKChuYW1lLCBjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgZ3JhcGguZnJvbUpTT04oanNvbik7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxGaWxlTmFtZSA9IDxIVE1MQnV0dG9uRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKTtcclxuICAgICAgICAgICAgICBlbEZpbGVOYW1lLnZhbHVlID0gbmFtZS5yZXBsYWNlKC8uanNvbiQvLCAnJyk7XHJcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnbG9hZGVkLicsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdmYWlsZWQuJywgJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIHRydWUpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2F2ZUdyYXBoOiAoKSA9PiB7XHJcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcclxuICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmluZy4uJywgJ2luZm8nKTtcclxuICAgICAgICAgIC8vIGxldCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJykudmFsdWU7XHJcbiAgICAgICAgICBjb25zdCBuYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xyXG4gICAgICAgICAgZ2RTYXZlKG5hbWUudmFsdWUsIEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKSwgKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdzYXZlZC4nLCAnc3VjY2VzcycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uU2VsZWN0ZWQ6IChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmIChldmVudC5qc29uQ29udGVudCkge1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX0ZMT1dDSEFSVF9JRF0gPSBldmVudC5mbG93Q2hhcnRJZDtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9KU09OX0NPTlRFTlRdID0gZXZlbnQuanNvbkNvbnRlbnQ7XHJcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuanNvbk9yaWdpbmFsQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKTtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5PUkdfSlNPTkNPTlRFTlRdID0gdGhpcy5qc29uT3JpZ2luYWxDb250ZW50O1xyXG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkNIQU5HSU5HX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbFZpZXcobnVsbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBvbkNsZWFyOiAoKSA9PiB7XHJcbiAgICAgICAgZ3JhcGguY2xlYXIoKTtcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkQ2VsbFZpZXcobnVsbCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uRGVsZXRlVGVtcGxhdGU6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TRUxFQ1RFRF9URU1QTEFURV07XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZFRlbXBsYXRlKSB7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuREVMRVRFX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5NVVNUX1NFTEVDVF9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIG9uU2F2ZUFzVGVtcGxhdGU6ICgpID0+IHtcclxuICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuU0FWRV9BU19URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25SZXNldFRvVGVtcFRlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LlJFU0VUX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgY2hhbmdlU25hcExpbmVzKGNoZWNrZWQpIHtcclxuICAgICAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICAgICAgc25hcGxpbmVzLnN0YXJ0TGlzdGVuaW5nKCk7XHJcbiAgICAgICAgICBzdGVuY2lsLm9wdGlvbnMuc25hcGxpbmVzID0gdGhpcy5zbmFwbGluZXM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNuYXBsaW5lcy5zdG9wTGlzdGVuaW5nKCk7XHJcbiAgICAgICAgICBzdGVuY2lsLm9wdGlvbnMuc25hcGxpbmVzID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBhcHBseU9uU2VsZWN0aW9uKG1ldGhvZCkge1xyXG4gICAgICAgIGdyYXBoLnN0YXJ0QmF0Y2goJ3NlbGVjdGlvbicpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLm1vZGVscy5mb3JFYWNoKChtb2RlbCkgPT4ge1xyXG4gICAgICAgICAgbW9kZWxbbWV0aG9kXSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGdyYXBoLnN0b3BCYXRjaCgnc2VsZWN0aW9uJyk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHRvZ2dsZUZ1bGxzY3JlZW46ICgpID0+IHtcclxuICAgICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNGdWxsU2NyZWVuKSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRePVwiY2RrLW92ZXJsYXktXCJdJylbMF0uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfY2RrLW92ZXJsYXknKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsZWZ0cGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyaWdodHBhbmVsJyk/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZFBhbmVsKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5hZGQoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwtZXhwYW5kcGFuZWwnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImNkay1vdmVybGF5LVwiXScpWzBdLmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX2Nkay1vdmVybGF5Jyk7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGVmdHBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmlnaHRwYW5lbCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYW5lbCcpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWRQYW5lbCkge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpPy5jbGFzc0xpc3QucmVtb3ZlKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYXBlcnBhbmVsJyk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJykuc3R5bGUuaGVpZ2h0ID0gJzQwMHB4JztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwtZXhwYW5kcGFuZWwnKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKS5zdHlsZS5oZWlnaHQgPSAnNTAwcHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRvb2xiYXIub24oe1xyXG4gICAgICAndG9qc29uOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b0pTT04sXHJcbiAgICAgICdsb2FkOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5sb2FkR3JhcGgsXHJcbiAgICAgICdzYXZlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5zYXZlR3JhcGgsXHJcbiAgICAgICdjbGVhcjpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25DbGVhcixcclxuICAgICAgJ3ByaW50OnBvaW50ZXJjbGljayc6IF8uYmluZChwYXBlci5wcmludCwgcGFwZXIpLFxyXG4gICAgICAnc2F2ZUFzVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uU2F2ZUFzVGVtcGxhdGUsXHJcbiAgICAgICdzZWxlY3RUZW1wbGF0ZTpvcHRpb246c2VsZWN0JzogdG9vbGJhckNvbW1hbmRzLm9uU2VsZWN0ZWQsXHJcbiAgICAgICdkZWxldGVUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25EZWxldGVUZW1wbGF0ZSxcclxuICAgICAgJ3Jlc2V0VG9UZW1wVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uUmVzZXRUb1RlbXBUZW1wbGF0ZSxcclxuICAgICAgJ3RvLWZyb250OnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5hcHBseU9uU2VsZWN0aW9uLmJpbmQodGhpcywgJ3RvRnJvbnQnKSxcclxuICAgICAgJ3RvLWJhY2s6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9CYWNrJyksXHJcbiAgICAgICdzbmFwbGluZTpjaGFuZ2UnOiB0b29sYmFyQ29tbWFuZHMuY2hhbmdlU25hcExpbmVzLmJpbmQodGhpcyksXHJcbiAgICAgICdncmlkLXNpemU6Y2hhbmdlJzogcGFwZXIuc2V0R3JpZFNpemUuYmluZChwYXBlciksXHJcbiAgICAgICdmdWxsc2NyZWVuOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b2dnbGVGdWxsc2NyZWVuXHJcbiAgICB9KTtcclxuXHJcbiAgICB0b29sYmFyLnJlbmRlcigpLiRlbC5hcHBlbmRUbygnI3Rvb2xiYXItY29udGFpbmVyJyk7XHJcblxyXG4gICAgLy8gY29uc3Qgem9vbVRvb2wgPSBuZXcgam9pbnQudWkuVG9vbGJhcih7XHJcbiAgICAvLyAgIC8vIGluaXRpIGFsaXplIHRvb2xzIHdpdGggZGVmYXVsdCBzZXR0aW5nc1xyXG4gICAgLy8gICB0b29sczogWyd6b29tVG9GaXQnLCAnem9vbUluJywgJ3pvb21PdXQnXSxcclxuICAgIC8vICAgcmVmZXJlbmNlczoge1xyXG4gICAgLy8gICAgIHBhcGVyU2Nyb2xsZXIsXHJcbiAgICAvLyAgICAgY29tbWFuZE1hbmFnZXJcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgLy8gem9vbVRvb2wucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjem9vbVRvb2xiYXInKTtcclxuXHJcbiAgICBuZXcgam9pbnQudWkuVG9vbHRpcCh7XHJcbiAgICAgIHRhcmdldDogJ1tkYXRhLXRvb2x0aXBdJyxcclxuICAgICAgY29udGVudChlbCkge1xyXG4gICAgICAgIHJldHVybiBlbC5kYXRhc2V0LnRvb2x0aXA7XHJcbiAgICAgIH0sXHJcbiAgICAgIHRvcDogJy5qb2ludC10b29sYmFyJyxcclxuICAgICAgcGFkZGluZzogMTAsXHJcbiAgICAgIGRpcmVjdGlvbjogJ3RvcCdcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENyZWF0ZSB0b29sdGlwcyBmb3IgYWxsIHRoZSBzaGFwZXMgaW4gc3RlbmNpbC5cclxuICAgIHN0ZW5jaWxcclxuICAgICAgLmdldEdyYXBoKClcclxuICAgICAgLmdldCgnY2VsbHMnKVxyXG4gICAgICAuZWFjaCgoY2VsbCkgPT4ge1xyXG4gICAgICAgIG5ldyBqb2ludC51aS5Ub29sdGlwKHtcclxuICAgICAgICAgIHRhcmdldDogYC5qb2ludC1zdGVuY2lsIFttb2RlbC1pZD1cIiR7Y2VsbC5pZH1cIl1gLFxyXG4gICAgICAgICAgY29udGVudDogY2VsbC5nZXQoJ3R5cGUnKS5zcGxpdCgnLicpWzFdLFxyXG4gICAgICAgICAgYm90dG9tOiAnLmpvaW50LXN0ZW5jaWwnLFxyXG4gICAgICAgICAgZGlyZWN0aW9uOiAnYm90dG9tJyxcclxuICAgICAgICAgIHBhZGRpbmc6IDBcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihqb2ludC5zaGFwZXMuYnBtbi5pY29ucywgdGhpcy5idWlsZE5ld0ljb25zKCkpO1xyXG4gICAgLyogTG9hZCAgcHJvY2VzcyBkaWdyYW0gKi9cclxuICAgIHRoaXMubG9hZFByb2Nlc3NEaWFncmFtKGpzb25Db250ZW50KTtcclxuICAgIHRoaXMuanNvbk9yaWdpbmFsQ29udGVudCA9IEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIucG9zaXRpb25Db250ZW50KCd0b3AtbGVmdCcsIHsgcGFkZGluZzogNTAsIHVzZU1vZGVsR2VvbWV0cnk6IHRydWUgfSk7XHJcblxyXG4gICAgLyogU2V0IGcgcmFwaCBvYmplY3QgKi9cclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF0gPSBncmFwaDtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl0gPSBwYXBlcjtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl0gPSBwYXBlclNjcm9sbGVyO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk9SR19KU09OQ09OVEVOVF0gPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuRElBR1JBTV9MT0FERUQsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkTmV3SWNvbnMoeyBjb2xvciA9ICcjMDAwJyB9ID0ge30pIHtcclxuICAgIGNvbnN0IHN2Z0ljb25zID0ge1xyXG4gICAgICBtZXNzYWdlMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIxMiAxMiAxNiAxNlwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjJcIiBkPVwiTTEyLjUgMTUuMzEzdjkuMzc0aDE1di05LjM3NXptMCAwbDcuNSA1LjYyNCA3LjUtNS42MjVcIi8+PC9zdmc+YCxcclxuICAgICAgbWVzc2FnZTI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMTIgMTIgMTYgMTZcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBkPVwiTTEyLjUgMTQuMzQ0bDcuNSA1LjYyNSA3LjUtNS42MjV6bTAgLjkzN3Y5LjM3NWgxNXYtOS4zNzVMMjAgMjAuOTA2elwiLz48L3N2Zz5gLFxyXG4gICAgICB0aW1lcjE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PGcgZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiPjxjaXJjbGUgY3g9XCIyMFwiIGN5PVwiMjBcIiByPVwiMTBcIi8+PHBhdGggZD1cIk0yMCAxMHYzbTUtMmwtMS41IDNtNS41IDFsLTMgMS41bTQgMy41aC0zbTIgNWwtMy0xLjVNMjUgMjlsLTEuNS0zTTIwIDMwdi0zbS01IDJsMS41LTNNMTEgMjVsMy0xLjVNMTAgMjBoM20tMi01bDMgMS41bTEtNS41bDEuNSAzbTUuNS0xbC0yIDdoNFwiLz48L2c+PC9zdmc+YCxcclxuICAgICAgY29uZGl0aW9uYWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjU2MyAxMS41NjNoMTYuODc0djE2Ljg3NEgxMS41NjNWMTEuNTYzbTIuODEzIDIuODEzaDExLjI1bS0xMS4yNSAzLjc1aDExLjI1bS0xMS4yNSAzLjc1aDExLjI1bS0xMS4yNSAzLjc1aDExLjI1elwiLz48L3N2Zz5gLFxyXG4gICAgICBsaW5rMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0xNC40MDYgMTguMTI1aDguNDM4di0yLjgxM0wyNy41MyAyMGwtNC42ODcgNC42ODh2LTIuODEzaC05LjM3NXYtMy43NVwiLz48L3N2Zz5gLFxyXG4gICAgICBsaW5rMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTQuNDA2IDE4LjEyNWg4LjQzOHYtMi44MTNMMjcuNTMgMjBsLTQuNjg3IDQuNjg4di0yLjgxM2gtOS4zNzV2LTMuNzVcIi8+PC9zdmc+YCxcclxuICAgICAgc2lnbmFsMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiICB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTMuMTcgMjQuODUxaDEzLjcwNmwtNi44NTMtMTEuODc5LTYuODU0IDExLjg4elwiLz48L3N2Zz5gLFxyXG4gICAgICBzaWduYWwyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTMuMTcgMjQuODUxaDEzLjcwNmwtNi44NTMtMTEuODc5LTYuODU0IDExLjg4elwiLz48L3N2Zz5gLFxyXG4gICAgICBlcnJvcjE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjYuNCAxNS40NTVsLTMuMjM4IDEyLjU4TDE3LjcgMTguMzcgMTMuNzYgMjMuOGwzLjQ3OC0xMi40MTIgNS41NzYgOC43MiAzLjU4Ni00LjY1MnpcIi8+PC9zdmc+YCxcclxuICAgICAgZXJyb3IyOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yNi40IDE1LjQ1NWwtMy4yMzggMTIuNThMMTcuNyAxOC4zNyAxMy43NiAyMy44bDMuNDc4LTEyLjQxMiA1LjU3NiA4LjcyIDMuNTg2LTQuNjUyelwiLz48L3N2Zz5gLFxyXG4gICAgICBlc2NhbGF0aW9uMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yMCAxMy4yMTlsNS42MjUgMTQuMDYyTDIwIDIwLjk1M2wtNS42MjUgNi4zMjh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGVzY2FsYXRpb24yOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCIke2NvbG9yfVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yMCAxMy4yMTlsNS42MjUgMTQuMDYyTDIwIDIwLjk1M2wtNS42MjUgNi4zMjh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHRlcm1pbmF0aW9uMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48Y2lyY2xlIGN4PVwiMjBcIiBjeT1cIjIwXCIgcj1cIjEwLjVcIiBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHRlcm1pbmF0aW9uMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48Y2lyY2xlIGN4PVwiMjBcIiBjeT1cIjIwXCIgcj1cIjEwLjVcIiBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz48L3N2Zz5gLFxyXG4gICAgICBjb21wZW5zYXRpb24xOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTE5IDEzLjQzOHYxMy4xMjRMMTIuNDM3IDIwIDE5IDEzLjQzN202LjU2MyAwdjEzLjEyNkwxOSAyMGw2LjU2My02LjU2M3pcIi8+PC9zdmc+YCxcclxuICAgICAgY29tcGVuc2F0aW9uMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTkgMTMuNDM4djEzLjEyNEwxMi40MzcgMjAgMTkgMTMuNDM3bTYuNTYzIDB2MTMuMTI2TDE5IDIwbDYuNTYzLTYuNTYzelwiLz48L3N2Zz5gLFxyXG4gICAgICBjYW5jZWwxOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjggOCAyNCAyNFwiPjxwYXRoIGZpbGw9XCJub25lXCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjI4NCAxNC4yNzRsMi44NjctMi44NjggNS43MzUgNS43MzUgNS43MzUtNS43MzUgMi44NjggMi44NjgtNS43MzUgNS43MzUgNS43MzUgNS43MzUtMi44NjggMi44NjctNS43MzUtNS43MzUtNS43MzUgNS43MzUtMi44NjctMi44NjcgNS43MzUtNS43MzUtNS43MzUtNS43MzV6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIGNhbmNlbDI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjI4NCAxNC4yNzRsMi44NjctMi44NjggNS43MzUgNS43MzUgNS43MzUtNS43MzUgMi44NjggMi44NjgtNS43MzUgNS43MzUgNS43MzUgNS43MzUtMi44NjggMi44NjctNS43MzUtNS43MzUtNS43MzUgNS43MzUtMi44NjctMi44NjcgNS43MzUtNS43MzUtNS43MzUtNS43MzV6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIG11bHRpcGxlMTogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwibm9uZVwiIHN0cm9rZT1cIiR7Y29sb3J9XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgZD1cIk0yNC41MiAyNi4zOWgtOS40NDNsLTIuOTE4LTguOTgyIDcuNjQtNS41NSA3LjY0IDUuNTUxLTIuOTE5IDguOTh6XCIvPjwvc3ZnPmAsXHJcbiAgICAgIG11bHRpcGxlMjogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCI4IDggMjQgMjRcIj48cGF0aCBmaWxsPVwiJHtjb2xvcn1cIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMjQuNTIgMjYuMzloLTkuNDQzbC0yLjkxOC04Ljk4MiA3LjY0LTUuNTUgNy42NCA1LjU1MS0yLjkxOSA4Ljk4elwiLz48L3N2Zz5gLFxyXG4gICAgICBwYXJhbGxlbDE6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIm5vbmVcIiBzdHJva2U9XCIke2NvbG9yfVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIGQ9XCJNMTEuMzQ0IDE3LjIwM3Y1LjYyNWg1Ljg2djYuMzI4aDUuNjI0di02LjMyOGg2LjMyOHYtNS42MjVoLTYuMzI4di01Ljg2aC01LjYyNXY1Ljg2elwiLz48L3N2Zz5gLFxyXG4gICAgICBwYXJhbGxlbDI6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiOCA4IDI0IDI0XCI+PHBhdGggZmlsbD1cIiR7Y29sb3J9XCIgc3Ryb2tlPVwiJHtjb2xvcn1cIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBkPVwiTTExLjM0NCAxNy4yMDN2NS42MjVoNS44NnY2LjMyOGg1LjYyNHYtNi4zMjhoNi4zMjh2LTUuNjI1aC02LjMyOHYtNS44NmgtNS42MjV2NS44NnpcIi8+PC9zdmc+YFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpY29ucyA9IHt9O1xyXG5cclxuICAgIE9iamVjdC5rZXlzKHN2Z0ljb25zKS5mb3JFYWNoKChpY29uTmFtZSkgPT4ge1xyXG4gICAgICBpY29uc1tpY29uTmFtZV0gPSBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KHN2Z0ljb25zW2ljb25OYW1lXSl9YDtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGljb25zO1xyXG4gIH1cclxuXHJcbiAgbG9hZFByb2Nlc3NEaWFncmFtKGpzb25Db250ZW50Pzogc3RyaW5nKSB7XHJcbiAgICBpZiAoIWpzb25Db250ZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGdyYXBoLmZyb21KU09OKGpzb25Db250ZW50KTtcclxuICB9XHJcblxyXG4gIGFkZEl0ZW1UZW1wbGF0ZShmbG93Q2hhcnRJZD86IHN0cmluZywgZGlhZ3JhbVRlbXBsYXRlPzogYW55KSB7XHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgICBpbmRleDogMSxcclxuICAgICAgICAgIGNvbnRlbnQ6IGRpYWdyYW1UZW1wbGF0ZS50ZW1wbGF0ZU5hbWUsXHJcbiAgICAgICAgICBmbG93Q2hhcnRJZCxcclxuICAgICAgICAgIG5hbWU6IGRpYWdyYW1UZW1wbGF0ZS5uYW1lLFxyXG4gICAgICAgICAganNvbkNvbnRlbnQ6IGRpYWdyYW1UZW1wbGF0ZS5qc29uQ29udGVudCxcclxuICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RJdGVtKGZsb3dDaGFydElkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5zcGxpY2UoXHJcbiAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGkuZmxvd0NoYXJ0SWQgPT09IGZsb3dDaGFydElkO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRDZWxsVmlldyhjZWxsVmlldykge1xyXG4gICAgaWYgKGNlbGxWaWV3KSB7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gY2VsbFZpZXc7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gJyc7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gICAgfVxyXG4gICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lELCAnKicpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcEdyYXBoKCkge1xyXG4gICAgaWYgKHRoaXMuanNvblRlbXBDb250ZW50KSB7XHJcbiAgICAgIHRoaXMubG9hZFByb2Nlc3NEaWFncmFtKEpTT04ucGFyc2UodGhpcy5qc29uVGVtcENvbnRlbnQpKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNUZW1wID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRPcmlnaW5Gb3JTZWxmKCkge1xyXG4gICAgcmV0dXJuICcqJztcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCkge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LXNlbGVjdGlvbmApWzBdO1xyXG4gICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IEZsb3dDaGFydENvbnN0LlNFTEVDVF9URU1QTEFURTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIGlzU2hvd0NvbmZpcm1NZXNzYWdlKCkge1xyXG4gICAgY29uc3QgbXlHcmFwaCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5HUkFQSF07XHJcbiAgICBjb25zdCBqc29uID0gbXlHcmFwaC50b0pTT04oKTtcclxuICAgIGlmIChqc29uLmNlbGxzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfTk9UX1NIT1dfQUdBSU5dID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfTk9UX1NIT1dfQUdBSU5dKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNldFRyYW5zaXRpb25Qb2ludChqc29uQ29udGVudDogb2JqZWN0LCBwYXBlclNjcm9sbGVyOiBhbnkpIHtcclxuICAgIGlmIChqc29uQ29udGVudCkge1xyXG4gICAgICBjb25zdCBjZWxscyA9IGpzb25Db250ZW50W2BjZWxsc2BdO1xyXG4gICAgICBpZiAoY2VsbHMpIHtcclxuICAgICAgICBsZXQgeCA9IDA7XHJcbiAgICAgICAgbGV0IHkgPSAwO1xyXG4gICAgICAgIGNlbGxzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgIGlmIChlLnBvc2l0aW9uICYmIGUucG9zaXRpb24pIHtcclxuICAgICAgICAgICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIHggPSBlLnBvc2l0aW9uLng7XHJcbiAgICAgICAgICAgICAgeSA9IGUucG9zaXRpb24ueTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZS5wb3NpdGlvbi54IDwgeCkge1xyXG4gICAgICAgICAgICAgIHggPSBlLnBvc2l0aW9uLng7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGUucG9zaXRpb24ueSA8IHkpIHtcclxuICAgICAgICAgICAgICB5ID0gZS5wb3NpdGlvbi55O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh4ICE9PSAwICYmIHkgIT09IDApIHtcclxuICAgICAgICAgIHggPSB4ID4gMjAgPyB4IC0gMjAgOiB4O1xyXG4gICAgICAgICAgeSA9IHkgPiAyMCA/IHkgLSAyMCA6IHk7XHJcbiAgICAgICAgICBwYXBlclNjcm9sbGVyLnRyYW5zaXRpb25Ub1BvaW50KHgsIHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblNoYXBlRnVuY3Rpb25hbGl0eShMQU5HOiBhbnkpIHtcclxuICAgIGNvbnN0IG15Q2VsbFZpZXcgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXTtcclxuICAgIGlmICghIW15Q2VsbFZpZXcpIHtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XHJcbiAgICAgIGNvbnN0IGlucHV0cyA9IEluc3BlY3RvckZ1bmN0aW9uLmdldEluc3BlY3RvckNvbmZpZ3VyYXRpb24oYnBtbjIsIExBTkcpO1xyXG4gICAgICBjb25zdCBjZWxsID0gbXlDZWxsVmlldy5tb2RlbDtcclxuICAgICAgY29uc3QgdHlwZSA9IGNlbGwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jcmVhdGUoJyNpbnNwZWN0b3ItY29udGFpbmVyJywge1xyXG4gICAgICAgIGNlbGwsXHJcbiAgICAgICAgaW5wdXRzOiBpbnB1dHNbdHlwZV0sXHJcbiAgICAgICAgZ3JvdXBzOiB7XHJcbiAgICAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxyXG4gICAgICAgICAgZGVmYXVsdHM6IHsgaW5kZXg6IDIgfSxcclxuICAgICAgICAgIGZvbnRzaXplOiB7IGluZGV4OiAzIH0sXHJcbiAgICAgICAgICBhcHBlYXJhbmNlOiB7IGluZGV4OiA0IH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Wm9vbVRvRml0KGVkaXRNb2RlOiBudW1iZXIpIHtcclxuICAgIGlmIChlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xyXG4gICAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcclxuICAgICAgcGFwZXJTY3JvbGxlci56b29tVG9GaXQoeyBwYWRkaW5nOiAyMCwgc2NhbGVHcmlkOiAwLjIsIG1pblNjYWxlOiAwLjIsIG1heFNjYWxlOiA1IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0UGFwZXJDZW50ZXIoZWRpdE1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgICBwYXBlclNjcm9sbGVyLmNvbnRlbnRUb0NlbnRlcih7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQYXBlclRvcExlZnQoZWRpdE1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgICBwYXBlclNjcm9sbGVyLmNvbnRlbnRUb1RvcExlZnQoeyBwYWRkaW5nOiA1MCwgc2NhbGVHcmlkOiAwLjIsIG1pblNjYWxlOiAwLjIsIG1heFNjYWxlOiA1IH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2Nyb2xsVG9Db250ZW50KCkge1xyXG4gICAgY29uc3QgZ3JhcGggPSB3aW5kb3dbYGdyYXBoYF07XHJcbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXTtcclxuICAgIGlmIChncmFwaCAmJiBwYXBlclNjcm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IGpzb25Db250ZW50T2JqID0gZ3JhcGgudG9KU09OKCk7XHJcbiAgICAgIGlmIChqc29uQ29udGVudE9iaiAmJiBqc29uQ29udGVudE9iai5jZWxscy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcGFwZXJTY3JvbGxlci5zY3JvbGxUb0NvbnRlbnQoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLmNlbnRlcigpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZVRleHRJbnNpZGUoY2VsbDogYW55KSB7XHJcbiAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkV2ZW50Jykge1xyXG4gICAgICBpZiAoY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLnRleHQuc3R5bGVbJ3RleHQtaW5zaWRlJ10pIHtcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ21pZGRsZSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmV2lkdGggPSAnMjAlJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZIZWlnaHQgPSAnMjAlJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ3RvcCc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmV2lkdGggPSAnNzAlJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaWNvbi5yZWZIZWlnaHQgPSAnNzAlJztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkdhdGV3YXknIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5Db252ZXJzYXRpb24nIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhT2JqZWN0JyB8fFxyXG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRGF0YVN0b3JlJ1xyXG4gICAgKSB7XHJcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ3RvcCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlTGlua0xhYmVsKGNlbGw6IGFueSwgZGVmU2l6ZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoY2VsbC5pc0xpbmsoKSkge1xyXG4gICAgICBsZXQgc2l6ZSA9IGRlZlNpemU7XHJcbiAgICAgIGxldCByZWZQb3MgPSAwO1xyXG4gICAgICBjb25zdCBsaW5rSWQgPSBjZWxsLmlkO1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xyXG4gICAgICBncmFwaC5nZXRMaW5rcygpLmV2ZXJ5KGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgaWYgKGxpbmtJZCA9PT0gZS5pZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZWZQb3MgKz0gMTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10uYXR0cmlidXRlcy5hdHRycy50ZXh0ICYmXHJcbiAgICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdLmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ11cclxuICAgICAgKSB7XHJcbiAgICAgICAgc2l6ZSA9IGdyYXBoLmdldExpbmtzKClbcmVmUG9zXS5hdHRyaWJ1dGVzLmF0dHJzLnRleHRbJ2ZvbnQtc2l6ZSddO1xyXG4gICAgICB9XHJcbiAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXS5wcm9wKCdsYWJlbHMvMC9hdHRycy9sYWJlbC9mb250U2l6ZScsIHNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VBbGxpZ21lbnQoY2VsbDogYW55LCBvcHQ6IGFueSkge1xyXG4gICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIG9wdC5kaXJlY3Rpb24gJiZcclxuICAgICAgKG9wdC5kaXJlY3Rpb24gPT09ICd0b3AtcmlnaHQnIHx8XHJcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcclxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAnYm90dG9tLXJpZ2h0JyB8fFxyXG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tbGVmdCcpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xyXG4gICAgICBjb25zdCBoZWFkZXJMYWJlbEFuY2hvciA9IGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbFsndGV4dC1hbmNob3InXTtcclxuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgaGVhZGVyTGFiZWxBbmNob3IsIGhlaWdodCk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgbGFzdCBsYW5lIHZhbHVlXHJcbiAgICAgIGlmICghdGhpcy5pc1VuZGVmaW5lZFNpemUoY2VsbC5hdHRyaWJ1dGVzKSkge1xyXG4gICAgICAgIGNvbnN0IGggPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuZ2V0VG90YWxMYW5lSGVpZ2h0KGNlbGwuYXR0cmlidXRlcyk7XHJcbiAgICAgICAgY29uc3QgYiA9IGggLSB0O1xyXG4gICAgICAgIGlmIChiID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcclxuXHJcbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHMgPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMuc2xpY2UoLTEpWzBdLnNpemUgKyBiO1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgIGNlbGwuYXR0cmlidXRlcy5sYW5lc1tpbmRleF0uc2l6ZSA9IHM7XHJcblxyXG4gICAgICAgICAgY29uc3QgbGFuZSA9IGBsYW5lc18ke2luZGV4fWA7XHJcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0uc2l6ZSA9IHM7XHJcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0udGFrZW5VcFNwYWNlQnlMYW5lQW5kU3VibGFuZXMgPSBzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcHQucHJvcGVydHlQYXRoICYmIG9wdC5wcm9wZXJ0eVBhdGggPT09ICdhdHRycy9oZWFkZXJMYWJlbC90ZXh0LWFuY2hvcicpIHtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xyXG4gICAgICBjb25zdCB0ZXh0QW5jaG9yID0gb3B0LnByb3BlcnR5VmFsdWU7XHJcbiAgICAgIHRoaXMuc2V0SGVhZGVyQXR0cmlidXRlKGNlbGwsIHRleHRBbmNob3IsIGhlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbDogYW55LCB0ZXh0QW5jaG9yOiBzdHJpbmcsIGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICBzd2l0Y2ggKHRleHRBbmNob3IpIHtcclxuICAgICAgY2FzZSAnZW5kJzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IDg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21pZGRsZSc6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdzdGFydCc6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLSA4O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gaGVpZ2h0IC8gMjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVW5kZWZpbmVkU2l6ZShhdHRyaWJ1dGVzKSB7XHJcbiAgICBsZXQgYlJlc3VsdCA9IGZhbHNlO1xyXG4gICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZXZlcnkoKGUpID0+IHtcclxuICAgICAgICBpZiAoIWUuc2l6ZSkge1xyXG4gICAgICAgICAgYlJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBiUmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgZ2V0VG90YWxMYW5lSGVpZ2h0KGF0dHJpYnV0ZXMpIHtcclxuICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICBpZiAoYXR0cmlidXRlcyAmJiBhdHRyaWJ1dGVzLmxhbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXR0cmlidXRlcy5sYW5lcy5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgaWYgKGUuc2l6ZSkge1xyXG4gICAgICAgICAgdG90YWwgKz0gZS5zaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG90YWw7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|