@sapui5/sap.fe.templates 1.98.0 → 1.101.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 +9 -6
- package/src/sap/fe/templates/.library +1 -2
- package/src/sap/fe/templates/AnalyticalListPage/Component.js +25 -12
- package/src/sap/fe/templates/AnalyticalListPage/Component.ts +6 -0
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +31 -32
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.ts +25 -0
- package/src/sap/fe/templates/Feedback.js +80 -0
- package/src/sap/fe/templates/Feedback.ts +67 -0
- package/src/sap/fe/templates/ListComponent.js +157 -118
- package/src/sap/fe/templates/ListComponent.ts +105 -0
- package/src/sap/fe/templates/ListReport/Component.js +83 -39
- package/src/sap/fe/templates/ListReport/Component.ts +39 -0
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +124 -107
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +100 -0
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +34 -27
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +1112 -1001
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +1009 -0
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +55 -53
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.ts +55 -0
- package/src/sap/fe/templates/ListReport/overrides/Share.js +135 -136
- package/src/sap/fe/templates/ListReport/overrides/Share.ts +134 -0
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +444 -406
- package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +413 -0
- package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +31 -23
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +72 -0
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +62 -0
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleModeOld.fragment.xml +50 -0
- package/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +479 -473
- package/src/sap/fe/templates/ObjectPage/AnnotationHelper.ts +511 -0
- package/src/sap/fe/templates/ObjectPage/Component.js +170 -149
- package/src/sap/fe/templates/ObjectPage/Component.ts +131 -0
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +141 -142
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +116 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +14 -53
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1531 -1464
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +1442 -0
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +137 -95
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.ts +84 -0
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +25 -21
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.ts +10 -0
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +99 -53
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +50 -0
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +21 -16
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.ts +15 -0
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +51 -47
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.ts +47 -0
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +35 -34
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.ts +34 -0
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +16 -15
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.ts +13 -0
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +12 -11
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.ts +7 -0
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +56 -52
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.ts +57 -0
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +16 -17
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.ts +13 -0
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +14 -17
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.ts +14 -0
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +24 -21
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.ts +21 -0
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +311 -317
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +316 -0
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +67 -57
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.ts +65 -0
- package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +1 -1
- package/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +3 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +18 -24
- package/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +38 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/FooterContent.fragment.xml +9 -5
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +33 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingAvatar.fragment.xml +17 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +18 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +3 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +3 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/SwitchDraftAndActiveObjectPopOver.fragment.xml +27 -0
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +852 -815
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.ts +795 -0
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +206 -187
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.ts +178 -0
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +485 -459
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.ts +438 -0
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +17 -14
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.ts +20 -0
- package/src/sap/fe/templates/TableScroller.js +46 -53
- package/src/sap/fe/templates/TableScroller.ts +48 -0
- package/src/sap/fe/templates/controls/Chart.fragment.xml +18 -17
- package/src/sap/fe/templates/controls/MacroChart.fragment.xml +22 -0
- package/src/sap/fe/templates/library.js +50 -63
- package/src/sap/fe/templates/library.ts +57 -0
- package/src/sap/fe/templates/messagebundle.properties +32 -36
- package/src/sap/fe/templates/messagebundle_ar.properties +15 -8
- package/src/sap/fe/templates/messagebundle_bg.properties +15 -8
- package/src/sap/fe/templates/messagebundle_ca.properties +15 -8
- package/src/sap/fe/templates/messagebundle_cs.properties +15 -8
- package/src/sap/fe/templates/messagebundle_cy.properties +15 -8
- package/src/sap/fe/templates/messagebundle_da.properties +15 -8
- package/src/sap/fe/templates/messagebundle_de.properties +15 -8
- package/src/sap/fe/templates/messagebundle_el.properties +16 -9
- package/src/sap/fe/templates/messagebundle_en.properties +15 -8
- package/src/sap/fe/templates/messagebundle_en_GB.properties +15 -8
- package/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +9 -6
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +15 -8
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +15 -8
- package/src/sap/fe/templates/messagebundle_es.properties +15 -8
- package/src/sap/fe/templates/messagebundle_es_MX.properties +15 -8
- package/src/sap/fe/templates/messagebundle_et.properties +15 -8
- package/src/sap/fe/templates/messagebundle_fi.properties +15 -8
- package/src/sap/fe/templates/messagebundle_fr.properties +15 -8
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +15 -8
- package/src/sap/fe/templates/messagebundle_hi.properties +15 -8
- package/src/sap/fe/templates/messagebundle_hr.properties +16 -9
- package/src/sap/fe/templates/messagebundle_hu.properties +15 -8
- package/src/sap/fe/templates/messagebundle_id.properties +17 -10
- package/src/sap/fe/templates/messagebundle_it.properties +15 -8
- package/src/sap/fe/templates/messagebundle_iw.properties +15 -8
- package/src/sap/fe/templates/messagebundle_ja.properties +15 -8
- package/src/sap/fe/templates/messagebundle_kk.properties +15 -8
- package/src/sap/fe/templates/messagebundle_ko.properties +15 -8
- package/src/sap/fe/templates/messagebundle_lt.properties +15 -8
- package/src/sap/fe/templates/messagebundle_lv.properties +15 -8
- package/src/sap/fe/templates/messagebundle_ms.properties +15 -8
- package/src/sap/fe/templates/messagebundle_nl.properties +15 -8
- package/src/sap/fe/templates/messagebundle_no.properties +15 -8
- package/src/sap/fe/templates/messagebundle_pl.properties +15 -8
- package/src/sap/fe/templates/messagebundle_pt.properties +18 -11
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +16 -9
- package/src/sap/fe/templates/messagebundle_ro.properties +15 -8
- package/src/sap/fe/templates/messagebundle_ru.properties +15 -8
- package/src/sap/fe/templates/messagebundle_sh.properties +15 -8
- package/src/sap/fe/templates/messagebundle_sk.properties +15 -8
- package/src/sap/fe/templates/messagebundle_sl.properties +15 -8
- package/src/sap/fe/templates/messagebundle_sv.properties +16 -9
- package/src/sap/fe/templates/messagebundle_th.properties +15 -8
- package/src/sap/fe/templates/messagebundle_tr.properties +15 -8
- package/src/sap/fe/templates/messagebundle_uk.properties +16 -9
- package/src/sap/fe/templates/messagebundle_vi.properties +15 -8
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +15 -8
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +15 -8
- package/ui5.yaml +0 -3
- package/src/sap/fe/templates/ListReport/overrides/MassEdit.js +0 -95
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.xml +0 -49
|
@@ -1,1004 +1,1115 @@
|
|
|
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(["sap/base/Log", "sap/base/util/ObjectPath", "sap/fe/core/CommonUtils", "sap/fe/core/controllerextensions/EditFlow", "sap/fe/core/controllerextensions/IntentBasedNavigation", "sap/fe/core/controllerextensions/InternalIntentBasedNavigation", "sap/fe/core/controllerextensions/InternalRouting", "sap/fe/core/controllerextensions/KPIManagement", "sap/fe/core/controllerextensions/MassEdit", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/Share", "sap/fe/core/controllerextensions/SideEffects", "sap/fe/core/controllerextensions/ViewState", "sap/fe/core/helpers/ClassSupport", "sap/fe/core/helpers/EditState", "sap/fe/core/library", "sap/fe/core/PageController", "sap/fe/macros/chart/ChartRuntime", "sap/fe/macros/chart/ChartUtils", "sap/fe/macros/CommonHelper", "sap/fe/macros/DelegateUtil", "sap/fe/macros/filter/FilterUtils", "sap/fe/macros/table/Utils", "sap/fe/templates/ListReport/ExtensionAPI", "sap/fe/templates/RootContainer/overrides/EditFlow", "sap/fe/templates/TableScroller", "sap/ui/core/Core", "sap/ui/core/mvc/OverrideExecution", "sap/ui/Device", "sap/ui/fl/write/api/ControlPersonalizationWriteAPI", "sap/ui/mdc/p13n/StateUtil", "sap/ui/thirdparty/hasher", "./overrides/IntentBasedNavigation", "./overrides/Share", "./overrides/ViewState"], function (Log, ObjectPath, CommonUtils, EditFlow, IntentBasedNavigation, InternalIntentBasedNavigation, InternalRouting, KPIManagement, MassEdit, Placeholder, Share, SideEffects, ViewState, ClassSupport, EditState, CoreLibrary, PageController, ChartRuntime, ChartUtils, CommonHelper, DelegateUtil, FilterUtils, TableUtils, ExtensionAPI, EditFlowOverrides, TableScroller, Core, OverrideExecution, Device, ControlPersonalizationWriteAPI, StateUtil, hasher, IntentBasedNavigationOverride, ShareOverrides, ViewStateOverrides) {
|
|
6
|
+
"use strict";
|
|
5
7
|
|
|
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
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
)
|
|
8
|
+
var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10;
|
|
9
|
+
|
|
10
|
+
var system = Device.system;
|
|
11
|
+
var usingExtension = ClassSupport.usingExtension;
|
|
12
|
+
var publicExtension = ClassSupport.publicExtension;
|
|
13
|
+
var privateExtension = ClassSupport.privateExtension;
|
|
14
|
+
var finalExtension = ClassSupport.finalExtension;
|
|
15
|
+
var extensible = ClassSupport.extensible;
|
|
16
|
+
var defineUI5Class = ClassSupport.defineUI5Class;
|
|
17
|
+
|
|
18
|
+
function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); }
|
|
19
|
+
|
|
20
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
21
|
+
|
|
22
|
+
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
|
|
23
|
+
|
|
24
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
25
|
+
|
|
26
|
+
function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
|
|
27
|
+
|
|
28
|
+
function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'proposal-class-properties is enabled and runs after the decorators transform.'); }
|
|
29
|
+
|
|
30
|
+
var TemplateContentView = CoreLibrary.TemplateContentView,
|
|
31
|
+
InitialLoadMode = CoreLibrary.InitialLoadMode;
|
|
32
|
+
var ListReportController = (_dec = defineUI5Class("sap.fe.templates.ListReport.ListReportController"), _dec2 = usingExtension(InternalRouting.override({
|
|
33
|
+
onAfterBinding: function () {
|
|
34
|
+
this.getView().getController()._onAfterBinding();
|
|
35
|
+
}
|
|
36
|
+
})), _dec3 = usingExtension(InternalIntentBasedNavigation.override({
|
|
37
|
+
getEntitySet: function () {
|
|
38
|
+
return this.base.getCurrentEntitySet();
|
|
39
|
+
}
|
|
40
|
+
})), _dec4 = usingExtension(SideEffects), _dec5 = usingExtension(IntentBasedNavigation.override(IntentBasedNavigationOverride)), _dec6 = usingExtension(Share.override(ShareOverrides)), _dec7 = usingExtension(EditFlow.override(EditFlowOverrides)), _dec8 = usingExtension(ViewState.override(ViewStateOverrides)), _dec9 = usingExtension(KPIManagement), _dec10 = usingExtension(Placeholder), _dec11 = usingExtension(MassEdit), _dec12 = publicExtension(), _dec13 = finalExtension(), _dec14 = privateExtension(), _dec15 = extensible(OverrideExecution.After), _dec16 = publicExtension(), _dec17 = extensible(OverrideExecution.After), _dec18 = publicExtension(), _dec19 = extensible(OverrideExecution.After), _dec(_class = (_class2 = /*#__PURE__*/function (_PageController) {
|
|
41
|
+
_inheritsLoose(ListReportController, _PageController);
|
|
42
|
+
|
|
43
|
+
function ListReportController() {
|
|
44
|
+
var _this;
|
|
45
|
+
|
|
46
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
47
|
+
args[_key] = arguments[_key];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
_this = _PageController.call.apply(_PageController, [this].concat(args)) || this;
|
|
51
|
+
|
|
52
|
+
_initializerDefineProperty(_this, "_routing", _descriptor, _assertThisInitialized(_this));
|
|
53
|
+
|
|
54
|
+
_initializerDefineProperty(_this, "_intentBasedNavigation", _descriptor2, _assertThisInitialized(_this));
|
|
55
|
+
|
|
56
|
+
_initializerDefineProperty(_this, "sideEffects", _descriptor3, _assertThisInitialized(_this));
|
|
57
|
+
|
|
58
|
+
_initializerDefineProperty(_this, "intentBasedNavigation", _descriptor4, _assertThisInitialized(_this));
|
|
59
|
+
|
|
60
|
+
_initializerDefineProperty(_this, "share", _descriptor5, _assertThisInitialized(_this));
|
|
61
|
+
|
|
62
|
+
_initializerDefineProperty(_this, "editFlow", _descriptor6, _assertThisInitialized(_this));
|
|
63
|
+
|
|
64
|
+
_initializerDefineProperty(_this, "viewState", _descriptor7, _assertThisInitialized(_this));
|
|
65
|
+
|
|
66
|
+
_initializerDefineProperty(_this, "kpiManagement", _descriptor8, _assertThisInitialized(_this));
|
|
67
|
+
|
|
68
|
+
_initializerDefineProperty(_this, "placeholder", _descriptor9, _assertThisInitialized(_this));
|
|
69
|
+
|
|
70
|
+
_initializerDefineProperty(_this, "massEdit", _descriptor10, _assertThisInitialized(_this));
|
|
71
|
+
|
|
72
|
+
_this.handlers = {
|
|
73
|
+
onTabMultiModeChange: function (oEvent) {
|
|
74
|
+
this._updateMultiModeSelectedControl();
|
|
75
|
+
|
|
76
|
+
this._updateMultiControlHiddenStatus();
|
|
77
|
+
|
|
78
|
+
var oFilterBar = this._getFilterBarControl();
|
|
79
|
+
|
|
80
|
+
var oInternalModelContext = this.getView().getBindingContext("internal");
|
|
81
|
+
|
|
82
|
+
var oDisplayedControl = this._getCurrentControl();
|
|
83
|
+
|
|
84
|
+
var oMultiModeControl = this._getMultiModeControl();
|
|
85
|
+
|
|
86
|
+
var sSelectedKey = oMultiModeControl.getSelectedKey();
|
|
87
|
+
var sPreviousSelectedKey = oEvent && oEvent.mParameters ? oEvent.mParameters.previousKey : undefined;
|
|
88
|
+
oInternalModelContext.setProperty("tabs/selected", sSelectedKey);
|
|
89
|
+
|
|
90
|
+
if (oInternalModelContext.getProperty("hasPendingFilters") !== true) {
|
|
91
|
+
// No pending filters into FilterBar
|
|
92
|
+
if (oFilterBar && this._isCustomTab()) {
|
|
93
|
+
var oFilterConditions = oFilterBar.getFilterConditions();
|
|
94
|
+
this.onViewNeedsRefresh({
|
|
95
|
+
filterConditions: oFilterConditions,
|
|
96
|
+
currentTabId: sSelectedKey,
|
|
97
|
+
refreshCause: "tabChanged"
|
|
98
|
+
});
|
|
99
|
+
} else if (!oDisplayedControl.isA("sap.ui.mdc.Chart") && (!oDisplayedControl.getRowBinding() || // first time the tab/table is displayed
|
|
100
|
+
oDisplayedControl.data("outdatedRows") === true)) {
|
|
101
|
+
// Search has been triggered on a different tab {}
|
|
102
|
+
oDisplayedControl.rebind();
|
|
103
|
+
oDisplayedControl.data("outdatedRows", false);
|
|
104
|
+
} else if (oDisplayedControl.isA("sap.ui.mdc.Chart") && (!oDisplayedControl.getControlDelegate()._getChart(oDisplayedControl).getBinding("data") || // first time the tab/chart is displayed
|
|
105
|
+
oDisplayedControl.data("outdatedRows") === true)) {
|
|
106
|
+
var oInnerChart = oDisplayedControl.getControlDelegate()._getChart(oDisplayedControl);
|
|
107
|
+
|
|
108
|
+
oDisplayedControl.getControlDelegate().rebind(oDisplayedControl, oInnerChart.getBindingInfo("data"));
|
|
109
|
+
oDisplayedControl.data("outdatedRows", false);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (oEvent && oEvent.mParameters && sPreviousSelectedKey !== oEvent.mParameters.selectedKey) {
|
|
114
|
+
ControlPersonalizationWriteAPI.add({
|
|
115
|
+
changes: [{
|
|
116
|
+
changeSpecificData: {
|
|
117
|
+
changeType: "selectIconTabBarFilter",
|
|
118
|
+
content: {
|
|
119
|
+
selectedKey: sSelectedKey,
|
|
120
|
+
previousSelectedKey: sPreviousSelectedKey
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
selectorElement: oMultiModeControl
|
|
124
|
+
}]
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
this.getExtensionAPI().updateAppState();
|
|
129
|
+
},
|
|
130
|
+
onFiltersChanged: function (oEvent) {
|
|
131
|
+
var oFilterBar = this._getFilterBarControl();
|
|
132
|
+
|
|
133
|
+
if (oFilterBar) {
|
|
134
|
+
var oInternalModelContext = this.getView().getBindingContext("internal"); // Pending filters into FilterBar to be used for custom views
|
|
135
|
+
|
|
136
|
+
this.onPendingFilters();
|
|
137
|
+
oInternalModelContext.setProperty("appliedFilters", oFilterBar.getAssignedFiltersText().filtersText);
|
|
138
|
+
|
|
139
|
+
if (oEvent.getParameter("conditionsBased")) {
|
|
140
|
+
oInternalModelContext.setProperty("hasPendingFilters", true);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
onVariantSelected: function (oEvent) {
|
|
145
|
+
var _this2 = this;
|
|
146
|
+
|
|
147
|
+
var oVM = oEvent.getSource(); // setTimeout cause the variant needs to be applied before judging the auto search or updating the app state
|
|
148
|
+
|
|
149
|
+
setTimeout(function () {
|
|
150
|
+
if (_this2._isMultiMode()) {
|
|
151
|
+
_this2.handlers.onTabMultiModeChange.apply(_this2, [oEvent]);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (_this2._shouldAutoTriggerSearch(oVM)) {
|
|
155
|
+
// the app state will be updated via onSearch handler
|
|
156
|
+
return _this2._getFilterBarControl().triggerSearch();
|
|
157
|
+
} else {
|
|
158
|
+
_this2.getExtensionAPI().updateAppState();
|
|
159
|
+
}
|
|
160
|
+
}, 0);
|
|
161
|
+
},
|
|
162
|
+
onVariantSaved: function () {
|
|
163
|
+
var _this3 = this;
|
|
164
|
+
|
|
165
|
+
//TODO: Should remove this setTimeOut once Variant Management provides an api to fetch the current variant key on save!!!
|
|
166
|
+
setTimeout(function () {
|
|
167
|
+
_this3.getExtensionAPI().updateAppState();
|
|
168
|
+
}, 1000);
|
|
169
|
+
},
|
|
170
|
+
onSearch: function () {
|
|
171
|
+
var _this4 = this;
|
|
172
|
+
|
|
173
|
+
var oFilterBar = this._getFilterBarControl();
|
|
174
|
+
|
|
175
|
+
var oInternalModelContext = this.getView().getBindingContext("internal");
|
|
176
|
+
var oMdcChart = this.getChartControl();
|
|
177
|
+
var bHideDraft = FilterUtils.getEditStateIsHideDraft(oFilterBar.getConditions());
|
|
178
|
+
oInternalModelContext.setProperty("hasPendingFilters", false);
|
|
179
|
+
oInternalModelContext.setProperty("hideDraftInfo", bHideDraft);
|
|
180
|
+
|
|
181
|
+
if (this._isMultiMode()) {
|
|
182
|
+
var aControls = this._getControls(),
|
|
183
|
+
oMultiModeControl = this._getMultiModeControl();
|
|
184
|
+
|
|
185
|
+
this._setCountsOutDated();
|
|
186
|
+
|
|
187
|
+
if (!this._isCustomTab()) {
|
|
188
|
+
var sDisplayedControlId = this._getCurrentControl().getId();
|
|
189
|
+
|
|
190
|
+
this._updateMultiTabNotApplicableFields(oInternalModelContext, oFilterBar); // This should be done outside the search event handler of the filter bar.
|
|
191
|
+
// The same logic is required when filter bar is hidden and multiple tables exist on the LR.
|
|
192
|
+
// This is currently done in ListReport/overrides/ViewState.js#onAfterStateApplied()
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
aControls.forEach(function (oControl) {
|
|
196
|
+
oControl.data("outdatedRows", oControl.getId() !== sDisplayedControlId);
|
|
197
|
+
});
|
|
198
|
+
} else {
|
|
199
|
+
var oFilterConditions = oFilterBar.getFilterConditions();
|
|
200
|
+
this.onViewNeedsRefresh({
|
|
201
|
+
filterConditions: oFilterConditions,
|
|
202
|
+
currentTabId: oMultiModeControl.getSelectedKey(),
|
|
203
|
+
refreshCause: "search"
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
} else {
|
|
207
|
+
this._updateALPNotApplicableFields(oInternalModelContext, oFilterBar);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (oMdcChart) {
|
|
211
|
+
// disable bound actions TODO: this clears everything for the chart?
|
|
212
|
+
oMdcChart.getBindingContext("internal").setProperty("", {});
|
|
213
|
+
var oPageInternalModelContext = oMdcChart.getBindingContext("pageInternal");
|
|
214
|
+
var sTemplateContentView = oPageInternalModelContext.getProperty(oPageInternalModelContext.getPath() + "/alpContentView");
|
|
215
|
+
|
|
216
|
+
if (sTemplateContentView === TemplateContentView.Chart) {
|
|
217
|
+
this.hasPendingChartChanges = true;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
if (sTemplateContentView === TemplateContentView.Table) {
|
|
221
|
+
this.hasPendingTableChanges = true;
|
|
222
|
+
}
|
|
223
|
+
} // store filter bar conditions to use later while navigation
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
StateUtil.retrieveExternalState(oFilterBar).then(function (oExternalState) {
|
|
227
|
+
_this4.filterBarConditions = oExternalState.filter;
|
|
228
|
+
}).catch(function (oError) {
|
|
229
|
+
Log.error("Error while retrieving the external state", oError);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
if (this.getView().getViewData().liveMode === false) {
|
|
233
|
+
this.getExtensionAPI().updateAppState();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (system.phone) {
|
|
237
|
+
var oDynamicPage = this.getView().byId("fe::ListReport");
|
|
238
|
+
oDynamicPage.setHeaderExpanded(false);
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Triggers an outbound navigation when a user chooses the chevron.
|
|
244
|
+
*
|
|
245
|
+
* @param {object} oController
|
|
246
|
+
* @param {string} sOutboundTarget Name of the outbound target (needs to be defined in the manifest)
|
|
247
|
+
* @param {sap.ui.model.odata.v4.Context} oContext The context that contains the data for the target app
|
|
248
|
+
* @param {string} sCreatePath Create path when the chevron is created.
|
|
249
|
+
* @returns {Promise} Promise which is resolved once the navigation is triggered
|
|
250
|
+
* @ui5-restricted
|
|
251
|
+
* @final
|
|
252
|
+
*/
|
|
253
|
+
onChevronPressNavigateOutBound: function (oController, sOutboundTarget, oContext, sCreatePath) {
|
|
254
|
+
return oController._intentBasedNavigation.onChevronPressNavigateOutBound(oController, sOutboundTarget, oContext, sCreatePath);
|
|
255
|
+
},
|
|
256
|
+
onChartSelectionChanged: function (oEvent) {
|
|
257
|
+
var oMdcChart = oEvent.getSource().getContent(),
|
|
258
|
+
oTable = this._getTable(),
|
|
259
|
+
aData = oEvent.getParameter("data"),
|
|
260
|
+
oInternalModelContext = this.getView().getBindingContext("internal");
|
|
261
|
+
|
|
262
|
+
if (aData) {
|
|
263
|
+
// update action buttons enablement / disablement
|
|
264
|
+
ChartRuntime.fnUpdateChart(oEvent); // update selections on selection or deselection
|
|
265
|
+
|
|
266
|
+
ChartUtils.setChartFilters(oMdcChart);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
var sTemplateContentView = oInternalModelContext.getProperty(oInternalModelContext.getPath() + "/alpContentView");
|
|
270
|
+
|
|
271
|
+
if (sTemplateContentView === TemplateContentView.Chart) {
|
|
272
|
+
this.hasPendingChartChanges = true;
|
|
273
|
+
} else {
|
|
274
|
+
oTable && oTable.rebind();
|
|
275
|
+
this.hasPendingChartChanges = false;
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
onSegmentedButtonPressed: function (oEvent) {
|
|
279
|
+
var sSelectedKey = oEvent.mParameters.key ? oEvent.mParameters.key : null;
|
|
280
|
+
var oInternalModelContext = this.getView().getBindingContext("internal");
|
|
281
|
+
oInternalModelContext.setProperty("alpContentView", sSelectedKey);
|
|
282
|
+
|
|
283
|
+
var oChart = this._getChart();
|
|
284
|
+
|
|
285
|
+
var oTable = this._getTable();
|
|
286
|
+
|
|
287
|
+
var oSegmentedButtonDelegate = {
|
|
288
|
+
onAfterRendering: function () {
|
|
289
|
+
var aItems = oSegmentedButton.getItems();
|
|
290
|
+
aItems.forEach(function (oItem) {
|
|
291
|
+
if (oItem.getKey() === sSelectedKey) {
|
|
292
|
+
oItem.focus();
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
oSegmentedButton.removeEventDelegate(oSegmentedButtonDelegate);
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
var oSegmentedButton = sSelectedKey === TemplateContentView.Table ? this._getSegmentedButton("Table") : this._getSegmentedButton("Chart");
|
|
299
|
+
|
|
300
|
+
if (oSegmentedButton !== oEvent.getSource()) {
|
|
301
|
+
oSegmentedButton.addEventDelegate(oSegmentedButtonDelegate);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
switch (sSelectedKey) {
|
|
305
|
+
case TemplateContentView.Table:
|
|
306
|
+
this._updateTable(oTable);
|
|
307
|
+
|
|
308
|
+
break;
|
|
309
|
+
|
|
310
|
+
case TemplateContentView.Chart:
|
|
311
|
+
this._updateChart(oChart);
|
|
312
|
+
|
|
313
|
+
break;
|
|
314
|
+
|
|
315
|
+
case TemplateContentView.Hybrid:
|
|
316
|
+
this._updateTable(oTable);
|
|
317
|
+
|
|
318
|
+
this._updateChart(oChart);
|
|
319
|
+
|
|
320
|
+
break;
|
|
321
|
+
|
|
322
|
+
default:
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
this.getExtensionAPI().updateAppState();
|
|
327
|
+
},
|
|
328
|
+
onFiltersSegmentedButtonPressed: function (oEvent) {
|
|
329
|
+
if (oEvent.getParameter("key") === "Compact") {
|
|
330
|
+
this._getFilterBarControl().setVisible(true);
|
|
331
|
+
|
|
332
|
+
this.getView().byId(this.getView().getContent()[0].data("visualFilterBarId")).setVisible(false);
|
|
333
|
+
} else {
|
|
334
|
+
this._getFilterBarControl().setVisible(false);
|
|
335
|
+
|
|
336
|
+
this.getView().byId(this.getView().getContent()[0].data("visualFilterBarId")).setVisible(true);
|
|
337
|
+
}
|
|
338
|
+
},
|
|
339
|
+
onStateChanged: function () {
|
|
340
|
+
this.getExtensionAPI().updateAppState();
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
_this.formatters = {
|
|
344
|
+
/**
|
|
345
|
+
* Method to set the message text for the multiple entity sets when fields in the FilterBar need to be ignored.
|
|
346
|
+
*
|
|
347
|
+
* @param this
|
|
348
|
+
* @param {Array} aIgnoredFields Array of ignored fields in the FilterBar for the current tab (multiple entity sets)
|
|
349
|
+
* @param {string} sTabTitle Tab title
|
|
350
|
+
* @param {boolean} bIsChart Flag that indicates whether the control is a chart or not
|
|
351
|
+
* @param {object} oApplySupported ApplySupported for the control
|
|
352
|
+
* @returns {string} Message text
|
|
353
|
+
*/
|
|
354
|
+
setTabMessageStrip: function (aIgnoredFields, sTabTitle, bIsChart, oApplySupported) {
|
|
355
|
+
var sText = "";
|
|
356
|
+
bIsChart = bIsChart === "true" || bIsChart === true;
|
|
357
|
+
|
|
358
|
+
var oFilterBar = this._getFilterBarControl();
|
|
359
|
+
|
|
360
|
+
if (oFilterBar && Array.isArray(aIgnoredFields) && aIgnoredFields.length > 0 && (sTabTitle || bIsChart)) {
|
|
361
|
+
var sFilterBarEntityPath = oFilterBar.data("entityType"),
|
|
362
|
+
oMetaModel = this.getView().getModel().getMetaModel(),
|
|
363
|
+
oResourceBundle = Core.getLibraryResourceBundle("sap.fe.templates"),
|
|
364
|
+
aIgnoredLabels = aIgnoredFields.map(function (sProperty) {
|
|
365
|
+
var oMacroResourceBundle = Core.getLibraryResourceBundle("sap.fe.macros");
|
|
366
|
+
|
|
367
|
+
if (sProperty === "$search") {
|
|
368
|
+
return oMacroResourceBundle ? oMacroResourceBundle.getText("M_FILTERBAR_SEARCH") : "";
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
if (sProperty === "$editState") {
|
|
372
|
+
return oMacroResourceBundle ? oMacroResourceBundle.getText("M_COMMON_FILTERBAR_EDITING_STATUS") : "";
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
var sLabel = oMetaModel.getObject(sFilterBarEntityPath + sProperty + "@com.sap.vocabularies.Common.v1.Label");
|
|
376
|
+
return DelegateUtil.getLocalizedText(sLabel, oFilterBar);
|
|
377
|
+
});
|
|
378
|
+
var bIsSearchIgnored = !oApplySupported.enableSearch;
|
|
379
|
+
|
|
380
|
+
if (oResourceBundle) {
|
|
381
|
+
sText = CommonUtils.getMessageStripText(this.getView(), aIgnoredLabels, oFilterBar, bIsChart, bIsSearchIgnored, sTabTitle, oResourceBundle, DelegateUtil.getLocalizedText);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
return sText;
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
return _this;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
var _proto = ListReportController.prototype;
|
|
392
|
+
|
|
393
|
+
_proto.getExtensionAPI = function getExtensionAPI() {
|
|
394
|
+
if (!this.extensionAPI) {
|
|
395
|
+
this.extensionAPI = new ExtensionAPI(this);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
return this.extensionAPI;
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
_proto.onInit = function onInit() {
|
|
402
|
+
var _this5 = this;
|
|
403
|
+
|
|
404
|
+
PageController.prototype.onInit.apply(this);
|
|
405
|
+
|
|
406
|
+
var aControls = this._getControls();
|
|
407
|
+
|
|
408
|
+
var oInternalModelContext = this.getView().getBindingContext("internal");
|
|
409
|
+
|
|
410
|
+
if (this._isMultiMode()) {
|
|
411
|
+
var oMultiModeTab = this._getMultiModeControl();
|
|
412
|
+
|
|
413
|
+
oInternalModelContext.setProperty("tabs", {
|
|
414
|
+
selected: oMultiModeTab.getSelectedKey() || oMultiModeTab.getItems()[0].getKey()
|
|
415
|
+
});
|
|
416
|
+
aControls.forEach(function (oControl) {
|
|
417
|
+
var oUpdateCounts = function () {
|
|
418
|
+
_this5._updateCounts();
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
CommonUtils.addEventToBindingInfo(oControl, "dataRequested", oUpdateCounts);
|
|
422
|
+
});
|
|
423
|
+
} //TODO: This is only a temporary approach and will be removed once app state behaviour is finalized.
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
oInternalModelContext.setProperty("hasPendingFilters", true);
|
|
427
|
+
oInternalModelContext.setProperty("appliedFilters", "");
|
|
428
|
+
oInternalModelContext.setProperty("hideDraftInfo", false);
|
|
429
|
+
oInternalModelContext.setProperty("uom", {});
|
|
430
|
+
oInternalModelContext.setProperty("scalefactor", {});
|
|
431
|
+
oInternalModelContext.setProperty("scalefactorNumber", {});
|
|
432
|
+
oInternalModelContext.setProperty("currency", {});
|
|
433
|
+
|
|
434
|
+
if (this._hasMultiVisualizations()) {
|
|
435
|
+
var alpContentView = this._getDefaultPath();
|
|
436
|
+
|
|
437
|
+
if (!system.desktop && alpContentView === TemplateContentView.Hybrid) {
|
|
438
|
+
alpContentView = TemplateContentView.Chart;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
oInternalModelContext.setProperty("alpContentView", alpContentView);
|
|
442
|
+
} // Store conditions from filter bar
|
|
443
|
+
// this is later used before navigation to get conditions applied on the filter bar
|
|
444
|
+
|
|
445
|
+
|
|
446
|
+
this.filterBarConditions = {}; // As AppStateHandler.applyAppState triggers a navigation we want to make sure it will
|
|
447
|
+
// happen after the routeMatch event has been processed (otherwise the router gets broken)
|
|
448
|
+
|
|
449
|
+
this.getAppComponent().getRouterProxy().waitForRouteMatchBeforeNavigation();
|
|
450
|
+
this._isMultiMode() && this._updateMultiControlHiddenStatus();
|
|
451
|
+
};
|
|
452
|
+
|
|
453
|
+
_proto.onExit = function onExit() {
|
|
454
|
+
delete this.filterBarConditions;
|
|
455
|
+
delete this._oListReportControl;
|
|
456
|
+
this.extensionAPI && this.extensionAPI.destroy();
|
|
457
|
+
delete this.extensionAPI;
|
|
458
|
+
};
|
|
459
|
+
|
|
460
|
+
_proto._onAfterBinding = function _onAfterBinding() {
|
|
461
|
+
var _this6 = this;
|
|
462
|
+
|
|
463
|
+
var aTables = this._getControls("table");
|
|
464
|
+
|
|
465
|
+
if (EditState.isEditStateDirty()) {
|
|
466
|
+
var oTableBinding = this._getTableBinding();
|
|
467
|
+
|
|
468
|
+
if (oTableBinding) {
|
|
469
|
+
if (!this.sUpdateTimer) {
|
|
470
|
+
this.sUpdateTimer = setTimeout(function () {
|
|
471
|
+
oTableBinding.refresh();
|
|
472
|
+
|
|
473
|
+
if (_this6._isMultiMode()) {
|
|
474
|
+
_this6._setCountsOutDated();
|
|
475
|
+
|
|
476
|
+
_this6._updateCounts();
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
delete _this6.sUpdateTimer;
|
|
480
|
+
}, 0);
|
|
481
|
+
} // Update action enablement and visibility upon table data update.
|
|
482
|
+
|
|
483
|
+
|
|
484
|
+
var fnUpdateTableActions = function () {
|
|
485
|
+
_this6._updateTableActions(aTables);
|
|
486
|
+
|
|
487
|
+
oTableBinding.detachDataReceived(fnUpdateTableActions);
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
oTableBinding.attachDataReceived(fnUpdateTableActions);
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
EditState.setEditStateProcessed();
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
if (!this.sUpdateTimer) {
|
|
497
|
+
this._updateTableActions(aTables);
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
this.pageReady.waitFor(this.getAppComponent().getAppStateHandler().applyAppState());
|
|
501
|
+
};
|
|
502
|
+
|
|
503
|
+
_proto.onBeforeRendering = function onBeforeRendering() {
|
|
504
|
+
PageController.prototype.onBeforeRendering.apply(this);
|
|
505
|
+
};
|
|
506
|
+
|
|
507
|
+
_proto.onAfterRendering = function onAfterRendering() {
|
|
508
|
+
var _this7 = this;
|
|
509
|
+
|
|
510
|
+
this.getView().getModel("sap.fe.i18n").getResourceBundle().then(function (response) {
|
|
511
|
+
_this7.oResourceBundle = response;
|
|
512
|
+
|
|
513
|
+
var aControls = _this7._getControls();
|
|
514
|
+
|
|
515
|
+
var sEntitySet = _this7.getView().getViewData().entitySet;
|
|
516
|
+
|
|
517
|
+
var sText = CommonUtils.getTranslatedText("T_TABLE_AND_CHART_NO_DATA_TEXT", _this7.oResourceBundle, undefined, sEntitySet);
|
|
518
|
+
aControls.forEach(function (oControl) {
|
|
519
|
+
oControl.setNoDataText(sText);
|
|
520
|
+
});
|
|
521
|
+
}).catch(function (oError) {
|
|
522
|
+
Log.error("Error while retrieving the resource bundle", oError);
|
|
523
|
+
});
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
_proto.onPageReady = function onPageReady(mParameters) {
|
|
527
|
+
// Enabling mandatory filter fields message dialog and focusing on them
|
|
528
|
+
if (mParameters.forceFocus) {
|
|
529
|
+
var oFilterBar = this._getFilterBarControl();
|
|
530
|
+
|
|
531
|
+
if (oFilterBar && !oFilterBar.getShowMessages()) {
|
|
532
|
+
oFilterBar.setShowMessages(true);
|
|
533
|
+
oFilterBar.setFocusOnFirstErroneousField();
|
|
534
|
+
}
|
|
535
|
+
} // Remove the handler on back navigation that displays Draft confirmation
|
|
536
|
+
|
|
537
|
+
|
|
538
|
+
this.getAppComponent().getShellServices().setBackNavigation(undefined);
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* Method called when the content of a list report view needs to be refreshed.
|
|
542
|
+
* This happens either when there is a change on the FilterBar and the search is triggered,
|
|
543
|
+
* or when a tab with custom content is selected.
|
|
544
|
+
* This method can be overwritten by the controller extension in case of customization.
|
|
545
|
+
*
|
|
546
|
+
* @param {map} mParameters Map containing the filter conditions of the FilterBar, the currentTabID
|
|
547
|
+
* and the view refresh cause (tabChanged or search).
|
|
548
|
+
* The map looks like this:
|
|
549
|
+
* <code><pre>
|
|
550
|
+
* {
|
|
551
|
+
* filterConditions: {
|
|
552
|
+
* Country: [
|
|
553
|
+
* {
|
|
554
|
+
* operator: "EQ"
|
|
555
|
+
* validated: "NotValidated"
|
|
556
|
+
* values: ["Germany", ...]
|
|
557
|
+
* },
|
|
558
|
+
* ...
|
|
559
|
+
* ]
|
|
560
|
+
* ...
|
|
561
|
+
* },
|
|
562
|
+
* currentTabId: "fe::CustomTab::tab1",
|
|
563
|
+
* refreshCause: "tabChanged" | "search"
|
|
564
|
+
* }
|
|
565
|
+
* </pre></code>
|
|
566
|
+
*
|
|
567
|
+
* @public
|
|
568
|
+
*/
|
|
569
|
+
;
|
|
570
|
+
|
|
571
|
+
_proto. // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
572
|
+
onViewNeedsRefresh = function onViewNeedsRefresh(mParameters) {
|
|
573
|
+
/* To be overriden */
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Method called when a filter or search value has been changed in the FilterBar,
|
|
577
|
+
* but has not been validated yet by the end user (with the 'Go' or 'Search' button).
|
|
578
|
+
* Typically, the content of the current tab is greyed out until the filters are validated.
|
|
579
|
+
* This method can be overwritten by the controller extension in case of customization.
|
|
580
|
+
*
|
|
581
|
+
* @public
|
|
582
|
+
*/
|
|
583
|
+
;
|
|
584
|
+
|
|
585
|
+
_proto.onPendingFilters = function onPendingFilters() {
|
|
586
|
+
/* To be overriden */
|
|
587
|
+
};
|
|
588
|
+
|
|
589
|
+
_proto.getCurrentEntitySet = function getCurrentEntitySet() {
|
|
590
|
+
if (!this._sEntitySet) {
|
|
591
|
+
var oDisplayedControl = this._isMultiMode() && this._getCurrentControl() || this._getTable();
|
|
592
|
+
|
|
593
|
+
this._sEntitySet = oDisplayedControl === null || oDisplayedControl === void 0 ? void 0 : oDisplayedControl.data("targetCollectionPath").slice(1);
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
return this._sEntitySet;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* This method initiates the update of the enabled state of the DataFieldForAction and the visible state of the DataFieldForIBN buttons.
|
|
600
|
+
* @param aTables Array of tables in the list report
|
|
601
|
+
* @private
|
|
602
|
+
*/
|
|
603
|
+
;
|
|
604
|
+
|
|
605
|
+
_proto._updateTableActions = function _updateTableActions(aTables) {
|
|
606
|
+
var aIBNActions = [];
|
|
607
|
+
aTables.forEach(function (oTable) {
|
|
608
|
+
aIBNActions = CommonUtils.getIBNActions(oTable, aIBNActions); // Update 'enabled' property of DataFieldForAction buttons on table toolbar
|
|
609
|
+
// The same is also performed on Table selectionChange event
|
|
610
|
+
|
|
611
|
+
var oInternalModelContext = oTable.getBindingContext("internal"),
|
|
612
|
+
oActionOperationAvailableMap = JSON.parse(CommonHelper.parseCustomData(DelegateUtil.getCustomData(oTable, "operationAvailableMap"))),
|
|
613
|
+
aSelectedContexts = oTable.getSelectedContexts();
|
|
614
|
+
CommonUtils.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts);
|
|
615
|
+
});
|
|
616
|
+
CommonUtils.updateDataFieldForIBNButtonsVisibility(aIBNActions, this.getView());
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* This method scrolls to a specific row on all the available tables.
|
|
620
|
+
*
|
|
621
|
+
* @function
|
|
622
|
+
* @name sap.fe.templates.ListReport.ListReportController.controller#_scrollTablesToRow
|
|
623
|
+
* @param {string} sRowPath The path of the table row context to be scrolled to
|
|
624
|
+
*/
|
|
625
|
+
;
|
|
626
|
+
|
|
627
|
+
_proto._scrollTablesToRow = function _scrollTablesToRow(sRowPath) {
|
|
628
|
+
this._getControls("table").forEach(function (oTable) {
|
|
629
|
+
TableScroller.scrollTableToRow(oTable, sRowPath);
|
|
630
|
+
});
|
|
631
|
+
};
|
|
632
|
+
|
|
633
|
+
_proto._getPageTitleInformation = function _getPageTitleInformation() {
|
|
634
|
+
var oTitleInfo = {
|
|
635
|
+
title: "",
|
|
636
|
+
subtitle: "",
|
|
637
|
+
intent: "",
|
|
638
|
+
icon: ""
|
|
639
|
+
};
|
|
640
|
+
oTitleInfo.title = this.getView().getContent()[0].data().ListReportTitle;
|
|
641
|
+
oTitleInfo.subtitle = this.getView().getContent()[0].data().ListReportSubtitle;
|
|
642
|
+
return oTitleInfo;
|
|
643
|
+
};
|
|
644
|
+
|
|
645
|
+
_proto._getFilterBarControl = function _getFilterBarControl() {
|
|
646
|
+
return this.getView().byId(this._getFilterBarControlId());
|
|
647
|
+
};
|
|
648
|
+
|
|
649
|
+
_proto._getSegmentedButton = function _getSegmentedButton(sControl) {
|
|
650
|
+
return this.getView().byId(this._getSegmentedButtonId(sControl));
|
|
651
|
+
};
|
|
652
|
+
|
|
653
|
+
_proto._getSegmentedButtonId = function _getSegmentedButtonId(sControl) {
|
|
654
|
+
if (sControl === "Chart") {
|
|
655
|
+
return this._getChart().data("segmentedButtonId");
|
|
656
|
+
} else {
|
|
657
|
+
var _this$_getTable;
|
|
658
|
+
|
|
659
|
+
return (_this$_getTable = this._getTable()) === null || _this$_getTable === void 0 ? void 0 : _this$_getTable.data("segmentedButtonId");
|
|
660
|
+
}
|
|
661
|
+
};
|
|
662
|
+
|
|
663
|
+
_proto._getFilterBarControlId = function _getFilterBarControlId() {
|
|
664
|
+
return this.getView().getContent()[0].data("filterBarId");
|
|
665
|
+
};
|
|
666
|
+
|
|
667
|
+
_proto._getChartControlId = function _getChartControlId() {
|
|
668
|
+
return this.getView().getContent()[0].data("singleChartId");
|
|
669
|
+
};
|
|
670
|
+
|
|
671
|
+
_proto.getChartControl = function getChartControl() {
|
|
672
|
+
return this.getView().byId(this._getChartControlId());
|
|
673
|
+
};
|
|
674
|
+
|
|
675
|
+
_proto._getVisualFilterBarControl = function _getVisualFilterBarControl() {
|
|
676
|
+
return this.getView().byId(this._getVisualFilterBarControlId());
|
|
677
|
+
};
|
|
678
|
+
|
|
679
|
+
_proto._getVisualFilterBarControlId = function _getVisualFilterBarControlId() {
|
|
680
|
+
return this.getView().getContent()[0].data("visualFilterBarId");
|
|
681
|
+
};
|
|
682
|
+
|
|
683
|
+
_proto._getMultiModeControl = function _getMultiModeControl() {
|
|
684
|
+
return this.getView().byId("fe::TabMultipleMode");
|
|
685
|
+
};
|
|
686
|
+
|
|
687
|
+
_proto._getTableControlId = function _getTableControlId() {
|
|
688
|
+
return this.getView().getContent()[0].data("singleTableId");
|
|
689
|
+
};
|
|
690
|
+
|
|
691
|
+
_proto._getCurrentControl = function _getCurrentControl() {
|
|
692
|
+
if (!this._oListReportControl) {
|
|
693
|
+
var oMultiModeTab = this._getMultiModeControl();
|
|
694
|
+
|
|
695
|
+
this._oListReportControl = this.getView().byId(oMultiModeTab.getSelectedKey() || oMultiModeTab.getItems()[0].getKey());
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
return this._oListReportControl;
|
|
699
|
+
};
|
|
700
|
+
|
|
701
|
+
_proto._getTable = function _getTable() {
|
|
702
|
+
if (this._isMultiMode()) {
|
|
703
|
+
var oControl = this._getCurrentControl();
|
|
704
|
+
|
|
705
|
+
return oControl && oControl.isA("sap.ui.mdc.Table") ? oControl : undefined;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
return this.getView().byId(this._getTableControlId());
|
|
709
|
+
};
|
|
710
|
+
|
|
711
|
+
_proto._getChart = function _getChart() {
|
|
712
|
+
return this.getView().byId(this._getChartControlId());
|
|
713
|
+
};
|
|
714
|
+
|
|
715
|
+
_proto._getTableBinding = function _getTableBinding(sTableId) {
|
|
716
|
+
var oTableControl = sTableId ? this.getView().byId(sTableId) : this._getTable();
|
|
717
|
+
|
|
718
|
+
var oBinding = oTableControl && oTableControl._getRowBinding();
|
|
719
|
+
|
|
720
|
+
return oBinding;
|
|
721
|
+
};
|
|
722
|
+
|
|
723
|
+
_proto._getControls = function _getControls(sKey) {
|
|
724
|
+
var _this8 = this;
|
|
725
|
+
|
|
726
|
+
if (this._isMultiMode()) {
|
|
727
|
+
var aControls = [];
|
|
728
|
+
|
|
729
|
+
var oTabMultiMode = this._getMultiModeControl();
|
|
730
|
+
|
|
731
|
+
oTabMultiMode.getItems().forEach(function (oItem) {
|
|
732
|
+
var oControl = _this8.getView().byId(oItem.getKey());
|
|
733
|
+
|
|
734
|
+
if (sKey) {
|
|
735
|
+
if (oItem.getKey().indexOf("fe::" + sKey) > -1) {
|
|
736
|
+
oControl && aControls.push(oControl);
|
|
737
|
+
}
|
|
738
|
+
} else {
|
|
739
|
+
oControl && aControls.push(oControl);
|
|
740
|
+
}
|
|
741
|
+
});
|
|
742
|
+
return aControls;
|
|
743
|
+
} else if (sKey === "Chart") {
|
|
744
|
+
var oChart = this._getChart();
|
|
745
|
+
|
|
746
|
+
return oChart ? [oChart] : [];
|
|
747
|
+
} else {
|
|
748
|
+
var oTable = this._getTable();
|
|
749
|
+
|
|
750
|
+
return oTable ? [oTable] : [];
|
|
751
|
+
}
|
|
752
|
+
};
|
|
753
|
+
|
|
754
|
+
_proto._getDefaultPath = function _getDefaultPath() {
|
|
755
|
+
var defaultPath = this.getView().getContent()[0].data("defaultPath");
|
|
756
|
+
|
|
757
|
+
switch (defaultPath) {
|
|
758
|
+
case "primary":
|
|
759
|
+
return TemplateContentView.Chart;
|
|
760
|
+
|
|
761
|
+
case "secondary":
|
|
762
|
+
return TemplateContentView.Table;
|
|
763
|
+
|
|
764
|
+
case "both":
|
|
765
|
+
default:
|
|
766
|
+
return TemplateContentView.Hybrid;
|
|
767
|
+
}
|
|
768
|
+
}
|
|
769
|
+
/**
|
|
770
|
+
* Method to know if ListReport is configured with Multiple Table mode.
|
|
771
|
+
*
|
|
772
|
+
* @function
|
|
773
|
+
* @name _isMultiMode
|
|
774
|
+
* @returns {boolean} Is Multiple Table mode set?
|
|
775
|
+
*/
|
|
776
|
+
;
|
|
777
|
+
|
|
778
|
+
_proto._isMultiMode = function _isMultiMode() {
|
|
779
|
+
if (!this._oListReportControl) {
|
|
780
|
+
this._bMultiMode = !!this._getMultiModeControl();
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
return this._bMultiMode;
|
|
784
|
+
}
|
|
785
|
+
/**
|
|
786
|
+
* Method to know if ListReport is configured with Multiple EntitySets.
|
|
787
|
+
*
|
|
788
|
+
* @function
|
|
789
|
+
* @name _isMultiEntitySets
|
|
790
|
+
* @returns {boolean} Is Multiple EntitySets configuration?
|
|
791
|
+
*/
|
|
792
|
+
;
|
|
793
|
+
|
|
794
|
+
_proto._isMultiEntitySets = function _isMultiEntitySets() {
|
|
795
|
+
return this.getView().getContent()[0].data("isMultiEntitySets") === "true";
|
|
796
|
+
};
|
|
797
|
+
|
|
798
|
+
_proto._hasMultiVisualizations = function _hasMultiVisualizations() {
|
|
799
|
+
return this.getView().getContent()[0].data("hasMultiVisualizations") === "true";
|
|
800
|
+
};
|
|
801
|
+
|
|
802
|
+
_proto._setShareModel = function _setShareModel() {
|
|
803
|
+
// TODO: deactivated for now - currently there is no _templPriv anymore, to be discussed
|
|
804
|
+
// this method is currently not called anymore from the init method
|
|
805
|
+
var fnGetUser = ObjectPath.get("sap.ushell.Container.getUser"); //var oManifest = this.getOwnerComponent().getAppComponent().getMetadata().getManifestEntry("sap.ui");
|
|
806
|
+
//var sBookmarkIcon = (oManifest && oManifest.icons && oManifest.icons.icon) || "";
|
|
807
|
+
//shareModel: Holds all the sharing relevant information and info used in XML view
|
|
808
|
+
|
|
809
|
+
var oShareInfo = {
|
|
810
|
+
bookmarkTitle: document.title,
|
|
811
|
+
//To name the bookmark according to the app title.
|
|
812
|
+
bookmarkCustomUrl: function () {
|
|
813
|
+
var sHash = hasher.getHash();
|
|
814
|
+
return sHash ? "#" + sHash : window.location.href;
|
|
815
|
+
},
|
|
816
|
+
|
|
817
|
+
/*
|
|
818
|
+
To be activated once the FLP shows the count - see comment above
|
|
819
|
+
bookmarkServiceUrl: function() {
|
|
820
|
+
//var oTable = oTable.getInnerTable(); oTable is already the sap.fe table (but not the inner one)
|
|
821
|
+
// we should use table.getListBindingInfo instead of the binding
|
|
822
|
+
var oBinding = oTable.getBinding("rows") || oTable.getBinding("items");
|
|
823
|
+
return oBinding ? fnGetDownloadUrl(oBinding) : "";
|
|
824
|
+
},*/
|
|
825
|
+
isShareInJamActive: !!fnGetUser && fnGetUser().isJamActive()
|
|
826
|
+
};
|
|
827
|
+
var oTemplatePrivateModel = this.getOwnerComponent().getModel("_templPriv");
|
|
828
|
+
oTemplatePrivateModel.setProperty("/listReport/share", oShareInfo);
|
|
829
|
+
}
|
|
830
|
+
/**
|
|
831
|
+
* Hidden tables must be marked as hidden to avoid sending
|
|
832
|
+
* requests when FilterBar is changed or LR is initialized
|
|
833
|
+
* Best workflow would be to suspend table binding but
|
|
834
|
+
* if the user switch quickly between tabs the batch response of previous
|
|
835
|
+
* is received when previous tab is already disabled (binding is suspended) and
|
|
836
|
+
* generates error.
|
|
837
|
+
* A temporary solution (if we find better workflow) is to set a customData and don't trigger
|
|
838
|
+
* rebindTable if this customData is set to true.
|
|
839
|
+
*/
|
|
840
|
+
;
|
|
841
|
+
|
|
842
|
+
_proto._updateMultiControlHiddenStatus = function _updateMultiControlHiddenStatus() {
|
|
843
|
+
var oDisplayedControl = this._getCurrentControl();
|
|
844
|
+
|
|
845
|
+
if (this._isMultiMode() && oDisplayedControl) {
|
|
846
|
+
var sDisplayControlId = oDisplayedControl.getId();
|
|
847
|
+
|
|
848
|
+
var aControls = this._getControls();
|
|
849
|
+
|
|
850
|
+
aControls.forEach(function (oControl) {
|
|
851
|
+
var sControlId = oControl.getId();
|
|
852
|
+
oControl.data("controlHidden", sControlId !== sDisplayControlId);
|
|
853
|
+
});
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
/**
|
|
857
|
+
* Method to update the local UI model of the page with the fields that are not applicable to the filter bar (this is specific to the multiple table scenario).
|
|
858
|
+
*
|
|
859
|
+
* @param {sap.ui.model.context} oInternalModelContext The internal model context
|
|
860
|
+
* @param {sap.ui.mdc.FilterBar} oFilterBar MDC filter bar
|
|
861
|
+
*/
|
|
862
|
+
;
|
|
863
|
+
|
|
864
|
+
_proto._updateMultiTabNotApplicableFields = function _updateMultiTabNotApplicableFields(oInternalModelContext, oFilterBar) {
|
|
865
|
+
var _this9 = this;
|
|
866
|
+
|
|
867
|
+
var mCache = {};
|
|
868
|
+
|
|
869
|
+
var ignoredFields = {},
|
|
870
|
+
ignoredFieldsTitle = {},
|
|
871
|
+
aTables = this._getControls("table"),
|
|
872
|
+
aCharts = this._getControls("Chart");
|
|
873
|
+
|
|
874
|
+
aTables.forEach(function (oTable) {
|
|
875
|
+
var sTableEntityPath = oTable.data("targetCollectionPath"),
|
|
876
|
+
sTableEntitySet = sTableEntityPath.slice(1),
|
|
877
|
+
sTabId = oTable.getParent().getParent().getKey(),
|
|
878
|
+
sTabTitle = oTable.getParent().getParent().getText(),
|
|
879
|
+
sCacheKey = sTableEntitySet + (oTable.data("enableAnalytics") === "true" ? "Analytical" : "Regular");
|
|
880
|
+
|
|
881
|
+
if (!mCache[sCacheKey]) {
|
|
882
|
+
mCache[sCacheKey] = FilterUtils.getNotApplicableFilters(oFilterBar, oTable);
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
ignoredFields[sTabId] = mCache[sCacheKey];
|
|
886
|
+
ignoredFieldsTitle[sTabId] = _this9.formatters.setTabMessageStrip.call(_this9, mCache[sCacheKey], sTabTitle, "false", {});
|
|
887
|
+
});
|
|
888
|
+
aCharts.forEach(function (oChart) {
|
|
889
|
+
var sChartEntityPath = oChart.data("targetCollectionPath"),
|
|
890
|
+
sChartEntitySet = sChartEntityPath.slice(1),
|
|
891
|
+
sTabId = oChart.getParent().getParent().getKey(),
|
|
892
|
+
sTabTitle = oChart.getParent().getParent().getText(),
|
|
893
|
+
sCacheKey = sChartEntitySet + "Chart";
|
|
894
|
+
|
|
895
|
+
if (!mCache[sCacheKey]) {
|
|
896
|
+
mCache[sCacheKey] = FilterUtils.getNotApplicableFilters(oFilterBar, oChart);
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
ignoredFields[sTabId] = mCache[sCacheKey];
|
|
900
|
+
ignoredFieldsTitle[sTabId] = _this9.formatters.setTabMessageStrip.call(_this9, mCache[sCacheKey], sTabTitle, "false", {});
|
|
901
|
+
});
|
|
902
|
+
oInternalModelContext.setProperty("tabs/ignoredFields", ignoredFields);
|
|
903
|
+
oInternalModelContext.setProperty("tabs/ignoredFieldsTitle", ignoredFieldsTitle);
|
|
904
|
+
}
|
|
905
|
+
/**
|
|
906
|
+
* Method to update the local UI model of the page with the fields that are not applicable to the filter bar (this is specific to the ALP scenario).
|
|
907
|
+
*
|
|
908
|
+
* @param {sap.ui.model.context} oInternalModelContext The internal model context
|
|
909
|
+
* @param {sap.ui.mdc.FilterBar} oFilterBar MDC filter bar
|
|
910
|
+
*/
|
|
911
|
+
;
|
|
912
|
+
|
|
913
|
+
_proto._updateALPNotApplicableFields = function _updateALPNotApplicableFields(oInternalModelContext, oFilterBar) {
|
|
914
|
+
var mCache = {};
|
|
915
|
+
|
|
916
|
+
var ignoredFields = {},
|
|
917
|
+
aTables = this._getControls("table"),
|
|
918
|
+
aCharts = this._getControls("Chart");
|
|
919
|
+
|
|
920
|
+
if (!aTables.length || !aCharts.length) {
|
|
921
|
+
// If there's not a table and a chart, we're not in the ALP case
|
|
922
|
+
return;
|
|
923
|
+
} // For the moment, there's nothing for tables...
|
|
924
|
+
|
|
925
|
+
|
|
926
|
+
aCharts.forEach(function (oChart) {
|
|
927
|
+
var sChartEntityPath = oChart.data("targetCollectionPath"),
|
|
928
|
+
sChartEntitySet = sChartEntityPath.slice(1),
|
|
929
|
+
sCacheKey = sChartEntitySet + "Chart";
|
|
930
|
+
|
|
931
|
+
if (!mCache[sCacheKey]) {
|
|
932
|
+
mCache[sCacheKey] = FilterUtils.getNotApplicableFilters(oFilterBar, oChart);
|
|
933
|
+
}
|
|
934
|
+
|
|
935
|
+
ignoredFields[sCacheKey] = mCache[sCacheKey];
|
|
936
|
+
});
|
|
937
|
+
oInternalModelContext.setProperty("controls/ignoredFields", ignoredFields);
|
|
938
|
+
};
|
|
939
|
+
|
|
940
|
+
_proto._updateMultiModeSelectedControl = function _updateMultiModeSelectedControl() {
|
|
941
|
+
this._sEntitySet = undefined;
|
|
942
|
+
this._oListReportControl = undefined;
|
|
943
|
+
|
|
944
|
+
this._getCurrentControl();
|
|
945
|
+
};
|
|
946
|
+
|
|
947
|
+
_proto._updateCounts = function _updateCounts() {
|
|
948
|
+
this._updateMultiModeCounts();
|
|
949
|
+
}
|
|
950
|
+
/**
|
|
951
|
+
* Method to determine if a tab from the list report is a custom tab.
|
|
952
|
+
*
|
|
953
|
+
* @function
|
|
954
|
+
* @name _isCustomTab
|
|
955
|
+
* @returns {boolean} Determines if the tab is a custom tab.
|
|
956
|
+
*/
|
|
957
|
+
;
|
|
958
|
+
|
|
959
|
+
_proto._isCustomTab = function _isCustomTab() {
|
|
960
|
+
var oMultiModeControl = this._getMultiModeControl();
|
|
961
|
+
|
|
962
|
+
return oMultiModeControl && oMultiModeControl.getSelectedKey().indexOf("::CustomTab::") > -1;
|
|
963
|
+
};
|
|
964
|
+
|
|
965
|
+
_proto._setCountsOutDated = function _setCountsOutDated() {
|
|
966
|
+
var oMultiModeControl = this._getMultiModeControl();
|
|
967
|
+
|
|
968
|
+
if (oMultiModeControl && oMultiModeControl.data("showCounts") === "true") {
|
|
969
|
+
var aItems = oMultiModeControl.getItems();
|
|
970
|
+
aItems.forEach(function (oItem) {
|
|
971
|
+
if (oItem.getKey().indexOf("fe::Chart") === -1) {
|
|
972
|
+
oItem.data("outdatedCounts", true);
|
|
973
|
+
}
|
|
974
|
+
});
|
|
975
|
+
}
|
|
976
|
+
};
|
|
977
|
+
|
|
978
|
+
_proto._updateMultiModeCounts = function _updateMultiModeCounts() {
|
|
979
|
+
var _this10 = this;
|
|
980
|
+
|
|
981
|
+
var aBindingPromises = [];
|
|
982
|
+
|
|
983
|
+
var oMultiModeControl = this._getMultiModeControl();
|
|
984
|
+
|
|
985
|
+
if (oMultiModeControl && oMultiModeControl.data("showCounts") === "true" && !this._isCustomTab()) {
|
|
986
|
+
var oDisplayedControl = this._getCurrentControl();
|
|
987
|
+
|
|
988
|
+
var sDisplayedControlId = oDisplayedControl.getId();
|
|
989
|
+
var aCompliantTabs = [];
|
|
990
|
+
var aItems = oMultiModeControl.getItems();
|
|
991
|
+
aItems.forEach(function (oItem) {
|
|
992
|
+
var oControl = _this10.getView().byId(oItem.getKey());
|
|
993
|
+
|
|
994
|
+
if (oControl && !oControl.isA("sap.ui.mdc.Chart") && (oItem.data("outdatedCounts") || oControl.getId() === sDisplayedControlId)) {
|
|
995
|
+
aCompliantTabs.push({
|
|
996
|
+
control: oControl,
|
|
997
|
+
item: oItem
|
|
998
|
+
});
|
|
999
|
+
}
|
|
1000
|
+
});
|
|
1001
|
+
aBindingPromises = aCompliantTabs.map(function (mTab) {
|
|
1002
|
+
mTab.item.setCount("...");
|
|
1003
|
+
var oControl = mTab.control;
|
|
1004
|
+
var oFilterInfos = TableUtils.getFiltersInfoForSV(oControl, mTab.item.data("selectionVariant"));
|
|
1005
|
+
return TableUtils.getListBindingForCount(oControl, _this10.getView().getBindingContext(), {
|
|
1006
|
+
batchGroupId: oControl.getId() === sDisplayedControlId ? oControl.data("batchGroupId") : "$auto",
|
|
1007
|
+
additionalFilters: oFilterInfos.filters
|
|
1008
|
+
});
|
|
1009
|
+
});
|
|
1010
|
+
Promise.all(aBindingPromises).then(function (aCounts) {
|
|
1011
|
+
for (var k in aCounts) {
|
|
1012
|
+
var oItem = aCompliantTabs[k].item;
|
|
1013
|
+
oItem.setCount(TableUtils.getCountFormatted(aCounts[k]));
|
|
1014
|
+
oItem.data("outdatedCounts", false);
|
|
1015
|
+
}
|
|
1016
|
+
}).catch(function (oError) {
|
|
1017
|
+
Log.error("Error while retrieving the values for the icon tab bar", oError);
|
|
1018
|
+
});
|
|
1019
|
+
}
|
|
1020
|
+
};
|
|
1021
|
+
|
|
1022
|
+
_proto._isFilterBarHidden = function _isFilterBarHidden() {
|
|
1023
|
+
return this.getView().getViewData().hideFilterBar;
|
|
1024
|
+
};
|
|
1025
|
+
|
|
1026
|
+
_proto._shouldAutoTriggerSearch = function _shouldAutoTriggerSearch(oVM) {
|
|
1027
|
+
if (this.getView().getViewData().initialLoad === InitialLoadMode.Auto && (!oVM || oVM.getStandardVariantKey() === oVM.getCurrentVariantKey())) {
|
|
1028
|
+
var oFilterBar = this._getFilterBarControl();
|
|
1029
|
+
|
|
1030
|
+
if (oFilterBar) {
|
|
1031
|
+
var oConditions = oFilterBar.getConditions();
|
|
1032
|
+
|
|
1033
|
+
for (var sKey in oConditions) {
|
|
1034
|
+
// ignore filters starting with $ (e.g. $search, $editState)
|
|
1035
|
+
if (!sKey.startsWith("$") && Array.isArray(oConditions[sKey]) && oConditions[sKey].length) {
|
|
1036
|
+
return true;
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
return false;
|
|
1043
|
+
};
|
|
1044
|
+
|
|
1045
|
+
_proto._updateTable = function _updateTable(oTable) {
|
|
1046
|
+
if (!oTable.isTableBound() || this.hasPendingChartChanges) {
|
|
1047
|
+
oTable.rebind();
|
|
1048
|
+
this.hasPendingChartChanges = false;
|
|
1049
|
+
}
|
|
1050
|
+
};
|
|
1051
|
+
|
|
1052
|
+
_proto._updateChart = function _updateChart(oChart) {
|
|
1053
|
+
var oInnerChart = oChart.getControlDelegate()._getChart(oChart);
|
|
1054
|
+
|
|
1055
|
+
if (!(oInnerChart && oInnerChart.isBound("data")) || this.hasPendingTableChanges) {
|
|
1056
|
+
oChart.getControlDelegate().rebind(oChart, oInnerChart.getBindingInfo("data"));
|
|
1057
|
+
this.hasPendingTableChanges = false;
|
|
1058
|
+
}
|
|
1059
|
+
};
|
|
1060
|
+
|
|
1061
|
+
return ListReportController;
|
|
1062
|
+
}(PageController), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "_routing", [_dec2], {
|
|
1063
|
+
configurable: true,
|
|
1064
|
+
enumerable: true,
|
|
1065
|
+
writable: true,
|
|
1066
|
+
initializer: null
|
|
1067
|
+
}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "_intentBasedNavigation", [_dec3], {
|
|
1068
|
+
configurable: true,
|
|
1069
|
+
enumerable: true,
|
|
1070
|
+
writable: true,
|
|
1071
|
+
initializer: null
|
|
1072
|
+
}), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "sideEffects", [_dec4], {
|
|
1073
|
+
configurable: true,
|
|
1074
|
+
enumerable: true,
|
|
1075
|
+
writable: true,
|
|
1076
|
+
initializer: null
|
|
1077
|
+
}), _descriptor4 = _applyDecoratedDescriptor(_class2.prototype, "intentBasedNavigation", [_dec5], {
|
|
1078
|
+
configurable: true,
|
|
1079
|
+
enumerable: true,
|
|
1080
|
+
writable: true,
|
|
1081
|
+
initializer: null
|
|
1082
|
+
}), _descriptor5 = _applyDecoratedDescriptor(_class2.prototype, "share", [_dec6], {
|
|
1083
|
+
configurable: true,
|
|
1084
|
+
enumerable: true,
|
|
1085
|
+
writable: true,
|
|
1086
|
+
initializer: null
|
|
1087
|
+
}), _descriptor6 = _applyDecoratedDescriptor(_class2.prototype, "editFlow", [_dec7], {
|
|
1088
|
+
configurable: true,
|
|
1089
|
+
enumerable: true,
|
|
1090
|
+
writable: true,
|
|
1091
|
+
initializer: null
|
|
1092
|
+
}), _descriptor7 = _applyDecoratedDescriptor(_class2.prototype, "viewState", [_dec8], {
|
|
1093
|
+
configurable: true,
|
|
1094
|
+
enumerable: true,
|
|
1095
|
+
writable: true,
|
|
1096
|
+
initializer: null
|
|
1097
|
+
}), _descriptor8 = _applyDecoratedDescriptor(_class2.prototype, "kpiManagement", [_dec9], {
|
|
1098
|
+
configurable: true,
|
|
1099
|
+
enumerable: true,
|
|
1100
|
+
writable: true,
|
|
1101
|
+
initializer: null
|
|
1102
|
+
}), _descriptor9 = _applyDecoratedDescriptor(_class2.prototype, "placeholder", [_dec10], {
|
|
1103
|
+
configurable: true,
|
|
1104
|
+
enumerable: true,
|
|
1105
|
+
writable: true,
|
|
1106
|
+
initializer: null
|
|
1107
|
+
}), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "massEdit", [_dec11], {
|
|
1108
|
+
configurable: true,
|
|
1109
|
+
enumerable: true,
|
|
1110
|
+
writable: true,
|
|
1111
|
+
initializer: null
|
|
1112
|
+
}), _applyDecoratedDescriptor(_class2.prototype, "getExtensionAPI", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "getExtensionAPI"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPageReady", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onPageReady"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onViewNeedsRefresh", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "onViewNeedsRefresh"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onPendingFilters", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onPendingFilters"), _class2.prototype)), _class2)) || _class);
|
|
1113
|
+
return ListReportController;
|
|
1114
|
+
}, false);
|
|
1115
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOlsiVGVtcGxhdGVDb250ZW50VmlldyIsIkNvcmVMaWJyYXJ5IiwiSW5pdGlhbExvYWRNb2RlIiwiTGlzdFJlcG9ydENvbnRyb2xsZXIiLCJkZWZpbmVVSTVDbGFzcyIsInVzaW5nRXh0ZW5zaW9uIiwiSW50ZXJuYWxSb3V0aW5nIiwib3ZlcnJpZGUiLCJvbkFmdGVyQmluZGluZyIsImdldFZpZXciLCJnZXRDb250cm9sbGVyIiwiX29uQWZ0ZXJCaW5kaW5nIiwiSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXRFbnRpdHlTZXQiLCJiYXNlIiwiZ2V0Q3VycmVudEVudGl0eVNldCIsIlNpZGVFZmZlY3RzIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUiLCJTaGFyZSIsIlNoYXJlT3ZlcnJpZGVzIiwiRWRpdEZsb3ciLCJFZGl0Rmxvd092ZXJyaWRlcyIsIlZpZXdTdGF0ZSIsIlZpZXdTdGF0ZU92ZXJyaWRlcyIsIktQSU1hbmFnZW1lbnQiLCJQbGFjZWhvbGRlciIsIk1hc3NFZGl0IiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJwcml2YXRlRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJoYW5kbGVycyIsIm9uVGFiTXVsdGlNb2RlQ2hhbmdlIiwib0V2ZW50IiwiX3VwZGF0ZU11bHRpTW9kZVNlbGVjdGVkQ29udHJvbCIsIl91cGRhdGVNdWx0aUNvbnRyb2xIaWRkZW5TdGF0dXMiLCJvRmlsdGVyQmFyIiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJvSW50ZXJuYWxNb2RlbENvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9EaXNwbGF5ZWRDb250cm9sIiwiX2dldEN1cnJlbnRDb250cm9sIiwib011bHRpTW9kZUNvbnRyb2wiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsInNTZWxlY3RlZEtleSIsImdldFNlbGVjdGVkS2V5Iiwic1ByZXZpb3VzU2VsZWN0ZWRLZXkiLCJtUGFyYW1ldGVycyIsInByZXZpb3VzS2V5IiwidW5kZWZpbmVkIiwic2V0UHJvcGVydHkiLCJnZXRQcm9wZXJ0eSIsIl9pc0N1c3RvbVRhYiIsIm9GaWx0ZXJDb25kaXRpb25zIiwiZ2V0RmlsdGVyQ29uZGl0aW9ucyIsIm9uVmlld05lZWRzUmVmcmVzaCIsImZpbHRlckNvbmRpdGlvbnMiLCJjdXJyZW50VGFiSWQiLCJyZWZyZXNoQ2F1c2UiLCJpc0EiLCJnZXRSb3dCaW5kaW5nIiwiZGF0YSIsInJlYmluZCIsImdldENvbnRyb2xEZWxlZ2F0ZSIsIl9nZXRDaGFydCIsImdldEJpbmRpbmciLCJvSW5uZXJDaGFydCIsImdldEJpbmRpbmdJbmZvIiwic2VsZWN0ZWRLZXkiLCJDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkiLCJhZGQiLCJjaGFuZ2VzIiwiY2hhbmdlU3BlY2lmaWNEYXRhIiwiY2hhbmdlVHlwZSIsImNvbnRlbnQiLCJwcmV2aW91c1NlbGVjdGVkS2V5Iiwic2VsZWN0b3JFbGVtZW50IiwiZ2V0RXh0ZW5zaW9uQVBJIiwidXBkYXRlQXBwU3RhdGUiLCJvbkZpbHRlcnNDaGFuZ2VkIiwib25QZW5kaW5nRmlsdGVycyIsImdldEFzc2lnbmVkRmlsdGVyc1RleHQiLCJmaWx0ZXJzVGV4dCIsImdldFBhcmFtZXRlciIsIm9uVmFyaWFudFNlbGVjdGVkIiwib1ZNIiwiZ2V0U291cmNlIiwic2V0VGltZW91dCIsIl9pc011bHRpTW9kZSIsImFwcGx5IiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwidHJpZ2dlclNlYXJjaCIsIm9uVmFyaWFudFNhdmVkIiwib25TZWFyY2giLCJvTWRjQ2hhcnQiLCJnZXRDaGFydENvbnRyb2wiLCJiSGlkZURyYWZ0IiwiRmlsdGVyVXRpbHMiLCJnZXRFZGl0U3RhdGVJc0hpZGVEcmFmdCIsImdldENvbmRpdGlvbnMiLCJhQ29udHJvbHMiLCJfZ2V0Q29udHJvbHMiLCJfc2V0Q291bnRzT3V0RGF0ZWQiLCJzRGlzcGxheWVkQ29udHJvbElkIiwiZ2V0SWQiLCJfdXBkYXRlTXVsdGlUYWJOb3RBcHBsaWNhYmxlRmllbGRzIiwiZm9yRWFjaCIsIm9Db250cm9sIiwiX3VwZGF0ZUFMUE5vdEFwcGxpY2FibGVGaWVsZHMiLCJvUGFnZUludGVybmFsTW9kZWxDb250ZXh0Iiwic1RlbXBsYXRlQ29udGVudFZpZXciLCJnZXRQYXRoIiwiQ2hhcnQiLCJoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzIiwiVGFibGUiLCJoYXNQZW5kaW5nVGFibGVDaGFuZ2VzIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwidGhlbiIsIm9FeHRlcm5hbFN0YXRlIiwiZmlsdGVyQmFyQ29uZGl0aW9ucyIsImZpbHRlciIsImNhdGNoIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJnZXRWaWV3RGF0YSIsImxpdmVNb2RlIiwic3lzdGVtIiwicGhvbmUiLCJvRHluYW1pY1BhZ2UiLCJieUlkIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvbkNoZXZyb25QcmVzc05hdmlnYXRlT3V0Qm91bmQiLCJvQ29udHJvbGxlciIsInNPdXRib3VuZFRhcmdldCIsIm9Db250ZXh0Iiwic0NyZWF0ZVBhdGgiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwib25DaGFydFNlbGVjdGlvbkNoYW5nZWQiLCJnZXRDb250ZW50Iiwib1RhYmxlIiwiX2dldFRhYmxlIiwiYURhdGEiLCJDaGFydFJ1bnRpbWUiLCJmblVwZGF0ZUNoYXJ0IiwiQ2hhcnRVdGlscyIsInNldENoYXJ0RmlsdGVycyIsIm9uU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsImtleSIsIm9DaGFydCIsIm9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSIsIm9uQWZ0ZXJSZW5kZXJpbmciLCJhSXRlbXMiLCJvU2VnbWVudGVkQnV0dG9uIiwiZ2V0SXRlbXMiLCJvSXRlbSIsImdldEtleSIsImZvY3VzIiwicmVtb3ZlRXZlbnREZWxlZ2F0ZSIsIl9nZXRTZWdtZW50ZWRCdXR0b24iLCJhZGRFdmVudERlbGVnYXRlIiwiX3VwZGF0ZVRhYmxlIiwiX3VwZGF0ZUNoYXJ0IiwiSHlicmlkIiwib25GaWx0ZXJzU2VnbWVudGVkQnV0dG9uUHJlc3NlZCIsInNldFZpc2libGUiLCJvblN0YXRlQ2hhbmdlZCIsImZvcm1hdHRlcnMiLCJzZXRUYWJNZXNzYWdlU3RyaXAiLCJhSWdub3JlZEZpZWxkcyIsInNUYWJUaXRsZSIsImJJc0NoYXJ0Iiwib0FwcGx5U3VwcG9ydGVkIiwic1RleHQiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJzRmlsdGVyQmFyRW50aXR5UGF0aCIsIm9NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9SZXNvdXJjZUJ1bmRsZSIsIkNvcmUiLCJnZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUiLCJhSWdub3JlZExhYmVscyIsIm1hcCIsInNQcm9wZXJ0eSIsIm9NYWNyb1Jlc291cmNlQnVuZGxlIiwiZ2V0VGV4dCIsInNMYWJlbCIsImdldE9iamVjdCIsIkRlbGVnYXRlVXRpbCIsImdldExvY2FsaXplZFRleHQiLCJiSXNTZWFyY2hJZ25vcmVkIiwiZW5hYmxlU2VhcmNoIiwiQ29tbW9uVXRpbHMiLCJnZXRNZXNzYWdlU3RyaXBUZXh0IiwiZXh0ZW5zaW9uQVBJIiwiRXh0ZW5zaW9uQVBJIiwib25Jbml0IiwiUGFnZUNvbnRyb2xsZXIiLCJwcm90b3R5cGUiLCJvTXVsdGlNb2RlVGFiIiwic2VsZWN0ZWQiLCJvVXBkYXRlQ291bnRzIiwiX3VwZGF0ZUNvdW50cyIsImFkZEV2ZW50VG9CaW5kaW5nSW5mbyIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiYWxwQ29udGVudFZpZXciLCJfZ2V0RGVmYXVsdFBhdGgiLCJkZXNrdG9wIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0Um91dGVyUHJveHkiLCJ3YWl0Rm9yUm91dGVNYXRjaEJlZm9yZU5hdmlnYXRpb24iLCJvbkV4aXQiLCJfb0xpc3RSZXBvcnRDb250cm9sIiwiZGVzdHJveSIsImFUYWJsZXMiLCJFZGl0U3RhdGUiLCJpc0VkaXRTdGF0ZURpcnR5Iiwib1RhYmxlQmluZGluZyIsIl9nZXRUYWJsZUJpbmRpbmciLCJzVXBkYXRlVGltZXIiLCJyZWZyZXNoIiwiZm5VcGRhdGVUYWJsZUFjdGlvbnMiLCJfdXBkYXRlVGFibGVBY3Rpb25zIiwiZGV0YWNoRGF0YVJlY2VpdmVkIiwiYXR0YWNoRGF0YVJlY2VpdmVkIiwic2V0RWRpdFN0YXRlUHJvY2Vzc2VkIiwicGFnZVJlYWR5Iiwid2FpdEZvciIsImdldEFwcFN0YXRlSGFuZGxlciIsImFwcGx5QXBwU3RhdGUiLCJvbkJlZm9yZVJlbmRlcmluZyIsImdldFJlc291cmNlQnVuZGxlIiwicmVzcG9uc2UiLCJzRW50aXR5U2V0IiwiZW50aXR5U2V0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzZXROb0RhdGFUZXh0Iiwib25QYWdlUmVhZHkiLCJmb3JjZUZvY3VzIiwiZ2V0U2hvd01lc3NhZ2VzIiwic2V0U2hvd01lc3NhZ2VzIiwic2V0Rm9jdXNPbkZpcnN0RXJyb25lb3VzRmllbGQiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJfc0VudGl0eVNldCIsInNsaWNlIiwiYUlCTkFjdGlvbnMiLCJnZXRJQk5BY3Rpb25zIiwib0FjdGlvbk9wZXJhdGlvbkF2YWlsYWJsZU1hcCIsIkpTT04iLCJwYXJzZSIsIkNvbW1vbkhlbHBlciIsInBhcnNlQ3VzdG9tRGF0YSIsImdldEN1c3RvbURhdGEiLCJhU2VsZWN0ZWRDb250ZXh0cyIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzZXRBY3Rpb25FbmFibGVtZW50IiwidXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkiLCJfc2Nyb2xsVGFibGVzVG9Sb3ciLCJzUm93UGF0aCIsIlRhYmxlU2Nyb2xsZXIiLCJzY3JvbGxUYWJsZVRvUm93IiwiX2dldFBhZ2VUaXRsZUluZm9ybWF0aW9uIiwib1RpdGxlSW5mbyIsInRpdGxlIiwic3VidGl0bGUiLCJpbnRlbnQiLCJpY29uIiwiTGlzdFJlcG9ydFRpdGxlIiwiTGlzdFJlcG9ydFN1YnRpdGxlIiwiX2dldEZpbHRlckJhckNvbnRyb2xJZCIsInNDb250cm9sIiwiX2dldFNlZ21lbnRlZEJ1dHRvbklkIiwiX2dldENoYXJ0Q29udHJvbElkIiwiX2dldFZpc3VhbEZpbHRlckJhckNvbnRyb2wiLCJfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbElkIiwiX2dldFRhYmxlQ29udHJvbElkIiwic1RhYmxlSWQiLCJvVGFibGVDb250cm9sIiwib0JpbmRpbmciLCJfZ2V0Um93QmluZGluZyIsInNLZXkiLCJvVGFiTXVsdGlNb2RlIiwiaW5kZXhPZiIsInB1c2giLCJkZWZhdWx0UGF0aCIsIl9iTXVsdGlNb2RlIiwiX2lzTXVsdGlFbnRpdHlTZXRzIiwiX3NldFNoYXJlTW9kZWwiLCJmbkdldFVzZXIiLCJPYmplY3RQYXRoIiwiZ2V0Iiwib1NoYXJlSW5mbyIsImJvb2ttYXJrVGl0bGUiLCJkb2N1bWVudCIsImJvb2ttYXJrQ3VzdG9tVXJsIiwic0hhc2giLCJoYXNoZXIiLCJnZXRIYXNoIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwiaXNTaGFyZUluSmFtQWN0aXZlIiwiaXNKYW1BY3RpdmUiLCJvVGVtcGxhdGVQcml2YXRlTW9kZWwiLCJnZXRPd25lckNvbXBvbmVudCIsInNEaXNwbGF5Q29udHJvbElkIiwic0NvbnRyb2xJZCIsIm1DYWNoZSIsImlnbm9yZWRGaWVsZHMiLCJpZ25vcmVkRmllbGRzVGl0bGUiLCJhQ2hhcnRzIiwic1RhYmxlRW50aXR5UGF0aCIsInNUYWJsZUVudGl0eVNldCIsInNUYWJJZCIsImdldFBhcmVudCIsInNDYWNoZUtleSIsImdldE5vdEFwcGxpY2FibGVGaWx0ZXJzIiwiY2FsbCIsInNDaGFydEVudGl0eVBhdGgiLCJzQ2hhcnRFbnRpdHlTZXQiLCJfdXBkYXRlTXVsdGlNb2RlQ291bnRzIiwiYUJpbmRpbmdQcm9taXNlcyIsImFDb21wbGlhbnRUYWJzIiwiY29udHJvbCIsIml0ZW0iLCJtVGFiIiwic2V0Q291bnQiLCJvRmlsdGVySW5mb3MiLCJUYWJsZVV0aWxzIiwiZ2V0RmlsdGVyc0luZm9Gb3JTViIsImdldExpc3RCaW5kaW5nRm9yQ291bnQiLCJiYXRjaEdyb3VwSWQiLCJhZGRpdGlvbmFsRmlsdGVycyIsImZpbHRlcnMiLCJQcm9taXNlIiwiYWxsIiwiYUNvdW50cyIsImsiLCJnZXRDb3VudEZvcm1hdHRlZCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsImhpZGVGaWx0ZXJCYXIiLCJpbml0aWFsTG9hZCIsIkF1dG8iLCJnZXRTdGFuZGFyZFZhcmlhbnRLZXkiLCJnZXRDdXJyZW50VmFyaWFudEtleSIsIm9Db25kaXRpb25zIiwic3RhcnRzV2l0aCIsImlzVGFibGVCb3VuZCIsImlzQm91bmQiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbURBLE1BQU1BLG1CQUFtQixHQUFHQyxXQUFXLENBQUNELG1CQUF4QztBQUFBLE1BQ0NFLGVBQWUsR0FBR0QsV0FBVyxDQUFDQyxlQUQvQjtNQUlNQyxvQixXQURMQyxjQUFjLENBQUMsa0RBQUQsQyxVQUViQyxjQUFjLENBQ2RDLGVBQWUsQ0FBQ0MsUUFBaEIsQ0FBeUI7QUFDeEJDLElBQUFBLGNBQWMsRUFBRSxZQUFpQztBQUMvQyxXQUFLQyxPQUFMLEdBQWVDLGFBQWYsRUFBRCxDQUF5REMsZUFBekQ7QUFDQTtBQUh1QixHQUF6QixDQURjLEMsVUFRZE4sY0FBYyxDQUNkTyw2QkFBNkIsQ0FBQ0wsUUFBOUIsQ0FBdUM7QUFDdENNLElBQUFBLFlBQVksRUFBRSxZQUErQztBQUM1RCxhQUFRLEtBQUtDLElBQU4sQ0FBb0NDLG1CQUFwQyxFQUFQO0FBQ0E7QUFIcUMsR0FBdkMsQ0FEYyxDLFVBUWRWLGNBQWMsQ0FBQ1csV0FBRCxDLFVBR2RYLGNBQWMsQ0FBQ1kscUJBQXFCLENBQUNWLFFBQXRCLENBQStCVyw2QkFBL0Is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QixLQUE5QjtBQUNBO0FBQ0QsSzs7O0lBdHBCaUNzRixjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7U0F1N0JwQnpNLG9CIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW50ZXJuYWxSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbFJvdXRpbmdcIjtcbmltcG9ydCBLUElNYW5hZ2VtZW50IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9LUElNYW5hZ2VtZW50XCI7XG5pbXBvcnQgTWFzc0VkaXQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01hc3NFZGl0XCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgU2hhcmUgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NoYXJlXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHMgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1NpZGVFZmZlY3RzXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xzL0ZpbHRlckJhclwiO1xuaW1wb3J0IHtcblx0ZGVmaW5lVUk1Q2xhc3MsXG5cdGV4dGVuc2libGUsXG5cdGZpbmFsRXh0ZW5zaW9uLFxuXHRwcml2YXRlRXh0ZW5zaW9uLFxuXHRwdWJsaWNFeHRlbnNpb24sXG5cdHVzaW5nRXh0ZW5zaW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBDb3JlTGlicmFyeSBmcm9tIFwic2FwL2ZlL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IENoYXJ0UnVudGltZSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9DaGFydFJ1bnRpbWVcIjtcbmltcG9ydCBDaGFydFV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NoYXJ0L0NoYXJ0VXRpbHNcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IFRhYmxlVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVXRpbHNcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvTGlzdFJlcG9ydC9FeHRlbnNpb25BUElcIjtcbmltcG9ydCBFZGl0Rmxvd092ZXJyaWRlcyBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9Sb290Q29udGFpbmVyL292ZXJyaWRlcy9FZGl0Rmxvd1wiO1xuaW1wb3J0IFRhYmxlU2Nyb2xsZXIgZnJvbSBcInNhcC9mZS90ZW1wbGF0ZXMvVGFibGVTY3JvbGxlclwiO1xuaW1wb3J0IEljb25UYWJCYXIgZnJvbSBcInNhcC9tL0ljb25UYWJCYXJcIjtcbmltcG9ydCBTZWdtZW50ZWRCdXR0b24gZnJvbSBcInNhcC9tL1NlZ21lbnRlZEJ1dHRvblwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBDb250cm9sUGVyc29uYWxpemF0aW9uV3JpdGVBUEkgZnJvbSBcInNhcC91aS9mbC93cml0ZS9hcGkvQ29udHJvbFBlcnNvbmFsaXphdGlvbldyaXRlQVBJXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9yZXNvdXJjZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgaGFzaGVyIGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9oYXNoZXJcIjtcbmltcG9ydCBJbnRlbnRCYXNlZE5hdmlnYXRpb25PdmVycmlkZSBmcm9tIFwiLi9vdmVycmlkZXMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgU2hhcmVPdmVycmlkZXMgZnJvbSBcIi4vb3ZlcnJpZGVzL1NoYXJlXCI7XG5pbXBvcnQgVmlld1N0YXRlT3ZlcnJpZGVzIGZyb20gXCIuL292ZXJyaWRlcy9WaWV3U3RhdGVcIjtcblxuY29uc3QgVGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRDb250cm9sbGVyXCIpXG5jbGFzcyBMaXN0UmVwb3J0Q29udHJvbGxlciBleHRlbmRzIFBhZ2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdEludGVybmFsUm91dGluZy5vdmVycmlkZSh7XG5cdFx0XHRvbkFmdGVyQmluZGluZzogZnVuY3Rpb24gKHRoaXM6IEludGVybmFsUm91dGluZykge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIExpc3RSZXBvcnRDb250cm9sbGVyKS5fb25BZnRlckJpbmRpbmcoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9yb3V0aW5nITogSW50ZXJuYWxSb3V0aW5nO1xuXHRAdXNpbmdFeHRlbnNpb24oXG5cdFx0SW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoe1xuXHRcdFx0Z2V0RW50aXR5U2V0OiBmdW5jdGlvbiAodGhpczogSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdFx0cmV0dXJuICh0aGlzLmJhc2UgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIpLmdldEN1cnJlbnRFbnRpdHlTZXQoKTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdF9pbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0QHVzaW5nRXh0ZW5zaW9uKFNpZGVFZmZlY3RzKVxuXHRzaWRlRWZmZWN0cyE6IFNpZGVFZmZlY3RzO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihJbnRlbnRCYXNlZE5hdmlnYXRpb24ub3ZlcnJpZGUoSW50ZW50QmFzZWROYXZpZ2F0aW9uT3ZlcnJpZGUpKVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb24hOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0QHVzaW5nRXh0ZW5zaW9uKFNoYXJlLm92ZXJyaWRlKFNoYXJlT3ZlcnJpZGVzKSlcblx0c2hhcmUhOiBTaGFyZTtcblxuXHRAdXNpbmdFeHRlbnNpb24oRWRpdEZsb3cub3ZlcnJpZGUoRWRpdEZsb3dPdmVycmlkZXMpKVxuXHRlZGl0RmxvdyE6IEVkaXRGbG93O1xuXG5cdEB1c2luZ0V4dGVuc2lvbihWaWV3U3RhdGUub3ZlcnJpZGUoVmlld1N0YXRlT3ZlcnJpZGVzKSlcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdEB1c2luZ0V4dGVuc2lvbihLUElNYW5hZ2VtZW50KVxuXHRrcGlNYW5hZ2VtZW50ITogS1BJTWFuYWdlbWVudDtcblx0QHVzaW5nRXh0ZW5zaW9uKFBsYWNlaG9sZGVyKVxuXHRwbGFjZWhvbGRlciE6IFBsYWNlaG9sZGVyO1xuXHRAdXNpbmdFeHRlbnNpb24oTWFzc0VkaXQpXG5cdG1hc3NFZGl0ITogTWFzc0VkaXQ7XG5cdHByaXZhdGUgZXh0ZW5zaW9uQVBJPzogRXh0ZW5zaW9uQVBJO1xuXHRwcml2YXRlIF9vTGlzdFJlcG9ydENvbnRyb2w/OiBDb250cm9sO1xuXHRwcml2YXRlIGZpbHRlckJhckNvbmRpdGlvbnM/OiBhbnk7XG5cdHByaXZhdGUgX2JNdWx0aU1vZGU/OiBib29sZWFuO1xuXHRwcml2YXRlIHNVcGRhdGVUaW1lcj86IGFueTtcblx0cHJpdmF0ZSBvUmVzb3VyY2VCdW5kbGU/OiBSZXNvdXJjZUJ1bmRsZTtcblx0cHJpdmF0ZSBfc0VudGl0eVNldD86IHN0cmluZztcblx0cHJpdmF0ZSBoYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzPzogYm9vbGVhbjtcblx0cHJpdmF0ZSBoYXNQZW5kaW5nVGFibGVDaGFuZ2VzPzogYm9vbGVhbjtcblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0RXh0ZW5zaW9uQVBJKCk6IEV4dGVuc2lvbkFQSSB7XG5cdFx0aWYgKCF0aGlzLmV4dGVuc2lvbkFQSSkge1xuXHRcdFx0dGhpcy5leHRlbnNpb25BUEkgPSBuZXcgRXh0ZW5zaW9uQVBJKHRoaXMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5leHRlbnNpb25BUEk7XG5cdH1cblxuXHRvbkluaXQoKSB7XG5cdFx0UGFnZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uSW5pdC5hcHBseSh0aGlzKTtcblx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpO1xuXHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IG9NdWx0aU1vZGVUYWIgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ0YWJzXCIsIHtcblx0XHRcdFx0c2VsZWN0ZWQ6IG9NdWx0aU1vZGVUYWIuZ2V0U2VsZWN0ZWRLZXkoKSB8fCAob011bHRpTW9kZVRhYi5nZXRJdGVtcygpWzBdIGFzIGFueSkuZ2V0S2V5KClcblx0XHRcdH0pO1xuXHRcdFx0YUNvbnRyb2xzLmZvckVhY2goKG9Db250cm9sOiBhbnkpID0+IHtcblx0XHRcdFx0Y29uc3Qgb1VwZGF0ZUNvdW50cyA9ICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVDb3VudHMoKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0Q29tbW9uVXRpbHMuYWRkRXZlbnRUb0JpbmRpbmdJbmZvKG9Db250cm9sLCBcImRhdGFSZXF1ZXN0ZWRcIiwgb1VwZGF0ZUNvdW50cyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly9UT0RPOiBUaGlzIGlzIG9ubHkgYSB0ZW1wb3JhcnkgYXBwcm9hY2ggYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIGFwcCBzdGF0ZSBiZWhhdmlvdXIgaXMgZmluYWxpemVkLlxuXG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIiwgdHJ1ZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYXBwbGllZEZpbHRlcnNcIiwgXCJcIik7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiaGlkZURyYWZ0SW5mb1wiLCBmYWxzZSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwidW9tXCIsIHt9KTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJzY2FsZWZhY3RvclwiLCB7fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwic2NhbGVmYWN0b3JOdW1iZXJcIiwge30pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImN1cnJlbmN5XCIsIHt9KTtcblxuXHRcdGlmICh0aGlzLl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zKCkpIHtcblx0XHRcdGxldCBhbHBDb250ZW50VmlldyA9IHRoaXMuX2dldERlZmF1bHRQYXRoKCk7XG5cdFx0XHRpZiAoIXN5c3RlbS5kZXNrdG9wICYmIGFscENvbnRlbnRWaWV3ID09PSBUZW1wbGF0ZUNvbnRlbnRWaWV3Lkh5YnJpZCkge1xuXHRcdFx0XHRhbHBDb250ZW50VmlldyA9IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQ7XG5cdFx0XHR9XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJhbHBDb250ZW50Vmlld1wiLCBhbHBDb250ZW50Vmlldyk7XG5cdFx0fVxuXG5cdFx0Ly8gU3RvcmUgY29uZGl0aW9ucyBmcm9tIGZpbHRlciBiYXJcblx0XHQvLyB0aGlzIGlzIGxhdGVyIHVzZWQgYmVmb3JlIG5hdmlnYXRpb24gdG8gZ2V0IGNvbmRpdGlvbnMgYXBwbGllZCBvbiB0aGUgZmlsdGVyIGJhclxuXHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IHt9O1xuXG5cdFx0Ly8gQXMgQXBwU3RhdGVIYW5kbGVyLmFwcGx5QXBwU3RhdGUgdHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdlIHdhbnQgdG8gbWFrZSBzdXJlIGl0IHdpbGxcblx0XHQvLyBoYXBwZW4gYWZ0ZXIgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgaGFzIGJlZW4gcHJvY2Vzc2VkIChvdGhlcndpc2UgdGhlIHJvdXRlciBnZXRzIGJyb2tlbilcblx0XHR0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldFJvdXRlclByb3h5KCkud2FpdEZvclJvdXRlTWF0Y2hCZWZvcmVOYXZpZ2F0aW9uKCk7XG5cblx0XHR0aGlzLl9pc011bHRpTW9kZSgpICYmIHRoaXMuX3VwZGF0ZU11bHRpQ29udHJvbEhpZGRlblN0YXR1cygpO1xuXHR9XG5cblx0b25FeGl0KCkge1xuXHRcdGRlbGV0ZSB0aGlzLmZpbHRlckJhckNvbmRpdGlvbnM7XG5cdFx0ZGVsZXRlIHRoaXMuX29MaXN0UmVwb3J0Q29udHJvbDtcblx0XHR0aGlzLmV4dGVuc2lvbkFQSSAmJiB0aGlzLmV4dGVuc2lvbkFQSS5kZXN0cm95KCk7XG5cdFx0ZGVsZXRlIHRoaXMuZXh0ZW5zaW9uQVBJO1xuXHR9XG5cblx0X29uQWZ0ZXJCaW5kaW5nKCkge1xuXHRcdGNvbnN0IGFUYWJsZXMgPSB0aGlzLl9nZXRDb250cm9scyhcInRhYmxlXCIpO1xuXHRcdGlmIChFZGl0U3RhdGUuaXNFZGl0U3RhdGVEaXJ0eSgpKSB7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gdGhpcy5fZ2V0VGFibGVCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRpZiAoIXRoaXMuc1VwZGF0ZVRpbWVyKSB7XG5cdFx0XHRcdFx0dGhpcy5zVXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHRcdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5fc2V0Q291bnRzT3V0RGF0ZWQoKTtcblx0XHRcdFx0XHRcdFx0dGhpcy5fdXBkYXRlQ291bnRzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRkZWxldGUgdGhpcy5zVXBkYXRlVGltZXI7XG5cdFx0XHRcdFx0fSwgMCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBVcGRhdGUgYWN0aW9uIGVuYWJsZW1lbnQgYW5kIHZpc2liaWxpdHkgdXBvbiB0YWJsZSBkYXRhIHVwZGF0ZS5cblx0XHRcdFx0Y29uc3QgZm5VcGRhdGVUYWJsZUFjdGlvbnMgPSAoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGVBY3Rpb25zKGFUYWJsZXMpO1xuXHRcdFx0XHRcdG9UYWJsZUJpbmRpbmcuZGV0YWNoRGF0YVJlY2VpdmVkKGZuVXBkYXRlVGFibGVBY3Rpb25zKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0b1RhYmxlQmluZGluZy5hdHRhY2hEYXRhUmVjZWl2ZWQoZm5VcGRhdGVUYWJsZUFjdGlvbnMpO1xuXHRcdFx0fVxuXHRcdFx0RWRpdFN0YXRlLnNldEVkaXRTdGF0ZVByb2Nlc3NlZCgpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5zVXBkYXRlVGltZXIpIHtcblx0XHRcdHRoaXMuX3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VSZWFkeS53YWl0Rm9yKHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuYXBwbHlBcHBTdGF0ZSgpKTtcblx0fVxuXG5cdG9uQmVmb3JlUmVuZGVyaW5nKCkge1xuXHRcdFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZS5vbkJlZm9yZVJlbmRlcmluZy5hcHBseSh0aGlzKTtcblx0fVxuXG5cdG9uQWZ0ZXJSZW5kZXJpbmcoKSB7XG5cdFx0KCh0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCkgYXMgUHJvbWlzZTxSZXNvdXJjZUJ1bmRsZT4pXG5cdFx0XHQudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSA9IHJlc3BvbnNlO1xuXHRcdFx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpO1xuXHRcdFx0XHRjb25zdCBzRW50aXR5U2V0ID0gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5lbnRpdHlTZXQ7XG5cdFx0XHRcdGNvbnN0IHNUZXh0ID0gQ29tbW9uVXRpbHMuZ2V0VHJhbnNsYXRlZFRleHQoXG5cdFx0XHRcdFx0XCJUX1RBQkxFX0FORF9DSEFSVF9OT19EQVRBX1RFWFRcIixcblx0XHRcdFx0XHR0aGlzLm9SZXNvdXJjZUJ1bmRsZSBhcyBSZXNvdXJjZUJ1bmRsZSxcblx0XHRcdFx0XHR1bmRlZmluZWQsXG5cdFx0XHRcdFx0c0VudGl0eVNldFxuXHRcdFx0XHQpO1xuXHRcdFx0XHRhQ29udHJvbHMuZm9yRWFjaChmdW5jdGlvbiAob0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdG9Db250cm9sLnNldE5vRGF0YVRleHQoc1RleHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIHJlc291cmNlIGJ1bmRsZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblBhZ2VSZWFkeShtUGFyYW1ldGVyczogYW55KSB7XG5cdFx0Ly8gRW5hYmxpbmcgbWFuZGF0b3J5IGZpbHRlciBmaWVsZHMgbWVzc2FnZSBkaWFsb2cgYW5kIGZvY3VzaW5nIG9uIHRoZW1cblx0XHRpZiAobVBhcmFtZXRlcnMuZm9yY2VGb2N1cykge1xuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblxuXHRcdFx0aWYgKG9GaWx0ZXJCYXIgJiYgIW9GaWx0ZXJCYXIuZ2V0U2hvd01lc3NhZ2VzKCkpIHtcblx0XHRcdFx0b0ZpbHRlckJhci5zZXRTaG93TWVzc2FnZXModHJ1ZSk7XG5cdFx0XHRcdChvRmlsdGVyQmFyIGFzIGFueSkuc2V0Rm9jdXNPbkZpcnN0RXJyb25lb3VzRmllbGQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGhhbmRsZXIgb24gYmFjayBuYXZpZ2F0aW9uIHRoYXQgZGlzcGxheXMgRHJhZnQgY29uZmlybWF0aW9uXG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKS5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0QmFja05hdmlnYXRpb24odW5kZWZpbmVkKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIGNvbnRlbnQgb2YgYSBsaXN0IHJlcG9ydCB2aWV3IG5lZWRzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogVGhpcyBoYXBwZW5zIGVpdGhlciB3aGVuIHRoZXJlIGlzIGEgY2hhbmdlIG9uIHRoZSBGaWx0ZXJCYXIgYW5kIHRoZSBzZWFyY2ggaXMgdHJpZ2dlcmVkLFxuXHQgKiBvciB3aGVuIGEgdGFiIHdpdGggY3VzdG9tIGNvbnRlbnQgaXMgc2VsZWN0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge21hcH0gbVBhcmFtZXRlcnMgTWFwIGNvbnRhaW5pbmcgdGhlIGZpbHRlciBjb25kaXRpb25zIG9mIHRoZSBGaWx0ZXJCYXIsIHRoZSBjdXJyZW50VGFiSURcblx0ICogYW5kIHRoZSB2aWV3IHJlZnJlc2ggY2F1c2UgKHRhYkNoYW5nZWQgb3Igc2VhcmNoKS5cblx0ICogVGhlIG1hcCBsb29rcyBsaWtlIHRoaXM6XG5cdCAqIDxjb2RlPjxwcmU+XG5cdCAqIFx0e1xuXHQgKiBcdFx0ZmlsdGVyQ29uZGl0aW9uczoge1xuXHQgKiBcdFx0XHRDb3VudHJ5OiBbXG5cdCAqIFx0XHRcdFx0e1xuXHQgKiBcdFx0XHRcdFx0b3BlcmF0b3I6IFwiRVFcIlxuXHQgKlx0XHRcdFx0XHR2YWxpZGF0ZWQ6IFwiTm90VmFsaWRhdGVkXCJcblx0ICpcdFx0XHRcdFx0dmFsdWVzOiBbXCJHZXJtYW55XCIsIC4uLl1cblx0ICogXHRcdFx0XHR9LFxuXHQgKiBcdFx0XHRcdC4uLlxuXHQgKiBcdFx0XHRdXG5cdCAqIFx0XHRcdC4uLlxuXHQgKiBcdFx0fSxcblx0ICpcdFx0Y3VycmVudFRhYklkOiBcImZlOjpDdXN0b21UYWI6OnRhYjFcIixcblx0ICpcdFx0cmVmcmVzaENhdXNlOiBcInRhYkNoYW5nZWRcIiB8IFwic2VhcmNoXCJcblx0ICpcdH1cblx0ICogPC9wcmU+PC9jb2RlPlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25WaWV3TmVlZHNSZWZyZXNoKG1QYXJhbWV0ZXJzOiBhbnkpIHtcblx0XHQvKiBUbyBiZSBvdmVycmlkZW4gKi9cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgY2FsbGVkIHdoZW4gYSBmaWx0ZXIgb3Igc2VhcmNoIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgaW4gdGhlIEZpbHRlckJhcixcblx0ICogYnV0IGhhcyBub3QgYmVlbiB2YWxpZGF0ZWQgeWV0IGJ5IHRoZSBlbmQgdXNlciAod2l0aCB0aGUgJ0dvJyBvciAnU2VhcmNoJyBidXR0b24pLlxuXHQgKiBUeXBpY2FsbHksIHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IHRhYiBpcyBncmV5ZWQgb3V0IHVudGlsIHRoZSBmaWx0ZXJzIGFyZSB2YWxpZGF0ZWQuXG5cdCAqIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVyd3JpdHRlbiBieSB0aGUgY29udHJvbGxlciBleHRlbnNpb24gaW4gY2FzZSBvZiBjdXN0b21pemF0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUGVuZGluZ0ZpbHRlcnMoKSB7XG5cdFx0LyogVG8gYmUgb3ZlcnJpZGVuICovXG5cdH1cblxuXHRnZXRDdXJyZW50RW50aXR5U2V0KCkge1xuXHRcdGlmICghdGhpcy5fc0VudGl0eVNldCkge1xuXHRcdFx0Y29uc3Qgb0Rpc3BsYXllZENvbnRyb2wgPSAodGhpcy5faXNNdWx0aU1vZGUoKSAmJiB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpKSB8fCB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0dGhpcy5fc0VudGl0eVNldCA9IG9EaXNwbGF5ZWRDb250cm9sPy5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIikuc2xpY2UoMSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9zRW50aXR5U2V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGluaXRpYXRlcyB0aGUgdXBkYXRlIG9mIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24gYW5kIHRoZSB2aXNpYmxlIHN0YXRlIG9mIHRoZSBEYXRhRmllbGRGb3JJQk4gYnV0dG9ucy5cblx0ICogQHBhcmFtIGFUYWJsZXMgQXJyYXkgb2YgdGFibGVzIGluIHRoZSBsaXN0IHJlcG9ydFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0X3VwZGF0ZVRhYmxlQWN0aW9ucyhhVGFibGVzOiBhbnkpIHtcblx0XHRsZXQgYUlCTkFjdGlvbnM6IGFueVtdID0gW107XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0YUlCTkFjdGlvbnMgPSBDb21tb25VdGlscy5nZXRJQk5BY3Rpb25zKG9UYWJsZSwgYUlCTkFjdGlvbnMpO1xuXHRcdFx0Ly8gVXBkYXRlICdlbmFibGVkJyBwcm9wZXJ0eSBvZiBEYXRhRmllbGRGb3JBY3Rpb24gYnV0dG9ucyBvbiB0YWJsZSB0b29sYmFyXG5cdFx0XHQvLyBUaGUgc2FtZSBpcyBhbHNvIHBlcmZvcm1lZCBvbiBUYWJsZSBzZWxlY3Rpb25DaGFuZ2UgZXZlbnRcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IG9UYWJsZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpLFxuXHRcdFx0XHRvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwID0gSlNPTi5wYXJzZShcblx0XHRcdFx0XHRDb21tb25IZWxwZXIucGFyc2VDdXN0b21EYXRhKERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9UYWJsZSwgXCJvcGVyYXRpb25BdmFpbGFibGVNYXBcIikpIGFzIGFueVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRhU2VsZWN0ZWRDb250ZXh0cyA9IG9UYWJsZS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cblx0XHRcdENvbW1vblV0aWxzLnNldEFjdGlvbkVuYWJsZW1lbnQob0ludGVybmFsTW9kZWxDb250ZXh0LCBvQWN0aW9uT3BlcmF0aW9uQXZhaWxhYmxlTWFwLCBhU2VsZWN0ZWRDb250ZXh0cyk7XG5cdFx0fSk7XG5cdFx0Q29tbW9uVXRpbHMudXBkYXRlRGF0YUZpZWxkRm9ySUJOQnV0dG9uc1Zpc2liaWxpdHkoYUlCTkFjdGlvbnMsIHRoaXMuZ2V0VmlldygpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBzY3JvbGxzIHRvIGEgc3BlY2lmaWMgcm93IG9uIGFsbCB0aGUgYXZhaWxhYmxlIHRhYmxlcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5MaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyI19zY3JvbGxUYWJsZXNUb1Jvd1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Jvd1BhdGggVGhlIHBhdGggb2YgdGhlIHRhYmxlIHJvdyBjb250ZXh0IHRvIGJlIHNjcm9sbGVkIHRvXG5cdCAqL1xuXHRfc2Nyb2xsVGFibGVzVG9Sb3coc1Jvd1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIikuZm9yRWFjaChmdW5jdGlvbiAob1RhYmxlOiBhbnkpIHtcblx0XHRcdFRhYmxlU2Nyb2xsZXIuc2Nyb2xsVGFibGVUb1JvdyhvVGFibGUsIHNSb3dQYXRoKTtcblx0XHR9KTtcblx0fVxuXG5cdF9nZXRQYWdlVGl0bGVJbmZvcm1hdGlvbigpIHtcblx0XHRjb25zdCBvVGl0bGVJbmZvID0geyB0aXRsZTogXCJcIiwgc3VidGl0bGU6IFwiXCIsIGludGVudDogXCJcIiwgaWNvbjogXCJcIiB9O1xuXHRcdG9UaXRsZUluZm8udGl0bGUgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YSgpLkxpc3RSZXBvcnRUaXRsZTtcblx0XHRvVGl0bGVJbmZvLnN1YnRpdGxlID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoKS5MaXN0UmVwb3J0U3VidGl0bGU7XG5cdFx0cmV0dXJuIG9UaXRsZUluZm87XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sSWQoKSkgYXMgRmlsdGVyQmFyO1xuXHR9XG5cblx0X2dldFNlZ21lbnRlZEJ1dHRvbihzQ29udHJvbDogYW55KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0U2VnbWVudGVkQnV0dG9uSWQoc0NvbnRyb2wpKTtcblx0fVxuXG5cdF9nZXRTZWdtZW50ZWRCdXR0b25JZChzQ29udHJvbDogYW55KSB7XG5cdFx0aWYgKHNDb250cm9sID09PSBcIkNoYXJ0XCIpIHtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDaGFydCgpLmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldFRhYmxlKCk/LmRhdGEoXCJzZWdtZW50ZWRCdXR0b25JZFwiKTtcblx0XHR9XG5cdH1cblxuXHRfZ2V0RmlsdGVyQmFyQ29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcImZpbHRlckJhcklkXCIpO1xuXHR9XG5cblx0X2dldENoYXJ0Q29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInNpbmdsZUNoYXJ0SWRcIik7XG5cdH1cblxuXHRnZXRDaGFydENvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5fZ2V0Q2hhcnRDb250cm9sSWQoKSk7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRWaXN1YWxGaWx0ZXJCYXJDb250cm9sSWQoKSk7XG5cdH1cblxuXHRfZ2V0VmlzdWFsRmlsdGVyQmFyQ29udHJvbElkKCkge1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXcoKS5nZXRDb250ZW50KClbMF0uZGF0YShcInZpc3VhbEZpbHRlckJhcklkXCIpO1xuXHR9XG5cblx0X2dldE11bHRpTW9kZUNvbnRyb2woKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmJ5SWQoXCJmZTo6VGFiTXVsdGlwbGVNb2RlXCIpIGFzIEljb25UYWJCYXI7XG5cdH1cblxuXHRfZ2V0VGFibGVDb250cm9sSWQoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwic2luZ2xlVGFibGVJZFwiKTtcblx0fVxuXG5cdF9nZXRDdXJyZW50Q29udHJvbCgpOiBDb250cm9sIHtcblx0XHRpZiAoIXRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCkge1xuXHRcdFx0Y29uc3Qgb011bHRpTW9kZVRhYiA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRcdHRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQoXG5cdFx0XHRcdG9NdWx0aU1vZGVUYWIuZ2V0U2VsZWN0ZWRLZXkoKSB8fCAob011bHRpTW9kZVRhYi5nZXRJdGVtcygpWzBdIGFzIGFueSkuZ2V0S2V5KClcblx0XHRcdCkgYXMgQ29udHJvbDtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCBhcyBDb250cm9sO1xuXHR9XG5cblx0X2dldFRhYmxlKCk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2wgPSB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpO1xuXHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgPyAob0NvbnRyb2wgYXMgVGFibGUpIDogdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRUYWJsZUNvbnRyb2xJZCgpKSBhcyBUYWJsZTtcblx0fVxuXG5cdF9nZXRDaGFydCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuYnlJZCh0aGlzLl9nZXRDaGFydENvbnRyb2xJZCgpKTtcblx0fVxuXG5cdF9nZXRUYWJsZUJpbmRpbmcoc1RhYmxlSWQ/OiBhbnkpIHtcblx0XHRjb25zdCBvVGFibGVDb250cm9sID0gc1RhYmxlSWQgPyB0aGlzLmdldFZpZXcoKS5ieUlkKHNUYWJsZUlkKSA6IHRoaXMuX2dldFRhYmxlKCk7XG5cdFx0Y29uc3Qgb0JpbmRpbmcgPSBvVGFibGVDb250cm9sICYmIChvVGFibGVDb250cm9sIGFzIGFueSkuX2dldFJvd0JpbmRpbmcoKTtcblxuXHRcdHJldHVybiBvQmluZGluZztcblx0fVxuXG5cdF9nZXRDb250cm9scyhzS2V5PzogYW55KSB7XG5cdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGNvbnN0IGFDb250cm9sczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IG9UYWJNdWx0aU1vZGUgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0XHRvVGFiTXVsdGlNb2RlLmdldEl0ZW1zKCkuZm9yRWFjaCgob0l0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQob0l0ZW0uZ2V0S2V5KCkpO1xuXHRcdFx0XHRpZiAoc0tleSkge1xuXHRcdFx0XHRcdGlmIChvSXRlbS5nZXRLZXkoKS5pbmRleE9mKFwiZmU6OlwiICsgc0tleSkgPiAtMSkge1xuXHRcdFx0XHRcdFx0b0NvbnRyb2wgJiYgYUNvbnRyb2xzLnB1c2gob0NvbnRyb2wpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRvQ29udHJvbCAmJiBhQ29udHJvbHMucHVzaChvQ29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIGFDb250cm9scztcblx0XHR9IGVsc2UgaWYgKHNLZXkgPT09IFwiQ2hhcnRcIikge1xuXHRcdFx0Y29uc3Qgb0NoYXJ0ID0gdGhpcy5fZ2V0Q2hhcnQoKTtcblx0XHRcdHJldHVybiBvQ2hhcnQgPyBbb0NoYXJ0XSA6IFtdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpO1xuXHRcdFx0cmV0dXJuIG9UYWJsZSA/IFtvVGFibGVdIDogW107XG5cdFx0fVxuXHR9XG5cblx0X2dldERlZmF1bHRQYXRoKCkge1xuXHRcdGNvbnN0IGRlZmF1bHRQYXRoID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJkZWZhdWx0UGF0aFwiKTtcblx0XHRzd2l0Y2ggKGRlZmF1bHRQYXRoKSB7XG5cdFx0XHRjYXNlIFwicHJpbWFyeVwiOlxuXHRcdFx0XHRyZXR1cm4gVGVtcGxhdGVDb250ZW50Vmlldy5DaGFydDtcblx0XHRcdGNhc2UgXCJzZWNvbmRhcnlcIjpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU7XG5cdFx0XHRjYXNlIFwiYm90aFwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBUYWJsZSBtb2RlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2lzTXVsdGlNb2RlXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBJcyBNdWx0aXBsZSBUYWJsZSBtb2RlIHNldD9cblx0ICovXG5cdF9pc011bHRpTW9kZSgpIHtcblx0XHRpZiAoIXRoaXMuX29MaXN0UmVwb3J0Q29udHJvbCkge1xuXHRcdFx0dGhpcy5fYk11bHRpTW9kZSA9ICEhdGhpcy5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fYk11bHRpTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8ga25vdyBpZiBMaXN0UmVwb3J0IGlzIGNvbmZpZ3VyZWQgd2l0aCBNdWx0aXBsZSBFbnRpdHlTZXRzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2lzTXVsdGlFbnRpdHlTZXRzXG5cdCAqIEByZXR1cm5zIHtib29sZWFufSBJcyBNdWx0aXBsZSBFbnRpdHlTZXRzIGNvbmZpZ3VyYXRpb24/XG5cdCAqL1xuXHRfaXNNdWx0aUVudGl0eVNldHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwiaXNNdWx0aUVudGl0eVNldHNcIikgPT09IFwidHJ1ZVwiO1xuXHR9XG5cblx0X2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwiaGFzTXVsdGlWaXN1YWxpemF0aW9uc1wiKSA9PT0gXCJ0cnVlXCI7XG5cdH1cblxuXHRfc2V0U2hhcmVNb2RlbCgpIHtcblx0XHQvLyBUT0RPOiBkZWFjdGl2YXRlZCBmb3Igbm93IC0gY3VycmVudGx5IHRoZXJlIGlzIG5vIF90ZW1wbFByaXYgYW55bW9yZSwgdG8gYmUgZGlzY3Vzc2VkXG5cdFx0Ly8gdGhpcyBtZXRob2QgaXMgY3VycmVudGx5IG5vdCBjYWxsZWQgYW55bW9yZSBmcm9tIHRoZSBpbml0IG1ldGhvZFxuXG5cdFx0Y29uc3QgZm5HZXRVc2VyID0gT2JqZWN0UGF0aC5nZXQoXCJzYXAudXNoZWxsLkNvbnRhaW5lci5nZXRVc2VyXCIpO1xuXHRcdC8vdmFyIG9NYW5pZmVzdCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRBcHBDb21wb25lbnQoKS5nZXRNZXRhZGF0YSgpLmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWlcIik7XG5cdFx0Ly92YXIgc0Jvb2ttYXJrSWNvbiA9IChvTWFuaWZlc3QgJiYgb01hbmlmZXN0Lmljb25zICYmIG9NYW5pZmVzdC5pY29ucy5pY29uKSB8fCBcIlwiO1xuXG5cdFx0Ly9zaGFyZU1vZGVsOiBIb2xkcyBhbGwgdGhlIHNoYXJpbmcgcmVsZXZhbnQgaW5mb3JtYXRpb24gYW5kIGluZm8gdXNlZCBpbiBYTUwgdmlld1xuXHRcdGNvbnN0IG9TaGFyZUluZm8gPSB7XG5cdFx0XHRib29rbWFya1RpdGxlOiBkb2N1bWVudC50aXRsZSwgLy9UbyBuYW1lIHRoZSBib29rbWFyayBhY2NvcmRpbmcgdG8gdGhlIGFwcCB0aXRsZS5cblx0XHRcdGJvb2ttYXJrQ3VzdG9tVXJsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGNvbnN0IHNIYXNoID0gaGFzaGVyLmdldEhhc2goKTtcblx0XHRcdFx0cmV0dXJuIHNIYXNoID8gXCIjXCIgKyBzSGFzaCA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0fSxcblx0XHRcdC8qXG5cdFx0XHRcdFx0XHRcdFRvIGJlIGFjdGl2YXRlZCBvbmNlIHRoZSBGTFAgc2hvd3MgdGhlIGNvdW50IC0gc2VlIGNvbW1lbnQgYWJvdmVcblx0XHRcdFx0XHRcdFx0Ym9va21hcmtTZXJ2aWNlVXJsOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHQvL3ZhciBvVGFibGUgPSBvVGFibGUuZ2V0SW5uZXJUYWJsZSgpOyBvVGFibGUgaXMgYWxyZWFkeSB0aGUgc2FwLmZlIHRhYmxlIChidXQgbm90IHRoZSBpbm5lciBvbmUpXG5cdFx0XHRcdFx0XHRcdFx0Ly8gd2Ugc2hvdWxkIHVzZSB0YWJsZS5nZXRMaXN0QmluZGluZ0luZm8gaW5zdGVhZCBvZiB0aGUgYmluZGluZ1xuXHRcdFx0XHRcdFx0XHRcdHZhciBvQmluZGluZyA9IG9UYWJsZS5nZXRCaW5kaW5nKFwicm93c1wiKSB8fCBvVGFibGUuZ2V0QmluZGluZyhcIml0ZW1zXCIpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IGZuR2V0RG93bmxvYWRVcmwob0JpbmRpbmcpIDogXCJcIjtcblx0XHRcdFx0XHRcdFx0fSwqL1xuXHRcdFx0aXNTaGFyZUluSmFtQWN0aXZlOiAhIWZuR2V0VXNlciAmJiBmbkdldFVzZXIoKS5pc0phbUFjdGl2ZSgpXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZVByaXZhdGVNb2RlbCA9IHRoaXMuZ2V0T3duZXJDb21wb25lbnQoKS5nZXRNb2RlbChcIl90ZW1wbFByaXZcIikgYXMgSlNPTk1vZGVsO1xuXHRcdG9UZW1wbGF0ZVByaXZhdGVNb2RlbC5zZXRQcm9wZXJ0eShcIi9saXN0UmVwb3J0L3NoYXJlXCIsIG9TaGFyZUluZm8pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhpZGRlbiB0YWJsZXMgbXVzdCBiZSBtYXJrZWQgYXMgaGlkZGVuIHRvIGF2b2lkIHNlbmRpbmdcblx0ICogcmVxdWVzdHMgd2hlbiBGaWx0ZXJCYXIgaXMgY2hhbmdlZCBvciBMUiBpcyBpbml0aWFsaXplZFxuXHQgKiBCZXN0IHdvcmtmbG93IHdvdWxkIGJlIHRvIHN1c3BlbmQgdGFibGUgYmluZGluZyBidXRcblx0ICogaWYgdGhlIHVzZXIgc3dpdGNoIHF1aWNrbHkgYmV0d2VlbiB0YWJzIHRoZSBiYXRjaCByZXNwb25zZSBvZiBwcmV2aW91c1xuXHQgKiBpcyByZWNlaXZlZCB3aGVuIHByZXZpb3VzIHRhYiBpcyBhbHJlYWR5IGRpc2FibGVkIChiaW5kaW5nIGlzIHN1c3BlbmRlZCkgYW5kXG5cdCAqIGdlbmVyYXRlcyBlcnJvci5cblx0ICogQSB0ZW1wb3Jhcnkgc29sdXRpb24gKGlmIHdlIGZpbmQgYmV0dGVyIHdvcmtmbG93KSBpcyB0byBzZXQgYSBjdXN0b21EYXRhIGFuZCBkb24ndCB0cmlnZ2VyXG5cdCAqIHJlYmluZFRhYmxlIGlmIHRoaXMgY3VzdG9tRGF0YSBpcyBzZXQgdG8gdHJ1ZS5cblx0ICovXG5cdF91cGRhdGVNdWx0aUNvbnRyb2xIaWRkZW5TdGF0dXMoKSB7XG5cdFx0Y29uc3Qgb0Rpc3BsYXllZENvbnRyb2wgPSB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpO1xuXHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpICYmIG9EaXNwbGF5ZWRDb250cm9sKSB7XG5cdFx0XHRjb25zdCBzRGlzcGxheUNvbnRyb2xJZCA9IG9EaXNwbGF5ZWRDb250cm9sLmdldElkKCk7XG5cdFx0XHRjb25zdCBhQ29udHJvbHMgPSB0aGlzLl9nZXRDb250cm9scygpO1xuXHRcdFx0YUNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24gKG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0Y29uc3Qgc0NvbnRyb2xJZCA9IG9Db250cm9sLmdldElkKCk7XG5cdFx0XHRcdG9Db250cm9sLmRhdGEoXCJjb250cm9sSGlkZGVuXCIsIHNDb250cm9sSWQgIT09IHNEaXNwbGF5Q29udHJvbElkKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gdXBkYXRlIHRoZSBsb2NhbCBVSSBtb2RlbCBvZiB0aGUgcGFnZSB3aXRoIHRoZSBmaWVsZHMgdGhhdCBhcmUgbm90IGFwcGxpY2FibGUgdG8gdGhlIGZpbHRlciBiYXIgKHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlIG11bHRpcGxlIHRhYmxlIHNjZW5hcmlvKS5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwuY29udGV4dH0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5GaWx0ZXJCYXJ9IG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0OiBhbnksIG9GaWx0ZXJCYXI6IGFueSkge1xuXHRcdGNvbnN0IG1DYWNoZTogYW55ID0ge307XG5cdFx0Y29uc3QgaWdub3JlZEZpZWxkczogYW55ID0ge30sXG5cdFx0XHRpZ25vcmVkRmllbGRzVGl0bGU6IGFueSA9IHt9LFxuXHRcdFx0YVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIiksXG5cdFx0XHRhQ2hhcnRzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJDaGFydFwiKTtcblx0XHRhVGFibGVzLmZvckVhY2goKG9UYWJsZTogYW55KSA9PiB7XG5cdFx0XHRjb25zdCBzVGFibGVFbnRpdHlQYXRoID0gb1RhYmxlLmRhdGEoXCJ0YXJnZXRDb2xsZWN0aW9uUGF0aFwiKSxcblx0XHRcdFx0c1RhYmxlRW50aXR5U2V0ID0gc1RhYmxlRW50aXR5UGF0aC5zbGljZSgxKSxcblx0XHRcdFx0c1RhYklkID0gb1RhYmxlLmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldEtleSgpLFxuXHRcdFx0XHRzVGFiVGl0bGUgPSBvVGFibGUuZ2V0UGFyZW50KCkuZ2V0UGFyZW50KCkuZ2V0VGV4dCgpLFxuXHRcdFx0XHRzQ2FjaGVLZXkgPSBzVGFibGVFbnRpdHlTZXQgKyAob1RhYmxlLmRhdGEoXCJlbmFibGVBbmFseXRpY3NcIikgPT09IFwidHJ1ZVwiID8gXCJBbmFseXRpY2FsXCIgOiBcIlJlZ3VsYXJcIik7XG5cdFx0XHRpZiAoIW1DYWNoZVtzQ2FjaGVLZXldKSB7XG5cdFx0XHRcdG1DYWNoZVtzQ2FjaGVLZXldID0gRmlsdGVyVXRpbHMuZ2V0Tm90QXBwbGljYWJsZUZpbHRlcnMob0ZpbHRlckJhciwgb1RhYmxlKTtcblx0XHRcdH1cblx0XHRcdGlnbm9yZWRGaWVsZHNbc1RhYklkXSA9IG1DYWNoZVtzQ2FjaGVLZXldO1xuXHRcdFx0aWdub3JlZEZpZWxkc1RpdGxlW3NUYWJJZF0gPSB0aGlzLmZvcm1hdHRlcnMuc2V0VGFiTWVzc2FnZVN0cmlwLmNhbGwodGhpcywgbUNhY2hlW3NDYWNoZUtleV0sIHNUYWJUaXRsZSwgXCJmYWxzZVwiLCB7fSk7XG5cdFx0fSk7XG5cdFx0YUNoYXJ0cy5mb3JFYWNoKChvQ2hhcnQ6IGFueSkgPT4ge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNUYWJJZCA9IG9DaGFydC5nZXRQYXJlbnQoKS5nZXRQYXJlbnQoKS5nZXRLZXkoKSxcblx0XHRcdFx0c1RhYlRpdGxlID0gb0NoYXJ0LmdldFBhcmVudCgpLmdldFBhcmVudCgpLmdldFRleHQoKSxcblx0XHRcdFx0c0NhY2hlS2V5ID0gc0NoYXJ0RW50aXR5U2V0ICsgXCJDaGFydFwiO1xuXHRcdFx0aWYgKCFtQ2FjaGVbc0NhY2hlS2V5XSkge1xuXHRcdFx0XHRtQ2FjaGVbc0NhY2hlS2V5XSA9IEZpbHRlclV0aWxzLmdldE5vdEFwcGxpY2FibGVGaWx0ZXJzKG9GaWx0ZXJCYXIsIG9DaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRpZ25vcmVkRmllbGRzW3NUYWJJZF0gPSBtQ2FjaGVbc0NhY2hlS2V5XTtcblx0XHRcdGlnbm9yZWRGaWVsZHNUaXRsZVtzVGFiSWRdID0gdGhpcy5mb3JtYXR0ZXJzLnNldFRhYk1lc3NhZ2VTdHJpcC5jYWxsKHRoaXMsIG1DYWNoZVtzQ2FjaGVLZXldLCBzVGFiVGl0bGUsIFwiZmFsc2VcIiwge30pO1xuXHRcdH0pO1xuXHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInRhYnMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ0YWJzL2lnbm9yZWRGaWVsZHNUaXRsZVwiLCBpZ25vcmVkRmllbGRzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byB1cGRhdGUgdGhlIGxvY2FsIFVJIG1vZGVsIG9mIHRoZSBwYWdlIHdpdGggdGhlIGZpZWxkcyB0aGF0IGFyZSBub3QgYXBwbGljYWJsZSB0byB0aGUgZmlsdGVyIGJhciAodGhpcyBpcyBzcGVjaWZpYyB0byB0aGUgQUxQIHNjZW5hcmlvKS5cblx0ICpcblx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwuY29udGV4dH0gb0ludGVybmFsTW9kZWxDb250ZXh0IFRoZSBpbnRlcm5hbCBtb2RlbCBjb250ZXh0XG5cdCAqIEBwYXJhbSB7c2FwLnVpLm1kYy5GaWx0ZXJCYXJ9IG9GaWx0ZXJCYXIgTURDIGZpbHRlciBiYXJcblx0ICovXG5cdF91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dDogYW55LCBvRmlsdGVyQmFyOiBhbnkpIHtcblx0XHRjb25zdCBtQ2FjaGU6IGFueSA9IHt9O1xuXHRcdGNvbnN0IGlnbm9yZWRGaWVsZHM6IGFueSA9IHt9LFxuXHRcdFx0YVRhYmxlcyA9IHRoaXMuX2dldENvbnRyb2xzKFwidGFibGVcIiksXG5cdFx0XHRhQ2hhcnRzID0gdGhpcy5fZ2V0Q29udHJvbHMoXCJDaGFydFwiKTtcblxuXHRcdGlmICghYVRhYmxlcy5sZW5ndGggfHwgIWFDaGFydHMubGVuZ3RoKSB7XG5cdFx0XHQvLyBJZiB0aGVyZSdzIG5vdCBhIHRhYmxlIGFuZCBhIGNoYXJ0LCB3ZSdyZSBub3QgaW4gdGhlIEFMUCBjYXNlXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRm9yIHRoZSBtb21lbnQsIHRoZXJlJ3Mgbm90aGluZyBmb3IgdGFibGVzLi4uXG5cdFx0YUNoYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hhcnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0NoYXJ0RW50aXR5UGF0aCA9IG9DaGFydC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiksXG5cdFx0XHRcdHNDaGFydEVudGl0eVNldCA9IHNDaGFydEVudGl0eVBhdGguc2xpY2UoMSksXG5cdFx0XHRcdHNDYWNoZUtleSA9IHNDaGFydEVudGl0eVNldCArIFwiQ2hhcnRcIjtcblx0XHRcdGlmICghbUNhY2hlW3NDYWNoZUtleV0pIHtcblx0XHRcdFx0bUNhY2hlW3NDYWNoZUtleV0gPSBGaWx0ZXJVdGlscy5nZXROb3RBcHBsaWNhYmxlRmlsdGVycyhvRmlsdGVyQmFyLCBvQ2hhcnQpO1xuXHRcdFx0fVxuXHRcdFx0aWdub3JlZEZpZWxkc1tzQ2FjaGVLZXldID0gbUNhY2hlW3NDYWNoZUtleV07XG5cdFx0fSk7XG5cdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29udHJvbHMvaWdub3JlZEZpZWxkc1wiLCBpZ25vcmVkRmllbGRzKTtcblx0fVxuXG5cdF91cGRhdGVNdWx0aU1vZGVTZWxlY3RlZENvbnRyb2woKSB7XG5cdFx0dGhpcy5fc0VudGl0eVNldCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl9vTGlzdFJlcG9ydENvbnRyb2wgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5fZ2V0Q3VycmVudENvbnRyb2woKTtcblx0fVxuXG5cdF91cGRhdGVDb3VudHMoKSB7XG5cdFx0dGhpcy5fdXBkYXRlTXVsdGlNb2RlQ291bnRzKCk7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIGRldGVybWluZSBpZiBhIHRhYiBmcm9tIHRoZSBsaXN0IHJlcG9ydCBpcyBhIGN1c3RvbSB0YWIuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaXNDdXN0b21UYWJcblx0ICogQHJldHVybnMge2Jvb2xlYW59IERldGVybWluZXMgaWYgdGhlIHRhYiBpcyBhIGN1c3RvbSB0YWIuXG5cdCAqL1xuXHRfaXNDdXN0b21UYWIoKSB7XG5cdFx0Y29uc3Qgb011bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0cmV0dXJuIG9NdWx0aU1vZGVDb250cm9sICYmIG9NdWx0aU1vZGVDb250cm9sLmdldFNlbGVjdGVkS2V5KCkuaW5kZXhPZihcIjo6Q3VzdG9tVGFiOjpcIikgPiAtMTtcblx0fVxuXG5cdF9zZXRDb3VudHNPdXREYXRlZCgpIHtcblx0XHRjb25zdCBvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRpZiAob011bHRpTW9kZUNvbnRyb2wgJiYgb011bHRpTW9kZUNvbnRyb2wuZGF0YShcInNob3dDb3VudHNcIikgPT09IFwidHJ1ZVwiKSB7XG5cdFx0XHRjb25zdCBhSXRlbXMgPSBvTXVsdGlNb2RlQ29udHJvbC5nZXRJdGVtcygpO1xuXHRcdFx0YUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdFx0aWYgKG9JdGVtLmdldEtleSgpLmluZGV4T2YoXCJmZTo6Q2hhcnRcIikgPT09IC0xKSB7XG5cdFx0XHRcdFx0b0l0ZW0uZGF0YShcIm91dGRhdGVkQ291bnRzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlTXVsdGlNb2RlQ291bnRzKCkge1xuXHRcdGxldCBhQmluZGluZ1Byb21pc2VzID0gW107XG5cdFx0Y29uc3Qgb011bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0aWYgKG9NdWx0aU1vZGVDb250cm9sICYmIG9NdWx0aU1vZGVDb250cm9sLmRhdGEoXCJzaG93Q291bnRzXCIpID09PSBcInRydWVcIiAmJiAhdGhpcy5faXNDdXN0b21UYWIoKSkge1xuXHRcdFx0Y29uc3Qgb0Rpc3BsYXllZENvbnRyb2wgPSB0aGlzLl9nZXRDdXJyZW50Q29udHJvbCgpO1xuXHRcdFx0Y29uc3Qgc0Rpc3BsYXllZENvbnRyb2xJZCA9IG9EaXNwbGF5ZWRDb250cm9sLmdldElkKCk7XG5cdFx0XHRjb25zdCBhQ29tcGxpYW50VGFiczogYW55W10gPSBbXTtcblx0XHRcdGNvbnN0IGFJdGVtcyA9IG9NdWx0aU1vZGVDb250cm9sLmdldEl0ZW1zKCk7XG5cdFx0XHRhSXRlbXMuZm9yRWFjaCgob0l0ZW06IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IHRoaXMuZ2V0VmlldygpLmJ5SWQob0l0ZW0uZ2V0S2V5KCkpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0b0NvbnRyb2wgJiZcblx0XHRcdFx0XHQhb0NvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSAmJlxuXHRcdFx0XHRcdChvSXRlbS5kYXRhKFwib3V0ZGF0ZWRDb3VudHNcIikgfHwgb0NvbnRyb2wuZ2V0SWQoKSA9PT0gc0Rpc3BsYXllZENvbnRyb2xJZClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0YUNvbXBsaWFudFRhYnMucHVzaCh7XG5cdFx0XHRcdFx0XHRjb250cm9sOiBvQ29udHJvbCxcblx0XHRcdFx0XHRcdGl0ZW06IG9JdGVtXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRhQmluZGluZ1Byb21pc2VzID0gYUNvbXBsaWFudFRhYnMubWFwKChtVGFiOiBhbnkpID0+IHtcblx0XHRcdFx0bVRhYi5pdGVtLnNldENvdW50KFwiLi4uXCIpO1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbCA9IG1UYWIuY29udHJvbDtcblx0XHRcdFx0Y29uc3Qgb0ZpbHRlckluZm9zID0gVGFibGVVdGlscy5nZXRGaWx0ZXJzSW5mb0ZvclNWKG9Db250cm9sLCBtVGFiLml0ZW0uZGF0YShcInNlbGVjdGlvblZhcmlhbnRcIikpIGFzIGFueTtcblx0XHRcdFx0cmV0dXJuIFRhYmxlVXRpbHMuZ2V0TGlzdEJpbmRpbmdGb3JDb3VudChvQ29udHJvbCwgdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoKSwge1xuXHRcdFx0XHRcdGJhdGNoR3JvdXBJZDogb0NvbnRyb2wuZ2V0SWQoKSA9PT0gc0Rpc3BsYXllZENvbnRyb2xJZCA/IG9Db250cm9sLmRhdGEoXCJiYXRjaEdyb3VwSWRcIikgOiBcIiRhdXRvXCIsXG5cdFx0XHRcdFx0YWRkaXRpb25hbEZpbHRlcnM6IG9GaWx0ZXJJbmZvcy5maWx0ZXJzXG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdFByb21pc2UuYWxsKGFCaW5kaW5nUHJvbWlzZXMpXG5cdFx0XHRcdC50aGVuKGZ1bmN0aW9uIChhQ291bnRzOiBhbnlbXSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgayBpbiBhQ291bnRzKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvSXRlbSA9IGFDb21wbGlhbnRUYWJzW2tdLml0ZW07XG5cdFx0XHRcdFx0XHRvSXRlbS5zZXRDb3VudChUYWJsZVV0aWxzLmdldENvdW50Rm9ybWF0dGVkKGFDb3VudHNba10pKTtcblx0XHRcdFx0XHRcdG9JdGVtLmRhdGEoXCJvdXRkYXRlZENvdW50c1wiLCBmYWxzZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmV0cmlldmluZyB0aGUgdmFsdWVzIGZvciB0aGUgaWNvbiB0YWIgYmFyXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdF9pc0ZpbHRlckJhckhpZGRlbigpIHtcblx0XHRyZXR1cm4gKHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5oaWRlRmlsdGVyQmFyO1xuXHR9XG5cblx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTTogYW55KSB7XG5cdFx0aWYgKFxuXHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldFZpZXdEYXRhKCkgYXMgYW55KS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkF1dG8gJiZcblx0XHRcdCghb1ZNIHx8IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA9PT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0NvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKTtcblx0XHRcdFx0Zm9yIChjb25zdCBzS2V5IGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0Ly8gaWdub3JlIGZpbHRlcnMgc3RhcnRpbmcgd2l0aCAkIChlLmcuICRzZWFyY2gsICRlZGl0U3RhdGUpXG5cdFx0XHRcdFx0aWYgKCFzS2V5LnN0YXJ0c1dpdGgoXCIkXCIpICYmIEFycmF5LmlzQXJyYXkob0NvbmRpdGlvbnNbc0tleV0pICYmIG9Db25kaXRpb25zW3NLZXldLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0X3VwZGF0ZVRhYmxlKG9UYWJsZTogYW55KSB7XG5cdFx0aWYgKCFvVGFibGUuaXNUYWJsZUJvdW5kKCkgfHwgdGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzKSB7XG5cdFx0XHRvVGFibGUucmViaW5kKCk7XG5cdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfdXBkYXRlQ2hhcnQob0NoYXJ0OiBhbnkpIHtcblx0XHRjb25zdCBvSW5uZXJDaGFydCA9IG9DaGFydC5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0NoYXJ0KTtcblx0XHRpZiAoIShvSW5uZXJDaGFydCAmJiBvSW5uZXJDaGFydC5pc0JvdW5kKFwiZGF0YVwiKSkgfHwgdGhpcy5oYXNQZW5kaW5nVGFibGVDaGFuZ2VzKSB7XG5cdFx0XHRvQ2hhcnQuZ2V0Q29udHJvbERlbGVnYXRlKCkucmViaW5kKG9DaGFydCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGhhbmRsZXJzID0ge1xuXHRcdG9uVGFiTXVsdGlNb2RlQ2hhbmdlKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0dGhpcy5fdXBkYXRlTXVsdGlNb2RlU2VsZWN0ZWRDb250cm9sKCk7XG5cdFx0XHR0aGlzLl91cGRhdGVNdWx0aUNvbnRyb2xIaWRkZW5TdGF0dXMoKTtcblxuXHRcdFx0Y29uc3Qgb0ZpbHRlckJhciA9IHRoaXMuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRcdGNvbnN0IG9JbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0VmlldygpLmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRjb25zdCBvRGlzcGxheWVkQ29udHJvbCA9IHRoaXMuX2dldEN1cnJlbnRDb250cm9sKCkgYXMgYW55O1xuXHRcdFx0Y29uc3Qgb011bHRpTW9kZUNvbnRyb2wgPSB0aGlzLl9nZXRNdWx0aU1vZGVDb250cm9sKCk7XG5cdFx0XHRjb25zdCBzU2VsZWN0ZWRLZXkgPSBvTXVsdGlNb2RlQ29udHJvbC5nZXRTZWxlY3RlZEtleSgpO1xuXHRcdFx0Y29uc3Qgc1ByZXZpb3VzU2VsZWN0ZWRLZXkgPSBvRXZlbnQgJiYgb0V2ZW50Lm1QYXJhbWV0ZXJzID8gb0V2ZW50Lm1QYXJhbWV0ZXJzLnByZXZpb3VzS2V5IDogdW5kZWZpbmVkO1xuXG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJ0YWJzL3NlbGVjdGVkXCIsIHNTZWxlY3RlZEtleSk7XG5cdFx0XHRpZiAob0ludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIikgIT09IHRydWUpIHtcblx0XHRcdFx0Ly8gTm8gcGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyXG5cdFx0XHRcdGlmIChvRmlsdGVyQmFyICYmIHRoaXMuX2lzQ3VzdG9tVGFiKCkpIHtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyQ29uZGl0aW9ucyA9IG9GaWx0ZXJCYXIuZ2V0RmlsdGVyQ29uZGl0aW9ucygpO1xuXHRcdFx0XHRcdHRoaXMub25WaWV3TmVlZHNSZWZyZXNoKHtcblx0XHRcdFx0XHRcdGZpbHRlckNvbmRpdGlvbnM6IG9GaWx0ZXJDb25kaXRpb25zLFxuXHRcdFx0XHRcdFx0Y3VycmVudFRhYklkOiBzU2VsZWN0ZWRLZXksXG5cdFx0XHRcdFx0XHRyZWZyZXNoQ2F1c2U6IFwidGFiQ2hhbmdlZFwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0IW9EaXNwbGF5ZWRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikgJiZcblx0XHRcdFx0XHQoIW9EaXNwbGF5ZWRDb250cm9sLmdldFJvd0JpbmRpbmcoKSB8fCAvLyBmaXJzdCB0aW1lIHRoZSB0YWIvdGFibGUgaXMgZGlzcGxheWVkXG5cdFx0XHRcdFx0XHRvRGlzcGxheWVkQ29udHJvbC5kYXRhKFwib3V0ZGF0ZWRSb3dzXCIpID09PSB0cnVlKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBTZWFyY2ggaGFzIGJlZW4gdHJpZ2dlcmVkIG9uIGEgZGlmZmVyZW50IHRhYiB7fVxuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLnJlYmluZCgpO1xuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLmRhdGEoXCJvdXRkYXRlZFJvd3NcIiwgZmFsc2UpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLmlzQShcInNhcC51aS5tZGMuQ2hhcnRcIikgJiZcblx0XHRcdFx0XHQoIW9EaXNwbGF5ZWRDb250cm9sLmdldENvbnRyb2xEZWxlZ2F0ZSgpLl9nZXRDaGFydChvRGlzcGxheWVkQ29udHJvbCkuZ2V0QmluZGluZyhcImRhdGFcIikgfHwgLy8gZmlyc3QgdGltZSB0aGUgdGFiL2NoYXJ0IGlzIGRpc3BsYXllZFxuXHRcdFx0XHRcdFx0b0Rpc3BsYXllZENvbnRyb2wuZGF0YShcIm91dGRhdGVkUm93c1wiKSA9PT0gdHJ1ZSlcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0lubmVyQ2hhcnQgPSBvRGlzcGxheWVkQ29udHJvbC5nZXRDb250cm9sRGVsZWdhdGUoKS5fZ2V0Q2hhcnQob0Rpc3BsYXllZENvbnRyb2wpO1xuXHRcdFx0XHRcdG9EaXNwbGF5ZWRDb250cm9sLmdldENvbnRyb2xEZWxlZ2F0ZSgpLnJlYmluZChvRGlzcGxheWVkQ29udHJvbCwgb0lubmVyQ2hhcnQuZ2V0QmluZGluZ0luZm8oXCJkYXRhXCIpKTtcblx0XHRcdFx0XHRvRGlzcGxheWVkQ29udHJvbC5kYXRhKFwib3V0ZGF0ZWRSb3dzXCIsIGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAob0V2ZW50ICYmIG9FdmVudC5tUGFyYW1ldGVycyAmJiBzUHJldmlvdXNTZWxlY3RlZEtleSAhPT0gb0V2ZW50Lm1QYXJhbWV0ZXJzLnNlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdENvbnRyb2xQZXJzb25hbGl6YXRpb25Xcml0ZUFQSS5hZGQoe1xuXHRcdFx0XHRcdGNoYW5nZXM6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0Y2hhbmdlU3BlY2lmaWNEYXRhOiB7XG5cdFx0XHRcdFx0XHRcdFx0Y2hhbmdlVHlwZTogXCJzZWxlY3RJY29uVGFiQmFyRmlsdGVyXCIsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDoge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRLZXk6IHNTZWxlY3RlZEtleSxcblx0XHRcdFx0XHRcdFx0XHRcdHByZXZpb3VzU2VsZWN0ZWRLZXk6IHNQcmV2aW91c1NlbGVjdGVkS2V5XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RvckVsZW1lbnQ6IG9NdWx0aU1vZGVDb250cm9sXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHR9LFxuXHRcdG9uRmlsdGVyc0NoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvRmlsdGVyQmFyID0gdGhpcy5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0aWYgKG9GaWx0ZXJCYXIpIHtcblx0XHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0Ly8gUGVuZGluZyBmaWx0ZXJzIGludG8gRmlsdGVyQmFyIHRvIGJlIHVzZWQgZm9yIGN1c3RvbSB2aWV3c1xuXHRcdFx0XHR0aGlzLm9uUGVuZGluZ0ZpbHRlcnMoKTtcblx0XHRcdFx0b0ludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiYXBwbGllZEZpbHRlcnNcIiwgb0ZpbHRlckJhci5nZXRBc3NpZ25lZEZpbHRlcnNUZXh0KCkuZmlsdGVyc1RleHQpO1xuXHRcdFx0XHRpZiAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmRpdGlvbnNCYXNlZFwiKSkge1xuXHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIHRydWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTZWxlY3RlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGNvbnN0IG9WTSA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRcdC8vIHNldFRpbWVvdXQgY2F1c2UgdGhlIHZhcmlhbnQgbmVlZHMgdG8gYmUgYXBwbGllZCBiZWZvcmUganVkZ2luZyB0aGUgYXV0byBzZWFyY2ggb3IgdXBkYXRpbmcgdGhlIGFwcCBzdGF0ZVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLl9pc011bHRpTW9kZSgpKSB7XG5cdFx0XHRcdFx0KHRoaXMuaGFuZGxlcnMgYXMgYW55KS5vblRhYk11bHRpTW9kZUNoYW5nZS5hcHBseSh0aGlzLCBbb0V2ZW50XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoKG9WTSkpIHtcblx0XHRcdFx0XHQvLyB0aGUgYXBwIHN0YXRlIHdpbGwgYmUgdXBkYXRlZCB2aWEgb25TZWFyY2ggaGFuZGxlclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgMCk7XG5cdFx0fSxcblx0XHRvblZhcmlhbnRTYXZlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0Ly9UT0RPOiBTaG91bGQgcmVtb3ZlIHRoaXMgc2V0VGltZU91dCBvbmNlIFZhcmlhbnQgTWFuYWdlbWVudCBwcm92aWRlcyBhbiBhcGkgdG8gZmV0Y2ggdGhlIGN1cnJlbnQgdmFyaWFudCBrZXkgb24gc2F2ZSEhIVxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH0sIDEwMDApO1xuXHRcdH0sXG5cdFx0b25TZWFyY2godGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIpIHtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb01kY0NoYXJ0ID0gdGhpcy5nZXRDaGFydENvbnRyb2woKTtcblx0XHRcdGNvbnN0IGJIaWRlRHJhZnQgPSBGaWx0ZXJVdGlscy5nZXRFZGl0U3RhdGVJc0hpZGVEcmFmdChvRmlsdGVyQmFyLmdldENvbmRpdGlvbnMoKSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoYXNQZW5kaW5nRmlsdGVyc1wiLCBmYWxzZSk7XG5cdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJoaWRlRHJhZnRJbmZvXCIsIGJIaWRlRHJhZnQpO1xuXHRcdFx0aWYgKHRoaXMuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdFx0Y29uc3QgYUNvbnRyb2xzID0gdGhpcy5fZ2V0Q29udHJvbHMoKSxcblx0XHRcdFx0XHRvTXVsdGlNb2RlQ29udHJvbCA9IHRoaXMuX2dldE11bHRpTW9kZUNvbnRyb2woKTtcblx0XHRcdFx0dGhpcy5fc2V0Q291bnRzT3V0RGF0ZWQoKTtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc0N1c3RvbVRhYigpKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0Rpc3BsYXllZENvbnRyb2xJZCA9IHRoaXMuX2dldEN1cnJlbnRDb250cm9sKCkuZ2V0SWQoKTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVNdWx0aVRhYk5vdEFwcGxpY2FibGVGaWVsZHMob0ludGVybmFsTW9kZWxDb250ZXh0LCBvRmlsdGVyQmFyKTtcblx0XHRcdFx0XHQvLyBUaGlzIHNob3VsZCBiZSBkb25lIG91dHNpZGUgdGhlIHNlYXJjaCBldmVudCBoYW5kbGVyIG9mIHRoZSBmaWx0ZXIgYmFyLlxuXHRcdFx0XHRcdC8vIFRoZSBzYW1lIGxvZ2ljIGlzIHJlcXVpcmVkIHdoZW4gZmlsdGVyIGJhciBpcyBoaWRkZW4gYW5kIG11bHRpcGxlIHRhYmxlcyBleGlzdCBvbiB0aGUgTFIuXG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBjdXJyZW50bHkgZG9uZSBpbiBMaXN0UmVwb3J0L292ZXJyaWRlcy9WaWV3U3RhdGUuanMjb25BZnRlclN0YXRlQXBwbGllZCgpXG5cdFx0XHRcdFx0YUNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24gKG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRcdG9Db250cm9sLmRhdGEoXCJvdXRkYXRlZFJvd3NcIiwgb0NvbnRyb2wuZ2V0SWQoKSAhPT0gc0Rpc3BsYXllZENvbnRyb2xJZCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZpbHRlckNvbmRpdGlvbnMgPSBvRmlsdGVyQmFyLmdldEZpbHRlckNvbmRpdGlvbnMoKTtcblx0XHRcdFx0XHR0aGlzLm9uVmlld05lZWRzUmVmcmVzaCh7XG5cdFx0XHRcdFx0XHRmaWx0ZXJDb25kaXRpb25zOiBvRmlsdGVyQ29uZGl0aW9ucyxcblx0XHRcdFx0XHRcdGN1cnJlbnRUYWJJZDogb011bHRpTW9kZUNvbnRyb2wuZ2V0U2VsZWN0ZWRLZXkoKSxcblx0XHRcdFx0XHRcdHJlZnJlc2hDYXVzZTogXCJzZWFyY2hcIlxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl91cGRhdGVBTFBOb3RBcHBsaWNhYmxlRmllbGRzKG9JbnRlcm5hbE1vZGVsQ29udGV4dCwgb0ZpbHRlckJhcik7XG5cdFx0XHR9XG5cdFx0XHRpZiAob01kY0NoYXJ0KSB7XG5cdFx0XHRcdC8vIGRpc2FibGUgYm91bmQgYWN0aW9ucyBUT0RPOiB0aGlzIGNsZWFycyBldmVyeXRoaW5nIGZvciB0aGUgY2hhcnQ/XG5cdFx0XHRcdChvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dCkuc2V0UHJvcGVydHkoXCJcIiwge30pO1xuXG5cdFx0XHRcdGNvbnN0IG9QYWdlSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvTWRjQ2hhcnQuZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQ7XG5cdFx0XHRcdGNvbnN0IHNUZW1wbGF0ZUNvbnRlbnRWaWV3ID0gb1BhZ2VJbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShvUGFnZUludGVybmFsTW9kZWxDb250ZXh0LmdldFBhdGgoKSArIFwiL2FscENvbnRlbnRWaWV3XCIpO1xuXHRcdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0XHR0aGlzLmhhc1BlbmRpbmdDaGFydENoYW5nZXMgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzVGVtcGxhdGVDb250ZW50VmlldyA9PT0gVGVtcGxhdGVDb250ZW50Vmlldy5UYWJsZSkge1xuXHRcdFx0XHRcdHRoaXMuaGFzUGVuZGluZ1RhYmxlQ2hhbmdlcyA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIHN0b3JlIGZpbHRlciBiYXIgY29uZGl0aW9ucyB0byB1c2UgbGF0ZXIgd2hpbGUgbmF2aWdhdGlvblxuXHRcdFx0U3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShvRmlsdGVyQmFyKVxuXHRcdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuZmlsdGVyQmFyQ29uZGl0aW9ucyA9IG9FeHRlcm5hbFN0YXRlLmZpbHRlcjtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIGV4dGVybmFsIHN0YXRlXCIsIG9FcnJvcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0aWYgKCh0aGlzLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpIGFzIGFueSkubGl2ZU1vZGUgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMuZ2V0RXh0ZW5zaW9uQVBJKCkudXBkYXRlQXBwU3RhdGUoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHN5c3RlbS5waG9uZSkge1xuXHRcdFx0XHRjb25zdCBvRHluYW1pY1BhZ2UgPSB0aGlzLmdldFZpZXcoKS5ieUlkKFwiZmU6Okxpc3RSZXBvcnRcIikgYXMgRHluYW1pY1BhZ2U7XG5cdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKipcblx0XHQgKiBUcmlnZ2VycyBhbiBvdXRib3VuZCBuYXZpZ2F0aW9uIHdoZW4gYSB1c2VyIGNob29zZXMgdGhlIGNoZXZyb24uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRyb2xsZXJcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc091dGJvdW5kVGFyZ2V0IE5hbWUgb2YgdGhlIG91dGJvdW5kIHRhcmdldCAobmVlZHMgdG8gYmUgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QpXG5cdFx0ICogQHBhcmFtIHtzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc0NyZWF0ZVBhdGggQ3JlYXRlIHBhdGggd2hlbiB0aGUgY2hldnJvbiBpcyBjcmVhdGVkLlxuXHRcdCAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdFx0ICogQHVpNS1yZXN0cmljdGVkXG5cdFx0ICogQGZpbmFsXG5cdFx0ICovXG5cdFx0b25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKG9Db250cm9sbGVyOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBhbnksIHNDcmVhdGVQYXRoOiBzdHJpbmcpIHtcblx0XHRcdHJldHVybiBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZChvQ29udHJvbGxlciwgc091dGJvdW5kVGFyZ2V0LCBvQ29udGV4dCwgc0NyZWF0ZVBhdGgpO1xuXHRcdH0sXG5cdFx0b25DaGFydFNlbGVjdGlvbkNoYW5nZWQodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIG9FdmVudDogYW55KSB7XG5cdFx0XHRjb25zdCBvTWRjQ2hhcnQgPSBvRXZlbnQuZ2V0U291cmNlKCkuZ2V0Q29udGVudCgpLFxuXHRcdFx0XHRvVGFibGUgPSB0aGlzLl9nZXRUYWJsZSgpLFxuXHRcdFx0XHRhRGF0YSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJkYXRhXCIpLFxuXHRcdFx0XHRvSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0aWYgKGFEYXRhKSB7XG5cdFx0XHRcdC8vIHVwZGF0ZSBhY3Rpb24gYnV0dG9ucyBlbmFibGVtZW50IC8gZGlzYWJsZW1lbnRcblx0XHRcdFx0Q2hhcnRSdW50aW1lLmZuVXBkYXRlQ2hhcnQob0V2ZW50KTtcblx0XHRcdFx0Ly8gdXBkYXRlIHNlbGVjdGlvbnMgb24gc2VsZWN0aW9uIG9yIGRlc2VsZWN0aW9uXG5cdFx0XHRcdENoYXJ0VXRpbHMuc2V0Q2hhcnRGaWx0ZXJzKG9NZGNDaGFydCk7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzVGVtcGxhdGVDb250ZW50VmlldyA9IG9JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQcm9wZXJ0eShvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UGF0aCgpICsgXCIvYWxwQ29udGVudFZpZXdcIik7XG5cdFx0XHRpZiAoc1RlbXBsYXRlQ29udGVudFZpZXcgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpIHtcblx0XHRcdFx0dGhpcy5oYXNQZW5kaW5nQ2hhcnRDaGFuZ2VzID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9UYWJsZSAmJiAob1RhYmxlIGFzIGFueSkucmViaW5kKCk7XG5cdFx0XHRcdHRoaXMuaGFzUGVuZGluZ0NoYXJ0Q2hhbmdlcyA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0b25TZWdtZW50ZWRCdXR0b25QcmVzc2VkKHRoaXM6IExpc3RSZXBvcnRDb250cm9sbGVyLCBvRXZlbnQ6IGFueSkge1xuXHRcdFx0Y29uc3Qgc1NlbGVjdGVkS2V5ID0gb0V2ZW50Lm1QYXJhbWV0ZXJzLmtleSA/IG9FdmVudC5tUGFyYW1ldGVycy5rZXkgOiBudWxsO1xuXHRcdFx0Y29uc3Qgb0ludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIsIHNTZWxlY3RlZEtleSk7XG5cdFx0XHRjb25zdCBvQ2hhcnQgPSB0aGlzLl9nZXRDaGFydCgpO1xuXHRcdFx0Y29uc3Qgb1RhYmxlID0gdGhpcy5fZ2V0VGFibGUoKTtcblx0XHRcdGNvbnN0IG9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSA9IHtcblx0XHRcdFx0b25BZnRlclJlbmRlcmluZygpIHtcblx0XHRcdFx0XHRjb25zdCBhSXRlbXMgPSBvU2VnbWVudGVkQnV0dG9uLmdldEl0ZW1zKCk7XG5cdFx0XHRcdFx0YUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdFx0XHRcdGlmIChvSXRlbS5nZXRLZXkoKSA9PT0gc1NlbGVjdGVkS2V5KSB7XG5cdFx0XHRcdFx0XHRcdG9JdGVtLmZvY3VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5yZW1vdmVFdmVudERlbGVnYXRlKG9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRjb25zdCBvU2VnbWVudGVkQnV0dG9uID0gKFxuXHRcdFx0XHRzU2VsZWN0ZWRLZXkgPT09IFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGUgPyB0aGlzLl9nZXRTZWdtZW50ZWRCdXR0b24oXCJUYWJsZVwiKSA6IHRoaXMuX2dldFNlZ21lbnRlZEJ1dHRvbihcIkNoYXJ0XCIpXG5cdFx0XHQpIGFzIFNlZ21lbnRlZEJ1dHRvbjtcblx0XHRcdGlmIChvU2VnbWVudGVkQnV0dG9uICE9PSBvRXZlbnQuZ2V0U291cmNlKCkpIHtcblx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5hZGRFdmVudERlbGVnYXRlKG9TZWdtZW50ZWRCdXR0b25EZWxlZ2F0ZSk7XG5cdFx0XHR9XG5cdFx0XHRzd2l0Y2ggKHNTZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjYXNlIFRlbXBsYXRlQ29udGVudFZpZXcuVGFibGU6XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0OlxuXHRcdFx0XHRcdHRoaXMuX3VwZGF0ZUNoYXJ0KG9DaGFydCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgVGVtcGxhdGVDb250ZW50Vmlldy5IeWJyaWQ6XG5cdFx0XHRcdFx0dGhpcy5fdXBkYXRlVGFibGUob1RhYmxlKTtcblx0XHRcdFx0XHR0aGlzLl91cGRhdGVDaGFydChvQ2hhcnQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH0sXG5cdFx0b25GaWx0ZXJzU2VnbWVudGVkQnV0dG9uUHJlc3NlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlciwgb0V2ZW50OiBhbnkpIHtcblx0XHRcdGlmIChvRXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpID09PSBcIkNvbXBhY3RcIikge1xuXHRcdFx0XHR0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkuc2V0VmlzaWJsZSh0cnVlKTtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmJ5SWQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udGVudCgpWzBdLmRhdGEoXCJ2aXN1YWxGaWx0ZXJCYXJJZFwiKSkgYXMgQ29udHJvbCkuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCkuc2V0VmlzaWJsZShmYWxzZSk7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5ieUlkKHRoaXMuZ2V0VmlldygpLmdldENvbnRlbnQoKVswXS5kYXRhKFwidmlzdWFsRmlsdGVyQmFySWRcIikpIGFzIENvbnRyb2wpLnNldFZpc2libGUodHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRvblN0YXRlQ2hhbmdlZCh0aGlzOiBMaXN0UmVwb3J0Q29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5nZXRFeHRlbnNpb25BUEkoKS51cGRhdGVBcHBTdGF0ZSgpO1xuXHRcdH1cblx0fTtcblx0Zm9ybWF0dGVycyA9IHtcblx0XHQvKipcblx0XHQgKiBNZXRob2QgdG8gc2V0IHRoZSBtZXNzYWdlIHRleHQgZm9yIHRoZSBtdWx0aXBsZSBlbnRpdHkgc2V0cyB3aGVuIGZpZWxkcyBpbiB0aGUgRmlsdGVyQmFyIG5lZWQgdG8gYmUgaWdub3JlZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB0aGlzXG5cdFx0ICogQHBhcmFtIHtBcnJheX0gYUlnbm9yZWRGaWVsZHMgQXJyYXkgb2YgaWdub3JlZCBmaWVsZHMgaW4gdGhlIEZpbHRlckJhciBmb3IgdGhlIGN1cnJlbnQgdGFiIChtdWx0aXBsZSBlbnRpdHkgc2V0cylcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gc1RhYlRpdGxlIFRhYiB0aXRsZVxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYklzQ2hhcnQgRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoZSBjb250cm9sIGlzIGEgY2hhcnQgb3Igbm90XG5cdFx0ICogQHBhcmFtIHtvYmplY3R9IG9BcHBseVN1cHBvcnRlZCBBcHBseVN1cHBvcnRlZCBmb3IgdGhlIGNvbnRyb2xcblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBNZXNzYWdlIHRleHRcblx0XHQgKi9cblx0XHRzZXRUYWJNZXNzYWdlU3RyaXAodGhpczogTGlzdFJlcG9ydENvbnRyb2xsZXIsIGFJZ25vcmVkRmllbGRzOiBhbnlbXSwgc1RhYlRpdGxlOiBzdHJpbmcsIGJJc0NoYXJ0PzogYW55LCBvQXBwbHlTdXBwb3J0ZWQ/OiBhbnkpIHtcblx0XHRcdGxldCBzVGV4dCA9IFwiXCI7XG5cdFx0XHRiSXNDaGFydCA9IGJJc0NoYXJ0ID09PSBcInRydWVcIiB8fCBiSXNDaGFydCA9PT0gdHJ1ZTtcblx0XHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSB0aGlzLl9nZXRGaWx0ZXJCYXJDb250cm9sKCk7XG5cdFx0XHRpZiAob0ZpbHRlckJhciAmJiBBcnJheS5pc0FycmF5KGFJZ25vcmVkRmllbGRzKSAmJiBhSWdub3JlZEZpZWxkcy5sZW5ndGggPiAwICYmIChzVGFiVGl0bGUgfHwgYklzQ2hhcnQpKSB7XG5cdFx0XHRcdGNvbnN0IHNGaWx0ZXJCYXJFbnRpdHlQYXRoID0gb0ZpbHRlckJhci5kYXRhKFwiZW50aXR5VHlwZVwiKSxcblx0XHRcdFx0XHRvTWV0YU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS50ZW1wbGF0ZXNcIikgYXMgUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0YUlnbm9yZWRMYWJlbHMgPSBhSWdub3JlZEZpZWxkcy5tYXAoZnVuY3Rpb24gKHNQcm9wZXJ0eSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb01hY3JvUmVzb3VyY2VCdW5kbGUgPSBDb3JlLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5tYWNyb3NcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdFx0XHRcdFx0XHRpZiAoc1Byb3BlcnR5ID09PSBcIiRzZWFyY2hcIikge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb01hY3JvUmVzb3VyY2VCdW5kbGUgPyBvTWFjcm9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9GSUxURVJCQVJfU0VBUkNIXCIpIDogXCJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChzUHJvcGVydHkgPT09IFwiJGVkaXRTdGF0ZVwiKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvTWFjcm9SZXNvdXJjZUJ1bmRsZSA/IG9NYWNyb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0NPTU1PTl9GSUxURVJCQVJfRURJVElOR19TVEFUVVNcIikgOiBcIlwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y29uc3Qgc0xhYmVsID0gb01ldGFNb2RlbC5nZXRPYmplY3Qoc0ZpbHRlckJhckVudGl0eVBhdGggKyBzUHJvcGVydHkgKyBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuTGFiZWxcIik7XG5cdFx0XHRcdFx0XHRyZXR1cm4gRGVsZWdhdGVVdGlsLmdldExvY2FsaXplZFRleHQoc0xhYmVsLCBvRmlsdGVyQmFyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYklzU2VhcmNoSWdub3JlZCA9ICFvQXBwbHlTdXBwb3J0ZWQuZW5hYmxlU2VhcmNoO1xuXHRcdFx0XHRpZiAob1Jlc291cmNlQnVuZGxlKSB7XG5cdFx0XHRcdFx0c1RleHQgPSBDb21tb25VdGlscy5nZXRNZXNzYWdlU3RyaXBUZXh0KFxuXHRcdFx0XHRcdFx0dGhpcy5nZXRWaWV3KCksXG5cdFx0XHRcdFx0XHRhSWdub3JlZExhYmVscyxcblx0XHRcdFx0XHRcdG9GaWx0ZXJCYXIsXG5cdFx0XHRcdFx0XHRiSXNDaGFydCxcblx0XHRcdFx0XHRcdGJJc1NlYXJjaElnbm9yZWQsXG5cdFx0XHRcdFx0XHRzVGFiVGl0bGUsXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUsXG5cdFx0XHRcdFx0XHREZWxlZ2F0ZVV0aWwuZ2V0TG9jYWxpemVkVGV4dFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBzVGV4dDtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RSZXBvcnRDb250cm9sbGVyO1xuIl19
|