@sapui5/sap.fe.core 1.141.2 → 1.142.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/core/.library +4 -1
- package/src/sap/fe/core/ActionRuntime.js +48 -23
- package/src/sap/fe/core/ActionRuntime.ts +61 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +94 -8
- package/src/sap/fe/core/AppStateHandler.js +9 -8
- package/src/sap/fe/core/AppStateHandler.ts +13 -9
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -10
- package/src/sap/fe/core/ExtensionAPI.ts +2 -14
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +20 -1
- package/src/sap/fe/core/TemplateComponent.ts +24 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
- package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
- package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
- package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
- package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/Component.js +8 -1
- package/src/sap/fe/core/fpm/Component.ts +8 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
- package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.ts +28 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -424,10 +424,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
424
424
|
this.updateOnDelete(view, message);
|
|
425
425
|
break;
|
|
426
426
|
case Activity.Activate:
|
|
427
|
-
this.draftClosedByOtherUser(view, message.clientContent, CollaborationUtils.getText("C_COLLABORATIONDRAFT_ACTIVATE", sender.name));
|
|
427
|
+
this.draftClosedByOtherUser(view, message.clientContent, CollaborationUtils.getText("C_COLLABORATIONDRAFT_ACTIVATE", sender.name), message.userAction);
|
|
428
428
|
break;
|
|
429
429
|
case Activity.Discard:
|
|
430
|
-
this.draftClosedByOtherUser(view, message.clientContent, CollaborationUtils.getText("C_COLLABORATIONDRAFT_DISCARD", sender.name));
|
|
430
|
+
this.draftClosedByOtherUser(view, message.clientContent, CollaborationUtils.getText("C_COLLABORATIONDRAFT_DISCARD", sender.name), message.userAction);
|
|
431
431
|
break;
|
|
432
432
|
case Activity.Action:
|
|
433
433
|
this.updateOnAction(view, message);
|
|
@@ -470,8 +470,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
470
470
|
* @param view The view that was used initially when connecting the websocket
|
|
471
471
|
* @param path The path of the context to navigate to
|
|
472
472
|
* @param messageText The message to display
|
|
473
|
+
* @param userAction The user action
|
|
473
474
|
*/;
|
|
474
|
-
_proto.draftClosedByOtherUser = function draftClosedByOtherUser(view, path, messageText) {
|
|
475
|
+
_proto.draftClosedByOtherUser = function draftClosedByOtherUser(view, path, messageText, userAction) {
|
|
475
476
|
this.disconnect(view);
|
|
476
477
|
MessageBox.information(messageText, {
|
|
477
478
|
onClose: async () => {
|
|
@@ -481,11 +482,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
481
482
|
// Close all open dialogs before navigating
|
|
482
483
|
InstanceManager.closeAllDialogs(() => {});
|
|
483
484
|
}
|
|
484
|
-
this.navigate(path, view);
|
|
485
|
+
this.navigate(path, view, userAction);
|
|
485
486
|
return;
|
|
486
487
|
} catch (error) {
|
|
487
488
|
Log.error("Pending Changes could not be reset - still navigating to active instance");
|
|
488
|
-
this.navigate(path, view);
|
|
489
|
+
this.navigate(path, view, userAction);
|
|
489
490
|
}
|
|
490
491
|
}
|
|
491
492
|
});
|
|
@@ -730,20 +731,37 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
730
731
|
return targetPaths.includes(context.getPath());
|
|
731
732
|
});
|
|
732
733
|
return targetContext;
|
|
733
|
-
}
|
|
734
|
-
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* Navigates after a draft was closed by another user.
|
|
738
|
+
* Navigates back if in creation mode and draft was discarded, else navigates to (recreated) target context.
|
|
739
|
+
* @param path Absolute path to navigate to
|
|
740
|
+
* @param view Current FE view
|
|
741
|
+
* @param userAction User action that triggered the navigation
|
|
742
|
+
*/;
|
|
743
|
+
_proto.navigate = function navigate(path, view, userAction) {
|
|
735
744
|
// TODO: routing.navigate doesn't consider semantic bookmarking
|
|
736
745
|
const currentPage = this.getCurrentPage(view);
|
|
737
746
|
const targetContext = view.getModel().bindContext(path).getBoundContext();
|
|
738
|
-
if (
|
|
747
|
+
if (!targetContext) {
|
|
748
|
+
Log.warning("CollaborativeDraftService.navigate: Target context could not be resolved for path " + path);
|
|
749
|
+
return;
|
|
750
|
+
}
|
|
751
|
+
const controller = currentPage.getController();
|
|
752
|
+
const routing = controller._routing;
|
|
753
|
+
const isCreationMode = controller.editFlow.getCreationMode();
|
|
754
|
+
const isDiscard = userAction === Activity.Discard;
|
|
755
|
+
if (isCreationMode && isDiscard) {
|
|
739
756
|
// If the object was a newly created one, we navigate back
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
// Otherwise we navigate to the context, but we force its recreation so that all $selects are properly computed by internalRouting
|
|
743
|
-
currentPage.getController()._routing.navigateToContext(targetContext, {
|
|
744
|
-
recreateContext: true
|
|
745
|
-
});
|
|
757
|
+
routing.navigateBackFromContext(targetContext);
|
|
758
|
+
return;
|
|
746
759
|
}
|
|
760
|
+
|
|
761
|
+
// Otherwise we navigate to the context, but we force its recreation so that all $selects are properly computed by internalRouting
|
|
762
|
+
routing.navigateToContext(targetContext, {
|
|
763
|
+
recreateContext: true
|
|
764
|
+
});
|
|
747
765
|
};
|
|
748
766
|
_proto.getCurrentPage = function getCurrentPage(view) {
|
|
749
767
|
const appComponent = CollaborationUtils.getAppComponent(view);
|
|
@@ -787,4 +805,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/controlle
|
|
|
787
805
|
_exports = CollaborativeDraftServiceFactory;
|
|
788
806
|
return _exports;
|
|
789
807
|
}, false);
|
|
790
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNWUFDVElWSVRJRVMiLCJBQ1RJVkVVU0VSUyIsIkFDVElWSVRJRVMiLCJBU1lOQ01FU1NBR0VTUVVFVUUiLCJSRVRBSU5FREFTWU5DTUVTU0FHRVMiLCJBU1lOQ01FU1NBR0VTVElNRVJJRCIsIlNZTkNHUk9VUElEIiwiREVMQVlPTkZPQ1VTIiwiQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIl9TZXJ2aWNlIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiY2hlY2tQYXRoRm9yTG9jayIsImFjdGl2aXR5TW9kZWwiLCJhY3Rpdml0eVBhdGgiLCJteUFjdGl2aXRpZXMiLCJnZXRQcm9wZXJ0eSIsImluY2x1ZGVzIiwic2V0TG9jayIsInB1c2giLCJzZXRQcm9wZXJ0eSIsInJlbW92ZUxvY2siLCJhY3Rpdml0eVBhdGhzIiwidW5kZWZpbmVkIiwicGF0aHNUb1JlbW92ZSIsIkFycmF5IiwiaXNBcnJheSIsIm15TmV3QWN0aXZpdGllcyIsImZpbHRlciIsImFjdGl2aXR5IiwibGVuZ3RoIiwiZ2V0TG9ja2VkUHJvcGVydGllcyIsImpvaW4iLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwiZWxlbWVudCIsIm9sZENvbnRleHRQYXRoIiwibmV3Q29udGV4dFBhdGgiLCJpc0Nvbm5lY3RlZCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImN1cnJlbnRRdWV1ZSIsImZvckVhY2giLCJxdWV1ZUl0ZW0iLCJwYXRoIiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJjaGFuZ2VkQWN0aXZpdGllcyIsInVuY2hhbmdlZEFjdGl2aXRpZXMiLCJsb2NrZWRQYXRoIiwibmV3bG9ja2VkUGF0aCIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkxvY2siLCJjb250ZW50IiwicmVzZXRBc3luY01lc3NhZ2VzVGltZXIiLCJ0aW1lcklkIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInF1ZXVlIiwibmV3UXVldWUiLCJwYXRoc1RvUmV0YWluIiwiaXRlbSIsImRvU2VuZCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJhZGRpdGlvbmFsUGF0aHNUb1JldGFpbiIsInJldGFpbmVkUGF0aHMiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsInBhdGhzVG9SZWxlYXNlIiwicmV0YWluZWRQYXRoIiwiaXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkIiwibWVzc2FnZSIsIlVubG9jayIsImRvU2VuZEFzeW5jIiwidHJpZ2dlcmVkQWN0aW9uTmFtZSIsInJlZnJlc2hMaXN0QmluZGluZyIsImFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXMiLCJjbGllbnRDb250ZW50IiwicmVxdWVzdGVkUHJvcGVydGllcyIsInBhdGhGb3JMb2NrIiwicmVtb3ZlZCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwicGF0aHNUb0FkZCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJ2aWV3IiwiYmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJnZXRNZXRhTW9kZWwiLCJjb25uZWN0IiwiZHJhZnRSb290Q29udGV4dCIsIm1lIiwiQ29sbGFib3JhdGlvblV0aWxzIiwiZ2V0TWUiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsInNEcmFmdFVVSUQiLCJyZXF1ZXN0UHJvcGVydHkiLCJpbml0aWFsaXplZCIsImluaXRpYWxpemVDb2xsYWJvcmF0aW9uIiwibWVzc2FnZVJlY2VpdmUiLCJkaXNjb25uZWN0IiwiZW5kQ29sbGFib3JhdGlvbiIsInVzZXJKb2luRHJhZnQiLCJhY3RpdmVVc2VycyIsInNlbmRlciIsImZpbmRJbmRleCIsInVzZXIiLCJpZCIsInVuc2hpZnQiLCJ1c2VyQWN0aW9uIiwiSm9pbiIsIkpvaW5FY2hvIiwiTG9ja0VjaG8iLCJ1c2VyTGVhdmVEcmFmdCIsImFsbEFjdGl2aXRpZXMiLCJyZW1vdmVVc2VyQWN0aXZpdGllcyIsImJhZyIsInAiLCJhY3Rpdml0aWVzIiwiYWN0aXZpdHlLZXkiLCJtZXRhUGF0aCIsImNhbGN1bGF0ZU1ldGFQYXRoIiwiY2xpZW50QWN0aW9uIiwidXNlcklEIiwibmFtZSIsInVzZXJEZXNjcmlwdGlvbiIsImluaXRpYWxzIiwiZm9ybWF0SW5pdGlhbHMiLCJjb2xvciIsImdldFVzZXJDb2xvciIsIm1hY3Rpdml0eSIsIkxlYXZlIiwiQ2hhbmdlIiwidXBkYXRlT25DaGFuZ2UiLCJDcmVhdGUiLCJ1cGRhdGVPbkNyZWF0ZSIsIkRlbGV0ZSIsInVwZGF0ZU9uRGVsZXRlIiwiQWN0aXZhdGUiLCJkcmFmdENsb3NlZEJ5T3RoZXJVc2VyIiwiZ2V0VGV4dCIsIkRpc2NhcmQiLCJBY3Rpb24iLCJ1cGRhdGVPbkFjdGlvbiIsImtleSIsImdldEFjdGl2aXR5S2V5RnJvbVBhdGgiLCJpbml0SlNPTk1vZGVsIiwicGFydHMiLCJzcGxpdCIsImkiLCJzbGljZSIsImEiLCJtZXNzYWdlVGV4dCIsIk1lc3NhZ2VCb3giLCJpbmZvcm1hdGlvbiIsIm9uQ2xvc2UiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiSW5zdGFuY2VNYW5hZ2VyIiwiaGFzT3BlbkRpYWxvZyIsImNsb3NlQWxsRGlhbG9ncyIsIm5hdmlnYXRlIiwiZXJyb3IiLCJMb2ciLCJ1cGRhdGVkT2JqZWN0c1BhdGhzIiwiY3VycmVudFBhZ2UiLCJnZXRDdXJyZW50UGFnZSIsImN1cnJlbnRDb250ZXh0IiwicmVxdWVzdFByb21pc2VzIiwibWFwIiwiYXBwbHlVcGRhdGVzRm9yQ2hhbmdlIiwiZ2V0Q29udHJvbGxlciIsImVkaXRGbG93IiwidXBkYXRlRG9jdW1lbnQiLCJQcm9taXNlIiwiYWxsIiwicHJvcGVydHlQYXRoRm9yVXBkYXRlIiwibWV0YU1vZGVsIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImRhdGFNb2RlbE9iamVjdCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldENvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJ0YXJnZXRDb250ZXh0IiwiZmluZENvbnRleHRGb3JVcGRhdGUiLCJwYXJlbnRDb2xsZWN0aW9uUGF0aCIsInBhcmVudENvbnRleHRQYXRoIiwicGFyZW50Q29udGV4dCIsInNpZGVFZmZlY3RzUHJvbWlzZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJ0YXJnZXRNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsInJlbGF0aXZlTWV0YVBhdGhGb3JVcGRhdGUiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJmaWVsZEdyb3VwSWRzIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidGFyZ2V0T2JqZWN0IiwicGFnZUNvbnRyb2xsZXIiLCJzaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXAiLCJfc2lkZUVmZmVjdHMiLCJnZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzIiwiT2JqZWN0Iiwia2V5cyIsInNpZGVFZmZlY3ROYW1lIiwic2lkZUVmZmVjdCIsInNpZGVFZmZlY3RzIiwiY29udGV4dCIsImVyciIsImN1cnJlbnRQYXRoIiwiZGVsZXRlZE9iamVjdFBhdGhzIiwiZGVsZXRlZFBhdGhJblVzZSIsImZpbmQiLCJkZWxldGVkUGF0aCIsImdldEtlZXBBbGl2ZUNvbnRleHQiLCJzZXRLZWVwQWxpdmUiLCJyZXF1ZXN0UHJvbWlzZSIsImFwcGx5VXBkYXRlc0ZvckNvbGxlY3Rpb24iLCJfcm91dGluZyIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwiY3JlYXRlZE9iamVjdFBhdGhzIiwicGF0aEluQ29sbGVjdGlvbiIsImFwcENvbXBvbmVudCIsInBhcmVudFBhdGgiLCJtZXRhUGF0aEZvclVwZGF0ZSIsInBhcmVudE1ldGFQYXRoIiwicmVsYXRpdmVQYXRoIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5IiwicGF0aHNGb3JBY3Rpb24iLCJhY3Rpb25OYW1lIiwiY2xpZW50VHJpZ2dlcmVkQWN0aW9uTmFtZSIsImNsaWVudFJlcXVlc3RlZFByb3BlcnRpZXMiLCJjbGllbnRSZWZyZXNoTGlzdEJpbmRpbmciLCJyZXF1ZXN0VXBkYXRlRm9yQWN0aW9uIiwicGF0aEZvckFjdGlvbiIsInNpZGVFZmZlY3RTZXJ2aWNlIiwic2lkZUVmZmVjdHNGcm9tQWN0aW9uIiwiZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RQcm9taXNlcyIsInBhdGhFeHByZXNzaW9ucyIsIm1ldGFQYXRoRm9yQWN0aW9uIiwiZGF0YU1vZGVsUGF0aCIsImdldENvbnRleHQiLCJwcm9wZXJ0aWVzVG9SZXF1ZXN0IiwiZW50aXR5UHJvcGVydGllcyIsInByb3BlcnR5IiwicHJvcCIsInRhcmdldFBhdGhzIiwiZW5kc1dpdGgiLCJtb2RlbCIsInBhcmVudExpc3RCaW5kaW5nIiwiZ2V0QWxsQmluZGluZ3MiLCJiaW5kaW5nIiwiYmluZGluZ1BhdGgiLCJpc1JlbGF0aXZlIiwiZ2V0UmVzb2x2ZWRQYXRoIiwiaXNBIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJnZXRDcmVhdGlvbk1vZGUiLCJuYXZpZ2F0ZVRvQ29udGV4dCIsInJlY3JlYXRlQ29udGV4dCIsImdldEN1cnJlbnRQYWdlVmlldyIsImRhdGFQYXRoIiwiaW5pdCIsImluaXRQcm9taXNlIiwicmVzb2x2ZSIsIlNlcnZpY2UiLCJDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeSIsIl9TZXJ2aWNlRmFjdG9yeSIsIl9wcm90bzIiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsImNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQge1xuXHRicm9hZGNhc3RDb2xsYWJvcmF0aW9uTWVzc2FnZSxcblx0ZW5kQ29sbGFib3JhdGlvbixcblx0aW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24sXG5cdGlzQ29sbGFib3JhdGlvbkNvbm5lY3RlZFxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9BY3Rpdml0eUJhc2VcIjtcbmltcG9ydCB0eXBlIHsgTWVzc2FnZSwgVXNlciwgVXNlckFjdGl2aXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IHsgQWN0aXZpdHksIENvbGxhYm9yYXRpb25VdGlscywgZ2V0QWN0aXZpdHlLZXlGcm9tUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IEluc3RhbmNlTWFuYWdlciBmcm9tIFwic2FwL20vSW5zdGFuY2VNYW5hZ2VyXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcblxuY29uc3QgTVlBQ1RJVklUSUVTID0gXCIvY29sbGFib3JhdGlvbi9teUFjdGl2aXRpZXNcIjtcbmNvbnN0IEFDVElWRVVTRVJTID0gXCIvY29sbGFib3JhdGlvbi9hY3RpdmVVc2Vyc1wiO1xuY29uc3QgQUNUSVZJVElFUyA9IFwiL2NvbGxhYm9yYXRpb24vYWN0aXZpdGllc1wiO1xuY29uc3QgQVNZTkNNRVNTQUdFU1FVRVVFID0gXCIvY29sbGFib3JhdGlvbi9hc3luY01zZ1F1ZXVlXCI7XG5jb25zdCBSRVRBSU5FREFTWU5DTUVTU0FHRVMgPSBcIi9jb2xsYWJvcmF0aW9uL3JldGFpbmVkTWVzc2FnZXNcIjtcbmNvbnN0IEFTWU5DTUVTU0FHRVNUSU1FUklEID0gXCIvY29sbGFib3JhdGlvbi9hc3luY01zZ1RpbWVySWRcIjtcbmNvbnN0IFNZTkNHUk9VUElEID0gXCIkYXV0by5zeW5jXCI7XG5cbmNvbnN0IERFTEFZT05GT0NVUyA9IDUwMDsgLy8gNTAwbXMgZGVsYXkgZm9yIGFzeW5jIExPQ0svVU5MT0NLIG1lc3NhZ2VzXG5cbnR5cGUgQXN5bmNNZXNzYWdlID0ge1xuXHRwYXRoOiBzdHJpbmc7XG5cdGFjdGlvbjogQWN0aXZpdHkuVW5sb2NrIHwgQWN0aXZpdHkuTG9jaztcbn07XG5cbmV4cG9ydCBjbGFzcyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeT4ge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZT47XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGdpdmVuIHBhdGggaXMgbG9ja2VkIGJ5IHRoZSBjdXJyZW50IHVzZXIuXG5cdCAqIEBwYXJhbSBhY3Rpdml0eU1vZGVsXG5cdCAqIEBwYXJhbSBhY3Rpdml0eVBhdGhcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcGF0aCBpcyBsb2NrZWRcblx0ICovXG5cdGNoZWNrUGF0aEZvckxvY2soYWN0aXZpdHlNb2RlbDogSlNPTk1vZGVsLCBhY3Rpdml0eVBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG15QWN0aXZpdGllczogc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsID0gYWN0aXZpdHlNb2RlbC5nZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMpO1xuXHRcdGlmICghbXlBY3Rpdml0aWVzKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBteUFjdGl2aXRpZXMuaW5jbHVkZXMoYWN0aXZpdHlQYXRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyBhIHBhdGggYXMgbG9ja2VkIGZvciB0aGUgY3VycmVudCB1c2VyLlxuXHQgKiBAcGFyYW0gYWN0aXZpdHlNb2RlbFxuXHQgKiBAcGFyYW0gYWN0aXZpdHlQYXRoXG5cdCAqL1xuXHRzZXRMb2NrKGFjdGl2aXR5TW9kZWw6IEpTT05Nb2RlbCwgYWN0aXZpdHlQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBteUFjdGl2aXRpZXM6IHN0cmluZ1tdID0gYWN0aXZpdHlNb2RlbC5nZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMpID8/IFtdO1xuXHRcdGlmICghbXlBY3Rpdml0aWVzLmluY2x1ZGVzKGFjdGl2aXR5UGF0aCkpIHtcblx0XHRcdG15QWN0aXZpdGllcy5wdXNoKGFjdGl2aXR5UGF0aCk7XG5cdFx0fVxuXG5cdFx0YWN0aXZpdHlNb2RlbC5zZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMsIG15QWN0aXZpdGllcyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgbG9jayBmb3IgYSBnaXZlbiBwYXRoLlxuXHQgKiBAcGFyYW0gYWN0aXZpdHlNb2RlbFxuXHQgKiBAcGFyYW0gYWN0aXZpdHlQYXRoc1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwYXRoIHdhcyBwcmV2aW91c2x5IGxvY2tlZFxuXHQgKi9cblx0cmVtb3ZlTG9jayhhY3Rpdml0eU1vZGVsOiBKU09OTW9kZWwsIGFjdGl2aXR5UGF0aHM6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbXlBY3Rpdml0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBhY3Rpdml0eU1vZGVsLmdldFByb3BlcnR5KE1ZQUNUSVZJVElFUyk7XG5cdFx0aWYgKCFteUFjdGl2aXRpZXMgfHwgYWN0aXZpdHlQYXRocyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGF0aHNUb1JlbW92ZSA9IEFycmF5LmlzQXJyYXkoYWN0aXZpdHlQYXRocykgPyBhY3Rpdml0eVBhdGhzIDogW2FjdGl2aXR5UGF0aHNdO1xuXHRcdGNvbnN0IG15TmV3QWN0aXZpdGllcyA9IG15QWN0aXZpdGllcy5maWx0ZXIoKGFjdGl2aXR5KSA9PiB7XG5cdFx0XHRyZXR1cm4gIXBhdGhzVG9SZW1vdmUuaW5jbHVkZXMoYWN0aXZpdHkpO1xuXHRcdH0pO1xuXHRcdGFjdGl2aXR5TW9kZWwuc2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTLCBteU5ld0FjdGl2aXRpZXMpO1xuXG5cdFx0cmV0dXJuIG15TmV3QWN0aXZpdGllcy5sZW5ndGggIT09IG15QWN0aXZpdGllcy5sZW5ndGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhbGwgbG9ja2VkIHBhdGhzIGZvciB0aGUgY3VycmVudCB1c2VyLlxuXHQgKiBAcGFyYW0gYWN0aXZpdHlNb2RlbFxuXHQgKiBAcmV0dXJucyBDb25jYXRlbmF0ZWQgcGF0aHMgZm9yIGFsbCBsb2NrZWQgcHJvcGVydGllc1xuXHQgKi9cblx0Z2V0TG9ja2VkUHJvcGVydGllcyhhY3Rpdml0eU1vZGVsOiBKU09OTW9kZWwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG15QWN0aXZpdGllczogc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsID0gYWN0aXZpdHlNb2RlbC5nZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMpO1xuXHRcdGlmICghbXlBY3Rpdml0aWVzKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbXlBY3Rpdml0aWVzLmpvaW4oXCJ8XCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIGFsbCBjdXJyZW50IGxvY2tzIGJ5IGNoYW5naW5nIGEgY29udGV4dCBwYXRoLlxuXHQgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIGFjdGl2YXRpbmcgYSBjb250ZXh0LCB3aGVyZSB0aGUgaW5pdGlhbCBsb2NrcyB3ZXJlIHVzaW5nIHRoZSB0cmFuc2llbnQgcGF0aFxuXHQgKiBhbmQgbmVlZCB0byBiZSB1cGRhdGVkIHdpdGggdGhlIGFjdHVhbCBwYXRoLlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcGFyYW0gb2xkQ29udGV4dFBhdGhcblx0ICogQHBhcmFtIG5ld0NvbnRleHRQYXRoXG5cdCAqL1xuXHR1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoKGVsZW1lbnQ6IFVJNUVsZW1lbnQsIG9sZENvbnRleHRQYXRoOiBzdHJpbmcsIG5ld0NvbnRleHRQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaXNDb25uZWN0ZWQoZWxlbWVudCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZWxlbWVudC5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRcdC8vIFJlcGxhY2UgcGF0aHMgaW4gcGVuZGluZyBhc3luYyBtZXNzYWdlc1xuXHRcdGNvbnN0IGN1cnJlbnRRdWV1ZTogQXN5bmNNZXNzYWdlW10gPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNRVUVVRSk7XG5cdFx0Y3VycmVudFF1ZXVlLmZvckVhY2goKHF1ZXVlSXRlbSkgPT4ge1xuXHRcdFx0aWYgKHF1ZXVlSXRlbS5wYXRoLnN0YXJ0c1dpdGgob2xkQ29udGV4dFBhdGgpKSB7XG5cdFx0XHRcdHF1ZXVlSXRlbS5wYXRoID0gcXVldWVJdGVtLnBhdGgucmVwbGFjZShvbGRDb250ZXh0UGF0aCwgbmV3Q29udGV4dFBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gUmVwbGFjZSBwYXRocyBpbiBleGlzdGluZyBsb2NrcyAoYW5kIGJyb2FkY2FzdCB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIGlmIG5lY2Vzc2FyeSlcblx0XHRjb25zdCBteUFjdGl2aXRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTKTtcblx0XHRpZiAobXlBY3Rpdml0aWVzKSB7XG5cdFx0XHRjb25zdCBjaGFuZ2VkQWN0aXZpdGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGNvbnN0IHVuY2hhbmdlZEFjdGl2aXRpZXM6IHN0cmluZ1tdID0gW107XG5cdFx0XHRteUFjdGl2aXRpZXMuZm9yRWFjaCgobG9ja2VkUGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAobG9ja2VkUGF0aC5zdGFydHNXaXRoKG9sZENvbnRleHRQYXRoKSkge1xuXHRcdFx0XHRcdC8vIFJlcGxhY2UgdGhlIHBhdGggaW4gdGhlIGxpc3Qgb2YgbG9ja3MsIGFuZCBzdG9yZSB0aGlzIHBhdGggZm9yIHNlbmRpbmcgYSBuZXcgTE9DSyBtZXNzYWdlXG5cdFx0XHRcdFx0Y29uc3QgbmV3bG9ja2VkUGF0aCA9IGxvY2tlZFBhdGgucmVwbGFjZShvbGRDb250ZXh0UGF0aCwgbmV3Q29udGV4dFBhdGgpO1xuXHRcdFx0XHRcdGNoYW5nZWRBY3Rpdml0aWVzLnB1c2gobmV3bG9ja2VkUGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5jaGFuZ2VkQWN0aXZpdGllcy5wdXNoKGxvY2tlZFBhdGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMsIHVuY2hhbmdlZEFjdGl2aXRpZXMpO1xuXHRcdFx0aWYgKGNoYW5nZWRBY3Rpdml0aWVzLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHR0aGlzLnNlbmQoZWxlbWVudCwgeyBhY3Rpb246IEFjdGl2aXR5LkxvY2ssIGNvbnRlbnQ6IGNoYW5nZWRBY3Rpdml0aWVzIH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNldHMgdGhlIHRpbWVyIGZvciBzZW5kaW5nIGFzeW5jaHJvbm91cyBjb2xsYWJvcmF0aW9uIG1lc3NhZ2VzLlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbFxuXHQgKi9cblx0cmVzZXRBc3luY01lc3NhZ2VzVGltZXIoaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0bGV0IHRpbWVySWQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNUSU1FUklEKTtcblx0XHRpZiAodGltZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGltZXJJZCk7XG5cdFx0fVxuXG5cdFx0dGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgcXVldWU6IEFzeW5jTWVzc2FnZVtdIHwgdW5kZWZpbmVkID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTUVVFVUUpO1xuXHRcdFx0Y29uc3QgbmV3UXVldWU6IEFzeW5jTWVzc2FnZVtdID0gW107XG5cdFx0XHRjb25zdCBwYXRoc1RvUmV0YWluOiBzdHJpbmdbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoUkVUQUlORURBU1lOQ01FU1NBR0VTKSA/PyBbXTtcblxuXHRcdFx0aWYgKCFxdWV1ZSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHF1ZXVlLmZvckVhY2goKGl0ZW0pID0+IHtcblx0XHRcdFx0aWYgKHBhdGhzVG9SZXRhaW4uaW5jbHVkZXMoaXRlbS5wYXRoKSkge1xuXHRcdFx0XHRcdG5ld1F1ZXVlLnB1c2goaXRlbSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kb1NlbmQoaW50ZXJuYWxNb2RlbCwgaXRlbS5hY3Rpb24sIGl0ZW0ucGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNRVUVVRSwgbmV3UXVldWUpO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTVElNRVJJRCwgdW5kZWZpbmVkKTtcblxuXHRcdFx0aWYgKG5ld1F1ZXVlLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBJZiBzb21lIG1lc3NhZ2VzIGFyZSBzdGlsbCBwZW5kaW5nLCByZXNjaGVkdWxlIGEgbmV3IHRpbWVyXG5cdFx0XHRcdHRoaXMucmVzZXRBc3luY01lc3NhZ2VzVGltZXIoaW50ZXJuYWxNb2RlbCk7XG5cdFx0XHR9XG5cdFx0fSwgREVMQVlPTkZPQ1VTKTtcblxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1RJTUVSSUQsIHRpbWVySWQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hcmsgc29tZSBwYXRocyBhcyBiZWluZyByZXRhaW5lZCwgaS5lLiBhc3luYyBtZXNzYWdlcyBmb3IgdGhlc2UgcGF0aHMgd29uJ3QgYmUgc2VudCBidXQga2VwdCB1bnRpbCB0aGV5J3JlIHJlbGVhc2VkLlxuXHQgKiBUaGlzIGFwcGxpZXMgdG8gZXhpc3RpbmcgYXN5bmMgbWVzc2FnZXMgaW4gdGhlIHF1ZXVlLCBidXQgYWxzbyB0byBmdXR1cmUgbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEBwYXJhbSBhY3Rpdml0eVBhdGhzIFRoZSBwYXRocyB0byBiZSByZXRhaW5lZFxuXHQgKi9cblx0cmV0YWluQXN5bmNNZXNzYWdlcyhlbGVtZW50OiBVSTVFbGVtZW50LCBhY3Rpdml0eVBhdGhzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBlbGVtZW50LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXHRcdGNvbnN0IGFkZGl0aW9uYWxQYXRoc1RvUmV0YWluID0gQXJyYXkuaXNBcnJheShhY3Rpdml0eVBhdGhzKSA/IGFjdGl2aXR5UGF0aHMgOiBbYWN0aXZpdHlQYXRoc107XG5cblx0XHRjb25zdCByZXRhaW5lZFBhdGhzOiBzdHJpbmdbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoUkVUQUlORURBU1lOQ01FU1NBR0VTKTtcblx0XHRhZGRpdGlvbmFsUGF0aHNUb1JldGFpbi5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRpZiAoIXJldGFpbmVkUGF0aHMuaW5jbHVkZXMocGF0aCkpIHtcblx0XHRcdFx0cmV0YWluZWRQYXRocy5wdXNoKHBhdGgpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbGVhc2UgYXN5bmMgbWVzc2FnZXMgZm9yIHNvbWUgcGF0aHMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcmV0YWluZWQuXG5cdCAqIFRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2VzIGFyZSBub3Qgc2VudCBpbW1lZGlhdGVseSwgYnV0IHRoZSBuZXh0IHRpbWUgdGhlIGFzeW5jIHRpbWVyIHdha2VzIHVwLlxuXHQgKiBAcGFyYW0gZWxlbWVudFxuXHQgKiBAcGFyYW0gYWN0aXZpdHlQYXRocyBUaGUgcGF0aHMgdG8gYmUgcmVsZWFzZWRcblx0ICovXG5cdHJlbGVhc2VBc3luY01lc3NhZ2VzKGVsZW1lbnQ6IFVJNUVsZW1lbnQsIGFjdGl2aXR5UGF0aHM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGVsZW1lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Y29uc3QgcGF0aHNUb1JldGFpbjogc3RyaW5nW10gPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFJFVEFJTkVEQVNZTkNNRVNTQUdFUyk7XG5cdFx0Y29uc3QgcGF0aHNUb1JlbGVhc2UgPSBBcnJheS5pc0FycmF5KGFjdGl2aXR5UGF0aHMpID8gYWN0aXZpdHlQYXRocyA6IFthY3Rpdml0eVBhdGhzXTtcblxuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRSRVRBSU5FREFTWU5DTUVTU0FHRVMsXG5cdFx0XHRwYXRoc1RvUmV0YWluLmZpbHRlcigocmV0YWluZWRQYXRoKSA9PiB7XG5cdFx0XHRcdHJldHVybiAhcGF0aHNUb1JlbGVhc2UuaW5jbHVkZXMocmV0YWluZWRQYXRoKTtcblx0XHRcdH0pXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBjb2xsYWJvcmF0aW9uIHNlc3Npb24gaXMgY3VycmVudGx5IG9wZW4uXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEByZXR1cm5zIFRydWUgaWYgYSBjb2xsYWJvcmF0aW9uIHNlc3Npb24gaXMgY3VycmVudGx5IG9wZW4uXG5cdCAqL1xuXHRpc0Nvbm5lY3RlZChlbGVtZW50OiBVSTVFbGVtZW50KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGVsZW1lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0cmV0dXJuIGlzQ29sbGFib3JhdGlvbkNvbm5lY3RlZChpbnRlcm5hbE1vZGVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZW5kcyBhIGNvbGxhYm9yYXRpb24gbWVzc2FnZSB0byBvdGhlciBjb25uZWN0ZWQgdXNlcnMuXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEBwYXJhbSBtZXNzYWdlXG5cdCAqIEBwYXJhbSBtZXNzYWdlLmFjdGlvblxuXHQgKiBAcGFyYW0gbWVzc2FnZS5jb250ZW50XG5cdCAqIEBwYXJhbSBtZXNzYWdlLnRyaWdnZXJlZEFjdGlvbk5hbWVcblx0ICogQHBhcmFtIG1lc3NhZ2UucmVmcmVzaExpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSBtZXNzYWdlLmFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXNcblx0ICovXG5cdHB1YmxpYyBzZW5kKFxuXHRcdGVsZW1lbnQ6IFVJNUVsZW1lbnQsXG5cdFx0bWVzc2FnZToge1xuXHRcdFx0YWN0aW9uOiBBY3Rpdml0eTtcblx0XHRcdGNvbnRlbnQ6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXHRcdFx0dHJpZ2dlcmVkQWN0aW9uTmFtZT86IHN0cmluZztcblx0XHRcdHJlZnJlc2hMaXN0QmluZGluZz86IGJvb2xlYW47XG5cdFx0XHRhY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzPzogc3RyaW5nW107XG5cdFx0fVxuXHQpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5pc0Nvbm5lY3RlZChlbGVtZW50KSkge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGVsZW1lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRpZiAobWVzc2FnZS5hY3Rpb24gPT09IEFjdGl2aXR5LkxvY2sgfHwgbWVzc2FnZS5hY3Rpb24gPT09IEFjdGl2aXR5LlVubG9jaykge1xuXHRcdFx0XHQvLyBMb2NrLXJlbGF0ZWQgZXZlbnRzIGFyZSBhbHdheXMgc2VudCB3aXRoIHNvbWUgZGVsYXlcblx0XHRcdFx0dGhpcy5kb1NlbmRBc3luYyhpbnRlcm5hbE1vZGVsLCBtZXNzYWdlLmFjdGlvbiwgbWVzc2FnZS5jb250ZW50KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuZG9TZW5kKFxuXHRcdFx0XHRcdGludGVybmFsTW9kZWwsXG5cdFx0XHRcdFx0bWVzc2FnZS5hY3Rpb24sXG5cdFx0XHRcdFx0bWVzc2FnZS5jb250ZW50LFxuXHRcdFx0XHRcdG1lc3NhZ2UudHJpZ2dlcmVkQWN0aW9uTmFtZSxcblx0XHRcdFx0XHRtZXNzYWdlLnJlZnJlc2hMaXN0QmluZGluZyxcblx0XHRcdFx0XHRtZXNzYWdlLmFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXNcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc2VuZCBhIGNvbGxhYm9yYXRpb24gbWVzc2FnZSBpbW1lZGlhdGVseS5cblx0ICogQHBhcmFtIGludGVybmFsTW9kZWxcblx0ICogQHBhcmFtIGFjdGlvblxuXHQgKiBAcGFyYW0gY29udGVudFxuXHQgKiBAcGFyYW0gdHJpZ2dlcmVkQWN0aW9uTmFtZVxuXHQgKiBAcGFyYW0gcmVmcmVzaExpc3RCaW5kaW5nXG5cdCAqIEBwYXJhbSBhY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzXG5cdCAqL1xuXHRkb1NlbmQoXG5cdFx0aW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLFxuXHRcdGFjdGlvbjogQWN0aXZpdHksXG5cdFx0Y29udGVudDogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQsXG5cdFx0dHJpZ2dlcmVkQWN0aW9uTmFtZT86IHN0cmluZyxcblx0XHRyZWZyZXNoTGlzdEJpbmRpbmc/OiBib29sZWFuLFxuXHRcdGFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXM/OiBzdHJpbmdbXVxuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBjbGllbnRDb250ZW50ID0gKEFycmF5LmlzQXJyYXkoY29udGVudCkgPyBjb250ZW50LmpvaW4oXCJ8XCIpIDogY29udGVudCkgPz8gXCJcIjtcblx0XHRjb25zdCByZXF1ZXN0ZWRQcm9wZXJ0aWVzID0gYWN0aW9uUmVxdWVzdGVkUHJvcGVydGllcz8uam9pbihcInxcIik7XG5cdFx0aWYgKGFjdGlvbiA9PT0gQWN0aXZpdHkuTG9jaykge1xuXHRcdFx0Y29uc3QgcGF0aEZvckxvY2sgPSAoQXJyYXkuaXNBcnJheShjb250ZW50KSA/IGNvbnRlbnRbMF0gOiBjb250ZW50KSA/PyBcIlwiO1xuXHRcdFx0Ly8gVG8gYXZvaWQgdW5uZWNlc3NhcnkgdHJhZmZpYyB3ZSBrZWVwIHRyYWNrIG9mIGxvY2sgY2hhbmdlcyBhbmQgc2VuZCBpdCBvbmx5IG9uY2Vcblx0XHRcdGlmICh0aGlzLmNoZWNrUGF0aEZvckxvY2soaW50ZXJuYWxNb2RlbCwgcGF0aEZvckxvY2spKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMuc2V0TG9jayhpbnRlcm5hbE1vZGVsLCBwYXRoRm9yTG9jayk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChhY3Rpb24gPT09IEFjdGl2aXR5LlVubG9jaykge1xuXHRcdFx0Y29uc3QgcmVtb3ZlZCA9IHRoaXMucmVtb3ZlTG9jayhpbnRlcm5hbE1vZGVsLCBjb250ZW50KTtcblx0XHRcdC8vIE5vIG5lZWQgdG8gc2VuZCBhbiBVbmxvY2sgbWVzc2FnZSBpZiBpdCB3YXMgbm90IGFscmVhZHkgbG9ja2VkXG5cdFx0XHRpZiAoIXJlbW92ZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKGFjdGlvbiwgY2xpZW50Q29udGVudCwgaW50ZXJuYWxNb2RlbCwgdHJpZ2dlcmVkQWN0aW9uTmFtZSwgcmVmcmVzaExpc3RCaW5kaW5nLCByZXF1ZXN0ZWRQcm9wZXJ0aWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzZW5kIGEgY29sbGFib3JhdGlvbiBtZXNzYWdlIGFzeW5jaHJvbm91c2x5LlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBjb250ZW50XG5cdCAqL1xuXHRkb1NlbmRBc3luYyhpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIGFjdGlvbjogQWN0aXZpdHkuTG9jayB8IEFjdGl2aXR5LlVubG9jaywgY29udGVudDogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAoY29udGVudCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGN1cnJlbnRRdWV1ZTogQXN5bmNNZXNzYWdlW10gPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNRVUVVRSk7XG5cdFx0Y29uc3QgcGF0aHNUb0FkZCA9IEFycmF5LmlzQXJyYXkoY29udGVudCkgPyBjb250ZW50IDogW2NvbnRlbnRdO1xuXHRcdC8vIFJlbW92ZSBleGlzdGluZyBpdGVtcyBpbiB0aGUgcXVldWUgZm9yIHRoZSBwYXRocyB0aGF0IHdpbGwgYmUgYWRkZWRcblx0XHRjb25zdCBuZXdRdWV1ZSA9IGN1cnJlbnRRdWV1ZS5maWx0ZXIoKGl0ZW0pID0+IHtcblx0XHRcdHJldHVybiAhcGF0aHNUb0FkZC5pbmNsdWRlcyhpdGVtLnBhdGgpO1xuXHRcdH0pO1xuXHRcdHBhdGhzVG9BZGQuZm9yRWFjaCgocGF0aCkgPT4ge1xuXHRcdFx0bmV3UXVldWUucHVzaCh7IHBhdGgsIGFjdGlvbiB9KTtcblx0XHR9KTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNRVUVVRSwgbmV3UXVldWUpO1xuXHRcdHRoaXMucmVzZXRBc3luY01lc3NhZ2VzVGltZXIoaW50ZXJuYWxNb2RlbCk7XG5cdH1cblxuXHRpc0NvbGxhYm9yYXRpb25FbmFibGVkKHZpZXc6IFZpZXcpOiBib29sZWFuIHtcblx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IHZpZXc/LmdldEJpbmRpbmdDb250ZXh0ICYmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dCk7XG5cdFx0cmV0dXJuICEhKGJpbmRpbmdDb250ZXh0ICYmIE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKGJpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBlc3RhYmxpc2ggYSBjb25uZWN0aW9uIHdpdGggYSBjb2xsYWJvcmF0aXZlIGRyYWZ0IHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBkcmFmdFJvb3RDb250ZXh0IFRoZSBkcmFmdCByb290IGNvbnRleHRcblx0ICogQHBhcmFtIHZpZXcgIFRoZSB2aWV3IHRoYXQgaXMgdXNlZCB0byBjb25uZWN0IHRoZSB3ZWJzb2NrZXRcblx0ICogQHJldHVybnMgUHJvbWlzZVxuXHQgKi9cblx0YXN5bmMgY29ubmVjdChkcmFmdFJvb3RDb250ZXh0OiBDb250ZXh0LCB2aWV3OiBGRVZpZXcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IG1lID0gQ29sbGFib3JhdGlvblV0aWxzLmdldE1lKENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KSk7XG5cblx0XHQvLyBSZXRyaWV2aW5nIE1FIGZyb20gc2hlbGwgc2VydmljZVxuXHRcdGlmICghbWUpIHtcblx0XHRcdC8vIG5vIG1lID0gbm8gc2hlbGwgPSBub3Qgc3VyZSB3aGF0IHRvIGRvXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0RyYWZ0VVVJRCA9IGF3YWl0IGRyYWZ0Um9vdENvbnRleHQucmVxdWVzdFByb3BlcnR5KFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRVVUlEXCIpO1xuXHRcdGlmICghc0RyYWZ0VVVJRCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluaXRpYWxpemVkID0gaW5pdGlhbGl6ZUNvbGxhYm9yYXRpb24oXG5cdFx0XHRtZSxcblx0XHRcdHNEcmFmdFVVSUQsXG5cdFx0XHRpbnRlcm5hbE1vZGVsLFxuXHRcdFx0KG1lc3NhZ2U6IE1lc3NhZ2UpID0+IHtcblx0XHRcdFx0dGhpcy5tZXNzYWdlUmVjZWl2ZShtZXNzYWdlLCB2aWV3KTtcblx0XHRcdH0sXG5cdFx0XHR2aWV3XG5cdFx0KTtcblxuXHRcdGlmIChpbml0aWFsaXplZCkge1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFLCBbXSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KFJFVEFJTkVEQVNZTkNNRVNTQUdFUywgW10pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBjbG9zZSBhIGNvbm5lY3Rpb24gd2l0aCBhIGNvbGxhYm9yYXRpdmUgZHJhZnQgc2VydmljZS5cblx0ICogQHBhcmFtIHZpZXcgQ3VycmVudCBWaWV3XG5cdCAqL1xuXHRkaXNjb25uZWN0KHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0ZW5kQ29sbGFib3JhdGlvbihpbnRlcm5hbE1vZGVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byB1cGRhdGUgaW50ZXJuYWwgbW9kZWwgd2hlbiBhIHVzZXIgam9pbnMgdGhlIGRyYWZ0LlxuXHQgKiBAcGFyYW0gYWN0aXZlVXNlcnMgTGlzdCBvZiBjb25uZWN0ZWQgdXNlcnNcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWwgSW50ZXJuYWwgbW9kZWxcblx0ICogQHBhcmFtIHNlbmRlciBVc2VyIHNlbmRpbmcgdGhlIEpPSU4gb3IgSk9JTkVDSE8gbWVzc2FnZVxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZVxuXHQgKiBAcGFyYW0gdmlldyBDdXJyZW50IFZpZXdcblx0ICovXG5cdHVzZXJKb2luRHJhZnQoYWN0aXZlVXNlcnM6IFVzZXJbXSwgaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBzZW5kZXI6IFVzZXIsIG1lc3NhZ2U6IE1lc3NhZ2UsIHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGlmIChhY3RpdmVVc2Vycy5maW5kSW5kZXgoKHVzZXIpID0+IHVzZXIuaWQgPT09IHNlbmRlci5pZCkgPT09IC0xKSB7XG5cdFx0XHRhY3RpdmVVc2Vycy51bnNoaWZ0KHNlbmRlcik7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWRVVTRVJTLCBhY3RpdmVVc2Vycyk7XG5cdFx0fVxuXG5cdFx0aWYgKG1lc3NhZ2UudXNlckFjdGlvbiA9PT0gQWN0aXZpdHkuSm9pbikge1xuXHRcdFx0Ly8gd2UgZWNobyBvdXIgZXhpc3RlbmNlIHRvIHRoZSBuZXdseSBlbnRlcmVkIHVzZXIgYW5kIGFsc28gc2VuZCB0aGUgY3VycmVudCBhY3Rpdml0eSBpZiB0aGVyZSBpcyBhbnlcblx0XHRcdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlKEFjdGl2aXR5LkpvaW5FY2hvLCB0aGlzLmdldExvY2tlZFByb3BlcnRpZXMoaW50ZXJuYWxNb2RlbCksIGludGVybmFsTW9kZWwpO1xuXHRcdH1cblxuXHRcdGlmIChtZXNzYWdlLnVzZXJBY3Rpb24gPT09IEFjdGl2aXR5LkpvaW5FY2hvKSB7XG5cdFx0XHRpZiAobWVzc2FnZS5jbGllbnRDb250ZW50KSB7XG5cdFx0XHRcdC8vIGFub3RoZXIgdXNlciB3YXMgYWxyZWFkeSB0eXBpbmcgdGhlcmVmb3JlIEkgd2FudCB0byBzZWUgaGlzIGFjdGl2aXR5IGltbWVkaWF0ZWx5LiBDYWxsaW5nIG1lIGFnYWluIGFzIGEgbGl2ZSBjaGFuZ2Vcblx0XHRcdFx0bWVzc2FnZS51c2VyQWN0aW9uID0gQWN0aXZpdHkuTG9ja0VjaG87XG5cdFx0XHRcdHRoaXMubWVzc2FnZVJlY2VpdmUobWVzc2FnZSwgdmlldyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIHVwZGF0ZSBpbnRlcm5hbCBtb2RlbCB3aGVuIGEgdXNlciBsZWF2ZXMgdGhlIGRyYWZ0LlxuXHQgKiBAcGFyYW0gYWN0aXZlVXNlcnMgTGlzdCBvZiBjb25uZWN0ZWQgdXNlcnNcblx0ICogQHBhcmFtIGludGVybmFsTW9kZWwgSW50ZXJuYWwgbW9kZWxcblx0ICogQHBhcmFtIHNlbmRlciBVc2VyIHNlbmRpbmcgdGhlIEpPSU4gb3IgSk9JTkVDSE8gbWVzc2FnZVxuXHQgKi9cblx0dXNlckxlYXZlRHJhZnQoYWN0aXZlVXNlcnM6IFVzZXJbXSwgaW50ZXJuYWxNb2RlbDogSlNPTk1vZGVsLCBzZW5kZXI6IFVzZXIpOiB2b2lkIHtcblx0XHQvLyBSZW1vdmluZyB0aGUgYWN0aXZlIHVzZXIuIE5vdCByZW1vdmluZyBcIm1lXCIgaWYgSSBoYWQgdGhlIHNjcmVlbiBvcGVuIGluIGFub3RoZXIgc2Vzc2lvblxuXHRcdGFjdGl2ZVVzZXJzID0gYWN0aXZlVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiB1c2VyLmlkICE9PSBzZW5kZXIuaWQgfHwgdXNlci5tZSk7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBQ1RJVkVVU0VSUywgYWN0aXZlVXNlcnMpO1xuXHRcdGNvbnN0IGFsbEFjdGl2aXRpZXMgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KEFDVElWSVRJRVMpIHx8IHt9O1xuXHRcdGNvbnN0IHJlbW92ZVVzZXJBY3Rpdml0aWVzID0gZnVuY3Rpb24gKGJhZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBVc2VyQWN0aXZpdHlbXSk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgVXNlckFjdGl2aXR5W10ge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYmFnKSkge1xuXHRcdFx0XHRyZXR1cm4gYmFnLmZpbHRlcigoYWN0aXZpdHkpID0+IGFjdGl2aXR5LmlkICE9PSBzZW5kZXIuaWQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yIChjb25zdCBwIGluIGJhZykge1xuXHRcdFx0XHRcdGJhZ1twXSA9IHJlbW92ZVVzZXJBY3Rpdml0aWVzKGJhZ1twXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFVzZXJBY3Rpdml0eVtdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYmFnO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmVtb3ZlVXNlckFjdGl2aXRpZXMoYWxsQWN0aXZpdGllcyk7XG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBQ1RJVklUSUVTLCBhbGxBY3Rpdml0aWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsYmFjayB3aGVuIGEgbWVzc2FnZSBpcyByZWNlaXZlZCBmcm9tIHRoZSB3ZWJzb2NrZXQuXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHJlY2VpdmVkXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqL1xuXHRtZXNzYWdlUmVjZWl2ZShtZXNzYWdlOiBNZXNzYWdlLCB2aWV3OiBGRVZpZXcpOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdGNvbnN0IGFjdGl2ZVVzZXJzOiBVc2VyW10gPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KEFDVElWRVVTRVJTKTtcblx0XHRsZXQgYWN0aXZpdGllczogVXNlckFjdGl2aXR5W107XG5cdFx0bGV0IGFjdGl2aXR5S2V5OiBzdHJpbmc7XG5cdFx0Y29uc3QgbWV0YVBhdGggPSB0aGlzLmNhbGN1bGF0ZU1ldGFQYXRoKHZpZXcsIG1lc3NhZ2UuY2xpZW50Q29udGVudCk7XG5cdFx0bWVzc2FnZS51c2VyQWN0aW9uID0gbWVzc2FnZS51c2VyQWN0aW9uIHx8IG1lc3NhZ2UuY2xpZW50QWN0aW9uO1xuXG5cdFx0Y29uc3Qgc2VuZGVyOiBVc2VyID0ge1xuXHRcdFx0aWQ6IG1lc3NhZ2UudXNlcklELFxuXHRcdFx0bmFtZTogbWVzc2FnZS51c2VyRGVzY3JpcHRpb24sXG5cdFx0XHRpbml0aWFsczogQ29sbGFib3JhdGlvblV0aWxzLmZvcm1hdEluaXRpYWxzKG1lc3NhZ2UudXNlckRlc2NyaXB0aW9uKSxcblx0XHRcdGNvbG9yOiBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VXNlckNvbG9yKG1lc3NhZ2UudXNlcklELCBhY3RpdmVVc2VycywgW10pXG5cdFx0fTtcblxuXHRcdGxldCBtYWN0aXZpdHk6IFVzZXJBY3Rpdml0eSA9IHNlbmRlcjtcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2Vcblx0XHRzd2l0Y2ggKG1lc3NhZ2UudXNlckFjdGlvbikge1xuXHRcdFx0Y2FzZSBBY3Rpdml0eS5Kb2luOlxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5Kb2luRWNobzpcblx0XHRcdFx0dGhpcy51c2VySm9pbkRyYWZ0KGFjdGl2ZVVzZXJzLCBpbnRlcm5hbE1vZGVsLCBzZW5kZXIsIG1lc3NhZ2UsIHZpZXcpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5MZWF2ZTpcblx0XHRcdFx0dGhpcy51c2VyTGVhdmVEcmFmdChhY3RpdmVVc2VycywgaW50ZXJuYWxNb2RlbCwgc2VuZGVyKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuQ2hhbmdlOlxuXHRcdFx0XHR0aGlzLnVwZGF0ZU9uQ2hhbmdlKHZpZXcsIG1lc3NhZ2UpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5DcmVhdGU6XG5cdFx0XHRcdC8vIEZvciBjcmVhdGUgd2UgYWN0dWFsbHkganVzdCBuZWVkIHRvIHJlZnJlc2ggdGhlIHRhYmxlXG5cdFx0XHRcdHRoaXMudXBkYXRlT25DcmVhdGUodmlldywgbWVzc2FnZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkRlbGV0ZTpcblx0XHRcdFx0Ly8gRm9yIG5vdyBhbHNvIHJlZnJlc2ggdGhlIHBhZ2UgYnV0IGluIGNhc2Ugb2YgZGVsZXRpb24gd2UgbmVlZCB0byBpbmZvcm0gdGhlIHVzZXJcblx0XHRcdFx0dGhpcy51cGRhdGVPbkRlbGV0ZSh2aWV3LCBtZXNzYWdlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuQWN0aXZhdGU6XG5cdFx0XHRcdHRoaXMuZHJhZnRDbG9zZWRCeU90aGVyVXNlcihcblx0XHRcdFx0XHR2aWV3LFxuXHRcdFx0XHRcdG1lc3NhZ2UuY2xpZW50Q29udGVudCxcblx0XHRcdFx0XHRDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0FDVElWQVRFXCIsIHNlbmRlci5uYW1lKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5EaXNjYXJkOlxuXHRcdFx0XHR0aGlzLmRyYWZ0Q2xvc2VkQnlPdGhlclVzZXIoXG5cdFx0XHRcdFx0dmlldyxcblx0XHRcdFx0XHRtZXNzYWdlLmNsaWVudENvbnRlbnQsXG5cdFx0XHRcdFx0Q29sbGFib3JhdGlvblV0aWxzLmdldFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9ESVNDQVJEXCIsIHNlbmRlci5uYW1lKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5BY3Rpb246XG5cdFx0XHRcdHRoaXMudXBkYXRlT25BY3Rpb24odmlldywgbWVzc2FnZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkxvY2s6XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkxvY2tFY2hvOlxuXHRcdFx0XHRtYWN0aXZpdHkgPSBzZW5kZXI7XG5cdFx0XHRcdG1hY3Rpdml0eS5rZXkgPSBnZXRBY3Rpdml0eUtleUZyb21QYXRoKG1lc3NhZ2UuY2xpZW50Q29udGVudCk7XG5cblx0XHRcdFx0Ly8gc3R1cGlkIEpTT04gbW9kZWwuLi5cblx0XHRcdFx0bGV0IGluaXRKU09OTW9kZWwgPSBcIlwiO1xuXHRcdFx0XHRjb25zdCBwYXJ0cyA9IG1ldGFQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRpbml0SlNPTk1vZGVsICs9IGAvJHtwYXJ0c1tpXX1gO1xuXHRcdFx0XHRcdGlmICghaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShBQ1RJVklUSUVTICsgaW5pdEpTT05Nb2RlbCkpIHtcblx0XHRcdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQUNUSVZJVElFUyArIGluaXRKU09OTW9kZWwsIHt9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY3Rpdml0aWVzID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShBQ1RJVklUSUVTICsgbWV0YVBhdGgpO1xuXHRcdFx0XHRhY3Rpdml0aWVzID0gYWN0aXZpdGllcz8uc2xpY2UgPyBhY3Rpdml0aWVzLnNsaWNlKCkgOiBbXTtcblx0XHRcdFx0YWN0aXZpdGllcy5wdXNoKG1hY3Rpdml0eSk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoLCBhY3Rpdml0aWVzKTtcblx0XHRcdFx0aWYgKG1lc3NhZ2UudXNlckFjdGlvbiA9PT0gQWN0aXZpdHkuTG9ja0VjaG8gJiYgdGhpcy5jaGVja1BhdGhGb3JMb2NrKGludGVybmFsTW9kZWwsIG1lc3NhZ2UuY2xpZW50Q29udGVudCkpIHtcblx0XHRcdFx0XHQvLyBUaGUgY3VycmVudCB1c2VyIGhhcyBsb2NrZWQgdGhpcyBwYXRoIHJpZ2h0IGFmdGVyIGNvbm5lY3Rpb24sIGJlZm9yZSBrbm93aW5nIGl0IHdhcyBhbHJlYWR5IGxvY2tlZCBieSBzb21lb25lIGVsc2Vcblx0XHRcdFx0XHQvLyAtLT4gcmVtb3ZlIHRoZSBjdXJyZW50IGxvY2tcblx0XHRcdFx0XHR0aGlzLmRvU2VuZChpbnRlcm5hbE1vZGVsLCBBY3Rpdml0eS5VbmxvY2ssIG1lc3NhZ2UuY2xpZW50Q29udGVudCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuVW5sb2NrOlxuXHRcdFx0XHQvLyBUaGUgdXNlciBkaWQgYSBjaGFuZ2UgYnV0IHJldmVydGVkIGl0LCB0aGVyZWZvcmUgdW5ibG9jayB0aGUgY29udHJvbFxuXHRcdFx0XHRhY3Rpdml0aWVzID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShBQ1RJVklUSUVTICsgbWV0YVBhdGgpO1xuXHRcdFx0XHRhY3Rpdml0eUtleSA9IGdldEFjdGl2aXR5S2V5RnJvbVBhdGgobWVzc2FnZS5jbGllbnRDb250ZW50KTtcblx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBQ1RJVklUSUVTICsgbWV0YVBhdGgsIGFjdGl2aXRpZXM/LmZpbHRlcigoYSkgPT4gYS5rZXkgIT09IGFjdGl2aXR5S2V5KSk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBhIG1lc3NhZ2UgdGhhdCB0aGUgY3VycmVudCBkcmFmdCB3YXMgY2xvc2VkIGJlIGFub3RoZXIgdXNlciwgYW5kIG5hdmlnYXRlcyBiYWNrIHRvIGEgcHJvcGVyIHZpZXcuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIG5hdmlnYXRlIHRvXG5cdCAqIEBwYXJhbSBtZXNzYWdlVGV4dCBUaGUgbWVzc2FnZSB0byBkaXNwbGF5XG5cdCAqL1xuXHRkcmFmdENsb3NlZEJ5T3RoZXJVc2VyKHZpZXc6IEZFVmlldywgcGF0aDogc3RyaW5nLCBtZXNzYWdlVGV4dDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5kaXNjb25uZWN0KHZpZXcpO1xuXHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24obWVzc2FnZVRleHQsIHtcblx0XHRcdG9uQ2xvc2U6IGFzeW5jICgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhd2FpdCB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0QmluZGluZygpLnJlc2V0Q2hhbmdlcygpO1xuXHRcdFx0XHRcdGlmIChJbnN0YW5jZU1hbmFnZXIuaGFzT3BlbkRpYWxvZygpKSB7XG5cdFx0XHRcdFx0XHQvLyBDbG9zZSBhbGwgb3BlbiBkaWFsb2dzIGJlZm9yZSBuYXZpZ2F0aW5nXG5cdFx0XHRcdFx0XHRJbnN0YW5jZU1hbmFnZXIuY2xvc2VBbGxEaWFsb2dzKCgpID0+IHt9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5uYXZpZ2F0ZShwYXRoLCB2aWV3KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiUGVuZGluZyBDaGFuZ2VzIGNvdWxkIG5vdCBiZSByZXNldCAtIHN0aWxsIG5hdmlnYXRpbmcgdG8gYWN0aXZlIGluc3RhbmNlXCIpO1xuXHRcdFx0XHRcdHRoaXMubmF2aWdhdGUocGF0aCwgdmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIGRhdGEgd2hlbiBhIENIQU5HRSBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSB3ZWJzb2NrZXRcblx0ICovXG5cdHVwZGF0ZU9uQ2hhbmdlKHZpZXc6IEZFVmlldywgbWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdGNvbnN0IHVwZGF0ZWRPYmplY3RzUGF0aHMgPSBtZXNzYWdlLmNsaWVudENvbnRlbnQuc3BsaXQoXCJ8XCIpO1xuXG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpO1xuXHRcdGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gY3VycmVudFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCByZXF1ZXN0UHJvbWlzZXMgPSB1cGRhdGVkT2JqZWN0c1BhdGhzLm1hcChhc3luYyAocGF0aCkgPT4gdGhpcy5hcHBseVVwZGF0ZXNGb3JDaGFuZ2UodmlldywgcGF0aCkpO1xuXG5cdFx0Ly8gU2ltdWxhdGUgYW55IGNoYW5nZSBzbyB0aGUgZWRpdCBmbG93IHNob3dzIHRoZSBkcmFmdCBpbmRpY2F0b3IgYW5kIHNldHMgdGhlIHBhZ2UgdG8gZGlydHlcblx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkuZWRpdEZsb3cudXBkYXRlRG9jdW1lbnQoY3VycmVudENvbnRleHQsIFByb21pc2UuYWxsKHJlcXVlc3RQcm9taXNlcykpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgZGF0YSBjb3JyZXNwb25kaW5nIHRvIGEgcGF0aC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIHByb3BlcnR5UGF0aEZvclVwZGF0ZSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSB1cGRhdGVkIHByb3BlcnR5XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBkYXRhIGFuZCBpdHMgcmVsYXRlZCBzaWRlIGVmZmVjdHMgaGF2ZSBiZWVuIHJlY2VpdmVkXG5cdCAqL1xuXHRhc3luYyBhcHBseVVwZGF0ZXNGb3JDaGFuZ2UodmlldzogRkVWaWV3LCBwcm9wZXJ0eVBhdGhGb3JVcGRhdGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtZXRhQ29udGV4dCA9IG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChwcm9wZXJ0eVBhdGhGb3JVcGRhdGUpO1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UHJvcGVydHk+KG1ldGFDb250ZXh0KTtcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0UGF0aCA9IHByb3BlcnR5UGF0aEZvclVwZGF0ZS5zdWJzdHJpbmcoMCwgcHJvcGVydHlQYXRoRm9yVXBkYXRlLmxhc3RJbmRleE9mKFwiL1wiKSk7IC8vIFJlbW92ZSBwcm9wZXJ0eSBuYW1lXG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dCA9IHRoaXMuZmluZENvbnRleHRGb3JVcGRhdGUodmlldywgdGFyZ2V0Q29udGV4dFBhdGgpO1xuXHRcdGNvbnN0IHBhcmVudENvbGxlY3Rpb25QYXRoID0gdGFyZ2V0Q29udGV4dFBhdGguc3Vic3RyaW5nKDAsIHRhcmdldENvbnRleHRQYXRoLmxhc3RJbmRleE9mKFwiKFwiKSk7XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dFBhdGggPSBwYXJlbnRDb2xsZWN0aW9uUGF0aC5zdWJzdHJpbmcoMCwgcGFyZW50Q29sbGVjdGlvblBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRjb25zdCBwYXJlbnRDb250ZXh0ID0gcGFyZW50Q29udGV4dFBhdGggPyB0aGlzLmZpbmRDb250ZXh0Rm9yVXBkYXRlKHZpZXcsIHBhcmVudENvbnRleHRQYXRoKSA6IHVuZGVmaW5lZDtcblxuXHRcdGlmICghdGFyZ2V0Q29udGV4dCAmJiAhcGFyZW50Q29udGV4dCkge1xuXHRcdFx0cmV0dXJuOyAvLyBObyBjb250ZXh0IGZvciB1cGRhdGVcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNQcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpLmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXG5cdFx0XHRpZiAodGFyZ2V0Q29udGV4dCkge1xuXHRcdFx0XHQvLyBXZSBoYXZlIGEgdGFyZ2V0IGNvbnRleHQsIHNvIHdlIGNhbiByZXRyaWV2ZSB0aGUgdXBkYXRlZCBwcm9wZXJ0eVxuXHRcdFx0XHRjb25zdCB0YXJnZXRNZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aCh0YXJnZXRDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdGNvbnN0IHJlbGF0aXZlTWV0YVBhdGhGb3JVcGRhdGUgPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocHJvcGVydHlQYXRoRm9yVXBkYXRlKS5yZXBsYWNlKHRhcmdldE1ldGFQYXRoLCBcIlwiKS5zbGljZSgxKTtcblx0XHRcdFx0c2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3JlbGF0aXZlTWV0YVBhdGhGb3JVcGRhdGVdLCB0YXJnZXRDb250ZXh0LCBTWU5DR1JPVVBJRCkpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBHZXQgdGhlIGZpZWxkR3JvdXBJZHMgY29ycmVzcG9uZGluZyB0byBwYXRoRm9yVXBkYXRlXG5cdFx0XHRjb25zdCBmaWVsZEdyb3VwSWRzID0gc2lkZUVmZmVjdHNTZXJ2aWNlLmNvbXB1dGVGaWVsZEdyb3VwSWRzKFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3QudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsXG5cdFx0XHRcdGRhdGFNb2RlbE9iamVjdC50YXJnZXRPYmplY3QhLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgZmllbGRHcm91cElkc1xuXHRcdFx0aWYgKGZpZWxkR3JvdXBJZHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHBhZ2VDb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cCA9IHBhZ2VDb250cm9sbGVyLl9zaWRlRWZmZWN0cy5nZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzKFxuXHRcdFx0XHRcdGZpZWxkR3JvdXBJZHMsXG5cdFx0XHRcdFx0dGFyZ2V0Q29udGV4dCB8fCBwYXJlbnRDb250ZXh0XG5cdFx0XHRcdCkgYXMgRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblx0XHRcdFx0T2JqZWN0LmtleXMoc2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwKS5mb3JFYWNoKChzaWRlRWZmZWN0TmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3QgPSBzaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBbc2lkZUVmZmVjdE5hbWVdO1xuXHRcdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRcdHBhZ2VDb250cm9sbGVyLl9zaWRlRWZmZWN0cy5yZXF1ZXN0U2lkZUVmZmVjdHMoXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3Quc2lkZUVmZmVjdHMsXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3QuY29udGV4dCxcblx0XHRcdFx0XHRcdFx0U1lOQ0dST1VQSUQsXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbChzaWRlRWZmZWN0c1Byb21pc2VzKTtcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgZGF0YSBhZnRlciBjaGFuZ2U6XCIgKyBlcnIpO1xuXHRcdFx0dGhyb3cgZXJyO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIGRhdGEgd2hlbiBhIERFTEVURSBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSB3ZWJzb2NrZXRcblx0ICovXG5cdHVwZGF0ZU9uRGVsZXRlKHZpZXc6IFZpZXcsIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2Uodmlldyk7XG5cdFx0Y29uc3QgY3VycmVudENvbnRleHQgPSBjdXJyZW50UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gY3VycmVudENvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Y29uc3QgZGVsZXRlZE9iamVjdFBhdGhzID0gbWVzc2FnZS5jbGllbnRDb250ZW50LnNwbGl0KFwifFwiKTtcblxuXHRcdC8vIGNoZWNrIGlmIHVzZXIgY3VycmVudGx5IGRpc3BsYXlzIGEgZGVsZXRlZCBvYmplY3Qgb3Igb25lIG9mIGl0cyBkZXNjZW5kYW50c1xuXHRcdGNvbnN0IGRlbGV0ZWRQYXRoSW5Vc2UgPSBkZWxldGVkT2JqZWN0UGF0aHMuZmluZCgoZGVsZXRlZFBhdGgpID0+IGN1cnJlbnRQYXRoLnN0YXJ0c1dpdGgoZGVsZXRlZFBhdGgpKTtcblx0XHRpZiAoZGVsZXRlZFBhdGhJblVzZSkge1xuXHRcdFx0Ly8gYW55IG90aGVyIHVzZXIgZGVsZXRlZCB0aGUgb2JqZWN0IEknbSBjdXJyZW50bHkgbG9va2luZyBhdC4gSW5mb3JtIHRoZSB1c2VyIHdlIHdpbGwgbmF2aWdhdGUgdG8gcm9vdCBub3dcblx0XHRcdE1lc3NhZ2VCb3guaW5mb3JtYXRpb24oQ29sbGFib3JhdGlvblV0aWxzLmdldFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9ERUxFVEVcIiwgbWVzc2FnZS51c2VyRGVzY3JpcHRpb24pLCB7XG5cdFx0XHRcdG9uQ2xvc2U6ICgpID0+IHtcblx0XHRcdFx0XHQvLyBXZSByZXRyaWV2ZSB0aGUgZGVsZXRlZCBjb250ZXh0IGFzIGEga2VlcC1hbGl2ZSwgYW5kIGRpc2FibGUgaXRzIGtlZXBhbGl2ZSBzdGF0dXMsXG5cdFx0XHRcdFx0Ly8gc28gdGhhdCBpdCBpcyBwcm9wZXJseSBkZXN0cm95ZWQgd2hlbiByZWZyZXNoaW5nIGRhdGFcblx0XHRcdFx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gY3VycmVudENvbnRleHQuZ2V0TW9kZWwoKS5nZXRLZWVwQWxpdmVDb250ZXh0KGRlbGV0ZWRQYXRoSW5Vc2UpO1xuXHRcdFx0XHRcdHRhcmdldENvbnRleHQuc2V0S2VlcEFsaXZlKGZhbHNlKTtcblx0XHRcdFx0XHRjb25zdCByZXF1ZXN0UHJvbWlzZSA9IHRoaXMuYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbih2aWV3LCBkZWxldGVkT2JqZWN0UGF0aHNbMF0pO1xuXHRcdFx0XHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy51cGRhdGVEb2N1bWVudChjdXJyZW50UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpLCByZXF1ZXN0UHJvbWlzZSk7XG5cdFx0XHRcdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLl9yb3V0aW5nLm5hdmlnYXRlQmFja0Zyb21Db250ZXh0KHRhcmdldENvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmFwcGx5VXBkYXRlc0ZvckNvbGxlY3Rpb24odmlldywgZGVsZXRlZE9iamVjdFBhdGhzWzBdKTtcblx0XHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy51cGRhdGVEb2N1bWVudChjdXJyZW50UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpLCByZXF1ZXN0UHJvbWlzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgZGF0YSB3aGVuIGEgQ1JFQVRFIG1lc3NhZ2UgaGFzIGJlZW4gcmVjZWl2ZWQuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldFxuXHQgKi9cblx0dXBkYXRlT25DcmVhdGUodmlldzogVmlldywgbWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KTtcblx0XHRjb25zdCBjcmVhdGVkT2JqZWN0UGF0aHMgPSBtZXNzYWdlLmNsaWVudENvbnRlbnQuc3BsaXQoXCJ8XCIpO1xuXG5cdFx0Y29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmFwcGx5VXBkYXRlc0ZvckNvbGxlY3Rpb24odmlldywgY3JlYXRlZE9iamVjdFBhdGhzWzBdKTtcblx0XHQvLyBTaW11bGF0ZSBhIGNoYW5nZSBzbyB0aGUgZWRpdCBmbG93IHNob3dzIHRoZSBkcmFmdCBpbmRpY2F0b3IgYW5kIHNldHMgdGhlIHBhZ2UgdG8gZGlydHlcblx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkuZWRpdEZsb3cudXBkYXRlRG9jdW1lbnQoY3VycmVudFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSwgcmVxdWVzdFByb21pc2UpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgZGF0YSBpbiBhIGNvbGxlY3Rpb24uXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBwYXRoSW5Db2xsZWN0aW9uIEEgcGF0aCB0byBhbiBlbnRpdHkgaW4gdGhlIGNvbGxlY3Rpb25cblx0ICovXG5cdGFzeW5jIGFwcGx5VXBkYXRlc0ZvckNvbGxlY3Rpb24odmlldzogVmlldywgcGF0aEluQ29sbGVjdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29sbGFib3JhdGlvblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KTtcblx0XHRjb25zdCBwYXJlbnRQYXRoID0gcGF0aEluQ29sbGVjdGlvbi5zdWJzdHJpbmcoMCwgcGF0aEluQ29sbGVjdGlvbi5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdGNvbnN0IHBhcmVudENvbnRleHQgPSB0aGlzLmZpbmRDb250ZXh0Rm9yVXBkYXRlKHZpZXcsIHBhcmVudFBhdGgpO1xuXG5cdFx0aWYgKHBhcmVudENvbnRleHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG5cdFx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHBhcmVudENvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdFx0Y29uc3QgbWV0YVBhdGhGb3JVcGRhdGUgPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgocGF0aEluQ29sbGVjdGlvbik7XG5cdFx0XHRcdGNvbnN0IHBhcmVudE1ldGFQYXRoID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhcmVudENvbnRleHQuZ2V0UGF0aCgpKTtcblx0XHRcdFx0Y29uc3QgcmVsYXRpdmVQYXRoID0gbWV0YVBhdGhGb3JVcGRhdGUucmVwbGFjZShgJHtwYXJlbnRNZXRhUGF0aH0vYCwgXCJcIik7XG5cblx0XHRcdFx0Ly8gUmVsb2FkIHRoZSBjb2xsZWN0aW9uXG5cdFx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRcdFx0c2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoW3JlbGF0aXZlUGF0aF0sIHBhcmVudENvbnRleHQsIFNZTkNHUk9VUElEKSk7XG5cblx0XHRcdFx0Ly8gUmVxdWVzdCB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgY29sbGVjdGlvblxuXHRcdFx0XHRzaWRlRWZmZWN0c1Byb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0c0Zvck5hdmlnYXRpb25Qcm9wZXJ0eShyZWxhdGl2ZVBhdGgsIHBhcmVudENvbnRleHQsIFNZTkNHUk9VUElELCB0cnVlKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHNpZGVFZmZlY3RzUHJvbWlzZXMpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkZhaWxlZCB0byB1cGRhdGUgZGF0YSBhZnRlciBjb2xsZWN0aW9uIHVwZGF0ZTpcIiArIGVycik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgZGF0YSB3aGVuIGEgQUNUSU9OIG1lc3NhZ2UgaGFzIGJlZW4gcmVjZWl2ZWQuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldFxuXHQgKi9cblx0dXBkYXRlT25BY3Rpb24odmlldzogRkVWaWV3LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpO1xuXHRcdGNvbnN0IHBhdGhzRm9yQWN0aW9uID0gbWVzc2FnZS5jbGllbnRDb250ZW50LnNwbGl0KFwifFwiKTtcblx0XHRjb25zdCBhY3Rpb25OYW1lID0gbWVzc2FnZS5jbGllbnRUcmlnZ2VyZWRBY3Rpb25OYW1lIHx8IFwiXCI7XG5cdFx0Y29uc3QgcmVxdWVzdGVkUHJvcGVydGllcyA9IG1lc3NhZ2UuY2xpZW50UmVxdWVzdGVkUHJvcGVydGllcz8uc3BsaXQoXCJ8XCIpO1xuXHRcdGNvbnN0IHJlZnJlc2hMaXN0QmluZGluZyA9IG1lc3NhZ2UuY2xpZW50UmVmcmVzaExpc3RCaW5kaW5nID09PSBcInRydWVcIjtcblxuXHRcdGxldCByZXF1ZXN0UHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuXG5cdFx0aWYgKHJlZnJlc2hMaXN0QmluZGluZykge1xuXHRcdFx0cmVxdWVzdFByb21pc2VzLnB1c2godGhpcy5hcHBseVVwZGF0ZXNGb3JDb2xsZWN0aW9uKHZpZXcsIHBhdGhzRm9yQWN0aW9uWzBdKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlcXVlc3RQcm9taXNlcyA9IHBhdGhzRm9yQWN0aW9uLm1hcChhc3luYyAocGF0aCkgPT4gdGhpcy5yZXF1ZXN0VXBkYXRlRm9yQWN0aW9uKHZpZXcsIHBhdGgsIGFjdGlvbk5hbWUsIHJlcXVlc3RlZFByb3BlcnRpZXMpKTtcblx0XHR9XG5cblx0XHQvLyBTaW11bGF0ZSBhbnkgY2hhbmdlIHNvIHRoZSBlZGl0IGZsb3cgc2hvd3MgdGhlIGRyYWZ0IGluZGljYXRvciBhbmQgc2V0cyB0aGUgcGFnZSB0byBkaXJ0eVxuXHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5lZGl0Rmxvdy51cGRhdGVEb2N1bWVudChjdXJyZW50UGFnZS5nZXRCaW5kaW5nQ29udGV4dCgpLCBQcm9taXNlLmFsbChyZXF1ZXN0UHJvbWlzZXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIHNpZGUtZWZmZWN0cyBkYXRhIHdoZW4gYW4gYWN0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBvbiBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBwYXRoRm9yQWN0aW9uIFBhdGggb2YgdGhlIGNvbnRleHQgdG8gYXBwbHkgdGhlIGFjdGlvbiB0b1xuXHQgKiBAcGFyYW0gYWN0aW9uTmFtZSBOYW1lIG9mIHRoZSBhY3Rpb25cblx0ICogQHBhcmFtIHJlcXVlc3RlZFByb3BlcnRpZXNcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCB3aGVuIHRoZSBzaWRlLWVmZmVjdHMgZGF0YSBoYXMgYmVlbiBsb2FkZWRcblx0ICovXG5cdGFzeW5jIHJlcXVlc3RVcGRhdGVGb3JBY3Rpb24odmlldzogRkVWaWV3LCBwYXRoRm9yQWN0aW9uOiBzdHJpbmcsIGFjdGlvbk5hbWU6IHN0cmluZywgcmVxdWVzdGVkUHJvcGVydGllcz86IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dCA9IHRoaXMuZmluZENvbnRleHRGb3JVcGRhdGUodmlldywgcGF0aEZvckFjdGlvbik7XG5cdFx0aWYgKCF0YXJnZXRDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29sbGFib3JhdGlvblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KTtcblx0XHRjb25zdCBzaWRlRWZmZWN0U2VydmljZSA9IGFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHRjb25zdCBzaWRlRWZmZWN0c0Zyb21BY3Rpb24gPSBzaWRlRWZmZWN0U2VydmljZS5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKGFjdGlvbk5hbWUsIHRhcmdldENvbnRleHQpO1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RQcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0aWYgKHNpZGVFZmZlY3RzRnJvbUFjdGlvbikge1xuXHRcdFx0aWYgKHNpZGVFZmZlY3RzRnJvbUFjdGlvbi5wYXRoRXhwcmVzc2lvbnM/Lmxlbmd0aCkge1xuXHRcdFx0XHRzaWRlRWZmZWN0UHJvbWlzZXMucHVzaChcblx0XHRcdFx0XHRzaWRlRWZmZWN0U2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNGcm9tQWN0aW9uLnBhdGhFeHByZXNzaW9ucywgdGFyZ2V0Q29udGV4dCwgU1lOQ0dST1VQSUQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChyZXF1ZXN0ZWRQcm9wZXJ0aWVzICYmIHJlcXVlc3RlZFByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly9jbGVhbi11cCBvZiB0aGUgcHJvcGVydGllcyB0byByZXF1ZXN0IGxpc3Q6XG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBtZXRhUGF0aEZvckFjdGlvbiA9IHRoaXMuY2FsY3VsYXRlTWV0YVBhdGgodmlldywgcGF0aEZvckFjdGlvbik7XG5cdFx0XHRjb25zdCBkYXRhTW9kZWxQYXRoID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0Q29udGV4dChtZXRhUGF0aEZvckFjdGlvbikpO1xuXHRcdFx0Y29uc3QgcHJvcGVydGllc1RvUmVxdWVzdCA9IGRhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzXG5cdFx0XHRcdC5tYXAoKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5uYW1lO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wKSA9PiByZXF1ZXN0ZWRQcm9wZXJ0aWVzLmluY2x1ZGVzKHByb3ApKTtcblx0XHRcdGlmIChwcm9wZXJ0aWVzVG9SZXF1ZXN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdFx0c2lkZUVmZmVjdFByb21pc2VzLnB1c2goc2lkZUVmZmVjdFNlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKHByb3BlcnRpZXNUb1JlcXVlc3QsIHRhcmdldENvbnRleHQsIFNZTkNHUk9VUElEKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoc2lkZUVmZmVjdFByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGaW5kcyBhIGNvbnRleHQgdG8gYXBwbHkgYW4gdXBkYXRlIG1lc3NhZ2UgKENIQU5HRSwgQ1JFQVRFLCBERUxFVEUgb3IgQUNUSU9OKS5cblx0ICogQHBhcmFtIHZpZXcgIFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBjb250ZXh0IHRvIGJlIGZvdW5kIChzaGFsbCBwb2ludCB0byBhbiBlbnRpdHksIG5vdCBhIHByb3BlcnR5KVxuXHQgKiBAcmV0dXJucyBBIGNvbnRleHQgaWYgaXQgY291bGQgYmUgZm91bmRcblx0ICovXG5cdGZpbmRDb250ZXh0Rm9yVXBkYXRlKHZpZXc6IFZpZXcsIHBhdGg6IHN0cmluZyk6IENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGlmICghcGF0aCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Ly8gRmluZCBhbGwgcG90ZW50aWFsIHBhdGhzXG5cdFx0Y29uc3QgdGFyZ2V0UGF0aHM6IHN0cmluZ1tdID0gW107XG5cdFx0d2hpbGUgKCFwYXRoLmVuZHNXaXRoKFwiKVwiKSkge1xuXHRcdFx0dGFyZ2V0UGF0aHMudW5zaGlmdChwYXRoKTtcblx0XHRcdHBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0fVxuXHRcdHRhcmdldFBhdGhzLnVuc2hpZnQocGF0aCk7XG5cblx0XHRjb25zdCBwYXJlbnRDb2xsZWN0aW9uUGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIoXCIpKTsgLy8gUmVtb3ZlIHRoZSBsYXN0IGtleVxuXG5cdFx0bGV0IHRhcmdldENvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGN1cnJlbnRDb250ZXh0ID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KS5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0d2hpbGUgKGN1cnJlbnRDb250ZXh0ICYmICF0YXJnZXRDb250ZXh0KSB7XG5cdFx0XHRpZiAodGFyZ2V0UGF0aHMuaW5jbHVkZXMoY3VycmVudENvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0XHR0YXJnZXRDb250ZXh0ID0gY3VycmVudENvbnRleHQ7XG5cdFx0XHR9XG5cblx0XHRcdGN1cnJlbnRDb250ZXh0ID0gY3VycmVudENvbnRleHQuZ2V0QmluZGluZygpPy5nZXRDb250ZXh0KCkgYXMgQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAodGFyZ2V0Q29udGV4dCkge1xuXHRcdFx0Ly8gRm91bmQgIVxuXHRcdFx0cmV0dXJuIHRhcmdldENvbnRleHQ7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHRvIGZpbmQgdGhlIHRhcmdldCBjb250ZXh0IGluIGEgbGlzdEJpbmRpbmdcblx0XHRjb25zdCBtb2RlbCA9IHRoaXMuZ2V0Q3VycmVudFBhZ2UodmlldykuZ2V0QmluZGluZ0NvbnRleHQoKS5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHBhcmVudExpc3RCaW5kaW5nID0gbW9kZWwuZ2V0QWxsQmluZGluZ3MoKS5maW5kKChiaW5kaW5nKSA9PiB7XG5cdFx0XHRjb25zdCBiaW5kaW5nUGF0aCA9IGJpbmRpbmcuaXNSZWxhdGl2ZSgpID8gYmluZGluZy5nZXRSZXNvbHZlZFBhdGgoKSA6IGJpbmRpbmcuZ2V0UGF0aCgpO1xuXHRcdFx0cmV0dXJuIGJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikgJiYgYmluZGluZ1BhdGggPT09IHBhcmVudENvbGxlY3Rpb25QYXRoO1xuXHRcdH0pIGFzIE9EYXRhTGlzdEJpbmRpbmcgfCB1bmRlZmluZWQ7XG5cdFx0Ly8gV2UndmUgZm91bmQgYSBsaXN0IGJpbmRpbmcgdGhhdCBjb3VsZCBjb250YWluIHRoZSB0YXJnZXQgY29udGV4dCAtLT4gbG9vayBmb3IgaXRcblx0XHR0YXJnZXRDb250ZXh0ID0gcGFyZW50TGlzdEJpbmRpbmc/LmdldEFsbEN1cnJlbnRDb250ZXh0cygpLmZpbmQoKGNvbnRleHQpID0+IHtcblx0XHRcdHJldHVybiB0YXJnZXRQYXRocy5pbmNsdWRlcyhjb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGFyZ2V0Q29udGV4dDtcblx0fVxuXG5cdG5hdmlnYXRlKHBhdGg6IHN0cmluZywgdmlldzogRkVWaWV3KTogdm9pZCB7XG5cdFx0Ly8gVE9ETzogcm91dGluZy5uYXZpZ2F0ZSBkb2Vzbid0IGNvbnNpZGVyIHNlbWFudGljIGJvb2ttYXJraW5nXG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpO1xuXHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSB2aWV3LmdldE1vZGVsKCkuYmluZENvbnRleHQocGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cblx0XHRpZiAoY3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LmdldENyZWF0aW9uTW9kZSgpKSB7XG5cdFx0XHQvLyBJZiB0aGUgb2JqZWN0IHdhcyBhIG5ld2x5IGNyZWF0ZWQgb25lLCB3ZSBuYXZpZ2F0ZSBiYWNrXG5cdFx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkuX3JvdXRpbmcubmF2aWdhdGVCYWNrRnJvbUNvbnRleHQodGFyZ2V0Q29udGV4dCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBuYXZpZ2F0ZSB0byB0aGUgY29udGV4dCwgYnV0IHdlIGZvcmNlIGl0cyByZWNyZWF0aW9uIHNvIHRoYXQgYWxsICRzZWxlY3RzIGFyZSBwcm9wZXJseSBjb21wdXRlZCBieSBpbnRlcm5hbFJvdXRpbmdcblx0XHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5fcm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dCh0YXJnZXRDb250ZXh0LCB7IHJlY3JlYXRlQ29udGV4dDogdHJ1ZSB9KTtcblx0XHR9XG5cdH1cblxuXHRnZXRDdXJyZW50UGFnZSh2aWV3OiBWaWV3KTogRkVWaWV3IHtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpO1xuXHRcdHJldHVybiBDb21tb25VdGlscy5nZXRDdXJyZW50UGFnZVZpZXcoYXBwQ29tcG9uZW50KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBtZXRhcGF0aCBmcm9tIG9uZSBvciBtb3JlIGRhdGEgcGF0aChzKS5cblx0ICogQHBhcmFtIHZpZXcgVGhlIGN1cnJlbnQgdmlld1xuXHQgKiBAcGFyYW0gcGF0aCBPbmUgb3JlIG1vcmUgZGF0YSBwYXRoKHMpLCBpbiBjYXNlIG9mIG11bHRpcGxlIHBhdGhzIHNlcGFyYXRlZCBieSAnfCdcblx0ICogQHJldHVybnMgVGhlIGNhbGN1bGF0ZWQgbWV0YVBhdGhcblx0ICovXG5cdGNhbGN1bGF0ZU1ldGFQYXRoKHZpZXc6IEZFVmlldywgcGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0bGV0IG1ldGFQYXRoID0gXCJcIjtcblx0XHRpZiAocGF0aCkge1xuXHRcdFx0Ly8gaW4gY2FzZSBtb3JlIHRoYW4gb25lIHBhdGggaXMgc2VudCBhbGwgb2YgdGhlbSBoYXZlIHRvIHVzZSB0aGUgc2FtZSBtZXRhcGF0aCB0aGVyZWZvcmUgd2UganVzdCBjb25zaWRlciB0aGUgZmlyc3Qgb25lXG5cdFx0XHRjb25zdCBkYXRhUGF0aCA9IHBhdGguc3BsaXQoXCJ8XCIpWzBdO1xuXHRcdFx0bWV0YVBhdGggPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkuZ2V0TWV0YVBhdGgoZGF0YVBhdGgpO1xuXHRcdH1cblx0XHRyZXR1cm4gbWV0YVBhdGg7XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeT4ge1xuXHRwdWJsaWMgYXN5bmMgY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeT4pOiBQcm9taXNlPENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U+IHtcblx0XHRjb25zdCBjb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlID0gbmV3IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQTBCQSxNQUFNQSxZQUFZLEdBQUcsNkJBQTZCO0VBQ2xELE1BQU1DLFdBQVcsR0FBRyw0QkFBNEI7RUFDaEQsTUFBTUMsVUFBVSxHQUFHLDJCQUEyQjtFQUM5QyxNQUFNQyxrQkFBa0IsR0FBRyw4QkFBOEI7RUFDekQsTUFBTUMscUJBQXFCLEdBQUcsaUNBQWlDO0VBQy9ELE1BQU1DLG9CQUFvQixHQUFHLGdDQUFnQztFQUM3RCxNQUFNQyxXQUFXLEdBQUcsWUFBWTtFQUVoQyxNQUFNQyxZQUFZLEdBQUcsR0FBRyxDQUFDLENBQUM7RUFBQSxJQU9iQyx5QkFBeUIsMEJBQUFDLFFBQUE7SUFBQSxTQUFBRCwwQkFBQTtNQUFBLE9BQUFDLFFBQUEsQ0FBQUMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7SUFBQUMsUUFBQSxDQUFBSix5QkFBQSxHQUFBQSx5QkFBQTtJQUFBSyxjQUFBLENBQUFMLHlCQUFBLEVBQUFDLFFBQUE7SUFBQSxJQUFBSyxNQUFBLEdBQUFOLHlCQUFBLENBQUFPLFNBQUE7SUFHckM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTENELE1BQUEsQ0FNQUUsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQ0MsYUFBd0IsRUFBRUMsWUFBb0IsRUFBVztNQUN6RSxNQUFNQyxZQUF5QyxHQUFHRixhQUFhLENBQUNHLFdBQVcsQ0FBQ3BCLFlBQVksQ0FBQztNQUN6RixJQUFJLENBQUNtQixZQUFZLEVBQUU7UUFDbEIsT0FBTyxLQUFLO01BQ2IsQ0FBQyxNQUFNO1FBQ04sT0FBT0EsWUFBWSxDQUFDRSxRQUFR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
|
|
808
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNWUFDVElWSVRJRVMiLCJBQ1RJVkVVU0VSUyIsIkFDVElWSVRJRVMiLCJBU1lOQ01FU1NBR0VTUVVFVUUiLCJSRVRBSU5FREFTWU5DTUVTU0FHRVMiLCJBU1lOQ01FU1NBR0VTVElNRVJJRCIsIlNZTkNHUk9VUElEIiwiREVMQVlPTkZPQ1VTIiwiQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIl9TZXJ2aWNlIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiY2hlY2tQYXRoRm9yTG9jayIsImFjdGl2aXR5TW9kZWwiLCJhY3Rpdml0eVBhdGgiLCJteUFjdGl2aXRpZXMiLCJnZXRQcm9wZXJ0eSIsImluY2x1ZGVzIiwic2V0TG9jayIsInB1c2giLCJzZXRQcm9wZXJ0eSIsInJlbW92ZUxvY2siLCJhY3Rpdml0eVBhdGhzIiwidW5kZWZpbmVkIiwicGF0aHNUb1JlbW92ZSIsIkFycmF5IiwiaXNBcnJheSIsIm15TmV3QWN0aXZpdGllcyIsImZpbHRlciIsImFjdGl2aXR5IiwibGVuZ3RoIiwiZ2V0TG9ja2VkUHJvcGVydGllcyIsImpvaW4iLCJ1cGRhdGVMb2Nrc0ZvckNvbnRleHRQYXRoIiwiZWxlbWVudCIsIm9sZENvbnRleHRQYXRoIiwibmV3Q29udGV4dFBhdGgiLCJpc0Nvbm5lY3RlZCIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsImN1cnJlbnRRdWV1ZSIsImZvckVhY2giLCJxdWV1ZUl0ZW0iLCJwYXRoIiwic3RhcnRzV2l0aCIsInJlcGxhY2UiLCJjaGFuZ2VkQWN0aXZpdGllcyIsInVuY2hhbmdlZEFjdGl2aXRpZXMiLCJsb2NrZWRQYXRoIiwibmV3bG9ja2VkUGF0aCIsInNlbmQiLCJhY3Rpb24iLCJBY3Rpdml0eSIsIkxvY2siLCJjb250ZW50IiwicmVzZXRBc3luY01lc3NhZ2VzVGltZXIiLCJ0aW1lcklkIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInF1ZXVlIiwibmV3UXVldWUiLCJwYXRoc1RvUmV0YWluIiwiaXRlbSIsImRvU2VuZCIsInJldGFpbkFzeW5jTWVzc2FnZXMiLCJhZGRpdGlvbmFsUGF0aHNUb1JldGFpbiIsInJldGFpbmVkUGF0aHMiLCJyZWxlYXNlQXN5bmNNZXNzYWdlcyIsInBhdGhzVG9SZWxlYXNlIiwicmV0YWluZWRQYXRoIiwiaXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkIiwibWVzc2FnZSIsIlVubG9jayIsImRvU2VuZEFzeW5jIiwidHJpZ2dlcmVkQWN0aW9uTmFtZSIsInJlZnJlc2hMaXN0QmluZGluZyIsImFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXMiLCJjbGllbnRDb250ZW50IiwicmVxdWVzdGVkUHJvcGVydGllcyIsInBhdGhGb3JMb2NrIiwicmVtb3ZlZCIsImJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlIiwicGF0aHNUb0FkZCIsImlzQ29sbGFib3JhdGlvbkVuYWJsZWQiLCJ2aWV3IiwiYmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIk1vZGVsSGVscGVyIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJnZXRNZXRhTW9kZWwiLCJjb25uZWN0IiwiZHJhZnRSb290Q29udGV4dCIsIm1lIiwiQ29sbGFib3JhdGlvblV0aWxzIiwiZ2V0TWUiLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsInNEcmFmdFVVSUQiLCJyZXF1ZXN0UHJvcGVydHkiLCJpbml0aWFsaXplZCIsImluaXRpYWxpemVDb2xsYWJvcmF0aW9uIiwibWVzc2FnZVJlY2VpdmUiLCJkaXNjb25uZWN0IiwiZW5kQ29sbGFib3JhdGlvbiIsInVzZXJKb2luRHJhZnQiLCJhY3RpdmVVc2VycyIsInNlbmRlciIsImZpbmRJbmRleCIsInVzZXIiLCJpZCIsInVuc2hpZnQiLCJ1c2VyQWN0aW9uIiwiSm9pbiIsIkpvaW5FY2hvIiwiTG9ja0VjaG8iLCJ1c2VyTGVhdmVEcmFmdCIsImFsbEFjdGl2aXRpZXMiLCJyZW1vdmVVc2VyQWN0aXZpdGllcyIsImJhZyIsInAiLCJhY3Rpdml0aWVzIiwiYWN0aXZpdHlLZXkiLCJtZXRhUGF0aCIsImNhbGN1bGF0ZU1ldGFQYXRoIiwiY2xpZW50QWN0aW9uIiwidXNlcklEIiwibmFtZSIsInVzZXJEZXNjcmlwdGlvbiIsImluaXRpYWxzIiwiZm9ybWF0SW5pdGlhbHMiLCJjb2xvciIsImdldFVzZXJDb2xvciIsIm1hY3Rpdml0eSIsIkxlYXZlIiwiQ2hhbmdlIiwidXBkYXRlT25DaGFuZ2UiLCJDcmVhdGUiLCJ1cGRhdGVPbkNyZWF0ZSIsIkRlbGV0ZSIsInVwZGF0ZU9uRGVsZXRlIiwiQWN0aXZhdGUiLCJkcmFmdENsb3NlZEJ5T3RoZXJVc2VyIiwiZ2V0VGV4dCIsIkRpc2NhcmQiLCJBY3Rpb24iLCJ1cGRhdGVPbkFjdGlvbiIsImtleSIsImdldEFjdGl2aXR5S2V5RnJvbVBhdGgiLCJpbml0SlNPTk1vZGVsIiwicGFydHMiLCJzcGxpdCIsImkiLCJzbGljZSIsImEiLCJtZXNzYWdlVGV4dCIsIk1lc3NhZ2VCb3giLCJpbmZvcm1hdGlvbiIsIm9uQ2xvc2UiLCJnZXRCaW5kaW5nIiwicmVzZXRDaGFuZ2VzIiwiSW5zdGFuY2VNYW5hZ2VyIiwiaGFzT3BlbkRpYWxvZyIsImNsb3NlQWxsRGlhbG9ncyIsIm5hdmlnYXRlIiwiZXJyb3IiLCJMb2ciLCJ1cGRhdGVkT2JqZWN0c1BhdGhzIiwiY3VycmVudFBhZ2UiLCJnZXRDdXJyZW50UGFnZSIsImN1cnJlbnRDb250ZXh0IiwicmVxdWVzdFByb21pc2VzIiwibWFwIiwiYXBwbHlVcGRhdGVzRm9yQ2hhbmdlIiwiZ2V0Q29udHJvbGxlciIsImVkaXRGbG93IiwidXBkYXRlRG9jdW1lbnQiLCJQcm9taXNlIiwiYWxsIiwicHJvcGVydHlQYXRoRm9yVXBkYXRlIiwibWV0YU1vZGVsIiwibWV0YUNvbnRleHQiLCJnZXRNZXRhQ29udGV4dCIsImRhdGFNb2RlbE9iamVjdCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldENvbnRleHRQYXRoIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJ0YXJnZXRDb250ZXh0IiwiZmluZENvbnRleHRGb3JVcGRhdGUiLCJwYXJlbnRDb2xsZWN0aW9uUGF0aCIsInBhcmVudENvbnRleHRQYXRoIiwicGFyZW50Q29udGV4dCIsInNpZGVFZmZlY3RzUHJvbWlzZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJ0YXJnZXRNZXRhUGF0aCIsImdldE1ldGFQYXRoIiwiZ2V0UGF0aCIsInJlbGF0aXZlTWV0YVBhdGhGb3JVcGRhdGUiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJmaWVsZEdyb3VwSWRzIiwiY29tcHV0ZUZpZWxkR3JvdXBJZHMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwidGFyZ2V0T2JqZWN0IiwicGFnZUNvbnRyb2xsZXIiLCJzaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXAiLCJfc2lkZUVmZmVjdHMiLCJnZXRTaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXBzIiwiT2JqZWN0Iiwia2V5cyIsInNpZGVFZmZlY3ROYW1lIiwic2lkZUVmZmVjdCIsInNpZGVFZmZlY3RzIiwiY29udGV4dCIsImVyciIsImN1cnJlbnRQYXRoIiwiZGVsZXRlZE9iamVjdFBhdGhzIiwiZGVsZXRlZFBhdGhJblVzZSIsImZpbmQiLCJkZWxldGVkUGF0aCIsImdldEtlZXBBbGl2ZUNvbnRleHQiLCJzZXRLZWVwQWxpdmUiLCJyZXF1ZXN0UHJvbWlzZSIsImFwcGx5VXBkYXRlc0ZvckNvbGxlY3Rpb24iLCJfcm91dGluZyIsIm5hdmlnYXRlQmFja0Zyb21Db250ZXh0IiwiY3JlYXRlZE9iamVjdFBhdGhzIiwicGF0aEluQ29sbGVjdGlvbiIsImFwcENvbXBvbmVudCIsInBhcmVudFBhdGgiLCJtZXRhUGF0aEZvclVwZGF0ZSIsInBhcmVudE1ldGFQYXRoIiwicmVsYXRpdmVQYXRoIiwicmVxdWVzdFNpZGVFZmZlY3RzRm9yTmF2aWdhdGlvblByb3BlcnR5IiwicGF0aHNGb3JBY3Rpb24iLCJhY3Rpb25OYW1lIiwiY2xpZW50VHJpZ2dlcmVkQWN0aW9uTmFtZSIsImNsaWVudFJlcXVlc3RlZFByb3BlcnRpZXMiLCJjbGllbnRSZWZyZXNoTGlzdEJpbmRpbmciLCJyZXF1ZXN0VXBkYXRlRm9yQWN0aW9uIiwicGF0aEZvckFjdGlvbiIsInNpZGVFZmZlY3RTZXJ2aWNlIiwic2lkZUVmZmVjdHNGcm9tQWN0aW9uIiwiZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyIsInNpZGVFZmZlY3RQcm9taXNlcyIsInBhdGhFeHByZXNzaW9ucyIsIm1ldGFQYXRoRm9yQWN0aW9uIiwiZGF0YU1vZGVsUGF0aCIsImdldENvbnRleHQiLCJwcm9wZXJ0aWVzVG9SZXF1ZXN0IiwiZW50aXR5UHJvcGVydGllcyIsInByb3BlcnR5IiwicHJvcCIsInRhcmdldFBhdGhzIiwiZW5kc1dpdGgiLCJtb2RlbCIsInBhcmVudExpc3RCaW5kaW5nIiwiZ2V0QWxsQmluZGluZ3MiLCJiaW5kaW5nIiwiYmluZGluZ1BhdGgiLCJpc1JlbGF0aXZlIiwiZ2V0UmVzb2x2ZWRQYXRoIiwiaXNBIiwiZ2V0QWxsQ3VycmVudENvbnRleHRzIiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJ3YXJuaW5nIiwiY29udHJvbGxlciIsInJvdXRpbmciLCJpc0NyZWF0aW9uTW9kZSIsImdldENyZWF0aW9uTW9kZSIsImlzRGlzY2FyZCIsIm5hdmlnYXRlVG9Db250ZXh0IiwicmVjcmVhdGVDb250ZXh0IiwiZ2V0Q3VycmVudFBhZ2VWaWV3IiwiZGF0YVBhdGgiLCJpbml0IiwiaW5pdFByb21pc2UiLCJyZXNvbHZlIiwiU2VydmljZSIsIkNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMiIsImNyZWF0ZUluc3RhbmNlIiwib1NlcnZpY2VDb250ZXh0IiwiY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIlNlcnZpY2VGYWN0b3J5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJjb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvU2lkZUVmZmVjdHNcIjtcbmltcG9ydCB7XG5cdGJyb2FkY2FzdENvbGxhYm9yYXRpb25NZXNzYWdlLFxuXHRlbmRDb2xsYWJvcmF0aW9uLFxuXHRpbml0aWFsaXplQ29sbGFib3JhdGlvbixcblx0aXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0FjdGl2aXR5QmFzZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBVc2VyLCBVc2VyQWN0aXZpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uQ29tbW9uXCI7XG5pbXBvcnQgeyBBY3Rpdml0eSwgQ29sbGFib3JhdGlvblV0aWxzLCBnZXRBY3Rpdml0eUtleUZyb21QYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgSW5zdGFuY2VNYW5hZ2VyIGZyb20gXCJzYXAvbS9JbnN0YW5jZU1hbmFnZXJcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuXG5jb25zdCBNWUFDVElWSVRJRVMgPSBcIi9jb2xsYWJvcmF0aW9uL215QWN0aXZpdGllc1wiO1xuY29uc3QgQUNUSVZFVVNFUlMgPSBcIi9jb2xsYWJvcmF0aW9uL2FjdGl2ZVVzZXJzXCI7XG5jb25zdCBBQ1RJVklUSUVTID0gXCIvY29sbGFib3JhdGlvbi9hY3Rpdml0aWVzXCI7XG5jb25zdCBBU1lOQ01FU1NBR0VTUVVFVUUgPSBcIi9jb2xsYWJvcmF0aW9uL2FzeW5jTXNnUXVldWVcIjtcbmNvbnN0IFJFVEFJTkVEQVNZTkNNRVNTQUdFUyA9IFwiL2NvbGxhYm9yYXRpb24vcmV0YWluZWRNZXNzYWdlc1wiO1xuY29uc3QgQVNZTkNNRVNTQUdFU1RJTUVSSUQgPSBcIi9jb2xsYWJvcmF0aW9uL2FzeW5jTXNnVGltZXJJZFwiO1xuY29uc3QgU1lOQ0dST1VQSUQgPSBcIiRhdXRvLnN5bmNcIjtcblxuY29uc3QgREVMQVlPTkZPQ1VTID0gNTAwOyAvLyA1MDBtcyBkZWxheSBmb3IgYXN5bmMgTE9DSy9VTkxPQ0sgbWVzc2FnZXNcblxudHlwZSBBc3luY01lc3NhZ2UgPSB7XG5cdHBhdGg6IHN0cmluZztcblx0YWN0aW9uOiBBY3Rpdml0eS5VbmxvY2sgfCBBY3Rpdml0eS5Mb2NrO1xufTtcblxuZXhwb3J0IGNsYXNzIENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5PiB7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlPjtcblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgZ2l2ZW4gcGF0aCBpcyBsb2NrZWQgYnkgdGhlIGN1cnJlbnQgdXNlci5cblx0ICogQHBhcmFtIGFjdGl2aXR5TW9kZWxcblx0ICogQHBhcmFtIGFjdGl2aXR5UGF0aFxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBwYXRoIGlzIGxvY2tlZFxuXHQgKi9cblx0Y2hlY2tQYXRoRm9yTG9jayhhY3Rpdml0eU1vZGVsOiBKU09OTW9kZWwsIGFjdGl2aXR5UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgbXlBY3Rpdml0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBhY3Rpdml0eU1vZGVsLmdldFByb3BlcnR5KE1ZQUNUSVZJVElFUyk7XG5cdFx0aWYgKCFteUFjdGl2aXRpZXMpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG15QWN0aXZpdGllcy5pbmNsdWRlcyhhY3Rpdml0eVBhdGgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIGEgcGF0aCBhcyBsb2NrZWQgZm9yIHRoZSBjdXJyZW50IHVzZXIuXG5cdCAqIEBwYXJhbSBhY3Rpdml0eU1vZGVsXG5cdCAqIEBwYXJhbSBhY3Rpdml0eVBhdGhcblx0ICovXG5cdHNldExvY2soYWN0aXZpdHlNb2RlbDogSlNPTk1vZGVsLCBhY3Rpdml0eVBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG15QWN0aXZpdGllczogc3RyaW5nW10gPSBhY3Rpdml0eU1vZGVsLmdldFByb3BlcnR5KE1ZQUNUSVZJVElFUykgPz8gW107XG5cdFx0aWYgKCFteUFjdGl2aXRpZXMuaW5jbHVkZXMoYWN0aXZpdHlQYXRoKSkge1xuXHRcdFx0bXlBY3Rpdml0aWVzLnB1c2goYWN0aXZpdHlQYXRoKTtcblx0XHR9XG5cblx0XHRhY3Rpdml0eU1vZGVsLnNldFByb3BlcnR5KE1ZQUNUSVZJVElFUywgbXlBY3Rpdml0aWVzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBsb2NrIGZvciBhIGdpdmVuIHBhdGguXG5cdCAqIEBwYXJhbSBhY3Rpdml0eU1vZGVsXG5cdCAqIEBwYXJhbSBhY3Rpdml0eVBhdGhzXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHBhdGggd2FzIHByZXZpb3VzbHkgbG9ja2VkXG5cdCAqL1xuXHRyZW1vdmVMb2NrKGFjdGl2aXR5TW9kZWw6IEpTT05Nb2RlbCwgYWN0aXZpdHlQYXRoczogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBib29sZWFuIHtcblx0XHRjb25zdCBteUFjdGl2aXRpZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IGFjdGl2aXR5TW9kZWwuZ2V0UHJvcGVydHkoTVlBQ1RJVklUSUVTKTtcblx0XHRpZiAoIW15QWN0aXZpdGllcyB8fCBhY3Rpdml0eVBhdGhzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXRoc1RvUmVtb3ZlID0gQXJyYXkuaXNBcnJheShhY3Rpdml0eVBhdGhzKSA/IGFjdGl2aXR5UGF0aHMgOiBbYWN0aXZpdHlQYXRoc107XG5cdFx0Y29uc3QgbXlOZXdBY3Rpdml0aWVzID0gbXlBY3Rpdml0aWVzLmZpbHRlcigoYWN0aXZpdHkpID0+IHtcblx0XHRcdHJldHVybiAhcGF0aHNUb1JlbW92ZS5pbmNsdWRlcyhhY3Rpdml0eSk7XG5cdFx0fSk7XG5cdFx0YWN0aXZpdHlNb2RlbC5zZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMsIG15TmV3QWN0aXZpdGllcyk7XG5cblx0XHRyZXR1cm4gbXlOZXdBY3Rpdml0aWVzLmxlbmd0aCAhPT0gbXlBY3Rpdml0aWVzLmxlbmd0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFsbCBsb2NrZWQgcGF0aHMgZm9yIHRoZSBjdXJyZW50IHVzZXIuXG5cdCAqIEBwYXJhbSBhY3Rpdml0eU1vZGVsXG5cdCAqIEByZXR1cm5zIENvbmNhdGVuYXRlZCBwYXRocyBmb3IgYWxsIGxvY2tlZCBwcm9wZXJ0aWVzXG5cdCAqL1xuXHRnZXRMb2NrZWRQcm9wZXJ0aWVzKGFjdGl2aXR5TW9kZWw6IEpTT05Nb2RlbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgbXlBY3Rpdml0aWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBhY3Rpdml0eU1vZGVsLmdldFByb3BlcnR5KE1ZQUNUSVZJVElFUyk7XG5cdFx0aWYgKCFteUFjdGl2aXRpZXMpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBteUFjdGl2aXRpZXMuam9pbihcInxcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVwZGF0ZXMgYWxsIGN1cnJlbnQgbG9ja3MgYnkgY2hhbmdpbmcgYSBjb250ZXh0IHBhdGguXG5cdCAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYWN0aXZhdGluZyBhIGNvbnRleHQsIHdoZXJlIHRoZSBpbml0aWFsIGxvY2tzIHdlcmUgdXNpbmcgdGhlIHRyYW5zaWVudCBwYXRoXG5cdCAqIGFuZCBuZWVkIHRvIGJlIHVwZGF0ZWQgd2l0aCB0aGUgYWN0dWFsIHBhdGguXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEBwYXJhbSBvbGRDb250ZXh0UGF0aFxuXHQgKiBAcGFyYW0gbmV3Q29udGV4dFBhdGhcblx0ICovXG5cdHVwZGF0ZUxvY2tzRm9yQ29udGV4dFBhdGgoZWxlbWVudDogVUk1RWxlbWVudCwgb2xkQ29udGV4dFBhdGg6IHN0cmluZywgbmV3Q29udGV4dFBhdGg6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5pc0Nvbm5lY3RlZChlbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSBlbGVtZW50LmdldE1vZGVsKFwiaW50ZXJuYWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdFx0Ly8gUmVwbGFjZSBwYXRocyBpbiBwZW5kaW5nIGFzeW5jIG1lc3NhZ2VzXG5cdFx0Y29uc3QgY3VycmVudFF1ZXVlOiBBc3luY01lc3NhZ2VbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFKTtcblx0XHRjdXJyZW50UXVldWUuZm9yRWFjaCgocXVldWVJdGVtKSA9PiB7XG5cdFx0XHRpZiAocXVldWVJdGVtLnBhdGguc3RhcnRzV2l0aChvbGRDb250ZXh0UGF0aCkpIHtcblx0XHRcdFx0cXVldWVJdGVtLnBhdGggPSBxdWV1ZUl0ZW0ucGF0aC5yZXBsYWNlKG9sZENvbnRleHRQYXRoLCBuZXdDb250ZXh0UGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBSZXBsYWNlIHBhdGhzIGluIGV4aXN0aW5nIGxvY2tzIChhbmQgYnJvYWRjYXN0IHRoZSBjb3JyZXNwb25kaW5nIG1lc3NhZ2UgaWYgbmVjZXNzYXJ5KVxuXHRcdGNvbnN0IG15QWN0aXZpdGllczogc3RyaW5nW10gfCB1bmRlZmluZWQgfCBudWxsID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShNWUFDVElWSVRJRVMpO1xuXHRcdGlmIChteUFjdGl2aXRpZXMpIHtcblx0XHRcdGNvbnN0IGNoYW5nZWRBY3Rpdml0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdW5jaGFuZ2VkQWN0aXZpdGllczogc3RyaW5nW10gPSBbXTtcblx0XHRcdG15QWN0aXZpdGllcy5mb3JFYWNoKChsb2NrZWRQYXRoKSA9PiB7XG5cdFx0XHRcdGlmIChsb2NrZWRQYXRoLnN0YXJ0c1dpdGgob2xkQ29udGV4dFBhdGgpKSB7XG5cdFx0XHRcdFx0Ly8gUmVwbGFjZSB0aGUgcGF0aCBpbiB0aGUgbGlzdCBvZiBsb2NrcywgYW5kIHN0b3JlIHRoaXMgcGF0aCBmb3Igc2VuZGluZyBhIG5ldyBMT0NLIG1lc3NhZ2Vcblx0XHRcdFx0XHRjb25zdCBuZXdsb2NrZWRQYXRoID0gbG9ja2VkUGF0aC5yZXBsYWNlKG9sZENvbnRleHRQYXRoLCBuZXdDb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0Y2hhbmdlZEFjdGl2aXRpZXMucHVzaChuZXdsb2NrZWRQYXRoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1bmNoYW5nZWRBY3Rpdml0aWVzLnB1c2gobG9ja2VkUGF0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KE1ZQUNUSVZJVElFUywgdW5jaGFuZ2VkQWN0aXZpdGllcyk7XG5cdFx0XHRpZiAoY2hhbmdlZEFjdGl2aXRpZXMubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRcdHRoaXMuc2VuZChlbGVtZW50LCB7IGFjdGlvbjogQWN0aXZpdHkuTG9jaywgY29udGVudDogY2hhbmdlZEFjdGl2aXRpZXMgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgdGltZXIgZm9yIHNlbmRpbmcgYXN5bmNocm9ub3VzIGNvbGxhYm9yYXRpb24gbWVzc2FnZXMuXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsXG5cdCAqL1xuXHRyZXNldEFzeW5jTWVzc2FnZXNUaW1lcihpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRsZXQgdGltZXJJZCA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1RJTUVSSUQpO1xuXHRcdGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aW1lcklkKTtcblx0XHR9XG5cblx0XHR0aW1lcklkID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCBxdWV1ZTogQXN5bmNNZXNzYWdlW10gfCB1bmRlZmluZWQgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNRVUVVRSk7XG5cdFx0XHRjb25zdCBuZXdRdWV1ZTogQXN5bmNNZXNzYWdlW10gPSBbXTtcblx0XHRcdGNvbnN0IHBhdGhzVG9SZXRhaW46IHN0cmluZ1tdID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShSRVRBSU5FREFTWU5DTUVTU0FHRVMpID8/IFtdO1xuXG5cdFx0XHRpZiAoIXF1ZXVlKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0cXVldWUuZm9yRWFjaCgoaXRlbSkgPT4ge1xuXHRcdFx0XHRpZiAocGF0aHNUb1JldGFpbi5pbmNsdWRlcyhpdGVtLnBhdGgpKSB7XG5cdFx0XHRcdFx0bmV3UXVldWUucHVzaChpdGVtKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLmRvU2VuZChpbnRlcm5hbE1vZGVsLCBpdGVtLmFjdGlvbiwgaXRlbS5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFLCBuZXdRdWV1ZSk7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFTWU5DTUVTU0FHRVNUSU1FUklELCB1bmRlZmluZWQpO1xuXG5cdFx0XHRpZiAobmV3UXVldWUubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIElmIHNvbWUgbWVzc2FnZXMgYXJlIHN0aWxsIHBlbmRpbmcsIHJlc2NoZWR1bGUgYSBuZXcgdGltZXJcblx0XHRcdFx0dGhpcy5yZXNldEFzeW5jTWVzc2FnZXNUaW1lcihpbnRlcm5hbE1vZGVsKTtcblx0XHRcdH1cblx0XHR9LCBERUxBWU9ORk9DVVMpO1xuXG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTVElNRVJJRCwgdGltZXJJZCk7XG5cdH1cblxuXHQvKipcblx0ICogTWFyayBzb21lIHBhdGhzIGFzIGJlaW5nIHJldGFpbmVkLCBpLmUuIGFzeW5jIG1lc3NhZ2VzIGZvciB0aGVzZSBwYXRocyB3b24ndCBiZSBzZW50IGJ1dCBrZXB0IHVudGlsIHRoZXkncmUgcmVsZWFzZWQuXG5cdCAqIFRoaXMgYXBwbGllcyB0byBleGlzdGluZyBhc3luYyBtZXNzYWdlcyBpbiB0aGUgcXVldWUsIGJ1dCBhbHNvIHRvIGZ1dHVyZSBtZXNzYWdlcy5cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHBhcmFtIGFjdGl2aXR5UGF0aHMgVGhlIHBhdGhzIHRvIGJlIHJldGFpbmVkXG5cdCAqL1xuXHRyZXRhaW5Bc3luY01lc3NhZ2VzKGVsZW1lbnQ6IFVJNUVsZW1lbnQsIGFjdGl2aXR5UGF0aHM6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGVsZW1lbnQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0Y29uc3QgYWRkaXRpb25hbFBhdGhzVG9SZXRhaW4gPSBBcnJheS5pc0FycmF5KGFjdGl2aXR5UGF0aHMpID8gYWN0aXZpdHlQYXRocyA6IFthY3Rpdml0eVBhdGhzXTtcblxuXHRcdGNvbnN0IHJldGFpbmVkUGF0aHM6IHN0cmluZ1tdID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShSRVRBSU5FREFTWU5DTUVTU0FHRVMpO1xuXHRcdGFkZGl0aW9uYWxQYXRoc1RvUmV0YWluLmZvckVhY2goKHBhdGgpID0+IHtcblx0XHRcdGlmICghcmV0YWluZWRQYXRocy5pbmNsdWRlcyhwYXRoKSkge1xuXHRcdFx0XHRyZXRhaW5lZFBhdGhzLnB1c2gocGF0aCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmVsZWFzZSBhc3luYyBtZXNzYWdlcyBmb3Igc29tZSBwYXRocyB0aGF0IHdlcmUgcHJldmlvdXNseSByZXRhaW5lZC5cblx0ICogVGhlIGNvcnJlc3BvbmRpbmcgbWVzc2FnZXMgYXJlIG5vdCBzZW50IGltbWVkaWF0ZWx5LCBidXQgdGhlIG5leHQgdGltZSB0aGUgYXN5bmMgdGltZXIgd2FrZXMgdXAuXG5cdCAqIEBwYXJhbSBlbGVtZW50XG5cdCAqIEBwYXJhbSBhY3Rpdml0eVBhdGhzIFRoZSBwYXRocyB0byBiZSByZWxlYXNlZFxuXHQgKi9cblx0cmVsZWFzZUFzeW5jTWVzc2FnZXMoZWxlbWVudDogVUk1RWxlbWVudCwgYWN0aXZpdHlQYXRoczogc3RyaW5nIHwgc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZWxlbWVudC5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRjb25zdCBwYXRoc1RvUmV0YWluOiBzdHJpbmdbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoUkVUQUlORURBU1lOQ01FU1NBR0VTKTtcblx0XHRjb25zdCBwYXRoc1RvUmVsZWFzZSA9IEFycmF5LmlzQXJyYXkoYWN0aXZpdHlQYXRocykgPyBhY3Rpdml0eVBhdGhzIDogW2FjdGl2aXR5UGF0aHNdO1xuXG5cdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFJFVEFJTkVEQVNZTkNNRVNTQUdFUyxcblx0XHRcdHBhdGhzVG9SZXRhaW4uZmlsdGVyKChyZXRhaW5lZFBhdGgpID0+IHtcblx0XHRcdFx0cmV0dXJuICFwYXRoc1RvUmVsZWFzZS5pbmNsdWRlcyhyZXRhaW5lZFBhdGgpO1xuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIGNvbGxhYm9yYXRpb24gc2Vzc2lvbiBpcyBjdXJyZW50bHkgb3Blbi5cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHJldHVybnMgVHJ1ZSBpZiBhIGNvbGxhYm9yYXRpb24gc2Vzc2lvbiBpcyBjdXJyZW50bHkgb3Blbi5cblx0ICovXG5cdGlzQ29ubmVjdGVkKGVsZW1lbnQ6IFVJNUVsZW1lbnQpOiBib29sZWFuIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZWxlbWVudC5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRyZXR1cm4gaXNDb2xsYWJvcmF0aW9uQ29ubmVjdGVkKGludGVybmFsTW9kZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlbmRzIGEgY29sbGFib3JhdGlvbiBtZXNzYWdlIHRvIG90aGVyIGNvbm5lY3RlZCB1c2Vycy5cblx0ICogQHBhcmFtIGVsZW1lbnRcblx0ICogQHBhcmFtIG1lc3NhZ2Vcblx0ICogQHBhcmFtIG1lc3NhZ2UuYWN0aW9uXG5cdCAqIEBwYXJhbSBtZXNzYWdlLmNvbnRlbnRcblx0ICogQHBhcmFtIG1lc3NhZ2UudHJpZ2dlcmVkQWN0aW9uTmFtZVxuXHQgKiBAcGFyYW0gbWVzc2FnZS5yZWZyZXNoTGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIG1lc3NhZ2UuYWN0aW9uUmVxdWVzdGVkUHJvcGVydGllc1xuXHQgKi9cblx0cHVibGljIHNlbmQoXG5cdFx0ZWxlbWVudDogVUk1RWxlbWVudCxcblx0XHRtZXNzYWdlOiB7XG5cdFx0XHRhY3Rpb246IEFjdGl2aXR5O1xuXHRcdFx0Y29udGVudDogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ7XG5cdFx0XHR0cmlnZ2VyZWRBY3Rpb25OYW1lPzogc3RyaW5nO1xuXHRcdFx0cmVmcmVzaExpc3RCaW5kaW5nPzogYm9vbGVhbjtcblx0XHRcdGFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblx0XHR9XG5cdCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmlzQ29ubmVjdGVkKGVsZW1lbnQpKSB7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gZWxlbWVudC5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdGlmIChtZXNzYWdlLmFjdGlvbiA9PT0gQWN0aXZpdHkuTG9jayB8fCBtZXNzYWdlLmFjdGlvbiA9PT0gQWN0aXZpdHkuVW5sb2NrKSB7XG5cdFx0XHRcdC8vIExvY2stcmVsYXRlZCBldmVudHMgYXJlIGFsd2F5cyBzZW50IHdpdGggc29tZSBkZWxheVxuXHRcdFx0XHR0aGlzLmRvU2VuZEFzeW5jKGludGVybmFsTW9kZWwsIG1lc3NhZ2UuYWN0aW9uLCBtZXNzYWdlLmNvbnRlbnQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5kb1NlbmQoXG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbCxcblx0XHRcdFx0XHRtZXNzYWdlLmFjdGlvbixcblx0XHRcdFx0XHRtZXNzYWdlLmNvbnRlbnQsXG5cdFx0XHRcdFx0bWVzc2FnZS50cmlnZ2VyZWRBY3Rpb25OYW1lLFxuXHRcdFx0XHRcdG1lc3NhZ2UucmVmcmVzaExpc3RCaW5kaW5nLFxuXHRcdFx0XHRcdG1lc3NhZ2UuYWN0aW9uUmVxdWVzdGVkUHJvcGVydGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBzZW5kIGEgY29sbGFib3JhdGlvbiBtZXNzYWdlIGltbWVkaWF0ZWx5LlxuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbFxuXHQgKiBAcGFyYW0gYWN0aW9uXG5cdCAqIEBwYXJhbSBjb250ZW50XG5cdCAqIEBwYXJhbSB0cmlnZ2VyZWRBY3Rpb25OYW1lXG5cdCAqIEBwYXJhbSByZWZyZXNoTGlzdEJpbmRpbmdcblx0ICogQHBhcmFtIGFjdGlvblJlcXVlc3RlZFByb3BlcnRpZXNcblx0ICovXG5cdGRvU2VuZChcblx0XHRpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsXG5cdFx0YWN0aW9uOiBBY3Rpdml0eSxcblx0XHRjb250ZW50OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcblx0XHR0cmlnZ2VyZWRBY3Rpb25OYW1lPzogc3RyaW5nLFxuXHRcdHJlZnJlc2hMaXN0QmluZGluZz86IGJvb2xlYW4sXG5cdFx0YWN0aW9uUmVxdWVzdGVkUHJvcGVydGllcz86IHN0cmluZ1tdXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IGNsaWVudENvbnRlbnQgPSAoQXJyYXkuaXNBcnJheShjb250ZW50KSA/IGNvbnRlbnQuam9pbihcInxcIikgOiBjb250ZW50KSA/PyBcIlwiO1xuXHRcdGNvbnN0IHJlcXVlc3RlZFByb3BlcnRpZXMgPSBhY3Rpb25SZXF1ZXN0ZWRQcm9wZXJ0aWVzPy5qb2luKFwifFwiKTtcblx0XHRpZiAoYWN0aW9uID09PSBBY3Rpdml0eS5Mb2NrKSB7XG5cdFx0XHRjb25zdCBwYXRoRm9yTG9jayA9IChBcnJheS5pc0FycmF5KGNvbnRlbnQpID8gY29udGVudFswXSA6IGNvbnRlbnQpID8/IFwiXCI7XG5cdFx0XHQvLyBUbyBhdm9pZCB1bm5lY2Vzc2FyeSB0cmFmZmljIHdlIGtlZXAgdHJhY2sgb2YgbG9jayBjaGFuZ2VzIGFuZCBzZW5kIGl0IG9ubHkgb25jZVxuXHRcdFx0aWYgKHRoaXMuY2hlY2tQYXRoRm9yTG9jayhpbnRlcm5hbE1vZGVsLCBwYXRoRm9yTG9jaykpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5zZXRMb2NrKGludGVybmFsTW9kZWwsIHBhdGhGb3JMb2NrKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gQWN0aXZpdHkuVW5sb2NrKSB7XG5cdFx0XHRjb25zdCByZW1vdmVkID0gdGhpcy5yZW1vdmVMb2NrKGludGVybmFsTW9kZWwsIGNvbnRlbnQpO1xuXHRcdFx0Ly8gTm8gbmVlZCB0byBzZW5kIGFuIFVubG9jayBtZXNzYWdlIGlmIGl0IHdhcyBub3QgYWxyZWFkeSBsb2NrZWRcblx0XHRcdGlmICghcmVtb3ZlZCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoYWN0aW9uLCBjbGllbnRDb250ZW50LCBpbnRlcm5hbE1vZGVsLCB0cmlnZ2VyZWRBY3Rpb25OYW1lLCByZWZyZXNoTGlzdEJpbmRpbmcsIHJlcXVlc3RlZFByb3BlcnRpZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEludGVybmFsIGZ1bmN0aW9uIHRvIHNlbmQgYSBjb2xsYWJvcmF0aW9uIG1lc3NhZ2UgYXN5bmNocm9ub3VzbHkuXG5cdCAqIEBwYXJhbSBpbnRlcm5hbE1vZGVsXG5cdCAqIEBwYXJhbSBhY3Rpb25cblx0ICogQHBhcmFtIGNvbnRlbnRcblx0ICovXG5cdGRvU2VuZEFzeW5jKGludGVybmFsTW9kZWw6IEpTT05Nb2RlbCwgYWN0aW9uOiBBY3Rpdml0eS5Mb2NrIHwgQWN0aXZpdHkuVW5sb2NrLCBjb250ZW50OiBzdHJpbmcgfCBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuXHRcdGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgY3VycmVudFF1ZXVlOiBBc3luY01lc3NhZ2VbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFKTtcblx0XHRjb25zdCBwYXRoc1RvQWRkID0gQXJyYXkuaXNBcnJheShjb250ZW50KSA/IGNvbnRlbnQgOiBbY29udGVudF07XG5cdFx0Ly8gUmVtb3ZlIGV4aXN0aW5nIGl0ZW1zIGluIHRoZSBxdWV1ZSBmb3IgdGhlIHBhdGhzIHRoYXQgd2lsbCBiZSBhZGRlZFxuXHRcdGNvbnN0IG5ld1F1ZXVlID0gY3VycmVudFF1ZXVlLmZpbHRlcigoaXRlbSkgPT4ge1xuXHRcdFx0cmV0dXJuICFwYXRoc1RvQWRkLmluY2x1ZGVzKGl0ZW0ucGF0aCk7XG5cdFx0fSk7XG5cdFx0cGF0aHNUb0FkZC5mb3JFYWNoKChwYXRoKSA9PiB7XG5cdFx0XHRuZXdRdWV1ZS5wdXNoKHsgcGF0aCwgYWN0aW9uIH0pO1xuXHRcdH0pO1xuXHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQVNZTkNNRVNTQUdFU1FVRVVFLCBuZXdRdWV1ZSk7XG5cdFx0dGhpcy5yZXNldEFzeW5jTWVzc2FnZXNUaW1lcihpbnRlcm5hbE1vZGVsKTtcblx0fVxuXG5cdGlzQ29sbGFib3JhdGlvbkVuYWJsZWQodmlldzogVmlldyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gdmlldz8uZ2V0QmluZGluZ0NvbnRleHQgJiYgKHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KTtcblx0XHRyZXR1cm4gISEoYmluZGluZ0NvbnRleHQgJiYgTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQoYmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIGVzdGFibGlzaCBhIGNvbm5lY3Rpb24gd2l0aCBhIGNvbGxhYm9yYXRpdmUgZHJhZnQgc2VydmljZS5cblx0ICogQHBhcmFtIGRyYWZ0Um9vdENvbnRleHQgVGhlIGRyYWZ0IHJvb3QgY29udGV4dFxuXHQgKiBAcGFyYW0gdmlldyAgVGhlIHZpZXcgdGhhdCBpcyB1c2VkIHRvIGNvbm5lY3QgdGhlIHdlYnNvY2tldFxuXHQgKiBAcmV0dXJucyBQcm9taXNlXG5cdCAqL1xuXHRhc3luYyBjb25uZWN0KGRyYWZ0Um9vdENvbnRleHQ6IENvbnRleHQsIHZpZXc6IEZFVmlldyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3QgbWUgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0TWUoQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHZpZXcpKTtcblxuXHRcdC8vIFJldHJpZXZpbmcgTUUgZnJvbSBzaGVsbCBzZXJ2aWNlXG5cdFx0aWYgKCFtZSkge1xuXHRcdFx0Ly8gbm8gbWUgPSBubyBzaGVsbCA9IG5vdCBzdXJlIHdoYXQgdG8gZG9cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBzRHJhZnRVVUlEID0gYXdhaXQgZHJhZnRSb290Q29udGV4dC5yZXF1ZXN0UHJvcGVydHkoXCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9EcmFmdFVVSURcIik7XG5cdFx0aWYgKCFzRHJhZnRVVUlEKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5pdGlhbGl6ZWQgPSBpbml0aWFsaXplQ29sbGFib3JhdGlvbihcblx0XHRcdG1lLFxuXHRcdFx0c0RyYWZ0VVVJRCxcblx0XHRcdGludGVybmFsTW9kZWwsXG5cdFx0XHQobWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuXHRcdFx0XHR0aGlzLm1lc3NhZ2VSZWNlaXZlKG1lc3NhZ2UsIHZpZXcpO1xuXHRcdFx0fSxcblx0XHRcdHZpZXdcblx0XHQpO1xuXG5cdFx0aWYgKGluaXRpYWxpemVkKSB7XG5cdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KE1ZQUNUSVZJVElFUywgW10pO1xuXHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShBU1lOQ01FU1NBR0VTUVVFVUUsIFtdKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoUkVUQUlORURBU1lOQ01FU1NBR0VTLCBbXSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIGNsb3NlIGEgY29ubmVjdGlvbiB3aXRoIGEgY29sbGFib3JhdGl2ZSBkcmFmdCBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gdmlldyBDdXJyZW50IFZpZXdcblx0ICovXG5cdGRpc2Nvbm5lY3QodmlldzogRkVWaWV3KTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRlbmRDb2xsYWJvcmF0aW9uKGludGVybmFsTW9kZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIHVwZGF0ZSBpbnRlcm5hbCBtb2RlbCB3aGVuIGEgdXNlciBqb2lucyB0aGUgZHJhZnQuXG5cdCAqIEBwYXJhbSBhY3RpdmVVc2VycyBMaXN0IG9mIGNvbm5lY3RlZCB1c2Vyc1xuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbCBJbnRlcm5hbCBtb2RlbFxuXHQgKiBAcGFyYW0gc2VuZGVyIFVzZXIgc2VuZGluZyB0aGUgSk9JTiBvciBKT0lORUNITyBtZXNzYWdlXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlXG5cdCAqIEBwYXJhbSB2aWV3IEN1cnJlbnQgVmlld1xuXHQgKi9cblx0dXNlckpvaW5EcmFmdChhY3RpdmVVc2VyczogVXNlcltdLCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIHNlbmRlcjogVXNlciwgbWVzc2FnZTogTWVzc2FnZSwgdmlldzogRkVWaWV3KTogdm9pZCB7XG5cdFx0aWYgKGFjdGl2ZVVzZXJzLmZpbmRJbmRleCgodXNlcikgPT4gdXNlci5pZCA9PT0gc2VuZGVyLmlkKSA9PT0gLTEpIHtcblx0XHRcdGFjdGl2ZVVzZXJzLnVuc2hpZnQoc2VuZGVyKTtcblx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQUNUSVZFVVNFUlMsIGFjdGl2ZVVzZXJzKTtcblx0XHR9XG5cblx0XHRpZiAobWVzc2FnZS51c2VyQWN0aW9uID09PSBBY3Rpdml0eS5Kb2luKSB7XG5cdFx0XHQvLyB3ZSBlY2hvIG91ciBleGlzdGVuY2UgdG8gdGhlIG5ld2x5IGVudGVyZWQgdXNlciBhbmQgYWxzbyBzZW5kIHRoZSBjdXJyZW50IGFjdGl2aXR5IGlmIHRoZXJlIGlzIGFueVxuXHRcdFx0YnJvYWRjYXN0Q29sbGFib3JhdGlvbk1lc3NhZ2UoQWN0aXZpdHkuSm9pbkVjaG8sIHRoaXMuZ2V0TG9ja2VkUHJvcGVydGllcyhpbnRlcm5hbE1vZGVsKSwgaW50ZXJuYWxNb2RlbCk7XG5cdFx0fVxuXG5cdFx0aWYgKG1lc3NhZ2UudXNlckFjdGlvbiA9PT0gQWN0aXZpdHkuSm9pbkVjaG8pIHtcblx0XHRcdGlmIChtZXNzYWdlLmNsaWVudENvbnRlbnQpIHtcblx0XHRcdFx0Ly8gYW5vdGhlciB1c2VyIHdhcyBhbHJlYWR5IHR5cGluZyB0aGVyZWZvcmUgSSB3YW50IHRvIHNlZSBoaXMgYWN0aXZpdHkgaW1tZWRpYXRlbHkuIENhbGxpbmcgbWUgYWdhaW4gYXMgYSBsaXZlIGNoYW5nZVxuXHRcdFx0XHRtZXNzYWdlLnVzZXJBY3Rpb24gPSBBY3Rpdml0eS5Mb2NrRWNobztcblx0XHRcdFx0dGhpcy5tZXNzYWdlUmVjZWl2ZShtZXNzYWdlLCB2aWV3KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdG8gdXBkYXRlIGludGVybmFsIG1vZGVsIHdoZW4gYSB1c2VyIGxlYXZlcyB0aGUgZHJhZnQuXG5cdCAqIEBwYXJhbSBhY3RpdmVVc2VycyBMaXN0IG9mIGNvbm5lY3RlZCB1c2Vyc1xuXHQgKiBAcGFyYW0gaW50ZXJuYWxNb2RlbCBJbnRlcm5hbCBtb2RlbFxuXHQgKiBAcGFyYW0gc2VuZGVyIFVzZXIgc2VuZGluZyB0aGUgSk9JTiBvciBKT0lORUNITyBtZXNzYWdlXG5cdCAqL1xuXHR1c2VyTGVhdmVEcmFmdChhY3RpdmVVc2VyczogVXNlcltdLCBpbnRlcm5hbE1vZGVsOiBKU09OTW9kZWwsIHNlbmRlcjogVXNlcik6IHZvaWQge1xuXHRcdC8vIFJlbW92aW5nIHRoZSBhY3RpdmUgdXNlci4gTm90IHJlbW92aW5nIFwibWVcIiBpZiBJIGhhZCB0aGUgc2NyZWVuIG9wZW4gaW4gYW5vdGhlciBzZXNzaW9uXG5cdFx0YWN0aXZlVXNlcnMgPSBhY3RpdmVVc2Vycy5maWx0ZXIoKHVzZXIpID0+IHVzZXIuaWQgIT09IHNlbmRlci5pZCB8fCB1c2VyLm1lKTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWRVVTRVJTLCBhY3RpdmVVc2Vycyk7XG5cdFx0Y29uc3QgYWxsQWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUykgfHwge307XG5cdFx0Y29uc3QgcmVtb3ZlVXNlckFjdGl2aXRpZXMgPSBmdW5jdGlvbiAoYmFnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFVzZXJBY3Rpdml0eVtdKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBVc2VyQWN0aXZpdHlbXSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShiYWcpKSB7XG5cdFx0XHRcdHJldHVybiBiYWcuZmlsdGVyKChhY3Rpdml0eSkgPT4gYWN0aXZpdHkuaWQgIT09IHNlbmRlci5pZCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHAgaW4gYmFnKSB7XG5cdFx0XHRcdFx0YmFnW3BdID0gcmVtb3ZlVXNlckFjdGl2aXRpZXMoYmFnW3BdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgVXNlckFjdGl2aXR5W10pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBiYWc7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRyZW1vdmVVc2VyQWN0aXZpdGllcyhhbGxBY3Rpdml0aWVzKTtcblx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMsIGFsbEFjdGl2aXRpZXMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxiYWNrIHdoZW4gYSBtZXNzYWdlIGlzIHJlY2VpdmVkIGZyb20gdGhlIHdlYnNvY2tldC5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWRcblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICovXG5cdG1lc3NhZ2VSZWNlaXZlKG1lc3NhZ2U6IE1lc3NhZ2UsIHZpZXc6IEZFVmlldyk6IHZvaWQge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0Y29uc3QgYWN0aXZlVXNlcnM6IFVzZXJbXSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZFVVNFUlMpO1xuXHRcdGxldCBhY3Rpdml0aWVzOiBVc2VyQWN0aXZpdHlbXTtcblx0XHRsZXQgYWN0aXZpdHlLZXk6IHN0cmluZztcblx0XHRjb25zdCBtZXRhUGF0aCA9IHRoaXMuY2FsY3VsYXRlTWV0YVBhdGgodmlldywgbWVzc2FnZS5jbGllbnRDb250ZW50KTtcblx0XHRtZXNzYWdlLnVzZXJBY3Rpb24gPSBtZXNzYWdlLnVzZXJBY3Rpb24gfHwgbWVzc2FnZS5jbGllbnRBY3Rpb247XG5cblx0XHRjb25zdCBzZW5kZXI6IFVzZXIgPSB7XG5cdFx0XHRpZDogbWVzc2FnZS51c2VySUQsXG5cdFx0XHRuYW1lOiBtZXNzYWdlLnVzZXJEZXNjcmlwdGlvbixcblx0XHRcdGluaXRpYWxzOiBDb2xsYWJvcmF0aW9uVXRpbHMuZm9ybWF0SW5pdGlhbHMobWVzc2FnZS51c2VyRGVzY3JpcHRpb24pLFxuXHRcdFx0Y29sb3I6IENvbGxhYm9yYXRpb25VdGlscy5nZXRVc2VyQ29sb3IobWVzc2FnZS51c2VySUQsIGFjdGl2ZVVzZXJzLCBbXSlcblx0XHR9O1xuXG5cdFx0bGV0IG1hY3Rpdml0eTogVXNlckFjdGl2aXR5ID0gc2VuZGVyO1xuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuXHRcdHN3aXRjaCAobWVzc2FnZS51c2VyQWN0aW9uKSB7XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkpvaW46XG5cdFx0XHRjYXNlIEFjdGl2aXR5LkpvaW5FY2hvOlxuXHRcdFx0XHR0aGlzLnVzZXJKb2luRHJhZnQoYWN0aXZlVXNlcnMsIGludGVybmFsTW9kZWwsIHNlbmRlciwgbWVzc2FnZSwgdmlldyk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkxlYXZlOlxuXHRcdFx0XHR0aGlzLnVzZXJMZWF2ZURyYWZ0KGFjdGl2ZVVzZXJzLCBpbnRlcm5hbE1vZGVsLCBzZW5kZXIpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5DaGFuZ2U6XG5cdFx0XHRcdHRoaXMudXBkYXRlT25DaGFuZ2UodmlldywgbWVzc2FnZSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LkNyZWF0ZTpcblx0XHRcdFx0Ly8gRm9yIGNyZWF0ZSB3ZSBhY3R1YWxseSBqdXN0IG5lZWQgdG8gcmVmcmVzaCB0aGUgdGFibGVcblx0XHRcdFx0dGhpcy51cGRhdGVPbkNyZWF0ZSh2aWV3LCBtZXNzYWdlKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuRGVsZXRlOlxuXHRcdFx0XHQvLyBGb3Igbm93IGFsc28gcmVmcmVzaCB0aGUgcGFnZSBidXQgaW4gY2FzZSBvZiBkZWxldGlvbiB3ZSBuZWVkIHRvIGluZm9ybSB0aGUgdXNlclxuXHRcdFx0XHR0aGlzLnVwZGF0ZU9uRGVsZXRlKHZpZXcsIG1lc3NhZ2UpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5BY3RpdmF0ZTpcblx0XHRcdFx0dGhpcy5kcmFmdENsb3NlZEJ5T3RoZXJVc2VyKFxuXHRcdFx0XHRcdHZpZXcsXG5cdFx0XHRcdFx0bWVzc2FnZS5jbGllbnRDb250ZW50LFxuXHRcdFx0XHRcdENvbGxhYm9yYXRpb25VdGlscy5nZXRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfQUNUSVZBVEVcIiwgc2VuZGVyLm5hbWUpLFxuXHRcdFx0XHRcdG1lc3NhZ2UudXNlckFjdGlvblxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5EaXNjYXJkOlxuXHRcdFx0XHR0aGlzLmRyYWZ0Q2xvc2VkQnlPdGhlclVzZXIoXG5cdFx0XHRcdFx0dmlldyxcblx0XHRcdFx0XHRtZXNzYWdlLmNsaWVudENvbnRlbnQsXG5cdFx0XHRcdFx0Q29sbGFib3JhdGlvblV0aWxzLmdldFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9ESVNDQVJEXCIsIHNlbmRlci5uYW1lKSxcblx0XHRcdFx0XHRtZXNzYWdlLnVzZXJBY3Rpb25cblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgQWN0aXZpdHkuQWN0aW9uOlxuXHRcdFx0XHR0aGlzLnVwZGF0ZU9uQWN0aW9uKHZpZXcsIG1lc3NhZ2UpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5Mb2NrOlxuXHRcdFx0Y2FzZSBBY3Rpdml0eS5Mb2NrRWNobzpcblx0XHRcdFx0bWFjdGl2aXR5ID0gc2VuZGVyO1xuXHRcdFx0XHRtYWN0aXZpdHkua2V5ID0gZ2V0QWN0aXZpdHlLZXlGcm9tUGF0aChtZXNzYWdlLmNsaWVudENvbnRlbnQpO1xuXG5cdFx0XHRcdC8vIHN0dXBpZCBKU09OIG1vZGVsLi4uXG5cdFx0XHRcdGxldCBpbml0SlNPTk1vZGVsID0gXCJcIjtcblx0XHRcdFx0Y29uc3QgcGFydHMgPSBtZXRhUGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0aW5pdEpTT05Nb2RlbCArPSBgLyR7cGFydHNbaV19YDtcblx0XHRcdFx0XHRpZiAoIWludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIGluaXRKU09OTW9kZWwpKSB7XG5cdFx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMgKyBpbml0SlNPTk1vZGVsLCB7fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoKTtcblx0XHRcdFx0YWN0aXZpdGllcyA9IGFjdGl2aXRpZXM/LnNsaWNlID8gYWN0aXZpdGllcy5zbGljZSgpIDogW107XG5cdFx0XHRcdGFjdGl2aXRpZXMucHVzaChtYWN0aXZpdHkpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KEFDVElWSVRJRVMgKyBtZXRhUGF0aCwgYWN0aXZpdGllcyk7XG5cdFx0XHRcdGlmIChtZXNzYWdlLnVzZXJBY3Rpb24gPT09IEFjdGl2aXR5LkxvY2tFY2hvICYmIHRoaXMuY2hlY2tQYXRoRm9yTG9jayhpbnRlcm5hbE1vZGVsLCBtZXNzYWdlLmNsaWVudENvbnRlbnQpKSB7XG5cdFx0XHRcdFx0Ly8gVGhlIGN1cnJlbnQgdXNlciBoYXMgbG9ja2VkIHRoaXMgcGF0aCByaWdodCBhZnRlciBjb25uZWN0aW9uLCBiZWZvcmUga25vd2luZyBpdCB3YXMgYWxyZWFkeSBsb2NrZWQgYnkgc29tZW9uZSBlbHNlXG5cdFx0XHRcdFx0Ly8gLS0+IHJlbW92ZSB0aGUgY3VycmVudCBsb2NrXG5cdFx0XHRcdFx0dGhpcy5kb1NlbmQoaW50ZXJuYWxNb2RlbCwgQWN0aXZpdHkuVW5sb2NrLCBtZXNzYWdlLmNsaWVudENvbnRlbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIEFjdGl2aXR5LlVubG9jazpcblx0XHRcdFx0Ly8gVGhlIHVzZXIgZGlkIGEgY2hhbmdlIGJ1dCByZXZlcnRlZCBpdCwgdGhlcmVmb3JlIHVuYmxvY2sgdGhlIGNvbnRyb2xcblx0XHRcdFx0YWN0aXZpdGllcyA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoKTtcblx0XHRcdFx0YWN0aXZpdHlLZXkgPSBnZXRBY3Rpdml0eUtleUZyb21QYXRoKG1lc3NhZ2UuY2xpZW50Q29udGVudCk7XG5cdFx0XHRcdGludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoQUNUSVZJVElFUyArIG1ldGFQYXRoLCBhY3Rpdml0aWVzPy5maWx0ZXIoKGEpID0+IGEua2V5ICE9PSBhY3Rpdml0eUtleSkpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgYSBtZXNzYWdlIHRoYXQgdGhlIGN1cnJlbnQgZHJhZnQgd2FzIGNsb3NlZCBiZSBhbm90aGVyIHVzZXIsIGFuZCBuYXZpZ2F0ZXMgYmFjayB0byBhIHByb3BlciB2aWV3LlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgY29udGV4dCB0byBuYXZpZ2F0ZSB0b1xuXHQgKiBAcGFyYW0gbWVzc2FnZVRleHQgVGhlIG1lc3NhZ2UgdG8gZGlzcGxheVxuXHQgKiBAcGFyYW0gdXNlckFjdGlvbiBUaGUgdXNlciBhY3Rpb25cblx0ICovXG5cdGRyYWZ0Q2xvc2VkQnlPdGhlclVzZXIodmlldzogRkVWaWV3LCBwYXRoOiBzdHJpbmcsIG1lc3NhZ2VUZXh0OiBzdHJpbmcsIHVzZXJBY3Rpb246IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuZGlzY29ubmVjdCh2aWV3KTtcblx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKG1lc3NhZ2VUZXh0LCB7XG5cdFx0XHRvbkNsb3NlOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YXdhaXQgdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpLmdldEJpbmRpbmcoKS5yZXNldENoYW5nZXMoKTtcblx0XHRcdFx0XHRpZiAoSW5zdGFuY2VNYW5hZ2VyLmhhc09wZW5EaWFsb2coKSkge1xuXHRcdFx0XHRcdFx0Ly8gQ2xvc2UgYWxsIG9wZW4gZGlhbG9ncyBiZWZvcmUgbmF2aWdhdGluZ1xuXHRcdFx0XHRcdFx0SW5zdGFuY2VNYW5hZ2VyLmNsb3NlQWxsRGlhbG9ncygoKSA9PiB7fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMubmF2aWdhdGUocGF0aCwgdmlldywgdXNlckFjdGlvbik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIlBlbmRpbmcgQ2hhbmdlcyBjb3VsZCBub3QgYmUgcmVzZXQgLSBzdGlsbCBuYXZpZ2F0aW5nIHRvIGFjdGl2ZSBpbnN0YW5jZVwiKTtcblx0XHRcdFx0XHR0aGlzLm5hdmlnYXRlKHBhdGgsIHZpZXcsIHVzZXJBY3Rpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIHdoZW4gYSBDSEFOR0UgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgd2Vic29ja2V0XG5cdCAqL1xuXHR1cGRhdGVPbkNoYW5nZSh2aWV3OiBGRVZpZXcsIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRjb25zdCB1cGRhdGVkT2JqZWN0c1BhdGhzID0gbWVzc2FnZS5jbGllbnRDb250ZW50LnNwbGl0KFwifFwiKTtcblxuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KTtcblx0XHRjb25zdCBjdXJyZW50Q29udGV4dCA9IGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0Y29uc3QgcmVxdWVzdFByb21pc2VzID0gdXBkYXRlZE9iamVjdHNQYXRocy5tYXAoYXN5bmMgKHBhdGgpID0+IHRoaXMuYXBwbHlVcGRhdGVzRm9yQ2hhbmdlKHZpZXcsIHBhdGgpKTtcblxuXHRcdC8vIFNpbXVsYXRlIGFueSBjaGFuZ2Ugc28gdGhlIGVkaXQgZmxvdyBzaG93cyB0aGUgZHJhZnQgaW5kaWNhdG9yIGFuZCBzZXRzIHRoZSBwYWdlIHRvIGRpcnR5XG5cdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LnVwZGF0ZURvY3VtZW50KGN1cnJlbnRDb250ZXh0LCBQcm9taXNlLmFsbChyZXF1ZXN0UHJvbWlzZXMpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIGRhdGEgY29ycmVzcG9uZGluZyB0byBhIHBhdGguXG5cdCAqIEBwYXJhbSB2aWV3IFRoZSB2aWV3IHRoYXQgd2FzIHVzZWQgaW5pdGlhbGx5IHdoZW4gY29ubmVjdGluZyB0aGUgd2Vic29ja2V0XG5cdCAqIEBwYXJhbSBwcm9wZXJ0eVBhdGhGb3JVcGRhdGUgQWJzb2x1dGUgcGF0aCB0byB0aGUgdXBkYXRlZCBwcm9wZXJ0eVxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgZGF0YSBhbmQgaXRzIHJlbGF0ZWQgc2lkZSBlZmZlY3RzIGhhdmUgYmVlbiByZWNlaXZlZFxuXHQgKi9cblx0YXN5bmMgYXBwbHlVcGRhdGVzRm9yQ2hhbmdlKHZpZXc6IEZFVmlldywgcHJvcGVydHlQYXRoRm9yVXBkYXRlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbWV0YUNvbnRleHQgPSBtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQocHJvcGVydHlQYXRoRm9yVXBkYXRlKTtcblx0XHRjb25zdCBkYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPFByb3BlcnR5PihtZXRhQ29udGV4dCk7XG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dFBhdGggPSBwcm9wZXJ0eVBhdGhGb3JVcGRhdGUuc3Vic3RyaW5nKDAsIHByb3BlcnR5UGF0aEZvclVwZGF0ZS5sYXN0SW5kZXhPZihcIi9cIikpOyAvLyBSZW1vdmUgcHJvcGVydHkgbmFtZVxuXHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSB0aGlzLmZpbmRDb250ZXh0Rm9yVXBkYXRlKHZpZXcsIHRhcmdldENvbnRleHRQYXRoKTtcblx0XHRjb25zdCBwYXJlbnRDb2xsZWN0aW9uUGF0aCA9IHRhcmdldENvbnRleHRQYXRoLnN1YnN0cmluZygwLCB0YXJnZXRDb250ZXh0UGF0aC5sYXN0SW5kZXhPZihcIihcIikpO1xuXHRcdGNvbnN0IHBhcmVudENvbnRleHRQYXRoID0gcGFyZW50Q29sbGVjdGlvblBhdGguc3Vic3RyaW5nKDAsIHBhcmVudENvbGxlY3Rpb25QYXRoLmxhc3RJbmRleE9mKFwiL1wiKSk7XG5cdFx0Y29uc3QgcGFyZW50Q29udGV4dCA9IHBhcmVudENvbnRleHRQYXRoID8gdGhpcy5maW5kQ29udGV4dEZvclVwZGF0ZSh2aWV3LCBwYXJlbnRDb250ZXh0UGF0aCkgOiB1bmRlZmluZWQ7XG5cblx0XHRpZiAoIXRhcmdldENvbnRleHQgJiYgIXBhcmVudENvbnRleHQpIHtcblx0XHRcdHJldHVybjsgLy8gTm8gY29udGV4dCBmb3IgdXBkYXRlXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNpZGVFZmZlY3RzUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNTZXJ2aWNlID0gQ29sbGFib3JhdGlvblV0aWxzLmdldEFwcENvbXBvbmVudCh2aWV3KS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblxuXHRcdFx0aWYgKHRhcmdldENvbnRleHQpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhIHRhcmdldCBjb250ZXh0LCBzbyB3ZSBjYW4gcmV0cmlldmUgdGhlIHVwZGF0ZWQgcHJvcGVydHlcblx0XHRcdFx0Y29uc3QgdGFyZ2V0TWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgodGFyZ2V0Q29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRjb25zdCByZWxhdGl2ZU1ldGFQYXRoRm9yVXBkYXRlID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHByb3BlcnR5UGF0aEZvclVwZGF0ZSkucmVwbGFjZSh0YXJnZXRNZXRhUGF0aCwgXCJcIikuc2xpY2UoMSk7XG5cdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChzaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFtyZWxhdGl2ZU1ldGFQYXRoRm9yVXBkYXRlXSwgdGFyZ2V0Q29udGV4dCwgU1lOQ0dST1VQSUQpKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gR2V0IHRoZSBmaWVsZEdyb3VwSWRzIGNvcnJlc3BvbmRpbmcgdG8gcGF0aEZvclVwZGF0ZVxuXHRcdFx0Y29uc3QgZmllbGRHcm91cElkcyA9IHNpZGVFZmZlY3RzU2VydmljZS5jb21wdXRlRmllbGRHcm91cElkcyhcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0LnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRkYXRhTW9kZWxPYmplY3QudGFyZ2V0T2JqZWN0IS5mdWxseVF1YWxpZmllZE5hbWVcblx0XHRcdCk7XG5cblx0XHRcdC8vIEV4ZWN1dGUgdGhlIHNpZGUgZWZmZWN0cyBmb3IgdGhlIGZpZWxkR3JvdXBJZHNcblx0XHRcdGlmIChmaWVsZEdyb3VwSWRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCBwYWdlQ29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0c01hcEZvckZpZWxkR3JvdXAgPSBwYWdlQ29udHJvbGxlci5fc2lkZUVmZmVjdHMuZ2V0U2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3Vwcyhcblx0XHRcdFx0XHRmaWVsZEdyb3VwSWRzLFxuXHRcdFx0XHRcdHRhcmdldENvbnRleHQgfHwgcGFyZW50Q29udGV4dFxuXHRcdFx0XHQpIGFzIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnk7XG5cdFx0XHRcdE9iamVjdC5rZXlzKHNpZGVFZmZlY3RzTWFwRm9yRmllbGRHcm91cCkuZm9yRWFjaCgoc2lkZUVmZmVjdE5hbWUpID0+IHtcblx0XHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0ID0gc2lkZUVmZmVjdHNNYXBGb3JGaWVsZEdyb3VwW3NpZGVFZmZlY3ROYW1lXTtcblx0XHRcdFx0XHRzaWRlRWZmZWN0c1Byb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0XHRwYWdlQ29udHJvbGxlci5fc2lkZUVmZmVjdHMucmVxdWVzdFNpZGVFZmZlY3RzKFxuXHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0LnNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0LmNvbnRleHQsXG5cdFx0XHRcdFx0XHRcdFNZTkNHUk9VUElELFxuXHRcdFx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwoc2lkZUVmZmVjdHNQcm9taXNlcyk7XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIGRhdGEgYWZ0ZXIgY2hhbmdlOlwiICsgZXJyKTtcblx0XHRcdHRocm93IGVycjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBkYXRhIHdoZW4gYSBERUxFVEUgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZC5cblx0ICogQHBhcmFtIHZpZXcgVGhlIHZpZXcgdGhhdCB3YXMgdXNlZCBpbml0aWFsbHkgd2hlbiBjb25uZWN0aW5nIHRoZSB3ZWJzb2NrZXRcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgd2Vic29ja2V0XG5cdCAqL1xuXHR1cGRhdGVPbkRlbGV0ZSh2aWV3OiBWaWV3LCBtZXNzYWdlOiBNZXNzYWdlKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudFBhZ2UgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpO1xuXHRcdGNvbnN0IGN1cnJlbnRDb250ZXh0ID0gY3VycmVudFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBjdXJyZW50UGF0aCA9IGN1cnJlbnRDb250ZXh0LmdldFBhdGgoKTtcblxuXHRcdGNvbnN0IGRlbGV0ZWRPYmplY3RQYXRocyA9IG1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIik7XG5cblx0XHQvLyBjaGVjayBpZiB1c2VyIGN1cnJlbnRseSBkaXNwbGF5cyBhIGRlbGV0ZWQgb2JqZWN0IG9yIG9uZSBvZiBpdHMgZGVzY2VuZGFudHNcblx0XHRjb25zdCBkZWxldGVkUGF0aEluVXNlID0gZGVsZXRlZE9iamVjdFBhdGhzLmZpbmQoKGRlbGV0ZWRQYXRoKSA9PiBjdXJyZW50UGF0aC5zdGFydHNXaXRoKGRlbGV0ZWRQYXRoKSk7XG5cdFx0aWYgKGRlbGV0ZWRQYXRoSW5Vc2UpIHtcblx0XHRcdC8vIGFueSBvdGhlciB1c2VyIGRlbGV0ZWQgdGhlIG9iamVjdCBJJ20gY3VycmVudGx5IGxvb2tpbmcgYXQuIEluZm9ybSB0aGUgdXNlciB3ZSB3aWxsIG5hdmlnYXRlIHRvIHJvb3Qgbm93XG5cdFx0XHRNZXNzYWdlQm94LmluZm9ybWF0aW9uKENvbGxhYm9yYXRpb25VdGlscy5nZXRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfREVMRVRFXCIsIG1lc3NhZ2UudXNlckRlc2NyaXB0aW9uKSwge1xuXHRcdFx0XHRvbkNsb3NlOiAoKSA9PiB7XG5cdFx0XHRcdFx0Ly8gV2UgcmV0cmlldmUgdGhlIGRlbGV0ZWQgY29udGV4dCBhcyBhIGtlZXAtYWxpdmUsIGFuZCBkaXNhYmxlIGl0cyBrZWVwYWxpdmUgc3RhdHVzLFxuXHRcdFx0XHRcdC8vIHNvIHRoYXQgaXQgaXMgcHJvcGVybHkgZGVzdHJveWVkIHdoZW4gcmVmcmVzaGluZyBkYXRhXG5cdFx0XHRcdFx0Y29uc3QgdGFyZ2V0Q29udGV4dCA9IGN1cnJlbnRDb250ZXh0LmdldE1vZGVsKCkuZ2V0S2VlcEFsaXZlQ29udGV4dChkZWxldGVkUGF0aEluVXNlKTtcblx0XHRcdFx0XHR0YXJnZXRDb250ZXh0LnNldEtlZXBBbGl2ZShmYWxzZSk7XG5cdFx0XHRcdFx0Y29uc3QgcmVxdWVzdFByb21pc2UgPSB0aGlzLmFwcGx5VXBkYXRlc0ZvckNvbGxlY3Rpb24odmlldywgZGVsZXRlZE9iamVjdFBhdGhzWzBdKTtcblx0XHRcdFx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkuZWRpdEZsb3cudXBkYXRlRG9jdW1lbnQoY3VycmVudFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSwgcmVxdWVzdFByb21pc2UpO1xuXHRcdFx0XHRcdGN1cnJlbnRQYWdlLmdldENvbnRyb2xsZXIoKS5fcm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCh0YXJnZXRDb250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5hcHBseVVwZGF0ZXNGb3JDb2xsZWN0aW9uKHZpZXcsIGRlbGV0ZWRPYmplY3RQYXRoc1swXSk7XG5cdFx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkuZWRpdEZsb3cudXBkYXRlRG9jdW1lbnQoY3VycmVudFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSwgcmVxdWVzdFByb21pc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIGRhdGEgd2hlbiBhIENSRUFURSBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSB3ZWJzb2NrZXRcblx0ICovXG5cdHVwZGF0ZU9uQ3JlYXRlKHZpZXc6IFZpZXcsIG1lc3NhZ2U6IE1lc3NhZ2UpOiB2b2lkIHtcblx0XHRjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0Q3VycmVudFBhZ2Uodmlldyk7XG5cdFx0Y29uc3QgY3JlYXRlZE9iamVjdFBhdGhzID0gbWVzc2FnZS5jbGllbnRDb250ZW50LnNwbGl0KFwifFwiKTtcblxuXHRcdGNvbnN0IHJlcXVlc3RQcm9taXNlID0gdGhpcy5hcHBseVVwZGF0ZXNGb3JDb2xsZWN0aW9uKHZpZXcsIGNyZWF0ZWRPYmplY3RQYXRoc1swXSk7XG5cdFx0Ly8gU2ltdWxhdGUgYSBjaGFuZ2Ugc28gdGhlIGVkaXQgZmxvdyBzaG93cyB0aGUgZHJhZnQgaW5kaWNhdG9yIGFuZCBzZXRzIHRoZSBwYWdlIHRvIGRpcnR5XG5cdFx0Y3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpLmVkaXRGbG93LnVwZGF0ZURvY3VtZW50KGN1cnJlbnRQYWdlLmdldEJpbmRpbmdDb250ZXh0KCksIHJlcXVlc3RQcm9taXNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIGRhdGEgaW4gYSBjb2xsZWN0aW9uLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gcGF0aEluQ29sbGVjdGlvbiBBIHBhdGggdG8gYW4gZW50aXR5IGluIHRoZSBjb2xsZWN0aW9uXG5cdCAqL1xuXHRhc3luYyBhcHBseVVwZGF0ZXNGb3JDb2xsZWN0aW9uKHZpZXc6IFZpZXcsIHBhdGhJbkNvbGxlY3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbGxhYm9yYXRpb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0Y29uc3QgcGFyZW50UGF0aCA9IHBhdGhJbkNvbGxlY3Rpb24uc3Vic3RyaW5nKDAsIHBhdGhJbkNvbGxlY3Rpb24ubGFzdEluZGV4T2YoXCIvXCIpKTtcblx0XHRjb25zdCBwYXJlbnRDb250ZXh0ID0gdGhpcy5maW5kQ29udGV4dEZvclVwZGF0ZSh2aWV3LCBwYXJlbnRQYXRoKTtcblxuXHRcdGlmIChwYXJlbnRDb250ZXh0KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0c1Byb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBbXTtcblxuXHRcdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBwYXJlbnRDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IG1ldGFQYXRoRm9yVXBkYXRlID0gbWV0YU1vZGVsLmdldE1ldGFQYXRoKHBhdGhJbkNvbGxlY3Rpb24pO1xuXHRcdFx0XHRjb25zdCBwYXJlbnRNZXRhUGF0aCA9IG1ldGFNb2RlbC5nZXRNZXRhUGF0aChwYXJlbnRDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdGNvbnN0IHJlbGF0aXZlUGF0aCA9IG1ldGFQYXRoRm9yVXBkYXRlLnJlcGxhY2UoYCR7cGFyZW50TWV0YVBhdGh9L2AsIFwiXCIpO1xuXG5cdFx0XHRcdC8vIFJlbG9hZCB0aGUgY29sbGVjdGlvblxuXHRcdFx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRcdHNpZGVFZmZlY3RzUHJvbWlzZXMucHVzaChzaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFtyZWxhdGl2ZVBhdGhdLCBwYXJlbnRDb250ZXh0LCBTWU5DR1JPVVBJRCkpO1xuXG5cdFx0XHRcdC8vIFJlcXVlc3QgdGhlIHNpZGUgZWZmZWN0cyBmb3IgdGhlIGNvbGxlY3Rpb25cblx0XHRcdFx0c2lkZUVmZmVjdHNQcm9taXNlcy5wdXNoKFxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHNGb3JOYXZpZ2F0aW9uUHJvcGVydHkocmVsYXRpdmVQYXRoLCBwYXJlbnRDb250ZXh0LCBTWU5DR1JPVVBJRCwgdHJ1ZSlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChzaWRlRWZmZWN0c1Byb21pc2VzKTtcblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJGYWlsZWQgdG8gdXBkYXRlIGRhdGEgYWZ0ZXIgY29sbGVjdGlvbiB1cGRhdGU6XCIgKyBlcnIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBVcGRhdGVzIGRhdGEgd2hlbiBhIEFDVElPTiBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSByZWNlaXZlZCBmcm9tIHRoZSB3ZWJzb2NrZXRcblx0ICovXG5cdHVwZGF0ZU9uQWN0aW9uKHZpZXc6IEZFVmlldywgbWVzc2FnZTogTWVzc2FnZSk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KTtcblx0XHRjb25zdCBwYXRoc0ZvckFjdGlvbiA9IG1lc3NhZ2UuY2xpZW50Q29udGVudC5zcGxpdChcInxcIik7XG5cdFx0Y29uc3QgYWN0aW9uTmFtZSA9IG1lc3NhZ2UuY2xpZW50VHJpZ2dlcmVkQWN0aW9uTmFtZSB8fCBcIlwiO1xuXHRcdGNvbnN0IHJlcXVlc3RlZFByb3BlcnRpZXMgPSBtZXNzYWdlLmNsaWVudFJlcXVlc3RlZFByb3BlcnRpZXM/LnNwbGl0KFwifFwiKTtcblx0XHRjb25zdCByZWZyZXNoTGlzdEJpbmRpbmcgPSBtZXNzYWdlLmNsaWVudFJlZnJlc2hMaXN0QmluZGluZyA9PT0gXCJ0cnVlXCI7XG5cblx0XHRsZXQgcmVxdWVzdFByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuXHRcdGlmIChyZWZyZXNoTGlzdEJpbmRpbmcpIHtcblx0XHRcdHJlcXVlc3RQcm9taXNlcy5wdXNoKHRoaXMuYXBwbHlVcGRhdGVzRm9yQ29sbGVjdGlvbih2aWV3LCBwYXRoc0ZvckFjdGlvblswXSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXF1ZXN0UHJvbWlzZXMgPSBwYXRoc0ZvckFjdGlvbi5tYXAoYXN5bmMgKHBhdGgpID0+IHRoaXMucmVxdWVzdFVwZGF0ZUZvckFjdGlvbih2aWV3LCBwYXRoLCBhY3Rpb25OYW1lLCByZXF1ZXN0ZWRQcm9wZXJ0aWVzKSk7XG5cdFx0fVxuXG5cdFx0Ly8gU2ltdWxhdGUgYW55IGNoYW5nZSBzbyB0aGUgZWRpdCBmbG93IHNob3dzIHRoZSBkcmFmdCBpbmRpY2F0b3IgYW5kIHNldHMgdGhlIHBhZ2UgdG8gZGlydHlcblx0XHRjdXJyZW50UGFnZS5nZXRDb250cm9sbGVyKCkuZWRpdEZsb3cudXBkYXRlRG9jdW1lbnQoY3VycmVudFBhZ2UuZ2V0QmluZGluZ0NvbnRleHQoKSwgUHJvbWlzZS5hbGwocmVxdWVzdFByb21pc2VzKSk7XG5cdH1cblxuXHQvKipcblx0ICogVXBkYXRlcyBzaWRlLWVmZmVjdHMgZGF0YSB3aGVuIGFuIGFjdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgb24gYSBjb250ZXh0LlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gcGF0aEZvckFjdGlvbiBQYXRoIG9mIHRoZSBjb250ZXh0IHRvIGFwcGx5IHRoZSBhY3Rpb24gdG9cblx0ICogQHBhcmFtIGFjdGlvbk5hbWUgTmFtZSBvZiB0aGUgYWN0aW9uXG5cdCAqIEBwYXJhbSByZXF1ZXN0ZWRQcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgc2lkZS1lZmZlY3RzIGRhdGEgaGFzIGJlZW4gbG9hZGVkXG5cdCAqL1xuXHRhc3luYyByZXF1ZXN0VXBkYXRlRm9yQWN0aW9uKHZpZXc6IEZFVmlldywgcGF0aEZvckFjdGlvbjogc3RyaW5nLCBhY3Rpb25OYW1lOiBzdHJpbmcsIHJlcXVlc3RlZFByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHRhcmdldENvbnRleHQgPSB0aGlzLmZpbmRDb250ZXh0Rm9yVXBkYXRlKHZpZXcsIHBhdGhGb3JBY3Rpb24pO1xuXHRcdGlmICghdGFyZ2V0Q29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbGxhYm9yYXRpb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdFNlcnZpY2UgPSBhcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0Y29uc3Qgc2lkZUVmZmVjdHNGcm9tQWN0aW9uID0gc2lkZUVmZmVjdFNlcnZpY2UuZ2V0T0RhdGFBY3Rpb25TaWRlRWZmZWN0cyhhY3Rpb25OYW1lLCB0YXJnZXRDb250ZXh0KTtcblx0XHRjb25zdCBzaWRlRWZmZWN0UHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXHRcdGlmIChzaWRlRWZmZWN0c0Zyb21BY3Rpb24pIHtcblx0XHRcdGlmIChzaWRlRWZmZWN0c0Zyb21BY3Rpb24ucGF0aEV4cHJlc3Npb25zPy5sZW5ndGgpIHtcblx0XHRcdFx0c2lkZUVmZmVjdFByb21pc2VzLnB1c2goXG5cdFx0XHRcdFx0c2lkZUVmZmVjdFNlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzRnJvbUFjdGlvbi5wYXRoRXhwcmVzc2lvbnMsIHRhcmdldENvbnRleHQsIFNZTkNHUk9VUElEKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAocmVxdWVzdGVkUHJvcGVydGllcyAmJiByZXF1ZXN0ZWRQcm9wZXJ0aWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdC8vY2xlYW4tdXAgb2YgdGhlIHByb3BlcnRpZXMgdG8gcmVxdWVzdCBsaXN0OlxuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdmlldy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWV0YVBhdGhGb3JBY3Rpb24gPSB0aGlzLmNhbGN1bGF0ZU1ldGFQYXRoKHZpZXcsIHBhdGhGb3JBY3Rpb24pO1xuXHRcdFx0Y29uc3QgZGF0YU1vZGVsUGF0aCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldENvbnRleHQobWV0YVBhdGhGb3JBY3Rpb24pKTtcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNUb1JlcXVlc3QgPSBkYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllc1xuXHRcdFx0XHQubWFwKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZpbHRlcigocHJvcCkgPT4gcmVxdWVzdGVkUHJvcGVydGllcy5pbmNsdWRlcyhwcm9wKSk7XG5cdFx0XHRpZiAocHJvcGVydGllc1RvUmVxdWVzdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdHNpZGVFZmZlY3RQcm9taXNlcy5wdXNoKHNpZGVFZmZlY3RTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhwcm9wZXJ0aWVzVG9SZXF1ZXN0LCB0YXJnZXRDb250ZXh0LCBTWU5DR1JPVVBJRCkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKHNpZGVFZmZlY3RQcm9taXNlcyk7XG5cdH1cblxuXHQvKipcblx0ICogRmluZHMgYSBjb250ZXh0IHRvIGFwcGx5IGFuIHVwZGF0ZSBtZXNzYWdlIChDSEFOR0UsIENSRUFURSwgREVMRVRFIG9yIEFDVElPTikuXG5cdCAqIEBwYXJhbSB2aWV3ICBUaGUgdmlldyB0aGF0IHdhcyB1c2VkIGluaXRpYWxseSB3aGVuIGNvbm5lY3RpbmcgdGhlIHdlYnNvY2tldFxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBvZiB0aGUgY29udGV4dCB0byBiZSBmb3VuZCAoc2hhbGwgcG9pbnQgdG8gYW4gZW50aXR5LCBub3QgYSBwcm9wZXJ0eSlcblx0ICogQHJldHVybnMgQSBjb250ZXh0IGlmIGl0IGNvdWxkIGJlIGZvdW5kXG5cdCAqL1xuXHRmaW5kQ29udGV4dEZvclVwZGF0ZSh2aWV3OiBWaWV3LCBwYXRoOiBzdHJpbmcpOiBDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXBhdGgpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdC8vIEZpbmQgYWxsIHBvdGVudGlhbCBwYXRoc1xuXHRcdGNvbnN0IHRhcmdldFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHdoaWxlICghcGF0aC5lbmRzV2l0aChcIilcIikpIHtcblx0XHRcdHRhcmdldFBhdGhzLnVuc2hpZnQocGF0aCk7XG5cdFx0XHRwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sYXN0SW5kZXhPZihcIi9cIikpO1xuXHRcdH1cblx0XHR0YXJnZXRQYXRocy51bnNoaWZ0KHBhdGgpO1xuXG5cdFx0Y29uc3QgcGFyZW50Q29sbGVjdGlvblBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKFwiKFwiKSk7IC8vIFJlbW92ZSB0aGUgbGFzdCBrZXlcblxuXHRcdGxldCB0YXJnZXRDb250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdGxldCBjdXJyZW50Q29udGV4dCA9IHRoaXMuZ2V0Q3VycmVudFBhZ2UodmlldykuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdHdoaWxlIChjdXJyZW50Q29udGV4dCAmJiAhdGFyZ2V0Q29udGV4dCkge1xuXHRcdFx0aWYgKHRhcmdldFBhdGhzLmluY2x1ZGVzKGN1cnJlbnRDb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdFx0dGFyZ2V0Q29udGV4dCA9IGN1cnJlbnRDb250ZXh0O1xuXHRcdFx0fVxuXG5cdFx0XHRjdXJyZW50Q29udGV4dCA9IGN1cnJlbnRDb250ZXh0LmdldEJpbmRpbmcoKT8uZ2V0Q29udGV4dCgpIGFzIENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKHRhcmdldENvbnRleHQpIHtcblx0XHRcdC8vIEZvdW5kICFcblx0XHRcdHJldHVybiB0YXJnZXRDb250ZXh0O1xuXHRcdH1cblxuXHRcdC8vIFRyeSB0byBmaW5kIHRoZSB0YXJnZXQgY29udGV4dCBpbiBhIGxpc3RCaW5kaW5nXG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldEN1cnJlbnRQYWdlKHZpZXcpLmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0TW9kZWwoKTtcblx0XHRjb25zdCBwYXJlbnRMaXN0QmluZGluZyA9IG1vZGVsLmdldEFsbEJpbmRpbmdzKCkuZmluZCgoYmluZGluZykgPT4ge1xuXHRcdFx0Y29uc3QgYmluZGluZ1BhdGggPSBiaW5kaW5nLmlzUmVsYXRpdmUoKSA/IGJpbmRpbmcuZ2V0UmVzb2x2ZWRQYXRoKCkgOiBiaW5kaW5nLmdldFBhdGgoKTtcblx0XHRcdHJldHVybiBiaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpICYmIGJpbmRpbmdQYXRoID09PSBwYXJlbnRDb2xsZWN0aW9uUGF0aDtcblx0XHR9KSBhcyBPRGF0YUxpc3RCaW5kaW5nIHwgdW5kZWZpbmVkO1xuXHRcdC8vIFdlJ3ZlIGZvdW5kIGEgbGlzdCBiaW5kaW5nIHRoYXQgY291bGQgY29udGFpbiB0aGUgdGFyZ2V0IGNvbnRleHQgLS0+IGxvb2sgZm9yIGl0XG5cdFx0dGFyZ2V0Q29udGV4dCA9IHBhcmVudExpc3RCaW5kaW5nPy5nZXRBbGxDdXJyZW50Q29udGV4dHMoKS5maW5kKChjb250ZXh0KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0UGF0aHMuaW5jbHVkZXMoY29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHRhcmdldENvbnRleHQ7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIGFmdGVyIGEgZHJhZnQgd2FzIGNsb3NlZCBieSBhbm90aGVyIHVzZXIuXG5cdCAqIE5hdmlnYXRlcyBiYWNrIGlmIGluIGNyZWF0aW9uIG1vZGUgYW5kIGRyYWZ0IHdhcyBkaXNjYXJkZWQsIGVsc2UgbmF2aWdhdGVzIHRvIChyZWNyZWF0ZWQpIHRhcmdldCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gcGF0aCBBYnNvbHV0ZSBwYXRoIHRvIG5hdmlnYXRlIHRvXG5cdCAqIEBwYXJhbSB2aWV3IEN1cnJlbnQgRkUgdmlld1xuXHQgKiBAcGFyYW0gdXNlckFjdGlvbiBVc2VyIGFjdGlvbiB0aGF0IHRyaWdnZXJlZCB0aGUgbmF2aWdhdGlvblxuXHQgKi9cblx0bmF2aWdhdGUocGF0aDogc3RyaW5nLCB2aWV3OiBGRVZpZXcsIHVzZXJBY3Rpb246IHN0cmluZyk6IHZvaWQge1xuXHRcdC8vIFRPRE86IHJvdXRpbmcubmF2aWdhdGUgZG9lc24ndCBjb25zaWRlciBzZW1hbnRpYyBib29rbWFya2luZ1xuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5nZXRDdXJyZW50UGFnZSh2aWV3KTtcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0ID0gdmlldy5nZXRNb2RlbCgpLmJpbmRDb250ZXh0KHBhdGgpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdGlmICghdGFyZ2V0Q29udGV4dCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlLm5hdmlnYXRlOiBUYXJnZXQgY29udGV4dCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgZm9yIHBhdGggXCIgKyBwYXRoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBjb250cm9sbGVyID0gY3VycmVudFBhZ2UuZ2V0Q29udHJvbGxlcigpO1xuXHRcdGNvbnN0IHJvdXRpbmcgPSBjb250cm9sbGVyLl9yb3V0aW5nO1xuXHRcdGNvbnN0IGlzQ3JlYXRpb25Nb2RlID0gY29udHJvbGxlci5lZGl0Rmxvdy5nZXRDcmVhdGlvbk1vZGUoKTtcblx0XHRjb25zdCBpc0Rpc2NhcmQgPSB1c2VyQWN0aW9uID09PSBBY3Rpdml0eS5EaXNjYXJkO1xuXG5cdFx0aWYgKGlzQ3JlYXRpb25Nb2RlICYmIGlzRGlzY2FyZCkge1xuXHRcdFx0Ly8gSWYgdGhlIG9iamVjdCB3YXMgYSBuZXdseSBjcmVhdGVkIG9uZSwgd2UgbmF2aWdhdGUgYmFja1xuXHRcdFx0cm91dGluZy5uYXZpZ2F0ZUJhY2tGcm9tQ29udGV4dCh0YXJnZXRDb250ZXh0KTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmF2aWdhdGUgdG8gdGhlIGNvbnRleHQsIGJ1dCB3ZSBmb3JjZSBpdHMgcmVjcmVhdGlvbiBzbyB0aGF0IGFsbCAkc2VsZWN0cyBhcmUgcHJvcGVybHkgY29tcHV0ZWQgYnkgaW50ZXJuYWxSb3V0aW5nXG5cdFx0cm91dGluZy5uYXZpZ2F0ZVRvQ29udGV4dCh0YXJnZXRDb250ZXh0LCB7IHJlY3JlYXRlQ29udGV4dDogdHJ1ZSB9KTtcblx0fVxuXG5cdGdldEN1cnJlbnRQYWdlKHZpZXc6IFZpZXcpOiBGRVZpZXcge1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IENvbGxhYm9yYXRpb25VdGlscy5nZXRBcHBDb21wb25lbnQodmlldyk7XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldEN1cnJlbnRQYWdlVmlldyhhcHBDb21wb25lbnQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgdGhlIG1ldGFwYXRoIGZyb20gb25lIG9yIG1vcmUgZGF0YSBwYXRoKHMpLlxuXHQgKiBAcGFyYW0gdmlldyBUaGUgY3VycmVudCB2aWV3XG5cdCAqIEBwYXJhbSBwYXRoIE9uZSBvcmUgbW9yZSBkYXRhIHBhdGgocyksIGluIGNhc2Ugb2YgbXVsdGlwbGUgcGF0aHMgc2VwYXJhdGVkIGJ5ICd8J1xuXHQgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBtZXRhUGF0aFxuXHQgKi9cblx0Y2FsY3VsYXRlTWV0YVBhdGgodmlldzogRkVWaWV3LCBwYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRsZXQgbWV0YVBhdGggPSBcIlwiO1xuXHRcdGlmIChwYXRoKSB7XG5cdFx0XHQvLyBpbiBjYXNlIG1vcmUgdGhhbiBvbmUgcGF0aCBpcyBzZW50IGFsbCBvZiB0aGVtIGhhdmUgdG8gdXNlIHRoZSBzYW1lIG1ldGFwYXRoIHRoZXJlZm9yZSB3ZSBqdXN0IGNvbnNpZGVyIHRoZSBmaXJzdCBvbmVcblx0XHRcdGNvbnN0IGRhdGFQYXRoID0gcGF0aC5zcGxpdChcInxcIilbMF07XG5cdFx0XHRtZXRhUGF0aCA9IHZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKS5nZXRNZXRhUGF0aChkYXRhUGF0aCk7XG5cdFx0fVxuXHRcdHJldHVybiBtZXRhUGF0aDtcblx0fVxuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5PiB7XG5cdHB1YmxpYyBhc3luYyBjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5Pik6IFByb21pc2U8Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZT4ge1xuXHRcdGNvbnN0IGNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UgPSBuZXcgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZShvU2VydmljZUNvbnRleHQpO1xuXHRcdHJldHVybiBjb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMEJBLE1BQU1BLFlBQVksR0FBRyw2QkFBNkI7RUFDbEQsTUFBTUMsV0FBVyxHQUFHLDRCQUE0QjtFQUNoRCxNQUFNQyxVQUFVLEdBQUcsMkJBQTJCO0VBQzlDLE1BQU1DLGtCQUFrQixHQUFHLDhCQUE4QjtFQUN6RCxNQUFNQyxxQkFBcUIsR0FBRyxpQ0FBaUM7RUFDL0QsTUFBTUMsb0JBQW9CLEdBQUcsZ0NBQWdDO0VBQzdELE1BQU1DLFdBQVcsR0FBRyxZQUFZO0VBRWhDLE1BQU1DLFlBQVksR0FBRyxHQUFHLENBQUMsQ0FBQztFQUFBLElBT2JDLHlCQUF5QiwwQkFBQUMsUUFBQTtJQUFBLFNBQUFELDBCQUFBO01BQUEsT0FBQUMsUUFBQSxDQUFBQyxLQUFBLE9BQUFDLFNBQUE7SUFBQTtJQUFBQyxRQUFBLENBQUFKLHlCQUFBLEdBQUFBLHlCQUFBO0lBQUFLLGNBQUEsQ0FBQUwseUJBQUEsRUFBQUMsUUFBQTtJQUFBLElBQUFLLE1BQUEsR0FBQU4seUJBQUEsQ0FBQU8sU0FBQTtJQUdyQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFMQ0QsTUFBQSxDQU1BRSxnQkFBZ0IsR0FBaEIsU0FBQUEsZ0JBQWdCQSxDQUFDQyxhQUF3QixFQUFFQyxZQUFvQixFQUFXO01BQ3pFLE1BQU1DLFlBQXlDLEdBQUdGLGFBQWEsQ0FBQ0csV0FBVyxDQUFDcEIsWUFBWSxDQUFDO01BQ3pGLElBQUksQ0FBQ21CLFlBQVksRUFBRTtRQUNsQixPQUFPLEtBQUs7TUFDYixDQUFDLE1BQU07UUFDTixPQUFPQSxZQUFZLENBQUNFLFFBQVEsQ0FBQ0gsWUFBWSxDQUFDO01BQzNDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNB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
|
|
@@ -492,7 +492,8 @@ export class CollaborativeDraftService extends Service<CollaborativeDraftService
|
|
|
492
492
|
this.draftClosedByOtherUser(
|
|
493
493
|
view,
|
|
494
494
|
message.clientContent,
|
|
495
|
-
CollaborationUtils.getText("C_COLLABORATIONDRAFT_ACTIVATE", sender.name)
|
|
495
|
+
CollaborationUtils.getText("C_COLLABORATIONDRAFT_ACTIVATE", sender.name),
|
|
496
|
+
message.userAction
|
|
496
497
|
);
|
|
497
498
|
break;
|
|
498
499
|
|
|
@@ -500,7 +501,8 @@ export class CollaborativeDraftService extends Service<CollaborativeDraftService
|
|
|
500
501
|
this.draftClosedByOtherUser(
|
|
501
502
|
view,
|
|
502
503
|
message.clientContent,
|
|
503
|
-
CollaborationUtils.getText("C_COLLABORATIONDRAFT_DISCARD", sender.name)
|
|
504
|
+
CollaborationUtils.getText("C_COLLABORATIONDRAFT_DISCARD", sender.name),
|
|
505
|
+
message.userAction
|
|
504
506
|
);
|
|
505
507
|
break;
|
|
506
508
|
|
|
@@ -548,8 +550,9 @@ export class CollaborativeDraftService extends Service<CollaborativeDraftService
|
|
|
548
550
|
* @param view The view that was used initially when connecting the websocket
|
|
549
551
|
* @param path The path of the context to navigate to
|
|
550
552
|
* @param messageText The message to display
|
|
553
|
+
* @param userAction The user action
|
|
551
554
|
*/
|
|
552
|
-
draftClosedByOtherUser(view: FEView, path: string, messageText: string): void {
|
|
555
|
+
draftClosedByOtherUser(view: FEView, path: string, messageText: string, userAction: string): void {
|
|
553
556
|
this.disconnect(view);
|
|
554
557
|
MessageBox.information(messageText, {
|
|
555
558
|
onClose: async () => {
|
|
@@ -559,11 +562,11 @@ export class CollaborativeDraftService extends Service<CollaborativeDraftService
|
|
|
559
562
|
// Close all open dialogs before navigating
|
|
560
563
|
InstanceManager.closeAllDialogs(() => {});
|
|
561
564
|
}
|
|
562
|
-
this.navigate(path, view);
|
|
565
|
+
this.navigate(path, view, userAction);
|
|
563
566
|
return;
|
|
564
567
|
} catch (error) {
|
|
565
568
|
Log.error("Pending Changes could not be reset - still navigating to active instance");
|
|
566
|
-
this.navigate(path, view);
|
|
569
|
+
this.navigate(path, view, userAction);
|
|
567
570
|
}
|
|
568
571
|
}
|
|
569
572
|
});
|
|
@@ -848,18 +851,35 @@ export class CollaborativeDraftService extends Service<CollaborativeDraftService
|
|
|
848
851
|
return targetContext;
|
|
849
852
|
}
|
|
850
853
|
|
|
851
|
-
|
|
854
|
+
/**
|
|
855
|
+
* Navigates after a draft was closed by another user.
|
|
856
|
+
* Navigates back if in creation mode and draft was discarded, else navigates to (recreated) target context.
|
|
857
|
+
* @param path Absolute path to navigate to
|
|
858
|
+
* @param view Current FE view
|
|
859
|
+
* @param userAction User action that triggered the navigation
|
|
860
|
+
*/
|
|
861
|
+
navigate(path: string, view: FEView, userAction: string): void {
|
|
852
862
|
// TODO: routing.navigate doesn't consider semantic bookmarking
|
|
853
863
|
const currentPage = this.getCurrentPage(view);
|
|
854
864
|
const targetContext = view.getModel().bindContext(path).getBoundContext();
|
|
865
|
+
if (!targetContext) {
|
|
866
|
+
Log.warning("CollaborativeDraftService.navigate: Target context could not be resolved for path " + path);
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
855
869
|
|
|
856
|
-
|
|
870
|
+
const controller = currentPage.getController();
|
|
871
|
+
const routing = controller._routing;
|
|
872
|
+
const isCreationMode = controller.editFlow.getCreationMode();
|
|
873
|
+
const isDiscard = userAction === Activity.Discard;
|
|
874
|
+
|
|
875
|
+
if (isCreationMode && isDiscard) {
|
|
857
876
|
// If the object was a newly created one, we navigate back
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
// Otherwise we navigate to the context, but we force its recreation so that all $selects are properly computed by internalRouting
|
|
861
|
-
currentPage.getController()._routing.navigateToContext(targetContext, { recreateContext: true });
|
|
877
|
+
routing.navigateBackFromContext(targetContext);
|
|
878
|
+
return;
|
|
862
879
|
}
|
|
880
|
+
|
|
881
|
+
// Otherwise we navigate to the context, but we force its recreation so that all $selects are properly computed by internalRouting
|
|
882
|
+
routing.navigateToContext(targetContext, { recreateContext: true });
|
|
863
883
|
}
|
|
864
884
|
|
|
865
885
|
getCurrentPage(view: View): FEView {
|