@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
|
@@ -862,14 +862,21 @@ async function deleteDraft(
|
|
|
862
862
|
// occur, but needs quite specific modelling (button visibility on item level bound against service property in an FCL app)
|
|
863
863
|
// and acting (looking at button on third column while discarding on 2nd column). Currently, model seems not to be prepared
|
|
864
864
|
// for that case, thus due to the minimal impact (only intermediate visual state), accepting this for the time being.
|
|
865
|
-
|
|
865
|
+
const isInlineEditGroup = oContext.getUpdateGroupId() === CommonUtils.INLINEEDIT_UPDATEGROUPID;
|
|
866
|
+
const metaModel = oContext.getModel().getMetaModel();
|
|
867
|
+
const targetEntitySet = getInvolvedDataModelObjects(metaModel.getMetaContext(oContext.getPath()))?.targetEntitySet;
|
|
868
|
+
const useModelDelete =
|
|
869
|
+
!oAppComponent._isFclEnabled() &&
|
|
866
870
|
!oContext.getProperty("IsActiveEntity") &&
|
|
867
|
-
ModelHelper.isDraftRoot(
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
oContext.
|
|
871
|
-
|
|
872
|
-
|
|
871
|
+
ModelHelper.isDraftRoot(targetEntitySet) &&
|
|
872
|
+
oContext.getProperty("HasActiveEntity");
|
|
873
|
+
if (useModelDelete) {
|
|
874
|
+
return oContext.getModel().delete(oContext);
|
|
875
|
+
}
|
|
876
|
+
if (isInlineEditGroup) {
|
|
877
|
+
return oContext.delete("$auto");
|
|
878
|
+
}
|
|
879
|
+
return oContext.delete();
|
|
873
880
|
}
|
|
874
881
|
} else {
|
|
875
882
|
//Use Discard Post Action if it is a draft entity and discard action exists
|
|
@@ -877,6 +884,31 @@ async function deleteDraft(
|
|
|
877
884
|
}
|
|
878
885
|
}
|
|
879
886
|
|
|
887
|
+
/**
|
|
888
|
+
* Terminates the draft session on the server side.
|
|
889
|
+
* @param context The context to be terminated
|
|
890
|
+
*/
|
|
891
|
+
function terminateDraftSession(context: Context): void {
|
|
892
|
+
const model = context?.getModel();
|
|
893
|
+
|
|
894
|
+
// Only clean up ABAP sessions for draft programming model
|
|
895
|
+
if (model?.getHttpHeaders(true)?.["SAP-ContextId"]) {
|
|
896
|
+
try {
|
|
897
|
+
// Access the private oRequestor property with proper typing, this has been aligned with the model colleagues
|
|
898
|
+
// they might need to offer a dedicated restricted method for sap.fe in the future, but until then we can use
|
|
899
|
+
// it like this.
|
|
900
|
+
(
|
|
901
|
+
model as unknown as {
|
|
902
|
+
oRequestor: { sendRequest: (method: string, url: string, headers: Record<string, string>) => void };
|
|
903
|
+
}
|
|
904
|
+
).oRequestor.sendRequest("HEAD", "", { "sap-terminate": "session" });
|
|
905
|
+
} catch (error) {
|
|
906
|
+
// Log error but don't block the operation
|
|
907
|
+
Log.info("Failed to terminate ABAP session during draft cleanup", error as string);
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
|
|
880
912
|
const draft = {
|
|
881
913
|
createDraftFromActiveDocument: createDraftFromActiveDocument,
|
|
882
914
|
activateDocument: activateDocument,
|
|
@@ -893,7 +925,8 @@ const draft = {
|
|
|
893
925
|
executeDraftDiscardAction: executeDraftDiscardAction,
|
|
894
926
|
NavigationType: draftDataLossPopup.NavigationType,
|
|
895
927
|
getActionName: getActionName,
|
|
896
|
-
showEditConfirmationMessageBox: showEditConfirmationMessageBox
|
|
928
|
+
showEditConfirmationMessageBox: showEditConfirmationMessageBox,
|
|
929
|
+
terminateDraftSession: terminateDraftSession
|
|
897
930
|
};
|
|
898
931
|
|
|
899
932
|
export default draft;
|
|
@@ -326,9 +326,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/E
|
|
|
326
326
|
dataLossDialog.close();
|
|
327
327
|
break;
|
|
328
328
|
case DraftDataLossOptions.Keep:
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
329
|
+
{
|
|
330
|
+
const ctx = context ?? controller.getView().getBindingContext();
|
|
331
|
+
if (ctx) {
|
|
332
|
+
controller.editFlow.terminateDraftSession(ctx);
|
|
333
|
+
}
|
|
334
|
+
processFunctionForDrafts();
|
|
335
|
+
dataLossDialog.close();
|
|
336
|
+
break;
|
|
337
|
+
}
|
|
332
338
|
case DraftDataLossOptions.Discard:
|
|
333
339
|
draftDataLossPopup.discardDraft(controller, skipBindingToView, context, hiddenDraft, skipBackNavigation).then(discardedDraft => processFunctionForDrafts(discardedDraft)).catch(function (error) {
|
|
334
340
|
Log.error("Error while discarding draft", error);
|
|
@@ -354,4 +360,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/E
|
|
|
354
360
|
};
|
|
355
361
|
return draftDataLossPopup;
|
|
356
362
|
}, false);
|
|
357
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZpZ2F0aW9uVHlwZSIsIkRyYWZ0RGF0YUxvc3NPcHRpb25zIiwiZGF0YUxvc3NEaWFsb2ciLCJEcmFmdERhdGFMb3NzRGlhbG9nIiwic2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIiwicGFnZUNvbnRyb2xsZXIiLCJvTWFuaWZlc3QiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdEVudHJ5IiwiYXBwIiwicHJvY2Vzc0ZjbE1vZGUiLCJkcmFmdEFkbWluRGF0YSIsImZuQ2FuY2VsRnVuY3Rpb24iLCJvQ29udHJvbGxlciIsInByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyIsImJTa2lwQmluZGluZ1RvVmlldyIsImNvbnRleHQiLCJoaWRkZW5EcmFmdCIsImZvY3VzT25DYW5jZWwiLCJDcmVhdGlvbkRhdGVUaW1lIiwiTGFzdENoYW5nZURhdGVUaW1lIiwiZWRpdEZsb3ciLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJuYW1lIiwib3BlbiIsInRoZW4iLCJzZWxlY3RlZEtleSIsImRyYWZ0RGF0YUxvc3NQb3B1cCIsImhhbmRsZURpYWxvZ1NlbGVjdGlvbiIsInByb2Nlc3NOb0FjdGl2ZUVudGl0eU1vZGUiLCJuYXZpZ2F0aW9uVHlwZSIsImJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24iLCJza2lwQmFja05hdmlnYXRpb24iLCJFZGl0U3RhdGUiLCJpc0VkaXRTdGF0ZURpcnR5IiwiQmFja05hdmlnYXRpb24iLCJkaXNjYXJkRHJhZnQiLCJlcnJvciIsIkxvZyIsIkZvcndhcmROYXZpZ2F0aW9uIiwicHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5Iiwib0NvbnRleHQiLCJtUGFyYW1ldGVycyIsInNraXBEaXNjYXJkUG9wb3ZlciIsInNraXBCaW5kaW5nVG9WaWV3IiwiY2FuY2VsRG9jdW1lbnQiLCJwcm9jZXNzRWRpdFN0YXRlRGlydHkiLCJwcm9jZXNzRHJhZnRBZG1pbkRhdGEiLCJmblByb2Nlc3NGdW5jdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImhhc0FjdGl2ZUVudGl0eSIsImNvbGxhYm9yYXRpb25Db25uZWN0ZWQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3QiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImFwcGx5IiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiaXNGY2xFbmFibGVkIiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJhbHdheXNTaG93SW5IaWRkZW5EcmFmdCIsIm9WaWV3IiwiZ2V0VmlldyIsIm9Nb2RlbCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0TW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiaXNEcmFmdFJvb3QiLCJnZXRPYmplY3QiLCJiSXNFZGl0YWJsZSIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIm9yaWdpbmFsQ29udGV4dCIsImRyYWZ0Um9vdFBhdGgiLCJnZXRQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXREcmFmdFJvb3RQYXRoIiwiYmluZENvbnRleHQiLCIkZXhwYW5kIiwiZ2V0Qm91bmRDb250ZXh0IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJiYWNrTmF2U2hvd3NEaWFsb2ciLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrRXhpdHNBcHAiLCJpc0RlbGV0ZWQiLCJyZXF1ZXN0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eSIsIm9FcnJvciIsInNhdmVEb2N1bWVudCIsImNvbnRyb2xsZXIiLCJoYXNJbml0aWFsQ29udGV4dCIsImlzQSIsIl9zYXZlRG9jdW1lbnQiLCJza2lwQmFja05hdmlnYXRpb25WYWx1ZSIsInBhcmFtcyIsIlNhdmUiLCJzYXZlZENvbnRleHQiLCJjYXRjaCIsIlJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJDb250aW51ZSIsImNsb3NlIiwiS2VlcCIsIkRpc2NhcmQiLCJkaXNjYXJkZWREcmFmdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiZHJhZnREYXRhTG9zc1BvcHVwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlckNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBEcmFmdERhdGFMb3NzRGlhbG9nIGZyb20gXCIuLi8uLi9jb250cm9scy9EYXRhTG9zc09yRHJhZnREaXNjYXJkL0RyYWZ0RGF0YUxvc3NEaWFsb2dcIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwiLi4vLi4vY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyogRW51bSBmb3IgbmF2aWdhdGlvbiB0eXBlcyAqL1xuZW51bSBOYXZpZ2F0aW9uVHlwZSB7XG5cdEJhY2tOYXZpZ2F0aW9uID0gXCJCYWNrTmF2aWdhdGlvblwiLFxuXHRGb3J3YXJkTmF2aWdhdGlvbiA9IFwiRm9yd2FyZE5hdmlnYXRpb25cIlxufVxuXG4vKiBFbnVtIHR5cGVzIGZvciB0aGUgZGF0YSBsb3NzIGRpYWxvZyBvcHRpb25zICovXG5lbnVtIERyYWZ0RGF0YUxvc3NPcHRpb25zIHtcblx0U2F2ZSA9IFwiZHJhZnREYXRhTG9zc09wdGlvblNhdmVcIixcblx0S2VlcCA9IFwiZHJhZnREYXRhTG9zc09wdGlvbktlZXBcIixcblx0RGlzY2FyZCA9IFwiZHJhZnREYXRhTG9zc09wdGlvbkRpc2NhcmRcIlxufVxuXG50eXBlIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhID0ge1xuXHRDcmVhdGlvbkRhdGVUaW1lOiBEYXRlO1xuXHRMYXN0Q2hhbmdlRGF0ZVRpbWU6IERhdGU7XG59O1xuXG4vKkNyZWF0ZSB0aGUgZGF0YSBsb3NzIGRpYWxvZyovXG5jb25zdCBkYXRhTG9zc0RpYWxvZyA9IG5ldyBEcmFmdERhdGFMb3NzRGlhbG9nKFwiZmU6OkRyYWZ0RGF0YUxvc3NQb3B1cFwiKTtcblxuLyoqXG4gKiBUaGUgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBpbiB0aGUgbWFuaWZlc3QgaXMgc2V0IHRvIHNpbGVudGx5IGtlZXAgdGhlIGRyYWZ0IGluIGNhc2UgYSBmb3J3YXJkIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkLlxuICogQHBhcmFtIHBhZ2VDb250cm9sbGVyIFRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgUGFnZUNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0cnVlIG9yIGZhbHNlIHRvIHNpbGVudGx5IGtlZXAgdGhlIGRyYWZ0XG4gKi9cbmZ1bmN0aW9uIHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbihwYWdlQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBib29sZWFuIHtcblx0Y29uc3Qgb01hbmlmZXN0ID0gcGFnZUNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0cmV0dXJuIG9NYW5pZmVzdD8uYXBwPy5zaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24gfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTG9naWMgdG8gcHJvY2VzcyB0aGUgRkNMIG1vZGUuXG4gKiBAcGFyYW0gZHJhZnRBZG1pbkRhdGEgQWRtaW4gZGF0YVxuICogQHBhcmFtIGZuQ2FuY2VsRnVuY3Rpb24gVGhlIGNhbmNlbCBmdW5jdGlvblxuICogQHBhcmFtIG9Db250cm9sbGVyIFRoZSBjdXJyZW50IGNvbnRyb2xsZXIgcmVmZXJlbmNlZFxuICogQHBhcmFtIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgaGFuZGxlclxuICogQHBhcmFtIGJTa2lwQmluZGluZ1RvVmlldyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqIEBwYXJhbSBoaWRkZW5EcmFmdCBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIGhpZGRlbiBkcmFmdCBpcyBlbmFibGVkIG9yIG5vdFxuICogQHJldHVybnMgTm90aGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmNsTW9kZShcblx0ZHJhZnRBZG1pbkRhdGE6IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIFRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIEZDTCBtb2RlIHNvIGluIHRoaXMgY2FzZSB3ZSBmYWxsIGJhY2sgdG9cblx0Ly8gdGhlIG9sZCBsb2dpYyBzaW5jZSB0aGUgZGlydHkgc3RhdGUgaGFuZGxpbmcgaXMgbm90IHByb3Blcmx5IHdvcmtpbmdcblx0Ly8gZm9yIEZDTC5cblx0bGV0IGZvY3VzT25DYW5jZWw7XG5cdGlmIChkcmFmdEFkbWluRGF0YS5DcmVhdGlvbkRhdGVUaW1lID09PSBkcmFmdEFkbWluRGF0YS5MYXN0Q2hhbmdlRGF0ZVRpbWUgJiYgIW9Db250cm9sbGVyLmVkaXRGbG93LmlzRG9jdW1lbnRNb2RpZmllZCgpKSB7XG5cdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdH0gZWxzZSB7XG5cdFx0Zm9jdXNPbkNhbmNlbCA9IGhpZGRlbkRyYWZ0ID09PSB0cnVlICYmIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cy5uYW1lID09PSBcImFmdGVyQ2FuY2VsXCI7XG5cdFx0cmV0dXJuIGRhdGFMb3NzRGlhbG9nXG5cdFx0XHQub3BlbihvQ29udHJvbGxlciwgZm9jdXNPbkNhbmNlbClcblx0XHRcdC50aGVuKChzZWxlY3RlZEtleSkgPT5cblx0XHRcdFx0ZHJhZnREYXRhTG9zc1BvcHVwLmhhbmRsZURpYWxvZ1NlbGVjdGlvbihcblx0XHRcdFx0XHRzZWxlY3RlZEtleSBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljIHRvIHByb2Nlc3MgdGhlIG1vZGUgd2l0aCBubyBhY3RpdmUgZW50aXR5LlxuICogQHBhcmFtIGRyYWZ0QWRtaW5EYXRhIEFkbWluIGRhdGFcbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBjYW5jZWwgZnVuY3Rpb25cbiAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgY3VycmVudCBjb250cm9sbGVyIHJlZmVyZW5jZWRcbiAqIEBwYXJhbSBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBUaGUgbmF2aWdhdGlvbiB0eXBlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZFxuICogQHBhcmFtIGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24gVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0byBza2lwIHRoZSBwb3B1cCBhcHBlYXJhbmNlIGluIGZvcndhcmQgY2FzZVxuICogQHBhcmFtIGJTa2lwQmluZGluZ1RvVmlldyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25zXG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBwYXJhbSBza2lwQmFja05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBiYWNrIG5hdmlnYXRpb24gc2hvdWxkIGJlIHNraXBwZWRcbiAqIEByZXR1cm5zIE5vdGhpbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZShcblx0ZHJhZnRBZG1pbkRhdGE6IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUsXG5cdGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb246IGJvb2xlYW4sXG5cdGJTa2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sXG5cdGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCxcblx0aGlkZGVuRHJhZnQ/OiBib29sZWFuLFxuXHRza2lwQmFja05hdmlnYXRpb24/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Ly8gVGhlcmUgaXMgbm8gYWN0aXZlIGVudGl0eSBzbywgd2UgYXJlIGVkaXRpbmcgZWl0aGVyIG5ld2x5IGNyZWF0ZWQgZGF0YSBvclxuXHQvLyBhIGRyYWZ0IHdoaWNoIGhhcyBuZXZlciBiZWVuIHNhdmVkIHRvIGFjdGl2ZSB2ZXJzaW9uXG5cdC8vIFNpbmNlIHdlIHdhbnQgdG8gcmVhY3QgZGlmZmVyZW50bHkgaW4gdGhlIHR3byBzaXR1YXRpb25zLCB3ZSBoYXZlIHRvIGNoZWNrIHRoZVxuXHQvLyBkaXJ0eSBzdGF0ZVxuXHRpZiAoRWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSkge1xuXHRcdGlmIChcblx0XHRcdGRyYWZ0QWRtaW5EYXRhLkNyZWF0aW9uRGF0ZVRpbWUgPT09IGRyYWZ0QWRtaW5EYXRhLkxhc3RDaGFuZ2VEYXRlVGltZSAmJlxuXHRcdFx0IW9Db250cm9sbGVyLmVkaXRGbG93LmlzRG9jdW1lbnRNb2RpZmllZCgpICYmXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZSA9PT0gTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHQpIHtcblx0XHRcdC8vIGluIGNhc2Ugd2UgaGF2ZSB1bnRvdWNoZWQgY2hhbmdlcyBmb3IgdGhlIGRyYWZ0IGFuZCBhIFwiYmFja1wiXG5cdFx0XHQvLyBuYXZpZ2F0aW9uIHdlIGNhbiBzaWxlbnRseSBkaXNjYXJkIHRoZSBkcmFmdCBhZ2FpblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2Uvbm8tbmVzdGluZ1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgZHJhZnREYXRhTG9zc1BvcHVwLmRpc2NhcmREcmFmdChvQ29udHJvbGxlciwgYlNraXBCaW5kaW5nVG9WaWV3LCBjb250ZXh0LCBoaWRkZW5EcmFmdCwgc2tpcEJhY2tOYXZpZ2F0aW9uKTtcblx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjYW5jZWxpbmcgdGhlIGRvY3VtZW50XCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChuYXZpZ2F0aW9uVHlwZSA9PT0gTmF2aWdhdGlvblR5cGUuRm9yd2FyZE5hdmlnYXRpb24gJiYgYlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbikge1xuXHRcdFx0Ly8gSW4gY2FzZSB3ZSBoYXZlIGEgXCJmb3J3YXJkIG5hdmlnYXRpb25cIiBhbmQgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgc2V0IGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0Ly8gd2UgXCJzaWxlbnRseVwiIGtlZXAgdGhlIGRyYWZ0XG5cdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gdGhpcyBjYXNlIGRhdGEgaXMgYmVpbmcgY2hhbmdlZCBvciBhIGZvcndhcmQgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHRcdC8vIGFuZCwgd2UgYWx3YXlzIHdhbnQgdG8gc2hvdyB0aGUgZGF0YSBsb3NzIGRpYWxvZyBvbiBuYXZpZ2F0aW9uXG5cdFx0XHRyZXR1cm4gZGF0YUxvc3NEaWFsb2dcblx0XHRcdFx0Lm9wZW4ob0NvbnRyb2xsZXIpXG5cdFx0XHRcdC50aGVuKChzZWxlY3RlZEtleSkgPT5cblx0XHRcdFx0XHRkcmFmdERhdGFMb3NzUG9wdXAuaGFuZGxlRGlhbG9nU2VsZWN0aW9uKFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXkgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRcdFx0Zm5DYW5jZWxGdW5jdGlvbixcblx0XHRcdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRcdGhpZGRlbkRyYWZ0LFxuXHRcdFx0XHRcdFx0c2tpcEJhY2tOYXZpZ2F0aW9uXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBXZSBhcmUgZWRpdGluZyBhIGRyYWZ0IHdoaWNoIGhhcyBiZWVuIGNyZWF0ZWQgZWFybGllciBidXQgbmV2ZXIgc2F2ZWQgdG8gYWN0aXZlXG5cdFx0Ly8gdmVyc2lvbiBhbmQgc2luY2UgdGhlIGVkaXQgc3RhdGUgaXMgbm90IGRpcnR5LCB0aGVyZSBoYXZlIGJlZW4gbm8gdXNlciBjaGFuZ2VzXG5cdFx0Ly8gc28gaW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gc2lsZW50bHkgbmF2aWdhdGUgYW5kIGRvIG5vdGhpbmdcblx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljIHRvIHByb2Nlc3MgdGhlIGRyYWZ0IGVkaXRpbmcgZm9yIGV4aXN0aW5nIGVudGl0eS5cbiAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgY3VycmVudCBjb250cm9sbGVyIHJlZmVyZW5jZWQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgY2FsbFxuICogQHBhcmFtIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgaGFuZGxlclxuICogQHBhcmFtIG5hdmlnYXRpb25UeXBlIFRoZSBuYXZpZ2F0aW9uIHR5cGUgZm9yIHdoaWNoIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NFZGl0aW5nRHJhZnRGb3JFeGlzdGluZ0VudGl0eShcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0czogRnVuY3Rpb24sXG5cdG5hdmlnYXRpb25UeXBlOiBOYXZpZ2F0aW9uVHlwZVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIFdlIGFyZSBlZGl0aW5nIGEgZHJhZnQgZm9yIGFuIGV4aXN0aW5nIGFjdGl2ZSBlbnRpdHlcblx0Ly8gVGhlIENyZWF0aW9uRGF0ZVRpbWUgYW5kIExhc3RDaGFuZ2VEYXRlVGltZSBhcmUgZXF1YWwsIHNvIHRoaXMgZHJhZnQgd2FzXG5cdC8vIG5ldmVyIHNhdmVkIGJlZm9yZSwgaGVuY2Ugd2UncmUgY3VycmVudGx5IGVkaXRpbmcgYSBuZXdseSBjcmVhdGVkIGRyYWZ0IGZvclxuXHQvLyBhbiBleGlzdGluZyBhY3RpdmUgZW50aXR5IGZvciB0aGUgZmlyc3QgdGltZS5cblx0Ly8gQWxzbywgdGhlcmUgaGF2ZSBzbyBmYXIgYmVlbiBubyBjaGFuZ2VzIG1hZGUgdG8gdGhlIGRyYWZ0IGFuZCBpbiB0aGlzXG5cdC8vIGNhc2Ugd2Ugd2FudCB0byBzaWxlbnRseSBuYXZpZ2F0ZSBhbmQgZGVsZXRlIHRoZSBkcmFmdCBpbiBjYXNlIG9mIGEgYmFja1xuXHQvLyBuYXZpZ2F0aW9uIGJ1dCBpbiBjYXNlIG9mIGEgZm9yd2FyZCBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gc2lsZW50bHkga2VlcCBpdCFcblx0aWYgKG5hdmlnYXRpb25UeXBlID09PSBOYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbikge1xuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0c2tpcERpc2NhcmRQb3BvdmVyOiB0cnVlLFxuXHRcdFx0c2tpcEJpbmRpbmdUb1ZpZXc6IHRydWVcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LmNhbmNlbERvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2FuY2VsaW5nIHRoZSBkb2N1bWVudFwiLCBlcnJvciBhcyBFcnJvcik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEluIGNhc2Ugb2YgYSBmb3J3YXJkIG5hdmlnYXRpb24gd2Ugc2lsZW50bHkga2VlcCB0aGUgZHJhZnQgYW5kIG9ubHlcblx0XHQvLyBleGVjdXRlIHRoZSBmb2xsb3d1cCBmdW5jdGlvbi5cblx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljIHRvIHByb2Nlc3MgdGhlIGNvbnRleHQgd2hlbiB0aGUgZWRpdCBzdGF0ZSBpcyBpbiBkaXJ0eSBtb2RlLlxuICogQHBhcmFtIG9Db250cm9sbGVyIFRoZSBjdXJyZW50IGNvbnRyb2xsZXIgcmVmZXJlbmNlZC5cbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBjYW5jZWwgZnVuY3Rpb25cbiAqIEBwYXJhbSBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBUaGUgbmF2aWdhdGlvbiB0eXBlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZFxuICogQHBhcmFtIGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24gVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0byBza2lwIHRoZSBwb3B1cCBhcHBlYXJhbmNlIGluIGZvcndhcmQgY2FzZVxuICogQHBhcmFtIGJTa2lwQmluZGluZ1RvVmlldyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcuXG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSB1c2VkIGZvciB0aGUgZHJhZnQgb3BlcmF0aW9uc1xuICogQHBhcmFtIGhpZGRlbkRyYWZ0IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgaGlkZGVuIGRyYWZ0IGlzIGVuYWJsZWQgb3Igbm90XG4gKiBAcmV0dXJucyBOb3RoaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NFZGl0U3RhdGVEaXJ0eShcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzOiBGdW5jdGlvbixcblx0bmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlLFxuXHRiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uOiBib29sZWFuLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGlmIChuYXZpZ2F0aW9uVHlwZSA9PT0gTmF2aWdhdGlvblR5cGUuRm9yd2FyZE5hdmlnYXRpb24gJiYgYlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbikge1xuXHRcdC8vIEluIGNhc2Ugd2UgaGF2ZSBhIFwiZm9yd2FyZCBuYXZpZ2F0aW9uXCIgYW5kIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHNldCBpbiB0aGUgbWFuaWZlc3Rcblx0XHQvLyB3ZSBcInNpbGVudGx5XCIga2VlcCB0aGUgZHJhZnRcblx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0fSBlbHNlIHtcblx0XHQvLyBUaGUgQ3JlYXRpb25EYXRlVGltZSBhbmQgTGFzdENoYW5nZURhdGVUaW1lIGFyZSBOT1QgZXF1YWwsIHNvIHdlIGFyZSBjdXJyZW50bHkgZWRpdGluZ1xuXHRcdC8vIGFuIGV4aXN0aW5nIGRyYWZ0IGFuZCBuZWVkIHRvIGRpc3Rpbmd1aXNoIGRlcGVuZGluZyBvbiBpZiBhbnkgY2hhbmdlc1xuXHRcdC8vIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBjdXJyZW50IGVkaXRpbmcgc2Vzc2lvbiBvciBub3Rcblx0XHQvLyBDaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBjdXJyZW50IGVkaXRpbmcgc2Vzc2lvbiwgc28gd2Ugd2FudFxuXHRcdC8vIHRvIHNob3cgdGhlIGRhdGEgbG9zcyBkaWFsb2cgYW5kIGxldCB0aGUgdXNlciBkZWNpZGVcblx0XHRyZXR1cm4gZGF0YUxvc3NEaWFsb2dcblx0XHRcdC5vcGVuKG9Db250cm9sbGVyKVxuXHRcdFx0LnRoZW4oKHNlbGVjdGVkS2V5KSA9PlxuXHRcdFx0XHRkcmFmdERhdGFMb3NzUG9wdXAuaGFuZGxlRGlhbG9nU2VsZWN0aW9uKFxuXHRcdFx0XHRcdHNlbGVjdGVkS2V5IGFzIHN0cmluZyxcblx0XHRcdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsXG5cdFx0XHRcdFx0Zm5DYW5jZWxGdW5jdGlvbixcblx0XHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRoaWRkZW5EcmFmdFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTG9naWMgdG8gcHJvY2VzcyB0aGUgYWRtaW4gZGF0YS5cbiAqIEBwYXJhbSBkcmFmdEFkbWluRGF0YSBBZG1pbiBkYXRhXG4gKiBAcGFyYW0gZm5Qcm9jZXNzRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBjYW5jZWwgZnVuY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcbiAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgY3VycmVudCBjb250cm9sbGVyIHJlZmVyZW5jZWRcbiAqIEBwYXJhbSBiU2tpcEJpbmRpbmdUb1ZpZXcgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciB0byBza2lwIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3XG4gKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgVGhlIG5hdmlnYXRpb24gdHlwZSBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWRcbiAqIEBwYXJhbSBoYXNBY3RpdmVFbnRpdHkgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiByb290IGNvbnRleHQgaGFzIGFjdGl2ZSBlbnRpdHkgb3Igbm90XG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBwYXJhbSBza2lwQmFja05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBiYWNrIG5hdmlnYXRpb24gc2hvdWxkIGJlIHNraXBwZWRcbiAqIEByZXR1cm5zIE5vdGhpbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0RyYWZ0QWRtaW5EYXRhKFxuXHRkcmFmdEFkbWluRGF0YTogRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEsXG5cdGZuUHJvY2Vzc0Z1bmN0aW9uOiBGdW5jdGlvbixcblx0Zm5DYW5jZWxGdW5jdGlvbjogRnVuY3Rpb24sXG5cdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdGJTa2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sXG5cdG5hdmlnYXRpb25UeXBlOiBOYXZpZ2F0aW9uVHlwZSA9IE5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRoYXNBY3RpdmVFbnRpdHk/OiBib29sZWFuLFxuXHRoaWRkZW5EcmFmdD86IGJvb2xlYW4sXG5cdHNraXBCYWNrTmF2aWdhdGlvbj86IGJvb2xlYW5cbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBjb2xsYWJvcmF0aW9uQ29ubmVjdGVkID0gb0NvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCk7XG5cdGNvbnN0IHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyA9ICFjb2xsYWJvcmF0aW9uQ29ubmVjdGVkXG5cdFx0PyBmblByb2Nlc3NGdW5jdGlvblxuXHRcdDogZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdFx0XHRvQ29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRmblByb2Nlc3NGdW5jdGlvbi5hcHBseShudWxsLCAuLi5hcmdzKTtcblx0XHQgIH07XG5cblx0Y29uc3QgYlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbiA9IHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbihvQ29udHJvbGxlcik7XG5cdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdGlmIChvQ29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0YXdhaXQgcHJvY2Vzc0ZjbE1vZGUoXG5cdFx0XHRcdGRyYWZ0QWRtaW5EYXRhLFxuXHRcdFx0XHRmbkNhbmNlbEZ1bmN0aW9uLFxuXHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdGhpZGRlbkRyYWZ0XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoIWhhc0FjdGl2ZUVudGl0eSkge1xuXHRcdFx0cHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZShcblx0XHRcdFx0ZHJhZnRBZG1pbkRhdGEsXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsXG5cdFx0XHRcdG5hdmlnYXRpb25UeXBlLFxuXHRcdFx0XHRiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uLFxuXHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0aGlkZGVuRHJhZnQsXG5cdFx0XHRcdHNraXBCYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0ZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSA9PT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lICYmXG5cdFx0XHQoIWhpZGRlbkRyYWZ0IHx8IChoaWRkZW5EcmFmdCAmJiAhb0NvbnRyb2xsZXIuZWRpdEZsb3cuaXNEb2N1bWVudE1vZGlmaWVkKCkpKVxuXHRcdCkge1xuXHRcdFx0cHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5KG9Db250cm9sbGVyLCBjb250ZXh0LCBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsIG5hdmlnYXRpb25UeXBlKTtcblx0XHR9IGVsc2UgaWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHByb2Nlc3NFZGl0U3RhdGVEaXJ0eShcblx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0bmF2aWdhdGlvblR5cGUsXG5cdFx0XHRcdGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24sXG5cdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRoZSB1c2VyIHN0YXJ0ZWQgZWRpdGluZyB0aGUgZXhpc3RpbmcgZHJhZnQgYnV0IGRpZCBub3QgbWFrZSBhbnkgY2hhbmdlc1xuXHRcdFx0Ly8gaW4gdGhlIGN1cnJlbnQgZWRpdGluZyBzZXNzaW9uLCBzbyBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IHdhbnRcblx0XHRcdC8vIHRvIHNob3cgdGhlIGRhdGEgbG9zcyBkaWFsb2cgYnV0IGp1c3Qga2VlcCB0aGUgZHJhZnRcblx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmblByb2Nlc3NGdW5jdGlvbigpO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIGdlbmVyYWwgaGFuZGxlciBpbiB3aGljaCB0aGUgaW5kaXZpZHVhbCBzdGVwcyBhcmUgY2FsbGVkLlxuICogQHBhcmFtIGZuUHJvY2Vzc0Z1bmN0aW9uIEZ1bmN0aW9uIHRvIHByb2Nlc3MgYWZ0ZXIgY29uZmlybWF0aW9uLlxuICogQHBhcmFtIGZuQ2FuY2VsRnVuY3Rpb24gRnVuY3Rpb24gdG8gcHJvY2VzcyBvbiBjYW5jZWwuXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3IgdGhlIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBvQ29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXcuXG4gKiBAcGFyYW0gYlNraXBCaW5kaW5nVG9WaWV3IE9wdGlvbmFsIHBhcmFtZXRlciB0byBza2lwIGJpbmRpbmcgdG8gdGhlIHZpZXcuXG4gKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiB0eXBlIGZvciB0aGUgb3BlcmF0aW9uLlxuICogQHBhcmFtIGFsd2F5c1Nob3dJbkhpZGRlbkRyYWZ0IFdoZXRoZXIgdG8gYWx3YXlzIHNob3cgZGlhbG9nIGluIGhpZGRlbiBkcmFmdCBtb2RlLlxuICogQHBhcmFtIHNraXBCYWNrTmF2aWdhdGlvbiBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIGJhY2sgbmF2aWdhdGlvbiBzaG91bGQgYmUgc2tpcHBlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdGZuUHJvY2Vzc0Z1bmN0aW9uOiBGdW5jdGlvbixcblx0Zm5DYW5jZWxGdW5jdGlvbjogRnVuY3Rpb24sXG5cdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUgPSBOYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0YWx3YXlzU2hvd0luSGlkZGVuRHJhZnQ/OiBib29sZWFuLFxuXHRza2lwQmFja05hdmlnYXRpb24/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdGNvbnN0IG9Nb2RlbCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0TW9kZWwoKTtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgdmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpIGFzIHsgZW50aXR5U2V0Pzogc3RyaW5nOyBjb250ZXh0UGF0aD86IHN0cmluZyB9O1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IHZpZXdEYXRhLmNvbnRleHRQYXRoIHx8ICh2aWV3RGF0YS5lbnRpdHlTZXQgPyBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAgOiB1bmRlZmluZWQpO1xuXHRjb25zdCBpc0RyYWZ0Um9vdCA9IGNvbnRleHRQYXRoID8gISFvTWV0YU1vZGVsLmdldE9iamVjdChgJHtjb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApIDogZmFsc2U7XG5cdGNvbnN0IGJJc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldyk7XG5cdGNvbnN0IG9yaWdpbmFsQ29udGV4dCA9IG9Db250ZXh0O1xuXHRsZXQgZHJhZnRSb290UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0aWYgKCFpc0RyYWZ0Um9vdCkge1xuXHRcdGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKG9Db250ZXh0KSA/PyBkcmFmdFJvb3RQYXRoO1xuXHRcdG9Db250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KGRyYWZ0Um9vdFBhdGgsIHVuZGVmaW5lZCwgeyAkZXhwYW5kOiBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIgfSkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH1cblx0Y29uc3QgaGlkZGVuRHJhZnQgPSAob0NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdD8uZW5hYmxlZDtcblx0Ly8gU2hvdWxkbid0IGRpc3BsYXkgZGF0YSBsb3NzIHBvcG92ZXIgb24gc2hlbGwgYmFjayBuYXZpZ2F0aW9uIGZyb20gc3ViLW9iamVjdCBwYWdlcyAodW5sZXNzIHRoZXJlJ3Mgbm8gcGFnZSBiZWZvcmUgaW4gdGhlIGhpc3RvcnkgYmVjYXVzZSBvZiBkZWVwIGxpbmtpbmcpXG5cdC8vIG9yIHdoZW4gb2JqZWN0IHBhZ2UgaXMgaW4gZGlzcGxheSBtb2RlLCBvciB3aGVuIHRoZSBvYmplY3QgaXMgZGVsZXRlZFxuXHRjb25zdCBiYWNrTmF2U2hvd3NEaWFsb2cgPVxuXHRcdGlzRHJhZnRSb290IHx8IG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tFeGl0c0FwcCgpIHx8IChoaWRkZW5EcmFmdCAmJiBhbHdheXNTaG93SW5IaWRkZW5EcmFmdCk7XG5cdGlmIChvcmlnaW5hbENvbnRleHQuaXNEZWxldGVkKCkgfHwgKCFiYWNrTmF2U2hvd3NEaWFsb2cgJiYgbmF2aWdhdGlvblR5cGUgPT09IE5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uKSB8fCAhYklzRWRpdGFibGUpIHtcblx0XHRmblByb2Nlc3NGdW5jdGlvbigpO1xuXHR9IGVsc2Uge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBUaGUgZm9sbG93aW5nIDMgcHJvcGVydGllcyBhcmUgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgdGhlIGRyYWZ0LCBzbyB3ZSBlbnN1cmUgdGhleSBhcmUgbG9hZGVkXG5cdFx0XHRhd2FpdCBvQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkoW1xuXHRcdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFx0XCJIYXNBY3RpdmVFbnRpdHlcIlxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IG9Db250ZXh0LmdldE9iamVjdChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0YXdhaXQgcHJvY2Vzc0RyYWZ0QWRtaW5EYXRhKFxuXHRcdFx0XHRkcmFmdEFkbWluRGF0YSxcblx0XHRcdFx0Zm5Qcm9jZXNzRnVuY3Rpb24sXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdGhpZGRlbkRyYWZ0ID8gb3JpZ2luYWxDb250ZXh0IDogb0NvbnRleHQsXG5cdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdG5hdmlnYXRpb25UeXBlLFxuXHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSxcblx0XHRcdFx0aGlkZGVuRHJhZnQsXG5cdFx0XHRcdHNraXBCYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSBkcmFmdERhdGFDb250ZXh0IGluZm9ybWF0aW9uXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0Zm5Qcm9jZXNzRnVuY3Rpb24oKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBTYXZlcyB0aGUgZG9jdW1lbnQuIElmIHRoZSBjb250cm9sbGVyIGlzIG9mIHR5cGUgT2JqZWN0UGFnZSwgdGhlbiBpbnRlcm5hbCBfc2F2ZURvY3VtZW50IGlzIGNhbGxlZCwgb3RoZXJ3aXNlIHNhdmVEb2N1bWVudFxuICogZnJvbSBFZGl0RmxvdyBpcyBjYWxsZWQuXG4gKiBAcGFyYW0gY29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25zXG4gKiBAcGFyYW0gc2tpcEJpbmRpbmdUb1ZpZXcgVGhlIHBhcmFtZXRlciB0byBza2lwIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgaWYgdGhlIHNhdmUgd2FzIHN1Y2Nlc3NmdWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2F2ZURvY3VtZW50KGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBjb250ZXh0PzogT0RhdGFWNENvbnRleHQsIHNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRjb25zdCBoYXNJbml0aWFsQ29udGV4dCA9IGNvbnRleHQgIT09IHVuZGVmaW5lZDtcblx0Y29udGV4dCA9IGNvbnRleHQgPz8gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0aWYgKCFoYXNJbml0aWFsQ29udGV4dCAmJiBjb250cm9sbGVyLmlzQTxPYmplY3RQYWdlQ29udHJvbGxlckNvbnRyb2xsZXI+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xsZXIuX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xsZXIuZWRpdEZsb3cuc2F2ZURvY3VtZW50KGNvbnRleHQsIHsgc2tpcEJpbmRpbmdUb1ZpZXcgfSk7XG5cdH1cbn1cblxuLyoqXG4gKiBEaXNjYXJkcyB0aGUgZHJhZnQuXG4gKiBAcGFyYW0gY29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXdcbiAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBUaGUgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25zXG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBwYXJhbSBza2lwQmFja05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSB3aGljaCBkZXRlcm1pbmVzIGlmIGJhY2sgbmF2aWdhdGlvbiBzaG91bGQgYmUgc2tpcHBlZFxuICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmVkIGlmIGNhbmNlbERvY3VtZW50IHdhcyBzdWNjZXNzZnVsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc2NhcmREcmFmdChcblx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdHNraXBCaW5kaW5nVG9WaWV3OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhbixcblx0c2tpcEJhY2tOYXZpZ2F0aW9uPzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGNvbnRleHQgPSBjb250ZXh0ID8/IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGxldCBza2lwQmFja05hdmlnYXRpb25WYWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHNraXBCYWNrTmF2aWdhdGlvbjtcblx0aWYgKCFza2lwQmFja05hdmlnYXRpb24pIHtcblx0XHRza2lwQmFja05hdmlnYXRpb25WYWx1ZSA9IGhpZGRlbkRyYWZ0ID09PSB0cnVlICYmICFjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpID8gZmFsc2UgOiB0cnVlO1xuXHR9XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRza2lwQmFja05hdmlnYXRpb246IHNraXBCYWNrTmF2aWdhdGlvblZhbHVlLFxuXHRcdHNraXBEaXNjYXJkUG9wb3ZlcjogdHJ1ZSxcblx0XHRza2lwQmluZGluZ1RvVmlldzogc2tpcEJpbmRpbmdUb1ZpZXcgIT09IHVuZGVmaW5lZCA/IHNraXBCaW5kaW5nVG9WaWV3IDogdHJ1ZVxuXHR9O1xuXHRyZXR1cm4gY29udHJvbGxlci5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChjb250ZXh0LCBwYXJhbXMpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBmb2xsb3ctdXAgZnVuY3Rpb25zIGFmdGVyIGFuIG9wdGlvbiB3YXMgc2VsZWN0ZWQgaW4gdGhlIGRhdGEgbG9zcyBkaWFsb2cuXG4gKiBAcGFyYW0gc2VsZWN0ZWRLZXkgVGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGZyb20gdGhlIGRhdGEgbG9zcyBkaWFsb2dcbiAqIEBwYXJhbSBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gY29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXdcbiAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBUaGUgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBiaW5kaW5nXG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBwYXJhbSBza2lwQmFja05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBiYWNrIG5hdmlnYXRpb24gc2hvdWxkIGJlIHNraXBwZWRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRGlhbG9nU2VsZWN0aW9uKFxuXHRzZWxlY3RlZEtleTogc3RyaW5nLFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdHNraXBCaW5kaW5nVG9WaWV3OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhbixcblx0c2tpcEJhY2tOYXZpZ2F0aW9uPzogYm9vbGVhblxuKTogdm9pZCB7XG5cdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRjYXNlIERyYWZ0RGF0YUxvc3NPcHRpb25zLlNhdmU6XG5cdFx0XHRkcmFmdERhdGFMb3NzUG9wdXBcblx0XHRcdFx0LnNhdmVEb2N1bWVudChjb250cm9sbGVyLCBjb250ZXh0LCBza2lwQmluZGluZ1RvVmlldylcblx0XHRcdFx0LnRoZW4oKHNhdmVkQ29udGV4dD8pID0+IHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyhzYXZlZENvbnRleHQpKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoZXJyb3IgPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbkNhbmNlbEZ1bmN0aW9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNhdmluZyBkb2N1bWVudFwiLCBlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0ZGF0YUxvc3NEaWFsb2cuY2xvc2UoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRHJhZnREYXRhTG9zc09wdGlvbnMuS2VlcDpcblx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHRcdFx0ZGF0YUxvc3NEaWFsb2cuY2xvc2UoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRHJhZnREYXRhTG9zc09wdGlvbnMuRGlzY2FyZDpcblx0XHRcdGRyYWZ0RGF0YUxvc3NQb3B1cFxuXHRcdFx0XHQuZGlzY2FyZERyYWZ0KGNvbnRyb2xsZXIsIHNraXBCaW5kaW5nVG9WaWV3LCBjb250ZXh0LCBoaWRkZW5EcmFmdCwgc2tpcEJhY2tOYXZpZ2F0aW9uKVxuXHRcdFx0XHQudGhlbigoZGlzY2FyZGVkRHJhZnQ/KSA9PiBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoZGlzY2FyZGVkRHJhZnQpKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBkaXNjYXJkaW5nIGRyYWZ0XCIsIGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRkYXRhTG9zc0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24oKTtcblx0XHRcdGRhdGFMb3NzRGlhbG9nLmNsb3NlKCk7XG5cdH1cbn1cblxuY29uc3QgZHJhZnREYXRhTG9zc1BvcHVwID0ge1xuXHRwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbjogcHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24sXG5cdHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbjogc2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uLFxuXHROYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUsXG5cdHByb2Nlc3NGY2xNb2RlOiBwcm9jZXNzRmNsTW9kZSxcblx0cHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZTogcHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZSxcblx0cHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5OiBwcm9jZXNzRWRpdGluZ0RyYWZ0Rm9yRXhpc3RpbmdFbnRpdHksXG5cdHByb2Nlc3NFZGl0U3RhdGVEaXJ0eTogcHJvY2Vzc0VkaXRTdGF0ZURpcnR5LFxuXHRoYW5kbGVEaWFsb2dTZWxlY3Rpb246IGhhbmRsZURpYWxvZ1NlbGVjdGlvbixcblx0c2F2ZURvY3VtZW50OiBzYXZlRG9jdW1lbnQsXG5cdGRpc2NhcmREcmFmdDogZGlzY2FyZERyYWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkcmFmdERhdGFMb3NzUG9wdXA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBV0E7RUFBQSxJQUNLQSxjQUFjLDBCQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFBLE9BQWRBLGNBQWM7RUFBQSxFQUFkQSxjQUFjO0VBS25CO0VBQUEsSUFDS0Msb0JB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
|
|
363
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZpZ2F0aW9uVHlwZSIsIkRyYWZ0RGF0YUxvc3NPcHRpb25zIiwiZGF0YUxvc3NEaWFsb2ciLCJEcmFmdERhdGFMb3NzRGlhbG9nIiwic2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uIiwicGFnZUNvbnRyb2xsZXIiLCJvTWFuaWZlc3QiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdEVudHJ5IiwiYXBwIiwicHJvY2Vzc0ZjbE1vZGUiLCJkcmFmdEFkbWluRGF0YSIsImZuQ2FuY2VsRnVuY3Rpb24iLCJvQ29udHJvbGxlciIsInByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyIsImJTa2lwQmluZGluZ1RvVmlldyIsImNvbnRleHQiLCJoaWRkZW5EcmFmdCIsImZvY3VzT25DYW5jZWwiLCJDcmVhdGlvbkRhdGVUaW1lIiwiTGFzdENoYW5nZURhdGVUaW1lIiwiZWRpdEZsb3ciLCJpc0RvY3VtZW50TW9kaWZpZWQiLCJuYW1lIiwib3BlbiIsInRoZW4iLCJzZWxlY3RlZEtleSIsImRyYWZ0RGF0YUxvc3NQb3B1cCIsImhhbmRsZURpYWxvZ1NlbGVjdGlvbiIsInByb2Nlc3NOb0FjdGl2ZUVudGl0eU1vZGUiLCJuYXZpZ2F0aW9uVHlwZSIsImJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24iLCJza2lwQmFja05hdmlnYXRpb24iLCJFZGl0U3RhdGUiLCJpc0VkaXRTdGF0ZURpcnR5IiwiQmFja05hdmlnYXRpb24iLCJkaXNjYXJkRHJhZnQiLCJlcnJvciIsIkxvZyIsIkZvcndhcmROYXZpZ2F0aW9uIiwicHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5Iiwib0NvbnRleHQiLCJtUGFyYW1ldGVycyIsInNraXBEaXNjYXJkUG9wb3ZlciIsInNraXBCaW5kaW5nVG9WaWV3IiwiY2FuY2VsRG9jdW1lbnQiLCJwcm9jZXNzRWRpdFN0YXRlRGlydHkiLCJwcm9jZXNzRHJhZnRBZG1pbkRhdGEiLCJmblByb2Nlc3NGdW5jdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImhhc0FjdGl2ZUVudGl0eSIsImNvbGxhYm9yYXRpb25Db25uZWN0ZWQiLCJjb2xsYWJvcmF0aXZlRHJhZnQiLCJpc0Nvbm5lY3RlZCIsImRpc2Nvbm5lY3QiLCJfbGVuIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImFwcGx5IiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiaXNGY2xFbmFibGVkIiwicHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24iLCJhbHdheXNTaG93SW5IaWRkZW5EcmFmdCIsIm9WaWV3IiwiZ2V0VmlldyIsIm9Nb2RlbCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0TW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwidmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsImNvbnRleHRQYXRoIiwiZW50aXR5U2V0IiwiaXNEcmFmdFJvb3QiLCJnZXRPYmplY3QiLCJiSXNFZGl0YWJsZSIsIkNvbW1vblV0aWxzIiwiZ2V0SXNFZGl0YWJsZSIsIm9yaWdpbmFsQ29udGV4dCIsImRyYWZ0Um9vdFBhdGgiLCJnZXRQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXREcmFmdFJvb3RQYXRoIiwiYmluZENvbnRleHQiLCIkZXhwYW5kIiwiZ2V0Qm91bmRDb250ZXh0IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsImVuYWJsZWQiLCJiYWNrTmF2U2hvd3NEaWFsb2ciLCJnZXRSb3V0ZXJQcm94eSIsImNoZWNrSWZCYWNrRXhpdHNBcHAiLCJpc0RlbGV0ZWQiLCJyZXF1ZXN0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eSIsIm9FcnJvciIsInNhdmVEb2N1bWVudCIsImNvbnRyb2xsZXIiLCJoYXNJbml0aWFsQ29udGV4dCIsImlzQSIsIl9zYXZlRG9jdW1lbnQiLCJza2lwQmFja05hdmlnYXRpb25WYWx1ZSIsInBhcmFtcyIsIlNhdmUiLCJzYXZlZENvbnRleHQiLCJjYXRjaCIsIlJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJDb250aW51ZSIsImNsb3NlIiwiS2VlcCIsImN0eCIsInRlcm1pbmF0ZURyYWZ0U2Vzc2lvbiIsIkRpc2NhcmQiLCJkaXNjYXJkZWREcmFmdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiZHJhZnREYXRhTG9zc1BvcHVwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlQ29udHJvbGxlckNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvT2JqZWN0UGFnZS9PYmplY3RQYWdlQ29udHJvbGxlci5jb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCBEcmFmdERhdGFMb3NzRGlhbG9nIGZyb20gXCIuLi8uLi9jb250cm9scy9EYXRhTG9zc09yRHJhZnREaXNjYXJkL0RyYWZ0RGF0YUxvc3NEaWFsb2dcIjtcbmltcG9ydCB7IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfSBmcm9tIFwiLi4vLi4vY29udHJvbHMvUmVjb21tZW5kYXRpb25zL0NvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCIuLi8uLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcblxuLyogRW51bSBmb3IgbmF2aWdhdGlvbiB0eXBlcyAqL1xuZW51bSBOYXZpZ2F0aW9uVHlwZSB7XG5cdEJhY2tOYXZpZ2F0aW9uID0gXCJCYWNrTmF2aWdhdGlvblwiLFxuXHRGb3J3YXJkTmF2aWdhdGlvbiA9IFwiRm9yd2FyZE5hdmlnYXRpb25cIlxufVxuXG4vKiBFbnVtIHR5cGVzIGZvciB0aGUgZGF0YSBsb3NzIGRpYWxvZyBvcHRpb25zICovXG5lbnVtIERyYWZ0RGF0YUxvc3NPcHRpb25zIHtcblx0U2F2ZSA9IFwiZHJhZnREYXRhTG9zc09wdGlvblNhdmVcIixcblx0S2VlcCA9IFwiZHJhZnREYXRhTG9zc09wdGlvbktlZXBcIixcblx0RGlzY2FyZCA9IFwiZHJhZnREYXRhTG9zc09wdGlvbkRpc2NhcmRcIlxufVxuXG50eXBlIERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhID0ge1xuXHRDcmVhdGlvbkRhdGVUaW1lOiBEYXRlO1xuXHRMYXN0Q2hhbmdlRGF0ZVRpbWU6IERhdGU7XG59O1xuXG4vKkNyZWF0ZSB0aGUgZGF0YSBsb3NzIGRpYWxvZyovXG5jb25zdCBkYXRhTG9zc0RpYWxvZyA9IG5ldyBEcmFmdERhdGFMb3NzRGlhbG9nKFwiZmU6OkRyYWZ0RGF0YUxvc3NQb3B1cFwiKTtcblxuLyoqXG4gKiBUaGUgbWV0aG9kIGNoZWNrcyB3aGV0aGVyIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBpbiB0aGUgbWFuaWZlc3QgaXMgc2V0IHRvIHNpbGVudGx5IGtlZXAgdGhlIGRyYWZ0IGluIGNhc2UgYSBmb3J3YXJkIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkLlxuICogQHBhcmFtIHBhZ2VDb250cm9sbGVyIFRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgUGFnZUNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm5zIEJvb2xlYW4gdmFsdWUgd2l0aCB0cnVlIG9yIGZhbHNlIHRvIHNpbGVudGx5IGtlZXAgdGhlIGRyYWZ0XG4gKi9cbmZ1bmN0aW9uIHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbihwYWdlQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBib29sZWFuIHtcblx0Y29uc3Qgb01hbmlmZXN0ID0gcGFnZUNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKTtcblx0cmV0dXJuIG9NYW5pZmVzdD8uYXBwPy5zaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24gfHwgZmFsc2U7XG59XG5cbi8qKlxuICogTG9naWMgdG8gcHJvY2VzcyB0aGUgRkNMIG1vZGUuXG4gKiBAcGFyYW0gZHJhZnRBZG1pbkRhdGEgQWRtaW4gZGF0YVxuICogQHBhcmFtIGZuQ2FuY2VsRnVuY3Rpb24gVGhlIGNhbmNlbCBmdW5jdGlvblxuICogQHBhcmFtIG9Db250cm9sbGVyIFRoZSBjdXJyZW50IGNvbnRyb2xsZXIgcmVmZXJlbmNlZFxuICogQHBhcmFtIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgaGFuZGxlclxuICogQHBhcmFtIGJTa2lwQmluZGluZ1RvVmlldyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25cbiAqIEBwYXJhbSBoaWRkZW5EcmFmdCBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIGhpZGRlbiBkcmFmdCBpcyBlbmFibGVkIG9yIG5vdFxuICogQHJldHVybnMgTm90aGluZ1xuICovXG5hc3luYyBmdW5jdGlvbiBwcm9jZXNzRmNsTW9kZShcblx0ZHJhZnRBZG1pbkRhdGE6IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIFRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIEZDTCBtb2RlIHNvIGluIHRoaXMgY2FzZSB3ZSBmYWxsIGJhY2sgdG9cblx0Ly8gdGhlIG9sZCBsb2dpYyBzaW5jZSB0aGUgZGlydHkgc3RhdGUgaGFuZGxpbmcgaXMgbm90IHByb3Blcmx5IHdvcmtpbmdcblx0Ly8gZm9yIEZDTC5cblx0bGV0IGZvY3VzT25DYW5jZWw7XG5cdGlmIChkcmFmdEFkbWluRGF0YS5DcmVhdGlvbkRhdGVUaW1lID09PSBkcmFmdEFkbWluRGF0YS5MYXN0Q2hhbmdlRGF0ZVRpbWUgJiYgIW9Db250cm9sbGVyLmVkaXRGbG93LmlzRG9jdW1lbnRNb2RpZmllZCgpKSB7XG5cdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdH0gZWxzZSB7XG5cdFx0Zm9jdXNPbkNhbmNlbCA9IGhpZGRlbkRyYWZ0ID09PSB0cnVlICYmIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cy5uYW1lID09PSBcImFmdGVyQ2FuY2VsXCI7XG5cdFx0cmV0dXJuIGRhdGFMb3NzRGlhbG9nXG5cdFx0XHQub3BlbihvQ29udHJvbGxlciwgZm9jdXNPbkNhbmNlbClcblx0XHRcdC50aGVuKChzZWxlY3RlZEtleSkgPT5cblx0XHRcdFx0ZHJhZnREYXRhTG9zc1BvcHVwLmhhbmRsZURpYWxvZ1NlbGVjdGlvbihcblx0XHRcdFx0XHRzZWxlY3RlZEtleSBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljIHRvIHByb2Nlc3MgdGhlIG1vZGUgd2l0aCBubyBhY3RpdmUgZW50aXR5LlxuICogQHBhcmFtIGRyYWZ0QWRtaW5EYXRhIEFkbWluIGRhdGFcbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBjYW5jZWwgZnVuY3Rpb25cbiAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgY3VycmVudCBjb250cm9sbGVyIHJlZmVyZW5jZWRcbiAqIEBwYXJhbSBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBUaGUgbmF2aWdhdGlvbiB0eXBlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZFxuICogQHBhcmFtIGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24gVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0byBza2lwIHRoZSBwb3B1cCBhcHBlYXJhbmNlIGluIGZvcndhcmQgY2FzZVxuICogQHBhcmFtIGJTa2lwQmluZGluZ1RvVmlldyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25zXG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBwYXJhbSBza2lwQmFja05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBiYWNrIG5hdmlnYXRpb24gc2hvdWxkIGJlIHNraXBwZWRcbiAqIEByZXR1cm5zIE5vdGhpbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZShcblx0ZHJhZnRBZG1pbkRhdGE6IERyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUsXG5cdGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb246IGJvb2xlYW4sXG5cdGJTa2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sXG5cdGNvbnRleHQ/OiBPRGF0YVY0Q29udGV4dCxcblx0aGlkZGVuRHJhZnQ/OiBib29sZWFuLFxuXHRza2lwQmFja05hdmlnYXRpb24/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Ly8gVGhlcmUgaXMgbm8gYWN0aXZlIGVudGl0eSBzbywgd2UgYXJlIGVkaXRpbmcgZWl0aGVyIG5ld2x5IGNyZWF0ZWQgZGF0YSBvclxuXHQvLyBhIGRyYWZ0IHdoaWNoIGhhcyBuZXZlciBiZWVuIHNhdmVkIHRvIGFjdGl2ZSB2ZXJzaW9uXG5cdC8vIFNpbmNlIHdlIHdhbnQgdG8gcmVhY3QgZGlmZmVyZW50bHkgaW4gdGhlIHR3byBzaXR1YXRpb25zLCB3ZSBoYXZlIHRvIGNoZWNrIHRoZVxuXHQvLyBkaXJ0eSBzdGF0ZVxuXHRpZiAoRWRpdFN0YXRlLmlzRWRpdFN0YXRlRGlydHkoKSkge1xuXHRcdGlmIChcblx0XHRcdGRyYWZ0QWRtaW5EYXRhLkNyZWF0aW9uRGF0ZVRpbWUgPT09IGRyYWZ0QWRtaW5EYXRhLkxhc3RDaGFuZ2VEYXRlVGltZSAmJlxuXHRcdFx0IW9Db250cm9sbGVyLmVkaXRGbG93LmlzRG9jdW1lbnRNb2RpZmllZCgpICYmXG5cdFx0XHRuYXZpZ2F0aW9uVHlwZSA9PT0gTmF2aWdhdGlvblR5cGUuQmFja05hdmlnYXRpb25cblx0XHQpIHtcblx0XHRcdC8vIGluIGNhc2Ugd2UgaGF2ZSB1bnRvdWNoZWQgY2hhbmdlcyBmb3IgdGhlIGRyYWZ0IGFuZCBhIFwiYmFja1wiXG5cdFx0XHQvLyBuYXZpZ2F0aW9uIHdlIGNhbiBzaWxlbnRseSBkaXNjYXJkIHRoZSBkcmFmdCBhZ2FpblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb21pc2Uvbm8tbmVzdGluZ1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgZHJhZnREYXRhTG9zc1BvcHVwLmRpc2NhcmREcmFmdChvQ29udHJvbGxlciwgYlNraXBCaW5kaW5nVG9WaWV3LCBjb250ZXh0LCBoaWRkZW5EcmFmdCwgc2tpcEJhY2tOYXZpZ2F0aW9uKTtcblx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjYW5jZWxpbmcgdGhlIGRvY3VtZW50XCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChuYXZpZ2F0aW9uVHlwZSA9PT0gTmF2aWdhdGlvblR5cGUuRm9yd2FyZE5hdmlnYXRpb24gJiYgYlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbikge1xuXHRcdFx0Ly8gSW4gY2FzZSB3ZSBoYXZlIGEgXCJmb3J3YXJkIG5hdmlnYXRpb25cIiBhbmQgYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIgc2V0IGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0Ly8gd2UgXCJzaWxlbnRseVwiIGtlZXAgdGhlIGRyYWZ0XG5cdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gSW4gdGhpcyBjYXNlIGRhdGEgaXMgYmVpbmcgY2hhbmdlZCBvciBhIGZvcndhcmQgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0XHRcdC8vIGFuZCwgd2UgYWx3YXlzIHdhbnQgdG8gc2hvdyB0aGUgZGF0YSBsb3NzIGRpYWxvZyBvbiBuYXZpZ2F0aW9uXG5cdFx0XHRyZXR1cm4gZGF0YUxvc3NEaWFsb2dcblx0XHRcdFx0Lm9wZW4ob0NvbnRyb2xsZXIpXG5cdFx0XHRcdC50aGVuKChzZWxlY3RlZEtleSkgPT5cblx0XHRcdFx0XHRkcmFmdERhdGFMb3NzUG9wdXAuaGFuZGxlRGlhbG9nU2VsZWN0aW9uKFxuXHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXkgYXMgc3RyaW5nLFxuXHRcdFx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRcdFx0Zm5DYW5jZWxGdW5jdGlvbixcblx0XHRcdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRcdFx0YlNraXBCaW5kaW5nVG9WaWV3LFxuXHRcdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRcdGhpZGRlbkRyYWZ0LFxuXHRcdFx0XHRcdFx0c2tpcEJhY2tOYXZpZ2F0aW9uXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHQpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBXZSBhcmUgZWRpdGluZyBhIGRyYWZ0IHdoaWNoIGhhcyBiZWVuIGNyZWF0ZWQgZWFybGllciBidXQgbmV2ZXIgc2F2ZWQgdG8gYWN0aXZlXG5cdFx0Ly8gdmVyc2lvbiBhbmQgc2luY2UgdGhlIGVkaXQgc3RhdGUgaXMgbm90IGRpcnR5LCB0aGVyZSBoYXZlIGJlZW4gbm8gdXNlciBjaGFuZ2VzXG5cdFx0Ly8gc28gaW4gdGhpcyBjYXNlIHdlIHdhbnQgdG8gc2lsZW50bHkgbmF2aWdhdGUgYW5kIGRvIG5vdGhpbmdcblx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljIHRvIHByb2Nlc3MgdGhlIGRyYWZ0IGVkaXRpbmcgZm9yIGV4aXN0aW5nIGVudGl0eS5cbiAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgY3VycmVudCBjb250cm9sbGVyIHJlZmVyZW5jZWQuXG4gKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgY2FsbFxuICogQHBhcmFtIHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyBUaGUgZnVuY3Rpb24gdG8gcHJvY2VzcyB0aGUgaGFuZGxlclxuICogQHBhcmFtIG5hdmlnYXRpb25UeXBlIFRoZSBuYXZpZ2F0aW9uIHR5cGUgZm9yIHdoaWNoIHRoZSBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NFZGl0aW5nRHJhZnRGb3JFeGlzdGluZ0VudGl0eShcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0czogRnVuY3Rpb24sXG5cdG5hdmlnYXRpb25UeXBlOiBOYXZpZ2F0aW9uVHlwZVxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdC8vIFdlIGFyZSBlZGl0aW5nIGEgZHJhZnQgZm9yIGFuIGV4aXN0aW5nIGFjdGl2ZSBlbnRpdHlcblx0Ly8gVGhlIENyZWF0aW9uRGF0ZVRpbWUgYW5kIExhc3RDaGFuZ2VEYXRlVGltZSBhcmUgZXF1YWwsIHNvIHRoaXMgZHJhZnQgd2FzXG5cdC8vIG5ldmVyIHNhdmVkIGJlZm9yZSwgaGVuY2Ugd2UncmUgY3VycmVudGx5IGVkaXRpbmcgYSBuZXdseSBjcmVhdGVkIGRyYWZ0IGZvclxuXHQvLyBhbiBleGlzdGluZyBhY3RpdmUgZW50aXR5IGZvciB0aGUgZmlyc3QgdGltZS5cblx0Ly8gQWxzbywgdGhlcmUgaGF2ZSBzbyBmYXIgYmVlbiBubyBjaGFuZ2VzIG1hZGUgdG8gdGhlIGRyYWZ0IGFuZCBpbiB0aGlzXG5cdC8vIGNhc2Ugd2Ugd2FudCB0byBzaWxlbnRseSBuYXZpZ2F0ZSBhbmQgZGVsZXRlIHRoZSBkcmFmdCBpbiBjYXNlIG9mIGEgYmFja1xuXHQvLyBuYXZpZ2F0aW9uIGJ1dCBpbiBjYXNlIG9mIGEgZm9yd2FyZCBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gc2lsZW50bHkga2VlcCBpdCFcblx0aWYgKG5hdmlnYXRpb25UeXBlID09PSBOYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbikge1xuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzID0ge1xuXHRcdFx0c2tpcERpc2NhcmRQb3BvdmVyOiB0cnVlLFxuXHRcdFx0c2tpcEJpbmRpbmdUb1ZpZXc6IHRydWVcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IG9Db250cm9sbGVyLmVkaXRGbG93LmNhbmNlbERvY3VtZW50KG9Db250ZXh0LCBtUGFyYW1ldGVycyk7XG5cdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY2FuY2VsaW5nIHRoZSBkb2N1bWVudFwiLCBlcnJvciBhcyBFcnJvcik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIEluIGNhc2Ugb2YgYSBmb3J3YXJkIG5hdmlnYXRpb24gd2Ugc2lsZW50bHkga2VlcCB0aGUgZHJhZnQgYW5kIG9ubHlcblx0XHQvLyBleGVjdXRlIHRoZSBmb2xsb3d1cCBmdW5jdGlvbi5cblx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0fVxufVxuXG4vKipcbiAqIExvZ2ljIHRvIHByb2Nlc3MgdGhlIGNvbnRleHQgd2hlbiB0aGUgZWRpdCBzdGF0ZSBpcyBpbiBkaXJ0eSBtb2RlLlxuICogQHBhcmFtIG9Db250cm9sbGVyIFRoZSBjdXJyZW50IGNvbnRyb2xsZXIgcmVmZXJlbmNlZC5cbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBjYW5jZWwgZnVuY3Rpb25cbiAqIEBwYXJhbSBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uVHlwZSBUaGUgbmF2aWdhdGlvbiB0eXBlIGZvciB3aGljaCB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZFxuICogQHBhcmFtIGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24gVGhlIHBhcmFtZXRlciB0byBkZXRlcm1pbmUgd2hldGhlciB0byBza2lwIHRoZSBwb3B1cCBhcHBlYXJhbmNlIGluIGZvcndhcmQgY2FzZVxuICogQHBhcmFtIGJTa2lwQmluZGluZ1RvVmlldyBUaGUgb3B0aW9uYWwgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXcuXG4gKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBiZSB1c2VkIGZvciB0aGUgZHJhZnQgb3BlcmF0aW9uc1xuICogQHBhcmFtIGhpZGRlbkRyYWZ0IEJvb2xlYW4gdmFsdWUgd2hpY2ggbWVudGlvbnMgaWYgaGlkZGVuIGRyYWZ0IGlzIGVuYWJsZWQgb3Igbm90XG4gKiBAcmV0dXJucyBOb3RoaW5nXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NFZGl0U3RhdGVEaXJ0eShcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzOiBGdW5jdGlvbixcblx0bmF2aWdhdGlvblR5cGU6IE5hdmlnYXRpb25UeXBlLFxuXHRiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uOiBib29sZWFuLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhblxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGlmIChuYXZpZ2F0aW9uVHlwZSA9PT0gTmF2aWdhdGlvblR5cGUuRm9yd2FyZE5hdmlnYXRpb24gJiYgYlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbikge1xuXHRcdC8vIEluIGNhc2Ugd2UgaGF2ZSBhIFwiZm9yd2FyZCBuYXZpZ2F0aW9uXCIgYW5kIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHNldCBpbiB0aGUgbWFuaWZlc3Rcblx0XHQvLyB3ZSBcInNpbGVudGx5XCIga2VlcCB0aGUgZHJhZnRcblx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoKTtcblx0fSBlbHNlIHtcblx0XHQvLyBUaGUgQ3JlYXRpb25EYXRlVGltZSBhbmQgTGFzdENoYW5nZURhdGVUaW1lIGFyZSBOT1QgZXF1YWwsIHNvIHdlIGFyZSBjdXJyZW50bHkgZWRpdGluZ1xuXHRcdC8vIGFuIGV4aXN0aW5nIGRyYWZ0IGFuZCBuZWVkIHRvIGRpc3Rpbmd1aXNoIGRlcGVuZGluZyBvbiBpZiBhbnkgY2hhbmdlc1xuXHRcdC8vIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBjdXJyZW50IGVkaXRpbmcgc2Vzc2lvbiBvciBub3Rcblx0XHQvLyBDaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIGluIHRoZSBjdXJyZW50IGVkaXRpbmcgc2Vzc2lvbiwgc28gd2Ugd2FudFxuXHRcdC8vIHRvIHNob3cgdGhlIGRhdGEgbG9zcyBkaWFsb2cgYW5kIGxldCB0aGUgdXNlciBkZWNpZGVcblx0XHRyZXR1cm4gZGF0YUxvc3NEaWFsb2dcblx0XHRcdC5vcGVuKG9Db250cm9sbGVyKVxuXHRcdFx0LnRoZW4oKHNlbGVjdGVkS2V5KSA9PlxuXHRcdFx0XHRkcmFmdERhdGFMb3NzUG9wdXAuaGFuZGxlRGlhbG9nU2VsZWN0aW9uKFxuXHRcdFx0XHRcdHNlbGVjdGVkS2V5IGFzIHN0cmluZyxcblx0XHRcdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsXG5cdFx0XHRcdFx0Zm5DYW5jZWxGdW5jdGlvbixcblx0XHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0XHRoaWRkZW5EcmFmdFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogTG9naWMgdG8gcHJvY2VzcyB0aGUgYWRtaW4gZGF0YS5cbiAqIEBwYXJhbSBkcmFmdEFkbWluRGF0YSBBZG1pbiBkYXRhXG4gKiBAcGFyYW0gZm5Qcm9jZXNzRnVuY3Rpb24gVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBjYW5jZWwgZnVuY3Rpb25cbiAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcbiAqIEBwYXJhbSBvQ29udHJvbGxlciBUaGUgY3VycmVudCBjb250cm9sbGVyIHJlZmVyZW5jZWRcbiAqIEBwYXJhbSBiU2tpcEJpbmRpbmdUb1ZpZXcgVGhlIG9wdGlvbmFsIHBhcmFtZXRlciB0byBza2lwIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3XG4gKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgVGhlIG5hdmlnYXRpb24gdHlwZSBmb3Igd2hpY2ggdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWRcbiAqIEBwYXJhbSBoYXNBY3RpdmVFbnRpdHkgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiByb290IGNvbnRleHQgaGFzIGFjdGl2ZSBlbnRpdHkgb3Igbm90XG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBwYXJhbSBza2lwQmFja05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBiYWNrIG5hdmlnYXRpb24gc2hvdWxkIGJlIHNraXBwZWRcbiAqIEByZXR1cm5zIE5vdGhpbmdcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0RyYWZ0QWRtaW5EYXRhKFxuXHRkcmFmdEFkbWluRGF0YTogRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEsXG5cdGZuUHJvY2Vzc0Z1bmN0aW9uOiBGdW5jdGlvbixcblx0Zm5DYW5jZWxGdW5jdGlvbjogRnVuY3Rpb24sXG5cdGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LFxuXHRvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdGJTa2lwQmluZGluZ1RvVmlldz86IGJvb2xlYW4sXG5cdG5hdmlnYXRpb25UeXBlOiBOYXZpZ2F0aW9uVHlwZSA9IE5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uLFxuXHRoYXNBY3RpdmVFbnRpdHk/OiBib29sZWFuLFxuXHRoaWRkZW5EcmFmdD86IGJvb2xlYW4sXG5cdHNraXBCYWNrTmF2aWdhdGlvbj86IGJvb2xlYW5cbik6IFByb21pc2U8dm9pZD4ge1xuXHRjb25zdCBjb2xsYWJvcmF0aW9uQ29ubmVjdGVkID0gb0NvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0LmlzQ29ubmVjdGVkKCk7XG5cdGNvbnN0IHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyA9ICFjb2xsYWJvcmF0aW9uQ29ubmVjdGVkXG5cdFx0PyBmblByb2Nlc3NGdW5jdGlvblxuXHRcdDogZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuXHRcdFx0XHRvQ29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQuZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRmblByb2Nlc3NGdW5jdGlvbi5hcHBseShudWxsLCAuLi5hcmdzKTtcblx0XHQgIH07XG5cblx0Y29uc3QgYlNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbiA9IHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbihvQ29udHJvbGxlcik7XG5cdGlmIChkcmFmdEFkbWluRGF0YSkge1xuXHRcdGlmIChvQ29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5pc0ZjbEVuYWJsZWQoKSkge1xuXHRcdFx0YXdhaXQgcHJvY2Vzc0ZjbE1vZGUoXG5cdFx0XHRcdGRyYWZ0QWRtaW5EYXRhLFxuXHRcdFx0XHRmbkNhbmNlbEZ1bmN0aW9uLFxuXHRcdFx0XHRvQ29udHJvbGxlcixcblx0XHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzLFxuXHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdGhpZGRlbkRyYWZ0XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoIWhhc0FjdGl2ZUVudGl0eSkge1xuXHRcdFx0cHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZShcblx0XHRcdFx0ZHJhZnRBZG1pbkRhdGEsXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsXG5cdFx0XHRcdG5hdmlnYXRpb25UeXBlLFxuXHRcdFx0XHRiU2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uLFxuXHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0aGlkZGVuRHJhZnQsXG5cdFx0XHRcdHNraXBCYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0ZHJhZnRBZG1pbkRhdGEuQ3JlYXRpb25EYXRlVGltZSA9PT0gZHJhZnRBZG1pbkRhdGEuTGFzdENoYW5nZURhdGVUaW1lICYmXG5cdFx0XHQoIWhpZGRlbkRyYWZ0IHx8IChoaWRkZW5EcmFmdCAmJiAhb0NvbnRyb2xsZXIuZWRpdEZsb3cuaXNEb2N1bWVudE1vZGlmaWVkKCkpKVxuXHRcdCkge1xuXHRcdFx0cHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5KG9Db250cm9sbGVyLCBjb250ZXh0LCBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMsIG5hdmlnYXRpb25UeXBlKTtcblx0XHR9IGVsc2UgaWYgKEVkaXRTdGF0ZS5pc0VkaXRTdGF0ZURpcnR5KCkpIHtcblx0XHRcdHByb2Nlc3NFZGl0U3RhdGVEaXJ0eShcblx0XHRcdFx0b0NvbnRyb2xsZXIsXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyxcblx0XHRcdFx0bmF2aWdhdGlvblR5cGUsXG5cdFx0XHRcdGJTaWxlbnRseUtlZXBEcmFmdE9uRm9yd2FyZE5hdmlnYXRpb24sXG5cdFx0XHRcdGJTa2lwQmluZGluZ1RvVmlldyxcblx0XHRcdFx0Y29udGV4dCxcblx0XHRcdFx0aGlkZGVuRHJhZnRcblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFRoZSB1c2VyIHN0YXJ0ZWQgZWRpdGluZyB0aGUgZXhpc3RpbmcgZHJhZnQgYnV0IGRpZCBub3QgbWFrZSBhbnkgY2hhbmdlc1xuXHRcdFx0Ly8gaW4gdGhlIGN1cnJlbnQgZWRpdGluZyBzZXNzaW9uLCBzbyBpbiB0aGlzIGNhc2Ugd2UgZG8gbm90IHdhbnRcblx0XHRcdC8vIHRvIHNob3cgdGhlIGRhdGEgbG9zcyBkaWFsb2cgYnV0IGp1c3Qga2VlcCB0aGUgZHJhZnRcblx0XHRcdHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cygpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmblByb2Nlc3NGdW5jdGlvbigpO1xuXHR9XG59XG5cbi8qKlxuICogVGhlIGdlbmVyYWwgaGFuZGxlciBpbiB3aGljaCB0aGUgaW5kaXZpZHVhbCBzdGVwcyBhcmUgY2FsbGVkLlxuICogQHBhcmFtIGZuUHJvY2Vzc0Z1bmN0aW9uIEZ1bmN0aW9uIHRvIHByb2Nlc3MgYWZ0ZXIgY29uZmlybWF0aW9uLlxuICogQHBhcmFtIGZuQ2FuY2VsRnVuY3Rpb24gRnVuY3Rpb24gdG8gcHJvY2VzcyBvbiBjYW5jZWwuXG4gKiBAcGFyYW0gb0NvbnRleHQgQ29udGV4dCBmb3IgdGhlIG9wZXJhdGlvbi5cbiAqIEBwYXJhbSBvQ29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXcuXG4gKiBAcGFyYW0gYlNraXBCaW5kaW5nVG9WaWV3IE9wdGlvbmFsIHBhcmFtZXRlciB0byBza2lwIGJpbmRpbmcgdG8gdGhlIHZpZXcuXG4gKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiB0eXBlIGZvciB0aGUgb3BlcmF0aW9uLlxuICogQHBhcmFtIGFsd2F5c1Nob3dJbkhpZGRlbkRyYWZ0IFdoZXRoZXIgdG8gYWx3YXlzIHNob3cgZGlhbG9nIGluIGhpZGRlbiBkcmFmdCBtb2RlLlxuICogQHBhcmFtIHNraXBCYWNrTmF2aWdhdGlvbiBCb29sZWFuIHZhbHVlIHdoaWNoIG1lbnRpb25zIGlmIGJhY2sgbmF2aWdhdGlvbiBzaG91bGQgYmUgc2tpcHBlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdGZuUHJvY2Vzc0Z1bmN0aW9uOiBGdW5jdGlvbixcblx0Zm5DYW5jZWxGdW5jdGlvbjogRnVuY3Rpb24sXG5cdG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0b0NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLFxuXHRiU2tpcEJpbmRpbmdUb1ZpZXc/OiBib29sZWFuLFxuXHRuYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUgPSBOYXZpZ2F0aW9uVHlwZS5CYWNrTmF2aWdhdGlvbixcblx0YWx3YXlzU2hvd0luSGlkZGVuRHJhZnQ/OiBib29sZWFuLFxuXHRza2lwQmFja05hdmlnYXRpb24/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Y29uc3Qgb1ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdGNvbnN0IG9Nb2RlbCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCkuZ2V0TW9kZWwoKTtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblx0Y29uc3Qgdmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpIGFzIHsgZW50aXR5U2V0Pzogc3RyaW5nOyBjb250ZXh0UGF0aD86IHN0cmluZyB9O1xuXHRjb25zdCBjb250ZXh0UGF0aCA9IHZpZXdEYXRhLmNvbnRleHRQYXRoIHx8ICh2aWV3RGF0YS5lbnRpdHlTZXQgPyBgLyR7dmlld0RhdGEuZW50aXR5U2V0fWAgOiB1bmRlZmluZWQpO1xuXHRjb25zdCBpc0RyYWZ0Um9vdCA9IGNvbnRleHRQYXRoID8gISFvTWV0YU1vZGVsLmdldE9iamVjdChgJHtjb250ZXh0UGF0aH1AY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkRyYWZ0Um9vdGApIDogZmFsc2U7XG5cdGNvbnN0IGJJc0VkaXRhYmxlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZShvVmlldyk7XG5cdGNvbnN0IG9yaWdpbmFsQ29udGV4dCA9IG9Db250ZXh0O1xuXHRsZXQgZHJhZnRSb290UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0aWYgKCFpc0RyYWZ0Um9vdCkge1xuXHRcdGRyYWZ0Um9vdFBhdGggPSBNb2RlbEhlbHBlci5nZXREcmFmdFJvb3RQYXRoKG9Db250ZXh0KSA/PyBkcmFmdFJvb3RQYXRoO1xuXHRcdG9Db250ZXh0ID0gb01vZGVsLmJpbmRDb250ZXh0KGRyYWZ0Um9vdFBhdGgsIHVuZGVmaW5lZCwgeyAkZXhwYW5kOiBcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIgfSkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdH1cblx0Y29uc3QgaGlkZGVuRHJhZnQgPSAob0NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KVxuXHRcdD8uZW5hYmxlZDtcblx0Ly8gU2hvdWxkbid0IGRpc3BsYXkgZGF0YSBsb3NzIHBvcG92ZXIgb24gc2hlbGwgYmFjayBuYXZpZ2F0aW9uIGZyb20gc3ViLW9iamVjdCBwYWdlcyAodW5sZXNzIHRoZXJlJ3Mgbm8gcGFnZSBiZWZvcmUgaW4gdGhlIGhpc3RvcnkgYmVjYXVzZSBvZiBkZWVwIGxpbmtpbmcpXG5cdC8vIG9yIHdoZW4gb2JqZWN0IHBhZ2UgaXMgaW4gZGlzcGxheSBtb2RlLCBvciB3aGVuIHRoZSBvYmplY3QgaXMgZGVsZXRlZFxuXHRjb25zdCBiYWNrTmF2U2hvd3NEaWFsb2cgPVxuXHRcdGlzRHJhZnRSb290IHx8IG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkuY2hlY2tJZkJhY2tFeGl0c0FwcCgpIHx8IChoaWRkZW5EcmFmdCAmJiBhbHdheXNTaG93SW5IaWRkZW5EcmFmdCk7XG5cdGlmIChvcmlnaW5hbENvbnRleHQuaXNEZWxldGVkKCkgfHwgKCFiYWNrTmF2U2hvd3NEaWFsb2cgJiYgbmF2aWdhdGlvblR5cGUgPT09IE5hdmlnYXRpb25UeXBlLkJhY2tOYXZpZ2F0aW9uKSB8fCAhYklzRWRpdGFibGUpIHtcblx0XHRmblByb2Nlc3NGdW5jdGlvbigpO1xuXHR9IGVsc2Uge1xuXHRcdHRyeSB7XG5cdFx0XHQvLyBUaGUgZm9sbG93aW5nIDMgcHJvcGVydGllcyBhcmUgbmVlZGVkIHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgdGhlIGRyYWZ0LCBzbyB3ZSBlbnN1cmUgdGhleSBhcmUgbG9hZGVkXG5cdFx0XHRhd2FpdCBvQ29udGV4dC5yZXF1ZXN0UHJvcGVydHkoW1xuXHRcdFx0XHRcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0NyZWF0aW9uRGF0ZVRpbWVcIixcblx0XHRcdFx0XCJEcmFmdEFkbWluaXN0cmF0aXZlRGF0YS9MYXN0Q2hhbmdlRGF0ZVRpbWVcIixcblx0XHRcdFx0XCJIYXNBY3RpdmVFbnRpdHlcIlxuXHRcdFx0XSk7XG5cdFx0XHRjb25zdCBkcmFmdEFkbWluRGF0YSA9IG9Db250ZXh0LmdldE9iamVjdChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhXCIpO1xuXHRcdFx0YXdhaXQgcHJvY2Vzc0RyYWZ0QWRtaW5EYXRhKFxuXHRcdFx0XHRkcmFmdEFkbWluRGF0YSxcblx0XHRcdFx0Zm5Qcm9jZXNzRnVuY3Rpb24sXG5cdFx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24sXG5cdFx0XHRcdGhpZGRlbkRyYWZ0ID8gb3JpZ2luYWxDb250ZXh0IDogb0NvbnRleHQsXG5cdFx0XHRcdG9Db250cm9sbGVyLFxuXHRcdFx0XHRiU2tpcEJpbmRpbmdUb1ZpZXcsXG5cdFx0XHRcdG5hdmlnYXRpb25UeXBlLFxuXHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSxcblx0XHRcdFx0aGlkZGVuRHJhZnQsXG5cdFx0XHRcdHNraXBCYWNrTmF2aWdhdGlvblxuXHRcdFx0KTtcblx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCByZXRyaWV2ZSBkcmFmdERhdGFDb250ZXh0IGluZm9ybWF0aW9uXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0Zm5Qcm9jZXNzRnVuY3Rpb24oKTtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBTYXZlcyB0aGUgZG9jdW1lbnQuIElmIHRoZSBjb250cm9sbGVyIGlzIG9mIHR5cGUgT2JqZWN0UGFnZSwgdGhlbiBpbnRlcm5hbCBfc2F2ZURvY3VtZW50IGlzIGNhbGxlZCwgb3RoZXJ3aXNlIHNhdmVEb2N1bWVudFxuICogZnJvbSBFZGl0RmxvdyBpcyBjYWxsZWQuXG4gKiBAcGFyYW0gY29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25zXG4gKiBAcGFyYW0gc2tpcEJpbmRpbmdUb1ZpZXcgVGhlIHBhcmFtZXRlciB0byBza2lwIHRoZSBiaW5kaW5nIHRvIHRoZSB2aWV3XG4gKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgaWYgdGhlIHNhdmUgd2FzIHN1Y2Nlc3NmdWxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2F2ZURvY3VtZW50KGNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyLCBjb250ZXh0PzogT0RhdGFWNENvbnRleHQsIHNraXBCaW5kaW5nVG9WaWV3PzogYm9vbGVhbik6IFByb21pc2U8dW5rbm93bj4ge1xuXHRjb25zdCBoYXNJbml0aWFsQ29udGV4dCA9IGNvbnRleHQgIT09IHVuZGVmaW5lZDtcblx0Y29udGV4dCA9IGNvbnRleHQgPz8gY29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0aWYgKCFoYXNJbml0aWFsQ29udGV4dCAmJiBjb250cm9sbGVyLmlzQTxPYmplY3RQYWdlQ29udHJvbGxlckNvbnRyb2xsZXI+KFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VDb250cm9sbGVyXCIpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xsZXIuX3NhdmVEb2N1bWVudChza2lwQmluZGluZ1RvVmlldyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xsZXIuZWRpdEZsb3cuc2F2ZURvY3VtZW50KGNvbnRleHQsIHsgc2tpcEJpbmRpbmdUb1ZpZXcgfSk7XG5cdH1cbn1cblxuLyoqXG4gKiBEaXNjYXJkcyB0aGUgZHJhZnQuXG4gKiBAcGFyYW0gY29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXdcbiAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBUaGUgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBkcmFmdCBvcGVyYXRpb25zXG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBwYXJhbSBza2lwQmFja05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSB3aGljaCBkZXRlcm1pbmVzIGlmIGJhY2sgbmF2aWdhdGlvbiBzaG91bGQgYmUgc2tpcHBlZFxuICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmVkIGlmIGNhbmNlbERvY3VtZW50IHdhcyBzdWNjZXNzZnVsXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRpc2NhcmREcmFmdChcblx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdHNraXBCaW5kaW5nVG9WaWV3OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhbixcblx0c2tpcEJhY2tOYXZpZ2F0aW9uPzogYm9vbGVhblxuKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdGNvbnRleHQgPSBjb250ZXh0ID8/IGNvbnRyb2xsZXIuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdGxldCBza2lwQmFja05hdmlnYXRpb25WYWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHNraXBCYWNrTmF2aWdhdGlvbjtcblx0aWYgKCFza2lwQmFja05hdmlnYXRpb24pIHtcblx0XHRza2lwQmFja05hdmlnYXRpb25WYWx1ZSA9IGhpZGRlbkRyYWZ0ID09PSB0cnVlICYmICFjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpID8gZmFsc2UgOiB0cnVlO1xuXHR9XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRza2lwQmFja05hdmlnYXRpb246IHNraXBCYWNrTmF2aWdhdGlvblZhbHVlLFxuXHRcdHNraXBEaXNjYXJkUG9wb3ZlcjogdHJ1ZSxcblx0XHRza2lwQmluZGluZ1RvVmlldzogc2tpcEJpbmRpbmdUb1ZpZXcgIT09IHVuZGVmaW5lZCA/IHNraXBCaW5kaW5nVG9WaWV3IDogdHJ1ZVxuXHR9O1xuXHRyZXR1cm4gY29udHJvbGxlci5lZGl0Rmxvdy5jYW5jZWxEb2N1bWVudChjb250ZXh0LCBwYXJhbXMpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBmb2xsb3ctdXAgZnVuY3Rpb25zIGFmdGVyIGFuIG9wdGlvbiB3YXMgc2VsZWN0ZWQgaW4gdGhlIGRhdGEgbG9zcyBkaWFsb2cuXG4gKiBAcGFyYW0gc2VsZWN0ZWRLZXkgVGhlIGtleSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGZyb20gdGhlIGRhdGEgbG9zcyBkaWFsb2dcbiAqIEBwYXJhbSBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMgVGhlIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGhhbmRsZXJcbiAqIEBwYXJhbSBmbkNhbmNlbEZ1bmN0aW9uIFRoZSBmdW5jdGlvbiB0byBwcm9jZXNzIHRoZSBoYW5kbGVyXG4gKiBAcGFyYW0gY29udHJvbGxlciBDb250cm9sbGVyIG9mIHRoZSBjdXJyZW50IHZpZXdcbiAqIEBwYXJhbSBza2lwQmluZGluZ1RvVmlldyBUaGUgcGFyYW1ldGVyIHRvIHNraXAgdGhlIGJpbmRpbmcgdG8gdGhlIHZpZXdcbiAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIGJlIHVzZWQgZm9yIHRoZSBiaW5kaW5nXG4gKiBAcGFyYW0gaGlkZGVuRHJhZnQgQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBoaWRkZW4gZHJhZnQgaXMgZW5hYmxlZCBvciBub3RcbiAqIEBwYXJhbSBza2lwQmFja05hdmlnYXRpb24gQm9vbGVhbiB2YWx1ZSB3aGljaCBtZW50aW9ucyBpZiBiYWNrIG5hdmlnYXRpb24gc2hvdWxkIGJlIHNraXBwZWRcbiAqL1xuZnVuY3Rpb24gaGFuZGxlRGlhbG9nU2VsZWN0aW9uKFxuXHRzZWxlY3RlZEtleTogc3RyaW5nLFxuXHRwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHM6IEZ1bmN0aW9uLFxuXHRmbkNhbmNlbEZ1bmN0aW9uOiBGdW5jdGlvbixcblx0Y29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsXG5cdHNraXBCaW5kaW5nVG9WaWV3OiBib29sZWFuIHwgdW5kZWZpbmVkLFxuXHRjb250ZXh0PzogT0RhdGFWNENvbnRleHQsXG5cdGhpZGRlbkRyYWZ0PzogYm9vbGVhbixcblx0c2tpcEJhY2tOYXZpZ2F0aW9uPzogYm9vbGVhblxuKTogdm9pZCB7XG5cdHN3aXRjaCAoc2VsZWN0ZWRLZXkpIHtcblx0XHRjYXNlIERyYWZ0RGF0YUxvc3NPcHRpb25zLlNhdmU6XG5cdFx0XHRkcmFmdERhdGFMb3NzUG9wdXBcblx0XHRcdFx0LnNhdmVEb2N1bWVudChjb250cm9sbGVyLCBjb250ZXh0LCBza2lwQmluZGluZ1RvVmlldylcblx0XHRcdFx0LnRoZW4oKHNhdmVkQ29udGV4dD8pID0+IHByb2Nlc3NGdW5jdGlvbkZvckRyYWZ0cyhzYXZlZENvbnRleHQpKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoZXJyb3IgPT09IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbkNhbmNlbEZ1bmN0aW9uKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHNhdmluZyBkb2N1bWVudFwiLCBlcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0ZGF0YUxvc3NEaWFsb2cuY2xvc2UoKTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgRHJhZnREYXRhTG9zc09wdGlvbnMuS2VlcDoge1xuXHRcdFx0Y29uc3QgY3R4ID0gY29udGV4dCA/PyBjb250cm9sbGVyLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0aWYgKGN0eCkge1xuXHRcdFx0XHRjb250cm9sbGVyLmVkaXRGbG93LnRlcm1pbmF0ZURyYWZ0U2Vzc2lvbihjdHgpO1xuXHRcdFx0fVxuXHRcdFx0cHJvY2Vzc0Z1bmN0aW9uRm9yRHJhZnRzKCk7XG5cdFx0XHRkYXRhTG9zc0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGNhc2UgRHJhZnREYXRhTG9zc09wdGlvbnMuRGlzY2FyZDpcblx0XHRcdGRyYWZ0RGF0YUxvc3NQb3B1cFxuXHRcdFx0XHQuZGlzY2FyZERyYWZ0KGNvbnRyb2xsZXIsIHNraXBCaW5kaW5nVG9WaWV3LCBjb250ZXh0LCBoaWRkZW5EcmFmdCwgc2tpcEJhY2tOYXZpZ2F0aW9uKVxuXHRcdFx0XHQudGhlbigoZGlzY2FyZGVkRHJhZnQ/KSA9PiBwcm9jZXNzRnVuY3Rpb25Gb3JEcmFmdHMoZGlzY2FyZGVkRHJhZnQpKVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBkaXNjYXJkaW5nIGRyYWZ0XCIsIGVycm9yKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRkYXRhTG9zc0RpYWxvZy5jbG9zZSgpO1xuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGZuQ2FuY2VsRnVuY3Rpb24oKTtcblx0XHRcdGRhdGFMb3NzRGlhbG9nLmNsb3NlKCk7XG5cdH1cbn1cblxuY29uc3QgZHJhZnREYXRhTG9zc1BvcHVwID0ge1xuXHRwcm9jZXNzRGF0YUxvc3NPckRyYWZ0RGlzY2FyZENvbmZpcm1hdGlvbjogcHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24sXG5cdHNpbGVudGx5S2VlcERyYWZ0T25Gb3J3YXJkTmF2aWdhdGlvbjogc2lsZW50bHlLZWVwRHJhZnRPbkZvcndhcmROYXZpZ2F0aW9uLFxuXHROYXZpZ2F0aW9uVHlwZTogTmF2aWdhdGlvblR5cGUsXG5cdHByb2Nlc3NGY2xNb2RlOiBwcm9jZXNzRmNsTW9kZSxcblx0cHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZTogcHJvY2Vzc05vQWN0aXZlRW50aXR5TW9kZSxcblx0cHJvY2Vzc0VkaXRpbmdEcmFmdEZvckV4aXN0aW5nRW50aXR5OiBwcm9jZXNzRWRpdGluZ0RyYWZ0Rm9yRXhpc3RpbmdFbnRpdHksXG5cdHByb2Nlc3NFZGl0U3RhdGVEaXJ0eTogcHJvY2Vzc0VkaXRTdGF0ZURpcnR5LFxuXHRoYW5kbGVEaWFsb2dTZWxlY3Rpb246IGhhbmRsZURpYWxvZ1NlbGVjdGlvbixcblx0c2F2ZURvY3VtZW50OiBzYXZlRG9jdW1lbnQsXG5cdGRpc2NhcmREcmFmdDogZGlzY2FyZERyYWZ0XG59O1xuXG5leHBvcnQgZGVmYXVsdCBkcmFmdERhdGFMb3NzUG9wdXA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0VBV0E7RUFBQSxJQUNLQSxjQUFjLDBCQUFkQSxjQUFjO0lBQWRBLGNBQWM7SUFBZEEsY0FBYztJQUFBLE9BQWRBLGNBQWM7RUFBQSxFQUFkQSxjQUFjO0VBS25CO0VBQUEsSUFDS0Msb0JBQW9CLDBCQUFwQkEsb0JBQW9CO0lBQXBCQSxvQkFBb0I7SUFBcEJBLG9CQUFvQjtJQUFwQkEsb0JBQW9CO0lBQUEsT0FBcEJBLG9CQUFvQjtFQUFBLEVBQXBCQSxvQkFBb0I7RUFXekI7RUFDQSxNQUFNQyxjQUFjLEdBQUcsSUFBSUMsbUJBQW1CLENBQUMsd0JBQXdCLENBQUM7O0VBRXhFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxvQ0FBb0NBLENBQUNDLGNBQThCLEVBQVc7SUFDdEYsTUFBTUMsU0FBUyxHQUFHRCxjQUFjLENBQUNFLGVBQWUsQ0FBQyxDQUFDLENBQUNDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUM3RSxPQUFPRixTQUFTLEVBQUVHLEdBQUcsRUFBRUwsb0NBQW9DLElBQUksS0FBSztFQUNyRTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsZUFBZU0sY0FBY0EsQ0FDNUJDLGNBQXVDLEVBQ3ZDQyxnQkFBMEIsRUFDMUJDLFdBQTJCLEVBQzNCQyx3QkFBa0MsRUFDbENDLGtCQUE0QixFQUM1QkMsT0FBd0IsRUFDeEJDLFdBQXFCLEVBQ0w7SUFDaEI7SUFDQTtJQUNBO0lBQ0EsSUFBSUMsYUFBYTtJQUNqQixJQUFJUCxjQUFjLENBQUNRLGdCQUFnQixLQUFLUixjQUFjLENBQUNTLGtCQUFrQixJQUFJLENBQUNQLFdBQVcsQ0FBQ1EsUUFBUSxDQUFDQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7TUFDeEhSLHdCQUF3QixDQUFDLENBQUM7SUFDM0IsQ0FBQyxNQUFN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
|
|
@@ -483,10 +483,15 @@ function handleDialogSelection(
|
|
|
483
483
|
});
|
|
484
484
|
dataLossDialog.close();
|
|
485
485
|
break;
|
|
486
|
-
case DraftDataLossOptions.Keep:
|
|
486
|
+
case DraftDataLossOptions.Keep: {
|
|
487
|
+
const ctx = context ?? controller.getView().getBindingContext();
|
|
488
|
+
if (ctx) {
|
|
489
|
+
controller.editFlow.terminateDraftSession(ctx);
|
|
490
|
+
}
|
|
487
491
|
processFunctionForDrafts();
|
|
488
492
|
dataLossDialog.close();
|
|
489
493
|
break;
|
|
494
|
+
}
|
|
490
495
|
case DraftDataLossOptions.Discard:
|
|
491
496
|
draftDataLossPopup
|
|
492
497
|
.discardDraft(controller, skipBindingToView, context, hiddenDraft, skipBackNavigation)
|