@sapui5/sap.fe.templates 1.108.7 → 1.108.10

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.
Files changed (43) hide show
  1. package/package.json +6 -3
  2. package/src/sap/fe/templates/.library +1 -1
  3. package/src/sap/fe/templates/AnalyticalListPage/Component.js +1 -7
  4. package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +1 -4
  5. package/src/sap/fe/templates/Feedback.js +3 -13
  6. package/src/sap/fe/templates/ListComponent.js +2 -19
  7. package/src/sap/fe/templates/ListReport/Component.js +1 -18
  8. package/src/sap/fe/templates/ListReport/ExtensionAPI.js +10 -35
  9. package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -1
  10. package/src/sap/fe/templates/ListReport/ListReportController.controller.js +84 -226
  11. package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +15 -4
  12. package/src/sap/fe/templates/ListReport/ListReportTemplating.js +2 -7
  13. package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +21 -108
  14. package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +9 -17
  15. package/src/sap/fe/templates/ListReport/overrides/Share.js +9 -25
  16. package/src/sap/fe/templates/ListReport/overrides/ViewState.js +55 -124
  17. package/src/sap/fe/templates/ListReport/overrides/ViewState.ts +4 -2
  18. package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +1 -23
  19. package/src/sap/fe/templates/ObjectPage/Component.js +12 -37
  20. package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +17 -54
  21. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +256 -467
  22. package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +69 -15
  23. package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +66 -198
  24. package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +1 -32
  25. package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +9 -37
  26. package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +1 -7
  27. package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +9 -31
  28. package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
  29. package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +2 -4
  30. package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
  31. package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js +4 -5
  32. package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +1 -1
  33. package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +1 -1
  34. package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +15 -20
  35. package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
  36. package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
  37. package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +4 -5
  38. package/src/sap/fe/templates/ObjectPage/overrides/Share.js +18 -68
  39. package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +5 -20
  40. package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -2
  41. package/src/sap/fe/templates/TableScroller.js +1 -6
  42. package/src/sap/fe/templates/library.js +2 -5
  43. package/src/sap/fe/templates/messagebundle_it.properties +1 -1
@@ -6,29 +6,22 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
6
6
  "use strict";
7
7
 
8
8
  var _dec, _class;
9
-
10
9
  var MessageType = library.MessageType;
11
10
  var defineUI5Class = ClassSupport.defineUI5Class;
12
11
  var getSideContentLayoutID = ID.getSideContentLayoutID;
13
-
14
12
  function _catch(body, recover) {
15
13
  try {
16
14
  var result = body();
17
15
  } catch (e) {
18
16
  return recover(e);
19
17
  }
20
-
21
18
  if (result && result.then) {
22
19
  return result.then(void 0, recover);
23
20
  }
24
-
25
21
  return result;
26
22
  }
27
-
28
23
  function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
29
-
30
24
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
31
-
32
25
  /**
33
26
  * Extension API for object pages on SAP Fiori elements for OData V4.
34
27
  *
@@ -40,13 +33,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
40
33
  */
