@sapui5/sap.fe.core 1.98.0 → 1.99.0
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 -2
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AnnotationHelper.js +377 -405
- package/src/sap/fe/core/AnnotationHelper.ts +385 -0
- package/src/sap/fe/core/AppComponent.js +3 -2
- package/src/sap/fe/core/AppStateHandler.js +229 -181
- package/src/sap/fe/core/AppStateHandler.ts +171 -0
- package/src/sap/fe/core/BaseController.js +3 -2
- package/src/sap/fe/core/BusyLocker.js +105 -121
- package/src/sap/fe/core/BusyLocker.ts +98 -0
- package/src/sap/fe/core/CommonUtils.js +2073 -2399
- package/src/sap/fe/core/CommonUtils.ts +2078 -0
- package/src/sap/fe/core/ExtensionAPI.js +3 -2
- package/src/sap/fe/core/PageController.js +84 -125
- package/src/sap/fe/core/PageController.ts +101 -0
- package/src/sap/fe/core/RouterProxy.js +986 -823
- package/src/sap/fe/core/RouterProxy.ts +838 -0
- package/src/sap/fe/core/Synchronization.js +51 -35
- package/src/sap/fe/core/Synchronization.ts +29 -0
- package/src/sap/fe/core/TemplateComponent.js +173 -164
- package/src/sap/fe/core/TemplateComponent.ts +166 -0
- package/src/sap/fe/core/TemplateModel.js +97 -54
- package/src/sap/fe/core/TemplateModel.ts +63 -0
- package/src/sap/fe/core/TransactionHelper.js +1576 -1664
- package/src/sap/fe/core/TransactionHelper.ts +1706 -0
- package/src/sap/fe/core/actions/draft.js +559 -608
- package/src/sap/fe/core/actions/draft.ts +593 -0
- package/src/sap/fe/core/actions/messageHandling.js +545 -514
- package/src/sap/fe/core/actions/messageHandling.ts +532 -0
- package/src/sap/fe/core/actions/nonDraft.js +17 -19
- package/src/sap/fe/core/actions/nonDraft.ts +12 -0
- package/src/sap/fe/core/actions/operations.js +1074 -1215
- package/src/sap/fe/core/actions/operations.ts +1162 -0
- package/src/sap/fe/core/actions/sticky.js +102 -105
- package/src/sap/fe/core/actions/sticky.ts +102 -0
- package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
- package/src/sap/fe/core/controllerextensions/EditFlow.js +54 -211
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +279 -11
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -6
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +47 -45
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -3
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +29 -26
- package/src/sap/fe/core/controllerextensions/MassEdit.js +101 -8
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +17 -8
- package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
- package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
- package/src/sap/fe/core/controllerextensions/Paginator.js +3 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -4
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
- package/src/sap/fe/core/controllerextensions/Share.js +3 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -3
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +18 -18
- package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
- package/src/sap/fe/core/controls/CommandExecution.js +3 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -2
- package/src/sap/fe/core/controls/FieldWrapper.js +11 -22
- package/src/sap/fe/core/controls/FilterBar.js +3 -2
- package/src/sap/fe/core/controls/FormElementWrapper.js +3 -2
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -2
- package/src/sap/fe/core/converters/ConverterContext.js +2 -2
- package/src/sap/fe/core/converters/ConverterContext.ts +4 -3
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +1 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +39 -26
- package/src/sap/fe/core/converters/ManifestWrapper.ts +9 -0
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -8
- package/src/sap/fe/core/converters/MetaModelConverter.ts +16 -16
- package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
- package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
- package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
- package/src/sap/fe/core/converters/controls/Common/Form.js +4 -2
- package/src/sap/fe/core/converters/controls/Common/Form.ts +16 -2
- package/src/sap/fe/core/converters/controls/Common/Table.js +250 -146
- package/src/sap/fe/core/converters/controls/Common/Table.ts +300 -167
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +115 -56
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +120 -74
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +467 -32
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +483 -54
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
- package/src/sap/fe/core/converters/helpers/Aggregation.js +13 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
- package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
- package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
- package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
- package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
- package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
- package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.ts +7 -6
- package/src/sap/fe/core/fpm/Component.js +3 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.js +2 -2
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +7 -4
- package/src/sap/fe/core/helpers/BindingExpression.js +314 -355
- package/src/sap/fe/core/helpers/BindingExpression.ts +317 -391
- package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
- package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
- package/src/sap/fe/core/helpers/EditState.js +81 -84
- package/src/sap/fe/core/helpers/EditState.ts +81 -0
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
- package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
- package/src/sap/fe/core/helpers/MassEditHelper.js +27 -18
- package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
- package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
- package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
- package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
- package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
- package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
- package/src/sap/fe/core/library.js +4 -3
- package/src/sap/fe/core/library.support.js +3 -2
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +1 -1
- package/src/sap/fe/core/messagebundle.properties +23 -10
- package/src/sap/fe/core/messagebundle_ar.properties +9 -0
- package/src/sap/fe/core/messagebundle_bg.properties +9 -0
- package/src/sap/fe/core/messagebundle_ca.properties +9 -0
- package/src/sap/fe/core/messagebundle_cs.properties +10 -1
- package/src/sap/fe/core/messagebundle_cy.properties +9 -0
- package/src/sap/fe/core/messagebundle_da.properties +9 -0
- package/src/sap/fe/core/messagebundle_de.properties +9 -0
- package/src/sap/fe/core/messagebundle_el.properties +9 -0
- package/src/sap/fe/core/messagebundle_en.properties +9 -0
- package/src/sap/fe/core/messagebundle_en_GB.properties +9 -0
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +9 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -0
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +9 -0
- package/src/sap/fe/core/messagebundle_es.properties +9 -0
- package/src/sap/fe/core/messagebundle_es_MX.properties +9 -0
- package/src/sap/fe/core/messagebundle_et.properties +9 -0
- package/src/sap/fe/core/messagebundle_fi.properties +9 -0
- package/src/sap/fe/core/messagebundle_fr.properties +13 -4
- package/src/sap/fe/core/messagebundle_fr_CA.properties +15 -6
- package/src/sap/fe/core/messagebundle_hi.properties +15 -6
- package/src/sap/fe/core/messagebundle_hr.properties +15 -6
- package/src/sap/fe/core/messagebundle_hu.properties +9 -0
- package/src/sap/fe/core/messagebundle_id.properties +10 -1
- package/src/sap/fe/core/messagebundle_it.properties +9 -0
- package/src/sap/fe/core/messagebundle_iw.properties +9 -0
- package/src/sap/fe/core/messagebundle_ja.properties +9 -0
- package/src/sap/fe/core/messagebundle_kk.properties +15 -6
- package/src/sap/fe/core/messagebundle_ko.properties +9 -0
- package/src/sap/fe/core/messagebundle_lt.properties +9 -0
- package/src/sap/fe/core/messagebundle_lv.properties +15 -6
- package/src/sap/fe/core/messagebundle_ms.properties +14 -5
- package/src/sap/fe/core/messagebundle_nl.properties +9 -0
- package/src/sap/fe/core/messagebundle_no.properties +9 -0
- package/src/sap/fe/core/messagebundle_pl.properties +9 -0
- package/src/sap/fe/core/messagebundle_pt.properties +9 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +9 -0
- package/src/sap/fe/core/messagebundle_ro.properties +9 -0
- package/src/sap/fe/core/messagebundle_ru.properties +9 -0
- package/src/sap/fe/core/messagebundle_sh.properties +11 -2
- package/src/sap/fe/core/messagebundle_sk.properties +9 -0
- package/src/sap/fe/core/messagebundle_sl.properties +15 -6
- package/src/sap/fe/core/messagebundle_sv.properties +9 -0
- package/src/sap/fe/core/messagebundle_th.properties +9 -0
- package/src/sap/fe/core/messagebundle_tr.properties +9 -0
- package/src/sap/fe/core/messagebundle_uk.properties +9 -0
- package/src/sap/fe/core/messagebundle_vi.properties +9 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +9 -0
- package/src/sap/fe/core/messagebundle_zh_TW.properties +15 -6
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
- package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
- package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -899
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
- package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +15 -10
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +35 -81
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +46 -94
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -487
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
- package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
- package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
- package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
- package/src/sap/fe/core/templating/FilterHelper.js +138 -72
- package/src/sap/fe/core/templating/FilterHelper.ts +139 -71
- package/src/sap/fe/core/templating/UIFormatters.js +31 -1
- package/src/sap/fe/core/templating/UIFormatters.ts +33 -2
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +4 -6
- package/ui5.yaml +0 -3
|
@@ -1,489 +1,463 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* SAPUI5
|
|
3
|
-
*
|
|
2
|
+
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
|
+
* (c) Copyright 2009-2021 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
});
|
|
464
|
-
|
|
465
|
-
var oServiceFactory = ServiceFactory.extend("sap.fe.core.services.TemplatedViewServiceFactory", {
|
|
466
|
-
_oInstanceRegistry: {},
|
|
467
|
-
iCreatingViews: 0,
|
|
468
|
-
createInstance: function(oServiceContext) {
|
|
469
|
-
oServiceFactory.prototype.iCreatingViews++;
|
|
470
|
-
|
|
471
|
-
var oTemplatedViewService = new TemplatedViewService(Object.assign({ factory: this }, oServiceContext));
|
|
472
|
-
return oTemplatedViewService.initPromise.then(function() {
|
|
473
|
-
oServiceFactory.prototype.iCreatingViews--;
|
|
474
|
-
return oTemplatedViewService;
|
|
475
|
-
});
|
|
476
|
-
},
|
|
477
|
-
removeGlobalInstance: function() {
|
|
478
|
-
this._oInstanceRegistry = {};
|
|
479
|
-
}
|
|
480
|
-
});
|
|
481
|
-
|
|
482
|
-
oServiceFactory.getNumberOfViewsInCreationState = function() {
|
|
483
|
-
return oServiceFactory.prototype.iCreatingViews;
|
|
484
|
-
};
|
|
485
|
-
|
|
486
|
-
return oServiceFactory;
|
|
487
|
-
},
|
|
488
|
-
true
|
|
489
|
-
);
|
|
5
|
+
sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/core/service/ServiceFactoryRegistry", "sap/ui/model/base/ManagedObjectModel", "sap/ui/core/mvc/View", "sap/ui/core/Component", "sap/ui/model/json/JSONModel", "sap/base/Log", "sap/fe/core/TemplateModel", "sap/fe/core/helpers/DynamicAnnotationPathHelper", "sap/ui/core/cache/CacheManager", "sap/ui/VersionInfo", "sap/ui/Device", "sap/base/util/UriParameters"], function (Service, ServiceFactory, ServiceFactoryRegistry, ManagedObjectModel, View, Component, JSONModel, Log, TemplateModel, DynamicAnnotationPathHelper, CacheManager, VersionInfo, Device, UriParameters) {
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
9
|
+
|
|
10
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
11
|
+
|
|
12
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
13
|
+
|
|
14
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
15
|
+
|
|
16
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
17
|
+
|
|
18
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
19
|
+
|
|
20
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
21
|
+
|
|
22
|
+
function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
|
23
|
+
|
|
24
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
25
|
+
|
|
26
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
27
|
+
|
|
28
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
29
|
+
|
|
30
|
+
var TemplatedViewService = /*#__PURE__*/function (_Service) {
|
|
31
|
+
_inherits(TemplatedViewService, _Service);
|
|
32
|
+
|
|
33
|
+
var _super = _createSuper(TemplatedViewService);
|
|
34
|
+
|
|
35
|
+
function TemplatedViewService() {
|
|
36
|
+
_classCallCheck(this, TemplatedViewService);
|
|
37
|
+
|
|
38
|
+
return _super.apply(this, arguments);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
_createClass(TemplatedViewService, [{
|
|
42
|
+
key: "init",
|
|
43
|
+
value: function init() {
|
|
44
|
+
var _this = this;
|
|
45
|
+
|
|
46
|
+
var aServiceDependencies = [];
|
|
47
|
+
var oContext = this.getContext();
|
|
48
|
+
var oComponent = oContext.scopeObject;
|
|
49
|
+
var oAppComponent = Component.getOwnerComponentFor(oComponent);
|
|
50
|
+
var oMetaModel = oAppComponent.getMetaModel();
|
|
51
|
+
var sStableId = oAppComponent.getMetadata().getComponentName() + "::" + oAppComponent.getLocalId(oComponent.getId());
|
|
52
|
+
var aEnhanceI18n = oComponent.getEnhanceI18n() || [];
|
|
53
|
+
var sAppNamespace;
|
|
54
|
+
this.oFactory = oContext.factory;
|
|
55
|
+
|
|
56
|
+
if (aEnhanceI18n) {
|
|
57
|
+
sAppNamespace = oAppComponent.getMetadata().getComponentName();
|
|
58
|
+
|
|
59
|
+
for (var i = 0; i < aEnhanceI18n.length; i++) {
|
|
60
|
+
// In order to support text-verticalization applications can also passs a resource model defined in the manifest
|
|
61
|
+
// UI5 takes care of text-verticalization for resource models defined in the manifest
|
|
62
|
+
// Hence check if the given key is a resource model defined in the manifest
|
|
63
|
+
// if so this model should be used to enhance the sap.fe resource model so pass it as it is
|
|
64
|
+
var oResourceModel = oAppComponent.getModel(aEnhanceI18n[i]);
|
|
65
|
+
|
|
66
|
+
if (oResourceModel && oResourceModel.isA("sap.ui.model.resource.ResourceModel")) {
|
|
67
|
+
aEnhanceI18n[i] = oResourceModel;
|
|
68
|
+
} else {
|
|
69
|
+
aEnhanceI18n[i] = sAppNamespace + "." + aEnhanceI18n[i].replace(".properties", "");
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
var sCacheIdentifier = oAppComponent.getMetadata().getName() + "_" + sStableId + "_" + sap.ui.getCore().getConfiguration().getLanguageTag();
|
|
75
|
+
aServiceDependencies.push(ServiceFactoryRegistry.get("sap.fe.core.services.ResourceModelService").createInstance({
|
|
76
|
+
scopeType: "component",
|
|
77
|
+
scopeObject: oComponent,
|
|
78
|
+
settings: {
|
|
79
|
+
bundles: ["sap.fe.core.messagebundle", "sap.fe.macros.messagebundle", "sap.fe.templates.messagebundle"],
|
|
80
|
+
enhanceI18n: aEnhanceI18n,
|
|
81
|
+
modelName: "sap.fe.i18n"
|
|
82
|
+
}
|
|
83
|
+
}).then(function (oResourceModelService) {
|
|
84
|
+
_this.oResourceModelService = oResourceModelService;
|
|
85
|
+
return oResourceModelService.getResourceModel();
|
|
86
|
+
}));
|
|
87
|
+
aServiceDependencies.push(ServiceFactoryRegistry.get("sap.fe.core.services.CacheHandlerService").createInstance({
|
|
88
|
+
settings: {
|
|
89
|
+
metaModel: oMetaModel,
|
|
90
|
+
appComponent: oAppComponent,
|
|
91
|
+
component: oComponent
|
|
92
|
+
}
|
|
93
|
+
}).then(function (oCacheHandlerService) {
|
|
94
|
+
_this.oCacheHandlerService = oCacheHandlerService;
|
|
95
|
+
return oCacheHandlerService.validateCacheKey(sCacheIdentifier);
|
|
96
|
+
}));
|
|
97
|
+
aServiceDependencies.push(VersionInfo.load().then(function (oInfo) {
|
|
98
|
+
var sTimestamp = "";
|
|
99
|
+
|
|
100
|
+
if (!oInfo.libraries) {
|
|
101
|
+
sTimestamp = sap.ui.buildinfo.buildtime;
|
|
102
|
+
} else {
|
|
103
|
+
oInfo.libraries.forEach(function (oLibrary) {
|
|
104
|
+
sTimestamp += oLibrary.buildTimestamp;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return sTimestamp;
|
|
109
|
+
}).catch(function () {
|
|
110
|
+
return "<NOVALUE>";
|
|
111
|
+
}));
|
|
112
|
+
var sPageModelCacheKey = "";
|
|
113
|
+
this.initPromise = Promise.all(aServiceDependencies).then(function (aDependenciesResult) {
|
|
114
|
+
var sCacheKey = aDependenciesResult[1];
|
|
115
|
+
var sVersionInfo = aDependenciesResult[2];
|
|
116
|
+
var oShellServices = oAppComponent.getShellServices();
|
|
117
|
+
var oSideEffectsServices = oAppComponent.getSideEffectsService();
|
|
118
|
+
oSideEffectsServices.initializeSideEffects(oAppComponent.getEnvironmentCapabilities().getCapabilities());
|
|
119
|
+
sPageModelCacheKey = sCacheKey + "-" + sVersionInfo + "-" + sStableId + "-" + oShellServices.instanceType + "-pageModel";
|
|
120
|
+
return Promise.all(aDependenciesResult.concat([_this._getCachedModel(sPageModelCacheKey)]));
|
|
121
|
+
}).then(function (aDependenciesResult) {
|
|
122
|
+
var oResourceModel = aDependenciesResult[0];
|
|
123
|
+
var sCacheKey = aDependenciesResult[1];
|
|
124
|
+
var oPageModelCache = aDependenciesResult[3];
|
|
125
|
+
return new Promise(function (resolve) {
|
|
126
|
+
sap.ui.require(["sap/fe/core/converters/TemplateConverter", "sap/fe/core/converters/MetaModelConverter"], function (TemplateConverter, MetaModelConverter) {
|
|
127
|
+
resolve(_this.createView(oResourceModel, sStableId, sCacheKey, sPageModelCacheKey, oPageModelCache, TemplateConverter, MetaModelConverter));
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
}).then(function (sCacheKey) {
|
|
131
|
+
var oCacheHandlerService = ServiceFactoryRegistry.get("sap.fe.core.services.CacheHandlerService").getInstance(oMetaModel);
|
|
132
|
+
oCacheHandlerService.invalidateIfNeeded(sCacheKey, sCacheIdentifier);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}, {
|
|
136
|
+
key: "_getCachedModel",
|
|
137
|
+
value: function _getCachedModel(sCacheKey) {
|
|
138
|
+
if (sap.ui.getCore().getConfiguration().getViewCache()) {
|
|
139
|
+
return CacheManager.get(sCacheKey);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
return undefined;
|
|
143
|
+
}
|
|
144
|
+
}, {
|
|
145
|
+
key: "_setCachedModel",
|
|
146
|
+
value: function _setCachedModel(sCacheKey, oCacheModel) {
|
|
147
|
+
if (sap.ui.getCore().getConfiguration().getViewCache()) {
|
|
148
|
+
CacheManager.set(sCacheKey, oCacheModel);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Refresh the current view using the same configuration as before.
|
|
155
|
+
* This is useful for our demokit !
|
|
156
|
+
*
|
|
157
|
+
* @param oComponent
|
|
158
|
+
* @returns {Promise<void>}
|
|
159
|
+
* @private
|
|
160
|
+
*/
|
|
161
|
+
|
|
162
|
+
}, {
|
|
163
|
+
key: "refreshView",
|
|
164
|
+
value: function refreshView(oComponent) {
|
|
165
|
+
var oRootView = oComponent.getRootControl();
|
|
166
|
+
|
|
167
|
+
if (oRootView) {
|
|
168
|
+
oRootView.destroy();
|
|
169
|
+
} else if (this.oView) {
|
|
170
|
+
this.oView.destroy();
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
return this.createView(this.resourceModel, this.stableId, "", "", undefined, this.TemplateConverter, this.MetaModelConverter).then(function () {
|
|
174
|
+
oComponent.oContainer.invalidate();
|
|
175
|
+
}).catch(function (oError) {
|
|
176
|
+
oComponent.oContainer.invalidate();
|
|
177
|
+
Log.error(oError);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}, {
|
|
181
|
+
key: "createView",
|
|
182
|
+
value: function createView(oResourceModel, sStableId, sCacheKey, sPageModelCacheKey, oPageModelCache, TemplateConverter, MetaModelConverter) {
|
|
183
|
+
var _this2 = this;
|
|
184
|
+
|
|
185
|
+
this.resourceModel = oResourceModel;
|
|
186
|
+
this.stableId = sStableId;
|
|
187
|
+
this.TemplateConverter = TemplateConverter;
|
|
188
|
+
this.MetaModelConverter = MetaModelConverter;
|
|
189
|
+
var oContext = this.getContext();
|
|
190
|
+
var mServiceSettings = oContext.settings;
|
|
191
|
+
var sConverterType = mServiceSettings.converterType;
|
|
192
|
+
var oComponent = oContext.scopeObject;
|
|
193
|
+
var oAppComponent = Component.getOwnerComponentFor(oComponent);
|
|
194
|
+
var sFullContextPath = oAppComponent.getRoutingService().getTargetInformationFor(oComponent).options.settings.fullContextPath;
|
|
195
|
+
var oMetaModel = oAppComponent.getMetaModel();
|
|
196
|
+
var oManifestContent = oAppComponent.getManifest();
|
|
197
|
+
var oDeviceModel = new JSONModel(sap.ui.Device).setDefaultBindingMode("OneWay");
|
|
198
|
+
var oManifestModel = new JSONModel(oManifestContent);
|
|
199
|
+
var bError = false;
|
|
200
|
+
var oPageModel, oViewDataModel, oViewSettings, mViewData;
|
|
201
|
+
|
|
202
|
+
function getViewSettings() {
|
|
203
|
+
var aSplitPath = sFullContextPath.split("/");
|
|
204
|
+
var sEntitySetPath = aSplitPath.reduce(function (sPathSoFar, sNextPathPart) {
|
|
205
|
+
if (sNextPathPart === "") {
|
|
206
|
+
return sPathSoFar;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
if (sPathSoFar === "") {
|
|
210
|
+
sPathSoFar = "/" + sNextPathPart;
|
|
211
|
+
} else {
|
|
212
|
+
var oTarget = oMetaModel.getObject(sPathSoFar + "/$NavigationPropertyBinding/" + sNextPathPart);
|
|
213
|
+
|
|
214
|
+
if (oTarget && Object.keys(oTarget).length > 0) {
|
|
215
|
+
sPathSoFar += "/$NavigationPropertyBinding";
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
sPathSoFar += "/" + sNextPathPart;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return sPathSoFar;
|
|
222
|
+
}, "");
|
|
223
|
+
var oViewSettings = {
|
|
224
|
+
type: "XML",
|
|
225
|
+
preprocessors: {
|
|
226
|
+
xml: {
|
|
227
|
+
bindingContexts: {
|
|
228
|
+
entitySet: sEntitySetPath ? oMetaModel.createBindingContext(sEntitySetPath) : null,
|
|
229
|
+
fullContextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
230
|
+
contextPath: sFullContextPath ? oMetaModel.createBindingContext(sFullContextPath) : null,
|
|
231
|
+
converterContext: oPageModel.createBindingContext("/", undefined, {
|
|
232
|
+
noResolve: true
|
|
233
|
+
}),
|
|
234
|
+
viewData: mViewData ? oViewDataModel.createBindingContext("/") : null
|
|
235
|
+
},
|
|
236
|
+
models: {
|
|
237
|
+
entitySet: oMetaModel,
|
|
238
|
+
fullContextPath: oMetaModel,
|
|
239
|
+
contextPath: oMetaModel,
|
|
240
|
+
"sap.fe.i18n": oResourceModel,
|
|
241
|
+
metaModel: oMetaModel,
|
|
242
|
+
"device": oDeviceModel,
|
|
243
|
+
// TODO: discuss names here
|
|
244
|
+
manifest: oManifestModel,
|
|
245
|
+
converterContext: oPageModel,
|
|
246
|
+
viewData: oViewDataModel
|
|
247
|
+
},
|
|
248
|
+
appComponent: oAppComponent
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
id: sStableId,
|
|
252
|
+
viewName: mServiceSettings.viewName || oComponent.getViewName(),
|
|
253
|
+
viewData: mViewData,
|
|
254
|
+
cache: {
|
|
255
|
+
keys: [sCacheKey]
|
|
256
|
+
},
|
|
257
|
+
models: {
|
|
258
|
+
"sap.fe.i18n": oResourceModel
|
|
259
|
+
},
|
|
260
|
+
height: "100%"
|
|
261
|
+
};
|
|
262
|
+
return oViewSettings;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
var createErrorPage = function (reason) {
|
|
266
|
+
// just replace the view name and add an additional model containing the reason, but
|
|
267
|
+
// keep the other settings
|
|
268
|
+
Log.error(reason.message, reason);
|
|
269
|
+
oViewSettings.viewName = mServiceSettings.errorViewName || "sap.fe.core.services.view.TemplatingErrorPage";
|
|
270
|
+
oViewSettings.preprocessors.xml.models["error"] = new JSONModel(reason);
|
|
271
|
+
return oComponent.runAsOwner(function () {
|
|
272
|
+
return View.create(oViewSettings).then(function (oView) {
|
|
273
|
+
_this2.oView = oView;
|
|
274
|
+
|
|
275
|
+
_this2.oView.setModel(new ManagedObjectModel(_this2.oView), "$view");
|
|
276
|
+
|
|
277
|
+
oComponent.setAggregation("rootControl", _this2.oView);
|
|
278
|
+
return sCacheKey;
|
|
279
|
+
});
|
|
280
|
+
});
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
return oAppComponent.getService("routingService").then(function (oRoutingService) {
|
|
284
|
+
// Retrieve the viewLevel for the component
|
|
285
|
+
var oTargetInfo = oRoutingService.getTargetInformationFor(oComponent);
|
|
286
|
+
var mOutbounds = oManifestContent["sap.app"] && oManifestContent["sap.app"].crossNavigation && oManifestContent["sap.app"].crossNavigation.outbounds;
|
|
287
|
+
var mNavigation = oComponent.getNavigation() || {};
|
|
288
|
+
Object.keys(mNavigation).forEach(function (navigationObjectKey) {
|
|
289
|
+
var navigationObject = mNavigation[navigationObjectKey];
|
|
290
|
+
var outboundConfig;
|
|
291
|
+
|
|
292
|
+
if (navigationObject.detail && navigationObject.detail.outbound && mOutbounds[navigationObject.detail.outbound]) {
|
|
293
|
+
outboundConfig = mOutbounds[navigationObject.detail.outbound];
|
|
294
|
+
navigationObject.detail.outboundDetail = {
|
|
295
|
+
semanticObject: outboundConfig.semanticObject,
|
|
296
|
+
action: outboundConfig.action,
|
|
297
|
+
parameters: outboundConfig.parameters
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
if (navigationObject.create && navigationObject.create.outbound && mOutbounds[navigationObject.create.outbound]) {
|
|
302
|
+
outboundConfig = mOutbounds[navigationObject.create.outbound];
|
|
303
|
+
navigationObject.create.outboundDetail = {
|
|
304
|
+
semanticObject: outboundConfig.semanticObject,
|
|
305
|
+
action: outboundConfig.action,
|
|
306
|
+
parameters: outboundConfig.parameters
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
});
|
|
310
|
+
mViewData = {
|
|
311
|
+
navigation: mNavigation,
|
|
312
|
+
viewLevel: oTargetInfo.viewLevel,
|
|
313
|
+
stableId: sStableId,
|
|
314
|
+
contentDensities: oManifestContent["sap.ui5"].contentDensities,
|
|
315
|
+
resourceBundle: oResourceModel.__bundle,
|
|
316
|
+
fullContextPath: sFullContextPath,
|
|
317
|
+
isDesktop: Device.system.desktop,
|
|
318
|
+
isPhone: Device.system.phone
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
if (oComponent.getViewData) {
|
|
322
|
+
Object.assign(mViewData, oComponent.getViewData());
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
var oShellServices = oAppComponent.getShellServices();
|
|
326
|
+
mViewData.converterType = sConverterType;
|
|
327
|
+
mViewData.shellContentDensity = oShellServices.getContentDensity();
|
|
328
|
+
mViewData.useNewLazyLoading = UriParameters.fromQuery(window.location.search).get("sap-fe-xx-lazyloadingtest") === "true";
|
|
329
|
+
mViewData.retrieveTextFromValueList = oManifestContent["sap.fe"] && oManifestContent["sap.fe"].form ? oManifestContent["sap.fe"].form.retrieveTextFromValueList : undefined;
|
|
330
|
+
oViewDataModel = new JSONModel(mViewData);
|
|
331
|
+
|
|
332
|
+
if (mViewData && mViewData.controlConfiguration) {
|
|
333
|
+
Object.keys(mViewData.controlConfiguration).forEach(function (sAnnotationPath) {
|
|
334
|
+
if (sAnnotationPath.indexOf("[") !== -1) {
|
|
335
|
+
var sTargetAnnotationPath = DynamicAnnotationPathHelper.resolveDynamicExpression(sAnnotationPath, oMetaModel);
|
|
336
|
+
mViewData.controlConfiguration[sTargetAnnotationPath] = mViewData.controlConfiguration[sAnnotationPath];
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
MetaModelConverter.convertTypes(oMetaModel, oAppComponent.getEnvironmentCapabilities().getCapabilities());
|
|
342
|
+
oPageModel = new TemplateModel(function () {
|
|
343
|
+
try {
|
|
344
|
+
if (!!oPageModelCache) {
|
|
345
|
+
return oPageModelCache;
|
|
346
|
+
} else {
|
|
347
|
+
var oDiagnostics = oAppComponent.getDiagnostics();
|
|
348
|
+
var iIssueCount = oDiagnostics.getIssues().length;
|
|
349
|
+
var oConverterPageModel = TemplateConverter.convertPage(sConverterType, oMetaModel, mViewData, oDiagnostics, sFullContextPath, oAppComponent.getEnvironmentCapabilities().getCapabilities());
|
|
350
|
+
var aIssues = oDiagnostics.getIssues();
|
|
351
|
+
var aAddedIssues = aIssues.slice(iIssueCount);
|
|
352
|
+
|
|
353
|
+
if (aAddedIssues.length > 0) {
|
|
354
|
+
Log.warning("Some issues have been detected in your project, please check the UI5 support assistant rule for sap.fe.core");
|
|
355
|
+
} // Fire and forget in the cache
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
_this2._setCachedModel(sPageModelCacheKey, oConverterPageModel);
|
|
359
|
+
|
|
360
|
+
return oConverterPageModel;
|
|
361
|
+
}
|
|
362
|
+
} catch (error) {
|
|
363
|
+
Log.error(error, error);
|
|
364
|
+
return {};
|
|
365
|
+
}
|
|
366
|
+
}, oMetaModel);
|
|
367
|
+
|
|
368
|
+
if (!bError) {
|
|
369
|
+
oViewSettings = getViewSettings(); // Setting the pageModel on the component for potential reuse
|
|
370
|
+
|
|
371
|
+
oComponent.setModel(oPageModel, "_pageModel");
|
|
372
|
+
return oComponent.runAsOwner(function () {
|
|
373
|
+
return View.create(oViewSettings).catch(createErrorPage).then(function (oView) {
|
|
374
|
+
_this2.oView = oView;
|
|
375
|
+
|
|
376
|
+
_this2.oView.setModel(new ManagedObjectModel(_this2.oView), "$view");
|
|
377
|
+
|
|
378
|
+
_this2.oView.setModel(oViewDataModel, "viewData");
|
|
379
|
+
|
|
380
|
+
oComponent.setAggregation("rootControl", _this2.oView);
|
|
381
|
+
return sCacheKey;
|
|
382
|
+
}).catch(Log.error);
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}).catch(function (error) {
|
|
386
|
+
Log.error(error.message, error);
|
|
387
|
+
throw new Error("Error while creating view : " + error);
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
}, {
|
|
391
|
+
key: "getView",
|
|
392
|
+
value: function getView() {
|
|
393
|
+
return this.oView;
|
|
394
|
+
}
|
|
395
|
+
}, {
|
|
396
|
+
key: "getInterface",
|
|
397
|
+
value: function getInterface() {
|
|
398
|
+
return this;
|
|
399
|
+
}
|
|
400
|
+
}, {
|
|
401
|
+
key: "exit",
|
|
402
|
+
value: function exit() {
|
|
403
|
+
// Deregister global instance
|
|
404
|
+
this.oResourceModelService && this.oResourceModelService.destroy();
|
|
405
|
+
this.oCacheHandlerService && this.oCacheHandlerService.destroy();
|
|
406
|
+
this.oFactory.removeGlobalInstance();
|
|
407
|
+
}
|
|
408
|
+
}]);
|
|
409
|
+
|
|
410
|
+
return TemplatedViewService;
|
|
411
|
+
}(Service);
|
|
412
|
+
|
|
413
|
+
var TemplatedViewServiceFactory = /*#__PURE__*/function (_ServiceFactory) {
|
|
414
|
+
_inherits(TemplatedViewServiceFactory, _ServiceFactory);
|
|
415
|
+
|
|
416
|
+
var _super2 = _createSuper(TemplatedViewServiceFactory);
|
|
417
|
+
|
|
418
|
+
function TemplatedViewServiceFactory() {
|
|
419
|
+
var _this3;
|
|
420
|
+
|
|
421
|
+
_classCallCheck(this, TemplatedViewServiceFactory);
|
|
422
|
+
|
|
423
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
424
|
+
args[_key] = arguments[_key];
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
_this3 = _super2.call.apply(_super2, [this].concat(args));
|
|
428
|
+
|
|
429
|
+
_defineProperty(_assertThisInitialized(_this3), "_oInstanceRegistry", {});
|
|
430
|
+
|
|
431
|
+
return _this3;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
_createClass(TemplatedViewServiceFactory, [{
|
|
435
|
+
key: "createInstance",
|
|
436
|
+
value: function createInstance(oServiceContext) {
|
|
437
|
+
TemplatedViewServiceFactory.iCreatingViews++;
|
|
438
|
+
var oTemplatedViewService = new TemplatedViewService(Object.assign({
|
|
439
|
+
factory: this
|
|
440
|
+
}, oServiceContext));
|
|
441
|
+
return oTemplatedViewService.initPromise.then(function () {
|
|
442
|
+
TemplatedViewServiceFactory.iCreatingViews--;
|
|
443
|
+
return oTemplatedViewService;
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
}, {
|
|
447
|
+
key: "removeGlobalInstance",
|
|
448
|
+
value: function removeGlobalInstance() {
|
|
449
|
+
this._oInstanceRegistry = {};
|
|
450
|
+
}
|
|
451
|
+
}], [{
|
|
452
|
+
key: "getNumberOfViewsInCreationState",
|
|
453
|
+
value: function getNumberOfViewsInCreationState() {
|
|
454
|
+
return TemplatedViewServiceFactory.iCreatingViews;
|
|
455
|
+
}
|
|
456
|
+
}]);
|
|
457
|
+
|
|
458
|
+
return TemplatedViewServiceFactory;
|
|
459
|
+
}(ServiceFactory);
|
|
460
|
+
|
|
461
|
+
return TemplatedViewServiceFactory;
|
|
462
|
+
}, false);
|
|
463
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS50cyJdLCJuYW1lcyI6WyJUZW1wbGF0ZWRWaWV3U2VydmljZSIsImFTZXJ2aWNlRGVwZW5kZW5jaWVzIiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0NvbXBvbmVudCIsInNjb3BlT2JqZWN0Iiwib0FwcENvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsInNTdGFibGVJZCIsImdldE1ldGFkYXRhIiwiZ2V0Q29tcG9uZW50TmFtZSIsImdldExvY2FsSWQiLCJnZXRJZCIsImFFbmhhbmNlSTE4biIsImdldEVuaGFuY2VJMThuIiwic0FwcE5hbWVzcGFjZSIsIm9GYWN0b3J5IiwiZmFjdG9yeSIsImkiLCJsZW5ndGgiLCJvUmVzb3VyY2VNb2RlbCIsImdldE1vZGVsIiwiaXNBIiwicmVwbGFjZSIsInNDYWNoZUlkZW50aWZpZXIiLCJnZXROYW1lIiwic2FwIiwidWkiLCJnZXRDb3JlIiwiZ2V0Q29uZmlndXJhdGlvbiIsImdldExhbmd1YWdlVGFnIiwicHVzaCIsIlNlcnZpY2VGYWN0b3J5UmVnaXN0cnkiLCJnZXQiLCJjcmVhdGVJbnN0YW5jZSIsInNjb3BlVHlwZSIsInNldHRpbmdzIiwiYnVuZGxlcyIsImVuaGFuY2VJMThuIiwibW9kZWxOYW1lIiwidGhlbiIsIm9SZXNvdXJjZU1vZGVsU2VydmljZSIsImdldFJlc291cmNlTW9kZWwiLCJtZXRhTW9kZWwiLCJhcHBDb21wb25lbnQiLCJjb21wb25lbnQiLCJvQ2FjaGVIYW5kbGVyU2VydmljZSIsInZhbGlkYXRlQ2FjaGVLZXkiLCJWZXJzaW9uSW5mbyIsImxvYWQiLCJvSW5mbyIsInNUaW1lc3RhbXAiLCJsaWJyYXJpZXMiLCJidWlsZGluZm8iLCJidWlsZHRpbWUiLCJmb3JFYWNoIiwib0xpYnJhcnkiLCJidWlsZFRpbWVzdGFtcCIsImNhdGNoIiwic1BhZ2VNb2RlbENhY2hlS2V5IiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwiYWxsIiwiYURlcGVuZGVuY2llc1Jlc3VsdCIsInNDYWNoZUtleSIsInNWZXJzaW9uSW5mbyIsIm9TaGVsbFNlcnZpY2VzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsIm9TaWRlRWZmZWN0c1NlcnZpY2VzIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiaW5pdGlhbGl6ZVNpZGVFZmZlY3RzIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJpbnN0YW5jZVR5cGUiLCJjb25jYXQiLCJfZ2V0Q2FjaGVkTW9kZWwiLCJvUGFnZU1vZGVsQ2FjaGUiLCJyZXNvbHZlIiwicmVxdWlyZSIsIlRlbXBsYXRlQ29udmVydGVyIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY3JlYXRlVmlldyIsImdldEluc3RhbmNlIiwiaW52YWxpZGF0ZUlmTmVlZGVkIiwiZ2V0Vmlld0NhY2hlIiwiQ2FjaGVNYW5hZ2VyIiwidW5kZWZpbmVkIiwib0NhY2hlTW9kZWwiLCJzZXQiLCJvUm9vdFZpZXciLCJnZXRSb290Q29udHJvbCIsImRlc3Ryb3kiLCJvVmlldyIsInJlc291cmNlTW9kZWwiLCJzdGFibGVJZCIsIm9Db250YWluZXIiLCJpbnZhbGlkYXRlIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJtU2VydmljZVNldHRpbmdzIiwic0NvbnZlcnRlclR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwic0Z1bGxDb250ZXh0UGF0aCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvcHRpb25zIiwiZnVsbENvbnRleHRQYXRoIiwib01hbmlmZXN0Q29udGVudCIsImdldE1hbmlmZXN0Iiwib0RldmljZU1vZGVsIiwiSlNPTk1vZGVsIiwiRGV2aWNlIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwib01hbmlmZXN0TW9kZWwiLCJiRXJyb3IiLCJvUGFnZU1vZGVsIiwib1ZpZXdEYXRhTW9kZWwiLCJvVmlld1NldHRpbmdzIiwibVZpZXdEYXRhIiwiZ2V0Vmlld1NldHRpbmdzIiwiYVNwbGl0UGF0aCIsInNwbGl0Iiwic0VudGl0eVNldFBhdGgiLCJyZWR1Y2UiLCJzUGF0aFNvRmFyIiwic05leHRQYXRoUGFydCIsIm9UYXJnZXQiLCJnZXRPYmplY3QiLCJPYmplY3QiLCJrZXlzIiwidHlwZSIsInByZXByb2Nlc3NvcnMiLCJ4bWwiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImNvbnRleHRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsIm5vUmVzb2x2ZSIsInZpZXdEYXRhIiwibW9kZWxzIiwibWFuaWZlc3QiLCJpZCIsInZpZXdOYW1lIiwiZ2V0Vmlld05hbWUiLCJjYWNoZSIsImhlaWdodCIsImNyZWF0ZUVycm9yUGFnZSIsInJlYXNvbiIsIm1lc3NhZ2UiLCJlcnJvclZpZXdOYW1lIiwicnVuQXNPd25lciIsIlZpZXciLCJjcmVhdGUiLCJzZXRNb2RlbCIsIk1hbmFnZWRPYmplY3RNb2RlbCIsInNldEFnZ3JlZ2F0aW9uIiwiZ2V0U2VydmljZSIsIm9Sb3V0aW5nU2VydmljZSIsIm9UYXJnZXRJbmZvIiwibU91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm1OYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbiIsIm5hdmlnYXRpb25PYmplY3RLZXkiLCJuYXZpZ2F0aW9uT2JqZWN0Iiwib3V0Ym91bmRDb25maWciLCJkZXRhaWwiLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwibmF2aWdhdGlvbiIsInZpZXdMZXZlbCIsImNvbnRlbnREZW5zaXRpZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIl9fYnVuZGxlIiwiaXNEZXNrdG9wIiwic3lzdGVtIiwiZGVza3RvcCIsImlzUGhvbmUiLCJwaG9uZSIsImdldFZpZXdEYXRhIiwiYXNzaWduIiwic2hlbGxDb250ZW50RGVuc2l0eSIsImdldENvbnRlbnREZW5zaXR5IiwidXNlTmV3TGF6eUxvYWRpbmciLCJVcmlQYXJhbWV0ZXJzIiwiZnJvbVF1ZXJ5Iiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiZm9ybSIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiaW5kZXhPZiIsInNUYXJnZXRBbm5vdGF0aW9uUGF0aCIsIkR5bmFtaWNBbm5vdGF0aW9uUGF0aEhlbHBlciIsInJlc29sdmVEeW5hbWljRXhwcmVzc2lvbiIsImNvbnZlcnRUeXBlcyIsIlRlbXBsYXRlTW9kZWwiLCJvRGlhZ25vc3RpY3MiLCJnZXREaWFnbm9zdGljcyIsImlJc3N1ZUNvdW50IiwiZ2V0SXNzdWVzIiwib0NvbnZlcnRlclBhZ2VNb2RlbCIsImNvbnZlcnRQYWdlIiwiYUlzc3VlcyIsImFBZGRlZElzc3VlcyIsInNsaWNlIiwid2FybmluZyIsIl9zZXRDYWNoZWRNb2RlbCIsIkVycm9yIiwicmVtb3ZlR2xvYmFsSW5zdGFuY2UiLCJTZXJ2aWNlIiwiVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5Iiwib1NlcnZpY2VDb250ZXh0IiwiaUNyZWF0aW5nVmlld3MiLCJvVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJfb0luc3RhbmNlUmVnaXN0cnkiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFxQk1BLG9COzs7Ozs7Ozs7Ozs7O2FBVUwsZ0JBQU87QUFBQTs7QUFDTixZQUFNQyxvQkFBb0IsR0FBRyxFQUE3QjtBQUNBLFlBQU1DLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCO0FBQ0EsWUFBTUMsVUFBVSxHQUFHRixRQUFRLENBQUNHLFdBQTVCO0FBQ0EsWUFBTUMsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFWLENBQStCSixVQUEvQixDQUF0QjtBQUNBLFlBQU1LLFVBQVUsR0FBR0gsYUFBYSxDQUFDSSxZQUFkLEVBQW5CO0FBQ0EsWUFBTUMsU0FBUyxHQUFHTCxhQUFhLENBQUNNLFdBQWQsR0FBNEJDLGdCQUE1QixLQUFpRCxJQUFqRCxHQUF3RFAsYUFBYSxDQUFDUSxVQUFkLENBQXlCVixVQUFVLENBQUNXLEtBQVgsRUFBekIsQ0FBMUU7QUFDQSxZQUFNQyxZQUFZLEdBQUdaLFVBQVUsQ0FBQ2EsY0FBWCxNQUErQixFQUFwRDtBQUNBLFlBQUlDLGFBQUo7QUFDQSxhQUFLQyxRQUFMLEdBQWdCakIsUUFBUSxDQUFDa0IsT0FBekI7O0FBQ0EsWUFBSUosWUFBSixFQUFrQjtBQUNqQkUsVUFBQUEsYUFBYSxHQUFHWixhQUFhLENBQUNNLFdBQWQsR0FBNEJDLGdCQUE1QixFQUFoQjs7QUFDQSxlQUFLLElBQUlRLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdMLFlBQVksQ0FBQ00sTUFBakMsRUFBeUNELENBQUMsRUFBMUMsRUFBOEM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBTUUsY0FBYyxHQUFHakIsYUFBYSxDQUFDa0IsUUFBZCxDQUF1QlIsWUFBWSxDQUFDSyxDQUFELENBQW5DLENBQXZCOztBQUNBLGdCQUFJRSxjQUFjLElBQUlBLGNBQWMsQ0FBQ0UsR0FBZixDQUFtQixxQ0FBbkIsQ0FBdEIsRUFBaUY7QUFDaEZULGNBQUFBLFlBQVksQ0FBQ0ssQ0FBRCxDQUFaLEdBQWtCRSxjQUFsQjtBQUNBLGFBRkQsTUFFTztBQUNOUCxjQUFBQSxZQUFZLENBQUNLLENBQUQsQ0FBWixHQUFrQkgsYUFBYSxHQUFHLEdBQWhCLEdBQXNCRixZQUFZLENBQUNLLENBQUQsQ0FBWixDQUFnQkssT0FBaEIsQ0FBd0IsYUFBeEIsRUFBdUMsRUFBdkMsQ0FBeEM7QUFDQTtBQUNEO0FBQ0Q7O0FBRUQsWUFBTUMsZ0JBQWdCLEdBQ3JCckIsYUFBYSxDQUFDTSxXQUFkLEdBQTRCZ0IsT0FBNUIsS0FDQSxHQURBLEdBRUFqQixTQUZBLEdBR0EsR0FIQSxHQUlBa0IsR0FBRyxDQUFDQyxFQUFKLENBQ0VDLE9BREYsR0FFRUMsZ0JBRkYsR0FHRUMsY0FIRixFQUxEO0FBU0FoQyxRQUFBQSxvQkFBb0IsQ0FBQ2lDLElBQXJCLENBQ0NDLHNCQUFzQixDQUFDQyxHQUF2QixDQUEyQiwyQ0FBM0IsRUFDRUMsY0FERixDQUNpQjtBQUNmQyxVQUFBQSxTQUFTLEVBQUUsV0FESTtBQUVmakMsVUFBQUEsV0FBVyxFQUFFRCxVQUZFO0FBR2ZtQyxVQUFBQSxRQUFRLEVBQUU7QUFDVEMsWUFBQUEsT0FBTyxFQUFFLENBQUMsMkJBQUQsRUFBOEIsNkJBQTlCLEVBQTZELGdDQUE3RCxDQURBO0FBRVRDLFlBQUFBLFdBQVcsRUFBRXpCLFlBRko7QUFHVDBCLFlBQUFBLFNBQVMsRUFBRTtBQUhGO0FBSEssU0FEakIsRUFVRUMsSUFWRixDQVVPLFVBQUNDLHFCQUFELEVBQWlEO0FBQ3RELFVBQUEsS0FBSSxDQUFDQSxxQkFBTCxHQUE2QkEscUJBQTdCO0FBQ0EsaUJBQU9BLHFCQUFxQixDQUFDQyxnQkFBdEIsRUFBUDtBQUNBLFNBYkYsQ0FERDtBQWlCQTVDLFFBQUFBLG9CQUFvQixDQUFDaUMsSUFBckIsQ0FDQ0Msc0JBQXNCLENBQUNDLEdBQXZCLENBQTJCLDBDQUEzQixFQUNFQyxjQURGLENBQ2lCO0FBQ2ZFLFVBQUFBLFFBQVEsRUFBRTtBQUNUTyxZQUFBQSxTQUFTLEVBQUVyQyxVQURGO0FBRVRzQyxZQUFBQSxZQUFZLEVBQUV6QyxhQUZMO0FBR1QwQyxZQUFBQSxTQUFTLEVBQUU1QztBQUhGO0FBREssU0FEakIsRUFRRXVDLElBUkYsQ0FRTyxVQUFDTSxvQkFBRCxFQUErQjtBQUNwQyxVQUFBLEtBQUksQ0FBQ0Esb0JBQUwsR0FBNEJBLG9CQUE1QjtBQUNBLGlCQUFPQSxvQkFBb0IsQ0FBQ0MsZ0JBQXJCLENBQXNDdkIsZ0JBQXRDLENBQVA7QUFDQSxTQVhGLENBREQ7QUFjQTFCLFFBQUFBLG9CQUFvQixDQUFDaUMsSUFBckIsQ0FDRWlCLFdBQUQsQ0FDRUMsSUFERixHQUVFVCxJQUZGLENBRU8sVUFBU1UsS0FBVCxFQUFxQjtBQUMxQixjQUFJQyxVQUFVLEdBQUcsRUFBakI7O0FBQ0EsY0FBSSxDQUFDRCxLQUFLLENBQUNFLFNBQVgsRUFBc0I7QUFDckJELFlBQUFBLFVBQVUsR0FBSXpCLEdBQUcsQ0FBQ0MsRUFBTCxDQUFnQjBCLFNBQWhCLENBQTBCQyxTQUF2QztBQUNBLFdBRkQsTUFFTztBQUNOSixZQUFBQSxLQUFLLENBQUNFLFNBQU4sQ0FBZ0JHLE9BQWhCLENBQXdCLFVBQVNDLFFBQVQsRUFBd0I7QUFDL0NMLGNBQUFBLFVBQVUsSUFBSUssUUFBUSxDQUFDQyxjQUF2QjtBQUNBLGFBRkQ7QUFHQTs7QUFDRCxpQkFBT04sVUFBUDtBQUNBLFNBWkYsRUFhRU8sS0FiRixDQWFRLFlBQVc7QUFDakIsaUJBQU8sV0FBUDtBQUNBLFNBZkYsQ0FERDtBQW1CQSxZQUFJQyxrQkFBa0IsR0FBRyxFQUF6QjtBQUNBLGFBQUtDLFdBQUwsR0FBbUJDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZaEUsb0JBQVosRUFDakIwQyxJQURpQixDQUNaLFVBQUN1QixtQkFBRCxFQUFnQztBQUNyQyxjQUFNQyxTQUFTLEdBQUdELG1CQUFtQixDQUFDLENBQUQsQ0FBckM7QUFDQSxjQUFNRSxZQUFZLEdBQUdGLG1CQUFtQixDQUFDLENBQUQsQ0FBeEM7QUFDQSxjQUFNRyxjQUFjLEdBQUcvRCxhQUFhLENBQUNnRSxnQkFBZCxFQUF2QjtBQUNBLGNBQU1DLG9CQUFvQixHQUFHakUsYUFBYSxDQUFDa0UscUJBQWQsRUFBN0I7QUFFQUQsVUFBQUEsb0JBQW9CLENBQUNFLHFCQUFyQixDQUEyQ25FLGFBQWEsQ0FBQ29FLDBCQUFkLEdBQTJDQyxlQUEzQyxFQUEzQztBQUVBYixVQUFBQSxrQkFBa0IsR0FBR0ssU0FBUyxHQUFHLEdBQVosR0FBa0JDLFlBQWxCLEdBQWlDLEdBQWpDLEdBQXVDekQsU0FBdkMsR0FBbUQsR0FBbkQsR0FBeUQwRCxjQUFjLENBQUNPLFlBQXhFLEdBQXVGLFlBQTVHO0FBQ0EsaUJBQU9aLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxtQkFBbUIsQ0FBQ1csTUFBcEIsQ0FBMkIsQ0FBQyxLQUFJLENBQUNDLGVBQUwsQ0FBcUJoQixrQkFBckIsQ0FBRCxDQUEzQixDQUFaLENBQVA7QUFDQSxTQVhpQixFQVlqQm5CLElBWmlCLENBWVosVUFBQ3VCLG1CQUFELEVBQWdDO0FBQ3JDLGNBQU0zQyxjQUFjLEdBQUcyQyxtQkFBbUIsQ0FBQyxDQUFELENBQTFDO0FBQ0EsY0FBTUMsU0FBUyxHQUFHRCxtQkFBbUIsQ0FBQyxDQUFELENBQXJDO0FBQ0EsY0FBTWEsZUFBZSxHQUFHYixtQkFBbUIsQ0FBQyxDQUFELENBQTNDO0FBQ0EsaUJBQU8sSUFBSUYsT0FBSixDQUFZLFVBQUFnQixPQUFPLEVBQUk7QUFDN0JuRCxZQUFBQSxHQUFHLENBQUNDLEVBQUosQ0FBT21ELE9BQVAsQ0FDQyxDQUFDLDBDQUFELEVBQTZDLDJDQUE3QyxDQURELEVBRUMsVUFBQ0MsaUJBQUQsRUFBeUJDLGtCQUF6QixFQUFxRDtBQUNwREgsY0FBQUEsT0FBTyxDQUNOLEtBQUksQ0FBQ0ksVUFBTCxDQUNDN0QsY0FERCxFQUVDWixTQUZELEVBR0N3RCxTQUhELEVBSUNMLGtCQUpELEVBS0NpQixlQUxELEVBTUNHLGlCQU5ELEVBT0NDLGtCQVBELENBRE0sQ0FBUDtBQVdBLGFBZEY7QUFnQkEsV0FqQk0sQ0FBUDtBQWtCQSxTQWxDaUIsRUFtQ2pCeEMsSUFuQ2lCLENBbUNaLFVBQVN3QixTQUFULEVBQXlCO0FBQzlCLGNBQU1sQixvQkFBb0IsR0FBR2Qsc0JBQXNCLENBQUNDLEdBQXZCLENBQTJCLDBDQUEzQixFQUF1RWlELFdBQXZFLENBQW1GNUUsVUFBbkYsQ0FBN0I7QUFDQXdDLFVBQUFBLG9CQUFvQixDQUFDcUMsa0JBQXJCLENBQXdDbkIsU0FBeEMsRUFBbUR4QyxnQkFBbkQ7QUFDQSxTQXRDaUIsQ0FBbkI7QUF1Q0E7OzthQUNELHlCQUFnQndDLFNBQWhCLEVBQWdDO0FBQy9CLFlBQ0N0QyxHQUFHLENBQUNDLEVBQUosQ0FDRUMsT0FERixHQUVFQyxnQkFGRixHQUdFdUQsWUFIRixFQURELEVBS0U7QUFDRCxpQkFBT0MsWUFBWSxDQUFDcEQsR0FBYixDQUFpQitCLFNBQWpCLENBQVA7QUFDQTs7QUFDRCxlQUFPc0IsU0FBUDtBQUNBOzs7YUFDRCx5QkFBZ0J0QixTQUFoQixFQUFtQ3VCLFdBQW5DLEVBQXFEO0FBQ3BELFlBQ0M3RCxHQUFHLENBQUNDLEVBQUosQ0FDRUMsT0FERixHQUVFQyxnQkFGRixHQUdFdUQsWUFIRixFQURELEVBS0U7QUFDREMsVUFBQUEsWUFBWSxDQUFDRyxHQUFiLENBQWlCeEIsU0FBakIsRUFBNEJ1QixXQUE1QjtBQUNBOztBQUNELGVBQU9ELFNBQVA7QUFDQTtBQUNEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7YUFDQyxxQkFBWXJGLFVBQVosRUFBNkI7QUFDNUIsWUFBTXdGLFNBQVMsR0FBR3hGLFVBQVUsQ0FBQ3lGLGNBQVgsRUFBbEI7O0FBQ0EsWUFBSUQsU0FBSixFQUFlO0FBQ2RBLFVBQUFBLFNBQVMsQ0FBQ0UsT0FBVjtBQUNBLFNBRkQsTUFFTyxJQUFJLEtBQUtDLEtBQVQsRUFBZ0I7QUFDdEIsZUFBS0EsS0FBTCxDQUFXRCxPQUFYO0FBQ0E7O0FBQ0QsZUFBTyxLQUFLVixVQUFMLENBQWdCLEtBQUtZLGFBQXJCLEVBQW9DLEtBQUtDLFFBQXpDLEVBQW1ELEVBQW5ELEVBQXVELEVBQXZELEVBQTJEUixTQUEzRCxFQUFzRSxLQUFLUCxpQkFBM0UsRUFBOEYsS0FBS0Msa0JBQW5HLEVBQ0x4QyxJQURLLENBQ0EsWUFBVztBQUNoQnZDLFVBQUFBLFVBQVUsQ0FBQzhGLFVBQVgsQ0FBc0JDLFVBQXRCO0FBQ0EsU0FISyxFQUlMdEMsS0FKSyxDQUlDLFVBQVN1QyxNQUFULEVBQXNCO0FBQzVCaEcsVUFBQUEsVUFBVSxDQUFDOEYsVUFBWCxDQUFzQkMsVUFBdEI7QUFDQUUsVUFBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVVGLE1BQVY7QUFDQSxTQVBLLENBQVA7QUFRQTs7O2FBQ0Qsb0JBQ0M3RSxjQURELEVBRUNaLFNBRkQsRUFHQ3dELFNBSEQsRUFJQ0wsa0JBSkQsRUFLQ2lCLGVBTEQsRUFNQ0csaUJBTkQsRUFPQ0Msa0JBUEQsRUFRRTtBQUFBOztBQUNELGFBQUthLGFBQUwsR0FBcUJ6RSxjQUFyQjtBQUNBLGFBQUswRSxRQUFMLEdBQWdCdEYsU0FBaEI7QUFDQSxhQUFLdUUsaUJBQUwsR0FBeUJBLGlCQUF6QjtBQUNBLGFBQUtDLGtCQUFMLEdBQTBCQSxrQkFBMUI7QUFDQSxZQUFNakYsUUFBUSxHQUFHLEtBQUtDLFVBQUwsRUFBakI7QUFDQSxZQUFNb0csZ0JBQWdCLEdBQUdyRyxRQUFRLENBQUNxQyxRQUFsQztBQUNBLFlBQU1pRSxjQUFjLEdBQUdELGdCQUFnQixDQUFDRSxhQUF4QztBQUNBLFlBQU1yRyxVQUFVLEdBQUdGLFFBQVEsQ0FBQ0csV0FBNUI7QUFDQSxZQUFNQyxhQUEyQixHQUFHQyxTQUFTLENBQUNDLG9CQUFWLENBQStCSixVQUEvQixDQUFwQztBQUNBLFlBQU1zRyxnQkFBZ0IsR0FBR3BHLGFBQWEsQ0FBQ3FHLGlCQUFkLEdBQWtDQyx1QkFBbEMsQ0FBMER4RyxVQUExRCxFQUFzRXlHLE9BQXRFLENBQThFdEUsUUFBOUUsQ0FBdUZ1RSxlQUFoSDtBQUNBLFlBQU1yRyxVQUFVLEdBQUdILGFBQWEsQ0FBQ0ksWUFBZCxFQUFuQjtBQUNBLFlBQU1xRyxnQkFBcUIsR0FBR3pHLGFBQWEsQ0FBQzBHLFdBQWQsRUFBOUI7QUFDQSxZQUFNQyxZQUFZLEdBQUcsSUFBSUMsU0FBSixDQUFjckYsR0FBRyxDQUFDQyxFQUFKLENBQU9xRixNQUFyQixFQUE2QkMscUJBQTdCLENBQW1ELFFBQW5ELENBQXJCO0FBQ0EsWUFBTUMsY0FBYyxHQUFHLElBQUlILFNBQUosQ0FBY0gsZ0JBQWQsQ0FBdkI7QUFDQSxZQUFNTyxNQUFNLEdBQUcsS0FBZjtBQUNBLFlBQUlDLFVBQUosRUFBK0JDLGNBQS9CLEVBQXNEQyxhQUF0RCxFQUEwRUMsU0FBMUU7O0FBRUEsaUJBQVNDLGVBQVQsR0FBMkI7QUFDMUIsY0FBTUMsVUFBVSxHQUFHbEIsZ0JBQWdCLENBQUNtQixLQUFqQixDQUF1QixHQUF2QixDQUFuQjtBQUNBLGNBQU1DLGNBQWMsR0FBR0YsVUFBVSxDQUFDRyxNQUFYLENBQWtCLFVBQVNDLFVBQVQsRUFBMEJDLGFBQTFCLEVBQThDO0FBQ3RGLGdCQUFJQSxhQUFhLEtBQUssRUFBdEIsRUFBMEI7QUFDekIscUJBQU9ELFVBQVA7QUFDQTs7QUFDRCxnQkFBSUEsVUFBVSxLQUFLLEVBQW5CLEVBQXVCO0FBQ3RCQSxjQUFBQSxVQUFVLEdBQUcsTUFBTUMsYUFBbkI7QUFDQSxhQUZELE1BRU87QUFDTixrQkFBTUMsT0FBTyxHQUFHekgsVUFBVSxDQUFDMEgsU0FBWCxDQUFxQkgsVUFBVSxHQUFHLDhCQUFiLEdBQThDQyxhQUFuRSxDQUFoQjs7QUFDQSxrQkFBSUMsT0FBTyxJQUFJRSxNQUFNLENBQUNDLElBQVAsQ0FBWUgsT0FBWixFQUFxQjVHLE1BQXJCLEdBQThCLENBQTdDLEVBQWdEO0FBQy9DMEcsZ0JBQUFBLFVBQVUsSUFBSSw2QkFBZDtBQUNBOztBQUNEQSxjQUFBQSxVQUFVLElBQUksTUFBTUMsYUFBcEI7QUFDQTs7QUFDRCxtQkFBT0QsVUFBUDtBQUNBLFdBZHNCLEVBY3BCLEVBZG9CLENBQXZCO0FBZUEsY0FBTVAsYUFBYSxHQUFHO0FBQ3JCYSxZQUFBQSxJQUFJLEVBQUUsS0FEZTtBQUVyQkMsWUFBQUEsYUFBYSxFQUFFO0FBQ2RDLGNBQUFBLEdBQUcsRUFBRTtBQUNKQyxnQkFBQUEsZUFBZSxFQUFFO0FBQ2hCQyxrQkFBQUEsU0FBUyxFQUFFWixjQUFjLEdBQUdySCxVQUFVLENBQUNrSSxvQkFBWCxDQUFnQ2IsY0FBaEMsQ0FBSCxHQUFxRCxJQUQ5RDtBQUVoQmhCLGtCQUFBQSxlQUFlLEVBQUVKLGdCQUFnQixHQUFHakcsVUFBVSxDQUFDa0ksb0JBQVgsQ0FBZ0NqQyxnQkFBaEMsQ0FBSCxHQUF1RCxJQUZ4RTtBQUdoQmtDLGtCQUFBQSxXQUFXLEVBQUVsQyxnQkFBZ0IsR0FBR2pHLFVBQVUsQ0FBQ2tJLG9CQUFYLENBQWdDakMsZ0JBQWhDLENBQUgsR0FBdUQsSUFIcEU7QUFJaEJtQyxrQkFBQUEsZ0JBQWdCLEVBQUV0QixVQUFVLENBQUNvQixvQkFBWCxDQUFnQyxHQUFoQyxFQUFxQ2xELFNBQXJDLEVBQWdEO0FBQUVxRCxvQkFBQUEsU0FBUyxFQUFFO0FBQWIsbUJBQWhELENBSkY7QUFLaEJDLGtCQUFBQSxRQUFRLEVBQUVyQixTQUFTLEdBQUdGLGNBQWMsQ0FBQ21CLG9CQUFmLENBQW9DLEdBQXBDLENBQUgsR0FBOEM7QUFMakQsaUJBRGI7QUFRSkssZ0JBQUFBLE1BQU0sRUFBRTtBQUNQTixrQkFBQUEsU0FBUyxFQUFFakksVUFESjtBQUVQcUcsa0JBQUFBLGVBQWUsRUFBRXJHLFVBRlY7QUFHUG1JLGtCQUFBQSxXQUFXLEVBQUVuSSxVQUhOO0FBSVAsaUNBQWVjLGNBSlI7QUFLUHVCLGtCQUFBQSxTQUFTLEVBQUVyQyxVQUxKO0FBTVAsNEJBQVV3RyxZQU5IO0FBTWlCO0FBQ3hCZ0Msa0JBQUFBLFFBQVEsRUFBRTVCLGNBUEg7QUFRUHdCLGtCQUFBQSxnQkFBZ0IsRUFBRXRCLFVBUlg7QUFTUHdCLGtCQUFBQSxRQUFRLEVBQUV2QjtBQVRILGlCQVJKO0FBbUJKekUsZ0JBQUFBLFlBQVksRUFBRXpDO0FBbkJWO0FBRFMsYUFGTTtBQXlCckI0SSxZQUFBQSxFQUFFLEVBQUV2SSxTQXpCaUI7QUEwQnJCd0ksWUFBQUEsUUFBUSxFQUFFNUMsZ0JBQWdCLENBQUM0QyxRQUFqQixJQUE2Qi9JLFVBQVUsQ0FBQ2dKLFdBQVgsRUExQmxCO0FBMkJyQkwsWUFBQUEsUUFBUSxFQUFFckIsU0EzQlc7QUE0QnJCMkIsWUFBQUEsS0FBSyxFQUFFO0FBQUVoQixjQUFBQSxJQUFJLEVBQUUsQ0FBQ2xFLFNBQUQ7QUFBUixhQTVCYztBQTZCckI2RSxZQUFBQSxNQUFNLEVBQUU7QUFDUCw2QkFBZXpIO0FBRFIsYUE3QmE7QUFnQ3JCK0gsWUFBQUEsTUFBTSxFQUFFO0FBaENhLFdBQXRCO0FBa0NBLGlCQUFPN0IsYUFBUDtBQUNBOztBQUNELFlBQU04QixlQUFlLEdBQUcsVUFBQ0MsTUFBRCxFQUFpQjtBQUN4QztBQUNBO0FBQ0FuRCxVQUFBQSxHQUFHLENBQUNDLEtBQUosQ0FBVWtELE1BQU0sQ0FBQ0MsT0FBakIsRUFBMEJELE1BQTFCO0FBQ0EvQixVQUFBQSxhQUFhLENBQUMwQixRQUFkLEdBQXlCNUMsZ0JBQWdCLENBQUNtRCxhQUFqQixJQUFrQywrQ0FBM0Q7QUFDQWpDLFVBQUFBLGFBQWEsQ0FBQ2MsYUFBZCxDQUE0QkMsR0FBNUIsQ0FBZ0NRLE1BQWhDLENBQXVDLE9BQXZDLElBQWtELElBQUk5QixTQUFKLENBQWNzQyxNQUFkLENBQWxEO0FBRUEsaUJBQU9wSixVQUFVLENBQUN1SixVQUFYLENBQXNCLFlBQU07QUFDbEMsbUJBQU9DLElBQUksQ0FBQ0MsTUFBTCxDQUFZcEMsYUFBWixFQUEyQjlFLElBQTNCLENBQWdDLFVBQUNvRCxLQUFELEVBQWdCO0FBQ3RELGNBQUEsTUFBSSxDQUFDQSxLQUFMLEdBQWFBLEtBQWI7O0FBQ0EsY0FBQSxNQUFJLENBQUNBLEtBQUwsQ0FBVytELFFBQVgsQ0FBb0IsSUFBSUMsa0JBQUosQ0FBdUIsTUFBSSxDQUFDaEUsS0FBNUIsQ0FBcEIsRUFBd0QsT0FBeEQ7O0FBQ0EzRixjQUFBQSxVQUFVLENBQUM0SixjQUFYLENBQTBCLGFBQTFCLEVBQXlDLE1BQUksQ0FBQ2pFLEtBQTlDO0FBQ0EscUJBQU81QixTQUFQO0FBQ0EsYUFMTSxDQUFQO0FBTUEsV0FQTSxDQUFQO0FBUUEsU0FmRDs7QUFnQkEsZUFBTzdELGFBQWEsQ0FDbEIySixVQURLLENBQ00sZ0JBRE4sRUFFTHRILElBRkssQ0FFQSxVQUFDdUgsZUFBRCxFQUEwQjtBQUMvQjtBQUNBLGNBQU1DLFdBQVcsR0FBR0QsZUFBZSxDQUFDdEQsdUJBQWhCLENBQXdDeEcsVUFBeEMsQ0FBcEI7QUFDQSxjQUFNZ0ssVUFBVSxHQUNmckQsZ0JBQWdCLENBQUMsU0FBRCxDQUFoQixJQUNBQSxnQkFBZ0IsQ0FBQyxTQUFELENBQWhCLENBQTRCc0QsZUFENUIsSUFFQXRELGdCQUFnQixDQUFDLFNBQUQsQ0FBaEIsQ0FBNEJzRCxlQUE1QixDQUE0Q0MsU0FIN0M7QUFJQSxjQUFNQyxXQUFXLEdBQUduSyxVQUFVLENBQUNvSyxhQUFYLE1BQThCLEVBQWxEO0FBQ0FwQyxVQUFBQSxNQUFNLENBQUNDLElBQVAsQ0FBWWtDLFdBQVosRUFBeUI3RyxPQUF6QixDQUFpQyxVQUFTK0csbUJBQVQsRUFBc0M7QUFDdEUsZ0JBQU1DLGdCQUFnQixHQUFHSCxXQUFXLENBQUNFLG1CQUFELENBQXBDO0FBQ0EsZ0JBQUlFLGNBQUo7O0FBQ0EsZ0JBQUlELGdCQUFnQixDQUFDRSxNQUFqQixJQUEyQkYsZ0JBQWdCLENBQUNFLE1BQWpCLENBQXdCQyxRQUFuRCxJQUErRFQsVUFBVSxDQUFDTSxnQkFBZ0IsQ0FBQ0UsTUFBakIsQ0FBd0JDLFFBQXpCLENBQTdFLEVBQWlIO0FBQ2hIRixjQUFBQSxjQUFjLEdBQUdQLFVBQVUsQ0FBQ00sZ0JBQWdCLENBQUNFLE1BQWpCLENBQXdCQyxRQUF6QixDQUEzQjtBQUNBSCxjQUFBQSxnQkFBZ0IsQ0FBQ0UsTUFBakIsQ0FBd0JFLGNBQXhCLEdBQXlDO0FBQ3hDQyxnQkFBQUEsY0FBYyxFQUFFSixjQUFjLENBQUNJLGNBRFM7QUFFeENDLGdCQUFBQSxNQUFNLEVBQUVMLGNBQWMsQ0FBQ0ssTUFGaUI7QUFHeENDLGdCQUFBQSxVQUFVLEVBQUVOLGNBQWMsQ0FBQ007QUFIYSxlQUF6QztBQUtBOztBQUNELGdCQUFJUCxnQkFBZ0IsQ0FBQ2IsTUFBakIsSUFBMkJhLGdCQUFnQixDQUFDYixNQUFqQixDQUF3QmdCLFFBQW5ELElBQStEVCxVQUFVLENBQUNNLGdCQUFnQixDQUFDYixNQUFqQixDQUF3QmdCLFFBQXpCLENBQTdFLEVBQWlIO0FBQ2hIRixjQUFBQSxjQUFjLEdBQUdQLFVBQVUsQ0FBQ00sZ0JBQWdCLENBQUNiLE1BQWpCLENBQXdCZ0IsUUFBekIsQ0FBM0I7QUFDQUgsY0FBQUEsZ0JBQWdCLENBQUNiLE1BQWpCLENBQXdCaUIsY0FBeEIsR0FBeUM7QUFDeENDLGdCQUFBQSxjQUFjLEVBQUVKLGNBQWMsQ0FBQ0ksY0FEUztBQUV4Q0MsZ0JBQUFBLE1BQU0sRUFBRUwsY0FBYyxDQUFDSyxNQUZpQjtBQUd4Q0MsZ0JBQUFBLFVBQVUsRUFBRU4sY0FBYyxDQUFDTTtBQUhhLGVBQXpDO0FBS0E7QUFDRCxXQW5CRDtBQW9CQXZELFVBQUFBLFNBQVMsR0FBRztBQUNYd0QsWUFBQUEsVUFBVSxFQUFFWCxXQUREO0FBRVhZLFlBQUFBLFNBQVMsRUFBRWhCLFdBQVcsQ0FBQ2dCLFNBRlo7QUFHWGxGLFlBQUFBLFFBQVEsRUFBRXRGLFNBSEM7QUFJWHlLLFlBQUFBLGdCQUFnQixFQUFFckUsZ0JBQWdCLENBQUMsU0FBRCxDQUFoQixDQUE0QnFFLGdCQUpuQztBQUtYQyxZQUFBQSxjQUFjLEVBQUU5SixjQUFjLENBQUMrSixRQUxwQjtBQU1YeEUsWUFBQUEsZUFBZSxFQUFFSixnQkFOTjtBQU9YNkUsWUFBQUEsU0FBUyxFQUFHcEUsTUFBRCxDQUFnQnFFLE1BQWhCLENBQXVCQyxPQVB2QjtBQVFYQyxZQUFBQSxPQUFPLEVBQUd2RSxNQUFELENBQWdCcUUsTUFBaEIsQ0FBdUJHO0FBUnJCLFdBQVo7O0FBV0EsY0FBSXZMLFVBQVUsQ0FBQ3dMLFdBQWYsRUFBNEI7QUFDM0J4RCxZQUFBQSxNQUFNLENBQUN5RCxNQUFQLENBQWNuRSxTQUFkLEVBQXlCdEgsVUFBVSxDQUFDd0wsV0FBWCxFQUF6QjtBQUNBOztBQUVELGNBQU12SCxjQUFjLEdBQUcvRCxhQUFhLENBQUNnRSxnQkFBZCxFQUF2QjtBQUNBb0QsVUFBQUEsU0FBUyxDQUFDakIsYUFBVixHQUEwQkQsY0FBMUI7QUFDQWtCLFVBQUFBLFNBQVMsQ0FBQ29FLG1CQUFWLEdBQWdDekgsY0FBYyxDQUFDMEgsaUJBQWYsRUFBaEM7QUFDQXJFLFVBQUFBLFNBQVMsQ0FBQ3NFLGlCQUFWLEdBQThCQyxhQUFhLENBQUNDLFNBQWQsQ0FBd0JDLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBeEMsRUFBZ0RqSyxHQUFoRCxDQUFvRCwyQkFBcEQsTUFBcUYsTUFBbkg7QUFDQXNGLFVBQUFBLFNBQVMsQ0FBQzRFLHlCQUFWLEdBQ0N2RixnQkFBZ0IsQ0FBQyxRQUFELENBQWhCLElBQThCQSxnQkFBZ0IsQ0FBQyxRQUFELENBQWhCLENBQTJCd0YsSUFBekQsR0FDR3hGLGdCQUFnQixDQUFDLFFBQUQsQ0FBaEIsQ0FBMkJ3RixJQUEzQixDQUFnQ0QseUJBRG5DLEdBRUc3RyxTQUhKO0FBSUErQixVQUFBQSxjQUFjLEdBQUcsSUFBSU4sU0FBSixDQUFjUSxTQUFkLENBQWpCOztBQUNBLGNBQUlBLFNBQVMsSUFBSUEsU0FBUyxDQUFDOEUsb0JBQTNCLEVBQWlEO0FBQ2hEcEUsWUFBQUEsTUFBTSxDQUFDQyxJQUFQLENBQVlYLFNBQVMsQ0FBQzhFLG9CQUF0QixFQUE0QzlJLE9BQTVDLENBQW9ELFVBQVMrSSxlQUFULEVBQWtDO0FBQ3JGLGtCQUFJQSxlQUFlLENBQUNDLE9BQWhCLENBQXdCLEdBQXhCLE1BQWlDLENBQUMsQ0FBdEMsRUFBeUM7QUFDeEMsb0JBQU1DLHFCQUFxQixHQUFHQywyQkFBMkIsQ0FBQ0Msd0JBQTVCLENBQXFESixlQUFyRCxFQUFzRWhNLFVBQXRFLENBQTlCO0FBQ0FpSCxnQkFBQUEsU0FBUyxDQUFDOEUsb0JBQVYsQ0FBK0JHLHFCQUEvQixJQUF3RGpGLFNBQVMsQ0FBQzhFLG9CQUFWLENBQStCQyxlQUEvQixDQUF4RDtBQUNBO0FBQ0QsYUFMRDtBQU1BOztBQUNEdEgsVUFBQUEsa0JBQWtCLENBQUMySCxZQUFuQixDQUFnQ3JNLFVBQWhDLEVBQTRDSCxhQUFhLENBQUNvRSwwQkFBZCxHQUEyQ0MsZUFBM0MsRUFBNUM7QUFDQTRDLFVBQUFBLFVBQVUsR0FBRyxJQUFJd0YsYUFBSixDQUFrQixZQUFNO0FBQ3BDLGdCQUFJO0FBQ0gsa0JBQUksQ0FBQyxDQUFDaEksZUFBTixFQUF1QjtBQUN0Qix1QkFBT0EsZUFBUDtBQUNBLGVBRkQsTUFFTztBQUNOLG9CQUFNaUksWUFBWSxHQUFHMU0sYUFBYSxDQUFDMk0sY0FBZCxFQUFyQjtBQUNBLG9CQUFNQyxXQUFXLEdBQUdGLFlBQVksQ0FBQ0csU0FBYixHQUF5QjdMLE1BQTdDO0FBQ0Esb0JBQU04TCxtQkFBbUIsR0FBR2xJLGlCQUFpQixDQUFDbUksV0FBbEIsQ0FDM0I3RyxjQUQyQixFQUUzQi9GLFVBRjJCLEVBRzNCaUgsU0FIMkIsRUFJM0JzRixZQUoyQixFQUszQnRHLGdCQUwyQixFQU0zQnBHLGFBQWEsQ0FBQ29FLDBCQUFkLEdBQTJDQyxlQUEzQyxFQU4yQixDQUE1QjtBQVNBLG9CQUFNMkksT0FBTyxHQUFHTixZQUFZLENBQUNHLFNBQWIsRUFBaEI7QUFDQSxvQkFBTUksWUFBWSxHQUFHRCxPQUFPLENBQUNFLEtBQVIsQ0FBY04sV0FBZCxDQUFyQjs7QUFDQSxvQkFBSUssWUFBWSxDQUFDak0sTUFBYixHQUFzQixDQUExQixFQUE2QjtBQUM1QitFLGtCQUFBQSxHQUFHLENBQUNvSCxPQUFKLENBQ0MsNkdBREQ7QUFHQSxpQkFsQkssQ0FtQk47OztBQUNBLGdCQUFBLE1BQUksQ0FBQ0MsZUFBTCxDQUFxQjVKLGtCQUFyQixFQUF5Q3NKLG1CQUF6Qzs7QUFDQSx1QkFBT0EsbUJBQVA7QUFDQTtBQUNELGFBMUJELENBMEJFLE9BQU85RyxLQUFQLEVBQWM7QUFDZkQsY0FBQUEsR0FBRyxDQUFDQyxLQUFKLENBQVVBLEtBQVYsRUFBaUJBLEtBQWpCO0FBQ0EscUJBQU8sRUFBUDtBQUNBO0FBQ0QsV0EvQlksRUErQlY3RixVQS9CVSxDQUFiOztBQWlDQSxjQUFJLENBQUM2RyxNQUFMLEVBQWE7QUFDWkcsWUFBQUEsYUFBYSxHQUFHRSxlQUFlLEVBQS9CLENBRFksQ0FFWjs7QUFDQXZILFlBQUFBLFVBQVUsQ0FBQzBKLFFBQVgsQ0FBb0J2QyxVQUFwQixFQUFnQyxZQUFoQztBQUNBLG1CQUFPbkgsVUFBVSxDQUFDdUosVUFBWCxDQUFzQixZQUFNO0FBQ2xDLHFCQUFPQyxJQUFJLENBQUNDLE1BQUwsQ0FBWXBDLGFBQVosRUFDTDVELEtBREssQ0FDQzBGLGVBREQsRUFFTDVHLElBRkssQ0FFQSxVQUFDb0QsS0FBRCxFQUFnQjtBQUNyQixnQkFBQSxNQUFJLENBQUNBLEtBQUwsR0FBYUEsS0FBYjs7QUFDQSxnQkFBQSxNQUFJLENBQUNBLEtBQUwsQ0FBVytELFFBQVgsQ0FBb0IsSUFBSUMsa0JBQUosQ0FBdUIsTUFBSSxDQUFDaEUsS0FBNUIsQ0FBcEIsRUFBd0QsT0FBeEQ7O0FBQ0EsZ0JBQUEsTUFBSSxDQUFDQSxLQUFMLENBQVcrRCxRQUFYLENBQW9CdEMsY0FBcEIsRUFBb0MsVUFBcEM7O0FBQ0FwSCxnQkFBQUEsVUFBVSxDQUFDNEosY0FBWCxDQUEwQixhQUExQixFQUF5QyxNQUFJLENBQUNqRSxLQUE5QztBQUNBLHVCQUFPNUIsU0FBUDtBQUNBLGVBUkssRUFTTE4sS0FUSyxDQVNDd0MsR0FBRyxDQUFDQyxLQVRMLENBQVA7QUFVQSxhQVhNLENBQVA7QUFZQTtBQUNELFNBakhLLEVBa0hMekMsS0FsSEssQ0FrSEMsVUFBU3lDLEtBQVQsRUFBcUI7QUFDM0JELFVBQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVQSxLQUFLLENBQUNtRCxPQUFoQixFQUF5Qm5ELEtBQXpCO0FBQ0EsZ0JBQU0sSUFBSXFILEtBQUosQ0FBVSxpQ0FBaUNySCxLQUEzQyxDQUFOO0FBQ0EsU0FySEssQ0FBUDtBQXNIQTs7O2FBQ0QsbUJBQVU7QUFDVCxlQUFPLEtBQUtQLEtBQVo7QUFDQTs7O2FBQ0Qsd0JBQW9CO0FBQ25CLGVBQU8sSUFBUDtBQUNBOzs7YUFDRCxnQkFBTztBQUNOO0FBQ0EsYUFBS25ELHFCQUFMLElBQThCLEtBQUtBLHFCQUFMLENBQTJCa0QsT0FBM0IsRUFBOUI7QUFDQSxhQUFLN0Msb0JBQUwsSUFBNkIsS0FBS0Esb0JBQUwsQ0FBMEI2QyxPQUExQixFQUE3QjtBQUNBLGFBQUszRSxRQUFMLENBQWN5TSxvQkFBZDtBQUNBOzs7O0lBdlppQ0MsTzs7TUF5WjdCQywyQjs7Ozs7Ozs7Ozs7Ozs7Ozs0RUFDc0QsRTs7Ozs7OzthQUUzRCx3QkFBZUMsZUFBZixFQUE4RTtBQUM3RUQsUUFBQUEsMkJBQTJCLENBQUNFLGNBQTVCO0FBRUEsWUFBTUMscUJBQXFCLEdBQUcsSUFBSWpPLG9CQUFKLENBQXlCb0ksTUFBTSxDQUFDeUQsTUFBUCxDQUFjO0FBQUV6SyxVQUFBQSxPQUFPLEVBQUU7QUFBWCxTQUFkLEVBQWlDMk0sZUFBakMsQ0FBekIsQ0FBOUI7QUFDQSxlQUFPRSxxQkFBcUIsQ0FBQ2xLLFdBQXRCLENBQWtDcEIsSUFBbEMsQ0FBdUMsWUFBVztBQUN4RG1MLFVBQUFBLDJCQUEyQixDQUFDRSxjQUE1QjtBQUNBLGlCQUFPQyxxQkFBUDtBQUNBLFNBSE0sQ0FBUDtBQUlBOzs7YUFDRCxnQ0FBdUI7QUFDdEIsYUFBS0Msa0JBQUwsR0FBMEIsRUFBMUI7QUFDQTs7O2FBQ0QsMkNBQXlDO0FBQ3hDLGVBQU9KLDJCQUEyQixDQUFDRSxjQUFuQztBQUNBOzs7O0lBakJ3Q0csYzs7U0FvQjNCTCwyQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnlSZWdpc3RyeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5XCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvYmFzZS9NYW5hZ2VkT2JqZWN0TW9kZWxcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCBEeW5hbWljQW5ub3RhdGlvblBhdGhIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRHluYW1pY0Fubm90YXRpb25QYXRoSGVscGVyXCI7XG5pbXBvcnQgQ2FjaGVNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9jYWNoZS9DYWNoZU1hbmFnZXJcIjtcbmltcG9ydCBWZXJzaW9uSW5mbyBmcm9tIFwic2FwL3VpL1ZlcnNpb25JbmZvXCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgVXJpUGFyYW1ldGVycyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9VcmlQYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsU2VydmljZSB9IGZyb20gXCIuL1Jlc291cmNlTW9kZWxTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgeyBDYWNoZUhhbmRsZXJTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS9tYWNyb3NcIjtcbmltcG9ydCBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5cbnR5cGUgVGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncyA9IHt9O1xuXG5jbGFzcyBUZW1wbGF0ZWRWaWV3U2VydmljZSBleHRlbmRzIFNlcnZpY2U8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0b1ZpZXchOiBWaWV3O1xuXHRvUmVzb3VyY2VNb2RlbFNlcnZpY2UhOiBSZXNvdXJjZU1vZGVsU2VydmljZTtcblx0b0NhY2hlSGFuZGxlclNlcnZpY2UhOiBDYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXHRvRmFjdG9yeSE6IFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeTtcblx0cmVzb3VyY2VNb2RlbCE6IFJlc291cmNlTW9kZWw7XG5cdHN0YWJsZUlkITogc3RyaW5nO1xuXHRUZW1wbGF0ZUNvbnZlcnRlcjogYW55O1xuXHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueTtcblx0aW5pdCgpIHtcblx0XHRjb25zdCBhU2VydmljZURlcGVuZGVuY2llcyA9IFtdO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHNTdGFibGVJZCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCkgKyBcIjo6XCIgKyBvQXBwQ29tcG9uZW50LmdldExvY2FsSWQob0NvbXBvbmVudC5nZXRJZCgpKTtcblx0XHRjb25zdCBhRW5oYW5jZUkxOG4gPSBvQ29tcG9uZW50LmdldEVuaGFuY2VJMThuKCkgfHwgW107XG5cdFx0bGV0IHNBcHBOYW1lc3BhY2U7XG5cdFx0dGhpcy5vRmFjdG9yeSA9IG9Db250ZXh0LmZhY3Rvcnk7XG5cdFx0aWYgKGFFbmhhbmNlSTE4bikge1xuXHRcdFx0c0FwcE5hbWVzcGFjZSA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXRDb21wb25lbnROYW1lKCk7XG5cdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFFbmhhbmNlSTE4bi5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHQvLyBJbiBvcmRlciB0byBzdXBwb3J0IHRleHQtdmVydGljYWxpemF0aW9uIGFwcGxpY2F0aW9ucyBjYW4gYWxzbyBwYXNzcyBhIHJlc291cmNlIG1vZGVsIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIFVJNSB0YWtlcyBjYXJlIG9mIHRleHQtdmVydGljYWxpemF0aW9uIGZvciByZXNvdXJjZSBtb2RlbHMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0Ly8gSGVuY2UgY2hlY2sgaWYgdGhlIGdpdmVuIGtleSBpcyBhIHJlc291cmNlIG1vZGVsIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdC8vIGlmIHNvIHRoaXMgbW9kZWwgc2hvdWxkIGJlIHVzZWQgdG8gZW5oYW5jZSB0aGUgc2FwLmZlIHJlc291cmNlIG1vZGVsIHNvIHBhc3MgaXQgYXMgaXQgaXNcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBvQXBwQ29tcG9uZW50LmdldE1vZGVsKGFFbmhhbmNlSTE4bltpXSk7XG5cdFx0XHRcdGlmIChvUmVzb3VyY2VNb2RlbCAmJiBvUmVzb3VyY2VNb2RlbC5pc0EoXCJzYXAudWkubW9kZWwucmVzb3VyY2UuUmVzb3VyY2VNb2RlbFwiKSkge1xuXHRcdFx0XHRcdGFFbmhhbmNlSTE4bltpXSA9IG9SZXNvdXJjZU1vZGVsO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGFFbmhhbmNlSTE4bltpXSA9IHNBcHBOYW1lc3BhY2UgKyBcIi5cIiArIGFFbmhhbmNlSTE4bltpXS5yZXBsYWNlKFwiLnByb3BlcnRpZXNcIiwgXCJcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBzQ2FjaGVJZGVudGlmaWVyID1cblx0XHRcdG9BcHBDb21wb25lbnQuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkgK1xuXHRcdFx0XCJfXCIgK1xuXHRcdFx0c1N0YWJsZUlkICtcblx0XHRcdFwiX1wiICtcblx0XHRcdHNhcC51aVxuXHRcdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdFx0LmdldExhbmd1YWdlVGFnKCk7XG5cdFx0YVNlcnZpY2VEZXBlbmRlbmNpZXMucHVzaChcblx0XHRcdFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzY29wZVR5cGU6IFwiY29tcG9uZW50XCIsXG5cdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG9Db21wb25lbnQsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUubWFjcm9zLm1lc3NhZ2VidW5kbGVcIiwgXCJzYXAuZmUudGVtcGxhdGVzLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRlbmhhbmNlSTE4bjogYUVuaGFuY2VJMThuLFxuXHRcdFx0XHRcdFx0bW9kZWxOYW1lOiBcInNhcC5mZS5pMThuXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChvUmVzb3VyY2VNb2RlbFNlcnZpY2U6IFJlc291cmNlTW9kZWxTZXJ2aWNlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UgPSBvUmVzb3VyY2VNb2RlbFNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9SZXNvdXJjZU1vZGVsU2VydmljZS5nZXRSZXNvdXJjZU1vZGVsKCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNhY2hlSGFuZGxlclNlcnZpY2VcIilcblx0XHRcdFx0LmNyZWF0ZUluc3RhbmNlKHtcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50LFxuXHRcdFx0XHRcdFx0Y29tcG9uZW50OiBvQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob0NhY2hlSGFuZGxlclNlcnZpY2U6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UgPSBvQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdFx0XHRyZXR1cm4gb0NhY2hlSGFuZGxlclNlcnZpY2UudmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdFx0fSlcblx0XHQpO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHQoVmVyc2lvbkluZm8gYXMgYW55KVxuXHRcdFx0XHQubG9hZCgpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uKG9JbmZvOiBhbnkpIHtcblx0XHRcdFx0XHRsZXQgc1RpbWVzdGFtcCA9IFwiXCI7XG5cdFx0XHRcdFx0aWYgKCFvSW5mby5saWJyYXJpZXMpIHtcblx0XHRcdFx0XHRcdHNUaW1lc3RhbXAgPSAoc2FwLnVpIGFzIGFueSkuYnVpbGRpbmZvLmJ1aWxkdGltZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b0luZm8ubGlicmFyaWVzLmZvckVhY2goZnVuY3Rpb24ob0xpYnJhcnk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRzVGltZXN0YW1wICs9IG9MaWJyYXJ5LmJ1aWxkVGltZXN0YW1wO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzVGltZXN0YW1wO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFwiPE5PVkFMVUU+XCI7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdGxldCBzUGFnZU1vZGVsQ2FjaGVLZXkgPSBcIlwiO1xuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLmFsbChhU2VydmljZURlcGVuZGVuY2llcylcblx0XHRcdC50aGVuKChhRGVwZW5kZW5jaWVzUmVzdWx0OiBhbnlbXSkgPT4ge1xuXHRcdFx0XHRjb25zdCBzQ2FjaGVLZXkgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzFdO1xuXHRcdFx0XHRjb25zdCBzVmVyc2lvbkluZm8gPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzJdO1xuXHRcdFx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cblx0XHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZXMuaW5pdGlhbGl6ZVNpZGVFZmZlY3RzKG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKSk7XG5cblx0XHRcdFx0c1BhZ2VNb2RlbENhY2hlS2V5ID0gc0NhY2hlS2V5ICsgXCItXCIgKyBzVmVyc2lvbkluZm8gKyBcIi1cIiArIHNTdGFibGVJZCArIFwiLVwiICsgb1NoZWxsU2VydmljZXMuaW5zdGFuY2VUeXBlICsgXCItcGFnZU1vZGVsXCI7XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLmFsbChhRGVwZW5kZW5jaWVzUmVzdWx0LmNvbmNhdChbdGhpcy5fZ2V0Q2FjaGVkTW9kZWwoc1BhZ2VNb2RlbENhY2hlS2V5KV0pKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzBdO1xuXHRcdFx0XHRjb25zdCBzQ2FjaGVLZXkgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzFdO1xuXHRcdFx0XHRjb25zdCBvUGFnZU1vZGVsQ2FjaGUgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzNdO1xuXHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG5cdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoXG5cdFx0XHRcdFx0XHRbXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCIsIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIl0sXG5cdFx0XHRcdFx0XHQoVGVtcGxhdGVDb252ZXJ0ZXI6IGFueSwgTWV0YU1vZGVsQ29udmVydGVyOiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNyZWF0ZVZpZXcoXG5cdFx0XHRcdFx0XHRcdFx0XHRvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0XHRcdHNTdGFibGVJZCxcblx0XHRcdFx0XHRcdFx0XHRcdHNDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdHNQYWdlTW9kZWxDYWNoZUtleSxcblx0XHRcdFx0XHRcdFx0XHRcdG9QYWdlTW9kZWxDYWNoZSxcblx0XHRcdFx0XHRcdFx0XHRcdFRlbXBsYXRlQ29udmVydGVyLFxuXHRcdFx0XHRcdFx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyXG5cdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uKHNDYWNoZUtleTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9DYWNoZUhhbmRsZXJTZXJ2aWNlID0gU2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5DYWNoZUhhbmRsZXJTZXJ2aWNlXCIpLmdldEluc3RhbmNlKG9NZXRhTW9kZWwpO1xuXHRcdFx0XHRvQ2FjaGVIYW5kbGVyU2VydmljZS5pbnZhbGlkYXRlSWZOZWVkZWQoc0NhY2hlS2V5LCBzQ2FjaGVJZGVudGlmaWVyKTtcblx0XHRcdH0pO1xuXHR9XG5cdF9nZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IGFueSkge1xuXHRcdGlmIChcblx0XHRcdHNhcC51aVxuXHRcdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdFx0LmdldFZpZXdDYWNoZSgpXG5cdFx0KSB7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVLZXkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdF9zZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IHN0cmluZywgb0NhY2hlTW9kZWw6IGFueSkge1xuXHRcdGlmIChcblx0XHRcdHNhcC51aVxuXHRcdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdFx0LmdldFZpZXdDYWNoZSgpXG5cdFx0KSB7XG5cdFx0XHRDYWNoZU1hbmFnZXIuc2V0KHNDYWNoZUtleSwgb0NhY2hlTW9kZWwpO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8qKlxuXHQgKiBSZWZyZXNoIHRoZSBjdXJyZW50IHZpZXcgdXNpbmcgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBhcyBiZWZvcmUuXG5cdCAqIFRoaXMgaXMgdXNlZnVsIGZvciBvdXIgZGVtb2tpdCAhXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cmVmcmVzaFZpZXcob0NvbXBvbmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1Jvb3RWaWV3ID0gb0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdGlmIChvUm9vdFZpZXcpIHtcblx0XHRcdG9Sb290Vmlldy5kZXN0cm95KCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLm9WaWV3KSB7XG5cdFx0XHR0aGlzLm9WaWV3LmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVmlldyh0aGlzLnJlc291cmNlTW9kZWwsIHRoaXMuc3RhYmxlSWQsIFwiXCIsIFwiXCIsIHVuZGVmaW5lZCwgdGhpcy5UZW1wbGF0ZUNvbnZlcnRlciwgdGhpcy5NZXRhTW9kZWxDb252ZXJ0ZXIpXG5cdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0b0NvbXBvbmVudC5vQ29udGFpbmVyLmludmFsaWRhdGUoKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24ob0Vycm9yOiBhbnkpIHtcblx0XHRcdFx0b0NvbXBvbmVudC5vQ29udGFpbmVyLmludmFsaWRhdGUoKTtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRjcmVhdGVWaWV3KFxuXHRcdG9SZXNvdXJjZU1vZGVsOiBhbnksXG5cdFx0c1N0YWJsZUlkOiBhbnksXG5cdFx0c0NhY2hlS2V5OiBhbnksXG5cdFx0c1BhZ2VNb2RlbENhY2hlS2V5OiBhbnksXG5cdFx0b1BhZ2VNb2RlbENhY2hlOiBhbnksXG5cdFx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueSxcblx0XHRNZXRhTW9kZWxDb252ZXJ0ZXI6IGFueVxuXHQpIHtcblx0XHR0aGlzLnJlc291cmNlTW9kZWwgPSBvUmVzb3VyY2VNb2RlbDtcblx0XHR0aGlzLnN0YWJsZUlkID0gc1N0YWJsZUlkO1xuXHRcdHRoaXMuVGVtcGxhdGVDb252ZXJ0ZXIgPSBUZW1wbGF0ZUNvbnZlcnRlcjtcblx0XHR0aGlzLk1ldGFNb2RlbENvbnZlcnRlciA9IE1ldGFNb2RlbENvbnZlcnRlcjtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG1TZXJ2aWNlU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRjb25zdCBzQ29udmVydGVyVHlwZSA9IG1TZXJ2aWNlU2V0dGluZ3MuY29udmVydGVyVHlwZTtcblx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpO1xuXHRcdGNvbnN0IHNGdWxsQ29udGV4dFBhdGggPSBvQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudCkub3B0aW9ucy5zZXR0aW5ncy5mdWxsQ29udGV4dFBhdGg7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudDogYW55ID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpO1xuXHRcdGNvbnN0IG9EZXZpY2VNb2RlbCA9IG5ldyBKU09OTW9kZWwoc2FwLnVpLkRldmljZSkuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdGNvbnN0IG9NYW5pZmVzdE1vZGVsID0gbmV3IEpTT05Nb2RlbChvTWFuaWZlc3RDb250ZW50KTtcblx0XHRjb25zdCBiRXJyb3IgPSBmYWxzZTtcblx0XHRsZXQgb1BhZ2VNb2RlbDogVGVtcGxhdGVNb2RlbCwgb1ZpZXdEYXRhTW9kZWw6IE1vZGVsLCBvVmlld1NldHRpbmdzOiBhbnksIG1WaWV3RGF0YTogYW55O1xuXG5cdFx0ZnVuY3Rpb24gZ2V0Vmlld1NldHRpbmdzKCkge1xuXHRcdFx0Y29uc3QgYVNwbGl0UGF0aCA9IHNGdWxsQ29udGV4dFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBhU3BsaXRQYXRoLnJlZHVjZShmdW5jdGlvbihzUGF0aFNvRmFyOiBhbnksIHNOZXh0UGF0aFBhcnQ6IGFueSkge1xuXHRcdFx0XHRpZiAoc05leHRQYXRoUGFydCA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHJldHVybiBzUGF0aFNvRmFyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzUGF0aFNvRmFyID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0c1BhdGhTb0ZhciA9IFwiL1wiICsgc05leHRQYXRoUGFydDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBvVGFyZ2V0ID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc1BhdGhTb0ZhciArIFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nL1wiICsgc05leHRQYXRoUGFydCk7XG5cdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgT2JqZWN0LmtleXMob1RhcmdldCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdFx0c1BhdGhTb0ZhciArPSBcIi8kTmF2aWdhdGlvblByb3BlcnR5QmluZGluZ1wiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRzUGF0aFNvRmFyICs9IFwiL1wiICsgc05leHRQYXRoUGFydDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdH0sIFwiXCIpO1xuXHRcdFx0Y29uc3Qgb1ZpZXdTZXR0aW5ncyA9IHtcblx0XHRcdFx0dHlwZTogXCJYTUxcIixcblx0XHRcdFx0cHJlcHJvY2Vzc29yczoge1xuXHRcdFx0XHRcdHhtbDoge1xuXHRcdFx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogc0VudGl0eVNldFBhdGggPyBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNFbnRpdHlTZXRQYXRoKSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCA/IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bGxDb250ZXh0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogc0Z1bGxDb250ZXh0UGF0aCA/IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0Z1bGxDb250ZXh0UGF0aCkgOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiLCB1bmRlZmluZWQsIHsgbm9SZXNvbHZlOiB0cnVlIH0pLFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YTogbVZpZXdEYXRhID8gb1ZpZXdEYXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIDogbnVsbFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdGZ1bGxDb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogb1Jlc291cmNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XCJkZXZpY2VcIjogb0RldmljZU1vZGVsLCAvLyBUT0RPOiBkaXNjdXNzIG5hbWVzIGhlcmVcblx0XHRcdFx0XHRcdFx0bWFuaWZlc3Q6IG9NYW5pZmVzdE1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLFxuXHRcdFx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhcHBDb21wb25lbnQ6IG9BcHBDb21wb25lbnRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGlkOiBzU3RhYmxlSWQsXG5cdFx0XHRcdHZpZXdOYW1lOiBtU2VydmljZVNldHRpbmdzLnZpZXdOYW1lIHx8IG9Db21wb25lbnQuZ2V0Vmlld05hbWUoKSxcblx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSxcblx0XHRcdFx0Y2FjaGU6IHsga2V5czogW3NDYWNoZUtleV0gfSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRoZWlnaHQ6IFwiMTAwJVwiXG5cdFx0XHR9O1xuXHRcdFx0cmV0dXJuIG9WaWV3U2V0dGluZ3M7XG5cdFx0fVxuXHRcdGNvbnN0IGNyZWF0ZUVycm9yUGFnZSA9IChyZWFzb246IGFueSkgPT4ge1xuXHRcdFx0Ly8ganVzdCByZXBsYWNlIHRoZSB2aWV3IG5hbWUgYW5kIGFkZCBhbiBhZGRpdGlvbmFsIG1vZGVsIGNvbnRhaW5pbmcgdGhlIHJlYXNvbiwgYnV0XG5cdFx0XHQvLyBrZWVwIHRoZSBvdGhlciBzZXR0aW5nc1xuXHRcdFx0TG9nLmVycm9yKHJlYXNvbi5tZXNzYWdlLCByZWFzb24pO1xuXHRcdFx0b1ZpZXdTZXR0aW5ncy52aWV3TmFtZSA9IG1TZXJ2aWNlU2V0dGluZ3MuZXJyb3JWaWV3TmFtZSB8fCBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLnZpZXcuVGVtcGxhdGluZ0Vycm9yUGFnZVwiO1xuXHRcdFx0b1ZpZXdTZXR0aW5ncy5wcmVwcm9jZXNzb3JzLnhtbC5tb2RlbHNbXCJlcnJvclwiXSA9IG5ldyBKU09OTW9kZWwocmVhc29uKTtcblxuXHRcdFx0cmV0dXJuIG9Db21wb25lbnQucnVuQXNPd25lcigoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBWaWV3LmNyZWF0ZShvVmlld1NldHRpbmdzKS50aGVuKChvVmlldzogYW55KSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vVmlldyA9IG9WaWV3O1xuXHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwobmV3IE1hbmFnZWRPYmplY3RNb2RlbCh0aGlzLm9WaWV3KSwgXCIkdmlld1wiKTtcblx0XHRcdFx0XHRvQ29tcG9uZW50LnNldEFnZ3JlZ2F0aW9uKFwicm9vdENvbnRyb2xcIiwgdGhpcy5vVmlldyk7XG5cdFx0XHRcdFx0cmV0dXJuIHNDYWNoZUtleTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9O1xuXHRcdHJldHVybiBvQXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2VydmljZShcInJvdXRpbmdTZXJ2aWNlXCIpXG5cdFx0XHQudGhlbigob1JvdXRpbmdTZXJ2aWNlOiBhbnkpID0+IHtcblx0XHRcdFx0Ly8gUmV0cmlldmUgdGhlIHZpZXdMZXZlbCBmb3IgdGhlIGNvbXBvbmVudFxuXHRcdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9Sb3V0aW5nU2VydmljZS5nZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50KTtcblx0XHRcdFx0Y29uc3QgbU91dGJvdW5kcyA9XG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzO1xuXHRcdFx0XHRjb25zdCBtTmF2aWdhdGlvbiA9IG9Db21wb25lbnQuZ2V0TmF2aWdhdGlvbigpIHx8IHt9O1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtTmF2aWdhdGlvbikuZm9yRWFjaChmdW5jdGlvbihuYXZpZ2F0aW9uT2JqZWN0S2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBuYXZpZ2F0aW9uT2JqZWN0ID0gbU5hdmlnYXRpb25bbmF2aWdhdGlvbk9iamVjdEtleV07XG5cdFx0XHRcdFx0bGV0IG91dGJvdW5kQ29uZmlnO1xuXHRcdFx0XHRcdGlmIChuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbCAmJiBuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZCAmJiBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kXSkge1xuXHRcdFx0XHRcdFx0b3V0Ym91bmRDb25maWcgPSBtT3V0Ym91bmRzW25hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kXTtcblx0XHRcdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogb3V0Ym91bmRDb25maWcuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbjogb3V0Ym91bmRDb25maWcuYWN0aW9uLFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAobmF2aWdhdGlvbk9iamVjdC5jcmVhdGUgJiYgbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmQgJiYgbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZF0pIHtcblx0XHRcdFx0XHRcdG91dGJvdW5kQ29uZmlnID0gbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZF07XG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZERldGFpbCA9IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG91dGJvdW5kQ29uZmlnLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IG91dGJvdW5kQ29uZmlnLmFjdGlvbixcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVyczogb3V0Ym91bmRDb25maWcucGFyYW1ldGVyc1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRtVmlld0RhdGEgPSB7XG5cdFx0XHRcdFx0bmF2aWdhdGlvbjogbU5hdmlnYXRpb24sXG5cdFx0XHRcdFx0dmlld0xldmVsOiBvVGFyZ2V0SW5mby52aWV3TGV2ZWwsXG5cdFx0XHRcdFx0c3RhYmxlSWQ6IHNTdGFibGVJZCxcblx0XHRcdFx0XHRjb250ZW50RGVuc2l0aWVzOiBvTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXS5jb250ZW50RGVuc2l0aWVzLFxuXHRcdFx0XHRcdHJlc291cmNlQnVuZGxlOiBvUmVzb3VyY2VNb2RlbC5fX2J1bmRsZSxcblx0XHRcdFx0XHRmdWxsQ29udGV4dFBhdGg6IHNGdWxsQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0aXNEZXNrdG9wOiAoRGV2aWNlIGFzIGFueSkuc3lzdGVtLmRlc2t0b3AsXG5cdFx0XHRcdFx0aXNQaG9uZTogKERldmljZSBhcyBhbnkpLnN5c3RlbS5waG9uZVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdGlmIChvQ29tcG9uZW50LmdldFZpZXdEYXRhKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihtVmlld0RhdGEsIG9Db21wb25lbnQuZ2V0Vmlld0RhdGEoKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBvU2hlbGxTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRtVmlld0RhdGEuY29udmVydGVyVHlwZSA9IHNDb252ZXJ0ZXJUeXBlO1xuXHRcdFx0XHRtVmlld0RhdGEuc2hlbGxDb250ZW50RGVuc2l0eSA9IG9TaGVsbFNlcnZpY2VzLmdldENvbnRlbnREZW5zaXR5KCk7XG5cdFx0XHRcdG1WaWV3RGF0YS51c2VOZXdMYXp5TG9hZGluZyA9IFVyaVBhcmFtZXRlcnMuZnJvbVF1ZXJ5KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldChcInNhcC1mZS14eC1sYXp5bG9hZGluZ3Rlc3RcIikgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHRtVmlld0RhdGEucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCA9XG5cdFx0XHRcdFx0b01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXSAmJiBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmZvcm1cblx0XHRcdFx0XHRcdD8gb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXS5mb3JtLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Rcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRvVmlld0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwobVZpZXdEYXRhKTtcblx0XHRcdFx0aWYgKG1WaWV3RGF0YSAmJiBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pIHtcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pLmZvckVhY2goZnVuY3Rpb24oc0Fubm90YXRpb25QYXRoOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdGlmIChzQW5ub3RhdGlvblBhdGguaW5kZXhPZihcIltcIikgIT09IC0xKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHNUYXJnZXRBbm5vdGF0aW9uUGF0aCA9IER5bmFtaWNBbm5vdGF0aW9uUGF0aEhlbHBlci5yZXNvbHZlRHluYW1pY0V4cHJlc3Npb24oc0Fubm90YXRpb25QYXRoLCBvTWV0YU1vZGVsKTtcblx0XHRcdFx0XHRcdFx0bVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NUYXJnZXRBbm5vdGF0aW9uUGF0aF0gPSBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb25bc0Fubm90YXRpb25QYXRoXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydFR5cGVzKG9NZXRhTW9kZWwsIG9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKSk7XG5cdFx0XHRcdG9QYWdlTW9kZWwgPSBuZXcgVGVtcGxhdGVNb2RlbCgoKSA9PiB7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGlmICghIW9QYWdlTW9kZWxDYWNoZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1BhZ2VNb2RlbENhY2hlO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0RpYWdub3N0aWNzID0gb0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBpSXNzdWVDb3VudCA9IG9EaWFnbm9zdGljcy5nZXRJc3N1ZXMoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJQYWdlTW9kZWwgPSBUZW1wbGF0ZUNvbnZlcnRlci5jb252ZXJ0UGFnZShcblx0XHRcdFx0XHRcdFx0XHRzQ29udmVydGVyVHlwZSxcblx0XHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcdG1WaWV3RGF0YSxcblx0XHRcdFx0XHRcdFx0XHRvRGlhZ25vc3RpY3MsXG5cdFx0XHRcdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKClcblx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRjb25zdCBhSXNzdWVzID0gb0RpYWdub3N0aWNzLmdldElzc3VlcygpO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhQWRkZWRJc3N1ZXMgPSBhSXNzdWVzLnNsaWNlKGlJc3N1ZUNvdW50KTtcblx0XHRcdFx0XHRcdFx0aWYgKGFBZGRlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRcdFx0XHRcIlNvbWUgaXNzdWVzIGhhdmUgYmVlbiBkZXRlY3RlZCBpbiB5b3VyIHByb2plY3QsIHBsZWFzZSBjaGVjayB0aGUgVUk1IHN1cHBvcnQgYXNzaXN0YW50IHJ1bGUgZm9yIHNhcC5mZS5jb3JlXCJcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIEZpcmUgYW5kIGZvcmdldCBpbiB0aGUgY2FjaGVcblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0Q2FjaGVkTW9kZWwoc1BhZ2VNb2RlbENhY2hlS2V5LCBvQ29udmVydGVyUGFnZU1vZGVsKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9Db252ZXJ0ZXJQYWdlTW9kZWw7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciwgZXJyb3IpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSwgb01ldGFNb2RlbCk7XG5cblx0XHRcdFx0aWYgKCFiRXJyb3IpIHtcblx0XHRcdFx0XHRvVmlld1NldHRpbmdzID0gZ2V0Vmlld1NldHRpbmdzKCk7XG5cdFx0XHRcdFx0Ly8gU2V0dGluZyB0aGUgcGFnZU1vZGVsIG9uIHRoZSBjb21wb25lbnQgZm9yIHBvdGVudGlhbCByZXVzZVxuXHRcdFx0XHRcdG9Db21wb25lbnQuc2V0TW9kZWwob1BhZ2VNb2RlbCwgXCJfcGFnZU1vZGVsXCIpO1xuXHRcdFx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFZpZXcuY3JlYXRlKG9WaWV3U2V0dGluZ3MpXG5cdFx0XHRcdFx0XHRcdC5jYXRjaChjcmVhdGVFcnJvclBhZ2UpXG5cdFx0XHRcdFx0XHRcdC50aGVuKChvVmlldzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldyA9IG9WaWV3O1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwobmV3IE1hbmFnZWRPYmplY3RNb2RlbCh0aGlzLm9WaWV3KSwgXCIkdmlld1wiKTtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG9WaWV3RGF0YU1vZGVsLCBcInZpZXdEYXRhXCIpO1xuXHRcdFx0XHRcdFx0XHRcdG9Db21wb25lbnQuc2V0QWdncmVnYXRpb24oXCJyb290Q29udHJvbFwiLCB0aGlzLm9WaWV3KTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0XHQuY2F0Y2goTG9nLmVycm9yKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbihlcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvci5tZXNzYWdlLCBlcnJvcik7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIkVycm9yIHdoaWxlIGNyZWF0aW5nIHZpZXcgOiBcIiArIGVycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cdGdldFZpZXcoKSB7XG5cdFx0cmV0dXJuIHRoaXMub1ZpZXc7XG5cdH1cblx0Z2V0SW50ZXJmYWNlKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZXhpdCgpIHtcblx0XHQvLyBEZXJlZ2lzdGVyIGdsb2JhbCBpbnN0YW5jZVxuXHRcdHRoaXMub1Jlc291cmNlTW9kZWxTZXJ2aWNlICYmIHRoaXMub1Jlc291cmNlTW9kZWxTZXJ2aWNlLmRlc3Ryb3koKTtcblx0XHR0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlICYmIHRoaXMub0NhY2hlSGFuZGxlclNlcnZpY2UuZGVzdHJveSgpO1xuXHRcdHRoaXMub0ZhY3RvcnkucmVtb3ZlR2xvYmFsSW5zdGFuY2UoKTtcblx0fVxufVxuY2xhc3MgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlZFZpZXdTZXJ2aWNlPiA9IHt9O1xuXHRzdGF0aWMgaUNyZWF0aW5nVmlld3M6IDA7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3MrKztcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZWRWaWV3U2VydmljZSA9IG5ldyBUZW1wbGF0ZWRWaWV3U2VydmljZShPYmplY3QuYXNzaWduKHsgZmFjdG9yeTogdGhpcyB9LCBvU2VydmljZUNvbnRleHQpKTtcblx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlLmluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3MtLTtcblx0XHRcdHJldHVybiBvVGVtcGxhdGVkVmlld1NlcnZpY2U7XG5cdFx0fSk7XG5cdH1cblx0cmVtb3ZlR2xvYmFsSW5zdGFuY2UoKSB7XG5cdFx0dGhpcy5fb0luc3RhbmNlUmVnaXN0cnkgPSB7fTtcblx0fVxuXHRzdGF0aWMgZ2V0TnVtYmVyT2ZWaWV3c0luQ3JlYXRpb25TdGF0ZSgpIHtcblx0XHRyZXR1cm4gVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
|