@sapui5/sap.fe.core 1.97.0 → 1.99.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/package.json +5 -4
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +377 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +385 -0
  5. package/src/sap/fe/core/AppComponent.js +6 -3
  6. package/src/sap/fe/core/AppStateHandler.js +229 -181
  7. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  8. package/src/sap/fe/core/BaseController.js +3 -2
  9. package/src/sap/fe/core/BusyLocker.js +105 -121
  10. package/src/sap/fe/core/BusyLocker.ts +98 -0
  11. package/src/sap/fe/core/CommonUtils.js +2073 -2379
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +16 -7
  14. package/src/sap/fe/core/PageController.js +84 -119
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -807
  17. package/src/sap/fe/core/RouterProxy.ts +838 -0
  18. package/src/sap/fe/core/Synchronization.js +51 -35
  19. package/src/sap/fe/core/Synchronization.ts +29 -0
  20. package/src/sap/fe/core/TemplateComponent.js +173 -155
  21. package/src/sap/fe/core/TemplateComponent.ts +166 -0
  22. package/src/sap/fe/core/TemplateModel.js +97 -54
  23. package/src/sap/fe/core/TemplateModel.ts +64 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1579
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +560 -581
  27. package/src/sap/fe/core/actions/draft.ts +594 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -511
  29. package/src/sap/fe/core/actions/messageHandling.ts +532 -0
  30. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  31. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  32. package/src/sap/fe/core/actions/operations.js +1074 -1211
  33. package/src/sap/fe/core/actions/operations.ts +1162 -0
  34. package/src/sap/fe/core/actions/sticky.js +102 -105
  35. package/src/sap/fe/core/actions/sticky.ts +102 -0
  36. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
  37. package/src/sap/fe/core/controllerextensions/EditFlow.js +229 -260
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +288 -13
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -23
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +82 -46
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +113 -25
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +135 -44
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +172 -0
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +22 -9
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +3 -3
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +37 -9
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +8 -4
  50. package/src/sap/fe/core/controllerextensions/Routing.js +25 -5
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +22 -8
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +9 -9
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +22 -21
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
  56. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -1
  57. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  58. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  59. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  60. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +9 -5
  61. package/src/sap/fe/core/controls/FieldWrapper.js +18 -23
  62. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  63. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -7
  64. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  65. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +2 -1
  66. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  67. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  68. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  69. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  70. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +106 -0
  71. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +79 -0
  72. package/src/sap/fe/core/converters/ConverterContext.js +14 -2
  73. package/src/sap/fe/core/converters/ConverterContext.ts +14 -3
  74. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  75. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
  76. package/src/sap/fe/core/converters/ManifestWrapper.js +56 -32
  77. package/src/sap/fe/core/converters/ManifestWrapper.ts +24 -6
  78. package/src/sap/fe/core/converters/MetaModelConverter.js +67 -6
  79. package/src/sap/fe/core/converters/MetaModelConverter.ts +70 -14
  80. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  81. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  82. package/src/sap/fe/core/converters/annotations/DataField.js +3 -3
  83. package/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
  84. package/src/sap/fe/core/converters/common/AnnotationConverter.js +33 -21
  85. package/src/sap/fe/core/converters/controls/Common/Action.js +11 -2
  86. package/src/sap/fe/core/converters/controls/Common/Action.ts +8 -2
  87. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  88. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  89. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  90. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  91. package/src/sap/fe/core/converters/controls/Common/Form.js +20 -10
  92. package/src/sap/fe/core/converters/controls/Common/Form.ts +24 -4
  93. package/src/sap/fe/core/converters/controls/Common/KPI.js +69 -4
  94. package/src/sap/fe/core/converters/controls/Common/KPI.ts +72 -0
  95. package/src/sap/fe/core/converters/controls/Common/Table.js +390 -398
  96. package/src/sap/fe/core/converters/controls/Common/Table.ts +497 -484
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +527 -0
  98. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +655 -0
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +489 -37
  100. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +506 -58
  101. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +2 -2
  102. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +1 -1
  103. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +17 -9
  104. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +24 -9
  105. package/src/sap/fe/core/converters/helpers/Aggregation.js +18 -3
  106. package/src/sap/fe/core/converters/helpers/Aggregation.ts +28 -5
  107. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -1
  108. package/src/sap/fe/core/converters/helpers/IssueManager.ts +6 -0
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  110. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
  112. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
  113. package/src/sap/fe/core/designtime/AppComponent.designtime.js +11 -2
  114. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  115. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  118. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  119. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  120. package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
  121. package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
  122. package/src/sap/fe/core/formatters/ValueFormatter.js +30 -5
  123. package/src/sap/fe/core/formatters/ValueFormatter.ts +30 -7
  124. package/src/sap/fe/core/fpm/Component.js +3 -2
  125. package/src/sap/fe/core/helpers/AppStartupHelper.js +359 -0
  126. package/src/sap/fe/core/helpers/AppStartupHelper.ts +391 -0
  127. package/src/sap/fe/core/helpers/BindingExpression.js +484 -437
  128. package/src/sap/fe/core/helpers/BindingExpression.ts +480 -463
  129. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  130. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  131. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  132. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  133. package/src/sap/fe/core/helpers/EditState.js +81 -84
  134. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  135. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  136. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  137. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  138. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  139. package/src/sap/fe/core/helpers/KeepAliveHelper.js +4 -5
  140. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +10 -10
  141. package/src/sap/fe/core/helpers/MassEditHelper.js +687 -0
  142. package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
  143. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  144. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  145. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  146. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  147. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  148. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  149. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  150. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  151. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  152. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  153. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  154. package/src/sap/fe/core/library.js +30 -3
  155. package/src/sap/fe/core/library.support.js +12 -5
  156. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +62 -0
  157. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +66 -0
  158. package/src/sap/fe/core/messagebundle.properties +61 -13
  159. package/src/sap/fe/core/messagebundle_ar.properties +33 -2
  160. package/src/sap/fe/core/messagebundle_bg.properties +33 -2
  161. package/src/sap/fe/core/messagebundle_ca.properties +33 -2
  162. package/src/sap/fe/core/messagebundle_cs.properties +34 -3
  163. package/src/sap/fe/core/messagebundle_cy.properties +33 -2
  164. package/src/sap/fe/core/messagebundle_da.properties +33 -2
  165. package/src/sap/fe/core/messagebundle_de.properties +33 -2
  166. package/src/sap/fe/core/messagebundle_el.properties +33 -2
  167. package/src/sap/fe/core/messagebundle_en.properties +32 -1
  168. package/src/sap/fe/core/messagebundle_en_GB.properties +32 -1
  169. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +36 -1
  170. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +33 -2
  171. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +33 -2
  172. package/src/sap/fe/core/messagebundle_es.properties +33 -2
  173. package/src/sap/fe/core/messagebundle_es_MX.properties +33 -2
  174. package/src/sap/fe/core/messagebundle_et.properties +33 -2
  175. package/src/sap/fe/core/messagebundle_fi.properties +34 -3
  176. package/src/sap/fe/core/messagebundle_fr.properties +38 -7
  177. package/src/sap/fe/core/messagebundle_fr_CA.properties +33 -2
  178. package/src/sap/fe/core/messagebundle_hi.properties +33 -2
  179. package/src/sap/fe/core/messagebundle_hr.properties +33 -2
  180. package/src/sap/fe/core/messagebundle_hu.properties +34 -3
  181. package/src/sap/fe/core/messagebundle_id.properties +36 -5
  182. package/src/sap/fe/core/messagebundle_it.properties +33 -2
  183. package/src/sap/fe/core/messagebundle_iw.properties +33 -2
  184. package/src/sap/fe/core/messagebundle_ja.properties +33 -2
  185. package/src/sap/fe/core/messagebundle_kk.properties +33 -2
  186. package/src/sap/fe/core/messagebundle_ko.properties +33 -2
  187. package/src/sap/fe/core/messagebundle_lt.properties +33 -2
  188. package/src/sap/fe/core/messagebundle_lv.properties +33 -2
  189. package/src/sap/fe/core/messagebundle_ms.properties +33 -2
  190. package/src/sap/fe/core/messagebundle_nl.properties +33 -2
  191. package/src/sap/fe/core/messagebundle_no.properties +33 -2
  192. package/src/sap/fe/core/messagebundle_pl.properties +33 -2
  193. package/src/sap/fe/core/messagebundle_pt.properties +34 -3
  194. package/src/sap/fe/core/messagebundle_pt_PT.properties +33 -2
  195. package/src/sap/fe/core/messagebundle_ro.properties +33 -2
  196. package/src/sap/fe/core/messagebundle_ru.properties +33 -2
  197. package/src/sap/fe/core/messagebundle_sh.properties +33 -2
  198. package/src/sap/fe/core/messagebundle_sk.properties +33 -2
  199. package/src/sap/fe/core/messagebundle_sl.properties +33 -2
  200. package/src/sap/fe/core/messagebundle_sv.properties +34 -3
  201. package/src/sap/fe/core/messagebundle_th.properties +33 -2
  202. package/src/sap/fe/core/messagebundle_tr.properties +33 -2
  203. package/src/sap/fe/core/messagebundle_uk.properties +33 -2
  204. package/src/sap/fe/core/messagebundle_vi.properties +33 -2
  205. package/src/sap/fe/core/messagebundle_zh_CN.properties +33 -2
  206. package/src/sap/fe/core/messagebundle_zh_TW.properties +33 -2
  207. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  208. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  209. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  210. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  211. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +4 -3
  212. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +9 -5
  213. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  214. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  215. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  216. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  217. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -1152
  218. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  219. package/src/sap/fe/core/services/ShellServicesFactory.js +31 -2
  220. package/src/sap/fe/core/services/ShellServicesFactory.ts +45 -11
  221. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +42 -85
  222. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +57 -100
  223. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -478
  224. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  225. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  226. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  227. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  228. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  229. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  230. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  231. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +38 -0
  232. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.ts +18 -0
  233. package/src/sap/fe/core/templating/DataModelPathHelper.js +10 -48
  234. package/src/sap/fe/core/templating/DataModelPathHelper.ts +14 -46
  235. package/src/sap/fe/core/templating/DisplayModeFormatter.js +114 -0
  236. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +86 -0
  237. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  238. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  239. package/src/sap/fe/core/templating/FilterHelper.js +139 -70
  240. package/src/sap/fe/core/templating/FilterHelper.ts +140 -70
  241. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  242. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  243. package/src/sap/fe/core/templating/UIFormatters.js +45 -110
  244. package/src/sap/fe/core/templating/UIFormatters.ts +39 -75
  245. package/src/sap/fe/core/type/Email.js +1 -1
  246. package/src/sap/fe/core/type/Email.ts +4 -6
  247. package/ui5.yaml +0 -3
  248. package/src/sap/fe/core/controls/filterbar.d.js +0 -8
  249. package/src/sap/fe/core/controls/filterbar.d.ts +0 -0
@@ -213,7 +213,15 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
213
213
 
214
214
  _exports.Association = Association;
215
215
 
