qms-angular 1.0.71 → 1.0.75
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 +960 -583
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/components/button/button.js +1 -1
- package/esm2015/lib/components/comment/comment.js +2 -2
- package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.js +7 -6
- package/esm2015/lib/components/qms-navigation-drawer/qms-navigation-drawer.module.js +4 -4
- package/esm2015/lib/components/qms-paginator/qms-paginator.component.js +3 -3
- package/esm2015/lib/components/qms-stepper/qms-stepper.component.js +1 -1
- package/esm2015/lib/components/range-slider/directives/range-slider-lockup.directive.js +20 -0
- package/esm2015/lib/components/range-slider/directives/range-slider.directive.js +34 -0
- package/esm2015/lib/components/range-slider/index.js +2 -0
- package/esm2015/lib/components/range-slider/public-api.js +4 -0
- package/esm2015/lib/components/range-slider/range-slider.module.js +22 -0
- package/esm2015/lib/components/related/popup/related-popup.component.js +1 -1
- package/esm2015/lib/components/select-include-children/select-include-children.component.js +112 -45
- package/esm2015/lib/components/select-one/select-one.component.js +50 -3
- package/esm2015/lib/components/select-process-document/select-process-document.component.js +64 -143
- package/esm2015/lib/components/side-sheet/directives/drawer-content.directive.js +20 -0
- package/esm2015/lib/components/side-sheet/directives/drawer-header-action.directive.js +20 -0
- package/esm2015/lib/components/side-sheet/directives/drawer-header.directive.js +20 -0
- package/esm2015/lib/components/side-sheet/directives/drawer.directive.js +20 -0
- package/esm2015/lib/components/side-sheet/index.js +2 -0
- package/esm2015/lib/components/side-sheet/public-api.js +6 -0
- package/esm2015/lib/components/side-sheet/side-sheet.module.js +28 -0
- package/esm2015/lib/components/tree/tree.component.js +15 -19
- package/esm2015/lib/components/treeNew/tree.component.js +6 -3
- package/esm2015/lib/directives/table/table-row.directive.js +50 -0
- package/esm2015/lib/directives/table/table.directive.js +18 -61
- package/esm2015/lib/model/en.js +19 -2
- package/esm2015/lib/model/no.js +19 -2
- package/esm2015/lib/qms-angular.module.js +5 -24
- package/esm2015/lib/qms-ckeditor-components/common/classes/qmsUploadAdapter.js +89 -0
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +3 -1
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.js +1 -1
- package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-video-tree.model.js +4 -0
- package/esm2015/lib/qms-ckeditor-components/common/models/wproofreader-config.model.js +6 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.js +38 -0
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +22 -3
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.js +1 -46
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +9 -8
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +4 -1
- package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +3 -4
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +178 -28
- package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +7 -3
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +4 -1
- package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-upload.service.js +20 -0
- package/esm2015/public-api.js +6 -7
- package/esm2015/qms-angular.js +6 -4
- package/fesm2015/qms-angular.js +862 -524
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/components/button/button.d.ts +1 -1
- package/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.d.ts +1 -1
- package/lib/{directives/range-slider → components/range-slider/directives}/range-slider-lockup.directive.d.ts +0 -0
- package/lib/{directives/range-slider → components/range-slider/directives}/range-slider.directive.d.ts +0 -0
- package/lib/components/range-slider/index.d.ts +1 -0
- package/lib/components/range-slider/public-api.d.ts +3 -0
- package/lib/components/range-slider/range-slider.module.d.ts +2 -0
- package/lib/components/select-include-children/select-include-children.component.d.ts +2 -1
- package/lib/components/select-one/select-one.component.d.ts +4 -0
- package/lib/components/select-process-document/select-process-document.component.d.ts +3 -0
- package/lib/{directives/side-sheet → components/side-sheet/directives}/drawer-content.directive.d.ts +0 -0
- package/lib/{directives/side-sheet → components/side-sheet/directives}/drawer-header-action.directive.d.ts +0 -0
- package/lib/{directives/side-sheet → components/side-sheet/directives}/drawer-header.directive.d.ts +0 -0
- package/lib/{directives/side-sheet → components/side-sheet/directives}/drawer.directive.d.ts +0 -0
- package/lib/components/side-sheet/index.d.ts +1 -0
- package/lib/components/side-sheet/public-api.d.ts +5 -0
- package/lib/components/side-sheet/side-sheet.module.d.ts +2 -0
- package/lib/directives/table/table-row.directive.d.ts +13 -0
- package/lib/directives/table/table.directive.d.ts +2 -11
- package/lib/model/en.d.ts +17 -0
- package/lib/model/no.d.ts +17 -0
- package/lib/qms-ckeditor-components/common/classes/qmsUploadAdapter.d.ts +18 -0
- package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +2 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-data.model.d.ts +5 -0
- package/lib/qms-ckeditor-components/common/models/qms-ckeditor-video-tree.model.d.ts +5 -0
- package/lib/qms-ckeditor-components/common/models/wproofreader-config.model.d.ts +25 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.d.ts +15 -0
- package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +4 -1
- package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +2 -1
- package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +17 -5
- package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +2 -0
- package/lib/qms-ckeditor-components/services/qms-ckeditor-upload.service.d.ts +5 -0
- package/lib.theme.scss +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -6
- package/qms-angular.d.ts +5 -3
- package/qms-angular.metadata.json +1 -1
- package/src/assets/images/ckeditor5.svg +1 -0
- 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/build/translations/az.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -1
- package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -1
- package/src/assets/qms-ckeditor-plugin/package-lock.json +23 -0
- package/src/assets/qms-ckeditor-plugin/package.json +2 -0
- package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +18 -4
- package/src/assets/qms-ckeditor-plugin/src/plugins/aboutckeditor/aboutckeditor.js +28 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/bpmndialogcommand.js +74 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +5 -68
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/contexts.json +3 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/de.po +21 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/en.po +21 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/gl.po +21 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/hu.po +21 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/it.po +21 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/ru.po +21 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/lang/translations/zh.po +21 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/src/index.js +10 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/src/sourceediting.js +386 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/src/utils/formathtml.js +142 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/theme/icons/source-editing.svg +1 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-source-editing/theme/sourceediting.css +48 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +4 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +21 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/qmsCKEditorFullscreenPlugin.js +22 -15
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapcommand.js +1 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkcommand.js +131 -176
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkdialogcommand.js +88 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkediting.js +2 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/link/linkui.js +41 -32
- package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/tableofcontents.js +14 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/tableofcontentscommand.js +87 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/tableofcontentsediting.js +59 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/tableofcontentsui.js +35 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/tableofcontents/utils.js +62 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/template/loadtemplatedialogcommand.js +14 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/template/qmsCKEditorLoadTemplatePlugin.js +10 -12
- package/src/assets/qms-ckeditor-plugin/src/plugins/template/qmsCKEdtiorTemplatePlugin.js +10 -7
- package/src/assets/qms-ckeditor-plugin/src/plugins/template/templatedialogcommand.js +9 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestamp.js +15 -18
- package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestampcommand.js +17 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/removetooltipcommand.js +42 -26
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltip.js +3 -3
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipcommand.js +75 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipdialogcommand.js +68 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipediting.js +206 -131
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipui.js +424 -136
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/ui/actionsview.js +67 -12
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/utils.js +17 -55
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/autovideo.js +1 -5
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/video/videoediting.js +5 -2
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/browsevideodialogcommand.js +25 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/uploadvideocommand.js +3 -16
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/videouploadediting.js +4 -0
- package/src/assets/qms-ckeditor-plugin/src/plugins/video/videoupload/videouploadui.js +12 -23
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/fullscreen_exit.svg +1 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/information.svg +1 -50
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/table-excel.svg +44 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/timestamp.svg +1 -1
- package/src/assets/qms-ckeditor-plugin/src/themes/icons/tooltip.svg +1 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/styles/heading.css +54 -0
- package/src/assets/qms-ckeditor-plugin/src/themes/styles/tooltip.css +11 -53
- package/src/lib/components/qms-navigation-drawer/qms-navigation-drawer.component.scss +37 -20
- package/src/lib/components/qms-paginator/qms-paginator.component.scss +15 -0
- package/src/lib/components/qms-stepper/qms-stepper.component.scss +2 -1
- package/src/lib/components/select-process-document/select-process-document.component.scss +2 -2
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.scss +16 -0
- package/src/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.scss +25 -23
- package/src/lib/qms-ckeditor-components/qms-ckeditor.component.scss +24 -0
- package/src/themes/core/_range-slider.scss +61 -42
- package/src/themes/core/_side-sheet.scss +2 -2
- package/src/themes/core/_table.scss +176 -37
- package/esm2015/lib/directives/range-slider/range-slider-lockup.directive.js +0 -20
- package/esm2015/lib/directives/range-slider/range-slider.directive.js +0 -36
- package/esm2015/lib/directives/side-sheet/drawer-content.directive.js +0 -20
- package/esm2015/lib/directives/side-sheet/drawer-header-action.directive.js +0 -20
- package/esm2015/lib/directives/side-sheet/drawer-header.directive.js +0 -20
- package/esm2015/lib/directives/side-sheet/drawer.directive.js +0 -20
- package/esm2015/lib/qms-ckeditor-components/common/classes/uploadAdapter.js +0 -26
- package/lib/qms-ckeditor-components/common/classes/uploadAdapter.d.ts +0 -5
- package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/inserttooltipcommand.js +0 -88
@@ -72,10 +72,10 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
72
72
|
appIconService.registerRiskIcon(iconRegistry, domSanitizer);
|
73
73
|
}
|
74
74
|
ngAfterViewInit() {
|
75
|
+
this.initTree(this.checkedNodeList);
|
75
76
|
if (this.editItem) {
|
76
77
|
this.focusEditItem(this.editItem);
|
77
78
|
}
|
78
|
-
this.initTree(this.checkedNodeList);
|
79
79
|
}
|
80
80
|
ngOnDestroy() {
|
81
81
|
this.ngUnsubscribe.next();
|
@@ -121,16 +121,60 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
121
121
|
this.selectedOptions.push(element);
|
122
122
|
if (element.type === SelectOptionTypes.IncludeChildren) {
|
123
123
|
this.selectedOptions = this.selectedOptions.concat(element.children);
|
124
|
+
if (!this.includeChildren) {
|
125
|
+
this.disabledList = [...this.disabledList, element];
|
126
|
+
this.disabledList = [...this.disabledList, ...element.children.map(x => {
|
127
|
+
return {
|
128
|
+
id: x.id,
|
129
|
+
itemName: x.itemName,
|
130
|
+
children: [],
|
131
|
+
parentId: x.parentId,
|
132
|
+
type: x.type,
|
133
|
+
noSelectedChildren: 0,
|
134
|
+
noChildren: 0
|
135
|
+
};
|
136
|
+
})];
|
137
|
+
}
|
138
|
+
}
|
139
|
+
else {
|
140
|
+
if (this.includeChildren) {
|
141
|
+
this.disabledList = [...this.disabledList, element];
|
142
|
+
}
|
124
143
|
}
|
125
144
|
this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
|
126
145
|
});
|
127
146
|
}
|
128
147
|
}
|
129
148
|
focusEditItem(selectedOption) {
|
130
|
-
|
149
|
+
let parent;
|
150
|
+
let parentList = [];
|
151
|
+
parent = this.treeData.find(x => x.rootId === selectedOption.parentId);
|
152
|
+
if (parent) {
|
153
|
+
parentList.push({
|
154
|
+
id: parent.rootId,
|
155
|
+
itemName: parent.rootName,
|
156
|
+
parentId: parent.parentId,
|
157
|
+
type: SelectOptionTypes.IncludeChildren
|
158
|
+
});
|
159
|
+
parentList = this.getParentLineOfNode(parentList, parent);
|
160
|
+
}
|
161
|
+
let node;
|
162
|
+
if (parentList.length > 0) {
|
163
|
+
parentList.forEach(parent => {
|
164
|
+
node = this.dataTrees.toArray()[0].getNodeByIdAndParentId(parent.id, parent.parentId);
|
165
|
+
if (node) {
|
166
|
+
this.dataTrees.toArray()[0].expandNode(node);
|
167
|
+
const element = document.getElementById(`_${node.parentId ? node.parentId.toLowerCase() : ''}_${node.id.toLowerCase()}_${node.level}`);
|
168
|
+
if (element) {
|
169
|
+
element.scrollIntoView(false);
|
170
|
+
}
|
171
|
+
}
|
172
|
+
});
|
173
|
+
}
|
174
|
+
node = this.dataTrees.toArray()[0].getNodeByIdAndParentId(selectedOption.id, selectedOption.parentId);
|
131
175
|
if (node) {
|
132
176
|
this.dataTrees.toArray()[0].expandNode(node);
|
133
|
-
const element = document.getElementById(`_${node.parentId ? node.parentId : ''}_${node.id}_${node.level}`);
|
177
|
+
const element = document.getElementById(`_${node.parentId ? node.parentId.toLowerCase() : ''}_${node.id.toLowerCase()}_${node.level}`);
|
134
178
|
if (element) {
|
135
179
|
element.scrollIntoView(false);
|
136
180
|
}
|
@@ -141,7 +185,7 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
141
185
|
if (index >= 0) {
|
142
186
|
if (this.checkedNodeList[index].type === SelectOptionTypes.IncludeChildren) {
|
143
187
|
this.removeIncludeChildren(item);
|
144
|
-
this.
|
188
|
+
this.deleteNodeFromSelectedNode(item);
|
145
189
|
}
|
146
190
|
else {
|
147
191
|
let position = this.selectedOptions.findIndex(x => x.id === item.id && x.parentId === item.parentId);
|
@@ -149,8 +193,9 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
149
193
|
this.selectedOptions.splice(position, 1);
|
150
194
|
}
|
151
195
|
}
|
196
|
+
this.focusEditItem(this.checkedNodeList[index]);
|
197
|
+
this.enableSelectedNode(this.checkedNodeList[index]);
|
152
198
|
this.checkedNodeList.splice(index, 1);
|
153
|
-
this.enableSelectedNode({ id: item.id, parentId: item.parentId, itemName: item.name, type: SelectOptionTypes.IncludeChildren });
|
154
199
|
this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
|
155
200
|
}
|
156
201
|
}
|
@@ -182,7 +227,7 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
182
227
|
this.checkedNodeList.push({
|
183
228
|
id: item.id,
|
184
229
|
itemName: item.itemName,
|
185
|
-
type:
|
230
|
+
type: item.type,
|
186
231
|
parentId: item.parentId,
|
187
232
|
children: [],
|
188
233
|
noChildren: 0,
|
@@ -191,6 +236,15 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
191
236
|
}
|
192
237
|
}
|
193
238
|
this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
|
239
|
+
this.focusEditItem({
|
240
|
+
id: item.id,
|
241
|
+
itemName: item.itemName,
|
242
|
+
type: item.type,
|
243
|
+
parentId: item.parentId,
|
244
|
+
children: [],
|
245
|
+
noChildren: 0,
|
246
|
+
noSelectedChildren: 0
|
247
|
+
});
|
194
248
|
}
|
195
249
|
getItemIconType(item) {
|
196
250
|
if (item.itemIcon && item.itemIcon.length)
|
@@ -261,12 +315,29 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
261
315
|
});
|
262
316
|
}
|
263
317
|
removeIncludeChildren(item) {
|
318
|
+
const index = this.checkedNodeList.findIndex(x => x.id.toLowerCase() === item.id.toLowerCase() && x.parentId.toLowerCase() === x.parentId.toLowerCase() && x.type === SelectOptionTypes.IncludeChildren);
|
319
|
+
if (index >= 0) {
|
320
|
+
let listChildren = this.checkedNodeList[index].children;
|
321
|
+
const itemIndex = this.selectedOptions.findIndex(node => node.id.toLowerCase() === item.id.toLowerCase() && node.parentId.toLowerCase() === item.parentId.toLowerCase());
|
322
|
+
if (itemIndex >= 0) {
|
323
|
+
this.enableSelectedNode(this.checkedNodeList[index]);
|
324
|
+
this.selectedOptions.splice(itemIndex, 1);
|
325
|
+
}
|
326
|
+
listChildren.forEach(x => {
|
327
|
+
const index = this.selectedOptions.findIndex(node => node.id.toLowerCase() === x.id.toLowerCase() && node.parentId.toLowerCase() === x.parentId.toLowerCase());
|
328
|
+
if (index >= 0) {
|
329
|
+
this.selectedOptions.splice(index, 1);
|
330
|
+
this.disabledList = this.disabledList.filter(node => !(x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase()));
|
331
|
+
}
|
332
|
+
});
|
333
|
+
return;
|
334
|
+
}
|
264
335
|
let listChildren = [];
|
265
336
|
listChildren = this.getAllChildrenNodeRecursive(listChildren, item);
|
266
337
|
const itemIndex = this.selectedOptions.findIndex(node => node.id === item.id && node.parentId === item.parentId);
|
267
338
|
if (itemIndex >= 0) {
|
268
|
-
this.enableSelectedNode(this.selectedOptions[itemIndex]);
|
269
339
|
this.selectedOptions.splice(itemIndex, 1);
|
340
|
+
this.disabledList = this.disabledList.filter(x => !(x.id === item.id && x.parentId === item.parentId));
|
270
341
|
}
|
271
342
|
listChildren.forEach(x => {
|
272
343
|
const index = this.selectedOptions.findIndex(node => node.id === x.id && node.parentId === x.parentId);
|
@@ -385,7 +456,7 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
385
456
|
}
|
386
457
|
}
|
387
458
|
this.checkedNodeList = this.checkedNodeList.filter(x => x.id !== node.id || x.parentId !== node.parentId);
|
388
|
-
this.
|
459
|
+
this.deleteNodeFromSelectedNode(node);
|
389
460
|
}
|
390
461
|
else {
|
391
462
|
const itemIndex = this.selectedOptions.findIndex(item => node.id === item.id && node.parentId === item.parentId);
|
@@ -458,6 +529,16 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
458
529
|
});
|
459
530
|
}
|
460
531
|
refactorSelectList(node) {
|
532
|
+
this.combineNodes({
|
533
|
+
id: node.id,
|
534
|
+
itemName: node.name,
|
535
|
+
type: SelectOptionTypes.IncludeChildren,
|
536
|
+
parentId: node.parentId
|
537
|
+
});
|
538
|
+
}
|
539
|
+
deleteNodeFromSelectedNode(node) {
|
540
|
+
let children = [];
|
541
|
+
children = this.getAllChildrenNodeRecursive(children, node);
|
461
542
|
let parent;
|
462
543
|
let parentList = [];
|
463
544
|
parent = this.treeData.find(x => x.rootId === node.parentId);
|
@@ -470,30 +551,23 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
470
551
|
});
|
471
552
|
parentList = this.getParentLineOfNode(parentList, parent);
|
472
553
|
}
|
554
|
+
let parentIndex = -1;
|
473
555
|
if (parentList.length > 0) {
|
474
|
-
|
475
|
-
.findIndex(
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
}
|
490
|
-
}
|
491
|
-
else {
|
492
|
-
this.combineNodes({
|
493
|
-
id: node.id,
|
494
|
-
itemName: node.name,
|
495
|
-
type: SelectOptionTypes.IncludeChildren,
|
496
|
-
parentId: node.parentId
|
556
|
+
parentList.forEach(parent => {
|
557
|
+
parentIndex = this.checkedNodeList.findIndex(x => x.id.toLowerCase() === parent.id.toLowerCase() && x.parentId.toLowerCase() === parent.parentId.toLowerCase());
|
558
|
+
if (parentIndex >= 0) {
|
559
|
+
const index = this.checkedNodeList[parentIndex].children.findIndex(x => x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase());
|
560
|
+
if (index >= 0) {
|
561
|
+
this.checkedNodeList[parentIndex].children.splice(index, 1);
|
562
|
+
}
|
563
|
+
children.forEach(child => {
|
564
|
+
const index = this.checkedNodeList[parentIndex].children.findIndex(x => x.id.toLowerCase() === child.id.toLowerCase() && x.parentId.toLowerCase() === child.parentId.toLowerCase());
|
565
|
+
if (index >= 0) {
|
566
|
+
this.checkedNodeList[parentIndex].children.splice(index, 1);
|
567
|
+
}
|
568
|
+
});
|
569
|
+
this.checkedNodeList[parentIndex].noSelectedChildren = this.checkedNodeList[parentIndex].children.length;
|
570
|
+
}
|
497
571
|
});
|
498
572
|
}
|
499
573
|
}
|
@@ -537,7 +611,7 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
537
611
|
this.checkedNodeList[selectedNodeIndex].children = nodeList;
|
538
612
|
this.checkedNodeList[selectedNodeIndex].noChildren = children.length;
|
539
613
|
this.checkedNodeList[selectedNodeIndex].noSelectedChildren = nodeList.length;
|
540
|
-
this.checkedNodeList[selectedNodeIndex].type =
|
614
|
+
this.checkedNodeList[selectedNodeIndex].type = SelectOptionTypes.IncludeChildren;
|
541
615
|
}
|
542
616
|
}
|
543
617
|
getParentLineOfNode(listParent, node) {
|
@@ -561,7 +635,7 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
561
635
|
return {
|
562
636
|
id: x.id,
|
563
637
|
name: x.itemName,
|
564
|
-
parentId:
|
638
|
+
parentId: x.parentId,
|
565
639
|
level: 0,
|
566
640
|
expandable: true,
|
567
641
|
hasChild: true,
|
@@ -593,18 +667,11 @@ export class SelectIncludeChildrenPopUpComponent {
|
|
593
667
|
}
|
594
668
|
}
|
595
669
|
enableSelectedNode(node) {
|
596
|
-
let children = [];
|
597
|
-
children = this.getAllChildrenNodeRecursive(children, {
|
598
|
-
id: node.id,
|
599
|
-
name: node.itemName,
|
600
|
-
parentId: node.parentId,
|
601
|
-
level: 0,
|
602
|
-
expandable: true,
|
603
|
-
hasChild: true,
|
604
|
-
disabled: false
|
605
|
-
});
|
606
|
-
this.disabledList = this.disabledList.filter(x => children.filter(child => (x.id === child.id && x.parentId === child.parentId)).length === 0);
|
607
670
|
this.disabledList = this.disabledList.filter(x => !(x.id === node.id && x.parentId === node.parentId));
|
671
|
+
if (node.type === SelectOptionTypes.IncludeChildren) {
|
672
|
+
let children = node.children;
|
673
|
+
this.disabledList = this.disabledList.filter(x => children.filter(child => (x.id === child.id && x.parentId === child.parentId)).length === 0);
|
674
|
+
}
|
608
675
|
}
|
609
676
|
}
|
610
677
|
SelectIncludeChildrenPopUpComponent.decorators = [
|
@@ -631,4 +698,4 @@ SelectIncludeChildrenPopUpComponent.propDecorators = {
|
|
631
698
|
autoComplete: [{ type: ViewChild, args: ['autoCompleteInputSearch', { read: MatAutocompleteTrigger, static: true },] }],
|
632
699
|
onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
|
633
700
|
};
|
634
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeE4sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBSXJFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztB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QUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRyxDQUFDOzs7WUEvcEJKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsbUNBQW1DO2dCQUM3QyxvM0xBQXVEO2dCQUV2RCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDeEM7OztZQTlCeUMsaUJBQWlCO1lBUWxELHVCQUF1QjtZQUx2QixZQUFZO1lBa0JaLHNCQUFzQjtZQWpCdEIsZUFBZTtZQUNmLFlBQVk7WUFJWixzQkFBc0I7WUFUeUMsVUFBVTtZQWlCekUsZUFBZSx1QkFnRWYsTUFBTSxTQUFDLGVBQWU7Ozt3QkFiMUIsWUFBWSxTQUFDLGFBQWEsRUFBRSxFQUFFOzJCQUU5QixTQUFTLFNBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt3QkErQ25GLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tICcuLi90cmVlL21vZGVsL3RyZWUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWZsYXQtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVNb2RlbCB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVDb21wb25lbnQgfSBmcm9tICcuLi90cmVlL3RyZWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uVHlwZXMgfSBmcm9tICcuL2VudW0vc2VsZWN0LW9wdGlvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTZWxlY3RPcHRpb24gfSBmcm9tICcuL21vZGVsL3NlbGVjdC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RQb3B1cERhdGEgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1wb3B1cC1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0U2VhcmNoT3B0aW9uIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Qtc2VhcmNoLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdENvbnN0IH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QuY29uc3QnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZE9wdGlvbiB9IGZyb20gJy4vbW9kZWwvc2VsZXRlZC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3RHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3QtZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLXBvcHVwJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtaW5jbHVkZS1jaGlsZHJlbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtaW5jbHVkZS1jaGlsZHJlbi5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0SW5jbHVkZUNoaWxkcmVuUG9wVXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBMQU5HOiBhbnk7XHJcbiAgICBoZWFkZXJOYW1lID0gJyc7XHJcbiAgICBzZWxlY3RJbmNsdWRlTGFiZWwgPSAnJztcclxuICAgIHRyZWVEYXRhOiBBcnJheTxUcmVlTW9kZWw+ID0gW107XHJcbiAgICB0cmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG5cclxuICAgIGNoZWNrZWROb2RlTGlzdDogQXJyYXk8U2VsZWN0ZWRPcHRpb24+ID0gW107XHJcbiAgICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PFNlbGVjdE9wdGlvbj4gPSBbXTtcclxuICAgIHNlbGVjdGVkRGF0YTogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG5cclxuICAgIGNvbW1vbkNoZWNrZWRMaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcblxyXG4gICAgaXRlbVR5cGUgPSAwO1xyXG4gICAgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XHJcbiAgICBkaXNhYmxlZExpc3Q6IFNlbGVjdGVkT3B0aW9uW10gPSBbXTtcclxuICAgIG9yZ2luYWxEaXNhYmxlTGlzdDogYW55ID0gW107XHJcbiAgICBtYXhTZWxlY3RJdGVtQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgICBpc0RvY3VtZW50RXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XHJcbiAgICBzaW5nbGVTZWxlY3RPcHRpb24gPSBmYWxzZTtcclxuICAgIHNlYXJjaE9yZGVyID0gW107XHJcblxyXG4gICAgbXlDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICBmaWx0ZXJlZE9wdGlvbnM6IFNlbGVjdFNlYXJjaE9wdGlvbltdID0gW107XHJcbiAgICBpc0lucHV0VmFsdWUgPSBmYWxzZTtcclxuICAgIHNlbGVjdGVkRm9sZGVyOiBUcmVlRmxhdE5vZGUgPSBudWxsO1xyXG4gICAgbGlzdENoaWxkcmVuU2VsZWN0T25lOiBhbnkgPSBbXTtcclxuICAgIGluY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgZWRpdEl0ZW06IFNlbGVjdGVkT3B0aW9uO1xyXG4gICAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlO1xyXG4gICAgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBvbkV4cGFuZEZvbGRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0T3B0aW9uPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oVHJlZUNvbXBvbmVudCwge30pIGRhdGFUcmVlczogUXVlcnlMaXN0PFRyZWVDb21wb25lbnQ+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9Db21wbGV0ZUlucHV0U2VhcmNoJywgeyByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCBzdGF0aWM6IHRydWUgfSlcclxuICAgIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RJbmNsdWRlQ2hpbGRyZW5Qb3BVcENvbXBvbmVudD4sXHJcbiAgICAgICAgcHVibGljIGdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdEdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgICAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UG9wdXBEYXRhXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmhlYWRlck5hbWUgPSBkYXRhLmhlYWRlck5hbWU7XHJcbiAgICAgICAgdGhpcy50cmVlRGF0YSA9IGRhdGEudHJlZURhdGE7XHJcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0gZGF0YS50cmVlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaXNrRGF0YSA9IGRhdGE/LnNlbGVjdGVkTm9kZSB8fCBbXTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9ICQuZXh0ZW5kKHRydWUsIFtdLCBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXSk7XHJcbiAgICAgICAgdGhpcy5vcmdpbmFsRGlzYWJsZUxpc3QgPSAkLmV4dGVuZCh0cnVlLCBbXSwgZGF0YS5kaXNhYmxlZExpc3QgfHwgW10pO1xyXG4gICAgICAgIHRoaXMuc2luZ2xlU2VsZWN0T3B0aW9uID0gZGF0YS50cmVlQ29uZmlnLnNpbmdsZVNlbGVjdGVkTm9kZTtcclxuICAgICAgICB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCA9IGRhdGEubWF4U2VsZWN0SXRlbUNvdW50O1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gZGF0YT8uc2VsZWN0ZWRMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUNoaWxkcmVuID0gZGF0YT8uaW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMuZWRpdEl0ZW0gPSBkYXRhLmVkaXRJdGVtO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0SW5jbHVkZUxhYmVsID0gZGF0YS5zZWxlY3RJbmNsdWRlTGFiZWw7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzQXJlYUljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRG9jdW1lbnRJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRGV2aWF0aW9uSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJDaGVja2xpc3RJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclJpc2tJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lZGl0SXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzRWRpdEl0ZW0odGhpcy5lZGl0SXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdFRyZWUodGhpcy5jaGVja2VkTm9kZUxpc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNlYXJjaFJlc3VsdChbXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1lc3NhZ2UnLCBbJyRldmVudCddKVxyXG4gICAgb25NZXNzYWdlKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT09IFNlbGVjdENvbnN0LkhJREVfU0VBUkNIX1JFU1VMVCkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZS5jbG9zZVBhbmVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSgpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2VhcmNoU2VsZWN0LnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5teUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hSZWxhdGVkKHZhbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gdGhpcy5zZWFyY2hPcmRlciA9IHRoaXMuZ2V0U2VhcmNoT3JkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZS5vcGVuUGFuZWwoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXV0b0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFRyZWUoc2VsZWN0ZWRPcHRpb25zOiBTZWxlY3RlZE9wdGlvbltdKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuY29uY2F0KGVsZW1lbnQuY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb2N1c0VkaXRJdGVtKHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RlZE9wdGlvbikge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0uZ2V0Tm9kZUJ5SWRBbmRQYXJlbnRJZChzZWxlY3RlZE9wdGlvbi5pZCwgc2VsZWN0ZWRPcHRpb24ucGFyZW50SWQpO1xyXG4gICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS5leHBhbmROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYF8ke25vZGUucGFyZW50SWQgPyBub2RlLnBhcmVudElkIDogJyd9XyR7bm9kZS5pZH1fJHtub2RlLmxldmVsfWApO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyhmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdFtpbmRleF0udHlwZSA9PT0gU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluY2x1ZGVDaGlsZHJlbihpdGVtKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmYWN0b3JTZWxlY3RMaXN0KGl0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBpdGVtLmlkICYmIHgucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNlbGVjdGVkTm9kZSh7IGlkOiBpdGVtLmlkLCBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCwgaXRlbU5hbWU6IGl0ZW0ubmFtZSwgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMubWFwU2VsZWN0T3B0aW9uVG9UcmVlTm9kZSh0aGlzLnNlbGVjdGVkT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFNlYXJjaE9wdGlvbihpdGVtOiBTZWxlY3RPcHRpb24pIHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBpdGVtLmlkICYmIHgucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQpO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluY2x1ZGVDaGlsZHJlbih7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZhY3RvclNlbGVjdExpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5TZWxlY3RPbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vQ2hpbGRyZW46IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9TZWxlY3RlZENoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRJdGVtSWNvblR5cGUoaXRlbTogU2VsZWN0U2VhcmNoT3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbUljb24gJiYgaXRlbS5pdGVtSWNvbi5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uUGF0aCAmJiBpdGVtLml0ZW1JY29uUGF0aC5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5wYXRoO1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uQmFzZTY0ICYmIGl0ZW0uaXRlbUljb25CYXNlNjQubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuYmFzZTY0O1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uU3ZnICYmIGl0ZW0uaXRlbUljb25TdmcubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuc3ZnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5ub25lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEltYWdlUGF0aChpdGVtOiBTZWxlY3RTZWFyY2hPcHRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGl0ZW0uaXRlbUljb25CYXNlNjQpIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBzZXRSZXN1bHRIZWlnaHQoYXJyPzogU2VsZWN0T3B0aW9uW10pIHtcclxuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gNDg0O1xyXG4gICAgICAgIGNvbnN0IHBvcHVwX2NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb250ZW50JylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbGluZV9fZGl2aWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVfX2RpdmlkZXInKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAocG9wdXBfY29udGVudCAmJiBsaW5lX19kaXZpZGVyKSB7XHJcbiAgICAgICAgICAgIG1heEhlaWdodCA9IHRoaXMuZ2V0T2Zmc2V0SGVpZ2h0KHBvcHVwX2NvbnRlbnQsIHRydWUpICsgdGhpcy5nZXRPZmZzZXRIZWlnaHQobGluZV9fZGl2aWRlciwgdHJ1ZSkgKiAyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY29udGVudFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXInKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBjb25zdCB2aWV3cmVwb3J0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3JlbGF0ZWQtdmlld3BvcnQnKVswXSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKHZpZXdyZXBvcnRzKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50UmVzdWx0Lm9mZnNldEhlaWdodCA8PSBtYXhIZWlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke2NvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0fXB4YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke21heEhlaWdodH1weGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWFyY2hSZWxhdGVkKF92YWw6IGFueSkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gW107XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoX3ZhbCkgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHRoaXMubXlDb250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgaWYgKCEhX3ZhbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaC5lbWl0KF92YWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNob3dTZWFyY2hSZXN1bHQoKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheVJlbGF0ZWQocmVsYXRlZD86IFNlbGVjdE9wdGlvbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICAgICAgcmV0dXJuIHJlbGF0ZWQgPyByZWxhdGVkLml0ZW1OYW1lIDogdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbW1vbkNoZWNrZWROb2RlKGxpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4pIHtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RJbmNsdWRlQ2hpbGRyZW4oaXRlbTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICAgICAgbGV0IGxpc3RDaGlsZHJlbjogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICAgICAgICBsaXN0Q2hpbGRyZW4gPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0Q2hpbGRyZW4sIGl0ZW0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goe1xyXG4gICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgaXRlbU5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGlzdENoaWxkcmVuLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5pZCAmJiBub2RlLnBhcmVudElkID09PSB4LnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaCh4KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVJbmNsdWRlQ2hpbGRyZW4oaXRlbTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICAgICAgbGV0IGxpc3RDaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIGxpc3RDaGlsZHJlbiA9IHRoaXMuZ2V0QWxsQ2hpbGRyZW5Ob2RlUmVjdXJzaXZlKGxpc3RDaGlsZHJlbiwgaXRlbSk7XHJcbiAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCAmJiBub2RlLnBhcmVudElkID09PSBpdGVtLnBhcmVudElkKTtcclxuICAgICAgICBpZiAoaXRlbUluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVTZWxlY3RlZE5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnNbaXRlbUluZGV4XSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0Q2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgobm9kZSA9PiBub2RlLmlkID09PSB4LmlkICYmIG5vZGUucGFyZW50SWQgPT09IHgucGFyZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gdGhpcy5kaXNhYmxlZExpc3QuZmlsdGVyKG5vZGUgPT4gISh4LmlkID09PSBub2RlLmlkICYmIHgucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0UmVzdWx0LCBpdGVtOiBUcmVlRmxhdE5vZGUpOiBTZWxlY3RPcHRpb25bXSB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnBhcmVudElkID09PSBpdGVtLmlkKTtcclxuICAgICAgICBsZXQgY2hpbGRyZW5JdGVtID0gWy4uLm5ldyBTZXQodGhpcy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnJvb3RJZCA9PT0gaXRlbS5pZCAmJiAhIXguY2hpbGRJZCkpXTtcclxuICAgICAgICBpZiAoY2hpbGRyZW5JdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5JdGVtID0gY2hpbGRyZW5JdGVtLmZpbHRlcih4ID0+IGxpc3RSZXN1bHQuZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5jaGlsZElkICYmIG5vZGUucGFyZW50SWQgPT09IHgucm9vdElkKSA8IDApXHJcbiAgICAgICAgICAgIGxpc3RSZXN1bHQgPSBsaXN0UmVzdWx0LmNvbmNhdChbLi4ubmV3IFNldChjaGlsZHJlbkl0ZW0ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5jaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiB4LmNoaWxkTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZTogeC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5DaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoeCA9PiBsaXN0UmVzdWx0LmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IHgucm9vdElkICYmIG5vZGUucGFyZW50SWQgPT09IHgucGFyZW50SWQpIDwgMClcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2hpbGRyZW46IFNlbGVjdE9wdGlvbltdID0gY2hpbGRyZW4ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IHgucGFyZW50SWQ/Lmxlbmd0aCA+IDAgPyB4LnN1Yk5hbWUgOiB4LnJvb3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGlzdFJlc3VsdCA9IGxpc3RSZXN1bHQuY29uY2F0KFxyXG4gICAgICAgICAgICAgICAgdW5pcXVlQ2hpbGRyZW4uZmlsdGVyKCh4LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gdW5pcXVlQ2hpbGRyZW4uZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5pZCAmJiBub2RlLnBhcmVudElkID09PSB4LnBhcmVudElkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgICAgICAgICAgIGxpc3RSZXN1bHQgPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0UmVzdWx0LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0UmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBvbkFkZENsaWNrKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuY2hlY2tlZE5vZGVMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPZmZzZXRIZWlnaHQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluY2x1ZGVNYXJnaW46IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBlbG1IZWlnaHQgPSAwLCBlbG1NYXJnaW4gPSAwO1xyXG5cclxuICAgICAgICBlbG1IZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBpZiAoaW5jbHVkZU1hcmdpbikge1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBlbG1NYXJnaW4gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbS5yZXBsYWNlKCdweCcsICcnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGVsbUhlaWdodCArIGVsbU1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUNoaXBOYW1lKGl0ZW06IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0uaXRlbU5hbWV9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtU2VsZWN0ZWRDaGlsZHJlblJhdGlvKGl0ZW06IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0ubm9TZWxlY3RlZENoaWxkcmVufS8ke2l0ZW0ubm9DaGlsZHJlbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRWxsaXBzaXNBY3RpdmUoZTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZSA/IChlLmNsaWVudFdpZHRoIDwgZS5zY3JvbGxXaWR0aCkgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVTZWxlY3RJdGVtKG5vZGU6IFNlbGVjdE9wdGlvbikge1xyXG4gICAgICAgIGNvbnN0IFNlbGVjdE9wdGlvbiA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBpZiAoU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcclxuICAgICAgICAgICAgICAgIGlkOiBTZWxlY3RPcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IFNlbGVjdE9wdGlvbi5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc05vZGVTZWxlY3RlZChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGRyZW5PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICBsZXQgaXRlbSA9IG5ldyBTZWxlY3RPcHRpb24oKTtcclxuICAgICAgICBpdGVtLmlkID0gbm9kZS5pZDtcclxuICAgICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdE5vZGVUcmVlRXZlbnQobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICBpZiAocG9zaXRpb24gPiAtMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cGFuZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluY2x1ZGVDaGlsZHJlbihub2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChpdGVtID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4geC5pZCAhPT0gbm9kZS5pZCB8fCB4LnBhcmVudElkICE9PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmYWN0b3JTZWxlY3RMaXN0KG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KGl0ZW0gPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCAmJiBub2RlLnBhcmVudElkID09PSBpdGVtLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maWx0ZXIoeCA9PiB4LmlkICE9PSBub2RlLmlkIHx8IHgucGFyZW50SWQgIT09IG5vZGUucGFyZW50SWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZXhwYW5kYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5jbHVkZUNoaWxkcmVuKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5DaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZhY3RvclNlbGVjdExpc3Qobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLlNlbGVjdE9uZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLlNlbGVjdE9uZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgbm9TZWxlY3RlZENoaWxkcmVuOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vQ2hpbGRyZW46IDAsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlKGUpIHtcclxuICAgICAgICB0aGlzLmluY2x1ZGVDaGlsZHJlbiA9ICEhZS5jaGVja2VkO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gJC5leHRlbmQodHJ1ZSwgW10sIHRoaXMub3JnaW5hbERpc2FibGVMaXN0IHx8IFtdKTtcclxuICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKG5vZGUgPT4geyBcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0SW5jbHVkZU5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZVNlbGVjdFNpbmdsZU5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtYXBTZWxlY3RPcHRpb25Ub1RyZWVOb2RlKGxpc3Q6IFNlbGVjdE9wdGlvbltdKTogVHJlZUZsYXROb2RlW10ge1xyXG4gICAgICAgIHJldHVybiBsaXN0Lm1hcCh4ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhc0NoaWxkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmYWN0b3JTZWxlY3RMaXN0KG5vZGU6IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGxldCBwYXJlbnQ7XHJcbiAgICAgICAgbGV0IHBhcmVudExpc3Q6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgICAgICAgcGFyZW50ID0gdGhpcy50cmVlRGF0YS5maW5kKHggPT4geC5yb290SWQgPT09IG5vZGUucGFyZW50SWQpO1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgcGFyZW50TGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBwYXJlbnQucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IHBhcmVudC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnQucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHBhcmVudExpc3QgPSB0aGlzLmdldFBhcmVudExpbmVPZk5vZGUocGFyZW50TGlzdCwgcGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBhcmVudExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFBhcmVudExpc3QgPSBwYXJlbnRMaXN0LmZpbHRlcih4ID0+IHRoaXMuc2VsZWN0ZWRPcHRpb25zXHJcbiAgICAgICAgICAgICAgICAuZmluZEluZGV4KHNlbGVjdGVkTm9kZSA9PiB4LmlkID09PSBzZWxlY3RlZE5vZGUuaWQgJiYgeC5wYXJlbnRJZCA9PT0gc2VsZWN0ZWROb2RlLnBhcmVudElkKSA+PSAwKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdGVkUGFyZW50TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWROb2RlID0gc2VsZWN0ZWRQYXJlbnRMaXN0W3NlbGVjdGVkUGFyZW50TGlzdC5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tYmluZU5vZGVzKGhpZ2hlc3RTZWxlY3RlZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSB0aGlzLmRpc2FibGVkTGlzdC5maWx0ZXIoeCA9PiAhKHguaWQgPT09IGhpZ2hlc3RTZWxlY3RlZE5vZGUuaWQgJiYgeC5wYXJlbnRJZCA9PT0gaGlnaGVzdFNlbGVjdGVkTm9kZS5wYXJlbnRJZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21iaW5lTm9kZXMoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSB0aGlzLmRpc2FibGVkTGlzdC5maWx0ZXIoeCA9PiAhKHguaWQgPT09IG5vZGUuaWQgJiYgeC5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVOb2Rlcyh7XHJcbiAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4sXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lTm9kZXMocm9vdDogU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XHJcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShjaGlsZHJlbiwge1xyXG4gICAgICAgICAgICBpZDogcm9vdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogcm9vdC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IHJvb3QucGFyZW50SWQsXHJcbiAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTm9kZUluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gcm9vdC5pZCAmJiB4LnBhcmVudElkID09PSByb290LnBhcmVudElkKTtcclxuXHJcbiAgICAgICAgbGV0IG5vZGVMaXN0ID0gW107XHJcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0gY2hpbGQuaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gY2hpbGQucGFyZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RJbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IGNoaWxkLmlkICYmIG5vZGUucGFyZW50SWQgPT09IGNoaWxkLnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdEluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gdGhpcy5kaXNhYmxlZExpc3QuZmlsdGVyKG5vZGUgPT4gIShjaGlsZC5pZCA9PT0gbm9kZS5pZCAmJiBjaGlsZC5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCkpO1xyXG4gICAgICAgICAgICAgICAgbm9kZUxpc3QucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWROb2RlSW5kZXggPj0gMCB8fCBub2RlTGlzdC5sZW5ndGggPiAwIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWROb2RlSW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcm9vdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogcm9vdC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHJvb3QucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vU2VsZWN0ZWRDaGlsZHJlbjogMCxcclxuICAgICAgICAgICAgICAgICAgICBub0NoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlSW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdFtzZWxlY3RlZE5vZGVJbmRleF0uY2hpbGRyZW4gPSBub2RlTGlzdDtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3Rbc2VsZWN0ZWROb2RlSW5kZXhdLm5vQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3NlbGVjdGVkTm9kZUluZGV4XS5ub1NlbGVjdGVkQ2hpbGRyZW4gPSBub2RlTGlzdC5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3NlbGVjdGVkTm9kZUluZGV4XS50eXBlID0gY2hpbGRyZW4ubGVuZ3RoID09PSAwID8gU2VsZWN0T3B0aW9uVHlwZXMuU2VsZWN0T25lIDogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyZW50TGluZU9mTm9kZShsaXN0UGFyZW50OiBTZWxlY3RPcHRpb25bXSwgbm9kZTogVHJlZU1vZGVsKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDtcclxuICAgICAgICBwYXJlbnQgPSB0aGlzLnRyZWVEYXRhLmZpbmQoeCA9PiB4LnJvb3RJZCA9PT0gbm9kZS5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBsaXN0UGFyZW50ID0gWy4uLmxpc3RQYXJlbnQsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBwYXJlbnQucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IHBhcmVudC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnQucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW5cclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50TGluZU9mTm9kZShsaXN0UGFyZW50LCBwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlzdFBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlU2VsZWN0SW5jbHVkZU5vZGUobm9kZTogU2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW11cclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLm1hcCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBsZXQgZGlzYWJsZU5vZGVzID0gW11cclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpc2FibGVkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkICYmIHgucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlTm9kZXMucHVzaChub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kaXNhYmxlZExpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gY2hpbGQuaWQgJiYgeC5wYXJlbnRJZCA9PT0gY2hpbGQucGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVOb2Rlcy5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSBbLi4udGhpcy5kaXNhYmxlZExpc3QsIC4uLmRpc2FibGVOb2Rlc107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVTZWxlY3RTaW5nbGVOb2RlKG5vZGU6IFNlbGVjdGVkT3B0aW9uKXtcclxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBTZWxlY3RPcHRpb25UeXBlcy5TZWxlY3RPbmUpIHtcclxuICAgICAgICAgICAgbGV0IGRpc2FibGVOb2RlcyA9IFtdXHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kaXNhYmxlZExpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZU5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSBbLi4udGhpcy5kaXNhYmxlZExpc3QsIC4uLmRpc2FibGVOb2Rlc107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZVNlbGVjdGVkTm9kZShub2RlOiBTZWxlY3RPcHRpb24pIHtcclxuICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXVxyXG4gICAgICAgIGNoaWxkcmVuID0gdGhpcy5nZXRBbGxDaGlsZHJlbk5vZGVSZWN1cnNpdmUoY2hpbGRyZW4sIHtcclxuICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IG5vZGUuaXRlbU5hbWUsXHJcbiAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gdGhpcy5kaXNhYmxlZExpc3QuZmlsdGVyKHggPT5cclxuICAgICAgICAgICAgY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+XHJcbiAgICAgICAgICAgICAgICAoeC5pZCA9PT0gY2hpbGQuaWQgJiYgeC5wYXJlbnRJZCA9PT0gY2hpbGQucGFyZW50SWQpXHJcbiAgICAgICAgICAgICkubGVuZ3RoID09PSAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmZpbHRlcih4ID0+ICEoeC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKSk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
701
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeE4sT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBSXJFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztB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TCxDQUFDOzs7WUFodUJKLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUsbUNBQW1DO2dCQUM3QyxvM0xBQXVEO2dCQUV2RCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7YUFDeEM7OztZQTlCeUMsaUJBQWlCO1lBUWxELHVCQUF1QjtZQUx2QixZQUFZO1lBa0JaLHNCQUFzQjtZQWpCdEIsZUFBZTtZQUNmLFlBQVk7WUFJWixzQkFBc0I7WUFUeUMsVUFBVTtZQWlCekUsZUFBZSx1QkFnRWYsTUFBTSxTQUFDLGVBQWU7Ozt3QkFiMUIsWUFBWSxTQUFDLGFBQWEsRUFBRSxFQUFFOzJCQUU5QixTQUFTLFNBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt3QkErQ25GLFlBQVksU0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0NoZWNrZWQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBRdWVyeUxpc3QsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWljb24vaWNvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSXRlbUljb25UeXBlIH0gZnJvbSAnLi4vcmVsYXRlZC9jb21tb24vaXRlbS1pY29uLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IFRyZWVDb25maWcgfSBmcm9tICcuLi90cmVlL21vZGVsL3RyZWUtY29uZmlnLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLWZsYXQtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVNb2RlbCB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyZWVDb21wb25lbnQgfSBmcm9tICcuLi90cmVlL3RyZWUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uVHlwZXMgfSBmcm9tICcuL2VudW0vc2VsZWN0LW9wdGlvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBTZWxlY3RPcHRpb24gfSBmcm9tICcuL21vZGVsL3NlbGVjdC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RQb3B1cERhdGEgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1wb3B1cC1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0U2VhcmNoT3B0aW9uIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Qtc2VhcmNoLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdENvbnN0IH0gZnJvbSAnLi9tb2RlbC9zZWxlY3QuY29uc3QnO1xyXG5pbXBvcnQgeyBTZWxlY3RlZE9wdGlvbiB9IGZyb20gJy4vbW9kZWwvc2VsZXRlZC1vcHRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBRTVNTZWxlY3RHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3QtZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncW1zLXNlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLXBvcHVwJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtaW5jbHVkZS1jaGlsZHJlbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zZWxlY3QtaW5jbHVkZS1jaGlsZHJlbi5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0SW5jbHVkZUNoaWxkcmVuUG9wVXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBMQU5HOiBhbnk7XHJcbiAgICBoZWFkZXJOYW1lID0gJyc7XHJcbiAgICBzZWxlY3RJbmNsdWRlTGFiZWwgPSAnJztcclxuICAgIHRyZWVEYXRhOiBBcnJheTxUcmVlTW9kZWw+ID0gW107XHJcbiAgICB0cmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG5cclxuICAgIGNoZWNrZWROb2RlTGlzdDogQXJyYXk8U2VsZWN0ZWRPcHRpb24+ID0gW107XHJcbiAgICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PFNlbGVjdE9wdGlvbj4gPSBbXTtcclxuICAgIHNlbGVjdGVkRGF0YTogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG5cclxuICAgIGNvbW1vbkNoZWNrZWRMaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcblxyXG4gICAgaXRlbVR5cGUgPSAwO1xyXG4gICAgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XHJcbiAgICBkaXNhYmxlZExpc3Q6IFNlbGVjdGVkT3B0aW9uW10gPSBbXTtcclxuICAgIG9yZ2luYWxEaXNhYmxlTGlzdDogYW55ID0gW107XHJcbiAgICBtYXhTZWxlY3RJdGVtQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgICBpc0RvY3VtZW50RXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XHJcbiAgICBzaW5nbGVTZWxlY3RPcHRpb24gPSBmYWxzZTtcclxuICAgIHNlYXJjaE9yZGVyID0gW107XHJcblxyXG4gICAgbXlDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICBmaWx0ZXJlZE9wdGlvbnM6IFNlbGVjdFNlYXJjaE9wdGlvbltdID0gW107XHJcbiAgICBpc0lucHV0VmFsdWUgPSBmYWxzZTtcclxuICAgIHNlbGVjdGVkRm9sZGVyOiBUcmVlRmxhdE5vZGUgPSBudWxsO1xyXG4gICAgbGlzdENoaWxkcmVuU2VsZWN0T25lOiBhbnkgPSBbXTtcclxuICAgIGluY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgZWRpdEl0ZW06IFNlbGVjdGVkT3B0aW9uO1xyXG4gICAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlO1xyXG4gICAgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBvbkV4cGFuZEZvbGRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0T3B0aW9uPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oVHJlZUNvbXBvbmVudCwge30pIGRhdGFUcmVlczogUXVlcnlMaXN0PFRyZWVDb21wb25lbnQ+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9Db21wbGV0ZUlucHV0U2VhcmNoJywgeyByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCBzdGF0aWM6IHRydWUgfSlcclxuICAgIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RJbmNsdWRlQ2hpbGRyZW5Qb3BVcENvbXBvbmVudD4sXHJcbiAgICAgICAgcHVibGljIGdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdEdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgICAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UG9wdXBEYXRhXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmhlYWRlck5hbWUgPSBkYXRhLmhlYWRlck5hbWU7XHJcbiAgICAgICAgdGhpcy50cmVlRGF0YSA9IGRhdGEudHJlZURhdGE7XHJcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0gZGF0YS50cmVlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaXNrRGF0YSA9IGRhdGE/LnNlbGVjdGVkTm9kZSB8fCBbXTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9ICQuZXh0ZW5kKHRydWUsIFtdLCBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXSk7XHJcbiAgICAgICAgdGhpcy5vcmdpbmFsRGlzYWJsZUxpc3QgPSAkLmV4dGVuZCh0cnVlLCBbXSwgZGF0YS5kaXNhYmxlZExpc3QgfHwgW10pO1xyXG4gICAgICAgIHRoaXMuc2luZ2xlU2VsZWN0T3B0aW9uID0gZGF0YS50cmVlQ29uZmlnLnNpbmdsZVNlbGVjdGVkTm9kZTtcclxuICAgICAgICB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCA9IGRhdGEubWF4U2VsZWN0SXRlbUNvdW50O1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gZGF0YT8uc2VsZWN0ZWRMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUNoaWxkcmVuID0gZGF0YT8uaW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMuZWRpdEl0ZW0gPSBkYXRhLmVkaXRJdGVtO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0SW5jbHVkZUxhYmVsID0gZGF0YS5zZWxlY3RJbmNsdWRlTGFiZWw7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJQcm9jZXNzQXJlYUljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRG9jdW1lbnRJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckZvbGRlckljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRGV2aWF0aW9uSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJDaGVja2xpc3RJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclJpc2tJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmluaXRUcmVlKHRoaXMuY2hlY2tlZE5vZGVMaXN0KTtcclxuICAgICAgICBpZiAodGhpcy5lZGl0SXRlbSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzRWRpdEl0ZW0odGhpcy5lZGl0SXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNlYXJjaFJlc3VsdChbXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1lc3NhZ2UnLCBbJyRldmVudCddKVxyXG4gICAgb25NZXNzYWdlKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT09IFNlbGVjdENvbnN0LkhJREVfU0VBUkNIX1JFU1VMVCkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZS5jbG9zZVBhbmVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlLmdldExhbmd1YWdlU3ViamVjdCQucGlwZSgpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2VhcmNoU2VsZWN0LnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSByZXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5teUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hSZWxhdGVkKHZhbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gdGhpcy5zZWFyY2hPcmRlciA9IHRoaXMuZ2V0U2VhcmNoT3JkZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZS5vcGVuUGFuZWwoKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXV0b0NvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFRyZWUoc2VsZWN0ZWRPcHRpb25zOiBTZWxlY3RlZE9wdGlvbltdKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuY29uY2F0KGVsZW1lbnQuY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLmluY2x1ZGVDaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gWy4uLnRoaXMuZGlzYWJsZWRMaXN0LCBlbGVtZW50XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSBbLi4udGhpcy5kaXNhYmxlZExpc3QsIC4uLmVsZW1lbnQuY2hpbGRyZW4ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogeC50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vU2VsZWN0ZWRDaGlsZHJlbjogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub0NoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmluY2x1ZGVDaGlsZHJlbil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gWy4uLnRoaXMuZGlzYWJsZWRMaXN0LCBlbGVtZW50XTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMubWFwU2VsZWN0T3B0aW9uVG9UcmVlTm9kZSh0aGlzLnNlbGVjdGVkT3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzRWRpdEl0ZW0oc2VsZWN0ZWRPcHRpb246IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDtcclxuICAgICAgICBsZXQgcGFyZW50TGlzdDogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICAgICAgICBwYXJlbnQgPSB0aGlzLnRyZWVEYXRhLmZpbmQoeCA9PiB4LnJvb3RJZCA9PT0gc2VsZWN0ZWRPcHRpb24ucGFyZW50SWQpO1xyXG4gICAgICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgICAgICAgcGFyZW50TGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiBwYXJlbnQucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IHBhcmVudC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnQucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHBhcmVudExpc3QgPSB0aGlzLmdldFBhcmVudExpbmVPZk5vZGUocGFyZW50TGlzdCwgcGFyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG5vZGU6IFRyZWVGbGF0Tm9kZTtcclxuICAgICAgICBpZihwYXJlbnRMaXN0Lmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICBwYXJlbnRMaXN0LmZvckVhY2gocGFyZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0uZ2V0Tm9kZUJ5SWRBbmRQYXJlbnRJZChwYXJlbnQuaWQsIHBhcmVudC5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS5leHBhbmROb2RlKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgXyR7bm9kZS5wYXJlbnRJZCA/IG5vZGUucGFyZW50SWQudG9Mb3dlckNhc2UoKSA6ICcnfV8ke25vZGUuaWQudG9Mb3dlckNhc2UoKX1fJHtub2RlLmxldmVsfWApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9kZSA9IHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS5nZXROb2RlQnlJZEFuZFBhcmVudElkKHNlbGVjdGVkT3B0aW9uLmlkLCBzZWxlY3RlZE9wdGlvbi5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhVHJlZXMudG9BcnJheSgpWzBdLmV4cGFuZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgXyR7bm9kZS5wYXJlbnRJZCA/IG5vZGUucGFyZW50SWQudG9Mb3dlckNhc2UoKSA6ICcnfV8ke25vZGUuaWQudG9Mb3dlckNhc2UoKX1fJHtub2RlLmxldmVsfWApO1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyhmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tlZE5vZGVMaXN0W2luZGV4XS50eXBlID09PSBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSW5jbHVkZUNoaWxkcmVuKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVOb2RlRnJvbVNlbGVjdGVkTm9kZShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCAmJiB4LnBhcmVudElkID09PSBpdGVtLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKHBvc2l0aW9uLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzRWRpdEl0ZW0odGhpcy5jaGVja2VkTm9kZUxpc3RbaW5kZXhdKTtcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVTZWxlY3RlZE5vZGUodGhpcy5jaGVja2VkTm9kZUxpc3RbaW5kZXhdKTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RTZWFyY2hPcHRpb24oaXRlbTogU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCAmJiB4LnBhcmVudElkID09PSBpdGVtLnBhcmVudElkKTtcclxuICAgICAgICBpZiAocG9zaXRpb24gPCAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJbmNsdWRlQ2hpbGRyZW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmYWN0b3JTZWxlY3RMaXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKGl0ZW0pXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vQ2hpbGRyZW46IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9TZWxlY3RlZENoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZm9jdXNFZGl0SXRlbSh7XHJcbiAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlLFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICBub0NoaWxkcmVuOiAwLFxyXG4gICAgICAgICAgICBub1NlbGVjdGVkQ2hpbGRyZW46IDBcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0SXRlbUljb25UeXBlKGl0ZW06IFNlbGVjdFNlYXJjaE9wdGlvbikge1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uICYmIGl0ZW0uaXRlbUljb24ubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUubmFtZTtcclxuICAgICAgICBpZiAoaXRlbS5pdGVtSWNvblBhdGggJiYgaXRlbS5pdGVtSWNvblBhdGgubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUucGF0aDtcclxuICAgICAgICBpZiAoaXRlbS5pdGVtSWNvbkJhc2U2NCAmJiBpdGVtLml0ZW1JY29uQmFzZTY0Lmxlbmd0aCkgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLmJhc2U2NDtcclxuICAgICAgICBpZiAoaXRlbS5pdGVtSWNvblN2ZyAmJiBpdGVtLml0ZW1JY29uU3ZnLmxlbmd0aCkgcmV0dXJuIHRoaXMuaXRlbUljb25UeXBlLnN2ZztcclxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUubm9uZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbWFnZVBhdGgoaXRlbTogU2VsZWN0U2VhcmNoT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybChpdGVtLml0ZW1JY29uQmFzZTY0KSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzdWx0SGVpZ2h0KGFycj86IFNlbGVjdE9wdGlvbltdKSB7XHJcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDQ4NDtcclxuICAgICAgICBjb25zdCBwb3B1cF9jb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncW1zbGliX3JlbGF0ZWRfcG9wdXBfY29udGVudCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxpbmVfX2RpdmlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lX19kaXZpZGVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHBvcHVwX2NvbnRlbnQgJiYgbGluZV9fZGl2aWRlcikge1xyXG4gICAgICAgICAgICBtYXhIZWlnaHQgPSB0aGlzLmdldE9mZnNldEhlaWdodChwb3B1cF9jb250ZW50LCB0cnVlKSArIHRoaXMuZ2V0T2Zmc2V0SGVpZ2h0KGxpbmVfX2RpdmlkZXIsIHRydWUpICogMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3Qgdmlld3JlcG9ydHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyZWxhdGVkLXZpZXdwb3J0JylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICh2aWV3cmVwb3J0cykge1xyXG4gICAgICAgICAgICBpZiAoY29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHtjb250ZW50UmVzdWx0Lm9mZnNldEhlaWdodH1weGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2VhcmNoUmVsYXRlZChfdmFsOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF92YWwpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB0aGlzLm15Q29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiAoX3ZhbCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmICghIV92YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2guZW1pdChfdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93U2VhcmNoUmVzdWx0KCkge1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlSZWxhdGVkKHJlbGF0ZWQ/OiBTZWxlY3RPcHRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21tb25DaGVja2VkTm9kZShsaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+KSB7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0SW5jbHVkZUNoaWxkcmVuKGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGxldCBsaXN0Q2hpbGRyZW46IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgICAgICAgbGlzdENoaWxkcmVuID0gdGhpcy5nZXRBbGxDaGlsZHJlbk5vZGVSZWN1cnNpdmUobGlzdENoaWxkcmVuLCBpdGVtKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxpc3RDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IHguaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0geC5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSW5jbHVkZUNoaWxkcmVuKGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgJiYgeC50eXBlID09PSBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4pO1xyXG4gICAgICAgIGlmKGluZGV4ID49IDApe1xyXG4gICAgICAgICAgICBsZXQgbGlzdENoaWxkcmVuID0gdGhpcy5jaGVja2VkTm9kZUxpc3RbaW5kZXhdLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgobm9kZSA9PiBub2RlLmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGVTZWxlY3RlZE5vZGUodGhpcy5jaGVja2VkTm9kZUxpc3RbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpc3RDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgobm9kZSA9PiBub2RlLmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSB0aGlzLmRpc2FibGVkTGlzdC5maWx0ZXIobm9kZSA9PiAhKHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBsaXN0Q2hpbGRyZW4gPSBbXTtcclxuICAgICAgICBsaXN0Q2hpbGRyZW4gPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0Q2hpbGRyZW4sIGl0ZW0pO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XHJcbiAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSB0aGlzLmRpc2FibGVkTGlzdC5maWx0ZXIoeCA9PiAhKHguaWQgPT09IGl0ZW0uaWQgJiYgeC5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0Q2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgobm9kZSA9PiBub2RlLmlkID09PSB4LmlkICYmIG5vZGUucGFyZW50SWQgPT09IHgucGFyZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gdGhpcy5kaXNhYmxlZExpc3QuZmlsdGVyKG5vZGUgPT4gISh4LmlkID09PSBub2RlLmlkICYmIHgucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0UmVzdWx0LCBpdGVtOiBUcmVlRmxhdE5vZGUpOiBTZWxlY3RPcHRpb25bXSB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnBhcmVudElkID09PSBpdGVtLmlkKTtcclxuICAgICAgICBsZXQgY2hpbGRyZW5JdGVtID0gWy4uLm5ldyBTZXQodGhpcy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnJvb3RJZCA9PT0gaXRlbS5pZCAmJiAhIXguY2hpbGRJZCkpXTtcclxuICAgICAgICBpZiAoY2hpbGRyZW5JdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5JdGVtID0gY2hpbGRyZW5JdGVtLmZpbHRlcih4ID0+IGxpc3RSZXN1bHQuZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5jaGlsZElkICYmIG5vZGUucGFyZW50SWQgPT09IHgucm9vdElkKSA8IDApXHJcbiAgICAgICAgICAgIGxpc3RSZXN1bHQgPSBsaXN0UmVzdWx0LmNvbmNhdChbLi4ubmV3IFNldChjaGlsZHJlbkl0ZW0ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5jaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiB4LmNoaWxkTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZTogeC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5DaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoeCA9PiBsaXN0UmVzdWx0LmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IHgucm9vdElkICYmIG5vZGUucGFyZW50SWQgPT09IHgucGFyZW50SWQpIDwgMClcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2hpbGRyZW46IFNlbGVjdE9wdGlvbltdID0gY2hpbGRyZW4ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IHgucGFyZW50SWQ/Lmxlbmd0aCA+IDAgPyB4LnN1Yk5hbWUgOiB4LnJvb3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGlzdFJlc3VsdCA9IGxpc3RSZXN1bHQuY29uY2F0KFxyXG4gICAgICAgICAgICAgICAgdW5pcXVlQ2hpbGRyZW4uZmlsdGVyKCh4LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gdW5pcXVlQ2hpbGRyZW4uZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5pZCAmJiBub2RlLnBhcmVudElkID09PSB4LnBhcmVudElkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgICAgICAgICAgIGxpc3RSZXN1bHQgPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0UmVzdWx0LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0UmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBvbkFkZENsaWNrKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuY2hlY2tlZE5vZGVMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPZmZzZXRIZWlnaHQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluY2x1ZGVNYXJnaW46IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBlbG1IZWlnaHQgPSAwLCBlbG1NYXJnaW4gPSAwO1xyXG5cclxuICAgICAgICBlbG1IZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBpZiAoaW5jbHVkZU1hcmdpbikge1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBlbG1NYXJnaW4gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbS5yZXBsYWNlKCdweCcsICcnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGVsbUhlaWdodCArIGVsbU1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUNoaXBOYW1lKGl0ZW06IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0uaXRlbU5hbWV9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtU2VsZWN0ZWRDaGlsZHJlblJhdGlvKGl0ZW06IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0ubm9TZWxlY3RlZENoaWxkcmVufS8ke2l0ZW0ubm9DaGlsZHJlbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRWxsaXBzaXNBY3RpdmUoZTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZSA/IChlLmNsaWVudFdpZHRoIDwgZS5zY3JvbGxXaWR0aCkgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVTZWxlY3RJdGVtKG5vZGU6IFNlbGVjdE9wdGlvbikge1xyXG4gICAgICAgIGNvbnN0IFNlbGVjdE9wdGlvbiA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBpZiAoU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcclxuICAgICAgICAgICAgICAgIGlkOiBTZWxlY3RPcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IFNlbGVjdE9wdGlvbi5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc05vZGVTZWxlY3RlZChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGRyZW5PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICBsZXQgaXRlbSA9IG5ldyBTZWxlY3RPcHRpb24oKTtcclxuICAgICAgICBpdGVtLmlkID0gbm9kZS5pZDtcclxuICAgICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdE5vZGVUcmVlRXZlbnQobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICBpZiAocG9zaXRpb24gPiAtMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cGFuZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluY2x1ZGVDaGlsZHJlbihub2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChpdGVtID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4geC5pZCAhPT0gbm9kZS5pZCB8fCB4LnBhcmVudElkICE9PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlTm9kZUZyb21TZWxlY3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgoaXRlbSA9PiBub2RlLmlkID09PSBpdGVtLmlkICYmIG5vZGUucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKGl0ZW1JbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+IHguaWQgIT09IG5vZGUuaWQgfHwgeC5wYXJlbnRJZCAhPT0gbm9kZS5wYXJlbnRJZClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5leHBhbmRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RJbmNsdWRlQ2hpbGRyZW4obm9kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkNoaWxkcmVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZmFjdG9yU2VsZWN0TGlzdChub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IG5vZGUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuU2VsZWN0T25lXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuU2VsZWN0T25lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBub1NlbGVjdGVkQ2hpbGRyZW46IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9DaGlsZHJlbjogMCxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMubWFwU2VsZWN0T3B0aW9uVG9UcmVlTm9kZSh0aGlzLnNlbGVjdGVkT3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VmFsdWUoZSkge1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUNoaWxkcmVuID0gISFlLmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSAkLmV4dGVuZCh0cnVlLCBbXSwgdGhpcy5vcmdpbmFsRGlzYWJsZUxpc3QgfHwgW10pO1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2gobm9kZSA9PiB7IFxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RJbmNsdWRlTm9kZShub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0U2luZ2xlTm9kZShub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUobGlzdDogU2VsZWN0T3B0aW9uW10pOiBUcmVlRmxhdE5vZGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIGxpc3QubWFwKHggPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWZhY3RvclNlbGVjdExpc3Qobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICAgICAgdGhpcy5jb21iaW5lTm9kZXMoe1xyXG4gICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgaXRlbU5hbWU6IG5vZGUubmFtZSxcclxuICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuLFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZFxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTm9kZUZyb21TZWxlY3RlZE5vZGUobm9kZTogVHJlZUZsYXROb2RlKXtcclxuICAgICAgICBsZXQgY2hpbGRyZW4gPSBbXTtcclxuICAgICAgICBjaGlsZHJlbiA9IHRoaXMuZ2V0QWxsQ2hpbGRyZW5Ob2RlUmVjdXJzaXZlKGNoaWxkcmVuLCBub2RlKTtcclxuICAgICAgICBsZXQgcGFyZW50O1xyXG4gICAgICAgIFxyXG4gICAgICAgIGxldCBwYXJlbnRMaXN0OiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgIHBhcmVudCA9IHRoaXMudHJlZURhdGEuZmluZCh4ID0+IHgucm9vdElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIHBhcmVudExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogcGFyZW50LnJvb3RJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBwYXJlbnQucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogcGFyZW50LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwYXJlbnRMaXN0ID0gdGhpcy5nZXRQYXJlbnRMaW5lT2ZOb2RlKHBhcmVudExpc3QsIHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwYXJlbnRJbmRleCA9IC0xO1xyXG4gICAgICAgIGlmKHBhcmVudExpc3QubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHBhcmVudExpc3QuZm9yRWFjaChwYXJlbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50SW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IHBhcmVudC5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gcGFyZW50LnBhcmVudElkLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgaWYocGFyZW50SW5kZXggPj0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdFtwYXJlbnRJbmRleF0uY2hpbGRyZW4uZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGluZGV4ID49IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdFtwYXJlbnRJbmRleF0uY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdFtwYXJlbnRJbmRleF0uY2hpbGRyZW4uZmluZEluZGV4KHggPT4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBjaGlsZC5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0gY2hpbGQucGFyZW50SWQudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGluZGV4ID49IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3RbcGFyZW50SW5kZXhdLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3BhcmVudEluZGV4XS5ub1NlbGVjdGVkQ2hpbGRyZW4gPSB0aGlzLmNoZWNrZWROb2RlTGlzdFtwYXJlbnRJbmRleF0uY2hpbGRyZW4ubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb21iaW5lTm9kZXMocm9vdDogU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gW107XHJcbiAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShjaGlsZHJlbiwge1xyXG4gICAgICAgICAgICBpZDogcm9vdC5pZCxcclxuICAgICAgICAgICAgbmFtZTogcm9vdC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IHJvb3QucGFyZW50SWQsXHJcbiAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTm9kZUluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gcm9vdC5pZCAmJiB4LnBhcmVudElkID09PSByb290LnBhcmVudElkKTtcclxuXHJcbiAgICAgICAgbGV0IG5vZGVMaXN0ID0gW107XHJcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0gY2hpbGQuaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gY2hpbGQucGFyZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RJbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IGNoaWxkLmlkICYmIG5vZGUucGFyZW50SWQgPT09IGNoaWxkLnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKHNlbGVjdEluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gdGhpcy5kaXNhYmxlZExpc3QuZmlsdGVyKG5vZGUgPT4gIShjaGlsZC5pZCA9PT0gbm9kZS5pZCAmJiBjaGlsZC5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCkpO1xyXG4gICAgICAgICAgICAgICAgbm9kZUxpc3QucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoc2VsZWN0ZWROb2RlSW5kZXggPj0gMCB8fCBub2RlTGlzdC5sZW5ndGggPiAwIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWROb2RlSW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcm9vdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogcm9vdC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHJvb3QucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vU2VsZWN0ZWRDaGlsZHJlbjogMCxcclxuICAgICAgICAgICAgICAgICAgICBub0NoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlSW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdFtzZWxlY3RlZE5vZGVJbmRleF0uY2hpbGRyZW4gPSBub2RlTGlzdDtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3Rbc2VsZWN0ZWROb2RlSW5kZXhdLm5vQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3NlbGVjdGVkTm9kZUluZGV4XS5ub1NlbGVjdGVkQ2hpbGRyZW4gPSBub2RlTGlzdC5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3NlbGVjdGVkTm9kZUluZGV4XS50eXBlID0gU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyZW50TGluZU9mTm9kZShsaXN0UGFyZW50OiBTZWxlY3RPcHRpb25bXSwgbm9kZTogVHJlZU1vZGVsKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDtcclxuICAgICAgICBwYXJlbnQgPSB0aGlzLnRyZWVEYXRhLmZpbmQoeCA9PiB4LnJvb3RJZCA9PT0gbm9kZS5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBsaXN0UGFyZW50ID0gWy4uLmxpc3RQYXJlbnQsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBwYXJlbnQucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IHBhcmVudC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnQucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW5cclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50TGluZU9mTm9kZShsaXN0UGFyZW50LCBwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlzdFBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlU2VsZWN0SW5jbHVkZU5vZGUobm9kZTogU2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkcmVuID0gW11cclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuLm1hcCh4ID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhc0NoaWxkOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBsZXQgZGlzYWJsZU5vZGVzID0gW11cclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRpc2FibGVkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBub2RlLmlkICYmIHgucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlTm9kZXMucHVzaChub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kaXNhYmxlZExpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gY2hpbGQuaWQgJiYgeC5wYXJlbnRJZCA9PT0gY2hpbGQucGFyZW50SWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVOb2Rlcy5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSBbLi4udGhpcy5kaXNhYmxlZExpc3QsIC4uLmRpc2FibGVOb2Rlc107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVTZWxlY3RTaW5nbGVOb2RlKG5vZGU6IFNlbGVjdGVkT3B0aW9uKXtcclxuICAgICAgICBpZiAobm9kZS50eXBlID09PSBTZWxlY3RPcHRpb25UeXBlcy5TZWxlY3RPbmUpIHtcclxuICAgICAgICAgICAgbGV0IGRpc2FibGVOb2RlcyA9IFtdXHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kaXNhYmxlZExpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZU5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSBbLi4udGhpcy5kaXNhYmxlZExpc3QsIC4uLmRpc2FibGVOb2Rlc107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZVNlbGVjdGVkTm9kZShub2RlOiBTZWxlY3RlZE9wdGlvbikge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gdGhpcy5kaXNhYmxlZExpc3QuZmlsdGVyKHggPT4gISh4LmlkID09PSBub2RlLmlkICYmIHgucGFyZW50SWQgPT09IG5vZGUucGFyZW50SWQpKTtcclxuICAgICAgICBpZihub2RlLnR5cGUgPT09IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlbil7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9ICBub2RlLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmZpbHRlcih4ID0+XHJcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT5cclxuICAgICAgICAgICAgICAgICAgICAoeC5pZCA9PT0gY2hpbGQuaWQgJiYgeC5wYXJlbnRJZCA9PT0gY2hpbGQucGFyZW50SWQpXHJcbiAgICAgICAgICAgICAgICApLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|