@sapui5/sap.fe.core 1.136.12 → 1.136.13
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 +1 -1
- package/src/sap/fe/core/AppStateHandler.js +6 -1
- package/src/sap/fe/core/AppStateHandler.ts +5 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +12 -4
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +15 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +29 -35
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +43 -56
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
- package/src/sap/fe/core/library.js +1 -1
|
@@ -7,12 +7,11 @@ import {
|
|
|
7
7
|
equal,
|
|
8
8
|
formatResult,
|
|
9
9
|
getExpressionFromAnnotation,
|
|
10
|
+
getStaticallyResolvableExpression,
|
|
10
11
|
greaterOrEqual,
|
|
11
12
|
greaterThan,
|
|
12
13
|
ifElse,
|
|
13
14
|
isConstant,
|
|
14
|
-
isExpressionStaticallyResolvable,
|
|
15
|
-
isPathInModelExpression,
|
|
16
15
|
length,
|
|
17
16
|
lessOrEqual,
|
|
18
17
|
not,
|
|
@@ -580,60 +579,40 @@ export function getCreateVisibility(
|
|
|
580
579
|
isForCreationRow = false,
|
|
581
580
|
isForPaste = false
|
|
582
581
|
): BindingToolkitExpression<boolean> {
|
|
583
|
-
|
|
582
|
+
let isInsertable = standardActionsContext.restrictions.isInsertable.expression;
|
|
583
|
+
const newAction = standardActionsContext.newAction;
|
|
584
|
+
if (newAction) {
|
|
585
|
+
// if there is a new action, we consider the action availability instead of insertable
|
|
586
|
+
isInsertable = newAction.available === undefined ? constant(true) : newAction.available;
|
|
587
|
+
}
|
|
588
|
+
isInsertable = getStaticallyResolvableExpression(isInsertable, constant(true));
|
|
584
589
|
const isCreateHidden =
|
|
585
590
|
hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext) ||
|
|
586
591
|
(isForCreationRow
|
|
587
592
|
? isActionAnnotatedHidden(converterContext, "CreateHidden", false)
|
|
588
593
|
: standardActionsContext.hiddenAnnotation.create);
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
// - Otherwise this depends on the value of the UI.IsEditable
|
|
595
|
-
// - Otherwise
|
|
596
|
-
// - If any of the following conditions is valid then create button isn't visible
|
|
597
|
-
// - no newAction available
|
|
598
|
-
// - It's not insertable and there is not a new action
|
|
599
|
-
// - create is hidden
|
|
600
|
-
// - There are multiple visualizations
|
|
601
|
-
// - It's an Analytical List Page
|
|
602
|
-
// - Uses InlineCreationRows mode and a Responsive table type, with the parameter inlineCreationRowsHiddenInEditMode to true while not in create mode
|
|
603
|
-
// - when calculating paste button visibility, we force the condition to false with the isForPaste property
|
|
604
|
-
// - Otherwise
|
|
605
|
-
// - If we're on the list report ->
|
|
606
|
-
// - If UI.CreateHidden points to a property path -> provide a negated binding to this path
|
|
607
|
-
// - Otherwise, create is visible
|
|
608
|
-
// - Otherwise
|
|
609
|
-
// - This depends on the value of the UI.IsEditable
|
|
594
|
+
|
|
595
|
+
if (standardActionsContext.creationMode === CreationMode.External) {
|
|
596
|
+
// if creation mode is external we do not consider insertable restrictions
|
|
597
|
+
return and(not(isCreateHidden), or(converterContext.getTemplateType() === TemplateType.ListReport, UI.IsEditable));
|
|
598
|
+
}
|
|
610
599
|
return ifElse(
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
and(isConstant(isInsertable), equal(isInsertable, false), !newAction),
|
|
617
|
-
and(isConstant(isCreateHidden), equal(isCreateHidden, true)),
|
|
618
|
-
and(
|
|
619
|
-
standardActionsContext.creationMode === CreationMode.InlineCreationRows,
|
|
620
|
-
standardActionsContext.tableManifestConfiguration?.type === "ResponsiveTable",
|
|
621
|
-
ifElse(
|
|
622
|
-
and(
|
|
623
|
-
standardActionsContext?.tableManifestConfiguration?.inlineCreationRowsHiddenInEditMode === false,
|
|
624
|
-
not(isForPaste)
|
|
625
|
-
),
|
|
626
|
-
true,
|
|
627
|
-
UI.IsCreateMode
|
|
628
|
-
)
|
|
629
|
-
)
|
|
630
|
-
),
|
|
631
|
-
false,
|
|
600
|
+
and(
|
|
601
|
+
//If InlineCreationRows mode and a Responsive table type, with the parameter inlineCreationRowsHiddenInEditMode to true while not in create mode
|
|
602
|
+
// when calculating paste button visibility, we force the condition to false with the isForPaste property
|
|
603
|
+
standardActionsContext.creationMode === CreationMode.InlineCreationRows,
|
|
604
|
+
standardActionsContext.tableManifestConfiguration?.type === "ResponsiveTable",
|
|
632
605
|
ifElse(
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
606
|
+
and(standardActionsContext?.tableManifestConfiguration?.inlineCreationRowsHiddenInEditMode === false, not(isForPaste)),
|
|
607
|
+
true,
|
|
608
|
+
UI.IsCreateMode
|
|
636
609
|
)
|
|
610
|
+
),
|
|
611
|
+
false,
|
|
612
|
+
ifElse(
|
|
613
|
+
converterContext.getTemplateType() === TemplateType.ListReport,
|
|
614
|
+
and(not(isCreateHidden), isInsertable),
|
|
615
|
+
and(not(isCreateHidden), isInsertable, UI.IsEditable)
|
|
637
616
|
)
|
|
638
617
|
);
|
|
639
618
|
}
|
|
@@ -651,12 +630,8 @@ export function getDeleteVisibility(
|
|
|
651
630
|
let isDeleteHidden = standardActionsContext.hiddenAnnotation.delete;
|
|
652
631
|
let pathDeletableExpression = standardActionsContext.restrictions.isDeletable.expression;
|
|
653
632
|
//we check if there is no relative path dependent on the context
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
}
|
|
657
|
-
if (!isExpressionStaticallyResolvable(pathDeletableExpression)) {
|
|
658
|
-
pathDeletableExpression = constant(true);
|
|
659
|
-
}
|
|
633
|
+
isDeleteHidden = getStaticallyResolvableExpression(isDeleteHidden, constant(false));
|
|
634
|
+
pathDeletableExpression = getStaticallyResolvableExpression(pathDeletableExpression, constant(true));
|
|
660
635
|
return ifElse(
|
|
661
636
|
converterContext.getTemplateType() === TemplateType.AnalyticalListPage ||
|
|
662
637
|
hideCreateDeleteInAnalyticalTable(converterContext, standardActionsContext),
|
|
@@ -898,13 +873,25 @@ export function getPasteEnablement(
|
|
|
898
873
|
): BindingToolkitExpression<boolean> {
|
|
899
874
|
const selectedContextsPath = !forContextMenu ? "selectedContexts" : "contextmenu/selectedContexts";
|
|
900
875
|
const pasteEnablementPath = !forContextMenu ? "nodeUpdatesInfo/pasteEnablement" : "contextmenu/nodeUpdatesInfo/pasteEnablement";
|
|
901
|
-
|
|
876
|
+
let isInsertable: BindingToolkitExpression<boolean> = standardActionsContext.restrictions.isInsertable.expression;
|
|
877
|
+
const tableType = standardActionsContext.tableManifestConfiguration.type;
|
|
878
|
+
const hasCellSelector = ["ResponsiveTable", "GridTable", "TreeTable"].includes(tableType);
|
|
879
|
+
if (hasCellSelector) {
|
|
880
|
+
// If table is not insertable, we only enable the paste button when there is a selection (To edit data)
|
|
881
|
+
isInsertable = or(
|
|
882
|
+
standardActionsContext.restrictions.isInsertable.expression,
|
|
883
|
+
equal(pathInModel("cellSelectorHasSelection", "internal"), true)
|
|
884
|
+
);
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
if (tableType === "TreeTable") {
|
|
902
888
|
return and(
|
|
903
889
|
pasteVisibility,
|
|
904
890
|
or(
|
|
905
891
|
standardActionsContext.restrictions.isUpdatable.navigationExpression._type === "Unresolvable",
|
|
906
892
|
standardActionsContext.restrictions.isUpdatable.expression
|
|
907
893
|
),
|
|
894
|
+
isInsertable,
|
|
908
895
|
ifElse(
|
|
909
896
|
lessOrEqual(length(pathInModel(selectedContextsPath, "internal")), 1),
|
|
910
897
|
equal(pathInModel(pasteEnablementPath, "internal"), true),
|
|
@@ -917,7 +904,7 @@ export function getPasteEnablement(
|
|
|
917
904
|
if (updateOnNavigation?._type === "Unresolvable") {
|
|
918
905
|
updateOnNavigation = constant(true);
|
|
919
906
|
}
|
|
920
|
-
return and(updateOnNavigation, pasteVisibility);
|
|
907
|
+
return and(updateOnNavigation, pasteVisibility, isInsertable);
|
|
921
908
|
}
|
|
922
909
|
|
|
923
910
|
/**
|
|
@@ -276,6 +276,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
276
276
|
if (facetDefinition.$Type !== "com.sap.vocabularies.UI.v1.ReferenceURLFacet" && facetDefinition.$Type !== "com.sap.vocabularies.UI.v1.CollectionFacet") {
|
|
277
277
|
const resolvedTarget = converterContext.getEntityTypeAnnotation(facetDefinition.Target.value);
|
|
278
278
|
converterContext = resolvedTarget.converterContext;
|
|
279
|
+
const navProps = converterContext.getDataModelObjectPath().navigationProperties.map(navPropObj => navPropObj.name);
|
|
279
280
|
facetDefinition.Target?.$target?.Data.forEach(dataField => {
|
|
280
281
|
if (dataField.annotations?.UI?.Hidden?.valueOf() !== true) {
|
|
281
282
|
const semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, dataField);
|
|
@@ -284,7 +285,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
284
285
|
isValueMultilineText: isMultiLineText(dataField.Value?.$target),
|
|
285
286
|
type: FormElementType.Annotation,
|
|
286
287
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
287
|
-
visible: compileExpression(isVisible(dataField)),
|
|
288
|
+
visible: compileExpression(isVisible(dataField, navProps)),
|
|
288
289
|
label: dataField.Value?.$target?.annotations?.Common?.Label || dataField.Label,
|
|
289
290
|
idPrefix: getHeaderFacetFormID(facetDefinition, dataField),
|
|
290
291
|
annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName)}/`,
|
|
@@ -296,7 +297,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
296
297
|
// was dataField.Target?.$target?.annotations?.UI?.MultiLineText?.valueOf() === true but that doesn't make sense as the target cannot have that annotation
|
|
297
298
|
type: FormElementType.Annotation,
|
|
298
299
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
299
|
-
visible: compileExpression(isVisible(dataField)),
|
|
300
|
+
visible: compileExpression(isVisible(dataField, navProps)),
|
|
300
301
|
label: dataField.Target?.$target?.annotations?.Common?.Label?.toString() || dataField.Label?.toString(),
|
|
301
302
|
idPrefix: getHeaderFacetFormID(facetDefinition, dataField),
|
|
302
303
|
annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName)}/`,
|
|
@@ -405,4 +406,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/core/converters/annotations
|
|
|
405
406
|
}
|
|
406
407
|
return _exports;
|
|
407
408
|
}, false);
|
|
408
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIZWFkZXJGYWNldFR5cGUiLCJfZXhwb3J0cyIsIkZhY2V0VHlwZSIsIkZsZXhEZXNpZ25UaW1lVHlwZSIsIkhlYWRlckRhdGFQb2ludFR5cGUiLCJUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImZvckVhY2giLCJmYWNldCIsImhlYWRlckZhY2V0IiwiY3JlYXRlSGVhZGVyRmFjZXQiLCJwdXNoIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJPYmplY3QiLCJrZXlzIiwibWFuaWZlc3RIZWFkZXJGYWNldEtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImZhY2V0RGVmaW5pdGlvbiIsImNvbGxlY3Rpb25GYWNldERlZmluaXRpb24iLCIkVHlwZSIsImhlYWRlckZhY2V0SUQiLCJjcmVhdGVJZEZvckFubm90YXRpb24iLCJoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwic3Rhc2hlZFNldHRpbmciLCJzdGFzaGVkIiwiZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImRlc2lnblRpbWVNZXRhZGF0YSIsIkRlZmF1bHQiLCJOb3RBZGFwdGFibGVUcmVlIiwiZGVzaWduVGltZSIsImZsZXhTZXR0aW5ncyIsImRlc2lnbnRpbWUiLCJOb3RBZGFwdGFibGUiLCJOb3RBZGFwdGFibGVWaXNpYmlsaXR5IiwiY3JlYXRlUmVmZXJlbmNlSGVhZGVyRmFjZXQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiZ2V0SGVhZGVyRmFjZXRJRCIsImdldEhlYWRlckZhY2V0S2V5IiwiZmFjZXREZWZpbml0aW9uVG9DaGVjayIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwidGFyZ2V0QW5ub3RhdGlvblZhbHVlIiwiVGFyZ2V0IiwidmFsdWUiLCJ0YXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldFRhcmdldEFubm90YXRpb25UeXBlIiwiaGVhZGVyRm9ybURhdGEiLCJoZWFkZXJEYXRhUG9pbnREYXRhIiwiRmllbGRHcm91cCIsImdldEZpZWxkR3JvdXBGb3JtRGF0YSIsIkRhdGFQb2ludCIsImdldERhdGFQb2ludERhdGEiLCIkdGFyZ2V0IiwidGVybSIsImlzQW5ub3RhdGlvbkZpZWxkU3RhdGljYWxseUhpZGRlbiIsInVuZGVmaW5lZCIsInR5cGUiLCJBbm5vdGF0aW9uIiwiZmFjZXRUeXBlIiwiUmVmZXJlbmNlIiwiaWQiLCJjb250YWluZXJJZCIsImdldEhlYWRlckZhY2V0Q29udGFpbmVySUQiLCJrZXkiLCJ2aXNpYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpc1Zpc2libGUiLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQiLCJmYWNldHMiLCJGYWNldHMiLCJDb2xsZWN0aW9uIiwiYW5ub3RhdGlvblR5cGUiLCJOb25lIiwiYW5ub3RhdGlvblR5cGVNYXAiLCJDaGFydCIsIklkZW50aWZpY2F0aW9uIiwiQ29udGFjdCIsIkFkZHJlc3MiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiRXJyb3IiLCJmb3JtRWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyIsImdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCIsImdldEhlYWRlckZhY2V0Rm9ybUlEIiwibGFiZWwiLCJhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwiRGF0YSIsImRhdGFGaWVsZCIsInNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGgiLCJnZXRTZW1hbnRpY09iamVjdFBhdGgiLCJpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiIsImlzVmFsdWVNdWx0aWxpbmVUZXh0IiwiaXNNdWx0aUxpbmVUZXh0IiwiVmFsdWUiLCJGb3JtRWxlbWVudFR5cGUiLCJLZXlIZWxwZXIiLCJnZW5lcmF0ZUtleUZyb21EYXRhRmllbGQiLCJDb21tb24iLCJpZFByZWZpeCIsInNlbWFudGljT2JqZWN0UGF0aCIsIkNvbnRlbnQiLCJWaXN1YWxpemF0aW9uIiwiUHJvZ3Jlc3NJbmRpY2F0b3IiLCJSYXRpbmdJbmRpY2F0b3IiLCJkYXRhUG9pbnQiLCJwcm9wZXJ0eSIsIlNlbWFudGljT2JqZWN0IiwiZ2VuZXJhdGVCaW5kaW5nIiwicmVxdWVzdEdyb3VwSWQiLCJncm91cElkIiwiaW5jbHVkZXMiLCJjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24iLCJoZWFkZXJGYWNldEtleSIsImN1c3RvbUhlYWRlckZhY2V0SUQiLCJnZXRDdXN0b21IZWFkZXJGYWNldElEIiwicG9zaXRpb24iLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnQiLCJBZnRlciIsImZyYWdtZW50TmFtZSIsInRlbXBsYXRlIiwibmFtZSIsInRpdGxlIiwic3ViVGl0bGUiLCJiaW5kaW5nIiwidGVtcGxhdGVFZGl0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJIZWFkZXJGYWNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdEhlYWRlckZhY2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0U2VtYW50aWNPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50LCBQb3NpdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdGdldEN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQsXG5cdGdldEhlYWRlckZhY2V0Rm9ybUlELFxuXHRnZXRIZWFkZXJGYWNldElEXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBpc011bHRpTGluZVRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNWaXNpYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBjcmVhdGVJZEZvckFubm90YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuLCBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBGb3JtRWxlbWVudFR5cGUsIGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG4vLyByZWdpb24gZGVmaW5pdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRGVmaW5pdGlvbnM6IEhlYWRlciBGYWNldCBUeXBlcywgR2VuZXJpYyBPUCBIZWFkZXIgRmFjZXQsIE1hbmlmZXN0IFByb3BlcnRpZXMgZm9yIEN1c3RvbSBIZWFkZXIgRmFjZXRcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgZW51bSBIZWFkZXJGYWNldFR5cGUge1xuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiXG59XG5cbmV4cG9ydCBlbnVtIEZhY2V0VHlwZSB7XG5cdFJlZmVyZW5jZSA9IFwiUmVmZXJlbmNlXCIsXG5cdENvbGxlY3Rpb24gPSBcIkNvbGxlY3Rpb25cIlxufVxuXG5leHBvcnQgZW51bSBGbGV4RGVzaWduVGltZVR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdE5vdEFkYXB0YWJsZSA9IFwibm90LWFkYXB0YWJsZVwiLCAvLyBkaXNhYmxlIGFsbCBhY3Rpb25zIG9uIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVHJlZSA9IFwibm90LWFkYXB0YWJsZS10cmVlXCIsIC8vIGRpc2FibGUgYWxsIGFjdGlvbnMgb24gdGhhdCBpbnN0YW5jZSBhbmQgb24gYWxsIGNoaWxkcmVuIG9mIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVmlzaWJpbGl0eSA9IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCIgLy8gZGlzYWJsZSBhbGwgYWN0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgdmlzaWJpbGl0eSwgbmFtZWx5IHJldmVhbCBhbmQgcmVtb3ZlXG59XG5cbmV4cG9ydCB0eXBlIEZsZXhTZXR0aW5ncyA9IHtcblx0ZGVzaWdudGltZT86IEZsZXhEZXNpZ25UaW1lVHlwZTtcbn07XG5cbnR5cGUgSGVhZGVyRm9ybURhdGEgPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50W107XG59O1xuXG5lbnVtIEhlYWRlckRhdGFQb2ludFR5cGUge1xuXHRQcm9ncmVzc0luZGljYXRvciA9IFwiUHJvZ3Jlc3NJbmRpY2F0b3JcIixcblx0UmF0aW5nSW5kaWNhdG9yID0gXCJSYXRpbmdJbmRpY2F0b3JcIixcblx0Q29udGVudCA9IFwiQ29udGVudFwiXG59XG5cbnR5cGUgSGVhZGVyRGF0YVBvaW50RGF0YSA9IHtcblx0dHlwZTogSGVhZGVyRGF0YVBvaW50VHlwZTtcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xufTtcblxuZW51bSBUYXJnZXRBbm5vdGF0aW9uVHlwZSB7XG5cdE5vbmUgPSBcIk5vbmVcIixcblx0RGF0YVBvaW50ID0gXCJEYXRhUG9pbnRcIixcblx0Q2hhcnQgPSBcIkNoYXJ0XCIsXG5cdElkZW50aWZpY2F0aW9uID0gXCJJZGVudGlmaWNhdGlvblwiLFxuXHRDb250YWN0ID0gXCJDb250YWN0XCIsXG5cdEFkZHJlc3MgPSBcIkFkZHJlc3NcIixcblx0RmllbGRHcm91cCA9IFwiRmllbGRHcm91cFwiLFxuXHRQcmVzZW50YXRpb25WYXJpYW50ID0gXCJQcmVzZW50YXRpb25WYXJpYW50XCJcbn1cblxudHlwZSBCYXNlSGVhZGVyRmFjZXQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBIZWFkZXJGYWNldFR5cGU7IC8vIE1hbmlmZXN0IG9yIE1ldGFkYXRhXG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRhaW5lcklkOiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRmbGV4U2V0dGluZ3M6IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZDogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHRhcmdldEFubm90YXRpb25WYWx1ZT86IHN0cmluZztcblx0dGFyZ2V0QW5ub3RhdGlvblR5cGU/OiBUYXJnZXRBbm5vdGF0aW9uVHlwZTtcbn07XG5cbnR5cGUgQmFzZVJlZmVyZW5jZUZhY2V0ID0gQmFzZUhlYWRlckZhY2V0ICYge1xuXHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2U7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZEdyb3VwRmFjZXQgPSBCYXNlUmVmZXJlbmNlRmFjZXQgJiB7XG5cdGhlYWRlckZvcm1EYXRhOiBIZWFkZXJGb3JtRGF0YTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFQb2ludEZhY2V0ID0gQmFzZVJlZmVyZW5jZUZhY2V0ICYge1xuXHRoZWFkZXJEYXRhUG9pbnREYXRhPzogSGVhZGVyRGF0YVBvaW50RGF0YTtcbn07XG5cbnR5cGUgUmVmZXJlbmNlRmFjZXQgPSBGaWVsZEdyb3VwRmFjZXQgfCBEYXRhUG9pbnRGYWNldDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkZhY2V0ID0gQmFzZUhlYWRlckZhY2V0ICYge1xuXHRmYWNldFR5cGU6IEZhY2V0VHlwZS5Db2xsZWN0aW9uO1xuXHRmYWNldHM6IFJlZmVyZW5jZUZhY2V0W107XG59O1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlSGVhZGVyRmFjZXQgPSBSZWZlcmVuY2VGYWNldCB8IENvbGxlY3Rpb25GYWNldDtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0ID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlSGVhZGVyRmFjZXQ+ICYge1xuXHRmcmFnbWVudE5hbWU/OiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdWJUaXRsZT86IHN0cmluZztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGJpbmRpbmc/OiBzdHJpbmc7XG5cdHRlbXBsYXRlRWRpdD86IHN0cmluZztcbn07XG5cbi8vIGVuZHJlZ2lvbiBkZWZpbml0aW9uc1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbGxlY3QgQWxsIEhlYWRlciBGYWNldHM6IEN1c3RvbSAodmlhIE1hbmlmZXN0KSBhbmQgQW5ub3RhdGlvbiBCYXNlZCAodmlhIE1ldGFtb2RlbClcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHJpZXZlIGhlYWRlciBmYWNldHMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBIZWFkZXIgZmFjZXRzIGZyb20gYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXSB7XG5cdGNvbnN0IGhlYWRlckZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM/LmZvckVhY2goKGZhY2V0KSA9PiB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXQ6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZCA9IGNyZWF0ZUhlYWRlckZhY2V0KGZhY2V0LCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAoaGVhZGVyRmFjZXQpIHtcblx0XHRcdGhlYWRlckZhY2V0cy5wdXNoKGhlYWRlckZhY2V0KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBoZWFkZXJGYWNldHM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgY3VzdG9tIGhlYWRlciBmYWNldHMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0c1xuICogQHJldHVybnMgSGVhZGVyRmFjZXRzIGZyb20gbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChcblx0bWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PlxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiA9IHt9O1xuXG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKChtYW5pZmVzdEhlYWRlckZhY2V0S2V5KSA9PiB7XG5cdFx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXQ6IE1hbmlmZXN0SGVhZGVyRmFjZXQgPSBtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0c1ttYW5pZmVzdEhlYWRlckZhY2V0S2V5XTtcblx0XHRjdXN0b21IZWFkZXJGYWNldHNbbWFuaWZlc3RIZWFkZXJGYWNldEtleV0gPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldChjdXN0b21IZWFkZXJGYWNldCwgbWFuaWZlc3RIZWFkZXJGYWNldEtleSk7XG5cdH0pO1xuXG5cdHJldHVybiBjdXN0b21IZWFkZXJGYWNldHM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgc3Rhc2hlZCBzZXR0aW5ncyBmb3IgaGVhZGVyIGZhY2V0cyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFzaGVkIHNldHRpbmcgZm9yIGhlYWRlciBmYWNldCBvciBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gV2hlbiBhIEhlYWRlckZhY2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBDb2xsZWN0aW9uRmFjZXQsIHN0YXNoaW5nIGlzIG5vdCBzdXBwb3J0ZWRcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBjcmVhdGVJZEZvckFubm90YXRpb24oZmFjZXREZWZpbml0aW9uKSA/PyBcIlwiO1xuXHRjb25zdCBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKTtcblx0Y29uc3Qgc3Rhc2hlZFNldHRpbmcgPSBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnW2hlYWRlckZhY2V0SURdPy5zdGFzaGVkO1xuXHRyZXR1cm4gc3Rhc2hlZFNldHRpbmcgPT09IHRydWU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgZmxleGliaWxpdHkgZGVzaWdudGltZSBzZXR0aW5ncyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBEZXNpZ250aW1lIHNldHRpbmcgb3IgZGVmYXVsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEZsZXhEZXNpZ25UaW1lVHlwZSB7XG5cdGxldCBkZXNpZ25UaW1lTWV0YWRhdGE6IEZsZXhEZXNpZ25UaW1lVHlwZSA9IEZsZXhEZXNpZ25UaW1lVHlwZS5EZWZhdWx0O1xuXHRjb25zdCBoZWFkZXJGYWNldElEID0gY3JlYXRlSWRGb3JBbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbik7XG5cblx0Ly8gRm9yIEhlYWRlckZhY2V0cyBuZXN0ZWQgaW5zaWRlIENvbGxlY3Rpb25GYWNldCBSVEEgc2hvdWxkIGJlIGRpc2FibGVkLCB0aGVyZWZvcmUgc2V0IHRvIFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0ZGVzaWduVGltZU1ldGFkYXRhID0gRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZVRyZWU7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKCk7XG5cdFx0aWYgKGhlYWRlckZhY2V0SUQpIHtcblx0XHRcdGNvbnN0IGRlc2lnblRpbWUgPSBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnW2hlYWRlckZhY2V0SURdPy5mbGV4U2V0dGluZ3M/LmRlc2lnbnRpbWU7XG5cdFx0XHRzd2l0Y2ggKGRlc2lnblRpbWUpIHtcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlOlxuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVUcmVlOlxuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVWaXNpYmlsaXR5OlxuXHRcdFx0XHRcdGRlc2lnblRpbWVNZXRhZGF0YSA9IGRlc2lnblRpbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZXNpZ25UaW1lTWV0YWRhdGE7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29udmVydCAmIEJ1aWxkIEFubm90YXRpb24gQmFzZWQgSGVhZGVyIEZhY2V0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5mdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlZmVyZW5jZUZhY2V0IHwgdW5kZWZpbmVkIHtcblx0aWYgKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiYgZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpIHtcblx0XHRjb25zdCBoZWFkZXJGYWNldElEID0gZ2V0SGVhZGVyRmFjZXRJRChmYWNldERlZmluaXRpb24pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uVG9DaGVjazogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWNldERlZmluaXRpb25Ub0NoZWNrLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvblRvQ2hlY2suTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9LFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSxcblx0XHRcdHRhcmdldEFubm90YXRpb25UeXBlID0gZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUoZmFjZXREZWZpbml0aW9uKTtcblxuXHRcdGxldCBoZWFkZXJGb3JtRGF0YTogSGVhZGVyRm9ybURhdGEgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGhlYWRlckRhdGFQb2ludERhdGE6IEhlYWRlckRhdGFQb2ludERhdGEgfCB1bmRlZmluZWQ7XG5cblx0XHRzd2l0Y2ggKHRhcmdldEFubm90YXRpb25UeXBlKSB7XG5cdFx0XHRjYXNlIFRhcmdldEFubm90YXRpb25UeXBlLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGhlYWRlckZvcm1EYXRhID0gZ2V0RmllbGRHcm91cEZvcm1EYXRhKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFRhcmdldEFubm90YXRpb25UeXBlLkRhdGFQb2ludDpcblx0XHRcdFx0aGVhZGVyRGF0YVBvaW50RGF0YSA9IGdldERhdGFQb2ludERhdGEoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBUb0RvOiBIYW5kbGUgb3RoZXIgY2FzZXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGlmIChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydCAmJiBpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4oZmFjZXREZWZpbml0aW9uKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogSGVhZGVyRmFjZXRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZSxcblx0XHRcdFx0aWQ6IGhlYWRlckZhY2V0SUQsXG5cdFx0XHRcdGNvbnRhaW5lcklkOiBnZXRIZWFkZXJGYWNldENvbnRhaW5lcklEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRcdGtleTogZ2V0SGVhZGVyRmFjZXRLZXkoZmFjZXREZWZpbml0aW9uLCBoZWFkZXJGYWNldElEKSxcblx0XHRcdFx0ZmxleFNldHRpbmdzOiB7XG5cdFx0XHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHN0YXNoZWQ6IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShmYWNldERlZmluaXRpb24pKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlLFxuXHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0aGVhZGVyRm9ybURhdGEsXG5cdFx0XHRcdGhlYWRlckRhdGFQb2ludERhdGFcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0KFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbGxlY3Rpb25GYWNldCB8IHVuZGVmaW5lZCB7XG5cdGlmIChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpIHtcblx0XHRjb25zdCBmYWNldHM6IFJlZmVyZW5jZUZhY2V0W10gPSBbXSxcblx0XHRcdGhlYWRlckZhY2V0SUQgPSBnZXRIZWFkZXJGYWNldElEKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9O1xuXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZm9yRWFjaCgoZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBmYWNldDogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKGZhY2V0KSB7XG5cdFx0XHRcdGZhY2V0cy5wdXNoKGZhY2V0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBIZWFkZXJGYWNldFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLkNvbGxlY3Rpb24sXG5cdFx0XHRpZDogaGVhZGVyRmFjZXRJRCxcblx0XHRcdGNvbnRhaW5lcklkOiBnZXRIZWFkZXJGYWNldENvbnRhaW5lcklEKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24pLFxuXHRcdFx0a2V5OiBnZXRIZWFkZXJGYWNldEtleShjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBoZWFkZXJGYWNldElEKSxcblx0XHRcdGZsZXhTZXR0aW5nczoge1xuXHRcdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdClcblx0XHRcdH0sXG5cdFx0XHRzdGFzaGVkOiBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uKSksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdGZhY2V0c1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRBbm5vdGF0aW9uVHlwZShmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpOiBUYXJnZXRBbm5vdGF0aW9uVHlwZSB7XG5cdGxldCBhbm5vdGF0aW9uVHlwZSA9IFRhcmdldEFubm90YXRpb25UeXBlLk5vbmU7XG5cdGNvbnN0IGFubm90YXRpb25UeXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBUYXJnZXRBbm5vdGF0aW9uVHlwZT4gPSB7XG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuRGF0YVBvaW50LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuQ2hhcnQsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5JZGVudGlmaWNhdGlvbixcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Db250YWN0LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCI6IFRhcmdldEFubm90YXRpb25UeXBlLkFkZHJlc3MsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCI6IFRhcmdldEFubm90YXRpb25UeXBlLkZpZWxkR3JvdXAsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCI6IFRhcmdldEFubm90YXRpb25UeXBlLlByZXNlbnRhdGlvblZhcmlhbnRcblx0fTtcblx0Ly8gUmVmZXJlbmNlVVJMRmFjZXQgYW5kIENvbGxlY3Rpb25GYWNldCBkbyBub3QgaGF2ZSBUYXJnZXQgcHJvcGVydHkuXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0ICYmXG5cdFx0ZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQgJiZcblx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXRcblx0KSB7XG5cdFx0YW5ub3RhdGlvblR5cGUgPSBhbm5vdGF0aW9uVHlwZU1hcFtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybV0gPz8gVGFyZ2V0QW5ub3RhdGlvblR5cGUuTm9uZTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uVHlwZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZvcm1EYXRhKFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogSGVhZGVyRm9ybURhdGEge1xuXHQvLyBzcGxpdCBpbiB0aGlzIGZyb20gYW5ub3RhdGlvbiArIGdldEZpZWxkR3JvdXBGcm9tRGVmYXVsdFxuXHRpZiAoIWZhY2V0RGVmaW5pdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgRmllbGRHcm91cCBmb3JtIGRhdGEgd2l0aG91dCBmYWNldCBkZWZpbml0aW9uXCIpO1xuXHR9XG5cblx0Y29uc3QgZm9ybUVsZW1lbnRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBnZXRIZWFkZXJGYWNldEZvcm1JRChmYWNldERlZmluaXRpb24pLFxuXHRcdGxhYmVsOiBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0Zm9ybUVsZW1lbnRzXG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBtYW5pZmVzdC1iYXNlZCBGb3JtRWxlbWVudHMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciB0aGUgZmFjZXRcbiAqIEByZXR1cm5zIEFubm90YXRpb24tYmFzZWQgRm9ybUVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdIHtcblx0Y29uc3QgYW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSA9IFtdO1xuXG5cdC8vIFJlZmVyZW5jZVVSTEZhY2V0IGFuZCBDb2xsZWN0aW9uRmFjZXQgZG8gbm90IGhhdmUgVGFyZ2V0IHByb3BlcnR5LlxuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldCAmJiBmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkge1xuXHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKTtcblx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHQoZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggfHxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uKSAmJlxuXHRcdFx0XHRcdCFpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGlzVmFsdWVNdWx0aWxpbmVUZXh0OiBpc011bHRpTGluZVRleHQoZGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0KSxcblx0XHRcdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGUoZGF0YUZpZWxkKSksXG5cdFx0XHRcdFx0XHRsYWJlbDogZGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbCB8fCBkYXRhRmllbGQuTGFiZWwsXG5cdFx0XHRcdFx0XHRpZFByZWZpeDogZ2V0SGVhZGVyRmFjZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbiAmJlxuXHRcdFx0XHRcdCFpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGlzVmFsdWVNdWx0aWxpbmVUZXh0OiBmYWxzZSwgLy8gd2FzIGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uTXVsdGlMaW5lVGV4dD8udmFsdWVPZigpID09PSB0cnVlIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBhcyB0aGUgdGFyZ2V0IGNhbm5vdCBoYXZlIHRoYXQgYW5ub3RhdGlvblxuXHRcdFx0XHRcdFx0dHlwZTogRm9ybUVsZW1lbnRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdFx0XHRrZXk6IEtleUhlbHBlci5nZW5lcmF0ZUtleUZyb21EYXRhRmllbGQoZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShkYXRhRmllbGQpKSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5MYWJlbD8udG9TdHJpbmcoKSB8fCBkYXRhRmllbGQuTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRpZFByZWZpeDogZ2V0SGVhZGVyRmFjZXRGb3JtSUQoZmFjZXREZWZpbml0aW9uLCBkYXRhRmllbGQpLFxuXHRcdFx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChkYXRhRmllbGQuZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0UGF0aDogc2VtYW50aWNPYmplY3RBbm5vdGF0aW9uUGF0aFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gYW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiBnZXREYXRhUG9pbnREYXRhKGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KTogSGVhZGVyRGF0YVBvaW50RGF0YSB7XG5cdGxldCB0eXBlID0gSGVhZGVyRGF0YVBvaW50VHlwZS5Db250ZW50O1xuXHRsZXQgc2VtYW50aWNPYmplY3RQYXRoO1xuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldCAmJiAhaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuKGZhY2V0RGVmaW5pdGlvbikpIHtcblx0XHRpZiAoKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9Qcm9ncmVzc1wiKSB7XG5cdFx0XHR0eXBlID0gSGVhZGVyRGF0YVBvaW50VHlwZS5Qcm9ncmVzc0luZGljYXRvcjtcblx0XHR9IGVsc2UgaWYgKChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZpc3VhbGl6YXRpb24gPT09IFwiVUkuVmlzdWFsaXphdGlvblR5cGUvUmF0aW5nXCIpIHtcblx0XHRcdHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLlJhdGluZ0luZGljYXRvcjtcblx0XHR9XG5cdFx0Y29uc3QgZGF0YVBvaW50ID0gZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQ7XG5cblx0XHRpZiAodHlwZW9mIGRhdGFQb2ludCA9PT0gXCJvYmplY3RcIikge1xuXHRcdFx0aWYgKGRhdGFQb2ludD8uVmFsdWU/LiR0YXJnZXQpIHtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHkgPSBkYXRhUG9pbnQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0aWYgKHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uQ29tbW9uPy5TZW1hbnRpY09iamVjdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKHByb3BlcnR5Py5mdWxseVF1YWxpZmllZE5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgdHlwZSwgc2VtYW50aWNPYmplY3RQYXRoIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhbm5vdGF0aW9uLWJhc2VkIGhlYWRlciBmYWNldC5cbiAqIEBwYXJhbSBmYWNldERlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIGZhY2V0XG4gKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgY29udmVydGVyIGNvbnRleHRcbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIGFubm90YXRpb24tYmFzZWQgaGVhZGVyIGZhY2V0XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlckZhY2V0KFxuXHRmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogT2JqZWN0UGFnZUhlYWRlckZhY2V0IHwgdW5kZWZpbmVkIHtcblx0bGV0IGhlYWRlckZhY2V0OiBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfCB1bmRlZmluZWQ7XG5cdHN3aXRjaCAoZmFjZXREZWZpbml0aW9uLiRUeXBlKSB7XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VGYWNldDpcblx0XHRcdGhlYWRlckZhY2V0ID0gY3JlYXRlUmVmZXJlbmNlSGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBmYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldDpcblx0XHRcdGhlYWRlckZhY2V0ID0gY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gaGVhZGVyRmFjZXQ7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29udmVydCAmIEJ1aWxkIE1hbmlmZXN0IEJhc2VkIEhlYWRlciBGYWNldHNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBnZW5lcmF0ZUJpbmRpbmcocmVxdWVzdEdyb3VwSWQ/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRpZiAoIXJlcXVlc3RHcm91cElkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRjb25zdCBncm91cElkID0gW1wiSGVyb2VzXCIsIFwiRGVjb3JhdGlvblwiLCBcIldvcmtlcnNcIiwgXCJMb25nUnVubmVyc1wiXS5pbmNsdWRlcyhyZXF1ZXN0R3JvdXBJZClcblx0XHQ/IGAkYXV0by4ke3JlcXVlc3RHcm91cElkfWBcblx0XHQ6IHJlcXVlc3RHcm91cElkO1xuXG5cdHJldHVybiBgeyBwYXRoIDogJycsIHBhcmFtZXRlcnMgOiB7ICQkZ3JvdXBJZCA6ICcke2dyb3VwSWR9JyB9IH1gO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIG1hbmlmZXN0IGJhc2VkIGN1c3RvbSBoZWFkZXIgZmFjZXQuXG4gKiBAcGFyYW0gY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uXG4gKiBAcGFyYW0gaGVhZGVyRmFjZXRLZXlcbiAqIEByZXR1cm5zIFRoZSBtYW5pZmVzdCBiYXNlZCBjdXN0b20gaGVhZGVyIGZhY2V0IGNyZWF0ZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQoY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uOiBNYW5pZmVzdEhlYWRlckZhY2V0LCBoZWFkZXJGYWNldEtleTogc3RyaW5nKTogQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0IHtcblx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXRJRCA9IGdldEN1c3RvbUhlYWRlckZhY2V0SUQoaGVhZGVyRmFjZXRLZXkpO1xuXG5cdGxldCBwb3NpdGlvbjogUG9zaXRpb24gfCB1bmRlZmluZWQgPSBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ucG9zaXRpb247XG5cdGlmICghcG9zaXRpb24pIHtcblx0XHRwb3NpdGlvbiA9IHtcblx0XHRcdHBsYWNlbWVudDogUGxhY2VtZW50LkFmdGVyXG5cdFx0fTtcblx0fVxuXHQvLyBUT0RPIGZvciBhbiBub24gYW5ub3RhdGlvbiBmcmFnbWVudCB0aGUgbmFtZSBpcyBtYW5kYXRvcnkgLT4gTm90IGNoZWNrZWRcblx0cmV0dXJuIHtcblx0XHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2UsXG5cdFx0dHlwZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnR5cGUsXG5cdFx0aWQ6IGN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdFx0Y29udGFpbmVySWQ6IGN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdFx0a2V5OiBoZWFkZXJGYWNldEtleSxcblx0XHRwb3NpdGlvbjogcG9zaXRpb24sXG5cdFx0dmlzaWJsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnZpc2libGUsXG5cdFx0ZnJhZ21lbnROYW1lOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udGVtcGxhdGUgfHwgY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLm5hbWUsXG5cdFx0dGl0bGU6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50aXRsZSxcblx0XHRzdWJUaXRsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnN1YlRpdGxlLFxuXHRcdHN0YXNoZWQ6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5zdGFzaGVkIHx8IGZhbHNlLFxuXHRcdGZsZXhTZXR0aW5nczogeyAuLi57IGRlc2lnbnRpbWU6IEZsZXhEZXNpZ25UaW1lVHlwZS5EZWZhdWx0IH0sIC4uLmN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5mbGV4U2V0dGluZ3MgfSxcblx0XHRiaW5kaW5nOiBnZW5lcmF0ZUJpbmRpbmcoY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnJlcXVlc3RHcm91cElkKSxcblx0XHR0ZW1wbGF0ZUVkaXQ6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50ZW1wbGF0ZUVkaXRcblx0fTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkJBO0VBQ0E7RUFDQTtFQUNBO0VBQUEsSUFFWUEsZUFBZSwwQkFBZkEsZUFBZTtJQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBQSxPQUFmQSxlQUFlO0VBQUE7RUFBQUMsUUFBQSxDQUFBRCxlQUFBLEdBQUFBLGVBQUE7RUFBQSxJQUtmRSxTQUFTLDBCQUFUQSxTQUFTO0lBQVRBLFNBQVM7SUFBVEEsU0FBUztJQUFBLE9BQVRBLFNBQVM7RUFBQTtFQUFBRCxRQUFBLENBQUFDLFNBQUEsR0FBQUEsU0FBQTtFQUFBLElBS1RDLGtCQUFrQiwwQkFBbEJBLGtCQUFrQjtJQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFFRztJQUZyQkEsa0JBQWtCO0lBR1k7SUFIOUJBLGtCQUFrQix5REFJdUI7SUFBQSxPQUp6Q0Esa0JBQWtCO0VBQUE7RUFBQUYsUUFBQSxDQUFBRSxrQkFBQSxHQUFBQSxrQkFBQTtFQUFBLElBaUJ6QkMsbUJB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
|
|
409
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJIZWFkZXJGYWNldFR5cGUiLCJfZXhwb3J0cyIsIkZhY2V0VHlwZSIsIkZsZXhEZXNpZ25UaW1lVHlwZSIsIkhlYWRlckRhdGFQb2ludFR5cGUiLCJUYXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyIsImNvbnZlcnRlckNvbnRleHQiLCJoZWFkZXJGYWNldHMiLCJnZXRFbnRpdHlUeXBlIiwiYW5ub3RhdGlvbnMiLCJVSSIsIkhlYWRlckZhY2V0cyIsImZvckVhY2giLCJmYWNldCIsImhlYWRlckZhY2V0IiwiY3JlYXRlSGVhZGVyRmFjZXQiLCJwdXNoIiwiZ2V0SGVhZGVyRmFjZXRzRnJvbU1hbmlmZXN0IiwibWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHMiLCJjdXN0b21IZWFkZXJGYWNldHMiLCJPYmplY3QiLCJrZXlzIiwibWFuaWZlc3RIZWFkZXJGYWNldEtleSIsImN1c3RvbUhlYWRlckZhY2V0IiwiY3JlYXRlQ3VzdG9tSGVhZGVyRmFjZXQiLCJnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImZhY2V0RGVmaW5pdGlvbiIsImNvbGxlY3Rpb25GYWNldERlZmluaXRpb24iLCIkVHlwZSIsImhlYWRlckZhY2V0SUQiLCJjcmVhdGVJZEZvckFubm90YXRpb24iLCJoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnIiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiZ2V0SGVhZGVyRmFjZXRzIiwic3Rhc2hlZFNldHRpbmciLCJzdGFzaGVkIiwiZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldCIsImRlc2lnblRpbWVNZXRhZGF0YSIsIkRlZmF1bHQiLCJOb3RBZGFwdGFibGVUcmVlIiwiZGVzaWduVGltZSIsImZsZXhTZXR0aW5ncyIsImRlc2lnbnRpbWUiLCJOb3RBZGFwdGFibGUiLCJOb3RBZGFwdGFibGVWaXNpYmlsaXR5IiwiY3JlYXRlUmVmZXJlbmNlSGVhZGVyRmFjZXQiLCJIaWRkZW4iLCJ2YWx1ZU9mIiwiZ2V0SGVhZGVyRmFjZXRJRCIsImdldEhlYWRlckZhY2V0S2V5IiwiZmFjZXREZWZpbml0aW9uVG9DaGVjayIsImZhbGxiYWNrIiwiSUQiLCJ0b1N0cmluZyIsIkxhYmVsIiwidGFyZ2V0QW5ub3RhdGlvblZhbHVlIiwiVGFyZ2V0IiwidmFsdWUiLCJ0YXJnZXRBbm5vdGF0aW9uVHlwZSIsImdldFRhcmdldEFubm90YXRpb25UeXBlIiwiaGVhZGVyRm9ybURhdGEiLCJoZWFkZXJEYXRhUG9pbnREYXRhIiwiRmllbGRHcm91cCIsImdldEZpZWxkR3JvdXBGb3JtRGF0YSIsIkRhdGFQb2ludCIsImdldERhdGFQb2ludERhdGEiLCIkdGFyZ2V0IiwidGVybSIsImlzQW5ub3RhdGlvbkZpZWxkU3RhdGljYWxseUhpZGRlbiIsInVuZGVmaW5lZCIsInR5cGUiLCJBbm5vdGF0aW9uIiwiZmFjZXRUeXBlIiwiUmVmZXJlbmNlIiwiaWQiLCJjb250YWluZXJJZCIsImdldEhlYWRlckZhY2V0Q29udGFpbmVySUQiLCJrZXkiLCJ2aXNpYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpc1Zpc2libGUiLCJhbm5vdGF0aW9uUGF0aCIsImdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgiLCJmdWxseVF1YWxpZmllZE5hbWUiLCJjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQiLCJmYWNldHMiLCJGYWNldHMiLCJDb2xsZWN0aW9uIiwiYW5ub3RhdGlvblR5cGUiLCJOb25lIiwiYW5ub3RhdGlvblR5cGVNYXAiLCJDaGFydCIsIklkZW50aWZpY2F0aW9uIiwiQ29udGFjdCIsIkFkZHJlc3MiLCJQcmVzZW50YXRpb25WYXJpYW50IiwiRXJyb3IiLCJmb3JtRWxlbWVudHMiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsImdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyIsImdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCIsImdldEhlYWRlckZhY2V0Rm9ybUlEIiwibGFiZWwiLCJhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwibmF2UHJvcHMiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJtYXAiLCJuYXZQcm9wT2JqIiwibmFtZSIsIkRhdGEiLCJkYXRhRmllbGQiLCJzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoIiwiZ2V0U2VtYW50aWNPYmplY3RQYXRoIiwiaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4iLCJpc1ZhbHVlTXVsdGlsaW5lVGV4dCIsImlzTXVsdGlMaW5lVGV4dCIsIlZhbHVlIiwiRm9ybUVsZW1lbnRUeXBlIiwiS2V5SGVscGVyIiwiZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkIiwiQ29tbW9uIiwiaWRQcmVmaXgiLCJzZW1hbnRpY09iamVjdFBhdGgiLCJDb250ZW50IiwiVmlzdWFsaXphdGlvbiIsIlByb2dyZXNzSW5kaWNhdG9yIiwiUmF0aW5nSW5kaWNhdG9yIiwiZGF0YVBvaW50IiwicHJvcGVydHkiLCJTZW1hbnRpY09iamVjdCIsImdlbmVyYXRlQmluZGluZyIsInJlcXVlc3RHcm91cElkIiwiZ3JvdXBJZCIsImluY2x1ZGVzIiwiY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uIiwiaGVhZGVyRmFjZXRLZXkiLCJjdXN0b21IZWFkZXJGYWNldElEIiwiZ2V0Q3VzdG9tSGVhZGVyRmFjZXRJRCIsInBvc2l0aW9uIiwicGxhY2VtZW50IiwiUGxhY2VtZW50IiwiQWZ0ZXIiLCJmcmFnbWVudE5hbWUiLCJ0ZW1wbGF0ZSIsInRpdGxlIiwic3ViVGl0bGUiLCJiaW5kaW5nIiwidGVtcGxhdGVFZGl0Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJIZWFkZXJGYWNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFQb2ludCxcblx0RmFjZXRUeXBlcyxcblx0RmllbGRHcm91cCxcblx0UmVmZXJlbmNlRmFjZXRUeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UZXJtcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgdHlwZSBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdEhlYWRlckZhY2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0U2VtYW50aWNPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvYW5ub3RhdGlvbnMvRGF0YUZpZWxkXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYWJsZU9iamVjdCwgQ29uZmlndXJhYmxlUmVjb3JkLCBDdXN0b21FbGVtZW50LCBQb3NpdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQ29uZmlndXJhYmxlT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGFjZW1lbnQsIGluc2VydEN1c3RvbUVsZW1lbnRzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Db25maWd1cmFibGVPYmplY3RcIjtcbmltcG9ydCB7XG5cdGdldEN1c3RvbUhlYWRlckZhY2V0SUQsXG5cdGdldEhlYWRlckZhY2V0Q29udGFpbmVySUQsXG5cdGdldEhlYWRlckZhY2V0Rm9ybUlELFxuXHRnZXRIZWFkZXJGYWNldElEXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCB7IEtleUhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvS2V5XCI7XG5pbXBvcnQgeyBpc011bHRpTGluZVRleHQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHsgaXNWaXNpYmxlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgeyBjcmVhdGVJZEZvckFubm90YXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgaXNBbm5vdGF0aW9uRmllbGRTdGF0aWNhbGx5SGlkZGVuLCBpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbiB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL0RhdGFGaWVsZEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uRm9ybUVsZW1lbnQsIEZvcm1FbGVtZW50IH0gZnJvbSBcIi4uL0NvbW1vbi9Gb3JtXCI7XG5pbXBvcnQgeyBGb3JtRWxlbWVudFR5cGUsIGdldEZvcm1FbGVtZW50c0Zyb21NYW5pZmVzdCB9IGZyb20gXCIuLi9Db21tb24vRm9ybVwiO1xuXG4vLyByZWdpb24gZGVmaW5pdGlvbnNcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gRGVmaW5pdGlvbnM6IEhlYWRlciBGYWNldCBUeXBlcywgR2VuZXJpYyBPUCBIZWFkZXIgRmFjZXQsIE1hbmlmZXN0IFByb3BlcnRpZXMgZm9yIEN1c3RvbSBIZWFkZXIgRmFjZXRcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG5leHBvcnQgZW51bSBIZWFkZXJGYWNldFR5cGUge1xuXHRBbm5vdGF0aW9uID0gXCJBbm5vdGF0aW9uXCIsXG5cdFhNTEZyYWdtZW50ID0gXCJYTUxGcmFnbWVudFwiXG59XG5cbmV4cG9ydCBlbnVtIEZhY2V0VHlwZSB7XG5cdFJlZmVyZW5jZSA9IFwiUmVmZXJlbmNlXCIsXG5cdENvbGxlY3Rpb24gPSBcIkNvbGxlY3Rpb25cIlxufVxuXG5leHBvcnQgZW51bSBGbGV4RGVzaWduVGltZVR5cGUge1xuXHREZWZhdWx0ID0gXCJEZWZhdWx0XCIsXG5cdE5vdEFkYXB0YWJsZSA9IFwibm90LWFkYXB0YWJsZVwiLCAvLyBkaXNhYmxlIGFsbCBhY3Rpb25zIG9uIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVHJlZSA9IFwibm90LWFkYXB0YWJsZS10cmVlXCIsIC8vIGRpc2FibGUgYWxsIGFjdGlvbnMgb24gdGhhdCBpbnN0YW5jZSBhbmQgb24gYWxsIGNoaWxkcmVuIG9mIHRoYXQgaW5zdGFuY2Vcblx0Tm90QWRhcHRhYmxlVmlzaWJpbGl0eSA9IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCIgLy8gZGlzYWJsZSBhbGwgYWN0aW9ucyB0aGF0IGluZmx1ZW5jZSB0aGUgdmlzaWJpbGl0eSwgbmFtZWx5IHJldmVhbCBhbmQgcmVtb3ZlXG59XG5cbmV4cG9ydCB0eXBlIEZsZXhTZXR0aW5ncyA9IHtcblx0ZGVzaWdudGltZT86IEZsZXhEZXNpZ25UaW1lVHlwZTtcbn07XG5cbnR5cGUgSGVhZGVyRm9ybURhdGEgPSB7XG5cdGlkOiBzdHJpbmc7XG5cdGxhYmVsPzogc3RyaW5nO1xuXHRmb3JtRWxlbWVudHM6IEZvcm1FbGVtZW50W107XG59O1xuXG5lbnVtIEhlYWRlckRhdGFQb2ludFR5cGUge1xuXHRQcm9ncmVzc0luZGljYXRvciA9IFwiUHJvZ3Jlc3NJbmRpY2F0b3JcIixcblx0UmF0aW5nSW5kaWNhdG9yID0gXCJSYXRpbmdJbmRpY2F0b3JcIixcblx0Q29udGVudCA9IFwiQ29udGVudFwiXG59XG5cbnR5cGUgSGVhZGVyRGF0YVBvaW50RGF0YSA9IHtcblx0dHlwZTogSGVhZGVyRGF0YVBvaW50VHlwZTtcblx0c2VtYW50aWNPYmplY3RQYXRoPzogc3RyaW5nO1xufTtcblxuZW51bSBUYXJnZXRBbm5vdGF0aW9uVHlwZSB7XG5cdE5vbmUgPSBcIk5vbmVcIixcblx0RGF0YVBvaW50ID0gXCJEYXRhUG9pbnRcIixcblx0Q2hhcnQgPSBcIkNoYXJ0XCIsXG5cdElkZW50aWZpY2F0aW9uID0gXCJJZGVudGlmaWNhdGlvblwiLFxuXHRDb250YWN0ID0gXCJDb250YWN0XCIsXG5cdEFkZHJlc3MgPSBcIkFkZHJlc3NcIixcblx0RmllbGRHcm91cCA9IFwiRmllbGRHcm91cFwiLFxuXHRQcmVzZW50YXRpb25WYXJpYW50ID0gXCJQcmVzZW50YXRpb25WYXJpYW50XCJcbn1cblxudHlwZSBCYXNlSGVhZGVyRmFjZXQgPSBDb25maWd1cmFibGVPYmplY3QgJiB7XG5cdHR5cGU/OiBIZWFkZXJGYWNldFR5cGU7IC8vIE1hbmlmZXN0IG9yIE1ldGFkYXRhXG5cdGlkOiBzdHJpbmc7XG5cdGNvbnRhaW5lcklkOiBzdHJpbmc7XG5cdGFubm90YXRpb25QYXRoPzogc3RyaW5nO1xuXHRmbGV4U2V0dGluZ3M6IEZsZXhTZXR0aW5ncztcblx0c3Rhc2hlZDogYm9vbGVhbjtcblx0dmlzaWJsZTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb247XG5cdHRhcmdldEFubm90YXRpb25WYWx1ZT86IHN0cmluZztcblx0dGFyZ2V0QW5ub3RhdGlvblR5cGU/OiBUYXJnZXRBbm5vdGF0aW9uVHlwZTtcbn07XG5cbnR5cGUgQmFzZVJlZmVyZW5jZUZhY2V0ID0gQmFzZUhlYWRlckZhY2V0ICYge1xuXHRmYWNldFR5cGU6IEZhY2V0VHlwZS5SZWZlcmVuY2U7XG59O1xuXG5leHBvcnQgdHlwZSBGaWVsZEdyb3VwRmFjZXQgPSBCYXNlUmVmZXJlbmNlRmFjZXQgJiB7XG5cdGhlYWRlckZvcm1EYXRhOiBIZWFkZXJGb3JtRGF0YTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFQb2ludEZhY2V0ID0gQmFzZVJlZmVyZW5jZUZhY2V0ICYge1xuXHRoZWFkZXJEYXRhUG9pbnREYXRhPzogSGVhZGVyRGF0YVBvaW50RGF0YTtcbn07XG5cbnR5cGUgUmVmZXJlbmNlRmFjZXQgPSBGaWVsZEdyb3VwRmFjZXQgfCBEYXRhUG9pbnRGYWNldDtcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvbkZhY2V0ID0gQmFzZUhlYWRlckZhY2V0ICYge1xuXHRmYWNldFR5cGU6IEZhY2V0VHlwZS5Db2xsZWN0aW9uO1xuXHRmYWNldHM6IFJlZmVyZW5jZUZhY2V0W107XG59O1xuXG5leHBvcnQgdHlwZSBPYmplY3RQYWdlSGVhZGVyRmFjZXQgPSBSZWZlcmVuY2VGYWNldCB8IENvbGxlY3Rpb25GYWNldDtcblxuZXhwb3J0IHR5cGUgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0ID0gQ3VzdG9tRWxlbWVudDxPYmplY3RQYWdlSGVhZGVyRmFjZXQ+ICYge1xuXHRmcmFnbWVudE5hbWU/OiBzdHJpbmc7XG5cdHRpdGxlPzogc3RyaW5nO1xuXHRzdWJUaXRsZT86IHN0cmluZztcblx0c3Rhc2hlZD86IGJvb2xlYW47XG5cdGJpbmRpbmc/OiBzdHJpbmc7XG5cdHRlbXBsYXRlRWRpdD86IHN0cmluZztcbn07XG5cbi8vIGVuZHJlZ2lvbiBkZWZpbml0aW9uc1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIENvbGxlY3QgQWxsIEhlYWRlciBGYWNldHM6IEN1c3RvbSAodmlhIE1hbmlmZXN0KSBhbmQgQW5ub3RhdGlvbiBCYXNlZCAodmlhIE1ldGFtb2RlbClcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIFJldHJpZXZlIGhlYWRlciBmYWNldHMgZnJvbSBhbm5vdGF0aW9ucy5cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBIZWFkZXIgZmFjZXRzIGZyb20gYW5ub3RhdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckZhY2V0c0Zyb21Bbm5vdGF0aW9ucyhjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBPYmplY3RQYWdlSGVhZGVyRmFjZXRbXSB7XG5cdGNvbnN0IGhlYWRlckZhY2V0czogT2JqZWN0UGFnZUhlYWRlckZhY2V0W10gPSBbXTtcblx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCkuYW5ub3RhdGlvbnM/LlVJPy5IZWFkZXJGYWNldHM/LmZvckVhY2goKGZhY2V0KSA9PiB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXQ6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZCA9IGNyZWF0ZUhlYWRlckZhY2V0KGZhY2V0LCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRpZiAoaGVhZGVyRmFjZXQpIHtcblx0XHRcdGhlYWRlckZhY2V0cy5wdXNoKGhlYWRlckZhY2V0KTtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBoZWFkZXJGYWNldHM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgY3VzdG9tIGhlYWRlciBmYWNldHMgZnJvbSBtYW5pZmVzdC5cbiAqIEBwYXJhbSBtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0c1xuICogQHJldHVybnMgSGVhZGVyRmFjZXRzIGZyb20gbWFuaWZlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhlYWRlckZhY2V0c0Zyb21NYW5pZmVzdChcblx0bWFuaWZlc3RDdXN0b21IZWFkZXJGYWNldHM6IENvbmZpZ3VyYWJsZVJlY29yZDxNYW5pZmVzdEhlYWRlckZhY2V0PlxuKTogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiB7XG5cdGNvbnN0IGN1c3RvbUhlYWRlckZhY2V0czogUmVjb3JkPHN0cmluZywgQ3VzdG9tT2JqZWN0UGFnZUhlYWRlckZhY2V0PiA9IHt9O1xuXG5cdE9iamVjdC5rZXlzKG1hbmlmZXN0Q3VzdG9tSGVhZGVyRmFjZXRzKS5mb3JFYWNoKChtYW5pZmVzdEhlYWRlckZhY2V0S2V5KSA9PiB7XG5cdFx0Y29uc3QgY3VzdG9tSGVhZGVyRmFjZXQ6IE1hbmlmZXN0SGVhZGVyRmFjZXQgPSBtYW5pZmVzdEN1c3RvbUhlYWRlckZhY2V0c1ttYW5pZmVzdEhlYWRlckZhY2V0S2V5XTtcblx0XHRjdXN0b21IZWFkZXJGYWNldHNbbWFuaWZlc3RIZWFkZXJGYWNldEtleV0gPSBjcmVhdGVDdXN0b21IZWFkZXJGYWNldChjdXN0b21IZWFkZXJGYWNldCwgbWFuaWZlc3RIZWFkZXJGYWNldEtleSk7XG5cdH0pO1xuXG5cdHJldHVybiBjdXN0b21IZWFkZXJGYWNldHM7XG59XG5cbi8qKlxuICogUmV0cmlldmUgc3Rhc2hlZCBzZXR0aW5ncyBmb3IgaGVhZGVyIGZhY2V0cyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBTdGFzaGVkIHNldHRpbmcgZm9yIGhlYWRlciBmYWNldCBvciBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3Rhc2hlZFNldHRpbmdzRm9ySGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBib29sZWFuIHtcblx0Ly8gV2hlbiBhIEhlYWRlckZhY2V0IGlzIG5lc3RlZCBpbnNpZGUgYSBDb2xsZWN0aW9uRmFjZXQsIHN0YXNoaW5nIGlzIG5vdCBzdXBwb3J0ZWRcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGNvbnN0IGhlYWRlckZhY2V0SUQgPSBjcmVhdGVJZEZvckFubm90YXRpb24oZmFjZXREZWZpbml0aW9uKSA/PyBcIlwiO1xuXHRjb25zdCBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnID0gY29udmVydGVyQ29udGV4dC5nZXRNYW5pZmVzdFdyYXBwZXIoKS5nZXRIZWFkZXJGYWNldHMoKTtcblx0Y29uc3Qgc3Rhc2hlZFNldHRpbmcgPSBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnW2hlYWRlckZhY2V0SURdPy5zdGFzaGVkO1xuXHRyZXR1cm4gc3Rhc2hlZFNldHRpbmcgPT09IHRydWU7XG59XG5cbi8qKlxuICogUmV0cmlldmUgZmxleGliaWxpdHkgZGVzaWdudGltZSBzZXR0aW5ncyBmcm9tIG1hbmlmZXN0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0XG4gKiBAcmV0dXJucyBEZXNpZ250aW1lIHNldHRpbmcgb3IgZGVmYXVsdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEZsZXhEZXNpZ25UaW1lVHlwZSB7XG5cdGxldCBkZXNpZ25UaW1lTWV0YWRhdGE6IEZsZXhEZXNpZ25UaW1lVHlwZSA9IEZsZXhEZXNpZ25UaW1lVHlwZS5EZWZhdWx0O1xuXHRjb25zdCBoZWFkZXJGYWNldElEID0gY3JlYXRlSWRGb3JBbm5vdGF0aW9uKGZhY2V0RGVmaW5pdGlvbik7XG5cblx0Ly8gRm9yIEhlYWRlckZhY2V0cyBuZXN0ZWQgaW5zaWRlIENvbGxlY3Rpb25GYWNldCBSVEEgc2hvdWxkIGJlIGRpc2FibGVkLCB0aGVyZWZvcmUgc2V0IHRvIFwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0aWYgKFxuXHRcdGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiZcblx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXRcblx0KSB7XG5cdFx0ZGVzaWduVGltZU1ldGFkYXRhID0gRmxleERlc2lnblRpbWVUeXBlLk5vdEFkYXB0YWJsZVRyZWU7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgaGVhZGVyRmFjZXRzQ29udHJvbENvbmZpZyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0TWFuaWZlc3RXcmFwcGVyKCkuZ2V0SGVhZGVyRmFjZXRzKCk7XG5cdFx0aWYgKGhlYWRlckZhY2V0SUQpIHtcblx0XHRcdGNvbnN0IGRlc2lnblRpbWUgPSBoZWFkZXJGYWNldHNDb250cm9sQ29uZmlnW2hlYWRlckZhY2V0SURdPy5mbGV4U2V0dGluZ3M/LmRlc2lnbnRpbWU7XG5cdFx0XHRzd2l0Y2ggKGRlc2lnblRpbWUpIHtcblx0XHRcdFx0Y2FzZSBGbGV4RGVzaWduVGltZVR5cGUuTm90QWRhcHRhYmxlOlxuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVUcmVlOlxuXHRcdFx0XHRjYXNlIEZsZXhEZXNpZ25UaW1lVHlwZS5Ob3RBZGFwdGFibGVWaXNpYmlsaXR5OlxuXHRcdFx0XHRcdGRlc2lnblRpbWVNZXRhZGF0YSA9IGRlc2lnblRpbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkZXNpZ25UaW1lTWV0YWRhdGE7XG59XG5cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gQ29udmVydCAmIEJ1aWxkIEFubm90YXRpb24gQmFzZWQgSGVhZGVyIEZhY2V0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5mdW5jdGlvbiBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IFJlZmVyZW5jZUZhY2V0IHwgdW5kZWZpbmVkIHtcblx0aWYgKGZhY2V0RGVmaW5pdGlvbi4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuUmVmZXJlbmNlRmFjZXQgJiYgZmFjZXREZWZpbml0aW9uLmFubm90YXRpb25zPy5VST8uSGlkZGVuPy52YWx1ZU9mKCkgIT09IHRydWUpIHtcblx0XHRjb25zdCBoZWFkZXJGYWNldElEID0gZ2V0SGVhZGVyRmFjZXRJRChmYWNldERlZmluaXRpb24pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uVG9DaGVjazogRmFjZXRUeXBlcywgZmFsbGJhY2s6IHN0cmluZyk6IHN0cmluZyA9PiB7XG5cdFx0XHRcdHJldHVybiBmYWNldERlZmluaXRpb25Ub0NoZWNrLklEPy50b1N0cmluZygpIHx8IGZhY2V0RGVmaW5pdGlvblRvQ2hlY2suTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9LFxuXHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlID0gZmFjZXREZWZpbml0aW9uLlRhcmdldC52YWx1ZSxcblx0XHRcdHRhcmdldEFubm90YXRpb25UeXBlID0gZ2V0VGFyZ2V0QW5ub3RhdGlvblR5cGUoZmFjZXREZWZpbml0aW9uKTtcblxuXHRcdGxldCBoZWFkZXJGb3JtRGF0YTogSGVhZGVyRm9ybURhdGEgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IGhlYWRlckRhdGFQb2ludERhdGE6IEhlYWRlckRhdGFQb2ludERhdGEgfCB1bmRlZmluZWQ7XG5cblx0XHRzd2l0Y2ggKHRhcmdldEFubm90YXRpb25UeXBlKSB7XG5cdFx0XHRjYXNlIFRhcmdldEFubm90YXRpb25UeXBlLkZpZWxkR3JvdXA6XG5cdFx0XHRcdGhlYWRlckZvcm1EYXRhID0gZ2V0RmllbGRHcm91cEZvcm1EYXRhKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFRhcmdldEFubm90YXRpb25UeXBlLkRhdGFQb2ludDpcblx0XHRcdFx0aGVhZGVyRGF0YVBvaW50RGF0YSA9IGdldERhdGFQb2ludERhdGEoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHQvLyBUb0RvOiBIYW5kbGUgb3RoZXIgY2FzZXNcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGlmIChmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0Py50ZXJtID09PSBVSUFubm90YXRpb25UZXJtcy5DaGFydCAmJiBpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4oZmFjZXREZWZpbml0aW9uKSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dHlwZTogSGVhZGVyRmFjZXRUeXBlLkFubm90YXRpb24sXG5cdFx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZSxcblx0XHRcdFx0aWQ6IGhlYWRlckZhY2V0SUQsXG5cdFx0XHRcdGNvbnRhaW5lcklkOiBnZXRIZWFkZXJGYWNldENvbnRhaW5lcklEKGZhY2V0RGVmaW5pdGlvbiksXG5cdFx0XHRcdGtleTogZ2V0SGVhZGVyRmFjZXRLZXkoZmFjZXREZWZpbml0aW9uLCBoZWFkZXJGYWNldElEKSxcblx0XHRcdFx0ZmxleFNldHRpbmdzOiB7XG5cdFx0XHRcdFx0ZGVzaWdudGltZTogZ2V0RGVzaWduVGltZU1ldGFkYXRhU2V0dGluZ3NGb3JIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sIGNvbnZlcnRlckNvbnRleHQpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHN0YXNoZWQ6IGdldFN0YXNoZWRTZXR0aW5nc0ZvckhlYWRlckZhY2V0KGZhY2V0RGVmaW5pdGlvbiwgY29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShmYWNldERlZmluaXRpb24pKSxcblx0XHRcdFx0YW5ub3RhdGlvblBhdGg6IGAke2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChmYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdFx0dGFyZ2V0QW5ub3RhdGlvblZhbHVlLFxuXHRcdFx0XHR0YXJnZXRBbm5vdGF0aW9uVHlwZSxcblx0XHRcdFx0aGVhZGVyRm9ybURhdGEsXG5cdFx0XHRcdGhlYWRlckRhdGFQb2ludERhdGFcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29sbGVjdGlvbkhlYWRlckZhY2V0KFxuXHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IENvbGxlY3Rpb25GYWNldCB8IHVuZGVmaW5lZCB7XG5cdGlmIChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQpIHtcblx0XHRjb25zdCBmYWNldHM6IFJlZmVyZW5jZUZhY2V0W10gPSBbXSxcblx0XHRcdGhlYWRlckZhY2V0SUQgPSBnZXRIZWFkZXJGYWNldElEKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24pLFxuXHRcdFx0Z2V0SGVhZGVyRmFjZXRLZXkgPSAoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nID0+IHtcblx0XHRcdFx0cmV0dXJuIGZhY2V0RGVmaW5pdGlvbi5JRD8udG9TdHJpbmcoKSB8fCBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCkgfHwgZmFsbGJhY2s7XG5cdFx0XHR9O1xuXG5cdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbi5GYWNldHMuZm9yRWFjaCgoZmFjZXREZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBmYWNldDogUmVmZXJlbmNlRmFjZXQgfCB1bmRlZmluZWQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChcblx0XHRcdFx0ZmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLFxuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKGZhY2V0KSB7XG5cdFx0XHRcdGZhY2V0cy5wdXNoKGZhY2V0KTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiBIZWFkZXJGYWNldFR5cGUuQW5ub3RhdGlvbixcblx0XHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLkNvbGxlY3Rpb24sXG5cdFx0XHRpZDogaGVhZGVyRmFjZXRJRCxcblx0XHRcdGNvbnRhaW5lcklkOiBnZXRIZWFkZXJGYWNldENvbnRhaW5lcklEKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24pLFxuXHRcdFx0a2V5OiBnZXRIZWFkZXJGYWNldEtleShjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBoZWFkZXJGYWNldElEKSxcblx0XHRcdGZsZXhTZXR0aW5nczoge1xuXHRcdFx0XHRkZXNpZ250aW1lOiBnZXREZXNpZ25UaW1lTWV0YWRhdGFTZXR0aW5nc0ZvckhlYWRlckZhY2V0KFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24sXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkZhY2V0RGVmaW5pdGlvbixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0XG5cdFx0XHRcdClcblx0XHRcdH0sXG5cdFx0XHRzdGFzaGVkOiBnZXRTdGFzaGVkU2V0dGluZ3NGb3JIZWFkZXJGYWNldChjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KSxcblx0XHRcdHZpc2libGU6IGNvbXBpbGVFeHByZXNzaW9uKGlzVmlzaWJsZShjb2xsZWN0aW9uRmFjZXREZWZpbml0aW9uKSksXG5cdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGNvbGxlY3Rpb25GYWNldERlZmluaXRpb24uZnVsbHlRdWFsaWZpZWROYW1lKX0vYCxcblx0XHRcdGZhY2V0c1xuXHRcdH07XG5cdH1cblxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRBbm5vdGF0aW9uVHlwZShmYWNldERlZmluaXRpb246IEZhY2V0VHlwZXMpOiBUYXJnZXRBbm5vdGF0aW9uVHlwZSB7XG5cdGxldCBhbm5vdGF0aW9uVHlwZSA9IFRhcmdldEFubm90YXRpb25UeXBlLk5vbmU7XG5cdGNvbnN0IGFubm90YXRpb25UeXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBUYXJnZXRBbm5vdGF0aW9uVHlwZT4gPSB7XG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5EYXRhUG9pbnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuRGF0YVBvaW50LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuQ2hhcnRcIjogVGFyZ2V0QW5ub3RhdGlvblR5cGUuQ2hhcnQsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5JZGVudGlmaWNhdGlvblwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5JZGVudGlmaWNhdGlvbixcblx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFwiOiBUYXJnZXRBbm5vdGF0aW9uVHlwZS5Db250YWN0LFxuXHRcdFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5BZGRyZXNzXCI6IFRhcmdldEFubm90YXRpb25UeXBlLkFkZHJlc3MsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5GaWVsZEdyb3VwXCI6IFRhcmdldEFubm90YXRpb25UeXBlLkZpZWxkR3JvdXAsXG5cdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5QcmVzZW50YXRpb25WYXJpYW50XCI6IFRhcmdldEFubm90YXRpb25UeXBlLlByZXNlbnRhdGlvblZhcmlhbnRcblx0fTtcblx0Ly8gUmVmZXJlbmNlVVJMRmFjZXQgYW5kIENvbGxlY3Rpb25GYWNldCBkbyBub3QgaGF2ZSBUYXJnZXQgcHJvcGVydHkuXG5cdGlmIChcblx0XHRmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZVVSTEZhY2V0ICYmXG5cdFx0ZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQgJiZcblx0XHRmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXRcblx0KSB7XG5cdFx0YW5ub3RhdGlvblR5cGUgPSBhbm5vdGF0aW9uVHlwZU1hcFtmYWNldERlZmluaXRpb24uVGFyZ2V0LiR0YXJnZXQudGVybV0gPz8gVGFyZ2V0QW5ub3RhdGlvblR5cGUuTm9uZTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uVHlwZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmllbGRHcm91cEZvcm1EYXRhKFxuXHRmYWNldERlZmluaXRpb246IFJlZmVyZW5jZUZhY2V0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PlxuKTogSGVhZGVyRm9ybURhdGEge1xuXHQvLyBzcGxpdCBpbiB0aGlzIGZyb20gYW5ub3RhdGlvbiArIGdldEZpZWxkR3JvdXBGcm9tRGVmYXVsdFxuXHRpZiAoIWZhY2V0RGVmaW5pdGlvbikge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZXQgRmllbGRHcm91cCBmb3JtIGRhdGEgd2l0aG91dCBmYWNldCBkZWZpbml0aW9uXCIpO1xuXHR9XG5cblx0Y29uc3QgZm9ybUVsZW1lbnRzID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbUFubm90YXRpb25zKGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCksXG5cdFx0Z2V0Rm9ybUVsZW1lbnRzRnJvbU1hbmlmZXN0KGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dClcblx0KTtcblxuXHRyZXR1cm4ge1xuXHRcdGlkOiBnZXRIZWFkZXJGYWNldEZvcm1JRChmYWNldERlZmluaXRpb24pLFxuXHRcdGxhYmVsOiBmYWNldERlZmluaXRpb24uTGFiZWw/LnRvU3RyaW5nKCksXG5cdFx0Zm9ybUVsZW1lbnRzXG5cdH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBtYW5pZmVzdC1iYXNlZCBGb3JtRWxlbWVudHMuXG4gKiBAcGFyYW0gZmFjZXREZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBmYWNldFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciB0aGUgZmFjZXRcbiAqIEByZXR1cm5zIEFubm90YXRpb24tYmFzZWQgRm9ybUVsZW1lbnRzXG4gKi9cbmZ1bmN0aW9uIGdldEZvcm1FbGVtZW50c0Zyb21Bbm5vdGF0aW9ucyhcblx0ZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD5cbik6IEFubm90YXRpb25Gb3JtRWxlbWVudFtdIHtcblx0Y29uc3QgYW5ub3RhdGlvbkJhc2VkRm9ybUVsZW1lbnRzOiBBbm5vdGF0aW9uRm9ybUVsZW1lbnRbXSA9IFtdO1xuXG5cdC8vIFJlZmVyZW5jZVVSTEZhY2V0IGFuZCBDb2xsZWN0aW9uRmFjZXQgZG8gbm90IGhhdmUgVGFyZ2V0IHByb3BlcnR5LlxuXHRpZiAoZmFjZXREZWZpbml0aW9uLiRUeXBlICE9PSBVSUFubm90YXRpb25UeXBlcy5SZWZlcmVuY2VVUkxGYWNldCAmJiBmYWNldERlZmluaXRpb24uJFR5cGUgIT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCkge1xuXHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihmYWNldERlZmluaXRpb24uVGFyZ2V0LnZhbHVlKTtcblx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gcmVzb2x2ZWRUYXJnZXQuY29udmVydGVyQ29udGV4dDtcblx0XHRjb25zdCBuYXZQcm9wcyA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpLm5hdmlnYXRpb25Qcm9wZXJ0aWVzLm1hcCgobmF2UHJvcE9iaikgPT4gbmF2UHJvcE9iai5uYW1lKTtcblx0XHQoZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBGaWVsZEdyb3VwKT8uRGF0YS5mb3JFYWNoKChkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdGlmIChkYXRhRmllbGQuYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW4/LnZhbHVlT2YoKSAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoID0gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQsIGRhdGFGaWVsZCk7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGQgfHxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aFVybCB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggfHxcblx0XHRcdFx0XHRcdGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbiB8fFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoQWN0aW9uKSAmJlxuXHRcdFx0XHRcdCFpc1JlZmVyZW5jZVByb3BlcnR5U3RhdGljYWxseUhpZGRlbihkYXRhRmllbGQpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGFubm90YXRpb25CYXNlZEZvcm1FbGVtZW50cy5wdXNoKHtcblx0XHRcdFx0XHRcdGlzVmFsdWVNdWx0aWxpbmVUZXh0OiBpc011bHRpTGluZVRleHQoZGF0YUZpZWxkLlZhbHVlPy4kdGFyZ2V0KSxcblx0XHRcdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGUoZGF0YUZpZWxkLCBuYXZQcm9wcykpLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5WYWx1ZT8uJHRhcmdldD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWwgfHwgZGF0YUZpZWxkLkxhYmVsLFxuXHRcdFx0XHRcdFx0aWRQcmVmaXg6IGdldEhlYWRlckZhY2V0Rm9ybUlEKGZhY2V0RGVmaW5pdGlvbiwgZGF0YUZpZWxkKSxcblx0XHRcdFx0XHRcdGFubm90YXRpb25QYXRoOiBgJHtjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoZGF0YUZpZWxkLmZ1bGx5UXVhbGlmaWVkTmFtZSl9L2AsXG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGg6IHNlbWFudGljT2JqZWN0QW5ub3RhdGlvblBhdGhcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24gJiZcblx0XHRcdFx0XHQhaXNSZWZlcmVuY2VQcm9wZXJ0eVN0YXRpY2FsbHlIaWRkZW4oZGF0YUZpZWxkKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHMucHVzaCh7XG5cdFx0XHRcdFx0XHRpc1ZhbHVlTXVsdGlsaW5lVGV4dDogZmFsc2UsIC8vIHdhcyBkYXRhRmllbGQuVGFyZ2V0Py4kdGFyZ2V0Py5hbm5vdGF0aW9ucz8uVUk/Lk11bHRpTGluZVRleHQ/LnZhbHVlT2YoKSA9PT0gdHJ1ZSBidXQgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgYXMgdGhlIHRhcmdldCBjYW5ub3QgaGF2ZSB0aGF0IGFubm90YXRpb25cblx0XHRcdFx0XHRcdHR5cGU6IEZvcm1FbGVtZW50VHlwZS5Bbm5vdGF0aW9uLFxuXHRcdFx0XHRcdFx0a2V5OiBLZXlIZWxwZXIuZ2VuZXJhdGVLZXlGcm9tRGF0YUZpZWxkKGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHR2aXNpYmxlOiBjb21waWxlRXhwcmVzc2lvbihpc1Zpc2libGUoZGF0YUZpZWxkLCBuYXZQcm9wcykpLFxuXHRcdFx0XHRcdFx0bGFiZWw6IGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8IGRhdGFGaWVsZC5MYWJlbD8udG9TdHJpbmcoKSxcblx0XHRcdFx0XHRcdGlkUHJlZml4OiBnZXRIZWFkZXJGYWNldEZvcm1JRChmYWNldERlZmluaXRpb24sIGRhdGFGaWVsZCksXG5cdFx0XHRcdFx0XHRhbm5vdGF0aW9uUGF0aDogYCR7Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKGRhdGFGaWVsZC5mdWxseVF1YWxpZmllZE5hbWUpfS9gLFxuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3RQYXRoOiBzZW1hbnRpY09iamVjdEFubm90YXRpb25QYXRoXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHJldHVybiBhbm5vdGF0aW9uQmFzZWRGb3JtRWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGdldERhdGFQb2ludERhdGEoZmFjZXREZWZpbml0aW9uOiBGYWNldFR5cGVzLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0PFBhZ2VDb250ZXh0UGF0aFRhcmdldD4pOiBIZWFkZXJEYXRhUG9pbnREYXRhIHtcblx0bGV0IHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLkNvbnRlbnQ7XG5cdGxldCBzZW1hbnRpY09iamVjdFBhdGg7XG5cdGlmIChmYWNldERlZmluaXRpb24uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0ICYmICFpc0Fubm90YXRpb25GaWVsZFN0YXRpY2FsbHlIaWRkZW4oZmFjZXREZWZpbml0aW9uKSkge1xuXHRcdGlmICgoZmFjZXREZWZpbml0aW9uLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WaXN1YWxpemF0aW9uID09PSBcIlVJLlZpc3VhbGl6YXRpb25UeXBlL1Byb2dyZXNzXCIpIHtcblx0XHRcdHR5cGUgPSBIZWFkZXJEYXRhUG9pbnRUeXBlLlByb2dyZXNzSW5kaWNhdG9yO1xuXHRcdH0gZWxzZSBpZiAoKGZhY2V0RGVmaW5pdGlvbi5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmlzdWFsaXphdGlvbiA9PT0gXCJVSS5WaXN1YWxpemF0aW9uVHlwZS9SYXRpbmdcIikge1xuXHRcdFx0dHlwZSA9IEhlYWRlckRhdGFQb2ludFR5cGUuUmF0aW5nSW5kaWNhdG9yO1xuXHRcdH1cblx0XHRjb25zdCBkYXRhUG9pbnQgPSBmYWNldERlZmluaXRpb24uVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludDtcblxuXHRcdGlmICh0eXBlb2YgZGF0YVBvaW50ID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRpZiAoZGF0YVBvaW50Py5WYWx1ZT8uJHRhcmdldCkge1xuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eSA9IGRhdGFQb2ludC5WYWx1ZS4kdGFyZ2V0O1xuXHRcdFx0XHRpZiAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRzZW1hbnRpY09iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgocHJvcGVydHk/LmZ1bGx5UXVhbGlmaWVkTmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyB0eXBlLCBzZW1hbnRpY09iamVjdFBhdGggfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFubm90YXRpb24tYmFzZWQgaGVhZGVyIGZhY2V0LlxuICogQHBhcmFtIGZhY2V0RGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgZmFjZXRcbiAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQgYW5ub3RhdGlvbi1iYXNlZCBoZWFkZXIgZmFjZXRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSGVhZGVyRmFjZXQoXG5cdGZhY2V0RGVmaW5pdGlvbjogRmFjZXRUeXBlcyxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+XG4pOiBPYmplY3RQYWdlSGVhZGVyRmFjZXQgfCB1bmRlZmluZWQge1xuXHRsZXQgaGVhZGVyRmFjZXQ6IE9iamVjdFBhZ2VIZWFkZXJGYWNldCB8IHVuZGVmaW5lZDtcblx0c3dpdGNoIChmYWNldERlZmluaXRpb24uJFR5cGUpIHtcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLlJlZmVyZW5jZUZhY2V0OlxuXHRcdFx0aGVhZGVyRmFjZXQgPSBjcmVhdGVSZWZlcmVuY2VIZWFkZXJGYWNldChmYWNldERlZmluaXRpb24sIGZhY2V0RGVmaW5pdGlvbiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuQ29sbGVjdGlvbkZhY2V0OlxuXHRcdFx0aGVhZGVyRmFjZXQgPSBjcmVhdGVDb2xsZWN0aW9uSGVhZGVyRmFjZXQoZmFjZXREZWZpbml0aW9uLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBoZWFkZXJGYWNldDtcbn1cblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBDb252ZXJ0ICYgQnVpbGQgTWFuaWZlc3QgQmFzZWQgSGVhZGVyIEZhY2V0c1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmZ1bmN0aW9uIGdlbmVyYXRlQmluZGluZyhyZXF1ZXN0R3JvdXBJZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGlmICghcmVxdWVzdEdyb3VwSWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGdyb3VwSWQgPSBbXCJIZXJvZXNcIiwgXCJEZWNvcmF0aW9uXCIsIFwiV29ya2Vyc1wiLCBcIkxvbmdSdW5uZXJzXCJdLmluY2x1ZGVzKHJlcXVlc3RHcm91cElkKVxuXHRcdD8gYCRhdXRvLiR7cmVxdWVzdEdyb3VwSWR9YFxuXHRcdDogcmVxdWVzdEdyb3VwSWQ7XG5cblx0cmV0dXJuIGB7IHBhdGggOiAnJywgcGFyYW1ldGVycyA6IHsgJCRncm91cElkIDogJyR7Z3JvdXBJZH0nIH0gfWA7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgbWFuaWZlc3QgYmFzZWQgY3VzdG9tIGhlYWRlciBmYWNldC5cbiAqIEBwYXJhbSBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb25cbiAqIEBwYXJhbSBoZWFkZXJGYWNldEtleVxuICogQHJldHVybnMgVGhlIG1hbmlmZXN0IGJhc2VkIGN1c3RvbSBoZWFkZXIgZmFjZXQgY3JlYXRlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXN0b21IZWFkZXJGYWNldChjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb246IE1hbmlmZXN0SGVhZGVyRmFjZXQsIGhlYWRlckZhY2V0S2V5OiBzdHJpbmcpOiBDdXN0b21PYmplY3RQYWdlSGVhZGVyRmFjZXQge1xuXHRjb25zdCBjdXN0b21IZWFkZXJGYWNldElEID0gZ2V0Q3VzdG9tSGVhZGVyRmFjZXRJRChoZWFkZXJGYWNldEtleSk7XG5cblx0bGV0IHBvc2l0aW9uOiBQb3NpdGlvbiB8IHVuZGVmaW5lZCA9IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi5wb3NpdGlvbjtcblx0aWYgKCFwb3NpdGlvbikge1xuXHRcdHBvc2l0aW9uID0ge1xuXHRcdFx0cGxhY2VtZW50OiBQbGFjZW1lbnQuQWZ0ZXJcblx0XHR9O1xuXHR9XG5cdC8vIFRPRE8gZm9yIGFuIG5vbiBhbm5vdGF0aW9uIGZyYWdtZW50IHRoZSBuYW1lIGlzIG1hbmRhdG9yeSAtPiBOb3QgY2hlY2tlZFxuXHRyZXR1cm4ge1xuXHRcdGZhY2V0VHlwZTogRmFjZXRUeXBlLlJlZmVyZW5jZSxcblx0XHR0eXBlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udHlwZSxcblx0XHRpZDogY3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0XHRjb250YWluZXJJZDogY3VzdG9tSGVhZGVyRmFjZXRJRCxcblx0XHRrZXk6IGhlYWRlckZhY2V0S2V5LFxuXHRcdHBvc2l0aW9uOiBwb3NpdGlvbixcblx0XHR2aXNpYmxlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24udmlzaWJsZSxcblx0XHRmcmFnbWVudE5hbWU6IGN1c3RvbUhlYWRlckZhY2V0RGVmaW5pdGlvbi50ZW1wbGF0ZSB8fCBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ubmFtZSxcblx0XHR0aXRsZTogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnRpdGxlLFxuXHRcdHN1YlRpdGxlOiBjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24uc3ViVGl0bGUsXG5cdFx0c3Rhc2hlZDogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnN0YXNoZWQgfHwgZmFsc2UsXG5cdFx0ZmxleFNldHRpbmdzOiB7IC4uLnsgZGVzaWdudGltZTogRmxleERlc2lnblRpbWVUeXBlLkRlZmF1bHQgfSwgLi4uY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLmZsZXhTZXR0aW5ncyB9LFxuXHRcdGJpbmRpbmc6IGdlbmVyYXRlQmluZGluZyhjdXN0b21IZWFkZXJGYWNldERlZmluaXRpb24ucmVxdWVzdEdyb3VwSWQpLFxuXHRcdHRlbXBsYXRlRWRpdDogY3VzdG9tSGVhZGVyRmFjZXREZWZpbml0aW9uLnRlbXBsYXRlRWRpdFxuXHR9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2QkE7RUFDQTtFQUNBO0VBQ0E7RUFBQSxJQUVZQSxlQUFlLDBCQUFmQSxlQUFlO0lBQWZBLGVBQWU7SUFBZkEsZUFBZTtJQUFBLE9BQWZBLGVBQWU7RUFBQTtFQUFBQyxRQUFBLENBQUFELGVBQUEsR0FBQUEsZUFBQTtFQUFBLElBS2ZFLFNBQVMsMEJBQVRBLFNBQVM7SUFBVEEsU0FBUztJQUFUQSxTQUFTO0lBQUEsT0FBVEEsU0FBUztFQUFBO0VBQUFELFFBQUEsQ0FBQUMsU0FBQSxHQUFBQSxTQUFBO0VBQUEsSUFLVEMsa0JBQWtCLDBCQUFsQkEsa0JBQWtCO0lBQWxCQSxrQkFBa0I7SUFBbEJBLGtCQUFrQjtJQUVHO0lBRnJCQSxrQkFBa0I7SUFHWTtJQUg5QkEsa0JBQWtCLHlEQUl1QjtJQUFBLE9BSnpDQSxrQkFBa0I7RUFBQTtFQUFBRixRQUFBLENBQUFFLGtCQUFBLEdBQUFBLGtCQUFBO0VBQUEsSUFpQnpCQyxtQkFBbUIsMEJBQW5CQSxtQkFBbUI7SUFBbkJBLG1CQUFtQjtJQUFuQkEsbUJBQW1CO0lBQW5CQSxtQkFBbUI7SUFBQSxPQUFuQkEsbUJBQW1CO0VBQUEsRUFBbkJBLG1CQUFtQjtFQUFBLElBV25CQyxvQkFBb0IsMEJBQXBCQSxvQkFBb0I7SUFBcEJBLG9CQUFvQjtJQUFwQkEsb0JBQW9CO0lBQXBCQSxvQkFBb0I7SUFBcEJBLG9CQUFvQjtJQUFwQkEsb0JBQW9CO0lBQXBCQSxvQkFBb0I7SUFBcEJBLG9CQUFvQjtJQUFwQkEsb0JBQW9CO0lBQUEsT0FBcEJBLG9CQUFvQjtFQUFBLEVBQXBCQSxvQkFBb0I7RUFxRHpCOztFQUVBO0VBQ0E7RUFDQTs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsOEJBQThCQSxDQUFDQyxnQkFBeUQsRUFBMkI7SUFDbEksTUFBTUMsWUFBcUMsR0FBRyxFQUFFO0lBQ2hERCxnQkFBZ0IsQ0FBQ0UsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxFQUFFQyxFQUFFLEVBQUVDLFlBQVksRUFBRUMsT0FBTyxDQUFFQyxLQUFLLElBQUs7TUFDbEYsTUFBTUMsV0FBOEMsR0FBR0MsaUJBQWlCLENBQUNGLEtBQUssRUFBRVAsZ0JBQWdCLENBQUM7TUFDakcsSUFBSVEsV0FBVyxFQUFFO1FBQ2hCUCxZQUFZLENBQUNTLElBQUksQ0FBQ0YsV0FBVyxDQUFDO01BQy9CO0lBQ0QsQ0FBQyxDQUFDO0lBRUYsT0FBT1AsWUFBWTtFQUNwQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBSkFQLFFBQUEsQ0FBQUssOEJBQUEsR0FBQUEsOEJBQUE7RUFLTyxTQUFTWSwyQkFBMkJBLENBQzFDQywwQkFBbUUsRUFDckI7SUFDOUMsTUFBTUMsa0JBQStELEdBQUcsQ0FBQyxDQUFDO0lBRTFFQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsMEJBQTBCLENBQUMsQ0FBQ04sT0FBTyxDQUFFVSxzQkFBc0IsSUFBSztNQUMzRSxNQUFNQyxpQkFBc0MsR0FBR0wsMEJBQTBCLENBQUNJLHNCQUFzQixDQUFDO01BQ2pHSCxrQkFBa0IsQ0FBQ0csc0JBQXNCLENBQUMsR0FBR0UsdUJBQXVCLENBQUNELGlCQUFpQixFQUFFRCxzQkFBc0IsQ0FBQztJQUNoSCxDQUFDLENBQUM7SUFFRixPQUFPSCxrQkFBa0I7RUFDMUI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQW5CLFFBQUEsQ0FBQWlCLDJCQUFBLEdBQUFBLDJCQUFBO0VBT08sU0FBU1EsZ0NBQWdDQSxDQUMvQ0MsZUFBMkIsRUFDM0JDLHlCQUFxQyxFQUNyQ3JCLGdCQUF5RCxFQUMvQztJQUNWO0lBQ0EsSUFDQ29CLGVBQWUsQ0FBQ0UsS0FBSyxnREFBcUMsSUFDMURELHlCQUF5QixDQUFDQyxLQUFLLGlEQUFzQyxFQUNwRTtNQUNELE9BQU8sS0FBSztJQUNiO0lBQ0EsTUFBTUMsYUFBYSxHQUFHQyxxQkFBcUIsQ0FBQ0osZUFBZSxDQUFDLElBQUksRUFBRTtJQUNsRSxNQUFNSyx5QkFBeUIsR0FBR3pCLGdCQUFnQixDQUFDMEIsa0JBQWtCLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQztJQUN6RixNQUFNQyxjQUFjLEdBQUdILHlCQUF5QixDQUFDRixhQUFhLENBQUMsRUFBRU0sT0FBTztJQUN4RSxPQUFPRCxjQUFjLEtBQUssSUFBSTtFQUMvQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQU5BbEMsUUFBQSxDQUFBeUIsZ0NBQUEsR0FBQUEsZ0NBQUE7RUFPTyxTQUFTVywyQ0FBMkNBLENBQzFEVixlQUEyQixFQUMzQkMseUJBQXFDLEVBQ3JDckIsZ0JBQXlELEVBQ3BDO0lBQ3JCLElBQUkrQixrQkFBc0MsR0FBR25DLGtCQUFrQixDQUFDb0MsT0FBTztJQUN2RSxNQUFNVCxhQUFhLEdBQUdDLHFCQUFxQixDQUFDSixlQUFlLENBQUM7O0lBRTVEO0lBQ0EsSUFDQ0EsZUFBZSxDQUFDRSxLQUFLLGdEQUFxQyxJQUMxREQseUJBQXlCLENBQUNDLEtBQUssaURBQXNDLEVBQ3BFO01BQ0RTLGtCQUFrQixHQUFHbkMsa0JBQWtCLENBQUNxQyxnQkFBZ0I7SUFDekQsQ0FBQyxNQUFNO01BQ04sTUFBTVIseUJBQXlCLEdBQUd6QixnQkFBZ0IsQ0FBQzBCLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDLENBQUM7TUFDekYsSUFBSUosYUFBYSxFQUFFO1FBQ2xCLE1BQU1XLFVBQVUsR0FBR1QseUJBQXlCLENBQUNGLGFBQWEsQ0FBQyxFQUFFWSxZQUFZLEVBQUVDLFVBQVU7UUFDckYsUUFBUUYsVUFBVTtVQUNqQixLQUFLdEMsa0JBQWtCLENBQUN5QyxZQUFZO1VBQ3BDLEtBQUt6QyxrQkFBa0IsQ0FBQ3FDLGdCQUFnQjtVQUN4QyxLQUFLckMsa0JBQWtCLENBQUMwQyxzQkFBc0I7WUFDN0NQLGtCQUFrQixHQUFHRyxVQUFVO1lBQy9CO1VBQ0Q7WUFDQztRQUNGO01BQ0Q7SUFDRDtJQUNBLE9BQU9ILGtCQUFrQjtFQUMxQjs7RUFFQTtFQUNBO0VBQ0E7RUFBQXJDLFFBQUEsQ0FBQW9DLDJDQUFBLEdBQUFBLDJDQUFBO0VBQ0EsU0FBU1MsMEJBQTBCQSxDQUNsQ25CLGVBQTJCLEVBQzNCQyx5QkFBcUMsRUFDckNyQixnQkFBeUQsRUFDNUI7SUFDN0IsSUFBSW9CLGVBQWUsQ0FBQ0UsS0FBSyxnREFBcUMsSUFBSUYsZUFBZSxDQUFDakIsV0FBVyxFQUFFQyxFQUFFLEVBQUVvQyxNQUFNLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO01BQzlILE1BQU1sQixhQUFhLEdBQUdtQixnQkFBZ0IsQ0FBQ3RCLGVBQWUsQ0FBQztRQUN0RHVCLGlCQUFpQixHQUFHQSxDQUFDQyxzQkFBa0MsRUFBRUMsUUFBZ0IsS0FBYTtVQUNyRixPQUFPRCxzQkFBc0IsQ0FBQ0UsRUFBRSxFQUFFQyxRQUFRLENBQUMsQ0FBQyxJQUFJSCxzQkFBc0IsQ0FBQ0ksS0FBSyxFQUFFRCxRQUFRLENBQUMsQ0FBQyxJQUFJRixRQUFRO1FBQ3JHLENBQUM7UUFDREkscUJBQXFCLEdBQUc3QixlQUFlLENBQUM4QixNQUFNLENBQUNDLEtBQUs7UUFDcERDLG9CQUFvQixHQUFHQyx1QkFBdUIsQ0FBQ2pDLGVBQWUsQ0FBQztNQUVoRSxJQUFJa0MsY0FBMEM7TUFDOUMsSUFBSUMsbUJBQW9EO01BRXhELFFBQVFILG9CQUFvQjtRQUMzQixLQUFLdEQsb0JBQW9CLENBQUMwRCxVQUFVO1VBQ25DRixjQUFjLEdBQUdHLHFCQUFxQixDQUFDckMsZUFBZSxFQUFFcEIsZ0JBQWdCLENBQUM7VUFDekU7UUFFRCxLQUFLRixvQkFBb0IsQ0FBQzRELFNBQVM7VUFDbENILG1CQUFtQixHQUFHSSxnQkFBZ0IsQ0FBQ3ZDLGVBQWUsRUFBRXBCLGdCQUFnQixDQUFDO1VBQ3pFO1FBQ0Q7UUFDQTtVQUNDO01BQ0Y7TUFFQSxJQUFJb0IsZUFBZSxDQUFDOEIsTUFBTSxFQUFFVSxPQUFPLEVBQUVDLElBQUksdUNBQTRCLElBQUlDLGlDQUFpQyxDQUFDMUMsZUFBZSxDQUFDLEVBQUU7UUFDNUgsT0FBTzJDLFNBQVM7TUFDakIsQ0FBQyxNQUFNO1FBQ04sT0FBTztVQUNOQyxJQUFJLEVBQUV2RSxlQUFlLENBQUN3RSxVQUFVO1VBQ2hDQyxTQUFTLEVBQUV2RSxTQUFTLENBQUN3RSxTQUFTO1VBQzlCQyxFQUFFLEVBQUU3QyxhQUFhO1VBQ2pCOEMsV0FBVyxFQUFFQyx5QkFBeUIsQ0FBQ2xELGVBQWUsQ0FBQztVQUN2RG1ELEdBQUcsRUFBRTVCLGlCQUFpQixDQUFDdkIsZUFBZSxFQUFFRyxhQUFhLENBQUM7VUFDdERZLFlBQVksRUFBRTtZQUNiQyxVQUFVLEVBQUVOLDJDQUEyQyxDQUFDVixlQUFlLEVBQUVDLHlCQUF5QixFQUFFckIsZ0JBQWdCO1VBQ3JILENBQUM7VUFDRDZCLE9BQU8sRUFBRVYsZ0NBQWdDLENBQUNDLGVBQWUsRUFBRUMseUJBQXlCLEVBQUVyQixnQkFBZ0IsQ0FBQztVQUN2R3dFLE9BQU8sRUFBRUMsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQ3RELGVBQWUsQ0FBQyxDQUFDO1VBQ3REdUQsY0FBYyxFQUFFLEdBQUczRSxnQkFBZ0IsQ0FBQzRFLCtCQUErQixDQUFDeEQsZUFBZSxDQUFDeUQsa0JBQWtCLENBQUMsR0FBRztVQUMxRzVCLHFCQUFxQjtVQUNyQkcsb0JBQW9CO1VBQ3BCRSxjQUFjO1VBQ2RDO1FBQ0QsQ0FBQztNQUNGO0lBQ0Q7SUFFQSxPQUFPUSxTQUFTO0VBQ2pCO0VBRUEsU0FBU2UsMkJBQTJCQSxDQUNuQ3pELHlCQUFxQyxFQUNyQ3JCLGdCQUF5RCxFQUMzQjtJQUM5QixJQUFJcUIseUJBQXlCLENBQUNDLEtBQUssaURBQXNDLEVBQUU7TUFDMUUsTUFBTXlELE1BQXdCLEdBQUcsRUFBRTtRQUNsQ3hELGFBQWEsR0FBR21CLGdCQUFnQixDQUFDckIseUJBQXlCLENBQUM7UUFDM0RzQixpQkFBaUIsR0FBR0EsQ0FBQ3ZCLGVBQTJCLEVBQUV5QixRQUFnQixLQUFhO1VBQzlFLE9BQU96QixlQUFlLENBQUMwQixFQUFFLEVBQUVDLFFBQVEsQ0FBQyxDQUFDLElBQUkzQixlQUFlLENBQUM0QixLQUFLLEVBQUVELFFBQVEsQ0FBQyxDQUFDLElBQUlGLFFBQVE7UUFDdkYsQ0FBQztNQUVGeEIseUJBQXlCLENBQUMyRCxNQUFNLENBQUMxRSxPQUFPLENBQUVjLGVBQWUsSUFBSztRQUM3RCxNQUFNYixLQUFpQyxHQUFHZ0MsMEJBQTBCLENBQ25FbkIsZUFBZSxFQUNmQyx5QkFBeUIsRUFDekJyQixnQkFDRCxDQUFDO1FBQ0QsSUFBSU8sS0FBSyxFQUFFO1VBQ1Z3RSxNQUFNLENBQUNyRSxJQUFJLENBQUNILEtBQUssQ0FBQztRQUNuQjtNQUNELENBQUMsQ0FBQztNQUVGLE9BQU87UUFDTnlELElBQUksRUFBRXZFLGVBQWUsQ0FBQ3dFLFVBQVU7UUFDaENDLFNBQVMsRUFBRXZFLFNBQVMsQ0FBQ3NGLFVBQVU7UUFDL0JiLEVBQUUsRUFBRTdDLGFBQWE7UUFDakI4QyxXQUFXLEVBQUVDLHlCQUF5QixDQUFDakQseUJBQXlCLENBQUM7UUFDakVrRCxHQUFHLEVBQUU1QixpQkFBaUIsQ0FBQ3RCLHlCQUF5QixFQUFFRSxhQUFhLENBQUM7UUFDaEVZLFlBQVksRUFBRTtVQUNiQyxVQUFVLEVBQUVOLDJDQUEyQyxDQUN0RFQseUJBQXlCLEVBQ3pCQSx5QkFBeUIsRUFDekJyQixnQkFDRDtRQUNELENBQUM7UUFDRDZCLE9BQU8sRUFBRVYsZ0NBQWdDLENBQUNFLHlCQUF5QixFQUFFQSx5QkFBeUIsRUFBRXJCLGdCQUFnQixDQUFDO1FBQ2pId0UsT0FBTyxFQUFFQyxpQkFBaUIsQ0FBQ0MsU0FBUyxDQUFDckQseUJBQXlCLENBQUMsQ0FBQztRQUNoRXNELGNBQWMsRUFBRSxHQUFHM0UsZ0JBQWdCLENBQUM0RSwrQkFBK0IsQ0FBQ3ZELHlCQUF5QixDQUFDd0Qsa0JBQWtCLENBQUMsR0FBRztRQUNwSEU7TUFDRCxDQUFDO0lBQ0Y7SUFFQSxPQUFPaEIsU0FBUztFQUNqQjtFQUVBLFNBQVNWLHVCQUF1QkEsQ0FBQ2pDLGVBQTJCLEVBQXdCO0lBQ25GLElBQUk4RCxjQUFjLEdBQUdwRixvQkFBb0IsQ0FBQ3FGLElBQUk7SUFDOUMsTUFBTUMsaUJBQXVELEdBQUc7TUFDL0Qsc0NBQXNDLEVBQUV0RixvQkFBb0IsQ0FBQzRELFNBQVM7TUFDdEUsa0NBQWtDLEVBQUU1RCxvQkFBb0IsQ0FBQ3VGLEtBQUs7TUFDOUQsMkNBQTJDLEVBQUV2RixvQkFBb0IsQ0FBQ3dGLGNBQWM7TUFDaEYsK0NBQStDLEVBQUV4RixvQkFBb0IsQ0FBQ3lGLE9BQU87TUFDN0UsK0NBQStDLEVBQUV6RixvQkFBb0IsQ0FBQzBGLE9BQU87TUFDN0UsdUNBQXVDLEVBQUUxRixvQkFBb0IsQ0FBQzBELFVBQVU7TUFDeEUsZ0RBQWdELEVBQUUxRCxvQkFBb0IsQ0FBQzJGO0lBQ3hFLENBQUM7SUFDRDtJQUNBLElBQ0NyRSxlQUFlLENBQUNFLEtBQUssbURBQXdDLElBQzdERixlQUFlLENBQUNFLEtBQUssaURBQXNDLElBQzNERixlQUFlLENBQUM4QixNQUFNLENBQUNVLE9BQU8sRUFDN0I7TUFDRHNCLGNBQWMsR0FBR0UsaUJBQWlCLENBQUNoRSxlQUFlLENBQUM4QixNQUFNLENBQUNVLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLElBQUkvRCxvQkFBb0IsQ0FBQ3FGLElBQUk7SUFDckc7SUFFQSxPQUFPRCxjQUFjO0VBQ3RCO0VBRUEsU0FBU3pCLHFCQUFxQkEsQ0FDN0JyQyxlQUFvQyxFQUNwQ3BCLGdCQUF5RCxFQUN4QztJQUNqQjtJQUNBLElBQUksQ0FBQ29CLGVBQWUsRUFBRTtNQUNyQixNQUFNLElBQUlzRSxLQUFLLENBQUMsMERBQTBELENBQUM7SUFDNUU7SUFFQSxNQUFNQyxZQUFZLEdBQUdDLG9CQUFvQixDQUN4Q0MsOEJBQThCLENBQUN6RSxlQUFlLEVBQUVwQixnQkFBZ0IsQ0FBQyxFQUNqRThGLDJCQUEyQixDQUFDMUUsZUFBZSxFQUFFcEIsZ0JBQWdCLENBQzlELENBQUM7SUFFRCxPQUFPO01BQ05vRSxFQUFFLEVBQUUyQixvQkFBb0IsQ0FBQzNFLGVBQWUsQ0FBQztNQUN6QzRFLEtBQUssRUFBRTVFLGVBQWUsQ0FBQzRCLEtBQUssRUFBRUQsUUFBUSxDQUFDLENBQUM7TUFDeEM0QztJQUNELENBQUM7RUFDRjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTRSw4QkFBOEJBLENBQ3RDekUsZUFBMkIsRUFDM0JwQixnQkFBeUQsRUFDL0I7SUFDMUIsTUFBTWlHLDJCQUFvRCxHQUFHLEVBQUU7O0lBRS9EO0lBQ0EsSUFBSTdFLGVBQWUsQ0FBQ0UsS0FBSyxtREFBd0MsSUFBSUYsZUFBZSxDQUFDRSxLQUFLLGlEQUFzQyxFQUFFO01BQ2pJLE1BQU00RSxjQUFjLEdBQUdsRyxnQkFBZ0IsQ0FBQ21HLHVCQUF1QixDQUFDL0UsZUFBZSxDQUFDOEIsTUFBTSxDQUFDQyxLQUFLLENBQUM7TUFDN0ZuRCxnQkFBZ0IsR0FBR2tHLGNBQWMsQ0FBQ2xHLGdCQUFnQjtNQUNsRCxNQUFNb0csUUFBUSxHQUFHcEcsZ0JBQWdCLENBQUNxRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDQyxHQUFHLENBQUVDLFVBQVUsSUFBS0EsVUFBVSxDQUFDQyxJQUFJLENBQUM7TUFDbkhyRixlQUFlLENBQUM4QixNQUFNLEVBQUVVLE9BQU8sRUFBaUI4QyxJQUFJLENBQUNwRyxPQUFPLENBQUVxRyxTQUFpQyxJQUFLO1FBQ3BHLElBQUlBLFNBQVMsQ0FBQ3hHLFdBQVcsRUFBRUMsRUFBRSxFQUFFb0MsTUFBTSxFQUFFQyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtVQUMxRCxNQUFNbUUsNEJBQTRCLEdBQUdDLHFCQUFxQixDQUFDN0csZ0JBQWdCLEVBQUUyRyxTQUFTLENBQUM7VUFDdkYsSUFDQyxDQUFDQSxTQUFTLENBQUNyRixLQUFLLDJDQUFnQyxJQUMvQ3FGLFNBQVMsQ0FBQ3JGLEtBQUssa0RBQXVDLElBQ3REcUYsU0FBUyxDQUFDckYsS0FBSyw2REFBa0QsSUFDakVxRixTQUFTLENBQUNyRixLQUFLLG9FQUF5RCxJQUN4RXFGLFNBQVMsQ0FBQ3JGLEtBQUsscURBQTBDLEtBQzFELENBQUN3RixtQ0FBbUMsQ0FBQ0gsU0FBUyxDQUFDLEVBQzlDO1lBQ0RWLDJCQUEyQixDQUFDdkYsSUFBSSxDQUFDO2NBQ2hDcUcsb0JBQW9CLEVBQUVDLGVBQWUsQ0FBQ0wsU0FBUyxDQUFDTSxLQUFLLEVBQUVyRCxPQUFPLENBQUM7Y0FDL0RJLElBQUksRUFBRWtELGVBQWUsQ0FBQ2pELFVBQVU7Y0FDaENNLEdBQUcsRUFBRTRDLFNBQVMsQ0FBQ0Msd0JBQXdCLENBQUNULFNBQVMsQ0FBQztjQUNsRG5DLE9BQU8sRUFBRUMsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQ2lDLFNBQVMsRUFBRVAsUUFBUSxDQUFDLENBQUM7Y0FDMURKLEtBQUssRUFBRVcsU0FBUyxDQUFDTSxLQUFLLEVBQUVyRCxPQUFPLEVBQUV6RCxXQUFXLEVBQUVrSCxNQUFNLEVBQUVyRSxLQUFLLElBQUkyRCxTQUFTLENBQUMzRCxLQUFLO2NBQzlFc0UsUUFBUSxFQUFFdkIsb0JBQW9CLENBQUMzRSxlQUFlLEVBQUV1RixTQUFTLENBQUM7Y0FDMURoQyxjQUFjLEVBQUUsR0FBRzNFLGdCQUFnQixDQUFDNEUsK0JBQStCLENBQUMrQixTQUFTLENBQUM5QixrQkFBa0IsQ0FBQyxHQUFHO2NBQ3BHMEMsa0JBQWtCLEVBQUVYO1lBQ3JCLENBQUMsQ0FBQztVQUNILENBQUMsTUFBTSxJQUNORCxTQUFTLENBQUNyRixLQUFLLHdEQUE2QyxJQUM1RCxDQUFDd0YsbUNBQW1DLENBQUNILFNBQVMsQ0FBQyxFQUM5QztZQUNEViwyQkFBMkIsQ0FBQ3ZGLElBQUksQ0FBQztjQUNoQ3FHLG9CQUFvQixFQUFFLEtBQUs7Y0FBRTtjQUM3Qi9DLElBQUksRUFBRWtELGVBQWUsQ0FBQ2pELFVBQVU7Y0FDaENNLEdBQUcsRUFBRTRDLFNBQVMsQ0FBQ0Msd0JBQXdCLENBQUNULFNBQVMsQ0FBQztjQUNsRG5DLE9BQU8sRUFBRUMsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQ2lDLFNBQVMsRUFBRVAsUUFBUSxDQUFDLENBQUM7Y0FDMURKLEtBQUssRUFBRVcsU0FBUyxDQUFDekQsTUFBTSxFQUFFVSxPQUFPLEVBQUV6RCxXQUFXLEVBQUVrSCxNQUFNLEVBQUVyRSxLQUFLLEVBQUVELFFBQVEsQ0FBQyxDQUFDLElBQUk0RCxTQUFTLENBQUMzRCxLQUFLLEVBQUVELFFBQVEsQ0FBQyxDQUFDO2NBQ3ZHdUUsUUFBUSxFQUFFdkIsb0JBQW9CLENBQUMzRSxlQUFlLEVBQUV1RixTQUFTLENBQUM7Y0FDMURoQyxjQUFjLEVBQUUsR0FBRzNFLGdCQUFnQixDQUFDNEUsK0JBQStCLENBQUMrQixTQUFTLENBQUM5QixrQkFBa0IsQ0FBQyxHQUFHO2NBQ3BHMEMsa0JBQWtCLEVBQUVYO1lBQ3JCLENBQUMsQ0FBQztVQUNIO1FBQ0Q7TUFDRCxDQUFDLENBQUM7SUFDSDtJQUVBLE9BQU9YLDJCQUEyQjtFQUNuQztFQUVBLFNBQVN0QyxnQkFBZ0JBLENBQUN2QyxlQUEyQixFQUFFcEIsZ0JBQXlELEVBQXVCO0lBQ3RJLElBQUlnRSxJQUFJLEdBQUduRSxtQkFBbUIsQ0FBQzJILE9BQU87SUFDdEMsSUFBSUQsa0JBQWtCO0lBQ3RCLElBQUluRyxlQUFlLENBQUNFLEtBQUssZ0RBQXFDLElBQUksQ0FBQ3dDLGlDQUFpQyxDQUFDMUMsZUFBZSxDQUFDLEVBQUU7TUFDdEgsSUFBS0EsZUFBZSxDQUFDOEIsTUFBTSxFQUFFVSxPQUFPLEVBQWdCNkQsYUFBYSxLQUFLLCtCQUErQixFQUFFO1FBQ3RHekQsSUFBSSxHQUFHbkUsbUJBQW1CLENBQUM2SCxpQkFBaUI7TUFDN0MsQ0FBQyxNQUFNLElBQUt0RyxlQUFlLENBQUM4QixNQUFNLEVBQUVVLE9BQU8sRUFBZ0I2RCxhQUFhLEtBQUssNkJBQTZCLEVBQUU7UUFDM0d6RCxJQUFJLEdBQUduRSxtQkFBbUIsQ0FBQzhILGVBQWU7TUFDM0M7TUFDQSxNQUFNQyxTQUFTLEdBQUd4RyxlQUFlLENBQUM4QixNQUFNLEVBQUVVLE9BQW9CO01BRTlELElBQUksT0FBT2dFLFNBQVMsS0FBSyxRQUFRLEVBQUU7UUFDbEMsSUFBSUEsU0FBUyxFQUFFWCxLQUFLLEVBQUVyRCxPQUFPLEVBQUU7VUFDOUIsTUFBTWlFLFFBQVEsR0FBR0QsU0FBUyxDQUFDWCxLQUFLLENBQUNyRCxPQUFPO1VBQ3hDLElBQUlpRSxRQUFRLEVBQUUxSCxXQUFXLEVBQUVrSCxNQUFNLEVBQUVTLGNBQWMsS0FBSy9ELFNBQVMsRUFBRTtZQUNoRXdELGtCQUFrQixHQUFHdkgsZ0JBQWdCLENBQUM0RSwrQkFBK0IsQ0FBQ2lELFFBQVEsRUFBRWhELGtCQUFrQixDQUFDO1VBQ3BHO1FBQ0Q7TUFDRDtJQUNEO0lBRUEsT0FBTztNQUFFYixJQUFJO01BQUV1RDtJQUFtQixDQUFDO0VBQ3BDOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVM5RyxpQkFBaUJBLENBQ3pCVyxlQUEyQixFQUMzQnBCLGdCQUF5RCxFQUNyQjtJQUNwQyxJQUFJUSxXQUE4QztJQUNsRCxRQUFRWSxlQUFlLENBQUNFLEtBQUs7TUFDNUI7UUFDQ2QsV0FBVyxHQUFHK0IsMEJBQTBCLENBQUNuQixlQUFlLEVBQUVBLGVBQWUsRUFBRXBCLGdCQUFnQixDQUFDO1FBQzVGO01BRUQ7UUFDQ1EsV0FBVyxHQUFHc0UsMkJBQTJCLENBQUMxRCxlQUFlLEVBQUVwQixnQkFBZ0IsQ0FBQztRQUM1RTtNQUNEO1FBQ0M7SUFDRjtJQUVBLE9BQU9RLFdBQVc7RUFDbkI7O0VBRUE7RUFDQTtFQUNBOztFQUVBLFNBQVN1SCxlQUFlQSxDQUFDQyxjQUF1QixFQUFzQjtJQUNyRSxJQUFJLENBQUNBLGNBQWMsRUFBRTtNQUNwQixPQUFPakUsU0FBUztJQUNqQjtJQUNBLE1BQU1rRSxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQ0MsUUFBUSxDQUFDRixjQUFjLENBQUMsR0FDeEYsU0FBU0EsY0FBYyxFQUFFLEdBQ3pCQSxjQUFjO0lBRWpCLE9BQU8sNENBQTRDQyxPQUFPLE9BQU87RUFDbEU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUy9HLHVCQUF1QkEsQ0FBQ2lILDJCQUFnRCxFQUFFQyxjQUFzQixFQUErQjtJQUN2SSxNQUFNQyxtQkFBbUIsR0FBR0Msc0JBQXNCLENBQUNGLGNBQWMsQ0FBQztJQUVsRSxJQUFJRyxRQUE4QixHQUFHSiwyQkFBMkIsQ0FBQ0ksUUFBUTtJQUN6RSxJQUFJLENBQUNBLFFBQVEsRUFBRTtNQUNkQSxRQUFRLEdBQUc7UUFDVkMsU0FBUyxFQUFFQyxTQUFTLENBQUNDO01BQ3RCLENBQUM7SUFDRjtJQUNBO0lBQ0EsT0FBTztNQUNOeEUsU0FBUyxFQUFFdkUsU0FBUyxDQUFDd0UsU0FBUztNQUM5QkgsSUFBSSxFQUFFbUUsMkJBQTJCLENBQUNuRSxJQUFJO01BQ3RDSSxFQUFFLEVBQUVpRSxtQkFBbUI7TUFDdkJoRSxXQUFXLEVBQUVnRSxtQkFBbUI7TUFDaEM5RCxHQUFHLEVBQUU2RCxjQUFjO01BQ25CRyxRQUFRLEVBQUVBLFFBQVE7TUFDbEIvRCxPQUFPLEVBQUUyRCwyQkFBMkIsQ0FBQzNELE9BQU87TUFDNUNtRSxZQUFZLEVBQUVSLDJCQUEyQixDQUFDUyxRQUFRLElBQUlULDJCQUEyQixDQUFDMUIsSUFBSTtNQUN0Rm9DLEtBQUssRUFBRVYsMkJBQTJCLENBQUNVLEtBQUs7TUFDeENDLFFBQVEsRUFBRVgsMkJBQTJCLENBQUNXLFFBQVE7TUFDOUNqSCxPQUFPLEVBQUVzRywyQkFBMkIsQ0FBQ3RHLE9BQU8sSUFBSSxLQUFLO01BQ3JETSxZQUFZLEVBQUU7UUFBRSxHQUFHO1VBQUVDLFVBQVUsRUFBRXhDLGtCQUFrQixDQUFDb0M7UUFBUSxDQUFDO1FBQUUsR0FBR21HLDJCQUEyQixDQUFDaEc7TUFBYSxDQUFDO01BQzVHNEcsT0FBTyxFQUFFaEIsZUFBZSxDQUFDSSwyQkFBMkIsQ0FBQ0gsY0FBYyxDQUFDO01BQ3BFZ0IsWUFBWSxFQUFFYiwyQkFBMkIsQ0FBQ2E7SUFDM0MsQ0FBQztFQUNGO0VBQUMsT0FBQXRKLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -391,6 +391,7 @@ function getFormElementsFromAnnotations(
|
|
|
391
391
|
if (facetDefinition.$Type !== UIAnnotationTypes.ReferenceURLFacet && facetDefinition.$Type !== UIAnnotationTypes.CollectionFacet) {
|
|
392
392
|
const resolvedTarget = converterContext.getEntityTypeAnnotation(facetDefinition.Target.value);
|
|
393
393
|
converterContext = resolvedTarget.converterContext;
|
|
394
|
+
const navProps = converterContext.getDataModelObjectPath().navigationProperties.map((navPropObj) => navPropObj.name);
|
|
394
395
|
(facetDefinition.Target?.$target as FieldGroup)?.Data.forEach((dataField: DataFieldAbstractTypes) => {
|
|
395
396
|
if (dataField.annotations?.UI?.Hidden?.valueOf() !== true) {
|
|
396
397
|
const semanticObjectAnnotationPath = getSemanticObjectPath(converterContext, dataField);
|
|
@@ -406,7 +407,7 @@ function getFormElementsFromAnnotations(
|
|
|
406
407
|
isValueMultilineText: isMultiLineText(dataField.Value?.$target),
|
|
407
408
|
type: FormElementType.Annotation,
|
|
408
409
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
409
|
-
visible: compileExpression(isVisible(dataField)),
|
|
410
|
+
visible: compileExpression(isVisible(dataField, navProps)),
|
|
410
411
|
label: dataField.Value?.$target?.annotations?.Common?.Label || dataField.Label,
|
|
411
412
|
idPrefix: getHeaderFacetFormID(facetDefinition, dataField),
|
|
412
413
|
annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName)}/`,
|
|
@@ -420,7 +421,7 @@ function getFormElementsFromAnnotations(
|
|
|
420
421
|
isValueMultilineText: false, // was dataField.Target?.$target?.annotations?.UI?.MultiLineText?.valueOf() === true but that doesn't make sense as the target cannot have that annotation
|
|
421
422
|
type: FormElementType.Annotation,
|
|
422
423
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
423
|
-
visible: compileExpression(isVisible(dataField)),
|
|
424
|
+
visible: compileExpression(isVisible(dataField, navProps)),
|
|
424
425
|
label: dataField.Target?.$target?.annotations?.Common?.Label?.toString() || dataField.Label?.toString(),
|
|
425
426
|
idPrefix: getHeaderFacetFormID(facetDefinition, dataField),
|
|
426
427
|
annotationPath: `${converterContext.getEntitySetBasedAnnotationPath(dataField.fullyQualifiedName)}/`,
|