@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
|
@@ -24,6 +24,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
var _exports = {};
|
|
27
|
+
var getRouteTargets = ManifestHelper.getRouteTargets;
|
|
27
28
|
var getRouteTargetNames = ManifestHelper.getRouteTargetNames;
|
|
28
29
|
var event = ClassSupport.event;
|
|
29
30
|
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
@@ -138,6 +139,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
138
139
|
this._mRoutes = {};
|
|
139
140
|
if (oRoutingConfig?.routes) {
|
|
140
141
|
for (const oRouteManifestInfo of oRoutingConfig.routes) {
|
|
142
|
+
const routeTargets = getRouteTargets(oRouteManifestInfo.target);
|
|
141
143
|
const aRouteTargets = getRouteTargetNames(oRouteManifestInfo.target),
|
|
142
144
|
sRouteName = oRouteManifestInfo.name,
|
|
143
145
|
sRoutePattern = oRouteManifestInfo.pattern;
|
|
@@ -153,6 +155,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
153
155
|
name: sRouteName,
|
|
154
156
|
pattern: sRoutePattern,
|
|
155
157
|
targets: aRouteTargets,
|
|
158
|
+
targetsWithInfo: routeTargets,
|
|
156
159
|
routeLevel: iRouteLevel
|
|
157
160
|
};
|
|
158
161
|
|
|
@@ -262,7 +265,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
262
265
|
}
|
|
263
266
|
Object.keys(settings.navigation || {}).forEach(sNavName => {
|
|
264
267
|
// Check if it's a navigation property
|
|
265
|
-
if (
|
|
268
|
+
if (["sap.fe.templates.ListReport", "sap.fe.ariba.ListReport"].includes(target.name)) {
|
|
266
269
|
parentOf.push(sNavName);
|
|
267
270
|
}
|
|
268
271
|
const targetRoute = this._mRoutes[settings.navigation[sNavName].detail?.route];
|
|
@@ -403,8 +406,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
403
406
|
});
|
|
404
407
|
}
|
|
405
408
|
const targetUrl = await sTargetURLPromise;
|
|
409
|
+
const isHiddenDraftEnabled = this.oAppComponent.getEnvironmentCapabilities().getCapabilities().HiddenDraft?.enabled || false;
|
|
406
410
|
const navigateFunction = () => {
|
|
407
|
-
this.oRouterProxy.navToHash(targetUrl, bPreserveHistory, false, false,
|
|
411
|
+
this.oRouterProxy.navToHash(targetUrl, bPreserveHistory, false, false, bIsStickyMode || isHiddenDraftEnabled);
|
|
408
412
|
};
|
|
409
413
|
if (delayedUsage === true) {
|
|
410
414
|
return navigateFunction; // wrong but somehow the types are annoying
|
|
@@ -491,6 +495,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
491
495
|
* @param [viewData.navigation]
|
|
492
496
|
* @param [currentTargetInfo] The target information from which the navigation is triggered
|
|
493
497
|
* @param [currentTargetInfo.name]
|
|
498
|
+
* @param skipHashGuardCheck
|
|
494
499
|
* @returns Promise which is resolved once the navigation is triggered
|
|
495
500
|
* @final
|
|
496
501
|
*/;
|
|
@@ -498,12 +503,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
498
503
|
let parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
499
504
|
let viewData = arguments.length > 2 ? arguments[2] : undefined;
|
|
500
505
|
let currentTargetInfo = arguments.length > 3 ? arguments[3] : undefined;
|
|
506
|
+
let skipHashGuardCheck = arguments.length > 4 ? arguments[4] : undefined;
|
|
501
507
|
if (!this.enabled) {
|
|
502
508
|
return Promise.resolve(false);
|
|
503
509
|
}
|
|
504
510
|
let targetRoute = "";
|
|
505
511
|
let routeParametersPromise;
|
|
506
512
|
const isStickyMode = ModelHelper.isStickySessionSupported(this.oMetaModel);
|
|
513
|
+
const isHiddenDraftEnabled = this.oAppComponent.getEnvironmentCapabilities().getCapabilities().HiddenDraft?.enabled || false;
|
|
507
514
|
|
|
508
515
|
// Manage parameter mapping
|
|
509
516
|
if (parameters?.targetPath && viewData?.navigation) {
|
|
@@ -606,7 +613,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
606
613
|
} else {
|
|
607
614
|
// Clear unbound messages upon navigating from LR to OP
|
|
608
615
|
// This is to ensure stale error messages from LR are not shown to the user after navigation to OP.
|
|
609
|
-
if (currentTargetInfo?.name
|
|
616
|
+
if (currentTargetInfo?.name && ["sap.fe.templates.ListReport", "sap.fe.ariba.ListReport"].includes(currentTargetInfo.name)) {
|
|
610
617
|
const oRouteInfo = this.oRouter.getRouteInfoByHash(sTargetPath);
|
|
611
618
|
if (oRouteInfo) {
|
|
612
619
|
const oRoute = this._getRouteInformation(oRouteInfo.name);
|
|
@@ -625,13 +632,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
625
632
|
if (targetRoute && routeParametersPromise) {
|
|
626
633
|
return routeParametersPromise.then(oRouteParameters => {
|
|
627
634
|
Object.assign(oRouteParameters, {
|
|
628
|
-
bIsStickyMode: isStickyMode
|
|
635
|
+
bIsStickyMode: isStickyMode,
|
|
636
|
+
isHiddenDraftEnabled
|
|
629
637
|
});
|
|
630
638
|
this.oRouter.navTo(targetRoute, oRouteParameters);
|
|
631
639
|
return true;
|
|
632
640
|
});
|
|
633
641
|
}
|
|
634
|
-
return this.oRouterProxy.navToHash(sTargetPath, !!parameters.preserveHistory, parameters?.noPreservationCache, parameters?.forceFocus,
|
|
642
|
+
return this.oRouterProxy.navToHash(sTargetPath, !!parameters.preserveHistory, parameters?.noPreservationCache, parameters?.forceFocus, isStickyMode || isHiddenDraftEnabled, skipHashGuardCheck).then(bNavigated => {
|
|
635
643
|
if (!bNavigated) {
|
|
636
644
|
// The navigation did not happen --> remove the navigation parameters from the queue as they shouldn't be used
|
|
637
645
|
this.navigationInfoQueue.pop();
|
|
@@ -647,6 +655,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
647
655
|
* @param [oRouteParameters] Parameters to be used with route to create the target hash
|
|
648
656
|
* @param oRouteParameters.bIsStickyMode
|
|
649
657
|
* @param oRouteParameters.preserveHistory
|
|
658
|
+
* @param oRouteParameters.isHiddenDraftEnabled
|
|
650
659
|
* @returns Promise that is resolved when the navigation is finalized
|
|
651
660
|
* @final
|
|
652
661
|
*/;
|
|
@@ -656,7 +665,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
656
665
|
}
|
|
657
666
|
this.setLastSemanticMapping(undefined);
|
|
658
667
|
const sTargetURL = this.oRouter.getURL(sTargetRouteName, oRouteParameters);
|
|
659
|
-
return this.oRouterProxy.navToHash(sTargetURL, !!oRouteParameters?.preserveHistory, undefined, undefined,
|
|
668
|
+
return this.oRouterProxy.navToHash(sTargetURL, !!oRouteParameters?.preserveHistory, undefined, undefined, (oRouteParameters?.bIsStickyMode ?? false) || (oRouteParameters?.isHiddenDraftEnabled ?? false));
|
|
660
669
|
}
|
|
661
670
|
|
|
662
671
|
/**
|
|
@@ -1023,4 +1032,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
|
|
|
1023
1032
|
}(ServiceFactory);
|
|
1024
1033
|
return RoutingServiceFactory;
|
|
1025
1034
|
}, false);
|
|
1026
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJldmVudCIsIl9kZWMzIiwiX2RlYzQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0V2ZW50UHJvdmlkZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfaW5oZXJpdHNMb29zZSIsIkV2ZW50UHJvdmlkZXIiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwicHJvdG90eXBlIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJSb3V0aW5nU2VydmljZSIsIl9TZXJ2aWNlIiwiX3RoaXMyIiwiX2xlbjIiLCJfa2V5MiIsIm5hdmlnYXRpb25JbmZvUXVldWUiLCJlbmFibGVkIiwiYmluZGluZ0NsZWFudXBQcm9taXNlcyIsIl9leHBvcnRzIiwiX3Byb3RvIiwiaW5pdCIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsInNjb3BlVHlwZSIsIm9BcHBDb21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJvUm91dGVyUHJveHkiLCJnZXRSb3V0ZXJQcm94eSIsImV2ZW50UHJvdmlkZXIiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0RW50cnkiLCJyb3V0aW5nIiwiX3BhcnNlUm91dGluZ0NvbmZpZ3VyYXRpb24iLCJvQXBwQ29uZmlnIiwib3V0Ym91bmRzIiwiY3Jvc3NOYXZpZ2F0aW9uIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImJlZm9yZUV4aXQiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJfZm5PblJvdXRlTWF0Y2hlZCIsImRldGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsIl9mbk9uQmVmb3JlUm91dGVNYXRjaGVkIiwiZmlyZUV2ZW50IiwiZXhpdCIsImRlc3Ryb3kiLCJhZGRCaW5kaW5nQ2xlYW51cFByb21pc2UiLCJwcm9taXNlIiwicHVzaCIsIndhaXRGb3JCaW5kaW5nQ2xlYW51cCIsImFsbCIsImlzRkNMIiwiY29uZmlnIiwicm91dGVyQ2xhc3MiLCJfbVRhcmdldHMiLCJ0YXJnZXRzIiwic1RhcmdldE5hbWUiLCJPYmplY3QiLCJrZXlzIiwiYXNzaWduIiwidGFyZ2V0TmFtZSIsImNvbnRleHRQYXR0ZXJuIiwidW5kZWZpbmVkIiwidmlld0xldmVsIiwiX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuIiwicm91dGluZ0hpbnRzIiwiX21Sb3V0ZXMiLCJyb3V0ZXMiLCJvUm91dGVNYW5pZmVzdEluZm8iLCJhUm91dGVUYXJnZXRzIiwiZ2V0Um91dGVUYXJnZXROYW1lcyIsInRhcmdldCIsInNSb3V0ZU5hbWUiLCJuYW1lIiwic1JvdXRlUGF0dGVybiIsInBhdHRlcm4iLCJpbmRleE9mIiwiTG9nIiwid2FybmluZyIsImlSb3V0ZUxldmVsIiwicm91dGVMZXZlbCIsIml0ZW0iLCJzUGFyZW50VGFyZ2V0TmFtZSIsInBhcmVudCIsInJvdXRlckhhc2hLZXlzIiwiUm91dGVyUHJveHkiLCJleHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoIiwic3BsaXQiLCJGQ0xMZXZlbCIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImZvckVhY2giLCJhTGV2ZWwwUm91dGVOYW1lcyIsImFMZXZlbDFSb3V0ZU5hbWVzIiwic0RlZmF1bHRSb3V0ZU5hbWUiLCJzTmFtZSIsImlMZXZlbCIsInNEZWZhdWx0VGFyZ2V0TmFtZSIsInNsaWNlIiwic0NvbnRleHRQYXRoIiwib1NldHRpbmdzIiwib3B0aW9ucyIsInNldHRpbmdzIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtYXAiLCJzVGFyZ2V0S2V5Iiwic29ydCIsImEiLCJiIiwiZnVsbENvbnRleHRQYXRoIiwicGFyZW50T2YiLCJuYXZpZ2F0aW9uIiwic05hdk5hbWUiLCJ0YXJnZXRSb3V0ZSIsImRldGFpbCIsInJvdXRlIiwic3RhcnRzV2l0aCIsInNQYXR0ZXJuIiwicmVwbGFjZSIsInJlZ2V4IiwiUmVnRXhwIiwibWF0Y2giLCJfZ2V0Um91dGVJbmZvcm1hdGlvbiIsIl9nZXRUYXJnZXRJbmZvcm1hdGlvbiIsIl9nZXRDb21wb25lbnRJZCIsInNPd25lcklkIiwic0NvbXBvbmVudElkIiwic3Vic3RyaW5nIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJjb21wb25lbnRPclZpZXciLCJjb3JyZWN0VGFyZ2V0TmFtZSIsImdldFRhcmdldE5hbWUiLCJ0YXJnZXRDb21wb25lbnRJZCIsIl9zT3duZXJJZCIsImdldElkIiwiaWQiLCJ2aWV3SWQiLCJnZXRUYXJnZXROYW1lRm9yVmlldyIsInZpZXciLCJwYWdlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJnZXRMYXN0U2VtYW50aWNNYXBwaW5nIiwib0xhc3RTZW1hbnRpY01hcHBpbmciLCJzZXRMYXN0U2VtYW50aWNNYXBwaW5nIiwib01hcHBpbmciLCJnZXRIYXNoRnJvbVJvdXRlIiwiY29udGV4dCIsInJvdXRlTmFtZSIsInBhcmFtZXRlck1hcHBpbmciLCJ0YXJnZXRVUkxQcm9taXNlIiwiU2VtYW50aWNLZXlIZWxwZXIiLCJnZXRTZW1hbnRpY1BhdGgiLCJwcmVwYXJlUGFyYW1ldGVycyIsInRoZW4iLCJwYXJhbWV0ZXJzIiwiZ2V0VVJMIiwibmF2aWdhdGVUbyIsIm1QYXJhbWV0ZXJNYXBwaW5nIiwiYlByZXNlcnZlSGlzdG9yeSIsImRlbGF5ZWRVc2FnZSIsInNUYXJnZXRVUkxQcm9taXNlIiwiYklzU3RpY2t5TW9kZSIsIk1vZGVsSGVscGVyIiwiaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkIiwibVBhcmFtZXRlcnMiLCJ0YXJnZXRVcmwiLCJuYXZpZ2F0ZUZ1bmN0aW9uIiwibmF2VG9IYXNoIiwic1RhcmdldFJvdXRlIiwib1BhcmFtZXRlcnNQcm9taXNlIiwiZ2V0UGF0aCIsImFDb250ZXh0UGF0aFBhcnRzIiwiYUFsbFJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMiLCJzUGFyYW1ldGVyS2V5Iiwic1BhcmFtZXRlck1hcHBpbmdFeHByZXNzaW9uIiwib1BhcnNlZEV4cHJlc3Npb24iLCJCaW5kaW5nSW5mbyIsInBhcnNlIiwiYVBhcnRzIiwicGFydHMiLCJhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyIsIm9QYXRoUGFydCIsImFSZWxhdGl2ZVBhcnRzIiwicGF0aCIsImFMb2NhbFBhcnRzIiwibG9jYWxDb250ZXh0UGF0aCIsImpvaW4iLCJsb2NhbENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5Iiwib1ZhbHVlIiwib1Byb3BlcnR5SW5mbyIsImdldE9iamVjdCIsInNFZG1UeXBlIiwiJFR5cGUiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsImFSZXNvbHZlZFBhcmFtZXRlcnMiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImFwcGx5Iiwia2V5IiwiYUFsbFJlc29sdmVkUGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJzIiwib1Jlc29sdmVkUGFyYW1ldGVyIiwib0Vycm9yIiwiZXJyb3IiLCJfZmlyZVJvdXRlTWF0Y2hFdmVudHMiLCJFZGl0U3RhdGUiLCJjbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSIsIm5hdmlnYXRlVG9Db250ZXh0Iiwidmlld0RhdGEiLCJjdXJyZW50VGFyZ2V0SW5mbyIsInJvdXRlUGFyYW1ldGVyc1Byb21pc2UiLCJpc1N0aWNreU1vZGUiLCJ0YXJnZXRQYXRoIiwibmF2aWdhdGlvbkluZm8iLCJvUm91dGVEZXRhaWwiLCJpc0EiLCJzVGFyZ2V0UGF0aCIsIl9nZXRQYXRoRnJvbUNvbnRleHQiLCJiRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290IiwiZXhpdEZyb21BcHAiLCJjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyIsInNMYXlvdXQiLCJfY2FsY3VsYXRlTGF5b3V0Iiwib05hdmlnYXRpb25JbmZvIiwiYlRhcmdldEVkaXRhYmxlIiwiZWRpdGFibGUiLCJiUGVyc2lzdE9QU2Nyb2xsIiwicGVyc2lzdE9QU2Nyb2xsIiwiYlNob3dQbGFjZWhvbGRlciIsInNob3dQbGFjZWhvbGRlciIsInJlYXNvbiIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwidXBkYXRlRkNMTGV2ZWwiLCJyZWNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiY2hlY2tOb0hhc2hDaGFuZ2UiLCJzQ3VycmVudEhhc2hOb0FwcFN0YXRlIiwiZ2V0SGFzaCIsInJvdXRlSW5mb0J5SGFzaCIsImdldFJvdXRlSW5mb0J5SGFzaCIsIm1FdmVudFBhcmFtZXRlcnMiLCJyb3V0ZUluZm9ybWF0aW9uIiwic0N1cnJlbnRSb3V0ZU5hbWUiLCJyb3V0ZVBhdHRlcm4iLCJzQ3VycmVudFJvdXRlUGF0dGVybiIsInZpZXdzIiwiYUN1cnJlbnRWaWV3cyIsInNldEZvY3VzRm9yY2VkIiwiZm9yY2VGb2N1cyIsInRyYW5zaWVudCIsImluY2x1ZGVzIiwibmF2TW9kZSIsInNhcCIsInVpIiwicmVxdWlyZSIsIkNvbnRhaW5lciIsInNoZWxsU2VydmljZUhlbHBlciIsImdldFNoZWxsU2VydmljZXMiLCJwYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTZXJ2aWNlQXN5bmMiLCJocmVmIiwiZ2V0SHJlZiIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1zIiwiYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lIiwiZ2V0SW5mcmFtZVVybCIsInVybCIsIlVSTCIsImVuY29kZVVSSSIsIndpbmRvdyIsIm9yaWdpbiIsInBhdGhuYW1lIiwib3BlbldpbmRvdyIsIm9Sb3V0ZUluZm8iLCJvUm91dGUiLCJzTGFzdFRhcmdldE5hbWUiLCJvVGFyZ2V0IiwibWVzc2FnZUhhbmRsaW5nIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsIm9Sb3V0ZVBhcmFtZXRlcnMiLCJuYXZUbyIsInByZXNlcnZlSGlzdG9yeSIsIm5vUHJlc2VydmF0aW9uQ2FjaGUiLCJiTmF2aWdhdGVkIiwicG9wIiwibmF2aWdhdGVUb1JvdXRlIiwic1RhcmdldFJvdXRlTmFtZSIsInNUYXJnZXRVUkwiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJzUGF0aCIsInRlc3QiLCJzU2VtYW50aWNQYXRoIiwidGVjaG5pY2FsUGF0aCIsInNlbWFudGljUGF0aCIsImdldFBhdGhUb05hdmlnYXRlQmFjayIsIl9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoIiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0T2JqZWN0IiwiaXNEcmFmdFJvb3QiLCJnZXRQcm9wZXJ0eSIsImVudGl0eVNldE5hbWUiLCJnZXRTZW1hbnRpY0tleXMiLCJnZXRIZWFkZXJDb250ZXh0IiwibGF5b3V0IiwiZmluZExheW91dEZvckhhc2giLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJjYWxjdWxhdGVMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIl9vbkJlZm9yZVJvdXRlTWF0Y2hlZCIsIm9FdmVudCIsInZpZXdQcmVsb2FkZXJTZXJ2aWNlIiwiZ2V0Vmlld1ByZWxvYWRlclNlcnZpY2UiLCJzZXRDYWNoZSIsImdldFBhcmFtZXRlciIsImJQbGFjZWhvbGRlckVuYWJsZWQiLCJQbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJCdXN5TG9ja2VyIiwibG9jayIsIl9pc05hdmlnYXRpb25UcmlnZ2VyZWRCeVJvdXRlclByb3h5IiwiaGlzdG9yeSIsInN0YXRlIiwiZmVMZXZlbCIsIl9vblJvdXRlTWF0Y2hlZCIsIm9BcHBTdGF0ZUhhbmRsZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJpc0xvY2tlZCIsInVubG9jayIsImdldFBhcmFtZXRlcnMiLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwiTmF2aWdhdGlvblJlYXNvbiIsIkFwcFN0YXRlQ2hhbmdlZCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwiY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCIsIlJlc3RvcmVIaXN0b3J5IiwicmVzZXRSZXN0b3JlSGlzdG9yeUZsYWciLCJyZXN0b3JlSGlzdG9yeSIsInJlc29sdmVSb3V0ZU1hdGNoIiwiY2F0Y2giLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsImRldGFjaEV2ZW50IiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImluaXRpYWxpemVSb3V0aW5nIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJDb2xsYWJvcmF0aW9uIiwiZGVmYXVsdCIsIkNvbGxhYm9yYXRpb25IZWxwZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwicHJvY2Vzc0FuZEV4cGFuZEhhc2giLCJiaW5kIiwicmVzZXRFZGl0U3RhdGUiLCJtYW5hZ2VTdGFydHVwTW9kZSIsIm9uUmVzdG9yZSIsImJJc0lhcHBTdGF0ZSIsImdldEhhc2hDaGFuZ2VyIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJiSGFzU3RhcnRVcFBhcmFtZXRlcnMiLCJzSGFzaCIsInByZWZlcnJlZE1vZGUiLCJ0b1VwcGVyQ2FzZSIsIl9tYW5hZ2VDcmVhdGVTdGFydHVwIiwiX21hbmFnZURlZXBMaW5rU3RhcnR1cCIsIl9tYW5hZ2VkUHJlZmVycmVkTW9kZUVkaXQiLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsIkFwcFN0YXJ0dXBIZWxwZXIiLCJnZXRDb250ZXh0UGF0aCIsImdldENyZWF0ZVN0YXJ0dXBIYXNoIiwic05ld0hhc2giLCJyZXBsYWNlSGFzaCIsInNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSIsInNldFN0YXJ0dXBNb2RlQ3JlYXRlIiwiZ2V0RGVlcExpbmtTdGFydHVwSGFzaCIsImFwcCIsImluYm91bmRQYXJhbWV0ZXJGb3JUYXJnZXRSZXNvbHV0aW9uIiwib0RlZXBMaW5rIiwic1RlY2huaWNhbFBhdGgiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJyZXN1bHRpbmdIYXNoIiwic2hvdWxkRWRpdCIsInZlcmlmeUVkaXRBbm5vdGF0aW9ucyIsInBhcmFtZXRlciIsImdldE91dGJvdW5kcyIsImdldFJvdXRpbmdIaW50cyIsImdldEludGVyZmFjZSIsIlNlcnZpY2UiLCJSb3V0aW5nU2VydmljZUZhY3RvcnkiLCJfU2VydmljZUZhY3RvcnkiLCJfcHJvdG8yIiwiY3JlYXRlSW5zdGFuY2UiLCJvU2VydmljZUNvbnRleHQiLCJvUm91dGluZ1NlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiUm91dGluZ1NlcnZpY2VGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW50aXR5U2V0IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5cbmltcG9ydCB0eXBlIHsgUm91dGUgfSBmcm9tIFwiQHVpNS9tYW5pZmVzdC90eXBlcy9tYW5pZmVzdFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnR1cFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCBBcHBTdGFydHVwSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0FwcFN0YXJ0dXBIZWxwZXJcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgeyBnZXRSb3V0ZVRhcmdldE5hbWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFuaWZlc3RIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgQmluZGluZ0luZm8gZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdJbmZvXCI7XG5pbXBvcnQgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50Q29udGFpbmVyIGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRDb250YWluZXJcIjtcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RPdXRib3VuZEVudHJ5LCBSb3V0aW5nQ29uZmlndXJhdGlvbiwgUm91dGluZ1RhcmdldCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIHsgUm91dGUkTWF0Y2hlZEV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXIgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFMaXN0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTGlzdEJpbmRpbmdcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgT0RhdGFVdGlscyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhVXRpbHNcIjtcbmltcG9ydCBvcGVuV2luZG93IGZyb20gXCJzYXAvdWkvdXRpbC9vcGVuV2luZG93XCI7XG5pbXBvcnQgdHlwZSBDb250YWluZXIgZnJvbSBcInNhcC91c2hlbGwvQ29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBOYXZpZ2F0aW9uIGZyb20gXCJzYXAvdXNoZWxsL3NlcnZpY2VzL05hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5cbnR5cGUgUm91dGluZ1NlcnZpY2VTZXR0aW5ncyA9IHt9O1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuc2VydmljZXMuUm91dGluZ1NlcnZpY2VFdmVudGluZ1wiKVxuY2xhc3MgUm91dGluZ1NlcnZpY2VFdmVudGluZyBleHRlbmRzIEV2ZW50UHJvdmlkZXIge1xuXHRAZXZlbnQoKVxuXHRiZWZvcmVSb3V0ZU1hdGNoZWQhOiBGdW5jdGlvbjtcblxuXHRAZXZlbnQoKVxuXHRyb3V0ZU1hdGNoZWQhOiBGdW5jdGlvbjtcblxuXHRAZXZlbnQoKVxuXHRhZnRlclJvdXRlTWF0Y2hlZCE6IEZ1bmN0aW9uO1xufVxuXG5leHBvcnQgdHlwZSBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzID0gUm91dGUkTWF0Y2hlZEV2ZW50UGFyYW1ldGVycyAmIHtcblx0bmF2aWdhdGlvbkluZm8/OiB7IHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb24gfTtcblx0cm91dGVJbmZvcm1hdGlvbj86IHVua25vd247XG5cdHJvdXRlUGF0dGVybj86IHN0cmluZztcblx0Y29uZmlnOiB7IHBhdHRlcm4/OiBzdHJpbmcgfTtcbn07XG5cbmV4cG9ydCB0eXBlIENyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzID1cblx0fCB7IG1vZGU6IFwiQXN5bmNcIjsgY3JlYXRlQ29udGV4dFByb21pc2U6IFByb21pc2U8Q29udGV4dD4gfVxuXHR8IHsgbW9kZTogXCJEZWZlcnJlZFwiOyBsaXN0QmluZGluZzogT0RhdGFMaXN0QmluZGluZzsgcGFyZW50Q29udGV4dD86IENvbnRleHQ7IGRhdGE/OiBvYmplY3QgfTtcblxuZXhwb3J0IHR5cGUgUm91dGluZ05hdmlnYXRpb25JbmZvID0ge1xuXHRjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz86IENyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzO1xuXHRiVGFyZ2V0RWRpdGFibGU/OiBib29sZWFuO1xuXHRiUGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0YlNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cdHVzZUNvbnRleHQ/OiBDb250ZXh0O1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRyZWRpcmVjdGVkVG9Ob25EcmFmdD86IHN0cmluZztcblx0YkFjdGlvbkNyZWF0ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdGNoZWNrTm9IYXNoQ2hhbmdlPzogYm9vbGVhbjtcblx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/OiBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycztcblx0ZWRpdGFibGU/OiBib29sZWFuO1xuXHR0cmFuc2llbnQ/OiBib29sZWFuO1xuXHRwZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRGQ0xMZXZlbD86IG51bWJlcjtcblx0dXBkYXRlRkNMTGV2ZWw/OiBudW1iZXI7XG5cdHByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW47XG5cdG5vUHJlc2VydmF0aW9uQ2FjaGU/OiBib29sZWFuO1xuXHRyZWNyZWF0ZUNvbnRleHQ/OiBib29sZWFuO1xuXHRmb3JjZUZvY3VzPzogYm9vbGVhbjtcblx0dGFyZ2V0UGF0aD86IHN0cmluZztcblx0c2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0Y2FsbEV4dGVuc2lvbj86IGJvb2xlYW47XG5cdGxheW91dD86IHN0cmluZztcblx0a2VlcEN1cnJlbnRMYXlvdXQ/OiBib29sZWFuO1xuXHRuYXZNb2RlPzogc3RyaW5nO1xuXHRyZWRpcmVjdGVkVG9Ob25EcmFmdD86IHN0cmluZztcblx0c2VtYW50aWNQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGluZ1BhcmFtZXRlck1hcCA9IHtcblx0W2s6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBTZW1hbnRpY01hcHBpbmcgPSB7XG5cdHNlbWFudGljUGF0aDogc3RyaW5nO1xuXHR0ZWNobmljYWxQYXRoOiBzdHJpbmc7XG59O1xudHlwZSBNaW5pbWFsUGFnZVNldHRpbmcgPSB7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGZ1bGxDb250ZXh0UGF0aD86IHN0cmluZztcblx0bmF2aWdhdGlvbj86IFJlY29yZDxzdHJpbmcsIE5hdmlnYXRpb25Db25maWd1cmF0aW9uPjtcbn07XG5cbnR5cGUgSW50ZXJuYWxSb3V0ZURlZmluaXRpb24gPSB7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0dGVybjogc3RyaW5nO1xuXHR0YXJnZXRzOiBzdHJpbmdbXTtcblx0cm91dGVMZXZlbDogbnVtYmVyO1xufTtcblxudHlwZSBSZXNvbHZlZFBhcmFtZXRlcnMgPSB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9O1xuXG5leHBvcnQgY2xhc3MgUm91dGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0b0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblxuXHRvTW9kZWwhOiBPRGF0YU1vZGVsO1xuXG5cdG9NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRvUm91dGVyITogUm91dGVyO1xuXG5cdG9Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdGV2ZW50UHJvdmlkZXIhOiBFdmVudFByb3ZpZGVyO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxSb3V0aW5nU2VydmljZT47XG5cblx0b3V0Ym91bmRzITogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5PjtcblxuXHRfbVRhcmdldHMhOiBSZWNvcmQ8c3RyaW5nLCBSb3V0aW5nVGFyZ2V0PjtcblxuXHRfbVJvdXRlcyE6IFJlY29yZDxzdHJpbmcsIEludGVybmFsUm91dGVEZWZpbml0aW9uPjtcblxuXHRvTGFzdFNlbWFudGljTWFwcGluZz86IFNlbWFudGljTWFwcGluZztcblxuXHRiRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290PzogYm9vbGVhbjtcblxuXHRzQ3VycmVudFJvdXRlTmFtZT86IHN0cmluZztcblxuXHRzQ3VycmVudFJvdXRlUGF0dGVybj86IHN0cmluZztcblxuXHRhQ3VycmVudFZpZXdzPzogKFZpZXcgfCBDb21wb25lbnRDb250YWluZXIpW107XG5cblx0bmF2aWdhdGlvbkluZm9RdWV1ZTogUm91dGluZ05hdmlnYXRpb25JbmZvW10gPSBbXTtcblxuXHRzQ29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0X2ZuT25Sb3V0ZU1hdGNoZWQhOiAoZXY6IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCkgPT4gdm9pZDtcblxuXHRfZm5PbkJlZm9yZVJvdXRlTWF0Y2hlZCE6IChldjogUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50KSA9PiB2b2lkO1xuXG5cdGVuYWJsZWQgPSBmYWxzZTtcblxuXHRyb3V0aW5nSGludHM/OiBSZWNvcmQ8c3RyaW5nLCB7IHBhcmVudE9mOiBzdHJpbmdbXSB9PjtcblxuXHRiaW5kaW5nQ2xlYW51cFByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0LnNjb3BlVHlwZSA9PT0gXCJjb21wb25lbnRcIikge1xuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0XHR0aGlzLm9Nb2RlbCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdFx0dGhpcy5vTWV0YU1vZGVsID0gdGhpcy5vTW9kZWw/LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblx0XHRcdHRoaXMuZXZlbnRQcm92aWRlciA9IG5ldyBSb3V0aW5nU2VydmljZUV2ZW50aW5nKCk7XG5cblx0XHRcdGNvbnN0IG9Sb3V0aW5nQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc7XG5cdFx0XHR0aGlzLl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uKG9Sb3V0aW5nQ29uZmlnISk7XG5cblx0XHRcdGNvbnN0IG9BcHBDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0XHR0aGlzLm91dGJvdW5kcyA9IG9BcHBDb25maWcuY3Jvc3NOYXZpZ2F0aW9uPy5vdXRib3VuZHMgPz8ge307XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcblx0fVxuXG5cdGJlZm9yZUV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5vUm91dGVyLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIuZGV0YWNoQmVmb3JlUm91dGVNYXRjaGVkKHRoaXMuX2ZuT25CZWZvcmVSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwge30pO1xuXHR9XG5cblx0ZXhpdCgpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGVzdHJveSgpO1xuXHR9XG5cblx0YWRkQmluZGluZ0NsZWFudXBQcm9taXNlKHByb21pc2U6IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcblx0XHR0aGlzLmJpbmRpbmdDbGVhbnVwUHJvbWlzZXMucHVzaChwcm9taXNlKTtcblx0fVxuXG5cdGFzeW5jIHdhaXRGb3JCaW5kaW5nQ2xlYW51cCgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbCh0aGlzLmJpbmRpbmdDbGVhbnVwUHJvbWlzZXMpO1xuXHRcdHRoaXMuYmluZGluZ0NsZWFudXBQcm9taXNlcyA9IFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIGEgbWFuaWZlc3Qgcm91dGluZyBjb25maWd1cmF0aW9uIGZvciBpbnRlcm5hbCB1c2FnZS5cblx0ICogQHBhcmFtIG9Sb3V0aW5nQ29uZmlnIFRoZSByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgbWFuaWZlc3Rcblx0ICovXG5cdF9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uKG9Sb3V0aW5nQ29uZmlnOiBSb3V0aW5nQ29uZmlndXJhdGlvbik6IHZvaWQge1xuXHRcdGNvbnN0IGlzRkNMID0gb1JvdXRpbmdDb25maWc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IFwic2FwLmYucm91dGluZy5Sb3V0ZXJcIjtcblxuXHRcdC8vIEluZm9ybWF0aW9uIG9mIHRhcmdldHNcblx0XHR0aGlzLl9tVGFyZ2V0cyA9IHt9O1xuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8udGFyZ2V0cykge1xuXHRcdFx0Zm9yIChjb25zdCBzVGFyZ2V0TmFtZSBvZiBPYmplY3Qua2V5cyhvUm91dGluZ0NvbmZpZy50YXJnZXRzKSkge1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0gPSBPYmplY3QuYXNzaWduKHsgdGFyZ2V0TmFtZTogc1RhcmdldE5hbWUgfSwgb1JvdXRpbmdDb25maWcudGFyZ2V0c1tzVGFyZ2V0TmFtZV0pO1xuXG5cdFx0XHRcdC8vIFZpZXcgbGV2ZWwgZm9yIEZDTCBjYXNlcyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHRhcmdldCBwYXR0ZXJuXG5cdFx0XHRcdGNvbnN0IGNvbnRleHRQYXR0ZXJuID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuO1xuXHRcdFx0XHRpZiAoY29udGV4dFBhdHRlcm4gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS52aWV3TGV2ZWwgPSB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihjb250ZXh0UGF0dGVybiwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5yb3V0aW5nSGludHMgPSB7fTtcblxuXHRcdC8vIEluZm9ybWF0aW9uIG9mIHJvdXRlc1xuXHRcdHRoaXMuX21Sb3V0ZXMgPSB7fTtcblx0XHRpZiAob1JvdXRpbmdDb25maWc/LnJvdXRlcykge1xuXHRcdFx0Zm9yIChjb25zdCBvUm91dGVNYW5pZmVzdEluZm8gb2Ygb1JvdXRpbmdDb25maWcucm91dGVzKSB7XG5cdFx0XHRcdGNvbnN0IGFSb3V0ZVRhcmdldHMgPSBnZXRSb3V0ZVRhcmdldE5hbWVzKG9Sb3V0ZU1hbmlmZXN0SW5mby50YXJnZXQpLFxuXHRcdFx0XHRcdHNSb3V0ZU5hbWUgPSBvUm91dGVNYW5pZmVzdEluZm8ubmFtZSxcblx0XHRcdFx0XHRzUm91dGVQYXR0ZXJuID0gb1JvdXRlTWFuaWZlc3RJbmZvLnBhdHRlcm47XG5cdFx0XHRcdGlmICghc1JvdXRlUGF0dGVybikge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIHJvdXRlIHBhdHRlcm46IGFsbCBwYXR0ZXJucyBuZWVkIHRvIGVuZCB3aXRoICc6P3F1ZXJ5OicsIHRoYXQgd2UgdXNlIGZvciBwYXJhbWV0ZXJzXG5cdFx0XHRcdGlmIChzUm91dGVQYXR0ZXJuLmxlbmd0aCA8IDggfHwgc1JvdXRlUGF0dGVybi5pbmRleE9mKFwiOj9xdWVyeTpcIikgIT09IHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIC0gOCkge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKGBQYXR0ZXJuIGZvciByb3V0ZSAke3NSb3V0ZU5hbWV9IGRvZXNuJ3QgZW5kIHdpdGggJzo/cXVlcnk6JyA6ICR7c1JvdXRlUGF0dGVybn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpUm91dGVMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNSb3V0ZVBhdHRlcm4sIDApO1xuXHRcdFx0XHR0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdID0ge1xuXHRcdFx0XHRcdG5hbWU6IHNSb3V0ZU5hbWUsXG5cdFx0XHRcdFx0cGF0dGVybjogc1JvdXRlUGF0dGVybixcblx0XHRcdFx0XHR0YXJnZXRzOiBhUm91dGVUYXJnZXRzLFxuXHRcdFx0XHRcdHJvdXRlTGV2ZWw6IGlSb3V0ZUxldmVsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gQWRkIHRoZSBwYXJlbnQgdGFyZ2V0cyBpbiB0aGUgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgcm91dGVcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFSb3V0ZVRhcmdldHMpIHtcblx0XHRcdFx0XHRjb25zdCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW2l0ZW1dLnBhcmVudDtcblx0XHRcdFx0XHRpZiAoc1BhcmVudFRhcmdldE5hbWUpIHtcblx0XHRcdFx0XHRcdGFSb3V0ZVRhcmdldHMucHVzaChzUGFyZW50VGFyZ2V0TmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0ucm91dGVySGFzaEtleXMgPSBSb3V0ZXJQcm94eS5leHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoKHNSb3V0ZVBhdHRlcm4uc3BsaXQoXCI6P3F1ZXJ5OlwiKVswXSk7XG5cblx0XHRcdFx0aWYgKCFpc0ZDTCkge1xuXHRcdFx0XHRcdC8vIFZpZXcgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSByb3V0ZSBwYXR0ZXJuXG5cdFx0XHRcdFx0Y29uc3Qgdmlld0xldmVsID0gdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsO1xuXHRcdFx0XHRcdGlmICh2aWV3TGV2ZWwgPT09IHVuZGVmaW5lZCB8fCB2aWV3TGV2ZWwgPCBpUm91dGVMZXZlbCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlcmUgYXJlIGNhc2VzIHdoZW4gZGlmZmVyZW50IHJvdXRlcyBwb2ludCB0byB0aGUgc2FtZSB0YXJnZXQuIFdlIHRha2UgdGhlXG5cdFx0XHRcdFx0XHQvLyBsYXJnZXN0IHZpZXdMZXZlbCBpbiB0aGF0IGNhc2UuXG5cdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWwgPSBpUm91dGVMZXZlbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGQ0wgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgZXF1YWwgdG8gLTFcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5GQ0xMZXZlbCA9IC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFSb3V0ZVRhcmdldHMubGVuZ3RoID09PSAxICYmIHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLmNvbnRyb2xBZ2dyZWdhdGlvbiAhPT0gXCJiZWdpbkNvbHVtblBhZ2VzXCIpIHtcblx0XHRcdFx0XHQvLyBXZSdyZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIG9ubHkgMSB0YXJnZXQgZm9yIHRoZSByb3V0ZSwgYW5kIGl0J3Mgbm90IGluIHRoZSBmaXJzdCBjb2x1bW5cblx0XHRcdFx0XHQvLyAtLT4gdGhpcyBpcyBhIGZ1bGxzY3JlZW4gY29sdW1uIGFmdGVyIGFsbCBjb2x1bW5zIGluIHRoZSBGQ0wgaGF2ZSBiZWVuIHVzZWRcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5GQ0xMZXZlbCA9IDM7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gT3RoZXIgRkNMIGNhc2VzXG5cdFx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZSkgPT4ge1xuXHRcdFx0XHRcdFx0c3dpdGNoICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJiZWdpbkNvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMDtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIFwibWlkQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAxO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByb3BhZ2F0ZSB2aWV3TGV2ZWwsIGNvbnRleHRQYXR0ZXJuLCBGQ0xMZXZlbCBhbmQgY29udHJvbEFnZ3JlZ2F0aW9uIHRvIHBhcmVudCB0YXJnZXRzXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQ7XG5cdFx0XHR3aGlsZSAoc1BhcmVudFRhcmdldE5hbWUpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLnZpZXdMZXZlbCA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLnZpZXdMZXZlbCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4gPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm47XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5GQ0xMZXZlbCA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbDtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbiB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uO1xuXHRcdFx0XHRzVGFyZ2V0TmFtZSA9IHNQYXJlbnRUYXJnZXROYW1lO1xuXHRcdFx0XHRzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBEZXRlcm1pbmUgdGhlIHJvb3QgZW50aXR5IGZvciB0aGUgYXBwXG5cdFx0Y29uc3QgYUxldmVsMFJvdXRlTmFtZXMgPSBbXTtcblx0XHRjb25zdCBhTGV2ZWwxUm91dGVOYW1lcyA9IFtdO1xuXHRcdGxldCBzRGVmYXVsdFJvdXRlTmFtZTtcblxuXHRcdGZvciAoY29uc3Qgc05hbWUgaW4gdGhpcy5fbVJvdXRlcykge1xuXHRcdFx0Y29uc3QgaUxldmVsID0gdGhpcy5fbVJvdXRlc1tzTmFtZV0ucm91dGVMZXZlbDtcblx0XHRcdGlmIChpTGV2ZWwgPT09IDApIHtcblx0XHRcdFx0YUxldmVsMFJvdXRlTmFtZXMucHVzaChzTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlMZXZlbCA9PT0gMSkge1xuXHRcdFx0XHRhTGV2ZWwxUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYUxldmVsMFJvdXRlTmFtZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRzRGVmYXVsdFJvdXRlTmFtZSA9IGFMZXZlbDBSb3V0ZU5hbWVzWzBdO1xuXHRcdH0gZWxzZSBpZiAoYUxldmVsMVJvdXRlTmFtZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRzRGVmYXVsdFJvdXRlTmFtZSA9IGFMZXZlbDFSb3V0ZU5hbWVzWzBdO1xuXHRcdH1cblxuXHRcdGlmIChzRGVmYXVsdFJvdXRlTmFtZSkge1xuXHRcdFx0Y29uc3Qgc0RlZmF1bHRUYXJnZXROYW1lID0gdGhpcy5fbVJvdXRlc1tzRGVmYXVsdFJvdXRlTmFtZV0udGFyZ2V0cy5zbGljZSgtMSlbMF07XG5cdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IFwiXCI7XG5cdFx0XHRjb25zdCBvU2V0dGluZ3MgPSB0aGlzLl9tVGFyZ2V0c1tzRGVmYXVsdFRhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzIGFzIE1pbmltYWxQYWdlU2V0dGluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChvU2V0dGluZ3MpIHtcblx0XHRcdFx0dGhpcy5zQ29udGV4dFBhdGggPSBvU2V0dGluZ3MuY29udGV4dFBhdGggfHwgYC8ke29TZXR0aW5ncy5lbnRpdHlTZXR9YDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5zQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0YENhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogY29udGV4dFBhdGggb3IgZW50aXR5U2V0IG1pc3NpbmcgaW4gZGVmYXVsdCB0YXJnZXQ6ICR7c0RlZmF1bHRUYXJnZXROYW1lfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIGRlZmF1bHQgY29udGV4dFBhdGg6IG5vIGRlZmF1bHQgcm91dGUgZm91bmQuXCIpO1xuXHRcdH1cblxuXHRcdC8vIFdlIG5lZWQgdG8gZXN0YWJsaXNoIHRoZSBjb3JyZWN0IHBhdGggdG8gdGhlIGRpZmZlcmVudCBwYWdlcywgaW5jbHVkaW5nIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cylcblx0XHRcdC5tYXAoKHNUYXJnZXRLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fbVRhcmdldHNbc1RhcmdldEtleV07XG5cdFx0XHR9KVxuXHRcdFx0LnNvcnQoKGE6IFJvdXRpbmdUYXJnZXQsIGI6IFJvdXRpbmdUYXJnZXQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGEudmlld0xldmVsICE9PSB1bmRlZmluZWQgJiYgYi52aWV3TGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBhLnZpZXdMZXZlbCA8IGIudmlld0xldmVsID8gLTEgOiAxO1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKCh0YXJnZXQ6IFJvdXRpbmdUYXJnZXQpID0+IHtcblx0XHRcdFx0Ly8gQWZ0ZXIgc29ydGluZyB0aGUgdGFyZ2V0cyBwZXIgbGV2ZWwgd2UgY2FuIHRoZW4gZ28gdGhyb3VnaCB0aGVpciBuYXZpZ2F0aW9uIG9iamVjdCBhbmQgdXBkYXRlIHRoZSBwYXRocyBhY2NvcmRpbmdseS5cblx0XHRcdFx0aWYgKHRhcmdldC5vcHRpb25zKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSB0YXJnZXQub3B0aW9ucy5zZXR0aW5ncyBhcyBNaW5pbWFsUGFnZVNldHRpbmc7XG5cdFx0XHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gc2V0dGluZ3MuY29udGV4dFBhdGggfHwgKHNldHRpbmdzLmVudGl0eVNldCA/IGAvJHtzZXR0aW5ncy5lbnRpdHlTZXR9YCA6IFwiXCIpO1xuXHRcdFx0XHRcdGlmICghc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoID0gYCR7c0NvbnRleHRQYXRofS9gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBwYXJlbnRPZjogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRpZiAodGFyZ2V0LnJvdXRlckhhc2hLZXlzPy5bMF0pIHtcblx0XHRcdFx0XHRcdHRoaXMucm91dGluZ0hpbnRzIVt0YXJnZXQucm91dGVySGFzaEtleXM/LlswXV0gPSB7IHBhcmVudE9mOiBwYXJlbnRPZiB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRPYmplY3Qua2V5cyhzZXR0aW5ncy5uYXZpZ2F0aW9uIHx8IHt9KS5mb3JFYWNoKChzTmF2TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBpdCdzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldC5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmVudE9mLnB1c2goc05hdk5hbWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0Um91dGUgPSB0aGlzLl9tUm91dGVzW3NldHRpbmdzLm5hdmlnYXRpb24hW3NOYXZOYW1lXS5kZXRhaWw/LnJvdXRlXTtcblxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHRhcmdldFJvdXRlLnRhcmdldHMpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Um91dGUudGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQhdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzPy5mdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyEuc2V0dGluZ3MhLmNvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyEuc2V0dGluZ3MhLmNvbnRleHRQYXRoICsgXCIvXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHRhcmdldC52aWV3TGV2ZWwgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMhLnNldHRpbmdzIS5mdWxsQ29udGV4dFBhdGggPSBgJHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoc05hdk5hbWUuc3RhcnRzV2l0aChcIi9cIikgPyBcIlwiIDogXCIvXCIpICsgc05hdk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fS9gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMhLnNldHRpbmdzIS5mdWxsQ29udGV4dFBhdGggPSBgJHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggKyBzTmF2TmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9L2A7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyBhIHZpZXcgbGV2ZWwgZnJvbSBhIHBhdHRlcm4gYnkgY291bnRpbmcgdGhlIG51bWJlciBvZiBzZWdtZW50cy5cblx0ICogQHBhcmFtIHNQYXR0ZXJuIFRoZSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB2aWV3TGV2ZWwgVGhlIGN1cnJlbnQgbGV2ZWwgb2Ygdmlld1xuXHQgKiBAcmV0dXJucyBUaGUgbGV2ZWxcblx0ICovXG5cdF9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybjogc3RyaW5nLCB2aWV3TGV2ZWw6IG51bWJlcik6IG51bWJlciB7XG5cdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKFwiOj9xdWVyeTpcIiwgXCJcIik7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRpZiAoc1BhdHRlcm4gJiYgc1BhdHRlcm5bMF0gIT09IFwiL1wiICYmIHNQYXR0ZXJuWzBdICE9PSBcIj9cIikge1xuXHRcdFx0c1BhdHRlcm4gPSBgLyR7c1BhdHRlcm59YDtcblx0XHR9XG5cdFx0aWYgKHNQYXR0ZXJuLmxlbmd0aCkge1xuXHRcdFx0c1BhdHRlcm4gPSBzUGF0dGVybi5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcblx0XHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdHRlcm4pIHx8IHNQYXR0ZXJuID09PSBcIlwiKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybiwgKyt2aWV3TGV2ZWwpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuLCB2aWV3TGV2ZWwpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdmlld0xldmVsO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRSb3V0ZUluZm9ybWF0aW9uKHNSb3V0ZU5hbWU/OiBzdHJpbmcpOiBJbnRlcm5hbFJvdXRlRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNSb3V0ZU5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX21Sb3V0ZXNbc1JvdXRlTmFtZV07XG5cdH1cblxuXHRfZ2V0VGFyZ2V0SW5mb3JtYXRpb24oc1RhcmdldE5hbWU/OiBzdHJpbmcpOiBSb3V0aW5nVGFyZ2V0IHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoc1RhcmdldE5hbWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXTtcblx0fVxuXG5cdF9nZXRDb21wb25lbnRJZChzT3duZXJJZDogc3RyaW5nLCBzQ29tcG9uZW50SWQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKHNDb21wb25lbnRJZC5pbmRleE9mKGAke3NPd25lcklkfS0tLWApID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gc0NvbXBvbmVudElkLnN1YnN0cmluZyhzT3duZXJJZC5sZW5ndGggKyAzKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNDb21wb25lbnRJZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGFyZ2V0IGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIGNvbXBvbmVudC5cblx0ICogQHBhcmFtIGNvbXBvbmVudE9yVmlldyBJbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IG9yIHZpZXdcblx0ICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSB0YXJnZXRcblx0ICovXG5cdGdldFRhcmdldEluZm9ybWF0aW9uRm9yKGNvbXBvbmVudE9yVmlldzogQ29tcG9uZW50IHwgVmlldyk6IFJvdXRpbmdUYXJnZXQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGNvcnJlY3RUYXJnZXROYW1lID0gdGhpcy5nZXRUYXJnZXROYW1lKGNvbXBvbmVudE9yVmlldyk7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKGNvcnJlY3RUYXJnZXROYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHBhZ2Ugc2hvd24gaW4gdGhlIHZpZXcgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Qgcm91dGluZyBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gY29tcG9uZW50T3JWaWV3XG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBwYWdlXG5cdCAqL1xuXHRnZXRUYXJnZXROYW1lKGNvbXBvbmVudE9yVmlldzogQ29tcG9uZW50IHwgVmlldyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgdGFyZ2V0Q29tcG9uZW50SWQgPSB0aGlzLl9nZXRDb21wb25lbnRJZChcblx0XHRcdChjb21wb25lbnRPclZpZXcgYXMgdW5rbm93biBhcyB7IF9zT3duZXJJZDogc3RyaW5nIH0pLl9zT3duZXJJZCxcblx0XHRcdGNvbXBvbmVudE9yVmlldy5nZXRJZCgpXG5cdFx0KTtcblx0XHRsZXQgY29ycmVjdFRhcmdldE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cykuZm9yRWFjaCgodGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbdGFyZ2V0TmFtZV0uaWQgPT09IHRhcmdldENvbXBvbmVudElkIHx8IHRoaXMuX21UYXJnZXRzW3RhcmdldE5hbWVdLnZpZXdJZCA9PT0gdGFyZ2V0Q29tcG9uZW50SWQpIHtcblx0XHRcdFx0Y29ycmVjdFRhcmdldE5hbWUgPSB0YXJnZXROYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBjb3JyZWN0VGFyZ2V0TmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHBhZ2Ugc2hvd24gaW4gdGhlIHZpZXcgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Qgcm91dGluZyBzZWN0aW9uLlxuXHQgKiBAcGFyYW0gdmlld1xuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgcGFnZVxuXHQgKi9cblx0Z2V0VGFyZ2V0TmFtZUZvclZpZXcodmlldzogVmlldyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih2aWV3KTtcblx0XHRsZXQgdGFyZ2V0TmFtZSA9IHBhZ2VDb21wb25lbnQgPyB0aGlzLmdldFRhcmdldE5hbWUocGFnZUNvbXBvbmVudCkgOiB1bmRlZmluZWQ7XG5cdFx0aWYgKCF0YXJnZXROYW1lKSB7XG5cdFx0XHR0YXJnZXROYW1lID0gdGhpcy5nZXRUYXJnZXROYW1lKHZpZXcpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGFyZ2V0TmFtZTtcblx0fVxuXG5cdGdldExhc3RTZW1hbnRpY01hcHBpbmcoKTogU2VtYW50aWNNYXBwaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZztcblx0fVxuXG5cdHNldExhc3RTZW1hbnRpY01hcHBpbmcob01hcHBpbmc/OiBTZW1hbnRpY01hcHBpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nID0gb01hcHBpbmc7XG5cdH1cblxuXHRhc3luYyBnZXRIYXNoRnJvbVJvdXRlKGNvbnRleHQ6IENvbnRleHQsIHJvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCwgcGFyYW1ldGVyTWFwcGluZz86IHVua25vd24pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFwiXCIpO1xuXHRcdH1cblx0XHRsZXQgdGFyZ2V0VVJMUHJvbWlzZTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuXHRcdGlmICghcGFyYW1ldGVyTWFwcGluZykge1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gcGFyYW1ldGVyIG1hcHBpbmcgZGVmaW5lIHRoaXMgbWVhbiB3ZSByZWx5IGVudGlyZWx5IG9uIHRoZSBiaW5kaW5nIGNvbnRleHQgcGF0aFxuXHRcdFx0dGFyZ2V0VVJMUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgoY29udGV4dCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRVUkxQcm9taXNlID0gdGhpcy5wcmVwYXJlUGFyYW1ldGVycyhwYXJhbWV0ZXJNYXBwaW5nIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsIHJvdXRlTmFtZSwgY29udGV4dCkudGhlbihcblx0XHRcdFx0KHBhcmFtZXRlcnM6IG9iamVjdCB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHJvdXRlTmFtZSEsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gKGF3YWl0IHRhcmdldFVSTFByb21pc2UpIGFzIHN0cmluZztcblx0fVxuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBmYWxzZVxuXHQpOiBQcm9taXNlPHZvaWQ+O1xuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiB0cnVlXG5cdCk6IFByb21pc2U8KCkgPT4gdm9pZD47XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTwoKCkgPT4gdm9pZCkgfCB2b2lkPjtcblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPCgoKSA9PiB2b2lkKSB8IHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0XHRsZXQgc1RhcmdldFVSTFByb21pc2UsIGJJc1N0aWNreU1vZGU6IGJvb2xlYW47XG5cdFx0aWYgKG9Db250ZXh0LmdldE1vZGVsKCkgJiYgb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwgJiYgb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSkge1xuXHRcdFx0YklzU3RpY2t5TW9kZSA9IE1vZGVsSGVscGVyLmlzU3RpY2t5U2Vzc2lvblN1cHBvcnRlZChvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKTtcblx0XHR9XG5cdFx0aWYgKCFtUGFyYW1ldGVyTWFwcGluZykge1xuXHRcdFx0Ly8gaWYgdGhlcmUgaXMgbm8gcGFyYW1ldGVyIG1hcHBpbmcgZGVmaW5lIHRoaXMgbWVhbiB3ZSByZWx5IGVudGlyZWx5IG9uIHRoZSBiaW5kaW5nIGNvbnRleHQgcGF0aFxuXHRcdFx0c1RhcmdldFVSTFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNUYXJnZXRVUkxQcm9taXNlID0gdGhpcy5wcmVwYXJlUGFyYW1ldGVycyhtUGFyYW1ldGVyTWFwcGluZyBhcyBSb3V0aW5nUGFyYW1ldGVyTWFwLCBzUm91dGVOYW1lLCBvQ29udGV4dCkudGhlbihcblx0XHRcdFx0KG1QYXJhbWV0ZXJzOiBvYmplY3QgfCB1bmRlZmluZWQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vUm91dGVyLmdldFVSTChzUm91dGVOYW1lISwgbVBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb25zdCB0YXJnZXRVcmwgPSBhd2FpdCBzVGFyZ2V0VVJMUHJvbWlzZTtcblx0XHRjb25zdCBuYXZpZ2F0ZUZ1bmN0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKHRhcmdldFVybCEsIGJQcmVzZXJ2ZUhpc3RvcnksIGZhbHNlLCBmYWxzZSwgIWJJc1N0aWNreU1vZGUpO1xuXHRcdH07XG5cdFx0aWYgKGRlbGF5ZWRVc2FnZSA9PT0gdHJ1ZSkge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRlRnVuY3Rpb247IC8vIHdyb25nIGJ1dCBzb21laG93IHRoZSB0eXBlcyBhcmUgYW5ub3lpbmdcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG5hdmlnYXRlRnVuY3Rpb24oKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHJldHVybiBhIG1hcCBvZiByb3V0aW5nIHRhcmdldCBwYXJhbWV0ZXJzIHdoZXJlIHRoZSBiaW5kaW5nIHN5bnRheCBpcyByZXNvbHZlZCB0byB0aGUgY3VycmVudCBtb2RlbC5cblx0ICogQHBhcmFtIG1QYXJhbWV0ZXJzIFBhcmFtZXRlcnMgbWFwIGluIHRoZSBmb3JtYXQgW2s6IHN0cmluZ10gOiBDb21wbGV4QmluZGluZ1N5bnRheFxuXHQgKiBAcGFyYW0gc1RhcmdldFJvdXRlIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIHRoZSByb3V0aW5nIHRhcmdldCBwYXJhbWV0ZXJzXG5cdCAqL1xuXHRhc3luYyBwcmVwYXJlUGFyYW1ldGVycyhtUGFyYW1ldGVyczogUm91dGluZ1BhcmFtZXRlck1hcCwgc1RhcmdldFJvdXRlOiBzdHJpbmcgfCBudWxsLCBvQ29udGV4dDogQ29udGV4dCk6IFByb21pc2U8b2JqZWN0PiB7XG5cdFx0bGV0IG9QYXJhbWV0ZXJzUHJvbWlzZTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgYUNvbnRleHRQYXRoUGFydHMgPSBzQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3QgYUFsbFJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMgPSBPYmplY3Qua2V5cyhtUGFyYW1ldGVycykubWFwKGFzeW5jIChzUGFyYW1ldGVyS2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3Qgc1BhcmFtZXRlck1hcHBpbmdFeHByZXNzaW9uID0gbVBhcmFtZXRlcnNbc1BhcmFtZXRlcktleV07XG5cdFx0XHRcdC8vIFdlIGFzc3VtZSB0aGUgZGVmaW5lZCBwYXJhbWV0ZXJzIHdpbGwgYmUgY29tcGF0aWJsZSB3aXRoIGEgYmluZGluZyBleHByZXNzaW9uXG5cdFx0XHRcdGNvbnN0IG9QYXJzZWRFeHByZXNzaW9uID0gQmluZGluZ0luZm8ucGFyc2Uoc1BhcmFtZXRlck1hcHBpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0Y29uc3QgYVBhcnRzID0gb1BhcnNlZEV4cHJlc3Npb24ucGFydHMgfHwgW29QYXJzZWRFeHByZXNzaW9uXTtcblx0XHRcdFx0Y29uc3QgYVJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMgPSBhUGFydHMubWFwKGFzeW5jIGZ1bmN0aW9uIChvUGF0aFBhcnQ6IFByb3BlcnR5QmluZGluZ0luZm8pIHtcblx0XHRcdFx0XHRjb25zdCBhUmVsYXRpdmVQYXJ0cyA9IG9QYXRoUGFydC5wYXRoLnNwbGl0KFwiLi4vXCIpO1xuXHRcdFx0XHRcdC8vIFdlIGdvIHVwIHRoZSBjdXJyZW50IGNvbnRleHQgcGF0aCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGNvbnN0IGFMb2NhbFBhcnRzID0gYUNvbnRleHRQYXRoUGFydHMuc2xpY2UoMCwgYUNvbnRleHRQYXRoUGFydHMubGVuZ3RoIC0gYVJlbGF0aXZlUGFydHMubGVuZ3RoICsgMSk7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxDb250ZXh0UGF0aCA9IGFMb2NhbFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQ29udGV4dCA9XG5cdFx0XHRcdFx0XHRsb2NhbENvbnRleHRQYXRoID09PSBvQ29udGV4dC5nZXRQYXRoKClcblx0XHRcdFx0XHRcdFx0PyBvQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQ6IG9Db250ZXh0LmdldE1vZGVsKCkuYmluZENvbnRleHQobG9jYWxDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cblx0XHRcdFx0XHRjb25zdCBvTWV0YUNvbnRleHQgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGxvY2FsQ29udGV4dFBhdGggKyBcIi9cIiArIGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKTtcblx0XHRcdFx0XHRyZXR1cm4gbG9jYWxDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShhUmVsYXRpdmVQYXJ0c1thUmVsYXRpdmVQYXJ0cy5sZW5ndGggLSAxXSkudGhlbihmdW5jdGlvbiAob1ZhbHVlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gb01ldGFDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0VkbVR5cGUgPSBvUHJvcGVydHlJbmZvLiRUeXBlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChvVmFsdWUsIHNFZG1UeXBlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKChhUmVzb2x2ZWRQYXJhbWV0ZXJzOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXJcblx0XHRcdFx0XHRcdD8gb1BhcnNlZEV4cHJlc3Npb24uZm9ybWF0dGVyLmFwcGx5KHRoaXMsIGFSZXNvbHZlZFBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHQ6IGFSZXNvbHZlZFBhcmFtZXRlcnMuam9pbihcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm4geyBrZXk6IHNQYXJhbWV0ZXJLZXksIHZhbHVlOiB2YWx1ZSB9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLmFsbChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbiAoYUFsbFJlc29sdmVkUGFyYW1ldGVyczogUmVzb2x2ZWRQYXJhbWV0ZXJzW10pIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdGFBbGxSZXNvbHZlZFBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1Jlc29sdmVkUGFyYW1ldGVyOiBSZXNvbHZlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1tvUmVzb2x2ZWRQYXJhbWV0ZXIua2V5XSA9IG9SZXNvbHZlZFBhcmFtZXRlci52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvUGFyYW1ldGVycztcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGBDb3VsZCBub3QgcGFyc2UgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBuYXZpZ2F0aW9uIHRvIHJvdXRlICR7c1RhcmdldFJvdXRlfWApO1xuXHRcdFx0b1BhcmFtZXRlcnNQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJhbWV0ZXJzUHJvbWlzZTtcblx0fVxuXG5cdF9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVyczogUm91dGUkTWF0Y2hlZEV2ZW50UGFyYW1ldGVycyk6IHZvaWQge1xuXHRcdHRoaXMuYmluZGluZ0NsZWFudXBQcm9taXNlcyA9IFtdO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJiZWZvcmVSb3V0ZU1hdGNoZWRcIiwgbVBhcmFtZXRlcnMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgbVBhcmFtZXRlcnMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cblx0XHRFZGl0U3RhdGUuY2xlYW5Qcm9jZXNzZWRFZGl0U3RhdGUoKTsgLy8gUmVzZXQgVUkgc3RhdGUgd2hlbiBhbGwgYmluZGluZ3MgaGF2ZSBiZWVuIHJlZnJlc2hlZFxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0bywgb3IgdGhlIGxpc3QgYmluZGluZyBmb3IgY3JlYXRpb24gKGRlZmVycmVkIGNyZWF0aW9uKVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsLCBtYXAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZV0gTmF2aWdhdGUgdG8gdGhlIGNvbnRleHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgVVJMXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5hc3luY0NvbnRleHRdIFRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgYXN5bmMsIG5hdmlnYXRlIHRvICguLi4pIGFuZFxuXHQgKiAgICAgICAgICAgICAgICAgICAgd2FpdCBmb3IgUHJvbWlzZSB0byBiZSByZXNvbHZlZCBhbmQgdGhlbiBuYXZpZ2F0ZSBpbnRvIHRoZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iRGVmZXJyZWRDb250ZXh0XSBUaGUgY29udGV4dCBzaGFsbCBiZSBjcmVhdGVkIGRlZmVycmVkIGF0IHRoZSB0YXJnZXQgcGFnZVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuZWRpdGFibGVdIFRoZSB0YXJnZXQgcGFnZSBzaGFsbCBiZSBpbW1lZGlhdGVseSBpbiB0aGUgZWRpdCBtb2RlIHRvIGF2b2lkIGZsaWNrZXJpbmdcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGxdIFRoZSBiUGVyc2lzdE9QU2Nyb2xsIHdpbGwgYmUgdXNlZCBmb3Igc2Nyb2xsaW5nIHRvIGZpcnN0IHRhYlxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWxdIGArMWAgaWYgd2UgYWRkIGEgY29sdW1uIGluIEZDTCwgYC0xYCB0byByZW1vdmUgYSBjb2x1bW4sIDAgdG8gc3RheSBvbiB0aGUgc2FtZSBjb2x1bW5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLm5vUHJlc2VydmF0aW9uQ2FjaGVdIERvIG5hdmlnYXRpb24gd2l0aG91dCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwcmVzZXJ2ZWQgY2FjaGUgbWVjaGFuaXNtXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iUmVjcmVhdGVDb250ZXh0XSBGb3JjZSByZS1jcmVhdGlvbiBvZiB0aGUgY29udGV4dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmUgcGFzc2VkIGFzIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuYkZvcmNlRm9jdXNdIEZvcmNlcyBmb2N1cyBzZWxlY3Rpb24gYWZ0ZXIgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW3ZpZXdEYXRhXSBWaWV3IGRhdGFcblx0ICogQHBhcmFtIFt2aWV3RGF0YS5uYXZpZ2F0aW9uXVxuXHQgKiBAcGFyYW0gW2N1cnJlbnRUYXJnZXRJbmZvXSBUaGUgdGFyZ2V0IGluZm9ybWF0aW9uIGZyb20gd2hpY2ggdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBbY3VycmVudFRhcmdldEluZm8ubmFtZV1cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9LFxuXHRcdHZpZXdEYXRhPzogeyBuYXZpZ2F0aW9uPzogb2JqZWN0IH0sXG5cdFx0Y3VycmVudFRhcmdldEluZm8/OiB7IG5hbWU6IHN0cmluZyB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cblx0XHRsZXQgdGFyZ2V0Um91dGUgPSBcIlwiO1xuXHRcdGxldCByb3V0ZVBhcmFtZXRlcnNQcm9taXNlOiBQcm9taXNlPG9iamVjdD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKHRoaXMub01ldGFNb2RlbCk7XG5cblx0XHQvLyBNYW5hZ2UgcGFyYW1ldGVyIG1hcHBpbmdcblx0XHRpZiAocGFyYW1ldGVycz8udGFyZ2V0UGF0aCAmJiB2aWV3RGF0YT8ubmF2aWdhdGlvbikge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvbkluZm8gPSB2aWV3RGF0YS5uYXZpZ2F0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHsgZGV0YWlsOiB7IHJvdXRlOiBzdHJpbmc7IHBhcmFtZXRlcnM6IG9iamVjdCB9IH0+O1xuXHRcdFx0Y29uc3Qgb1JvdXRlRGV0YWlsID0gbmF2aWdhdGlvbkluZm9bcGFyYW1ldGVycy50YXJnZXRQYXRoXS5kZXRhaWw7XG5cdFx0XHR0YXJnZXRSb3V0ZSA9IG9Sb3V0ZURldGFpbC5yb3V0ZTtcblxuXHRcdFx0aWYgKG9Sb3V0ZURldGFpbC5wYXJhbWV0ZXJzICYmIGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0cm91dGVQYXJhbWV0ZXJzUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0b1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSb3V0aW5nUGFyYW1ldGVyTWFwLFxuXHRcdFx0XHRcdHRhcmdldFJvdXRlLFxuXHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc1RhcmdldFBhdGggPSB0aGlzLl9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0Ly8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlJ3JlIHN1cHBvc2VkIHRvIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBhcHBcblx0XHQvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGV4aXQgZnJvbSB0aGUgYXBwIGluc3RlYWRcblx0XHRpZiAoc1RhcmdldFBhdGgubGVuZ3RoID09PSAwICYmIHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCkge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkuZXhpdEZyb21BcHAoKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIG5hdmlnYXRpb24gZ29lcyB3aXRoIGEgY3JlYXRpb24sIHdlIGFkZCAoLi4uKSB0byB0aGUgcGF0aCAoZXhwZWN0aW5nIGNvbnRleHQgaXMgYW4gT0RhdGFMaXN0QmluZGluZylcblx0XHRpZiAocGFyYW1ldGVycz8uY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMpIHtcblx0XHRcdHNUYXJnZXRQYXRoICs9IFwiKC4uLilcIjtcblx0XHR9XG5cblx0XHQvLyBBZGQgbGF5b3V0IHBhcmFtZXRlciBpZiBuZWVkZWRcblx0XHRjb25zdCBzTGF5b3V0ID0gdGhpcy5fY2FsY3VsYXRlTGF5b3V0KHNUYXJnZXRQYXRoLCBwYXJhbWV0ZXJzKTtcblx0XHRpZiAoc0xheW91dCkge1xuXHRcdFx0c1RhcmdldFBhdGggKz0gYD9sYXlvdXQ9JHtzTGF5b3V0fWA7XG5cdFx0fVxuXG5cdFx0Ly8gTmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZvciBsYXRlciB1c2FnZVxuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uSW5mbzogUm91dGluZ05hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM6IHBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMsXG5cdFx0XHRiVGFyZ2V0RWRpdGFibGU6IHBhcmFtZXRlcnM/LmVkaXRhYmxlLFxuXHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogcGFyYW1ldGVycz8ucGVyc2lzdE9QU2Nyb2xsLFxuXHRcdFx0YlNob3dQbGFjZWhvbGRlcjogcGFyYW1ldGVycz8uc2hvd1BsYWNlaG9sZGVyICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgOiB0cnVlLFxuXHRcdFx0cmVhc29uOiBwYXJhbWV0ZXJzPy5yZWFzb24sXG5cdFx0XHRyZWRpcmVjdGVkVG9Ob25EcmFmdDogcGFyYW1ldGVycy5yZWRpcmVjdGVkVG9Ob25EcmFmdFxuXHRcdH07XG5cblx0XHRpZiAocGFyYW1ldGVycz8udXBkYXRlRkNMTGV2ZWwgIT09IC0xICYmIHBhcmFtZXRlcnM/LnJlY3JlYXRlQ29udGV4dCAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0b05hdmlnYXRpb25JbmZvLnVzZUNvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzPy5jaGVja05vSGFzaENoYW5nZSkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIG5ldyBoYXNoIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IG9uZVxuXHRcdFx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSA9IHRoaXMub1JvdXRlclByb3h5LmdldEhhc2goKS5yZXBsYWNlKC9bJj9dezF9c2FwLWlhcHAtc3RhdGU9W0EtWjAtOV0rLywgXCJcIik7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGggPT09IHNDdXJyZW50SGFzaE5vQXBwU3RhdGUpIHtcblx0XHRcdFx0Ly8gVGhlIGhhc2ggZG9lc24ndCBjaGFuZ2UsIGJ1dCB3ZSBmaXJlIHRoZSByb3V0ZU1hdGNoIGV2ZW50IHRvIHRyaWdnZXIgcGFnZSByZWZyZXNoIC8gYmluZGluZ1xuXHRcdFx0XHRjb25zdCByb3V0ZUluZm9CeUhhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHRoaXMub1JvdXRlclByb3h5LmdldEhhc2goKSk7XG5cdFx0XHRcdGxldCBtRXZlbnRQYXJhbWV0ZXJzOiBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzID0geyBjb25maWc6IHt9IH07XG5cdFx0XHRcdGlmIChyb3V0ZUluZm9CeUhhc2gpIHtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzID0geyAuLi5yb3V0ZUluZm9CeUhhc2gsIGNvbmZpZzoge30gfTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gb05hdmlnYXRpb25JbmZvO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMucm91dGVJbmZvcm1hdGlvbiA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24odGhpcy5zQ3VycmVudFJvdXRlTmFtZSk7XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMudmlld3MgPSB0aGlzLmFDdXJyZW50Vmlld3M7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5zZXRGb2N1c0ZvcmNlZCghIXBhcmFtZXRlcnMuZm9yY2VGb2N1cyk7XG5cblx0XHRcdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobUV2ZW50UGFyYW1ldGVycyk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycz8udHJhbnNpZW50ICYmICEhcGFyYW1ldGVycy5lZGl0YWJsZSAmJiAhc1RhcmdldFBhdGguaW5jbHVkZXMoXCIoLi4uKVwiKSkge1xuXHRcdFx0aWYgKHNUYXJnZXRQYXRoLmluY2x1ZGVzKFwiP1wiKSkge1xuXHRcdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiZpLWFjdGlvbj1jcmVhdGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2ktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIpIHtcblx0XHRcdC8vIE5hdmlnYXRlIHRvIG5ldyB0YWIvIHdpbmRvd1xuXHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VzaGVsbC9Db250YWluZXJcIl0sIGFzeW5jIChDb250YWluZXI6IENvbnRhaW5lcikgPT4ge1xuXHRcdFx0XHRjb25zdCBzaGVsbFNlcnZpY2VIZWxwZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRjb25zdCBwYXJzZWRVcmwgPSBzaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25TZXJ2aWNlID0gKGF3YWl0IENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJOYXZpZ2F0aW9uXCIpKSBhcyBOYXZpZ2F0aW9uO1xuXHRcdFx0XHRjb25zdCBocmVmID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2UuZ2V0SHJlZih7XG5cdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogcGFyc2VkVXJsLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBwYXJzZWRVcmwuYWN0aW9uXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRwYXJhbXM6IHBhcnNlZFVybC5wYXJhbXNcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGFwcGxpY2F0aW9uVXJsQmFzZWRPbklmcmFtZSA9IGF3YWl0IHNoZWxsU2VydmljZUhlbHBlci5nZXRJbmZyYW1lVXJsKCk7XG5cdFx0XHRcdGxldCB1cmwsIHRhcmdldFVybDogc3RyaW5nO1xuXHRcdFx0XHRpZiAoYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lKSB7XG5cdFx0XHRcdFx0dXJsID0gbmV3IFVSTChhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUpO1xuXHRcdFx0XHRcdHRhcmdldFVybCA9IGFwcGxpY2F0aW9uVXJsQmFzZWRPbklmcmFtZS5yZXBsYWNlKHVybC5oYXNoLCBgJHtocmVmfSYvJHtlbmNvZGVVUkkoc1RhcmdldFBhdGgpfWApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXHRcdFx0XHRcdHRhcmdldFVybCA9IGAke3VybC5vcmlnaW59JHt1cmwucGF0aG5hbWV9JHtocmVmfSYvJHtlbmNvZGVVUkkoc1RhcmdldFBhdGgpfWA7XG5cdFx0XHRcdH1cblx0XHRcdFx0b3BlbldpbmRvdyh0YXJnZXRVcmwpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDbGVhciB1bmJvdW5kIG1lc3NhZ2VzIHVwb24gbmF2aWdhdGluZyBmcm9tIExSIHRvIE9QXG5cdFx0XHQvLyBUaGlzIGlzIHRvIGVuc3VyZSBzdGFsZSBlcnJvciBtZXNzYWdlcyBmcm9tIExSIGFyZSBub3Qgc2hvd24gdG8gdGhlIHVzZXIgYWZ0ZXIgbmF2aWdhdGlvbiB0byBPUC5cblx0XHRcdGlmIChjdXJyZW50VGFyZ2V0SW5mbz8ubmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRjb25zdCBvUm91dGVJbmZvID0gdGhpcy5vUm91dGVyLmdldFJvdXRlSW5mb0J5SGFzaChzVGFyZ2V0UGF0aCk7XG5cdFx0XHRcdGlmIChvUm91dGVJbmZvKSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1JvdXRlID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbihvUm91dGVJbmZvLm5hbWUpO1xuXHRcdFx0XHRcdGlmIChvUm91dGUgJiYgb1JvdXRlLnRhcmdldHMgJiYgb1JvdXRlLnRhcmdldHMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0xhc3RUYXJnZXROYW1lID0gb1JvdXRlLnRhcmdldHNbb1JvdXRlLnRhcmdldHMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0ID0gdGhpcy5fZ2V0VGFyZ2V0SW5mb3JtYXRpb24oc0xhc3RUYXJnZXROYW1lKTtcblx0XHRcdFx0XHRcdGlmIChvVGFyZ2V0ICYmIG9UYXJnZXQubmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2VcIikge1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlSGFuZGxpbmcucmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcygpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBpbiB0aGUgcXVldWVcblx0XHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5wdXNoKG9OYXZpZ2F0aW9uSW5mbyk7XG5cblx0XHRcdGlmICh0YXJnZXRSb3V0ZSAmJiByb3V0ZVBhcmFtZXRlcnNQcm9taXNlKSB7XG5cdFx0XHRcdHJldHVybiByb3V0ZVBhcmFtZXRlcnNQcm9taXNlLnRoZW4oKG9Sb3V0ZVBhcmFtZXRlcnM6IG9iamVjdCkgPT4ge1xuXHRcdFx0XHRcdE9iamVjdC5hc3NpZ24ob1JvdXRlUGFyYW1ldGVycywgeyBiSXNTdGlja3lNb2RlOiBpc1N0aWNreU1vZGUgfSk7XG5cdFx0XHRcdFx0dGhpcy5vUm91dGVyLm5hdlRvKHRhcmdldFJvdXRlLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHlcblx0XHRcdFx0Lm5hdlRvSGFzaChcblx0XHRcdFx0XHRzVGFyZ2V0UGF0aCxcblx0XHRcdFx0XHQhIXBhcmFtZXRlcnMucHJlc2VydmVIaXN0b3J5LFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM/Lm5vUHJlc2VydmF0aW9uQ2FjaGUsXG5cdFx0XHRcdFx0cGFyYW1ldGVycz8uZm9yY2VGb2N1cyxcblx0XHRcdFx0XHQhaXNTdGlja3lNb2RlXG5cdFx0XHRcdClcblx0XHRcdFx0LnRoZW4oKGJOYXZpZ2F0ZWQpID0+IHtcblx0XHRcdFx0XHRpZiAoIWJOYXZpZ2F0ZWQpIHtcblx0XHRcdFx0XHRcdC8vIFRoZSBuYXZpZ2F0aW9uIGRpZCBub3QgaGFwcGVuIC0tPiByZW1vdmUgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBmcm9tIHRoZSBxdWV1ZSBhcyB0aGV5IHNob3VsZG4ndCBiZSB1c2VkXG5cdFx0XHRcdFx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucG9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBiTmF2aWdhdGVkO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGEgcm91dGUuXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gW29Sb3V0ZVBhcmFtZXRlcnNdIFBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aXRoIHJvdXRlIHRvIGNyZWF0ZSB0aGUgdGFyZ2V0IGhhc2hcblx0ICogQHBhcmFtIG9Sb3V0ZVBhcmFtZXRlcnMuYklzU3RpY2t5TW9kZVxuXHQgKiBAcGFyYW0gb1JvdXRlUGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3Rvcnlcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb1JvdXRlKFxuXHRcdHNUYXJnZXRSb3V0ZU5hbWU6IHN0cmluZyxcblx0XHRvUm91dGVQYXJhbWV0ZXJzPzogeyBiSXNTdGlja3lNb2RlPzogYm9vbGVhbjsgcHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbiB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHVuZGVmaW5lZCk7XG5cdFx0Y29uc3Qgc1RhcmdldFVSTCA9IHRoaXMub1JvdXRlci5nZXRVUkwoc1RhcmdldFJvdXRlTmFtZSwgb1JvdXRlUGFyYW1ldGVycyk7XG5cdFx0cmV0dXJuIHRoaXMub1JvdXRlclByb3h5Lm5hdlRvSGFzaChcblx0XHRcdHNUYXJnZXRVUkwhLFxuXHRcdFx0ISFvUm91dGVQYXJhbWV0ZXJzPy5wcmVzZXJ2ZUhpc3RvcnksXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHR1bmRlZmluZWQsXG5cdFx0XHQhb1JvdXRlUGFyYW1ldGVycz8uYklzU3RpY2t5TW9kZVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIG9uZSBvZiB0aGUgY3VycmVudCB2aWV3cyBvbiB0aGUgc2NyZWVuIGlzIGJvdW5kIHRvIGEgZ2l2ZW4gY29udGV4dC5cblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBjb250ZXh0XG5cdCAqIEByZXR1cm5zIGB0cnVlYCBvciBgZmFsc2VgIGlmIHRoZSBjdXJyZW50IHN0YXRlIGlzIGltcGFjdGVkIG9yIG5vdFxuXHQgKi9cblx0aXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KG9Db250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc1BhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHQvLyBGaXJzdCwgY2hlY2sgd2l0aCB0aGUgdGVjaG5pY2FsIHBhdGguIFdlIGhhdmUgdG8gdHJ5IGl0LCBiZWNhdXNlIGZvciBsZXZlbCA+IDEsIHdlXG5cdFx0Ly8gdXNlcyB0ZWNobmljYWwga2V5cyBldmVuIGlmIFNlbWFudGljIGtleXMgYXJlIGVuYWJsZWRcblx0XHRpZiAodGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNQYXRoKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIGlmICgvXlteKCldK1xcKFteKCldK1xcKSQvLnRlc3Qoc1BhdGgpKSB7XG5cdFx0XHQvLyBJZiB0aGUgY3VycmVudCBwYXRoIGNhbiBiZSBzZW1hbnRpYyAoaS5lLiBpcyBsaWtlIHh4eCh5eXkpKVxuXHRcdFx0Ly8gY2hlY2sgd2l0aCB0aGUgc2VtYW50aWMgcGF0aCBpZiB3ZSBjYW4gZmluZCBpdFxuXHRcdFx0bGV0IHNTZW1hbnRpY1BhdGg7XG5cdFx0XHRpZiAodGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyAmJiB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nLnRlY2huaWNhbFBhdGggPT09IHNQYXRoKSB7XG5cdFx0XHRcdC8vIFdlIGhhdmUgYWxyZWFkeSByZXNvbHZlZCB0aGlzIHNlbWFudGljIHBhdGhcblx0XHRcdFx0c1NlbWFudGljUGF0aCA9IHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcuc2VtYW50aWNQYXRoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c1NlbWFudGljUGF0aCA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvQ29udGV4dCkhO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc1NlbWFudGljUGF0aCAhPSBzUGF0aCA/IHRoaXMub1JvdXRlclByb3h5LmlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShzU2VtYW50aWNQYXRoKSA6IGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHBhdGggdXNlZCB0byBuYXZpZ2F0ZSBiYWNrIGZyb20gYSBzcGVjaWZpZWQgcGF0aC5cblx0ICogQHBhcmFtIHNQYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBwYXRoXG5cdCAqL1xuXHRnZXRQYXRoVG9OYXZpZ2F0ZUJhY2soc1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRzUGF0aCA9IHNQYXRoLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdGgpIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFBhdGhUb05hdmlnYXRlQmFjayhzUGF0aCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHNlbWFudGljIHBhdGggc2hhbGwgYmUgdXNlZCB0byBuYXZpZ2F0ZSB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIG5hdmlnYXRlIHRvXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgc2VtYW50aWMgcGF0aCBzaGFsbCBiZSBzdWVkLCBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdF9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoKGNvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHQvLyBGaXJzdCwgY2hlY2sgaWYgdGhpcyBpcyBhIGxldmVsLTEgb2JqZWN0IChwYXRoID0gL2FhYShiYmIpKVxuXHRcdGlmICghL15cXC9bXihdK1xcKFteKV0rXFwpJC8udGVzdChjb250ZXh0LmdldFBhdGgoKSkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBUaGVuIGNoZWNrIGlmIHRoZSBlbnRpdHkgaXMgYSBkcmFmdCByb290XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gY29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IGVudGl0eVNldCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGNvbnRleHQuZ2V0UGF0aCgpKSlcblx0XHRcdC50YXJnZXRPYmplY3QgYXMgRW50aXR5U2V0O1xuXG5cdFx0aWYgKCFNb2RlbEhlbHBlci5pc0RyYWZ0Um9vdChlbnRpdHlTZXQpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgZG9uJ3Qgc3VwcG9ydCBzZW1hbnRpYyBwYXRoIGZvciBuZXdseSBjcmVhdGVkIG9iamVjdHNcblx0XHRpZiAoY29udGV4dC5nZXRQcm9wZXJ0eShcIklzQWN0aXZlRW50aXR5XCIpID09PSBmYWxzZSAmJiBjb250ZXh0LmdldFByb3BlcnR5KFwiSGFzQWN0aXZlRW50aXR5XCIpID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIEZpbmFsbHksIGNoZWNrIGlmIHRoZSBlbnRpdHkgaGFzIHNlbWFudGljIGtleXNcblx0XHRjb25zdCBlbnRpdHlTZXROYW1lID0gZW50aXR5U2V0Lm5hbWU7XG5cdFx0cmV0dXJuIFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljS2V5cyhtZXRhTW9kZWwsIGVudGl0eVNldE5hbWUpICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHRfZ2V0UGF0aEZyb21Db250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLCBwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMpOiBzdHJpbmcge1xuXHRcdGxldCBzUGF0aCA9IFwiXCI7XG5cblx0XHRpZiAoY29udGV4dC5pc0E8T0RhdGFMaXN0QmluZGluZz4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFMaXN0QmluZGluZ1wiKSkge1xuXHRcdFx0c1BhdGggPSBjb250ZXh0LmdldEhlYWRlckNvbnRleHQoKT8uZ2V0UGF0aCgpID8/IFwiXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNQYXRoID0gY29udGV4dC5nZXRQYXRoKCk7XG5cblx0XHRcdGlmIChwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsID09PSAtMSkge1xuXHRcdFx0XHQvLyBXaGVuIG5hdmlnYXRpbmcgYmFjayBmcm9tIGEgY29udGV4dCwgd2UgbmVlZCB0byByZW1vdmUgdGhlIGxhc3QgY29tcG9uZW50IG9mIHRoZSBwYXRoXG5cdFx0XHRcdHNQYXRoID0gdGhpcy5nZXRQYXRoVG9OYXZpZ2F0ZUJhY2soc1BhdGgpO1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHdlJ3JlIG5hdmlnYXRpbmcgYmFjayB0byBhIHNlbWFudGljIHBhdGggdGhhdCB3YXMgcHJldmlvdXNseSByZXNvbHZlZFxuXHRcdFx0XHRpZiAodGhpcy5vTGFzdFNlbWFudGljTWFwcGluZz8udGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0XHRzUGF0aCA9IHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcuc2VtYW50aWNQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgoY29udGV4dCkpIHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgd2UgaGF2ZSB0byB1c2UgYSBzZW1hbnRpYyBwYXRoXG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSBwYXJhbWV0ZXJzLnNlbWFudGljUGF0aCA/IHBhcmFtZXRlcnMuc2VtYW50aWNQYXRoIDogU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKGNvbnRleHQsIHRydWUpO1xuXG5cdFx0XHRcdGlmICghc1NlbWFudGljUGF0aCkge1xuXHRcdFx0XHRcdC8vIFdlIHdlcmUgbm90IGFibGUgdG8gYnVpbGQgdGhlIHNlbWFudGljIHBhdGggLS0+IFVzZSB0aGUgdGVjaG5pY2FsIHBhdGggYW5kXG5cdFx0XHRcdFx0Ly8gY2xlYXIgdGhlIHByZXZpb3VzIG1hcHBpbmcsIG90aGVyd2lzZSB0aGUgb2xkIG1hcHBpbmcgaXMgdXNlZCBpbiBFZGl0RmxvdyN1cGRhdGVEb2N1bWVudFxuXHRcdFx0XHRcdC8vIGFuZCBpdCBsZWFkcyB0byB1bndhbnRlZCBwYWdlIHJlbG9hZHNcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcodW5kZWZpbmVkKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzU2VtYW50aWNQYXRoICE9PSBzUGF0aCkge1xuXHRcdFx0XHRcdC8vIFN0b3JlIHRoZSBtYXBwaW5nIHRlY2huaWNhbCA8LT4gc2VtYW50aWMgcGF0aCBhbmQgdXNlIHNlbWFudGljIHBhdGhcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcoeyB0ZWNobmljYWxQYXRoOiBzUGF0aCwgc2VtYW50aWNQYXRoOiBzU2VtYW50aWNQYXRoIH0pO1xuXHRcdFx0XHRcdHNQYXRoID0gc1NlbWFudGljUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSBleHRyYSAnLycgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXRoXG5cdFx0aWYgKHNQYXRoWzBdID09PSBcIi9cIikge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9XG5cblx0X2NhbGN1bGF0ZUxheW91dChoYXNoOiBzdHJpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0Ly8gT3BlbiBpbiBmdWxsIHNjcmVlbiBtb2RlIHdoZW4gb3BlbmluZyBpbiBuZXcgdGFiLyB3aW5kb3dcblx0XHRpZiAocGFyYW1ldGVycy5uYXZNb2RlID09PSBcIm9wZW5Jbk5ld1RhYlwiICYmIHBhcmFtZXRlcnMuRkNMTGV2ZWwgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm4gcGFyYW1ldGVycy5GQ0xMZXZlbCA9PT0gMCA/IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiIDogXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdFx0fVxuXHRcdGxldCBGQ0xMZXZlbCA9IHBhcmFtZXRlcnMuRkNMTGV2ZWwgPz8gMDtcblx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCkge1xuXHRcdFx0RkNMTGV2ZWwgKz0gcGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbDtcblx0XHRcdGlmIChGQ0xMZXZlbCA8IDApIHtcblx0XHRcdFx0RkNMTGV2ZWwgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrLCB0cnkgdG8gZmluZCB0aGUgbGF5b3V0IGluIHRoZSBuYXZpZ2F0aW9uIGhpc3RvcnkgaWYgaXQncyBub3QgcHJvdmlkZWQgYXMgcGFyYW1ldGVyXG5cdFx0Ly8gKGxheW91dCBjYWxjdWxhdGlvbiBpcyBub3QgaGFuZGxlZCBwcm9wZXJseSBieSB0aGUgRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciBpbiB0aGlzIGNhc2UpXG5cdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsIDwgMCAmJiAhcGFyYW1ldGVycy5sYXlvdXQpIHtcblx0XHRcdHBhcmFtZXRlcnMubGF5b3V0ID0gdGhpcy5vUm91dGVyUHJveHkuZmluZExheW91dEZvckhhc2goaGFzaCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5jYWxjdWxhdGVMYXlvdXQoRkNMTGV2ZWwsIGhhc2gsIHBhcmFtZXRlcnMubGF5b3V0LCBwYXJhbWV0ZXJzLmtlZXBDdXJyZW50TGF5b3V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIGJlZm9yZSBhIHJvdXRlIGlzIG1hdGNoZWQuXG5cdCAqXG5cdCAqL1xuXHRfb25CZWZvcmVSb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCB2aWV3UHJlbG9hZGVyU2VydmljZSA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRWaWV3UHJlbG9hZGVyU2VydmljZSgpO1xuXHRcdHZpZXdQcmVsb2FkZXJTZXJ2aWNlLnNldENhY2hlKFxuXHRcdFx0b0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmZpZ1wiKSBhcyBSb3V0ZSxcblx0XHRcdG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJhcmd1bWVudHNcIikgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgb2JqZWN0Pixcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudFxuXHRcdCk7XG5cblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IG9Sb290VmlldyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdFx0QnVzeUxvY2tlci5sb2NrKG9Sb290Vmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSB0aGUgUm91dGVyUHJveHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgdGhlIFJvdXRlclByb3h5LlxuXHQgKi9cblx0X2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkoKTogYm9vbGVhbiB7XG5cdFx0Ly8gVGhlIFJvdXRlclByb3h5IHNldHMgYSAnZmVMZXZlbCcgcHJvcGVydHkgb24gdGhlIGhpc3Rvcnkuc3RhdGUgb2JqZWN0XG5cdFx0cmV0dXJuIGhpc3Rvcnkuc3RhdGU/LmZlTGV2ZWwgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBIaWRlcyB0aGUgYnVzeSBpbmRpY2F0b3IgYW5kIGZpcmVzIGl0cyBvd24gJ3JvdXRlbWF0Y2hlZCcgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnQgVGhlIGV2ZW50XG5cdCAqL1xuXHRfb25Sb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIFJvdXRpbmdFdmVudFBhcmFtZXRlcnM7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLnJlYXNvbiA9IE5hdmlnYXRpb25SZWFzb24uQXBwU3RhdGVDaGFuZ2VkO1xuXHRcdFx0b0FwcFN0YXRlSGFuZGxlci5yZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vUm91dGVyUHJveHkuY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCgpKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mby5yZWFzb24gPSBOYXZpZ2F0aW9uUmVhc29uLlJlc3RvcmVIaXN0b3J5O1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzZXRSZXN0b3JlSGlzdG9yeUZsYWcoKTtcblx0XHR9XG5cblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gb0V2ZW50LmdldFBhcmFtZXRlcihcIm5hbWVcIik7XG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlUGF0dGVybiA9IG1QYXJhbWV0ZXJzLmNvbmZpZy5wYXR0ZXJuO1xuXHRcdHRoaXMuYUN1cnJlbnRWaWV3cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKTtcblxuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlSW5mb3JtYXRpb24gPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUpO1xuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cblx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVycyk7XG5cblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IGhhc2ggaGFzIGJlZW4gc2V0IGJ5IHRoZSByb3V0ZXJQcm94eS5uYXZUb0hhc2ggZnVuY3Rpb25cblx0XHQvLyBJZiBub3QsIHJlYnVpbGQgaGlzdG9yeSBwcm9wZXJseSAoYm90aCBpbiB0aGUgYnJvd3NlciBhbmQgdGhlIFJvdXRlclByb3h5KVxuXHRcdGlmICghdGhpcy5faXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSgpKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eVxuXHRcdFx0XHQucmVzdG9yZUhpc3RvcnkoKVxuXHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzb2x2ZVJvdXRlTWF0Y2goKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVzdG9yaW5nIGhpc3RvcnlcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlZChvRGF0YTogb2JqZWN0LCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0YXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkKG9EYXRhOiBvYmplY3QsIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoXCJiZWZvcmVSb3V0ZU1hdGNoZWRcIiwgb0RhdGEsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRkZXRhY2hSb3V0ZU1hdGNoZWQoZm5GdW5jdGlvbjogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXRhY2hFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0YXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQob0RhdGE6IG9iamVjdCwgZm5GdW5jdGlvbjogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0ZGV0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQoZm5GdW5jdGlvbjogRnVuY3Rpb24sIG9MaXN0ZW5lcjogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KFwiYWZ0ZXJSb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGRldGFjaEJlZm9yZVJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyOiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJiZWZvcmVSb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXHRhc3luYyBpbml0aWFsaXplUm91dGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkNvbGxhYm9yYXRpb24pIHtcblx0XHRcdGNvbnN0IHsgZGVmYXVsdDogQ29sbGFib3JhdGlvbkhlbHBlciB9ID0gYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL2NvbW1vbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uSGVscGVyXCIpO1xuXHRcdFx0YXdhaXQgQ29sbGFib3JhdGlvbkhlbHBlci5wcm9jZXNzQW5kRXhwYW5kSGFzaCgpO1xuXHRcdH1cblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cblx0XHR0aGlzLl9mbk9uUm91dGVNYXRjaGVkID0gdGhpcy5fb25Sb3V0ZU1hdGNoZWQuYmluZCh0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIuYXR0YWNoUm91dGVNYXRjaGVkKHRoaXMuX2ZuT25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMub1JvdXRlci5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fb25CZWZvcmVSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdC8vIFJlc2V0IGludGVybmFsIHN0YXRlXG5cdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gW107XG5cdFx0RWRpdFN0YXRlLnJlc2V0RWRpdFN0YXRlKCk7XG5cdFx0dGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290ID0gIXRoaXMub1JvdXRlci5tYXRjaChcIlwiKTtcblxuXHRcdGF3YWl0IHRoaXMubWFuYWdlU3RhcnR1cE1vZGUoKTtcblx0fVxuXG5cdG9uUmVzdG9yZSgpOiB2b2lkIHtcblx0XHR0aGlzLm1hbmFnZVN0YXJ0dXBNb2RlKCk7XG5cdH1cblxuXHRhc3luYyBtYW5hZ2VTdGFydHVwTW9kZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJzYXAtaWFwcC1zdGF0ZVwiKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gYXdhaXQgdGhpcy5vQXBwQ29tcG9uZW50LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvU3RhcnR1cFBhcmFtZXRlcnMpLmxlbmd0aCAhPT0gMDtcblx0XHRcdGNvbnN0IHNIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdFx0Ly8gTWFuYWdlIHN0YXJ0dXAgcGFyYW1ldGVycyAoaW4gY2FzZSBvZiBubyBpYXBwLXN0YXRlKVxuXHRcdFx0aWYgKCFiSXNJYXBwU3RhdGUgJiYgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzICYmICFzSGFzaCkge1xuXHRcdFx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURVwiKSkge1xuXHRcdFx0XHRcdC8vIENyZWF0ZSBtb2RlXG5cdFx0XHRcdFx0Ly8gVGhpcyBjaGVjayB3aWxsIGNhdGNoIG11bHRpcGxlIG1vZGVzIGxpa2UgY3JlYXRlLCBjcmVhdGVXaXRoIGFuZCBhdXRvQ3JlYXRlV2l0aCB3aGljaCBhbGwgbmVlZFxuXHRcdFx0XHRcdC8vIHRvIGJlIGhhbmRsZWQgbGlrZSBjcmVhdGUgc3RhcnR1cCFcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gRGVlcCBsaW5rXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IHRoaXMuX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogU3RhcnR1cFBhcmFtZXRlcnMpOiBzdHJpbmcge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldERlZmF1bHRDcmVhdGVIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIpO1xuXHR9XG5cblx0YXN5bmMgX21hbmFnZUNyZWF0ZVN0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc05ld0hhc2gpO1xuXHRcdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnM/LnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkFVVE9DUkVBVEVcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LnNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBfbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVlcExpbmtTdGFydHVwSGFzaChcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nLFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzLFxuXHRcdFx0dGhpcy5vTW9kZWwsXG5cdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5pbmJvdW5kUGFyYW1ldGVyRm9yVGFyZ2V0UmVzb2x1dGlvblxuXHRcdCkudGhlbigob0RlZXBMaW5rKSA9PiB7XG5cdFx0XHRsZXQgc0hhc2g7XG5cdFx0XHRpZiAob0RlZXBMaW5rLmNvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgc1RlY2huaWNhbFBhdGggPSBvRGVlcExpbmsuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSB0aGlzLl9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0KVxuXHRcdFx0XHRcdD8gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0LCBmYWxzZSkhXG5cdFx0XHRcdFx0OiBzVGVjaG5pY2FsUGF0aDtcblxuXHRcdFx0XHRpZiAoc1NlbWFudGljUGF0aCAhPT0gc1RlY2huaWNhbFBhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNUZWNobmljYWxQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzSGFzaCA9IHNTZW1hbnRpY1BhdGguc3Vic3RyaW5nKDEpOyAvLyBUbyByZW1vdmUgdGhlIGxlYWRpbmcgJy8nXG5cdFx0XHR9IGVsc2UgaWYgKG9EZWVwTGluay5oYXNoKSB7XG5cdFx0XHRcdHNIYXNoID0gb0RlZXBMaW5rLmhhc2g7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzSGFzaCkge1xuXHRcdFx0XHQvL1JlcGxhY2UgdGhlIGhhc2ggd2l0aCBuZXdseSBjcmVhdGVkIGhhc2hcblx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIEZ1bmN0aW9uKShzSGFzaCk7XG5cdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZURlZXBsaW5rKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgcHJlZmVycmVkIG1vZGUgZWRpdCBieSBhcHBlbmRpbmcgXCJbJnw/XWktYWN0aW9uPWVkaXRcIiB0byB0aGUgaGFzaCBpZjpcblx0ICogLSBUaGVyZSBpcyBhIHJlc3VsdGluZyBoYXNoIGZyb20gdGhlIHByZXZpb3VzIGxvZ2ljLFxuXHQgKiAtIFRoZSBwcmVmZXJyZWQgbW9kZSBpcyBlZGl0LCBhbmRcblx0ICogLSBUaGUgZW50aXR5IGlzIGVkaXRhYmxlXG5cdCAqIFRoaXMgd29ya3MgZm9yIGJvdGggZGVlcC1saW5rIHN0YXJ0dXAgKCNBcHA/SUQ9bXlJZCZwcmVmZXJyZWRNb2RlPWVkaXQpIGFuZCBvYmplY3QgcGFnZSByb3V0aW5nICgjQXBwP3ByZWZlcnJlZE1vZGU9ZWRpdCYvRW50aXR5KElEKSkuXG5cdCAqIEBwYXJhbSBzdGFydHVwUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVxuXHQgKi9cblx0YXN5bmMgX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdChzdGFydHVwUGFyYW1ldGVyczogeyBwcmVmZXJyZWRNb2RlPzogc3RyaW5nW10gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHJlc3VsdGluZ0hhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCk7XG5cdFx0Y29uc3Qgc2hvdWxkRWRpdCA9ICEhc3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZT8uWzBdPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhcIkVESVRcIik7XG5cdFx0Y29uc3QgZWRpdGFibGUgPSBhd2FpdCBBcHBTdGFydHVwSGVscGVyLnZlcmlmeUVkaXRBbm5vdGF0aW9ucyh0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub01ldGFNb2RlbCk7XG5cdFx0aWYgKHJlc3VsdGluZ0hhc2ggJiYgc2hvdWxkRWRpdCAmJiBlZGl0YWJsZSkge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gKHJlc3VsdGluZ0hhc2guaW5jbHVkZXMoXCI/XCIpID8gXCImXCIgOiBcIj9cIikgKyBcImktYWN0aW9uPWVkaXRcIjtcblx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyAoaGFzaDogc3RyaW5nKSA9PiB2b2lkKShyZXN1bHRpbmdIYXNoICsgcGFyYW1ldGVyKTtcblx0XHR9XG5cdH1cblxuXHRnZXRPdXRib3VuZHMoKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5PiB7XG5cdFx0cmV0dXJuIHRoaXMub3V0Ym91bmRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHJvdXRpbmcgaGludHMgZm9yIHRoZSBjdXJyZW50IHJvdXRlLlxuXHQgKiBDdXJyZW50bHksIHRoaXMgb25seSBjb3ZlcnMgdGhlIHBhcmVudC1jaGlsZCByZWxhdGlvbnNoaXAgZnJvbSBhIGxpc3QgcmVwb3J0IHRvIGFuIG9iamVjdCBwYWdlLlxuXHQgKiBAcmV0dXJucyBUaGUgcm91dGluZyBoaW50c1xuXHQgKi9cblx0Z2V0Um91dGluZ0hpbnRzKCk6IFJlY29yZDxzdHJpbmcsIHsgcGFyZW50T2Y6IHN0cmluZ1tdIH0+IHtcblx0XHRyZXR1cm4gdGhpcy5yb3V0aW5nSGludHMgPz8ge307XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbmFtZSBvZiB0aGUgRHJhZnQgcm9vdCBlbnRpdHkgc2V0IG9yIHRoZSBzdGlja3ktZW5hYmxlZCBlbnRpdHkgc2V0LlxuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgcm9vdCBFbnRpdHlTZXRcblx0ICovXG5cdGdldENvbnRleHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuc0NvbnRleHRQYXRoO1xuXHR9XG5cblx0Z2V0SW50ZXJmYWNlKCk6IHRoaXMge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmNsYXNzIFJvdXRpbmdTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0YXN5bmMgY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxSb3V0aW5nU2VydmljZVNldHRpbmdzPik6IFByb21pc2U8Um91dGluZ1NlcnZpY2U+IHtcblx0XHRjb25zdCBvUm91dGluZ1NlcnZpY2UgPSBuZXcgUm91dGluZ1NlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gb1JvdXRpbmdTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRpbmdTZXJ2aWNlRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTJDTUEsc0JBQXNCLElBQUFDLElBQUEsR0FEM0JDLGNBQWMsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFBQyxLQUFBLEdBRTVEQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR1BELEtBQUssQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FHUEYsS0FBSyxDQUFDLENBQUMsRUFBQUgsSUFBQSxDQUFBTSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGNBQUE7SUFBQSxTQUFBVCx1QkFBQTtNQUFBLElBQUFVLEtBQUE7TUFBQSxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUFBQyxJQUFBLE9BQUFDLEtBQUEsQ0FBQUosSUFBQSxHQUFBSyxJQUFBLE1BQUFBLElBQUEsR0FBQUwsSUFBQSxFQUFBSyxJQUFBO1FBQUFGLElBQUEsQ0FBQUUsSUFBQSxJQUFBSixTQUFBLENBQUFJLElBQUE7TUFBQTtNQUFBTixLQUFBLEdBQUFELGNBQUEsQ0FBQVEsSUFBQSxVQUFBSCxJQUFBO01BQUFJLDBCQUFBLENBQUFSLEtBQUEsd0JBQUFTLFdBQUEsRUFBQVQsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLGtCQUFBVSxZQUFBLEVBQUFW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
|
|
1035
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJldmVudCIsIl9kZWMzIiwiX2RlYzQiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0V2ZW50UHJvdmlkZXIiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfaW5oZXJpdHNMb29zZSIsIkV2ZW50UHJvdmlkZXIiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwicHJvdG90eXBlIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiLCJSb3V0aW5nU2VydmljZSIsIl9TZXJ2aWNlIiwiX3RoaXMyIiwiX2xlbjIiLCJfa2V5MiIsIm5hdmlnYXRpb25JbmZvUXVldWUiLCJlbmFibGVkIiwiYmluZGluZ0NsZWFudXBQcm9taXNlcyIsIl9leHBvcnRzIiwiX3Byb3RvIiwiaW5pdCIsIm9Db250ZXh0IiwiZ2V0Q29udGV4dCIsInNjb3BlVHlwZSIsIm9BcHBDb21wb25lbnQiLCJzY29wZU9iamVjdCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9Sb3V0ZXIiLCJnZXRSb3V0ZXIiLCJvUm91dGVyUHJveHkiLCJnZXRSb3V0ZXJQcm94eSIsImV2ZW50UHJvdmlkZXIiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0RW50cnkiLCJyb3V0aW5nIiwiX3BhcnNlUm91dGluZ0NvbmZpZ3VyYXRpb24iLCJvQXBwQ29uZmlnIiwib3V0Ym91bmRzIiwiY3Jvc3NOYXZpZ2F0aW9uIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsImJlZm9yZUV4aXQiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJfZm5PblJvdXRlTWF0Y2hlZCIsImRldGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsIl9mbk9uQmVmb3JlUm91dGVNYXRjaGVkIiwiZmlyZUV2ZW50IiwiZXhpdCIsImRlc3Ryb3kiLCJhZGRCaW5kaW5nQ2xlYW51cFByb21pc2UiLCJwcm9taXNlIiwicHVzaCIsIndhaXRGb3JCaW5kaW5nQ2xlYW51cCIsImFsbCIsImlzRkNMIiwiY29uZmlnIiwicm91dGVyQ2xhc3MiLCJfbVRhcmdldHMiLCJ0YXJnZXRzIiwic1RhcmdldE5hbWUiLCJPYmplY3QiLCJrZXlzIiwiYXNzaWduIiwidGFyZ2V0TmFtZSIsImNvbnRleHRQYXR0ZXJuIiwidW5kZWZpbmVkIiwidmlld0xldmVsIiwiX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuIiwicm91dGluZ0hpbnRzIiwiX21Sb3V0ZXMiLCJyb3V0ZXMiLCJvUm91dGVNYW5pZmVzdEluZm8iLCJyb3V0ZVRhcmdldHMiLCJnZXRSb3V0ZVRhcmdldHMiLCJ0YXJnZXQiLCJhUm91dGVUYXJnZXRzIiwiZ2V0Um91dGVUYXJnZXROYW1lcyIsInNSb3V0ZU5hbWUiLCJuYW1lIiwic1JvdXRlUGF0dGVybiIsInBhdHRlcm4iLCJpbmRleE9mIiwiTG9nIiwid2FybmluZyIsImlSb3V0ZUxldmVsIiwidGFyZ2V0c1dpdGhJbmZvIiwicm91dGVMZXZlbCIsIml0ZW0iLCJzUGFyZW50VGFyZ2V0TmFtZSIsInBhcmVudCIsInJvdXRlckhhc2hLZXlzIiwiUm91dGVyUHJveHkiLCJleHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoIiwic3BsaXQiLCJGQ0xMZXZlbCIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImZvckVhY2giLCJhTGV2ZWwwUm91dGVOYW1lcyIsImFMZXZlbDFSb3V0ZU5hbWVzIiwic0RlZmF1bHRSb3V0ZU5hbWUiLCJzTmFtZSIsImlMZXZlbCIsInNEZWZhdWx0VGFyZ2V0TmFtZSIsInNsaWNlIiwic0NvbnRleHRQYXRoIiwib1NldHRpbmdzIiwib3B0aW9ucyIsInNldHRpbmdzIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtYXAiLCJzVGFyZ2V0S2V5Iiwic29ydCIsImEiLCJiIiwiZnVsbENvbnRleHRQYXRoIiwicGFyZW50T2YiLCJuYXZpZ2F0aW9uIiwic05hdk5hbWUiLCJpbmNsdWRlcyIsInRhcmdldFJvdXRlIiwiZGV0YWlsIiwicm91dGUiLCJzdGFydHNXaXRoIiwic1BhdHRlcm4iLCJyZXBsYWNlIiwicmVnZXgiLCJSZWdFeHAiLCJtYXRjaCIsIl9nZXRSb3V0ZUluZm9ybWF0aW9uIiwiX2dldFRhcmdldEluZm9ybWF0aW9uIiwiX2dldENvbXBvbmVudElkIiwic093bmVySWQiLCJzQ29tcG9uZW50SWQiLCJzdWJzdHJpbmciLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNvbXBvbmVudE9yVmlldyIsImNvcnJlY3RUYXJnZXROYW1lIiwiZ2V0VGFyZ2V0TmFtZSIsInRhcmdldENvbXBvbmVudElkIiwiX3NPd25lcklkIiwiZ2V0SWQiLCJpZCIsInZpZXdJZCIsImdldFRhcmdldE5hbWVGb3JWaWV3IiwidmlldyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTGFzdFNlbWFudGljTWFwcGluZyIsInNldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJjb250ZXh0Iiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsInRhcmdldFVSTFByb21pc2UiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljUGF0aCIsInByZXBhcmVQYXJhbWV0ZXJzIiwidGhlbiIsInBhcmFtZXRlcnMiLCJnZXRVUkwiLCJuYXZpZ2F0ZVRvIiwibVBhcmFtZXRlck1hcHBpbmciLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwic1RhcmdldFVSTFByb21pc2UiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtUGFyYW1ldGVycyIsInRhcmdldFVybCIsImlzSGlkZGVuRHJhZnRFbmFibGVkIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJIaWRkZW5EcmFmdCIsIm5hdmlnYXRlRnVuY3Rpb24iLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyIsInNQYXJhbWV0ZXJLZXkiLCJzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24iLCJvUGFyc2VkRXhwcmVzc2lvbiIsIkJpbmRpbmdJbmZvIiwicGFyc2UiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJsb2NhbENvbnRleHRQYXRoIiwiam9pbiIsImxvY2FsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJvVmFsdWUiLCJvUHJvcGVydHlJbmZvIiwiZ2V0T2JqZWN0Iiwic0VkbVR5cGUiLCIkVHlwZSIsIk9EYXRhVXRpbHMiLCJmb3JtYXRMaXRlcmFsIiwiYVJlc29sdmVkUGFyYW1ldGVycyIsInZhbHVlIiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJrZXkiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlcnMiLCJvUmVzb2x2ZWRQYXJhbWV0ZXIiLCJvRXJyb3IiLCJlcnJvciIsIl9maXJlUm91dGVNYXRjaEV2ZW50cyIsIkVkaXRTdGF0ZSIsImNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlIiwibmF2aWdhdGVUb0NvbnRleHQiLCJ2aWV3RGF0YSIsImN1cnJlbnRUYXJnZXRJbmZvIiwic2tpcEhhc2hHdWFyZENoZWNrIiwicm91dGVQYXJhbWV0ZXJzUHJvbWlzZSIsImlzU3RpY2t5TW9kZSIsInRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uSW5mbyIsIm9Sb3V0ZURldGFpbCIsImlzQSIsInNUYXJnZXRQYXRoIiwiX2dldFBhdGhGcm9tQ29udGV4dCIsImJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QiLCJleGl0RnJvbUFwcCIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwic0xheW91dCIsIl9jYWxjdWxhdGVMYXlvdXQiLCJvTmF2aWdhdGlvbkluZm8iLCJiVGFyZ2V0RWRpdGFibGUiLCJlZGl0YWJsZSIsImJQZXJzaXN0T1BTY3JvbGwiLCJwZXJzaXN0T1BTY3JvbGwiLCJiU2hvd1BsYWNlaG9sZGVyIiwic2hvd1BsYWNlaG9sZGVyIiwicmVhc29uIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJ1cGRhdGVGQ0xMZXZlbCIsInJlY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsInNDdXJyZW50SGFzaE5vQXBwU3RhdGUiLCJnZXRIYXNoIiwicm91dGVJbmZvQnlIYXNoIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwibUV2ZW50UGFyYW1ldGVycyIsInJvdXRlSW5mb3JtYXRpb24iLCJzQ3VycmVudFJvdXRlTmFtZSIsInJvdXRlUGF0dGVybiIsInNDdXJyZW50Um91dGVQYXR0ZXJuIiwidmlld3MiLCJhQ3VycmVudFZpZXdzIiwic2V0Rm9jdXNGb3JjZWQiLCJmb3JjZUZvY3VzIiwidHJhbnNpZW50IiwibmF2TW9kZSIsInNhcCIsInVpIiwicmVxdWlyZSIsIkNvbnRhaW5lciIsInNoZWxsU2VydmljZUhlbHBlciIsImdldFNoZWxsU2VydmljZXMiLCJwYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTZXJ2aWNlQXN5bmMiLCJocmVmIiwiZ2V0SHJlZiIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1zIiwiYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lIiwiZ2V0SW5mcmFtZVVybCIsInVybCIsIlVSTCIsImVuY29kZVVSSSIsIndpbmRvdyIsIm9yaWdpbiIsInBhdGhuYW1lIiwib3BlbldpbmRvdyIsIm9Sb3V0ZUluZm8iLCJvUm91dGUiLCJzTGFzdFRhcmdldE5hbWUiLCJvVGFyZ2V0IiwibWVzc2FnZUhhbmRsaW5nIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsIm9Sb3V0ZVBhcmFtZXRlcnMiLCJuYXZUbyIsInByZXNlcnZlSGlzdG9yeSIsIm5vUHJlc2VydmF0aW9uQ2FjaGUiLCJiTmF2aWdhdGVkIiwicG9wIiwibmF2aWdhdGVUb1JvdXRlIiwic1RhcmdldFJvdXRlTmFtZSIsInNUYXJnZXRVUkwiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJzUGF0aCIsInRlc3QiLCJzU2VtYW50aWNQYXRoIiwidGVjaG5pY2FsUGF0aCIsInNlbWFudGljUGF0aCIsImdldFBhdGhUb05hdmlnYXRlQmFjayIsIl9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoIiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0T2JqZWN0IiwiaXNEcmFmdFJvb3QiLCJnZXRQcm9wZXJ0eSIsImVudGl0eVNldE5hbWUiLCJnZXRTZW1hbnRpY0tleXMiLCJnZXRIZWFkZXJDb250ZXh0IiwibGF5b3V0IiwiZmluZExheW91dEZvckhhc2giLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJjYWxjdWxhdGVMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIl9vbkJlZm9yZVJvdXRlTWF0Y2hlZCIsIm9FdmVudCIsInZpZXdQcmVsb2FkZXJTZXJ2aWNlIiwiZ2V0Vmlld1ByZWxvYWRlclNlcnZpY2UiLCJzZXRDYWNoZSIsImdldFBhcmFtZXRlciIsImJQbGFjZWhvbGRlckVuYWJsZWQiLCJQbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJCdXN5TG9ja2VyIiwibG9jayIsIl9pc05hdmlnYXRpb25UcmlnZ2VyZWRCeVJvdXRlclByb3h5IiwiaGlzdG9yeSIsInN0YXRlIiwiZmVMZXZlbCIsIl9vblJvdXRlTWF0Y2hlZCIsIm9BcHBTdGF0ZUhhbmRsZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJpc0xvY2tlZCIsInVubG9jayIsImdldFBhcmFtZXRlcnMiLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwiTmF2aWdhdGlvblJlYXNvbiIsIkFwcFN0YXRlQ2hhbmdlZCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwiY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCIsIlJlc3RvcmVIaXN0b3J5IiwicmVzZXRSZXN0b3JlSGlzdG9yeUZsYWciLCJyZXN0b3JlSGlzdG9yeSIsInJlc29sdmVSb3V0ZU1hdGNoIiwiY2F0Y2giLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsImRldGFjaEV2ZW50IiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImluaXRpYWxpemVSb3V0aW5nIiwiQ29sbGFib3JhdGlvbiIsImRlZmF1bHQiLCJDb2xsYWJvcmF0aW9uSGVscGVyIiwiX191aTVfcmVxdWlyZV9hc3luYyIsInByb2Nlc3NBbmRFeHBhbmRIYXNoIiwiYmluZCIsInJlc2V0RWRpdFN0YXRlIiwibWFuYWdlU3RhcnR1cE1vZGUiLCJvblJlc3RvcmUiLCJiSXNJYXBwU3RhdGUiLCJnZXRIYXNoQ2hhbmdlciIsIm9TdGFydHVwUGFyYW1ldGVycyIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwiYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzIiwic0hhc2giLCJwcmVmZXJyZWRNb2RlIiwidG9VcHBlckNhc2UiLCJfbWFuYWdlQ3JlYXRlU3RhcnR1cCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJfbWFuYWdlZFByZWZlcnJlZE1vZGVFZGl0IiwiZ2V0RGVmYXVsdENyZWF0ZUhhc2giLCJBcHBTdGFydHVwSGVscGVyIiwiZ2V0Q29udGV4dFBhdGgiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsInNOZXdIYXNoIiwicmVwbGFjZUhhc2giLCJzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUiLCJzZXRTdGFydHVwTW9kZUNyZWF0ZSIsImdldERlZXBMaW5rU3RhcnR1cEhhc2giLCJhcHAiLCJpbmJvdW5kUGFyYW1ldGVyRm9yVGFyZ2V0UmVzb2x1dGlvbiIsIm9EZWVwTGluayIsInNUZWNobmljYWxQYXRoIiwic2V0U3RhcnR1cE1vZGVEZWVwbGluayIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwicmVzdWx0aW5nSGFzaCIsInNob3VsZEVkaXQiLCJ2ZXJpZnlFZGl0QW5ub3RhdGlvbnMiLCJwYXJhbWV0ZXIiLCJnZXRPdXRib3VuZHMiLCJnZXRSb3V0aW5nSGludHMiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiUm91dGluZ1NlcnZpY2VGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMiIsImNyZWF0ZUluc3RhbmNlIiwib1NlcnZpY2VDb250ZXh0Iiwib1JvdXRpbmdTZXJ2aWNlIiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuXG5pbXBvcnQgdHlwZSB7IFJvdXRlIH0gZnJvbSBcIkB1aTUvbWFuaWZlc3QvdHlwZXMvbWFuaWZlc3RcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBldmVudCB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFN0YXJ0dXBQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBOYXZpZ2F0aW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCBQbGFjZWhvbGRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUGxhY2Vob2xkZXJcIjtcbmltcG9ydCBtZXNzYWdlSGFuZGxpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL21lc3NhZ2VIYW5kbGVyL21lc3NhZ2VIYW5kbGluZ1wiO1xuaW1wb3J0IE5hdmlnYXRpb25SZWFzb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvTmF2aWdhdGlvblJlYXNvblwiO1xuaW1wb3J0IFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IEFwcFN0YXJ0dXBIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQXBwU3RhcnR1cEhlbHBlclwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCB7IGdldFJvdXRlVGFyZ2V0TmFtZXMsIGdldFJvdXRlVGFyZ2V0cyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01hbmlmZXN0SGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0tleUhlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdJbmZvIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nSW5mb1wiO1xuaW1wb3J0IEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSwgUm91dGVUYXJnZXQsIFJvdXRpbmdDb25maWd1cmF0aW9uLCBSb3V0aW5nVGFyZ2V0IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IG9wZW5XaW5kb3cgZnJvbSBcInNhcC91aS91dGlsL29wZW5XaW5kb3dcIjtcbmltcG9ydCB0eXBlIENvbnRhaW5lciBmcm9tIFwic2FwL3VzaGVsbC9Db250YWluZXJcIjtcbmltcG9ydCB0eXBlIE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcblxudHlwZSBSb3V0aW5nU2VydmljZVNldHRpbmdzID0ge307XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZUV2ZW50aW5nXCIpXG5jbGFzcyBSb3V0aW5nU2VydmljZUV2ZW50aW5nIGV4dGVuZHMgRXZlbnRQcm92aWRlciB7XG5cdEBldmVudCgpXG5cdGJlZm9yZVJvdXRlTWF0Y2hlZCE6IEZ1bmN0aW9uO1xuXG5cdEBldmVudCgpXG5cdHJvdXRlTWF0Y2hlZCE6IEZ1bmN0aW9uO1xuXG5cdEBldmVudCgpXG5cdGFmdGVyUm91dGVNYXRjaGVkITogRnVuY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzICYge1xuXHRuYXZpZ2F0aW9uSW5mbz86IHsgcmVhc29uPzogTmF2aWdhdGlvblJlYXNvbiB9O1xuXHRyb3V0ZUluZm9ybWF0aW9uPzogdW5rbm93bjtcblx0cm91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXHRjb25maWc6IHsgcGF0dGVybj86IHN0cmluZyB9O1xufTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMgPVxuXHR8IHsgbW9kZTogXCJBc3luY1wiOyBjcmVhdGVDb250ZXh0UHJvbWlzZTogUHJvbWlzZTxDb250ZXh0PiB9XG5cdHwgeyBtb2RlOiBcIkRlZmVycmVkXCI7IGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nOyBwYXJlbnRDb250ZXh0PzogQ29udGV4dDsgZGF0YT86IG9iamVjdCB9O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nTmF2aWdhdGlvbkluZm8gPSB7XG5cdGNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPzogQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM7XG5cdGJUYXJnZXRFZGl0YWJsZT86IGJvb2xlYW47XG5cdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRiU2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcblx0dXNlQ29udGV4dD86IENvbnRleHQ7XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nO1xuXHRiQWN0aW9uQ3JlYXRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0Y2hlY2tOb0hhc2hDaGFuZ2U/OiBib29sZWFuO1xuXHRjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz86IENyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzO1xuXHRlZGl0YWJsZT86IGJvb2xlYW47XG5cdHRyYW5zaWVudD86IGJvb2xlYW47XG5cdHBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdEZDTExldmVsPzogbnVtYmVyO1xuXHR1cGRhdGVGQ0xMZXZlbD86IG51bWJlcjtcblx0cHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbjtcblx0bm9QcmVzZXJ2YXRpb25DYWNoZT86IGJvb2xlYW47XG5cdHJlY3JlYXRlQ29udGV4dD86IGJvb2xlYW47XG5cdGZvcmNlRm9jdXM/OiBib29sZWFuO1xuXHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRjYWxsRXh0ZW5zaW9uPzogYm9vbGVhbjtcblx0bGF5b3V0Pzogc3RyaW5nO1xuXHRrZWVwQ3VycmVudExheW91dD86IGJvb2xlYW47XG5cdG5hdk1vZGU/OiBzdHJpbmc7XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nO1xuXHRzZW1hbnRpY1BhdGg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nUGFyYW1ldGVyTWFwID0ge1xuXHRbazogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljTWFwcGluZyA9IHtcblx0c2VtYW50aWNQYXRoOiBzdHJpbmc7XG5cdHRlY2huaWNhbFBhdGg6IHN0cmluZztcbn07XG50eXBlIE1pbmltYWxQYWdlU2V0dGluZyA9IHtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0ZnVsbENvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uPzogUmVjb3JkPHN0cmluZywgTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24+O1xufTtcblxudHlwZSBJbnRlcm5hbFJvdXRlRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwYXR0ZXJuOiBzdHJpbmc7XG5cdHRhcmdldHM6IHN0cmluZ1tdO1xuXHR0YXJnZXRzV2l0aEluZm86IFJvdXRlVGFyZ2V0W107XG5cdHJvdXRlTGV2ZWw6IG51bWJlcjtcbn07XG5cbnR5cGUgUmVzb2x2ZWRQYXJhbWV0ZXJzID0geyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfTtcblxuZXhwb3J0IGNsYXNzIFJvdXRpbmdTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdG9BcHBDb21wb25lbnQhOiBBcHBDb21wb25lbnQ7XG5cblx0b01vZGVsITogT0RhdGFNb2RlbDtcblxuXHRvTWV0YU1vZGVsITogT0RhdGFNZXRhTW9kZWw7XG5cblx0b1JvdXRlciE6IFJvdXRlcjtcblxuXHRvUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblxuXHRldmVudFByb3ZpZGVyITogRXZlbnRQcm92aWRlcjtcblxuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8Um91dGluZ1NlcnZpY2U+O1xuXG5cdG91dGJvdW5kcyE6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT47XG5cblx0X21UYXJnZXRzITogUmVjb3JkPHN0cmluZywgUm91dGluZ1RhcmdldD47XG5cblx0X21Sb3V0ZXMhOiBSZWNvcmQ8c3RyaW5nLCBJbnRlcm5hbFJvdXRlRGVmaW5pdGlvbj47XG5cblx0b0xhc3RTZW1hbnRpY01hcHBpbmc/OiBTZW1hbnRpY01hcHBpbmc7XG5cblx0YkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdD86IGJvb2xlYW47XG5cblx0c0N1cnJlbnRSb3V0ZU5hbWU/OiBzdHJpbmc7XG5cblx0c0N1cnJlbnRSb3V0ZVBhdHRlcm4/OiBzdHJpbmc7XG5cblx0YUN1cnJlbnRWaWV3cz86IChWaWV3IHwgQ29tcG9uZW50Q29udGFpbmVyKVtdO1xuXG5cdG5hdmlnYXRpb25JbmZvUXVldWU6IFJvdXRpbmdOYXZpZ2F0aW9uSW5mb1tdID0gW107XG5cblx0c0NvbnRleHRQYXRoITogc3RyaW5nO1xuXG5cdF9mbk9uUm91dGVNYXRjaGVkITogKGV2OiBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQpID0+IHZvaWQ7XG5cblx0X2ZuT25CZWZvcmVSb3V0ZU1hdGNoZWQhOiAoZXY6IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCkgPT4gdm9pZDtcblxuXHRlbmFibGVkID0gZmFsc2U7XG5cblx0cm91dGluZ0hpbnRzPzogUmVjb3JkPHN0cmluZywgeyBwYXJlbnRPZjogc3RyaW5nW10gfT47XG5cblx0YmluZGluZ0NsZWFudXBQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dC5zY29wZVR5cGUgPT09IFwiY29tcG9uZW50XCIpIHtcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdFx0dGhpcy5vTW9kZWwgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRcdHRoaXMub01ldGFNb2RlbCA9IHRoaXMub01vZGVsPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdHRoaXMub1JvdXRlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKTtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cdFx0XHR0aGlzLmV2ZW50UHJvdmlkZXIgPSBuZXcgUm91dGluZ1NlcnZpY2VFdmVudGluZygpO1xuXG5cdFx0XHRjb25zdCBvUm91dGluZ0NvbmZpZyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nO1xuXHRcdFx0dGhpcy5fcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZyEpO1xuXG5cdFx0XHRjb25zdCBvQXBwQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpO1xuXHRcdFx0dGhpcy5vdXRib3VuZHMgPSBvQXBwQ29uZmlnLmNyb3NzTmF2aWdhdGlvbj8ub3V0Ym91bmRzID8/IHt9O1xuXHRcdH1cblxuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblxuXHRiZWZvcmVFeGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdHRoaXMub1JvdXRlci5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5fZm5PblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyLmRldGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uQmVmb3JlUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicm91dGVNYXRjaGVkXCIsIHt9KTtcblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdGFkZEJpbmRpbmdDbGVhbnVwUHJvbWlzZShwcm9taXNlOiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG5cdFx0dGhpcy5iaW5kaW5nQ2xlYW51cFByb21pc2VzLnB1c2gocHJvbWlzZSk7XG5cdH1cblxuXHRhc3luYyB3YWl0Rm9yQmluZGluZ0NsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwodGhpcy5iaW5kaW5nQ2xlYW51cFByb21pc2VzKTtcblx0XHR0aGlzLmJpbmRpbmdDbGVhbnVwUHJvbWlzZXMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBhIG1hbmlmZXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJuYWwgdXNhZ2UuXG5cdCAqIEBwYXJhbSBvUm91dGluZ0NvbmZpZyBUaGUgcm91dGluZyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqL1xuXHRfcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZzogUm91dGluZ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0XHRjb25zdCBpc0ZDTCA9IG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCI7XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiB0YXJnZXRzXG5cdFx0dGhpcy5fbVRhcmdldHMgPSB7fTtcblx0XHRpZiAob1JvdXRpbmdDb25maWc/LnRhcmdldHMpIHtcblx0XHRcdGZvciAoY29uc3Qgc1RhcmdldE5hbWUgb2YgT2JqZWN0LmtleXMob1JvdXRpbmdDb25maWcudGFyZ2V0cykpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdID0gT2JqZWN0LmFzc2lnbih7IHRhcmdldE5hbWU6IHNUYXJnZXROYW1lIH0sIG9Sb3V0aW5nQ29uZmlnLnRhcmdldHNbc1RhcmdldE5hbWVdKTtcblxuXHRcdFx0XHQvLyBWaWV3IGxldmVsIGZvciBGQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB0YXJnZXQgcGF0dGVyblxuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0dGVybiA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oY29udGV4dFBhdHRlcm4sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMucm91dGluZ0hpbnRzID0ge307XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiByb3V0ZXNcblx0XHR0aGlzLl9tUm91dGVzID0ge307XG5cdFx0aWYgKG9Sb3V0aW5nQ29uZmlnPy5yb3V0ZXMpIHtcblx0XHRcdGZvciAoY29uc3Qgb1JvdXRlTWFuaWZlc3RJbmZvIG9mIG9Sb3V0aW5nQ29uZmlnLnJvdXRlcykge1xuXHRcdFx0XHRjb25zdCByb3V0ZVRhcmdldHMgPSBnZXRSb3V0ZVRhcmdldHMob1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldCk7XG5cdFx0XHRcdGNvbnN0IGFSb3V0ZVRhcmdldHMgPSBnZXRSb3V0ZVRhcmdldE5hbWVzKG9Sb3V0ZU1hbmlmZXN0SW5mby50YXJnZXQpLFxuXHRcdFx0XHRcdHNSb3V0ZU5hbWUgPSBvUm91dGVNYW5pZmVzdEluZm8ubmFtZSxcblx0XHRcdFx0XHRzUm91dGVQYXR0ZXJuID0gb1JvdXRlTWFuaWZlc3RJbmZvLnBhdHRlcm47XG5cdFx0XHRcdGlmICghc1JvdXRlUGF0dGVybikge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIHJvdXRlIHBhdHRlcm46IGFsbCBwYXR0ZXJucyBuZWVkIHRvIGVuZCB3aXRoICc6P3F1ZXJ5OicsIHRoYXQgd2UgdXNlIGZvciBwYXJhbWV0ZXJzXG5cdFx0XHRcdGlmIChzUm91dGVQYXR0ZXJuLmxlbmd0aCA8IDggfHwgc1JvdXRlUGF0dGVybi5pbmRleE9mKFwiOj9xdWVyeTpcIikgIT09IHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIC0gOCkge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKGBQYXR0ZXJuIGZvciByb3V0ZSAke3NSb3V0ZU5hbWV9IGRvZXNuJ3QgZW5kIHdpdGggJzo/cXVlcnk6JyA6ICR7c1JvdXRlUGF0dGVybn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpUm91dGVMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNSb3V0ZVBhdHRlcm4sIDApO1xuXHRcdFx0XHR0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdID0ge1xuXHRcdFx0XHRcdG5hbWU6IHNSb3V0ZU5hbWUsXG5cdFx0XHRcdFx0cGF0dGVybjogc1JvdXRlUGF0dGVybixcblx0XHRcdFx0XHR0YXJnZXRzOiBhUm91dGVUYXJnZXRzLFxuXHRcdFx0XHRcdHRhcmdldHNXaXRoSW5mbzogcm91dGVUYXJnZXRzLFxuXHRcdFx0XHRcdHJvdXRlTGV2ZWw6IGlSb3V0ZUxldmVsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gQWRkIHRoZSBwYXJlbnQgdGFyZ2V0cyBpbiB0aGUgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgcm91dGVcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFSb3V0ZVRhcmdldHMpIHtcblx0XHRcdFx0XHRjb25zdCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW2l0ZW1dLnBhcmVudDtcblx0XHRcdFx0XHRpZiAoc1BhcmVudFRhcmdldE5hbWUpIHtcblx0XHRcdFx0XHRcdGFSb3V0ZVRhcmdldHMucHVzaChzUGFyZW50VGFyZ2V0TmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0ucm91dGVySGFzaEtleXMgPSBSb3V0ZXJQcm94eS5leHRyYWN0RW50aXR5U2V0c0Zyb21IYXNoKHNSb3V0ZVBhdHRlcm4uc3BsaXQoXCI6P3F1ZXJ5OlwiKVswXSk7XG5cblx0XHRcdFx0aWYgKCFpc0ZDTCkge1xuXHRcdFx0XHRcdC8vIFZpZXcgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSByb3V0ZSBwYXR0ZXJuXG5cdFx0XHRcdFx0Y29uc3Qgdmlld0xldmVsID0gdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsO1xuXHRcdFx0XHRcdGlmICh2aWV3TGV2ZWwgPT09IHVuZGVmaW5lZCB8fCB2aWV3TGV2ZWwgPCBpUm91dGVMZXZlbCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlcmUgYXJlIGNhc2VzIHdoZW4gZGlmZmVyZW50IHJvdXRlcyBwb2ludCB0byB0aGUgc2FtZSB0YXJnZXQuIFdlIHRha2UgdGhlXG5cdFx0XHRcdFx0XHQvLyBsYXJnZXN0IHZpZXdMZXZlbCBpbiB0aGF0IGNhc2UuXG5cdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWwgPSBpUm91dGVMZXZlbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGQ0wgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgZXF1YWwgdG8gLTFcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5GQ0xMZXZlbCA9IC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFSb3V0ZVRhcmdldHMubGVuZ3RoID09PSAxICYmIHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLmNvbnRyb2xBZ2dyZWdhdGlvbiAhPT0gXCJiZWdpbkNvbHVtblBhZ2VzXCIpIHtcblx0XHRcdFx0XHQvLyBXZSdyZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIG9ubHkgMSB0YXJnZXQgZm9yIHRoZSByb3V0ZSwgYW5kIGl0J3Mgbm90IGluIHRoZSBmaXJzdCBjb2x1bW5cblx0XHRcdFx0XHQvLyAtLT4gdGhpcyBpcyBhIGZ1bGxzY3JlZW4gY29sdW1uIGFmdGVyIGFsbCBjb2x1bW5zIGluIHRoZSBGQ0wgaGF2ZSBiZWVuIHVzZWRcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5GQ0xMZXZlbCA9IDM7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gT3RoZXIgRkNMIGNhc2VzXG5cdFx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZSkgPT4ge1xuXHRcdFx0XHRcdFx0c3dpdGNoICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJiZWdpbkNvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMDtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIFwibWlkQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAxO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByb3BhZ2F0ZSB2aWV3TGV2ZWwsIGNvbnRleHRQYXR0ZXJuLCBGQ0xMZXZlbCBhbmQgY29udHJvbEFnZ3JlZ2F0aW9uIHRvIHBhcmVudCB0YXJnZXRzXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQ7XG5cdFx0XHR3aGlsZSAoc1BhcmVudFRhcmdldE5hbWUpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLnZpZXdMZXZlbCA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLnZpZXdMZXZlbCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4gPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm47XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5GQ0xMZXZlbCA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbDtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbiB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uO1xuXHRcdFx0XHRzVGFyZ2V0TmFtZSA9IHNQYXJlbnRUYXJnZXROYW1lO1xuXHRcdFx0XHRzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBEZXRlcm1pbmUgdGhlIHJvb3QgZW50aXR5IGZvciB0aGUgYXBwXG5cdFx0Y29uc3QgYUxldmVsMFJvdXRlTmFtZXMgPSBbXTtcblx0XHRjb25zdCBhTGV2ZWwxUm91dGVOYW1lcyA9IFtdO1xuXHRcdGxldCBzRGVmYXVsdFJvdXRlTmFtZTtcblxuXHRcdGZvciAoY29uc3Qgc05hbWUgaW4gdGhpcy5fbVJvdXRlcykge1xuXHRcdFx0Y29uc3QgaUxldmVsID0gdGhpcy5fbVJvdXRlc1tzTmFtZV0ucm91dGVMZXZlbDtcblx0XHRcdGlmIChpTGV2ZWwgPT09IDApIHtcblx0XHRcdFx0YUxldmVsMFJvdXRlTmFtZXMucHVzaChzTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlMZXZlbCA9PT0gMSkge1xuXHRcdFx0XHRhTGV2ZWwxUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYUxldmVsMFJvdXRlTmFtZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRzRGVmYXVsdFJvdXRlTmFtZSA9IGFMZXZlbDBSb3V0ZU5hbWVzWzBdO1xuXHRcdH0gZWxzZSBpZiAoYUxldmVsMVJvdXRlTmFtZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRzRGVmYXVsdFJvdXRlTmFtZSA9IGFMZXZlbDFSb3V0ZU5hbWVzWzBdO1xuXHRcdH1cblxuXHRcdGlmIChzRGVmYXVsdFJvdXRlTmFtZSkge1xuXHRcdFx0Y29uc3Qgc0RlZmF1bHRUYXJnZXROYW1lID0gdGhpcy5fbVJvdXRlc1tzRGVmYXVsdFJvdXRlTmFtZV0udGFyZ2V0cy5zbGljZSgtMSlbMF07XG5cdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IFwiXCI7XG5cdFx0XHRjb25zdCBvU2V0dGluZ3MgPSB0aGlzLl9tVGFyZ2V0c1tzRGVmYXVsdFRhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzIGFzIE1pbmltYWxQYWdlU2V0dGluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChvU2V0dGluZ3MpIHtcblx0XHRcdFx0dGhpcy5zQ29udGV4dFBhdGggPSBvU2V0dGluZ3MuY29udGV4dFBhdGggfHwgYC8ke29TZXR0aW5ncy5lbnRpdHlTZXR9YDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5zQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0YENhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogY29udGV4dFBhdGggb3IgZW50aXR5U2V0IG1pc3NpbmcgaW4gZGVmYXVsdCB0YXJnZXQ6ICR7c0RlZmF1bHRUYXJnZXROYW1lfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIGRlZmF1bHQgY29udGV4dFBhdGg6IG5vIGRlZmF1bHQgcm91dGUgZm91bmQuXCIpO1xuXHRcdH1cblxuXHRcdC8vIFdlIG5lZWQgdG8gZXN0YWJsaXNoIHRoZSBjb3JyZWN0IHBhdGggdG8gdGhlIGRpZmZlcmVudCBwYWdlcywgaW5jbHVkaW5nIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cylcblx0XHRcdC5tYXAoKHNUYXJnZXRLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fbVRhcmdldHNbc1RhcmdldEtleV07XG5cdFx0XHR9KVxuXHRcdFx0LnNvcnQoKGE6IFJvdXRpbmdUYXJnZXQsIGI6IFJvdXRpbmdUYXJnZXQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGEudmlld0xldmVsICE9PSB1bmRlZmluZWQgJiYgYi52aWV3TGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBhLnZpZXdMZXZlbCA8IGIudmlld0xldmVsID8gLTEgOiAxO1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKCh0YXJnZXQ6IFJvdXRpbmdUYXJnZXQpID0+IHtcblx0XHRcdFx0Ly8gQWZ0ZXIgc29ydGluZyB0aGUgdGFyZ2V0cyBwZXIgbGV2ZWwgd2UgY2FuIHRoZW4gZ28gdGhyb3VnaCB0aGVpciBuYXZpZ2F0aW9uIG9iamVjdCBhbmQgdXBkYXRlIHRoZSBwYXRocyBhY2NvcmRpbmdseS5cblx0XHRcdFx0aWYgKHRhcmdldC5vcHRpb25zKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSB0YXJnZXQub3B0aW9ucy5zZXR0aW5ncyBhcyBNaW5pbWFsUGFnZVNldHRpbmc7XG5cdFx0XHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gc2V0dGluZ3MuY29udGV4dFBhdGggfHwgKHNldHRpbmdzLmVudGl0eVNldCA/IGAvJHtzZXR0aW5ncy5lbnRpdHlTZXR9YCA6IFwiXCIpO1xuXHRcdFx0XHRcdGlmICghc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoID0gYCR7c0NvbnRleHRQYXRofS9gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBwYXJlbnRPZjogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRpZiAodGFyZ2V0LnJvdXRlckhhc2hLZXlzPy5bMF0pIHtcblx0XHRcdFx0XHRcdHRoaXMucm91dGluZ0hpbnRzIVt0YXJnZXQucm91dGVySGFzaEtleXM/LlswXV0gPSB7IHBhcmVudE9mOiBwYXJlbnRPZiB9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRPYmplY3Qua2V5cyhzZXR0aW5ncy5uYXZpZ2F0aW9uIHx8IHt9KS5mb3JFYWNoKChzTmF2TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBpdCdzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0aWYgKFtcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiLCBcInNhcC5mZS5hcmliYS5MaXN0UmVwb3J0XCJdLmluY2x1ZGVzKHRhcmdldC5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRwYXJlbnRPZi5wdXNoKHNOYXZOYW1lKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldFJvdXRlID0gdGhpcy5fbVJvdXRlc1tzZXR0aW5ncy5uYXZpZ2F0aW9uIVtzTmF2TmFtZV0uZGV0YWlsPy5yb3V0ZV07XG5cblx0XHRcdFx0XHRcdGlmICh0YXJnZXRSb3V0ZSAmJiB0YXJnZXRSb3V0ZS50YXJnZXRzKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldFJvdXRlLnRhcmdldHMuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zPy5zZXR0aW5ncyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0IXRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zPy5zZXR0aW5ncz8uZnVsbENvbnRleHRQYXRoXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMhLnNldHRpbmdzIS5jb250ZXh0UGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyEuc2V0dGluZ3MhLmZ1bGxDb250ZXh0UGF0aCA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMhLnNldHRpbmdzIS5jb250ZXh0UGF0aCArIFwiL1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0YXJnZXQudmlld0xldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHNOYXZOYW1lLnN0YXJ0c1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHNOYXZOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0vYDtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICsgc05hdk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fS9gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgYSB2aWV3IGxldmVsIGZyb20gYSBwYXR0ZXJuIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMuXG5cdCAqIEBwYXJhbSBzUGF0dGVybiBUaGUgcGF0dGVyblxuXHQgKiBAcGFyYW0gdmlld0xldmVsIFRoZSBjdXJyZW50IGxldmVsIG9mIHZpZXdcblx0ICogQHJldHVybnMgVGhlIGxldmVsXG5cdCAqL1xuXHRfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm46IHN0cmluZywgdmlld0xldmVsOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0aWYgKHNQYXR0ZXJuICYmIHNQYXR0ZXJuWzBdICE9PSBcIi9cIiAmJiBzUGF0dGVyblswXSAhPT0gXCI/XCIpIHtcblx0XHRcdHNQYXR0ZXJuID0gYC8ke3NQYXR0ZXJufWA7XG5cdFx0fVxuXHRcdGlmIChzUGF0dGVybi5sZW5ndGgpIHtcblx0XHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShyZWdleCwgXCJcIik7XG5cdFx0XHRpZiAodGhpcy5vUm91dGVyLm1hdGNoKHNQYXR0ZXJuKSB8fCBzUGF0dGVybiA9PT0gXCJcIikge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sICsrdmlld0xldmVsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybiwgdmlld0xldmVsKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHZpZXdMZXZlbDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Um91dGVJbmZvcm1hdGlvbihzUm91dGVOYW1lPzogc3RyaW5nKTogSW50ZXJuYWxSb3V0ZURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRcdGlmIChzUm91dGVOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdO1xuXHR9XG5cblx0X2dldFRhcmdldEluZm9ybWF0aW9uKHNUYXJnZXROYW1lPzogc3RyaW5nKTogUm91dGluZ1RhcmdldCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNUYXJnZXROYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdH1cblxuXHRfZ2V0Q29tcG9uZW50SWQoc093bmVySWQ6IHN0cmluZywgc0NvbXBvbmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChzQ29tcG9uZW50SWQuaW5kZXhPZihgJHtzT3duZXJJZH0tLS1gKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHNDb21wb25lbnRJZC5zdWJzdHJpbmcoc093bmVySWQubGVuZ3RoICsgMyk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29tcG9uZW50SWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBjb21wb25lbnQuXG5cdCAqIEBwYXJhbSBjb21wb25lbnRPclZpZXcgSW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBvciB2aWV3XG5cdCAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGFyZ2V0XG5cdCAqL1xuXHRnZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihjb21wb25lbnRPclZpZXc6IENvbXBvbmVudCB8IFZpZXcpOiBSb3V0aW5nVGFyZ2V0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb3JyZWN0VGFyZ2V0TmFtZSA9IHRoaXMuZ2V0VGFyZ2V0TmFtZShjb21wb25lbnRPclZpZXcpO1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihjb3JyZWN0VGFyZ2V0TmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwYWdlIHNob3duIGluIHRoZSB2aWV3IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IHJvdXRpbmcgc2VjdGlvbi5cblx0ICogQHBhcmFtIGNvbXBvbmVudE9yVmlld1xuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgcGFnZVxuXHQgKi9cblx0Z2V0VGFyZ2V0TmFtZShjb21wb25lbnRPclZpZXc6IENvbXBvbmVudCB8IFZpZXcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHRhcmdldENvbXBvbmVudElkID0gdGhpcy5fZ2V0Q29tcG9uZW50SWQoXG5cdFx0XHQoY29tcG9uZW50T3JWaWV3IGFzIHVua25vd24gYXMgeyBfc093bmVySWQ6IHN0cmluZyB9KS5fc093bmVySWQsXG5cdFx0XHRjb21wb25lbnRPclZpZXcuZ2V0SWQoKVxuXHRcdCk7XG5cdFx0bGV0IGNvcnJlY3RUYXJnZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHRhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX21UYXJnZXRzW3RhcmdldE5hbWVdLmlkID09PSB0YXJnZXRDb21wb25lbnRJZCB8fCB0aGlzLl9tVGFyZ2V0c1t0YXJnZXROYW1lXS52aWV3SWQgPT09IHRhcmdldENvbXBvbmVudElkKSB7XG5cdFx0XHRcdGNvcnJlY3RUYXJnZXROYW1lID0gdGFyZ2V0TmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gY29ycmVjdFRhcmdldE5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwYWdlIHNob3duIGluIHRoZSB2aWV3IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IHJvdXRpbmcgc2VjdGlvbi5cblx0ICogQHBhcmFtIHZpZXdcblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHBhZ2Vcblx0ICovXG5cdGdldFRhcmdldE5hbWVGb3JWaWV3KHZpZXc6IFZpZXcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHBhZ2VDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iodmlldyk7XG5cdFx0bGV0IHRhcmdldE5hbWUgPSBwYWdlQ29tcG9uZW50ID8gdGhpcy5nZXRUYXJnZXROYW1lKHBhZ2VDb21wb25lbnQpIDogdW5kZWZpbmVkO1xuXHRcdGlmICghdGFyZ2V0TmFtZSkge1xuXHRcdFx0dGFyZ2V0TmFtZSA9IHRoaXMuZ2V0VGFyZ2V0TmFtZSh2aWV3KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldE5hbWU7XG5cdH1cblxuXHRnZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk6IFNlbWFudGljTWFwcGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmc7XG5cdH1cblxuXHRzZXRMYXN0U2VtYW50aWNNYXBwaW5nKG9NYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyA9IG9NYXBwaW5nO1xuXHR9XG5cblx0YXN5bmMgZ2V0SGFzaEZyb21Sb3V0ZShjb250ZXh0OiBDb250ZXh0LCByb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsIHBhcmFtZXRlck1hcHBpbmc/OiB1bmtub3duKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0XHR9XG5cdFx0bGV0IHRhcmdldFVSTFByb21pc2U6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblx0XHRpZiAoIXBhcmFtZXRlck1hcHBpbmcpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBtYXBwaW5nIGRlZmluZSB0aGlzIG1lYW4gd2UgcmVseSBlbnRpcmVseSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdGhcblx0XHRcdHRhcmdldFVSTFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKGNvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0VVJMUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMocGFyYW1ldGVyTWFwcGluZyBhcyBSb3V0aW5nUGFyYW1ldGVyTWFwLCByb3V0ZU5hbWUsIGNvbnRleHQpLnRoZW4oXG5cdFx0XHRcdChwYXJhbWV0ZXJzOiBvYmplY3QgfCB1bmRlZmluZWQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vUm91dGVyLmdldFVSTChyb3V0ZU5hbWUhLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhd2FpdCB0YXJnZXRVUkxQcm9taXNlKSBhcyBzdHJpbmc7XG5cdH1cblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogZmFsc2Vcblx0KTogUHJvbWlzZTx2b2lkPjtcblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogdHJ1ZVxuXHQpOiBQcm9taXNlPCgpID0+IHZvaWQ+O1xuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdm9pZD47XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTwoKCkgPT4gdm9pZCkgfCB2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0bGV0IHNUYXJnZXRVUkxQcm9taXNlLCBiSXNTdGlja3lNb2RlOiBib29sZWFuO1xuXHRcdGlmIChvQ29udGV4dC5nZXRNb2RlbCgpICYmIG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsICYmIG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpIHtcblx0XHRcdGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHRcdGlmICghbVBhcmFtZXRlck1hcHBpbmcpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBtYXBwaW5nIGRlZmluZSB0aGlzIG1lYW4gd2UgcmVseSBlbnRpcmVseSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdGhcblx0XHRcdHNUYXJnZXRVUkxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvQ29udGV4dCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlck1hcHBpbmcgYXMgUm91dGluZ1BhcmFtZXRlck1hcCwgc1JvdXRlTmFtZSwgb0NvbnRleHQpLnRoZW4oXG5cdFx0XHRcdChtUGFyYW1ldGVyczogb2JqZWN0IHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub1JvdXRlci5nZXRVUkwoc1JvdXRlTmFtZSEsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y29uc3QgdGFyZ2V0VXJsID0gYXdhaXQgc1RhcmdldFVSTFByb21pc2U7XG5cdFx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPVxuXHRcdFx0KHRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fCBmYWxzZTtcblx0XHRjb25zdCBuYXZpZ2F0ZUZ1bmN0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKHRhcmdldFVybCEsIGJQcmVzZXJ2ZUhpc3RvcnksIGZhbHNlLCBmYWxzZSwgYklzU3RpY2t5TW9kZSB8fCBpc0hpZGRlbkRyYWZ0RW5hYmxlZCk7XG5cdFx0fTtcblx0XHRpZiAoZGVsYXllZFVzYWdlID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbjsgLy8gd3JvbmcgYnV0IHNvbWVob3cgdGhlIHR5cGVzIGFyZSBhbm5veWluZ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0dXJuIGEgbWFwIG9mIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnMgd2hlcmUgdGhlIGJpbmRpbmcgc3ludGF4IGlzIHJlc29sdmVkIHRvIHRoZSBjdXJyZW50IG1vZGVsLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgUGFyYW1ldGVycyBtYXAgaW4gdGhlIGZvcm1hdCBbazogc3RyaW5nXSA6IENvbXBsZXhCaW5kaW5nU3ludGF4XG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnNcblx0ICovXG5cdGFzeW5jIHByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzOiBSb3V0aW5nUGFyYW1ldGVyTWFwLCBzVGFyZ2V0Um91dGU6IHN0cmluZyB8IG51bGwsIG9Db250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRsZXQgb1BhcmFtZXRlcnNQcm9taXNlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBhQ29udGV4dFBhdGhQYXJ0cyA9IHNDb250ZXh0UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzKS5tYXAoYXN5bmMgKHNQYXJhbWV0ZXJLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24gPSBtUGFyYW1ldGVyc1tzUGFyYW1ldGVyS2V5XTtcblx0XHRcdFx0Ly8gV2UgYXNzdW1lIHRoZSBkZWZpbmVkIHBhcmFtZXRlcnMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggYSBiaW5kaW5nIGV4cHJlc3Npb25cblx0XHRcdFx0Y29uc3Qgb1BhcnNlZEV4cHJlc3Npb24gPSBCaW5kaW5nSW5mby5wYXJzZShzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRjb25zdCBhUGFydHMgPSBvUGFyc2VkRXhwcmVzc2lvbi5wYXJ0cyB8fCBbb1BhcnNlZEV4cHJlc3Npb25dO1xuXHRcdFx0XHRjb25zdCBhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IGFQYXJ0cy5tYXAoYXN5bmMgZnVuY3Rpb24gKG9QYXRoUGFydDogUHJvcGVydHlCaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IGFSZWxhdGl2ZVBhcnRzID0gb1BhdGhQYXJ0LnBhdGguc3BsaXQoXCIuLi9cIik7XG5cdFx0XHRcdFx0Ly8gV2UgZ28gdXAgdGhlIGN1cnJlbnQgY29udGV4dCBwYXRoIGFzIG1hbnkgdGltZXMgYXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0Y29uc3QgYUxvY2FsUGFydHMgPSBhQ29udGV4dFBhdGhQYXJ0cy5zbGljZSgwLCBhQ29udGV4dFBhdGhQYXJ0cy5sZW5ndGggLSBhUmVsYXRpdmVQYXJ0cy5sZW5ndGggKyAxKTtcblx0XHRcdFx0XHRjb25zdCBsb2NhbENvbnRleHRQYXRoID0gYUxvY2FsUGFydHMuam9pbihcIi9cIik7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxDb250ZXh0ID1cblx0XHRcdFx0XHRcdGxvY2FsQ29udGV4dFBhdGggPT09IG9Db250ZXh0LmdldFBhdGgoKVxuXHRcdFx0XHRcdFx0XHQ/IG9Db250ZXh0XG5cdFx0XHRcdFx0XHRcdDogb0NvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChsb2NhbENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblxuXHRcdFx0XHRcdGNvbnN0IG9NZXRhQ29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobG9jYWxDb250ZXh0UGF0aCArIFwiL1wiICsgYVJlbGF0aXZlUGFydHNbYVJlbGF0aXZlUGFydHMubGVuZ3RoIC0gMV0pO1xuXHRcdFx0XHRcdHJldHVybiBsb2NhbENvbnRleHQucmVxdWVzdFByb3BlcnR5KGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKS50aGVuKGZ1bmN0aW9uIChvVmFsdWUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBvTWV0YUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzRWRtVHlwZSA9IG9Qcm9wZXJ0eUluZm8uJFR5cGU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gT0RhdGFVdGlscy5mb3JtYXRMaXRlcmFsKG9WYWx1ZSwgc0VkbVR5cGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMpLnRoZW4oKGFSZXNvbHZlZFBhcmFtZXRlcnM6IFByb3BlcnR5QmluZGluZ0luZm8pID0+IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG9QYXJzZWRFeHByZXNzaW9uLmZvcm1hdHRlclxuXHRcdFx0XHRcdFx0PyBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXIuYXBwbHkodGhpcywgYVJlc29sdmVkUGFyYW1ldGVycylcblx0XHRcdFx0XHRcdDogYVJlc29sdmVkUGFyYW1ldGVycy5qb2luKFwiXCIpO1xuXHRcdFx0XHRcdHJldHVybiB7IGtleTogc1BhcmFtZXRlcktleSwgdmFsdWU6IHZhbHVlIH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9QYXJhbWV0ZXJzUHJvbWlzZSA9IFByb21pc2UuYWxsKGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzOiBSZXNvbHZlZFBhcmFtZXRlcnNbXSkge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0YUFsbFJlc29sdmVkUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUmVzb2x2ZWRQYXJhbWV0ZXI6IFJlc29sdmVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9QYXJhbWV0ZXJzW29SZXNvbHZlZFBhcmFtZXRlci5rZXldID0gb1Jlc29sdmVkUGFyYW1ldGVyLnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJzO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENvdWxkIG5vdCBwYXJzZSB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb24gdG8gcm91dGUgJHtzVGFyZ2V0Um91dGV9YCk7XG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtZXRlcnNQcm9taXNlO1xuXHR9XG5cblx0X2ZpcmVSb3V0ZU1hdGNoRXZlbnRzKG1QYXJhbWV0ZXJzOiBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzKTogdm9pZCB7XG5cdFx0dGhpcy5iaW5kaW5nQ2xlYW51cFByb21pc2VzID0gW107XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcImJlZm9yZVJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG1QYXJhbWV0ZXJzKTtcblxuXHRcdEVkaXRTdGF0ZS5jbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSgpOyAvLyBSZXNldCBVSSBzdGF0ZSB3aGVuIGFsbCBiaW5kaW5ncyBoYXZlIGJlZW4gcmVmcmVzaGVkXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGEgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvLCBvciB0aGUgbGlzdCBiaW5kaW5nIGZvciBjcmVhdGlvbiAoZGVmZXJyZWQgY3JlYXRpb24pXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gT3B0aW9uYWwsIG1hcCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmNoZWNrTm9IYXNoQ2hhbmdlXSBOYXZpZ2F0ZSB0byB0aGUgY29udGV4dCB3aXRob3V0IGNoYW5naW5nIHRoZSBVUkxcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmFzeW5jQ29udGV4dF0gVGhlIGNvbnRleHQgaXMgY3JlYXRlZCBhc3luYywgbmF2aWdhdGUgdG8gKC4uLikgYW5kXG5cdCAqICAgICAgICAgICAgICAgICAgICB3YWl0IGZvciBQcm9taXNlIHRvIGJlIHJlc29sdmVkIGFuZCB0aGVuIG5hdmlnYXRlIGludG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJEZWZlcnJlZENvbnRleHRdIFRoZSBjb250ZXh0IHNoYWxsIGJlIGNyZWF0ZWQgZGVmZXJyZWQgYXQgdGhlIHRhcmdldCBwYWdlXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5lZGl0YWJsZV0gVGhlIHRhcmdldCBwYWdlIHNoYWxsIGJlIGltbWVkaWF0ZWx5IGluIHRoZSBlZGl0IG1vZGUgdG8gYXZvaWQgZmxpY2tlcmluZ1xuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbF0gVGhlIGJQZXJzaXN0T1BTY3JvbGwgd2lsbCBiZSB1c2VkIGZvciBzY3JvbGxpbmcgdG8gZmlyc3QgdGFiXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbF0gYCsxYCBpZiB3ZSBhZGQgYSBjb2x1bW4gaW4gRkNMLCBgLTFgIHRvIHJlbW92ZSBhIGNvbHVtbiwgMCB0byBzdGF5IG9uIHRoZSBzYW1lIGNvbHVtblxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZV0gRG8gbmF2aWdhdGlvbiB3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhlIHByZXNlcnZlZCBjYWNoZSBtZWNoYW5pc21cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJSZWNyZWF0ZUNvbnRleHRdIEZvcmNlIHJlLWNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZSBwYXNzZWQgYXMgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iRm9yY2VGb2N1c10gRm9yY2VzIGZvY3VzIHNlbGVjdGlvbiBhZnRlciBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbdmlld0RhdGFdIFZpZXcgZGF0YVxuXHQgKiBAcGFyYW0gW3ZpZXdEYXRhLm5hdmlnYXRpb25dXG5cdCAqIEBwYXJhbSBbY3VycmVudFRhcmdldEluZm9dIFRoZSB0YXJnZXQgaW5mb3JtYXRpb24gZnJvbSB3aGljaCB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIFtjdXJyZW50VGFyZ2V0SW5mby5uYW1lXVxuXHQgKiBAcGFyYW0gc2tpcEhhc2hHdWFyZENoZWNrXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggaXMgcmVzb2x2ZWQgb25jZSB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZVRvQ29udGV4dChcblx0XHRjb250ZXh0OiBDb250ZXh0IHwgT0RhdGFMaXN0QmluZGluZyxcblx0XHRwYXJhbWV0ZXJzOiBSb3V0aW5nTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7fSxcblx0XHR2aWV3RGF0YT86IHsgbmF2aWdhdGlvbj86IG9iamVjdCB9LFxuXHRcdGN1cnJlbnRUYXJnZXRJbmZvPzogeyBuYW1lOiBzdHJpbmcgfSxcblx0XHRza2lwSGFzaEd1YXJkQ2hlY2s/OiBib29sZWFuXG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cblx0XHRsZXQgdGFyZ2V0Um91dGUgPSBcIlwiO1xuXHRcdGxldCByb3V0ZVBhcmFtZXRlcnNQcm9taXNlOiBQcm9taXNlPG9iamVjdD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKHRoaXMub01ldGFNb2RlbCk7XG5cdFx0Y29uc3QgaXNIaWRkZW5EcmFmdEVuYWJsZWQgPVxuXHRcdFx0KHRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZCB8fCBmYWxzZTtcblxuXHRcdC8vIE1hbmFnZSBwYXJhbWV0ZXIgbWFwcGluZ1xuXHRcdGlmIChwYXJhbWV0ZXJzPy50YXJnZXRQYXRoICYmIHZpZXdEYXRhPy5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHZpZXdEYXRhLm5hdmlnYXRpb24gYXMgUmVjb3JkPHN0cmluZywgeyBkZXRhaWw6IHsgcm91dGU6IHN0cmluZzsgcGFyYW1ldGVyczogb2JqZWN0IH0gfT47XG5cdFx0XHRjb25zdCBvUm91dGVEZXRhaWwgPSBuYXZpZ2F0aW9uSW5mb1twYXJhbWV0ZXJzLnRhcmdldFBhdGhdLmRldGFpbDtcblx0XHRcdHRhcmdldFJvdXRlID0gb1JvdXRlRGV0YWlsLnJvdXRlO1xuXG5cdFx0XHRpZiAob1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMgJiYgY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRyb3V0ZVBhcmFtZXRlcnNQcm9taXNlID0gdGhpcy5wcmVwYXJlUGFyYW1ldGVycyhcblx0XHRcdFx0XHRvUm91dGVEZXRhaWwucGFyYW1ldGVycyBhcyB1bmtub3duIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsXG5cdFx0XHRcdFx0dGFyZ2V0Um91dGUsXG5cdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzVGFyZ2V0UGF0aCA9IHRoaXMuX2dldFBhdGhGcm9tQ29udGV4dChjb250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHQvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2UncmUgc3VwcG9zZWQgdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcFxuXHRcdC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZXhpdCBmcm9tIHRoZSBhcHAgaW5zdGVhZFxuXHRcdGlmIChzVGFyZ2V0UGF0aC5sZW5ndGggPT09IDAgJiYgdGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290KSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5leGl0RnJvbUFwcCgpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbmF2aWdhdGlvbiBnb2VzIHdpdGggYSBjcmVhdGlvbiwgd2UgYWRkICguLi4pIHRvIHRoZSBwYXRoIChleHBlY3RpbmcgY29udGV4dCBpcyBhbiBPRGF0YUxpc3RCaW5kaW5nKVxuXHRcdGlmIChwYXJhbWV0ZXJzPy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycykge1xuXHRcdFx0c1RhcmdldFBhdGggKz0gXCIoLi4uKVwiO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBsYXlvdXQgcGFyYW1ldGVyIGlmIG5lZWRlZFxuXHRcdGNvbnN0IHNMYXlvdXQgPSB0aGlzLl9jYWxjdWxhdGVMYXlvdXQoc1RhcmdldFBhdGgsIHBhcmFtZXRlcnMpO1xuXHRcdGlmIChzTGF5b3V0KSB7XG5cdFx0XHRzVGFyZ2V0UGF0aCArPSBgP2xheW91dD0ke3NMYXlvdXR9YDtcblx0XHR9XG5cblx0XHQvLyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnMgZm9yIGxhdGVyIHVzYWdlXG5cdFx0Y29uc3Qgb05hdmlnYXRpb25JbmZvOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVyczogcGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyxcblx0XHRcdGJUYXJnZXRFZGl0YWJsZTogcGFyYW1ldGVycz8uZWRpdGFibGUsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBwYXJhbWV0ZXJzPy5wZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRiU2hvd1BsYWNlaG9sZGVyOiBwYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnM/LnNob3dQbGFjZWhvbGRlciA6IHRydWUsXG5cdFx0XHRyZWFzb246IHBhcmFtZXRlcnM/LnJlYXNvbixcblx0XHRcdHJlZGlyZWN0ZWRUb05vbkRyYWZ0OiBwYXJhbWV0ZXJzLnJlZGlyZWN0ZWRUb05vbkRyYWZ0XG5cdFx0fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzPy51cGRhdGVGQ0xMZXZlbCAhPT0gLTEgJiYgcGFyYW1ldGVycz8ucmVjcmVhdGVDb250ZXh0ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRvTmF2aWdhdGlvbkluZm8udXNlQ29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnM/LmNoZWNrTm9IYXNoQ2hhbmdlKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbmV3IGhhc2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lXG5cdFx0XHRjb25zdCBzQ3VycmVudEhhc2hOb0FwcFN0YXRlID0gdGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpLnJlcGxhY2UoL1smP117MX1zYXAtaWFwcC1zdGF0ZT1bQS1aMC05XSsvLCBcIlwiKTtcblx0XHRcdGlmIChzVGFyZ2V0UGF0aCA9PT0gc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSkge1xuXHRcdFx0XHQvLyBUaGUgaGFzaCBkb2Vzbid0IGNoYW5nZSwgYnV0IHdlIGZpcmUgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgdG8gdHJpZ2dlciBwYWdlIHJlZnJlc2ggLyBiaW5kaW5nXG5cdFx0XHRcdGNvbnN0IHJvdXRlSW5mb0J5SGFzaCA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2godGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpKTtcblx0XHRcdFx0bGV0IG1FdmVudFBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSB7IGNvbmZpZzoge30gfTtcblx0XHRcdFx0aWYgKHJvdXRlSW5mb0J5SGFzaCkge1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMgPSB7IC4uLnJvdXRlSW5mb0J5SGFzaCwgY29uZmlnOiB7fSB9O1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSBvTmF2aWdhdGlvbkluZm87XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy52aWV3cyA9IHRoaXMuYUN1cnJlbnRWaWV3cztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub1JvdXRlclByb3h5LnNldEZvY3VzRm9yY2VkKCEhcGFyYW1ldGVycy5mb3JjZUZvY3VzKTtcblxuXHRcdFx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtRXZlbnRQYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzPy50cmFuc2llbnQgJiYgISFwYXJhbWV0ZXJzLmVkaXRhYmxlICYmICFzVGFyZ2V0UGF0aC5pbmNsdWRlcyhcIiguLi4pXCIpKSB7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGguaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiJmktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c1RhcmdldFBhdGggKz0gXCI/aS1hY3Rpb249Y3JlYXRlXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnMubmF2TW9kZSA9PT0gXCJvcGVuSW5OZXdUYWJcIikge1xuXHRcdFx0Ly8gTmF2aWdhdGUgdG8gbmV3IHRhYi8gd2luZG93XG5cdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiXSwgYXN5bmMgKENvbnRhaW5lcjogQ29udGFpbmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdGNvbnN0IHBhcnNlZFVybCA9IHNoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2UgPSAoYXdhaXQgQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIk5hdmlnYXRpb25cIikpIGFzIE5hdmlnYXRpb247XG5cdFx0XHRcdGNvbnN0IGhyZWYgPSBhd2FpdCBuYXZpZ2F0aW9uU2VydmljZS5nZXRIcmVmKHtcblx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBwYXJzZWRVcmwuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHBhcnNlZFVybC5hY3Rpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhcmFtczogcGFyc2VkVXJsLnBhcmFtc1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lID0gYXdhaXQgc2hlbGxTZXJ2aWNlSGVscGVyLmdldEluZnJhbWVVcmwoKTtcblx0XHRcdFx0bGV0IHVybCwgdGFyZ2V0VXJsOiBzdHJpbmc7XG5cdFx0XHRcdGlmIChhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUpIHtcblx0XHRcdFx0XHR1cmwgPSBuZXcgVVJMKGFwcGxpY2F0aW9uVXJsQmFzZWRPbklmcmFtZSk7XG5cdFx0XHRcdFx0dGFyZ2V0VXJsID0gYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lLnJlcGxhY2UodXJsLmhhc2gsIGAke2hyZWZ9Ji8ke2VuY29kZVVSSShzVGFyZ2V0UGF0aCl9YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cdFx0XHRcdFx0dGFyZ2V0VXJsID0gYCR7dXJsLm9yaWdpbn0ke3VybC5wYXRobmFtZX0ke2hyZWZ9Ji8ke2VuY29kZVVSSShzVGFyZ2V0UGF0aCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcGVuV2luZG93KHRhcmdldFVybCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENsZWFyIHVuYm91bmQgbWVzc2FnZXMgdXBvbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1Bcblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHN0YWxlIGVycm9yIG1lc3NhZ2VzIGZyb20gTFIgYXJlIG5vdCBzaG93biB0byB0aGUgdXNlciBhZnRlciBuYXZpZ2F0aW9uIHRvIE9QLlxuXHRcdFx0aWYgKGN1cnJlbnRUYXJnZXRJbmZvPy5uYW1lICYmIFtcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiLCBcInNhcC5mZS5hcmliYS5MaXN0UmVwb3J0XCJdLmluY2x1ZGVzKGN1cnJlbnRUYXJnZXRJbmZvLm5hbWUpKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb3V0ZUluZm8gPSB0aGlzLm9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNUYXJnZXRQYXRoKTtcblx0XHRcdFx0aWYgKG9Sb3V0ZUluZm8pIHtcblx0XHRcdFx0XHRjb25zdCBvUm91dGUgPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKG9Sb3V0ZUluZm8ubmFtZSk7XG5cdFx0XHRcdFx0aWYgKG9Sb3V0ZSAmJiBvUm91dGUudGFyZ2V0cyAmJiBvUm91dGUudGFyZ2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzTGFzdFRhcmdldE5hbWUgPSBvUm91dGUudGFyZ2V0c1tvUm91dGUudGFyZ2V0cy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzTGFzdFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgb1RhcmdldC5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGluIHRoZSBxdWV1ZVxuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnB1c2gob05hdmlnYXRpb25JbmZvKTtcblxuXHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHJvdXRlUGFyYW1ldGVyc1Byb21pc2UpIHtcblx0XHRcdFx0cmV0dXJuIHJvdXRlUGFyYW1ldGVyc1Byb21pc2UudGhlbigob1JvdXRlUGFyYW1ldGVyczogb2JqZWN0KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihvUm91dGVQYXJhbWV0ZXJzLCB7IGJJc1N0aWNreU1vZGU6IGlzU3RpY2t5TW9kZSwgaXNIaWRkZW5EcmFmdEVuYWJsZWQgfSk7XG5cdFx0XHRcdFx0dGhpcy5vUm91dGVyLm5hdlRvKHRhcmdldFJvdXRlLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHlcblx0XHRcdFx0Lm5hdlRvSGFzaChcblx0XHRcdFx0XHRzVGFyZ2V0UGF0aCxcblx0XHRcdFx0XHQhIXBhcmFtZXRlcnMucHJlc2VydmVIaXN0b3J5LFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM/Lm5vUHJlc2VydmF0aW9uQ2FjaGUsXG5cdFx0XHRcdFx0cGFyYW1ldGVycz8uZm9yY2VGb2N1cyxcblx0XHRcdFx0XHRpc1N0aWNreU1vZGUgfHwgaXNIaWRkZW5EcmFmdEVuYWJsZWQsXG5cdFx0XHRcdFx0c2tpcEhhc2hHdWFyZENoZWNrXG5cdFx0XHRcdClcblx0XHRcdFx0LnRoZW4oKGJOYXZpZ2F0ZWQpID0+IHtcblx0XHRcdFx0XHRpZiAoIWJOYXZpZ2F0ZWQpIHtcblx0XHRcdFx0XHRcdC8vIFRoZSBuYXZpZ2F0aW9uIGRpZCBub3QgaGFwcGVuIC0tPiByZW1vdmUgdGhlIG5hdmlnYXRpb24gcGFyYW1ldGVycyBmcm9tIHRoZSBxdWV1ZSBhcyB0aGV5IHNob3VsZG4ndCBiZSB1c2VkXG5cdFx0XHRcdFx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucG9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBiTmF2aWdhdGVkO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGEgcm91dGUuXG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGVOYW1lIE5hbWUgb2YgdGhlIHRhcmdldCByb3V0ZVxuXHQgKiBAcGFyYW0gW29Sb3V0ZVBhcmFtZXRlcnNdIFBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aXRoIHJvdXRlIHRvIGNyZWF0ZSB0aGUgdGFyZ2V0IGhhc2hcblx0ICogQHBhcmFtIG9Sb3V0ZVBhcmFtZXRlcnMuYklzU3RpY2t5TW9kZVxuXHQgKiBAcGFyYW0gb1JvdXRlUGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3Rvcnlcblx0ICogQHBhcmFtIG9Sb3V0ZVBhcmFtZXRlcnMuaXNIaWRkZW5EcmFmdEVuYWJsZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb1JvdXRlKFxuXHRcdHNUYXJnZXRSb3V0ZU5hbWU6IHN0cmluZyxcblx0XHRvUm91dGVQYXJhbWV0ZXJzPzogeyBiSXNTdGlja3lNb2RlPzogYm9vbGVhbjsgcHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbjsgaXNIaWRkZW5EcmFmdEVuYWJsZWQ/OiBib29sZWFuIH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdH1cblx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcodW5kZWZpbmVkKTtcblx0XHRjb25zdCBzVGFyZ2V0VVJMID0gdGhpcy5vUm91dGVyLmdldFVSTChzVGFyZ2V0Um91dGVOYW1lLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKFxuXHRcdFx0c1RhcmdldFVSTCEsXG5cdFx0XHQhIW9Sb3V0ZVBhcmFtZXRlcnM/LnByZXNlcnZlSGlzdG9yeSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdChvUm91dGVQYXJhbWV0ZXJzPy5iSXNTdGlja3lNb2RlID8/IGZhbHNlKSB8fCAob1JvdXRlUGFyYW1ldGVycz8uaXNIaWRkZW5EcmFmdEVuYWJsZWQgPz8gZmFsc2UpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgb25lIG9mIHRoZSBjdXJyZW50IHZpZXdzIG9uIHRoZSBzY3JlZW4gaXMgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAgaWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgaW1wYWN0ZWQgb3Igbm90XG5cdCAqL1xuXHRpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblxuXHRcdC8vIEZpcnN0LCBjaGVjayB3aXRoIHRoZSB0ZWNobmljYWwgcGF0aC4gV2UgaGF2ZSB0byB0cnkgaXQsIGJlY2F1c2UgZm9yIGxldmVsID4gMSwgd2Vcblx0XHQvLyB1c2VzIHRlY2huaWNhbCBrZXlzIGV2ZW4gaWYgU2VtYW50aWMga2V5cyBhcmUgZW5hYmxlZFxuXHRcdGlmICh0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKC9eW14oKV0rXFwoW14oKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KSE7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzU2VtYW50aWNQYXRoICE9IHNQYXRoID8gdGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNTZW1hbnRpY1BhdGgpIDogZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB1c2VkIHRvIG5hdmlnYXRlIGJhY2sgZnJvbSBhIHNwZWNpZmllZCBwYXRoLlxuXHQgKiBAcGFyYW0gc1BhdGhcblx0ICogQHJldHVybnMgVGhlIHBhdGhcblx0ICovXG5cdGdldFBhdGhUb05hdmlnYXRlQmFjayhzUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCIvW14vXSokXCIpO1xuXHRcdHNQYXRoID0gc1BhdGgucmVwbGFjZShyZWdleCwgXCJcIik7XG5cdFx0aWYgKHRoaXMub1JvdXRlci5tYXRjaChzUGF0aCkgfHwgc1BhdGggPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBzUGF0aDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UGF0aFRvTmF2aWdhdGVCYWNrKHNQYXRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgc2VtYW50aWMgcGF0aCBzaGFsbCBiZSB1c2VkIHRvIG5hdmlnYXRlIHRvIGEgZ2l2ZW4gY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gbmF2aWdhdGUgdG9cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBzZW1hbnRpYyBwYXRoIHNoYWxsIGJlIHN1ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgoY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIGlzIGEgbGV2ZWwtMSBvYmplY3QgKHBhdGggPSAvYWFhKGJiYikpXG5cdFx0aWYgKCEvXlxcL1teKF0rXFwoW14pXStcXCkkLy50ZXN0KGNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBpcyBhIGRyYWZ0IHJvb3Rcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRQYXRoKCkpKVxuXHRcdFx0LnRhcmdldE9iamVjdCBhcyBFbnRpdHlTZXQ7XG5cblx0XHRpZiAoIU1vZGVsSGVscGVyLmlzRHJhZnRSb290KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBXZSBkb24ndCBzdXBwb3J0IHNlbWFudGljIHBhdGggZm9yIG5ld2x5IGNyZWF0ZWQgb2JqZWN0c1xuXHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlICYmIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRmluYWxseSwgY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSBlbnRpdHlTZXQubmFtZTtcblx0XHRyZXR1cm4gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG1ldGFNb2RlbCwgZW50aXR5U2V0TmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblxuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRzUGF0aCA9IGNvbnRleHQuZ2V0SGVhZGVyQ29udGV4dCgpPy5nZXRQYXRoKCkgPz8gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1BhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPT09IC0xKSB7XG5cdFx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdFx0c1BhdGggPSB0aGlzLmdldFBhdGhUb05hdmlnYXRlQmFjayhzUGF0aCk7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nPy50ZWNobmljYWxQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChjb250ZXh0KSkge1xuXHRcdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljUGF0aCA9IHBhcmFtZXRlcnMuc2VtYW50aWNQYXRoID8gcGFyYW1ldGVycy5zZW1hbnRpY1BhdGggOiBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgoY29udGV4dCwgdHJ1ZSk7XG5cblx0XHRcdFx0aWYgKCFzU2VtYW50aWNQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gV2Ugd2VyZSBub3QgYWJsZSB0byBidWlsZCB0aGUgc2VtYW50aWMgcGF0aCAtLT4gVXNlIHRoZSB0ZWNobmljYWwgcGF0aCBhbmRcblx0XHRcdFx0XHQvLyBjbGVhciB0aGUgcHJldmlvdXMgbWFwcGluZywgb3RoZXJ3aXNlIHRoZSBvbGQgbWFwcGluZyBpcyB1c2VkIGluIEVkaXRGbG93I3VwZGF0ZURvY3VtZW50XG5cdFx0XHRcdFx0Ly8gYW5kIGl0IGxlYWRzIHRvIHVud2FudGVkIHBhZ2UgcmVsb2Fkc1xuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNTZW1hbnRpY1BhdGggIT09IHNQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIG1hcHBpbmcgdGVjaG5pY2FsIDwtPiBzZW1hbnRpYyBwYXRoIGFuZCB1c2Ugc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIGV4dHJhICcvJyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhdGhcblx0XHRpZiAoc1BhdGhbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc1BhdGg7XG5cdH1cblxuXHRfY2FsY3VsYXRlTGF5b3V0KGhhc2g6IHN0cmluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHQvLyBPcGVuIGluIGZ1bGwgc2NyZWVuIG1vZGUgd2hlbiBvcGVuaW5nIGluIG5ldyB0YWIvIHdpbmRvd1xuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIgJiYgcGFyYW1ldGVycy5GQ0xMZXZlbCAhPT0gLTEpIHtcblx0XHRcdHJldHVybiBwYXJhbWV0ZXJzLkZDTExldmVsID09PSAwID8gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIgOiBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIjtcblx0XHR9XG5cdFx0bGV0IEZDTExldmVsID0gcGFyYW1ldGVycy5GQ0xMZXZlbCA/PyAwO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsO1xuXHRcdFx0aWYgKEZDTExldmVsIDwgMCkge1xuXHRcdFx0XHRGQ0xMZXZlbCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGJhY2ssIHRyeSB0byBmaW5kIHRoZSBsYXlvdXQgaW4gdGhlIG5hdmlnYXRpb24gaGlzdG9yeSBpZiBpdCdzIG5vdCBwcm92aWRlZCBhcyBwYXJhbWV0ZXJcblx0XHQvLyAobGF5b3V0IGNhbGN1bGF0aW9uIGlzIG5vdCBoYW5kbGVkIHByb3Blcmx5IGJ5IHRoZSBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIGluIHRoaXMgY2FzZSlcblx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPCAwICYmICFwYXJhbWV0ZXJzLmxheW91dCkge1xuXHRcdFx0cGFyYW1ldGVycy5sYXlvdXQgPSB0aGlzLm9Sb3V0ZXJQcm94eS5maW5kTGF5b3V0Rm9ySGFzaChoYXNoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmNhbGN1bGF0ZUxheW91dChGQ0xMZXZlbCwgaGFzaCwgcGFyYW1ldGVycy5sYXlvdXQsIHBhcmFtZXRlcnMua2VlcEN1cnJlbnRMYXlvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgYmVmb3JlIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICpcblx0ICovXG5cdF9vbkJlZm9yZVJvdXRlTWF0Y2hlZChvRXZlbnQ6IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IHZpZXdQcmVsb2FkZXJTZXJ2aWNlID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFZpZXdQcmVsb2FkZXJTZXJ2aWNlKCk7XG5cdFx0dmlld1ByZWxvYWRlclNlcnZpY2Uuc2V0Q2FjaGUoXG5cdFx0XHRvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiY29uZmlnXCIpIGFzIFJvdXRlLFxuXHRcdFx0b0V2ZW50LmdldFBhcmFtZXRlcihcImFyZ3VtZW50c1wiKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBvYmplY3Q+LFxuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50XG5cdFx0KTtcblxuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0Y29uc3Qgb1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0XHRCdXN5TG9ja2VyLmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGJ5IHRoZSBSb3V0ZXJQcm94eS5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSB0aGUgUm91dGVyUHJveHkuXG5cdCAqL1xuXHRfaXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSgpOiBib29sZWFuIHtcblx0XHQvLyBUaGUgUm91dGVyUHJveHkgc2V0cyBhICdmZUxldmVsJyBwcm9wZXJ0eSBvbiB0aGUgaGlzdG9yeS5zdGF0ZSBvYmplY3Rcblx0XHRyZXR1cm4gaGlzdG9yeS5zdGF0ZT8uZmVMZXZlbCAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgd2hlbiBhIHJvdXRlIGlzIG1hdGNoZWQuXG5cdCAqIEhpZGVzIHRoZSBidXN5IGluZGljYXRvciBhbmQgZmlyZXMgaXRzIG93biAncm91dGVtYXRjaGVkJyBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudCBUaGUgZXZlbnRcblx0ICovXG5cdF9vblJvdXRlTWF0Y2hlZChvRXZlbnQ6IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9BcHBTdGF0ZUhhbmRsZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0QXBwU3RhdGVIYW5kbGVyKCksXG5cdFx0XHRvUm9vdFZpZXcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoQnVzeUxvY2tlci5pc0xvY2tlZChvUm9vdFZpZXcpICYmICFiUGxhY2Vob2xkZXJFbmFibGVkKSB7XG5cdFx0XHRCdXN5TG9ja2VyLnVubG9jayhvUm9vdFZpZXcpO1xuXHRcdH1cblx0XHRjb25zdCBtUGFyYW1ldGVyczogUm91dGluZ0V2ZW50UGFyYW1ldGVycyA9IG9FdmVudC5nZXRQYXJhbWV0ZXJzKCkgYXMgUm91dGluZ0V2ZW50UGFyYW1ldGVycztcblx0XHRpZiAodGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLmxlbmd0aCkge1xuXHRcdFx0bVBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSB0aGlzLm5hdmlnYXRpb25JbmZvUXVldWVbMF07XG5cdFx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUgPSB0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUuc2xpY2UoMSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0ge307XG5cdFx0fVxuXHRcdGlmIChvQXBwU3RhdGVIYW5kbGVyLmNoZWNrSWZSb3V0ZUNoYW5nZWRCeUlBcHAoKSkge1xuXHRcdFx0bVBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8ucmVhc29uID0gTmF2aWdhdGlvblJlYXNvbi5BcHBTdGF0ZUNoYW5nZWQ7XG5cdFx0XHRvQXBwU3RhdGVIYW5kbGVyLnJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwKCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLm9Sb3V0ZXJQcm94eS5jaGVja1Jlc3RvcmVIaXN0b3J5V2FzVHJpZ2dlcmVkKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLnJlYXNvbiA9IE5hdmlnYXRpb25SZWFzb24uUmVzdG9yZUhpc3Rvcnk7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNldFJlc3RvcmVIaXN0b3J5RmxhZygpO1xuXHRcdH1cblxuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwibmFtZVwiKTtcblx0XHR0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuID0gbVBhcmFtZXRlcnMuY29uZmlnLnBhdHRlcm47XG5cdFx0dGhpcy5hQ3VycmVudFZpZXdzID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInZpZXdzXCIpO1xuXG5cdFx0bVBhcmFtZXRlcnMucm91dGVJbmZvcm1hdGlvbiA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24odGhpcy5zQ3VycmVudFJvdXRlTmFtZSk7XG5cdFx0bVBhcmFtZXRlcnMucm91dGVQYXR0ZXJuID0gdGhpcy5zQ3VycmVudFJvdXRlUGF0dGVybjtcblxuXHRcdHRoaXMuX2ZpcmVSb3V0ZU1hdGNoRXZlbnRzKG1QYXJhbWV0ZXJzKTtcblxuXHRcdC8vIENoZWNrIGlmIGN1cnJlbnQgaGFzaCBoYXMgYmVlbiBzZXQgYnkgdGhlIHJvdXRlclByb3h5Lm5hdlRvSGFzaCBmdW5jdGlvblxuXHRcdC8vIElmIG5vdCwgcmVidWlsZCBoaXN0b3J5IHByb3Blcmx5IChib3RoIGluIHRoZSBicm93c2VyIGFuZCB0aGUgUm91dGVyUHJveHkpXG5cdFx0aWYgKCF0aGlzLl9pc05hdmlnYXRpb25UcmlnZ2VyZWRCeVJvdXRlclByb3h5KCkpIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHRcdC5yZXN0b3JlSGlzdG9yeSgpXG5cdFx0XHRcdC50aGVuKCgpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXN0b3JpbmcgaGlzdG9yeVwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5LnJlc29sdmVSb3V0ZU1hdGNoKCk7XG5cdFx0fVxuXHR9XG5cblx0YXR0YWNoUm91dGVNYXRjaGVkKG9EYXRhOiBvYmplY3QsIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgb0RhdGEsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRhdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQob0RhdGE6IG9iamVjdCwgZm5GdW5jdGlvbjogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcImJlZm9yZVJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGRldGFjaFJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRhdHRhY2hBZnRlclJvdXRlTWF0Y2hlZChvRGF0YTogb2JqZWN0LCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwiYWZ0ZXJSb3V0ZU1hdGNoZWRcIiwgb0RhdGEsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyOiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0ZGV0YWNoQmVmb3JlUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXRhY2hFdmVudChcImJlZm9yZVJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0YXN5bmMgaW5pdGlhbGl6ZVJvdXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5lbmFibGVkID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5Db2xsYWJvcmF0aW9uKSB7XG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IENvbGxhYm9yYXRpb25IZWxwZXIgfSA9IGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9jb21tb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkhlbHBlclwiKTtcblx0XHRcdGF3YWl0IENvbGxhYm9yYXRpb25IZWxwZXIucHJvY2Vzc0FuZEV4cGFuZEhhc2goKTtcblx0XHR9XG5cdFx0Ly8gQXR0YWNoIHJvdXRlciBoYW5kbGVyc1xuXG5cdFx0dGhpcy5fZm5PblJvdXRlTWF0Y2hlZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIuYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkKHRoaXMuX29uQmVmb3JlUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHQvLyBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuXHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IFtdO1xuXHRcdEVkaXRTdGF0ZS5yZXNldEVkaXRTdGF0ZSgpO1xuXHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9ICF0aGlzLm9Sb3V0ZXIubWF0Y2goXCJcIik7XG5cblx0XHRhd2FpdCB0aGlzLm1hbmFnZVN0YXJ0dXBNb2RlKCk7XG5cdH1cblxuXHRvblJlc3RvcmUoKTogdm9pZCB7XG5cdFx0dGhpcy5tYW5hZ2VTdGFydHVwTW9kZSgpO1xuXHR9XG5cblx0YXN5bmMgbWFuYWdlU3RhcnR1cE1vZGUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYklzSWFwcFN0YXRlID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpLmluY2x1ZGVzKFwic2FwLWlhcHAtc3RhdGVcIik7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG9TdGFydHVwUGFyYW1ldGVycyA9IGF3YWl0IHRoaXMub0FwcENvbXBvbmVudC5nZXRTdGFydHVwUGFyYW1ldGVycygpO1xuXHRcdFx0Y29uc3QgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzID0gb1N0YXJ0dXBQYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmtleXMob1N0YXJ0dXBQYXJhbWV0ZXJzKS5sZW5ndGggIT09IDA7XG5cdFx0XHRjb25zdCBzSGFzaCA9IHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmdldEhhc2goKTtcblx0XHRcdC8vIE1hbmFnZSBzdGFydHVwIHBhcmFtZXRlcnMgKGluIGNhc2Ugb2Ygbm8gaWFwcC1zdGF0ZSlcblx0XHRcdGlmICghYklzSWFwcFN0YXRlICYmIGJIYXNTdGFydFVwUGFyYW1ldGVycyAmJiAhc0hhc2gpIHtcblx0XHRcdFx0aWYgKG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlICYmIG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJDUkVBVEVcIikpIHtcblx0XHRcdFx0XHQvLyBDcmVhdGUgbW9kZVxuXHRcdFx0XHRcdC8vIFRoaXMgY2hlY2sgd2lsbCBjYXRjaCBtdWx0aXBsZSBtb2RlcyBsaWtlIGNyZWF0ZSwgY3JlYXRlV2l0aCBhbmQgYXV0b0NyZWF0ZVdpdGggd2hpY2ggYWxsIG5lZWRcblx0XHRcdFx0XHQvLyB0byBiZSBoYW5kbGVkIGxpa2UgY3JlYXRlIHN0YXJ0dXAhXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fbWFuYWdlQ3JlYXRlU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIERlZXAgbGlua1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX21hbmFnZURlZXBMaW5rU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLl9tYW5hZ2VkUHJlZmVycmVkTW9kZUVkaXQob1N0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHR9IGNhdGNoIChvRXJyb3I6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIGR1cmluZyByb3V0aW5nIGluaXRpYWxpemF0aW9uXCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fVxuXG5cdGdldERlZmF1bHRDcmVhdGVIYXNoKG9TdGFydHVwUGFyYW1ldGVycz86IFN0YXJ0dXBQYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gQXBwU3RhcnR1cEhlbHBlci5nZXREZWZhdWx0Q3JlYXRlSGFzaChvU3RhcnR1cFBhcmFtZXRlcnMsIHRoaXMuZ2V0Q29udGV4dFBhdGgoKSwgdGhpcy5vUm91dGVyKTtcblx0fVxuXG5cdGFzeW5jIF9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gQXBwU3RhcnR1cEhlbHBlci5nZXRDcmVhdGVTdGFydHVwSGFzaChvU3RhcnR1cFBhcmFtZXRlcnMsIHRoaXMuZ2V0Q29udGV4dFBhdGgoKSwgdGhpcy5vUm91dGVyLCB0aGlzLm9NZXRhTW9kZWwpLnRoZW4oXG5cdFx0XHQoc05ld0hhc2g6IHN0cmluZyk6IHZvaWQgPT4ge1xuXHRcdFx0XHRpZiAoc05ld0hhc2gpIHtcblx0XHRcdFx0XHQodGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgRnVuY3Rpb24pKHNOZXdIYXNoKTtcblx0XHRcdFx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzPy5wcmVmZXJyZWRNb2RlICYmIG9TdGFydHVwUGFyYW1ldGVycy5wcmVmZXJyZWRNb2RlWzBdLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMoXCJBVVRPQ1JFQVRFXCIpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuc2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZUNyZWF0ZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0YXN5bmMgX21hbmFnZURlZXBMaW5rU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldERlZXBMaW5rU3RhcnR1cEhhc2goXG5cdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikucm91dGluZyxcblx0XHRcdG9TdGFydHVwUGFyYW1ldGVycyxcblx0XHRcdHRoaXMub01vZGVsLFxuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/LmFwcD8uaW5ib3VuZFBhcmFtZXRlckZvclRhcmdldFJlc29sdXRpb25cblx0XHQpLnRoZW4oKG9EZWVwTGluaykgPT4ge1xuXHRcdFx0bGV0IHNIYXNoO1xuXHRcdFx0aWYgKG9EZWVwTGluay5jb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHNUZWNobmljYWxQYXRoID0gb0RlZXBMaW5rLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNQYXRoID0gdGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dClcblx0XHRcdFx0XHQ/IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dCwgZmFsc2UpIVxuXHRcdFx0XHRcdDogc1RlY2huaWNhbFBhdGg7XG5cblx0XHRcdFx0aWYgKHNTZW1hbnRpY1BhdGggIT09IHNUZWNobmljYWxQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIG1hcHBpbmcgdGVjaG5pY2FsIDwtPiBzZW1hbnRpYyBwYXRoIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgbGF0ZXJcblx0XHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcoeyB0ZWNobmljYWxQYXRoOiBzVGVjaG5pY2FsUGF0aCwgc2VtYW50aWNQYXRoOiBzU2VtYW50aWNQYXRoIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c0hhc2ggPSBzU2VtYW50aWNQYXRoLnN1YnN0cmluZygxKTsgLy8gVG8gcmVtb3ZlIHRoZSBsZWFkaW5nICcvJ1xuXHRcdFx0fSBlbHNlIGlmIChvRGVlcExpbmsuaGFzaCkge1xuXHRcdFx0XHRzSGFzaCA9IG9EZWVwTGluay5oYXNoO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0hhc2gpIHtcblx0XHRcdFx0Ly9SZXBsYWNlIHRoZSBoYXNoIHdpdGggbmV3bHkgY3JlYXRlZCBoYXNoXG5cdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc0hhc2gpO1xuXHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuc2V0U3RhcnR1cE1vZGVEZWVwbGluaygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZWZlcnJlZCBtb2RlIGVkaXQgYnkgYXBwZW5kaW5nIFwiWyZ8P11pLWFjdGlvbj1lZGl0XCIgdG8gdGhlIGhhc2ggaWY6XG5cdCAqIC0gVGhlcmUgaXMgYSByZXN1bHRpbmcgaGFzaCBmcm9tIHRoZSBwcmV2aW91cyBsb2dpYyxcblx0ICogLSBUaGUgcHJlZmVycmVkIG1vZGUgaXMgZWRpdCwgYW5kXG5cdCAqIC0gVGhlIGVudGl0eSBpcyBlZGl0YWJsZVxuXHQgKiBUaGlzIHdvcmtzIGZvciBib3RoIGRlZXAtbGluayBzdGFydHVwICgjQXBwP0lEPW15SWQmcHJlZmVycmVkTW9kZT1lZGl0KSBhbmQgb2JqZWN0IHBhZ2Ugcm91dGluZyAoI0FwcD9wcmVmZXJyZWRNb2RlPWVkaXQmL0VudGl0eShJRCkpLlxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnNcblx0ICogQHBhcmFtIHN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVcblx0ICovXG5cdGFzeW5jIF9tYW5hZ2VkUHJlZmVycmVkTW9kZUVkaXQoc3RhcnR1cFBhcmFtZXRlcnM6IHsgcHJlZmVycmVkTW9kZT86IHN0cmluZ1tdIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCByZXN1bHRpbmdIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IHNob3VsZEVkaXQgPSAhIXN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGU/LlswXT8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoXCJFRElUXCIpO1xuXHRcdGNvbnN0IGVkaXRhYmxlID0gYXdhaXQgQXBwU3RhcnR1cEhlbHBlci52ZXJpZnlFZGl0QW5ub3RhdGlvbnModGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9NZXRhTW9kZWwpO1xuXHRcdGlmIChyZXN1bHRpbmdIYXNoICYmIHNob3VsZEVkaXQgJiYgZWRpdGFibGUpIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IChyZXN1bHRpbmdIYXNoLmluY2x1ZGVzKFwiP1wiKSA/IFwiJlwiIDogXCI/XCIpICsgXCJpLWFjdGlvbj1lZGl0XCI7XG5cdFx0XHQodGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgKGhhc2g6IHN0cmluZykgPT4gdm9pZCkocmVzdWx0aW5nSGFzaCArIHBhcmFtZXRlcik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCk6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4ge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSByb3V0aW5nIGhpbnRzIGZvciB0aGUgY3VycmVudCByb3V0ZS5cblx0ICogQ3VycmVudGx5LCB0aGlzIG9ubHkgY292ZXJzIHRoZSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwIGZyb20gYSBsaXN0IHJlcG9ydCB0byBhbiBvYmplY3QgcGFnZS5cblx0ICogQHJldHVybnMgVGhlIHJvdXRpbmcgaGludHNcblx0ICovXG5cdGdldFJvdXRpbmdIaW50cygpOiBSZWNvcmQ8c3RyaW5nLCB7IHBhcmVudE9mOiBzdHJpbmdbXSB9PiB7XG5cdFx0cmV0dXJuIHRoaXMucm91dGluZ0hpbnRzID8/IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIERyYWZ0IHJvb3QgZW50aXR5IHNldCBvciB0aGUgc3RpY2t5LWVuYWJsZWQgZW50aXR5IHNldC5cblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHJvb3QgRW50aXR5U2V0XG5cdCAqL1xuXHRnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPiB7XG5cdFx0Y29uc3Qgb1JvdXRpbmdTZXJ2aWNlID0gbmV3IFJvdXRpbmdTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9Sb3V0aW5nU2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nU2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BNENNQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQzQkMsY0FBYyxDQUFDLDZDQUE2QyxDQUFDLEVBQUFDLEtBQUEsR0FFNURDLEtBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHUEQsS0FBSyxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdQRixLQUFLLENBQUMsQ0FBQyxFQUFBSCxJQUFBLENBQUFNLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQUFBLFNBQUFULHVCQUFBO01BQUEsSUFBQVUsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQUQsY0FBQSxDQUFBUSxJQUFBLFVBQUFILElBQUE7TUFBQUksMEJBQUEsQ0FBQVIsS0FBQSx3QkFBQVMsV0FBQSxFQUFBVCxLQUFBO01BQUFRLDBCQUFBLENBQUFSLEtBQUEsa0JBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBUSwwQkFBQSxDQUFBUixLQUFBLHVCQUFBVyxZQUFBLEVBQUFYLEtBQUE7TUFBQSxPQUFBQSxLQUFBO0lBQUE7SUFBQVksY0FBQSxDQUFBdEIsc0JBQUEsRUFBQVMsY0FBQTtJQUFBLE9BQUFULHNCQUFBO0VBQUEsRUFQNEJ1QixhQUFhLEdBQUFKLFdBQUEsR0FBQUsseUJBQUEsQ0FBQWhCLE9BQUEsQ0FBQWlCLFNBQUEseUJBQUF0QixLQUFBO0lBQUF1QixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQVQsWUFBQSxHQUFBSSx5QkFBQSxDQUFBaEIsT0FBQSxDQUFBaUIsU0FBQSxtQkFBQXBCLEtBQUE7SUFBQXFCLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBUixZQUFBLEdBQUFHLHlCQUFBLENBQUFoQixPQUFBLENBQUFpQixTQUFBLHdCQUFBbkIsS0FBQTtJQUFBb0IsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFyQixPQUFBLE1BQUFELE1BQUE7RUFBQSxJQWlGckN1QixjQUFjLDBCQUFBQyxRQUFBO0lBQUEsU0FBQUQsZUFBQTtNQUFBLElBQUFFLE1BQUE7TUFBQSxTQUFBQyxLQUFBLEdBQUFyQixTQUFBLENBQUFDLE1BQUEsRUFBQUMsSUFBQSxPQUFBQyxLQUFBLENBQUFrQixLQUFBLEdBQUFDLEtBQUEsTUFBQUEsS0FBQSxHQUFBRCxLQUFBLEVBQUFDLEtBQUE7UUFBQXBCLElBQUEsQ0FBQW9CLEtBQUEsSUFBQXRCLFNBQUEsQ0FBQXNCLEtBQUE7TUFBQTtNQUFBRixNQUFBLEdBQUFELFFBQUEsQ0FBQWQsSUFBQSxVQUFBSCxJQUFBO01BQUFrQixNQUFBLENBK0IxQkcsbUJBQW1CLEdBQTRCLEVBQUU7TUFBQUgsTUFBQSxDQVFqREksT0FBTyxHQUFHLEtBQUs7TUFBQUosTUFBQSxDQUlmSyxzQkFBc0IsR0FBb0IsRUFBRTtNQUFBLE9BQUFMLE1BQUE7SUFBQTtJQUFBTSxRQUFBLENBQUFSLGNBQUEsR0FBQUEsY0FBQTtJQUFBUixjQUFBLENBQUFRLGNBQUEsRUFBQUMsUUFBQTtJQUFBLElBQUFRLE1BQUEsR0FBQVQsY0FBQSxDQUFBTCxTQUFBO0lBQUFjLE1BQUEsQ0FFNUNDLElBQUksR0FBSixTQUFBQSxJQUFJQSxDQUFBLEVBQVM7TUFDWixNQUFNQyxRQUFRLEdBQUcsSUFBSSxDQUFDQyxVQUFVLENBQUMsQ0FBQztNQUNsQyxJQUFJRCxRQUFRLENBQUNFLFNBQVMsS0FBSyxXQUFXLEVBQUU7UUFDdkMsSUFBSSxDQUFDQyxhQUFhLEdBQUdILFFBQVEsQ0FBQ0ksV0FBVztRQUN6QyxJQUFJLENBQUNDLE1BQU0sR0FBRyxJQUFJLENBQUNGLGFBQWEsQ0FBQ0csUUFBUSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDQyxVQUFVLEdBQUcsSUFBSSxDQUFDRixNQUFNLEVBQUVHLFlBQVksQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQ0MsT0FBTyxHQUFHLElBQUksQ0FBQ04sYUFBYSxDQUFDTyxTQUFTLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUNDLFlBQVksR0FBRyxJQUFJLENBQUNSLGFBQWEsQ0FBQ1MsY0FBYyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSXRELHNCQUFzQixDQUFDLENBQUM7UUFFakQsTUFBTXVELGNBQWMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1ksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUNDLE9BQU87UUFDN0UsSUFBSSxDQUFDQywwQkFBMEIsQ0FBQ0gsY0FBZSxDQUFDO1FBRWhELE1BQU1JLFVBQVUsR0FBRyxJQUFJLENBQUNmLGFBQWEsQ0FBQ1ksZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBQ2pFLElBQUksQ0FBQ0ksU0FBUyxHQUFHRCxVQUFVLENBQUNFLGVBQWUsRUFBRUQsU0FBUyxJQUFJLENBQUMsQ0FBQztNQUM3RDtNQUVBLElBQUksQ0FBQ0UsV0FBVyxHQUFHQyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUFBekIsTUFBQSxDQUVEMEIsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUEsRUFBUztNQUNsQixJQUFJLENBQUM3QixPQUFPLEdBQUcsS0FBSztNQUNwQixJQUFJLENBQUNjLE9BQU8sQ0FBQ2dCLGtCQUFrQixDQUFDLElBQUksQ0FBQ0MsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO01BQzdELElBQUksQ0FBQ2pCLE9BQU8sQ0FBQ2tCLHdCQUF3QixDQUFDLElBQUksQ0FBQ0MsdUJBQXVCLEVBQUUsSUFBSSxDQUFDO01BQ3pFLElBQUksQ0FBQ2YsYUFBYSxDQUFDZ0IsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQUEvQixNQUFBLENBRURnQyxJQUFJLEdBQUosU0FBQUEsSUFBSUEsQ0FBQSxFQUFTO01BQ1osSUFBSSxDQUFDakIsYUFBYSxDQUFDa0IsT0FBTyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUFBakMsTUFBQSxDQUVEa0Msd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQ0MsT0FBc0IsRUFBUTtNQUN0RCxJQUFJLENBQUNyQyxzQkFBc0IsQ0FBQ3NDLElBQUksQ0FBQ0QsT0FBTyxDQUFDO0lBQzFDLENBQUM7SUFBQW5DLE1BQUEsQ0FFS3FDLHFCQUFxQixHQUEzQixlQUFNQSxxQkFBcUJBLENBQUEsRUFBa0I7TUFDNUMsTUFBTWIsT0FBTyxDQUFDYyxHQUFHLENBQUMsSUFBSSxDQUFDeEMsc0JBQXNCLENBQUM7TUFDOUMsSUFBSSxDQUFDQSxzQkFBc0IsR0FBRyxFQUFFO0lBQ2pDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQUUsTUFBQSxDQUlBbUIsMEJBQTBCLEdBQTFCLFNBQUFBLDBCQUEwQkEsQ0FBQ0gsY0FBb0MsRUFBUTtNQUN0RSxNQUFNdUIsS0FBSyxHQUFHdkIsY0FBYyxFQUFFd0IsTUFBTSxFQUFFQyxXQUFXLEtBQUssc0JBQXNCOztNQUU1RTtNQUNBLElBQUksQ0FBQ0MsU0FBUyxHQUFHLENBQUMsQ0FBQztNQUNuQixJQUFJMUIsY0FBYyxFQUFFMkIsT0FBTyxFQUFFO1FBQzVCLEtBQUssTUFBTUMsV0FBVyxJQUFJQyxNQUFNLENBQUNDLElBQUksQ0FBQzlCLGNBQWMsQ0FBQzJCLE9BQU8sQ0FBQyxFQUFFO1VBQzlELElBQUksQ0FBQ0QsU0FBUyxDQUFDRSxXQUFXLENBQUMsR0FBR0MsTUFBTSxDQUFDRSxNQUFNLENBQUM7WUFBRUMsVUFBVSxFQUFFSjtVQUFZLENBQUMsRUFBRTVCLGNBQWMsQ0FBQzJCLE9BQU8sQ0FBQ0MsV0FBVyxDQUFDLENBQUM7O1VBRTdHO1VBQ0EsTUFBTUssY0FBYyxHQUFHLElBQUksQ0FBQ1AsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ0ssY0FBYztVQUNqRSxJQUFJQSxjQUFjLEtBQUtDLFNBQVMsRUFBRTtZQUNqQyxJQUFJLENBQUNSLFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUNPLFNBQVMsR0FBRyxJQUFJLENBQUNDLHdCQUF3QixDQUFDSCxjQUFjLEVBQUUsQ0FBQyxDQUFDO1VBQ3pGO1FBQ0Q7TUFDRDtNQUNBLElBQUksQ0FBQ0ksWUFBWSxHQUFHLENBQUMsQ0FBQzs7TUFFdEI7TUFDQSxJQUFJLENBQUNDLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDbEIsSUFBSXRDLGNBQWMsRUFBRXVDLE1BQU0sRUFBRTtRQUMzQixLQUFLLE1BQU1DLGtCQUFrQixJQUFJeEMsY0FBYyxDQUFDdUMsTUFBTSxFQUFFO1VBQ3ZELE1BQU1FLFlBQVksR0FBR0MsZUFBZSxDQUFDRixrQkFBa0IsQ0FBQ0csTUFBTSxDQUFDO1VBQy9ELE1BQU1DLGFBQWEsR0FBR0MsbUJBQW1CLENBQUNMLGtCQUFrQixDQUFDRyxNQUFNLENBQUM7WUFDbkVHLFVBQVUsR0FBR04sa0JBQWtCLENBQUNPLElBQUk7WUFDcENDLGFBQWEsR0FBR1Isa0JBQWtCLENBQUNTLE9BQU87VUFDM0MsSUFBSSxDQUFDRCxhQUFhLEVBQUU7WUFDbkI7VUFDRDtVQUNBO1VBQ0EsSUFBSUEsYUFBYSxDQUFDMUYsTUFBTSxHQUFHLENBQUMsSUFBSTBGLGFBQWEsQ0FBQ0UsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLRixhQUFhLENBQUMxRixNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQy9GNkYsR0FBRyxDQUFDQyxPQUFPLENBQUMscUJBQXFCTixVQUFVLGtDQUFrQ0UsYUFBYSxFQUFFLENBQUM7VUFDOUY7VUFDQSxNQUFNSyxXQUFXLEdBQUcsSUFBSSxDQUFDakIsd0JBQXdCLENBQUNZLGFBQWEsRUFBRSxDQUFDLENBQUM7VUFDbkUsSUFBSSxDQUFDVixRQUFRLENBQUNRLFVBQVUsQ0FBQyxHQUFHO1lBQzNCQyxJQUFJLEVBQUVELFVBQVU7WUFDaEJHLE9BQU8sRUFBRUQsYUFBYTtZQUN0QnJCLE9BQU8sRUFBRWlCLGFBQWE7WUFDdEJVLGVBQWUsRUFBRWIsWUFBWTtZQUM3QmMsVUFBVSxFQUFFRjtVQUNiLENBQUM7O1VBRUQ7VUFDQSxLQUFLLE1BQU1HLElBQUksSUFBSVosYUFBYSxFQUFFO1lBQ2pDLE1BQU1hLGlCQUFpQixHQUFHLElBQUksQ0FBQy9CLFNBQVMsQ0FBQzhCLElBQUksQ0FBQyxDQUFDRSxNQUFNO1lBQ3JELElBQUlELGlCQUFpQixFQUFFO2NBQ3RCYixhQUFhLENBQUN4QixJQUFJLENBQUNxQyxpQkFBaUIsQ0FBQztZQUN0QztVQUNEO1VBRUEsSUFBSSxDQUFDL0IsU0FBUyxDQUFDa0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNlLGNBQWMsR0FBR0MsV0FBVyxDQUFDQyx5QkFBeUIsQ0FBQ2IsYUFBYSxDQUFDYyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFFM0gsSUFBSSxDQUFDdkMsS0FBSyxFQUFFO1lBQ1g7WUFDQSxNQUFNWSxTQUFTLEdBQUcsSUFBSSxDQUFDVCxTQUFTLENBQUNrQixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1QsU0FBUztZQUM1RCxJQUFJQSxTQUFTLEtBQUtELFNBQVMsSUFBSUMsU0FBUyxHQUFHa0IsV0FBVyxFQUFFO2NBQ3ZEO2NBQ0E7Y0FDQSxJQUFJLENBQUMzQixTQUFTLENBQUNrQixhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1QsU0FBUyxHQUFHa0IsV0FBVztZQUN6RDs7WUFFQTtZQUNBLElBQUksQ0FBQzNCLFNBQVMsQ0FBQ2tCLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbUIsUUFBUSxHQUFHLENBQUMsQ0FBQztVQUMvQyxDQUFDLE1BQU0sSUFBSW5CLGFBQWEsQ0FBQ3RGLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDb0UsU0FBUyxDQUFDa0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNvQixrQkFBa0IsS0FBSyxrQkFBa0IsRUFBRTtZQUNwSDtZQUNBO1lBQ0EsSUFBSSxDQUFDdEMsU0FBUyxDQUFDa0IsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNtQixRQUFRLEdBQUcsQ0FBQztVQUM5QyxDQUFDLE1BQU07WUFDTjtZQUNBbkIsYUFBYSxDQUFDcUIsT0FBTyxDQUFFckMsV0FBVyxJQUFLO2NBQ3RDLFFBQVEsSUFBSSxDQUFDRixTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDb0Msa0JBQWtCO2dCQUNyRCxLQUFLLGtCQUFrQjtrQkFDdEIsSUFBSSxDQUFDdEMsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ21DLFFBQVEsR0FBRyxDQUFDO2tCQUN4QztnQkFFRCxLQUFLLGdCQUFnQjtrQkFDcEIsSUFBSSxDQUFDckMsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ21DLFFBQVEsR0FBRyxDQUFDO2tCQUN4QztnQkFFRDtrQkFDQyxJQUFJLENBQUNyQyxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDbUMsUUFBUSxHQUFHLENBQUM7Y0FDMUM7WUFDRCxDQUFDLENBQUM7VUFDSDtRQUNEO01BQ0Q7O01BRUE7TUFDQWxDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ0osU0FBUyxDQUFDLENBQUN1QyxPQUFPLENBQUVyQyxXQUFtQixJQUFLO1FBQzVELElBQUk2QixpQkFBaUIsR0FBRyxJQUFJLENBQUMvQixTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDOEIsTUFBTTtRQUMxRCxPQUFPRCxpQkFBaUIsRUFBRTtVQUN6QixJQUFJLENBQUMvQixTQUFTLENBQUMrQixpQkFBaUIsQ0FBQyxDQUFDdEIsU0FBUyxHQUMxQyxJQUFJLENBQUNULFNBQVMsQ0FBQytCLGlCQUFpQixDQUFDLENBQUN0QixTQUFTLElBQUksSUFBSSxDQUFDVCxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDTyxTQUFTO1VBQ3JGLElBQUksQ0FBQ1QsU0FBUyxDQUFDK0IsaUJBQWlCLENBQUMsQ0FBQ3hCLGNBQWMsR0FDL0MsSUFBSSxDQUFDUCxTQUFTLENBQUMrQixpQkFBaUIsQ0FBQyxDQUFDeEIsY0FBYyxJQUFJLElBQUksQ0FBQ1AsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ0ssY0FBYztVQUMvRixJQUFJLENBQUNQLFNBQVMsQ0FBQytCLGlCQUFpQixDQUFDLENBQUNNLFFBQVEsR0FDekMsSUFBSSxDQUFDckMsU0FBUyxDQUFDK0IsaUJBQWlCLENBQUMsQ0FBQ00sUUFBUSxJQUFJLElBQUksQ0FBQ3JDLFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUNtQyxRQUFRO1VBQ25GLElBQUksQ0FBQ3JDLFNBQVMsQ0FBQytCLGlCQUFpQixDQUFDLENBQUNPLGtCQUFrQixHQUNuRCxJQUFJLENBQUN0QyxTQUFTLENBQUMrQixpQkFBaUIsQ0FBQyxDQUFDTyxrQkFBa0IsSUFBSSxJQUFJLENBQUN0QyxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDb0Msa0JBQWtCO1VBQ3ZHcEMsV0FBVyxHQUFHNkIsaUJBQWlCO1VBQy9CQSxpQkFBaUIsR0FBRyxJQUFJLENBQUMvQixTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDOEIsTUFBTTtRQUN2RDtNQUNELENBQUMsQ0FBQzs7TUFFRjtNQUNBLE1BQU1RLGlCQUFpQixHQUFHLEVBQUU7TUFDNUIsTUFBTUMsaUJBQWlCLEdBQUcsRUFBRTtNQUM1QixJQUFJQyxpQkFBaUI7TUFFckIsS0FBSyxNQUFNQyxLQUFLLElBQUksSUFBSSxDQUFDL0IsUUFBUSxFQUFFO1FBQ2xDLE1BQU1nQyxNQUFNLEdBQUcsSUFBSSxDQUFDaEMsUUFBUSxDQUFDK0IsS0FBSyxDQUFDLENBQUNkLFVBQVU7UUFDOUMsSUFBSWUsTUFBTSxLQUFLLENBQUMsRUFBRTtVQUNqQkosaUJBQWlCLENBQUM5QyxJQUFJLENBQUNpRCxLQUFLLENBQUM7UUFDOUIsQ0FBQyxNQUFNLElBQUlDLE1BQU0sS0FBSyxDQUFDLEVBQUU7VUFDeEJILGlCQUFpQixDQUFDL0MsSUFBSSxDQUFDaUQsS0FBSyxDQUFDO1FBQzlCO01BQ0Q7TUFFQSxJQUFJSCxpQkFBaUIsQ0FBQzVHLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDbkM4RyxpQkFBaUIsR0FBR0YsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO01BQ3pDLENBQUMsTUFBTSxJQUFJQyxpQkFBaUIsQ0FBQzdHLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDMUM4RyxpQkFBaUIsR0FBR0QsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO01BQ3pDO01BRUEsSUFBSUMsaUJBQWlCLEVBQUU7UUFDdEIsTUFBTUcsa0JBQWtCLEdBQUcsSUFBSSxDQUFDakMsUUFBUSxDQUFDOEIsaUJBQWlCLENBQUMsQ0FBQ3pDLE9BQU8sQ0FBQzZDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUNDLFlBQVksR0FBRyxFQUFFO1FBQ3RCLE1BQU1DLFNBQVMsR0FBRyxJQUFJLENBQUNoRCxTQUFTLENBQUM2QyxrQkFBa0IsQ0FBQyxDQUFDSSxPQUFPLEVBQUVDLFFBQTBDO1FBQ3hHLElBQUlGLFNBQVMsRUFBRTtVQUNkLElBQUksQ0FBQ0QsWUFBWSxHQUFHQyxTQUFTLENBQUNHLFdBQVcsSUFBSSxJQUFJSCxTQUFTLENBQUNJLFNBQVMsRUFBRTtRQUN2RTtRQUNBLElBQUksQ0FBQyxJQUFJLENBQUNMLFlBQVksRUFBRTtVQUN2QnRCLEdBQUcsQ0FBQ0MsT0FBTyxDQUNWLDZGQUE2Rm1CLGtCQUFrQixFQUNoSCxDQUFDO1FBQ0Y7TUFDRCxDQUFDLE1BQU07UUFDTnBCLEdBQUcsQ0FBQ0MsT0FBTyxDQUFDLCtEQUErRCxDQUFDO01BQzdFOztNQUVBO01BQ0F2QixNQUFNLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUNKLFNBQVMsQ0FBQyxDQUN6QnFELEdBQUcsQ0FBRUMsVUFBa0IsSUFBSztRQUM1QixPQUFPLElBQUksQ0FBQ3RELFNBQVMsQ0FBQ3NELFVBQVUsQ0FBQztNQUNsQyxDQUFDLENBQUMsQ0FDREMsSUFBSSxDQUFDLENBQUNDLENBQWdCLEVBQUVDLENBQWdCLEtBQUs7UUFDN0MsT0FBT0QsQ0FBQyxDQUFDL0MsU0FBUyxLQUFLRCxTQUFTLElBQUlpRCxDQUFDLENBQUNoRCxTQUFTLEtBQUtELFNBQVMsSUFBSWdELENBQUMsQ0FBQy9DLFNBQVMsR0FBR2dELENBQUMsQ0FBQ2hELFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDO01BQ3BHLENBQUMsQ0FBQyxDQUNEOEIsT0FBTyxDQUFFdEIsTUFBcUIsSUFBSztRQUNuQztRQUNBLElBQUlBLE1BQU0sQ0FBQ2dDLE9BQU8sRUFBRTtVQUNuQixNQUFNQyxRQUFRLEdBQUdqQyxNQUFNLENBQUNnQyxPQUFPLENBQUNDLFFBQThCO1VBQzlELE1BQU1ILFlBQVksR0FBR0csUUFBUSxDQUFDQyxXQUFXLEtBQUtELFFBQVEsQ0FBQ0UsU0FBUyxHQUFHLElBQUlGLFFBQVEsQ0FBQ0UsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO1VBQ2pHLElBQUksQ0FBQ0YsUUFBUSxDQUFDUSxlQUFlLElBQUlYLFlBQVksRUFBRTtZQUM5Q0csUUFBUSxDQUFDUSxlQUFlLEdBQUcsR0FBR1gsWUFBWSxHQUFHO1VBQzlDO1VBQ0EsTUFBTVksUUFBa0IsR0FBRyxFQUFFO1VBQzdCLElBQUkxQyxNQUFNLENBQUNnQixjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDdEIsWUFBWSxDQUFFTSxNQUFNLENBQUNnQixjQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztjQUFFMEIsUUFBUSxFQUFFQTtZQUFTLENBQUM7VUFDeEU7VUFDQXhELE1BQU0sQ0FBQ0MsSUFBSSxDQUFDOEMsUUFBUSxDQUFDVSxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ3JCLE9BQU8sQ0FBRXNCLFFBQWdCLElBQUs7WUFDcEU7WUFDQSxJQUFJLENBQUMsNkJBQTZCLEVBQUUseUJBQXlCLENBQUMsQ0FBQ0MsUUFBUSxDQUFDN0MsTUFBTSxDQUFDSSxJQUFJLENBQUMsRUFBRTtjQUNyRnNDLFFBQVEsQ0FBQ2pFLElBQUksQ0FBQ21FLFFBQVEsQ0FBQztZQUN4QjtZQUNBLE1BQU1FLFdBQVcsR0FBRyxJQUFJLENBQUNuRCxRQUFRLENBQUNzQyxRQUFRLENBQUNVLFVBQVUsQ0FBRUMsUUFBUSxDQUFDLENBQUNHLE1BQU0sRUFBRUMsS0FBSyxDQUFDO1lBRS9FLElBQUlGLFdBQVcsSUFBSUEsV0FBVyxDQUFDOUQsT0FBTyxFQUFFO2NBQ3ZDOEQsV0FBVyxDQUFDOUQsT0FBTyxDQUFDc0MsT0FBTyxDQUFFckMsV0FBbUIsSUFBSztnQkFDcEQsSUFDQyxJQUFJLENBQUNGLFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUMrQyxPQUFPLEVBQUVDLFFBQVEsSUFDN0MsQ0FBQyxJQUFJLENBQUNsRCxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDK0MsT0FBTyxFQUFFQyxRQUFRLEVBQUVRLGVBQWUsRUFDOUQ7a0JBQ0QsSUFBSSxJQUFJLENBQUMxRCxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDK0MsT0FBTyxDQUFFQyxRQUFRLENBQUVDLFdBQVcsRUFBRTtvQkFDL0QsSUFBSSxDQUFDbkQsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQytDLE9BQU8sQ0FBRUMsUUFBUSxDQUFFUSxlQUFlLEdBQzdELElBQUksQ0FBQzFELFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUMrQyxPQUFPLENBQUVDLFFBQVEsQ0FBRUMsV0FBVyxHQUFHLEdBQUc7a0JBQ2xFLENBQUMsTUFBTSxJQUFJbEMsTUFBTSxDQUFDUixTQUFTLEtBQUssQ0FBQyxFQUFFO29CQUNsQyxJQUFJLENBQUNULFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUMrQyxPQUFPLENBQUVDLFFBQVEsQ0FBRVEsZUFBZSxHQUFHLEdBQ2hFLENBQUNHLFFBQVEsQ0FBQ0ssVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUlMLFFBQVEsR0FDOUM7a0JBQ0osQ0FBQyxNQUFNO29CQUNOLElBQUksQ0FBQzdELFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUMrQyxPQUFPLENBQUVDLFFBQVEsQ0FBRVEsZUFBZSxHQUFHLEdBQ2hFUixRQUFRLENBQUNRLGVBQWUsR0FBR0csUUFBUSxHQUNqQztrQkFDSjtnQkFDRDtjQUNELENBQUMsQ0FBQztZQUNIO1VBQ0QsQ0FBQyxDQUFDO1FBQ0g7TUFDRCxDQUFDLENBQUM7SUFDSjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBdkcsTUFBQSxDQU1Bb0Qsd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQ3lELFFBQWdCLEVBQUUxRCxTQUFpQixFQUFVO01BQ3JFMEQsUUFBUSxHQUFHQSxRQUFRLENBQUNDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO01BQzNDLE1BQU1DLEtBQUssR0FBRyxJQUFJQyxNQUFNLENBQUMsU0FBUyxDQUFDO01BQ25DLElBQUlILFFBQVEsSUFBSUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUMzREEsUUFBUSxHQUFHLElBQUlBLFFBQVEsRUFBRTtNQUMxQjtNQUNBLElBQUlBLFFBQVEsQ0FBQ3ZJLE1BQU0sRUFBRTtRQUNwQnVJLFFBQVEsR0FBR0EsUUFBUSxDQUFDQyxPQUFPLENBQUNDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUNwRyxPQUFPLENBQUNzRyxLQUFLLENBQUNKLFFBQVEsQ0FBQyxJQUFJQSxRQUFRLEtBQUssRUFBRSxFQUFFO1VBQ3BELE9BQU8sSUFBSSxDQUFDekQsd0JBQXdCLENBQUN5RCxRQUFRLEVBQUUsRUFBRTFELFNBQVMsQ0FBQztRQUM1RCxDQUFDLE1BQU07VUFDTixPQUFPLElBQUksQ0FBQ0Msd0JBQXdCLENBQUN5RCxRQUFRLEVBQUUxRCxTQUFTLENBQUM7UUFDMUQ7TUFDRCxDQUFDLE1BQU07UUFDTixPQUFPQSxTQUFTO01BQ2pCO0lBQ0QsQ0FBQztJQUFBbkQsTUFBQSxDQUVEa0gsb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQ3BELFVBQW1CLEVBQXVDO01BQzlFLElBQUlBLFVBQVUsS0FBS1osU0FBUyxFQUFFO1FBQzdCLE9BQU9BLFNBQVM7TUFDakI7TUFDQSxPQUFPLElBQUksQ0FBQ0ksUUFBUSxDQUFDUSxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUFBOUQsTUFBQSxDQUVEbUgscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ3ZFLFdBQW9CLEVBQTZCO01BQ3RFLElBQUlBLFdBQVcsS0FBS00sU0FBUyxFQUFFO1FBQzlCLE9BQU9BLFNBQVM7TUFDakI7TUFDQSxPQUFPLElBQUksQ0FBQ1IsU0FBUyxDQUFDRSxXQUFXLENBQUM7SUFDbkMsQ0FBQztJQUFBNUMsTUFBQSxDQUVEb0gsZUFBZSxHQUFmLFNBQUFBLGVBQWVBLENBQUNDLFFBQWdCLEVBQUVDLFlBQW9CLEVBQVU7TUFDL0QsSUFBSUEsWUFBWSxDQUFDcEQsT0FBTyxDQUFDLEdBQUdtRCxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNqRCxPQUFPQyxZQUFZLENBQUNDLFNBQVMsQ0FBQ0YsUUFBUSxDQUFDL0ksTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNuRDtNQUNBLE9BQU9nSixZQUFZO0lBQ3BCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBdEgsTUFBQSxDQUtBd0gsdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQ0MsZUFBaUMsRUFBNkI7TUFDckYsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUNGLGVBQWUsQ0FBQztNQUM3RCxPQUFPLElBQUksQ0FBQ04scUJBQXFCLENBQUNPLGlCQUFpQixDQUFDO0lBQ3JEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBMUgsTUFBQSxDQUtBMkgsYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUNGLGVBQWlDLEVBQXNCO01BQ3BFLE1BQU1HLGlCQUFpQixHQUFHLElBQUksQ0FBQ1IsZUFBZSxDQUM1Q0ssZUFBZSxDQUFzQ0ksU0FBUyxFQUMvREosZUFBZSxDQUFDSyxLQUFLLENBQUMsQ0FDdkIsQ0FBQztNQUNELElBQUlKLGlCQUFxQztNQUN6QzdFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ0osU0FBUyxDQUFDLENBQUN1QyxPQUFPLENBQUVqQyxVQUFrQixJQUFLO1FBQzNELElBQUksSUFBSSxDQUFDTixTQUFTLENBQUNNLFVBQVUsQ0FBQyxDQUFDK0UsRUFBRSxLQUFLSCxpQkFBaUIsSUFBSSxJQUFJLENBQUNsRixTQUFTLENBQUNNLFVBQVUsQ0FBQyxDQUFDZ0YsTUFBTSxLQUFLSixpQkFBaUIsRUFBRTtVQUNuSEYsaUJBQWlCLEdBQUcxRSxVQUFVO1FBQy9CO01BQ0QsQ0FBQyxDQUFDO01BQ0YsT0FBTzBFLGlCQUFpQjtJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTFILE1BQUEsQ0FLQWlJLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUNDLElBQVUsRUFBc0I7TUFDcEQsTUFBTUMsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDSCxJQUFJLENBQUM7TUFDMUQsSUFBSWxGLFVBQVUsR0FBR21GLGFBQWEsR0FBRyxJQUFJLENBQUNSLGFBQWEsQ0FBQ1EsYUFBYSxDQUFDLEdBQUdqRixTQUFTO01BQzlFLElBQUksQ0FBQ0YsVUFBVSxFQUFFO1FBQ2hCQSxVQUFVLEdBQUcsSUFBSSxDQUFDMkUsYUFBYSxDQUFDTyxJQUFJLENBQUM7TUFDdEM7TUFDQSxPQUFPbEYsVUFBVTtJQUNsQixDQUFDO0lBQUFoRCxNQUFBLENBRURzSSxzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUFBLEVBQWdDO01BQ3JELE9BQU8sSUFBSSxDQUFDQyxvQkFBb0I7SUFDakMsQ0FBQztJQUFBdkksTUFBQSxDQUVEd0ksc0JBQXNCLEdBQXRCLFNBQUFBLHNCQUFzQkEsQ0FBQ0MsUUFBMEIsRUFBUTtNQUN4RCxJQUFJLENBQUNGLG9CQUFvQixHQUFHRSxRQUFRO0lBQ3JDLENBQUM7SUFBQXpJLE1BQUEsQ0FFSzBJLGdCQUFnQixHQUF0QixlQUFNQSxnQkFBZ0JBLENBQUNDLE9BQWdCLEVBQUVDLFNBQXdCLEVBQUVDLGdCQUEwQixFQUFtQjtNQUMvRyxJQUFJLENBQUMsSUFBSSxDQUFDaEosT0FBTyxFQUFFO1FBQ2xCLE9BQU8yQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7TUFDM0I7TUFDQSxJQUFJcUgsZ0JBQTZDO01BQ2pELElBQUksQ0FBQ0QsZ0JBQWdCLEVBQUU7UUFDdEI7UUFDQUMsZ0JBQWdCLEdBQUd0SCxPQUFPLENBQUNDLE9BQU8sQ0FBQ3NILGlCQUFpQixDQUFDQyxlQUFlLENBQUNMLE9BQU8sQ0FBQyxDQUFDO01BQy9FLENBQUMsTUFBTTtRQUNORyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNHLGlCQUFpQixDQUFDSixnQkFBZ0IsRUFBeUJELFNBQVMsRUFBRUQsT0FBTyxDQUFDLENBQUNPLElBQUksQ0FDekdDLFVBQThCLElBQUs7VUFDbkMsT0FBTyxJQUFJLENBQUN4SSxPQUFPLENBQUN5SSxNQUFNLENBQUNSLFNBQVMsRUFBR08sVUFBVSxDQUFDO1FBQ25ELENBQ0QsQ0FBQztNQUNGO01BQ0EsT0FBUSxNQUFNTCxnQkFBZ0I7SUFDL0IsQ0FBQztJQUFBOUksTUFBQSxDQTBCS3FKLFVBQVUsR0FBaEIsZUFBTUEsVUFBVUEsQ0FDZm5KLFFBQWlCLEVBQ2pCNEQsVUFBeUIsRUFDekJ3RixpQkFBMEIsRUFDMUJDLGdCQUEwQixFQUMxQkMsWUFBc0IsRUFDUztNQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDM0osT0FBTyxFQUFFO1FBQ2xCLE9BQU8yQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BQ3pCO01BQ0EsSUFBSWdJLGlCQUFpQixFQUFFQyxhQUFzQjtNQUM3QyxJQUFJeEosUUFBUSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxJQUFJTixRQUFRLENBQUNNLFFBQVEsQ0FBQyxDQUFDLENBQUNFLFlBQVksSUFBSVIsUUFBUSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFDRSxZQUFZLENBQUMsQ0FBQyxFQUFFO1FBQ2xHZ0osYUFBYSxHQUFHQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDMUosUUFBUSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFDRSxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ3pGO01BQ0EsSUFBSSxDQUFDNEksaUJBQWlCLEVBQUU7UUFDdkI7UUFDQUcsaUJBQWlCLEdBQUdqSSxPQUFPLENBQUNDLE9BQU8sQ0FBQ3NILGlCQUFpQixDQUFDQyxlQUFlLENBQUM5SSxRQUFRLENBQUMsQ0FBQztNQUNqRixDQUFDLE1BQU07UUFDTnVKLGlCQUFpQixHQUFHLElBQUksQ0FBQ1IsaUJBQWlCLENBQUNLLGlCQUFpQixFQUF5QnhGLFVBQVUsRUFBRTVELFFBQVEsQ0FBQyxDQUFDZ0osSUFBSSxDQUM3R1csV0FBK0IsSUFBSztVQUNwQyxPQUFPLElBQUksQ0FBQ2xKLE9BQU8sQ0FBQ3lJLE1BQU0sQ0FBQ3RGLFVBQVUsRUFBRytGLFdBQVcsQ0FBQztRQUNyRCxDQUNELENBQUM7TUFDRjtNQUNBLE1BQU1DLFNBQVMsR0FBRyxNQUFNTCxpQkFBaUI7TUFDekMsTUFBTU0sb0JBQW9CLEdBQ3hCLElBQUksQ0FBQzFKLGFBQWEsQ0FBQzJKLDBCQUEwQixDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUFrQnJLLE9BQU8sSUFBSSxLQUFLO01BQ2pILE1BQU1zSyxnQkFBZ0IsR0FBR0EsQ0FBQSxLQUFZO1FBQ3BDLElBQUksQ0FBQ3RKLFlBQVksQ0FBQ3VKLFNBQVMsQ0FBQ04sU0FBUyxFQUFHUCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFRyxhQUFhLElBQUlLLG9CQUFvQixDQUFDO01BQy9HLENBQUM7TUFDRCxJQUFJUCxZQUFZLEtBQUssSUFBSSxFQUFFO1FBQzFCLE9BQU9XLGdCQUFnQixDQUFDLENBQUM7TUFDMUIsQ0FBQyxNQUFNO1FBQ04sT0FBT0EsZ0JBQWdCLENBQUMsQ0FBQztNQUMxQjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQW5LLE1BQUEsQ0FPTWlKLGlCQUFpQixHQUF2QixlQUFNQSxpQkFBaUJBLENBQUNZLFdBQWdDLEVBQUVRLFlBQTJCLEVBQUVuSyxRQUFpQixFQUFtQjtNQUMxSCxJQUFJb0ssa0JBQWtCO01BQ3RCLElBQUk7UUFDSCxNQUFNN0UsWUFBWSxHQUFHdkYsUUFBUSxDQUFDcUssT0FBTyxDQUFDLENBQUM7UUFDdkMsTUFBTTlKLFVBQTBCLEdBQUdQLFFBQVEsQ0FBQ00sUUFBUSxDQUFDLENBQUMsQ0FBQ0UsWUFBWSxDQUFDLENBQUM7UUFDckUsTUFBTThKLGlCQUFpQixHQUFHL0UsWUFBWSxDQUFDWCxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ2pELE1BQU0yRiw2QkFBNkIsR0FBRzVILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDK0csV0FBVyxDQUFDLENBQUM5RCxHQUFHLENBQUMsTUFBTzJFLGFBQXFCLElBQUs7VUFDbkcsTUFBTUMsMkJBQTJCLEdBQUdkLFdBQVcsQ0FBQ2EsYUFBYSxDQUFDO1VBQzlEO1VBQ0EsTUFBTUUsaUJBQWlCLEdBQUdDLFdBQVcsQ0FBQ0MsS0FBSyxDQUFDSCwyQkFBMkIsQ0FBQztVQUN4RSxNQUFNSSxNQUFNLEdBQUdILGlCQUFpQixDQUFDSSxLQUFLLElBQUksQ0FBQ0osaUJBQWlCLENBQUM7VUFDN0QsTUFBTUssMEJBQTBCLEdBQUdGLE1BQU0sQ0FBQ2hGLEdBQUcsQ0FBQyxnQkFBZ0JtRixTQUE4QixFQUFFO1lBQzdGLE1BQU1DLGNBQWMsR0FBR0QsU0FBUyxDQUFDRSxJQUFJLENBQUN0RyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ2xEO1lBQ0EsTUFBTXVHLFdBQVcsR0FBR2IsaUJBQWlCLENBQUNoRixLQUFLLENBQUMsQ0FBQyxFQUFFZ0YsaUJBQWlCLENBQUNsTSxNQUFNLEdBQUc2TSxjQUFjLENBQUM3TSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ3BHLE1BQU1nTixnQkFBZ0IsR0FBR0QsV0FBVyxDQUFDRSxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQzlDLE1BQU1DLFlBQVksR0FDakJGLGdCQUFnQixLQUFLcEwsUUFBUSxDQUFDcUssT0FBTyxDQUFDLENBQUMsR0FDcENySyxRQUFRLEdBQ1JBLFFBQVEsQ0FBQ00sUUFBUSxDQUFDLENBQUMsQ0FBQ2lMLFdBQVcsQ0FBQ0gsZ0JBQWdCLENBQUMsQ0FBQ0ksZUFBZSxDQUFDLENBQUM7WUFFdkUsTUFBTUMsWUFBWSxHQUFHbEwsVUFBVSxDQUFDbUwsY0FBYyxDQUFDTixnQkFBZ0IsR0FBRyxHQUFHLEdBQUdILGNBQWMsQ0FBQ0EsY0FBYyxDQUFDN00sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2xILE9BQU9rTixZQUFZLENBQUNLLGVBQWUsQ0FBQ1YsY0FBYyxDQUFDQSxjQUFjLENBQUM3TSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzRLLElBQUksQ0FBQyxVQUFVNEMsTUFBTSxFQUFFO2NBQ3JHLE1BQU1DLGFBQWEsR0FBR0osWUFBWSxDQUFDSyxTQUFTLENBQUMsQ0FBQztjQUM5QyxNQUFNQyxRQUFRLEdBQUdGLGFBQWEsQ0FBQ0csS0FBSztjQUNwQyxPQUFPQyxVQUFVLENBQUNDLGFBQWEsQ0FBQ04sTUFBTSxFQUFFRyxRQUFRLENBQUM7WUFDbEQsQ0FBQyxDQUFDO1VBQ0gsQ0FBQyxDQUFDO1VBRUYsT0FBT3pLLE9BQU8sQ0FBQ2MsR0FBRyxDQUFDMkksMEJBQTBCLENBQUMsQ0FBQy9CLElBQUksQ0FBRW1ELG1CQUF3QyxJQUFLO1lBQ2pHLE1BQU1DLEtBQUssR0FBRzFCLGlCQUFpQixDQUFDMkIsU0FBUyxHQUN0QzNCLGlCQUFpQixDQUFDMkIsU0FBUyxDQUFDQyxLQUFLLENBQUMsSUFBSSxFQUFFSCxtQkFBbUIsQ0FBQyxHQUM1REEsbUJBQW1CLENBQUNkLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0IsT0FBTztjQUFFa0IsR0FBRyxFQUFFL0IsYUFBYTtjQUFFNEIsS0FBSyxFQUFFQTtZQUFNLENBQUM7VUFDNUMsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUZoQyxrQkFBa0IsR0FBRzlJLE9BQU8sQ0FBQ2MsR0FBRyxDQUFDbUksNkJBQTZCLENBQUMsQ0FBQ3ZCLElBQUksQ0FBQyxVQUFVd0Qsc0JBQTRDLEVBQUU7VUFDNUgsTUFBTUMsV0FBb0MsR0FBRyxDQUFDLENBQUM7VUFDL0NELHNCQUFzQixDQUFDekgsT0FBTyxDQUFDLFVBQVUySCxrQkFBc0MsRUFBRTtZQUNoRkQsV0FBVyxDQUFDQyxrQkFBa0IsQ0FBQ0gsR0FBRyxDQUFDLEdBQUdHLGtCQUFrQixDQUFDTixLQUFLO1VBQy9ELENBQUMsQ0FBQztVQUNGLE9BQU9LLFdBQVc7UUFDbkIsQ0FBQyxDQUFDO01BQ0gsQ0FBQyxDQUFDLE9BQU9FLE1BQU0sRUFBRTtRQUNoQjFJLEdBQUcsQ0FBQzJJLEtBQUssQ0FBQyw4REFBOER6QyxZQUFZLEVBQUUsQ0FBQztRQUN2RkMsa0JBQWtCLEdBQUc5SSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUN6QztNQUNBLE9BQU82SSxrQkFBa0I7SUFDMUIsQ0FBQztJQUFBdEssTUFBQSxDQUVEK00scUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ2xELFdBQXlDLEVBQVE7TUFDdEUsSUFBSSxDQUFDL0osc0JBQXNCLEdBQUcsRUFBRTtNQUNoQyxJQUFJLENBQUNpQixhQUFhLENBQUNnQixTQUFTLENBQUMsb0JBQW9CLEVBQUU4SCxXQUFXLENBQUM7TUFDL0QsSUFBSSxDQUFDOUksYUFBYSxDQUFDZ0IsU0FBUyxDQUFDLGNBQWMsRUFBRThILFdBQVcsQ0FBQztNQUN6RCxJQUFJLENBQUM5SSxhQUFhLENBQUNnQixTQUFTLENBQUMsbUJBQW1CLEVBQUU4SCxXQUFXLENBQUM7TUFFOURtRCxTQUFTLENBQUNDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BckJDO0lBQUFqTixNQUFBLENBc0JNa04saUJBQWlCLEdBQXZCLGVBQU1BLGlCQUFpQkEsQ0FDdEJ2RSxPQUFtQyxFQUtoQjtNQUFBLElBSm5CUSxVQUF1QyxHQUFBOUssU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQTZFLFNBQUEsR0FBQTdFLFNBQUEsTUFBRyxDQUFDLENBQUM7TUFBQSxJQUM1QzhPLFFBQWtDLEdBQUE5TyxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBNkUsU0FBQTtNQUFBLElBQ2xDa0ssaUJBQW9DLEdBQUEvTyxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBNkUsU0FBQTtNQUFBLElBQ3BDbUssa0JBQTRCLEdBQUFoUCxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBNkUsU0FBQTtNQUU1QixJQUFJLENBQUMsSUFBSSxDQUFDckQsT0FBTyxFQUFFO1FBQ2xCLE9BQU8yQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUM7TUFDOUI7TUFFQSxJQUFJZ0YsV0FBVyxHQUFHLEVBQUU7TUFDcEIsSUFBSTZHLHNCQUFtRDtNQUN2RCxNQUFNQyxZQUFZLEdBQUc1RCxXQUFXLENBQUNDLHdCQUF3QixDQUFDLElBQUksQ0FBQ25KLFVBQVUsQ0FBQztNQUMxRSxNQUFNc0osb0JBQW9CLEdBQ3hCLElBQUksQ0FBQzFKLGFBQWEsQ0FBQzJKLDBCQUEwQixDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUFrQnJLLE9BQU8sSUFBSSxLQUFLOztNQUVqSDtNQUNBLElBQUlzSixVQUFVLEVBQUVxRSxVQUFVLElBQUlMLFFBQVEsRUFBRTdHLFVBQVUsRUFBRTtRQUNuRCxNQUFNbUgsY0FBYyxHQUFHTixRQUFRLENBQUM3RyxVQUErRTtRQUMvRyxNQUFNb0gsWUFBWSxHQUFHRCxjQUFjLENBQUN0RSxVQUFVLENBQUNxRSxVQUFVLENBQUMsQ0FBQzlHLE1BQU07UUFDakVELFdBQVcsR0FBR2lILFlBQVksQ0FBQy9HLEtBQUs7UUFFaEMsSUFBSStHLFlBQVksQ0FBQ3ZFLFVBQVUsSUFBSVIsT0FBTyxDQUFDZ0YsR0FBRyxDQUFVLCtCQUErQixDQUFDLEVBQUU7VUFDckZMLHNCQUFzQixHQUFHLElBQUksQ0FBQ3JFLGlCQUFpQixDQUM5Q3lFLFlBQVksQ0FBQ3ZFLFVBQVUsRUFDdkIxQyxXQUFXLEVBQ1hrQyxPQUNELENBQUM7UUFDRjtNQUNEO01BRUEsSUFBSWlGLFdBQVcsR0FBRyxJQUFJLENBQUNDLG1CQUFtQixDQUFDbEYsT0FBTyxFQUFFUSxVQUFVLENBQUM7TUFDL0Q7TUFDQTtNQUNBLElBQUl5RSxXQUFXLENBQUN0UCxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQ3dQLHlCQUF5QixFQUFFO1FBQy9ELElBQUksQ0FBQ2pOLFlBQVksQ0FBQ2tOLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLE9BQU92TSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7TUFDN0I7O01BRUE7TUFDQSxJQUFJMEgsVUFBVSxFQUFFNkUsMEJBQTBCLEVBQUU7UUFDM0NKLFdBQVcsSUFBSSxPQUFPO01BQ3ZCOztNQUVBO01BQ0EsTUFBTUssT0FBTyxHQUFHLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNOLFdBQVcsRUFBRXpFLFVBQVUsQ0FBQztNQUM5RCxJQUFJOEUsT0FBTyxFQUFFO1FBQ1pMLFdBQVcsSUFBSSxXQUFXSyxPQUFPLEVBQUU7TUFDcEM7O01BRUE7TUFDQSxNQUFNRSxlQUFzQyxHQUFHO1FBQzlDSCwwQkFBMEIsRUFBRTdFLFVBQVUsQ0FBQzZFLDBCQUEwQjtRQUNqRUksZUFBZSxFQUFFakYsVUFBVSxFQUFFa0YsUUFBUTtRQUNyQ0MsZ0JBQWdCLEVBQUVuRixVQUFVLEVBQUVvRixlQUFlO1FBQzdDQyxnQkFBZ0IsRUFBRXJGLFVBQVUsRUFBRXNGLGVBQWUsS0FBS3ZMLFNBQVMsR0FBR2lHLFVBQVUsRUFBRXNGLGVBQWUsR0FBRyxJQUFJO1FBQ2hHQyxNQUFNLEVBQUV2RixVQUFVLEVBQUV1RixNQUFNO1FBQzFCQyxvQkFBb0IsRUFBRXhGLFVBQVUsQ0FBQ3dGO01BQ2xDLENBQUM7TUFFRCxJQUFJeEYsVUFBVSxFQUFFeUYsY0FBYyxLQUFLLENBQUMsQ0FBQyxJQUFJekYsVUFBVSxFQUFFMEYsZUFBZSxLQUFLLElBQUksRUFBRTtRQUM5RSxJQUFJbEcsT0FBTyxDQUFDZ0YsR0FBRyxDQUFVLCtCQUErQixDQUFDLEVBQUU7VUFDMURRLGVBQWUsQ0FBQ1csVUFBVSxHQUFHbkcsT0FBTztRQUNyQztNQUNEO01BRUEsSUFBSVEsVUFBVSxFQUFFNEYsaUJBQWlCLEVBQUU7UUFDbEM7UUFDQSxNQUFNQyxzQkFBc0IsR0FBRyxJQUFJLENBQUNuTyxZQUFZLENBQUNvTyxPQUFPLENBQUMsQ0FBQyxDQUFDbkksT0FBTyxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsQ0FBQztRQUN6RyxJQUFJOEcsV0FBVyxLQUFLb0Isc0JBQXNCLEVBQUU7VUFDM0M7VUFDQSxNQUFNRSxlQUFlLEdBQUcsSUFBSSxDQUFDdk8sT0FBTyxDQUFDd08sa0JBQWtCLENBQUMsSUFBSSxDQUFDdE8sWUFBWSxDQUFDb08sT0FBTyxDQUFDLENBQUMsQ0FBQztVQUNwRixJQUFJRyxnQkFBd0MsR0FBRztZQUFFNU0sTUFBTSxFQUFFLENBQUM7VUFBRSxDQUFDO1VBQzdELElBQUkwTSxlQUFlLEVBQUU7WUFDcEJFLGdCQUFnQixHQUFHO2NBQUUsR0FBR0YsZUFBZTtjQUFFMU0sTUFBTSxFQUFFLENBQUM7WUFBRSxDQUFDO1lBQ3JENE0sZ0JBQWdCLENBQUMzQixjQUFjLEdBQUdVLGVBQWU7WUFDakRpQixnQkFBZ0IsQ0FBQ0MsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDbkksb0JBQW9CLENBQUMsSUFBSSxDQUFDb0ksaUJBQWlCLENBQUM7WUFDckZGLGdCQUFnQixDQUFDRyxZQUFZLEdBQUcsSUFBSSxDQUFDQyxvQkFBb0I7WUFDekRKLGdCQUFnQixDQUFDSyxLQUFLLEdBQUcsSUFBSSxDQUFDQyxhQUFhO1VBQzVDO1VBRUEsSUFBSSxDQUFDN08sWUFBWSxDQUFDOE8sY0FBYyxDQUFDLENBQUMsQ0FBQ3hHLFVBQVUsQ0FBQ3lHLFVBQVUsQ0FBQztVQUV6RCxJQUFJLENBQUM3QyxxQkFBcUIsQ0FBQ3FDLGdCQUFnQixDQUFDO1VBRTVDLE9BQU81TixPQUFPLENBQUNDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDN0I7TUFDRDtNQUVBLElBQUkwSCxVQUFVLEVBQUUwRyxTQUFTLElBQUksQ0FBQyxDQUFDMUcsVUFBVSxDQUFDa0YsUUFBUSxJQUFJLENBQUNULFdBQVcsQ0FBQ3BILFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyRixJQUFJb0gsV0FBVyxDQUFDcEgsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1VBQzlCb0gsV0FBVyxJQUFJLGtCQUFrQjtRQUNsQyxDQUFDLE1BQU07VUFDTkEsV0FBVyxJQUFJLGtCQUFrQjtRQUNsQztNQUNEO01BRUEsSUFBSXpFLFVBQVUsQ0FBQzJHLE9BQU8sS0FBSyxjQUFjLEVBQUU7UUFDMUM7UUFDQUMsR0FBRyxDQUFDQyxFQUFFLENBQUNDLE9BQU8sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsTUFBT0MsU0FBb0IsSUFBSztVQUN4RSxNQUFNQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM5UCxhQUFhLENBQUMrUCxnQkFBZ0IsQ0FBQyxDQUFDO1VBQ2hFLE1BQU1DLFNBQVMsR0FBR0Ysa0JBQWtCLENBQUNHLGNBQWMsQ0FBQ0MsUUFBUSxDQUFDQyxRQUFRLENBQUNDLElBQUksQ0FBQztVQUMzRSxNQUFNQyxpQkFBaUIsR0FBSSxNQUFNUixTQUFTLENBQUNTLGVBQWUsQ0FBQyxZQUFZLENBQWdCO1VBQ3ZGLE1BQU1DLElBQUksR0FBRyxNQUFNRixpQkFBaUIsQ0FBQ0csT0FBTyxDQUFDO1lBQzVDbE4sTUFBTSxFQUFFO2NBQ1BtTixjQUFjLEVBQUVULFNBQVMsQ0FBQ1MsY0FBYztjQUN4Q0MsTUFBTSxFQUFFVixTQUFTLENBQUNVO1lBQ25CLENBQUM7WUFDREMsTUFBTSxFQUFFWCxTQUFTLENBQUNXO1VBQ25CLENBQUMsQ0FBQztVQUNGLE1BQU1DLDJCQUEyQixHQUFHLE1BQU1kLGtCQUFrQixDQUFDZSxhQUFhLENBQUMsQ0FBQztVQUM1RSxJQUFJQyxHQUFHLEVBQUVySCxTQUFpQjtVQUMxQixJQUFJbUgsMkJBQTJCLEVBQUU7WUFDaENFLEdBQUcsR0FBRyxJQUFJQyxHQUFHLENBQUNILDJCQUEyQixDQUFDO1lBQzFDbkgsU0FBUyxHQUFHbUgsMkJBQTJCLENBQUNuSyxPQUFPLENBQUNxSyxHQUFHLENBQUNWLElBQUksRUFBRSxHQUFHRyxJQUFJLEtBQUtTLFNBQVMsQ0FBQ3pELFdBQVcsQ0FBQyxFQUFFLENBQUM7VUFDaEcsQ0FBQyxNQUFNO1lBQ051RCxHQUFHLEdBQUcsSUFBSUMsR0FBRyxDQUFDRSxNQUFNLENBQUNkLFFBQVEsQ0FBQ0ksSUFBSSxDQUFDO1lBQ25DOUcsU0FBUyxHQUFHLEdBQUdxSCxHQUFHLENBQUNJLE1BQU0sR0FBR0osR0FBRyxDQUFDSyxRQUFRLEdBQUdaLElBQUksS0FBS1MsU0FBUyxDQUFDekQsV0FBVyxDQUFDLEVBQUU7VUFDN0U7VUFDQTZELFVBQVUsQ0FBQzNILFNBQVMsQ0FBQztRQUN0QixDQUFDLENBQUM7UUFDRixPQUFPdEksT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCLENBQUMsTUFBTTtRQUNOO1FBQ0E7UUFDQSxJQUFJMkwsaUJBQWlCLEVBQUVySixJQUFJLElBQUksQ0FBQyw2QkFBNkIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDeUMsUUFBUSxDQUFDNEcsaUJBQWlCLENBQUNySixJQUFJLENBQUMsRUFBRTtVQUMzSCxNQUFNMk4sVUFBVSxHQUFHLElBQUksQ0FBQy9RLE9BQU8sQ0FBQ3dPLGtCQUFrQixDQUFDdkIsV0FBVyxDQUFDO1VBQy9ELElBQUk4RCxVQUFVLEVBQUU7WUFDZixNQUFNQyxNQUFNLEdBQUcsSUFBSSxDQUFDekssb0JBQW9CLENBQUN3SyxVQUFVLENBQUMzTixJQUFJLENBQUM7WUFDekQsSUFBSTROLE1BQU0sSUFBSUEsTUFBTSxDQUFDaFAsT0FBTyxJQUFJZ1AsTUFBTSxDQUFDaFAsT0FBTyxDQUFDckUsTUFBTSxHQUFHLENBQUMsRUFBRTtjQUMxRCxNQUFNc1QsZUFBZSxHQUFHRCxNQUFNLENBQUNoUCxPQUFPLENBQUNnUCxNQUFNLENBQUNoUCxPQUFPLENBQUNyRSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2NBQ2pFLE1BQU11VCxPQUFPLEdBQUcsSUFBSSxDQUFDMUsscUJBQXFCLENBQUN5SyxlQUFlLENBQUM7Y0FDM0QsSUFBSUMsT0FBTyxJQUFJQSxPQUFPLENBQUM5TixJQUFJLEtBQUssNkJBQTZCLEVBQUU7Z0JBQzlEK04sZUFBZSxDQUFDQywrQkFBK0IsQ0FBQyxDQUFDO2NBQ2xEO1lBQ0Q7VUFDRDtRQUNEOztRQUVBO1FBQ0EsSUFBSSxDQUFDblMsbUJBQW1CLENBQUN3QyxJQUFJLENBQUMrTCxlQUFlLENBQUM7UUFFOUMsSUFBSTFILFdBQVcsSUFBSTZHLHNCQUFzQixFQUFFO1VBQzFDLE9BQU9BLHNCQUFzQixDQUFDcEUsSUFBSSxDQUFFOEksZ0JBQXdCLElBQUs7WUFDaEVuUCxNQUFNLENBQUNFLE1BQU0sQ0FBQ2lQLGdCQUFnQixFQUFFO2NBQUV0SSxhQUFhLEVBQUU2RCxZQUFZO2NBQUV4RDtZQUFxQixDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDcEosT0FBTyxDQUFDc1IsS0FBSyxDQUFDeEwsV0FBVyxFQUFFdUwsZ0JBQWdCLENBQUM7WUFDakQsT0FBTyxJQUFJO1VBQ1osQ0FBQyxDQUFDO1FBQ0g7UUFDQSxPQUFPLElBQUksQ0FBQ25SLFlBQVksQ0FDdEJ1SixTQUFTLENBQ1R3RCxXQUFXLEVBQ1gsQ0FBQyxDQUFDekUsVUFBVSxDQUFDK0ksZUFBZSxFQUM1Qi9JLFVBQVUsRUFBRWdKLG1CQUFtQixFQUMvQmhKLFVBQVUsRUFBRXlHLFVBQVUsRUFDdEJyQyxZQUFZLElBQUl4RCxvQkFBb0IsRUFDcENzRCxrQkFDRCxDQUFDLENBQ0FuRSxJQUFJLENBQUVrSixVQUFVLElBQUs7VUFDckIsSUFBSSxDQUFDQSxVQUFVLEVBQUU7WUFDaEI7WUFDQSxJQUFJLENBQUN4UyxtQkFBbUIsQ0FBQ3lTLEdBQUcsQ0FBQyxDQUFDO1VBQy9CO1VBQ0EsT0FBT0QsVUFBVTtRQUNsQixDQUFDLENBQUM7TUFDSjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQXBTLE1BQUEsQ0FVTXNTLGVBQWUsR0FBckIsZUFBTUEsZUFBZUEsQ0FDcEJDLGdCQUF3QixFQUN4QlAsZ0JBQXlHLEVBQ3RGO01BQ25CLElBQUksQ0FBQyxJQUFJLENBQUNuUyxPQUFPLEVBQUU7UUFDbEIsT0FBTzJCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztNQUM5QjtNQUNBLElBQUksQ0FBQytHLHNCQUFzQixDQUFDdEYsU0FBUyxDQUFDO01BQ3RDLE1BQU1zUCxVQUFVLEdBQUcsSUFBSSxDQUFDN1IsT0FBTyxDQUFDeUksTUFBTSxDQUFDbUosZ0JBQWdCLEVBQUVQLGdCQUFnQixDQUFDO01BQzFFLE9BQU8sSUFBSSxDQUFDblIsWUFBWSxDQUFDdUosU0FBUyxDQUNqQ29JLFVBQVUsRUFDVixDQUFDLENBQUNSLGdCQUFnQixFQUFFRSxlQUFlLEVBQ25DaFAsU0FBUyxFQUNUQSxTQUFTLEVBQ1QsQ0FBQzhPLGdCQUFnQixFQUFFdEksYUFBYSxJQUFJLEtBQUssTUFBTXNJLGdCQUFnQixFQUFFakksb0JBQW9CLElBQUksS0FBSyxDQUMvRixDQUFDO0lBQ0Y7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEvSixNQUFBLENBS0F5Uyx3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFDdlMsUUFBaUIsRUFBVztNQUNwRCxNQUFNd1MsS0FBSyxHQUFHeFMsUUFBUSxDQUFDcUssT0FBTyxDQUFDLENBQUM7O01BRWhDO01BQ0E7TUFDQSxJQUFJLElBQUksQ0FBQzFKLFlBQVksQ0FBQzRSLHdCQUF3QixDQUFDQyxLQUFLLENBQUMsRUFBRTtRQUN0RCxPQUFPLElBQUk7TUFDWixDQUFDLE1BQU0sSUFBSSxvQkFBb0IsQ0FBQ0MsSUFBSSxDQUFDRCxLQUFLLENBQUMsRUFBRTtRQUM1QztRQUNBO1FBQ0EsSUFBSUUsYUFBYTtRQUNqQixJQUFJLElBQUksQ0FBQ3JLLG9CQUFvQixJQUFJLElBQUksQ0FBQ0Esb0JBQW9CLENBQUNzSyxhQUFhLEtBQUtILEtBQUssRUFBRTtVQUNuRjtVQUNBRSxhQUFhLEdBQUcsSUFBSSxDQUFDckssb0JBQW9CLENBQUN1SyxZQUFZO1FBQ3ZELENBQUMsTUFBTTtVQUNORixhQUFhLEdBQUc3SixpQkFBaUIsQ0FBQ0MsZUFBZSxDQUFDOUksUUFBUSxDQUFFO1FBQzdEO1FBRUEsT0FBTzBTLGFBQWEsSUFBSUYsS0FBSyxHQUFHLElBQUksQ0FBQzdSLFlBQVksQ0FBQzRSLHdCQUF3QixDQUFDRyxhQUFhLENBQUMsR0FBRyxLQUFLO01BQ2xHLENBQUMsTUFBTTtRQUNOLE9BQU8sS0FBSztNQUNiO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUE1UyxNQUFBLENBS0ErUyxxQkFBcUIsR0FBckIsU0FBQUEscUJBQXFCQSxDQUFDTCxLQUFhLEVBQVU7TUFDNUMsTUFBTTNMLEtBQUssR0FBRyxJQUFJQyxNQUFNLENBQUMsU0FBUyxDQUFDO01BQ25DMEwsS0FBSyxHQUFHQSxLQUFLLENBQUM1TCxPQUFPLENBQUNDLEtBQUssRUFBRSxFQUFFLENBQUM7TUFDaEMsSUFBSSxJQUFJLENBQUNwRyxPQUFPLENBQUNzRyxLQUFLLENBQUN5TCxLQUFLLENBQUMsSUFBSUEsS0FBSyxLQUFLLEVBQUUsRUFBRTtRQUM5QyxPQUFPQSxLQUFLO01BQ2IsQ0FBQyxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUNLLHFCQUFxQixDQUFDTCxLQUFLLENBQUM7TUFDekM7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTFTLE1BQUEsQ0FLQWdULG1DQUFtQyxHQUFuQyxTQUFBQSxtQ0FBbUNBLENBQUNySyxPQUFnQixFQUFXO01BQzlEO01BQ0EsSUFBSSxDQUFDLG9CQUFvQixDQUFDZ0ssSUFBSSxDQUFDaEssT0FBTyxDQUFDNEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2xELE9BQU8sS0FBSztNQUNiOztNQUVBO01BQ0EsTUFBTTBJLFNBQVMsR0FBR3RLLE9BQU8sQ0FBQ25JLFFBQVEsQ0FBQyxDQUFDLENBQUNFLFlBQVksQ0FBQyxDQUFDO01BQ25ELE1BQU1vRixTQUFTLEdBQUdvTixrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQUNGLFNBQVMsQ0FBQ3JILGNBQWMsQ0FBQ2pELE9BQU8sQ0FBQzRCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUMzRzZJLFlBQXlCO01BRTNCLElBQUksQ0FBQ3pKLFdBQVcsQ0FBQzBKLFdBQVcsQ0FBQ3ZOLFNBQVMsQ0FBQyxFQUFFO1FBQ3hDLE9BQU8sS0FBSztNQUNiOztNQUVBO01BQ0EsSUFBSTZDLE9BQU8sQ0FBQzJLLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEtBQUssSUFBSTNLLE9BQU8sQ0FBQzJLLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUN4RyxPQUFPLEtBQUs7TUFDYjs7TUFFQTtNQUNBLE1BQU1DLGFBQWEsR0FBR3pOLFNBQVMsQ0FBQy9CLElBQUk7TUFDcEMsT0FBT2dGLGlCQUFpQixDQUFDeUssZUFBZSxDQUFDUCxTQUFTLEVBQUVNLGFBQWEsQ0FBQyxLQUFLclEsU0FBUztJQUNqRixDQUFDO0lBQUFsRCxNQUFBLENBRUQ2TixtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFDbEYsT0FBbUMsRUFBRVEsVUFBdUMsRUFBVTtNQUN6RyxJQUFJdUosS0FBSyxHQUFHLEVBQUU7TUFFZCxJQUFJL0osT0FBTyxDQUFDZ0YsR0FBRyxDQUFtQix3Q0FBd0MsQ0FBQyxFQUFFO1FBQzVFK0UsS0FBSyxHQUFHL0osT0FBTyxDQUFDOEssZ0JBQWdCLENBQUMsQ0FBQyxFQUFFbEosT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO01BQ3BELENBQUMsTUFBTTtRQUNObUksS0FBSyxHQUFHL0osT0FBTyxDQUFDNEIsT0FBTyxDQUFDLENBQUM7UUFFekIsSUFBSXBCLFVBQVUsQ0FBQ3lGLGNBQWMsS0FBSyxDQUFDLENBQUMsRUFBRTtVQUNyQztVQUNBOEQsS0FBSyxHQUFHLElBQUksQ0FBQ0sscUJBQXFCLENBQUNMLEtBQUssQ0FBQzs7VUFFekM7VUFDQSxJQUFJLElBQUksQ0FBQ25LLG9CQUFvQixFQUFFc0ssYUFBYSxLQUFLSCxLQUFLLEVBQUU7WUFDdkRBLEtBQUssR0FBRyxJQUFJLENBQUNuSyxvQkFBb0IsQ0FBQ3VLLFlBQVk7VUFDL0M7UUFDRCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNFLG1DQUFtQyxDQUFDckssT0FBTyxDQUFDLEVBQUU7VUFDN0Q7VUFDQSxNQUFNaUssYUFBYSxHQUFHekosVUFBVSxDQUFDMkosWUFBWSxHQUFHM0osVUFBVSxDQUFDMkosWUFBWSxHQUFHL0osaUJBQWlCLENBQUNDLGVBQWUsQ0FBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQztVQUUxSCxJQUFJLENBQUNpSyxhQUFhLEVBQUU7WUFDbkI7WUFDQTtZQUNBO1lBQ0EsSUFBSSxDQUFDcEssc0JBQXNCLENBQUN0RixTQUFTLENBQUM7VUFDdkMsQ0FBQyxNQUFNLElBQUkwUCxhQUFhLEtBQUtGLEtBQUssRUFBRTtZQUNuQztZQUNBLElBQUksQ0FBQ2xLLHNCQUFzQixDQUFDO2NBQUVxSyxhQUFhLEVBQUVILEtBQUs7Y0FBRUksWUFBWSxFQUFFRjtZQUFjLENBQUMsQ0FBQztZQUNsRkYsS0FBSyxHQUFHRSxhQUFhO1VBQ3RCO1FBQ0Q7TUFDRDs7TUFFQTtNQUNBLElBQUlGLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDckJBLEtBQUssR0FBR0EsS0FBSyxDQUFDbkwsU0FBUyxDQUFDLENBQUMsQ0FBQztNQUMzQjtNQUVBLE9BQU9tTCxLQUFLO0lBQ2IsQ0FBQztJQUFBMVMsTUFBQSxDQUVEa08sZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQ3VDLElBQVksRUFBRXRILFVBQXVDLEVBQVU7TUFDL0U7TUFDQSxJQUFJQSxVQUFVLENBQUMyRyxPQUFPLEtBQUssY0FBYyxJQUFJM0csVUFBVSxDQUFDcEUsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ3hFLE9BQU9vRSxVQUFVLENBQUNwRSxRQUFRLEtBQUssQ0FBQyxHQUFHLHFCQUFxQixHQUFHLHFCQUFxQjtNQUNqRjtNQUNBLElBQUlBLFFBQVEsR0FBR29FLFVBQVUsQ0FBQ3BFLFFBQVEsSUFBSSxDQUFDO01BQ3ZDLElBQUlvRSxVQUFVLENBQUN5RixjQUFjLEVBQUU7UUFDOUI3SixRQUFRLElBQUlvRSxVQUFVLENBQUN5RixjQUFjO1FBQ3JDLElBQUk3SixRQUFRLEdBQUcsQ0FBQyxFQUFFO1VBQ2pCQSxRQUFRLEdBQUcsQ0FBQztRQUNiO01BQ0Q7O01BRUE7TUFDQTtNQUNBLElBQUlvRSxVQUFVLENBQUN5RixjQUFjLEtBQUsxTCxTQUFTLElBQUlpRyxVQUFVLENBQUN5RixjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUN6RixVQUFVLENBQUN1SyxNQUFNLEVBQUU7UUFDbkd2SyxVQUFVLENBQUN1SyxNQUFNLEdBQUcsSUFBSSxDQUFDN1MsWUFBWSxDQUFDOFMsaUJBQWlCLENBQUNsRCxJQUFJLENBQUM7TUFDOUQ7TUFFQSxPQUFPLElBQUksQ0FBQ3BRLGFBQWEsQ0FBQ3VULHFCQUFxQixDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDOU8sUUFBUSxFQUFFMEwsSUFBSSxFQUFFdEgsVUFBVSxDQUFDdUssTUFBTSxFQUFFdkssVUFBVSxDQUFDMkssaUJBQWlCLENBQUM7SUFDbkk7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBOVQsTUFBQSxDQUlBK1QscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ0MsTUFBZ0MsRUFBUTtNQUM3RCxNQUFNQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM1VCxhQUFhLENBQUM2VCx1QkFBdUIsQ0FBQyxDQUFDO01BQ3pFRCxvQkFBb0IsQ0FBQ0UsUUFBUSxDQUM1QkgsTUFBTSxDQUFDSSxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQzdCSixNQUFNLENBQUNJLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFDaEMsSUFBSSxDQUFDL1QsYUFDTixDQUFDO01BRUQsTUFBTWdVLG1CQUFtQixHQUFHLElBQUlDLFdBQVcsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDcEUsSUFBSSxDQUFDRixtQkFBbUIsRUFBRTtRQUN6QixNQUFNRyxTQUFTLEdBQUcsSUFBSSxDQUFDblUsYUFBYSxDQUFDb1UsY0FBYyxDQUFDLENBQUM7UUFDckRDLFVBQVUsQ0FBQ0MsSUFBSSxDQUFDSCxTQUFTLENBQUM7TUFDM0I7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF4VSxNQUFBLENBSUE0VSxtQ0FBbUMsR0FBbkMsU0FBQUEsbUNBQW1DQSxDQUFBLEVBQVk7TUFDOUM7TUFDQSxPQUFPQyxPQUFPLENBQUNDLEtBQUssRUFBRUMsT0FBTyxLQUFLN1IsU0FBUztJQUM1Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWxELE1BQUEsQ0FLQWdWLGVBQWUsR0FBZixTQUFBQSxlQUFlQSxDQUFDaEIsTUFBZ0MsRUFBUTtNQUN2RCxNQUFNaUIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDNVUsYUFBYSxDQUFDNlUsa0JBQWtCLENBQUMsQ0FBQztRQUMvRFYsU0FBUyxHQUFHLElBQUksQ0FBQ25VLGFBQWEsQ0FBQ29VLGNBQWMsQ0FBQyxDQUFDO01BQ2hELE1BQU1KLG1CQUFtQixHQUFHLElBQUlDLFdBQVcsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDcEUsSUFBSUcsVUFBVSxDQUFDUyxRQUFRLENBQUNYLFNBQVMsQ0FBQyxJQUFJLENBQUNILG1CQUFtQixFQUFFO1FBQzNESyxVQUFVLENBQUNVLE1BQU0sQ0FBQ1osU0FBUyxDQUFDO01BQzdCO01BQ0EsTUFBTTNLLFdBQW1DLEdBQUdtSyxNQUFNLENBQUNxQixhQUFhLENBQUMsQ0FBMkI7TUFDNUYsSUFBSSxJQUFJLENBQUN6VixtQkFBbUIsQ0FBQ3RCLE1BQU0sRUFBRTtRQUNwQ3VMLFdBQVcsQ0FBQzRELGNBQWMsR0FBRyxJQUFJLENBQUM3TixtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDQSxtQkFBbUIsR0FBRyxJQUFJLENBQUNBLG1CQUFtQixDQUFDNEYsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUM3RCxDQUFDLE1BQU07UUFDTnFFLFdBQVcsQ0FBQzRELGNBQWMsR0FBRyxDQUFDLENBQUM7TUFDaEM7TUFDQSxJQUFJd0gsZ0JBQWdCLENBQUNLLHlCQUF5QixDQUFDLENBQUMsRUFBRTtRQUNqRHpMLFdBQVcsQ0FBQzRELGNBQWMsQ0FBQ2lCLE1BQU0sR0FBRzZHLGdCQUFnQixDQUFDQyxlQUFlO1FBQ3BFUCxnQkFBZ0IsQ0FBQ1EsdUJBQXVCLENBQUMsQ0FBQztNQUMzQyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUM1VSxZQUFZLENBQUM2VSwrQkFBK0IsQ0FBQyxDQUFDLEVBQUU7UUFDL0Q3TCxXQUFXLENBQUM0RCxjQUFjLENBQUNpQixNQUFNLEdBQUc2RyxnQkFBZ0IsQ0FBQ0ksY0FBYztRQUNuRSxJQUFJLENBQUM5VSxZQUFZLENBQUMrVSx1QkFBdUIsQ0FBQyxDQUFDO01BQzVDO01BRUEsSUFBSSxDQUFDdEcsaUJBQWlCLEdBQUcwRSxNQUFNLENBQUNJLFlBQVksQ0FBQyxNQUFNLENBQUM7TUFDcEQsSUFBSSxDQUFDNUUsb0JBQW9CLEdBQUczRixXQUFXLENBQUNySCxNQUFNLENBQUN5QixPQUFPO01BQ3RELElBQUksQ0FBQ3lMLGFBQWEsR0FBR3NFLE1BQU0sQ0FBQ0ksWUFBWSxDQUFDLE9BQU8sQ0FBQztNQUVqRHZLLFdBQVcsQ0FBQ3dGLGdCQUFnQixHQUFHLElBQUksQ0FBQ25JLG9CQUFvQixDQUFDLElBQUksQ0FBQ29JLGlCQUFpQixDQUFDO01BQ2hGekYsV0FBVyxDQUFDMEYsWUFBWSxHQUFHLElBQUksQ0FBQ0Msb0JBQW9CO01BRXBELElBQUksQ0FBQ3pDLHFCQUFxQixDQUFDbEQsV0FBVyxDQUFDOztNQUV2QztNQUNBO01BQ0EsSUFBSSxDQUFDLElBQUksQ0FBQytLLG1DQUFtQyxDQUFDLENBQUMsRUFBRTtRQUNoRCxJQUFJLENBQUMvVCxZQUFZLENBQ2ZnVixjQUFjLENBQUMsQ0FBQyxDQUNoQjNNLElBQUksQ0FBQyxNQUFZO1VBQ2pCLElBQUksQ0FBQ3JJLFlBQVksQ0FBQ2lWLGlCQUFpQixDQUFDLENBQUM7VUFDckM7UUFDRCxDQUFDLENBQUMsQ0FDREMsS0FBSyxDQUFDLFVBQVVsSixNQUFlLEVBQUU7VUFDakMxSSxHQUFHLENBQUMySSxLQUFLLENBQUMsK0JBQStCLEVBQUVELE1BQWdCLENBQUM7UUFDN0QsQ0FBQyxDQUFDO01BQ0osQ0FBQyxNQUFNO1FBQ04sSUFBSSxDQUFDaE0sWUFBWSxDQUFDaVYsaUJBQWlCLENBQUMsQ0FBQztNQUN0QztJQUNELENBQUM7SUFBQTlWLE1BQUEsQ0FFRGdXLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUNDLEtBQWEsRUFBRUMsVUFBb0IsRUFBRUMsU0FBa0IsRUFBUTtNQUNqRixJQUFJLENBQUNwVixhQUFhLENBQUNxVixXQUFXLENBQUMsY0FBYyxFQUFFSCxLQUFLLEVBQUVDLFVBQVUsRUFBRUMsU0FBUyxDQUFDO0lBQzdFLENBQUM7SUFBQW5XLE1BQUEsQ0FFRHFXLHdCQUF3QixHQUF4QixTQUFBQSx3QkFBd0JBLENBQUNKLEtBQWEsRUFBRUMsVUFBb0IsRUFBRUMsU0FBa0IsRUFBUTtNQUN2RixJQUFJLENBQUNwVixhQUFhLENBQUNxVixXQUFXLENBQUMsb0JBQW9CLEVBQUVILEtBQUssRUFBRUMsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDbkYsQ0FBQztJQUFBblcsTUFBQSxDQUVEMkIsa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQ3VVLFVBQW9CLEVBQUVDLFNBQWtCLEVBQVE7TUFDbEUsSUFBSSxDQUFDcFYsYUFBYSxDQUFDdVYsV0FBVyxDQUFDLGNBQWMsRUFBRUosVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDdEUsQ0FBQztJQUFBblcsTUFBQSxDQUVEdVcsdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQ04sS0FBYSxFQUFFQyxVQUFvQixFQUFFQyxTQUFrQixFQUFRO01BQ3RGLElBQUksQ0FBQ3BWLGFBQWEsQ0FBQ3FWLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRUgsS0FBSyxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsQ0FBQztJQUNsRixDQUFDO0lBQUFuVyxNQUFBLENBRUR3Vyx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFDTixVQUFvQixFQUFFQyxTQUFpQixFQUFRO01BQ3RFLElBQUksQ0FBQ3BWLGFBQWEsQ0FBQ3VWLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRUosVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDM0UsQ0FBQztJQUFBblcsTUFBQSxDQUVENkIsd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQ3FVLFVBQW9CLEVBQUVDLFNBQWlCLEVBQVE7TUFDdkUsSUFBSSxDQUFDcFYsYUFBYSxDQUFDdVYsV0FBVyxDQUFDLG9CQUFvQixFQUFFSixVQUFVLEVBQUVDLFNBQVMsQ0FBQztJQUM1RSxDQUFDO0lBQUFuVyxNQUFBLENBRUt5VyxpQkFBaUIsR0FBdkIsZUFBTUEsaUJBQWlCQSxDQUFBLEVBQWtCO01BQ3hDLElBQUksQ0FBQzVXLE9BQU8sR0FBRyxJQUFJO01BRW5CLElBQUksSUFBSSxDQUFDUSxhQUFhLENBQUMySiwwQkFBMEIsQ0FBQyxDQUFDLENBQUNDLGVBQWUsQ0FBQyxDQUFDLENBQUN5TSxhQUFhLEVBQUU7UUFDcEYsTUFBTTtVQUFFQyxPQUFPLEVBQUVDO1FBQW9CLENBQUMsR0FBRyxNQUFNQyxtQkFBQSxDQUFPLHdEQUF3RCxDQUFDO1FBQy9HLE1BQU1ELG1CQUFtQixDQUFDRSxvQkFBb0IsQ0FBQyxDQUFDO01BQ2pEO01BQ0E7O01BRUEsSUFBSSxDQUFDbFYsaUJBQWlCLEdBQUcsSUFBSSxDQUFDb1QsZUFBZSxDQUFDK0IsSUFBSSxDQUFDLElBQUksQ0FBQztNQUN4RCxJQUFJLENBQUNwVyxPQUFPLENBQUNxVixrQkFBa0IsQ0FBQyxJQUFJLENBQUNwVSxpQkFBaUIsRUFBRSxJQUFJLENBQUM7TUFDN0QsSUFBSSxDQUFDakIsT0FBTyxDQUFDMFYsd0JBQXdCLENBQUMsSUFBSSxDQUFDdEMscUJBQXFCLEVBQUUsSUFBSSxDQUFDO01BQ3ZFO01BQ0EsSUFBSSxDQUFDblUsbUJBQW1CLEdBQUcsRUFBRTtNQUM3Qm9OLFNBQVMsQ0FBQ2dLLGNBQWMsQ0FBQyxDQUFDO01BQzFCLElBQUksQ0FBQ2xKLHlCQUF5QixHQUFHLENBQUMsSUFBSSxDQUFDbk4sT0FBTyxDQUFDc0csS0FBSyxDQUFDLEVBQUUsQ0FBQztNQUV4RCxNQUFNLElBQUksQ0FBQ2dRLGlCQUFpQixDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUFBalgsTUFBQSxDQUVEa1gsU0FBUyxHQUFULFNBQUFBLFNBQVNBLENBQUEsRUFBUztNQUNqQixJQUFJLENBQUNELGlCQUFpQixDQUFDLENBQUM7SUFDekIsQ0FBQztJQUFBalgsTUFBQSxDQUVLaVgsaUJBQWlCLEdBQXZCLGVBQU1BLGlCQUFpQkEsQ0FBQSxFQUFrQjtNQUN4QyxNQUFNRSxZQUFZLEdBQUcsSUFBSSxDQUFDeFcsT0FBTyxDQUFDeVcsY0FBYyxDQUFDLENBQUMsQ0FBQ25JLE9BQU8sQ0FBQyxDQUFDLENBQUN6SSxRQUFRLENBQUMsZ0JBQWdCLENBQUM7TUFDdkYsSUFBSTtRQUNILE1BQU02USxrQkFBa0IsR0FBRyxNQUFNLElBQUksQ0FBQ2hYLGFBQWEsQ0FBQ2lYLG9CQUFvQixDQUFDLENBQUM7UUFDMUUsTUFBTUMscUJBQXFCLEdBQUdGLGtCQUFrQixLQUFLblUsU0FBUyxJQUFJTCxNQUFNLENBQUNDLElBQUksQ0FBQ3VVLGtCQUFrQixDQUFDLENBQUMvWSxNQUFNLEtBQUssQ0FBQztRQUM5RyxNQUFNa1osS0FBSyxHQUFHLElBQUksQ0FBQzdXLE9BQU8sQ0FBQ3lXLGNBQWMsQ0FBQyxDQUFDLENBQUNuSSxPQUFPLENBQUMsQ0FBQztRQUNyRDtRQUNBLElBQUksQ0FBQ2tJLFlBQVksSUFBSUkscUJBQXFCLElBQUksQ0FBQ0MsS0FBSyxFQUFFO1VBQ3JELElBQUlILGtCQUFrQixDQUFDSSxhQUFhLElBQUlKLGtCQUFrQixDQUFDSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLENBQUNsUixRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDN0c7WUFDQTtZQUNBO1lBQ0EsTUFBTSxJQUFJLENBQUNtUixvQkFBb0IsQ0FBQ04sa0JBQWtCLENBQUM7VUFDcEQsQ0FBQyxNQUFNO1lBQ047WUFDQSxNQUFNLElBQUksQ0FBQ08sc0JBQXNCLENBQUNQLGtCQUFrQixDQUFDO1VBQ3REO1FBQ0Q7UUFDQSxNQUFNLElBQUksQ0FBQ1EseUJBQXlCLENBQUNSLGtCQUFrQixDQUFDO01BQ3pELENBQUMsQ0FBQyxPQUFPeEssTUFBZSxFQUFFO1FBQ3pCMUksR0FBRyxDQUFDMkksS0FBSyxDQUFDLHFDQUFxQyxFQUFFRCxNQUFnQixDQUFDO01BQ25FO0lBQ0QsQ0FBQztJQUFBN00sTUFBQSxDQUVEOFgsb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQ1Qsa0JBQXNDLEVBQVU7TUFDcEUsT0FBT1UsZ0JBQWdCLENBQUNELG9CQUFvQixDQUFDVCxrQkFBa0IsRUFBRSxJQUFJLENBQUNXLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDclgsT0FBTyxDQUFDO0lBQ3RHLENBQUM7SUFBQVgsTUFBQSxDQUVLMlgsb0JBQW9CLEdBQTFCLGVBQU1BLG9CQUFvQkEsQ0FBQ04sa0JBQXFDLEVBQWlCO01BQ2hGLE9BQU9VLGdCQUFnQixDQUFDRSxvQkFBb0IsQ0FBQ1osa0JBQWtCLEVBQUUsSUFBSSxDQUFDVyxjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQ3JYLE9BQU8sRUFBRSxJQUFJLENBQUNGLFVBQVUsQ0FBQyxDQUFDeUksSUFBSSxDQUN6SGdQLFFBQWdCLElBQVc7UUFDM0IsSUFBSUEsUUFBUSxFQUFFO1VBQ1osSUFBSSxDQUFDdlgsT0FBTyxDQUFDeVcsY0FBYyxDQUFDLENBQUMsQ0FBQ2UsV0FBVyxDQUFjRCxRQUFRLENBQUM7VUFDakUsSUFBSWIsa0JBQWtCLEVBQUVJLGFBQWEsSUFBSUosa0JBQWtCLENBQUNJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQ2xSLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNsSCxJQUFJLENBQUNuRyxhQUFhLENBQUMrWCx3QkFBd0IsQ0FBQyxDQUFDO1VBQzlDLENBQUMsTUFBTTtZQUNOLElBQUksQ0FBQy9YLGFBQWEsQ0FBQ2dZLG9CQUFvQixDQUFDLENBQUM7VUFDMUM7VUFDQSxJQUFJLENBQUN2Syx5QkFBeUIsR0FBRyxJQUFJO1FBQ3RDO1FBQ0E7TUFDRCxDQUNELENBQUM7SUFDRixDQUFDO0lBQUE5TixNQUFBLENBRUs0WCxzQkFBc0IsR0FBNUIsZUFBTUEsc0JBQXNCQSxDQUFDUCxrQkFBNEMsRUFBaUI7TUFDekYsT0FBT1UsZ0JBQWdCLENBQUNPLHNCQUFzQixDQUM3QyxJQUFJLENBQUNqWSxhQUFhLENBQUNZLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDQyxPQUFPLEVBQ3REbVcsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQzlXLE1BQU0sRUFDWCxJQUFJLENBQUNGLGFBQWEsQ0FBQ1ksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUVzWCxHQUFHLEVBQUVDLG1DQUNyRCxDQUFDLENBQUN0UCxJQUFJLENBQUV1UCxTQUFTLElBQUs7UUFDckIsSUFBSWpCLEtBQUs7UUFDVCxJQUFJaUIsU0FBUyxDQUFDOVAsT0FBTyxFQUFFO1VBQ3RCLE1BQU0rUCxjQUFjLEdBQUdELFNBQVMsQ0FBQzlQLE9BQU8sQ0FBQzRCLE9BQU8sQ0FBQyxDQUFDO1VBQ2xELE1BQU1xSSxhQUFhLEdBQUcsSUFBSSxDQUFDSSxtQ0FBbUMsQ0FBQ3lGLFNBQVMsQ0FBQzlQLE9BQU8sQ0FBQyxHQUM5RUksaUJBQWlCLENBQUNDLGVBQWUsQ0FBQ3lQLFNBQVMsQ0FBQzlQLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FDM0QrUCxjQUFjO1VBRWpCLElBQUk5RixhQUFhLEtBQUs4RixjQUFjLEVBQUU7WUFDckM7WUFDQTtZQUNBLElBQUksQ0FBQ2xRLHNCQUFzQixDQUFDO2NBQUVxSyxhQUFhLEVBQUU2RixjQUFjO2NBQUU1RixZQUFZLEVBQUVGO1lBQWMsQ0FBQyxDQUFDO1VBQzVGO1VBRUE0RSxLQUFLLEdBQUc1RSxhQUFhLENBQUNyTCxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDLE1BQU0sSUFBSWtSLFNBQVMsQ0FBQ2hJLElBQUksRUFBRTtVQUMxQitHLEtBQUssR0FBR2lCLFNBQVMsQ0FBQ2hJLElBQUk7UUFDdkI7UUFFQSxJQUFJK0csS0FBSyxFQUFFO1VBQ1Y7VUFDQyxJQUFJLENBQUM3VyxPQUFPLENBQUN5VyxjQUFjLENBQUMsQ0FBQyxDQUFDZSxXQUFXLENBQWNYLEtBQUssQ0FBQztVQUM5RCxJQUFJLENBQUNuWCxhQUFhLENBQUNzWSxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVDO1FBQ0E7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBM1ksTUFBQSxDQVNNNlgseUJBQXlCLEdBQS9CLGVBQU1BLHlCQUF5QkEsQ0FBQ2UsaUJBQStDLEVBQWlCO01BQy9GLE1BQU1DLGFBQWEsR0FBRyxJQUFJLENBQUNsWSxPQUFPLENBQUN5VyxjQUFjLENBQUMsQ0FBQyxDQUFDbkksT0FBTyxDQUFDLENBQUM7TUFDN0QsTUFBTTZKLFVBQVUsR0FBRyxDQUFDLENBQUNGLGlCQUFpQixDQUFDbkIsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFQyxXQUFXLENBQUMsQ0FBQyxFQUFFbFIsUUFBUSxDQUFDLE1BQU0sQ0FBQztNQUMxRixNQUFNNkgsUUFBUSxHQUFHLE1BQU0wSixnQkFBZ0IsQ0FBQ2dCLHFCQUFxQixDQUFDLElBQUksQ0FBQ2YsY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUN2WCxVQUFVLENBQUM7TUFDckcsSUFBSW9ZLGFBQWEsSUFBSUMsVUFBVSxJQUFJekssUUFBUSxFQUFFO1FBQzVDLE1BQU0ySyxTQUFTLEdBQUcsQ0FBQ0gsYUFBYSxDQUFDclMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksZUFBZTtRQUM1RSxJQUFJLENBQUM3RixPQUFPLENBQUN5VyxjQUFjLENBQUMsQ0FBQyxDQUFDZSxXQUFXLENBQTRCVSxhQUFhLEdBQUdHLFNBQVMsQ0FBQztNQUNqRztJQUNELENBQUM7SUFBQWhaLE1BQUEsQ0FFRGlaLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFBLEVBQTBDO01BQ3JELE9BQU8sSUFBSSxDQUFDNVgsU0FBUztJQUN0Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXJCLE1BQUEsQ0FLQWtaLGVBQWUsR0FBZixTQUFBQSxlQUFlQSxDQUFBLEVBQTJDO01BQ3pELE9BQU8sSUFBSSxDQUFDN1YsWUFBWSxJQUFJLENBQUMsQ0FBQztJQUMvQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFyRCxNQUFBLENBSUFnWSxjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQSxFQUFXO01BQ3hCLE9BQU8sSUFBSSxDQUFDdlMsWUFBWTtJQUN6QixDQUFDO0lBQUF6RixNQUFBLENBRURtWixZQUFZLEdBQVosU0FBQUEsWUFBWUEsQ0FBQSxFQUFTO01BQ3BCLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFBQSxPQUFBNVosY0FBQTtFQUFBLEVBMW1Da0M2WixPQUFPO0VBQUFyWixRQUFBLENBQUFSLGNBQUEsR0FBQUEsY0FBQTtFQUFBLElBNm1DckM4WixxQkFBcUIsMEJBQUFDLGVBQUE7SUFBQSxTQUFBRCxzQkFBQTtNQUFBLE9BQUFDLGVBQUEsQ0FBQTlNLEtBQUEsT0FBQW5PLFNBQUE7SUFBQTtJQUFBVSxjQUFBLENBQUFzYSxxQkFBQSxFQUFBQyxlQUFBO0lBQUEsSUFBQUMsT0FBQSxHQUFBRixxQkFBQSxDQUFBbmEsU0FBQTtJQUFBcWEsT0FBQSxDQUNwQkMsY0FBYyxHQUFwQixlQUFNQSxjQUFjQSxDQUFDQyxlQUF1RCxFQUEyQjtNQUN0RyxNQUFNQyxlQUFlLEdBQUcsSUFBSW5hLGNBQWMsQ0FBQ2thLGVBQWUsQ0FBQztNQUMzRCxPQUFPQyxlQUFlLENBQUNuWSxXQUFXO0lBQ25DLENBQUM7SUFBQSxPQUFBOFgscUJBQUE7RUFBQSxFQUprQ00sY0FBYztFQUFBLE9BT25DTixxQkFBcUI7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|