@sapui5/sap.fe.macros 1.104.1 → 1.105.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/src/sap/fe/macros/.library +1 -1
- package/src/sap/fe/macros/Chart.fragment.xml +31 -40
- package/src/sap/fe/macros/Chart.metadata.js +9 -1
- package/src/sap/fe/macros/ChartAPI.js +2 -2
- package/src/sap/fe/macros/ChartDelegate.js +34 -3
- package/src/sap/fe/macros/ChartDelegate.ts +31 -2
- package/src/sap/fe/macros/CommonHelper.js +29 -13
- package/src/sap/fe/macros/CommonHelper.ts +27 -10
- package/src/sap/fe/macros/ContactHelper.js +1 -1
- package/src/sap/fe/macros/DelegateUtil.js +28 -5
- package/src/sap/fe/macros/DelegateUtil.ts +28 -5
- package/src/sap/fe/macros/DraftIndicatorRuntime.js +1 -1
- package/src/sap/fe/macros/Field.metadata.js +1 -1
- package/src/sap/fe/macros/FieldAPI.js +2 -2
- package/src/sap/fe/macros/FieldBaseDelegate.js +1 -1
- package/src/sap/fe/macros/FieldValueHelpDelegate.js +1 -1
- package/src/sap/fe/macros/FilterBar.fragment.xml +3 -1
- package/src/sap/fe/macros/FilterBar.metadata.js +21 -0
- package/src/sap/fe/macros/FilterBarAPI.js +43 -11
- package/src/sap/fe/macros/FilterBarAPI.ts +40 -5
- package/src/sap/fe/macros/FilterBarDelegate.js +66 -37
- package/src/sap/fe/macros/FilterBarDelegate.ts +66 -12
- package/src/sap/fe/macros/Form.designtime.js +1 -1
- package/src/sap/fe/macros/FormAPI.js +2 -2
- package/src/sap/fe/macros/FormContainer.designtime.js +1 -1
- package/src/sap/fe/macros/FormContainerAPI.js +5 -5
- package/src/sap/fe/macros/FormElement.metadata.js +1 -1
- package/src/sap/fe/macros/KPITag.metadata.js +1 -1
- package/src/sap/fe/macros/MacroAPI.js +6 -6
- package/src/sap/fe/macros/MacroAPI.ts +1 -1
- package/src/sap/fe/macros/MacroMetadata.js +1 -1
- package/src/sap/fe/macros/MacroTemplating.js +1 -1
- package/src/sap/fe/macros/ODataMetaModelUtil.js +1 -1
- package/src/sap/fe/macros/Paginator.fragment.xml +1 -1
- package/src/sap/fe/macros/QuickViewForm.fragment.xml +1 -1
- package/src/sap/fe/macros/QuickViewForm.metadata.js +1 -5
- package/src/sap/fe/macros/QuickViewForm.metadata.ts +0 -4
- package/src/sap/fe/macros/ResourceModel.js +1 -1
- package/src/sap/fe/macros/SizeHelper.js +1 -1
- package/src/sap/fe/macros/Table.metadata.js +2 -5
- package/src/sap/fe/macros/TableAPI.js +50 -25
- package/src/sap/fe/macros/TableAPI.ts +66 -18
- package/src/sap/fe/macros/ValueHelpDelegate.js +374 -95
- package/src/sap/fe/macros/ValueHelpDelegate.ts +140 -88
- package/src/sap/fe/macros/VisualFilter.fragment.xml +2 -0
- package/src/sap/fe/macros/chart/ChartHelper.js +9 -98
- package/src/sap/fe/macros/chart/ChartHelper.ts +8 -100
- package/src/sap/fe/macros/chart/ChartRuntime.js +4 -39
- package/src/sap/fe/macros/chart/ChartRuntime.ts +2 -39
- package/src/sap/fe/macros/chart/ChartUtils.js +1 -1
- package/src/sap/fe/macros/field/FieldHelper.js +118 -25
- package/src/sap/fe/macros/field/FieldHelper.ts +142 -41
- package/src/sap/fe/macros/field/FieldRuntime.js +89 -64
- package/src/sap/fe/macros/field/FieldRuntime.ts +79 -72
- package/src/sap/fe/macros/field/FieldTemplating.js +3 -3
- package/src/sap/fe/macros/field/QuickViewLinkDelegate.js +55 -13
- package/src/sap/fe/macros/field/QuickViewLinkDelegate.ts +49 -15
- package/src/sap/fe/macros/filter/CustomFilter.fragment.xml +1 -0
- package/src/sap/fe/macros/filter/DraftEditState.js +1 -1
- package/src/sap/fe/macros/filter/FilterFieldHelper.js +1 -1
- package/src/sap/fe/macros/filter/FilterFieldTemplating.js +1 -1
- package/src/sap/fe/macros/filter/FilterUtils.js +208 -164
- package/src/sap/fe/macros/filter/FilterUtils.ts +237 -180
- package/src/sap/fe/macros/filter/type/MultiValue.js +2 -2
- package/src/sap/fe/macros/filter/type/Range.js +2 -2
- package/src/sap/fe/macros/filter/type/Value.js +5 -5
- package/src/sap/fe/macros/flexibility/FormDelegate.js +6 -6
- package/src/sap/fe/macros/flexibility/FormDelegate.ts +5 -5
- package/src/sap/fe/macros/form/FormBuildingBlock.js +2 -2
- package/src/sap/fe/macros/form/FormContainerBuildingBlock.js +2 -2
- package/src/sap/fe/macros/form/FormHelper.js +1 -1
- package/src/sap/fe/macros/fpm/fpm.js +1 -1
- package/src/sap/fe/macros/internal/ActionCommand.fragment.xml +48 -0
- package/src/sap/fe/macros/internal/ActionCommand.metadata.js +68 -0
- package/src/sap/fe/macros/internal/ActionCommand.metadata.ts +60 -0
- package/src/sap/fe/macros/internal/CollectionField.metadata.js +1 -1
- package/src/sap/fe/macros/internal/DataPoint.fragment.xml +114 -24
- package/src/sap/fe/macros/internal/DataPoint.metadata.js +117 -64
- package/src/sap/fe/macros/internal/DataPoint.metadata.ts +177 -65
- package/src/sap/fe/macros/internal/Field.metadata.js +35 -14
- package/src/sap/fe/macros/internal/Field.metadata.ts +34 -14
- package/src/sap/fe/macros/internal/collaborationHelper.js +1 -1
- package/src/sap/fe/macros/internal/collectionField/MultiValueFieldDelegate.js +1 -1
- package/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +2 -1
- package/src/sap/fe/macros/internal/field/displayStyle/ExpandableText.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/field/displayStyle/File.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +4 -2
- package/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +6 -0
- package/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +3 -2
- package/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/field/displayStyle/ObjectStatus.fragment.xml +59 -2
- package/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +22 -5
- package/src/sap/fe/macros/internal/field/editStyle/DatePicker.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/field/editStyle/DateTimePicker.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/field/editStyle/TimePicker.fragment.xml +1 -0
- package/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +4 -2
- package/src/sap/fe/macros/internal/form/FormTemplating.js +1 -1
- package/src/sap/fe/macros/internal/helpers/ActionHelper.js +217 -0
- package/src/sap/fe/macros/internal/helpers/ActionHelper.ts +223 -0
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +2 -35
- package/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +0 -21
- package/src/sap/fe/macros/internal/helpers/TableTemplating.js +1 -1
- package/src/sap/fe/macros/internal/situations/SituationsIndicator.fragment.js +2 -2
- package/src/sap/fe/macros/internal/situations/SituationsPopover.js +2 -2
- package/src/sap/fe/macros/internal/situations/SituationsPopover.ts +1 -1
- package/src/sap/fe/macros/internal/situations/SituationsText.js +1 -1
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
- package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
- package/src/sap/fe/macros/internal/valuehelp/ValueHelpContentNew.fragment.xml +33 -63
- package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.js +1 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueHelpTemplating.ts +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +2 -2
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +1 -1
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelperNew.js +89 -35
- package/src/sap/fe/macros/internal/valuehelp/ValueListHelperNew.ts +80 -42
- package/src/sap/fe/macros/library.js +2 -2
- package/src/sap/fe/macros/macroLibrary.js +6 -3
- package/src/sap/fe/macros/messagebundle_bg.properties +3 -3
- package/src/sap/fe/macros/messagebundle_cy.properties +2 -2
- package/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +3 -13
- package/src/sap/fe/macros/messagebundle_lv.properties +3 -3
- package/src/sap/fe/macros/microchart/MicroChartContainer.js +2 -2
- package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -1
- package/src/sap/fe/macros/table/BasicSearch.js +2 -2
- package/src/sap/fe/macros/table/Column.fragment.xml +1 -0
- package/src/sap/fe/macros/table/QuickFilterContainer.js +2 -2
- package/src/sap/fe/macros/table/Table.fragment.xml +22 -100
- package/src/sap/fe/macros/table/TableFullScreenUtil.js +1 -1
- package/src/sap/fe/macros/table/TableHelper.js +6 -72
- package/src/sap/fe/macros/table/TableHelper.ts +5 -77
- package/src/sap/fe/macros/table/TableRuntime.js +12 -9
- package/src/sap/fe/macros/table/TableRuntime.ts +10 -7
- package/src/sap/fe/macros/table/Utils.js +16 -9
- package/src/sap/fe/macros/table/Utils.ts +23 -9
- package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -1
- package/src/sap/fe/macros/table/delegates/ALPTableDelegateBaseMixin.js +1 -1
- package/src/sap/fe/macros/table/delegates/AnalyticalALPTableDelegate.js +1 -1
- package/src/sap/fe/macros/table/delegates/AnalyticalTableDelegate.js +5 -78
- package/src/sap/fe/macros/table/delegates/AnalyticalTableDelegate.ts +3 -80
- package/src/sap/fe/macros/table/delegates/TableDelegate.js +91 -20
- package/src/sap/fe/macros/table/delegates/TableDelegate.ts +95 -22
- package/src/sap/fe/macros/visualfilters/InteractiveChartHelper.js +1 -1
- package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +1 -1
- package/src/sap/fe/macros/internal/field/displayStyle/MdcFieldWithValueHelp.fragment.xml +0 -47
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sapui5/sap.fe.macros",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.105.1",
|
|
4
4
|
"description": "SAPUI5 Library sap.fe.macros",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "SAP SE (https://www.sap.com)",
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"scripts": {
|
|
9
9
|
"build": "echo 'nothing to do'",
|
|
10
10
|
"lint": "eslint --rulesdir ../../eslint/lib/rules --ext .js,.ts --quiet --fix src",
|
|
11
|
-
"prepare-npm-sources": "babel target/npm-sources/src --out-dir target/npm-sources/src --extensions \".ts\" --config-file ../../.babelrc",
|
|
11
|
+
"prepare-npm-sources": "babel target/npm-sources/src --out-dir target/npm-sources/src --extensions \".ts,.tsx\" --config-file ../../.babelrc && babel target/npm-sources/src --out-dir target/npm-sources/src --extensions \".mdx\" --config-file ../../.babelrc-next",
|
|
12
12
|
"prepare-ts-class-doc": "ts-node ../../docbuilder/prepareTSClassDoc sap.fe.macros",
|
|
13
|
-
"prepare-ui5-build-sources": "babel target/ui5-build-tmp/src --out-dir target/ui5-build-tmp/src --extensions \".ts\" --config-file ../../.babelrc && babel target/ui5-build-tmp/test --out-dir target/ui5-build-tmp/test --extensions \".ts\" --config-file ../../.babelrc",
|
|
13
|
+
"prepare-ui5-build-sources": "babel target/ui5-build-tmp/src --out-dir target/ui5-build-tmp/src --extensions \".ts,.tsx\" --config-file ../../.babelrc && babel target/ui5-build-tmp/src --out-dir target/ui5-build-tmp/src --extensions \".mdx\" --config-file ../../.babelrc-next && babel target/ui5-build-tmp/test --out-dir target/ui5-build-tmp/test --extensions \".ts,.tsx\" --config-file ../../.babelrc && babel target/ui5-build-tmp/test --out-dir target/ui5-build-tmp/test --extensions \".mdx\" --config-file ../../.babelrc-next",
|
|
14
14
|
"test": "jest --maxWorkers=4",
|
|
15
15
|
"test-refs": "jest --runInBand --config jest.config-refs.js",
|
|
16
16
|
"test-updateSnapshots": "jest --maxWorkers=4 -u"
|
|
@@ -26,9 +26,11 @@
|
|
|
26
26
|
xmlns:core="sap.ui.core"
|
|
27
27
|
xmlns:macro="sap.fe.macros"
|
|
28
28
|
xmlns:control="sap.fe.core.controls"
|
|
29
|
+
xmlns:internalMacro="sap.fe.macros.internal"
|
|
29
30
|
xmlns:macrodata="http://schemas.sap.com/sapui5/extension/sap.ui.core.CustomData/1"
|
|
30
31
|
template:require="{
|
|
31
32
|
HELPER: 'sap/fe/macros/chart/ChartHelper',
|
|
33
|
+
ACTIONHELPER: 'sap/fe/macros/internal/helpers/ActionHelper',
|
|
32
34
|
COMMON: 'sap/fe/macros/CommonHelper',
|
|
33
35
|
MODEL: 'sap/ui/model/odata/v4/AnnotationHelper',
|
|
34
36
|
ID: 'sap/fe/core/helpers/StableIdHelper'
|
|
@@ -39,6 +41,9 @@
|
|
|
39
41
|
<template:with path="metaPath>" helper="COMMON.createPresentationPathContext" var="presentationPath">
|
|
40
42
|
<template:with path="metaPath>" helper="HELPER.getUiChart" var="chart">
|
|
41
43
|
<macro:ChartAPI id="{this>_apiId}" selectionChange="{this>selectionChange}" stateChange="{this>stateChange}">
|
|
44
|
+
<macro:layoutData>
|
|
45
|
+
<FlexItemData growFactor="1" shrinkFactor="1" />
|
|
46
|
+
</macro:layoutData>
|
|
42
47
|
<mdc:Chart
|
|
43
48
|
core:require="{API: 'sap/fe/macros/ChartAPI'}"
|
|
44
49
|
binding="{= '{internal>controls/' + ${this>id} + '}' }"
|
|
@@ -49,6 +54,7 @@
|
|
|
49
54
|
header="{= ${chart>Title} }"
|
|
50
55
|
height="{this>height}"
|
|
51
56
|
width="{this>width}"
|
|
57
|
+
headerLevel="{this>headerLevel}"
|
|
52
58
|
p13nMode="{this>personalization}"
|
|
53
59
|
filter="{this>filter}"
|
|
54
60
|
noDataText="{this>noDataText}"
|
|
@@ -58,7 +64,7 @@
|
|
|
58
64
|
macrodata:entitySet="{= ${targetCollection>$@sapui.name} }"
|
|
59
65
|
macrodata:entityType="{= ${contextPath>@@COMMON.getContextPath} + '/' }"
|
|
60
66
|
macrodata:operationAvailableMap="{= COMMON.stringifyCustomData(${chart>@@HELPER.getOperationAvailableMap})}"
|
|
61
|
-
macrodata:multiSelectDisabledActions="{= '' + ${chart
|
|
67
|
+
macrodata:multiSelectDisabledActions="{= '' + ${chart>Actions@@ACTIONHELPER.getMultiSelectDisabledActions} + ''}"
|
|
62
68
|
macrodata:segmentedButtonId="{= ID.generate([${this>id}, 'SegmentedButton', 'TemplateContentView']) }"
|
|
63
69
|
macrodata:customAgg="{=COMMON.stringifyCustomData(${chartDefinition>customAgg})}"
|
|
64
70
|
macrodata:transAgg="{=COMMON.stringifyCustomData(${chartDefinition>transAgg})}"
|
|
@@ -69,46 +75,31 @@
|
|
|
69
75
|
visible="{this>visible}"
|
|
70
76
|
>
|
|
71
77
|
<mdc:dependents>
|
|
72
|
-
<template:if test="{
|
|
73
|
-
<template:repeat list="{
|
|
74
|
-
<template:
|
|
75
|
-
<template:with path="
|
|
76
|
-
<template:
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
78
|
+
<template:if test="{chartDefinition>commandActions}">
|
|
79
|
+
<template:repeat list="{chartDefinition>commandActions}" var="action">
|
|
80
|
+
<template:with path="action>annotationPath" var="dataField">
|
|
81
|
+
<template:with path="dataField>Action" helper="COMMON.getActionContext" var="actionContext">
|
|
82
|
+
<template:with
|
|
83
|
+
path="dataField>Action"
|
|
84
|
+
helper="COMMON.getPathToBoundActionOverload"
|
|
85
|
+
var="isBound"
|
|
86
|
+
>
|
|
87
|
+
<template:if
|
|
88
|
+
test="{= ${action>type} === 'ForAction' ? (${isBound>$IsBound} !== true || ${actionContext>@Org.OData.Core.V1.OperationAvailable} !== false) : true}"
|
|
89
|
+
>
|
|
90
|
+
<internalMacro:ActionCommand
|
|
91
|
+
action="{action>}"
|
|
92
|
+
onExecuteAction="{= HELPER.getPressEventForDataFieldForActionButton(${this>id},${dataField>},${chart>@@HELPER.getOperationAvailableMap})}"
|
|
93
|
+
onExecuteIBN="{= COMMON.getPressHandlerForDataFieldForIBN(${dataField>}, '${internal>selectedContexts}')}"
|
|
94
|
+
onExecuteManifest="{= COMMON.buildActionWrapper(${action>})}"
|
|
95
|
+
isIBNEnabled="{= ${action>enabled} !== undefined ? ${action>enabled} : ${dataField>RequiresContext} ? '{= %{internal>numberOfSelectedContexts} >= 1}' : undefined }"
|
|
96
|
+
isActionEnabled="{= ${action>enabled} !== undefined ? ${action>enabled} : HELPER.isDataFieldForActionButtonEnabled(${isBound>$IsBound},${dataField>Action},${this>contextPath},${chart>@@HELPER.getOperationAvailableMap}, ${action>enableOnSelect}) }"
|
|
81
97
|
visible="{= ${dataField>./@com.sap.vocabularies.UI.v1.Hidden} ? (${dataField>./@com.sap.vocabularies.UI.v1.Hidden/$Path} ? ${dataField>./@com.sap.vocabularies.UI.v1.Hidden/$Path@@HELPER.getHiddenPathExpressionForTableActionsAndIBN} : !${dataField>./@com.sap.vocabularies.UI.v1.Hidden}) : true}"
|
|
82
|
-
command="{action>command}"
|
|
83
98
|
/>
|
|
84
|
-
</template:
|
|
85
|
-
|
|
86
|
-
<template:with
|
|
87
|
-
path="dataField>Action"
|
|
88
|
-
helper="COMMON.getActionContext"
|
|
89
|
-
var="actionContext"
|
|
90
|
-
>
|
|
91
|
-
<template:with
|
|
92
|
-
path="dataField>Action"
|
|
93
|
-
helper="COMMON.getPathToBoundActionOverload"
|
|
94
|
-
var="isBound"
|
|
95
|
-
>
|
|
96
|
-
<template:if
|
|
97
|
-
test="{= ${isBound>$IsBound} !== true || ${actionContext>@Org.OData.Core.V1.OperationAvailable} !== false }"
|
|
98
|
-
>
|
|
99
|
-
<control:CommandExecution
|
|
100
|
-
execute="{= HELPER.getPressEventForDataFieldForActionButton(${this>id},${dataField>},${chart>@@HELPER.getOperationAvailableMap})}"
|
|
101
|
-
enabled="{= ${action>enabled} !== undefined ? ${action>enabled} : HELPER.isDataFieldForActionButtonEnabled(${isBound>$IsBound},${dataField>Action},${this>contextPath},${chart>@@HELPER.getOperationAvailableMap}, ${action>enableOnSelect}) }"
|
|
102
|
-
visible="{= ${dataField>./@com.sap.vocabularies.UI.v1.Hidden} ? (${dataField>./@com.sap.vocabularies.UI.v1.Hidden/$Path} ? ${dataField>./@com.sap.vocabularies.UI.v1.Hidden/$Path@@HELPER.getHiddenPathExpressionForTableActionsAndIBN} : !${dataField>./@com.sap.vocabularies.UI.v1.Hidden}) : true}"
|
|
103
|
-
command="{action>command}"
|
|
104
|
-
/>
|
|
105
|
-
</template:if>
|
|
106
|
-
</template:with>
|
|
107
|
-
</template:with>
|
|
108
|
-
</template:elseif>
|
|
109
|
-
</template:if>
|
|
99
|
+
</template:if>
|
|
100
|
+
</template:with>
|
|
110
101
|
</template:with>
|
|
111
|
-
</template:
|
|
102
|
+
</template:with>
|
|
112
103
|
</template:repeat>
|
|
113
104
|
</template:if>
|
|
114
105
|
</mdc:dependents>
|
|
@@ -118,7 +109,7 @@
|
|
|
118
109
|
<template:repeat list="{dimensions>}" var="dimension">
|
|
119
110
|
<chart:Item
|
|
120
111
|
id="{= ID.generate([${this>id}, 'dimension', ${dimension>key}]) }"
|
|
121
|
-
name="{dimension>key}"
|
|
112
|
+
name="_fe_groupable_{dimension>key}"
|
|
122
113
|
type="groupable"
|
|
123
114
|
label="{dimension>label}"
|
|
124
115
|
role="{dimension>role}"
|
|
@@ -130,7 +121,7 @@
|
|
|
130
121
|
<template:repeat list="{measures>}" var="measure">
|
|
131
122
|
<chart:Item
|
|
132
123
|
id="{= ID.generate([${this>id},'measure', ${measure>key}]) }"
|
|
133
|
-
name="{measure>key}"
|
|
124
|
+
name="_fe_aggregatable_{measure>key}"
|
|
134
125
|
type="aggregatable"
|
|
135
126
|
label="{measure>label}"
|
|
136
127
|
role="{measure>role}"
|
|
@@ -86,7 +86,7 @@ sap.ui.define(
|
|
|
86
86
|
*/
|
|
87
87
|
height: {
|
|
88
88
|
type: "string",
|
|
89
|
-
defaultValue: "
|
|
89
|
+
defaultValue: "100%"
|
|
90
90
|
},
|
|
91
91
|
/**
|
|
92
92
|
* The width of the chart
|
|
@@ -95,6 +95,14 @@ sap.ui.define(
|
|
|
95
95
|
type: "string",
|
|
96
96
|
defaultValue: "100%"
|
|
97
97
|
},
|
|
98
|
+
/**
|
|
99
|
+
* Defines the "aria-level" of the chart header
|
|
100
|
+
*/
|
|
101
|
+
headerLevel: {
|
|
102
|
+
type: "sap.ui.core.TitleLevel",
|
|
103
|
+
defaultValue: "Auto",
|
|
104
|
+
isPublic: true
|
|
105
|
+
},
|
|
98
106
|
/**
|
|
99
107
|
* Specifies the selection mode
|
|
100
108
|
*/
|
|
@@ -18,7 +18,7 @@ sap.ui.define(["sap/base/util/merge", "sap/fe/core/helpers/ClassSupport", "sap/f
|
|
|
18
18
|
|
|
19
19
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
20
20
|
|
|
21
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf
|
|
21
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
22
22
|
|
|
23
23
|
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
24
24
|
|
|
@@ -167,4 +167,4 @@ sap.ui.define(["sap/base/util/merge", "sap/fe/core/helpers/ClassSupport", "sap/f
|
|
|
167
167
|
}), _applyDecoratedDescriptor(_class2.prototype, "handleSelectionChange", [_dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "handleSelectionChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onInternalDataRequested", [_dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "onInternalDataRequested"), _class2.prototype)), _class2)) || _class);
|
|
168
168
|
return ChartAPI;
|
|
169
169
|
}, false);
|
|
170
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
170
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydEFQSSIsImRlZmluZVVJNUNsYXNzIiwicHJvcGVydHkiLCJ0eXBlIiwicmVxdWlyZWQiLCJkZWZhdWx0VmFsdWUiLCJldmVudCIsInhtbEV2ZW50SGFuZGxlciIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJ2aWV3IiwiZ2V0Q29udHJvbGxlciIsImdldFZpZXciLCJpbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwiY2hhcnQiLCJnZXRDb250ZW50Iiwic2hvd01lc3NhZ2VTdHJpcCIsInNDaGFydEVudGl0eVBhdGgiLCJkYXRhIiwic0NhY2hlS2V5Iiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0T2JqZWN0Iiwic2V0UHJvcGVydHkiLCJyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyIsIm9GaWx0ZXJDb250cm9sIiwib0NoYXJ0IiwiRmlsdGVyVXRpbHMiLCJnZXROb3RBcHBsaWNhYmxlRmlsdGVycyIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZSIsIm9FdmVudCIsImFEYXRhIiwiZ2V0UGFyYW1ldGVyIiwiYlNlbGVjdGVkIiwiZmlyZVNlbGVjdGlvbkNoYW5nZSIsIm1lcmdlIiwic2VsZWN0ZWQiLCJvbkludGVybmFsRGF0YVJlcXVlc3RlZCIsImZpcmVFdmVudCIsIk1hY3JvQVBJIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDaGFydEFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBldmVudCwgcHJvcGVydHksIHhtbEV2ZW50SGFuZGxlciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBNYWNyb0FQSSBmcm9tIFwiLi9NYWNyb0FQSVwiO1xuXG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIHVzZWQgdG8gY3JlYXRlIGEgY2hhcnQgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogVXN1YWxseSwgYSBjb250ZXh0UGF0aCBhbmQgbWV0YVBhdGggaXMgZXhwZWN0ZWQuXG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvOkNoYXJ0IGlkPVwiTXljaGFydFwiIGNvbnRleHRQYXRoPVwiL1Jvb3RFbnRpdHlcIiBtZXRhUGF0aD1cIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5DaGFydFwiIC8mZ3Q7XG4gKiA8L3ByZT5cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5DaGFydFxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLkNoYXJ0QVBJXCIpXG5jbGFzcyBDaGFydEFQSSBleHRlbmRzIE1hY3JvQVBJIHtcblx0LyoqXG5cdCAqXG5cdCAqIElEIG9mIHRoZSBjaGFydFxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBNZXRhZGF0YSBwYXRoIHRvIHRoZSBwcmVzZW50YXRpb24gKFVJLkNoYXJ0IHcgb3Igdy9vIHF1YWxpZmllcilcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfSlcblx0bWV0YVBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIE1ldGFkYXRhIHBhdGggdG8gdGhlIGVudGl0eVNldCBvciBuYXZpZ2F0aW9uUHJvcGVydHlcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgcmVxdWlyZWQ6IHRydWUgfSlcblx0Y29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFNwZWNpZmllcyB0aGUgc2VsZWN0aW9uIG1vZGVcblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiwgZGVmYXVsdFZhbHVlOiBcIk1VTFRJUExFXCIgfSlcblx0c2VsZWN0aW9uTW9kZSE6IHN0cmluZztcblxuXHQvKipcblx0ICogSWQgb2YgdGhlIEZpbHRlckJhciBidWlsZGluZyBibG9jayBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYXJ0LlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGZpbHRlckJhciE6IHN0cmluZztcblxuXHQvKipcblx0ICogUGFyYW1ldGVyIHdoaWNoIHNldHMgdGhlIHBlcnNvbmFsaXphdGlvbiBvZiB0aGUgTURDIGNoYXJ0XG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYm9vbGVhbnxzdHJpbmdcIiB9KVxuXHRwZXJzb25hbGl6YXRpb24hOiBib29sZWFuIHwgc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCB0cmlnZ2VyZWQgd2hlbiBjaGFydCBzZWxlY3Rpb25zIGFyZSBjaGFuZ2VkLiBUaGUgZXZlbnQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRhdGEgc2VsZWN0ZWQvZGVzZWxlY3RlZCBhbmQgdGhlIEJvb2xlYW4gZmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIGRhdGEgaXMgc2VsZWN0ZWQgb3IgZGVzZWxlY3RlZC5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QGV2ZW50KClcblx0c2VsZWN0aW9uQ2hhbmdlITogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IHRyaWdnZXJlZCB3aGVuIHRoZSBjaGFydCBzdGF0ZSBjaGFuZ2VzLlxuXHQgKlxuXHQgKiBZb3UgY2FuIHNldCB0aGlzIGluIG9yZGVyIHRvIHN0b3JlIHRoZSBjaGFydCBzdGF0ZSBpbiB0aGUgaUFwcHN0YXRlLlxuXHQgKlxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0QGV2ZW50KClcblx0c3RhdGVDaGFuZ2UhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgdHJpZ2dlcmVkIHdoZW4gdGhlIGNoYXJ0IHJlcXVlc3RzIGRhdGEuXG5cdCAqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRAZXZlbnQoKVxuXHRpbnRlcm5hbERhdGFSZXF1ZXN0ZWQhOiBGdW5jdGlvbjtcblxuXHRvbkFmdGVyUmVuZGVyaW5nKCkge1xuXHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldENvbnRyb2xsZXIoKS5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQ6IGFueSA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHRjb25zdCBjaGFydCA9ICh0aGlzIGFzIGFueSkuZ2V0Q29udGVudCgpO1xuXHRcdGNvbnN0IHNob3dNZXNzYWdlU3RyaXA6IGFueSA9IHt9O1xuXHRcdGNvbnN0IHNDaGFydEVudGl0eVBhdGggPSBjaGFydC5kYXRhKFwiZW50aXR5U2V0XCIpLFxuXHRcdFx0c0NhY2hlS2V5ID0gYCR7c0NoYXJ0RW50aXR5UGF0aH1DaGFydGAsXG5cdFx0XHRvQmluZGluZ0NvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0c2hvd01lc3NhZ2VTdHJpcFtzQ2FjaGVLZXldID1cblx0XHRcdGNoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKSA9PT0gXCJ0cnVlXCIgJiYgISFvQmluZGluZ0NvbnRleHQgJiYgIW9CaW5kaW5nQ29udGV4dC5nZXRPYmplY3QoXCJJc0FjdGl2ZUVudGl0eVwiKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbnRyb2xzL3Nob3dNZXNzYWdlU3RyaXBcIiwgc2hvd01lc3NhZ2VTdHJpcCk7XG5cdH1cblxuXHRyZWZyZXNoTm90QXBwbGljYWJsZUZpZWxkcyhvRmlsdGVyQ29udHJvbDogQ29udHJvbCk6IGFueVtdIHtcblx0XHRjb25zdCBvQ2hhcnQgPSAodGhpcyBhcyBhbnkpLmdldENvbnRlbnQoKTtcblx0XHRyZXR1cm4gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckNvbnRyb2wsIG9DaGFydCk7XG5cdH1cblxuXHRAeG1sRXZlbnRIYW5kbGVyKClcblx0aGFuZGxlU2VsZWN0aW9uQ2hhbmdlKG9FdmVudDogVUk1RXZlbnQpIHtcblx0XHRjb25zdCBhRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpO1xuXHRcdGNvbnN0IGJTZWxlY3RlZCA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpID09PSBcInNlbGVjdERhdGFcIjtcblx0XHQodGhpcyBhcyBhbnkpLmZpcmVTZWxlY3Rpb25DaGFuZ2UobWVyZ2Uoe30sIHsgZGF0YTogYURhdGEsIHNlbGVjdGVkOiBiU2VsZWN0ZWQgfSkpO1xuXHR9XG5cblx0QHhtbEV2ZW50SGFuZGxlcigpXG5cdG9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkKCkge1xuXHRcdCh0aGlzIGFzIGFueSkuZmlyZUV2ZW50KFwiaW50ZXJuYWxEYXRhUmVxdWVzdGVkXCIpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYXJ0QVBJO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFFTUEsUSxXQURMQyxjQUFjLENBQUMsd0JBQUQsQyxVQVFiQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVIsQ0FBRCxDLFVBUVJELFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsUUFBUjtJQUFrQkMsUUFBUSxFQUFFO0VBQTVCLENBQUQsQyxVQVFSRixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFLFFBQVI7SUFBa0JDLFFBQVEsRUFBRTtFQUE1QixDQUFELEMsVUFRUkYsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRSxRQUFSO0lBQWtCRSxZQUFZLEVBQUU7RUFBaEMsQ0FBRCxDLFVBUVJILFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUixDQUFELEMsVUFRUkQsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFSLENBQUQsQyxVQVFSRyxLQUFLLEUsVUFVTEEsS0FBSyxFLFdBUUxBLEtBQUssRSxXQXFCTEMsZUFBZSxFLFdBT2ZBLGVBQWUsRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7V0F6QmhCQyxnQixHQUFBLDRCQUFtQjtNQUNsQixJQUFNQyxJQUFJLEdBQUcsS0FBS0MsYUFBTCxHQUFxQkMsT0FBckIsRUFBYjtNQUNBLElBQU1DLG9CQUF5QixHQUFHSCxJQUFJLENBQUNJLGlCQUFMLENBQXVCLFVBQXZCLENBQWxDO01BQ0EsSUFBTUMsS0FBSyxHQUFJLElBQUQsQ0FBY0MsVUFBZCxFQUFkO01BQ0EsSUFBTUMsZ0JBQXFCLEdBQUcsRUFBOUI7TUFDQSxJQUFNQyxnQkFBZ0IsR0FBR0gsS0FBSyxDQUFDSSxJQUFOLENBQVcsV0FBWCxDQUF6QjtNQUFBLElBQ0NDLFNBQVMsYUFBTUYsZ0JBQU4sVUFEVjtNQUFBLElBRUNHLGVBQWUsR0FBR1gsSUFBSSxDQUFDSSxpQkFBTCxFQUZuQjtNQUdBRyxnQkFBZ0IsQ0FBQ0csU0FBRCxDQUFoQixHQUNDTCxLQUFLLENBQUNJLElBQU4sQ0FBVyxnQkFBWCxNQUFpQyxNQUFqQyxJQUEyQyxDQUFDLENBQUNFLGVBQTdDLElBQWdFLENBQUNBLGVBQWUsQ0FBQ0MsU0FBaEIsQ0FBMEIsZ0JBQTFCLENBRGxFO01BRUFULG9CQUFvQixDQUFDVSxXQUFyQixDQUFpQywyQkFBakMsRUFBOEROLGdCQUE5RDtJQUNBLEM7O1dBRURPLDBCLEdBQUEsb0NBQTJCQyxjQUEzQixFQUEyRDtNQUMxRCxJQUFNQyxNQUFNLEdBQUksSUFBRCxDQUFjVixVQUFkLEVBQWY7TUFDQSxPQUFPVyxXQUFXLENBQUNDLHVCQUFaLENBQW9DSCxjQUFwQyxFQUFvREMsTUFBcEQsQ0FBUDtJQUNBLEM7O1dBR0RHLHFCLEdBREEsK0JBQ3NCQyxNQUR0QixFQUN3QztNQUN2QyxJQUFNQyxLQUFLLEdBQUdELE1BQU0sQ0FBQ0UsWUFBUCxDQUFvQixNQUFwQixDQUFkO01BQ0EsSUFBTUMsU0FBUyxHQUFHSCxNQUFNLENBQUNFLFlBQVAsQ0FBb0IsTUFBcEIsTUFBZ0MsWUFBbEQ7TUFDQyxJQUFELENBQWNFLG1CQUFkLENBQWtDQyxLQUFLLENBQUMsRUFBRCxFQUFLO1FBQUVoQixJQUFJLEVBQUVZLEtBQVI7UUFBZUssUUFBUSxFQUFFSDtNQUF6QixDQUFMLENBQXZDO0lBQ0EsQzs7V0FHREksdUIsR0FEQSxtQ0FDMEI7TUFDeEIsSUFBRCxDQUFjQyxTQUFkLENBQXdCLHVCQUF4QjtJQUNBLEM7OztJQXhHcUJDLFE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0EyR1J0QyxRIn0=
|
|
@@ -137,7 +137,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
aProperties.push({
|
|
140
|
-
name: sKey,
|
|
140
|
+
name: "_fe_groupable_" + sKey,
|
|
141
141
|
propertyPath: sKey,
|
|
142
142
|
label: oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Label"] || sKey,
|
|
143
143
|
sortable: ChartDelegate._getSortable(oMDCChart, oSortRestrictionsInfo[sKey], false),
|
|
@@ -345,7 +345,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
345
345
|
if (Object.keys(mKnownAggregatableProps).indexOf(sKey) > -1) {
|
|
346
346
|
for (var sAggregatable in mKnownAggregatableProps[sKey]) {
|
|
347
347
|
aAggregateProperties.push({
|
|
348
|
-
name: mKnownAggregatableProps[sKey][sAggregatable].name,
|
|
348
|
+
name: "_fe_aggregatable_" + mKnownAggregatableProps[sKey][sAggregatable].name,
|
|
349
349
|
propertyPath: sKey,
|
|
350
350
|
label: mKnownAggregatableProps[sKey][sAggregatable].label || "".concat(oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Label"], " (").concat(sAggregatable, ")") || "".concat(sKey, " (").concat(sAggregatable, ")"),
|
|
351
351
|
sortable: oSortRestrictionsInfo[sKey] ? oSortRestrictionsInfo[sKey].sortable : true,
|
|
@@ -363,6 +363,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
363
363
|
for (var sCustom in mCustomAggregates) {
|
|
364
364
|
if (sCustom === sKey) {
|
|
365
365
|
var oItem = merge({}, mCustomAggregates[sCustom], {
|
|
366
|
+
name: "_fe_aggregatable_" + sCustom,
|
|
366
367
|
groupable: false,
|
|
367
368
|
aggregatable: true,
|
|
368
369
|
role: ChartItemRoleType.axis1,
|
|
@@ -405,6 +406,8 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
405
406
|
};
|
|
406
407
|
oInnerChart.addEventDelegate(oInnerChartDelegate);
|
|
407
408
|
}
|
|
409
|
+
|
|
410
|
+
oMDCChart.fireEvent("bindingUpdated");
|
|
408
411
|
};
|
|
409
412
|
|
|
410
413
|
ChartDelegate._setChart = function (oMDCChart, oInnerChart) {
|
|
@@ -481,7 +484,35 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
481
484
|
oBindingInfo.filters.push(new Filter("IsActiveEntity", FilterOperator.EQ, true));
|
|
482
485
|
}
|
|
483
486
|
};
|
|
487
|
+
/**
|
|
488
|
+
* This function returns an ID which should be used in the internal chart for the measure/dimension.
|
|
489
|
+
* For standard cases, this is just the id of the property.
|
|
490
|
+
* If it is necessary to use another id internally inside the chart (e.g. on duplicate property ids) this method can be overwritten.
|
|
491
|
+
* In this case, <code>getPropertyFromNameAndKind</code> needs to be overwritten as well.
|
|
492
|
+
*
|
|
493
|
+
* @param {string} name ID of the property
|
|
494
|
+
* @param {string} kind Type of the Property (Measure/Dimension)
|
|
495
|
+
* @returns {string} Internal id for the sap.chart.Chart
|
|
496
|
+
*/
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
ChartDelegate.getInternalChartNameFromPropertyNameAndKind = function (name, kind) {
|
|
500
|
+
return name.replace("_fe_" + kind + "_", "");
|
|
501
|
+
};
|
|
502
|
+
/**
|
|
503
|
+
* This maps an id of an internal chart dimension/measure & type of a property to its corresponding property entry.
|
|
504
|
+
*
|
|
505
|
+
* @param {string} name ID of internal chart measure/dimension
|
|
506
|
+
* @param {string} kind Kind of the property
|
|
507
|
+
* @param {sap.ui.mdc.Chart} mdcChart Reference to the MDC chart
|
|
508
|
+
* @returns {object} PropertyInfo object
|
|
509
|
+
*/
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
ChartDelegate.getPropertyFromNameAndKind = function (name, kind, mdcChart) {
|
|
513
|
+
return mdcChart.getPropertyHelper().getProperty("_fe_" + kind + "_" + name);
|
|
514
|
+
};
|
|
484
515
|
|
|
485
516
|
return ChartDelegate;
|
|
486
517
|
}, false);
|
|
487
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNoYXJ0RGVsZWdhdGUudHMiXSwibmFtZXMiOlsiQ2hhcnRJdGVtUm9sZVR5cGUiLCJNRENMaWIiLCJDaGFydERlbGVnYXRlIiwiT2JqZWN0IiwiYXNzaWduIiwiQmFzZUNoYXJ0RGVsZWdhdGUiLCJfc2V0Q2hhcnROb0RhdGFUZXh0Iiwib0NoYXJ0Iiwib0JpbmRpbmdJbmZvIiwic05vRGF0YUtleSIsIm9DaGFydEZpbHRlckluZm8iLCJDaGFydFV0aWxzIiwiZ2V0QWxsRmlsdGVySW5mbyIsInN1ZmZpeFJlc291cmNlS2V5IiwicGF0aCIsInN0YXJ0c1dpdGgiLCJzdWJzdHIiLCJfZ2V0Tm9EYXRhVGV4dFdpdGhGaWx0ZXJzIiwiZGF0YSIsImdldEZpbHRlciIsInNlYXJjaCIsImZpbHRlcnMiLCJsZW5ndGgiLCJnZXRNb2RlbCIsImdldFJlc291cmNlQnVuZGxlIiwidGhlbiIsIm9SZXNvdXJjZUJ1bmRsZSIsInNldE5vRGF0YVRleHQiLCJDb21tb25VdGlscyIsImdldFRyYW5zbGF0ZWRUZXh0IiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsIl9oYW5kbGVQcm9wZXJ0eSIsIm9NRENDaGFydCIsIm1FbnRpdHlTZXRBbm5vdGF0aW9ucyIsIm1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzIiwibUN1c3RvbUFnZ3JlZ2F0ZXMiLCJhUHJvcGVydGllcyIsInNDcml0aWNhbGl0eSIsIm9BcHBseVN1cHBvcnRlZCIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsIm9Tb3J0UmVzdHJpY3Rpb25zIiwib1NvcnRSZXN0cmljdGlvbnNJbmZvIiwiT0RhdGFNZXRhTW9kZWxVdGlsIiwiZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8iLCJvRmlsdGVyUmVzdHJpY3Rpb25zIiwib0ZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvIiwib09iaiIsImdldE9iamVjdCIsImdldFBhdGgiLCJzS2V5Iiwib01ldGFNb2RlbCIsIiRraW5kIiwiJGlzQ29sbGVjdGlvbiIsIm9Qcm9wZXJ0eUFubm90YXRpb25zIiwic1BhdGgiLCJnZXRNZXRhQ29udGV4dCIsImFHcm91cGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsImFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsImJHcm91cGFibGUiLCJiQWdncmVnYXRhYmxlIiwiaSIsIiRQcm9wZXJ0eVBhdGgiLCJqIiwiUHJvcGVydHkiLCJhQWdncmVnYXRlUHJvcGVydGllcyIsIl9jcmVhdGVQcm9wZXJ0eUluZm9zRm9yQWdncmVnYXRhYmxlIiwiZm9yRWFjaCIsIm9BZ2dyZWdhdGVQcm9wZXJ0eSIsInB1c2giLCJzTmFtZSIsInNUZXh0UHJvcGVydHkiLCIkUGF0aCIsImJJc05hdmlnYXRpb25UZXh0IiwiaW5kZXhPZiIsIm5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJsYWJlbCIsInNvcnRhYmxlIiwiX2dldFNvcnRhYmxlIiwiZmlsdGVyYWJsZSIsImdyb3VwYWJsZSIsImFnZ3JlZ2F0YWJsZSIsIm1heENvbmRpdGlvbnMiLCJpc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uIiwicHJvcGVydHlJbmZvIiwic29ydEtleSIsInJvbGUiLCJjYXRlZ29yeSIsImNyaXRpY2FsaXR5IiwidGV4dFByb3BlcnR5IiwidGV4dEZvcm1hdHRlciIsIl9mb3JtYXRUZXh0Iiwib1ZhbHVlMSIsIm9WYWx1ZTIiLCJvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiIsIiRFbnVtTWVtYmVyIiwidXBkYXRlQmluZGluZ0luZm8iLCJvRmlsdGVyIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiYnlJZCIsIm1Db25kaXRpb25zIiwiZ2V0Q29uZGl0aW9ucyIsInNvcnRlciIsImdldFNvcnRlcnMiLCJvSW5uZXJDaGFydCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsImdldElubmVyQ2hhcnQiLCJvRmlsdGVySW5mbyIsImdldENoYXJ0U2VsZWN0aW9uc0V4aXN0IiwiZ2V0RmlsdGVyQmFyRmlsdGVySW5mbyIsInNQYXJhbWV0ZXJQYXRoIiwiRGVsZWdhdGVVdGlsIiwiZ2V0UGFyYW1ldGVyc0luZm8iLCJvSW5mbyIsIkZpbHRlclV0aWxzIiwiZ2V0RmlsdGVySW5mbyIsImVuYWJsZVNlYXJjaCIsInBhcmFtZXRlcnMiLCIkc2VhcmNoIiwibm9ybWFsaXplU2VhcmNoVGVybSIsIl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyIiwiZmV0Y2hQcm9wZXJ0aWVzIiwib01vZGVsIiwiX2dldE1vZGVsIiwicENyZWF0ZVByb3BlcnR5SW5mb3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsImF0dGFjaE1vZGVsQ29udGV4dENoYW5nZSIsInJlc29sdmVyIiwib25Nb2RlbENvbnRleHRDaGFuZ2UiLCJvUmV0cmlldmVkTW9kZWwiLCJfY3JlYXRlUHJvcGVydHlJbmZvcyIsIm9FdmVudCIsIm9EYXRhIiwiZ2V0U291cmNlIiwiZGV0YWNoTW9kZWxDb250ZXh0Q2hhbmdlIiwic0VudGl0eVNldFBhdGgiLCJnZXRNZXRhTW9kZWwiLCJhbGwiLCJyZXF1ZXN0T2JqZWN0IiwiYVJlc3VsdHMiLCJvRW50aXR5VHlwZSIsInNBbm5vIiwiYVByb3BlcnR5UHJvbWlzZSIsInNBbm5vS2V5IiwicmVwbGFjZSIsImFBbm5vIiwic3BsaXQiLCJhRGltZW5zaW9ucyIsImFNZWFzdXJlcyIsImtleXMiLCJhQ2hhcnRJdGVtcyIsImdldEl0ZW1zIiwia2V5IiwiaXNBIiwiZ2V0S2V5IiwiZmlsdGVyIiwidmFsIiwibVR5cGVBZ2dyZWdhdGFibGVQcm9wcyIsInNBZ2dyZWdhdGFibGUiLCJzUHJvcEtleSIsImFnZ3JlZ2F0aW9uTWV0aG9kIiwiTWV0YU1vZGVsVXRpbCIsImZldGNoQ3JpdGljYWxpdHkiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImJpbmQiLCJheGlzMSIsImRhdGFwb2ludCIsInNDdXN0b20iLCJvSXRlbSIsIm1lcmdlIiwicmViaW5kIiwic1NlYXJjaCIsIm9DaGFydEJpbmRpbmciLCJnZXRCaW5kaW5nIiwic3VzcGVuZCIsInNldEFnZ3JlZ2F0aW9uIiwib0lubmVyQ2hhcnREZWxlZ2F0ZSIsIm9uQmVmb3JlUmVuZGVyaW5nIiwicmVzdW1lIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsImFkZEV2ZW50RGVsZWdhdGUiLCJfc2V0Q2hhcnQiLCJvQ2hhcnRBUEkiLCJnZXRQYXJlbnQiLCJzZXRWaXpQcm9wZXJ0aWVzIiwiZGV0YWNoU2VsZWN0RGF0YSIsImhhbmRsZVNlbGVjdGlvbkNoYW5nZSIsImRldGFjaERlc2VsZWN0RGF0YSIsImRldGFjaERyaWxsZWRVcCIsImF0dGFjaFNlbGVjdERhdGEiLCJhdHRhY2hEZXNlbGVjdERhdGEiLCJhdHRhY2hEcmlsbGVkVXAiLCJzZXRTZWxlY3Rpb25Nb2RlIiwiZ2V0UGF5bG9hZCIsInNlbGVjdGlvbk1vZGUiLCJ0b1VwcGVyQ2FzZSIsIl9nZXRCaW5kaW5nSW5mbyIsIl9nZXRCaW5kaW5nSW5mb0Zyb21TdGF0ZSIsIm9NZXRhZGF0YUluZm8iLCJnZXREZWxlZ2F0ZSIsInBheWxvYWQiLCJzVGFyZ2V0Q29sbGVjdGlvblBhdGgiLCJjb250ZXh0UGF0aCIsIm9QYXJhbXMiLCJlbnRpdHlTZXQiLCJ1c2VCYXRjaFJlcXVlc3RzIiwicHJvdmlkZUdyYW5kVG90YWxzIiwicHJvdmlkZVRvdGFsUmVzdWx0U2l6ZSIsIm5vUGFnaW5nIiwiZXZlbnRzIiwiZGF0YVJlcXVlc3RlZCIsIm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkIiwicmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0Iiwib01EQ0NoYXJ0SXRlbSIsImNhbGwiLCJnZXRUeXBlIiwiX2dldENoYXJ0IiwiZmlyZURlc2VsZWN0RGF0YSIsImJJc1RyYW5zQWdncmVnYXRlIiwiRmlsdGVyIiwiRmlsdGVyT3BlcmF0b3IiLCJFUSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQWNBLE1BQU1BLGlCQUFpQixHQUFJQyxNQUFELENBQWdCRCxpQkFBMUMsQyxDQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFaO0FBQ0E7QUFDRCxHQU5EOztBQU9BaE8sRUFBQUEsYUFBYSxDQUFDa0YsWUFBZCxHQUE2QixVQUFVbEQsU0FBVixFQUEwQlMsaUJBQTFCLEVBQWtEd0wsaUJBQWxELEVBQTBFO0FBQ3RHLFFBQUlBLGlCQUFKLEVBQXVCO0FBQ3RCLFVBQUlqTSxTQUFTLENBQUNoQixJQUFWLENBQWUsZ0JBQWYsTUFBcUMsTUFBekMsRUFBaUQ7QUFDaEQsZUFBTyxLQUFQO0FBQ0EsT0FGRCxNQUVPO0FBQ04sZUFBT3lCLGlCQUFpQixHQUFHQSxpQkFBaUIsQ0FBQ3dDLFFBQXJCLEdBQWdDLElBQXhEO0FBQ0E7QUFDRDs7QUFDRCxXQUFPeEMsaUJBQWlCLEdBQUdBLGlCQUFpQixDQUFDd0MsUUFBckIsR0FBZ0MsSUFBeEQ7QUFDQSxHQVREOztBQVVBakYsRUFBQUEsYUFBYSxDQUFDOEgsdUJBQWQsR0FBd0MsVUFBVXpILE1BQVYsRUFBdUJDLFlBQXZCLEVBQTBDO0FBQ2pGLFFBQUlELE1BQU0sQ0FBQ1csSUFBUCxDQUFZLGdCQUFaLE1BQWtDLE1BQXRDLEVBQThDO0FBQzdDLFVBQUksQ0FBQ1YsWUFBTCxFQUFtQjtBQUNsQkEsUUFBQUEsWUFBWSxHQUFHLEVBQWY7QUFDQTs7QUFDRCxVQUFJLENBQUNBLFlBQVksQ0FBQ2EsT0FBbEIsRUFBMkI7QUFDMUJiLFFBQUFBLFlBQVksQ0FBQ2EsT0FBYixHQUF1QixFQUF2QjtBQUNBOztBQUNEYixNQUFBQSxZQUFZLENBQUNhLE9BQWIsQ0FBcUJxRCxJQUFyQixDQUEwQixJQUFJMEosTUFBSixDQUFXLGdCQUFYLEVBQTZCQyxjQUFjLENBQUNDLEVBQTVDLEVBQWdELElBQWhELENBQTFCO0FBQ0E7QUFDRCxHQVZEOztTQVllcE8sYSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgQ2hhcnRVdGlscyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFV0aWxzXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IE1ldGFNb2RlbFV0aWwgZnJvbSBcInNhcC9mZS9tYWNyb3MvT0RhdGFNZXRhTW9kZWxVdGlsXCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IE1EQ0xpYiBmcm9tIFwic2FwL3VpL21kYy9saWJyYXJ5XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWxVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsVXRpbFwiO1xuaW1wb3J0IERlbGVnYXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9vZGF0YS92NC91dGlsL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEJhc2VDaGFydERlbGVnYXRlIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3ZpekNoYXJ0L0NoYXJ0RGVsZWdhdGVcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5cbmNvbnN0IENoYXJ0SXRlbVJvbGVUeXBlID0gKE1EQ0xpYiBhcyBhbnkpLkNoYXJ0SXRlbVJvbGVUeXBlO1xuLy8gLyoqXG4vLyAgKiBIZWxwZXIgY2xhc3MgZm9yIHNhcC51aS5tZGMuQ2hhcnQuXG4vLyAgKiA8aDM+PGI+Tm90ZTo8L2I+PC9oMz5cbi8vICAqIFRoZSBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIHRoZSBBUEkvYmVoYXZpb3VyIGlzIG5vdCBmaW5hbGlzZWRcbi8vICAqIGFuZCBoZW5jZSB0aGlzIHNob3VsZCBub3QgYmUgdXNlZCBmb3IgcHJvZHVjdGl2ZSB1c2FnZS5cbi8vICAqIEVzcGVjaWFsbHkgdGhpcyBjbGFzcyBpcyBub3QgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgdGhlIEZFIHNjZW5hcmlvLFxuLy8gICogaGVyZSB3ZSBzaGFsbCB1c2Ugc2FwLmZlLm1hY3Jvcy5DaGFydERlbGVnYXRlIHRoYXQgaXMgZXNwZWNpYWxseSB0YWlsb3JlZCBmb3IgVjRcbi8vICAqIG1ldGEgbW9kZWxcbi8vICAqXG4vLyAgKiBAYXV0aG9yIFNBUCBTRVxuLy8gICogQHByaXZhdGVcbi8vICAqIEBleHBlcmltZW50YWxcbi8vICAqIEBzaW5jZSAxLjYyXG4vLyAgKiBAYWxpYXMgc2FwLmZlLm1hY3Jvcy5DaGFydERlbGVnYXRlXG4vLyAgKi9cbmNvbnN0IENoYXJ0RGVsZWdhdGUgPSBPYmplY3QuYXNzaWduKHt9LCBCYXNlQ2hhcnREZWxlZ2F0ZSk7XG5cbkNoYXJ0RGVsZWdhdGUuX3NldENoYXJ0Tm9EYXRhVGV4dCA9IGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0bGV0IHNOb0RhdGFLZXkgPSBcIlwiO1xuXHRjb25zdCBvQ2hhcnRGaWx0ZXJJbmZvID0gQ2hhcnRVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKG9DaGFydCksXG5cdFx0c3VmZml4UmVzb3VyY2VLZXkgPSBvQmluZGluZ0luZm8ucGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IG9CaW5kaW5nSW5mby5wYXRoLnN1YnN0cigxKSA6IG9CaW5kaW5nSW5mby5wYXRoO1xuXHRjb25zdCBfZ2V0Tm9EYXRhVGV4dFdpdGhGaWx0ZXJzID0gZnVuY3Rpb24gKCkge1xuXHRcdGlmIChvQ2hhcnQuZGF0YShcIm11bHRpVmlld3NcIikpIHtcblx0XHRcdHJldHVybiBcIk1fVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9NVUxUSV9WSUVXXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVF9XSVRIX0ZJTFRFUlwiO1xuXHRcdH1cblx0fTtcblx0aWYgKG9DaGFydC5nZXRGaWx0ZXIoKSkge1xuXHRcdGlmIChvQ2hhcnRGaWx0ZXJJbmZvLnNlYXJjaCB8fCAob0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzICYmIG9DaGFydEZpbHRlckluZm8uZmlsdGVycy5sZW5ndGgpKSB7XG5cdFx0XHRzTm9EYXRhS2V5ID0gX2dldE5vRGF0YVRleHRXaXRoRmlsdGVycygpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzTm9EYXRhS2V5ID0gXCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIjtcblx0XHR9XG5cdH0gZWxzZSBpZiAob0NoYXJ0RmlsdGVySW5mby5zZWFyY2ggfHwgKG9DaGFydEZpbHRlckluZm8uZmlsdGVycyAmJiBvQ2hhcnRGaWx0ZXJJbmZvLmZpbHRlcnMubGVuZ3RoKSkge1xuXHRcdHNOb0RhdGFLZXkgPSBfZ2V0Tm9EYXRhVGV4dFdpdGhGaWx0ZXJzKCk7XG5cdH0gZWxzZSB7XG5cdFx0c05vRGF0YUtleSA9IFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fRklMVEVSU19OT19EQVRBX1RFWFRcIjtcblx0fVxuXHRyZXR1cm4gKG9DaGFydC5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0LnRoZW4oZnVuY3Rpb24gKG9SZXNvdXJjZUJ1bmRsZSkge1xuXHRcdFx0b0NoYXJ0LnNldE5vRGF0YVRleHQoQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoc05vRGF0YUtleSwgb1Jlc291cmNlQnVuZGxlLCBudWxsLCBzdWZmaXhSZXNvdXJjZUtleSkpO1xuXHRcdH0pXG5cdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yKTtcblx0XHR9KTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUuX2hhbmRsZVByb3BlcnR5ID0gZnVuY3Rpb24gKFxuXHRvTURDQ2hhcnQ6IENoYXJ0LFxuXHRtRW50aXR5U2V0QW5ub3RhdGlvbnM6IGFueSxcblx0bUtub3duQWdncmVnYXRhYmxlUHJvcHM6IGFueSxcblx0bUN1c3RvbUFnZ3JlZ2F0ZXM6IGFueSxcblx0YVByb3BlcnRpZXM6IGFueVtdLFxuXHRzQ3JpdGljYWxpdHk6IHN0cmluZ1xuKSB7XG5cdGNvbnN0IG9BcHBseVN1cHBvcnRlZCA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJhcHBseVN1cHBvcnRlZFwiKSk7XG5cdGNvbnN0IG9Tb3J0UmVzdHJpY3Rpb25zID0gbUVudGl0eVNldEFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuU29ydFJlc3RyaWN0aW9uc1wiXSB8fCB7fTtcblx0Y29uc3Qgb1NvcnRSZXN0cmljdGlvbnNJbmZvID0gT0RhdGFNZXRhTW9kZWxVdGlsLmdldFNvcnRSZXN0cmljdGlvbnNJbmZvKG9Tb3J0UmVzdHJpY3Rpb25zKTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9ucyA9IG1FbnRpdHlTZXRBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQ2FwYWJpbGl0aWVzLlYxLkZpbHRlclJlc3RyaWN0aW9uc1wiXTtcblx0Y29uc3Qgb0ZpbHRlclJlc3RyaWN0aW9uc0luZm8gPSBPRGF0YU1ldGFNb2RlbFV0aWwuZ2V0RmlsdGVyUmVzdHJpY3Rpb25zSW5mbyhvRmlsdGVyUmVzdHJpY3Rpb25zKTtcblx0Y29uc3Qgb09iaiA9IHRoaXMuZ2V0TW9kZWwoKS5nZXRPYmplY3QodGhpcy5nZXRQYXRoKCkpO1xuXHRjb25zdCBzS2V5ID0gdGhpcy5nZXRNb2RlbCgpLmdldE9iamVjdChgJHt0aGlzLmdldFBhdGgoKX1Ac2FwdWkubmFtZWApO1xuXHRjb25zdCBvTWV0YU1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuXHRpZiAob09iaiAmJiBvT2JqLiRraW5kID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHQvLyBpZ25vcmUgKGFzIGZvciBub3cpIGFsbCBjb21wbGV4IHByb3BlcnRpZXNcblx0XHQvLyBub3QgY2xlYXIgaWYgdGhleSBtaWdodCBiZSBuZXN0aW5nIChjb21wbGV4IGluIGNvbXBsZXgpXG5cdFx0Ly8gbm90IGNsZWFyIGhvdyB0aGV5IGFyZSByZXByZXNlbnRlZCBpbiBub24tZmlsdGVyYWJsZSBhbm5vdGF0aW9uXG5cdFx0Ly8gZXRjLlxuXHRcdGlmIChvT2JqLiRpc0NvbGxlY3Rpb24pIHtcblx0XHRcdC8vTG9nLndhcm5pbmcoXCJDb21wbGV4IHByb3BlcnR5IHdpdGggdHlwZSBcIiArIG9PYmouJFR5cGUgKyBcIiBoYXMgYmVlbiBpZ25vcmVkXCIpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9Qcm9wZXJ0eUFubm90YXRpb25zID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7dGhpcy5nZXRQYXRoKCl9QGApO1xuXHRcdGNvbnN0IHNQYXRoID0gb01ldGFNb2RlbC5nZXRPYmplY3QoXCJAc2FwdWkubmFtZVwiLCBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KHRoaXMuZ2V0UGF0aCgpKSk7XG5cblx0XHRjb25zdCBhR3JvdXBhYmxlUHJvcGVydGllcyA9IG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuR3JvdXBhYmxlUHJvcGVydGllcztcblx0XHRjb25zdCBhQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuQWdncmVnYXRhYmxlUHJvcGVydGllcztcblx0XHRsZXQgYkdyb3VwYWJsZSA9IGZhbHNlLFxuXHRcdFx0YkFnZ3JlZ2F0YWJsZSA9IGZhbHNlO1xuXHRcdGlmIChhR3JvdXBhYmxlUHJvcGVydGllcyAmJiBhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKGFHcm91cGFibGVQcm9wZXJ0aWVzW2ldLiRQcm9wZXJ0eVBhdGggPT09IHNQYXRoKSB7XG5cdFx0XHRcdFx0Ykdyb3VwYWJsZSA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzICYmIGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBhQWdncmVnYXRhYmxlUHJvcGVydGllcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXNbal0uUHJvcGVydHkuJFByb3BlcnR5UGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0XHRiQWdncmVnYXRhYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIWFHcm91cGFibGVQcm9wZXJ0aWVzIHx8IChhR3JvdXBhYmxlUHJvcGVydGllcyAmJiAhYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoKSkge1xuXHRcdFx0Ykdyb3VwYWJsZSA9IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5Hcm91cGFibGVcIl07XG5cdFx0fVxuXHRcdGlmICghYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgfHwgKGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzICYmICFhQWdncmVnYXRhYmxlUHJvcGVydGllcy5sZW5ndGgpKSB7XG5cdFx0XHRiQWdncmVnYXRhYmxlID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkFnZ3JlZ2F0YWJsZVwiXTtcblx0XHR9XG5cblx0XHQvL1JpZ2h0IG5vdzogc2tpcCB0aGVtLCBzaW5jZSB3ZSBjYW4ndCBjcmVhdGUgYSBjaGFydCBmcm9tIGl0XG5cdFx0aWYgKCFiR3JvdXBhYmxlICYmICFiQWdncmVnYXRhYmxlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGJBZ2dyZWdhdGFibGUpIHtcblx0XHRcdGNvbnN0IGFBZ2dyZWdhdGVQcm9wZXJ0aWVzID0gQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZShcblx0XHRcdFx0b01EQ0NoYXJ0LFxuXHRcdFx0XHRzS2V5LFxuXHRcdFx0XHRvUHJvcGVydHlBbm5vdGF0aW9ucyxcblx0XHRcdFx0b0ZpbHRlclJlc3RyaWN0aW9uc0luZm8sXG5cdFx0XHRcdG9Tb3J0UmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHMsXG5cdFx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzXG5cdFx0XHQpO1xuXHRcdFx0YUFnZ3JlZ2F0ZVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAob0FnZ3JlZ2F0ZVByb3BlcnR5OiBhbnkpIHtcblx0XHRcdFx0YVByb3BlcnRpZXMucHVzaChvQWdncmVnYXRlUHJvcGVydHkpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYgKGJHcm91cGFibGUpIHtcblx0XHRcdGNvbnN0IHNOYW1lID0gc0tleSB8fCBcIlwiLFxuXHRcdFx0XHRzVGV4dFByb3BlcnR5ID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0XHQ/IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdLiRQYXRoXG5cdFx0XHRcdFx0OiBudWxsO1xuXHRcdFx0bGV0IGJJc05hdmlnYXRpb25UZXh0ID0gZmFsc2U7XG5cdFx0XHRpZiAoc05hbWUgJiYgc05hbWUuaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoYCRleHBhbmQgaXMgbm90IHlldCBzdXBwb3J0ZWQuIFByb3BlcnR5OiAke3NOYW1lfSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGlmIChzVGV4dFByb3BlcnR5ICYmIHNUZXh0UHJvcGVydHkuaW5kZXhPZihcIi9cIikgPiAtMSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoYCRleHBhbmQgaXMgbm90IHlldCBzdXBwb3J0ZWQuIFRleHQgUHJvcGVydHk6ICR7c1RleHRQcm9wZXJ0eX0gZnJvbSBhbiBhc3NvY2lhdGlvbiBjYW5ub3QgYmUgdXNlZGApO1xuXHRcdFx0XHRiSXNOYXZpZ2F0aW9uVGV4dCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRhUHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0bmFtZTogc0tleSxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBzS2V5LFxuXHRcdFx0XHRsYWJlbDogb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCJdIHx8IHNLZXksXG5cdFx0XHRcdHNvcnRhYmxlOiBDaGFydERlbGVnYXRlLl9nZXRTb3J0YWJsZShvTURDQ2hhcnQsIG9Tb3J0UmVzdHJpY3Rpb25zSW5mb1tzS2V5XSwgZmFsc2UpLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiBvRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1tzS2V5XSA/IG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW3NLZXldLmZpbHRlcmFibGUgOiB0cnVlLFxuXHRcdFx0XHRncm91cGFibGU6IHRydWUsXG5cdFx0XHRcdGFnZ3JlZ2F0YWJsZTogZmFsc2UsXG5cdFx0XHRcdG1heENvbmRpdGlvbnM6IE9EYXRhTWV0YU1vZGVsVXRpbC5pc011bHRpVmFsdWVGaWx0ZXJFeHByZXNzaW9uKG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvLnByb3BlcnR5SW5mb1tzS2V5XSkgPyAtMSA6IDEsXG5cdFx0XHRcdHNvcnRLZXk6IHNLZXksXG5cdFx0XHRcdHJvbGU6IENoYXJ0SXRlbVJvbGVUeXBlLmNhdGVnb3J5LCAvL3N0YW5kYXJkLCBub3JtYWxseSB0aGlzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBmcm9tIFVJLkNoYXJ0IGFubm90YXRpb25cblx0XHRcdFx0Y3JpdGljYWxpdHk6IHNDcml0aWNhbGl0eSwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHR0ZXh0UHJvcGVydHk6XG5cdFx0XHRcdFx0IWJJc05hdmlnYXRpb25UZXh0ICYmIG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdXG5cdFx0XHRcdFx0XHQ/IG9Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5UZXh0XCJdLiRQYXRoXG5cdFx0XHRcdFx0XHQ6IG51bGwsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRcdFx0dGV4dEZvcm1hdHRlcjogb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50XCJdXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn07XG5cbkNoYXJ0RGVsZWdhdGUuX2Zvcm1hdFRleHQgPSBmdW5jdGlvbiAob1ZhbHVlMTogYW55LCBvVmFsdWUyOiBhbnkpIHtcblx0Y29uc3Qgb1RleHRBcnJhbmdlbWVudEFubm90YXRpb24gPSB0aGlzLnRleHRGb3JtYXR0ZXI7XG5cdGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRGaXJzdFwiKSB7XG5cdFx0cmV0dXJuIGAke29WYWx1ZTJ9ICgke29WYWx1ZTF9KWA7XG5cdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0TGFzdFwiKSB7XG5cdFx0cmV0dXJuIGAke29WYWx1ZTF9ICgke29WYWx1ZTJ9KWA7XG5cdH0gZWxzZSBpZiAob1RleHRBcnJhbmdlbWVudEFubm90YXRpb24uJEVudW1NZW1iZXIgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuVGV4dEFycmFuZ2VtZW50VHlwZS9UZXh0T25seVwiKSB7XG5cdFx0cmV0dXJuIG9WYWx1ZTI7XG5cdH1cblx0cmV0dXJuIG9WYWx1ZTIgPyBvVmFsdWUyIDogb1ZhbHVlMTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUudXBkYXRlQmluZGluZ0luZm8gPSBmdW5jdGlvbiAob0NoYXJ0OiBhbnksIG9CaW5kaW5nSW5mbzogYW55KSB7XG5cdENoYXJ0RGVsZWdhdGUuX3NldENoYXJ0Tm9EYXRhVGV4dChvQ2hhcnQsIG9CaW5kaW5nSW5mbyk7XG5cblx0Y29uc3Qgb0ZpbHRlciA9IHNhcC51aS5nZXRDb3JlKCkuYnlJZChvQ2hhcnQuZ2V0RmlsdGVyKCkpIGFzIGFueTtcblx0aWYgKG9GaWx0ZXIpIHtcblx0XHRjb25zdCBtQ29uZGl0aW9ucyA9IG9GaWx0ZXIuZ2V0Q29uZGl0aW9ucygpO1xuXG5cdFx0aWYgKG1Db25kaXRpb25zKSB7XG5cdFx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0XHRvQmluZGluZ0luZm8gPSB7fTtcblx0XHRcdH1cblx0XHRcdG9CaW5kaW5nSW5mby5zb3J0ZXIgPSB0aGlzLmdldFNvcnRlcnMob0NoYXJ0KTtcblx0XHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gb0NoYXJ0LmdldENvbnRyb2xEZWxlZ2F0ZSgpLmdldElubmVyQ2hhcnQob0NoYXJ0KTtcblx0XHRcdGxldCBvRmlsdGVySW5mbztcblx0XHRcdGlmIChvSW5uZXJDaGFydCkge1xuXHRcdFx0XHQvLyBpZiB0aGUgYWN0aW9uIGlzIGEgZHJpbGwgZG93biwgY2hhcnQgc2VsZWN0aW9ucyBtdXN0IGJlIGNvbnNpZGVyZWRcblx0XHRcdFx0aWYgKENoYXJ0VXRpbHMuZ2V0Q2hhcnRTZWxlY3Rpb25zRXhpc3Qob0NoYXJ0KSkge1xuXHRcdFx0XHRcdG9GaWx0ZXJJbmZvID0gQ2hhcnRVdGlscy5nZXRBbGxGaWx0ZXJJbmZvKG9DaGFydCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9GaWx0ZXJJbmZvID0gb0ZpbHRlckluZm8gPyBvRmlsdGVySW5mbyA6IENoYXJ0VXRpbHMuZ2V0RmlsdGVyQmFyRmlsdGVySW5mbyhvQ2hhcnQpO1xuXHRcdFx0aWYgKG9GaWx0ZXJJbmZvKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5maWx0ZXJzID0gb0ZpbHRlckluZm8uZmlsdGVycztcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc1BhcmFtZXRlclBhdGggPSBEZWxlZ2F0ZVV0aWwuZ2V0UGFyYW1ldGVyc0luZm8ob0ZpbHRlciwgbUNvbmRpdGlvbnMpO1xuXHRcdFx0aWYgKHNQYXJhbWV0ZXJQYXRoKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mby5wYXRoID0gc1BhcmFtZXRlclBhdGg7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2VhcmNoXG5cdFx0Y29uc3Qgb0luZm8gPSBGaWx0ZXJVdGlscy5nZXRGaWx0ZXJJbmZvKG9GaWx0ZXIsIHt9KTtcblx0XHRjb25zdCBvQXBwbHlTdXBwb3J0ZWQgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9DaGFydC5kYXRhKFwiYXBwbHlTdXBwb3J0ZWRcIikpO1xuXHRcdGlmIChvQXBwbHlTdXBwb3J0ZWQgJiYgb0FwcGx5U3VwcG9ydGVkLmVuYWJsZVNlYXJjaCAmJiBvSW5mby5zZWFyY2gpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2ggPSBDb21tb25VdGlscy5ub3JtYWxpemVTZWFyY2hUZXJtKG9JbmZvLnNlYXJjaCk7XG5cdFx0fSBlbHNlIGlmIChvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoKSB7XG5cdFx0XHRkZWxldGUgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYgKCFvQmluZGluZ0luZm8pIHtcblx0XHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRvQmluZGluZ0luZm8uc29ydGVyID0gdGhpcy5nZXRTb3J0ZXJzKG9DaGFydCk7XG5cdH1cblx0Q2hhcnREZWxlZ2F0ZS5fY2hlY2tBbmRBZGREcmFmdEZpbHRlcihvQ2hhcnQsIG9CaW5kaW5nSW5mbyk7XG59O1xuXG5DaGFydERlbGVnYXRlLmZldGNoUHJvcGVydGllcyA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IENoYXJ0KSB7XG5cdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX2dldE1vZGVsKG9NRENDaGFydCk7XG5cdGxldCBwQ3JlYXRlUHJvcGVydHlJbmZvcztcblxuXHRpZiAoIW9Nb2RlbCkge1xuXHRcdHBDcmVhdGVQcm9wZXJ0eUluZm9zID0gbmV3IFByb21pc2UoKHJlc29sdmU6IGFueSkgPT4ge1xuXHRcdFx0b01EQ0NoYXJ0LmF0dGFjaE1vZGVsQ29udGV4dENoYW5nZShcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHJlc29sdmVyOiByZXNvbHZlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG9uTW9kZWxDb250ZXh0Q2hhbmdlIGFzIGFueSxcblx0XHRcdFx0dGhpc1xuXHRcdFx0KTtcblx0XHR9KS50aGVuKChvUmV0cmlldmVkTW9kZWw6IGFueSkgPT4ge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2NyZWF0ZVByb3BlcnR5SW5mb3Mob01EQ0NoYXJ0LCBvUmV0cmlldmVkTW9kZWwpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHBDcmVhdGVQcm9wZXJ0eUluZm9zID0gdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyhvTURDQ2hhcnQsIG9Nb2RlbCk7XG5cdH1cblxuXHRyZXR1cm4gcENyZWF0ZVByb3BlcnR5SW5mb3MudGhlbihmdW5jdGlvbiAoYVByb3BlcnRpZXM6IGFueSkge1xuXHRcdGlmIChvTURDQ2hhcnQuZGF0YSkge1xuXHRcdFx0b01EQ0NoYXJ0LmRhdGEoXCIkbWRjQ2hhcnRQcm9wZXJ0eUluZm9cIiwgYVByb3BlcnRpZXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gYVByb3BlcnRpZXM7XG5cdH0pO1xufTtcbmZ1bmN0aW9uIG9uTW9kZWxDb250ZXh0Q2hhbmdlKHRoaXM6IHR5cGVvZiBDaGFydERlbGVnYXRlLCBvRXZlbnQ6IGFueSwgb0RhdGE6IGFueSkge1xuXHRjb25zdCBvTURDQ2hhcnQgPSBvRXZlbnQuZ2V0U291cmNlKCk7XG5cdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX2dldE1vZGVsKG9NRENDaGFydCk7XG5cblx0aWYgKG9Nb2RlbCkge1xuXHRcdG9NRENDaGFydC5kZXRhY2hNb2RlbENvbnRleHRDaGFuZ2Uob25Nb2RlbENvbnRleHRDaGFuZ2UpO1xuXHRcdG9EYXRhLnJlc29sdmVyKG9Nb2RlbCk7XG5cdH1cbn1cbkNoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3MgPSBhc3luYyBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnksIG9Nb2RlbDogYW55KSB7XG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID0gYC8ke29NRENDaGFydC5kYXRhKFwiZW50aXR5U2V0XCIpfWA7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCk7XG5cblx0Y29uc3QgYVJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofS9gKSwgb01ldGFNb2RlbC5yZXF1ZXN0T2JqZWN0KGAke3NFbnRpdHlTZXRQYXRofUBgKV0pO1xuXHRjb25zdCBhUHJvcGVydGllczogYW55W10gPSBbXTtcblx0Y29uc3Qgb0VudGl0eVR5cGUgPSBhUmVzdWx0c1swXSxcblx0XHRtRW50aXR5U2V0QW5ub3RhdGlvbnMgPSBhUmVzdWx0c1sxXTtcblx0Y29uc3QgbUN1c3RvbUFnZ3JlZ2F0ZXMgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9NRENDaGFydC5kYXRhKFwiY3VzdG9tQWdnXCIpKTtcblx0bGV0IHNBbm5vO1xuXHRjb25zdCBhUHJvcGVydHlQcm9taXNlID0gW107XG5cdGZvciAoY29uc3Qgc0Fubm9LZXkgaW4gbUVudGl0eVNldEFubm90YXRpb25zKSB7XG5cdFx0aWYgKHNBbm5vS2V5LnN0YXJ0c1dpdGgoXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkN1c3RvbUFnZ3JlZ2F0ZVwiKSkge1xuXHRcdFx0c0Fubm8gPSBzQW5ub0tleS5yZXBsYWNlKFwiQE9yZy5PRGF0YS5BZ2dyZWdhdGlvbi5WMS5DdXN0b21BZ2dyZWdhdGUjXCIsIFwiXCIpO1xuXHRcdFx0Y29uc3QgYUFubm8gPSBzQW5uby5zcGxpdChcIkBcIik7XG5cblx0XHRcdGlmIChhQW5uby5sZW5ndGggPT0gMiAmJiBhQW5ub1sxXSA9PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiKSB7XG5cdFx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzW2FBbm5vWzBdXSA9IG1FbnRpdHlTZXRBbm5vdGF0aW9uc1tzQW5ub0tleV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGNvbnN0IGFEaW1lbnNpb25zOiBhbnlbXSA9IFtdLFxuXHRcdGFNZWFzdXJlcyA9IFtdO1xuXHRpZiAoT2JqZWN0LmtleXMobUN1c3RvbUFnZ3JlZ2F0ZXMpLmxlbmd0aCA+PSAxKSB7XG5cdFx0Y29uc3QgYUNoYXJ0SXRlbXMgPSBvTURDQ2hhcnQuZ2V0SXRlbXMoKTtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBhQ2hhcnRJdGVtcykge1xuXHRcdFx0aWYgKGFDaGFydEl0ZW1zW2tleV0uaXNBKFwic2FwLnVpLm1kYy5jaGFydC5EaW1lbnNpb25JdGVtXCIpKSB7XG5cdFx0XHRcdGFEaW1lbnNpb25zLnB1c2goYUNoYXJ0SXRlbXNba2V5XS5nZXRLZXkoKSk7XG5cdFx0XHR9IGVsc2UgaWYgKGFDaGFydEl0ZW1zW2tleV0uaXNBKFwic2FwLnVpLm1kYy5jaGFydC5NZWFzdXJlSXRlbVwiKSkge1xuXHRcdFx0XHRhTWVhc3VyZXMucHVzaChhQ2hhcnRJdGVtc1trZXldLmdldEtleSgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0YU1lYXN1cmVzLmZpbHRlcihmdW5jdGlvbiAodmFsOiBhbnkpIHtcblx0XHRcdFx0cmV0dXJuIGFEaW1lbnNpb25zLmluZGV4T2YodmFsKSAhPSAtMTtcblx0XHRcdH0pLmxlbmd0aCA+PSAxXG5cdFx0KSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJEaW1lbnNpb24gYW5kIE1lYXN1cmUgaGFzIHRoZSBzYW1lUHJvcGVydHkgQ29uZmlndXJlZFwiKTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvTURDQ2hhcnQuZGF0YShcInRyYW5zQWdnXCIpKTtcblx0Y29uc3QgbUtub3duQWdncmVnYXRhYmxlUHJvcHM6IGFueSA9IHt9O1xuXHRmb3IgKGNvbnN0IHNBZ2dyZWdhdGFibGUgaW4gbVR5cGVBZ2dyZWdhdGFibGVQcm9wcykge1xuXHRcdGNvbnN0IHNQcm9wS2V5ID0gbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5wcm9wZXJ0eVBhdGg7XG5cdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldID0gbUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldIHx8IHt9O1xuXHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NQcm9wS2V5XVttVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLmFnZ3JlZ2F0aW9uTWV0aG9kXSA9IHtcblx0XHRcdG5hbWU6IG1UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0ubmFtZSxcblx0XHRcdGxhYmVsOiBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLmxhYmVsXG5cdFx0fTtcblx0fVxuXHRmb3IgKGNvbnN0IHNLZXkgaW4gb0VudGl0eVR5cGUpIHtcblx0XHRpZiAoc0tleS5pbmRleE9mKFwiJFwiKSAhPT0gMCkge1xuXHRcdFx0YVByb3BlcnR5UHJvbWlzZS5wdXNoKFxuXHRcdFx0XHRNZXRhTW9kZWxVdGlsLmZldGNoQ3JpdGljYWxpdHkob01ldGFNb2RlbCwgb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgJHtzRW50aXR5U2V0UGF0aH0vJHtzS2V5fWApKS50aGVuKFxuXHRcdFx0XHRcdENoYXJ0RGVsZWdhdGUuX2hhbmRsZVByb3BlcnR5LmJpbmQoXG5cdFx0XHRcdFx0XHRvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGAke3NFbnRpdHlTZXRQYXRofS8ke3NLZXl9YCksXG5cdFx0XHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdFx0XHRtRW50aXR5U2V0QW5ub3RhdGlvbnMsXG5cdFx0XHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wcyxcblx0XHRcdFx0XHRcdG1DdXN0b21BZ2dyZWdhdGVzLFxuXHRcdFx0XHRcdFx0YVByb3BlcnRpZXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdClcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdGF3YWl0IFByb21pc2UuYWxsKGFQcm9wZXJ0eVByb21pc2UpO1xuXG5cdHJldHVybiBhUHJvcGVydGllcztcbn07XG5cbkNoYXJ0RGVsZWdhdGUuX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUgPSBmdW5jdGlvbiAoXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdHNLZXk6IHN0cmluZyxcblx0b1Byb3BlcnR5QW5ub3RhdGlvbnM6IGFueSxcblx0b0ZpbHRlclJlc3RyaWN0aW9uc0luZm86IGFueSxcblx0b1NvcnRSZXN0cmljdGlvbnNJbmZvOiBhbnksXG5cdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzOiBhbnksXG5cdG1DdXN0b21BZ2dyZWdhdGVzOiBhbnlcbikge1xuXHRjb25zdCBhQWdncmVnYXRlUHJvcGVydGllcyA9IFtdO1xuXHRpZiAoT2JqZWN0LmtleXMobUtub3duQWdncmVnYXRhYmxlUHJvcHMpLmluZGV4T2Yoc0tleSkgPiAtMSkge1xuXHRcdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XSkge1xuXHRcdFx0YUFnZ3JlZ2F0ZVByb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdG5hbWU6IG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldW3NBZ2dyZWdhdGFibGVdLm5hbWUsXG5cdFx0XHRcdHByb3BlcnR5UGF0aDogc0tleSxcblx0XHRcdFx0bGFiZWw6XG5cdFx0XHRcdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHNbc0tleV1bc0FnZ3JlZ2F0YWJsZV0ubGFiZWwgfHxcblx0XHRcdFx0XHRgJHtvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIl19ICgke3NBZ2dyZWdhdGFibGV9KWAgfHxcblx0XHRcdFx0XHRgJHtzS2V5fSAoJHtzQWdncmVnYXRhYmxlfSlgLFxuXHRcdFx0XHRzb3J0YWJsZTogb1NvcnRSZXN0cmljdGlvbnNJbmZvW3NLZXldID8gb1NvcnRSZXN0cmljdGlvbnNJbmZvW3NLZXldLnNvcnRhYmxlIDogdHJ1ZSxcblx0XHRcdFx0ZmlsdGVyYWJsZTogb0ZpbHRlclJlc3RyaWN0aW9uc0luZm9bc0tleV0gPyBvRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1tzS2V5XS5maWx0ZXJhYmxlIDogdHJ1ZSxcblx0XHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0YWdncmVnYXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRhZ2dyZWdhdGlvbk1ldGhvZDogc0FnZ3JlZ2F0YWJsZSxcblx0XHRcdFx0bWF4Q29uZGl0aW9uczogT0RhdGFNZXRhTW9kZWxVdGlsLmlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NLZXldKSA/IC0xIDogMSxcblx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdGRhdGFwb2ludDogbnVsbCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0XHR9KTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoT2JqZWN0LmtleXMobUN1c3RvbUFnZ3JlZ2F0ZXMpLmluZGV4T2Yoc0tleSkgPiAtMSkge1xuXHRcdGZvciAoY29uc3Qgc0N1c3RvbSBpbiBtQ3VzdG9tQWdncmVnYXRlcykge1xuXHRcdFx0aWYgKHNDdXN0b20gPT09IHNLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb0l0ZW0gPSBtZXJnZSh7fSwgbUN1c3RvbUFnZ3JlZ2F0ZXNbc0N1c3RvbV0sIHtcblx0XHRcdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdGFnZ3JlZ2F0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRyb2xlOiBDaGFydEl0ZW1Sb2xlVHlwZS5heGlzMSxcblx0XHRcdFx0XHRkYXRhcG9pbnQ6IG51bGwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YUFnZ3JlZ2F0ZVByb3BlcnRpZXMucHVzaChvSXRlbSk7XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhQWdncmVnYXRlUHJvcGVydGllcztcbn07XG5DaGFydERlbGVnYXRlLnJlYmluZCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0Y29uc3Qgc1NlYXJjaCA9IG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2g7XG5cblx0aWYgKHNTZWFyY2gpIHtcblx0XHRkZWxldGUgb0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaDtcblx0fVxuXG5cdEJhc2VDaGFydERlbGVnYXRlLnJlYmluZChvTURDQ2hhcnQsIG9CaW5kaW5nSW5mbyk7XG5cblx0aWYgKHNTZWFyY2gpIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IG9NRENDaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5nZXRJbm5lckNoYXJ0KG9NRENDaGFydCksXG5cdFx0XHRvQ2hhcnRCaW5kaW5nID0gb0lubmVyQ2hhcnQgJiYgb0lubmVyQ2hhcnQuZ2V0QmluZGluZyhcImRhdGFcIik7XG5cblx0XHQvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB1bnRpbCB0aGlzIGlzIGZpeGVkIGluIE1EQ0NoYXJ0IC8gVUk1IENoYXJ0XG5cdFx0Ly8gSW4gb3JkZXIgdG8gYXZvaWQgaGF2aW5nIDIgT0RhdGEgcmVxdWVzdHMsIHdlIG5lZWQgdG8gc3VzcGVuZCB0aGUgYmluZGluZyBiZWZvcmUgc2V0dGluZyBzb21lIGFnZ3JlZ2F0aW9uIHByb3BlcnRpZXNcblx0XHQvLyBhbmQgcmVzdW1lIGl0IG9uY2UgdGhlIGNoYXJ0IGhhcyBhZGRlZCBvdGhlciBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzIChpbiBvbkJlZm9yZVJlbmRlcmluZylcblx0XHRvQ2hhcnRCaW5kaW5nLnN1c3BlbmQoKTtcblx0XHRvQ2hhcnRCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKHsgc2VhcmNoOiBzU2VhcmNoIH0pO1xuXG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnREZWxlZ2F0ZSA9IHtcblx0XHRcdG9uQmVmb3JlUmVuZGVyaW5nOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9DaGFydEJpbmRpbmcucmVzdW1lKCk7XG5cdFx0XHRcdG9Jbm5lckNoYXJ0LnJlbW92ZUV2ZW50RGVsZWdhdGUob0lubmVyQ2hhcnREZWxlZ2F0ZSk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHRvSW5uZXJDaGFydC5hZGRFdmVudERlbGVnYXRlKG9Jbm5lckNoYXJ0RGVsZWdhdGUpO1xuXHR9XG59O1xuQ2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnQgPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnksIG9Jbm5lckNoYXJ0OiBhbnkpIHtcblx0Y29uc3Qgb0NoYXJ0QVBJID0gb01EQ0NoYXJ0LmdldFBhcmVudCgpO1xuXHRvSW5uZXJDaGFydC5zZXRWaXpQcm9wZXJ0aWVzKG9NRENDaGFydC5kYXRhKFwidml6UHJvcGVydGllc1wiKSk7XG5cdG9Jbm5lckNoYXJ0LmRldGFjaFNlbGVjdERhdGEob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXHRvSW5uZXJDaGFydC5kZXRhY2hEZXNlbGVjdERhdGEob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXHRvSW5uZXJDaGFydC5kZXRhY2hEcmlsbGVkVXAob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXHRvSW5uZXJDaGFydC5hdHRhY2hTZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpKTtcblx0b0lubmVyQ2hhcnQuYXR0YWNoRGVzZWxlY3REYXRhKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpKTtcblx0b0lubmVyQ2hhcnQuYXR0YWNoRHJpbGxlZFVwKG9DaGFydEFQSS5oYW5kbGVTZWxlY3Rpb25DaGFuZ2UuYmluZChvQ2hhcnRBUEkpKTtcblxuXHRvSW5uZXJDaGFydC5zZXRTZWxlY3Rpb25Nb2RlKG9NRENDaGFydC5nZXRQYXlsb2FkKCkuc2VsZWN0aW9uTW9kZS50b1VwcGVyQ2FzZSgpKTtcblx0QmFzZUNoYXJ0RGVsZWdhdGUuX3NldENoYXJ0KG9NRENDaGFydCwgb0lubmVyQ2hhcnQpO1xufTtcbkNoYXJ0RGVsZWdhdGUuX2dldEJpbmRpbmdJbmZvID0gZnVuY3Rpb24gKG9NRENDaGFydDogYW55KSB7XG5cdGlmICh0aGlzLl9nZXRCaW5kaW5nSW5mb0Zyb21TdGF0ZShvTURDQ2hhcnQpKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlKG9NRENDaGFydCk7XG5cdH1cblxuXHRjb25zdCBvTWV0YWRhdGFJbmZvID0gb01EQ0NoYXJ0LmdldERlbGVnYXRlKCkucGF5bG9hZDtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9NRENDaGFydC5nZXRNb2RlbCgpICYmIG9NRENDaGFydC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRjb25zdCBzVGFyZ2V0Q29sbGVjdGlvblBhdGggPSBvTURDQ2hhcnQuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpO1xuXHRjb25zdCBzRW50aXR5U2V0UGF0aCA9XG5cdFx0KG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NUYXJnZXRDb2xsZWN0aW9uUGF0aH0vJGtpbmRgKSAhPT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIiA/IFwiL1wiIDogXCJcIikgKyBvTWV0YWRhdGFJbmZvLmNvbnRleHRQYXRoO1xuXHRjb25zdCBvUGFyYW1zID0gbWVyZ2Uoe30sIG9NZXRhZGF0YUluZm8ucGFyYW1ldGVycywge1xuXHRcdGVudGl0eVNldDogb01EQ0NoYXJ0LmRhdGEoXCJlbnRpdHlTZXRcIiksXG5cdFx0dXNlQmF0Y2hSZXF1ZXN0czogdHJ1ZSxcblx0XHRwcm92aWRlR3JhbmRUb3RhbHM6IHRydWUsXG5cdFx0cHJvdmlkZVRvdGFsUmVzdWx0U2l6ZTogdHJ1ZSxcblx0XHRub1BhZ2luZzogdHJ1ZVxuXHR9KTtcblx0cmV0dXJuIHtcblx0XHRwYXRoOiBzRW50aXR5U2V0UGF0aCxcblx0XHRldmVudHM6IHtcblx0XHRcdGRhdGFSZXF1ZXN0ZWQ6IG9NRENDaGFydC5nZXRQYXJlbnQoKS5vbkludGVybmFsRGF0YVJlcXVlc3RlZC5iaW5kKG9NRENDaGFydC5nZXRQYXJlbnQoKSlcblx0XHR9LFxuXHRcdHBhcmFtZXRlcnM6IG9QYXJhbXNcblx0fTtcbn07XG5DaGFydERlbGVnYXRlLnJlbW92ZUl0ZW1Gcm9tSW5uZXJDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSwgb01EQ0NoYXJ0SXRlbTogYW55KSB7XG5cdEJhc2VDaGFydERlbGVnYXRlLnJlbW92ZUl0ZW1Gcm9tSW5uZXJDaGFydC5jYWxsKHRoaXMsIG9NRENDaGFydCwgb01EQ0NoYXJ0SXRlbSk7XG5cdGlmIChvTURDQ2hhcnRJdGVtLmdldFR5cGUoKSA9PT0gXCJncm91cGFibGVcIikge1xuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0ID0gdGhpcy5fZ2V0Q2hhcnQob01EQ0NoYXJ0KTtcblx0XHRvSW5uZXJDaGFydC5maXJlRGVzZWxlY3REYXRhKCk7XG5cdH1cbn07XG5DaGFydERlbGVnYXRlLl9nZXRTb3J0YWJsZSA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSwgb1NvcnRSZXN0cmljdGlvbnM6IGFueSwgYklzVHJhbnNBZ2dyZWdhdGU6IGFueSkge1xuXHRpZiAoYklzVHJhbnNBZ2dyZWdhdGUpIHtcblx0XHRpZiAob01EQ0NoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIG9Tb3J0UmVzdHJpY3Rpb25zID8gb1NvcnRSZXN0cmljdGlvbnMuc29ydGFibGUgOiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb1NvcnRSZXN0cmljdGlvbnMgPyBvU29ydFJlc3RyaWN0aW9ucy5zb3J0YWJsZSA6IHRydWU7XG59O1xuQ2hhcnREZWxlZ2F0ZS5fY2hlY2tBbmRBZGREcmFmdEZpbHRlciA9IGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0aWYgKG9DaGFydC5kYXRhKFwiZHJhZnRTdXBwb3J0ZWRcIikgPT09IFwidHJ1ZVwiKSB7XG5cdFx0aWYgKCFvQmluZGluZ0luZm8pIHtcblx0XHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIW9CaW5kaW5nSW5mby5maWx0ZXJzKSB7XG5cdFx0XHRvQmluZGluZ0luZm8uZmlsdGVycyA9IFtdO1xuXHRcdH1cblx0XHRvQmluZGluZ0luZm8uZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSkpO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFydERlbGVnYXRlO1xuIl19
|
|
518
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDaGFydEl0ZW1Sb2xlVHlwZSIsIk1EQ0xpYiIsIkNoYXJ0RGVsZWdhdGUiLCJPYmplY3QiLCJhc3NpZ24iLCJCYXNlQ2hhcnREZWxlZ2F0ZSIsIl9zZXRDaGFydE5vRGF0YVRleHQiLCJvQ2hhcnQiLCJvQmluZGluZ0luZm8iLCJzTm9EYXRhS2V5Iiwib0NoYXJ0RmlsdGVySW5mbyIsIkNoYXJ0VXRpbHMiLCJnZXRBbGxGaWx0ZXJJbmZvIiwic3VmZml4UmVzb3VyY2VLZXkiLCJwYXRoIiwic3RhcnRzV2l0aCIsInN1YnN0ciIsIl9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMiLCJkYXRhIiwiZ2V0RmlsdGVyIiwic2VhcmNoIiwiZmlsdGVycyIsImxlbmd0aCIsImdldE1vZGVsIiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJ0aGVuIiwib1Jlc291cmNlQnVuZGxlIiwic2V0Tm9EYXRhVGV4dCIsIkNvbW1vblV0aWxzIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjYXRjaCIsImVycm9yIiwiTG9nIiwiX2hhbmRsZVByb3BlcnR5Iiwib01EQ0NoYXJ0IiwibUVudGl0eVNldEFubm90YXRpb25zIiwibUtub3duQWdncmVnYXRhYmxlUHJvcHMiLCJtQ3VzdG9tQWdncmVnYXRlcyIsImFQcm9wZXJ0aWVzIiwic0NyaXRpY2FsaXR5Iiwib0FwcGx5U3VwcG9ydGVkIiwiQ29tbW9uSGVscGVyIiwicGFyc2VDdXN0b21EYXRhIiwib1NvcnRSZXN0cmljdGlvbnMiLCJvU29ydFJlc3RyaWN0aW9uc0luZm8iLCJPRGF0YU1ldGFNb2RlbFV0aWwiLCJnZXRTb3J0UmVzdHJpY3Rpb25zSW5mbyIsIm9GaWx0ZXJSZXN0cmljdGlvbnMiLCJvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyIsImdldEZpbHRlclJlc3RyaWN0aW9uc0luZm8iLCJvT2JqIiwiZ2V0T2JqZWN0IiwiZ2V0UGF0aCIsInNLZXkiLCJvTWV0YU1vZGVsIiwiJGtpbmQiLCIkaXNDb2xsZWN0aW9uIiwib1Byb3BlcnR5QW5ub3RhdGlvbnMiLCJzUGF0aCIsImdldE1ldGFDb250ZXh0IiwiYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiYkdyb3VwYWJsZSIsImJBZ2dyZWdhdGFibGUiLCJpIiwiJFByb3BlcnR5UGF0aCIsImoiLCJQcm9wZXJ0eSIsImFBZ2dyZWdhdGVQcm9wZXJ0aWVzIiwiX2NyZWF0ZVByb3BlcnR5SW5mb3NGb3JBZ2dyZWdhdGFibGUiLCJmb3JFYWNoIiwib0FnZ3JlZ2F0ZVByb3BlcnR5IiwicHVzaCIsInNOYW1lIiwic1RleHRQcm9wZXJ0eSIsIiRQYXRoIiwiYklzTmF2aWdhdGlvblRleHQiLCJpbmRleE9mIiwibmFtZSIsInByb3BlcnR5UGF0aCIsImxhYmVsIiwic29ydGFibGUiLCJfZ2V0U29ydGFibGUiLCJmaWx0ZXJhYmxlIiwiZ3JvdXBhYmxlIiwiYWdncmVnYXRhYmxlIiwibWF4Q29uZGl0aW9ucyIsImlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24iLCJwcm9wZXJ0eUluZm8iLCJzb3J0S2V5Iiwicm9sZSIsImNhdGVnb3J5IiwiY3JpdGljYWxpdHkiLCJ0ZXh0UHJvcGVydHkiLCJ0ZXh0Rm9ybWF0dGVyIiwiX2Zvcm1hdFRleHQiLCJvVmFsdWUxIiwib1ZhbHVlMiIsIm9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uIiwiJEVudW1NZW1iZXIiLCJ1cGRhdGVCaW5kaW5nSW5mbyIsIm9GaWx0ZXIiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJieUlkIiwibUNvbmRpdGlvbnMiLCJnZXRDb25kaXRpb25zIiwic29ydGVyIiwiZ2V0U29ydGVycyIsIm9Jbm5lckNoYXJ0IiwiZ2V0Q29udHJvbERlbGVnYXRlIiwiZ2V0SW5uZXJDaGFydCIsIm9GaWx0ZXJJbmZvIiwiZ2V0Q2hhcnRTZWxlY3Rpb25zRXhpc3QiLCJnZXRGaWx0ZXJCYXJGaWx0ZXJJbmZvIiwic1BhcmFtZXRlclBhdGgiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRQYXJhbWV0ZXJzSW5mbyIsIm9JbmZvIiwiRmlsdGVyVXRpbHMiLCJnZXRGaWx0ZXJJbmZvIiwiZW5hYmxlU2VhcmNoIiwicGFyYW1ldGVycyIsIiRzZWFyY2giLCJub3JtYWxpemVTZWFyY2hUZXJtIiwiX2NoZWNrQW5kQWRkRHJhZnRGaWx0ZXIiLCJmZXRjaFByb3BlcnRpZXMiLCJvTW9kZWwiLCJfZ2V0TW9kZWwiLCJwQ3JlYXRlUHJvcGVydHlJbmZvcyIsIlByb21pc2UiLCJyZXNvbHZlIiwiYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlIiwicmVzb2x2ZXIiLCJvbk1vZGVsQ29udGV4dENoYW5nZSIsIm9SZXRyaWV2ZWRNb2RlbCIsIl9jcmVhdGVQcm9wZXJ0eUluZm9zIiwib0V2ZW50Iiwib0RhdGEiLCJnZXRTb3VyY2UiLCJkZXRhY2hNb2RlbENvbnRleHRDaGFuZ2UiLCJzRW50aXR5U2V0UGF0aCIsImdldE1ldGFNb2RlbCIsImFsbCIsInJlcXVlc3RPYmplY3QiLCJhUmVzdWx0cyIsIm9FbnRpdHlUeXBlIiwic0Fubm8iLCJhUHJvcGVydHlQcm9taXNlIiwic0Fubm9LZXkiLCJyZXBsYWNlIiwiYUFubm8iLCJzcGxpdCIsImFEaW1lbnNpb25zIiwiYU1lYXN1cmVzIiwia2V5cyIsImFDaGFydEl0ZW1zIiwiZ2V0SXRlbXMiLCJrZXkiLCJpc0EiLCJnZXRLZXkiLCJmaWx0ZXIiLCJ2YWwiLCJtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzIiwic0FnZ3JlZ2F0YWJsZSIsInNQcm9wS2V5IiwiYWdncmVnYXRpb25NZXRob2QiLCJNZXRhTW9kZWxVdGlsIiwiZmV0Y2hDcml0aWNhbGl0eSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiYmluZCIsImF4aXMxIiwiZGF0YXBvaW50Iiwic0N1c3RvbSIsIm9JdGVtIiwibWVyZ2UiLCJyZWJpbmQiLCJzU2VhcmNoIiwib0NoYXJ0QmluZGluZyIsImdldEJpbmRpbmciLCJzdXNwZW5kIiwic2V0QWdncmVnYXRpb24iLCJvSW5uZXJDaGFydERlbGVnYXRlIiwib25CZWZvcmVSZW5kZXJpbmciLCJyZXN1bWUiLCJyZW1vdmVFdmVudERlbGVnYXRlIiwiYWRkRXZlbnREZWxlZ2F0ZSIsImZpcmVFdmVudCIsIl9zZXRDaGFydCIsIm9DaGFydEFQSSIsImdldFBhcmVudCIsInNldFZpelByb3BlcnRpZXMiLCJkZXRhY2hTZWxlY3REYXRhIiwiaGFuZGxlU2VsZWN0aW9uQ2hhbmdlIiwiZGV0YWNoRGVzZWxlY3REYXRhIiwiZGV0YWNoRHJpbGxlZFVwIiwiYXR0YWNoU2VsZWN0RGF0YSIsImF0dGFjaERlc2VsZWN0RGF0YSIsImF0dGFjaERyaWxsZWRVcCIsInNldFNlbGVjdGlvbk1vZGUiLCJnZXRQYXlsb2FkIiwic2VsZWN0aW9uTW9kZSIsInRvVXBwZXJDYXNlIiwiX2dldEJpbmRpbmdJbmZvIiwiX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlIiwib01ldGFkYXRhSW5mbyIsImdldERlbGVnYXRlIiwicGF5bG9hZCIsInNUYXJnZXRDb2xsZWN0aW9uUGF0aCIsImNvbnRleHRQYXRoIiwib1BhcmFtcyIsImVudGl0eVNldCIsInVzZUJhdGNoUmVxdWVzdHMiLCJwcm92aWRlR3JhbmRUb3RhbHMiLCJwcm92aWRlVG90YWxSZXN1bHRTaXplIiwibm9QYWdpbmciLCJldmVudHMiLCJkYXRhUmVxdWVzdGVkIiwib25JbnRlcm5hbERhdGFSZXF1ZXN0ZWQiLCJyZW1vdmVJdGVtRnJvbUlubmVyQ2hhcnQiLCJvTURDQ2hhcnRJdGVtIiwiY2FsbCIsImdldFR5cGUiLCJfZ2V0Q2hhcnQiLCJmaXJlRGVzZWxlY3REYXRhIiwiYklzVHJhbnNBZ2dyZWdhdGUiLCJGaWx0ZXIiLCJGaWx0ZXJPcGVyYXRvciIsIkVRIiwiZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCIsImtpbmQiLCJnZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZCIsIm1kY0NoYXJ0IiwiZ2V0UHJvcGVydHlIZWxwZXIiLCJnZXRQcm9wZXJ0eSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ2hhcnREZWxlZ2F0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgTWV0YU1vZGVsVXRpbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9PRGF0YU1ldGFNb2RlbFV0aWxcIjtcbmltcG9ydCB0eXBlIENoYXJ0IGZyb20gXCJzYXAvdWkvbWRjL0NoYXJ0XCI7XG5pbXBvcnQgTURDTGliIGZyb20gXCJzYXAvdWkvbWRjL2xpYnJhcnlcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbFV0aWwgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxVdGlsXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL29kYXRhL3Y0L3V0aWwvRGVsZWdhdGVVdGlsXCI7XG5pbXBvcnQgQmFzZUNoYXJ0RGVsZWdhdGUgZnJvbSBcInNhcC91aS9tZGMvb2RhdGEvdjQvdml6Q2hhcnQvQ2hhcnREZWxlZ2F0ZVwiO1xuaW1wb3J0IEZpbHRlciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlclwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcblxuY29uc3QgQ2hhcnRJdGVtUm9sZVR5cGUgPSAoTURDTGliIGFzIGFueSkuQ2hhcnRJdGVtUm9sZVR5cGU7XG4vLyAvKipcbi8vICAqIEhlbHBlciBjbGFzcyBmb3Igc2FwLnVpLm1kYy5DaGFydC5cbi8vICAqIDxoMz48Yj5Ob3RlOjwvYj48L2gzPlxuLy8gICogVGhlIGNsYXNzIGlzIGV4cGVyaW1lbnRhbCBhbmQgdGhlIEFQSS9iZWhhdmlvdXIgaXMgbm90IGZpbmFsaXNlZFxuLy8gICogYW5kIGhlbmNlIHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBwcm9kdWN0aXZlIHVzYWdlLlxuLy8gICogRXNwZWNpYWxseSB0aGlzIGNsYXNzIGlzIG5vdCBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciB0aGUgRkUgc2NlbmFyaW8sXG4vLyAgKiBoZXJlIHdlIHNoYWxsIHVzZSBzYXAuZmUubWFjcm9zLkNoYXJ0RGVsZWdhdGUgdGhhdCBpcyBlc3BlY2lhbGx5IHRhaWxvcmVkIGZvciBWNFxuLy8gICogbWV0YSBtb2RlbFxuLy8gICpcbi8vICAqIEBhdXRob3IgU0FQIFNFXG4vLyAgKiBAcHJpdmF0ZVxuLy8gICogQGV4cGVyaW1lbnRhbFxuLy8gICogQHNpbmNlIDEuNjJcbi8vICAqIEBhbGlhcyBzYXAuZmUubWFjcm9zLkNoYXJ0RGVsZWdhdGVcbi8vICAqL1xuY29uc3QgQ2hhcnREZWxlZ2F0ZSA9IE9iamVjdC5hc3NpZ24oe30sIEJhc2VDaGFydERlbGVnYXRlKTtcblxuQ2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnROb0RhdGFUZXh0ID0gZnVuY3Rpb24gKG9DaGFydDogYW55LCBvQmluZGluZ0luZm86IGFueSkge1xuXHRsZXQgc05vRGF0YUtleSA9IFwiXCI7XG5cdGNvbnN0IG9DaGFydEZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8ob0NoYXJ0KSxcblx0XHRzdWZmaXhSZXNvdXJjZUtleSA9IG9CaW5kaW5nSW5mby5wYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gb0JpbmRpbmdJbmZvLnBhdGguc3Vic3RyKDEpIDogb0JpbmRpbmdJbmZvLnBhdGg7XG5cdGNvbnN0IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKG9DaGFydC5kYXRhKFwibXVsdGlWaWV3c1wiKSkge1xuXHRcdFx0cmV0dXJuIFwiTV9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX01VTFRJX1ZJRVdcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiVF9UQUJMRV9BTkRfQ0hBUlRfTk9fREFUQV9URVhUX1dJVEhfRklMVEVSXCI7XG5cdFx0fVxuXHR9O1xuXHRpZiAob0NoYXJ0LmdldEZpbHRlcigpKSB7XG5cdFx0aWYgKG9DaGFydEZpbHRlckluZm8uc2VhcmNoIHx8IChvQ2hhcnRGaWx0ZXJJbmZvLmZpbHRlcnMgJiYgb0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzLmxlbmd0aCkpIHtcblx0XHRcdHNOb0RhdGFLZXkgPSBfZ2V0Tm9EYXRhVGV4dFdpdGhGaWx0ZXJzKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNOb0RhdGFLZXkgPSBcIlRfVEFCTEVfQU5EX0NIQVJUX05PX0RBVEFfVEVYVFwiO1xuXHRcdH1cblx0fSBlbHNlIGlmIChvQ2hhcnRGaWx0ZXJJbmZvLnNlYXJjaCB8fCAob0NoYXJ0RmlsdGVySW5mby5maWx0ZXJzICYmIG9DaGFydEZpbHRlckluZm8uZmlsdGVycy5sZW5ndGgpKSB7XG5cdFx0c05vRGF0YUtleSA9IF9nZXROb0RhdGFUZXh0V2l0aEZpbHRlcnMoKTtcblx0fSBlbHNlIHtcblx0XHRzTm9EYXRhS2V5ID0gXCJNX1RBQkxFX0FORF9DSEFSVF9OT19GSUxURVJTX05PX0RBVEFfVEVYVFwiO1xuXHR9XG5cdHJldHVybiAob0NoYXJ0LmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIikuZ2V0UmVzb3VyY2VCdW5kbGUoKSBhcyBQcm9taXNlPFJlc291cmNlQnVuZGxlPilcblx0XHQudGhlbihmdW5jdGlvbiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRvQ2hhcnQuc2V0Tm9EYXRhVGV4dChDb21tb25VdGlscy5nZXRUcmFuc2xhdGVkVGV4dChzTm9EYXRhS2V5LCBvUmVzb3VyY2VCdW5kbGUsIG51bGwsIHN1ZmZpeFJlc291cmNlS2V5KSk7XG5cdFx0fSlcblx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3IpO1xuXHRcdH0pO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdG9NRENDaGFydDogQ2hhcnQsXG5cdG1FbnRpdHlTZXRBbm5vdGF0aW9uczogYW55LFxuXHRtS25vd25BZ2dyZWdhdGFibGVQcm9wczogYW55LFxuXHRtQ3VzdG9tQWdncmVnYXRlczogYW55LFxuXHRhUHJvcGVydGllczogYW55W10sXG5cdHNDcml0aWNhbGl0eTogc3RyaW5nXG4pIHtcblx0Y29uc3Qgb0FwcGx5U3VwcG9ydGVkID0gQ29tbW9uSGVscGVyLnBhcnNlQ3VzdG9tRGF0YShvTURDQ2hhcnQuZGF0YShcImFwcGx5U3VwcG9ydGVkXCIpKTtcblx0Y29uc3Qgb1NvcnRSZXN0cmljdGlvbnMgPSBtRW50aXR5U2V0QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkNhcGFiaWxpdGllcy5WMS5Tb3J0UmVzdHJpY3Rpb25zXCJdIHx8IHt9O1xuXHRjb25zdCBvU29ydFJlc3RyaWN0aW9uc0luZm8gPSBPRGF0YU1ldGFNb2RlbFV0aWwuZ2V0U29ydFJlc3RyaWN0aW9uc0luZm8ob1NvcnRSZXN0cmljdGlvbnMpO1xuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zID0gbUVudGl0eVNldEFubm90YXRpb25zW1wiQE9yZy5PRGF0YS5DYXBhYmlsaXRpZXMuVjEuRmlsdGVyUmVzdHJpY3Rpb25zXCJdO1xuXHRjb25zdCBvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyA9IE9EYXRhTWV0YU1vZGVsVXRpbC5nZXRGaWx0ZXJSZXN0cmljdGlvbnNJbmZvKG9GaWx0ZXJSZXN0cmljdGlvbnMpO1xuXHRjb25zdCBvT2JqID0gdGhpcy5nZXRNb2RlbCgpLmdldE9iamVjdCh0aGlzLmdldFBhdGgoKSk7XG5cdGNvbnN0IHNLZXkgPSB0aGlzLmdldE1vZGVsKCkuZ2V0T2JqZWN0KGAke3RoaXMuZ2V0UGF0aCgpfUBzYXB1aS5uYW1lYCk7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG5cdGlmIChvT2JqICYmIG9PYmouJGtpbmQgPT09IFwiUHJvcGVydHlcIikge1xuXHRcdC8vIGlnbm9yZSAoYXMgZm9yIG5vdykgYWxsIGNvbXBsZXggcHJvcGVydGllc1xuXHRcdC8vIG5vdCBjbGVhciBpZiB0aGV5IG1pZ2h0IGJlIG5lc3RpbmcgKGNvbXBsZXggaW4gY29tcGxleClcblx0XHQvLyBub3QgY2xlYXIgaG93IHRoZXkgYXJlIHJlcHJlc2VudGVkIGluIG5vbi1maWx0ZXJhYmxlIGFubm90YXRpb25cblx0XHQvLyBldGMuXG5cdFx0aWYgKG9PYmouJGlzQ29sbGVjdGlvbikge1xuXHRcdFx0Ly9Mb2cud2FybmluZyhcIkNvbXBsZXggcHJvcGVydHkgd2l0aCB0eXBlIFwiICsgb09iai4kVHlwZSArIFwiIGhhcyBiZWVuIGlnbm9yZWRcIik7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgb1Byb3BlcnR5QW5ub3RhdGlvbnMgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHt0aGlzLmdldFBhdGgoKX1AYCk7XG5cdFx0Y29uc3Qgc1BhdGggPSBvTWV0YU1vZGVsLmdldE9iamVjdChcIkBzYXB1aS5uYW1lXCIsIG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQodGhpcy5nZXRQYXRoKCkpKTtcblxuXHRcdGNvbnN0IGFHcm91cGFibGVQcm9wZXJ0aWVzID0gb0FwcGx5U3VwcG9ydGVkICYmIG9BcHBseVN1cHBvcnRlZC5Hcm91cGFibGVQcm9wZXJ0aWVzO1xuXHRcdGNvbnN0IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gb0FwcGx5U3VwcG9ydGVkICYmIG9BcHBseVN1cHBvcnRlZC5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzO1xuXHRcdGxldCBiR3JvdXBhYmxlID0gZmFsc2UsXG5cdFx0XHRiQWdncmVnYXRhYmxlID0gZmFsc2U7XG5cdFx0aWYgKGFHcm91cGFibGVQcm9wZXJ0aWVzICYmIGFHcm91cGFibGVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoYUdyb3VwYWJsZVByb3BlcnRpZXNbaV0uJFByb3BlcnR5UGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0XHRiR3JvdXBhYmxlID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgJiYgYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGlmIChhQWdncmVnYXRhYmxlUHJvcGVydGllc1tqXS5Qcm9wZXJ0eS4kUHJvcGVydHlQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRcdGJBZ2dyZWdhdGFibGUgPSB0cnVlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICghYUdyb3VwYWJsZVByb3BlcnRpZXMgfHwgKGFHcm91cGFibGVQcm9wZXJ0aWVzICYmICFhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGgpKSB7XG5cdFx0XHRiR3JvdXBhYmxlID0gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkdyb3VwYWJsZVwiXTtcblx0XHR9XG5cdFx0aWYgKCFhQWdncmVnYXRhYmxlUHJvcGVydGllcyB8fCAoYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgJiYgIWFBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzLmxlbmd0aCkpIHtcblx0XHRcdGJBZ2dyZWdhdGFibGUgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQWdncmVnYXRhYmxlXCJdO1xuXHRcdH1cblxuXHRcdC8vUmlnaHQgbm93OiBza2lwIHRoZW0sIHNpbmNlIHdlIGNhbid0IGNyZWF0ZSBhIGNoYXJ0IGZyb20gaXRcblx0XHRpZiAoIWJHcm91cGFibGUgJiYgIWJBZ2dyZWdhdGFibGUpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoYkFnZ3JlZ2F0YWJsZSkge1xuXHRcdFx0Y29uc3QgYUFnZ3JlZ2F0ZVByb3BlcnRpZXMgPSBDaGFydERlbGVnYXRlLl9jcmVhdGVQcm9wZXJ0eUluZm9zRm9yQWdncmVnYXRhYmxlKFxuXHRcdFx0XHRvTURDQ2hhcnQsXG5cdFx0XHRcdHNLZXksXG5cdFx0XHRcdG9Qcm9wZXJ0eUFubm90YXRpb25zLFxuXHRcdFx0XHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbyxcblx0XHRcdFx0b1NvcnRSZXN0cmljdGlvbnNJbmZvLFxuXHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wcyxcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNcblx0XHRcdCk7XG5cdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChvQWdncmVnYXRlUHJvcGVydHk6IGFueSkge1xuXHRcdFx0XHRhUHJvcGVydGllcy5wdXNoKG9BZ2dyZWdhdGVQcm9wZXJ0eSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRpZiAoYkdyb3VwYWJsZSkge1xuXHRcdFx0Y29uc3Qgc05hbWUgPSBzS2V5IHx8IFwiXCIsXG5cdFx0XHRcdHNUZXh0UHJvcGVydHkgPSBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dFwiXVxuXHRcdFx0XHRcdD8gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0uJFBhdGhcblx0XHRcdFx0XHQ6IG51bGw7XG5cdFx0XHRsZXQgYklzTmF2aWdhdGlvblRleHQgPSBmYWxzZTtcblx0XHRcdGlmIChzTmFtZSAmJiBzTmFtZS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gUHJvcGVydHk6ICR7c05hbWV9IGZyb20gYW4gYXNzb2NpYXRpb24gY2Fubm90IGJlIHVzZWRgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHNUZXh0UHJvcGVydHkgJiYgc1RleHRQcm9wZXJ0eS5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRcdExvZy5lcnJvcihgJGV4cGFuZCBpcyBub3QgeWV0IHN1cHBvcnRlZC4gVGV4dCBQcm9wZXJ0eTogJHtzVGV4dFByb3BlcnR5fSBmcm9tIGFuIGFzc29jaWF0aW9uIGNhbm5vdCBiZSB1c2VkYCk7XG5cdFx0XHRcdGJJc05hdmlnYXRpb25UZXh0ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGFQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRuYW1lOiBcIl9mZV9ncm91cGFibGVfXCIgKyBzS2V5LFxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IHNLZXksXG5cdFx0XHRcdGxhYmVsOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIl0gfHwgc0tleSxcblx0XHRcdFx0c29ydGFibGU6IENoYXJ0RGVsZWdhdGUuX2dldFNvcnRhYmxlKG9NRENDaGFydCwgb1NvcnRSZXN0cmljdGlvbnNJbmZvW3NLZXldLCBmYWxzZSksXG5cdFx0XHRcdGZpbHRlcmFibGU6IG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW3NLZXldID8gb0ZpbHRlclJlc3RyaWN0aW9uc0luZm9bc0tleV0uZmlsdGVyYWJsZSA6IHRydWUsXG5cdFx0XHRcdGdyb3VwYWJsZTogdHJ1ZSxcblx0XHRcdFx0YWdncmVnYXRhYmxlOiBmYWxzZSxcblx0XHRcdFx0bWF4Q29uZGl0aW9uczogT0RhdGFNZXRhTW9kZWxVdGlsLmlzTXVsdGlWYWx1ZUZpbHRlckV4cHJlc3Npb24ob0ZpbHRlclJlc3RyaWN0aW9uc0luZm8ucHJvcGVydHlJbmZvW3NLZXldKSA/IC0xIDogMSxcblx0XHRcdFx0c29ydEtleTogc0tleSxcblx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuY2F0ZWdvcnksIC8vc3RhbmRhcmQsIG5vcm1hbGx5IHRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGZyb20gVUkuQ2hhcnQgYW5ub3RhdGlvblxuXHRcdFx0XHRjcml0aWNhbGl0eTogc0NyaXRpY2FsaXR5LCAvL1RvIGJlIGltcGxlbWVudGVkIGJ5IEZFXG5cdFx0XHRcdHRleHRQcm9wZXJ0eTpcblx0XHRcdFx0XHQhYklzTmF2aWdhdGlvblRleHQgJiYgb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl1cblx0XHRcdFx0XHRcdD8gb1Byb3BlcnR5QW5ub3RhdGlvbnNbXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlRleHRcIl0uJFBhdGhcblx0XHRcdFx0XHRcdDogbnVsbCwgLy9UbyBiZSBpbXBsZW1lbnRlZCBieSBGRVxuXHRcdFx0XHR0ZXh0Rm9ybWF0dGVyOiBvUHJvcGVydHlBbm5vdGF0aW9uc1tcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuVGV4dEBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRcIl1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufTtcblxuQ2hhcnREZWxlZ2F0ZS5fZm9ybWF0VGV4dCA9IGZ1bmN0aW9uIChvVmFsdWUxOiBhbnksIG9WYWx1ZTI6IGFueSkge1xuXHRjb25zdCBvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbiA9IHRoaXMudGV4dEZvcm1hdHRlcjtcblx0aWYgKG9UZXh0QXJyYW5nZW1lbnRBbm5vdGF0aW9uLiRFbnVtTWVtYmVyID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLlRleHRBcnJhbmdlbWVudFR5cGUvVGV4dEZpcnN0XCIpIHtcblx0XHRyZXR1cm4gYCR7b1ZhbHVlMn0gKCR7b1ZhbHVlMX0pYDtcblx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRMYXN0XCIpIHtcblx0XHRyZXR1cm4gYCR7b1ZhbHVlMX0gKCR7b1ZhbHVlMn0pYDtcblx0fSBlbHNlIGlmIChvVGV4dEFycmFuZ2VtZW50QW5ub3RhdGlvbi4kRW51bU1lbWJlciA9PT0gXCJjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5UZXh0QXJyYW5nZW1lbnRUeXBlL1RleHRPbmx5XCIpIHtcblx0XHRyZXR1cm4gb1ZhbHVlMjtcblx0fVxuXHRyZXR1cm4gb1ZhbHVlMiA/IG9WYWx1ZTIgOiBvVmFsdWUxO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS51cGRhdGVCaW5kaW5nSW5mbyA9IGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSwgb0JpbmRpbmdJbmZvOiBhbnkpIHtcblx0Q2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnROb0RhdGFUZXh0KG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcblxuXHRjb25zdCBvRmlsdGVyID0gc2FwLnVpLmdldENvcmUoKS5ieUlkKG9DaGFydC5nZXRGaWx0ZXIoKSkgYXMgYW55O1xuXHRpZiAob0ZpbHRlcikge1xuXHRcdGNvbnN0IG1Db25kaXRpb25zID0gb0ZpbHRlci5nZXRDb25kaXRpb25zKCk7XG5cblx0XHRpZiAobUNvbmRpdGlvbnMpIHtcblx0XHRcdGlmICghb0JpbmRpbmdJbmZvKSB7XG5cdFx0XHRcdG9CaW5kaW5nSW5mbyA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0b0JpbmRpbmdJbmZvLnNvcnRlciA9IHRoaXMuZ2V0U29ydGVycyhvQ2hhcnQpO1xuXHRcdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkuZ2V0SW5uZXJDaGFydChvQ2hhcnQpO1xuXHRcdFx0bGV0IG9GaWx0ZXJJbmZvO1xuXHRcdFx0aWYgKG9Jbm5lckNoYXJ0KSB7XG5cdFx0XHRcdC8vIGlmIHRoZSBhY3Rpb24gaXMgYSBkcmlsbCBkb3duLCBjaGFydCBzZWxlY3Rpb25zIG11c3QgYmUgY29uc2lkZXJlZFxuXHRcdFx0XHRpZiAoQ2hhcnRVdGlscy5nZXRDaGFydFNlbGVjdGlvbnNFeGlzdChvQ2hhcnQpKSB7XG5cdFx0XHRcdFx0b0ZpbHRlckluZm8gPSBDaGFydFV0aWxzLmdldEFsbEZpbHRlckluZm8ob0NoYXJ0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b0ZpbHRlckluZm8gPSBvRmlsdGVySW5mbyA/IG9GaWx0ZXJJbmZvIDogQ2hhcnRVdGlscy5nZXRGaWx0ZXJCYXJGaWx0ZXJJbmZvKG9DaGFydCk7XG5cdFx0XHRpZiAob0ZpbHRlckluZm8pIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLmZpbHRlcnMgPSBvRmlsdGVySW5mby5maWx0ZXJzO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzUGFyYW1ldGVyUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRQYXJhbWV0ZXJzSW5mbyhvRmlsdGVyLCBtQ29uZGl0aW9ucyk7XG5cdFx0XHRpZiAoc1BhcmFtZXRlclBhdGgpIHtcblx0XHRcdFx0b0JpbmRpbmdJbmZvLnBhdGggPSBzUGFyYW1ldGVyUGF0aDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZWFyY2hcblx0XHRjb25zdCBvSW5mbyA9IEZpbHRlclV0aWxzLmdldEZpbHRlckluZm8ob0ZpbHRlciwge30pO1xuXHRcdGNvbnN0IG9BcHBseVN1cHBvcnRlZCA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob0NoYXJ0LmRhdGEoXCJhcHBseVN1cHBvcnRlZFwiKSk7XG5cdFx0aWYgKG9BcHBseVN1cHBvcnRlZCAmJiBvQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoICYmIG9JbmZvLnNlYXJjaCkge1xuXHRcdFx0b0JpbmRpbmdJbmZvLnBhcmFtZXRlcnMuJHNlYXJjaCA9IENvbW1vblV0aWxzLm5vcm1hbGl6ZVNlYXJjaFRlcm0ob0luZm8uc2VhcmNoKTtcblx0XHR9IGVsc2UgaWYgKG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2gpIHtcblx0XHRcdGRlbGV0ZSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdFx0fVxuXHRcdG9CaW5kaW5nSW5mby5zb3J0ZXIgPSB0aGlzLmdldFNvcnRlcnMob0NoYXJ0KTtcblx0fVxuXHRDaGFydERlbGVnYXRlLl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyKG9DaGFydCwgb0JpbmRpbmdJbmZvKTtcbn07XG5cbkNoYXJ0RGVsZWdhdGUuZmV0Y2hQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKG9NRENDaGFydDogQ2hhcnQpIHtcblx0Y29uc3Qgb01vZGVsID0gdGhpcy5fZ2V0TW9kZWwob01EQ0NoYXJ0KTtcblx0bGV0IHBDcmVhdGVQcm9wZXJ0eUluZm9zO1xuXG5cdGlmICghb01vZGVsKSB7XG5cdFx0cENyZWF0ZVByb3BlcnR5SW5mb3MgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KSA9PiB7XG5cdFx0XHRvTURDQ2hhcnQuYXR0YWNoTW9kZWxDb250ZXh0Q2hhbmdlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cmVzb2x2ZXI6IHJlc29sdmVcblx0XHRcdFx0fSxcblx0XHRcdFx0b25Nb2RlbENvbnRleHRDaGFuZ2UgYXMgYW55LFxuXHRcdFx0XHR0aGlzXG5cdFx0XHQpO1xuXHRcdH0pLnRoZW4oKG9SZXRyaWV2ZWRNb2RlbDogYW55KSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlUHJvcGVydHlJbmZvcyhvTURDQ2hhcnQsIG9SZXRyaWV2ZWRNb2RlbCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cENyZWF0ZVByb3BlcnR5SW5mb3MgPSB0aGlzLl9jcmVhdGVQcm9wZXJ0eUluZm9zKG9NRENDaGFydCwgb01vZGVsKTtcblx0fVxuXG5cdHJldHVybiBwQ3JlYXRlUHJvcGVydHlJbmZvcy50aGVuKGZ1bmN0aW9uIChhUHJvcGVydGllczogYW55KSB7XG5cdFx0aWYgKG9NRENDaGFydC5kYXRhKSB7XG5cdFx0XHRvTURDQ2hhcnQuZGF0YShcIiRtZGNDaGFydFByb3BlcnR5SW5mb1wiLCBhUHJvcGVydGllcyk7XG5cdFx0fVxuXHRcdHJldHVybiBhUHJvcGVydGllcztcblx0fSk7XG59O1xuZnVuY3Rpb24gb25Nb2RlbENvbnRleHRDaGFuZ2UodGhpczogdHlwZW9mIENoYXJ0RGVsZWdhdGUsIG9FdmVudDogYW55LCBvRGF0YTogYW55KSB7XG5cdGNvbnN0IG9NRENDaGFydCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0Y29uc3Qgb01vZGVsID0gdGhpcy5fZ2V0TW9kZWwob01EQ0NoYXJ0KTtcblxuXHRpZiAob01vZGVsKSB7XG5cdFx0b01EQ0NoYXJ0LmRldGFjaE1vZGVsQ29udGV4dENoYW5nZShvbk1vZGVsQ29udGV4dENoYW5nZSk7XG5cdFx0b0RhdGEucmVzb2x2ZXIob01vZGVsKTtcblx0fVxufVxuQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvcyA9IGFzeW5jIGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSwgb01vZGVsOiBhbnkpIHtcblx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBgLyR7b01EQ0NoYXJ0LmRhdGEoXCJlbnRpdHlTZXRcIil9YDtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKTtcblxuXHRjb25zdCBhUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFtvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9L2ApLCBvTWV0YU1vZGVsLnJlcXVlc3RPYmplY3QoYCR7c0VudGl0eVNldFBhdGh9QGApXSk7XG5cdGNvbnN0IGFQcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xuXHRjb25zdCBvRW50aXR5VHlwZSA9IGFSZXN1bHRzWzBdLFxuXHRcdG1FbnRpdHlTZXRBbm5vdGF0aW9ucyA9IGFSZXN1bHRzWzFdO1xuXHRjb25zdCBtQ3VzdG9tQWdncmVnYXRlcyA9IENvbW1vbkhlbHBlci5wYXJzZUN1c3RvbURhdGEob01EQ0NoYXJ0LmRhdGEoXCJjdXN0b21BZ2dcIikpO1xuXHRsZXQgc0Fubm87XG5cdGNvbnN0IGFQcm9wZXJ0eVByb21pc2UgPSBbXTtcblx0Zm9yIChjb25zdCBzQW5ub0tleSBpbiBtRW50aXR5U2V0QW5ub3RhdGlvbnMpIHtcblx0XHRpZiAoc0Fubm9LZXkuc3RhcnRzV2l0aChcIkBPcmcuT0RhdGEuQWdncmVnYXRpb24uVjEuQ3VzdG9tQWdncmVnYXRlXCIpKSB7XG5cdFx0XHRzQW5ubyA9IHNBbm5vS2V5LnJlcGxhY2UoXCJAT3JnLk9EYXRhLkFnZ3JlZ2F0aW9uLlYxLkN1c3RvbUFnZ3JlZ2F0ZSNcIiwgXCJcIik7XG5cdFx0XHRjb25zdCBhQW5ubyA9IHNBbm5vLnNwbGl0KFwiQFwiKTtcblxuXHRcdFx0aWYgKGFBbm5vLmxlbmd0aCA9PSAyICYmIGFBbm5vWzFdID09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxhYmVsXCIpIHtcblx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXNbYUFubm9bMF1dID0gbUVudGl0eVNldEFubm90YXRpb25zW3NBbm5vS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Y29uc3QgYURpbWVuc2lvbnM6IGFueVtdID0gW10sXG5cdFx0YU1lYXN1cmVzID0gW107XG5cdGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykubGVuZ3RoID49IDEpIHtcblx0XHRjb25zdCBhQ2hhcnRJdGVtcyA9IG9NRENDaGFydC5nZXRJdGVtcygpO1xuXHRcdGZvciAoY29uc3Qga2V5IGluIGFDaGFydEl0ZW1zKSB7XG5cdFx0XHRpZiAoYUNoYXJ0SXRlbXNba2V5XS5pc0EoXCJzYXAudWkubWRjLmNoYXJ0LkRpbWVuc2lvbkl0ZW1cIikpIHtcblx0XHRcdFx0YURpbWVuc2lvbnMucHVzaChhQ2hhcnRJdGVtc1trZXldLmdldEtleSgpKTtcblx0XHRcdH0gZWxzZSBpZiAoYUNoYXJ0SXRlbXNba2V5XS5pc0EoXCJzYXAudWkubWRjLmNoYXJ0Lk1lYXN1cmVJdGVtXCIpKSB7XG5cdFx0XHRcdGFNZWFzdXJlcy5wdXNoKGFDaGFydEl0ZW1zW2tleV0uZ2V0S2V5KCkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRhTWVhc3VyZXMuZmlsdGVyKGZ1bmN0aW9uICh2YWw6IGFueSkge1xuXHRcdFx0XHRyZXR1cm4gYURpbWVuc2lvbnMuaW5kZXhPZih2YWwpICE9IC0xO1xuXHRcdFx0fSkubGVuZ3RoID49IDFcblx0XHQpIHtcblx0XHRcdExvZy5lcnJvcihcIkRpbWVuc2lvbiBhbmQgTWVhc3VyZSBoYXMgdGhlIHNhbWVQcm9wZXJ0eSBDb25maWd1cmVkXCIpO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IG1UeXBlQWdncmVnYXRhYmxlUHJvcHMgPSBDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKG9NRENDaGFydC5kYXRhKFwidHJhbnNBZ2dcIikpO1xuXHRjb25zdCBtS25vd25BZ2dyZWdhdGFibGVQcm9wczogYW55ID0ge307XG5cdGZvciAoY29uc3Qgc0FnZ3JlZ2F0YWJsZSBpbiBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzKSB7XG5cdFx0Y29uc3Qgc1Byb3BLZXkgPSBtVHlwZUFnZ3JlZ2F0YWJsZVByb3BzW3NBZ2dyZWdhdGFibGVdLnByb3BlcnR5UGF0aDtcblx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gPSBtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzUHJvcEtleV0gfHwge307XG5cdFx0bUtub3duQWdncmVnYXRhYmxlUHJvcHNbc1Byb3BLZXldW21UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0uYWdncmVnYXRpb25NZXRob2RdID0ge1xuXHRcdFx0bmFtZTogbVR5cGVBZ2dyZWdhdGFibGVQcm9wc1tzQWdncmVnYXRhYmxlXS5uYW1lLFxuXHRcdFx0bGFiZWw6IG1UeXBlQWdncmVnYXRhYmxlUHJvcHNbc0FnZ3JlZ2F0YWJsZV0ubGFiZWxcblx0XHR9O1xuXHR9XG5cdGZvciAoY29uc3Qgc0tleSBpbiBvRW50aXR5VHlwZSkge1xuXHRcdGlmIChzS2V5LmluZGV4T2YoXCIkXCIpICE9PSAwKSB7XG5cdFx0XHRhUHJvcGVydHlQcm9taXNlLnB1c2goXG5cdFx0XHRcdE1ldGFNb2RlbFV0aWwuZmV0Y2hDcml0aWNhbGl0eShvTWV0YU1vZGVsLCBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGAke3NFbnRpdHlTZXRQYXRofS8ke3NLZXl9YCkpLnRoZW4oXG5cdFx0XHRcdFx0Q2hhcnREZWxlZ2F0ZS5faGFuZGxlUHJvcGVydHkuYmluZChcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoYCR7c0VudGl0eVNldFBhdGh9LyR7c0tleX1gKSxcblx0XHRcdFx0XHRcdG9NRENDaGFydCxcblx0XHRcdFx0XHRcdG1FbnRpdHlTZXRBbm5vdGF0aW9ucyxcblx0XHRcdFx0XHRcdG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzLFxuXHRcdFx0XHRcdFx0bUN1c3RvbUFnZ3JlZ2F0ZXMsXG5cdFx0XHRcdFx0XHRhUHJvcGVydGllc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0YXdhaXQgUHJvbWlzZS5hbGwoYVByb3BlcnR5UHJvbWlzZSk7XG5cblx0cmV0dXJuIGFQcm9wZXJ0aWVzO1xufTtcblxuQ2hhcnREZWxlZ2F0ZS5fY3JlYXRlUHJvcGVydHlJbmZvc0ZvckFnZ3JlZ2F0YWJsZSA9IGZ1bmN0aW9uIChcblx0b01EQ0NoYXJ0OiBDaGFydCxcblx0c0tleTogc3RyaW5nLFxuXHRvUHJvcGVydHlBbm5vdGF0aW9uczogYW55LFxuXHRvRmlsdGVyUmVzdHJpY3Rpb25zSW5mbzogYW55LFxuXHRvU29ydFJlc3RyaWN0aW9uc0luZm86IGFueSxcblx0bUtub3duQWdncmVnYXRhYmxlUHJvcHM6IGFueSxcblx0bUN1c3RvbUFnZ3JlZ2F0ZXM6IGFueVxuKSB7XG5cdGNvbnN0IGFBZ2dyZWdhdGVQcm9wZXJ0aWVzID0gW107XG5cdGlmIChPYmplY3Qua2V5cyhtS25vd25BZ2dyZWdhdGFibGVQcm9wcykuaW5kZXhPZihzS2V5KSA+IC0xKSB7XG5cdFx0Zm9yIChjb25zdCBzQWdncmVnYXRhYmxlIGluIG1Lbm93bkFnZ3JlZ2F0YWJsZVByb3BzW3NLZXldKSB7XG5cdFx0XHRhQWdncmVnYXRlUHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0bmFtZTogXCJfZmVfYWdncmVnYXRhYmxlX1wiICsgbUtub3duQWdncmVnYXRhYmxlUHJvcHNbc0tleV1bc0FnZ3JlZ2F0YWJsZV0ubmFtZSxcblx0XHRcdFx0cHJvcGVydHlQYXRoOiBzS2V5LFxuXHRcdFx0XHRsYWJlbDpcblx0XHRcdFx0XHRtS25vd25BZ2dyZWdhdGFibGVQcm9wc1tzS2V5XVtzQWdncmVnYXRhYmxlXS5sYWJlbCB8fFxuXHRcdFx0XHRcdGAke29Qcm9wZXJ0eUFubm90YXRpb25zW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5MYWJlbFwiXX0gKCR7c0FnZ3JlZ2F0YWJsZX0pYCB8fFxuXHRcdFx0XHRcdGAke3NLZXl9ICgke3NBZ2dyZWdhdGFibGV9KWAsXG5cdFx0XHRcdHNvcnRhYmxlOiBvU29ydFJlc3RyaWN0aW9uc0luZm9bc0tleV0gPyBvU29ydFJlc3RyaWN0aW9uc0luZm9bc0tleV0uc29ydGFibGUgOiB0cnVlLFxuXHRcdFx0XHRmaWx0ZXJhYmxlOiBvRmlsdGVyUmVzdHJpY3Rpb25zSW5mb1tzS2V5XSA/IG9GaWx0ZXJSZXN0cmljdGlvbnNJbmZvW3NLZXldLmZpbHRlcmFibGUgOiB0cnVlLFxuXHRcdFx0XHRncm91cGFibGU6IGZhbHNlLFxuXHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uTWV0aG9kOiBzQWdncmVnYXRhYmxlLFxuXHRcdFx0XHRtYXhDb25kaXRpb25zOiBPRGF0YU1ldGFNb2RlbFV0aWwuaXNNdWx0aVZhbHVlRmlsdGVyRXhwcmVzc2lvbihvRmlsdGVyUmVzdHJpY3Rpb25zSW5mby5wcm9wZXJ0eUluZm9bc0tleV0pID8gLTEgOiAxLFxuXHRcdFx0XHRyb2xlOiBDaGFydEl0ZW1Sb2xlVHlwZS5heGlzMSxcblx0XHRcdFx0ZGF0YXBvaW50OiBudWxsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyhtQ3VzdG9tQWdncmVnYXRlcykuaW5kZXhPZihzS2V5KSA+IC0xKSB7XG5cdFx0Zm9yIChjb25zdCBzQ3VzdG9tIGluIG1DdXN0b21BZ2dyZWdhdGVzKSB7XG5cdFx0XHRpZiAoc0N1c3RvbSA9PT0gc0tleSkge1xuXHRcdFx0XHRjb25zdCBvSXRlbSA9IG1lcmdlKHt9LCBtQ3VzdG9tQWdncmVnYXRlc1tzQ3VzdG9tXSwge1xuXHRcdFx0XHRcdG5hbWU6IFwiX2ZlX2FnZ3JlZ2F0YWJsZV9cIiArIHNDdXN0b20sXG5cdFx0XHRcdFx0Z3JvdXBhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRhZ2dyZWdhdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0cm9sZTogQ2hhcnRJdGVtUm9sZVR5cGUuYXhpczEsXG5cdFx0XHRcdFx0ZGF0YXBvaW50OiBudWxsIC8vVG8gYmUgaW1wbGVtZW50ZWQgYnkgRkVcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGFBZ2dyZWdhdGVQcm9wZXJ0aWVzLnB1c2gob0l0ZW0pO1xuXG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gYUFnZ3JlZ2F0ZVByb3BlcnRpZXM7XG59O1xuQ2hhcnREZWxlZ2F0ZS5yZWJpbmQgPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnksIG9CaW5kaW5nSW5mbzogYW55KSB7XG5cdGNvbnN0IHNTZWFyY2ggPSBvQmluZGluZ0luZm8ucGFyYW1ldGVycy4kc2VhcmNoO1xuXG5cdGlmIChzU2VhcmNoKSB7XG5cdFx0ZGVsZXRlIG9CaW5kaW5nSW5mby5wYXJhbWV0ZXJzLiRzZWFyY2g7XG5cdH1cblxuXHRCYXNlQ2hhcnREZWxlZ2F0ZS5yZWJpbmQob01EQ0NoYXJ0LCBvQmluZGluZ0luZm8pO1xuXG5cdGlmIChzU2VhcmNoKSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvTURDQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkuZ2V0SW5uZXJDaGFydChvTURDQ2hhcnQpLFxuXHRcdFx0b0NoYXJ0QmluZGluZyA9IG9Jbm5lckNoYXJ0ICYmIG9Jbm5lckNoYXJ0LmdldEJpbmRpbmcoXCJkYXRhXCIpO1xuXG5cdFx0Ly8gVGVtcG9yYXJ5IHdvcmthcm91bmQgdW50aWwgdGhpcyBpcyBmaXhlZCBpbiBNRENDaGFydCAvIFVJNSBDaGFydFxuXHRcdC8vIEluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyAyIE9EYXRhIHJlcXVlc3RzLCB3ZSBuZWVkIHRvIHN1c3BlbmQgdGhlIGJpbmRpbmcgYmVmb3JlIHNldHRpbmcgc29tZSBhZ2dyZWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Ly8gYW5kIHJlc3VtZSBpdCBvbmNlIHRoZSBjaGFydCBoYXMgYWRkZWQgb3RoZXIgYWdncmVnYXRpb24gcHJvcGVydGllcyAoaW4gb25CZWZvcmVSZW5kZXJpbmcpXG5cdFx0b0NoYXJ0QmluZGluZy5zdXNwZW5kKCk7XG5cdFx0b0NoYXJ0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IHNlYXJjaDogc1NlYXJjaCB9KTtcblxuXHRcdGNvbnN0IG9Jbm5lckNoYXJ0RGVsZWdhdGUgPSB7XG5cdFx0XHRvbkJlZm9yZVJlbmRlcmluZzogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRvQ2hhcnRCaW5kaW5nLnJlc3VtZSgpO1xuXHRcdFx0XHRvSW5uZXJDaGFydC5yZW1vdmVFdmVudERlbGVnYXRlKG9Jbm5lckNoYXJ0RGVsZWdhdGUpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0b0lubmVyQ2hhcnQuYWRkRXZlbnREZWxlZ2F0ZShvSW5uZXJDaGFydERlbGVnYXRlKTtcblx0fVxuXG5cdG9NRENDaGFydC5maXJlRXZlbnQoXCJiaW5kaW5nVXBkYXRlZFwiKTtcbn07XG5DaGFydERlbGVnYXRlLl9zZXRDaGFydCA9IGZ1bmN0aW9uIChvTURDQ2hhcnQ6IGFueSwgb0lubmVyQ2hhcnQ6IGFueSkge1xuXHRjb25zdCBvQ2hhcnRBUEkgPSBvTURDQ2hhcnQuZ2V0UGFyZW50KCk7XG5cdG9Jbm5lckNoYXJ0LnNldFZpelByb3BlcnRpZXMob01EQ0NoYXJ0LmRhdGEoXCJ2aXpQcm9wZXJ0aWVzXCIpKTtcblx0b0lubmVyQ2hhcnQuZGV0YWNoU2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cdG9Jbm5lckNoYXJ0LmRldGFjaERlc2VsZWN0RGF0YShvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cdG9Jbm5lckNoYXJ0LmRldGFjaERyaWxsZWRVcChvQ2hhcnRBUEkuaGFuZGxlU2VsZWN0aW9uQ2hhbmdlLmJpbmQob0NoYXJ0QVBJKSk7XG5cdG9Jbm5lckNoYXJ0LmF0dGFjaFNlbGVjdERhdGEob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXHRvSW5uZXJDaGFydC5hdHRhY2hEZXNlbGVjdERhdGEob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXHRvSW5uZXJDaGFydC5hdHRhY2hEcmlsbGVkVXAob0NoYXJ0QVBJLmhhbmRsZVNlbGVjdGlvbkNoYW5nZS5iaW5kKG9DaGFydEFQSSkpO1xuXG5cdG9Jbm5lckNoYXJ0LnNldFNlbGVjdGlvbk1vZGUob01EQ0NoYXJ0LmdldFBheWxvYWQoKS5zZWxlY3Rpb25Nb2RlLnRvVXBwZXJDYXNlKCkpO1xuXHRCYXNlQ2hhcnREZWxlZ2F0ZS5fc2V0Q2hhcnQob01EQ0NoYXJ0LCBvSW5uZXJDaGFydCk7XG59O1xuQ2hhcnREZWxlZ2F0ZS5fZ2V0QmluZGluZ0luZm8gPSBmdW5jdGlvbiAob01EQ0NoYXJ0OiBhbnkpIHtcblx0aWYgKHRoaXMuX2dldEJpbmRpbmdJbmZvRnJvbVN0YXRlKG9NRENDaGFydCkpIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0QmluZGluZ0luZm9Gcm9tU3RhdGUob01EQ0NoYXJ0KTtcblx0fVxuXG5cdGNvbnN0IG9NZXRhZGF0YUluZm8gPSBvTURDQ2hhcnQuZ2V0RGVsZWdhdGUoKS5wYXlsb2FkO1xuXHRjb25zdCBvTWV0YU1vZGVsID0gb01EQ0NoYXJ0LmdldE1vZGVsKCkgJiYgb01EQ0NoYXJ0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdGNvbnN0IHNUYXJnZXRDb2xsZWN0aW9uUGF0aCA9IG9NRENDaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIik7XG5cdGNvbnN0IHNFbnRpdHlTZXRQYXRoID1cblx0XHQob01ldGFNb2RlbC5nZXRPYmplY3QoYCR7c1RhcmdldENvbGxlY3Rpb25QYXRofS8ka2luZGApICE9PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiID8gXCIvXCIgOiBcIlwiKSArIG9NZXRhZGF0YUluZm8uY29udGV4dFBhdGg7XG5cdGNvbnN0IG9QYXJhbXMgPSBtZXJnZSh7fSwgb01ldGFkYXRhSW5mby5wYXJhbWV0ZXJzLCB7XG5cdFx0ZW50aXR5U2V0OiBvTURDQ2hhcnQuZGF0YShcImVudGl0eVNldFwiKSxcblx0XHR1c2VCYXRjaFJlcXVlc3RzOiB0cnVlLFxuXHRcdHByb3ZpZGVHcmFuZFRvdGFsczogdHJ1ZSxcblx0XHRwcm92aWRlVG90YWxSZXN1bHRTaXplOiB0cnVlLFxuXHRcdG5vUGFnaW5nOiB0cnVlXG5cdH0pO1xuXHRyZXR1cm4ge1xuXHRcdHBhdGg6IHNFbnRpdHlTZXRQYXRoLFxuXHRcdGV2ZW50czoge1xuXHRcdFx0ZGF0YVJlcXVlc3RlZDogb01EQ0NoYXJ0LmdldFBhcmVudCgpLm9uSW50ZXJuYWxEYXRhUmVxdWVzdGVkLmJpbmQob01EQ0NoYXJ0LmdldFBhcmVudCgpKVxuXHRcdH0sXG5cdFx0cGFyYW1ldGVyczogb1BhcmFtc1xuXHR9O1xufTtcbkNoYXJ0RGVsZWdhdGUucmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0ID0gZnVuY3Rpb24gKG9NRENDaGFydDogYW55LCBvTURDQ2hhcnRJdGVtOiBhbnkpIHtcblx0QmFzZUNoYXJ0RGVsZWdhdGUucmVtb3ZlSXRlbUZyb21Jbm5lckNoYXJ0LmNhbGwodGhpcywgb01EQ0NoYXJ0LCBvTURDQ2hhcnRJdGVtKTtcblx0aWYgKG9NRENDaGFydEl0ZW0uZ2V0VHlwZSgpID09PSBcImdyb3VwYWJsZVwiKSB7XG5cdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSB0aGlzLl9nZXRDaGFydChvTURDQ2hhcnQpO1xuXHRcdG9Jbm5lckNoYXJ0LmZpcmVEZXNlbGVjdERhdGEoKTtcblx0fVxufTtcbkNoYXJ0RGVsZWdhdGUuX2dldFNvcnRhYmxlID0gZnVuY3Rpb24gKG9NRENDaGFydDogYW55LCBvU29ydFJlc3RyaWN0aW9uczogYW55LCBiSXNUcmFuc0FnZ3JlZ2F0ZTogYW55KSB7XG5cdGlmIChiSXNUcmFuc0FnZ3JlZ2F0ZSkge1xuXHRcdGlmIChvTURDQ2hhcnQuZGF0YShcImRyYWZ0U3VwcG9ydGVkXCIpID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gb1NvcnRSZXN0cmljdGlvbnMgPyBvU29ydFJlc3RyaWN0aW9ucy5zb3J0YWJsZSA6IHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvU29ydFJlc3RyaWN0aW9ucyA/IG9Tb3J0UmVzdHJpY3Rpb25zLnNvcnRhYmxlIDogdHJ1ZTtcbn07XG5DaGFydERlbGVnYXRlLl9jaGVja0FuZEFkZERyYWZ0RmlsdGVyID0gZnVuY3Rpb24gKG9DaGFydDogYW55LCBvQmluZGluZ0luZm86IGFueSkge1xuXHRpZiAob0NoYXJ0LmRhdGEoXCJkcmFmdFN1cHBvcnRlZFwiKSA9PT0gXCJ0cnVlXCIpIHtcblx0XHRpZiAoIW9CaW5kaW5nSW5mbykge1xuXHRcdFx0b0JpbmRpbmdJbmZvID0ge307XG5cdFx0fVxuXHRcdGlmICghb0JpbmRpbmdJbmZvLmZpbHRlcnMpIHtcblx0XHRcdG9CaW5kaW5nSW5mby5maWx0ZXJzID0gW107XG5cdFx0fVxuXHRcdG9CaW5kaW5nSW5mby5maWx0ZXJzLnB1c2gobmV3IEZpbHRlcihcIklzQWN0aXZlRW50aXR5XCIsIEZpbHRlck9wZXJhdG9yLkVRLCB0cnVlKSk7XG5cdH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIElEIHdoaWNoIHNob3VsZCBiZSB1c2VkIGluIHRoZSBpbnRlcm5hbCBjaGFydCBmb3IgdGhlIG1lYXN1cmUvZGltZW5zaW9uLlxuICogRm9yIHN0YW5kYXJkIGNhc2VzLCB0aGlzIGlzIGp1c3QgdGhlIGlkIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIElmIGl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgYW5vdGhlciBpZCBpbnRlcm5hbGx5IGluc2lkZSB0aGUgY2hhcnQgKGUuZy4gb24gZHVwbGljYXRlIHByb3BlcnR5IGlkcykgdGhpcyBtZXRob2QgY2FuIGJlIG92ZXJ3cml0dGVuLlxuICogSW4gdGhpcyBjYXNlLCA8Y29kZT5nZXRQcm9wZXJ0eUZyb21OYW1lQW5kS2luZDwvY29kZT4gbmVlZHMgdG8gYmUgb3ZlcndyaXR0ZW4gYXMgd2VsbC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBJRCBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBraW5kIFR5cGUgb2YgdGhlIFByb3BlcnR5IChNZWFzdXJlL0RpbWVuc2lvbilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEludGVybmFsIGlkIGZvciB0aGUgc2FwLmNoYXJ0LkNoYXJ0XG4gKi9cbkNoYXJ0RGVsZWdhdGUuZ2V0SW50ZXJuYWxDaGFydE5hbWVGcm9tUHJvcGVydHlOYW1lQW5kS2luZCA9IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGtpbmQ6IHN0cmluZykge1xuXHRyZXR1cm4gbmFtZS5yZXBsYWNlKFwiX2ZlX1wiICsga2luZCArIFwiX1wiLCBcIlwiKTtcbn07XG5cbi8qKlxuICogVGhpcyBtYXBzIGFuIGlkIG9mIGFuIGludGVybmFsIGNoYXJ0IGRpbWVuc2lvbi9tZWFzdXJlICYgdHlwZSBvZiBhIHByb3BlcnR5IHRvIGl0cyBjb3JyZXNwb25kaW5nIHByb3BlcnR5IGVudHJ5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIElEIG9mIGludGVybmFsIGNoYXJ0IG1lYXN1cmUvZGltZW5zaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30ga2luZCBLaW5kIG9mIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHtzYXAudWkubWRjLkNoYXJ0fSBtZGNDaGFydCBSZWZlcmVuY2UgdG8gdGhlIE1EQyBjaGFydFxuICogQHJldHVybnMge29iamVjdH0gUHJvcGVydHlJbmZvIG9iamVjdFxuICovXG5DaGFydERlbGVnYXRlLmdldFByb3BlcnR5RnJvbU5hbWVBbmRLaW5kID0gZnVuY3Rpb24gKG5hbWU6IHN0cmluZywga2luZDogc3RyaW5nLCBtZGNDaGFydDogYW55KSB7XG5cdHJldHVybiBtZGNDaGFydC5nZXRQcm9wZXJ0eUhlbHBlcigpLmdldFByb3BlcnR5KFwiX2ZlX1wiICsga2luZCArIFwiX1wiICsgbmFtZSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBDaGFydERlbGVnYXRlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7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
|
|
@@ -154,7 +154,7 @@ ChartDelegate._handleProperty = function (
|
|
|
154
154
|
bIsNavigationText = true;
|
|
155
155
|
}
|
|
156
156
|
aProperties.push({
|
|
157
|
-
name: sKey,
|
|
157
|
+
name: "_fe_groupable_" + sKey,
|
|
158
158
|
propertyPath: sKey,
|
|
159
159
|
label: oPropertyAnnotations["@com.sap.vocabularies.Common.v1.Label"] || sKey,
|
|
160
160
|
sortable: ChartDelegate._getSortable(oMDCChart, oSortRestrictionsInfo[sKey], false),
|
|
@@ -356,7 +356,7 @@ ChartDelegate._createPropertyInfosForAggregatable = function (
|
|
|
356
356
|
if (Object.keys(mKnownAggregatableProps).indexOf(sKey) > -1) {
|
|
357
357
|
for (const sAggregatable in mKnownAggregatableProps[sKey]) {
|
|
358
358
|
aAggregateProperties.push({
|
|
359
|
-
name: mKnownAggregatableProps[sKey][sAggregatable].name,
|
|
359
|
+
name: "_fe_aggregatable_" + mKnownAggregatableProps[sKey][sAggregatable].name,
|
|
360
360
|
propertyPath: sKey,
|
|
361
361
|
label:
|
|
362
362
|
mKnownAggregatableProps[sKey][sAggregatable].label ||
|
|
@@ -376,6 +376,7 @@ ChartDelegate._createPropertyInfosForAggregatable = function (
|
|
|
376
376
|
for (const sCustom in mCustomAggregates) {
|
|
377
377
|
if (sCustom === sKey) {
|
|
378
378
|
const oItem = merge({}, mCustomAggregates[sCustom], {
|
|
379
|
+
name: "_fe_aggregatable_" + sCustom,
|
|
379
380
|
groupable: false,
|
|
380
381
|
aggregatable: true,
|
|
381
382
|
role: ChartItemRoleType.axis1,
|
|
@@ -416,6 +417,8 @@ ChartDelegate.rebind = function (oMDCChart: any, oBindingInfo: any) {
|
|
|
416
417
|
};
|
|
417
418
|
oInnerChart.addEventDelegate(oInnerChartDelegate);
|
|
418
419
|
}
|
|
420
|
+
|
|
421
|
+
oMDCChart.fireEvent("bindingUpdated");
|
|
419
422
|
};
|
|
420
423
|
ChartDelegate._setChart = function (oMDCChart: any, oInnerChart: any) {
|
|
421
424
|
const oChartAPI = oMDCChart.getParent();
|
|
@@ -484,4 +487,30 @@ ChartDelegate._checkAndAddDraftFilter = function (oChart: any, oBindingInfo: any
|
|
|
484
487
|
}
|
|
485
488
|
};
|
|
486
489
|
|
|
490
|
+
/**
|
|
491
|
+
* This function returns an ID which should be used in the internal chart for the measure/dimension.
|
|
492
|
+
* For standard cases, this is just the id of the property.
|
|
493
|
+
* If it is necessary to use another id internally inside the chart (e.g. on duplicate property ids) this method can be overwritten.
|
|
494
|
+
* In this case, <code>getPropertyFromNameAndKind</code> needs to be overwritten as well.
|
|
495
|
+
*
|
|
496
|
+
* @param {string} name ID of the property
|
|
497
|
+
* @param {string} kind Type of the Property (Measure/Dimension)
|
|
498
|
+
* @returns {string} Internal id for the sap.chart.Chart
|
|
499
|
+
*/
|
|
500
|
+
ChartDelegate.getInternalChartNameFromPropertyNameAndKind = function (name: string, kind: string) {
|
|
501
|
+
return name.replace("_fe_" + kind + "_", "");
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* This maps an id of an internal chart dimension/measure & type of a property to its corresponding property entry.
|
|
506
|
+
*
|
|
507
|
+
* @param {string} name ID of internal chart measure/dimension
|
|
508
|
+
* @param {string} kind Kind of the property
|
|
509
|
+
* @param {sap.ui.mdc.Chart} mdcChart Reference to the MDC chart
|
|
510
|
+
* @returns {object} PropertyInfo object
|
|
511
|
+
*/
|
|
512
|
+
ChartDelegate.getPropertyFromNameAndKind = function (name: string, kind: string, mdcChart: any) {
|
|
513
|
+
return mdcChart.getPropertyHelper().getProperty("_fe_" + kind + "_" + name);
|
|
514
|
+
};
|
|
515
|
+
|
|
487
516
|
export default ChartDelegate;
|