@sapui5/sap.fe.templates 1.113.0 → 1.114.1
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/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +20 -3
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js.map +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +24 -2
- package/src/sap/fe/templates/ListReport/ListReportTemplating-dbg.js +7 -7
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js.map +1 -1
- package/src/sap/fe/templates/ListReport/ListReportTemplating.ts +8 -6
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState-dbg.js +14 -52
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js.map +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +14 -55
- package/src/sap/fe/templates/ListReport/view/fragments/MacroChart.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI-dbg.js +19 -6
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js.map +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +19 -9
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +102 -69
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js.map +1 -1
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +104 -73
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share-dbg.js +7 -2
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js.map +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +5 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +3 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.block-dbg.js +7 -6
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.block.js +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.block.js.map +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.block.tsx +8 -7
- package/src/sap/fe/templates/ObjectPage/view/fragments/MacroChart.fragment.xml +1 -1
- package/src/sap/fe/templates/library-dbg.js +1 -1
- package/src/sap/fe/templates/library-preload.js +15 -15
- package/src/sap/fe/templates/library-preload.js.map +1 -1
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/manifest.json +1 -1
- package/src/sap/fe/templates/messagebundle.properties +6 -0
- package/src/sap/fe/templates/messagebundle_ar.properties +5 -1
- package/src/sap/fe/templates/messagebundle_bg.properties +6 -2
- package/src/sap/fe/templates/messagebundle_ca.properties +5 -1
- package/src/sap/fe/templates/messagebundle_cs.properties +5 -1
- package/src/sap/fe/templates/messagebundle_cy.properties +5 -1
- package/src/sap/fe/templates/messagebundle_da.properties +5 -1
- package/src/sap/fe/templates/messagebundle_de.properties +6 -2
- package/src/sap/fe/templates/messagebundle_el.properties +5 -1
- package/src/sap/fe/templates/messagebundle_en.properties +3 -1
- package/src/sap/fe/templates/messagebundle_en_GB.properties +5 -1
- package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +5 -1
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +5 -1
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +5 -1
- package/src/sap/fe/templates/messagebundle_es.properties +5 -1
- package/src/sap/fe/templates/messagebundle_es_MX.properties +5 -1
- package/src/sap/fe/templates/messagebundle_et.properties +5 -1
- package/src/sap/fe/templates/messagebundle_fi.properties +8 -4
- package/src/sap/fe/templates/messagebundle_fr.properties +5 -1
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +6 -2
- package/src/sap/fe/templates/messagebundle_hi.properties +5 -1
- package/src/sap/fe/templates/messagebundle_hr.properties +5 -1
- package/src/sap/fe/templates/messagebundle_hu.properties +5 -1
- package/src/sap/fe/templates/messagebundle_id.properties +5 -1
- package/src/sap/fe/templates/messagebundle_it.properties +8 -4
- package/src/sap/fe/templates/messagebundle_iw.properties +5 -1
- package/src/sap/fe/templates/messagebundle_ja.properties +7 -3
- package/src/sap/fe/templates/messagebundle_kk.properties +5 -1
- package/src/sap/fe/templates/messagebundle_ko.properties +5 -1
- package/src/sap/fe/templates/messagebundle_lt.properties +5 -1
- package/src/sap/fe/templates/messagebundle_lv.properties +5 -1
- package/src/sap/fe/templates/messagebundle_ms.properties +5 -1
- package/src/sap/fe/templates/messagebundle_nl.properties +5 -1
- package/src/sap/fe/templates/messagebundle_no.properties +5 -1
- package/src/sap/fe/templates/messagebundle_pl.properties +5 -1
- package/src/sap/fe/templates/messagebundle_pt.properties +5 -1
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +5 -1
- package/src/sap/fe/templates/messagebundle_ro.properties +5 -1
- package/src/sap/fe/templates/messagebundle_ru.properties +5 -1
- package/src/sap/fe/templates/messagebundle_sh.properties +5 -1
- package/src/sap/fe/templates/messagebundle_sk.properties +5 -1
- package/src/sap/fe/templates/messagebundle_sl.properties +5 -1
- package/src/sap/fe/templates/messagebundle_sv.properties +5 -1
- package/src/sap/fe/templates/messagebundle_th.properties +5 -1
- package/src/sap/fe/templates/messagebundle_tr.properties +5 -1
- package/src/sap/fe/templates/messagebundle_uk.properties +5 -1
- package/src/sap/fe/templates/messagebundle_vi.properties +5 -1
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +5 -1
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +5 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2023 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/collaboration/ActivitySync", "sap/fe/core/controllerextensions/collaboration/Manage", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MassEdit", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/PageController", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/m/Link", "sap/m/MessageBox", "sap/ui/core/Core", "sap/ui/core/mvc/OverrideExecution", "sap/ui/model/odata/v4/ODataListBinding", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, ActionRuntime, CommonUtils, BusyLocker, ActivitySync, Manage, draft, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, MassEdit, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, ClassSupport, ModelHelper, ResourceModelHelper, PageController, CommonHelper, DelegateUtil, TableHelper, TableUtils, SelectionVariant, ExtensionAPI, TableScroller, InstanceManager, Link, MessageBox, Core, OverrideExecution, ODataListBinding, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/collaboration/ActivitySync", "sap/fe/core/controllerextensions/collaboration/Manage", "sap/fe/core/controllerextensions/editFlow/draft", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/MassEdit", "sap/fe/core/controllerextensions/MessageHandler", "sap/fe/core/controllerextensions/PageReady", "sap/fe/core/controllerextensions/Paginator", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/ResourceModelHelper", "sap/fe/core/library", "sap/fe/core/PageController", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/table/TableHelper", "sap/fe/macros/table/Utils", "sap/fe/navigation/SelectionVariant", "sap/fe/templates/ObjectPage/ExtensionAPI", "sap/fe/templates/TableScroller", "sap/m/InstanceManager", "sap/m/Link", "sap/m/MessageBox", "sap/ui/core/Core", "sap/ui/core/message/Message", "sap/ui/core/mvc/OverrideExecution", "sap/ui/model/odata/v4/ODataListBinding", "./overrides/IntentBasedNavigation", "./overrides/InternalRouting", "./overrides/MessageHandler", "./overrides/Paginator", "./overrides/Share", "./overrides/ViewState"], function (Log, merge, ActionRuntime, CommonUtils, BusyLocker, ActivitySync, Manage, draft, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, MassEdit, MessageHandler, PageReady, Paginator, Placeholder, Share, ViewState, ClassSupport, ModelHelper, ResourceModelHelper, FELibrary, PageController, CommonHelper, DelegateUtil, TableHelper, TableUtils, SelectionVariant, ExtensionAPI, TableScroller, InstanceManager, Link, MessageBox, Core, Message, OverrideExecution, ODataListBinding, IntentBasedNavigationOverride, InternalRoutingOverride, MessageHandlerOverride, PaginatorOverride, ShareOverrides, ViewStateOverrides) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10;
|
|
@@ -23,6 +23,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
23
23
|
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
24
24
|
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
25
25
|
function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
|
|
26
|
+
const ProgrammingModel = FELibrary.ProgrammingModel;
|
|
26
27
|
let ObjectPageController = (_dec = defineUI5Class("sap.fe.templates.ObjectPage.ObjectPageController"), _dec2 = usingExtension(Placeholder), _dec3 = usingExtension(Share.override(ShareOverrides)), _dec4 = usingExtension(InternalRouting.override(InternalRoutingOverride)), _dec5 = usingExtension(Paginator.override(PaginatorOverride)), _dec6 = usingExtension(MessageHandler.override(MessageHandlerOverride)), _dec7 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec8 = usingExtension(InternalIntentBasedNavigation.override({
|
|
27
28
|
getNavigationMode: function () {
|
|
28
29
|
const bIsStickyEditMode = this.getView().getController().getStickyEditMode && this.getView().getController().getStickyEditMode();
|
|
@@ -363,16 +364,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
363
364
|
}
|
|
364
365
|
|
|
365
366
|
/**
|
|
366
|
-
* Find the last visible subsection and add the sapUxAPObjectPageSubSectionFitContainer CSS class if it contains only a
|
|
367
|
+
* Find the last visible subsection and add the sapUxAPObjectPageSubSectionFitContainer CSS class if it contains only a GridTable or a TreeTable.
|
|
367
368
|
*
|
|
368
369
|
* @param subSections The sub sections to look for
|
|
369
370
|
* @private
|
|
370
371
|
*/;
|
|
371
|
-
_proto.
|
|
372
|
+
_proto.checkSectionsForNonResponsiveTable = function checkSectionsForNonResponsiveTable(subSections) {
|
|
372
373
|
const changeClassForTables = (event, lastVisibleSubSection) => {
|
|
373
|
-
var _this$searchTableInBl
|
|
374
|
+
var _this$searchTableInBl;
|
|
374
375
|
const blocks = [...lastVisibleSubSection.getBlocks(), ...lastVisibleSubSection.getMoreBlocks()];
|
|
375
|
-
|
|
376
|
+
const tableType = blocks.length === 1 && ((_this$searchTableInBl = this.searchTableInBlock(blocks[0])) === null || _this$searchTableInBl === void 0 ? void 0 : _this$searchTableInBl.getType());
|
|
377
|
+
if (tableType && (tableType !== null && tableType !== void 0 && tableType.isA("sap.ui.mdc.table.GridTableType") || tableType !== null && tableType !== void 0 && tableType.isA("sap.ui.mdc.table.TreeTableType"))) {
|
|
376
378
|
//In case there is only a single table in a subSection we fit that to the whole page so that the scrollbar comes only on table and not on page
|
|
377
379
|
lastVisibleSubSection.addStyleClass("sapUxAPObjectPageSubSectionFitContainer");
|
|
378
380
|
lastVisibleSubSection.detachEvent("modelContextChange", changeClassForTables, this);
|
|
@@ -425,11 +427,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
425
427
|
const sections = this._getObjectPageLayoutControl().getSections();
|
|
426
428
|
for (const section of sections) {
|
|
427
429
|
subSections = section.getSubSections();
|
|
428
|
-
this.
|
|
430
|
+
this.checkSectionsForNonResponsiveTable(subSections);
|
|
429
431
|
}
|
|
430
432
|
} else {
|
|
431
433
|
subSections = this._getAllSubSections();
|
|
432
|
-
this.
|
|
434
|
+
this.checkSectionsForNonResponsiveTable(subSections);
|
|
433
435
|
}
|
|
434
436
|
};
|
|
435
437
|
_proto._onBeforeBinding = function _onBeforeBinding(oContext, mParameters) {
|
|
@@ -634,14 +636,26 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
634
636
|
|
|
635
637
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
636
638
|
;
|
|
637
|
-
_proto._onAfterBinding = function _onAfterBinding(
|
|
639
|
+
_proto._onAfterBinding = function _onAfterBinding(inputBindingContext, mParameters) {
|
|
640
|
+
var _this$getView, _this$getView$getView;
|
|
641
|
+
const viewLevel = (_this$getView = this.getView()) === null || _this$getView === void 0 ? void 0 : (_this$getView$getView = _this$getView.getViewData()) === null || _this$getView$getView === void 0 ? void 0 : _this$getView$getView.viewLevel;
|
|
642
|
+
// we are clearing any previous data from recommendations every time we come to new OP
|
|
643
|
+
// so that cached recommendations are not shown to user
|
|
644
|
+
if (viewLevel && viewLevel === 1) {
|
|
645
|
+
var _this$getView2, _this$getView2$getMod;
|
|
646
|
+
const currentContext = (_this$getView2 = this.getView()) === null || _this$getView2 === void 0 ? void 0 : (_this$getView2$getMod = _this$getView2.getModel("internal")) === null || _this$getView2$getMod === void 0 ? void 0 : _this$getView2$getMod.getProperty("/currentCtxt");
|
|
647
|
+
if (currentContext && currentContext.getPath() !== (inputBindingContext === null || inputBindingContext === void 0 ? void 0 : inputBindingContext.getPath())) {
|
|
648
|
+
var _this$getView3, _this$getView3$getMod;
|
|
649
|
+
(_this$getView3 = this.getView()) === null || _this$getView3 === void 0 ? void 0 : (_this$getView3$getMod = _this$getView3.getModel("internal")) === null || _this$getView3$getMod === void 0 ? void 0 : _this$getView3$getMod.setProperty("/recommendationsData", {});
|
|
650
|
+
}
|
|
651
|
+
}
|
|
638
652
|
const oObjectPage = this._getObjectPageLayoutControl();
|
|
639
653
|
const aTables = this._findTables();
|
|
640
654
|
this._sideEffects.clearFieldGroupsValidity();
|
|
641
655
|
|
|
642
656
|
// TODO: this is only a temp solution as long as the model fix the cache issue and we use this additional
|
|
643
657
|
// binding with ownRequest
|
|
644
|
-
|
|
658
|
+
const bindingContext = oObjectPage.getBindingContext();
|
|
645
659
|
let aIBNActions = [];
|
|
646
660
|
oObjectPage.getSections().forEach(function (oSection) {
|
|
647
661
|
oSection.getSubSections().forEach(function (oSubSection) {
|
|
@@ -675,12 +689,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
675
689
|
}
|
|
676
690
|
// Workaround ends here!!
|
|
677
691
|
|
|
678
|
-
//
|
|
679
|
-
//
|
|
680
|
-
const oActionOperationAvailableMap = JSON.parse(CommonHelper.parseCustomData(DelegateUtil.getCustomData(oTable, "operationAvailableMap")))
|
|
681
|
-
|
|
682
|
-
ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts, "table");
|
|
683
|
-
// Clear the selection in the table, need to be fixed and review with BLI: FIORITECHP1-24318
|
|
692
|
+
// Clear the selection in the table and update action enablement accordingly
|
|
693
|
+
// Will to be fixed with BLI: FIORITECHP1-24318
|
|
694
|
+
const oActionOperationAvailableMap = JSON.parse(CommonHelper.parseCustomData(DelegateUtil.getCustomData(oTable, "operationAvailableMap")));
|
|
695
|
+
ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, [], "table");
|
|
684
696
|
oTable.clearSelection();
|
|
685
697
|
}
|
|
686
698
|
});
|
|
@@ -718,11 +730,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
718
730
|
oBinding.attachChange(fnHandleChange);
|
|
719
731
|
}
|
|
720
732
|
};
|
|
721
|
-
if (
|
|
722
|
-
oModel =
|
|
733
|
+
if (bindingContext) {
|
|
734
|
+
oModel = bindingContext.getModel();
|
|
723
735
|
|
|
724
736
|
// Compute Edit Mode
|
|
725
|
-
oFinalUIState = this.editFlow.computeEditMode(
|
|
737
|
+
oFinalUIState = this.editFlow.computeEditMode(bindingContext);
|
|
726
738
|
if (ModelHelper.isCollaborationDraftSupported(oModel.getMetaModel())) {
|
|
727
739
|
oFinalUIState.then(() => {
|
|
728
740
|
if (this.getView().getModel("ui").getProperty("/isEditable")) {
|
|
@@ -738,11 +750,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
738
750
|
this._updateRelatedApps();
|
|
739
751
|
|
|
740
752
|
//Attach the patch sent and patch completed event to the object page binding so that we can react
|
|
741
|
-
const oBinding =
|
|
753
|
+
const oBinding = bindingContext.getBinding && bindingContext.getBinding() || bindingContext;
|
|
742
754
|
|
|
743
755
|
// Attach the event handler only once to the same binding
|
|
744
756
|
if (this.currentBinding !== oBinding) {
|
|
745
|
-
oBinding.attachEvent("patchSent", this.editFlow.handlePatchSent, this);
|
|
757
|
+
oBinding.attachEvent("patchSent", {}, this.editFlow.handlePatchSent, this);
|
|
746
758
|
this.currentBinding = oBinding;
|
|
747
759
|
}
|
|
748
760
|
aTables.forEach(function (oTable) {
|
|
@@ -758,6 +770,31 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
758
770
|
//To Compute the Edit Binding of the subObject page using root object page, create a context for draft root and update the edit button in sub OP using the context
|
|
759
771
|
ActionRuntime.updateEditButtonVisibilityAndEnablement(this.getView());
|
|
760
772
|
}
|
|
773
|
+
this.displayCollaborationMessage(mParameters === null || mParameters === void 0 ? void 0 : mParameters.redirectedToNonDraft);
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/**
|
|
777
|
+
* Show a message strip if a redirection to a non-draft element has been done.
|
|
778
|
+
* Remove the message strip in case we navigate to another object page.
|
|
779
|
+
*
|
|
780
|
+
* @param entityName Name of the Entity to be displayed in the message
|
|
781
|
+
* @private
|
|
782
|
+
*/;
|
|
783
|
+
_proto.displayCollaborationMessage = function displayCollaborationMessage(entityName) {
|
|
784
|
+
const resourceBundle = Core.getLibraryResourceBundle("sap.fe.core");
|
|
785
|
+
if (this.collaborationMessage) {
|
|
786
|
+
Core.getMessageManager().removeMessages([this.collaborationMessage]);
|
|
787
|
+
delete this.collaborationMessage;
|
|
788
|
+
}
|
|
789
|
+
if (entityName) {
|
|
790
|
+
var _this$getView4, _this$getView4$getBin;
|
|
791
|
+
this.collaborationMessage = new Message({
|
|
792
|
+
message: resourceBundle.getText("REROUTED_NAVIGATION_TO_SAVED_VERSION", [entityName]),
|
|
793
|
+
type: "Information",
|
|
794
|
+
target: (_this$getView4 = this.getView()) === null || _this$getView4 === void 0 ? void 0 : (_this$getView4$getBin = _this$getView4.getBindingContext()) === null || _this$getView4$getBin === void 0 ? void 0 : _this$getView4$getBin.getPath()
|
|
795
|
+
});
|
|
796
|
+
sap.ui.getCore().getMessageManager().addMessages([this.collaborationMessage]);
|
|
797
|
+
}
|
|
761
798
|
};
|
|
762
799
|
_proto.onPageReady = function onPageReady(mParameters) {
|
|
763
800
|
const setFocus = () => {
|
|
@@ -776,6 +813,10 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
776
813
|
}
|
|
777
814
|
}
|
|
778
815
|
};
|
|
816
|
+
const ctxt = this.getView().getBindingContext();
|
|
817
|
+
// setting this model data to be used for recommendations binding
|
|
818
|
+
this.getView().getModel("internal").setProperty("/currentCtxt", ctxt);
|
|
819
|
+
|
|
779
820
|
// Apply app state only after the page is ready with the first section selected
|
|
780
821
|
const oView = this.getView();
|
|
781
822
|
const oInternalModelContext = oView.getBindingContext("internal");
|
|
@@ -908,52 +949,45 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
908
949
|
}
|
|
909
950
|
|
|
910
951
|
/**
|
|
911
|
-
*
|
|
912
|
-
*
|
|
913
|
-
*
|
|
914
|
-
*
|
|
952
|
+
* Executes the validation of the document
|
|
953
|
+
* One of the following actions is triggered on the draft version of the document:
|
|
954
|
+
* - on a transient context:
|
|
955
|
+
* - if the context gets data, wait for the creation of the context and execute the global validation
|
|
956
|
+
* - if no data is found on this context, only the prepareAction is requested
|
|
957
|
+
* - on a regular context, the global validation is requested.
|
|
915
958
|
*
|
|
916
|
-
* @
|
|
917
|
-
* @name getDraftRootPath
|
|
918
|
-
* @returns Returns a Promise
|
|
959
|
+
* @returns Promise of the global validation or undefined if not executed
|
|
919
960
|
*/;
|
|
920
|
-
_proto.getDraftRootContext = async function getDraftRootContext() {
|
|
921
|
-
const view = this.getView();
|
|
922
|
-
const context = view.getBindingContext();
|
|
923
|
-
if (context) {
|
|
924
|
-
const draftRootContextPath = ModelHelper.getDraftRootPath(context);
|
|
925
|
-
let simpleDraftRootContext;
|
|
926
|
-
if (draftRootContextPath) {
|
|
927
|
-
var _this$getAppComponent, _simpleDraftRootConte;
|
|
928
|
-
// Check if a view matches with the draft root path
|
|
929
|
-
const existingBindingContextOnPage = (_this$getAppComponent = this.getAppComponent().getRootViewController().getInstancedViews().find(pageView => {
|
|
930
|
-
var _pageView$getBindingC;
|
|
931
|
-
return ((_pageView$getBindingC = pageView.getBindingContext()) === null || _pageView$getBindingC === void 0 ? void 0 : _pageView$getBindingC.getPath()) === draftRootContextPath;
|
|
932
|
-
})) === null || _this$getAppComponent === void 0 ? void 0 : _this$getAppComponent.getBindingContext();
|
|
933
|
-
if (existingBindingContextOnPage) {
|
|
934
|
-
return existingBindingContextOnPage;
|
|
935
|
-
}
|
|
936
|
-
const internalModel = view.getModel("internal");
|
|
937
|
-
simpleDraftRootContext = internalModel.getProperty("/simpleDraftRootContext");
|
|
938
|
-
if (((_simpleDraftRootConte = simpleDraftRootContext) === null || _simpleDraftRootConte === void 0 ? void 0 : _simpleDraftRootConte.getPath()) === draftRootContextPath) {
|
|
939
|
-
return simpleDraftRootContext;
|
|
940
|
-
}
|
|
941
|
-
const model = context.getModel();
|
|
942
|
-
simpleDraftRootContext = model.bindContext(draftRootContextPath).getBoundContext();
|
|
943
|
-
await CommonUtils.waitForContextRequested(simpleDraftRootContext);
|
|
944
|
-
// Store this new created context to use it on the next iterations
|
|
945
|
-
internalModel.setProperty("/simpleDraftRootContext", simpleDraftRootContext);
|
|
946
|
-
return simpleDraftRootContext;
|
|
947
|
-
}
|
|
948
|
-
return undefined;
|
|
949
|
-
}
|
|
950
|
-
return undefined;
|
|
951
|
-
};
|
|
952
961
|
_proto._validateDocument = async function _validateDocument() {
|
|
953
|
-
const appComponent = this.getAppComponent();
|
|
954
962
|
const control = Core.byId(Core.getCurrentFocusedControlId());
|
|
955
963
|
const context = control === null || control === void 0 ? void 0 : control.getBindingContext();
|
|
956
|
-
if (
|
|
964
|
+
if (!context) {
|
|
965
|
+
return undefined;
|
|
966
|
+
}
|
|
967
|
+
if (context.isTransient()) {
|
|
968
|
+
if (context.hasPendingChanges()) {
|
|
969
|
+
await context.created();
|
|
970
|
+
return this.executeGlobalValidation(context);
|
|
971
|
+
}
|
|
972
|
+
return this.executeGlobalValidation(context, true);
|
|
973
|
+
}
|
|
974
|
+
return this.executeGlobalValidation(context);
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
/**
|
|
978
|
+
* Executes the global validation of the draft
|
|
979
|
+
* One of the following actions is triggered on the draft version of the document:
|
|
980
|
+
* - the global side effects are executed if these side effects are defined in the context
|
|
981
|
+
* - the draft Validation on the DraftRoot context.
|
|
982
|
+
*
|
|
983
|
+
* @param context The Context
|
|
984
|
+
* @param byPassSideEffects Only the draft Validation step is executed
|
|
985
|
+
* @returns Promise of the global validation
|
|
986
|
+
*/;
|
|
987
|
+
_proto.executeGlobalValidation = async function executeGlobalValidation(context) {
|
|
988
|
+
let byPassSideEffects = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
989
|
+
const appComponent = this.getAppComponent();
|
|
990
|
+
if (!byPassSideEffects) {
|
|
957
991
|
const sideEffectsService = appComponent.getSideEffectsService();
|
|
958
992
|
const entityType = sideEffectsService.getEntityTypeFromContext(context);
|
|
959
993
|
const globalSideEffects = entityType ? sideEffectsService.getGlobalODataEntitySideEffects(entityType) : [];
|
|
@@ -962,14 +996,13 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
962
996
|
await this.editFlow.syncTask();
|
|
963
997
|
return Promise.all(globalSideEffects.map(sideEffects => this._sideEffects.requestSideEffects(sideEffects, context)));
|
|
964
998
|
}
|
|
965
|
-
const draftRootContext = await this.getDraftRootContext();
|
|
966
|
-
//Execute the draftValidation if there is no globalSideEffects (ignore ETags in collaboration draft)
|
|
967
|
-
if (draftRootContext) {
|
|
968
|
-
await this.editFlow.syncTask();
|
|
969
|
-
return draft.executeDraftValidation(draftRootContext, appComponent, isConnected(this.getView()));
|
|
970
|
-
}
|
|
971
999
|
}
|
|
972
|
-
|
|
1000
|
+
const draftRootContext = await CommonUtils.createRootContext(ProgrammingModel.Draft, this.getView(), appComponent);
|
|
1001
|
+
//Execute the draftValidation if there is no globalSideEffects (ignore ETags in collaboration draft)
|
|
1002
|
+
if (draftRootContext) {
|
|
1003
|
+
await this.editFlow.syncTask();
|
|
1004
|
+
return draft.executeDraftValidation(draftRootContext, appComponent, isConnected(this.getView()));
|
|
1005
|
+
}
|
|
973
1006
|
};
|
|
974
1007
|
_proto._saveDocument = async function _saveDocument(oContext) {
|
|
975
1008
|
const oModel = this.getView().getModel("ui"),
|
|
@@ -1433,4 +1466,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/ActionRuntime
|
|
|
1433
1466
|
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype)), _class2)) || _class);
|
|
1434
1467
|
return ObjectPageController;
|
|
1435
1468
|
}, false);
|
|
1436
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlciIsImRlZmluZVVJNUNsYXNzIiwidXNpbmdFeHRlbnNpb24iLCJQbGFjZWhvbGRlciIsIlNoYXJlIiwib3ZlcnJpZGUiLCJTaGFyZU92ZXJyaWRlcyIsIkludGVybmFsUm91dGluZyIsIkludGVybmFsUm91dGluZ092ZXJyaWRlIiwiUGFnaW5hdG9yIiwiUGFnaW5hdG9yT3ZlcnJpZGUiLCJNZXNzYWdlSGFuZGxlciIsIk1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUiLCJJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSIsIkludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbk1vZGUiLCJiSXNTdGlja3lFZGl0TW9kZSIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0U3RpY2t5RWRpdE1vZGUiLCJ1bmRlZmluZWQiLCJWaWV3U3RhdGUiLCJWaWV3U3RhdGVPdmVycmlkZXMiLCJQYWdlUmVhZHkiLCJpc0NvbnRleHRFeHBlY3RlZCIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsImhhbmRsZXJzIiwib25QcmltYXJ5QWN0aW9uIiwib0NvbnRyb2xsZXIiLCJvVmlldyIsIm9Db250ZXh0Iiwic0FjdGlvbk5hbWUiLCJtUGFyYW1ldGVycyIsIm1Db25kaXRpb25zIiwiaVZpZXdMZXZlbCIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwib09iamVjdFBhZ2UiLCJfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2wiLCJwb3NpdGl2ZUFjdGlvblZpc2libGUiLCJwb3NpdGl2ZUFjdGlvbkVuYWJsZWQiLCJvbkNhbGxBY3Rpb24iLCJlZGl0QWN0aW9uVmlzaWJsZSIsImVkaXRBY3Rpb25FbmFibGVkIiwiX2VkaXREb2N1bWVudCIsImdldE1vZGVsIiwiZ2V0UHJvcGVydHkiLCJfc2F2ZURvY3VtZW50IiwiX2FwcGx5RG9jdW1lbnQiLCJvblRhYmxlQ29udGV4dENoYW5nZSIsIm9FdmVudCIsIm9Tb3VyY2UiLCJnZXRTb3VyY2UiLCJvVGFibGUiLCJfZmluZFRhYmxlcyIsInNvbWUiLCJfb1RhYmxlIiwiZ2V0Um93QmluZGluZyIsImZhc3RDcmVhdGlvblJvdyIsImdldENyZWF0aW9uUm93IiwiX29Jbm5lckNyZWF0aW9uUm93IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJ0YWJsZUJpbmRpbmciLCJfZ2V0VGFibGVCaW5kaW5nIiwiTG9nIiwiZXJyb3IiLCJnZXRJZCIsImdldENvbnRleHQiLCJvYmplY3RQYWdlIiwiYmluZGluZ0NvbnRleHQiLCJtb2RlbCIsIlRhYmxlSGVscGVyIiwiZW5hYmxlRmFzdENyZWF0aW9uUm93IiwiZ2V0UGF0aCIsIm9DdXJyZW50QWN0aW9uUHJvbWlzZSIsImVkaXRGbG93IiwiZ2V0Q3VycmVudEFjdGlvblByb21pc2UiLCJhVGFibGVDb250ZXh0cyIsImdldFR5cGUiLCJnZXRNZXRhZGF0YSIsImlzQSIsImdldENvbnRleHRzIiwiZ2V0Q3VycmVudENvbnRleHRzIiwidGhlbiIsIm9BY3Rpb25SZXNwb25zZSIsImNvbnRyb2xJZCIsInNJZCIsIm9BY3Rpb25EYXRhIiwib0RhdGEiLCJhS2V5cyIsImtleXMiLCJpTmV3SXRlbXAiLCJmaW5kIiwib1RhYmxlQ29udGV4dCIsImkiLCJvVGFibGVEYXRhIiwiZ2V0T2JqZWN0IiwiYkNvbXBhcmUiLCJldmVyeSIsInNLZXkiLCJhRGlhbG9ncyIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwib0RpYWxvZyIsImxlbmd0aCIsImRpYWxvZyIsImRhdGEiLCJhdHRhY2hFdmVudE9uY2UiLCJmb2N1c1JvdyIsImRlbGV0ZUN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiY2F0Y2giLCJlcnIiLCJtZXNzYWdlQnV0dG9uIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsImludm9rZUFjdGlvbiIsIl9zaG93TWVzc2FnZVBvcG92ZXIiLCJiaW5kIiwib25EYXRhUG9pbnRUaXRsZVByZXNzZWQiLCJvTWFuaWZlc3RPdXRib3VuZCIsInNDb250cm9sQ29uZmlnIiwic0NvbGxlY3Rpb25QYXRoIiwiSlNPTiIsInBhcnNlIiwib1RhcmdldEluZm8iLCJhU2VtYW50aWNPYmplY3RNYXBwaW5nIiwiQ29tbW9uVXRpbHMiLCJnZXRTZW1hbnRpY09iamVjdE1hcHBpbmciLCJvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0TWV0YVBhdGgiLCJhTmF2aWdhdGlvbkRhdGEiLCJfZ2V0Q2hhcnRDb250ZXh0RGF0YSIsImFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyIsIm1hcCIsIm9OYXZpZ2F0aW9uRGF0YSIsIm1ldGFQYXRoIiwicGFyYW1ldGVycyIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiZ2V0T3V0Ym91bmRQYXJhbXMiLCJPYmplY3QiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGlvbkNvbnRleHRzIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwib25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kIiwic091dGJvdW5kVGFyZ2V0Iiwic0NyZWF0ZVBhdGgiLCJvbk5hdmlnYXRlQ2hhbmdlIiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJiU2VjdGlvbk5hdmlnYXRlZCIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsInNlY3Rpb25MYXlvdXQiLCJvU3ViU2VjdGlvbiIsImdldFBhcmFtZXRlciIsIl91cGRhdGVGb2N1c0luRWRpdE1vZGUiLCJvblZhcmlhbnRTZWxlY3RlZCIsIm9uVmFyaWFudFNhdmVkIiwic2V0VGltZW91dCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwidkRldGFpbENvbmZpZyIsIm9EZXRhaWxDb25maWciLCJieUlkIiwib1NlY3Rpb24iLCJzZWN0aW9uSWQiLCJzdWJTZWN0aW9uSWQiLCJnZXRTdWJTZWN0aW9ucyIsImdldFBhcmVudCIsImdldFZpc2libGUiLCJzVGl0bGUiLCJnZXRSZXNvdXJjZU1vZGVsIiwiZ2V0VGV4dCIsImVudGl0eVNldCIsIk1lc3NhZ2VCb3giLCJzY3JvbGxUb1NlY3Rpb24iLCJmaXJlTmF2aWdhdGUiLCJzZWN0aW9uIiwic3ViU2VjdGlvbiIsIm9uU3RhdGVDaGFuZ2UiLCJjbG9zZU9QTWVzc2FnZVN0cmlwIiwiaGlkZU1lc3NhZ2UiLCJtQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMiLCJFeHRlbnNpb25BUEkiLCJleHRlbnNpb25BUEkiLCJvbkluaXQiLCJzZXRQcm9wZXJ0eSIsInBhZ2UiLCJ2aXNpYmlsaXR5IiwiaXRlbXMiLCJfZ2V0QmF0Y2hHcm91cHNGb3JWaWV3IiwiZ2V0RW5hYmxlTGF6eUxvYWRpbmciLCJhdHRhY2hFdmVudCIsIl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0Iiwib0l0ZW1CaW5kaW5nIiwiYXR0YWNoQ2hhbmdlIiwiX2ZuU2hvd09QTWVzc2FnZSIsIm9uRXhpdCIsImRlc3Ryb3kiLCJvTWVzc2FnZVBvcG92ZXIiLCJpc09wZW4iLCJjbG9zZSIsImlzS2VlcEFsaXZlIiwic2V0S2VlcEFsaXZlIiwiaXNDb25uZWN0ZWQiLCJkaXNjb25uZWN0IiwidmlldyIsIm1lc3NhZ2VzIiwiZ2V0SXRlbXMiLCJpdGVtIiwiZmlsdGVyIiwibWVzc2FnZSIsImdldFRhcmdldHMiLCJzaG93TWVzc2FnZXMiLCJjaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlIiwic3ViU2VjdGlvbnMiLCJjaGFuZ2VDbGFzc0ZvclRhYmxlcyIsImV2ZW50IiwibGFzdFZpc2libGVTdWJTZWN0aW9uIiwiYmxvY2tzIiwiZ2V0QmxvY2tzIiwiZ2V0TW9yZUJsb2NrcyIsInNlYXJjaFRhYmxlSW5CbG9jayIsImFkZFN0eWxlQ2xhc3MiLCJkZXRhY2hFdmVudCIsInN1YlNlY3Rpb25JbmRleCIsImJsb2NrIiwiY29udHJvbCIsImNvbnRlbnQiLCJ0YWJsZUFQSSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwiUGFnZUNvbnRyb2xsZXIiLCJwcm90b3R5cGUiLCJhcHBseSIsIm9WaWV3RGF0YSIsInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QiLCJDb21tb25IZWxwZXIiLCJzZXRNZXRhTW9kZWwiLCJnZXRBcHBDb21wb25lbnQiLCJvbkFmdGVyUmVuZGVyaW5nIiwiZ2V0VXNlSWNvblRhYkJhciIsInNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJfZ2V0QWxsU3ViU2VjdGlvbnMiLCJfb25CZWZvcmVCaW5kaW5nIiwiYVRhYmxlcyIsIm9JbnRlcm5hbE1vZGVsIiwiYUJhdGNoR3JvdXBzIiwib0Zhc3RDcmVhdGlvblJvdyIsInB1c2giLCJiRHJhZnROYXZpZ2F0aW9uIiwiX2Nsb3NlU2lkZUNvbnRlbnQiLCJvcENvbnRleHQiLCJoYXNQZW5kaW5nQ2hhbmdlcyIsImdldEJpbmRpbmciLCJyZXNldENoYW5nZXMiLCJzZXRCaW5kaW5nQ29udGV4dCIsImZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiIsImlzRmlyc3RSZW5kZXJpbmciLCJiUGVyc2lzdE9QU2Nyb2xsIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib0RlbGVnYXRlT25CZWZvcmUiLCJhZGRFdmVudERlbGVnYXRlIiwicGFnZVJlYWR5IiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIm9CaW5kaW5nIiwibGlzdEJpbmRpbmciLCJvUGFnaW5hdG9yQ3VycmVudENvbnRleHQiLCJvQmluZGluZ1RvVXNlIiwicGFnaW5hdG9yIiwiaW5pdGlhbGl6ZSIsInNCaW5kaW5nUGF0aCIsInRlc3QiLCJzTGlzdEJpbmRpbmdQYXRoIiwicmVwbGFjZSIsIk9EYXRhTGlzdEJpbmRpbmciLCJvTW9kZWwiLCJfc2V0TGlzdEJpbmRpbmdBc3luYyIsImFTZWN0aW9ucyIsImJVc2VJY29uVGFiQmFyIiwiaVNraXAiLCJiSXNJbkVkaXRNb2RlIiwiYkVkaXRhYmxlSGVhZGVyIiwiZWRpdGFibGVIZWFkZXJDb250ZW50IiwiaVNlY3Rpb24iLCJhU3ViU2VjdGlvbnMiLCJpU3ViU2VjdGlvbiIsImlzVmlzaWJpbGl0eUR5bmFtaWMiLCJwbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwic2hvd1BsYWNlaG9sZGVyIiwib05hdkNvbnRhaW5lciIsIm9Db250YWluZXIiLCJfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50Iiwib0ZpcnN0Q2xpY2thYmxlRWxlbWVudCIsImFBY3Rpb25zIiwiZ2V0SGVhZGVyVGl0bGUiLCJnZXRBY3Rpb25zIiwib0FjdGlvbiIsImdldEVuYWJsZWQiLCJfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24iLCJhQmxvY2tzIiwiYUZvcm1Db250YWluZXJzIiwiZ2V0Rm9ybUNvbnRhaW5lcnMiLCJnZXRDb250ZW50IiwiZm9ybUNvbnRhaW5lciIsImFGb3JtRWxlbWVudHMiLCJnZXRGb3JtRWxlbWVudHMiLCJmb3JtRWxlbWVudCIsImFGaWVsZHMiLCJnZXRGaWVsZHMiLCJnZXRSZXF1aXJlZCIsImdldFZhbHVlIiwiZGVidWciLCJvTWFuZGF0b3J5RmllbGQiLCJvRmllbGRUb0ZvY3VzIiwiZ2V0Q29udGVudEVkaXQiLCJfZ2V0Rmlyc3RFZGl0YWJsZUlucHV0IiwiZm9jdXMiLCJfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQiLCJtZXNzYWdlSGFuZGxlciIsInJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcyIsImdldFJvdXRlclByb3h5IiwiY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCIsImhpc3RvcnkiLCJiYWNrIiwiZHJhZnQiLCJwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbiIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJCYWNrTmF2aWdhdGlvbiIsIl9vbkFmdGVyQmluZGluZyIsIm9CaW5kaW5nQ29udGV4dCIsIl9zaWRlRWZmZWN0cyIsImNsZWFyRmllbGRHcm91cHNWYWxpZGl0eSIsImFJQk5BY3Rpb25zIiwiZm9yRWFjaCIsImdldElCTkFjdGlvbnMiLCJvVGFibGVSb3dCaW5kaW5nIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJyZW1vdmVDYWNoZXNBbmRNZXNzYWdlcyIsIm9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAiLCJwYXJzZUN1c3RvbURhdGEiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwiYVNlbGVjdGVkQ29udGV4dHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwiQWN0aW9uUnVudGltZSIsInNldEFjdGlvbkVuYWJsZW1lbnQiLCJjbGVhclNlbGVjdGlvbiIsImdldFNlbWFudGljVGFyZ2V0c0Zyb21QYWdlTW9kZWwiLCJvT2JqZWN0UGFnZVRpdGxlIiwiYUlCTkhlYWRlckFjdGlvbnMiLCJjb25jYXQiLCJ1cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eSIsIm9GaW5hbFVJU3RhdGUiLCJoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMiLCJmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMiLCJmbkhhbmRsZUNoYW5nZSIsImRldGFjaENoYW5nZSIsImNvbXB1dGVFZGl0TW9kZSIsImlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkIiwiY29ubmVjdCIsIm9FcnJvciIsIl91cGRhdGVSZWxhdGVkQXBwcyIsImN1cnJlbnRCaW5kaW5nIiwiaGFuZGxlUGF0Y2hTZW50IiwiVGFibGVVdGlscyIsIndoZW5Cb3VuZCIsIl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzIiwidXBkYXRlRWRpdEJ1dHRvblZpc2liaWxpdHlBbmRFbmFibGVtZW50Iiwib25QYWdlUmVhZHkiLCJzZXRGb2N1cyIsImlzSW5EaXNwbGF5TW9kZSIsIm9TZWxlY3RlZFNlY3Rpb24iLCJDb3JlIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiYklzU3RpY2t5TW9kZSIsIm9BcHBDb21wb25lbnQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJ2aWV3SWQiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJhcHBseUFwcFN0YXRlIiwiZm9yY2VGb2N1cyIsIkVycm9yIiwiX2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24iLCJvT2JqZWN0UGFnZVN1YnRpdGxlIiwib0N1c3RvbURhdGEiLCJnZXRLZXkiLCJ0aXRsZSIsInN1YnRpdGxlIiwiaW50ZW50IiwiaWNvbiIsIl9leGVjdXRlSGVhZGVyU2hvcnRjdXQiLCJzQnV0dG9uSWQiLCJvQnV0dG9uIiwib0VsZW1lbnQiLCJmaXJlQnV0dG9uUHJlc3MiLCJfZXhlY3V0ZUZvb3RlclNob3J0Y3V0IiwiZ2V0Rm9vdGVyIiwiZ2V0TmFtZSIsIl9leGVjdXRlVGFiU2hvcnRDdXQiLCJvRXhlY3V0aW9uIiwiaVNlY3Rpb25JbmRleE1heCIsInNDb21tYW5kIiwiZ2V0Q29tbWFuZCIsIm5ld1NlY3Rpb24iLCJpU2VsZWN0ZWRTZWN0aW9uSW5kZXgiLCJpbmRleE9mU2VjdGlvbiIsIl9nZXRGb290ZXJWaXNpYmlsaXR5Iiwic1ZpZXdJZCIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldE1lc3NhZ2VNYW5hZ2VyIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsInR5cGUiLCJ0YXJnZXQiLCJpbmRleE9mIiwib1JldCIsInJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImN1cnJlbnRQYWdlVmlldyIsImlzRmNsRW5hYmxlZCIsImdldFJpZ2h0bW9zdFZpZXciLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q3VycmVudFBhZ2UiLCJvTWVzc2FnZUJ1dHRvbiIsImdldExlbmd0aCIsInNldFZpc2libGUiLCJvcGVuQnkiLCJCdXN5TG9ja2VyIiwibG9jayIsImVkaXREb2N1bWVudCIsImZpbmFsbHkiLCJ1bmxvY2siLCJnZXREcmFmdFJvb3RDb250ZXh0IiwiY29udGV4dCIsImRyYWZ0Um9vdENvbnRleHRQYXRoIiwiZ2V0RHJhZnRSb290UGF0aCIsInNpbXBsZURyYWZ0Um9vdENvbnRleHQiLCJleGlzdGluZ0JpbmRpbmdDb250ZXh0T25QYWdlIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJwYWdlVmlldyIsImludGVybmFsTW9kZWwiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIndhaXRGb3JDb250ZXh0UmVxdWVzdGVkIiwiX3ZhbGlkYXRlRG9jdW1lbnQiLCJhcHBDb21wb25lbnQiLCJnZXRDdXJyZW50Rm9jdXNlZENvbnRyb2xJZCIsImlzVHJhbnNpZW50Iiwic2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZW50aXR5VHlwZSIsImdldEVudGl0eVR5cGVGcm9tQ29udGV4dCIsImdsb2JhbFNpZGVFZmZlY3RzIiwiZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyIsInN5bmNUYXNrIiwiUHJvbWlzZSIsImFsbCIsInNpZGVFZmZlY3RzIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZHJhZnRSb290Q29udGV4dCIsImV4ZWN1dGVEcmFmdFZhbGlkYXRpb24iLCJhV2FpdENyZWF0ZURvY3VtZW50cyIsImJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yIiwiY3JlYXRpb25Nb2RlIiwiY3JlYXRpb25Sb3ciLCJjcmVhdGVBdEVuZCIsImJDcmVhdGVEb2N1bWVudCIsImJTa2lwU2lkZUVmZmVjdHMiLCJjcmVhdGVEb2N1bWVudCIsImFCaW5kaW5ncyIsImJpbmRpbmdzIiwic2F2ZURvY3VtZW50IiwiaXNMb2NrZWQiLCJfbWFuYWdlQ29sbGFib3JhdGlvbiIsIm9wZW5NYW5hZ2VEaWFsb2ciLCJfc2hvd0NvbGxhYm9yYXRpb25Vc2VyRGV0YWlscyIsInNob3dVc2VyRGV0YWlscyIsIl9jYW5jZWxEb2N1bWVudCIsImNhbmNlbEJ1dHRvbiIsImNhbmNlbERvY3VtZW50IiwiYXBwbHlEb2N1bWVudCIsInNob3dSZWxhdGVkQXBwcyIsInVwZGF0ZVJlbGF0ZWRBcHBzRGV0YWlscyIsIl9maW5kQ29udHJvbEluU3ViU2VjdGlvbiIsImFQYXJlbnRFbGVtZW50IiwiYVN1YnNlY3Rpb24iLCJhQ29udHJvbHMiLCJiSXNDaGFydCIsImVsZW1lbnQiLCJtQWdncmVnYXRpb25zIiwiZ2V0QWdncmVnYXRpb24iLCJhSXRlbXMiLCJvSXRlbSIsImdldE1haW5Db250ZW50IiwiX2dldEFsbEJsb2NrcyIsIl9maW5kQ2hhcnRzIiwiYUNoYXJ0cyIsIm9CbG9jayIsIm9Db250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50Iiwib0NoYXJ0Q29udGV4dCIsInNDaGFydFBhdGgiLCJvQ29udGV4dERhdGEiLCJvQ2hhcnRDb250ZXh0RGF0YSIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsInNSb3dQYXRoIiwiVGFibGVTY3JvbGxlciIsInNjcm9sbFRhYmxlVG9Sb3ciLCJfbWVyZ2VNdWx0aXBsZUNvbnRleHRzIiwib1BhZ2VDb250ZXh0IiwiYUxpbmVDb250ZXh0IiwiYUF0dHJpYnV0ZXMiLCJhUGFnZUF0dHJpYnV0ZXMiLCJzTWV0YVBhdGhMaW5lIiwic1BhdGhMaW5lIiwic1BhZ2VQYXRoIiwib01ldGFNb2RlbCIsInNNZXRhUGF0aFBhZ2UiLCJvU2luZ2xlQ29udGV4dCIsIm9TdWJDaGFydENvbnRleHREYXRhIiwiY29udGV4dERhdGEiLCJyZW1vdmVTZW5zaXRpdmVEYXRhIiwib1BhZ2VMZXZlbFNWIiwiYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQiLCJTZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudCIsImF0dHJpYnV0ZXMiLCJvQ29uZmlndXJhdGlvbnMiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsImFDb25maWd1cmF0aW9ucyIsIm9Db25maWd1cmF0aW9uIiwicmVxdWVzdEdyb3VwSWQiLCJfc2V0QnJlYWRjcnVtYkxpbmtzIiwiYVByb21pc2VzIiwiYVNraXBQYXJhbWV0ZXJpemVkIiwic05ld1BhdGgiLCJhUGF0aFBhcnRzIiwic3BsaXQiLCJzUGF0aCIsInNoaWZ0Iiwic3BsaWNlIiwic1BhdGhQYXJ0Iiwib1Jvb3RWaWV3Q29udHJvbGxlciIsInNQYXJhbWV0ZXJQYXRoIiwiYlJlc3VsdENvbnRleHQiLCJnZXRUaXRsZUluZm9Gcm9tUGF0aCIsInRpdGxlSGllcmFyY2h5SW5mb3MiLCJpZHgiLCJoaWVyYXJjaHlQb3NpdGlvbiIsIm9MaW5rIiwidGl0bGVIaWVyYXJjaHlJbmZvIiwiZ2V0TGlua3MiLCJMaW5rIiwic2V0VGV4dCIsInNldEhyZWYiLCJlbmNvZGVVUkkiLCJhZGRMaW5rIiwib0RhdGFQb2ludHMiLCJnZXRIZWFkZXJGYWNldEl0ZW1Db25maWdGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJnZXRSb3V0aW5nU2VydmljZSIsImdldE91dGJvdW5kcyIsIm9TaGVsbFNlcnZpY2VzIiwicmVxdWVzdE9iamVjdCIsImZuR2V0TGlua3MiLCJmbk9uRXJyb3IiLCJmblNldExpbmtFbmFibGVtZW50IiwiaWQiLCJhU3VwcG9ydGVkTGlua3MiLCJzTGlua0lkIiwic3VwcG9ydGVkIiwib1N1YkRhdGFQb2ludHMiLCJvUGFnZURhdGEiLCJvRGF0YVBvaW50Iiwib0xpbmtDb250ZXh0Iiwib0xpbmtEYXRhIiwib01peGVkQ29udGV4dCIsIm1lcmdlIiwib01hcHBpbmciLCJzTWFpblByb3BlcnR5Iiwic01hcHBlZFByb3BlcnR5IiwiaGFzT3duUHJvcGVydHkiLCJvTmV3TWFwcGluZyIsImlzTmF2aWdhdGlvblN1cHBvcnRlZCIsInBhcmFtcyIsImFMaW5rcyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT2JqZWN0UGFnZUNvbnRyb2xsZXIuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IEFjdGlvblJ1bnRpbWUgZnJvbSBcInNhcC9mZS9jb3JlL0FjdGlvblJ1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBjb25uZWN0LCBkaXNjb25uZWN0LCBpc0Nvbm5lY3RlZCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5U3luY1wiO1xuaW1wb3J0IHsgb3Blbk1hbmFnZURpYWxvZywgc2hvd1VzZXJEZXRhaWxzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vTWFuYWdlXCI7XG5pbXBvcnQgZHJhZnQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2VkaXRGbG93L2RyYWZ0XCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1hc3NFZGl0IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NYXNzRWRpdFwiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2VSZWFkeSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGFnZVJlYWR5XCI7XG5pbXBvcnQgUGFnaW5hdG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdpbmF0b3JcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBTaGFyZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24sIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIEJyZWFkQ3J1bWJzIGZyb20gXCJzYXAvdXhhcC9CcmVhZENydW1ic1wiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IE1lc3NhZ2VIYW5kbGVyT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnaW5hdG9yT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL1BhZ2luYXRvclwiO1xuaW1wb3J0IFNoYXJlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvVmlld1N0YXRlXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlclwiKVxuY2xhc3MgT2JqZWN0UGFnZUNvbnRyb2xsZXIgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdG9WaWV3ITogYW55O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihQbGFjZWhvbGRlcilcblx0cGxhY2Vob2xkZXIhOiBQbGFjZWhvbGRlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oU2hhcmUub3ZlcnJpZGUoU2hhcmVPdmVycmlkZXMpKVxuXHRzaGFyZSE6IFNoYXJlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlcm5hbFJvdXRpbmcub3ZlcnJpZGUoSW50ZXJuYWxSb3V0aW5nT3ZlcnJpZGUpKVxuXHRfcm91dGluZyE6IEludGVybmFsUm91dGluZztcblxuXHRAdXNpbmdFeHRlbnNpb24oUGFnaW5hdG9yLm92ZXJyaWRlKFBhZ2luYXRvck92ZXJyaWRlKSlcblx0cGFnaW5hdG9yITogUGFnaW5hdG9yO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNZXNzYWdlSGFuZGxlci5vdmVycmlkZShNZXNzYWdlSGFuZGxlck92ZXJyaWRlKSlcblx0bWVzc2FnZUhhbmRsZXIhOiBNZXNzYWdlSGFuZGxlcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZW50QmFzZWROYXZpZ2F0aW9uLm92ZXJyaWRlKEludGVudEJhc2VkTmF2aWdhdGlvbk92ZXJyaWRlKSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uITogSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZSh7XG5cdFx0XHRnZXROYXZpZ2F0aW9uTW9kZTogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGJJc1N0aWNreUVkaXRNb2RlID1cblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSAmJlxuXHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgT2JqZWN0UGFnZUNvbnRyb2xsZXIpLmdldFN0aWNreUVkaXRNb2RlKCk7XG5cdFx0XHRcdHJldHVybiBiSXNTdGlja3lFZGl0TW9kZSA/IFwiZXhwbGFjZVwiIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0X2ludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRQYWdlUmVhZHkub3ZlcnJpZGUoe1xuXHRcdFx0aXNDb250ZXh0RXhwZWN0ZWQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSlcblx0KVxuXHRwYWdlUmVhZHkhOiBQYWdlUmVhZHk7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKE1hc3NFZGl0KVxuXHRtYXNzRWRpdCE6IE1hc3NFZGl0O1xuXG5cdHByaXZhdGUgbUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzPzogUmVjb3JkPHN0cmluZywgT2JqZWN0UGFnZUV4dGVuc2lvbkFQST47XG5cblx0cHJvdGVjdGVkIGV4dGVuc2lvbkFQST86IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG5cblx0cHJpdmF0ZSBiU2VjdGlvbk5hdmlnYXRlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBzd2l0Y2hEcmFmdEFuZEFjdGl2ZVBvcE92ZXI/OiBQb3BvdmVyO1xuXG5cdHByaXZhdGUgY3VycmVudEJpbmRpbmc/OiBCaW5kaW5nO1xuXG5cdHByaXZhdGUgbWVzc2FnZUJ1dHRvbjogYW55O1xuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRFeHRlbnNpb25BUEkoc0lkPzogc3RyaW5nKTogRXh0ZW5zaW9uQVBJIHtcblx0XHRpZiAoc0lkKSB7XG5cdFx0XHQvLyB0byBhbGxvdyBsb2NhbCBJRCB1c2FnZSBmb3IgY3VzdG9tIHBhZ2VzIHdlJ2xsIGNyZWF0ZS9yZXR1cm4gb3duIGluc3RhbmNlcyBmb3IgY3VzdG9tIHNlY3Rpb25zXG5cdFx0XHR0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyA9IHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIHx8IHt9O1xuXG5cdFx0XHRpZiAoIXRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0pIHtcblx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcywgc0lkKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRcdHRoaXMuZXh0ZW5zaW9uQVBJID0gbmV3IEV4dGVuc2lvbkFQSSh0aGlzKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmV4dGVuc2lvbkFQSTtcblx0XHR9XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0c3VwZXIub25Jbml0KCk7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXG5cdFx0Ly8gU2V0dGluZyBkZWZhdWx0cyBvZiBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXh0ZXJuYWxOYXZpZ2F0aW9uQ29udGV4dFwiLCB7IHBhZ2U6IHRydWUgfSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJlbGF0ZWRBcHBzXCIsIHtcblx0XHRcdHZpc2liaWxpdHk6IGZhbHNlLFxuXHRcdFx0aXRlbXM6IG51bGxcblx0XHR9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiYmF0Y2hHcm91cHNcIiwgdGhpcy5fZ2V0QmF0Y2hHcm91cHNGb3JWaWV3KCkpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0aWYgKG9PYmplY3RQYWdlLmdldEVuYWJsZUxhenlMb2FkaW5nKCkpIHtcblx0XHRcdC8vQXR0YWNoaW5nIHRoZSBldmVudCB0byBtYWtlIHRoZSBzdWJzZWN0aW9uIGNvbnRleHQgYmluZGluZyBhY3RpdmUgd2hlbiBpdCBpcyB2aXNpYmxlLlxuXHRcdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnQoXCJzdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0XCIsIHRoaXMuX2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbiA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6Rm9vdGVyQmFyOjpNZXNzYWdlQnV0dG9uXCIpO1xuXHRcdHRoaXMubWVzc2FnZUJ1dHRvbi5vSXRlbUJpbmRpbmcuYXR0YWNoQ2hhbmdlKHRoaXMuX2ZuU2hvd09QTWVzc2FnZSwgdGhpcyk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0RW5hYmxlZFwiLCB0cnVlKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwicm9vdEVkaXRWaXNpYmxlXCIsIHRydWUpO1xuXHR9XG5cblx0b25FeGl0KCkge1xuXHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcykge1xuXHRcdFx0Zm9yIChjb25zdCBzSWQgb2YgT2JqZWN0LmtleXModGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpKSB7XG5cdFx0XHRcdGlmICh0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXS5kZXN0cm95KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlbGV0ZSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHR0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGRlbGV0ZSB0aGlzLmV4dGVuc2lvbkFQSTtcblxuXHRcdGNvbnN0IG9NZXNzYWdlUG9wb3ZlciA9IHRoaXMubWVzc2FnZUJ1dHRvbiA/IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIgOiBudWxsO1xuXHRcdGlmIChvTWVzc2FnZVBvcG92ZXIgJiYgb01lc3NhZ2VQb3BvdmVyLmlzT3BlbigpKSB7XG5cdFx0XHRvTWVzc2FnZVBvcG92ZXIuY2xvc2UoKTtcblx0XHR9XG5cdFx0Ly93aGVuIGV4aXRpbmcgd2Ugc2V0IGtlZXBBbGl2ZSBjb250ZXh0IHRvIGZhbHNlXG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0aWYgKG9Db250ZXh0ICYmIG9Db250ZXh0LmlzS2VlcEFsaXZlKCkpIHtcblx0XHRcdG9Db250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdGRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiB3aGVuIGxlYXZpbmcgdGhlIGFwcFxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gc2hvdyB0aGUgbWVzc2FnZSBzdHJpcCBvbiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZm5TaG93T1BNZXNzYWdlKCkge1xuXHRcdGNvbnN0IGV4dGVuc2lvbkFQSSA9IHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCk7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5tZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3ZlclxuXHRcdFx0LmdldEl0ZW1zKClcblx0XHRcdC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5nZXRCaW5kaW5nQ29udGV4dChcIm1lc3NhZ2VcIikuZ2V0T2JqZWN0KCkpXG5cdFx0XHQuZmlsdGVyKChtZXNzYWdlOiBNZXNzYWdlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNzYWdlLmdldFRhcmdldHMoKVswXSA9PT0gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0XHR9KTtcblxuXHRcdGlmIChleHRlbnNpb25BUEkpIHtcblx0XHRcdGV4dGVuc2lvbkFQSS5zaG93TWVzc2FnZXMobWVzc2FnZXMpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcob1RhYmxlOiBhbnkpIHtcblx0XHRyZXR1cm4gb1RhYmxlICYmIG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZCB0aGUgbGFzdCB2aXNpYmxlIHN1YnNlY3Rpb24gYW5kIGFkZCB0aGUgc2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyIENTUyBjbGFzcyBpZiBpdCBjb250YWlucyBvbmx5IGEgZ3JpZFRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gc3ViU2VjdGlvbnMgVGhlIHN1YiBzZWN0aW9ucyB0byBsb29rIGZvclxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBjaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdKSB7XG5cdFx0Y29uc3QgY2hhbmdlQ2xhc3NGb3JUYWJsZXMgPSAoZXZlbnQ6IEV2ZW50LCBsYXN0VmlzaWJsZVN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBibG9ja3MgPSBbLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldEJsb2NrcygpLCAuLi5sYXN0VmlzaWJsZVN1YlNlY3Rpb24uZ2V0TW9yZUJsb2NrcygpXTtcblx0XHRcdGlmIChcblx0XHRcdFx0YmxvY2tzLmxlbmd0aCA9PT0gMSAmJlxuXHRcdFx0XHR0aGlzLnNlYXJjaFRhYmxlSW5CbG9jayhibG9ja3NbMF0gYXMgU3ViU2VjdGlvbkJsb2NrKVxuXHRcdFx0XHRcdD8uZ2V0VHlwZSgpXG5cdFx0XHRcdFx0Py5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIilcblx0XHRcdCkge1xuXHRcdFx0XHQvL0luIGNhc2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSB0YWJsZSBpbiBhIHN1YlNlY3Rpb24gd2UgZml0IHRoYXQgdG8gdGhlIHdob2xlIHBhZ2Ugc28gdGhhdCB0aGUgc2Nyb2xsYmFyIGNvbWVzIG9ubHkgb24gdGFibGUgYW5kIG5vdCBvbiBwYWdlXG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hZGRTdHlsZUNsYXNzKFwic2FwVXhBUE9iamVjdFBhZ2VTdWJTZWN0aW9uRml0Q29udGFpbmVyXCIpO1xuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uZGV0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbkluZGV4ID0gc3ViU2VjdGlvbnMubGVuZ3RoIC0gMTsgc3ViU2VjdGlvbkluZGV4ID49IDA7IHN1YlNlY3Rpb25JbmRleC0tKSB7XG5cdFx0XHRpZiAoc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XS5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3QgbGFzdFZpc2libGVTdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbc3ViU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0Ly8gV2UgbmVlZCB0byBhdHRhY2ggdGhpcyBldmVudCBpbiBvcmRlciB0byBtYW5hZ2UgdGhlIE9iamVjdCBQYWdlIExhenkgTG9hZGluZyBtZWNoYW5pc21cblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmF0dGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGxhc3RWaXNpYmxlU3ViU2VjdGlvbiwgY2hhbmdlQ2xhc3NGb3JUYWJsZXMsIHRoaXMpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRmluZCBhIHRhYmxlIGluIGJsb2NrcyBvZiBzZWN0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0gYmxvY2sgT25lIHN1YiBzZWN0aW9uIGJsb2NrXG5cdCAqIEByZXR1cm5zIFRhYmxlIGlmIGV4aXN0c1xuXHQgKi9cblx0cHJpdmF0ZSBzZWFyY2hUYWJsZUluQmxvY2soYmxvY2s6IFN1YlNlY3Rpb25CbG9jaykge1xuXHRcdGNvbnN0IGNvbnRyb2wgPSBibG9jay5jb250ZW50O1xuXHRcdGxldCB0YWJsZUFQSTogVGFibGVBUEkgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGJsb2NrLmlzQShcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb250cm9scy5TdWJTZWN0aW9uQmxvY2tcIikpIHtcblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBKFwic2FwLm0uUGFuZWxcIikgJiYgY29udHJvbC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0dGFibGVBUEkgPSBjb250cm9sLmRhdGEoXCJ0YWJsZUFQSXJlZmVyZW5jZVwiKTtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbCBhcyBUYWJsZUFQSTtcblx0XHRcdH1cblx0XHRcdGlmICh0YWJsZUFQSSkge1xuXHRcdFx0XHRyZXR1cm4gdGFibGVBUEkuY29udGVudCBhcyBUYWJsZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRvbkJlZm9yZVJlbmRlcmluZygpIHtcblx0XHRQYWdlQ29udHJvbGxlci5wcm90b3R5cGUub25CZWZvcmVSZW5kZXJpbmcuYXBwbHkodGhpcyk7XG5cdFx0Ly8gSW4gdGhlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgc2NlbmFyaW8gd2UgbmVlZCB0byBlbnN1cmUgaW4gY2FzZSBvZiByZWxvYWQvcmVmcmVzaCB0aGF0IHRoZSBtZXRhIG1vZGVsIGluIHRoZSBtZXRob2RlIHJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Qgb2YgdGhlIEZpZWxkUnVudGltZSBpcyBhdmFpbGFibGVcblx0XHRpZiAodGhpcy5vVmlldy5vVmlld0RhdGE/LnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3QgJiYgQ29tbW9uSGVscGVyLmdldE1ldGFNb2RlbCgpID09PSB1bmRlZmluZWQpIHtcblx0XHRcdENvbW1vbkhlbHBlci5zZXRNZXRhTW9kZWwodGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHR9XG5cblx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHRsZXQgc3ViU2VjdGlvbnM6IE9iamVjdFBhZ2VTdWJTZWN0aW9uW107XG5cdFx0aWYgKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0VXNlSWNvblRhYkJhcigpKSB7XG5cdFx0XHRjb25zdCBzZWN0aW9ucyA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuXHRcdFx0XHRzdWJTZWN0aW9ucyA9IHNlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdFx0dGhpcy5jaGVja1NlY3Rpb25zRm9yR3JpZFRhYmxlKHN1YlNlY3Rpb25zKTtcblx0XHR9XG5cdH1cblxuXHRfb25CZWZvcmVCaW5kaW5nKG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvLyBUT0RPOiB3ZSBzaG91bGQgY2hlY2sgaG93IHRoaXMgY29tZXMgdG9nZXRoZXIgd2l0aCB0aGUgdHJhbnNhY3Rpb24gaGVscGVyLCBzYW1lIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIGFmdGVyQmluZGluZ1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCksXG5cdFx0XHRvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LFxuXHRcdFx0b0ludGVybmFsTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbCxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIpLFxuXHRcdFx0aVZpZXdMZXZlbCA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkudmlld0xldmVsO1xuXHRcdGxldCBvRmFzdENyZWF0aW9uUm93O1xuXHRcdGFCYXRjaEdyb3Vwcy5wdXNoKFwiJGF1dG9cIik7XG5cdFx0aWYgKG1QYXJhbWV0ZXJzLmJEcmFmdE5hdmlnYXRpb24gIT09IHRydWUpIHtcblx0XHRcdHRoaXMuX2Nsb3NlU2lkZUNvbnRlbnQoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb3BDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChcblx0XHRcdG9wQ29udGV4dCAmJlxuXHRcdFx0b3BDb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkgJiZcblx0XHRcdCFhQmF0Y2hHcm91cHMuc29tZShvcENvbnRleHQuZ2V0TW9kZWwoKS5oYXNQZW5kaW5nQ2hhbmdlcy5iaW5kKG9wQ29udGV4dC5nZXRNb2RlbCgpKSlcblx0XHQpIHtcblx0XHRcdC8qIFx0SW4gY2FzZSB0aGVyZSBhcmUgcGVuZGluZyBjaGFuZ2VzIGZvciB0aGUgY3JlYXRpb24gcm93IGFuZCBubyBvdGhlcnMgd2UgbmVlZCB0byByZXNldCB0aGUgY2hhbmdlc1xuXHRcdFx0XHRcdFx0XHRcdFRPRE86IHRoaXMgaXMganVzdCBhIHF1aWNrIHNvbHV0aW9uLCB0aGlzIG5lZWRzIHRvIGJlIHJld29ya2VkXG5cdFx0XHRcdFx0XHRcdFx0Ki9cblxuXHRcdFx0b3BDb250ZXh0LmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHR9XG5cblx0XHQvLyBGb3Igbm93IHdlIGhhdmUgdG8gc2V0IHRoZSBiaW5kaW5nIGNvbnRleHQgdG8gbnVsbCBmb3IgZXZlcnkgZmFzdCBjcmVhdGlvbiByb3dcblx0XHQvLyBUT0RPOiBHZXQgcmlkIG9mIHRoaXMgY29kaW5nIG9yIG1vdmUgaXQgdG8gYW5vdGhlciBsYXllciAtIHRvIGJlIGRpc2N1c3NlZCB3aXRoIE1EQyBhbmQgbW9kZWxcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9GYXN0Q3JlYXRpb25Sb3cgPSBhVGFibGVzW2ldLmdldENyZWF0aW9uUm93KCk7XG5cdFx0XHRpZiAob0Zhc3RDcmVhdGlvblJvdykge1xuXHRcdFx0XHRvRmFzdENyZWF0aW9uUm93LnNldEJpbmRpbmdDb250ZXh0KG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb24gc28gdGhhdCBiaW5kaW5ncyBhcmUgZW5hYmxlZCBkdXJpbmcgbmF2aWdhdGlvbiB0aHJvdWdoIHBhZ2luYXRvciBidXR0b25zLCBhcyB0aGVyZSBpcyBubyB2aWV3IHJlcmVuZGVyaW5nL3JlYmluZFxuXHRcdGNvbnN0IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbiA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICghKG9PYmplY3RQYWdlIGFzIGFueSkuaXNGaXJzdFJlbmRlcmluZygpICYmICFtUGFyYW1ldGVycy5iUGVyc2lzdE9QU2Nyb2xsKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihudWxsIGFzIGFueSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvT2JqZWN0UGFnZS5hdHRhY2hFdmVudE9uY2UoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgZm5TY3JvbGxUb1ByZXNlbnRTZWN0aW9uKTtcblxuXHRcdC8vIGlmIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIE9iamVjdFBhZ2VMYXlvdXQgaXMgY2hhbmdlZCB0aGVuIHNjcm9sbCB0byBwcmVzZW50IFNlY3Rpb25cblx0XHQvLyBGSVhNRSBJcyB0aGlzIHJlYWxseSB3b3JraW5nIGFzIGludGVuZGVkID8gSW5pdGlhbGx5IHRoaXMgd2FzIG9uQmVmb3JlUmVuZGVyaW5nLCBidXQgbmV2ZXIgdHJpZ2dlcmVkIG9uQmVmb3JlUmVuZGVyaW5nIGJlY2F1c2UgaXQgd2FzIHJlZ2lzdGVyZWQgYWZ0ZXIgaXRcblx0XHRjb25zdCBvRGVsZWdhdGVPbkJlZm9yZSA9IHtcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6IGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvblxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYWRkRXZlbnREZWxlZ2F0ZShvRGVsZWdhdGVPbkJlZm9yZSwgdGhpcyk7XG5cdFx0dGhpcy5wYWdlUmVhZHkuYXR0YWNoRXZlbnRPbmNlKFwicGFnZVJlYWR5XCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdG9PYmplY3RQYWdlLnJlbW92ZUV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUpO1xuXHRcdH0pO1xuXG5cdFx0Ly9TZXQgdGhlIEJpbmRpbmcgZm9yIFBhZ2luYXRvcnMgdXNpbmcgTGlzdEJpbmRpbmcgSURcblx0XHRpZiAoaVZpZXdMZXZlbCA+IDEpIHtcblx0XHRcdGxldCBvQmluZGluZyA9IG1QYXJhbWV0ZXJzICYmIG1QYXJhbWV0ZXJzLmxpc3RCaW5kaW5nO1xuXHRcdFx0Y29uc3Qgb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0ID0gb0ludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvcGFnaW5hdG9yQ3VycmVudENvbnRleHRcIik7XG5cdFx0XHRpZiAob1BhZ2luYXRvckN1cnJlbnRDb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IG9CaW5kaW5nVG9Vc2UgPSBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nVG9Vc2UsIG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIsIG51bGwpO1xuXHRcdFx0fSBlbHNlIGlmIChvQmluZGluZykge1xuXHRcdFx0XHRpZiAob0JpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gaWYgdGhlIGJpbmRpbmcgdHlwZSBpcyBub3QgT0RhdGFMaXN0QmluZGluZyBiZWNhdXNlIG9mIGEgZGVlcGxpbmsgbmF2aWdhdGlvbiBvciBhIHJlZnJlc2ggb2YgdGhlIHBhZ2Vcblx0XHRcdFx0XHQvLyB3ZSBuZWVkIHRvIGNyZWF0ZSBpdFxuXHRcdFx0XHRcdGNvbnN0IHNCaW5kaW5nUGF0aCA9IG9CaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdFx0XHRpZiAoL1xcKFteKV0qXFwpJC8udGVzdChzQmluZGluZ1BhdGgpKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgY3VycmVudCBiaW5kaW5nIHBhdGggZW5kcyB3aXRoICh4eHgpLCBzbyB3ZSBjcmVhdGUgdGhlIGxpc3RCaW5kaW5nIGJ5IHJlbW92aW5nICh4eHgpXG5cdFx0XHRcdFx0XHRjb25zdCBzTGlzdEJpbmRpbmdQYXRoID0gc0JpbmRpbmdQYXRoLnJlcGxhY2UoL1xcKFteKV0qXFwpJC8sIFwiXCIpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcgPSBuZXcgKE9EYXRhTGlzdEJpbmRpbmcgYXMgYW55KShvQmluZGluZy5vTW9kZWwsIHNMaXN0QmluZGluZ1BhdGgpO1xuXHRcdFx0XHRcdFx0Y29uc3QgX3NldExpc3RCaW5kaW5nQXN5bmMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvQmluZGluZy5nZXRDb250ZXh0cygpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnBhZ2luYXRvci5pbml0aWFsaXplKG9CaW5kaW5nLCBvQ29udGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoRXZlbnQoXCJjaGFuZ2VcIiwgX3NldExpc3RCaW5kaW5nQXN5bmMpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0cygwKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBkb2Vzbid0IGVuZCB3aXRoICh4eHgpIC0tPiB0aGUgbGFzdCBzZWdtZW50IGlzIGEgMS0xIG5hdmlnYXRpb24sIHNvIHdlIGRvbid0IGRpc3BsYXkgdGhlIHBhZ2luYXRvclxuXHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZSh1bmRlZmluZWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHRjb25zdCBhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpO1xuXHRcdFx0Y29uc3QgYlVzZUljb25UYWJCYXIgPSBvT2JqZWN0UGFnZS5nZXRVc2VJY29uVGFiQmFyKCk7XG5cdFx0XHRsZXQgaVNraXAgPSAyO1xuXHRcdFx0Y29uc3QgYklzSW5FZGl0TW9kZSA9IG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdGNvbnN0IGJFZGl0YWJsZUhlYWRlciA9ICh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkuZWRpdGFibGVIZWFkZXJDb250ZW50O1xuXHRcdFx0Zm9yIChsZXQgaVNlY3Rpb24gPSAwOyBpU2VjdGlvbiA8IGFTZWN0aW9ucy5sZW5ndGg7IGlTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3Qgb1NlY3Rpb24gPSBhU2VjdGlvbnNbaVNlY3Rpb25dO1xuXHRcdFx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHRmb3IgKGxldCBpU3ViU2VjdGlvbiA9IDA7IGlTdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgaVN1YlNlY3Rpb24rKywgaVNraXAtLSkge1xuXHRcdFx0XHRcdC8vIEluIEljb25UYWJCYXIgbW9kZSBrZWVwIHRoZSBzZWNvbmQgc2VjdGlvbiBib3VuZCBpZiB0aGVyZSBpcyBhbiBlZGl0YWJsZSBoZWFkZXIgYW5kIHdlIGFyZSBzd2l0Y2hpbmcgdG8gZGlzcGxheSBtb2RlXG5cdFx0XHRcdFx0aWYgKGlTa2lwIDwgMSB8fCAoYlVzZUljb25UYWJCYXIgJiYgKGlTZWN0aW9uID4gMSB8fCAoaVNlY3Rpb24gPT09IDEgJiYgIWJFZGl0YWJsZUhlYWRlciAmJiAhYklzSW5FZGl0TW9kZSkpKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBhU3ViU2VjdGlvbnNbaVN1YlNlY3Rpb25dO1xuXHRcdFx0XHRcdFx0aWYgKG9TdWJTZWN0aW9uLmRhdGEoKS5pc1Zpc2liaWxpdHlEeW5hbWljICE9PSBcInRydWVcIikge1xuXHRcdFx0XHRcdFx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dChudWxsIGFzIGFueSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMucGxhY2Vob2xkZXIuaXNQbGFjZWhvbGRlckVuYWJsZWQoKSAmJiBtUGFyYW1ldGVycy5zaG93UGxhY2Vob2xkZXIpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvTmF2Q29udGFpbmVyID0gKG9WaWV3LmdldFBhcmVudCgpIGFzIGFueSkub0NvbnRhaW5lci5nZXRQYXJlbnQoKTtcblx0XHRcdGlmIChvTmF2Q29udGFpbmVyKSB7XG5cdFx0XHRcdG9OYXZDb250YWluZXIuc2hvd1BsYWNlaG9sZGVyKHt9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlOiBhbnkpIHtcblx0XHRsZXQgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudDtcblx0XHRjb25zdCBhQWN0aW9ucyA9IG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgJiYgb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKS5nZXRBY3Rpb25zKCk7XG5cdFx0aWYgKGFBY3Rpb25zICYmIGFBY3Rpb25zLmxlbmd0aCkge1xuXHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IGFBY3Rpb25zLmZpbmQoZnVuY3Rpb24gKG9BY3Rpb246IGFueSkge1xuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIGxlZnQgYWxpZ25tZW50IG9mIHRoZSBEcmFmdCBzd2l0Y2ggYW5kIHRoZSBjb2xsYWJvcmF0aXZlIGRyYWZ0IGF2YXRhciBjb250cm9sc1xuXHRcdFx0XHQvLyB0aGVyZSBpcyBhIFRvb2xiYXJTcGFjZXIgaW4gdGhlIGFjdGlvbnMgYWdncmVnYXRpb24gd2hpY2ggd2UgbmVlZCB0byBleGNsdWRlIGhlcmUhXG5cdFx0XHRcdC8vIER1ZSB0byB0aGUgQUNDIHJlcG9ydCwgd2UgYWxzbyBuZWVkIG5vdCB0byBjaGVjayBmb3IgdGhlIEludmlzaWJsZVRleHQgZWxlbWVudHNcblx0XHRcdFx0aWYgKG9BY3Rpb24uaXNBKFwic2FwLmZlLm1hY3Jvcy5zaGFyZS5TaGFyZUFQSVwiKSkge1xuXHRcdFx0XHRcdC8vIHNpbmNlIFNoYXJlQVBJIGRvZXMgbm90IGhhdmUgYSBkaXNhYmxlIHByb3BlcnR5XG5cdFx0XHRcdFx0Ly8gaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiBpdCBpcyBkaXNiYWxlZCBvciBub3Rcblx0XHRcdFx0XHRyZXR1cm4gb0FjdGlvbi5nZXRWaXNpYmxlKCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoIW9BY3Rpb24uaXNBKFwic2FwLnVpLmNvcmUuSW52aXNpYmxlVGV4dFwiKSAmJiAhb0FjdGlvbi5pc0EoXCJzYXAubS5Ub29sYmFyU3BhY2VyXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpICYmIG9BY3Rpb24uZ2V0RW5hYmxlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdH1cblxuXHRfZ2V0Rmlyc3RFbXB0eU1hbmRhdG9yeUZpZWxkRnJvbVN1YlNlY3Rpb24oYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRpZiAoYVN1YlNlY3Rpb25zKSB7XG5cdFx0XHRmb3IgKGxldCBzdWJTZWN0aW9uID0gMDsgc3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IHN1YlNlY3Rpb24rKykge1xuXHRcdFx0XHRjb25zdCBhQmxvY2tzID0gYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLmdldEJsb2NrcygpO1xuXG5cdFx0XHRcdGlmIChhQmxvY2tzKSB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgYmxvY2sgPSAwOyBibG9jayA8IGFCbG9ja3MubGVuZ3RoOyBibG9jaysrKSB7XG5cdFx0XHRcdFx0XHRsZXQgYUZvcm1Db250YWluZXJzO1xuXG5cdFx0XHRcdFx0XHRpZiAoYUJsb2Nrc1tibG9ja10uaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIikpIHtcblx0XHRcdFx0XHRcdFx0YUZvcm1Db250YWluZXJzID0gYUJsb2Nrc1tibG9ja10uZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQgJiZcblx0XHRcdFx0XHRcdFx0YUJsb2Nrc1tibG9ja10uZ2V0Q29udGVudCgpICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5pc0EoXCJzYXAudWkubGF5b3V0LmZvcm0uRm9ybVwiKVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKS5nZXRGb3JtQ29udGFpbmVycygpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYUZvcm1Db250YWluZXJzKSB7XG5cdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1Db250YWluZXIgPSAwOyBmb3JtQ29udGFpbmVyIDwgYUZvcm1Db250YWluZXJzLmxlbmd0aDsgZm9ybUNvbnRhaW5lcisrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgYUZvcm1FbGVtZW50cyA9IGFGb3JtQ29udGFpbmVyc1tmb3JtQ29udGFpbmVyXS5nZXRGb3JtRWxlbWVudHMoKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoYUZvcm1FbGVtZW50cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yIChsZXQgZm9ybUVsZW1lbnQgPSAwOyBmb3JtRWxlbWVudCA8IGFGb3JtRWxlbWVudHMubGVuZ3RoOyBmb3JtRWxlbWVudCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGaWVsZHMgPSBhRm9ybUVsZW1lbnRzW2Zvcm1FbGVtZW50XS5nZXRGaWVsZHMoKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBUaGUgZmlyc3QgZmllbGQgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIElucHV0QmFzZSAoZS5nLiBjb3VsZCBiZSBhIFRleHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNvIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBpdCBoYXMgYSBnZXRSZXF1aXJlZCBtZXRob2Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoYUZpZWxkc1swXS5nZXRSZXF1aXJlZCAmJiBhRmllbGRzWzBdLmdldFJlcXVpcmVkKCkgJiYgIWFGaWVsZHNbMF0uZ2V0VmFsdWUoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGFGaWVsZHNbMF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdExvZy5kZWJ1ZyhgRXJyb3Igd2hlbiBzZWFyY2hpbmcgZm9yIG1hbmRhb3RyeSBlbXB0eSBmaWVsZDogJHtlcnJvcn1gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0X3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShhU3ViU2VjdGlvbnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdGNvbnN0IG9NYW5kYXRvcnlGaWVsZCA9IHRoaXMuX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9ucyk7XG5cdFx0bGV0IG9GaWVsZFRvRm9jdXM6IGFueTtcblx0XHRpZiAob01hbmRhdG9yeUZpZWxkKSB7XG5cdFx0XHRvRmllbGRUb0ZvY3VzID0gb01hbmRhdG9yeUZpZWxkLmNvbnRlbnQuZ2V0Q29udGVudEVkaXQoKVswXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IChvT2JqZWN0UGFnZSBhcyBhbnkpLl9nZXRGaXJzdEVkaXRhYmxlSW5wdXQoKSB8fCB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdH1cblxuXHRcdGlmIChvRmllbGRUb0ZvY3VzKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0Ly8gV2Ugc2V0IHRoZSBmb2N1cyBpbiBhIHRpbWVlb3V0LCBvdGhlcndpc2UgdGhlIGZvY3VzIHNvbWV0aW1lcyBnb2VzIHRvIHRoZSBUYWJCYXJcblx0XHRcdFx0b0ZpZWxkVG9Gb2N1cy5mb2N1cygpO1xuXHRcdFx0fSwgMCk7XG5cdFx0fVxuXHR9XG5cblx0X2hhbmRsZVN1YlNlY3Rpb25FbnRlcmVkVmlld1BvcnQob0V2ZW50OiBhbnkpIHtcblx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdG9TdWJTZWN0aW9uLnNldEJpbmRpbmdDb250ZXh0KHVuZGVmaW5lZCk7XG5cdH1cblxuXHRfb25CYWNrTmF2aWdhdGlvbkluRHJhZnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHRoaXMubWVzc2FnZUhhbmRsZXIucmVtb3ZlVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0aWYgKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGVyUHJveHkoKS5jaGVja0lmQmFja0hhc1NhbWVDb250ZXh0KCkpIHtcblx0XHRcdC8vIEJhY2sgbmF2IHdpbGwga2VlcCB0aGUgc2FtZSBjb250ZXh0IC0tPiBubyBuZWVkIHRvIGRpc3BsYXkgdGhlIGRpYWxvZ1xuXHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRyYWZ0LnByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uKFxuXHRcdFx0XHRmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdEZ1bmN0aW9uLnByb3RvdHlwZSxcblx0XHRcdFx0b0NvbnRleHQsXG5cdFx0XHRcdHRoaXMsXG5cdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRkcmFmdC5OYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdF9vbkFmdGVyQmluZGluZyhvQmluZGluZ0NvbnRleHQ6IGFueSwgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdG9CaW5kaW5nQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0b09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU2VjdGlvbjogYW55KSB7XG5cdFx0XHRvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9TdWJTZWN0aW9uLCBhSUJOQWN0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdC8vIEFzc2lnbiBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHRzIHRvIG9Gb3JtQ29udGFpbmVyOlxuXHRcdC8vIDEuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gdGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCB0byB0aGUgWE1MIGZyYWdtZW50XG5cdFx0Ly8gKEZvcm1Db250YWluZXIuZnJhZ21lbnQueG1sKSB5ZXQgLSBpdCBpcyB1c2VkIGFscmVhZHkgZm9yIHRoZSBkYXRhLXN0cnVjdHVyZS5cblx0XHQvLyAyLiBBbm90aGVyIHByb2JsZW0gaXMsIHRoYXQgRm9ybUNvbnRhaW5lcnMgYXNzaWduZWQgdG8gYSAnTW9yZUJsb2NrJyBkb2VzIG5vdCBoYXZlIGFuXG5cdFx0Ly8gaW50ZXJuYWwgbW9kZWwgY29udGV4dCBhdCBhbGwuXG5cblx0XHRhVGFibGVzLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVGFibGUuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dGaWVsZFZhbGlkaXR5XCIsIHt9KTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY3JlYXRpb25Sb3dDdXN0b21WYWxpZGl0eVwiLCB7fSk7XG5cblx0XHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXG5cdFx0XHRcdC8vIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBCQ1A6IDIwODAyMTgwMDRcblx0XHRcdFx0Ly8gTmVlZCB0byBmaXggd2l0aCBCTEk6IEZJT1JJVEVDSFAxLTE1Mjc0XG5cdFx0XHRcdC8vIG9ubHkgZm9yIGVkaXQgbW9kZSwgd2UgY2xlYXIgdGhlIHRhYmxlIGNhY2hlXG5cdFx0XHRcdC8vIFdvcmthcm91bmQgc3RhcnRzIGhlcmUhIVxuXHRcdFx0XHRjb25zdCBvVGFibGVSb3dCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9UYWJsZVJvd0JpbmRpbmcpIHtcblx0XHRcdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9UYWJsZVJvd0JpbmRpbmcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpIHtcblx0XHRcdFx0XHRcdC8vIGFwcGx5IGZvciBib3RoIGVkaXQgYW5kIGRpc3BsYXkgbW9kZSBpbiBzdGlja3lcblx0XHRcdFx0XHRcdG9UYWJsZVJvd0JpbmRpbmcucmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFdvcmthcm91bmQgZW5kcyBoZXJlISFcblxuXHRcdFx0XHQvLyBVcGRhdGUgJ2VuYWJsZWQnIHByb3BlcnR5IG9mIERhdGFGaWVsZEZvckFjdGlvbiBidXR0b25zIG9uIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0Ly8gVGhlIHNhbWUgaXMgYWxzbyBwZXJmb3JtZWQgb24gVGFibGUgc2VsZWN0aW9uQ2hhbmdlIGV2ZW50XG5cdFx0XHRcdGNvbnN0IG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAgPSBKU09OLnBhcnNlKFxuXHRcdFx0XHRcdFx0Q29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShEZWxlZ2F0ZVV0aWwuZ2V0Q3VzdG9tRGF0YShvVGFibGUsIFwib3BlcmF0aW9uQXZhaWxhYmxlTWFwXCIpKVxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0YVNlbGVjdGVkQ29udGV4dHMgPSBvVGFibGUuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXG5cdFx0XHRcdEFjdGlvblJ1bnRpbWUuc2V0QWN0aW9uRW5hYmxlbWVudChvSW50ZXJuYWxNb2RlbENvbnRleHQsIG9BY3Rpb25PcGVyYXRpb25BdmFpbGFibGVNYXAsIGFTZWxlY3RlZENvbnRleHRzLCBcInRhYmxlXCIpO1xuXHRcdFx0XHQvLyBDbGVhciB0aGUgc2VsZWN0aW9uIGluIHRoZSB0YWJsZSwgbmVlZCB0byBiZSBmaXhlZCBhbmQgcmV2aWV3IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0XHRvVGFibGUuY2xlYXJTZWxlY3Rpb24oKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRDb21tb25VdGlscy5nZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsKHRoaXMsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHQvL1JldHJpZXZlIE9iamVjdCBQYWdlIGhlYWRlciBhY3Rpb25zIGZyb20gT2JqZWN0IFBhZ2UgdGl0bGUgY29udHJvbFxuXHRcdGNvbnN0IG9PYmplY3RQYWdlVGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cdFx0bGV0IGFJQk5IZWFkZXJBY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdGFJQk5IZWFkZXJBY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvT2JqZWN0UGFnZVRpdGxlLCBhSUJOSGVhZGVyQWN0aW9ucyk7XG5cdFx0YUlCTkFjdGlvbnMgPSBhSUJOQWN0aW9ucy5jb25jYXQoYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdENvbW1vblV0aWxzLnVwZGF0ZURhdGFGaWVsZEZvcklCTkJ1dHRvbnNWaXNpYmlsaXR5KGFJQk5BY3Rpb25zLCB0aGlzLmdldFZpZXcoKSk7XG5cblx0XHRsZXQgb01vZGVsOiBhbnksIG9GaW5hbFVJU3RhdGU6IGFueTtcblxuXHRcdC8vIHRoaXMgc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgdGhlIGFsbFxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvVGFibGVcblx0XHQgKi9cblx0XHRjb25zdCBoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMgPSAob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSksXG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cyA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRUYWJsZUhlbHBlci5lbmFibGVGYXN0Q3JlYXRpb25Sb3coXG5cdFx0XHRcdFx0XHRvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmdldENvbnRleHQoKSxcblx0XHRcdFx0XHRcdG9Nb2RlbCxcblx0XHRcdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRpZiAoIW9CaW5kaW5nKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0Zm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmbkhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRpZiAob0JpbmRpbmcub0NvbnRleHQpIHtcblx0XHRcdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZGV0YWNoQ2hhbmdlKGZuSGFuZGxlQ2hhbmdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdGlmIChvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHQvLyBDb21wdXRlIEVkaXQgTW9kZVxuXHRcdFx0b0ZpbmFsVUlTdGF0ZSA9IHRoaXMuZWRpdEZsb3cuY29tcHV0ZUVkaXRNb2RlKG9CaW5kaW5nQ29udGV4dCk7XG5cblx0XHRcdGlmIChNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChvTW9kZWwuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdG9GaW5hbFVJU3RhdGVcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGNvbm5lY3QodGhpcy5nZXRWaWV3KCkpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpIHtcblx0XHRcdFx0XHRcdFx0ZGlzY29ubmVjdCh0aGlzLmdldFZpZXcoKSk7IC8vIENsZWFudXAgY29sbGFib3JhdGlvbiBjb25uZWN0aW9uIGluIGNhc2Ugd2Ugc3dpdGNoIHRvIGFub3RoZXIgZWxlbWVudCAoZS5nLiBpbiBGQ0wpXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciB0aGUgZmluYWwgVUkgU3RhdGVcIiwgb0Vycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIHVwZGF0ZSByZWxhdGVkIGFwcHNcblx0XHRcdHRoaXMuX3VwZGF0ZVJlbGF0ZWRBcHBzKCk7XG5cblx0XHRcdC8vQXR0YWNoIHRoZSBwYXRjaCBzZW50IGFuZCBwYXRjaCBjb21wbGV0ZWQgZXZlbnQgdG8gdGhlIG9iamVjdCBwYWdlIGJpbmRpbmcgc28gdGhhdCB3ZSBjYW4gcmVhY3Rcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gKG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIG9CaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nKCkpIHx8IG9CaW5kaW5nQ29udGV4dDtcblxuXHRcdFx0Ly8gQXR0YWNoIHRoZSBldmVudCBoYW5kbGVyIG9ubHkgb25jZSB0byB0aGUgc2FtZSBiaW5kaW5nXG5cdFx0XHRpZiAodGhpcy5jdXJyZW50QmluZGluZyAhPT0gb0JpbmRpbmcpIHtcblx0XHRcdFx0b0JpbmRpbmcuYXR0YWNoRXZlbnQoXCJwYXRjaFNlbnRcIiwgdGhpcy5lZGl0Rmxvdy5oYW5kbGVQYXRjaFNlbnQsIHRoaXMpO1xuXHRcdFx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gb0JpbmRpbmc7XG5cdFx0XHR9XG5cblx0XHRcdGFUYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFx0Ly8gYWNjZXNzIGJpbmRpbmcgb25seSBhZnRlciB0YWJsZSBpcyBib3VuZFxuXHRcdFx0XHRUYWJsZVV0aWxzLndoZW5Cb3VuZChvVGFibGUpXG5cdFx0XHRcdFx0LnRoZW4oaGFuZGxlVGFibGVNb2RpZmljYXRpb25zKVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSB0YWJsZSB0byBiZSBib3VuZFwiLCBvRXJyb3IpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBiaW5kaW5nIGlzIHJlYWR5IGhlbmNlIGNhbGxpbmcgaXQgaW4gb25BZnRlckJpbmRpbmdcblx0XHRcdChvT2JqZWN0UGFnZSBhcyBhbnkpLl90cmlnZ2VyVmlzaWJsZVN1YlNlY3Rpb25zRXZlbnRzKCk7XG5cblx0XHRcdC8vVG8gQ29tcHV0ZSB0aGUgRWRpdCBCaW5kaW5nIG9mIHRoZSBzdWJPYmplY3QgcGFnZSB1c2luZyByb290IG9iamVjdCBwYWdlLCBjcmVhdGUgYSBjb250ZXh0IGZvciBkcmFmdCByb290IGFuZCB1cGRhdGUgdGhlIGVkaXQgYnV0dG9uIGluIHN1YiBPUCB1c2luZyB0aGUgY29udGV4dFxuXHRcdFx0QWN0aW9uUnVudGltZS51cGRhdGVFZGl0QnV0dG9uVmlzaWJpbGl0eUFuZEVuYWJsZW1lbnQodGhpcy5nZXRWaWV3KCkpO1xuXHRcdH1cblx0fVxuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25QYWdlUmVhZHkobVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdGNvbnN0IHNldEZvY3VzID0gKCkgPT4ge1xuXHRcdFx0Ly8gU2V0IHRoZSBmb2N1cyB0byB0aGUgZmlyc3QgYWN0aW9uIGJ1dHRvbiwgb3IgdG8gdGhlIGZpcnN0IGVkaXRhYmxlIGlucHV0IGlmIGluIGVkaXRhYmxlIG1vZGVcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGlzSW5EaXNwbGF5TW9kZSA9ICFvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cblx0XHRcdGlmIChpc0luRGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0ZpcnN0Q2xpY2thYmxlRWxlbWVudCA9IHRoaXMuX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZSk7XG5cdFx0XHRcdGlmIChvRmlyc3RDbGlja2FibGVFbGVtZW50KSB7XG5cdFx0XHRcdFx0b0ZpcnN0Q2xpY2thYmxlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBvU2VsZWN0ZWRTZWN0aW9uOiBhbnkgPSBDb3JlLmJ5SWQob09iamVjdFBhZ2UuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkpO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkU2VjdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUZvY3VzSW5FZGl0TW9kZShvU2VsZWN0ZWRTZWN0aW9uLmdldFN1YlNlY3Rpb25zKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHQvLyBBcHBseSBhcHAgc3RhdGUgb25seSBhZnRlciB0aGUgcGFnZSBpcyByZWFkeSB3aXRoIHRoZSBmaXJzdCBzZWN0aW9uIHNlbGVjdGVkXG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly9TaG93IHBvcHVwIHdoaWxlIG5hdmlnYXRpbmcgYmFjayBmcm9tIG9iamVjdCBwYWdlIGluIGNhc2Ugb2YgZHJhZnRcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoIWJJc1N0aWNreU1vZGUpIHtcblx0XHRcdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudChvVmlldyk7XG5cdFx0XHRcdG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCgpID0+IHRoaXMuX29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9CaW5kaW5nQ29udGV4dCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCB2aWV3SWQgPSB0aGlzLmdldFZpZXcoKS5nZXRJZCgpO1xuXHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdC5nZXRBcHBTdGF0ZUhhbmRsZXIoKVxuXHRcdFx0LmFwcGx5QXBwU3RhdGUodmlld0lkLCB0aGlzLmdldFZpZXcoKSlcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0aWYgKG1QYXJhbWV0ZXJzLmZvcmNlRm9jdXMpIHtcblx0XHRcdFx0XHRzZXRGb2N1cygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChFcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBzZXR0aW5nIHRoZSBmb2N1c1wiLCBFcnJvcik7XG5cdFx0XHR9KTtcblxuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImVycm9yTmF2aWdhdGlvblNlY3Rpb25GbGFnXCIsIGZhbHNlKTtcblx0XHR0aGlzLl9jaGVja0RhdGFQb2ludFRpdGxlRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvbi5cblx0ICpcblx0ICogQHJldHVybnMgVGhlIHN0YXR1cyBvZiBlZGl0IG1vZGUgZm9yIHN0aWNreSBzZXNzaW9uXG5cdCAqL1xuXHRnZXRTdGlja3lFZGl0TW9kZSgpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCAmJiAodGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRsZXQgYklzU3RpY2t5RWRpdE1vZGUgPSBmYWxzZTtcblx0XHRpZiAob0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHRjb25zdCBiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHRcdGlmIChiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGJJc1N0aWNreUVkaXRNb2RlID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGU7XG5cdH1cblxuXHRfZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuYnlJZChcImZlOjpPYmplY3RQYWdlXCIpIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdH1cblxuXHRfZ2V0UGFnZVRpdGxlSW5mb3JtYXRpb24oKSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlU3VidGl0bGUgPSBvT2JqZWN0UGFnZS5nZXRDdXN0b21EYXRhKCkuZmluZChmdW5jdGlvbiAob0N1c3RvbURhdGE6IGFueSkge1xuXHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcIk9iamVjdFBhZ2VTdWJ0aXRsZVwiO1xuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHR0aXRsZTogb09iamVjdFBhZ2UuZGF0YShcIk9iamVjdFBhZ2VUaXRsZVwiKSB8fCBcIlwiLFxuXHRcdFx0c3VidGl0bGU6IG9PYmplY3RQYWdlU3VidGl0bGUgJiYgb09iamVjdFBhZ2VTdWJ0aXRsZS5nZXRWYWx1ZSgpLFxuXHRcdFx0aW50ZW50OiBcIlwiLFxuXHRcdFx0aWNvbjogXCJcIlxuXHRcdH07XG5cdH1cblxuXHRfZXhlY3V0ZUhlYWRlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlKVxuXHRcdFx0XHQuZ2V0QWN0aW9ucygpXG5cdFx0XHRcdC5maW5kKGZ1bmN0aW9uIChvRWxlbWVudDogYW55KSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdFx0fSk7XG5cdFx0aWYgKG9CdXR0b24pIHtcblx0XHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0XHR9XG5cdH1cblxuXHRfZXhlY3V0ZUZvb3RlclNob3J0Y3V0KHNJZDogYW55KSB7XG5cdFx0Y29uc3Qgc0J1dHRvbklkID0gYCR7dGhpcy5nZXRWaWV3KCkuZ2V0SWQoKX0tLSR7c0lkfWAsXG5cdFx0XHRvQnV0dG9uID0gKHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkuZ2V0Rm9vdGVyKCkgYXMgYW55KS5nZXRDb250ZW50KCkuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gb0VsZW1lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgPT09IFwic2FwLm0uQnV0dG9uXCIgJiYgb0VsZW1lbnQuZ2V0SWQoKSA9PT0gc0J1dHRvbklkO1xuXHRcdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZmlyZUJ1dHRvblByZXNzKG9CdXR0b24pO1xuXHR9XG5cblx0X2V4ZWN1dGVUYWJTaG9ydEN1dChvRXhlY3V0aW9uOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCksXG5cdFx0XHRhU2VjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRTZWN0aW9ucygpLFxuXHRcdFx0aVNlY3Rpb25JbmRleE1heCA9IGFTZWN0aW9ucy5sZW5ndGggLSAxLFxuXHRcdFx0c0NvbW1hbmQgPSBvRXhlY3V0aW9uLm9Tb3VyY2UuZ2V0Q29tbWFuZCgpO1xuXHRcdGxldCBuZXdTZWN0aW9uLFxuXHRcdFx0aVNlbGVjdGVkU2VjdGlvbkluZGV4ID0gb09iamVjdFBhZ2UuaW5kZXhPZlNlY3Rpb24odGhpcy5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gLTEgJiYgaVNlY3Rpb25JbmRleE1heCA+IDApIHtcblx0XHRcdGlmIChzQ29tbWFuZCA9PT0gXCJOZXh0VGFiXCIpIHtcblx0XHRcdFx0aWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCA8PSBpU2VjdGlvbkluZGV4TWF4IC0gMSkge1xuXHRcdFx0XHRcdG5ld1NlY3Rpb24gPSBhU2VjdGlvbnNbKytpU2VsZWN0ZWRTZWN0aW9uSW5kZXhdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGlTZWxlY3RlZFNlY3Rpb25JbmRleCAhPT0gMCkge1xuXHRcdFx0XHQvLyBQcmV2aW91c1RhYlxuXHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWy0taVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG5ld1NlY3Rpb24pIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2V0U2VsZWN0ZWRTZWN0aW9uKG5ld1NlY3Rpb24pO1xuXHRcdFx0XHRuZXdTZWN0aW9uLmZvY3VzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZvb3RlclZpc2liaWxpdHkoKSB7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBzVmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgZmFsc2UpO1xuXHRcdHNhcC51aVxuXHRcdFx0LmdldENvcmUoKVxuXHRcdFx0LmdldE1lc3NhZ2VNYW5hZ2VyKClcblx0XHRcdC5nZXRNZXNzYWdlTW9kZWwoKVxuXHRcdFx0LmdldERhdGEoKVxuXHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKG9NZXNzYWdlOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9NZXNzYWdlLnZhbGlkYXRpb24gJiYgb01lc3NhZ2UudHlwZSA9PT0gXCJFcnJvclwiICYmIG9NZXNzYWdlLnRhcmdldC5pbmRleE9mKHNWaWV3SWQpID4gLTEpIHtcblx0XHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJtZXNzYWdlRm9vdGVyQ29udGFpbnNFcnJvcnNcIiwgdHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0X3Nob3dNZXNzYWdlUG9wb3ZlcihlcnI/OiBhbnksIG9SZXQ/OiBhbnkpIHtcblx0XHRpZiAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHR9XG5cdFx0Y29uc3Qgcm9vdFZpZXdDb250cm9sbGVyID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBhbnk7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2VWaWV3ID0gcm9vdFZpZXdDb250cm9sbGVyLmlzRmNsRW5hYmxlZCgpXG5cdFx0XHQ/IHJvb3RWaWV3Q29udHJvbGxlci5nZXRSaWdodG1vc3RWaWV3KClcblx0XHRcdDogKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdENvbnRhaW5lcigpIGFzIGFueSkuZ2V0Q3VycmVudFBhZ2UoKTtcblx0XHRpZiAoIWN1cnJlbnRQYWdlVmlldy5pc0EoXCJzYXAubS5NZXNzYWdlUGFnZVwiKSkge1xuXHRcdFx0Y29uc3Qgb01lc3NhZ2VCdXR0b24gPSB0aGlzLm1lc3NhZ2VCdXR0b24sXG5cdFx0XHRcdG9NZXNzYWdlUG9wb3ZlciA9IG9NZXNzYWdlQnV0dG9uLm9NZXNzYWdlUG9wb3Zlcixcblx0XHRcdFx0b0l0ZW1CaW5kaW5nID0gb01lc3NhZ2VQb3BvdmVyLmdldEJpbmRpbmcoXCJpdGVtc1wiKTtcblxuXHRcdFx0aWYgKG9JdGVtQmluZGluZy5nZXRMZW5ndGgoKSA+IDAgJiYgIW9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0XHRvTWVzc2FnZUJ1dHRvbi5zZXRWaXNpYmxlKHRydWUpO1xuXHRcdFx0XHQvLyB3b3JrYXJvdW5kIHRvIGVuc3VyZSB0aGF0IG9NZXNzYWdlQnV0dG9uIGlzIHJlbmRlcmVkIHdoZW4gb3BlbkJ5IGlzIGNhbGxlZFxuXHRcdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIub3BlbkJ5KG9NZXNzYWdlQnV0dG9uKTtcblx0XHRcdFx0fSwgMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvUmV0O1xuXHR9XG5cblx0X2VkaXREb2N1bWVudChvQ29udGV4dDogYW55KSB7XG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJ1aVwiKTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5lZGl0RG9jdW1lbnQuYXBwbHkodGhpcy5lZGl0RmxvdywgW29Db250ZXh0XSkuZmluYWxseShmdW5jdGlvbiAoKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvbnRleHQgb2YgdGhlIERyYWZ0Um9vdCBwYXRoLlxuXHQgKiBJZiBhIHZpZXcgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBkcmFmdCBSb290IFBhdGgsIHRoaXMgbWV0aG9kIHJldHVybnMgaXRzIGJpbmRpbmdDb250ZXh0LlxuXHQgKiBXaGVyZSBubyB2aWV3IGlzIGZvdW5kIGEgbmV3IGNyZWF0ZWQgY29udGV4dCBpcyByZXR1cm5lZC5cblx0ICogVGhlIG5ldyBjcmVhdGVkIGNvbnRleHQgcmVxdWVzdCB0aGUga2V5IG9mIHRoZSBlbnRpdHkgaW4gb3JkZXIgdG8gZ2V0IHRoZSBFdGFnIG9mIHRoaXMgZW50aXR5LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgZ2V0RHJhZnRSb290UGF0aFxuXHQgKiBAcmV0dXJucyBSZXR1cm5zIGEgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgZ2V0RHJhZnRSb290Q29udGV4dCgpOiBQcm9taXNlPENvbnRleHQgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgY29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChjb250ZXh0KSB7XG5cdFx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0UGF0aCA9IE1vZGVsSGVscGVyLmdldERyYWZ0Um9vdFBhdGgoY29udGV4dCk7XG5cdFx0XHRsZXQgc2ltcGxlRHJhZnRSb290Q29udGV4dDogQ29udGV4dDtcblx0XHRcdGlmIChkcmFmdFJvb3RDb250ZXh0UGF0aCkge1xuXHRcdFx0XHQvLyBDaGVjayBpZiBhIHZpZXcgbWF0Y2hlcyB3aXRoIHRoZSBkcmFmdCByb290IHBhdGhcblx0XHRcdFx0Y29uc3QgZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZSA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KClcblx0XHRcdFx0XHQuZ2V0Um9vdFZpZXdDb250cm9sbGVyKClcblx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdC5maW5kKChwYWdlVmlldzogVmlldykgPT4gcGFnZVZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpID09PSBkcmFmdFJvb3RDb250ZXh0UGF0aClcblx0XHRcdFx0XHQ/LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRcdFx0aWYgKGV4aXN0aW5nQmluZGluZ0NvbnRleHRPblBhZ2UpIHtcblx0XHRcdFx0XHRyZXR1cm4gZXhpc3RpbmdCaW5kaW5nQ29udGV4dE9uUGFnZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0c2ltcGxlRHJhZnRSb290Q29udGV4dCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoXCIvc2ltcGxlRHJhZnRSb290Q29udGV4dFwiKTtcblx0XHRcdFx0aWYgKHNpbXBsZURyYWZ0Um9vdENvbnRleHQ/LmdldFBhdGgoKSA9PT0gZHJhZnRSb290Q29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRyZXR1cm4gc2ltcGxlRHJhZnRSb290Q29udGV4dDtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKTtcblx0XHRcdFx0c2ltcGxlRHJhZnRSb290Q29udGV4dCA9IG1vZGVsLmJpbmRDb250ZXh0KGRyYWZ0Um9vdENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdFx0YXdhaXQgQ29tbW9uVXRpbHMud2FpdEZvckNvbnRleHRSZXF1ZXN0ZWQoc2ltcGxlRHJhZnRSb290Q29udGV4dCk7XG5cdFx0XHRcdC8vIFN0b3JlIHRoaXMgbmV3IGNyZWF0ZWQgY29udGV4dCB0byB1c2UgaXQgb24gdGhlIG5leHQgaXRlcmF0aW9uc1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFwiL3NpbXBsZURyYWZ0Um9vdENvbnRleHRcIiwgc2ltcGxlRHJhZnRSb290Q29udGV4dCk7XG5cdFx0XHRcdHJldHVybiBzaW1wbGVEcmFmdFJvb3RDb250ZXh0O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGFzeW5jIF92YWxpZGF0ZURvY3VtZW50KCk6IFByb21pc2U8dm9pZCB8IGFueVtdIHwgT0RhdGFDb250ZXh0QmluZGluZz4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgY29udHJvbCA9IENvcmUuYnlJZChDb3JlLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCkpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0aWYgKGNvbnRleHQgJiYgIWNvbnRleHQuaXNUcmFuc2llbnQoKSkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdFx0Y29uc3QgZW50aXR5VHlwZSA9IHNpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQoY29udGV4dCk7XG5cdFx0XHRjb25zdCBnbG9iYWxTaWRlRWZmZWN0cyA9IGVudGl0eVR5cGUgPyBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0R2xvYmFsT0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhlbnRpdHlUeXBlKSA6IFtdO1xuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGdsb2JhbCBTaWRlRWZmZWN0cyBmb3IgdGhlIHJlbGF0ZWQgZW50aXR5LCBleGVjdXRlIGl0L3RoZW1cblx0XHRcdGlmIChnbG9iYWxTaWRlRWZmZWN0cy5sZW5ndGgpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoZ2xvYmFsU2lkZUVmZmVjdHMubWFwKChzaWRlRWZmZWN0cykgPT4gdGhpcy5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzLCBjb250ZXh0KSkpO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgZHJhZnRSb290Q29udGV4dCA9IGF3YWl0IHRoaXMuZ2V0RHJhZnRSb290Q29udGV4dCgpO1xuXHRcdFx0Ly9FeGVjdXRlIHRoZSBkcmFmdFZhbGlkYXRpb24gaWYgdGhlcmUgaXMgbm8gZ2xvYmFsU2lkZUVmZmVjdHMgKGlnbm9yZSBFVGFncyBpbiBjb2xsYWJvcmF0aW9uIGRyYWZ0KVxuXHRcdFx0aWYgKGRyYWZ0Um9vdENvbnRleHQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0XHRyZXR1cm4gZHJhZnQuZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbihkcmFmdFJvb3RDb250ZXh0LCBhcHBDb21wb25lbnQsIGlzQ29ubmVjdGVkKHRoaXMuZ2V0VmlldygpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRhc3luYyBfc2F2ZURvY3VtZW50KG9Db250ZXh0OiBhbnkpIHtcblx0XHRjb25zdCBvTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInVpXCIpLFxuXHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHM6IGFueVtdID0gW107XG5cdFx0Ly8gaW5kaWNhdGVzIGlmIHdlIGFyZSBjcmVhdGluZyBhIG5ldyByb3cgaW4gdGhlIE9QXG5cdFx0bGV0IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gZmFsc2U7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0dGhpcy5fZmluZFRhYmxlcygpLmZvckVhY2goKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpO1xuXHRcdFx0Y29uc3QgbVBhcmFtZXRlcnM6IGFueSA9IHtcblx0XHRcdFx0Y3JlYXRpb25Nb2RlOiBvVGFibGUuZGF0YShcImNyZWF0aW9uTW9kZVwiKSxcblx0XHRcdFx0Y3JlYXRpb25Sb3c6IG9UYWJsZS5nZXRDcmVhdGlvblJvdygpLFxuXHRcdFx0XHRjcmVhdGVBdEVuZDogb1RhYmxlLmRhdGEoXCJjcmVhdGVBdEVuZFwiKSA9PT0gXCJ0cnVlXCJcblx0XHRcdH07XG5cdFx0XHRjb25zdCBiQ3JlYXRlRG9jdW1lbnQgPVxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdyAmJlxuXHRcdFx0XHRtUGFyYW1ldGVycy5jcmVhdGlvblJvdy5nZXRCaW5kaW5nQ29udGV4dCgpICYmXG5cdFx0XHRcdE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0T2JqZWN0KCkpLmxlbmd0aCA+IDE7XG5cdFx0XHRpZiAoYkNyZWF0ZURvY3VtZW50KSB7XG5cdFx0XHRcdC8vIHRoZSBiU2tpcFNpZGVFZmZlY3RzIGlzIGEgcGFyYW1ldGVyIGNyZWF0ZWQgd2hlbiB3ZSBjbGljayB0aGUgc2F2ZSBrZXkuIElmIHdlIHByZXNzIHRoaXMga2V5XG5cdFx0XHRcdC8vIHdlIGRvbid0IGV4ZWN1dGUgdGhlIGhhbmRsZVNpZGVFZmZlY3RzIGZ1bmNpdG9uIHRvIGF2b2lkIGJhdGNoIHJlZHVuZGFuY3lcblx0XHRcdFx0bVBhcmFtZXRlcnMuYlNraXBTaWRlRWZmZWN0cyA9IHRydWU7XG5cdFx0XHRcdGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yID0gdHJ1ZTtcblx0XHRcdFx0YVdhaXRDcmVhdGVEb2N1bWVudHMucHVzaChcblx0XHRcdFx0XHR0aGlzLmVkaXRGbG93LmNyZWF0ZURvY3VtZW50KG9CaW5kaW5nLCBtUGFyYW1ldGVycykudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0JpbmRpbmc7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBhQmluZGluZ3MgPSBhd2FpdCBQcm9taXNlLmFsbChhV2FpdENyZWF0ZURvY3VtZW50cyk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVycyA9IHtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3I6IGJFeGVjdXRlU2lkZUVmZmVjdHNPbkVycm9yLFxuXHRcdFx0XHRiaW5kaW5nczogYUJpbmRpbmdzXG5cdFx0XHR9O1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBlaXRoZXIgcmVqZWN0IG9yIHJlc29sdmUgYSBwcm9taXNlIGhlcmUgYW5kIHJldHVybiBpdCBzaW5jZSB0aGlzIHNhdmVcblx0XHRcdC8vIGZ1bmN0aW9uIGlzIG5vdCBvbmx5IGNhbGxlZCB3aGVuIHByZXNzaW5nIHRoZSBzYXZlIGJ1dHRvbiBpbiB0aGUgZm9vdGVyLCBidXQgYWxzb1xuXHRcdFx0Ly8gd2hlbiB0aGUgdXNlciBzZWxlY3RzIGNyZWF0ZSBvciBzYXZlIGluIGEgZGF0YWxvc3MgcG9wdXAuXG5cdFx0XHQvLyBUaGUgbG9naWMgb2YgdGhlIGRhdGFsb3NzIHBvcHVwIG5lZWRzIHRvIGRldGVjdCBpZiB0aGUgc2F2ZSBoYWQgZXJyb3JzIG9yIG5vdCBpbiBvcmRlclxuXHRcdFx0Ly8gdG8gZGVjaWRlIGlmIHRoZSBzdWJzZXF1ZW50IGFjdGlvbiAtIGxpa2UgYSBiYWNrIG5hdmlnYXRpb24gLSBoYXMgdG8gYmUgZXhlY3V0ZWQgb3Igbm90LlxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zYXZlRG9jdW1lbnQob0NvbnRleHQsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdFx0Ly8gSWYgdGhlIHNhdmVEb2N1bWVudCBpbiBlZGl0RmxvdyByZXR1cm5zIGVycm9ycyB3ZSBuZWVkXG5cdFx0XHRcdC8vIHRvIHNob3cgdGhlIG1lc3NhZ2UgcG9wb3ZlciBoZXJlIGFuZCBlbnN1cmUgdGhhdCB0aGVcblx0XHRcdFx0Ly8gZGF0YWxvc3MgbG9naWMgZG9lcyBub3QgcGVyZm9ybSB0aGUgZm9sbG93IHVwIGZ1bmN0aW9uXG5cdFx0XHRcdC8vIGxpa2UgZS5nLiBhIGJhY2sgbmF2aWdhdGlvbiBoZW5jZSB3ZSByZXR1cm4gYSBwcm9taXNlIGFuZCByZWplY3QgaXRcblx0XHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VQb3BvdmVyKGVycm9yKTtcblx0XHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9Nb2RlbCkpIHtcblx0XHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRfbWFuYWdlQ29sbGFib3JhdGlvbigpIHtcblx0XHRvcGVuTWFuYWdlRGlhbG9nKHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzKGV2ZW50OiBhbnkpIHtcblx0XHRzaG93VXNlckRldGFpbHMoZXZlbnQsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdF9jYW5jZWxEb2N1bWVudChvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0bVBhcmFtZXRlcnMuY2FuY2VsQnV0dG9uID0gdGhpcy5nZXRWaWV3KCkuYnlJZChtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24pOyAvL3RvIGdldCB0aGUgcmVmZXJlbmNlIG9mIHRoZSBjYW5jZWwgYnV0dG9uIGZyb20gY29tbWFuZCBleGVjdXRpb25cblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHR9XG5cblx0X2FwcGx5RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpKTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgc2hvd1JlbGF0ZWRBcHBzID0gb09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKTtcblx0XHRpZiAoc2hvd1JlbGF0ZWRBcHBzID09PSBcInRydWVcIiB8fCBzaG93UmVsYXRlZEFwcHMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UsIGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBhbnksIGFTdWJzZWN0aW9uOiBhbnksIGFDb250cm9sczogYW55LCBiSXNDaGFydD86IGJvb2xlYW4pIHtcblx0XHRmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IGFQYXJlbnRFbGVtZW50Lmxlbmd0aDsgZWxlbWVudCsrKSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5tQWdncmVnYXRpb25zICYmIG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9JdGVtO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEFsbFN1YlNlY3Rpb25zKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRsZXQgYVN1YlNlY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpIHtcblx0XHRsZXQgYUJsb2NrczogYW55W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFCbG9ja3MgPSBhQmxvY2tzLmNvbmNhdChvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFibGVzO1xuXHR9XG5cblx0X2ZpbmRDaGFydHMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhQ2hhcnRzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCkge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udGVudCA9IG9CbG9jay5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5pc0EgJiYgb0NvbnRlbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYXJ0IENvbnRleHQgaXMgcmVzb2x2ZWQgZm9yIDE6biBtaWNyb2NoYXJ0cy5cblx0ICpcblx0ICogQHBhcmFtIG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogYW55LCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KGFUYWJsZXNbaV0sIHNSb3dQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1lcmdlIHNlbGVjdGVkIGNvbnRleHRzIGFuZCBmaWx0ZXJzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX21lcmdlTXVsdGlwbGVDb250ZXh0c1xuXHQgKiBAcGFyYW0gb1BhZ2VDb250ZXh0IFBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gYUxpbmVDb250ZXh0IFNlbGVjdGVkIENvbnRleHRzXG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIENvbGxlY3Rpb24gbmFtZSBvZiB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgU2VsZWN0aW9uIFZhcmlhbnQgT2JqZWN0XG5cdCAqL1xuXHRfbWVyZ2VNdWx0aXBsZUNvbnRleHRzKG9QYWdlQ29udGV4dDogQ29udGV4dCwgYUxpbmVDb250ZXh0OiBhbnlbXSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9TdWJDaGFydENvbnRleHREYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDEpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZV0gVGhlIHZpc2liaWxpdHkgb2Ygc2VtYXRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZV0gVGhlIEVkaXQgYnV0dG9uIHZpc2liaWxpdHlcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBFZGl0IGJ1dHRvblxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHVua25vd24sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbCxcblx0XHRcdFx0b09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2F2ZURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSBpZiAob09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9hcHBseURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0bGV0IG9UYWJsZTogYW55O1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLnNvbWUoZnVuY3Rpb24gKF9vVGFibGU6IGFueSkge1xuXHRcdFx0XHRpZiAoX29UYWJsZS5nZXRSb3dCaW5kaW5nKCkgPT09IG9Tb3VyY2UpIHtcblx0XHRcdFx0XHRvVGFibGUgPSBfb1RhYmxlO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzZXQgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgZm9yIGZhc3QgY3JlYXRpb24gcm93XG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblxuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdyAmJiAhZmFzdENyZWF0aW9uUm93Ll9vSW5uZXJDcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKTtcblxuXHRcdFx0XHRpZiAoIXRhYmxlQmluZGluZykge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFibGVCaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdFx0Y29uc3QgbW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0dGFibGVCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdHRhYmxlQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRtb2RlbCxcblx0XHRcdFx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIilcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9DdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblxuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uUHJvbWlzZSkge1xuXHRcdFx0XHRsZXQgYVRhYmxlQ29udGV4dHM6IGFueTtcblx0XHRcdFx0aWYgKG9UYWJsZS5nZXRUeXBlKCkuZ2V0TWV0YWRhdGEoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikpIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vaWYgY29udGV4dHMgYXJlIG5vdCBmdWxseSBsb2FkZWQgdGhlIGdldGNvbnRleHRzIGZ1bmN0aW9uIGFib3ZlIHdpbGwgdHJpZ2dlciBhIG5ldyBjaGFuZ2UgZXZlbnQgY2FsbFxuXHRcdFx0XHRpZiAoIWFUYWJsZUNvbnRleHRzWzBdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uUHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKChvQWN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWN0aW9uUmVzcG9uc2UgfHwgb0FjdGlvblJlc3BvbnNlLmNvbnRyb2xJZCAhPT0gb1RhYmxlLnNJZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uRGF0YSA9IG9BY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGFLZXlzID0gb0FjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRsZXQgaU5ld0l0ZW1wID0gLTE7XG5cdFx0XHRcdFx0XHRhVGFibGVDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvVGFibGVDb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFibGVEYXRhID0gb1RhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYkNvbXBhcmUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UYWJsZURhdGFbc0tleV0gPT09IG9BY3Rpb25EYXRhW3NLZXldO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGJDb21wYXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aU5ld0l0ZW1wID0gaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYkNvbXBhcmU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChpTmV3SXRlbXAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEaWFsb2dzID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0XHRcdGFEaWFsb2dzLmxlbmd0aCA+IDAgPyBhRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZSBiZWZvcmUgdG8gZm9jdXMgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2Vycn1gKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbnZva2VzIGFuIGFjdGlvbiAtIGJvdW5kL3VuYm91bmQgYW5kIHNldHMgdGhlIHBhZ2UgZGlydHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHByb21pc2Vcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNhbGxBY3Rpb24ob1ZpZXc6IGFueSwgc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlciwgdW5kZWZpbmVkKSlcblx0XHRcdFx0LmNhdGNoKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlcikpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQob0NvbnRyb2xsZXI6IGFueSwgb1NvdXJjZTogYW55LCBvTWFuaWZlc3RPdXRib3VuZDogYW55LCBzQ29udHJvbENvbmZpZzogYW55LCBzQ29sbGVjdGlvblBhdGg6IGFueSkge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCk7XG5cdFx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IGFueSwgc0NyZWF0ZVBhdGg6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgJiZcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMjAwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gZ2V0UmVzb3VyY2VNb2RlbChvQ29udHJvbGxlcikuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2Nyb2xsVG9TZWN0aW9uKG9TdWJTZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGlhcHAgc3RhdGUgY2hhbmdlXG5cdFx0XHRcdG9PYmplY3RQYWdlLmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdFx0c2VjdGlvbjogb1NlY3Rpb24sXG5cdFx0XHRcdFx0c3ViU2VjdGlvbjogb1N1YlNlY3Rpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG9uU3RhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdGNsb3NlT1BNZXNzYWdlU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS5oaWRlTWVzc2FnZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUNvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUE2RE1BLG9CQUFvQixXQUR6QkMsY0FBYyxDQUFDLGtEQUFrRCxDQUFDLFVBSWpFQyxjQUFjLENBQUNDLFdBQVcsQ0FBQyxVQUczQkQsY0FBYyxDQUFDRSxLQUFLLENBQUNDLFFBQVEsQ0FBQ0MsY0FBYyxDQUFDLENBQUMsVUFHOUNKLGNBQWMsQ0FBQ0ssZUFBZSxDQUFDRixRQUFRLENBQUNHLHVCQUF1QixDQUFDLENBQUMsVUFHakVOLGNBQWMsQ0FBQ08sU0FBUyxDQUFDSixRQUFRLENBQUNLLGlCQUFpQixDQUFDLENBQUMsVUFHckRSLGNBQWMsQ0FBQ1MsY0FBYyxDQUFDTixRQUFRLENBQUNPLHNCQUFzQixDQUFDLENBQUMsVUFHL0RWLGNBQWMsQ0FBQ1cscUJBQXFCLENBQUNSLFFBQVEsQ0FBQ1MsNkJBQTZCLENBQUMsQ0FBQyxVQUc3RVosY0FBYyxDQUNkYSw2QkFBNkIsQ0FBQ1YsUUFBUSxDQUFDO0lBQ3RDVyxpQkFBaUIsRUFBRSxZQUErQztNQUNqRSxNQUFNQyxpQkFBaUIsR0FDckIsSUFBSSxDQUFDQyxPQUFPLEVBQUUsQ0FBQ0MsYUFBYSxFQUFFLENBQTBCQyxpQkFBaUIsSUFDekUsSUFBSSxDQUFDRixPQUFPLEVBQUUsQ0FBQ0MsYUFBYSxFQUFFLENBQTBCQyxpQkFBaUIsRUFBRTtNQUM3RSxPQUFPSCxpQkFBaUIsR0FBRyxTQUFTLEdBQUdJLFNBQVM7SUFDakQ7RUFDRCxDQUFDLENBQUMsQ0FD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QyxDQUFDO2tCQUMzQkEsV0FBVyxDQUFDRixlQUFlLENBQUMsR0FBR0osYUFBYSxDQUFDRyxhQUFhLENBQUM7a0JBQzNESCxhQUFhLEdBQUdDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRUQsYUFBYSxFQUFFTSxXQUFXLENBQUM7a0JBQ3JELE9BQU9OLGFBQWEsQ0FBQ0csYUFBYSxDQUFDO2dCQUNwQztjQUNEO1lBQ0Q7VUFDRDtVQUVBLElBQUlILGFBQWEsRUFBRTtZQUNsQixLQUFLLE1BQU14ZSxJQUFJLElBQUl3ZSxhQUFhLEVBQUU7Y0FDakMsSUFBSXhlLElBQUksQ0FBQ3VVLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUl2VSxJQUFJLENBQUN1VSxPQUFPLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BFaFMsT0FBTyxDQUFDdkMsSUFBSSxDQUFDLEdBQUd3ZSxhQUFhLENBQUN4ZSxJQUFJLENBQUM7Y0FDcEM7WUFDRDtVQUNEO1VBQ0E7VUFDQTBkLGNBQWMsQ0FDWnFCLHFCQUFxQixDQUFDLENBQ3RCO1lBQ0N6SyxNQUFNLEVBQUU7Y0FDUDNSLGNBQWMsRUFBRTBiLFVBQVUsQ0FBQzFiLGNBQWM7Y0FDekNDLE1BQU0sRUFBRXliLFVBQVUsQ0FBQ3piO1lBQ3BCLENBQUM7WUFDRG9jLE1BQU0sRUFBRXpjO1VBQ1QsQ0FBQyxDQUNELENBQUMsQ0FDRHZELElBQUksQ0FBRWlnQixNQUFNLElBQUs7WUFDakIsT0FBT25CLG1CQUFtQixDQUFDM2UsR0FBRyxFQUFFOGYsTUFBTSxDQUFDO1VBQ3hDLENBQUMsQ0FBQyxDQUNEdGUsS0FBSyxDQUFDa2QsU0FBUyxDQUFDO1FBQ25CO01BQ0Q7SUFDRCxDQUFDO0lBQUE7RUFBQSxFQTF3Q2lDdlYsY0FBYztJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7SUFBQTtJQUFBO0lBQUE7SUFBQTtFQUFBO0lBQUE7SUFBQTtJQUFBO0lBQUE7RUFBQTtJQUFBO0lBQUE7SUFBQTtJQUFBO0VBQUE7RUFBQSxPQStoRGxDL08sb0JBQW9CO0FBQUEifQ==
|
|
1469
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQcm9ncmFtbWluZ01vZGVsIiwiRkVMaWJyYXJ5IiwiT2JqZWN0UGFnZUNvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiUGxhY2Vob2xkZXIiLCJTaGFyZSIsIm92ZXJyaWRlIiwiU2hhcmVPdmVycmlkZXMiLCJJbnRlcm5hbFJvdXRpbmciLCJJbnRlcm5hbFJvdXRpbmdPdmVycmlkZSIsIlBhZ2luYXRvciIsIlBhZ2luYXRvck92ZXJyaWRlIiwiTWVzc2FnZUhhbmRsZXIiLCJNZXNzYWdlSGFuZGxlck92ZXJyaWRlIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb25Nb2RlIiwiYklzU3RpY2t5RWRpdE1vZGUiLCJnZXRWaWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFN0aWNreUVkaXRNb2RlIiwidW5kZWZpbmVkIiwiVmlld1N0YXRlIiwiVmlld1N0YXRlT3ZlcnJpZGVzIiwiUGFnZVJlYWR5IiwiaXNDb250ZXh0RXhwZWN0ZWQiLCJNYXNzRWRpdCIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uUHJpbWFyeUFjdGlvbiIsIm9Db250cm9sbGVyIiwib1ZpZXciLCJvQ29udGV4dCIsInNBY3Rpb25OYW1lIiwibVBhcmFtZXRlcnMiLCJtQ29uZGl0aW9ucyIsImlWaWV3TGV2ZWwiLCJnZXRWaWV3RGF0YSIsInZpZXdMZXZlbCIsIm9PYmplY3RQYWdlIiwiX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sIiwicG9zaXRpdmVBY3Rpb25WaXNpYmxlIiwicG9zaXRpdmVBY3Rpb25FbmFibGVkIiwib25DYWxsQWN0aW9uIiwiZWRpdEFjdGlvblZpc2libGUiLCJlZGl0QWN0aW9uRW5hYmxlZCIsIl9lZGl0RG9jdW1lbnQiLCJnZXRNb2RlbCIsImdldFByb3BlcnR5IiwiX3NhdmVEb2N1bWVudCIsIl9hcHBseURvY3VtZW50Iiwib25UYWJsZUNvbnRleHRDaGFuZ2UiLCJvRXZlbnQiLCJvU291cmNlIiwiZ2V0U291cmNlIiwib1RhYmxlIiwiX2ZpbmRUYWJsZXMiLCJzb21lIiwiX29UYWJsZSIsImdldFJvd0JpbmRpbmciLCJmYXN0Q3JlYXRpb25Sb3ciLCJnZXRDcmVhdGlvblJvdyIsIl9vSW5uZXJDcmVhdGlvblJvdyIsImdldEJpbmRpbmdDb250ZXh0IiwidGFibGVCaW5kaW5nIiwiX2dldFRhYmxlQmluZGluZyIsIkxvZyIsImVycm9yIiwiZ2V0SWQiLCJnZXRDb250ZXh0Iiwib2JqZWN0UGFnZSIsImJpbmRpbmdDb250ZXh0IiwibW9kZWwiLCJUYWJsZUhlbHBlciIsImVuYWJsZUZhc3RDcmVhdGlvblJvdyIsImdldFBhdGgiLCJvQ3VycmVudEFjdGlvblByb21pc2UiLCJlZGl0RmxvdyIsImdldEN1cnJlbnRBY3Rpb25Qcm9taXNlIiwiYVRhYmxlQ29udGV4dHMiLCJnZXRUeXBlIiwiZ2V0TWV0YWRhdGEiLCJpc0EiLCJnZXRDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsInRoZW4iLCJvQWN0aW9uUmVzcG9uc2UiLCJjb250cm9sSWQiLCJzSWQiLCJvQWN0aW9uRGF0YSIsIm9EYXRhIiwiYUtleXMiLCJrZXlzIiwiaU5ld0l0ZW1wIiwiZmluZCIsIm9UYWJsZUNvbnRleHQiLCJpIiwib1RhYmxlRGF0YSIsImdldE9iamVjdCIsImJDb21wYXJlIiwiZXZlcnkiLCJzS2V5IiwiYURpYWxvZ3MiLCJJbnN0YW5jZU1hbmFnZXIiLCJnZXRPcGVuRGlhbG9ncyIsIm9EaWFsb2ciLCJsZW5ndGgiLCJkaWFsb2ciLCJkYXRhIiwiYXR0YWNoRXZlbnRPbmNlIiwiZm9jdXNSb3ciLCJkZWxldGVDdXJyZW50QWN0aW9uUHJvbWlzZSIsImNhdGNoIiwiZXJyIiwibWVzc2FnZUJ1dHRvbiIsImZpcmVNb2RlbENvbnRleHRDaGFuZ2UiLCJpbnZva2VBY3Rpb24iLCJfc2hvd01lc3NhZ2VQb3BvdmVyIiwiYmluZCIsIm9uRGF0YVBvaW50VGl0bGVQcmVzc2VkIiwib01hbmlmZXN0T3V0Ym91bmQiLCJzQ29udHJvbENvbmZpZyIsInNDb2xsZWN0aW9uUGF0aCIsIkpTT04iLCJwYXJzZSIsIm9UYXJnZXRJbmZvIiwiYVNlbWFudGljT2JqZWN0TWFwcGluZyIsIkNvbW1vblV0aWxzIiwiZ2V0U2VtYW50aWNPYmplY3RNYXBwaW5nIiwib0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dCIsInNNZXRhUGF0aCIsImdldE1ldGFNb2RlbCIsImdldE1ldGFQYXRoIiwiYU5hdmlnYXRpb25EYXRhIiwiX2dldENoYXJ0Q29udGV4dERhdGEiLCJhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMiLCJtYXAiLCJvTmF2aWdhdGlvbkRhdGEiLCJtZXRhUGF0aCIsInBhcmFtZXRlcnMiLCJvUGFyYW1zIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE91dGJvdW5kUGFyYW1zIiwiT2JqZWN0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0ZSIsIm5hdmlnYXRpb25Db250ZXh0cyIsInNlbWFudGljT2JqZWN0TWFwcGluZyIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib25OYXZpZ2F0ZUNoYW5nZSIsImdldEV4dGVuc2lvbkFQSSIsInVwZGF0ZUFwcFN0YXRlIiwiYlNlY3Rpb25OYXZpZ2F0ZWQiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZWN0aW9uTGF5b3V0Iiwib1N1YlNlY3Rpb24iLCJnZXRQYXJhbWV0ZXIiLCJfdXBkYXRlRm9jdXNJbkVkaXRNb2RlIiwib25WYXJpYW50U2VsZWN0ZWQiLCJvblZhcmlhbnRTYXZlZCIsInNldFRpbWVvdXQiLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInZEZXRhaWxDb25maWciLCJvRGV0YWlsQ29uZmlnIiwiYnlJZCIsIm9TZWN0aW9uIiwic2VjdGlvbklkIiwic3ViU2VjdGlvbklkIiwiZ2V0U3ViU2VjdGlvbnMiLCJnZXRQYXJlbnQiLCJnZXRWaXNpYmxlIiwic1RpdGxlIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImdldFRleHQiLCJlbnRpdHlTZXQiLCJNZXNzYWdlQm94Iiwic2Nyb2xsVG9TZWN0aW9uIiwiZmlyZU5hdmlnYXRlIiwic2VjdGlvbiIsInN1YlNlY3Rpb24iLCJvblN0YXRlQ2hhbmdlIiwiY2xvc2VPUE1lc3NhZ2VTdHJpcCIsImhpZGVNZXNzYWdlIiwibUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzIiwiRXh0ZW5zaW9uQVBJIiwiZXh0ZW5zaW9uQVBJIiwib25Jbml0Iiwic2V0UHJvcGVydHkiLCJwYWdlIiwidmlzaWJpbGl0eSIsIml0ZW1zIiwiX2dldEJhdGNoR3JvdXBzRm9yVmlldyIsImdldEVuYWJsZUxhenlMb2FkaW5nIiwiYXR0YWNoRXZlbnQiLCJfaGFuZGxlU3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydCIsIm9JdGVtQmluZGluZyIsImF0dGFjaENoYW5nZSIsIl9mblNob3dPUE1lc3NhZ2UiLCJvbkV4aXQiLCJkZXN0cm95Iiwib01lc3NhZ2VQb3BvdmVyIiwiaXNPcGVuIiwiY2xvc2UiLCJpc0tlZXBBbGl2ZSIsInNldEtlZXBBbGl2ZSIsImlzQ29ubmVjdGVkIiwiZGlzY29ubmVjdCIsInZpZXciLCJtZXNzYWdlcyIsImdldEl0ZW1zIiwiaXRlbSIsImZpbHRlciIsIm1lc3NhZ2UiLCJnZXRUYXJnZXRzIiwic2hvd01lc3NhZ2VzIiwiY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZSIsInN1YlNlY3Rpb25zIiwiY2hhbmdlQ2xhc3NGb3JUYWJsZXMiLCJldmVudCIsImxhc3RWaXNpYmxlU3ViU2VjdGlvbiIsImJsb2NrcyIsImdldEJsb2NrcyIsImdldE1vcmVCbG9ja3MiLCJ0YWJsZVR5cGUiLCJzZWFyY2hUYWJsZUluQmxvY2siLCJhZGRTdHlsZUNsYXNzIiwiZGV0YWNoRXZlbnQiLCJzdWJTZWN0aW9uSW5kZXgiLCJibG9jayIsImNvbnRyb2wiLCJjb250ZW50IiwidGFibGVBUEkiLCJvbkJlZm9yZVJlbmRlcmluZyIsIlBhZ2VDb250cm9sbGVyIiwicHJvdG90eXBlIiwiYXBwbHkiLCJvVmlld0RhdGEiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiQ29tbW9uSGVscGVyIiwic2V0TWV0YU1vZGVsIiwiZ2V0QXBwQ29tcG9uZW50Iiwib25BZnRlclJlbmRlcmluZyIsImdldFVzZUljb25UYWJCYXIiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiX2dldEFsbFN1YlNlY3Rpb25zIiwiX29uQmVmb3JlQmluZGluZyIsImFUYWJsZXMiLCJvSW50ZXJuYWxNb2RlbCIsImFCYXRjaEdyb3VwcyIsIm9GYXN0Q3JlYXRpb25Sb3ciLCJwdXNoIiwiYkRyYWZ0TmF2aWdhdGlvbiIsIl9jbG9zZVNpZGVDb250ZW50Iiwib3BDb250ZXh0IiwiaGFzUGVuZGluZ0NoYW5nZXMiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwic2V0QmluZGluZ0NvbnRleHQiLCJmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24iLCJpc0ZpcnN0UmVuZGVyaW5nIiwiYlBlcnNpc3RPUFNjcm9sbCIsInNldFNlbGVjdGVkU2VjdGlvbiIsIm9EZWxlZ2F0ZU9uQmVmb3JlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsInBhZ2VSZWFkeSIsInJlbW92ZUV2ZW50RGVsZWdhdGUiLCJvQmluZGluZyIsImxpc3RCaW5kaW5nIiwib1BhZ2luYXRvckN1cnJlbnRDb250ZXh0Iiwib0JpbmRpbmdUb1VzZSIsInBhZ2luYXRvciIsImluaXRpYWxpemUiLCJzQmluZGluZ1BhdGgiLCJ0ZXN0Iiwic0xpc3RCaW5kaW5nUGF0aCIsInJlcGxhY2UiLCJPRGF0YUxpc3RCaW5kaW5nIiwib01vZGVsIiwiX3NldExpc3RCaW5kaW5nQXN5bmMiLCJhU2VjdGlvbnMiLCJiVXNlSWNvblRhYkJhciIsImlTa2lwIiwiYklzSW5FZGl0TW9kZSIsImJFZGl0YWJsZUhlYWRlciIsImVkaXRhYmxlSGVhZGVyQ29udGVudCIsImlTZWN0aW9uIiwiYVN1YlNlY3Rpb25zIiwiaVN1YlNlY3Rpb24iLCJpc1Zpc2liaWxpdHlEeW5hbWljIiwicGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsInNob3dQbGFjZWhvbGRlciIsIm9OYXZDb250YWluZXIiLCJvQ29udGFpbmVyIiwiX2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudCIsIm9GaXJzdENsaWNrYWJsZUVsZW1lbnQiLCJhQWN0aW9ucyIsImdldEhlYWRlclRpdGxlIiwiZ2V0QWN0aW9ucyIsIm9BY3Rpb24iLCJnZXRFbmFibGVkIiwiX2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uIiwiYUJsb2NrcyIsImFGb3JtQ29udGFpbmVycyIsImdldEZvcm1Db250YWluZXJzIiwiZ2V0Q29udGVudCIsImZvcm1Db250YWluZXIiLCJhRm9ybUVsZW1lbnRzIiwiZ2V0Rm9ybUVsZW1lbnRzIiwiZm9ybUVsZW1lbnQiLCJhRmllbGRzIiwiZ2V0RmllbGRzIiwiZ2V0UmVxdWlyZWQiLCJnZXRWYWx1ZSIsImRlYnVnIiwib01hbmRhdG9yeUZpZWxkIiwib0ZpZWxkVG9Gb2N1cyIsImdldENvbnRlbnRFZGl0IiwiX2dldEZpcnN0RWRpdGFibGVJbnB1dCIsImZvY3VzIiwiX29uQmFja05hdmlnYXRpb25JbkRyYWZ0IiwibWVzc2FnZUhhbmRsZXIiLCJyZW1vdmVUcmFuc2l0aW9uTWVzc2FnZXMiLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrSGFzU2FtZUNvbnRleHQiLCJoaXN0b3J5IiwiYmFjayIsImRyYWZ0IiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJGdW5jdGlvbiIsIk5hdmlnYXRpb25UeXBlIiwiQmFja05hdmlnYXRpb24iLCJfb25BZnRlckJpbmRpbmciLCJpbnB1dEJpbmRpbmdDb250ZXh0IiwiY3VycmVudENvbnRleHQiLCJfc2lkZUVmZmVjdHMiLCJjbGVhckZpZWxkR3JvdXBzVmFsaWRpdHkiLCJhSUJOQWN0aW9ucyIsImZvckVhY2giLCJnZXRJQk5BY3Rpb25zIiwib1RhYmxlUm93QmluZGluZyIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwicmVtb3ZlQ2FjaGVzQW5kTWVzc2FnZXMiLCJvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwIiwicGFyc2VDdXN0b21EYXRhIiwiRGVsZWdhdGVVdGlsIiwiZ2V0Q3VzdG9tRGF0YSIsIkFjdGlvblJ1bnRpbWUiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwiY2xlYXJTZWxlY3Rpb24iLCJnZXRTZW1hbnRpY1RhcmdldHNGcm9tUGFnZU1vZGVsIiwib09iamVjdFBhZ2VUaXRsZSIsImFJQk5IZWFkZXJBY3Rpb25zIiwiY29uY2F0IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJvRmluYWxVSVN0YXRlIiwiaGFuZGxlVGFibGVNb2RpZmljYXRpb25zIiwiZm5IYW5kbGVUYWJsZVBhdGNoRXZlbnRzIiwiZm5IYW5kbGVDaGFuZ2UiLCJkZXRhY2hDaGFuZ2UiLCJjb21wdXRlRWRpdE1vZGUiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsImNvbm5lY3QiLCJvRXJyb3IiLCJfdXBkYXRlUmVsYXRlZEFwcHMiLCJjdXJyZW50QmluZGluZyIsImhhbmRsZVBhdGNoU2VudCIsIlRhYmxlVXRpbHMiLCJ3aGVuQm91bmQiLCJfdHJpZ2dlclZpc2libGVTdWJTZWN0aW9uc0V2ZW50cyIsInVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCIsImRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZSIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwiZW50aXR5TmFtZSIsInJlc291cmNlQnVuZGxlIiwiQ29yZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImNvbGxhYm9yYXRpb25NZXNzYWdlIiwiZ2V0TWVzc2FnZU1hbmFnZXIiLCJyZW1vdmVNZXNzYWdlcyIsIk1lc3NhZ2UiLCJ0eXBlIiwidGFyZ2V0Iiwic2FwIiwidWkiLCJnZXRDb3JlIiwiYWRkTWVzc2FnZXMiLCJvblBhZ2VSZWFkeSIsInNldEZvY3VzIiwiaXNJbkRpc3BsYXlNb2RlIiwib1NlbGVjdGVkU2VjdGlvbiIsImdldFNlbGVjdGVkU2VjdGlvbiIsImN0eHQiLCJvQmluZGluZ0NvbnRleHQiLCJiSXNTdGlja3lNb2RlIiwib0FwcENvbXBvbmVudCIsImdldFNoZWxsU2VydmljZXMiLCJzZXRCYWNrTmF2aWdhdGlvbiIsInZpZXdJZCIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJmb3JjZUZvY3VzIiwiRXJyb3IiLCJfY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbiIsIl9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbiIsIm9PYmplY3RQYWdlU3VidGl0bGUiLCJvQ3VzdG9tRGF0YSIsImdldEtleSIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiX2V4ZWN1dGVIZWFkZXJTaG9ydGN1dCIsInNCdXR0b25JZCIsIm9CdXR0b24iLCJvRWxlbWVudCIsImZpcmVCdXR0b25QcmVzcyIsIl9leGVjdXRlRm9vdGVyU2hvcnRjdXQiLCJnZXRGb290ZXIiLCJnZXROYW1lIiwiX2V4ZWN1dGVUYWJTaG9ydEN1dCIsIm9FeGVjdXRpb24iLCJpU2VjdGlvbkluZGV4TWF4Iiwic0NvbW1hbmQiLCJnZXRDb21tYW5kIiwibmV3U2VjdGlvbiIsImlTZWxlY3RlZFNlY3Rpb25JbmRleCIsImluZGV4T2ZTZWN0aW9uIiwiX2dldEZvb3RlclZpc2liaWxpdHkiLCJzVmlld0lkIiwiZ2V0TWVzc2FnZU1vZGVsIiwiZ2V0RGF0YSIsIm9NZXNzYWdlIiwidmFsaWRhdGlvbiIsImluZGV4T2YiLCJvUmV0Iiwicm9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiY3VycmVudFBhZ2VWaWV3IiwiaXNGY2xFbmFibGVkIiwiZ2V0UmlnaHRtb3N0VmlldyIsImdldFJvb3RDb250YWluZXIiLCJnZXRDdXJyZW50UGFnZSIsIm9NZXNzYWdlQnV0dG9uIiwiZ2V0TGVuZ3RoIiwic2V0VmlzaWJsZSIsIm9wZW5CeSIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwiZWRpdERvY3VtZW50IiwiZmluYWxseSIsInVubG9jayIsIl92YWxpZGF0ZURvY3VtZW50IiwiZ2V0Q3VycmVudEZvY3VzZWRDb250cm9sSWQiLCJjb250ZXh0IiwiaXNUcmFuc2llbnQiLCJjcmVhdGVkIiwiZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24iLCJieVBhc3NTaWRlRWZmZWN0cyIsImFwcENvbXBvbmVudCIsInNpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQiLCJnbG9iYWxTaWRlRWZmZWN0cyIsImdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMiLCJzeW5jVGFzayIsIlByb21pc2UiLCJhbGwiLCJzaWRlRWZmZWN0cyIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImRyYWZ0Um9vdENvbnRleHQiLCJjcmVhdGVSb290Q29udGV4dCIsIkRyYWZ0IiwiZXhlY3V0ZURyYWZ0VmFsaWRhdGlvbiIsImFXYWl0Q3JlYXRlRG9jdW1lbnRzIiwiYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IiLCJjcmVhdGlvbk1vZGUiLCJjcmVhdGlvblJvdyIsImNyZWF0ZUF0RW5kIiwiYkNyZWF0ZURvY3VtZW50IiwiYlNraXBTaWRlRWZmZWN0cyIsImNyZWF0ZURvY3VtZW50IiwiYUJpbmRpbmdzIiwiYmluZGluZ3MiLCJzYXZlRG9jdW1lbnQiLCJpc0xvY2tlZCIsIl9tYW5hZ2VDb2xsYWJvcmF0aW9uIiwib3Blbk1hbmFnZURpYWxvZyIsIl9zaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzIiwic2hvd1VzZXJEZXRhaWxzIiwiX2NhbmNlbERvY3VtZW50IiwiY2FuY2VsQnV0dG9uIiwiY2FuY2VsRG9jdW1lbnQiLCJhcHBseURvY3VtZW50Iiwic2hvd1JlbGF0ZWRBcHBzIiwidXBkYXRlUmVsYXRlZEFwcHNEZXRhaWxzIiwiX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uIiwiYVBhcmVudEVsZW1lbnQiLCJhU3Vic2VjdGlvbiIsImFDb250cm9scyIsImJJc0NoYXJ0IiwiZWxlbWVudCIsIm1BZ2dyZWdhdGlvbnMiLCJnZXRBZ2dyZWdhdGlvbiIsImFJdGVtcyIsIm9JdGVtIiwiZ2V0TWFpbkNvbnRlbnQiLCJfZ2V0QWxsQmxvY2tzIiwiX2ZpbmRDaGFydHMiLCJhQ2hhcnRzIiwib0Jsb2NrIiwib0NvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJvQ2hhcnRDb250ZXh0Iiwic0NoYXJ0UGF0aCIsIm9Db250ZXh0RGF0YSIsIm9DaGFydENvbnRleHREYXRhIiwiX3Njcm9sbFRhYmxlc1RvUm93Iiwic1Jvd1BhdGgiLCJUYWJsZVNjcm9sbGVyIiwic2Nyb2xsVGFibGVUb1JvdyIsIl9tZXJnZU11bHRpcGxlQ29udGV4dHMiLCJvUGFnZUNvbnRleHQiLCJhTGluZUNvbnRleHQiLCJhQXR0cmlidXRlcyIsImFQYWdlQXR0cmlidXRlcyIsInNNZXRhUGF0aExpbmUiLCJzUGF0aExpbmUiLCJzUGFnZVBhdGgiLCJvTWV0YU1vZGVsIiwic01ldGFQYXRoUGFnZSIsIm9TaW5nbGVDb250ZXh0Iiwib1N1YkNoYXJ0Q29udGV4dERhdGEiLCJjb250ZXh0RGF0YSIsInJlbW92ZVNlbnNpdGl2ZURhdGEiLCJvUGFnZUxldmVsU1YiLCJhZGRQYWdlQ29udGV4dFRvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50IiwiYXR0cmlidXRlcyIsIm9Db25maWd1cmF0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiYUNvbmZpZ3VyYXRpb25zIiwib0NvbmZpZ3VyYXRpb24iLCJyZXF1ZXN0R3JvdXBJZCIsIl9zZXRCcmVhZGNydW1iTGlua3MiLCJhUHJvbWlzZXMiLCJhU2tpcFBhcmFtZXRlcml6ZWQiLCJzTmV3UGF0aCIsImFQYXRoUGFydHMiLCJzcGxpdCIsInNQYXRoIiwic2hpZnQiLCJzcGxpY2UiLCJzUGF0aFBhcnQiLCJvUm9vdFZpZXdDb250cm9sbGVyIiwic1BhcmFtZXRlclBhdGgiLCJiUmVzdWx0Q29udGV4dCIsImdldFRpdGxlSW5mb0Zyb21QYXRoIiwidGl0bGVIaWVyYXJjaHlJbmZvcyIsImlkeCIsImhpZXJhcmNoeVBvc2l0aW9uIiwib0xpbmsiLCJ0aXRsZUhpZXJhcmNoeUluZm8iLCJnZXRMaW5rcyIsIkxpbmsiLCJzZXRUZXh0Iiwic2V0SHJlZiIsImVuY29kZVVSSSIsImFkZExpbmsiLCJvRGF0YVBvaW50cyIsImdldEhlYWRlckZhY2V0SXRlbUNvbmZpZ0ZvckV4dGVybmFsTmF2aWdhdGlvbiIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib1NoZWxsU2VydmljZXMiLCJyZXF1ZXN0T2JqZWN0IiwiZm5HZXRMaW5rcyIsImZuT25FcnJvciIsImZuU2V0TGlua0VuYWJsZW1lbnQiLCJpZCIsImFTdXBwb3J0ZWRMaW5rcyIsInNMaW5rSWQiLCJzdXBwb3J0ZWQiLCJvU3ViRGF0YVBvaW50cyIsIm9QYWdlRGF0YSIsIm9EYXRhUG9pbnQiLCJvTGlua0NvbnRleHQiLCJvTGlua0RhdGEiLCJvTWl4ZWRDb250ZXh0IiwibWVyZ2UiLCJvTWFwcGluZyIsInNNYWluUHJvcGVydHkiLCJzTWFwcGVkUHJvcGVydHkiLCJoYXNPd25Qcm9wZXJ0eSIsIm9OZXdNYXBwaW5nIiwiaXNOYXZpZ2F0aW9uU3VwcG9ydGVkIiwicGFyYW1zIiwiYUxpbmtzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJPYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQWN0aW9uUnVudGltZSBmcm9tIFwic2FwL2ZlL2NvcmUvQWN0aW9uUnVudGltZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IGNvbm5lY3QsIGRpc2Nvbm5lY3QsIGlzQ29ubmVjdGVkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQWN0aXZpdHlTeW5jXCI7XG5pbXBvcnQgeyBvcGVuTWFuYWdlRGlhbG9nLCBzaG93VXNlckRldGFpbHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9NYW5hZ2VcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgTWVzc2FnZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgUGFnZVJlYWR5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QYWdlUmVhZHlcIjtcbmltcG9ydCBQYWdpbmF0b3IgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BhZ2luYXRvclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IFNoYXJlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9TaGFyZVwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXh0ZW5zaWJsZSwgZmluYWxFeHRlbnNpb24sIHB1YmxpY0V4dGVuc2lvbiwgdXNpbmdFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxNb2RlbENvbnRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IEZFTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBWaWV3RGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBTdWJTZWN0aW9uQmxvY2sgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9jb250cm9scy9TdWJTZWN0aW9uQmxvY2tcIjtcbmltcG9ydCB0eXBlIHsgZGVmYXVsdCBhcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgRXh0ZW5zaW9uQVBJIH0gZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBUYWJsZVNjcm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL1RhYmxlU2Nyb2xsZXJcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0JpbmRpbmdcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IE9EYXRhQ29udGV4dEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5pbXBvcnQgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBCcmVhZENydW1icyBmcm9tIFwic2FwL3V4YXAvQnJlYWRDcnVtYnNcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5pbXBvcnQgSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUgZnJvbSBcIi4vb3ZlcnJpZGVzL0ludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuaW1wb3J0IEludGVybmFsUm91dGluZ092ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBNZXNzYWdlSGFuZGxlck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFBhZ2luYXRvck92ZXJyaWRlIGZyb20gXCIuL292ZXJyaWRlcy9QYWdpbmF0b3JcIjtcbmltcG9ydCBTaGFyZU92ZXJyaWRlcyBmcm9tIFwiLi9vdmVycmlkZXMvU2hhcmVcIjtcbmltcG9ydCBWaWV3U3RhdGVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1ZpZXdTdGF0ZVwiO1xuXG5jb25zdCBQcm9ncmFtbWluZ01vZGVsID0gRkVMaWJyYXJ5LlByb2dyYW1taW5nTW9kZWw7XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuT2JqZWN0UGFnZUNvbnRyb2xsZXJcIilcbmNsYXNzIE9iamVjdFBhZ2VDb250cm9sbGVyIGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRvVmlldyE6IGFueTtcblxuXHRAdXNpbmdFeHRlbnNpb24oUGxhY2Vob2xkZXIpXG5cdHBsYWNlaG9sZGVyITogUGxhY2Vob2xkZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oSW50ZXJuYWxSb3V0aW5nLm92ZXJyaWRlKEludGVybmFsUm91dGluZ092ZXJyaWRlKSlcblx0X3JvdXRpbmchOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFBhZ2luYXRvci5vdmVycmlkZShQYWdpbmF0b3JPdmVycmlkZSkpXG5cdHBhZ2luYXRvciE6IFBhZ2luYXRvcjtcblxuXHRAdXNpbmdFeHRlbnNpb24oTWVzc2FnZUhhbmRsZXIub3ZlcnJpZGUoTWVzc2FnZUhhbmRsZXJPdmVycmlkZSkpXG5cdG1lc3NhZ2VIYW5kbGVyITogTWVzc2FnZUhhbmRsZXI7XG5cblx0QHVzaW5nRXh0ZW5zaW9uKEludGVudEJhc2VkTmF2aWdhdGlvbi5vdmVycmlkZShJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSkpXG5cdGludGVudEJhc2VkTmF2aWdhdGlvbiE6IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0TmF2aWdhdGlvbk1vZGU6IGZ1bmN0aW9uICh0aGlzOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0XHRjb25zdCBiSXNTdGlja3lFZGl0TW9kZSA9XG5cdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBPYmplY3RQYWdlQ29udHJvbGxlcikuZ2V0U3RpY2t5RWRpdE1vZGUgJiZcblx0XHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIE9iamVjdFBhZ2VDb250cm9sbGVyKS5nZXRTdGlja3lFZGl0TW9kZSgpO1xuXHRcdFx0XHRyZXR1cm4gYklzU3RpY2t5RWRpdE1vZGUgPyBcImV4cGxhY2VcIiA6IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRAdXNpbmdFeHRlbnNpb24oVmlld1N0YXRlLm92ZXJyaWRlKFZpZXdTdGF0ZU92ZXJyaWRlcykpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0UGFnZVJlYWR5Lm92ZXJyaWRlKHtcblx0XHRcdGlzQ29udGV4dEV4cGVjdGVkOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0cGFnZVJlYWR5ITogUGFnZVJlYWR5O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihNYXNzRWRpdClcblx0bWFzc0VkaXQhOiBNYXNzRWRpdDtcblxuXHRwcml2YXRlIG1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcz86IFJlY29yZDxzdHJpbmcsIE9iamVjdFBhZ2VFeHRlbnNpb25BUEk+O1xuXG5cdHByb3RlY3RlZCBleHRlbnNpb25BUEk/OiBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuXG5cdHByaXZhdGUgYlNlY3Rpb25OYXZpZ2F0ZWQ/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgc3dpdGNoRHJhZnRBbmRBY3RpdmVQb3BPdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIGN1cnJlbnRCaW5kaW5nPzogQmluZGluZztcblxuXHRwcml2YXRlIG1lc3NhZ2VCdXR0b246IGFueTtcblxuXHRwcml2YXRlIGNvbGxhYm9yYXRpb25NZXNzYWdlPzogTWVzc2FnZTtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKHNJZD86IHN0cmluZyk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKHNJZCkge1xuXHRcdFx0Ly8gdG8gYWxsb3cgbG9jYWwgSUQgdXNhZ2UgZm9yIGN1c3RvbSBwYWdlcyB3ZSdsbCBjcmVhdGUvcmV0dXJuIG93biBpbnN0YW5jZXMgZm9yIGN1c3RvbSBzZWN0aW9uc1xuXHRcdFx0dGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMgPSB0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJcyB8fCB7fTtcblxuXHRcdFx0aWYgKCF0aGlzLm1DdXN0b21TZWN0aW9uRXh0ZW5zaW9uQVBJc1tzSWRdKSB7XG5cdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0gPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMsIHNJZCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0XHR0aGlzLmV4dGVuc2lvbkFQSSA9IG5ldyBFeHRlbnNpb25BUEkodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdFx0fVxuXHR9XG5cblx0b25Jbml0KCkge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblxuXHRcdC8vIFNldHRpbmcgZGVmYXVsdHMgb2YgaW50ZXJuYWwgbW9kZWwgY29udGV4dFxuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImV4dGVybmFsTmF2aWdhdGlvbkNvbnRleHRcIiwgeyBwYWdlOiB0cnVlIH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyZWxhdGVkQXBwc1wiLCB7XG5cdFx0XHR2aXNpYmlsaXR5OiBmYWxzZSxcblx0XHRcdGl0ZW1zOiBudWxsXG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImJhdGNoR3JvdXBzXCIsIHRoaXMuX2dldEJhdGNoR3JvdXBzRm9yVmlldygpKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQ/LnNldFByb3BlcnR5KFwiZXJyb3JOYXZpZ2F0aW9uU2VjdGlvbkZsYWdcIiwgZmFsc2UpO1xuXHRcdGlmIChvT2JqZWN0UGFnZS5nZXRFbmFibGVMYXp5TG9hZGluZygpKSB7XG5cdFx0XHQvL0F0dGFjaGluZyB0aGUgZXZlbnQgdG8gbWFrZSB0aGUgc3Vic2VjdGlvbiBjb250ZXh0IGJpbmRpbmcgYWN0aXZlIHdoZW4gaXQgaXMgdmlzaWJsZS5cblx0XHRcdG9PYmplY3RQYWdlLmF0dGFjaEV2ZW50KFwic3ViU2VjdGlvbkVudGVyZWRWaWV3UG9ydFwiLCB0aGlzLl9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0LmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6OkZvb3RlckJhcjo6TWVzc2FnZUJ1dHRvblwiKTtcblx0XHR0aGlzLm1lc3NhZ2VCdXR0b24ub0l0ZW1CaW5kaW5nLmF0dGFjaENoYW5nZSh0aGlzLl9mblNob3dPUE1lc3NhZ2UsIHRoaXMpO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dD8uc2V0UHJvcGVydHkoXCJyb290RWRpdEVuYWJsZWRcIiwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcInJvb3RFZGl0VmlzaWJsZVwiLCB0cnVlKTtcblx0fVxuXG5cdG9uRXhpdCgpIHtcblx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXMpIHtcblx0XHRcdGZvciAoY29uc3Qgc0lkIG9mIE9iamVjdC5rZXlzKHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzKSkge1xuXHRcdFx0XHRpZiAodGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXNbc0lkXSkge1xuXHRcdFx0XHRcdHRoaXMubUN1c3RvbVNlY3Rpb25FeHRlbnNpb25BUElzW3NJZF0uZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWxldGUgdGhpcy5tQ3VzdG9tU2VjdGlvbkV4dGVuc2lvbkFQSXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRkZWxldGUgdGhpcy5leHRlbnNpb25BUEk7XG5cblx0XHRjb25zdCBvTWVzc2FnZVBvcG92ZXIgPSB0aGlzLm1lc3NhZ2VCdXR0b24gPyB0aGlzLm1lc3NhZ2VCdXR0b24ub01lc3NhZ2VQb3BvdmVyIDogbnVsbDtcblx0XHRpZiAob01lc3NhZ2VQb3BvdmVyICYmIG9NZXNzYWdlUG9wb3Zlci5pc09wZW4oKSkge1xuXHRcdFx0b01lc3NhZ2VQb3BvdmVyLmNsb3NlKCk7XG5cdFx0fVxuXHRcdC8vd2hlbiBleGl0aW5nIHdlIHNldCBrZWVwQWxpdmUgY29udGV4dCB0byBmYWxzZVxuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGlmIChvQ29udGV4dCAmJiBvQ29udGV4dC5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRvQ29udGV4dC5zZXRLZWVwQWxpdmUoZmFsc2UpO1xuXHRcdH1cblx0XHRpZiAoaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRkaXNjb25uZWN0KHRoaXMuZ2V0VmlldygpKTsgLy8gQ2xlYW51cCBjb2xsYWJvcmF0aW9uIGNvbm5lY3Rpb24gd2hlbiBsZWF2aW5nIHRoZSBhcHBcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHNob3cgdGhlIG1lc3NhZ2Ugc3RyaXAgb24gdGhlIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X2ZuU2hvd09QTWVzc2FnZSgpIHtcblx0XHRjb25zdCBleHRlbnNpb25BUEkgPSB0aGlzLmdldEV4dGVuc2lvbkFQSSgpO1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBtZXNzYWdlcyA9IHRoaXMubWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXJcblx0XHRcdC5nZXRJdGVtcygpXG5cdFx0XHQubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uZ2V0QmluZGluZ0NvbnRleHQoXCJtZXNzYWdlXCIpLmdldE9iamVjdCgpKVxuXHRcdFx0LmZpbHRlcigobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzc2FnZS5nZXRUYXJnZXRzKClbMF0gPT09IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdFx0fSk7XG5cblx0XHRpZiAoZXh0ZW5zaW9uQVBJKSB7XG5cdFx0XHRleHRlbnNpb25BUEkuc2hvd01lc3NhZ2VzKG1lc3NhZ2VzKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0VGFibGVCaW5kaW5nKG9UYWJsZTogYW55KSB7XG5cdFx0cmV0dXJuIG9UYWJsZSAmJiBvVGFibGUuZ2V0Um93QmluZGluZygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgdGhlIGxhc3QgdmlzaWJsZSBzdWJzZWN0aW9uIGFuZCBhZGQgdGhlIHNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lciBDU1MgY2xhc3MgaWYgaXQgY29udGFpbnMgb25seSBhIEdyaWRUYWJsZSBvciBhIFRyZWVUYWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHN1YlNlY3Rpb25zIFRoZSBzdWIgc2VjdGlvbnMgdG8gbG9vayBmb3Jcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9uczogT2JqZWN0UGFnZVN1YlNlY3Rpb25bXSkge1xuXHRcdGNvbnN0IGNoYW5nZUNsYXNzRm9yVGFibGVzID0gKGV2ZW50OiBFdmVudCwgbGFzdFZpc2libGVTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbikgPT4ge1xuXHRcdFx0Y29uc3QgYmxvY2tzID0gWy4uLmxhc3RWaXNpYmxlU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSwgLi4ubGFzdFZpc2libGVTdWJTZWN0aW9uLmdldE1vcmVCbG9ja3MoKV07XG5cdFx0XHRjb25zdCB0YWJsZVR5cGUgPSBibG9ja3MubGVuZ3RoID09PSAxICYmIHRoaXMuc2VhcmNoVGFibGVJbkJsb2NrKGJsb2Nrc1swXSBhcyBTdWJTZWN0aW9uQmxvY2spPy5nZXRUeXBlKCk7XG5cdFx0XHRpZiAodGFibGVUeXBlICYmICh0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuR3JpZFRhYmxlVHlwZVwiKSB8fCB0YWJsZVR5cGU/LmlzQShcInNhcC51aS5tZGMudGFibGUuVHJlZVRhYmxlVHlwZVwiKSkpIHtcblx0XHRcdFx0Ly9JbiBjYXNlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgdGFibGUgaW4gYSBzdWJTZWN0aW9uIHdlIGZpdCB0aGF0IHRvIHRoZSB3aG9sZSBwYWdlIHNvIHRoYXQgdGhlIHNjcm9sbGJhciBjb21lcyBvbmx5IG9uIHRhYmxlIGFuZCBub3Qgb24gcGFnZVxuXHRcdFx0XHRsYXN0VmlzaWJsZVN1YlNlY3Rpb24uYWRkU3R5bGVDbGFzcyhcInNhcFV4QVBPYmplY3RQYWdlU3ViU2VjdGlvbkZpdENvbnRhaW5lclwiKTtcblx0XHRcdFx0bGFzdFZpc2libGVTdWJTZWN0aW9uLmRldGFjaEV2ZW50KFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb25JbmRleCA9IHN1YlNlY3Rpb25zLmxlbmd0aCAtIDE7IHN1YlNlY3Rpb25JbmRleCA+PSAwOyBzdWJTZWN0aW9uSW5kZXgtLSkge1xuXHRcdFx0aWYgKHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF0uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdGNvbnN0IGxhc3RWaXNpYmxlU3ViU2VjdGlvbiA9IHN1YlNlY3Rpb25zW3N1YlNlY3Rpb25JbmRleF07XG5cdFx0XHRcdC8vIFdlIG5lZWQgdG8gYXR0YWNoIHRoaXMgZXZlbnQgaW4gb3JkZXIgdG8gbWFuYWdlIHRoZSBPYmplY3QgUGFnZSBMYXp5IExvYWRpbmcgbWVjaGFuaXNtXG5cdFx0XHRcdGxhc3RWaXNpYmxlU3ViU2VjdGlvbi5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCBsYXN0VmlzaWJsZVN1YlNlY3Rpb24sIGNoYW5nZUNsYXNzRm9yVGFibGVzLCB0aGlzKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZpbmQgYSB0YWJsZSBpbiBibG9ja3Mgb2Ygc2VjdGlvbi5cblx0ICpcblx0ICogQHBhcmFtIGJsb2NrIE9uZSBzdWIgc2VjdGlvbiBibG9ja1xuXHQgKiBAcmV0dXJucyBUYWJsZSBpZiBleGlzdHNcblx0ICovXG5cdHByaXZhdGUgc2VhcmNoVGFibGVJbkJsb2NrKGJsb2NrOiBTdWJTZWN0aW9uQmxvY2spIHtcblx0XHRjb25zdCBjb250cm9sID0gYmxvY2suY29udGVudDtcblx0XHRsZXQgdGFibGVBUEk6IFRhYmxlQVBJIHwgdW5kZWZpbmVkO1xuXHRcdGlmIChibG9jay5pc0EoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuY29udHJvbHMuU3ViU2VjdGlvbkJsb2NrXCIpKSB7XG5cdFx0XHQvLyBUaGUgdGFibGUgbWF5IGN1cnJlbnRseSBiZSBzaG93biBpbiBhIGZ1bGwgc2NyZWVuIGRpYWxvZywgd2UgY2FuIHRoZW4gZ2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIFRhYmxlQVBJXG5cdFx0XHQvLyBjb250cm9sIGZyb20gdGhlIGN1c3RvbSBkYXRhIG9mIHRoZSBwbGFjZSBob2xkZXIgcGFuZWxcblx0XHRcdGlmIChjb250cm9sLmlzQShcInNhcC5tLlBhbmVsXCIpICYmIGNvbnRyb2wuZGF0YShcIkZ1bGxTY3JlZW5UYWJsZVBsYWNlSG9sZGVyXCIpKSB7XG5cdFx0XHRcdHRhYmxlQVBJID0gY29udHJvbC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBKFwic2FwLmZlLm1hY3Jvcy50YWJsZS5UYWJsZUFQSVwiKSkge1xuXHRcdFx0XHR0YWJsZUFQSSA9IGNvbnRyb2wgYXMgVGFibGVBUEk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGFibGVBUEkpIHtcblx0XHRcdFx0cmV0dXJuIHRhYmxlQVBJLmNvbnRlbnQgYXMgVGFibGU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0b25CZWZvcmVSZW5kZXJpbmcoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uQmVmb3JlUmVuZGVyaW5nLmFwcGx5KHRoaXMpO1xuXHRcdC8vIEluIHRoZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IHNjZW5hcmlvIHdlIG5lZWQgdG8gZW5zdXJlIGluIGNhc2Ugb2YgcmVsb2FkL3JlZnJlc2ggdGhhdCB0aGUgbWV0YSBtb2RlbCBpbiB0aGUgbWV0aG9kZSByZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IG9mIHRoZSBGaWVsZFJ1bnRpbWUgaXMgYXZhaWxhYmxlXG5cdFx0aWYgKHRoaXMub1ZpZXcub1ZpZXdEYXRhPy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0ICYmIENvbW1vbkhlbHBlci5nZXRNZXRhTW9kZWwoKSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRDb21tb25IZWxwZXIuc2V0TWV0YU1vZGVsKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0bGV0IHN1YlNlY3Rpb25zOiBPYmplY3RQYWdlU3ViU2VjdGlvbltdO1xuXHRcdGlmICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFVzZUljb25UYWJCYXIoKSkge1xuXHRcdFx0Y29uc3Qgc2VjdGlvbnMgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldFNlY3Rpb25zKCk7XG5cdFx0XHRmb3IgKGNvbnN0IHNlY3Rpb24gb2Ygc2VjdGlvbnMpIHtcblx0XHRcdFx0c3ViU2VjdGlvbnMgPSBzZWN0aW9uLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRcdHRoaXMuY2hlY2tTZWN0aW9uc0Zvck5vblJlc3BvbnNpdmVUYWJsZShzdWJTZWN0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0X29uQmVmb3JlQmluZGluZyhvQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gVE9ETzogd2Ugc2hvdWxkIGNoZWNrIGhvdyB0aGlzIGNvbWVzIHRvZ2V0aGVyIHdpdGggdGhlIHRyYW5zYWN0aW9uIGhlbHBlciwgc2FtZSB0byB0aGUgY2hhbmdlIGluIHRoZSBhZnRlckJpbmRpbmdcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpLFxuXHRcdFx0b09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCxcblx0XHRcdG9JbnRlcm5hbE1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwsXG5cdFx0XHRhQmF0Y2hHcm91cHMgPSBvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJiYXRjaEdyb3Vwc1wiKSxcblx0XHRcdGlWaWV3TGV2ZWwgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbDtcblx0XHRsZXQgb0Zhc3RDcmVhdGlvblJvdztcblx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvXCIpO1xuXHRcdGlmIChtUGFyYW1ldGVycy5iRHJhZnROYXZpZ2F0aW9uICE9PSB0cnVlKSB7XG5cdFx0XHR0aGlzLl9jbG9zZVNpZGVDb250ZW50KCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9wQ29udGV4dCA9IG9PYmplY3RQYWdlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoXG5cdFx0XHRvcENvbnRleHQgJiZcblx0XHRcdG9wQ29udGV4dC5oYXNQZW5kaW5nQ2hhbmdlcygpICYmXG5cdFx0XHQhYUJhdGNoR3JvdXBzLnNvbWUob3BDb250ZXh0LmdldE1vZGVsKCkuaGFzUGVuZGluZ0NoYW5nZXMuYmluZChvcENvbnRleHQuZ2V0TW9kZWwoKSkpXG5cdFx0KSB7XG5cdFx0XHQvKiBcdEluIGNhc2UgdGhlcmUgYXJlIHBlbmRpbmcgY2hhbmdlcyBmb3IgdGhlIGNyZWF0aW9uIHJvdyBhbmQgbm8gb3RoZXJzIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNoYW5nZXNcblx0XHRcdFx0XHRcdFx0XHRUT0RPOiB0aGlzIGlzIGp1c3QgYSBxdWljayBzb2x1dGlvbiwgdGhpcyBuZWVkcyB0byBiZSByZXdvcmtlZFxuXHRcdFx0XHRcdFx0XHRcdCovXG5cblx0XHRcdG9wQ29udGV4dC5nZXRCaW5kaW5nKCkucmVzZXRDaGFuZ2VzKCk7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIG5vdyB3ZSBoYXZlIHRvIHNldCB0aGUgYmluZGluZyBjb250ZXh0IHRvIG51bGwgZm9yIGV2ZXJ5IGZhc3QgY3JlYXRpb24gcm93XG5cdFx0Ly8gVE9ETzogR2V0IHJpZCBvZiB0aGlzIGNvZGluZyBvciBtb3ZlIGl0IHRvIGFub3RoZXIgbGF5ZXIgLSB0byBiZSBkaXNjdXNzZWQgd2l0aCBNREMgYW5kIG1vZGVsXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhVGFibGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvRmFzdENyZWF0aW9uUm93ID0gYVRhYmxlc1tpXS5nZXRDcmVhdGlvblJvdygpO1xuXHRcdFx0aWYgKG9GYXN0Q3JlYXRpb25Sb3cpIHtcblx0XHRcdFx0b0Zhc3RDcmVhdGlvblJvdy5zZXRCaW5kaW5nQ29udGV4dChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uIHNvIHRoYXQgYmluZGluZ3MgYXJlIGVuYWJsZWQgZHVyaW5nIG5hdmlnYXRpb24gdGhyb3VnaCBwYWdpbmF0b3IgYnV0dG9ucywgYXMgdGhlcmUgaXMgbm8gdmlldyByZXJlbmRlcmluZy9yZWJpbmRcblx0XHRjb25zdCBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoIShvT2JqZWN0UGFnZSBhcyBhbnkpLmlzRmlyc3RSZW5kZXJpbmcoKSAmJiAhbVBhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbCkge1xuXHRcdFx0XHRvT2JqZWN0UGFnZS5zZXRTZWxlY3RlZFNlY3Rpb24obnVsbCBhcyBhbnkpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b09iamVjdFBhZ2UuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZuU2Nyb2xsVG9QcmVzZW50U2VjdGlvbik7XG5cblx0XHQvLyBpZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBPYmplY3RQYWdlTGF5b3V0IGlzIGNoYW5nZWQgdGhlbiBzY3JvbGwgdG8gcHJlc2VudCBTZWN0aW9uXG5cdFx0Ly8gRklYTUUgSXMgdGhpcyByZWFsbHkgd29ya2luZyBhcyBpbnRlbmRlZCA/IEluaXRpYWxseSB0aGlzIHdhcyBvbkJlZm9yZVJlbmRlcmluZywgYnV0IG5ldmVyIHRyaWdnZXJlZCBvbkJlZm9yZVJlbmRlcmluZyBiZWNhdXNlIGl0IHdhcyByZWdpc3RlcmVkIGFmdGVyIGl0XG5cdFx0Y29uc3Qgb0RlbGVnYXRlT25CZWZvcmUgPSB7XG5cdFx0XHRvbkFmdGVyUmVuZGVyaW5nOiBmblNjcm9sbFRvUHJlc2VudFNlY3Rpb25cblx0XHR9O1xuXHRcdG9PYmplY3RQYWdlLmFkZEV2ZW50RGVsZWdhdGUob0RlbGVnYXRlT25CZWZvcmUsIHRoaXMpO1xuXHRcdHRoaXMucGFnZVJlYWR5LmF0dGFjaEV2ZW50T25jZShcInBhZ2VSZWFkeVwiLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRvT2JqZWN0UGFnZS5yZW1vdmVFdmVudERlbGVnYXRlKG9EZWxlZ2F0ZU9uQmVmb3JlKTtcblx0XHR9KTtcblxuXHRcdC8vU2V0IHRoZSBCaW5kaW5nIGZvciBQYWdpbmF0b3JzIHVzaW5nIExpc3RCaW5kaW5nIElEXG5cdFx0aWYgKGlWaWV3TGV2ZWwgPiAxKSB7XG5cdFx0XHRsZXQgb0JpbmRpbmcgPSBtUGFyYW1ldGVycyAmJiBtUGFyYW1ldGVycy5saXN0QmluZGluZztcblx0XHRcdGNvbnN0IG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCA9IG9JbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2luYXRvckN1cnJlbnRDb250ZXh0XCIpO1xuXHRcdFx0aWYgKG9QYWdpbmF0b3JDdXJyZW50Q29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvQmluZGluZ1RvVXNlID0gb1BhZ2luYXRvckN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZ1RvVXNlLCBvUGFnaW5hdG9yQ3VycmVudENvbnRleHQpO1xuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcIi9wYWdpbmF0b3JDdXJyZW50Q29udGV4dFwiLCBudWxsKTtcblx0XHRcdH0gZWxzZSBpZiAob0JpbmRpbmcpIHtcblx0XHRcdFx0aWYgKG9CaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIHRoZSBiaW5kaW5nIHR5cGUgaXMgbm90IE9EYXRhTGlzdEJpbmRpbmcgYmVjYXVzZSBvZiBhIGRlZXBsaW5rIG5hdmlnYXRpb24gb3IgYSByZWZyZXNoIG9mIHRoZSBwYWdlXG5cdFx0XHRcdFx0Ly8gd2UgbmVlZCB0byBjcmVhdGUgaXRcblx0XHRcdFx0XHRjb25zdCBzQmluZGluZ1BhdGggPSBvQmluZGluZy5nZXRQYXRoKCk7XG5cdFx0XHRcdFx0aWYgKC9cXChbXildKlxcKSQvLnRlc3Qoc0JpbmRpbmdQYXRoKSkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgYmluZGluZyBwYXRoIGVuZHMgd2l0aCAoeHh4KSwgc28gd2UgY3JlYXRlIHRoZSBsaXN0QmluZGluZyBieSByZW1vdmluZyAoeHh4KVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0xpc3RCaW5kaW5nUGF0aCA9IHNCaW5kaW5nUGF0aC5yZXBsYWNlKC9cXChbXildKlxcKSQvLCBcIlwiKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nID0gbmV3IChPRGF0YUxpc3RCaW5kaW5nIGFzIGFueSkob0JpbmRpbmcub01vZGVsLCBzTGlzdEJpbmRpbmdQYXRoKTtcblx0XHRcdFx0XHRcdGNvbnN0IF9zZXRMaXN0QmluZGluZ0FzeW5jID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAob0JpbmRpbmcuZ2V0Q29udGV4dHMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5wYWdpbmF0b3IuaW5pdGlhbGl6ZShvQmluZGluZywgb0NvbnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaEV2ZW50KFwiY2hhbmdlXCIsIF9zZXRMaXN0QmluZGluZ0FzeW5jKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0b0JpbmRpbmcuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdFx0XHRvQmluZGluZy5hdHRhY2hFdmVudChcImNoYW5nZVwiLCBfc2V0TGlzdEJpbmRpbmdBc3luYyk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRoZSBjdXJyZW50IGJpbmRpbmcgZG9lc24ndCBlbmQgd2l0aCAoeHh4KSAtLT4gdGhlIGxhc3Qgc2VnbWVudCBpcyBhIDEtMSBuYXZpZ2F0aW9uLCBzbyB3ZSBkb24ndCBkaXNwbGF5IHRoZSBwYWdpbmF0b3Jcblx0XHRcdFx0XHRcdHRoaXMucGFnaW5hdG9yLmluaXRpYWxpemUodW5kZWZpbmVkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAob09iamVjdFBhZ2UuZ2V0RW5hYmxlTGF6eUxvYWRpbmcoKSkge1xuXHRcdFx0Y29uc3QgYVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKTtcblx0XHRcdGNvbnN0IGJVc2VJY29uVGFiQmFyID0gb09iamVjdFBhZ2UuZ2V0VXNlSWNvblRhYkJhcigpO1xuXHRcdFx0bGV0IGlTa2lwID0gMjtcblx0XHRcdGNvbnN0IGJJc0luRWRpdE1vZGUgPSBvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIik7XG5cdFx0XHRjb25zdCBiRWRpdGFibGVIZWFkZXIgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVkaXRhYmxlSGVhZGVyQ29udGVudDtcblx0XHRcdGZvciAobGV0IGlTZWN0aW9uID0gMDsgaVNlY3Rpb24gPCBhU2VjdGlvbnMubGVuZ3RoOyBpU2VjdGlvbisrKSB7XG5cdFx0XHRcdGNvbnN0IG9TZWN0aW9uID0gYVNlY3Rpb25zW2lTZWN0aW9uXTtcblx0XHRcdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChsZXQgaVN1YlNlY3Rpb24gPSAwOyBpU3ViU2VjdGlvbiA8IGFTdWJTZWN0aW9ucy5sZW5ndGg7IGlTdWJTZWN0aW9uKyssIGlTa2lwLS0pIHtcblx0XHRcdFx0XHQvLyBJbiBJY29uVGFiQmFyIG1vZGUga2VlcCB0aGUgc2Vjb25kIHNlY3Rpb24gYm91bmQgaWYgdGhlcmUgaXMgYW4gZWRpdGFibGUgaGVhZGVyIGFuZCB3ZSBhcmUgc3dpdGNoaW5nIHRvIGRpc3BsYXkgbW9kZVxuXHRcdFx0XHRcdGlmIChpU2tpcCA8IDEgfHwgKGJVc2VJY29uVGFiQmFyICYmIChpU2VjdGlvbiA+IDEgfHwgKGlTZWN0aW9uID09PSAxICYmICFiRWRpdGFibGVIZWFkZXIgJiYgIWJJc0luRWRpdE1vZGUpKSkpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9TdWJTZWN0aW9uID0gYVN1YlNlY3Rpb25zW2lTdWJTZWN0aW9uXTtcblx0XHRcdFx0XHRcdGlmIChvU3ViU2VjdGlvbi5kYXRhKCkuaXNWaXNpYmlsaXR5RHluYW1pYyAhPT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0XHRcdFx0b1N1YlNlY3Rpb24uc2V0QmluZGluZ0NvbnRleHQobnVsbCBhcyBhbnkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyLmlzUGxhY2Vob2xkZXJFbmFibGVkKCkgJiYgbVBhcmFtZXRlcnMuc2hvd1BsYWNlaG9sZGVyKSB7XG5cdFx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpO1xuXHRcdFx0Y29uc3Qgb05hdkNvbnRhaW5lciA9IChvVmlldy5nZXRQYXJlbnQoKSBhcyBhbnkpLm9Db250YWluZXIuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAob05hdkNvbnRhaW5lcikge1xuXHRcdFx0XHRvTmF2Q29udGFpbmVyLnNob3dQbGFjZWhvbGRlcih7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEZpcnN0Q2xpY2thYmxlRWxlbWVudChvT2JqZWN0UGFnZTogYW55KSB7XG5cdFx0bGV0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQ7XG5cdFx0Y29uc3QgYUFjdGlvbnMgPSBvT2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpICYmIG9PYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkuZ2V0QWN0aW9ucygpO1xuXHRcdGlmIChhQWN0aW9ucyAmJiBhQWN0aW9ucy5sZW5ndGgpIHtcblx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSBhQWN0aW9ucy5maW5kKGZ1bmN0aW9uIChvQWN0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gRHVlIHRvIHRoZSBsZWZ0IGFsaWdubWVudCBvZiB0aGUgRHJhZnQgc3dpdGNoIGFuZCB0aGUgY29sbGFib3JhdGl2ZSBkcmFmdCBhdmF0YXIgY29udHJvbHNcblx0XHRcdFx0Ly8gdGhlcmUgaXMgYSBUb29sYmFyU3BhY2VyIGluIHRoZSBhY3Rpb25zIGFnZ3JlZ2F0aW9uIHdoaWNoIHdlIG5lZWQgdG8gZXhjbHVkZSBoZXJlIVxuXHRcdFx0XHQvLyBEdWUgdG8gdGhlIEFDQyByZXBvcnQsIHdlIGFsc28gbmVlZCBub3QgdG8gY2hlY2sgZm9yIHRoZSBJbnZpc2libGVUZXh0IGVsZW1lbnRzXG5cdFx0XHRcdGlmIChvQWN0aW9uLmlzQShcInNhcC5mZS5tYWNyb3Muc2hhcmUuU2hhcmVBUElcIikpIHtcblx0XHRcdFx0XHQvLyBzaW5jZSBTaGFyZUFQSSBkb2VzIG5vdCBoYXZlIGEgZGlzYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHRcdC8vIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgZGlzYmFsZWQgb3Igbm90XG5cdFx0XHRcdFx0cmV0dXJuIG9BY3Rpb24uZ2V0VmlzaWJsZSgpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKCFvQWN0aW9uLmlzQShcInNhcC51aS5jb3JlLkludmlzaWJsZVRleHRcIikgJiYgIW9BY3Rpb24uaXNBKFwic2FwLm0uVG9vbGJhclNwYWNlclwiKSkge1xuXHRcdFx0XHRcdHJldHVybiBvQWN0aW9uLmdldFZpc2libGUoKSAmJiBvQWN0aW9uLmdldEVuYWJsZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvRmlyc3RDbGlja2FibGVFbGVtZW50O1xuXHR9XG5cblx0X2dldEZpcnN0RW1wdHlNYW5kYXRvcnlGaWVsZEZyb21TdWJTZWN0aW9uKGFTdWJTZWN0aW9uczogYW55KSB7XG5cdFx0aWYgKGFTdWJTZWN0aW9ucykge1xuXHRcdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdFx0Y29uc3QgYUJsb2NrcyA9IGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKTtcblxuXHRcdFx0XHRpZiAoYUJsb2Nrcykge1xuXHRcdFx0XHRcdGZvciAobGV0IGJsb2NrID0gMDsgYmxvY2sgPCBhQmxvY2tzLmxlbmd0aDsgYmxvY2srKykge1xuXHRcdFx0XHRcdFx0bGV0IGFGb3JtQ29udGFpbmVycztcblxuXHRcdFx0XHRcdFx0aWYgKGFCbG9ja3NbYmxvY2tdLmlzQShcInNhcC51aS5sYXlvdXQuZm9ybS5Gb3JtXCIpKSB7XG5cdFx0XHRcdFx0XHRcdGFGb3JtQ29udGFpbmVycyA9IGFCbG9ja3NbYmxvY2tdLmdldEZvcm1Db250YWluZXJzKCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50ICYmXG5cdFx0XHRcdFx0XHRcdGFCbG9ja3NbYmxvY2tdLmdldENvbnRlbnQoKSAmJlxuXHRcdFx0XHRcdFx0XHRhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuaXNBKFwic2FwLnVpLmxheW91dC5mb3JtLkZvcm1cIilcblx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRhRm9ybUNvbnRhaW5lcnMgPSBhQmxvY2tzW2Jsb2NrXS5nZXRDb250ZW50KCkuZ2V0Rm9ybUNvbnRhaW5lcnMoKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGFGb3JtQ29udGFpbmVycykge1xuXHRcdFx0XHRcdFx0XHRmb3IgKGxldCBmb3JtQ29udGFpbmVyID0gMDsgZm9ybUNvbnRhaW5lciA8IGFGb3JtQ29udGFpbmVycy5sZW5ndGg7IGZvcm1Db250YWluZXIrKykge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGFGb3JtRWxlbWVudHMgPSBhRm9ybUNvbnRhaW5lcnNbZm9ybUNvbnRhaW5lcl0uZ2V0Rm9ybUVsZW1lbnRzKCk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFGb3JtRWxlbWVudHMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvciAobGV0IGZvcm1FbGVtZW50ID0gMDsgZm9ybUVsZW1lbnQgPCBhRm9ybUVsZW1lbnRzLmxlbmd0aDsgZm9ybUVsZW1lbnQrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBhRmllbGRzID0gYUZvcm1FbGVtZW50c1tmb3JtRWxlbWVudF0uZ2V0RmllbGRzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGZpcnN0IGZpZWxkIGlzIG5vdCBuZWNlc3NhcmlseSBhbiBJbnB1dEJhc2UgKGUuZy4gY291bGQgYmUgYSBUZXh0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTbyB3ZSBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgaXQgaGFzIGEgZ2V0UmVxdWlyZWQgbWV0aG9kXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGFGaWVsZHNbMF0uZ2V0UmVxdWlyZWQgJiYgYUZpZWxkc1swXS5nZXRSZXF1aXJlZCgpICYmICFhRmllbGRzWzBdLmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBhRmllbGRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRMb2cuZGVidWcoYEVycm9yIHdoZW4gc2VhcmNoaW5nIGZvciBtYW5kYW90cnkgZW1wdHkgZmllbGQ6ICR7ZXJyb3J9YCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdF91cGRhdGVGb2N1c0luRWRpdE1vZGUoYVN1YlNlY3Rpb25zOiBhbnkpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cblx0XHRjb25zdCBvTWFuZGF0b3J5RmllbGQgPSB0aGlzLl9nZXRGaXJzdEVtcHR5TWFuZGF0b3J5RmllbGRGcm9tU3ViU2VjdGlvbihhU3ViU2VjdGlvbnMpO1xuXHRcdGxldCBvRmllbGRUb0ZvY3VzOiBhbnk7XG5cdFx0aWYgKG9NYW5kYXRvcnlGaWVsZCkge1xuXHRcdFx0b0ZpZWxkVG9Gb2N1cyA9IG9NYW5kYXRvcnlGaWVsZC5jb250ZW50LmdldENvbnRlbnRFZGl0KClbMF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9GaWVsZFRvRm9jdXMgPSAob09iamVjdFBhZ2UgYXMgYW55KS5fZ2V0Rmlyc3RFZGl0YWJsZUlucHV0KCkgfHwgdGhpcy5fZ2V0Rmlyc3RDbGlja2FibGVFbGVtZW50KG9PYmplY3RQYWdlKTtcblx0XHR9XG5cblx0XHRpZiAob0ZpZWxkVG9Gb2N1cykge1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdC8vIFdlIHNldCB0aGUgZm9jdXMgaW4gYSB0aW1lZW91dCwgb3RoZXJ3aXNlIHRoZSBmb2N1cyBzb21ldGltZXMgZ29lcyB0byB0aGUgVGFiQmFyXG5cdFx0XHRcdG9GaWVsZFRvRm9jdXMuZm9jdXMoKTtcblx0XHRcdH0sIDApO1xuXHRcdH1cblx0fVxuXG5cdF9oYW5kbGVTdWJTZWN0aW9uRW50ZXJlZFZpZXdQb3J0KG9FdmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1N1YlNlY3Rpb24gPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwic3ViU2VjdGlvblwiKTtcblx0XHRvU3ViU2VjdGlvbi5zZXRCaW5kaW5nQ29udGV4dCh1bmRlZmluZWQpO1xuXHR9XG5cblx0X29uQmFja05hdmlnYXRpb25JbkRyYWZ0KG9Db250ZXh0OiBhbnkpIHtcblx0XHR0aGlzLm1lc3NhZ2VIYW5kbGVyLnJlbW92ZVRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdGlmICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tIYXNTYW1lQ29udGV4dCgpKSB7XG5cdFx0XHQvLyBCYWNrIG5hdiB3aWxsIGtlZXAgdGhlIHNhbWUgY29udGV4dCAtLT4gbm8gbmVlZCB0byBkaXNwbGF5IHRoZSBkaWFsb2dcblx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkcmFmdC5wcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbihcblx0XHRcdFx0ZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdGhpc3RvcnkuYmFjaygpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRGdW5jdGlvbi5wcm90b3R5cGUsXG5cdFx0XHRcdG9Db250ZXh0LFxuXHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0ZHJhZnQuTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRfb25BZnRlckJpbmRpbmcoaW5wdXRCaW5kaW5nQ29udGV4dDogYW55LCBtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Y29uc3Qgdmlld0xldmVsID0gKHRoaXMuZ2V0VmlldygpPy5nZXRWaWV3RGF0YSgpIGFzIFZpZXdEYXRhKT8udmlld0xldmVsO1xuXHRcdC8vIHdlIGFyZSBjbGVhcmluZyBhbnkgcHJldmlvdXMgZGF0YSBmcm9tIHJlY29tbWVuZGF0aW9ucyBldmVyeSB0aW1lIHdlIGNvbWUgdG8gbmV3IE9QXG5cdFx0Ly8gc28gdGhhdCBjYWNoZWQgcmVjb21tZW5kYXRpb25zIGFyZSBub3Qgc2hvd24gdG8gdXNlclxuXHRcdGlmICh2aWV3TGV2ZWwgJiYgdmlld0xldmVsID09PSAxKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50Q29udGV4dCA9IHRoaXMuZ2V0VmlldygpPy5nZXRNb2RlbChcImludGVybmFsXCIpPy5nZXRQcm9wZXJ0eShcIi9jdXJyZW50Q3R4dFwiKTtcblx0XHRcdGlmIChjdXJyZW50Q29udGV4dCAmJiBjdXJyZW50Q29udGV4dC5nZXRQYXRoKCkgIT09IGlucHV0QmluZGluZ0NvbnRleHQ/LmdldFBhdGgoKSkge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCk/LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsKT8uc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiLCB7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBhVGFibGVzID0gdGhpcy5fZmluZFRhYmxlcygpO1xuXG5cdFx0dGhpcy5fc2lkZUVmZmVjdHMuY2xlYXJGaWVsZEdyb3Vwc1ZhbGlkaXR5KCk7XG5cblx0XHQvLyBUT0RPOiB0aGlzIGlzIG9ubHkgYSB0ZW1wIHNvbHV0aW9uIGFzIGxvbmcgYXMgdGhlIG1vZGVsIGZpeCB0aGUgY2FjaGUgaXNzdWUgYW5kIHdlIHVzZSB0aGlzIGFkZGl0aW9uYWxcblx0XHQvLyBiaW5kaW5nIHdpdGggb3duUmVxdWVzdFxuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb09iamVjdFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXG5cdFx0bGV0IGFJQk5BY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0b1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKS5mb3JFYWNoKGZ1bmN0aW9uIChvU3ViU2VjdGlvbjogYW55KSB7XG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvU3ViU2VjdGlvbiwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHQvLyBBc3NpZ24gaW50ZXJuYWwgYmluZGluZyBjb250ZXh0cyB0byBvRm9ybUNvbnRhaW5lcjpcblx0XHQvLyAxLiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXNzaWduIHRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgdG8gdGhlIFhNTCBmcmFnbWVudFxuXHRcdC8vIChGb3JtQ29udGFpbmVyLmZyYWdtZW50LnhtbCkgeWV0IC0gaXQgaXMgdXNlZCBhbHJlYWR5IGZvciB0aGUgZGF0YS1zdHJ1Y3R1cmUuXG5cdFx0Ly8gMi4gQW5vdGhlciBwcm9ibGVtIGlzLCB0aGF0IEZvcm1Db250YWluZXJzIGFzc2lnbmVkIHRvIGEgJ01vcmVCbG9jaycgZG9lcyBub3QgaGF2ZSBhblxuXHRcdC8vIGludGVybmFsIG1vZGVsIGNvbnRleHQgYXQgYWxsLlxuXG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1RhYmxlLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93RmllbGRWYWxpZGl0eVwiLCB7fSk7XG5cdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNyZWF0aW9uUm93Q3VzdG9tVmFsaWRpdHlcIiwge30pO1xuXG5cdFx0XHRcdGFJQk5BY3Rpb25zID0gQ29tbW9uVXRpbHMuZ2V0SUJOQWN0aW9ucyhvVGFibGUsIGFJQk5BY3Rpb25zKTtcblxuXHRcdFx0XHQvLyB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQkNQOiAyMDgwMjE4MDA0XG5cdFx0XHRcdC8vIE5lZWQgdG8gZml4IHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0xNTI3NFxuXHRcdFx0XHQvLyBvbmx5IGZvciBlZGl0IG1vZGUsIHdlIGNsZWFyIHRoZSB0YWJsZSBjYWNoZVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIHN0YXJ0cyBoZXJlISFcblx0XHRcdFx0Y29uc3Qgb1RhYmxlUm93QmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRcdGlmIChvVGFibGVSb3dCaW5kaW5nKSB7XG5cdFx0XHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvVGFibGVSb3dCaW5kaW5nLmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRcdFx0XHQvLyBhcHBseSBmb3IgYm90aCBlZGl0IGFuZCBkaXNwbGF5IG1vZGUgaW4gc3RpY2t5XG5cdFx0XHRcdFx0XHRvVGFibGVSb3dCaW5kaW5nLnJlbW92ZUNhY2hlc0FuZE1lc3NhZ2VzKFwiXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBXb3JrYXJvdW5kIGVuZHMgaGVyZSEhXG5cblx0XHRcdFx0Ly8gQ2xlYXIgdGhlIHNlbGVjdGlvbiBpbiB0aGUgdGFibGUgYW5kIHVwZGF0ZSBhY3Rpb24gZW5hYmxlbWVudCBhY2NvcmRpbmdseVxuXHRcdFx0XHQvLyBXaWxsIHRvIGJlIGZpeGVkIHdpdGggQkxJOiBGSU9SSVRFQ0hQMS0yNDMxOFxuXHRcdFx0XHRjb25zdCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0QWN0aW9uUnVudGltZS5zZXRBY3Rpb25FbmFibGVtZW50KG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCwgW10sIFwidGFibGVcIik7XG5cblx0XHRcdFx0b1RhYmxlLmNsZWFyU2VsZWN0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMuZ2V0U2VtYW50aWNUYXJnZXRzRnJvbVBhZ2VNb2RlbCh0aGlzLCBcIl9wYWdlTW9kZWxcIik7XG5cdFx0Ly9SZXRyaWV2ZSBPYmplY3QgUGFnZSBoZWFkZXIgYWN0aW9ucyBmcm9tIE9iamVjdCBQYWdlIHRpdGxlIGNvbnRyb2xcblx0XHRjb25zdCBvT2JqZWN0UGFnZVRpdGxlID0gb09iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXHRcdGxldCBhSUJOSGVhZGVyQWN0aW9uczogYW55W10gPSBbXTtcblx0XHRhSUJOSGVhZGVyQWN0aW9ucyA9IENvbW1vblV0aWxzLmdldElCTkFjdGlvbnMob09iamVjdFBhZ2VUaXRsZSwgYUlCTkhlYWRlckFjdGlvbnMpO1xuXHRcdGFJQk5BY3Rpb25zID0gYUlCTkFjdGlvbnMuY29uY2F0KGFJQk5IZWFkZXJBY3Rpb25zKTtcblx0XHRDb21tb25VdGlscy51cGRhdGVEYXRhRmllbGRGb3JJQk5CdXR0b25zVmlzaWJpbGl0eShhSUJOQWN0aW9ucywgdGhpcy5nZXRWaWV3KCkpO1xuXG5cdFx0bGV0IG9Nb2RlbDogYW55LCBvRmluYWxVSVN0YXRlOiBhbnk7XG5cblx0XHQvLyB0aGlzIHNob3VsZCBub3QgYmUgbmVlZGVkIGF0IHRoZSBhbGxcblx0XHQvKipcblx0XHQgKiBAcGFyYW0gb1RhYmxlXG5cdFx0ICovXG5cdFx0Y29uc3QgaGFuZGxlVGFibGVNb2RpZmljYXRpb25zID0gKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IHRoaXMuX2dldFRhYmxlQmluZGluZyhvVGFibGUpLFxuXHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdFx0b1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRQYXRoKCksXG5cdFx0XHRcdFx0XHRvQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRvTW9kZWwsXG5cdFx0XHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fTtcblxuXHRcdFx0aWYgKCFvQmluZGluZykge1xuXHRcdFx0XHRMb2cuZXJyb3IoYEV4cGVjdGVkIGJpbmRpbmcgbWlzc2luZyBmb3IgdGFibGU6ICR7b1RhYmxlLmdldElkKCl9YCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9CaW5kaW5nLm9Db250ZXh0KSB7XG5cdFx0XHRcdGZuSGFuZGxlVGFibGVQYXRjaEV2ZW50cygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZm5IYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0aWYgKG9CaW5kaW5nLm9Db250ZXh0KSB7XG5cdFx0XHRcdFx0XHRmbkhhbmRsZVRhYmxlUGF0Y2hFdmVudHMoKTtcblx0XHRcdFx0XHRcdG9CaW5kaW5nLmRldGFjaENoYW5nZShmbkhhbmRsZUNoYW5nZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRvQmluZGluZy5hdHRhY2hDaGFuZ2UoZm5IYW5kbGVDaGFuZ2UpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRpZiAoYmluZGluZ0NvbnRleHQpIHtcblx0XHRcdG9Nb2RlbCA9IGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCk7XG5cblx0XHRcdC8vIENvbXB1dGUgRWRpdCBNb2RlXG5cdFx0XHRvRmluYWxVSVN0YXRlID0gdGhpcy5lZGl0Rmxvdy5jb21wdXRlRWRpdE1vZGUoYmluZGluZ0NvbnRleHQpO1xuXG5cdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQob01vZGVsLmdldE1ldGFNb2RlbCgpKSkge1xuXHRcdFx0XHRvRmluYWxVSVN0YXRlXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0KHRoaXMuZ2V0VmlldygpKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNDb25uZWN0ZWQodGhpcy5nZXRWaWV3KCkpKSB7XG5cdFx0XHRcdFx0XHRcdGRpc2Nvbm5lY3QodGhpcy5nZXRWaWV3KCkpOyAvLyBDbGVhbnVwIGNvbGxhYm9yYXRpb24gY29ubmVjdGlvbiBpbiBjYXNlIHdlIHN3aXRjaCB0byBhbm90aGVyIGVsZW1lbnQgKGUuZy4gaW4gRkNMKVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIGZpbmFsIFVJIFN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHQvLyB1cGRhdGUgcmVsYXRlZCBhcHBzXG5cdFx0XHR0aGlzLl91cGRhdGVSZWxhdGVkQXBwcygpO1xuXG5cdFx0XHQvL0F0dGFjaCB0aGUgcGF0Y2ggc2VudCBhbmQgcGF0Y2ggY29tcGxldGVkIGV2ZW50IHRvIHRoZSBvYmplY3QgcGFnZSBiaW5kaW5nIHNvIHRoYXQgd2UgY2FuIHJlYWN0XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IChiaW5kaW5nQ29udGV4dC5nZXRCaW5kaW5nICYmIGJpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKSkgfHwgYmluZGluZ0NvbnRleHQ7XG5cblx0XHRcdC8vIEF0dGFjaCB0aGUgZXZlbnQgaGFuZGxlciBvbmx5IG9uY2UgdG8gdGhlIHNhbWUgYmluZGluZ1xuXHRcdFx0aWYgKHRoaXMuY3VycmVudEJpbmRpbmcgIT09IG9CaW5kaW5nKSB7XG5cdFx0XHRcdG9CaW5kaW5nLmF0dGFjaEV2ZW50KFwicGF0Y2hTZW50XCIsIHt9LCB0aGlzLmVkaXRGbG93LmhhbmRsZVBhdGNoU2VudCwgdGhpcyk7XG5cdFx0XHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSBvQmluZGluZztcblx0XHRcdH1cblxuXHRcdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0XHQvLyBhY2Nlc3MgYmluZGluZyBvbmx5IGFmdGVyIHRhYmxlIGlzIGJvdW5kXG5cdFx0XHRcdFRhYmxlVXRpbHMud2hlbkJvdW5kKG9UYWJsZSlcblx0XHRcdFx0XHQudGhlbihoYW5kbGVUYWJsZU1vZGlmaWNhdGlvbnMpXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgd2FpdGluZyBmb3IgdGhlIHRhYmxlIHRvIGJlIGJvdW5kXCIsIG9FcnJvcik7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIGJpbmRpbmcgaXMgcmVhZHkgaGVuY2UgY2FsbGluZyBpdCBpbiBvbkFmdGVyQmluZGluZ1xuXHRcdFx0KG9PYmplY3RQYWdlIGFzIGFueSkuX3RyaWdnZXJWaXNpYmxlU3ViU2VjdGlvbnNFdmVudHMoKTtcblxuXHRcdFx0Ly9UbyBDb21wdXRlIHRoZSBFZGl0IEJpbmRpbmcgb2YgdGhlIHN1Yk9iamVjdCBwYWdlIHVzaW5nIHJvb3Qgb2JqZWN0IHBhZ2UsIGNyZWF0ZSBhIGNvbnRleHQgZm9yIGRyYWZ0IHJvb3QgYW5kIHVwZGF0ZSB0aGUgZWRpdCBidXR0b24gaW4gc3ViIE9QIHVzaW5nIHRoZSBjb250ZXh0XG5cdFx0XHRBY3Rpb25SdW50aW1lLnVwZGF0ZUVkaXRCdXR0b25WaXNpYmlsaXR5QW5kRW5hYmxlbWVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0fVxuXHRcdHRoaXMuZGlzcGxheUNvbGxhYm9yYXRpb25NZXNzYWdlKG1QYXJhbWV0ZXJzPy5yZWRpcmVjdGVkVG9Ob25EcmFmdCk7XG5cdH1cblxuXHQvKipcblx0ICogU2hvdyBhIG1lc3NhZ2Ugc3RyaXAgaWYgYSByZWRpcmVjdGlvbiB0byBhIG5vbi1kcmFmdCBlbGVtZW50IGhhcyBiZWVuIGRvbmUuXG5cdCAqIFJlbW92ZSB0aGUgbWVzc2FnZSBzdHJpcCBpbiBjYXNlIHdlIG5hdmlnYXRlIHRvIGFub3RoZXIgb2JqZWN0IHBhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIEVudGl0eSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Vcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGRpc3BsYXlDb2xsYWJvcmF0aW9uTWVzc2FnZShlbnRpdHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCByZXNvdXJjZUJ1bmRsZSA9IENvcmUuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIik7XG5cblx0XHRpZiAodGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSkge1xuXHRcdFx0Q29yZS5nZXRNZXNzYWdlTWFuYWdlcigpLnJlbW92ZU1lc3NhZ2VzKFt0aGlzLmNvbGxhYm9yYXRpb25NZXNzYWdlXSk7XG5cdFx0XHRkZWxldGUgdGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZTtcblx0XHR9XG5cblx0XHRpZiAoZW50aXR5TmFtZSkge1xuXHRcdFx0dGhpcy5jb2xsYWJvcmF0aW9uTWVzc2FnZSA9IG5ldyBNZXNzYWdlKHtcblx0XHRcdFx0bWVzc2FnZTogcmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIlJFUk9VVEVEX05BVklHQVRJT05fVE9fU0FWRURfVkVSU0lPTlwiLCBbZW50aXR5TmFtZV0pLFxuXHRcdFx0XHR0eXBlOiBcIkluZm9ybWF0aW9uXCIsXG5cdFx0XHRcdHRhcmdldDogdGhpcy5nZXRWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKVxuXHRcdFx0fSk7XG5cdFx0XHRzYXAudWkuZ2V0Q29yZSgpLmdldE1lc3NhZ2VNYW5hZ2VyKCkuYWRkTWVzc2FnZXMoW3RoaXMuY29sbGFib3JhdGlvbk1lc3NhZ2VdKTtcblx0XHR9XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGFnZVJlYWR5KG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRjb25zdCBzZXRGb2N1cyA9ICgpID0+IHtcblx0XHRcdC8vIFNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0IGFjdGlvbiBidXR0b24sIG9yIHRvIHRoZSBmaXJzdCBlZGl0YWJsZSBpbnB1dCBpZiBpbiBlZGl0YWJsZSBtb2RlXG5cdFx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0XHRjb25zdCBpc0luRGlzcGxheU1vZGUgPSAhb09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpO1xuXG5cdFx0XHRpZiAoaXNJbkRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9GaXJzdENsaWNrYWJsZUVsZW1lbnQgPSB0aGlzLl9nZXRGaXJzdENsaWNrYWJsZUVsZW1lbnQob09iamVjdFBhZ2UpO1xuXHRcdFx0XHRpZiAob0ZpcnN0Q2xpY2thYmxlRWxlbWVudCkge1xuXHRcdFx0XHRcdG9GaXJzdENsaWNrYWJsZUVsZW1lbnQuZm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkU2VjdGlvbjogYW55ID0gQ29yZS5ieUlkKG9PYmplY3RQYWdlLmdldFNlbGVjdGVkU2VjdGlvbigpKTtcblx0XHRcdFx0aWYgKG9TZWxlY3RlZFNlY3Rpb24pIHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUob1NlbGVjdGVkU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0Y29uc3QgY3R4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Ly8gc2V0dGluZyB0aGlzIG1vZGVsIGRhdGEgdG8gYmUgdXNlZCBmb3IgcmVjb21tZW5kYXRpb25zIGJpbmRpbmdcblx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFwiL2N1cnJlbnRDdHh0XCIsIGN0eHQpO1xuXG5cdFx0Ly8gQXBwbHkgYXBwIHN0YXRlIG9ubHkgYWZ0ZXIgdGhlIHBhZ2UgaXMgcmVhZHkgd2l0aCB0aGUgZmlyc3Qgc2VjdGlvbiBzZWxlY3RlZFxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdC8vU2hvdyBwb3B1cCB3aGlsZSBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBvYmplY3QgcGFnZSBpbiBjYXNlIG9mIGRyYWZ0XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZCgob0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdFx0aWYgKCFiSXNTdGlja3lNb2RlKSB7XG5cdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQob1ZpZXcpO1xuXHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigoKSA9PiB0aGlzLl9vbkJhY2tOYXZpZ2F0aW9uSW5EcmFmdChvQmluZGluZ0NvbnRleHQpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpXG5cdFx0XHQuZ2V0QXBwU3RhdGVIYW5kbGVyKClcblx0XHRcdC5hcHBseUFwcFN0YXRlKHZpZXdJZCwgdGhpcy5nZXRWaWV3KCkpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChtUGFyYW1ldGVycy5mb3JjZUZvY3VzKSB7XG5cdFx0XHRcdFx0c2V0Rm9jdXMoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgc2V0dGluZyB0aGUgZm9jdXNcIiwgRXJyb3IpO1xuXHRcdFx0fSk7XG5cblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiLCBmYWxzZSk7XG5cdFx0dGhpcy5fY2hlY2tEYXRhUG9pbnRUaXRsZUZvckV4dGVybmFsTmF2aWdhdGlvbigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhdHVzIG9mIGVkaXQgbW9kZSBmb3Igc3RpY2t5IHNlc3Npb24uXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0dXMgb2YgZWRpdCBtb2RlIGZvciBzdGlja3kgc2Vzc2lvblxuXHQgKi9cblx0Z2V0U3RpY2t5RWRpdE1vZGUoKSB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQgJiYgKHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0bGV0IGJJc1N0aWNreUVkaXRNb2RlID0gZmFsc2U7XG5cdFx0aWYgKG9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Y29uc3QgYklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0XHRpZiAoYklzU3RpY2t5TW9kZSkge1xuXHRcdFx0XHRiSXNTdGlja3lFZGl0TW9kZSA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGJJc1N0aWNreUVkaXRNb2RlO1xuXHR9XG5cblx0X2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCkge1xuXHRcdHJldHVybiB0aGlzLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHR9XG5cblx0X2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRjb25zdCBvT2JqZWN0UGFnZVN1YnRpdGxlID0gb09iamVjdFBhZ2UuZ2V0Q3VzdG9tRGF0YSgpLmZpbmQoZnVuY3Rpb24gKG9DdXN0b21EYXRhOiBhbnkpIHtcblx0XHRcdHJldHVybiBvQ3VzdG9tRGF0YS5nZXRLZXkoKSA9PT0gXCJPYmplY3RQYWdlU3VidGl0bGVcIjtcblx0XHR9KTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dGl0bGU6IG9PYmplY3RQYWdlLmRhdGEoXCJPYmplY3RQYWdlVGl0bGVcIikgfHwgXCJcIixcblx0XHRcdHN1YnRpdGxlOiBvT2JqZWN0UGFnZVN1YnRpdGxlICYmIG9PYmplY3RQYWdlU3VidGl0bGUuZ2V0VmFsdWUoKSxcblx0XHRcdGludGVudDogXCJcIixcblx0XHRcdGljb246IFwiXCJcblx0XHR9O1xuXHR9XG5cblx0X2V4ZWN1dGVIZWFkZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSlcblx0XHRcdFx0LmdldEFjdGlvbnMoKVxuXHRcdFx0XHQuZmluZChmdW5jdGlvbiAob0VsZW1lbnQ6IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvRWxlbWVudC5nZXRJZCgpID09PSBzQnV0dG9uSWQ7XG5cdFx0XHRcdH0pO1xuXHRcdGlmIChvQnV0dG9uKSB7XG5cdFx0XHRDb21tb25VdGlscy5maXJlQnV0dG9uUHJlc3Mob0J1dHRvbik7XG5cdFx0fVxuXHR9XG5cblx0X2V4ZWN1dGVGb290ZXJTaG9ydGN1dChzSWQ6IGFueSkge1xuXHRcdGNvbnN0IHNCdXR0b25JZCA9IGAke3RoaXMuZ2V0VmlldygpLmdldElkKCl9LS0ke3NJZH1gLFxuXHRcdFx0b0J1dHRvbiA9ICh0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLmdldEZvb3RlcigpIGFzIGFueSkuZ2V0Q29udGVudCgpLmZpbmQoZnVuY3Rpb24gKG9FbGVtZW50OiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIG9FbGVtZW50LmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpID09PSBcInNhcC5tLkJ1dHRvblwiICYmIG9FbGVtZW50LmdldElkKCkgPT09IHNCdXR0b25JZDtcblx0XHRcdH0pO1xuXHRcdENvbW1vblV0aWxzLmZpcmVCdXR0b25QcmVzcyhvQnV0dG9uKTtcblx0fVxuXG5cdF9leGVjdXRlVGFiU2hvcnRDdXQob0V4ZWN1dGlvbjogYW55KSB7XG5cdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpLFxuXHRcdFx0YVNlY3Rpb25zID0gb09iamVjdFBhZ2UuZ2V0U2VjdGlvbnMoKSxcblx0XHRcdGlTZWN0aW9uSW5kZXhNYXggPSBhU2VjdGlvbnMubGVuZ3RoIC0gMSxcblx0XHRcdHNDb21tYW5kID0gb0V4ZWN1dGlvbi5vU291cmNlLmdldENvbW1hbmQoKTtcblx0XHRsZXQgbmV3U2VjdGlvbixcblx0XHRcdGlTZWxlY3RlZFNlY3Rpb25JbmRleCA9IG9PYmplY3RQYWdlLmluZGV4T2ZTZWN0aW9uKHRoaXMuYnlJZChvT2JqZWN0UGFnZS5nZXRTZWxlY3RlZFNlY3Rpb24oKSkgYXMgT2JqZWN0UGFnZVNlY3Rpb24pO1xuXHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IC0xICYmIGlTZWN0aW9uSW5kZXhNYXggPiAwKSB7XG5cdFx0XHRpZiAoc0NvbW1hbmQgPT09IFwiTmV4dFRhYlwiKSB7XG5cdFx0XHRcdGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggPD0gaVNlY3Rpb25JbmRleE1heCAtIDEpIHtcblx0XHRcdFx0XHRuZXdTZWN0aW9uID0gYVNlY3Rpb25zWysraVNlbGVjdGVkU2VjdGlvbkluZGV4XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpU2VsZWN0ZWRTZWN0aW9uSW5kZXggIT09IDApIHtcblx0XHRcdFx0Ly8gUHJldmlvdXNUYWJcblx0XHRcdFx0bmV3U2VjdGlvbiA9IGFTZWN0aW9uc1stLWlTZWxlY3RlZFNlY3Rpb25JbmRleF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChuZXdTZWN0aW9uKSB7XG5cdFx0XHRcdG9PYmplY3RQYWdlLnNldFNlbGVjdGVkU2VjdGlvbihuZXdTZWN0aW9uKTtcblx0XHRcdFx0bmV3U2VjdGlvbi5mb2N1cygpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9nZXRGb290ZXJWaXNpYmlsaXR5KCkge1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0Y29uc3Qgc1ZpZXdJZCA9IHRoaXMuZ2V0VmlldygpLmdldElkKCk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIGZhbHNlKTtcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRNZXNzYWdlTWFuYWdlcigpXG5cdFx0XHQuZ2V0TWVzc2FnZU1vZGVsKClcblx0XHRcdC5nZXREYXRhKClcblx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvTWVzc2FnZTogYW55KSB7XG5cdFx0XHRcdGlmIChvTWVzc2FnZS52YWxpZGF0aW9uICYmIG9NZXNzYWdlLnR5cGUgPT09IFwiRXJyb3JcIiAmJiBvTWVzc2FnZS50YXJnZXQuaW5kZXhPZihzVmlld0lkKSA+IC0xKSB7XG5cdFx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwibWVzc2FnZUZvb3RlckNvbnRhaW5zRXJyb3JzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdF9zaG93TWVzc2FnZVBvcG92ZXIoZXJyPzogYW55LCBvUmV0PzogYW55KSB7XG5cdFx0aWYgKGVycikge1xuXHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0fVxuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgYW55O1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlVmlldyA9IHJvb3RWaWV3Q29udHJvbGxlci5pc0ZjbEVuYWJsZWQoKVxuXHRcdFx0PyByb290Vmlld0NvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0VmlldygpXG5cdFx0XHQ6ICh0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvb3RDb250YWluZXIoKSBhcyBhbnkpLmdldEN1cnJlbnRQYWdlKCk7XG5cdFx0aWYgKCFjdXJyZW50UGFnZVZpZXcuaXNBKFwic2FwLm0uTWVzc2FnZVBhZ2VcIikpIHtcblx0XHRcdGNvbnN0IG9NZXNzYWdlQnV0dG9uID0gdGhpcy5tZXNzYWdlQnV0dG9uLFxuXHRcdFx0XHRvTWVzc2FnZVBvcG92ZXIgPSBvTWVzc2FnZUJ1dHRvbi5vTWVzc2FnZVBvcG92ZXIsXG5cdFx0XHRcdG9JdGVtQmluZGluZyA9IG9NZXNzYWdlUG9wb3Zlci5nZXRCaW5kaW5nKFwiaXRlbXNcIik7XG5cblx0XHRcdGlmIChvSXRlbUJpbmRpbmcuZ2V0TGVuZ3RoKCkgPiAwICYmICFvTWVzc2FnZVBvcG92ZXIuaXNPcGVuKCkpIHtcblx0XHRcdFx0b01lc3NhZ2VCdXR0b24uc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0Ly8gd29ya2Fyb3VuZCB0byBlbnN1cmUgdGhhdCBvTWVzc2FnZUJ1dHRvbiBpcyByZW5kZXJlZCB3aGVuIG9wZW5CeSBpcyBjYWxsZWRcblx0XHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0b01lc3NhZ2VQb3BvdmVyLm9wZW5CeShvTWVzc2FnZUJ1dHRvbik7XG5cdFx0XHRcdH0sIDApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1JldDtcblx0fVxuXG5cdF9lZGl0RG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIik7XG5cdFx0QnVzeUxvY2tlci5sb2NrKG9Nb2RlbCk7XG5cdFx0cmV0dXJuIHRoaXMuZWRpdEZsb3cuZWRpdERvY3VtZW50LmFwcGx5KHRoaXMuZWRpdEZsb3csIFtvQ29udGV4dF0pLmZpbmFsbHkoZnVuY3Rpb24gKCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob01vZGVsKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgdmFsaWRhdGlvbiBvZiB0aGUgZG9jdW1lbnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAgLSBvbiBhIHRyYW5zaWVudCBjb250ZXh0OlxuXHQgKiBcdFx0LSBpZiB0aGUgY29udGV4dCBnZXRzIGRhdGEsIHdhaXQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgY29udGV4dCBhbmQgZXhlY3V0ZSB0aGUgZ2xvYmFsIHZhbGlkYXRpb25cblx0ICogXHRcdC0gaWYgbm8gZGF0YSBpcyBmb3VuZCBvbiB0aGlzIGNvbnRleHQsIG9ubHkgdGhlIHByZXBhcmVBY3Rpb24gaXMgcmVxdWVzdGVkXG5cdCAqICAtIG9uIGEgcmVndWxhciBjb250ZXh0LCB0aGUgZ2xvYmFsIHZhbGlkYXRpb24gaXMgcmVxdWVzdGVkLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvciB1bmRlZmluZWQgaWYgbm90IGV4ZWN1dGVkXG5cdCAqL1xuXHRhc3luYyBfdmFsaWRhdGVEb2N1bWVudCgpOiBQcm9taXNlPHZvaWQgfCB1bmtub3duW10gfCBPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdFx0Y29uc3QgY29udHJvbCA9IENvcmUuYnlJZChDb3JlLmdldEN1cnJlbnRGb2N1c2VkQ29udHJvbElkKCkpO1xuXHRcdGNvbnN0IGNvbnRleHQgPSBjb250cm9sPy5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIWNvbnRleHQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmIChjb250ZXh0LmlzVHJhbnNpZW50KCkpIHtcblx0XHRcdGlmIChjb250ZXh0Lmhhc1BlbmRpbmdDaGFuZ2VzKCkpIHtcblx0XHRcdFx0YXdhaXQgY29udGV4dC5jcmVhdGVkKCk7XG5cdFx0XHRcdHJldHVybiB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMuZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dCwgdHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGVHbG9iYWxWYWxpZGF0aW9uKGNvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV4ZWN1dGVzIHRoZSBnbG9iYWwgdmFsaWRhdGlvbiBvZiB0aGUgZHJhZnRcblx0ICogT25lIG9mIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBpcyB0cmlnZ2VyZWQgb24gdGhlIGRyYWZ0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50OlxuXHQgKiAgLSB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0cyBhcmUgZXhlY3V0ZWQgaWYgdGhlc2Ugc2lkZSBlZmZlY3RzIGFyZSBkZWZpbmVkIGluIHRoZSBjb250ZXh0XG5cdCAqICAtIHRoZSBkcmFmdCBWYWxpZGF0aW9uIG9uIHRoZSBEcmFmdFJvb3QgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHRcblx0ICogQHBhcmFtIGJ5UGFzc1NpZGVFZmZlY3RzIE9ubHkgdGhlIGRyYWZ0IFZhbGlkYXRpb24gc3RlcCBpcyBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyBQcm9taXNlIG9mIHRoZSBnbG9iYWwgdmFsaWRhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZUdsb2JhbFZhbGlkYXRpb24oY29udGV4dDogQ29udGV4dCwgYnlQYXNzU2lkZUVmZmVjdHMgPSBmYWxzZSk6IFByb21pc2U8dm9pZCB8IHVua25vd25bXSB8IE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGlmICghYnlQYXNzU2lkZUVmZmVjdHMpIHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBzaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KGNvbnRleHQpO1xuXHRcdFx0Y29uc3QgZ2xvYmFsU2lkZUVmZmVjdHMgPSBlbnRpdHlUeXBlID8gc2lkZUVmZmVjdHNTZXJ2aWNlLmdldEdsb2JhbE9EYXRhRW50aXR5U2lkZUVmZmVjdHMoZW50aXR5VHlwZSkgOiBbXTtcblx0XHRcdC8vIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBnbG9iYWwgU2lkZUVmZmVjdHMgZm9yIHRoZSByZWxhdGVkIGVudGl0eSwgZXhlY3V0ZSBpdC90aGVtXG5cdFx0XHRpZiAoZ2xvYmFsU2lkZUVmZmVjdHMubGVuZ3RoKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZWRpdEZsb3cuc3luY1Rhc2soKTtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGdsb2JhbFNpZGVFZmZlY3RzLm1hcCgoc2lkZUVmZmVjdHMpID0+IHRoaXMuX3NpZGVFZmZlY3RzLnJlcXVlc3RTaWRlRWZmZWN0cyhzaWRlRWZmZWN0cywgY29udGV4dCkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBkcmFmdFJvb3RDb250ZXh0ID0gKGF3YWl0IENvbW1vblV0aWxzLmNyZWF0ZVJvb3RDb250ZXh0KFByb2dyYW1taW5nTW9kZWwuRHJhZnQsIHRoaXMuZ2V0VmlldygpLCBhcHBDb21wb25lbnQpKSBhcyBDb250ZXh0O1xuXHRcdC8vRXhlY3V0ZSB0aGUgZHJhZnRWYWxpZGF0aW9uIGlmIHRoZXJlIGlzIG5vIGdsb2JhbFNpZGVFZmZlY3RzIChpZ25vcmUgRVRhZ3MgaW4gY29sbGFib3JhdGlvbiBkcmFmdClcblx0XHRpZiAoZHJhZnRSb290Q29udGV4dCkge1xuXHRcdFx0YXdhaXQgdGhpcy5lZGl0Rmxvdy5zeW5jVGFzaygpO1xuXHRcdFx0cmV0dXJuIGRyYWZ0LmV4ZWN1dGVEcmFmdFZhbGlkYXRpb24oZHJhZnRSb290Q29udGV4dCwgYXBwQ29tcG9uZW50LCBpc0Nvbm5lY3RlZCh0aGlzLmdldFZpZXcoKSkpO1xuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9zYXZlRG9jdW1lbnQob0NvbnRleHQ6IGFueSkge1xuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwidWlcIiksXG5cdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50czogYW55W10gPSBbXTtcblx0XHQvLyBpbmRpY2F0ZXMgaWYgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvdyBpbiB0aGUgT1Bcblx0XHRsZXQgYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSBmYWxzZTtcblx0XHRCdXN5TG9ja2VyLmxvY2sob01vZGVsKTtcblx0XHR0aGlzLl9maW5kVGFibGVzKCkuZm9yRWFjaCgob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKG9UYWJsZSk7XG5cdFx0XHRjb25zdCBtUGFyYW1ldGVyczogYW55ID0ge1xuXHRcdFx0XHRjcmVhdGlvbk1vZGU6IG9UYWJsZS5kYXRhKFwiY3JlYXRpb25Nb2RlXCIpLFxuXHRcdFx0XHRjcmVhdGlvblJvdzogb1RhYmxlLmdldENyZWF0aW9uUm93KCksXG5cdFx0XHRcdGNyZWF0ZUF0RW5kOiBvVGFibGUuZGF0YShcImNyZWF0ZUF0RW5kXCIpID09PSBcInRydWVcIlxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGJDcmVhdGVEb2N1bWVudCA9XG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93ICYmXG5cdFx0XHRcdG1QYXJhbWV0ZXJzLmNyZWF0aW9uUm93LmdldEJpbmRpbmdDb250ZXh0KCkgJiZcblx0XHRcdFx0T2JqZWN0LmtleXMobVBhcmFtZXRlcnMuY3JlYXRpb25Sb3cuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRPYmplY3QoKSkubGVuZ3RoID4gMTtcblx0XHRcdGlmIChiQ3JlYXRlRG9jdW1lbnQpIHtcblx0XHRcdFx0Ly8gdGhlIGJTa2lwU2lkZUVmZmVjdHMgaXMgYSBwYXJhbWV0ZXIgY3JlYXRlZCB3aGVuIHdlIGNsaWNrIHRoZSBzYXZlIGtleS4gSWYgd2UgcHJlc3MgdGhpcyBrZXlcblx0XHRcdFx0Ly8gd2UgZG9uJ3QgZXhlY3V0ZSB0aGUgaGFuZGxlU2lkZUVmZmVjdHMgZnVuY2l0b24gdG8gYXZvaWQgYmF0Y2ggcmVkdW5kYW5jeVxuXHRcdFx0XHRtUGFyYW1ldGVycy5iU2tpcFNpZGVFZmZlY3RzID0gdHJ1ZTtcblx0XHRcdFx0YkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRhV2FpdENyZWF0ZURvY3VtZW50cy5wdXNoKFxuXHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuY3JlYXRlRG9jdW1lbnQob0JpbmRpbmcsIG1QYXJhbWV0ZXJzKS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZztcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFCaW5kaW5ncyA9IGF3YWl0IFByb21pc2UuYWxsKGFXYWl0Q3JlYXRlRG9jdW1lbnRzKTtcblx0XHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0XHRiRXhlY3V0ZVNpZGVFZmZlY3RzT25FcnJvcjogYkV4ZWN1dGVTaWRlRWZmZWN0c09uRXJyb3IsXG5cdFx0XHRcdGJpbmRpbmdzOiBhQmluZGluZ3Ncblx0XHRcdH07XG5cdFx0XHQvLyBXZSBuZWVkIHRvIGVpdGhlciByZWplY3Qgb3IgcmVzb2x2ZSBhIHByb21pc2UgaGVyZSBhbmQgcmV0dXJuIGl0IHNpbmNlIHRoaXMgc2F2ZVxuXHRcdFx0Ly8gZnVuY3Rpb24gaXMgbm90IG9ubHkgY2FsbGVkIHdoZW4gcHJlc3NpbmcgdGhlIHNhdmUgYnV0dG9uIGluIHRoZSBmb290ZXIsIGJ1dCBhbHNvXG5cdFx0XHQvLyB3aGVuIHRoZSB1c2VyIHNlbGVjdHMgY3JlYXRlIG9yIHNhdmUgaW4gYSBkYXRhbG9zcyBwb3B1cC5cblx0XHRcdC8vIFRoZSBsb2dpYyBvZiB0aGUgZGF0YWxvc3MgcG9wdXAgbmVlZHMgdG8gZGV0ZWN0IGlmIHRoZSBzYXZlIGhhZCBlcnJvcnMgb3Igbm90IGluIG9yZGVyXG5cdFx0XHQvLyB0byBkZWNpZGUgaWYgdGhlIHN1YnNlcXVlbnQgYWN0aW9uIC0gbGlrZSBhIGJhY2sgbmF2aWdhdGlvbiAtIGhhcyB0byBiZSBleGVjdXRlZCBvciBub3QuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmVkaXRGbG93LnNhdmVEb2N1bWVudChvQ29udGV4dCwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0XHQvLyBJZiB0aGUgc2F2ZURvY3VtZW50IGluIGVkaXRGbG93IHJldHVybnMgZXJyb3JzIHdlIG5lZWRcblx0XHRcdFx0Ly8gdG8gc2hvdyB0aGUgbWVzc2FnZSBwb3BvdmVyIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHRoZVxuXHRcdFx0XHQvLyBkYXRhbG9zcyBsb2dpYyBkb2VzIG5vdCBwZXJmb3JtIHRoZSBmb2xsb3cgdXAgZnVuY3Rpb25cblx0XHRcdFx0Ly8gbGlrZSBlLmcuIGEgYmFjayBuYXZpZ2F0aW9uIGhlbmNlIHdlIHJldHVybiBhIHByb21pc2UgYW5kIHJlamVjdCBpdFxuXHRcdFx0XHR0aGlzLl9zaG93TWVzc2FnZVBvcG92ZXIoZXJyb3IpO1xuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob01vZGVsKSkge1xuXHRcdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvTW9kZWwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdF9tYW5hZ2VDb2xsYWJvcmF0aW9uKCkge1xuXHRcdG9wZW5NYW5hZ2VEaWFsb2codGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0X3Nob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHMoZXZlbnQ6IGFueSkge1xuXHRcdHNob3dVc2VyRGV0YWlscyhldmVudCwgdGhpcy5nZXRWaWV3KCkpO1xuXHR9XG5cblx0X2NhbmNlbERvY3VtZW50KG9Db250ZXh0OiBhbnksIG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHRtUGFyYW1ldGVycy5jYW5jZWxCdXR0b24gPSB0aGlzLmdldFZpZXcoKS5ieUlkKG1QYXJhbWV0ZXJzLmNhbmNlbEJ1dHRvbik7IC8vdG8gZ2V0IHRoZSByZWZlcmVuY2Ugb2YgdGhlIGNhbmNlbCBidXR0b24gZnJvbSBjb21tYW5kIGV4ZWN1dGlvblxuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmNhbmNlbERvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdH1cblxuXHRfYXBwbHlEb2N1bWVudChvQ29udGV4dDogQ29udGV4dCkge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93LmFwcGx5RG9jdW1lbnQob0NvbnRleHQpLmNhdGNoKCgpID0+IHRoaXMuX3Nob3dNZXNzYWdlUG9wb3ZlcigpKTtcblx0fVxuXG5cdF91cGRhdGVSZWxhdGVkQXBwcygpIHtcblx0XHRjb25zdCBvT2JqZWN0UGFnZSA9IHRoaXMuX2dldE9iamVjdFBhZ2VMYXlvdXRDb250cm9sKCk7XG5cdFx0Y29uc3Qgc2hvd1JlbGF0ZWRBcHBzID0gb09iamVjdFBhZ2UuZGF0YShcInNob3dSZWxhdGVkQXBwc1wiKTtcblx0XHRpZiAoc2hvd1JlbGF0ZWRBcHBzID09PSBcInRydWVcIiB8fCBzaG93UmVsYXRlZEFwcHMgPT09IHRydWUpIHtcblx0XHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLmdldFZpZXcoKSk7XG5cdFx0XHRDb21tb25VdGlscy51cGRhdGVSZWxhdGVkQXBwc0RldGFpbHMob09iamVjdFBhZ2UsIGFwcENvbXBvbmVudCk7XG5cdFx0fVxuXHR9XG5cblx0X2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFQYXJlbnRFbGVtZW50OiBhbnksIGFTdWJzZWN0aW9uOiBhbnksIGFDb250cm9sczogYW55LCBiSXNDaGFydD86IGJvb2xlYW4pIHtcblx0XHRmb3IgKGxldCBlbGVtZW50ID0gMDsgZWxlbWVudCA8IGFQYXJlbnRFbGVtZW50Lmxlbmd0aDsgZWxlbWVudCsrKSB7XG5cdFx0XHRsZXQgb0VsZW1lbnQgPSBhUGFyZW50RWxlbWVudFtlbGVtZW50XS5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgYVBhcmVudEVsZW1lbnRbZWxlbWVudF0uZ2V0Q29udGVudCgpO1xuXHRcdFx0aWYgKGJJc0NoYXJ0KSB7XG5cdFx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5tQWdncmVnYXRpb25zICYmIG9FbGVtZW50LmdldEFnZ3JlZ2F0aW9uKFwiaXRlbXNcIikpIHtcblx0XHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvRWxlbWVudC5nZXRBZ2dyZWdhdGlvbihcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdGFJdGVtcy5mb3JFYWNoKGZ1bmN0aW9uIChvSXRlbTogYW55KSB7XG5cdFx0XHRcdFx0XHRpZiAob0l0ZW0uaXNBKFwic2FwLmZlLm1hY3Jvcy5jaGFydC5DaGFydEFQSVwiKSkge1xuXHRcdFx0XHRcdFx0XHRvRWxlbWVudCA9IG9JdGVtO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC51aS5sYXlvdXQuRHluYW1pY1NpZGVDb250ZW50XCIpKSB7XG5cdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnQuZ2V0TWFpbkNvbnRlbnQgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBvRWxlbWVudC5nZXRNYWluQ29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIFRoZSB0YWJsZSBtYXkgY3VycmVudGx5IGJlIHNob3duIGluIGEgZnVsbCBzY3JlZW4gZGlhbG9nLCB3ZSBjYW4gdGhlbiBnZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgVGFibGVBUElcblx0XHRcdC8vIGNvbnRyb2wgZnJvbSB0aGUgY3VzdG9tIGRhdGEgb2YgdGhlIHBsYWNlIGhvbGRlciBwYW5lbFxuXHRcdFx0aWYgKG9FbGVtZW50ICYmIG9FbGVtZW50LmlzQSAmJiBvRWxlbWVudC5pc0EoXCJzYXAubS5QYW5lbFwiKSAmJiBvRWxlbWVudC5kYXRhKFwiRnVsbFNjcmVlblRhYmxlUGxhY2VIb2xkZXJcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5kYXRhKFwidGFibGVBUElyZWZlcmVuY2VcIik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MudGFibGUuVGFibGVBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQuaXNBICYmIG9FbGVtZW50LmlzQShcInNhcC5mZS5tYWNyb3MuY2hhcnQuQ2hhcnRBUElcIikpIHtcblx0XHRcdFx0b0VsZW1lbnQgPSBvRWxlbWVudC5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0VsZW1lbnQuZ2V0Q29udGVudCgpO1xuXHRcdFx0XHRpZiAob0VsZW1lbnQgJiYgb0VsZW1lbnQubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdG9FbGVtZW50ID0gb0VsZW1lbnRbMF07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChvRWxlbWVudCAmJiBvRWxlbWVudC5pc0EgJiYgb0VsZW1lbnQuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSkge1xuXHRcdFx0XHRhQ29udHJvbHMucHVzaChvRWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0X2dldEFsbFN1YlNlY3Rpb25zKCkge1xuXHRcdGNvbnN0IG9PYmplY3RQYWdlID0gdGhpcy5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRsZXQgYVN1YlNlY3Rpb25zOiBhbnlbXSA9IFtdO1xuXHRcdG9PYmplY3RQYWdlLmdldFNlY3Rpb25zKCkuZm9yRWFjaChmdW5jdGlvbiAob1NlY3Rpb246IGFueSkge1xuXHRcdFx0YVN1YlNlY3Rpb25zID0gYVN1YlNlY3Rpb25zLmNvbmNhdChvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gYVN1YlNlY3Rpb25zO1xuXHR9XG5cblx0X2dldEFsbEJsb2NrcygpIHtcblx0XHRsZXQgYUJsb2NrczogYW55W10gPSBbXTtcblx0XHR0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpLmZvckVhY2goZnVuY3Rpb24gKG9TdWJTZWN0aW9uOiBhbnkpIHtcblx0XHRcdGFCbG9ja3MgPSBhQmxvY2tzLmNvbmNhdChvU3ViU2VjdGlvbi5nZXRCbG9ja3MoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFCbG9ja3M7XG5cdH1cblxuXHRfZmluZFRhYmxlcygpIHtcblx0XHRjb25zdCBhU3ViU2VjdGlvbnMgPSB0aGlzLl9nZXRBbGxTdWJTZWN0aW9ucygpO1xuXHRcdGNvbnN0IGFUYWJsZXM6IGFueVtdID0gW107XG5cdFx0Zm9yIChsZXQgc3ViU2VjdGlvbiA9IDA7IHN1YlNlY3Rpb24gPCBhU3ViU2VjdGlvbnMubGVuZ3RoOyBzdWJTZWN0aW9uKyspIHtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRCbG9ja3MoKSwgYVN1YlNlY3Rpb25zW3N1YlNlY3Rpb25dLCBhVGFibGVzKTtcblx0XHRcdHRoaXMuX2ZpbmRDb250cm9sSW5TdWJTZWN0aW9uKGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXS5nZXRNb3JlQmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYVRhYmxlcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhVGFibGVzO1xuXHR9XG5cblx0X2ZpbmRDaGFydHMoKSB7XG5cdFx0Y29uc3QgYVN1YlNlY3Rpb25zID0gdGhpcy5fZ2V0QWxsU3ViU2VjdGlvbnMoKTtcblx0XHRjb25zdCBhQ2hhcnRzOiBhbnlbXSA9IFtdO1xuXHRcdGZvciAobGV0IHN1YlNlY3Rpb24gPSAwOyBzdWJTZWN0aW9uIDwgYVN1YlNlY3Rpb25zLmxlbmd0aDsgc3ViU2VjdGlvbisrKSB7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0QmxvY2tzKCksIGFTdWJTZWN0aW9uc1tzdWJTZWN0aW9uXSwgYUNoYXJ0cywgdHJ1ZSk7XG5cdFx0XHR0aGlzLl9maW5kQ29udHJvbEluU3ViU2VjdGlvbihhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0uZ2V0TW9yZUJsb2NrcygpLCBhU3ViU2VjdGlvbnNbc3ViU2VjdGlvbl0sIGFDaGFydHMsIHRydWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYUNoYXJ0cztcblx0fVxuXG5cdF9jbG9zZVNpZGVDb250ZW50KCkge1xuXHRcdHRoaXMuX2dldEFsbEJsb2NrcygpLmZvckVhY2goZnVuY3Rpb24gKG9CbG9jazogYW55KSB7XG5cdFx0XHRjb25zdCBvQ29udGVudCA9IG9CbG9jay5nZXRDb250ZW50IGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgb0Jsb2NrLmdldENvbnRlbnQoKTtcblx0XHRcdGlmIChvQ29udGVudCAmJiBvQ29udGVudC5pc0EgJiYgb0NvbnRlbnQuaXNBKFwic2FwLnVpLmxheW91dC5EeW5hbWljU2lkZUNvbnRlbnRcIikpIHtcblx0XHRcdFx0aWYgKG9Db250ZW50LnNldFNob3dTaWRlQ29udGVudCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG5cdFx0XHRcdFx0b0NvbnRlbnQuc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYXJ0IENvbnRleHQgaXMgcmVzb2x2ZWQgZm9yIDE6biBtaWNyb2NoYXJ0cy5cblx0ICpcblx0ICogQHBhcmFtIG9DaGFydENvbnRleHQgVGhlIENvbnRleHQgb2YgdGhlIE1pY3JvQ2hhcnRcblx0ICogQHBhcmFtIHNDaGFydFBhdGggVGhlIGNvbGxlY3Rpb25QYXRoIG9mIHRoZSB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgQXJyYXkgb2YgQXR0cmlidXRlcyBvZiB0aGUgY2hhcnQgQ29udGV4dFxuXHQgKi9cblx0X2dldENoYXJ0Q29udGV4dERhdGEob0NoYXJ0Q29udGV4dDogYW55LCBzQ2hhcnRQYXRoOiBzdHJpbmcpIHtcblx0XHRjb25zdCBvQ29udGV4dERhdGEgPSBvQ2hhcnRDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdGxldCBvQ2hhcnRDb250ZXh0RGF0YSA9IFtvQ29udGV4dERhdGFdO1xuXHRcdGlmIChvQ2hhcnRDb250ZXh0ICYmIHNDaGFydFBhdGgpIHtcblx0XHRcdGlmIChvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF0pIHtcblx0XHRcdFx0b0NoYXJ0Q29udGV4dERhdGEgPSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdGRlbGV0ZSBvQ29udGV4dERhdGFbc0NoYXJ0UGF0aF07XG5cdFx0XHRcdG9DaGFydENvbnRleHREYXRhLnB1c2gob0NvbnRleHREYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9DaGFydENvbnRleHREYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNjcm9sbCB0aGUgdGFibGVzIHRvIHRoZSByb3cgd2l0aCB0aGUgc1BhdGhcblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggJ3NQYXRoIG9mIHRoZSB0YWJsZSByb3cnXG5cdCAqL1xuXG5cdF9zY3JvbGxUYWJsZXNUb1JvdyhzUm93UGF0aDogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuX2ZpbmRUYWJsZXMgJiYgdGhpcy5fZmluZFRhYmxlcygpLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9maW5kVGFibGVzKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFUYWJsZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0VGFibGVTY3JvbGxlci5zY3JvbGxUYWJsZVRvUm93KGFUYWJsZXNbaV0sIHNSb3dQYXRoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIG1lcmdlIHNlbGVjdGVkIGNvbnRleHRzIGFuZCBmaWx0ZXJzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX21lcmdlTXVsdGlwbGVDb250ZXh0c1xuXHQgKiBAcGFyYW0gb1BhZ2VDb250ZXh0IFBhZ2UgY29udGV4dFxuXHQgKiBAcGFyYW0gYUxpbmVDb250ZXh0IFNlbGVjdGVkIENvbnRleHRzXG5cdCAqIEBwYXJhbSBzQ2hhcnRQYXRoIENvbGxlY3Rpb24gbmFtZSBvZiB0aGUgY2hhcnRcblx0ICogQHJldHVybnMgU2VsZWN0aW9uIFZhcmlhbnQgT2JqZWN0XG5cdCAqL1xuXHRfbWVyZ2VNdWx0aXBsZUNvbnRleHRzKG9QYWdlQ29udGV4dDogQ29udGV4dCwgYUxpbmVDb250ZXh0OiBhbnlbXSwgc0NoYXJ0UGF0aDogc3RyaW5nKSB7XG5cdFx0bGV0IGFBdHRyaWJ1dGVzOiBhbnlbXSA9IFtdLFxuXHRcdFx0YVBhZ2VBdHRyaWJ1dGVzID0gW10sXG5cdFx0XHRvQ29udGV4dCxcblx0XHRcdHNNZXRhUGF0aExpbmU6IHN0cmluZyxcblx0XHRcdHNQYXRoTGluZTtcblxuXHRcdGNvbnN0IHNQYWdlUGF0aCA9IG9QYWdlQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9QYWdlQ29udGV4dCAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKSAmJiBvUGFnZUNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzTWV0YVBhdGhQYWdlID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYWdlUGF0aCkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdC8vIEdldCBzaW5nbGUgbGluZSBjb250ZXh0IGlmIG5lY2Vzc2FyeVxuXHRcdGlmIChhTGluZUNvbnRleHQgJiYgYUxpbmVDb250ZXh0Lmxlbmd0aCkge1xuXHRcdFx0b0NvbnRleHQgPSBhTGluZUNvbnRleHRbMF07XG5cdFx0XHRzUGF0aExpbmUgPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRzTWV0YVBhdGhMaW5lID0gb01ldGFNb2RlbCAmJiBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoTGluZSkucmVwbGFjZSgvXlxcLyovLCBcIlwiKTtcblxuXHRcdFx0YUxpbmVDb250ZXh0LmZvckVhY2goKG9TaW5nbGVDb250ZXh0OiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKHNDaGFydFBhdGgpIHtcblx0XHRcdFx0XHRjb25zdCBvQ2hhcnRDb250ZXh0RGF0YSA9IHRoaXMuX2dldENoYXJ0Q29udGV4dERhdGEob1NpbmdsZUNvbnRleHQsIHNDaGFydFBhdGgpO1xuXHRcdFx0XHRcdGlmIChvQ2hhcnRDb250ZXh0RGF0YSkge1xuXHRcdFx0XHRcdFx0YUF0dHJpYnV0ZXMgPSBvQ2hhcnRDb250ZXh0RGF0YS5tYXAoZnVuY3Rpb24gKG9TdWJDaGFydENvbnRleHREYXRhOiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRjb250ZXh0RGF0YTogb1N1YkNoYXJ0Q29udGV4dERhdGEsXG5cdFx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBgJHtzTWV0YVBhdGhQYWdlfS8ke3NDaGFydFBhdGh9YFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFBdHRyaWJ1dGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0Y29udGV4dERhdGE6IG9TaW5nbGVDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhMaW5lXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRhUGFnZUF0dHJpYnV0ZXMucHVzaCh7XG5cdFx0XHRjb250ZXh0RGF0YTogb1BhZ2VDb250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0ZW50aXR5U2V0OiBzTWV0YVBhdGhQYWdlXG5cdFx0fSk7XG5cdFx0Ly8gQWRkaW5nIFBhZ2UgQ29udGV4dCB0byBzZWxlY3Rpb24gdmFyaWFudFxuXHRcdGFQYWdlQXR0cmlidXRlcyA9IHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5yZW1vdmVTZW5zaXRpdmVEYXRhKGFQYWdlQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0Y29uc3Qgb1BhZ2VMZXZlbFNWID0gQ29tbW9uVXRpbHMuYWRkUGFnZUNvbnRleHRUb1NlbGVjdGlvblZhcmlhbnQobmV3IFNlbGVjdGlvblZhcmlhbnQoKSwgYVBhZ2VBdHRyaWJ1dGVzLCB0aGlzLmdldFZpZXcoKSk7XG5cdFx0YUF0dHJpYnV0ZXMgPSB0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ucmVtb3ZlU2Vuc2l0aXZlRGF0YShhQXR0cmlidXRlcywgc01ldGFQYXRoUGFnZSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ6IG9QYWdlTGV2ZWxTVixcblx0XHRcdGF0dHJpYnV0ZXM6IGFBdHRyaWJ1dGVzXG5cdFx0fTtcblx0fVxuXG5cdF9nZXRCYXRjaEdyb3Vwc0ZvclZpZXcoKSB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gdGhpcy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnksXG5cdFx0XHRvQ29uZmlndXJhdGlvbnMgPSBvVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sXG5cdFx0XHRhQ29uZmlndXJhdGlvbnMgPSBvQ29uZmlndXJhdGlvbnMgJiYgT2JqZWN0LmtleXMob0NvbmZpZ3VyYXRpb25zKSxcblx0XHRcdGFCYXRjaEdyb3VwcyA9IFtcIiRhdXRvLkhlcm9lc1wiLCBcIiRhdXRvLkRlY29yYXRpb25cIiwgXCIkYXV0by5Xb3JrZXJzXCJdO1xuXG5cdFx0aWYgKGFDb25maWd1cmF0aW9ucyAmJiBhQ29uZmlndXJhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0YUNvbmZpZ3VyYXRpb25zLmZvckVhY2goZnVuY3Rpb24gKHNLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ29uZmlndXJhdGlvbiA9IG9Db25maWd1cmF0aW9uc1tzS2V5XTtcblx0XHRcdFx0aWYgKG9Db25maWd1cmF0aW9uLnJlcXVlc3RHcm91cElkID09PSBcIkxvbmdSdW5uZXJzXCIpIHtcblx0XHRcdFx0XHRhQmF0Y2hHcm91cHMucHVzaChcIiRhdXRvLkxvbmdSdW5uZXJzXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGFCYXRjaEdyb3Vwcztcblx0fVxuXG5cdC8qXG5cdCAqIFJlc2V0IEJyZWFkY3J1bWIgbGlua3Ncblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSB7c2FwLm0uQnJlYWRjcnVtYnN9IFtvU291cmNlXSBwYXJlbnQgY29udHJvbFxuXHQgKiBAZGVzY3JpcHRpb24gVXNlZCB3aGVuIGNvbnRleHQgb2YgdGhlIG9iamVjdCBwYWdlIGNoYW5nZXMuXG5cdCAqICAgICAgICAgICAgICBUaGlzIGV2ZW50IGNhbGxiYWNrIGlzIGF0dGFjaGVkIHRvIG1vZGVsQ29udGV4dENoYW5nZVxuXHQgKiAgICAgICAgICAgICAgZXZlbnQgb2YgdGhlIEJyZWFkY3J1bWIgY29udHJvbCB0byBjYXRjaCBjb250ZXh0IGNoYW5nZS5cblx0ICogICAgICAgICAgICAgIFRoZW4gZWxlbWVudCBiaW5kaW5nIGFuZCBocmVmcyBhcmUgdXBkYXRlZCBmb3IgZWFjaCBsaW5rLlxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGV4cGVyaW1lbnRhbFxuXHQgKi9cblx0YXN5bmMgX3NldEJyZWFkY3J1bWJMaW5rcyhvU291cmNlOiBCcmVhZENydW1icykge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0b0FwcENvbXBvbmVudCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCksXG5cdFx0XHRhUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdLFxuXHRcdFx0YVNraXBQYXJhbWV0ZXJpemVkOiBhbnlbXSA9IFtdLFxuXHRcdFx0c05ld1BhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpLFxuXHRcdFx0YVBhdGhQYXJ0cyA9IHNOZXdQYXRoPy5zcGxpdChcIi9cIikgPz8gW10sXG5cdFx0XHRvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cdFx0dHJ5IHtcblx0XHRcdGFQYXRoUGFydHMuc2hpZnQoKTtcblx0XHRcdGFQYXRoUGFydHMuc3BsaWNlKC0xLCAxKTtcblx0XHRcdGFQYXRoUGFydHMuZm9yRWFjaChmdW5jdGlvbiAoc1BhdGhQYXJ0OiBhbnkpIHtcblx0XHRcdFx0c1BhdGggKz0gYC8ke3NQYXRoUGFydH1gO1xuXHRcdFx0XHRjb25zdCBvUm9vdFZpZXdDb250cm9sbGVyID0gb0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKTtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBvTWV0YU1vZGVsLmdldE1ldGFQYXRoKHNQYXRoKTtcblx0XHRcdFx0Y29uc3QgYlJlc3VsdENvbnRleHQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtzUGFyYW1ldGVyUGF0aH0vQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5SZXN1bHRDb250ZXh0YCk7XG5cdFx0XHRcdGlmIChiUmVzdWx0Q29udGV4dCkge1xuXHRcdFx0XHRcdC8vIFdlIGRvbnQgbmVlZCB0byBjcmVhdGUgYSBicmVhZGNydW1iIGZvciBQYXJhbWV0ZXIgcGF0aFxuXHRcdFx0XHRcdGFTa2lwUGFyYW1ldGVyaXplZC5wdXNoKDEpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRhU2tpcFBhcmFtZXRlcml6ZWQucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChvUm9vdFZpZXdDb250cm9sbGVyLmdldFRpdGxlSW5mb0Zyb21QYXRoKHNQYXRoKSk7XG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IHRpdGxlSGllcmFyY2h5SW5mb3M6IGFueVtdID0gYXdhaXQgUHJvbWlzZS5hbGwoYVByb21pc2VzKTtcblx0XHRcdGxldCBpZHgsIGhpZXJhcmNoeVBvc2l0aW9uLCBvTGluaztcblx0XHRcdGZvciAoY29uc3QgdGl0bGVIaWVyYXJjaHlJbmZvIG9mIHRpdGxlSGllcmFyY2h5SW5mb3MpIHtcblx0XHRcdFx0aGllcmFyY2h5UG9zaXRpb24gPSB0aXRsZUhpZXJhcmNoeUluZm9zLmluZGV4T2YodGl0bGVIaWVyYXJjaHlJbmZvKTtcblx0XHRcdFx0aWR4ID0gaGllcmFyY2h5UG9zaXRpb24gLSBhU2tpcFBhcmFtZXRlcml6ZWRbaGllcmFyY2h5UG9zaXRpb25dO1xuXHRcdFx0XHRvTGluayA9IG9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdID8gb1NvdXJjZS5nZXRMaW5rcygpW2lkeF0gOiBuZXcgTGluaygpO1xuXHRcdFx0XHQvL3NDdXJyZW50RW50aXR5IGlzIGEgZmFsbGJhY2sgdmFsdWUgaW4gY2FzZSBvZiBlbXB0eSB0aXRsZVxuXHRcdFx0XHRvTGluay5zZXRUZXh0KHRpdGxlSGllcmFyY2h5SW5mby5zdWJ0aXRsZSB8fCB0aXRsZUhpZXJhcmNoeUluZm8udGl0bGUpO1xuXHRcdFx0XHQvL1dlIGFwcGx5IGFuIGFkZGl0aW9uYWwgZW5jb2RlVVJJIGluIGNhc2Ugb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIChpZSBcIi9cIikgdXNlZCBpbiB0aGUgdXJsIHRocm91Z2ggdGhlIHNlbWFudGljIGtleXNcblx0XHRcdFx0b0xpbmsuc2V0SHJlZihlbmNvZGVVUkkodGl0bGVIaWVyYXJjaHlJbmZvLmludGVudCkpO1xuXHRcdFx0XHRpZiAoIW9Tb3VyY2UuZ2V0TGlua3MoKVtpZHhdKSB7XG5cdFx0XHRcdFx0b1NvdXJjZS5hZGRMaW5rKG9MaW5rKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNldHRpbmcgdGhlIGJyZWFkY3J1bWIgbGlua3M6XCIgKyBlcnJvcik7XG5cdFx0fVxuXHR9XG5cblx0X2NoZWNrRGF0YVBvaW50VGl0bGVGb3JFeHRlcm5hbE5hdmlnYXRpb24oKSB7XG5cdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdGNvbnN0IG9EYXRhUG9pbnRzID0gQ29tbW9uVXRpbHMuZ2V0SGVhZGVyRmFjZXRJdGVtQ29uZmlnRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdFx0b1ZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKVxuXHRcdCk7XG5cdFx0Y29uc3Qgb1NoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBvUGFnZUNvbnRleHQgPSBvVmlldyAmJiAob1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJpc0hlYWRlckRQTGlua1Zpc2libGVcIiwge30pO1xuXHRcdGlmIChvUGFnZUNvbnRleHQpIHtcblx0XHRcdG9QYWdlQ29udGV4dFxuXHRcdFx0XHQucmVxdWVzdE9iamVjdCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChvRGF0YTogYW55KSB7XG5cdFx0XHRcdFx0Zm5HZXRMaW5rcyhvRGF0YVBvaW50cywgb0RhdGEpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IHJldHJpZXZlIHRoZSBsaW5rcyBmcm9tIHRoZSBzaGVsbCBzZXJ2aWNlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvRXJyb3Jcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbk9uRXJyb3Iob0Vycm9yOiBhbnkpIHtcblx0XHRcdExvZy5lcnJvcihvRXJyb3IpO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGZuU2V0TGlua0VuYWJsZW1lbnQoaWQ6IHN0cmluZywgYVN1cHBvcnRlZExpbmtzOiBhbnkpIHtcblx0XHRcdGNvbnN0IHNMaW5rSWQgPSBpZDtcblx0XHRcdC8vIHByb2Nlc3MgdmlhYmxlIGxpbmtzIGZyb20gZ2V0TGlua3MgZm9yIGFsbCBkYXRhcG9pbnRzIGhhdmluZyBvdXRib3VuZFxuXHRcdFx0aWYgKGFTdXBwb3J0ZWRMaW5rcyAmJiBhU3VwcG9ydGVkTGlua3MubGVuZ3RoID09PSAxICYmIGFTdXBwb3J0ZWRMaW5rc1swXS5zdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBpc0hlYWRlckRQTGlua1Zpc2libGUvJHtzTGlua0lkfWAsIHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEBwYXJhbSBvU3ViRGF0YVBvaW50c1xuXHRcdCAqIEBwYXJhbSBvUGFnZURhdGFcblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmbkdldExpbmtzKG9TdWJEYXRhUG9pbnRzOiBhbnksIG9QYWdlRGF0YTogYW55KSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNJZCBpbiBvU3ViRGF0YVBvaW50cykge1xuXHRcdFx0XHRjb25zdCBvRGF0YVBvaW50ID0gb1N1YkRhdGFQb2ludHNbc0lkXTtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtczogYW55ID0ge307XG5cdFx0XHRcdGNvbnN0IG9MaW5rID0gb1ZpZXcuYnlJZChzSWQpO1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gZm9yIGRhdGEgcG9pbnRzIGNvbmZpZ3VyZWQgaW4gYXBwIGRlc2NyaXB0b3IgYnV0IG5vdCBhbm5vdGF0ZWQgaW4gdGhlIGhlYWRlclxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IG9MaW5rQ29udGV4dCA9IG9MaW5rLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IG9MaW5rRGF0YTogYW55ID0gb0xpbmtDb250ZXh0ICYmIG9MaW5rQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0bGV0IG9NaXhlZENvbnRleHQ6IGFueSA9IG1lcmdlKHt9LCBvUGFnZURhdGEsIG9MaW5rRGF0YSk7XG5cdFx0XHRcdC8vIHByb2Nlc3Mgc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdzXG5cdFx0XHRcdGlmIChvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdGNvbnN0IGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0TWFwcGluZztcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gaW4gYVNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hcHBpbmcgPSBhU2VtYW50aWNPYmplY3RNYXBwaW5nW2l0ZW1dO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc01haW5Qcm9wZXJ0eSA9IG9NYXBwaW5nW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl07XG5cdFx0XHRcdFx0XHRjb25zdCBzTWFwcGVkUHJvcGVydHkgPSBvTWFwcGluZ1tcIlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRcdFx0XHRpZiAoc01haW5Qcm9wZXJ0eSAhPT0gc01hcHBlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTWl4ZWRDb250ZXh0Lmhhc093blByb3BlcnR5KHNNYWluUHJvcGVydHkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05ld01hcHBpbmc6IGFueSA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdG9OZXdNYXBwaW5nW3NNYXBwZWRQcm9wZXJ0eV0gPSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHRcdG9NaXhlZENvbnRleHQgPSBtZXJnZSh7fSwgb01peGVkQ29udGV4dCwgb05ld01hcHBpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvTWl4ZWRDb250ZXh0W3NNYWluUHJvcGVydHldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKG9NaXhlZENvbnRleHQpIHtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNLZXkgaW4gb01peGVkQ29udGV4dCkge1xuXHRcdFx0XHRcdFx0aWYgKHNLZXkuaW5kZXhPZihcIl9cIikgIT09IDAgJiYgc0tleS5pbmRleE9mKFwib2RhdGEuY29udGV4dFwiKSA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0b1BhcmFtc1tzS2V5XSA9IG9NaXhlZENvbnRleHRbc0tleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIHZhbGlkYXRlIGlmIGEgbGluayBtdXN0IGJlIHJlbmRlcmVkXG5cdFx0XHRcdG9TaGVsbFNlcnZpY2VzXG5cdFx0XHRcdFx0LmlzTmF2aWdhdGlvblN1cHBvcnRlZChbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDoge1xuXHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBvRGF0YVBvaW50LnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRcdGFjdGlvbjogb0RhdGFQb2ludC5hY3Rpb25cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cGFyYW1zOiBvUGFyYW1zXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQudGhlbigoYUxpbmtzKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm5TZXRMaW5rRW5hYmxlbWVudChzSWQsIGFMaW5rcyk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZm5PbkVycm9yKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRoYW5kbGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBJbnZva2VzIHRoZSBwYWdlIHByaW1hcnkgYWN0aW9uIG9uIHByZXNzIG9mIEN0cmwrRW50ZXIuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXIgVGhlIHBhZ2UgY29udHJvbGxlclxuXHRcdCAqIEBwYXJhbSBvVmlld1xuXHRcdCAqIEBwYXJhbSBvQ29udGV4dCBDb250ZXh0IGZvciB3aGljaCB0aGUgYWN0aW9uIGlzIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBzQWN0aW9uTmFtZSBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uIHRvIGJlIGNhbGxlZFxuXHRcdCAqIEBwYXJhbSBbbVBhcmFtZXRlcnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLmNvbnRleHRzXSBNYW5kYXRvcnkgZm9yIGEgYm91bmQgYWN0aW9uLCBlaXRoZXIgb25lIGNvbnRleHQgb3IgYW4gYXJyYXkgd2l0aCBjb250ZXh0cyBmb3Igd2hpY2ggdGhlIGFjdGlvbiBpcyBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzLm1vZGVsXSBNYW5kYXRvcnkgZm9yIGFuIHVuYm91bmQgYWN0aW9uOyBhbiBpbnN0YW5jZSBvZiBhbiBPRGF0YSBWNCBtb2RlbFxuXHRcdCAqIEBwYXJhbSBbbUNvbmRpdGlvbnNdIENvbnRhaW5zIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uVmlzaWJsZV0gVGhlIHZpc2liaWxpdHkgb2Ygc2VtYXRpYyBwb3NpdGl2ZSBhY3Rpb25cblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZF0gVGhlIGVuYWJsZW1lbnQgb2Ygc2VtYW50aWMgcG9zaXRpdmUgYWN0aW9uXG5cdFx0ICogQHBhcmFtIFttQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZV0gVGhlIEVkaXQgYnV0dG9uIHZpc2liaWxpdHlcblx0XHQgKiBAcGFyYW0gW21Db25kaXRpb25zLmVkaXRBY3Rpb25FbmFibGVkXSBUaGUgZW5hYmxlbWVudCBvZiBFZGl0IGJ1dHRvblxuXHRcdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHRcdCAqIEBmaW5hbFxuXHRcdCAqL1xuXHRcdG9uUHJpbWFyeUFjdGlvbihcblx0XHRcdG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlcixcblx0XHRcdG9WaWV3OiBWaWV3LFxuXHRcdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0XHRzQWN0aW9uTmFtZTogc3RyaW5nLFxuXHRcdFx0bVBhcmFtZXRlcnM6IHVua25vd24sXG5cdFx0XHRtQ29uZGl0aW9uczoge1xuXHRcdFx0XHRwb3NpdGl2ZUFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdHBvc2l0aXZlQWN0aW9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHRcdFx0ZWRpdEFjdGlvblZpc2libGU6IGJvb2xlYW47XG5cdFx0XHRcdGVkaXRBY3Rpb25FbmFibGVkOiBib29sZWFuO1xuXHRcdFx0fVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgaVZpZXdMZXZlbCA9IChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLnZpZXdMZXZlbCxcblx0XHRcdFx0b09iamVjdFBhZ2UgPSBvQ29udHJvbGxlci5fZ2V0T2JqZWN0UGFnZUxheW91dENvbnRyb2woKTtcblx0XHRcdGlmIChtQ29uZGl0aW9ucy5wb3NpdGl2ZUFjdGlvblZpc2libGUpIHtcblx0XHRcdFx0aWYgKG1Db25kaXRpb25zLnBvc2l0aXZlQWN0aW9uRW5hYmxlZCkge1xuXHRcdFx0XHRcdG9Db250cm9sbGVyLmhhbmRsZXJzLm9uQ2FsbEFjdGlvbihvVmlldywgc0FjdGlvbk5hbWUsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChtQ29uZGl0aW9ucy5lZGl0QWN0aW9uVmlzaWJsZSkge1xuXHRcdFx0XHRpZiAobUNvbmRpdGlvbnMuZWRpdEFjdGlvbkVuYWJsZWQpIHtcblx0XHRcdFx0XHRvQ29udHJvbGxlci5fZWRpdERvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChpVmlld0xldmVsID09PSAxICYmIG9PYmplY3RQYWdlLmdldE1vZGVsKFwidWlcIikuZ2V0UHJvcGVydHkoXCIvaXNFZGl0YWJsZVwiKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fc2F2ZURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH0gZWxzZSBpZiAob09iamVjdFBhZ2UuZ2V0TW9kZWwoXCJ1aVwiKS5nZXRQcm9wZXJ0eShcIi9pc0VkaXRhYmxlXCIpKSB7XG5cdFx0XHRcdG9Db250cm9sbGVyLl9hcHBseURvY3VtZW50KG9Db250ZXh0KTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0b25UYWJsZUNvbnRleHRDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvU291cmNlID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdFx0bGV0IG9UYWJsZTogYW55O1xuXHRcdFx0dGhpcy5fZmluZFRhYmxlcygpLnNvbWUoZnVuY3Rpb24gKF9vVGFibGU6IGFueSkge1xuXHRcdFx0XHRpZiAoX29UYWJsZS5nZXRSb3dCaW5kaW5nKCkgPT09IG9Tb3VyY2UpIHtcblx0XHRcdFx0XHRvVGFibGUgPSBfb1RhYmxlO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBzZXQgY29ycmVjdCBiaW5kaW5nIGNvbnRleHQgZm9yIGZhc3QgY3JlYXRpb24gcm93XG5cdFx0XHRjb25zdCBmYXN0Q3JlYXRpb25Sb3cgPSBvVGFibGUuZ2V0Q3JlYXRpb25Sb3coKTtcblxuXHRcdFx0aWYgKGZhc3RDcmVhdGlvblJvdyAmJiAhZmFzdENyZWF0aW9uUm93Ll9vSW5uZXJDcmVhdGlvblJvdz8uZ2V0QmluZGluZ0NvbnRleHQoKSkge1xuXHRcdFx0XHRjb25zdCB0YWJsZUJpbmRpbmcgPSB0aGlzLl9nZXRUYWJsZUJpbmRpbmcob1RhYmxlKTtcblxuXHRcdFx0XHRpZiAoIXRhYmxlQmluZGluZykge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgRXhwZWN0ZWQgYmluZGluZyBtaXNzaW5nIGZvciB0YWJsZTogJHtvVGFibGUuZ2V0SWQoKX1gKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFibGVCaW5kaW5nLmdldENvbnRleHQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0XHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gb2JqZWN0UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQ7XG5cdFx0XHRcdFx0Y29uc3QgbW9kZWwgPSBiaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpO1xuXG5cdFx0XHRcdFx0VGFibGVIZWxwZXIuZW5hYmxlRmFzdENyZWF0aW9uUm93KFxuXHRcdFx0XHRcdFx0ZmFzdENyZWF0aW9uUm93LFxuXHRcdFx0XHRcdFx0dGFibGVCaW5kaW5nLmdldFBhdGgoKSxcblx0XHRcdFx0XHRcdHRhYmxlQmluZGluZy5nZXRDb250ZXh0KCksXG5cdFx0XHRcdFx0XHRtb2RlbCxcblx0XHRcdFx0XHRcdG9UYWJsZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIilcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9DdXJyZW50QWN0aW9uUHJvbWlzZSA9IHRoaXMuZWRpdEZsb3cuZ2V0Q3VycmVudEFjdGlvblByb21pc2UoKTtcblxuXHRcdFx0aWYgKG9DdXJyZW50QWN0aW9uUHJvbWlzZSkge1xuXHRcdFx0XHRsZXQgYVRhYmxlQ29udGV4dHM6IGFueTtcblx0XHRcdFx0aWYgKG9UYWJsZS5nZXRUeXBlKCkuZ2V0TWV0YWRhdGEoKS5pc0EoXCJzYXAudWkubWRjLnRhYmxlLkdyaWRUYWJsZVR5cGVcIikpIHtcblx0XHRcdFx0XHRhVGFibGVDb250ZXh0cyA9IG9Tb3VyY2UuZ2V0Q29udGV4dHMoMCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YVRhYmxlQ29udGV4dHMgPSBvU291cmNlLmdldEN1cnJlbnRDb250ZXh0cygpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vaWYgY29udGV4dHMgYXJlIG5vdCBmdWxseSBsb2FkZWQgdGhlIGdldGNvbnRleHRzIGZ1bmN0aW9uIGFib3ZlIHdpbGwgdHJpZ2dlciBhIG5ldyBjaGFuZ2UgZXZlbnQgY2FsbFxuXHRcdFx0XHRpZiAoIWFUYWJsZUNvbnRleHRzWzBdKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9DdXJyZW50QWN0aW9uUHJvbWlzZVxuXHRcdFx0XHRcdC50aGVuKChvQWN0aW9uUmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0aWYgKCFvQWN0aW9uUmVzcG9uc2UgfHwgb0FjdGlvblJlc3BvbnNlLmNvbnRyb2xJZCAhPT0gb1RhYmxlLnNJZCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvQWN0aW9uRGF0YSA9IG9BY3Rpb25SZXNwb25zZS5vRGF0YTtcblx0XHRcdFx0XHRcdGNvbnN0IGFLZXlzID0gb0FjdGlvblJlc3BvbnNlLmtleXM7XG5cdFx0XHRcdFx0XHRsZXQgaU5ld0l0ZW1wID0gLTE7XG5cdFx0XHRcdFx0XHRhVGFibGVDb250ZXh0cy5maW5kKGZ1bmN0aW9uIChvVGFibGVDb250ZXh0OiBhbnksIGk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvVGFibGVEYXRhID0gb1RhYmxlQ29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgYkNvbXBhcmUgPSBhS2V5cy5ldmVyeShmdW5jdGlvbiAoc0tleTogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UYWJsZURhdGFbc0tleV0gPT09IG9BY3Rpb25EYXRhW3NLZXldO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0aWYgKGJDb21wYXJlKSB7XG5cdFx0XHRcdFx0XHRcdFx0aU5ld0l0ZW1wID0gaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gYkNvbXBhcmU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmIChpTmV3SXRlbXAgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGFEaWFsb2dzID0gSW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9EaWFsb2cgPVxuXHRcdFx0XHRcdFx0XHRcdGFEaWFsb2dzLmxlbmd0aCA+IDAgPyBhRGlhbG9ncy5maW5kKChkaWFsb2cpID0+IGRpYWxvZy5kYXRhKFwiRnVsbFNjcmVlbkRpYWxvZ1wiKSAhPT0gdHJ1ZSkgOiBudWxsO1xuXHRcdFx0XHRcdFx0XHRpZiAob0RpYWxvZykge1xuXHRcdFx0XHRcdFx0XHRcdC8vIGJ5IGRlc2lnbiwgYSBzYXAubS5kaWFsb2cgc2V0IHRoZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgZm9jdXNlZCBlbGVtZW50IHdoZW4gY2xvc2luZy5cblx0XHRcdFx0XHRcdFx0XHQvLyB3ZSBzaG91bGQgd2FpdCBmb3IgdGhlIGRpYWxvZyB0byBiZSBjbG9zZSBiZWZvcmUgdG8gZm9jdXMgYW5vdGhlciBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0b0RpYWxvZy5hdHRhY2hFdmVudE9uY2UoXCJhZnRlckNsb3NlXCIsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG9UYWJsZS5mb2N1c1JvdyhpTmV3SXRlbXAsIHRydWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRoaXMuZWRpdEZsb3cuZGVsZXRlQ3VycmVudEFjdGlvblByb21pc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihgQW4gZXJyb3Igb2NjdXJzIHdoaWxlIHNjcm9sbGluZyB0byB0aGUgbmV3bHkgY3JlYXRlZCBJdGVtOiAke2Vycn1gKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIG9uIHRoZSBtZXNzYWdlIGJ1dHRvbiB3aGVuZXZlciB0aGUgdGFibGUgY29udGV4dCBjaGFuZ2VzXG5cdFx0XHR0aGlzLm1lc3NhZ2VCdXR0b24uZmlyZU1vZGVsQ29udGV4dENoYW5nZSgpO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBJbnZva2VzIGFuIGFjdGlvbiAtIGJvdW5kL3VuYm91bmQgYW5kIHNldHMgdGhlIHBhZ2UgZGlydHkuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb1ZpZXdcblx0XHQgKiBAcGFyYW0gc0FjdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGFjdGlvbiB0byBiZSBjYWxsZWRcblx0XHQgKiBAcGFyYW0gW21QYXJhbWV0ZXJzXSBDb250YWlucyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5jb250ZXh0c10gTWFuZGF0b3J5IGZvciBhIGJvdW5kIGFjdGlvbiwgZWl0aGVyIG9uZSBjb250ZXh0IG9yIGFuIGFycmF5IHdpdGggY29udGV4dHMgZm9yIHdoaWNoIHRoZSBhY3Rpb24gaXMgY2FsbGVkXG5cdFx0ICogQHBhcmFtIFttUGFyYW1ldGVycy5tb2RlbF0gTWFuZGF0b3J5IGZvciBhbiB1bmJvdW5kIGFjdGlvbjsgYW4gaW5zdGFuY2Ugb2YgYW4gT0RhdGEgVjQgbW9kZWxcblx0XHQgKiBAcmV0dXJucyBUaGUgYWN0aW9uIHByb21pc2Vcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNhbGxBY3Rpb24ob1ZpZXc6IGFueSwgc0FjdGlvbk5hbWU6IHN0cmluZywgbVBhcmFtZXRlcnM6IGFueSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIuZWRpdEZsb3dcblx0XHRcdFx0Lmludm9rZUFjdGlvbihzQWN0aW9uTmFtZSwgbVBhcmFtZXRlcnMpXG5cdFx0XHRcdC50aGVuKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlciwgdW5kZWZpbmVkKSlcblx0XHRcdFx0LmNhdGNoKG9Db250cm9sbGVyLl9zaG93TWVzc2FnZVBvcG92ZXIuYmluZChvQ29udHJvbGxlcikpO1xuXHRcdH0sXG5cdFx0b25EYXRhUG9pbnRUaXRsZVByZXNzZWQob0NvbnRyb2xsZXI6IGFueSwgb1NvdXJjZTogYW55LCBvTWFuaWZlc3RPdXRib3VuZDogYW55LCBzQ29udHJvbENvbmZpZzogYW55LCBzQ29sbGVjdGlvblBhdGg6IGFueSkge1xuXHRcdFx0b01hbmlmZXN0T3V0Ym91bmQgPSB0eXBlb2Ygb01hbmlmZXN0T3V0Ym91bmQgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKG9NYW5pZmVzdE91dGJvdW5kKSA6IG9NYW5pZmVzdE91dGJvdW5kO1xuXHRcdFx0Y29uc3Qgb1RhcmdldEluZm8gPSBvTWFuaWZlc3RPdXRib3VuZFtzQ29udHJvbENvbmZpZ10sXG5cdFx0XHRcdGFTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBDb21tb25VdGlscy5nZXRTZW1hbnRpY09iamVjdE1hcHBpbmcob1RhcmdldEluZm8pLFxuXHRcdFx0XHRvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0ID0gb1NvdXJjZS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRzTWV0YVBhdGggPSBvRGF0YVBvaW50T3JDaGFydEJpbmRpbmdDb250ZXh0XG5cdFx0XHRcdFx0LmdldE1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YU1vZGVsKClcblx0XHRcdFx0XHQuZ2V0TWV0YVBhdGgob0RhdGFQb2ludE9yQ2hhcnRCaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0bGV0IGFOYXZpZ2F0aW9uRGF0YSA9IG9Db250cm9sbGVyLl9nZXRDaGFydENvbnRleHREYXRhKG9EYXRhUG9pbnRPckNoYXJ0QmluZGluZ0NvbnRleHQsIHNDb2xsZWN0aW9uUGF0aCk7XG5cdFx0XHRsZXQgYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzO1xuXG5cdFx0XHRhTmF2aWdhdGlvbkRhdGEgPSBhTmF2aWdhdGlvbkRhdGEubWFwKGZ1bmN0aW9uIChvTmF2aWdhdGlvbkRhdGE6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGRhdGE6IG9OYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRtZXRhUGF0aDogc01ldGFQYXRoICsgKHNDb2xsZWN0aW9uUGF0aCA/IGAvJHtzQ29sbGVjdGlvblBhdGh9YCA6IFwiXCIpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHRcdGlmIChvVGFyZ2V0SW5mbyAmJiBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvVGFyZ2V0SW5mby5wYXJhbWV0ZXJzICYmIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24uZ2V0T3V0Ym91bmRQYXJhbXMob1RhcmdldEluZm8ucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9UYXJnZXRJbmZvICYmIG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0ICYmIG9UYXJnZXRJbmZvLmFjdGlvbikge1xuXHRcdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9UYXJnZXRJbmZvLnNlbWFudGljT2JqZWN0LCBvVGFyZ2V0SW5mby5hY3Rpb24sIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHM6IGFOYXZpZ2F0aW9uRGF0YSxcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdE1hcHBpbmc6IGFTZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzOiBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdFx0ICogQHBhcmFtIHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0XHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkICg/Pz8gbWF5YmUgb25seSBvbmNlIGZpbmlzaGVkPylcblx0XHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0XHQgKiBAZmluYWxcblx0XHQgKi9cblx0XHRvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQob0NvbnRyb2xsZXI6IE9iamVjdFBhZ2VDb250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IGFueSwgc0NyZWF0ZVBhdGg6IHN0cmluZykge1xuXHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ub25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyLCBzT3V0Ym91bmRUYXJnZXQsIG9Db250ZXh0LCBzQ3JlYXRlUGF0aCk7XG5cdFx0fSxcblxuXHRcdG9uTmF2aWdhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHQvL3dpbGwgYmUgY2FsbGVkIGFsd2F5cyB3aGVuIHdlIGNsaWNrIG9uIGEgc2VjdGlvbiB0YWJcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdHRoaXMuYlNlY3Rpb25OYXZpZ2F0ZWQgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb09iamVjdFBhZ2UgPSB0aGlzLl9nZXRPYmplY3RQYWdlTGF5b3V0Q29udHJvbCgpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRvT2JqZWN0UGFnZS5nZXRNb2RlbChcInVpXCIpLmdldFByb3BlcnR5KFwiL2lzRWRpdGFibGVcIikgJiZcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5zZWN0aW9uTGF5b3V0ID09PSBcIlRhYnNcIiAmJlxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJlcnJvck5hdmlnYXRpb25TZWN0aW9uRmxhZ1wiKSA9PT0gZmFsc2Vcblx0XHRcdCkge1xuXHRcdFx0XHRjb25zdCBvU3ViU2VjdGlvbiA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJzdWJTZWN0aW9uXCIpO1xuXHRcdFx0XHR0aGlzLl91cGRhdGVGb2N1c0luRWRpdE1vZGUoW29TdWJTZWN0aW9uXSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmdldEV4dGVuc2lvbkFQSSgpLnVwZGF0ZUFwcFN0YXRlKCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZDogZnVuY3Rpb24gKHRoaXM6IE9iamVjdFBhZ2VDb250cm9sbGVyKSB7XG5cdFx0XHQvL1RPRE86IFNob3VsZCByZW1vdmUgdGhpcyBzZXRUaW1lT3V0IG9uY2UgVmFyaWFudCBNYW5hZ2VtZW50IHByb3ZpZGVzIGFuIGFwaSB0byBmZXRjaCB0aGUgY3VycmVudCB2YXJpYW50IGtleSBvbiBzYXZlXG5cdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdFx0fSwgMjAwMCk7XG5cdFx0fSxcblx0XHRuYXZpZ2F0ZVRvU3ViU2VjdGlvbjogZnVuY3Rpb24gKG9Db250cm9sbGVyOiBPYmplY3RQYWdlQ29udHJvbGxlciwgdkRldGFpbENvbmZpZzogYW55KSB7XG5cdFx0XHRjb25zdCBvRGV0YWlsQ29uZmlnID0gdHlwZW9mIHZEZXRhaWxDb25maWcgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHZEZXRhaWxDb25maWcpIDogdkRldGFpbENvbmZpZztcblx0XHRcdGNvbnN0IG9PYmplY3RQYWdlID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQoXCJmZTo6T2JqZWN0UGFnZVwiKSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0bGV0IG9TZWN0aW9uO1xuXHRcdFx0bGV0IG9TdWJTZWN0aW9uO1xuXHRcdFx0aWYgKG9EZXRhaWxDb25maWcuc2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTZWN0aW9uO1xuXHRcdFx0XHRvU3ViU2VjdGlvbiA9IChcblx0XHRcdFx0XHRvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZFxuXHRcdFx0XHRcdFx0PyBvQ29udHJvbGxlci5nZXRWaWV3KCkuYnlJZChvRGV0YWlsQ29uZmlnLnN1YlNlY3Rpb25JZClcblx0XHRcdFx0XHRcdDogb1NlY3Rpb24gJiYgb1NlY3Rpb24uZ2V0U3ViU2VjdGlvbnMoKSAmJiBvU2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpWzBdXG5cdFx0XHRcdCkgYXMgT2JqZWN0UGFnZVN1YlNlY3Rpb247XG5cdFx0XHR9IGVsc2UgaWYgKG9EZXRhaWxDb25maWcuc3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdG9TdWJTZWN0aW9uID0gb0NvbnRyb2xsZXIuZ2V0VmlldygpLmJ5SWQob0RldGFpbENvbmZpZy5zdWJTZWN0aW9uSWQpIGFzIE9iamVjdFBhZ2VTdWJTZWN0aW9uO1xuXHRcdFx0XHRvU2VjdGlvbiA9IG9TdWJTZWN0aW9uICYmIChvU3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIW9TZWN0aW9uIHx8ICFvU3ViU2VjdGlvbiB8fCAhb1NlY3Rpb24uZ2V0VmlzaWJsZSgpIHx8ICFvU3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0Y29uc3Qgc1RpdGxlID0gZ2V0UmVzb3VyY2VNb2RlbChvQ29udHJvbGxlcikuZ2V0VGV4dChcblx0XHRcdFx0XHRcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIsXG5cdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdChvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSBhcyBhbnkpLmVudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRMb2cuZXJyb3Ioc1RpdGxlKTtcblx0XHRcdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b09iamVjdFBhZ2Uuc2Nyb2xsVG9TZWN0aW9uKG9TdWJTZWN0aW9uLmdldElkKCkpO1xuXHRcdFx0XHQvLyB0cmlnZ2VyIGlhcHAgc3RhdGUgY2hhbmdlXG5cdFx0XHRcdG9PYmplY3RQYWdlLmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdFx0c2VjdGlvbjogb1NlY3Rpb24sXG5cdFx0XHRcdFx0c3ViU2VjdGlvbjogb1N1YlNlY3Rpb25cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG9uU3RhdGVDaGFuZ2UodGhpczogT2JqZWN0UGFnZUNvbnRyb2xsZXIpIHtcblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdGNsb3NlT1BNZXNzYWdlU3RyaXA6IGZ1bmN0aW9uICh0aGlzOiBPYmplY3RQYWdlQ29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS5oaWRlTWVzc2FnZSgpO1xuXHRcdH1cblx0fTtcbn1cblxuZXhwb3J0IGRl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
|