216
+ /**
217
+ * Decorator to provide a new API class to be used in the macros.
218
+ *
219
+ * @param sTarget The fully qualified name of the macro API
220
+ * @param isDependentBound Whether this API will be used as a dependent or not
221
+ * @class
222
+ */
216
223
  function APIClass(sTarget) {
224
+ var isDependentBound = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
217
225
  return function (constructor) {
218
226
  if (!constructor.prototype.metadata) {
219
227
  constructor.prototype.metadata = {};
@@ -224,6 +232,7 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
224
232
  }
225
233
 
226
234
  constructor.prototype.metadata.interfaces.push("sap.ui.core.IFormContent");
235
+ constructor.isDependentBound = isDependentBound;
227
236
 
228
237
  if (!constructor.prototype.renderer) {
229
238
  constructor.prototype.renderer = {
@@ -289,21 +298,24 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
289
298
  args[_key] = arguments[_key];
290
299
  }
291
300
 
292
- fnInit.apply(this, args);
293
- var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
294
-
295
- var that = this;
296
- aPropertyKeys.forEach(function (propertyKey) {
297
- Object.defineProperty(that, propertyKey, {
298
- configurable: true,
299
- set: function (v) {
300
- return that.setProperty(propertyKey, v);
301
- },
302
- get: function () {
303
- return that.getProperty(propertyKey);
304
- }
301
+ fnInit && fnInit.apply(this, args);
302
+
303
+ if (obj.metadata.properties) {
304
+ var aPropertyKeys = Object.keys(obj.metadata.properties); // eslint-disable-next-line @typescript-eslint/no-this-alias
305
+
306
+ var that = this;
307
+ aPropertyKeys.forEach(function (propertyKey) {
308
+ Object.defineProperty(that, propertyKey, {
309
+ configurable: true,
310
+ set: function (v) {
311
+ return that.setProperty(propertyKey, v);
312
+ },
313
+ get: function () {
314
+ return that.getProperty(propertyKey);
315
+ }
316
+ });
305
317
  });
306
- });
318
+ }
307
319
  };
308
320
 
309
321
  ObjectPath.set(name, clazz);
@@ -311,4 +323,4 @@ sap.ui.define(["sap/base/util/ObjectPath", "sap/base/util/deepClone", "sap/ui/co
311
323
 
312
324
  return _exports;
313
325
  }, false);
314
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsImhhc093blByb3BlcnR5IiwibWV0YWRhdGEiLCJkZWVwQ2xvbmUiLCJwcm9wZXJ0aWVzIiwibWFjcm9Db250ZXh0cyIsImFnZ3JlZ2F0aW9ucyIsImFzc29jaWF0aW9ucyIsIm1ldGhvZHMiLCJldmVudHMiLCJPdmVycmlkZSIsInNUYXJnZXQiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsIkV4dGVuc2libGUiLCJvT3ZlcnJpZGVFeGVjdXRpb24iLCJvdmVycmlkZUV4ZWN1dGlvbiIsIlB1YmxpYyIsInB1YmxpYyIsIlByaXZhdGUiLCJGaW5hbCIsImZpbmFsIiwiRXZlbnQiLCJldmVudEtleSIsIkV2ZW50SGFuZGxlciIsInByb3BlcnR5a2V5IiwiY29uc3RydWN0b3IiLCJnZXRBUEkiLCJNYWNyb0NvbnRleHQiLCJiTWV0YU1vZGVsT2JqZWN0IiwiUHJvcGVydHkiLCJ0eXBlIiwibWFjcm9Db250ZXh0IiwibWV0YU1vZGVsT2JqZWN0Iiwib1Byb3BlcnR5UGFyYW1zIiwicHJvcGVydHlEZXNjcmlwdG9yIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsInNldCIsInYiLCJzZXRQcm9wZXJ0eSIsImdldCIsImdldFByb3BlcnR5IiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwic2V0QWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsIkFzc29jaWF0aW9uIiwib0Fzc29jaWF0aW9uRGVzY3JpcHRpb24iLCJBUElDbGFzcyIsInByb3RvdHlwZSIsImludGVyZmFjZXMiLCJwdXNoIiwicmVuZGVyZXIiLCJhcGlWZXJzaW9uIiwicmVuZGVyIiwib1JtIiwib0NvbnRyb2wiLCJyZW5kZXJDb250cm9sIiwiZ2V0Q29udGVudCIsImRlc2NyaWJlIiwiRWxlbWVudE1ldGFkYXRhIiwiVUk1Q2xhc3MiLCJtZXRhZGF0YUNsYXNzIiwibWV0YWRhdGFEZWZpbml0aW9uIiwiY2xhenoiLCJuYW1lIiwiaW5PYmoiLCJvYmoiLCJiYXNlVHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZm5Jbml0IiwiaW5pdCIsImFyZ3MiLCJhcHBseSIsImFQcm9wZXJ0eUtleXMiLCJrZXlzIiwidGhhdCIsImZvckVhY2giLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsIk9iamVjdFBhdGgiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQUVBLE1BQU1BLGNBQWMsR0FBRyxVQUFTQyxNQUFULEVBQXNCO0FBQzVDLFFBQUksQ0FBQ0EsTUFBTSxDQUFDQyxjQUFQLENBQXNCLFVBQXRCLENBQUwsRUFBd0M7QUFDdkNELE1BQUFBLE1BQU0sQ0FBQ0UsUUFBUCxHQUFrQkMsU0FBUyxDQUMxQkgsTUFBTSxDQUFDRSxRQUFQLElBQW1CO0FBQ2xCRSxRQUFBQSxVQUFVLEVBQUUsRUFETTtBQUVsQkMsUUFBQUEsYUFBYSxFQUFFLEVBRkc7QUFHbEJDLFFBQUFBLFlBQVksRUFBRSxFQUhJO0FBSWxCQyxRQUFBQSxZQUFZLEVBQUUsRUFKSTtBQUtsQkMsUUFBQUEsT0FBTyxFQUFFLEVBTFM7QUFNbEJDLFFBQUFBLE1BQU0sRUFBRTtBQU5VLE9BRE8sQ0FBM0I7QUFVQTs7QUFDRCxXQUFPVCxNQUFNLENBQUNFLFFBQWQ7QUFDQSxHQWREOztBQWVPLFdBQVNRLFFBQVQsQ0FBa0JDLE9BQWxCLEVBQW9DO0FBQzFDLFdBQU8sVUFBU1gsTUFBVCxFQUFzQlksV0FBdEIsRUFBMkM7QUFDakQsVUFBSSxDQUFDWixNQUFNLENBQUNhLFFBQVosRUFBc0I7QUFDckJiLFFBQUFBLE1BQU0sQ0FBQ2EsUUFBUCxHQUFrQixFQUFsQjtBQUNBOztBQUNELFVBQUlDLGFBQWEsR0FBR2QsTUFBTSxDQUFDYSxR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Q0FBQ2hELEdBQVgsQ0FBZThCLElBQWYsRUFBcUJELEtBQXJCO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJyaWRlRXhlY3V0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL212Y1wiO1xuaW1wb3J0IHsgT2JqZWN0UGF0aCwgZGVlcENsb25lIH0gZnJvbSBcInNhcC9iYXNlL3V0aWxcIjtcbmltcG9ydCB7ICRDb250cm9sU2V0dGluZ3MsIEVsZW1lbnRNZXRhZGF0YSwgUmVuZGVyTWFuYWdlciB9IGZyb20gXCJzYXAvdWkvY29yZVwiO1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uKHRhcmdldDogYW55KSB7XG5cdGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcblx0XHR0YXJnZXQubWV0YWRhdGEgPSBkZWVwQ2xvbmUoXG5cdFx0XHR0YXJnZXQubWV0YWRhdGEgfHwge1xuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0bWFjcm9Db250ZXh0czoge30sXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uczoge30sXG5cdFx0XHRcdGFzc29jaWF0aW9uczoge30sXG5cdFx0XHRcdG1ldGhvZHM6IHt9LFxuXHRcdFx0XHRldmVudHM6IHt9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0Lm1ldGFkYXRhO1xufTtcbmV4cG9ydCBmdW5jdGlvbiBPdmVycmlkZShzVGFyZ2V0Pzogc3RyaW5nKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGlmICghdGFyZ2V0Lm92ZXJyaWRlKSB7XG5cdFx0XHR0YXJnZXQub3ZlcnJpZGUgPSB7fTtcblx0XHR9XG5cdFx0bGV0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXQub3ZlcnJpZGU7XG5cdFx0aWYgKHNUYXJnZXQpIHtcblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb24pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb24gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0pIHtcblx0XHRcdFx0Y3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0LmV4dGVuc2lvbltzVGFyZ2V0XTtcblx0XHR9XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eUtleV0gPSB0YXJnZXRbcHJvcGVydHlLZXldO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIEV4dGVuc2libGUob092ZXJyaWRlRXhlY3V0aW9uPzogT3ZlcnJpZGVFeGVjdXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdFx0fVxuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLm92ZXJyaWRlRXhlY3V0aW9uID0gb092ZXJyaWRlRXhlY3V0aW9uO1xuXHR9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIFB1YmxpYyh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gUHJpdmF0ZSh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLnB1YmxpYyA9IGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIEZpbmFsKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSB7XG5cdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0aWYgKCFtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSkge1xuXHRcdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldID0ge307XG5cdH1cblx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0uZmluYWwgPSB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnQodGFyZ2V0OiBhbnksIGV2ZW50S2V5OiBzdHJpbmcpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRpZiAoIW1ldGFkYXRhLmV2ZW50c1tldmVudEtleV0pIHtcblx0XHRtZXRhZGF0YS5ldmVudHNbZXZlbnRLZXldID0ge307XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50SGFuZGxlcih0YXJnZXQ6IGFueSwgcHJvcGVydHlrZXk6IGFueSkge1xuXHR0YXJnZXQuY29uc3RydWN0b3JbcHJvcGVydHlrZXldID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRjb25zdCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0LmNvbnN0cnVjdG9yLmdldEFQSShhcmdzWzBdIGFzIFVJNUV2ZW50KTtcblx0XHRjdXJyZW50VGFyZ2V0W3Byb3BlcnR5a2V5XSguLi5hcmdzKTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1hY3JvQ29udGV4dChiTWV0YU1vZGVsT2JqZWN0OiBib29sZWFuID0gZmFsc2UpOiBhbnkge1xuXHRyZXR1cm4gUHJvcGVydHkoeyB0eXBlOiBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIsIG1hY3JvQ29udGV4dDogdHJ1ZSwgbWV0YU1vZGVsT2JqZWN0OiBiTWV0YU1vZGVsT2JqZWN0IH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUHJvcGVydHkob1Byb3BlcnR5UGFyYW1zOiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKG9Qcm9wZXJ0eVBhcmFtcz8ubWFjcm9Db250ZXh0KSB7XG5cdFx0XHRpZiAoIW1ldGFkYXRhLm1hY3JvQ29udGV4dHNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRcdG1ldGFkYXRhLm1hY3JvQ29udGV4dHNbcHJvcGVydHlLZXldID0gb1Byb3BlcnR5UGFyYW1zO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIW1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSA9IG9Qcm9wZXJ0eVBhcmFtcztcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5zZXQgPSBmdW5jdGlvbih2OiBhbnkpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHR9O1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5nZXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFnZ3JlZ2F0aW9uKG9BZ2dyZWdhdGlvbkRlc2NyaXB0b3I/OiBhbnkpOiBhbnkge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yKTogYW55IHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdFx0aWYgKCFtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5hZ2dyZWdhdGlvbnNbcHJvcGVydHlLZXldID0gb0FnZ3JlZ2F0aW9uRGVzY3JpcHRvcjtcblx0XHR9XG5cdFx0aWYgKG9BZ2dyZWdhdGlvbkRlc2NyaXB0b3IuaXNEZWZhdWx0KSB7XG5cdFx0XHRtZXRhZGF0YS5kZWZhdWx0QWdncmVnYXRpb24gPSBwcm9wZXJ0eUtleTtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5zZXQgPSBmdW5jdGlvbih2OiBhbnkpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5LCB2KTtcblx0XHR9O1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5nZXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEFzc29jaWF0aW9uKG9Bc3NvY2lhdGlvbkRlc2NyaXB0aW9uPzogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYXNzb2NpYXRpb25zW3Byb3BlcnR5S2V5XSA9IG9Bc3NvY2lhdGlvbkRlc2NyaXB0aW9uO1xuXHRcdH1cblx0XHRkZWxldGUgcHJvcGVydHlEZXNjcmlwdG9yLndyaXRhYmxlO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLnNldCA9IGZ1bmN0aW9uKHY6IGFueSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuc2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXksIHYpO1xuXHRcdH07XG5cdFx0KHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmdldCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0QWdncmVnYXRpb24ocHJvcGVydHlLZXkpO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9O1xufVxudHlwZSBDb250cm9sUHJvcGVydHlOYW1lczxUPiA9IHtcblx0W0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBGdW5jdGlvbiA/IG5ldmVyIDogSztcbn1ba2V5b2YgVF07XG5leHBvcnQgdHlwZSBQcm9wZXJ0aWVzT2Y8VD4gPSBQYXJ0aWFsPFBpY2s8VCwgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4+PiAmICRDb250cm9sU2V0dGluZ3M7XG5cbmV4cG9ydCBmdW5jdGlvbiBBUElDbGFzcyhzVGFyZ2V0OiBzdHJpbmcpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5pbnRlcmZhY2VzKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuaW50ZXJmYWNlcyA9IFtdO1xuXHRcdH1cblx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuaW50ZXJmYWNlcy5wdXNoKFwic2FwLnVpLmNvcmUuSUZvcm1Db250ZW50XCIpO1xuXG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyZXIpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlciA9IHtcblx0XHRcdFx0YXBpVmVyc2lvbjogMixcblx0XHRcdFx0cmVuZGVyOiBmdW5jdGlvbihvUm06IFJlbmRlck1hbmFnZXIsIG9Db250cm9sOiBhbnkpIHtcblx0XHRcdFx0XHRvUm0ucmVuZGVyQ29udHJvbChvQ29udHJvbC5nZXRDb250ZW50KCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdGRlc2NyaWJlKGNvbnN0cnVjdG9yLCBzVGFyZ2V0LCBjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEVsZW1lbnRNZXRhZGF0YSk7XG5cdH07XG59XG5leHBvcnQgZnVuY3Rpb24gVUk1Q2xhc3Moc1RhcmdldDogc3RyaW5nLCBtZXRhZGF0YUNsYXNzPzogYW55LCBtZXRhZGF0YURlZmluaXRpb24/OiBhbnkpIHtcblx0cmV0dXJuIGZ1bmN0aW9uKGNvbnN0cnVjdG9yOiBGdW5jdGlvbikge1xuXHRcdGlmICghY29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEgPSB7fTtcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbj8ucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLnByb3BlcnRpZXMgPSBtZXRhZGF0YURlZmluaXRpb24ucHJvcGVydGllcztcblx0XHR9XG5cdFx0aWYgKG1ldGFkYXRhRGVmaW5pdGlvbj8uZXZlbnRzKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuZXZlbnRzID0gbWV0YWRhdGFEZWZpbml0aW9uLmV2ZW50cztcblx0XHR9XG5cdFx0ZGVzY3JpYmUoY29uc3RydWN0b3IsIHNUYXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgbWV0YWRhdGFDbGFzcyk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlKGNsYXp6OiBhbnksIG5hbWU6IHN0cmluZywgaW5PYmo6IGFueSwgbWV0YWRhdGFDbGFzcz86IGFueSkge1xuXHRjb25zdCBvYmo6IGFueSA9IHt9O1xuXHRvYmoubWV0YWRhdGEgPSBpbk9iai5tZXRhZGF0YSB8fCB7fTtcblx0b2JqLm92ZXJyaWRlID0gaW5PYmoub3ZlcnJpZGU7XG5cdG9iai5jb25zdHJ1Y3RvciA9IGNsYXp6O1xuXHRvYmoubWV0YWRhdGEuYmFzZVR5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY2xhenoucHJvdG90eXBlKVxuXHRcdC5nZXRNZXRhZGF0YSgpXG5cdFx0LmdldE5hbWUoKTtcblx0b2JqLnJlbmRlcmVyID0gaW5PYmoucmVuZGVyZXIgfHwgY2xhenoucmVuZGVyZXI7XG5cdG9iai5tZXRhZGF0YS5pbnRlcmZhY2VzID0gaW5PYmoubWV0YWRhdGE/LmludGVyZmFjZXMgfHwgY2xhenoubWV0YWRhdGE/LmludGVyZmFjZXM7XG5cdGxldCBtZXRhZGF0YTogYW55O1xuXHRpZiAobWV0YWRhdGFDbGFzcykge1xuXHRcdG1ldGFkYXRhID0gbmV3IG1ldGFkYXRhQ2xhc3MobmFtZSwgb2JqKTtcblx0fSBlbHNlIHtcblx0XHRtZXRhZGF0YSA9IG5ldyBFbGVtZW50TWV0YWRhdGEobmFtZSwgb2JqKTtcblx0fVxuXHRjbGF6ei5nZXRNZXRhZGF0YSA9IGNsYXp6LnByb3RvdHlwZS5nZXRNZXRhZGF0YSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBtZXRhZGF0YTtcblx0fTtcblx0Y29uc3QgZm5Jbml0ID0gY2xhenoucHJvdG90eXBlLmluaXQ7XG5cdGNsYXp6LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oLi4uYXJnczogYW55W10pIHtcblx0XHRmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0Y29uc3QgYVByb3BlcnR5S2V5cyA9IE9iamVjdC5rZXlzKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRjb25zdCB0aGF0ID0gdGhpcztcblx0XHRhUHJvcGVydHlLZXlzLmZvckVhY2gocHJvcGVydHlLZXkgPT4ge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoYXQsIHByb3BlcnR5S2V5LCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0c2V0OiAodjogYW55KSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoYXQuc2V0UHJvcGVydHkocHJvcGVydHlLZXksIHYpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhhdC5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9O1xuXHRPYmplY3RQYXRoLnNldChuYW1lLCBjbGF6eik7XG59XG4iXX0=
326
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNsYXNzU3VwcG9ydC50cyJdLCJuYW1lcyI6WyJlbnN1cmVNZXRhZGF0YSIsInRhcmdldCIsImhhc093blByb3BlcnR5IiwibWV0YWRhdGEiLCJkZWVwQ2xvbmUiLCJwcm9wZXJ0aWVzIiwibWFjcm9Db250ZXh0cyIsImFnZ3JlZ2F0aW9ucyIsImFzc29jaWF0aW9ucyIsIm1ldGhvZHMiLCJldmVudHMiLCJPdmVycmlkZSIsInNUYXJnZXQiLCJwcm9wZXJ0eUtleSIsIm92ZXJyaWRlIiwiY3VycmVudFRhcmdldCIsImV4dGVuc2lvbiIsIkV4dGVuc2libGUiLCJvT3ZlcnJpZGVFeGVjdXRpb24iLCJvdmVycmlkZUV4ZWN1dGlvbiIsIlB1YmxpYyIsInB1YmxpYyIsIlByaXZhdGUiLCJGaW5hbCIsImZpbmFsIiwiRXZlbnQiLCJldmVudEtleSIsIkV2ZW50SGFuZGxlciIsInByb3BlcnR5a2V5IiwiY29uc3RydWN0b3IiLCJnZXRBUEkiLCJNYWNyb0NvbnRleHQiLCJiTWV0YU1vZGVsT2JqZWN0IiwiUHJvcGVydHkiLCJ0eXBlIiwibWFjcm9Db250ZXh0IiwibWV0YU1vZGVsT2JqZWN0Iiwib1Byb3BlcnR5UGFyYW1zIiwicHJvcGVydHlEZXNjcmlwdG9yIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsInNldCIsInYiLCJzZXRQcm9wZXJ0eSIsImdldCIsImdldFByb3BlcnR5IiwiQWdncmVnYXRpb24iLCJvQWdncmVnYXRpb25EZXNjcmlwdG9yIiwiaXNEZWZhdWx0IiwiZGVmYXVsdEFnZ3JlZ2F0aW9uIiwic2V0QWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGlvbiIsIkFzc29jaWF0aW9uIiwib0Fzc29jaWF0aW9uRGVzY3JpcHRpb24iLCJBUElDbGFzcyIsImlzRGVwZW5kZW50Qm91bmQiLCJwcm90b3R5cGUiLCJpbnRlcmZhY2VzIiwicHVzaCIsInJlbmRlcmVyIiwiYXBpVmVyc2lvbiIsInJlbmRlciIsIm9SbSIsIm9Db250cm9sIiwicmVuZGVyQ29udHJvbCIsImdldENvbnRlbnQiLCJkZXNjcmliZSIsIkVsZW1lbnRNZXRhZGF0YSIsIlVJNUNsYXNzIiwibWV0YWRhdGFDbGFzcyIsIm1ldGFkYXRhRGVmaW5pdGlvbiIsImNsYXp6IiwibmFtZSIsImluT2JqIiwib2JqIiwiYmFzZVR5cGUiLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImZuSW5pdCIsImluaXQiLCJhcmdzIiwiYXBwbHkiLCJhUHJvcGVydHlLZXlzIiwia2V5cyIsInRoYXQiLCJmb3JFYWNoIiwiZGVmaW5lUHJvcGVydHkiLCJjb25maWd1cmFibGUiLCJPYmplY3RQYXRoIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFJQSxNQUFNQSxjQUFjLEdBQUcsVUFBU0MsTUFBVCxFQUFzQjtBQUM1QyxRQUFJLENBQUNBLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixVQUF0QixDQUFMLEVBQXdDO0FBQ3ZDRCxNQUFBQSxNQUFNLENBQUNFLFFBQVAsR0FBa0JDLFNBQVMsQ0FDMUJILE1BQU0sQ0FBQ0UsUUFBUCxJQUFtQjtBQUNsQkUsUUFBQUEsVUFBVSxFQUFFLEVBRE07QUFFbEJDLFFBQUFBLGFBQWEsRUFBRSxFQUZHO0FBR2xCQyxRQUFBQSxZQUFZLEVBQUUsRUFISTtBQUlsQkMsUUFBQUEsWUFBWSxFQUFFLEVBSkk7QUFLbEJDLFFBQUFBLE9BQU8sRUFBRSxFQUxTO0FBTWxCQyxRQUFBQSxNQUFNLEVBQUU7QUFOVSxPQURPLENBQTNCO0FBVUE7O0FBQ0QsV0FBT1QsTUFBTSxDQUFDRSxRQUFkO0FBQ0EsR0FkRDs7QUFlTyxXQUFTUSxRQUFULENBQWtCQyxPQUFsQixFQUFvQztBQUMxQyxXQUFPLFVBQVNYLE1BQVQsRUFBc0JZLFdBQXRCLEVBQTJDO0FBQ2pELFVBQUksQ0FBQ1osTUFBTSxDQUFDYSxRQUFaLEVBQXNCO0FBQ3JCYixRQUFBQSxNQUFNLENBQUNhLFFBQVAsR0FBa0IsRUFBbEI7QUFDQTs7QUFDRCxVQUFJQyxhQUFhLEdBQUdkLE1BQU0sQ0FBQ2EsUUFBM0I7O0FBQ0EsVUFBSUYsT0FBSixFQUFhO0FBQ1osWUFBSSxDQUFDRyxhQUFhLENBQUNDLFNBQW5CLEVBQThCO0FBQzdCRCxVQUFBQSxhQUFhLENBQUNDLFNBQWQsR0FBMEIsRUFBMUI7QUFDQTs7QUFDRCxZQUFJLENBQUNELGFBQWEsQ0FBQ0MsU0FBZCxDQUF3QkosT0FBeEIsQ0FBTCxFQUF1QztBQUN0Q0csVUFBQUEsYUFBYSxDQUFDQyxTQUFkLENBQXdCSixPQUF4QixJQUFtQyxFQUFuQztBQUNBOztBQUNERyxRQUFBQSxhQUFhLEdBQUdBLGFBQWEsQ0FBQ0MsU0FBZCxDQUF3QkosT0FBeEIsQ0FBaEI7QUFDQTs7QUFDREcsTUFBQUEsYUFBYSxDQUFDRixXQUFELENBQWIsR0FBNkJaLE1BQU0sQ0FBQ1ksV0FBRCxDQUFuQztBQUNBLEtBZkQ7QUFnQkE7Ozs7QUFDTSxXQUFTSSxVQUFULENBQW9CQyxrQkFBcEIsRUFBNEQ7QUFDbEUsV0FBTyxVQUFTakIsTUFBVCxFQUFzQlksV0FBdEIsRUFBMkM7QUFDakQsVUFBTVYsUUFBUSxHQUFHSCxjQUFjLENBQUNDLE1BQUQsQ0FBL0I7O0FBQ0EsVUFBSSxDQUFDRSxRQUFRLENBQUNNLE9BQVQsQ0FBaUJJLFdBQWpCLENBQUwsRUFBb0M7QUFDbkNWLFFBQUFBLFFBQVEsQ0FBQ00sT0FBVCxDQUFpQkksV0FBakIsSUFBZ0MsRUFBaEM7QUFDQTs7QUFDRFYsTUFBQUEsUUFBUSxDQUFDTSxPQUFULENBQWlCSSxXQUFqQixFQUE4Qk0saUJBQTlCLEdBQWtERCxrQkFBbEQ7QUFDQSxLQU5EO0FBT0E7Ozs7QUFDTSxXQUFTRSxNQUFULENBQWdCbkIsTUFBaEIsRUFBNkJZLFdBQTdCLEVBQWtEO0FBQ3hELFFBQU1WLFFBQVEsR0FBR0gsY0FBYyxDQUFDQyxNQUFELENBQS9COztBQUNBLFFBQUksQ0FBQ0UsUUFBUSxDQUFDTSxPQUFULENBQWlCSSxXQUFqQixDQUFMLEVBQW9DO0FBQ25DVixNQUFBQSxRQUFRLENBQUNNLE9BQVQsQ0FBaUJJLFdBQWpCLElBQWdDLEVBQWhDO0FBQ0E7O0FBQ0RWLElBQUFBLFFBQVEsQ0FBQ00sT0FBVCxDQUFpQkksV0FBakIsRUFBOEJRLE1BQTlCLEdBQXVDLElBQXZDO0FBQ0E7Ozs7QUFDTSxXQUFTQyxPQUFULENBQWlCckIsTUFBakIsRUFBOEJZLFdBQTlCLEVBQW1EO0FBQ3pELFFBQU1WLFFBQVEsR0FBR0gsY0FBYyxDQUFDQyxNQUFELENBQS9COztBQUNBLFFBQUksQ0FBQ0UsUUFBUSxDQUFDTSxPQUFULENBQWlCSSxXQUFqQixDQUFMLEVBQW9DO0FBQ25DVixNQUFBQSxRQUFRLENBQUNNLE9BQVQsQ0FBaUJJLFdBQWpCLElBQWdDLEVBQWhDO0FBQ0E7O0FBQ0RWLElBQUFBLFFBQVEsQ0FBQ00sT0FBVCxDQUFpQkksV0FBakIsRUFBOEJRLE1BQTlCLEdBQXVDLEtBQXZDO0FBQ0E7Ozs7QUFDTSxXQUFTRSxLQUFULENBQWV0QixNQUFmLEVBQTRCWSxXQUE1QixFQUFpRDtBQUN2RCxRQUFNVixRQUFRLEdBQUdILGNBQWMsQ0FBQ0MsTUFBRCxDQUEvQjs7QUFDQSxRQUFJLENBQUNFLFFBQVEsQ0FBQ00sT0FBVCxDQUFpQkksV0FBakIsQ0FBTCxFQUFvQztBQUNuQ1YsTUFBQUEsUUFBUSxDQUFDTSxPQUFULENBQWlCSSxXQUFqQixJQUFnQyxFQUFoQztBQUNBOztBQUNEVixJQUFBQSxRQUFRLENBQUNNLE9BQVQsQ0FBaUJJLFdBQWpCLEVBQThCVyxLQUE5QixHQUFzQyxJQUF0QztBQUNBOzs7O0FBRU0sV0FBU0MsS0FBVCxDQUFleEIsTUFBZixFQUE0QnlCLFFBQTVCLEVBQThDO0FBQ3BELFFBQU12QixRQUFRLEdBQUdILGNBQWMsQ0FBQ0MsTUFBRCxDQUEvQjs7QUFDQSxRQUFJLENBQUNFLFFBQVEsQ0FBQ08sTUFBVCxDQUFnQmdCLFFBQWhCLENBQUwsRUFBZ0M7QUFDL0J2QixNQUFBQSxRQUFRLENBQUNPLE1BQVQsQ0FBZ0JnQixRQUFoQixJQUE0QixFQUE1QjtBQUNBO0FBQ0Q7Ozs7QUFFTSxXQUFTQyxZQUFULENBQXNCMUIsTUFBdEIsRUFBbUMyQixXQUFuQyxFQUFxRDtBQUMzRDNCLElBQUFBLE1BQU0sQ0FBQzRCLFdBQVAsQ0FBbUJELFdBQW5CLElBQWtDLFlBQXlCO0FBQzFELFVBQU1iLGFBQWEsR0FBR2QsTUFBTSxDQUFDNEIsV0FBUCxDQUFtQkMsTUFBbkIsa0RBQXRCO0FBQ0FmLE1BQUFBLGFBQWEsQ0FBQ2EsV0FBRCxDQUFiLE9BQUFiLGFBQWEsWUFBYjtBQUNBLEtBSEQ7QUFJQTs7OztBQUVNLFdBQVNnQixZQUFULEdBQThEO0FBQUEsUUFBeENDLGdCQUF3Qyx1RUFBWixLQUFZO0FBQ3BFLFdBQU9DLFFBQVEsQ0FBQztBQUFFQyxNQUFBQSxJQUFJLEVBQUUsc0JBQVI7QUFBZ0NDLE1BQUFBLFlBQVksRUFBRSxJQUE5QztBQUFvREMsTUFBQUEsZUFBZSxFQUFFSjtBQUFyRSxLQUFELENBQWY7QUFDQTs7OztBQUVNLFdBQVNDLFFBQVQsQ0FBa0JJLGVBQWxCLEVBQTZDO0FBQ25ELFdBQU8sVUFBU3BDLE1BQVQsRUFBc0JZLFdBQXRCLEVBQTJDeUIsa0JBQTNDLEVBQXdGO0FBQzlGLFVBQU1uQyxRQUFRLEdBQUdILGNBQWMsQ0FBQ0MsTUFBRCxDQUEvQjs7QUFDQSxVQUFJb0MsZUFBSixhQUFJQSxlQUFKLGVBQUlBLGVBQWUsQ0FBRUYsWUFBckIsRUFBbUM7QUFDbEMsWUFBSSxDQUFDaEMsUUFBUSxDQUFDRyxhQUFULENBQXVCTyxXQUF2QixDQUFMLEVBQTBDO0FBQ3pDVixVQUFBQSxRQUFRLENBQUNHLGFBQVQsQ0FBdUJPLFdBQXZCLElBQXNDd0IsZUFBdEM7QUFDQTtBQUNEOztBQUNELFVBQUksQ0FBQ2xDLFFBQVEsQ0FBQ0UsVUFBVCxDQUFvQlEsV0FBcEIsQ0FBTCxFQUF1QztBQUN0Q1YsUUFBQUEsUUFBUSxDQUFDRSxVQUFULENBQW9CUSxXQUFwQixJQUFtQ3dCLGVBQW5DO0FBQ0E7O0FBQ0QsYUFBT0Msa0JBQWtCLENBQUNDLFFBQTFCO0FBQ0EsYUFBUUQsa0JBQUQsQ0FBNEJFLFdBQW5DOztBQUNDRixNQUFBQSxrQkFBRCxDQUE0QkcsR0FBNUIsR0FBa0MsVUFBU0MsQ0FBVCxFQUFpQjtBQUNsRCxlQUFPLEtBQUtDLFdBQUwsQ0FBaUI5QixXQUFqQixFQUE4QjZCLENBQTlCLENBQVA7QUFDQSxPQUZEOztBQUdDSixNQUFBQSxrQkFBRCxDQUE0Qk0sR0FBNUIsR0FBa0MsWUFBVztBQUM1QyxlQUFPLEtBQUtDLFdBQUwsQ0FBaUJoQyxXQUFqQixDQUFQO0FBQ0EsT0FGRDs7QUFJQSxhQUFPeUIsa0JBQVA7QUFDQSxLQXBCRDtBQXFCQTs7OztBQUVNLFdBQVNRLFdBQVQsQ0FBcUJDLHNCQUFyQixFQUF3RDtBQUM5RCxXQUFPLFVBQVM5QyxNQUFULEVBQXNCWSxXQUF0QixFQUEyQ3lCLGtCQUEzQyxFQUF3RjtBQUM5RixVQUFNbkMsUUFBUSxHQUFHSCxjQUFjLENBQUNDLE1BQUQsQ0FBL0I7O0FBQ0EsVUFBSSxDQUFDRSxRQUFRLENBQUNJLFlBQVQsQ0FBc0JNLFdBQXRCLENBQUwsRUFBeUM7QUFDeENWLFFBQUFBLFFBQVEsQ0FBQ0ksWUFBVCxDQUFzQk0sV0FBdEIsSUFBcUNrQyxzQkFBckM7QUFDQTs7QUFDRCxVQUFJQSxzQkFBc0IsQ0FBQ0MsU0FBM0IsRUFBc0M7QUFDckM3QyxRQUFBQSxRQUFRLENBQUM4QyxrQkFBVCxHQUE4QnBDLFdBQTlCO0FBQ0E7O0FBQ0QsYUFBT3lCLGtCQUFrQixDQUFDQyxRQUExQjtBQUNBLGFBQVFELGtCQUFELENBQTRCRSxXQUFuQzs7QUFDQ0YsTUFBQUEsa0JBQUQsQ0FBNEJHLEdBQTVCLEdBQWtDLFVBQVNDLENBQVQsRUFBaUI7QUFDbEQsZUFBTyxLQUFLUSxjQUFMLENBQW9CckMsV0FBcEIsRUFBaUM2QixDQUFqQyxDQUFQO0FBQ0EsT0FGRDs7QUFHQ0osTUFBQUEsa0JBQUQsQ0FBNEJNLEdBQTVCLEdBQWtDLFlBQVc7QUFDNUMsZUFBTyxLQUFLTyxjQUFMLENBQW9CdEMsV0FBcEIsQ0FBUDtBQUNBLE9BRkQ7O0FBSUEsYUFBT3lCLGtCQUFQO0FBQ0EsS0FsQkQ7QUFtQkE7Ozs7QUFFTSxXQUFTYyxXQUFULENBQXFCQyx1QkFBckIsRUFBeUQ7QUFDL0QsV0FBTyxVQUFTcEQsTUFBVCxFQUFzQlksV0FBdEIsRUFBMkN5QixrQkFBM0MsRUFBd0Y7QUFDOUYsVUFBTW5DLFFBQVEsR0FBR0gsY0FBYyxDQUFDQyxNQUFELENBQS9COztBQUNBLFVBQUksQ0FBQ0UsUUFBUSxDQUFDSyxZQUFULENBQXNCSyxXQUF0QixDQUFMLEVBQXlDO0FBQ3hDVixRQUFBQSxRQUFRLENBQUNLLFlBQVQsQ0FBc0JLLFdBQXRCLElBQXFDd0MsdUJBQXJDO0FBQ0E7O0FBQ0QsYUFBT2Ysa0JBQWtCLENBQUNDLFFBQTFCO0FBQ0EsYUFBUUQsa0JBQUQsQ0FBNEJFLFdBQW5DOztBQUNDRixNQUFBQSxrQkFBRCxDQUE0QkcsR0FBNUIsR0FBa0MsVUFBU0MsQ0FBVCxFQUFpQjtBQUNsRCxlQUFPLEtBQUtRLGNBQUwsQ0FBb0JyQyxXQUFwQixFQUFpQzZCLENBQWpDLENBQVA7QUFDQSxPQUZEOztBQUdDSixNQUFBQSxrQkFBRCxDQUE0Qk0sR0FBNUIsR0FBa0MsWUFBVztBQUM1QyxlQUFPLEtBQUtPLGNBQUwsQ0FBb0J0QyxXQUFwQixDQUFQO0FBQ0EsT0FGRDs7QUFJQSxhQUFPeUIsa0JBQVA7QUFDQSxLQWZEO0FBZ0JBOzs7O0FBTUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxXQUFTZ0IsUUFBVCxDQUFrQjFDLE9BQWxCLEVBQTZEO0FBQUEsUUFBMUIyQyxnQkFBMEIsdUVBQVAsS0FBTztBQUNuRSxXQUFPLFVBQVMxQixXQUFULEVBQWdDO0FBQ3RDLFVBQUksQ0FBQ0EsV0FBVyxDQUFDMkIsU0FBWixDQUFzQnJELFFBQTNCLEVBQXFDO0FBQ3BDMEIsUUFBQUEsV0FBVyxDQUFDMkIsU0FBWixDQUFzQnJELFFBQXRCLEdBQWlDLEVBQWpDO0FBQ0E7O0FBRUQsVUFBSSxDQUFDMEIsV0FBVyxDQUFDMkIsU0FBWixDQUFzQnJELFFBQXRCLENBQStCc0QsVUFBcEMsRUFBZ0Q7QUFDL0M1QixRQUFBQSxXQUFXLENBQUMyQixTQUFaLENBQXNCckQsUUFBdEIsQ0FBK0JzRCxVQUEvQixHQUE0QyxFQUE1QztBQUNBOztBQUNENUIsTUFBQUEsV0FBVyxDQUFDMkIsU0FBWixDQUFzQnJELFFBQXRCLENBQStCc0QsVUFBL0IsQ0FBMENDLElBQTFDLENBQStDLDBCQUEvQztBQUNDN0IsTUFBQUEsV0FBRCxDQUFxQjBCLGdCQUFyQixHQUF3Q0EsZ0JBQXhDOztBQUNBLFVBQUksQ0FBQzFCLFdBQVcsQ0FBQzJCLFNBQVosQ0FBc0JHLFFBQTNCLEVBQXFDO0FBQ3BDOUIsUUFBQUEsV0FBVyxDQUFDMkIsU0FBWixDQUFzQkcsUUFBdEIsR0FBaUM7QUFDaENDLFVBQUFBLFVBQVUsRUFBRSxDQURvQjtBQUVoQ0MsVUFBQUEsTUFBTSxFQUFFLFVBQVNDLEdBQVQsRUFBNkJDLFFBQTdCLEVBQTRDO0FBQ25ERCxZQUFBQSxHQUFHLENBQUNFLGFBQUosQ0FBa0JELFFBQVEsQ0FBQ0UsVUFBVCxFQUFsQjtBQUNBO0FBSitCLFNBQWpDO0FBTUE7O0FBRURDLE1BQUFBLFFBQVEsQ0FBQ3JDLFdBQUQsRUFBY2pCLE9BQWQsRUFBdUJpQixXQUFXLENBQUMyQixTQUFuQyxFQUE4Q1csZUFBOUMsQ0FBUjtBQUNBLEtBcEJEO0FBcUJBOzs7O0FBQ00sV0FBU0MsUUFBVCxDQUFrQnhELE9BQWxCLEVBQW1DeUQsYUFBbkMsRUFBd0RDLGtCQUF4RCxFQUFrRjtBQUN4RixXQUFPLFVBQVN6QyxXQUFULEVBQWdDO0FBQ3RDLFVBQUksQ0FBQ0EsV0FBVyxDQUFDMkIsU0FBWixDQUFzQnJELFFBQTNCLEVBQXFDO0FBQ3BDMEIsUUFBQUEsV0FBVyxDQUFDMkIsU0FBWixDQUFzQnJELFFBQXRCLEdBQWlDLEVBQWpDO0FBQ0E7O0FBQ0QsVUFBSW1FLGtCQUFKLGFBQUlBLGtCQUFKLGVBQUlBLGtCQUFrQixDQUFFakUsVUFBeEIsRUFBb0M7QUFDbkN3QixRQUFBQSxXQUFXLENBQUMyQixTQUFaLENBQXNCckQsUUFBdEIsQ0FBK0JFLFVBQS9CLEdBQTRDaUUsa0JBQWtCLENBQUNqRSxVQUEvRDtBQUNBOztBQUNELFVBQUlpRSxrQkFBSixhQUFJQSxrQkFBSixlQUFJQSxrQkFBa0IsQ0FBRTVELE1BQXhCLEVBQWdDO0FBQy9CbUIsUUFBQUEsV0FBVyxDQUFDMkIsU0FBWixDQUFzQnJELFFBQXRCLENBQStCTyxNQUEvQixHQUF3QzRELGtCQUFrQixDQUFDNUQsTUFBM0Q7QUFDQTs7QUFDRHdELE1BQUFBLFFBQVEsQ0FBQ3JDLFdBQUQsRUFBY2pCLE9BQWQsRUFBdUJpQixXQUFXLENBQUMyQixTQUFuQyxFQUE4Q2EsYUFBOUMsQ0FBUjtBQUNBLEtBWEQ7QUFZQTs7OztBQUVELFdBQVNILFFBQVQsQ0FBa0JLLEtBQWxCLEVBQThCQyxJQUE5QixFQUE0Q0MsS0FBNUMsRUFBd0RKLGFBQXhELEVBQTZFO0FBQUE7O0FBQzVFLFFBQU1LLEdBQVEsR0FBRyxFQUFqQjtBQUNBQSxJQUFBQSxHQUFHLENBQUN2RSxRQUFKLEdBQWVzRSxLQUFLLENBQUN0RSxRQUFOLElBQWtCLEVBQWpDO0FBQ0F1RSxJQUFBQSxHQUFHLENBQUM1RCxRQUFKLEdBQWUyRCxLQUFLLENBQUMzRCxRQUFyQjtBQUNBNEQsSUFBQUEsR0FBRyxDQUFDN0MsV0FBSixHQUFrQjBDLEtBQWxCO0FBQ0FHLElBQUFBLEdBQUcsQ0FBQ3ZFLFFBQUosQ0FBYXdFLFFBQWIsR0FBd0JDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQk4sS0FBSyxDQUFDZixTQUE1QixFQUN0QnNCLFdBRHNCLEdBRXRCQyxPQUZzQixFQUF4QjtBQUdBTCxJQUFBQSxHQUFHLENBQUNmLFFBQUosR0FBZWMsS0FBSyxDQUFDZCxRQUFOLElBQWtCWSxLQUFLLENBQUNaLFFBQXZDO0FBQ0FlLElBQUFBLEdBQUcsQ0FBQ3ZFLFFBQUosQ0FBYXNELFVBQWIsR0FBMEIsb0JBQUFnQixLQUFLLENBQUN0RSxRQUFOLG9FQUFnQnNELFVBQWhCLHlCQUE4QmMsS0FBSyxDQUFDcEUsUUFBcEMsb0RBQThCLGdCQUFnQnNELFVBQTlDLENBQTFCO0FBQ0EsUUFBSXRELFFBQUo7O0FBQ0EsUUFBSWtFLGFBQUosRUFBbUI7QUFDbEJsRSxNQUFBQSxRQUFRLEdBQUcsSUFBSWtFLGFBQUosQ0FBa0JHLElBQWxCLEVBQXdCRSxHQUF4QixDQUFYO0FBQ0EsS0FGRCxNQUVPO0FBQ052RSxNQUFBQSxRQUFRLEdBQUcsSUFBSWdFLGVBQUosQ0FBb0JLLElBQXBCLEVBQTBCRSxHQUExQixDQUFYO0FBQ0E7O0FBQ0RILElBQUFBLEtBQUssQ0FBQ08sV0FBTixHQUFvQlAsS0FBSyxDQUFDZixTQUFOLENBQWdCc0IsV0FBaEIsR0FBOEIsWUFBVztBQUM1RCxhQUFPM0UsUUFBUDtBQUNBLEtBRkQ7O0FBR0EsUUFBTTZFLE1BQU0sR0FBR1QsS0FBSyxDQUFDZixTQUFOLENBQWdCeUIsSUFBL0I7O0FBQ0FWLElBQUFBLEtBQUssQ0FBQ2YsU0FBTixDQUFnQnlCLElBQWhCLEdBQXVCLFlBQXlCO0FBQUEsd0NBQWJDLElBQWE7QUFBYkEsUUFBQUEsSUFBYTtBQUFBOztBQUMvQ0YsTUFBQUEsTUFBTSxJQUFJQSxNQUFNLENBQUNHLEtBQVAsQ0FBYSxJQUFiLEVBQW1CRCxJQUFuQixDQUFWOztBQUNBLFVBQUlSLEdBQUcsQ0FBQ3ZFLFFBQUosQ0FBYUUsVUFBakIsRUFBNkI7QUFDNUIsWUFBTStFLGFBQWEsR0FBR1IsTUFBTSxDQUFDUyxJQUFQLENBQVlYLEdBQUcsQ0FBQ3ZFLFFBQUosQ0FBYUUsVUFBekIsQ0FBdEIsQ0FENEIsQ0FFNUI7O0FBQ0EsWUFBTWlGLElBQUksR0FBRyxJQUFiO0FBQ0FGLFFBQUFBLGFBQWEsQ0FBQ0csT0FBZCxDQUFzQixVQUFBMUUsV0FBVyxFQUFJO0FBQ3BDK0QsVUFBQUEsTUFBTSxDQUFDWSxjQUFQLENBQXNCRixJQUF0QixFQUE0QnpFLFdBQTVCLEVBQXlDO0FBQ3hDNEUsWUFBQUEsWUFBWSxFQUFFLElBRDBCO0FBRXhDaEQsWUFBQUEsR0FBRyxFQUFFLFVBQUNDLENBQUQsRUFBWTtBQUNoQixxQkFBTzRDLElBQUksQ0FBQzNDLFdBQUwsQ0FBaUI5QixXQUFqQixFQUE4QjZCLENBQTlCLENBQVA7QUFDQSxhQUp1QztBQUt4Q0UsWUFBQUEsR0FBRyxFQUFFLFlBQU07QUFDVixxQkFBTzBDLElBQUksQ0FBQ3pDLFdBQUwsQ0FBaUJoQyxXQUFqQixDQUFQO0FBQ0E7QUFQdUMsV0FBekM7QUFTQSxTQVZEO0FBV0E7QUFDRCxLQWxCRDs7QUFtQkE2RSxJQUFBQSxVQUFVLENBQUNqRCxHQUFYLENBQWUrQixJQUFmLEVBQXFCRCxLQUFyQjtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBFbGVtZW50TWV0YWRhdGEgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRNZXRhZGF0YVwiO1xuaW1wb3J0IFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbih0YXJnZXQ6IGFueSkge1xuXHRpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShcIm1ldGFkYXRhXCIpKSB7XG5cdFx0dGFyZ2V0Lm1ldGFkYXRhID0gZGVlcENsb25lKFxuXHRcdFx0dGFyZ2V0Lm1ldGFkYXRhIHx8IHtcblx0XHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRcdG1hY3JvQ29udGV4dHM6IHt9LFxuXHRcdFx0XHRhZ2dyZWdhdGlvbnM6IHt9LFxuXHRcdFx0XHRhc3NvY2lhdGlvbnM6IHt9LFxuXHRcdFx0XHRtZXRob2RzOiB7fSxcblx0XHRcdFx0ZXZlbnRzOiB7fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5leHBvcnQgZnVuY3Rpb24gT3ZlcnJpZGUoc1RhcmdldD86IHN0cmluZykge1xuXHRyZXR1cm4gZnVuY3Rpb24odGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0XHRpZiAoIXRhcmdldC5vdmVycmlkZSkge1xuXHRcdFx0dGFyZ2V0Lm92ZXJyaWRlID0ge307XG5cdFx0fVxuXHRcdGxldCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0Lm92ZXJyaWRlO1xuXHRcdGlmIChzVGFyZ2V0KSB7XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW3NUYXJnZXRdKSB7XG5cdFx0XHRcdGN1cnJlbnRUYXJnZXQuZXh0ZW5zaW9uW3NUYXJnZXRdID0ge307XG5cdFx0XHR9XG5cdFx0XHRjdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldC5leHRlbnNpb25bc1RhcmdldF07XG5cdFx0fVxuXHRcdGN1cnJlbnRUYXJnZXRbcHJvcGVydHlLZXldID0gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBFeHRlbnNpYmxlKG9PdmVycmlkZUV4ZWN1dGlvbj86IE92ZXJyaWRlRXhlY3V0aW9uKSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHRcdH1cblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5vdmVycmlkZUV4ZWN1dGlvbiA9IG9PdmVycmlkZUV4ZWN1dGlvbjtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBQdWJsaWModGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSB0cnVlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIFByaXZhdGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRpZiAoIW1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldKSB7XG5cdFx0bWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0gPSB7fTtcblx0fVxuXHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XS5wdWJsaWMgPSBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBGaW5hbCh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge1xuXHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldCk7XG5cdGlmICghbWV0YWRhdGEubWV0aG9kc1twcm9wZXJ0eUtleV0pIHtcblx0XHRtZXRhZGF0YS5tZXRob2RzW3Byb3BlcnR5S2V5XSA9IHt9O1xuXHR9XG5cdG1ldGFkYXRhLm1ldGhvZHNbcHJvcGVydHlLZXldLmZpbmFsID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50KHRhcmdldDogYW55LCBldmVudEtleTogc3RyaW5nKSB7XG5cdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0aWYgKCFtZXRhZGF0YS5ldmVudHNbZXZlbnRLZXldKSB7XG5cdFx0bWV0YWRhdGEuZXZlbnRzW2V2ZW50S2V5XSA9IHt9O1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudEhhbmRsZXIodGFyZ2V0OiBhbnksIHByb3BlcnR5a2V5OiBhbnkpIHtcblx0dGFyZ2V0LmNvbnN0cnVjdG9yW3Byb3BlcnR5a2V5XSA9IGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKSB7XG5cdFx0Y29uc3QgY3VycmVudFRhcmdldCA9IHRhcmdldC5jb25zdHJ1Y3Rvci5nZXRBUEkoYXJnc1swXSBhcyBVSTVFdmVudCk7XG5cdFx0Y3VycmVudFRhcmdldFtwcm9wZXJ0eWtleV0oLi4uYXJncyk7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBNYWNyb0NvbnRleHQoYk1ldGFNb2RlbE9iamVjdDogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcblx0cmV0dXJuIFByb3BlcnR5KHsgdHlwZTogXCJzYXAudWkubW9kZWwuQ29udGV4dFwiLCBtYWNyb0NvbnRleHQ6IHRydWUsIG1ldGFNb2RlbE9iamVjdDogYk1ldGFNb2RlbE9iamVjdCB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByb3BlcnR5KG9Qcm9wZXJ0eVBhcmFtczogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmIChvUHJvcGVydHlQYXJhbXM/Lm1hY3JvQ29udGV4dCkge1xuXHRcdFx0aWYgKCFtZXRhZGF0YS5tYWNyb0NvbnRleHRzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0XHRtZXRhZGF0YS5tYWNyb0NvbnRleHRzW3Byb3BlcnR5S2V5XSA9IG9Qcm9wZXJ0eVBhcmFtcztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBvUHJvcGVydHlQYXJhbXM7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSwgdik7XG5cdFx0fTtcblx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRQcm9wZXJ0eShwcm9wZXJ0eUtleSk7XG5cdFx0fTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBZ2dyZWdhdGlvbihvQWdncmVnYXRpb25EZXNjcmlwdG9yPzogYW55KTogYW55IHtcblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcik6IGFueSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQpO1xuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IG9BZ2dyZWdhdGlvbkRlc2NyaXB0b3I7XG5cdFx0fVxuXHRcdGlmIChvQWdncmVnYXRpb25EZXNjcmlwdG9yLmlzRGVmYXVsdCkge1xuXHRcdFx0bWV0YWRhdGEuZGVmYXVsdEFnZ3JlZ2F0aW9uID0gcHJvcGVydHlLZXk7XG5cdFx0fVxuXHRcdGRlbGV0ZSBwcm9wZXJ0eURlc2NyaXB0b3Iud3JpdGFibGU7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuc2V0ID0gZnVuY3Rpb24odjogYW55KSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSwgdik7XG5cdFx0fTtcblx0XHQocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuZ2V0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRBZ2dyZWdhdGlvbihwcm9wZXJ0eUtleSk7XG5cdFx0fTtcblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBc3NvY2lhdGlvbihvQXNzb2NpYXRpb25EZXNjcmlwdGlvbj86IGFueSk6IGFueSB7XG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpOiBhbnkge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0KTtcblx0XHRpZiAoIW1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmFzc29jaWF0aW9uc1twcm9wZXJ0eUtleV0gPSBvQXNzb2NpYXRpb25EZXNjcmlwdGlvbjtcblx0XHR9XG5cdFx0ZGVsZXRlIHByb3BlcnR5RGVzY3JpcHRvci53cml0YWJsZTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5zZXQgPSBmdW5jdGlvbih2OiBhbnkpIHtcblx0XHRcdHJldHVybiB0aGlzLnNldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5LCB2KTtcblx0XHR9O1xuXHRcdChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5nZXQgPSBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldEFnZ3JlZ2F0aW9uKHByb3BlcnR5S2V5KTtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fTtcbn1cbnR5cGUgQ29udHJvbFByb3BlcnR5TmFtZXM8VD4gPSB7XG5cdFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEs7XG59W2tleW9mIFRdO1xuZXhwb3J0IHR5cGUgUHJvcGVydGllc09mPFQ+ID0gUGFydGlhbDxQaWNrPFQsIENvbnRyb2xQcm9wZXJ0eU5hbWVzPFQ+Pj47XG5cbi8qKlxuICogRGVjb3JhdG9yIHRvIHByb3ZpZGUgYSBuZXcgQVBJIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIG1hY3Jvcy5cbiAqXG4gKiBAcGFyYW0gc1RhcmdldCBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1hY3JvIEFQSVxuICogQHBhcmFtIGlzRGVwZW5kZW50Qm91bmQgV2hldGhlciB0aGlzIEFQSSB3aWxsIGJlIHVzZWQgYXMgYSBkZXBlbmRlbnQgb3Igbm90XG4gKiBAY2xhc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFQSUNsYXNzKHNUYXJnZXQ6IHN0cmluZywgaXNEZXBlbmRlbnRCb3VuZCA9IGZhbHNlKSB7XG5cdHJldHVybiBmdW5jdGlvbihjb25zdHJ1Y3RvcjogRnVuY3Rpb24pIHtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSkge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhID0ge307XG5cdFx0fVxuXG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEuaW50ZXJmYWNlcykge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMgPSBbXTtcblx0XHR9XG5cdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLm1ldGFkYXRhLmludGVyZmFjZXMucHVzaChcInNhcC51aS5jb3JlLklGb3JtQ29udGVudFwiKTtcblx0XHQoY29uc3RydWN0b3IgYXMgYW55KS5pc0RlcGVuZGVudEJvdW5kID0gaXNEZXBlbmRlbnRCb3VuZDtcblx0XHRpZiAoIWNvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXJlcikge1xuXHRcdFx0Y29uc3RydWN0b3IucHJvdG90eXBlLnJlbmRlcmVyID0ge1xuXHRcdFx0XHRhcGlWZXJzaW9uOiAyLFxuXHRcdFx0XHRyZW5kZXI6IGZ1bmN0aW9uKG9SbTogUmVuZGVyTWFuYWdlciwgb0NvbnRyb2w6IGFueSkge1xuXHRcdFx0XHRcdG9SbS5yZW5kZXJDb250cm9sKG9Db250cm9sLmdldENvbnRlbnQoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0ZGVzY3JpYmUoY29uc3RydWN0b3IsIHNUYXJnZXQsIGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgRWxlbWVudE1ldGFkYXRhKTtcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBVSTVDbGFzcyhzVGFyZ2V0OiBzdHJpbmcsIG1ldGFkYXRhQ2xhc3M/OiBhbnksIG1ldGFkYXRhRGVmaW5pdGlvbj86IGFueSkge1xuXHRyZXR1cm4gZnVuY3Rpb24oY29uc3RydWN0b3I6IEZ1bmN0aW9uKSB7XG5cdFx0aWYgKCFjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YSA9IHt9O1xuXHRcdH1cblx0XHRpZiAobWV0YWRhdGFEZWZpbml0aW9uPy5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdHJ1Y3Rvci5wcm90b3R5cGUubWV0YWRhdGEucHJvcGVydGllcyA9IG1ldGFkYXRhRGVmaW5pdGlvbi5wcm9wZXJ0aWVzO1xuXHRcdH1cblx0XHRpZiAobWV0YWRhdGFEZWZpbml0aW9uPy5ldmVudHMpIHtcblx0XHRcdGNvbnN0cnVjdG9yLnByb3RvdHlwZS5tZXRhZGF0YS5ldmVudHMgPSBtZXRhZGF0YURlZmluaXRpb24uZXZlbnRzO1xuXHRcdH1cblx0XHRkZXNjcmliZShjb25zdHJ1Y3Rvciwgc1RhcmdldCwgY29uc3RydWN0b3IucHJvdG90eXBlLCBtZXRhZGF0YUNsYXNzKTtcblx0fTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmUoY2xheno6IGFueSwgbmFtZTogc3RyaW5nLCBpbk9iajogYW55LCBtZXRhZGF0YUNsYXNzPzogYW55KSB7XG5cdGNvbnN0IG9iajogYW55ID0ge307XG5cdG9iai5tZXRhZGF0YSA9IGluT2JqLm1ldGFkYXRhIHx8IHt9O1xuXHRvYmoub3ZlcnJpZGUgPSBpbk9iai5vdmVycmlkZTtcblx0b2JqLmNvbnN0cnVjdG9yID0gY2xheno7XG5cdG9iai5tZXRhZGF0YS5iYXNlVHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjbGF6ei5wcm90b3R5cGUpXG5cdFx0LmdldE1ldGFkYXRhKClcblx0XHQuZ2V0TmFtZSgpO1xuXHRvYmoucmVuZGVyZXIgPSBpbk9iai5yZW5kZXJlciB8fCBjbGF6ei5yZW5kZXJlcjtcblx0b2JqLm1ldGFkYXRhLmludGVyZmFjZXMgPSBpbk9iai5tZXRhZGF0YT8uaW50ZXJmYWNlcyB8fCBjbGF6ei5tZXRhZGF0YT8uaW50ZXJmYWNlcztcblx0bGV0IG1ldGFkYXRhOiBhbnk7XG5cdGlmIChtZXRhZGF0YUNsYXNzKSB7XG5cdFx0bWV0YWRhdGEgPSBuZXcgbWV0YWRhdGFDbGFzcyhuYW1lLCBvYmopO1xuXHR9IGVsc2Uge1xuXHRcdG1ldGFkYXRhID0gbmV3IEVsZW1lbnRNZXRhZGF0YShuYW1lLCBvYmopO1xuXHR9XG5cdGNsYXp6LmdldE1ldGFkYXRhID0gY2xhenoucHJvdG90eXBlLmdldE1ldGFkYXRhID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIG1ldGFkYXRhO1xuXHR9O1xuXHRjb25zdCBmbkluaXQgPSBjbGF6ei5wcm90b3R5cGUuaW5pdDtcblx0Y2xhenoucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiguLi5hcmdzOiBhbnlbXSkge1xuXHRcdGZuSW5pdCAmJiBmbkluaXQuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0aWYgKG9iai5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBhUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMob2JqLm1ldGFkYXRhLnByb3BlcnRpZXMpO1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0XHRjb25zdCB0aGF0ID0gdGhpcztcblx0XHRcdGFQcm9wZXJ0eUtleXMuZm9yRWFjaChwcm9wZXJ0eUtleSA9PiB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGF0LCBwcm9wZXJ0eUtleSwge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRzZXQ6ICh2OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGF0LnNldFByb3BlcnR5KHByb3BlcnR5S2V5LCB2KTtcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGdldDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG5cdE9iamVjdFBhdGguc2V0KG5hbWUsIGNsYXp6KTtcbn1cbiJdfQ==
@@ -1,6 +1,8 @@
1
- import { OverrideExecution } from "sap/ui/core/mvc";
2
- import { ObjectPath, deepClone } from "sap/base/util";
3
- import { $ControlSettings, ElementMetadata, RenderManager } from "sap/ui/core";
1
+ import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
2
+ import ObjectPath from "sap/base/util/ObjectPath";
3
+ import deepClone from "sap/base/util/deepClone";
4
+ import ElementMetadata from "sap/ui/core/ElementMetadata";
5
+ import RenderManager from "sap/ui/core/RenderManager";
4
6
 
5
7
  const ensureMetadata = function(target: any) {
6
8
  if (!target.hasOwnProperty("metadata")) {
@@ -151,9 +153,16 @@ export function Association(oAssociationDescription?: any): any {
151
153
  type ControlPropertyNames<T> = {
152
154
  [K in keyof T]: T[K] extends Function ? never : K;
153
155
  }[keyof T];
154
- export type PropertiesOf<T> = Partial<Pick<T, ControlPropertyNames<T>>> & $ControlSettings;
156
+ export type PropertiesOf<T> = Partial<Pick<T, ControlPropertyNames<T>>>;
155
157
 
156
- export function APIClass(sTarget: string) {
158
+ /**
159
+ * Decorator to provide a new API class to be used in the macros.
160
+ *
161
+ * @param sTarget The fully qualified name of the macro API
162
+ * @param isDependentBound Whether this API will be used as a dependent or not
163
+ * @class
164
+ */
165
+ export function APIClass(sTarget: string, isDependentBound = false) {
157
166
  return function(constructor: Function) {
158
167
  if (!constructor.prototype.metadata) {
159
168
  constructor.prototype.metadata = {};
@@ -163,7 +172,7 @@ export function APIClass(sTarget: string) {
163
172
  constructor.prototype.metadata.interfaces = [];
164
173
  }
165
174
  constructor.prototype.metadata.interfaces.push("sap.ui.core.IFormContent");
166
-
175
+ (constructor as any).isDependentBound = isDependentBound;
167
176
  if (!constructor.prototype.renderer) {
168
177
  constructor.prototype.renderer = {
169
178
  apiVersion: 2,
@@ -212,21 +221,23 @@ function describe(clazz: any, name: string, inObj: any, metadataClass?: any) {
212
221
  };
213
222
  const fnInit = clazz.prototype.init;
214
223
  clazz.prototype.init = function(...args: any[]) {
215
- fnInit.apply(this, args);
216
- const aPropertyKeys = Object.keys(obj.metadata.properties);
217
- // eslint-disable-next-line @typescript-eslint/no-this-alias
218
- const that = this;
219
- aPropertyKeys.forEach(propertyKey => {
220
- Object.defineProperty(that, propertyKey, {
221
- configurable: true,
222
- set: (v: any) => {
223
- return that.setProperty(propertyKey, v);
224
- },
225
- get: () => {
226
- return that.getProperty(propertyKey);
227
- }
224
+ fnInit && fnInit.apply(this, args);
225
+ if (obj.metadata.properties) {
226
+ const aPropertyKeys = Object.keys(obj.metadata.properties);
227
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
228
+ const that = this;
229
+ aPropertyKeys.forEach(propertyKey => {
230
+ Object.defineProperty(that, propertyKey, {
231
+ configurable: true,
232
+ set: (v: any) => {
233
+ return that.setProperty(propertyKey, v);
234
+ },
235
+ get: () => {
236
+ return that.getProperty(propertyKey);
237
+ }
238
+ });
228
239
  });
229
- });
240
+ }
230
241
  };
231
242
  ObjectPath.set(name, clazz);
232
243
  }
@@ -1,61 +1,65 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
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/ui/base/BindingParser"], function(BindingParser) {
6
- "use strict";
7
-
8
- var getObject = function(oObject, sPath) {
9
- if (!oObject) {
10
- return null;
11
- }
12
- var sPathSplit = sPath.split("/");
13
- if (sPathSplit.length === 1) {
14
- return oObject[sPath];
15
- } else {
16
- return getObject(oObject[sPathSplit[0]], sPathSplit.splice(1).join("/"));
17
- }
18
- };
19
- /**
20
- * Resolve a dynamic annotation path down to a standard annotation path.
21
- *
22
- * @param sAnnotationPath
23
- * @param oMetaModel
24
- * @returns {string} The non dynamic version of the annotation path
25
- */
26
- var resolveDynamicExpression = function(sAnnotationPath, oMetaModel) {
27
- if (sAnnotationPath.indexOf("[") !== -1) {
28
- var firstBracket = sAnnotationPath.indexOf("[");
29
- var sStableBracket = sAnnotationPath.substr(0, firstBracket);
30
- var sRest = sAnnotationPath.substr(firstBracket + 1);
31
- var lastBracket = sRest.indexOf("]");
32
- var aValue = oMetaModel.getObject(sStableBracket);
33
- var oExpression = BindingParser.parseExpression(sRest.substr(0, lastBracket));
34
- if (
35
- Array.isArray(aValue) &&
36
- oExpression &&
37
- oExpression.result &&
38
- oExpression.result.parts &&
39
- oExpression.result.parts[0] &&
40
- oExpression.result.parts[0].path
41
- ) {
42
- var bFound = false;
43
- for (var i = 0; i < aValue.length && !bFound; i++) {
44
- var oObjectValue = getObject(aValue[i], oExpression.result.parts[0].path);
45
- var bResult = oExpression.result.formatter(oObjectValue);
46
- if (bResult) {
47
- bFound = true;
48
- }
49
- }
50
- if (bFound) {
51
- sAnnotationPath = resolveDynamicExpression(sStableBracket + (i - 1) + sRest.substr(lastBracket + 1), oMetaModel);
52
- }
53
- }
54
- }
55
- return sAnnotationPath;
56
- };
57
-
58
- return {
59
- resolveDynamicExpression: resolveDynamicExpression
60
- };
61
- });
5
+ sap.ui.define(["sap/ui/base/BindingParser"], function (BindingParser) {
6
+ "use strict";
7
+
8
+ function getObject(oObject, sPath) {
9
+ if (!oObject) {
10
+ return null;
11
+ }
12
+
13
+ var sPathSplit = sPath.split("/");
14
+
15
+ if (sPathSplit.length === 1) {
16
+ return oObject[sPath];
17
+ } else {
18
+ return getObject(oObject[sPathSplit[0]], sPathSplit.splice(1).join("/"));
19
+ }
20
+ }
21
+ /**
22
+ * Resolve a dynamic annotation path down to a standard annotation path.
23
+ *
24
+ * @param sAnnotationPath
25
+ * @param oMetaModel
26
+ * @returns {string} The non dynamic version of the annotation path
27
+ */
28
+
29
+
30
+ function resolveDynamicExpression(sAnnotationPath, oMetaModel) {
31
+ if (sAnnotationPath.indexOf("[") !== -1) {
32
+ var firstBracket = sAnnotationPath.indexOf("[");
33
+ var sStableBracket = sAnnotationPath.substr(0, firstBracket);
34
+ var sRest = sAnnotationPath.substr(firstBracket + 1);
35
+ var lastBracket = sRest.indexOf("]");
36
+ var aValue = oMetaModel.getObject(sStableBracket);
37
+ var oExpression = BindingParser.parseExpression(sRest.substr(0, lastBracket));
38
+
39
+ if (Array.isArray(aValue) && oExpression && oExpression.result && oExpression.result.parts && oExpression.result.parts[0] && oExpression.result.parts[0].path) {
40
+ var i;
41
+ var bFound = false;
42
+
43
+ for (i = 0; i < aValue.length && !bFound; i++) {
44
+ var oObjectValue = getObject(aValue[i], oExpression.result.parts[0].path);
45
+ var bResult = oExpression.result.formatter(oObjectValue);
46
+
47
+ if (bResult) {
48
+ bFound = true;
49
+ }
50
+ }
51
+
52
+ if (bFound) {
53
+ sAnnotationPath = resolveDynamicExpression(sStableBracket + (i - 1) + sRest.substr(lastBracket + 1), oMetaModel);
54
+ }
55
+ }
56
+ }
57
+
58
+ return sAnnotationPath;
59
+ }
60
+
61
+ return {
62
+ resolveDynamicExpression: resolveDynamicExpression
63
+ };
64
+ }, false);
65
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkR5bmFtaWNBbm5vdGF0aW9uUGF0aEhlbHBlci50cyJdLCJuYW1lcyI6WyJnZXRPYmplY3QiLCJvT2JqZWN0Iiwic1BhdGgiLCJzUGF0aFNwbGl0Iiwic3BsaXQiLCJsZW5ndGgiLCJzcGxpY2UiLCJqb2luIiwicmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uIiwic0Fubm90YXRpb25QYXRoIiwib01ldGFNb2RlbCIsImluZGV4T2YiLCJmaXJzdEJyYWNrZXQiLCJzU3RhYmxlQnJhY2tldCIsInN1YnN0ciIsInNSZXN0IiwibGFzdEJyYWNrZXQiLCJhVmFsdWUiLCJvRXhwcmVzc2lvbiIsIkJpbmRpbmdQYXJzZXIiLCJwYXJzZUV4cHJlc3Npb24iLCJBcnJheSIsImlzQXJyYXkiLCJyZXN1bHQiLCJwYXJ0cyIsInBhdGgiLCJpIiwiYkZvdW5kIiwib09iamVjdFZhbHVlIiwiYlJlc3VsdCIsImZvcm1hdHRlciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQUFBLFdBQVNBLFNBQVQsQ0FBbUJDLE9BQW5CLEVBQWlDQyxLQUFqQyxFQUFrRDtBQUNqRCxRQUFJLENBQUNELE9BQUwsRUFBYztBQUNiLGFBQU8sSUFBUDtBQUNBOztBQUNELFFBQU1FLFVBQVUsR0FBR0QsS0FBSyxDQUFDRSxLQUFOLENBQVksR0FBWixDQUFuQjs7QUFDQSxRQUFJRCxVQUFVLENBQUNFLE1BQVgsS0FBc0IsQ0FBMUIsRUFBNkI7QUFDNUIsYUFBT0osT0FBTyxDQUFDQyxLQUFELENBQWQ7QUFDQSxLQUZELE1BRU87QUFDTixhQUFPRixTQUFTLENBQUNDLE9BQU8sQ0FBQ0UsVUFBVSxDQUFDLENBQUQsQ0FBWCxDQUFSLEVBQXlCQSxVQUFVLENBQUNHLE1BQVgsQ0FBa0IsQ0FBbEIsRUFBcUJDLElBQXJCLENBQTBCLEdBQTFCLENBQXpCLENBQWhCO0FBQ0E7QUFDRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxXQUFTQyx3QkFBVCxDQUFrQ0MsZUFBbEMsRUFBd0RDLFVBQXhELEVBQXlFO0FBQ3hFLFFBQUlELGVBQWUsQ0FBQ0UsT0FBaEIsQ0FBd0IsR0FBeEIsTUFBaUMsQ0FBQyxDQUF0QyxFQUF5QztBQUN4QyxVQUFNQyxZQUFZLEdBQUdILGVBQWUsQ0FBQ0UsT0FBaEIsQ0FBd0IsR0FBeEIsQ0FBckI7QUFDQSxVQUFNRSxjQUFjLEdBQUdKLGVBQWUsQ0FBQ0ssTUFBaEIsQ0FBdUIsQ0FBdkIsRUFBMEJGLFlBQTFCLENBQXZCO0FBQ0EsVUFBTUcsS0FBSyxHQUFHTixlQUFlLENBQUNLLE1BQWhCLENBQXVCRixZQUFZLEdBQUcsQ0FBdEMsQ0FBZDtBQUNBLFVBQU1JLFdBQVcsR0FBR0QsS0FBSyxDQUFDSixPQUFOLENBQWMsR0FBZCxDQUFwQjtBQUNBLFVBQU1NLE1BQU0sR0FBR1AsVUFBVSxDQUFDVixTQUFYLENBQXFCYSxjQUFyQixDQUFmO0FBQ0EsVUFBTUssV0FBVyxHQUFHQyxhQUFhLENBQUNDLGVBQWQsQ0FBOEJMLEtBQUssQ0FBQ0QsTUFBTixDQUFhLENBQWIsRUFBZ0JFLFdBQWhCLENBQTlCLENBQXBCOztBQUNBLFVBQ0NLLEtBQUssQ0FBQ0MsT0FBTixDQUFjTCxNQUFkLEtBQ0FDLFdBREEsSUFFQUEsV0FBVyxDQUFDSyxNQUZaLElBR0FMLFdBQVcsQ0FBQ0ssTUFBWixDQUFtQkMsS0FIbkIsSUFJQU4sV0FBVyxDQUFDSyxNQUFaLENBQW1CQyxLQUFuQixDQUF5QixDQUF6QixDQUpBLElBS0FOLFdBQVcsQ0FBQ0ssTUFBWixDQUFtQkMsS0FBbkIsQ0FBeUIsQ0FBekIsRUFBNEJDLElBTjdCLEVBT0U7QUFDRCxZQUFJQyxDQUFKO0FBQ0EsWUFBSUMsTUFBTSxHQUFHLEtBQWI7O0FBQ0EsYUFBS0QsQ0FBQyxHQUFHLENBQVQsRUFBWUEsQ0FBQyxHQUFHVCxNQUFNLENBQUNaLE1BQVgsSUFBcUIsQ0FBQ3NCLE1BQWxDLEVBQTBDRCxDQUFDLEVBQTNDLEVBQStDO0FBQzlDLGNBQU1FLFlBQVksR0FBRzVCLFNBQVMsQ0FBQ2lCLE1BQU0sQ0FBQ1MsQ0FBRCxDQUFQLEVBQVlSLFdBQVcsQ0FBQ0ssTUFBWixDQUFtQkMsS0FBbkIsQ0FBeUIsQ0FBekIsRUFBNEJDLElBQXhDLENBQTlCO0FBQ0EsY0FBTUksT0FBTyxHQUFHWCxXQUFXLENBQUNLLE1BQVosQ0FBbUJPLFNBQW5CLENBQTZCRixZQUE3QixDQUFoQjs7QUFDQSxjQUFJQyxPQUFKLEVBQWE7QUFDWkYsWUFBQUEsTUFBTSxHQUFHLElBQVQ7QUFDQTtBQUNEOztBQUNELFlBQUlBLE1BQUosRUFBWTtBQUNYbEIsVUFBQUEsZUFBZSxHQUFHRCx3QkFBd0IsQ0FBQ0ssY0FBYyxJQUFJYSxDQUFDLEdBQUcsQ0FBUixDQUFkLEdBQTJCWCxLQUFLLENBQUNELE1BQU4sQ0FBYUUsV0FBVyxHQUFHLENBQTNCLENBQTVCLEVBQTJETixVQUEzRCxDQUExQztBQUNBO0FBQ0Q7QUFDRDs7QUFDRCxXQUFPRCxlQUFQO0FBQ0E7O1NBRWM7QUFDZEQsSUFBQUEsd0JBQXdCLEVBQUVBO0FBRFosRyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcblxuZnVuY3Rpb24gZ2V0T2JqZWN0KG9PYmplY3Q6IGFueSwgc1BhdGg6IGFueSk6IGFueSB7XG5cdGlmICghb09iamVjdCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IHNQYXRoU3BsaXQgPSBzUGF0aC5zcGxpdChcIi9cIik7XG5cdGlmIChzUGF0aFNwbGl0Lmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBvT2JqZWN0W3NQYXRoXTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gZ2V0T2JqZWN0KG9PYmplY3Rbc1BhdGhTcGxpdFswXV0sIHNQYXRoU3BsaXQuc3BsaWNlKDEpLmpvaW4oXCIvXCIpKTtcblx0fVxufVxuLyoqXG4gKiBSZXNvbHZlIGEgZHluYW1pYyBhbm5vdGF0aW9uIHBhdGggZG93biB0byBhIHN0YW5kYXJkIGFubm90YXRpb24gcGF0aC5cbiAqXG4gKiBAcGFyYW0gc0Fubm90YXRpb25QYXRoXG4gKiBAcGFyYW0gb01ldGFNb2RlbFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIG5vbiBkeW5hbWljIHZlcnNpb24gb2YgdGhlIGFubm90YXRpb24gcGF0aFxuICovXG5mdW5jdGlvbiByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24oc0Fubm90YXRpb25QYXRoOiBhbnksIG9NZXRhTW9kZWw6IGFueSkge1xuXHRpZiAoc0Fubm90YXRpb25QYXRoLmluZGV4T2YoXCJbXCIpICE9PSAtMSkge1xuXHRcdGNvbnN0IGZpcnN0QnJhY2tldCA9IHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiW1wiKTtcblx0XHRjb25zdCBzU3RhYmxlQnJhY2tldCA9IHNBbm5vdGF0aW9uUGF0aC5zdWJzdHIoMCwgZmlyc3RCcmFja2V0KTtcblx0XHRjb25zdCBzUmVzdCA9IHNBbm5vdGF0aW9uUGF0aC5zdWJzdHIoZmlyc3RCcmFja2V0ICsgMSk7XG5cdFx0Y29uc3QgbGFzdEJyYWNrZXQgPSBzUmVzdC5pbmRleE9mKFwiXVwiKTtcblx0XHRjb25zdCBhVmFsdWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChzU3RhYmxlQnJhY2tldCk7XG5cdFx0Y29uc3Qgb0V4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLnBhcnNlRXhwcmVzc2lvbihzUmVzdC5zdWJzdHIoMCwgbGFzdEJyYWNrZXQpKTtcblx0XHRpZiAoXG5cdFx0XHRBcnJheS5pc0FycmF5KGFWYWx1ZSkgJiZcblx0XHRcdG9FeHByZXNzaW9uICYmXG5cdFx0XHRvRXhwcmVzc2lvbi5yZXN1bHQgJiZcblx0XHRcdG9FeHByZXNzaW9uLnJlc3VsdC5wYXJ0cyAmJlxuXHRcdFx0b0V4cHJlc3Npb24ucmVzdWx0LnBhcnRzWzBdICYmXG5cdFx0XHRvRXhwcmVzc2lvbi5yZXN1bHQucGFydHNbMF0ucGF0aFxuXHRcdCkge1xuXHRcdFx0bGV0IGk7XG5cdFx0XHRsZXQgYkZvdW5kID0gZmFsc2U7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgYVZhbHVlLmxlbmd0aCAmJiAhYkZvdW5kOyBpKyspIHtcblx0XHRcdFx0Y29uc3Qgb09iamVjdFZhbHVlID0gZ2V0T2JqZWN0KGFWYWx1ZVtpXSwgb0V4cHJlc3Npb24ucmVzdWx0LnBhcnRzWzBdLnBhdGgpO1xuXHRcdFx0XHRjb25zdCBiUmVzdWx0ID0gb0V4cHJlc3Npb24ucmVzdWx0LmZvcm1hdHRlcihvT2JqZWN0VmFsdWUpO1xuXHRcdFx0XHRpZiAoYlJlc3VsdCkge1xuXHRcdFx0XHRcdGJGb3VuZCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChiRm91bmQpIHtcblx0XHRcdFx0c0Fubm90YXRpb25QYXRoID0gcmVzb2x2ZUR5bmFtaWNFeHByZXNzaW9uKHNTdGFibGVCcmFja2V0ICsgKGkgLSAxKSArIHNSZXN0LnN1YnN0cihsYXN0QnJhY2tldCArIDEpLCBvTWV0YU1vZGVsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aDtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuXHRyZXNvbHZlRHluYW1pY0V4cHJlc3Npb246IHJlc29sdmVEeW5hbWljRXhwcmVzc2lvblxufTtcbiJdfQ==
@@ -0,0 +1,56 @@
1
+ import BindingParser from "sap/ui/base/BindingParser";
2
+
3
+ function getObject(oObject: any, sPath: any): any {
4
+ if (!oObject) {
5
+ return null;
6
+ }
7
+ const sPathSplit = sPath.split("/");
8
+ if (sPathSplit.length === 1) {
9
+ return oObject[sPath];
10
+ } else {
11
+ return getObject(oObject[sPathSplit[0]], sPathSplit.splice(1).join("/"));
12
+ }
13
+ }
14
+ /**
15
+ * Resolve a dynamic annotation path down to a standard annotation path.
16
+ *
17
+ * @param sAnnotationPath
18
+ * @param oMetaModel
19
+ * @returns {string} The non dynamic version of the annotation path
20
+ */
21
+ function resolveDynamicExpression(sAnnotationPath: any, oMetaModel: any) {
22
+ if (sAnnotationPath.indexOf("[") !== -1) {
23
+ const firstBracket = sAnnotationPath.indexOf("[");
24
+ const sStableBracket = sAnnotationPath.substr(0, firstBracket);
25
+ const sRest = sAnnotationPath.substr(firstBracket + 1);
26
+ const lastBracket = sRest.indexOf("]");
27
+ const aValue = oMetaModel.getObject(sStableBracket);
28
+ const oExpression = BindingParser.parseExpression(sRest.substr(0, lastBracket));
29
+ if (
30
+ Array.isArray(aValue) &&
31
+ oExpression &&
32
+ oExpression.result &&
33
+ oExpression.result.parts &&
34
+ oExpression.result.parts[0] &&
35
+ oExpression.result.parts[0].path
36
+ ) {
37
+ let i;
38
+ let bFound = false;
39
+ for (i = 0; i < aValue.length && !bFound; i++) {
40
+ const oObjectValue = getObject(aValue[i], oExpression.result.parts[0].path);
41
+ const bResult = oExpression.result.formatter(oObjectValue);
42
+ if (bResult) {
43
+ bFound = true;
44
+ }
45
+ }
46
+ if (bFound) {
47
+ sAnnotationPath = resolveDynamicExpression(sStableBracket + (i - 1) + sRest.substr(lastBracket + 1), oMetaModel);
48
+ }
49
+ }
50
+ }
51
+ return sAnnotationPath;
52
+ }
53
+
54
+ export default {
55
+ resolveDynamicExpression: resolveDynamicExpression
56
+ };
@@ -1,91 +1,88 @@
1
1
  /*!
2
- * SAPUI5
3
- * (c) Copyright 2009-2021 SAP SE. All rights reserved.
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
+ sap.ui.define([], function () {
6
+ "use strict";
5
7
 
6
- sap.ui.define(["sap/base/Log"], function(Log) {
7
- "use strict";
8
+ var enumEditState = {
9
+ CLEAN: 0,
10
+ PROCESSED: 1,
11
+ DIRTY: 2
12
+ };
13
+ var currentEditState = enumEditState.CLEAN;
14
+ return {
15
+ /**
16
+ * This sets the edit state as dirty, meaning bindings have to be refreshed.
17
+ *
18
+ * @function
19
+ * @name sap.fe.core.helpers.EditState#setEditStateDirty
20
+ * @memberof sap.fe.core.helpers.EditState
21
+ *
22
+ * @ui5-restricted
23
+ * @final
24
+ */
25
+ setEditStateDirty: function () {
26
+ currentEditState = enumEditState.DIRTY;
27
+ },
8
28
 
9
- var enumEditState = {
10
- CLEAN: 0,
11
- PROCESSED: 1,
12
- DIRTY: 2
13
- };
29
+ /**
30
+ * This sets the edit state as processed, meaning is can be reset to clean after all bindings are refreshed.
31
+ *
32
+ * @function
33
+ * @name sap.fe.core.helpers.EditState#setEditStateProcessed
34
+ * @memberof sap.fe.core.helpers.EditState
35
+ *
36
+ * @ui5-restricted
37
+ * @final
38
+ */
39
+ setEditStateProcessed: function () {
40
+ currentEditState = enumEditState.PROCESSED;
41
+ },
14
42
 
15
- var currentEditState = enumEditState.CLEAN;
43
+ /**
44
+ * Resets the edit state to the initial state.
45
+ *
46
+ * @function
47
+ * @name sap.fe.core.helpers.EditState#resetEditState
48
+ * @memberof sap.fe.core.helpers.EditState
49
+ *
50
+ * @ui5-restricted
51
+ * @final
52
+ */
53
+ resetEditState: function () {
54
+ currentEditState = enumEditState.CLEAN;
55
+ },
16
56
 
17
- return {
18
- /**
19
- * This sets the edit state as dirty, meaning bindings have to be refreshed.
20
- *
21
- * @function
22
- * @name sap.fe.core.helpers.EditState#setEditStateDirty
23
- * @memberof sap.fe.core.helpers.EditState
24
- *
25
- * @ui5-restricted
26
- * @final
27
- */
28
- setEditStateDirty: function() {
29
- currentEditState = enumEditState.DIRTY;
30
- },
57
+ /**
58
+ * Returns true if the edit state is not clean, meaning bindings have to be refreshed
59
+ *
60
+ * @function
61
+ * @name sap.fe.core.helpers.EditState#isEditStateDirty
62
+ * @memberof sap.fe.core.helpers.EditState
63
+ *
64
+ * @ui5-restricted
65
+ * @final
66
+ */
67
+ isEditStateDirty: function () {
68
+ return currentEditState !== enumEditState.CLEAN;
69
+ },
31
70
 
32
- /**
33
- * This sets the edit state as processed, meaning is can be reset to clean after all bindings are refreshed.
34
- *
35
- * @function
36
- * @name sap.fe.core.helpers.EditState#setEditStateProcessed
37
- * @memberof sap.fe.core.helpers.EditState
38
- *
39
- * @ui5-restricted
40
- * @final
41
- */
42
- setEditStateProcessed: function() {
43
- currentEditState = enumEditState.PROCESSED;
44
- },
45
-
46
- /**
47
- * Resets the edit state to the initial state.
48
- *
49
- * @function
50
- * @name sap.fe.core.helpers.EditState#resetEditState
51
- * @memberof sap.fe.core.helpers.EditState
52
- *
53
- * @ui5-restricted
54
- * @final
55
- */
56
- resetEditState: function() {
57
- currentEditState = enumEditState.CLEAN;
58
- },
59
-
60
- /**
61
- * Returns true if the edit state is not clean, meaning bindings have to be refreshed
62
- *
63
- * @function
64
- * @name sap.fe.core.helpers.EditState#isEditStateDirty
65
- * @memberof sap.fe.core.helpers.EditState
66
- *
67
- * @ui5-restricted
68
- * @final
69
- */
70
-
71
- isEditStateDirty: function() {
72
- return currentEditState !== enumEditState.CLEAN;
73
- },
74
-
75
- /**
76
- * Cleans the edit state if it has been processed, i.e. bindings have been properly refreshed.
77
- *
78
- * @function
79
- * @name sap.fe.core.helpers.EditState#cleanProcessedEditState
80
- * @memberof sap.fe.core.helpers.EditState
81
- *
82
- * @ui5-restricted
83
- * @final
84
- */
85
- cleanProcessedEditState: function() {
86
- if (currentEditState === enumEditState.PROCESSED) {
87
- currentEditState = enumEditState.CLEAN;
88
- }
89
- }
90
- };
91
- });
71
+ /**
72
+ * Cleans the edit state if it has been processed, i.e. bindings have been properly refreshed.
73
+ *
74
+ * @function
75
+ * @name sap.fe.core.helpers.EditState#cleanProcessedEditState
76
+ * @memberof sap.fe.core.helpers.EditState
77
+ *
78
+ * @ui5-restricted
79
+ * @final
80
+ */
81
+ cleanProcessedEditState: function () {
82
+ if (currentEditState === enumEditState.PROCESSED) {
83
+ currentEditState = enumEditState.CLEAN;
84
+ }
85
+ }
86
+ };
87
+ }, false);
88
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVkaXRTdGF0ZS50cyJdLCJuYW1lcyI6WyJlbnVtRWRpdFN0YXRlIiwiQ0xFQU4iLCJQUk9DRVNTRUQiLCJESVJUWSIsImN1cnJlbnRFZGl0U3RhdGUiLCJzZXRFZGl0U3RhdGVEaXJ0eSIsInNldEVkaXRTdGF0ZVByb2Nlc3NlZCIsInJlc2V0RWRpdFN0YXRlIiwiaXNFZGl0U3RhdGVEaXJ0eSIsImNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBRkEsTUFBTUEsYUFBYSxHQUFHO0FBQ3JCQyxJQUFBQSxLQUFLLEVBQUUsQ0FEYztBQUVyQkMsSUFBQUEsU0FBUyxFQUFFLENBRlU7QUFHckJDLElBQUFBLEtBQUssRUFBRTtBQUhjLEdBQXRCO0FBS0EsTUFBSUMsZ0JBQWdCLEdBQUdKLGFBQWEsQ0FBQ0MsS0FBckM7U0FFZTtBQUNkO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0NJLElBQUFBLGlCQUFpQixFQUFFLFlBQVc7QUFDN0JELE1BQUFBLGdCQUFnQixHQUFHSixhQUFhLENBQUNHLEtBQWpDO0FBQ0EsS0FiYTs7QUFlZDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDRyxJQUFBQSxxQkFBcUIsRUFBRSxZQUFXO0FBQ2pDRixNQUFBQSxnQkFBZ0IsR0FBR0osYUFBYSxDQUFDRSxTQUFqQztBQUNBLEtBM0JhOztBQTZCZDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDSyxJQUFBQSxjQUFjLEVBQUUsWUFBVztBQUMxQkgsTUFBQUEsZ0JBQWdCLEdBQUdKLGFBQWEsQ0FBQ0MsS0FBakM7QUFDQSxLQXpDYTs7QUEyQ2Q7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQ08sSUFBQUEsZ0JBQWdCLEVBQUUsWUFBVztBQUM1QixhQUFPSixnQkFBZ0IsS0FBS0osYUFBYSxDQUFDQyxLQUExQztBQUNBLEtBeERhOztBQTBEZDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDUSxJQUFBQSx1QkFBdUIsRUFBRSxZQUFXO0FBQ25DLFVBQUlMLGdCQUFnQixLQUFLSixhQUFhLENBQUNFLFNBQXZDLEVBQWtEO0FBQ2pERSxRQUFBQSxnQkFBZ0IsR0FBR0osYUFBYSxDQUFDQyxLQUFqQztBQUNBO0FBQ0Q7QUF4RWEsRyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZW51bUVkaXRTdGF0ZSA9IHtcblx0Q0xFQU46IDAsXG5cdFBST0NFU1NFRDogMSxcblx0RElSVFk6IDJcbn07XG5sZXQgY3VycmVudEVkaXRTdGF0ZSA9IGVudW1FZGl0U3RhdGUuQ0xFQU47XG5cbmV4cG9ydCBkZWZhdWx0IHtcblx0LyoqXG5cdCAqIFRoaXMgc2V0cyB0aGUgZWRpdCBzdGF0ZSBhcyBkaXJ0eSwgbWVhbmluZyBiaW5kaW5ncyBoYXZlIHRvIGJlIHJlZnJlc2hlZC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHNhcC5mZS5jb3JlLmhlbHBlcnMuRWRpdFN0YXRlI3NldEVkaXRTdGF0ZURpcnR5XG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5oZWxwZXJzLkVkaXRTdGF0ZVxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRzZXRFZGl0U3RhdGVEaXJ0eTogZnVuY3Rpb24oKSB7XG5cdFx0Y3VycmVudEVkaXRTdGF0ZSA9IGVudW1FZGl0U3RhdGUuRElSVFk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIFRoaXMgc2V0cyB0aGUgZWRpdCBzdGF0ZSBhcyBwcm9jZXNzZWQsIG1lYW5pbmcgaXMgY2FuIGJlIHJlc2V0IHRvIGNsZWFuIGFmdGVyIGFsbCBiaW5kaW5ncyBhcmUgcmVmcmVzaGVkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuaGVscGVycy5FZGl0U3RhdGUjc2V0RWRpdFN0YXRlUHJvY2Vzc2VkXG5cdCAqIEBtZW1iZXJvZiBzYXAuZmUuY29yZS5oZWxwZXJzLkVkaXRTdGF0ZVxuXHQgKlxuXHQgKiBAdWk1LXJlc3RyaWN0ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRzZXRFZGl0U3RhdGVQcm9jZXNzZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdGN1cnJlbnRFZGl0U3RhdGUgPSBlbnVtRWRpdFN0YXRlLlBST0NFU1NFRDtcblx0fSxcblxuXHQvKipcblx0ICogUmVzZXRzIHRoZSBlZGl0IHN0YXRlIHRvIHRoZSBpbml0aWFsIHN0YXRlLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuaGVscGVycy5FZGl0U3RhdGUjcmVzZXRFZGl0U3RhdGVcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmhlbHBlcnMuRWRpdFN0YXRlXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdHJlc2V0RWRpdFN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRjdXJyZW50RWRpdFN0YXRlID0gZW51bUVkaXRTdGF0ZS5DTEVBTjtcblx0fSxcblxuXHQvKipcblx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBlZGl0IHN0YXRlIGlzIG5vdCBjbGVhbiwgbWVhbmluZyBiaW5kaW5ncyBoYXZlIHRvIGJlIHJlZnJlc2hlZFxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuaGVscGVycy5FZGl0U3RhdGUjaXNFZGl0U3RhdGVEaXJ0eVxuXHQgKiBAbWVtYmVyb2Ygc2FwLmZlLmNvcmUuaGVscGVycy5FZGl0U3RhdGVcblx0ICpcblx0ICogQHVpNS1yZXN0cmljdGVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblxuXHRpc0VkaXRTdGF0ZURpcnR5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gY3VycmVudEVkaXRTdGF0ZSAhPT0gZW51bUVkaXRTdGF0ZS5DTEVBTjtcblx0fSxcblxuXHQvKipcblx0ICogQ2xlYW5zIHRoZSBlZGl0IHN0YXRlIGlmIGl0IGhhcyBiZWVuIHByb2Nlc3NlZCwgaS5lLiBiaW5kaW5ncyBoYXZlIGJlZW4gcHJvcGVybHkgcmVmcmVzaGVkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgc2FwLmZlLmNvcmUuaGVscGVycy5FZGl0U3RhdGUjY2xlYW5Qcm9jZXNzZWRFZGl0U3RhdGVcblx0ICogQG1lbWJlcm9mIHNhcC5mZS5jb3JlLmhlbHBlcnMuRWRpdFN0YXRlXG5cdCAqXG5cdCAqIEB1aTUtcmVzdHJpY3RlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoY3VycmVudEVkaXRTdGF0ZSA9PT0gZW51bUVkaXRTdGF0ZS5QUk9DRVNTRUQpIHtcblx0XHRcdGN1cnJlbnRFZGl0U3RhdGUgPSBlbnVtRWRpdFN0YXRlLkNMRUFOO1xuXHRcdH1cblx0fVxufTtcbiJdfQ==