41
34
  var ObjectPageExtensionAPI = (_dec = defineUI5Class("sap.fe.templates.ObjectPage.ExtensionAPI"), _dec(_class = /*#__PURE__*/function (_ExtensionAPI) {
42
35
  _inheritsLoose(ObjectPageExtensionAPI, _ExtensionAPI);
43
-
44
36
  function ObjectPageExtensionAPI() {
45
37
  return _ExtensionAPI.apply(this, arguments) || this;
46
38
  }
47
-
48
39
  var _proto = ObjectPageExtensionAPI.prototype;
49
-
50
40
  /**
51
41
  * Refreshes either the whole object page or only parts of it.
52
42
  *
@@ -59,21 +49,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
59
49
  */
60
50
  _proto.refresh = function refresh(vPath) {
61
51
  var oBindingContext = this._view.getBindingContext();
62
-
63
52
  if (!oBindingContext) {
64
53
  // nothing to be refreshed - do not block the app!
65
54
  return Promise.resolve();
66
55
  }
67
-
68
56
  var oAppComponent = CommonUtils.getAppComponent(this._view),
69
- oSideEffectsService = oAppComponent.getSideEffectsService(),
70
- oMetaModel = oBindingContext.getModel().getMetaModel(),
71
- oSideEffects = {
72
- TargetProperties: [],
73
- TargetEntities: []
74
- };
57
+ oSideEffectsService = oAppComponent.getSideEffectsService(),
58
+ oMetaModel = oBindingContext.getModel().getMetaModel(),
59
+ oSideEffects = {
60
+ TargetProperties: [],
61
+ TargetEntities: []
62
+ };
75
63
  var aPaths, sPath, sBaseEntitySet, sKind;
76
-
77
64
  if (vPath === undefined || vPath === null) {
78
65
  // we just add an empty path which should refresh the page with all dependent bindings
79
66
  oSideEffects.TargetEntities.push({
@@ -82,10 +69,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
82
69
  } else {
83
70
  aPaths = Array.isArray(vPath) ? vPath : [vPath];
84
71
  sBaseEntitySet = this._controller.getOwnerComponent().getEntitySet();
85
-
86
72
  for (var i = 0; i < aPaths.length; i++) {
87
73
  sPath = aPaths[i];
88
-
89
74
  if (sPath === "") {
90
75
  // an empty path shall refresh the entity without dependencies which means * for the model
91
76
  oSideEffects.TargetProperties.push({
@@ -93,7 +78,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
93
78
  });
94
79
  } else {
95
80
  sKind = oMetaModel.getObject("/".concat(sBaseEntitySet, "/").concat(sPath, "/$kind"));
96
-
97
81
  if (sKind === "NavigationProperty") {
98
82
  oSideEffects.TargetEntities.push({
99
83
  $NavigationPropertyPath: sPath
@@ -108,9 +92,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
108
92
  }
109
93
  }
110
94
  }
111
-
112
95
  return oSideEffectsService.requestSideEffects(oSideEffects.TargetEntities.concat(oSideEffects.TargetProperties), oBindingContext);
113
96
  }
97
+
114
98
  /**
115
99
  * Gets the list entries currently selected for the table.
116
100
  *
@@ -118,18 +102,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
118
102
  * @param sTableId The ID identifying the table the selected context is requested for
119
103
  * @returns Array containing the selected contexts
120
104
  * @public
121
- */
122
- ;
123
-
105
+ */;
124
106
  _proto.getSelectedContexts = function getSelectedContexts(sTableId) {
125
107
  var oTable = this._view.byId(sTableId);
126
-
127
108
  if (oTable && oTable.isA("sap.fe.macros.table.TableAPI")) {
128
109
  oTable = oTable.getContent();
129
110
  }
130
-
131
111
  return oTable && oTable.isA("sap.ui.mdc.Table") && oTable.getSelectedContexts() || [];
132
112
  }
113
+
133
114
  /**
134
115
  * Displays or hides the side content of an object page.
135
116
  *
@@ -137,28 +118,25 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
137
118
  * @param sSubSectionKey Key of the side content fragment as defined in the manifest.json
138
119
  * @param [bShow] Optional Boolean flag to show or hide the side content
139
120
  * @public
140
- */
141
- ;
142
-
121
+ */;
143
122
  _proto.showSideContent = function showSideContent(sSubSectionKey, bShow) {
144
123
  var sBlockID = getSideContentLayoutID(sSubSectionKey),
145
- oBlock = this._view.byId(sBlockID),
146
- bBlockState = bShow === undefined ? !oBlock.getShowSideContent() : bShow;
147
-
124
+ oBlock = this._view.byId(sBlockID),
125
+ bBlockState = bShow === undefined ? !oBlock.getShowSideContent() : bShow;
148
126
  oBlock.setShowSideContent(bBlockState, false);
149
127
  }
128
+
150
129
  /**
151
130
  * Gets the bound context of the current object page.
152
131
  *
153
132
  * @alias sap.fe.templates.ObjectPage.ExtensionAPI#getBindingContext
154
133
  * @returns Context bound to the object page
155
134
  * @public
156
- */
157
- ;
158
-
135
+ */;
159
136
  _proto.getBindingContext = function getBindingContext() {
160
137
  return this._view.getBindingContext();
161
138
  }
139
+
162
140
  /**
163
141
  * Build a message to be displayed below the anchor bar.
164
142
  *
@@ -166,25 +144,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
166
144
  * @param {sap.ui.core.message.Message[]} messages Array of messages used to generated the message
167
145
  * @returns {Promise<Message>} Promise containing the generated message
168
146
  * @private
169
- */
170
- ;
171
-
147
+ */;
172
148
  _proto._buildOPMessage = function _buildOPMessage(messages) {
173
149
  try {
174
150
  var _this2 = this;
175
-
176
151
  var view = _this2._view;
177
152
  return Promise.resolve(view.getModel("sap.fe.i18n").getResourceBundle()).then(function (resourceBundle) {
178
153
  var message = null;
179
-
180
154
  switch (messages.length) {
181
155
  case 0:
182
156
  break;
183
-
184
157
  case 1:
185
158
  message = messages[0];
186
159
  break;
187
-
188
160
  default:
189
161
  var messageStats = {
190
162
  "Error": {
@@ -208,7 +180,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
208
180
  }, new Message({
209
181
  type: MessageType.Information
210
182
  }));
211
-
212
183
  if (messageStats.Error.count === 0 && messageStats.Warning.count === 0 && messageStats.Information.count > 0) {
213
184
  message.setMessage(resourceBundle.getText("OBJECTPAGESTATE_INFORMATION"));
214
185
  } else if (messageStats.Error.count > 0 && messageStats.Warning.count > 0 || messageStats.Information.count > 0) {
@@ -216,9 +187,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
216
187
  } else {
217
188
  message.setMessage(resourceBundle.getText(message.getType() === MessageType.Error ? "OBJECTPAGESTATE_ERROR" : "OBJECTPAGESTATE_WARNING"));
218
189
  }
219
-
220
190
  }
221
-
222
191
  return message;
223
192
  });
224
193
  } catch (e) {
@@ -233,14 +202,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
233
202
  * @public
234
203
  */
235
204
  ;
236
-
237
205
  _proto.showMessages = function showMessages(messages) {
238
206
  try {
239
207
  var _this4 = this;
240
-
241
208
  var view = _this4._view;
242
209
  var internalModelContext = view.getBindingContext("internal");
243
-
244
210
  var _temp2 = _catch(function () {
245
211
  return Promise.resolve(_this4._buildOPMessage(messages)).then(function (message) {
246
212
  if (message) {
@@ -254,7 +220,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
254
220
  }, function () {
255
221
  Log.error("Cannot display ObjectPage message");
256
222
  });
257
-
258
223
  return Promise.resolve(_temp2 && _temp2.then ? _temp2.then(function () {}) : void 0);
259
224
  } catch (e) {
260
225
  return Promise.reject(e);
@@ -267,15 +232,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/converter
267
232
  * @public
268
233
  */
269
234
  ;
270
-
271
235
  _proto.hideMessage = function hideMessage() {
272
236
  var view = this._view;
273
237
  var internalModelContext = view.getBindingContext("internal");
274
238
  internalModelContext === null || internalModelContext === void 0 ? void 0 : internalModelContext.setProperty("OPMessageStripVisibility", false);
275
239
  };
276
-
277
240
  return ObjectPageExtensionAPI;
278
241
  }(ExtensionAPI)) || _class);
279
242
  return ObjectPageExtensionAPI;
280
243
  }, false);
281
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSIsImRlZmluZVVJNUNsYXNzIiwicmVmcmVzaCIsInZQYXRoIiwib0JpbmRpbmdDb250ZXh0IiwiX3ZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwib0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9TaWRlRWZmZWN0cyIsIlRhcmdldFByb3BlcnRpZXMiLCJUYXJnZXRFbnRpdGllcyIsImFQYXRocyIsInNQYXRoIiwic0Jhc2VFbnRpdHlTZXQiLCJzS2luZCIsInVuZGVmaW5lZCIsInB1c2giLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9jb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRFbnRpdHlTZXQiLCJpIiwibGVuZ3RoIiwiJFByb3BlcnR5UGF0aCIsImdldE9iamVjdCIsInJlamVjdCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImNvbmNhdCIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzVGFibGVJZCIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJnZXRDb250ZW50Iiwic2hvd1NpZGVDb250ZW50Iiwic1N1YlNlY3Rpb25LZXkiLCJiU2hvdyIsInNCbG9ja0lEIiwiZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRCIsIm9CbG9jayIsImJCbG9ja1N0YXRlIiwiZ2V0U2hvd1NpZGVDb250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50IiwiX2J1aWxkT1BNZXNzYWdlIiwibWVzc2FnZXMiLCJ2aWV3IiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJyZXNvdXJjZUJ1bmRsZSIsIm1lc3NhZ2UiLCJtZXNzYWdlU3RhdHMiLCJpZCIsImNvdW50IiwicmVkdWNlIiwiYWNjIiwiY3VycmVudFZhbHVlIiwiY3VycmVudFR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJJbmZvcm1hdGlvbiIsIkVycm9yIiwiV2FybmluZyIsInNldE1lc3NhZ2UiLCJnZXRUZXh0Iiwic2hvd01lc3NhZ2VzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZXRQcm9wZXJ0eSIsImdldE1lc3NhZ2UiLCJoaWRlTWVzc2FnZSIsIkxvZyIsImVycm9yIiwiRXh0ZW5zaW9uQVBJIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFeHRlbnNpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBnZXRTaWRlQ29udGVudExheW91dElEIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9JRFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNTaWRlQ29udGVudCBmcm9tIFwic2FwL3VpL2xheW91dC9EeW5hbWljU2lkZUNvbnRlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcblxuLyoqXG4gKiBFeHRlbnNpb24gQVBJIGZvciBvYmplY3QgcGFnZXMgb24gU0FQIEZpb3JpIGVsZW1lbnRzIGZvciBPRGF0YSBWNC5cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSVxuICogQHB1YmxpY1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGZpbmFsXG4gKiBAc2luY2UgMS43OS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5FeHRlbnNpb25BUElcIilcbmNsYXNzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgZXh0ZW5kcyBFeHRlbnNpb25BUEkge1xuXHQvKipcblx0ICogUmVmcmVzaGVzIGVpdGhlciB0aGUgd2hvbGUgb2JqZWN0IHBhZ2Ugb3Igb25seSBwYXJ0cyBvZiBpdC5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5FeHRlbnNpb25BUEkjcmVmcmVzaFxuXHQgKiBAcGFyYW0gW3ZQYXRoXSBQYXRoIG9yIGFycmF5IG9mIHBhdGhzIHJlZmVycmluZyB0byBlbnRpdGllcyBvciBwcm9wZXJ0aWVzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogSWYgb21pdHRlZCwgdGhlIHdob2xlIG9iamVjdCBwYWdlIGlzIHJlZnJlc2hlZC4gVGhlIHBhdGggXCJcIiByZWZyZXNoZXMgdGhlIGVudGl0eSBhc3NpZ25lZCB0byB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogd2l0aG91dCBuYXZpZ2F0aW9uc1xuXHQgKiBAcmV0dXJucyBSZXNvbHZlZCBvbmNlIHRoZSBkYXRhIGlzIHJlZnJlc2hlZCBvciByZWplY3RlZCBpZiB0aGUgcmVxdWVzdCBmYWlsZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVmcmVzaCh2UGF0aDogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoIW9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Ly8gbm90aGluZyB0byBiZSByZWZyZXNoZWQgLSBkbyBub3QgYmxvY2sgdGhlIGFwcCFcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl92aWV3KSxcblx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0b1NpZGVFZmZlY3RzOiBhbnkgPSB7XG5cdFx0XHRcdFRhcmdldFByb3BlcnRpZXM6IFtdLFxuXHRcdFx0XHRUYXJnZXRFbnRpdGllczogW11cblx0XHRcdH07XG5cdFx0bGV0IGFQYXRocywgc1BhdGgsIHNCYXNlRW50aXR5U2V0LCBzS2luZDtcblxuXHRcdGlmICh2UGF0aCA9PT0gdW5kZWZpbmVkIHx8IHZQYXRoID09PSBudWxsKSB7XG5cdFx0XHQvLyB3ZSBqdXN0IGFkZCBhbiBlbXB0eSBwYXRoIHdoaWNoIHNob3VsZCByZWZyZXNoIHRoZSBwYWdlIHdpdGggYWxsIGRlcGVuZGVudCBiaW5kaW5nc1xuXHRcdFx0b1NpZGVFZmZlY3RzLlRhcmdldEVudGl0aWVzLnB1c2goe1xuXHRcdFx0XHQkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogXCJcIlxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFQYXRocyA9IEFycmF5LmlzQXJyYXkodlBhdGgpID8gdlBhdGggOiBbdlBhdGhdO1xuXHRcdFx0c0Jhc2VFbnRpdHlTZXQgPSAodGhpcy5fY29udHJvbGxlci5nZXRPd25lckNvbXBvbmVudCgpIGFzIGFueSkuZ2V0RW50aXR5U2V0KCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVBhdGhzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHNQYXRoID0gYVBhdGhzW2ldO1xuXHRcdFx0XHRpZiAoc1BhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0XHQvLyBhbiBlbXB0eSBwYXRoIHNoYWxsIHJlZnJlc2ggdGhlIGVudGl0eSB3aXRob3V0IGRlcGVuZGVuY2llcyB3aGljaCBtZWFucyAqIGZvciB0aGUgbW9kZWxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdHMuVGFyZ2V0UHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IFwiKlwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c0tpbmQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7c0Jhc2VFbnRpdHlTZXR9LyR7c1BhdGh9LyRraW5kYCk7XG5cblx0XHRcdFx0XHRpZiAoc0tpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0cy5UYXJnZXRFbnRpdGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHNQYXRoXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNLaW5kKSB7XG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHMuVGFyZ2V0UHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogc1BhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoYCR7c1BhdGh9IGlzIG5vdCBhIHZhbGlkIHBhdGggdG8gYmUgcmVmcmVzaGVkYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdHMuVGFyZ2V0RW50aXRpZXMuY29uY2F0KG9TaWRlRWZmZWN0cy5UYXJnZXRQcm9wZXJ0aWVzKSwgb0JpbmRpbmdDb250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsaXN0IGVudHJpZXMgY3VycmVudGx5IHNlbGVjdGVkIGZvciB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuRXh0ZW5zaW9uQVBJI2dldFNlbGVjdGVkQ29udGV4dHNcblx0ICogQHBhcmFtIHNUYWJsZUlkIFRoZSBJRCBpZGVudGlmeWluZyB0aGUgdGFibGUgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgcmVxdWVzdGVkIGZvclxuXHQgKiBAcmV0dXJucyBBcnJheSBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBjb250ZXh0c1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRTZWxlY3RlZENvbnRleHRzKHNUYWJsZUlkOiBzdHJpbmcpIHtcblx0XHRsZXQgb1RhYmxlID0gdGhpcy5fdmlldy5ieUlkKHNUYWJsZUlkKTtcblx0XHRpZiAob1RhYmxlICYmIG9UYWJsZS5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRvVGFibGUgPSAob1RhYmxlIGFzIEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPikuZ2V0Q29udGVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gKG9UYWJsZSAmJiBvVGFibGUuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAob1RhYmxlIGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpKSB8fCBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBvciBoaWRlcyB0aGUgc2lkZSBjb250ZW50IG9mIGFuIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNzaG93U2lkZUNvbnRlbnRcblx0ICogQHBhcmFtIHNTdWJTZWN0aW9uS2V5IEtleSBvZiB0aGUgc2lkZSBjb250ZW50IGZyYWdtZW50IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0Lmpzb25cblx0ICogQHBhcmFtIFtiU2hvd10gT3B0aW9uYWwgQm9vbGVhbiBmbGFnIHRvIHNob3cgb3IgaGlkZSB0aGUgc2lkZSBjb250ZW50XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNob3dTaWRlQ29udGVudChzU3ViU2VjdGlvbktleTogc3RyaW5nLCBiU2hvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHNCbG9ja0lEID0gZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRChzU3ViU2VjdGlvbktleSksXG5cdFx0XHRvQmxvY2sgPSB0aGlzLl92aWV3LmJ5SWQoc0Jsb2NrSUQpLFxuXHRcdFx0YkJsb2NrU3RhdGUgPSBiU2hvdyA9PT0gdW5kZWZpbmVkID8gIShvQmxvY2sgYXMgRHluYW1pY1NpZGVDb250ZW50KS5nZXRTaG93U2lkZUNvbnRlbnQoKSA6IGJTaG93O1xuXHRcdChvQmxvY2sgYXMgRHluYW1pY1NpZGVDb250ZW50KS5zZXRTaG93U2lkZUNvbnRlbnQoYkJsb2NrU3RhdGUsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBib3VuZCBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNnZXRCaW5kaW5nQ29udGV4dFxuXHQgKiBAcmV0dXJucyBDb250ZXh0IGJvdW5kIHRvIHRoZSBvYmplY3QgcGFnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRCaW5kaW5nQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkIGEgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgYmVsb3cgdGhlIGFuY2hvciBiYXIuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuRXh0ZW5zaW9uQVBJI19idWlsZE9QTWVzc2FnZVxuXHQgKiBAcGFyYW0ge3NhcC51aS5jb3JlLm1lc3NhZ2UuTWVzc2FnZVtdfSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlcyB1c2VkIHRvIGdlbmVyYXRlZCB0aGUgbWVzc2FnZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxNZXNzYWdlPn0gUHJvbWlzZSBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgbWVzc2FnZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2J1aWxkT1BNZXNzYWdlKG1lc3NhZ2VzOiBNZXNzYWdlW10pOiBQcm9taXNlPE1lc3NhZ2UgfCBudWxsPiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuX3ZpZXc7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBhd2FpdCAodmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCk7XG5cdFx0bGV0IG1lc3NhZ2U6IE1lc3NhZ2UgfCBudWxsID0gbnVsbDtcblx0XHRzd2l0Y2ggKG1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzWzBdO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VTdGF0czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHtcblx0XHRcdFx0XHRcIkVycm9yXCI6IHsgaWQ6IDIsIGNvdW50OiAwIH0sXG5cdFx0XHRcdFx0XCJXYXJuaW5nXCI6IHsgaWQ6IDEsIGNvdW50OiAwIH0sXG5cdFx0XHRcdFx0XCJJbmZvcm1hdGlvblwiOiB7IGlkOiAwLCBjb3VudDogMCB9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlcy5yZWR1Y2UoKGFjYywgY3VycmVudFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFR5cGUgPSBjdXJyZW50VmFsdWUuZ2V0VHlwZSgpO1xuXHRcdFx0XHRcdGFjYy5zZXRUeXBlKG1lc3NhZ2VTdGF0c1tjdXJyZW50VHlwZV0uaWQgPiBtZXNzYWdlU3RhdHNbYWNjLmdldFR5cGUoKV0uaWQgPyBjdXJyZW50VHlwZSA6IGFjYy5nZXRUeXBlKCkpO1xuXHRcdFx0XHRcdG1lc3NhZ2VTdGF0c1tjdXJyZW50VHlwZV0uY291bnQrKztcblx0XHRcdFx0XHRyZXR1cm4gYWNjO1xuXHRcdFx0XHR9LCBuZXcgTWVzc2FnZSh7IHR5cGU6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uIH0pKTtcblxuXHRcdFx0XHRpZiAobWVzc2FnZVN0YXRzLkVycm9yLmNvdW50ID09PSAwICYmIG1lc3NhZ2VTdGF0cy5XYXJuaW5nLmNvdW50ID09PSAwICYmIG1lc3NhZ2VTdGF0cy5JbmZvcm1hdGlvbi5jb3VudCA+IDApIHtcblx0XHRcdFx0XHRtZXNzYWdlLnNldE1lc3NhZ2UocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk9CSkVDVFBBR0VTVEFURV9JTkZPUk1BVElPTlwiKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoKG1lc3NhZ2VTdGF0cy5FcnJvci5jb3VudCA+IDAgJiYgbWVzc2FnZVN0YXRzLldhcm5pbmcuY291bnQgPiAwKSB8fCBtZXNzYWdlU3RhdHMuSW5mb3JtYXRpb24uY291bnQgPiAwKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zZXRNZXNzYWdlKHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJPQkpFQ1RQQUdFU1RBVEVfSVNTVUVcIikpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0TWVzc2FnZShcblx0XHRcdFx0XHRcdHJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvciA/IFwiT0JKRUNUUEFHRVNUQVRFX0VSUk9SXCIgOiBcIk9CSkVDVFBBR0VTVEFURV9XQVJOSU5HXCJcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtZXNzYWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHRoZSBtZXNzYWdlIHN0cmlwIGJlbG93IHRoZSBhbmNob3IgYmFyLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNzaG93TWVzc2FnZXNcblx0ICogQHBhcmFtIHtzYXAudWkuY29yZS5tZXNzYWdlLk1lc3NhZ2V9IG1lc3NhZ2VzIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXG5cdGFzeW5jIHNob3dNZXNzYWdlcyhtZXNzYWdlczogTWVzc2FnZVtdKSB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuX3ZpZXc7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLl9idWlsZE9QTWVzc2FnZShtZXNzYWdlcyk7XG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHQoaW50ZXJuYWxNb2RlbENvbnRleHQgYXMgYW55KT8uc2V0UHJvcGVydHkoXCJPUE1lc3NhZ2VTdHJpcFZpc2liaWxpdHlcIiwgdHJ1ZSk7XG5cdFx0XHRcdChpbnRlcm5hbE1vZGVsQ29udGV4dCBhcyBhbnkpPy5zZXRQcm9wZXJ0eShcIk9QTWVzc2FnZVN0cmlwVGV4dFwiLCBtZXNzYWdlLmdldE1lc3NhZ2UoKSk7XG5cdFx0XHRcdChpbnRlcm5hbE1vZGVsQ29udGV4dCBhcyBhbnkpPy5zZXRQcm9wZXJ0eShcIk9QTWVzc2FnZVN0cmlwVHlwZVwiLCBtZXNzYWdlLmdldFR5cGUoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhpZGVNZXNzYWdlKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZGlzcGxheSBPYmplY3RQYWdlIG1lc3NhZ2VcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhpZGVzIHRoZSBtZXNzYWdlIHN0cmlwIGJlbG93IHRoZSBhbmNob3IgYmFyLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNoaWRlTWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRoaWRlTWVzc2FnZSgpIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5fdmlldztcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHQoaW50ZXJuYWxNb2RlbENvbnRleHQgYXMgYW55KT8uc2V0UHJvcGVydHkoXCJPUE1lc3NhZ2VTdHJpcFZpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7RUFrakJPLGdCQUFnQkEsSUFBaEIsRUFBc0JDLE9BQXRCLEVBQStCO0lB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
244
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSIsImRlZmluZVVJNUNsYXNzIiwicmVmcmVzaCIsInZQYXRoIiwib0JpbmRpbmdDb250ZXh0IiwiX3ZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwib0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50Iiwib1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9TaWRlRWZmZWN0cyIsIlRhcmdldFByb3BlcnRpZXMiLCJUYXJnZXRFbnRpdGllcyIsImFQYXRocyIsInNQYXRoIiwic0Jhc2VFbnRpdHlTZXQiLCJzS2luZCIsInVuZGVmaW5lZCIsInB1c2giLCIkTmF2aWdhdGlvblByb3BlcnR5UGF0aCIsIkFycmF5IiwiaXNBcnJheSIsIl9jb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJnZXRFbnRpdHlTZXQiLCJpIiwibGVuZ3RoIiwiJFByb3BlcnR5UGF0aCIsImdldE9iamVjdCIsInJlamVjdCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsImNvbmNhdCIsImdldFNlbGVjdGVkQ29udGV4dHMiLCJzVGFibGVJZCIsIm9UYWJsZSIsImJ5SWQiLCJpc0EiLCJnZXRDb250ZW50Iiwic2hvd1NpZGVDb250ZW50Iiwic1N1YlNlY3Rpb25LZXkiLCJiU2hvdyIsInNCbG9ja0lEIiwiZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRCIsIm9CbG9jayIsImJCbG9ja1N0YXRlIiwiZ2V0U2hvd1NpZGVDb250ZW50Iiwic2V0U2hvd1NpZGVDb250ZW50IiwiX2J1aWxkT1BNZXNzYWdlIiwibWVzc2FnZXMiLCJ2aWV3IiwiZ2V0UmVzb3VyY2VCdW5kbGUiLCJyZXNvdXJjZUJ1bmRsZSIsIm1lc3NhZ2UiLCJtZXNzYWdlU3RhdHMiLCJpZCIsImNvdW50IiwicmVkdWNlIiwiYWNjIiwiY3VycmVudFZhbHVlIiwiY3VycmVudFR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsIk1lc3NhZ2UiLCJ0eXBlIiwiTWVzc2FnZVR5cGUiLCJJbmZvcm1hdGlvbiIsIkVycm9yIiwiV2FybmluZyIsInNldE1lc3NhZ2UiLCJnZXRUZXh0Iiwic2hvd01lc3NhZ2VzIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJzZXRQcm9wZXJ0eSIsImdldE1lc3NhZ2UiLCJoaWRlTWVzc2FnZSIsIkxvZyIsImVycm9yIiwiRXh0ZW5zaW9uQVBJIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFeHRlbnNpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBnZXRTaWRlQ29udGVudExheW91dElEIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9JRFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVBUElcIjtcbmltcG9ydCB7IE1lc3NhZ2VUeXBlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNTaWRlQ29udGVudCBmcm9tIFwic2FwL3VpL2xheW91dC9EeW5hbWljU2lkZUNvbnRlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL3Jlc291cmNlL1Jlc291cmNlTW9kZWxcIjtcblxuLyoqXG4gKiBFeHRlbnNpb24gQVBJIGZvciBvYmplY3QgcGFnZXMgb24gU0FQIEZpb3JpIGVsZW1lbnRzIGZvciBPRGF0YSBWNC5cbiAqXG4gKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSVxuICogQHB1YmxpY1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGZpbmFsXG4gKiBAc2luY2UgMS43OS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5FeHRlbnNpb25BUElcIilcbmNsYXNzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgZXh0ZW5kcyBFeHRlbnNpb25BUEkge1xuXHQvKipcblx0ICogUmVmcmVzaGVzIGVpdGhlciB0aGUgd2hvbGUgb2JqZWN0IHBhZ2Ugb3Igb25seSBwYXJ0cyBvZiBpdC5cblx0ICpcblx0ICogQGFsaWFzIHNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5FeHRlbnNpb25BUEkjcmVmcmVzaFxuXHQgKiBAcGFyYW0gW3ZQYXRoXSBQYXRoIG9yIGFycmF5IG9mIHBhdGhzIHJlZmVycmluZyB0byBlbnRpdGllcyBvciBwcm9wZXJ0aWVzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogSWYgb21pdHRlZCwgdGhlIHdob2xlIG9iamVjdCBwYWdlIGlzIHJlZnJlc2hlZC4gVGhlIHBhdGggXCJcIiByZWZyZXNoZXMgdGhlIGVudGl0eSBhc3NpZ25lZCB0byB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogd2l0aG91dCBuYXZpZ2F0aW9uc1xuXHQgKiBAcmV0dXJucyBSZXNvbHZlZCBvbmNlIHRoZSBkYXRhIGlzIHJlZnJlc2hlZCBvciByZWplY3RlZCBpZiB0aGUgcmVxdWVzdCBmYWlsZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVmcmVzaCh2UGF0aDogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRpZiAoIW9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Ly8gbm90aGluZyB0byBiZSByZWZyZXNoZWQgLSBkbyBub3QgYmxvY2sgdGhlIGFwcCFcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl92aWV3KSxcblx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0b1NpZGVFZmZlY3RzOiBhbnkgPSB7XG5cdFx0XHRcdFRhcmdldFByb3BlcnRpZXM6IFtdLFxuXHRcdFx0XHRUYXJnZXRFbnRpdGllczogW11cblx0XHRcdH07XG5cdFx0bGV0IGFQYXRocywgc1BhdGgsIHNCYXNlRW50aXR5U2V0LCBzS2luZDtcblxuXHRcdGlmICh2UGF0aCA9PT0gdW5kZWZpbmVkIHx8IHZQYXRoID09PSBudWxsKSB7XG5cdFx0XHQvLyB3ZSBqdXN0IGFkZCBhbiBlbXB0eSBwYXRoIHdoaWNoIHNob3VsZCByZWZyZXNoIHRoZSBwYWdlIHdpdGggYWxsIGRlcGVuZGVudCBiaW5kaW5nc1xuXHRcdFx0b1NpZGVFZmZlY3RzLlRhcmdldEVudGl0aWVzLnB1c2goe1xuXHRcdFx0XHQkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogXCJcIlxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFQYXRocyA9IEFycmF5LmlzQXJyYXkodlBhdGgpID8gdlBhdGggOiBbdlBhdGhdO1xuXHRcdFx0c0Jhc2VFbnRpdHlTZXQgPSAodGhpcy5fY29udHJvbGxlci5nZXRPd25lckNvbXBvbmVudCgpIGFzIGFueSkuZ2V0RW50aXR5U2V0KCk7XG5cblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYVBhdGhzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHNQYXRoID0gYVBhdGhzW2ldO1xuXHRcdFx0XHRpZiAoc1BhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0XHQvLyBhbiBlbXB0eSBwYXRoIHNoYWxsIHJlZnJlc2ggdGhlIGVudGl0eSB3aXRob3V0IGRlcGVuZGVuY2llcyB3aGljaCBtZWFucyAqIGZvciB0aGUgbW9kZWxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdHMuVGFyZ2V0UHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdCRQcm9wZXJ0eVBhdGg6IFwiKlwiXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c0tpbmQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7c0Jhc2VFbnRpdHlTZXR9LyR7c1BhdGh9LyRraW5kYCk7XG5cblx0XHRcdFx0XHRpZiAoc0tpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0cy5UYXJnZXRFbnRpdGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHNQYXRoXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNLaW5kKSB7XG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHMuVGFyZ2V0UHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0JFByb3BlcnR5UGF0aDogc1BhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoYCR7c1BhdGh9IGlzIG5vdCBhIHZhbGlkIHBhdGggdG8gYmUgcmVmcmVzaGVkYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdHMuVGFyZ2V0RW50aXRpZXMuY29uY2F0KG9TaWRlRWZmZWN0cy5UYXJnZXRQcm9wZXJ0aWVzKSwgb0JpbmRpbmdDb250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsaXN0IGVudHJpZXMgY3VycmVudGx5IHNlbGVjdGVkIGZvciB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuRXh0ZW5zaW9uQVBJI2dldFNlbGVjdGVkQ29udGV4dHNcblx0ICogQHBhcmFtIHNUYWJsZUlkIFRoZSBJRCBpZGVudGlmeWluZyB0aGUgdGFibGUgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgcmVxdWVzdGVkIGZvclxuXHQgKiBAcmV0dXJucyBBcnJheSBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBjb250ZXh0c1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRTZWxlY3RlZENvbnRleHRzKHNUYWJsZUlkOiBzdHJpbmcpIHtcblx0XHRsZXQgb1RhYmxlID0gdGhpcy5fdmlldy5ieUlkKHNUYWJsZUlkKTtcblx0XHRpZiAob1RhYmxlICYmIG9UYWJsZS5pc0EoXCJzYXAuZmUubWFjcm9zLnRhYmxlLlRhYmxlQVBJXCIpKSB7XG5cdFx0XHRvVGFibGUgPSAob1RhYmxlIGFzIEVuaGFuY2VXaXRoVUk1PFRhYmxlQVBJPikuZ2V0Q29udGVudCgpO1xuXHRcdH1cblx0XHRyZXR1cm4gKG9UYWJsZSAmJiBvVGFibGUuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSAmJiAob1RhYmxlIGFzIGFueSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpKSB8fCBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBvciBoaWRlcyB0aGUgc2lkZSBjb250ZW50IG9mIGFuIG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNzaG93U2lkZUNvbnRlbnRcblx0ICogQHBhcmFtIHNTdWJTZWN0aW9uS2V5IEtleSBvZiB0aGUgc2lkZSBjb250ZW50IGZyYWdtZW50IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0Lmpzb25cblx0ICogQHBhcmFtIFtiU2hvd10gT3B0aW9uYWwgQm9vbGVhbiBmbGFnIHRvIHNob3cgb3IgaGlkZSB0aGUgc2lkZSBjb250ZW50XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNob3dTaWRlQ29udGVudChzU3ViU2VjdGlvbktleTogc3RyaW5nLCBiU2hvdzogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IHNCbG9ja0lEID0gZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRChzU3ViU2VjdGlvbktleSksXG5cdFx0XHRvQmxvY2sgPSB0aGlzLl92aWV3LmJ5SWQoc0Jsb2NrSUQpLFxuXHRcdFx0YkJsb2NrU3RhdGUgPSBiU2hvdyA9PT0gdW5kZWZpbmVkID8gIShvQmxvY2sgYXMgRHluYW1pY1NpZGVDb250ZW50KS5nZXRTaG93U2lkZUNvbnRlbnQoKSA6IGJTaG93O1xuXHRcdChvQmxvY2sgYXMgRHluYW1pY1NpZGVDb250ZW50KS5zZXRTaG93U2lkZUNvbnRlbnQoYkJsb2NrU3RhdGUsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBib3VuZCBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9iamVjdCBwYWdlLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNnZXRCaW5kaW5nQ29udGV4dFxuXHQgKiBAcmV0dXJucyBDb250ZXh0IGJvdW5kIHRvIHRoZSBvYmplY3QgcGFnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRCaW5kaW5nQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkIGEgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgYmVsb3cgdGhlIGFuY2hvciBiYXIuXG5cdCAqXG5cdCAqIEBhbGlhcyBzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuRXh0ZW5zaW9uQVBJI19idWlsZE9QTWVzc2FnZVxuXHQgKiBAcGFyYW0ge3NhcC51aS5jb3JlLm1lc3NhZ2UuTWVzc2FnZVtdfSBtZXNzYWdlcyBBcnJheSBvZiBtZXNzYWdlcyB1c2VkIHRvIGdlbmVyYXRlZCB0aGUgbWVzc2FnZVxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZTxNZXNzYWdlPn0gUHJvbWlzZSBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgbWVzc2FnZVxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0YXN5bmMgX2J1aWxkT1BNZXNzYWdlKG1lc3NhZ2VzOiBNZXNzYWdlW10pOiBQcm9taXNlPE1lc3NhZ2UgfCBudWxsPiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuX3ZpZXc7XG5cdFx0Y29uc3QgcmVzb3VyY2VCdW5kbGUgPSBhd2FpdCAodmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpIGFzIFJlc291cmNlTW9kZWwpLmdldFJlc291cmNlQnVuZGxlKCk7XG5cdFx0bGV0IG1lc3NhZ2U6IE1lc3NhZ2UgfCBudWxsID0gbnVsbDtcblx0XHRzd2l0Y2ggKG1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzWzBdO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGNvbnN0IG1lc3NhZ2VTdGF0czogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHtcblx0XHRcdFx0XHRcIkVycm9yXCI6IHsgaWQ6IDIsIGNvdW50OiAwIH0sXG5cdFx0XHRcdFx0XCJXYXJuaW5nXCI6IHsgaWQ6IDEsIGNvdW50OiAwIH0sXG5cdFx0XHRcdFx0XCJJbmZvcm1hdGlvblwiOiB7IGlkOiAwLCBjb3VudDogMCB9XG5cdFx0XHRcdH07XG5cdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlcy5yZWR1Y2UoKGFjYywgY3VycmVudFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFR5cGUgPSBjdXJyZW50VmFsdWUuZ2V0VHlwZSgpO1xuXHRcdFx0XHRcdGFjYy5zZXRUeXBlKG1lc3NhZ2VTdGF0c1tjdXJyZW50VHlwZV0uaWQgPiBtZXNzYWdlU3RhdHNbYWNjLmdldFR5cGUoKV0uaWQgPyBjdXJyZW50VHlwZSA6IGFjYy5nZXRUeXBlKCkpO1xuXHRcdFx0XHRcdG1lc3NhZ2VTdGF0c1tjdXJyZW50VHlwZV0uY291bnQrKztcblx0XHRcdFx0XHRyZXR1cm4gYWNjO1xuXHRcdFx0XHR9LCBuZXcgTWVzc2FnZSh7IHR5cGU6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uIH0pKTtcblxuXHRcdFx0XHRpZiAobWVzc2FnZVN0YXRzLkVycm9yLmNvdW50ID09PSAwICYmIG1lc3NhZ2VTdGF0cy5XYXJuaW5nLmNvdW50ID09PSAwICYmIG1lc3NhZ2VTdGF0cy5JbmZvcm1hdGlvbi5jb3VudCA+IDApIHtcblx0XHRcdFx0XHRtZXNzYWdlLnNldE1lc3NhZ2UocmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk9CSkVDVFBBR0VTVEFURV9JTkZPUk1BVElPTlwiKSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoKG1lc3NhZ2VTdGF0cy5FcnJvci5jb3VudCA+IDAgJiYgbWVzc2FnZVN0YXRzLldhcm5pbmcuY291bnQgPiAwKSB8fCBtZXNzYWdlU3RhdHMuSW5mb3JtYXRpb24uY291bnQgPiAwKSB7XG5cdFx0XHRcdFx0bWVzc2FnZS5zZXRNZXNzYWdlKHJlc291cmNlQnVuZGxlLmdldFRleHQoXCJPQkpFQ1RQQUdFU1RBVEVfSVNTVUVcIikpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG1lc3NhZ2Uuc2V0TWVzc2FnZShcblx0XHRcdFx0XHRcdHJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2UuZ2V0VHlwZSgpID09PSBNZXNzYWdlVHlwZS5FcnJvciA/IFwiT0JKRUNUUEFHRVNUQVRFX0VSUk9SXCIgOiBcIk9CSkVDVFBBR0VTVEFURV9XQVJOSU5HXCJcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBtZXNzYWdlO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHRoZSBtZXNzYWdlIHN0cmlwIGJlbG93IHRoZSBhbmNob3IgYmFyLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNzaG93TWVzc2FnZXNcblx0ICogQHBhcmFtIHtzYXAudWkuY29yZS5tZXNzYWdlLk1lc3NhZ2V9IG1lc3NhZ2VzIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXG5cdGFzeW5jIHNob3dNZXNzYWdlcyhtZXNzYWdlczogTWVzc2FnZVtdKSB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuX3ZpZXc7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB2aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCB0aGlzLl9idWlsZE9QTWVzc2FnZShtZXNzYWdlcyk7XG5cdFx0XHRpZiAobWVzc2FnZSkge1xuXHRcdFx0XHQoaW50ZXJuYWxNb2RlbENvbnRleHQgYXMgYW55KT8uc2V0UHJvcGVydHkoXCJPUE1lc3NhZ2VTdHJpcFZpc2liaWxpdHlcIiwgdHJ1ZSk7XG5cdFx0XHRcdChpbnRlcm5hbE1vZGVsQ29udGV4dCBhcyBhbnkpPy5zZXRQcm9wZXJ0eShcIk9QTWVzc2FnZVN0cmlwVGV4dFwiLCBtZXNzYWdlLmdldE1lc3NhZ2UoKSk7XG5cdFx0XHRcdChpbnRlcm5hbE1vZGVsQ29udGV4dCBhcyBhbnkpPy5zZXRQcm9wZXJ0eShcIk9QTWVzc2FnZVN0cmlwVHlwZVwiLCBtZXNzYWdlLmdldFR5cGUoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0aGlzLmhpZGVNZXNzYWdlKCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJDYW5ub3QgZGlzcGxheSBPYmplY3RQYWdlIG1lc3NhZ2VcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhpZGVzIHRoZSBtZXNzYWdlIHN0cmlwIGJlbG93IHRoZSBhbmNob3IgYmFyLlxuXHQgKlxuXHQgKiBAYWxpYXMgc2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSSNoaWRlTWVzc2FnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRoaWRlTWVzc2FnZSgpIHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5fdmlldztcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKTtcblx0XHQoaW50ZXJuYWxNb2RlbENvbnRleHQgYXMgYW55KT8uc2V0UHJvcGVydHkoXCJPUE1lc3NhZ2VTdHJpcFZpc2liaWxpdHlcIiwgZmFsc2UpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7O0VBa2pCTyxnQkFBZ0JBLElBQUksRUFBRUMsT0FBTyxFQUFFO0lBQ3JDLElB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