@sapui5/sap.fe.core 1.108.2 → 1.108.3

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 (71) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +2 -2
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -1
  5. package/src/sap/fe/core/CommonUtils.js +7 -3
  6. package/src/sap/fe/core/CommonUtils.ts +2 -2
  7. package/src/sap/fe/core/TemplateModel.js +16 -2
  8. package/src/sap/fe/core/TemplateModel.ts +15 -1
  9. package/src/sap/fe/core/controllerextensions/EditFlow.js +2 -1
  10. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1 -0
  11. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +386 -357
  12. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +260 -224
  13. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +1 -0
  14. package/src/sap/fe/core/converters/controls/Common/Action.js +4 -2
  15. package/src/sap/fe/core/converters/controls/Common/Action.ts +1 -1
  16. package/src/sap/fe/core/converters/controls/Common/Table.js +7 -10
  17. package/src/sap/fe/core/converters/controls/Common/Table.ts +6 -6
  18. package/src/sap/fe/core/helpers/BindingToolkit.js +2 -2
  19. package/src/sap/fe/core/helpers/BindingToolkit.ts +1 -1
  20. package/src/sap/fe/core/helpers/ModelHelper.js +2 -2
  21. package/src/sap/fe/core/helpers/ModelHelper.ts +1 -1
  22. package/src/sap/fe/core/library.js +1 -1
  23. package/src/sap/fe/core/messagebundle_ar.properties +18 -18
  24. package/src/sap/fe/core/messagebundle_bg.properties +17 -17
  25. package/src/sap/fe/core/messagebundle_ca.properties +18 -18
  26. package/src/sap/fe/core/messagebundle_cs.properties +18 -18
  27. package/src/sap/fe/core/messagebundle_cy.properties +18 -18
  28. package/src/sap/fe/core/messagebundle_da.properties +18 -18
  29. package/src/sap/fe/core/messagebundle_el.properties +17 -17
  30. package/src/sap/fe/core/messagebundle_en_GB.properties +18 -18
  31. package/src/sap/fe/core/messagebundle_es.properties +9 -9
  32. package/src/sap/fe/core/messagebundle_es_MX.properties +17 -17
  33. package/src/sap/fe/core/messagebundle_et.properties +18 -18
  34. package/src/sap/fe/core/messagebundle_fi.properties +18 -18
  35. package/src/sap/fe/core/messagebundle_fr.properties +17 -17
  36. package/src/sap/fe/core/messagebundle_fr_CA.properties +18 -18
  37. package/src/sap/fe/core/messagebundle_hi.properties +18 -18
  38. package/src/sap/fe/core/messagebundle_hr.properties +18 -18
  39. package/src/sap/fe/core/messagebundle_hu.properties +17 -17
  40. package/src/sap/fe/core/messagebundle_id.properties +18 -18
  41. package/src/sap/fe/core/messagebundle_it.properties +17 -17
  42. package/src/sap/fe/core/messagebundle_iw.properties +18 -18
  43. package/src/sap/fe/core/messagebundle_ja.properties +21 -21
  44. package/src/sap/fe/core/messagebundle_kk.properties +18 -18
  45. package/src/sap/fe/core/messagebundle_ko.properties +18 -18
  46. package/src/sap/fe/core/messagebundle_lt.properties +17 -17
  47. package/src/sap/fe/core/messagebundle_lv.properties +18 -18
  48. package/src/sap/fe/core/messagebundle_ms.properties +18 -18
  49. package/src/sap/fe/core/messagebundle_nl.properties +18 -18
  50. package/src/sap/fe/core/messagebundle_no.properties +17 -17
  51. package/src/sap/fe/core/messagebundle_pl.properties +17 -17
  52. package/src/sap/fe/core/messagebundle_pt.properties +18 -18
  53. package/src/sap/fe/core/messagebundle_pt_PT.properties +18 -18
  54. package/src/sap/fe/core/messagebundle_ro.properties +17 -17
  55. package/src/sap/fe/core/messagebundle_ru.properties +18 -18
  56. package/src/sap/fe/core/messagebundle_sh.properties +17 -17
  57. package/src/sap/fe/core/messagebundle_sk.properties +17 -17
  58. package/src/sap/fe/core/messagebundle_sl.properties +18 -18
  59. package/src/sap/fe/core/messagebundle_sv.properties +17 -17
  60. package/src/sap/fe/core/messagebundle_th.properties +17 -17
  61. package/src/sap/fe/core/messagebundle_tr.properties +18 -18
  62. package/src/sap/fe/core/messagebundle_uk.properties +18 -18
  63. package/src/sap/fe/core/messagebundle_vi.properties +18 -18
  64. package/src/sap/fe/core/messagebundle_zh_CN.properties +17 -17
  65. package/src/sap/fe/core/messagebundle_zh_TW.properties +17 -17
  66. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +28 -53
  67. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +36 -67
  68. package/src/sap/fe/core/templating/PropertyHelper.js +23 -2
  69. package/src/sap/fe/core/templating/PropertyHelper.ts +17 -0
  70. package/src/sap/fe/core/templating/SemanticObjectHelper.js +56 -0
  71. package/src/sap/fe/core/templating/SemanticObjectHelper.ts +34 -0
@@ -82,7 +82,7 @@ PROCEED=\u662F\u5426\u4ECD\u8981\u7EE7\u7EED\uFF1F
82
82
  C_DRAFT_OBJECT_PAGE_DRAFT_LOCKED_BY_USER=\u6B64\u523B\u65E0\u6CD5\u7F16\u8F91\u6B64\u5BF9\u8C61\n\u5B83\u5DF2\u88AB {0} \u9501\u5B9A
83
83
 
84
84
 
85
- C_COLLABORATIONDRAFT_INVITATION_DIALOG=\u9080\u8BF7\u7528\u6237\u53C2\u4E0E {0} {1}
85
+ C_COLLABORATIONDRAFT_INVITATION_DIALOG=\u9080\u8BF7\u7528\u6237\u53C2\u4E0E
86
86
 
87
87
  C_COLLABORATIONDRAFT_INVITATION_DIALOG_CONFIRMATION=\u9080\u8BF7
88
88
 
@@ -204,7 +204,7 @@ C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_SUCCESS=\u6210\u529F
204
204
 
205
205
  C_EDITFLOW_SAPFE_CREATION_FAILED_DESCRIPTION=\u7531\u4E8E\u51FA\u73B0\u6280\u672F\u9519\u8BEF\uFF0C\u65E0\u6CD5\u521B\u5EFA\u8BE5\u5BF9\u8C61\u3002\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002
206
206
 
207
- C_COMMON_SAPFE_DATA_RECEIVED_ERROR=\u62B1\u6B49\uFF0C\u65E0\u6CD5\u627E\u5230\u6B64\u9875\u9762
207
+ C_COMMON_SAPFE_DATA_RECEIVED_ERROR=\u65E0\u6CD5\u52A0\u8F7D\u6570\u636E\u3002
208
208
 
209
209
  C_COMMON_DELETE=\u5220\u9664
210
210
 
@@ -214,29 +214,29 @@ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR=\u662F\u5426\u5220
214
214
 
215
215
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR_NON_DELETABLE=\u662F\u5426\u4ECD\u8981\u5220\u9664\u5176\u4F59\u5BF9\u8C61\uFF1F
216
216
 
217
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES=\u6240\u9009\u5BF9\u8C61\u5305\u542B {0} \u6240\u505A\u7684\u672A\u4FDD\u5B58\u66F4\u6539\u3002\n\n\u662F\u5426\u4ECD\u8981\u5220\u9664\uFF1F
217
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES=\u53E6\u4E00\u7528\u6237\u5BF9\u6B64\u5BF9\u8C61\u8FDB\u884C\u4E86\u7F16\u8F91\u800C\u672A\u4FDD\u5B58\u6240\u505A\u7684\u66F4\u6539\uFF1A\n{0} \n\n\u662F\u5426\u4ECD\u8981\u5220\u9664\uFF1F
218
218
 
219
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES_MULTIPLE_OBJECTS=\u6240\u9009\u5BF9\u8C61\u5305\u542B\u5176\u4ED6\u7528\u6237\u6240\u505A\u7684\u672A\u4FDD\u5B58\u66F4\u6539\u3002\n\n\u662F\u5426\u4ECD\u8981\u5220\u9664\uFF1F
219
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES_MULTIPLE_OBJECTS=\u5176\u4ED6\u7528\u6237\u5BF9\u6240\u9009\u5BF9\u8C61\u8FDB\u884C\u8FC7\u7F16\u8F91\u800C\u672A\u4FDD\u5B58\u6240\u505A\u7684\u66F4\u6539\u3002\n\n\u662F\u5426\u4ECD\u8981\u5220\u9664\uFF1F
220
220
 
221
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_PLURAL_NON_DELETABLE=\u662F\u5426\u4ECD\u8981\u5220\u9664\u5176\u4F59\u5BF9\u8C61\uFF1F
221
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_PLURAL_NON_DELETABLE=\u662F\u5426\u4ECD\u8981\u5220\u9664\u5176\u4F59\u7684 {0} \u4E2A\u5BF9\u8C61\uFF1F
222
222
 
223
223
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_PLURAL=\u662F\u5426\u5220\u9664\u6240\u9009\u5BF9\u8C61\uFF1F
224
224
 
225
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_NON_DELETABLE={1} \u4E2A\u6240\u9009\u5BF9\u8C61\u4E2D\u7684 {0} \u4E2A\u5177\u6709\u5220\u9664\u9650\u5236\uFF0C\u56E0\u6B64\u65E0\u6CD5\u5220\u9664\u3002
225
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_NON_DELETABLE={1} \u4E2A\u5BF9\u8C61\u4E2D\u6709 {0} \u4E2A\u65E0\u6CD5\u5220\u9664\u3002
226
226
 
227
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_NON_DELETABLE={0} \u4E2A\u6240\u9009\u5BF9\u8C61\u4E2D\u7684 1 \u4E2A\u5BF9\u8C61\u5177\u6709\u5220\u9664\u9650\u5236\uFF0C\u56E0\u6B64\u65E0\u6CD5\u5220\u9664\u3002
227
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_NON_DELETABLE={0} \u4E2A\u5BF9\u8C61\u4E2D\u6709 1 \u4E2A\u65E0\u6CD5\u5220\u9664\u3002
228
228
 
229
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_LOCKED={1} \u4E2A\u5BF9\u8C61\u4E2D\u7684 {0} \u4E2A\u5F53\u524D\u5DF2\u9501\u5B9A\uFF0C\u56E0\u800C\u65E0\u6CD5\u5220\u9664\u3002
229
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_LOCKED={1} \u4E2A\u5BF9\u8C61\u4E2D\u6709 {0} \u4E2A\u5F53\u524D\u5DF2\u9501\u5B9A\u3002
230
230
 
231
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_LOCKED={0} \u4E2A\u6240\u9009\u5BF9\u8C61\u4E2D\u7684 1 \u4E2A\u5F53\u524D\u7531 {1} \u9501\u5B9A\uFF0C\u56E0\u6B64\u65E0\u6CD5\u5220\u9664\u3002
231
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_LOCKED={0} \u4E2A\u5BF9\u8C61\u4E2D\u6709 1 \u4E2A\u5F53\u524D\u5DF2\u9501\u5B9A\u3002
232
232
 
233
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_SINGULAR=\u5176\u4F59\u5BF9\u8C61\u5305\u542B {0} \u6240\u505A\u7684\u66F4\u6539\u672A\u4FDD\u5B58\u3002\n\n\u662F\u5426\u4ECD\u8981\u5C06\u5176\u5220\u9664\uFF1F
233
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_SINGULAR=\u5176\u4F59\u5BF9\u8C61\u6709\u53E6\u4E00\u7528\u6237\u6240\u505A\u7684\u66F4\u6539\u672A\u4FDD\u5B58\u3002\n\n\u662F\u5426\u4ECD\u8981\u5C06\u5176\u5220\u9664\uFF1F
234
234
 
235
235
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_PLURAL=\u5176\u4F59\u5BF9\u8C61\u6709\u5176\u4ED6\u7528\u6237\u6240\u505A\u7684\u66F4\u6539\u672A\u4FDD\u5B58\u3002\n\n\u662F\u5426\u4ECD\u8981\u5C06\u5176\u5220\u9664\uFF1F
236
236
 
237
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_SINGULAR=\u662F\u5426\u4E5F\u5220\u9664\u5177\u6709 {0} \u6240\u505A\u7684\u672A\u4FDD\u5B58\u66F4\u6539\u7684\u5BF9\u8C61\uFF1F
237
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_SINGULAR=\u662F\u5426\u4E5F\u5220\u9664\u5177\u6709\u672A\u4FDD\u5B58\u66F4\u6539\u7684\u5BF9\u8C61\uFF1F
238
238
 
239
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_PLURAL=\u662F\u5426\u4E5F\u5220\u9664\u5177\u6709\u5176\u4ED6\u7528\u6237\u6240\u505A\u7684\u672A\u4FDD\u5B58\u66F4\u6539\u7684\u5BF9\u8C61\uFF1F
239
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_PLURAL=\u662F\u5426\u4E5F\u5220\u9664\u5177\u6709\u672A\u4FDD\u5B58\u66F4\u6539\u7684\u5BF9\u8C61\uFF1F
240
240
 
241
241
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_SINGLE_OBJECT_LOCKED=\u6B64\u5BF9\u8C61\u5F53\u524D\u5DF2\u7531 {0} \u9501\u5B9A\uFF0C\u56E0\u800C\u65E0\u6CD5\u5220\u9664\u3002
242
242
 
@@ -251,7 +251,7 @@ C_DRAFT_POPOVER_ADMIN_DATA_DRAFTINFO_POPOVER_NO_DATA_TEXT=\u65E0\u53EF\u7528\u8B
251
251
 
252
252
 
253
253
 
254
- C_ROUTING_NAVIGATION_DISABLED_TITLE=\u5F53\u524D\u65E0\u6CD5\u8FDB\u884C\u5BFC\u822A\u3002
254
+ C_ROUTING_NAVIGATION_DISABLED_TITLE=\u5F53\u524D\u65E0\u6CD5\u8FDB\u884C\u5BFC\u822A
255
255
 
256
256
  C_DRAFT_OBJECT_PAGE_DRAFT_UNSAVED_CHANGES=\u53E6\u4E00\u7528\u6237\u5BF9\u6B64\u5BF9\u8C61\u8FDB\u884C\u4E86\u7F16\u8F91\u800C\u672A\u4FDD\u5B58\uFF1A\n{0} \n\n\u5982\u679C\u5F00\u59CB\u7F16\u8F91\uFF0C\u6B64\u7528\u6237\u6240\u505A\u7684\u66F4\u6539\u5C06\u4F1A\u4E22\u5931\u3002
257
257
 
@@ -347,10 +347,10 @@ C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE=\u4E0D\u5141\u8BB8\u5BF9\
347
347
 
348
348
  C_MASS_EDIT_CONFIRM_BUTTON_TEXT=\u7F16\u8F91
349
349
 
350
- OBJECTPAGESTATE_ISSUE=\u5BF9\u8C61\u542B\u6709\u95EE\u9898
350
+ OBJECTPAGESTATE_ISSUE=\u89C6\u56FE\u542B\u6709\u95EE\u9898
351
351
 
352
- OBJECTPAGESTATE_ERROR=\u5BF9\u8C61\u542B\u6709\u9519\u8BEF\u6D88\u606F
352
+ OBJECTPAGESTATE_ERROR=\u89C6\u56FE\u542B\u6709\u9519\u8BEF
353
353
 
354
- OBJECTPAGESTATE_WARNING=\u5BF9\u8C61\u542B\u6709\u8B66\u544A\u6D88\u606F
354
+ OBJECTPAGESTATE_WARNING=\u89C6\u56FE\u542B\u6709\u8B66\u544A
355
355
 
356
- OBJECTPAGESTATE_INFORMATION=\u5BF9\u8C61\u542B\u6709\u4FE1\u606F\u6D88\u606F
356
+ OBJECTPAGESTATE_INFORMATION=\u89C6\u56FE\u542B\u6709\u4FE1\u606F
@@ -82,7 +82,7 @@ PROCEED=\u4ECD\u8981\u7E7C\u7E8C\uFF1F
82
82
  C_DRAFT_OBJECT_PAGE_DRAFT_LOCKED_BY_USER=\u60A8\u76EE\u524D\u7121\u6CD5\u7DE8\u8F2F\u6B64\u7269\u4EF6\u3002\n\u8A72\u7269\u4EF6\u5DF2\u7531 {0} \u9396\u4F4F
83
83
 
84
84
 
85
- C_COLLABORATIONDRAFT_INVITATION_DIALOG=\u9080\u8ACB\u4F7F\u7528\u8005\u52A0\u5165 {0} {1}
85
+ C_COLLABORATIONDRAFT_INVITATION_DIALOG=\u9080\u8ACB\u4F7F\u7528\u8005
86
86
 
87
87
  C_COLLABORATIONDRAFT_INVITATION_DIALOG_CONFIRMATION=\u9080\u8ACB
88
88
 
@@ -204,7 +204,7 @@ C_MESSAGE_HANDLING_SAPFE_ERROR_MESSAGES_PAGE_TITLE_SUCCESS=\u6210\u529F
204
204
 
205
205
  C_EDITFLOW_SAPFE_CREATION_FAILED_DESCRIPTION=\u7531\u65BC\u767C\u751F\u6280\u8853\u932F\u8AA4\uFF0C\u56E0\u6B64\u7121\u6CD5\u5EFA\u7ACB\u7269\u4EF6\uFF1B\u8ACB\u7A0D\u5F8C\u518D\u8A66\u4E00\u6B21\u3002
206
206
 
207
- C_COMMON_SAPFE_DATA_RECEIVED_ERROR=\u5F88\u62B1\u6B49\uFF0C\u6211\u5011\u627E\u4E0D\u5230\u6B64\u9801\u9762
207
+ C_COMMON_SAPFE_DATA_RECEIVED_ERROR=\u7121\u6CD5\u8F09\u5165\u8CC7\u6599\u3002
208
208
 
209
209
  C_COMMON_DELETE=\u522A\u9664
210
210
 
@@ -214,29 +214,29 @@ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR=\u522A\u9664\u6B64
214
214
 
215
215
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_SINGULAR_NON_DELETABLE=\u60A8\u4ECD\u8981\u522A\u9664\u5269\u9918\u7684\u7269\u4EF6\u55CE\uFF1F
216
216
 
217
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES=\u6240\u9078\u7269\u4EF6\u542B\u6709 {0} \u6240\u505A\u7684\u672A\u5132\u5B58\u66F4\u6539\u5167\u5BB9\u3002\n\n\u4ECD\u8981\u522A\u9664\u55CE\uFF1F
217
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES=\u5176\u4ED6\u4F7F\u7528\u8005\u5DF2\u7DE8\u8F2F\u6B64\u7269\u4EF6\u4E14\u672A\u5132\u5B58\u66F4\u6539\uFF1A\n{0} \n\n\u4ECD\u8981\u522A\u9664\u55CE\uFF1F
218
218
 
219
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES_MULTIPLE_OBJECTS=\u6240\u9078\u7269\u4EF6\u542B\u6709\u5176\u4ED6\u4F7F\u7528\u8005\u6240\u505A\u7684\u672A\u5132\u5B58\u66F4\u6539\u5167\u5BB9\u3002\n\n\u4ECD\u8981\u522A\u9664\u55CE\uFF1F
219
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_CHANGES_MULTIPLE_OBJECTS=\u5176\u4ED6\u4F7F\u7528\u8005\u5DF2\u7DE8\u8F2F\u6240\u9078\u7684\u7269\u4EF6\u4E14\u672A\u5132\u5B58\u66F4\u6539\u5167\u5BB9\u3002\n\n\u4ECD\u8981\u522A\u9664\u55CE\uFF1F
220
220
 
221
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_PLURAL_NON_DELETABLE=\u60A8\u4ECD\u8981\u522A\u9664\u5269\u9918\u7684\u7269\u4EF6\u55CE\uFF1F
221
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_PLURAL_NON_DELETABLE=\u60A8\u4ECD\u8981\u522A\u9664\u5269\u9918\u7684 {0} \u500B\u7269\u4EF6\u55CE\uFF1F
222
222
 
223
223
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTTITLE_PLURAL=\u522A\u9664\u6240\u9078\u7269\u4EF6\u55CE\uFF1F
224
224
 
225
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_NON_DELETABLE={0}/{1} \u500B\u6240\u9078\u7269\u4EF6\u542B\u6709\u522A\u9664\u9650\u5236\uFF0C\u56E0\u6B64\u7121\u6CD5\u522A\u9664\u3002
225
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_NON_DELETABLE=\u7121\u6CD5\u522A\u9664 {1} \u500B\u7269\u4EF6\u4E2D\u7684 {0} \u500B\u7269\u4EF6\u3002
226
226
 
227
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_NON_DELETABLE=1/{0} \u500B\u6240\u9078\u7269\u4EF6\u542B\u6709\u522A\u9664\u9650\u5236\uFF0C\u56E0\u6B64\u7121\u6CD5\u522A\u9664\u3002
227
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_NON_DELETABLE=\u7121\u6CD5\u522A\u9664 {0} \u500B\u7269\u4EF6\u4E2D\u7684 1 \u500B\u7269\u4EF6\u3002
228
228
 
229
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_LOCKED=\u76EE\u524D\u5DF2\u9396\u4F4F {0}/{1} \u500B\u7269\u4EF6\uFF0C\u56E0\u6B64\u7121\u6CD5\u522A\u9664\u3002
229
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_LOCKED=\u76EE\u524D\u5DF2\u9396\u4F4F {1} \u500B\u7269\u4EF6\u4E2D\u7684 {0} \u500B\u7269\u4EF6\u3002
230
230
 
231
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_LOCKED=\u76EE\u524D {1} \u5DF2\u9396\u4F4F 1/{0} \u500B\u6240\u9078\u7269\u4EF6\uFF0C\u56E0\u6B64\u7121\u6CD5\u522A\u9664\u3002
231
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_ONE_OBJECT_LOCKED=\u76EE\u524D\u5DF2\u9396\u4F4F {0} \u500B\u7269\u4EF6\u4E2D\u7684 1 \u500B\u7269\u4EF6\u3002
232
232
 
233
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_SINGULAR=\u5269\u9918\u7269\u4EF6\u542B\u6709 {0} \u6240\u505A\u7684\u672A\u5132\u5B58\u66F4\u6539\u5167\u5BB9\u3002\n\n\u60A8\u4ECD\u8981\u522A\u9664\u55CE\uFF1F
233
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_SINGULAR=\u5269\u9918\u7269\u4EF6\u6709\u53E6\u4E00\u500B\u4F7F\u7528\u8005\u672A\u5132\u5B58\u7684\u66F4\u6539\u5167\u5BB9\u3002\n\n\u60A8\u4ECD\u8981\u522A\u9664\u55CE\uFF1F?
234
234
 
235
235
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_UNSAVED_AND_FEW_OBJECTS_LOCKED_PLURAL=\u5269\u9918\u7269\u4EF6\u542B\u6709\u5176\u4ED6\u4F7F\u7528\u8005\u6240\u505A\u7684\u672A\u5132\u5B58\u66F4\u6539\u5167\u5BB9\u3002\n\n\u60A8\u4ECD\u8981\u522A\u9664\u55CE\uFF1F
236
236
 
237
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_SINGULAR=\u540C\u6642\u522A\u9664\u542B\u6709 {0} \u6240\u505A\u7684\u672A\u5132\u5B58\u66F4\u6539\u5167\u5BB9\u7684\u7269\u4EF6\u55CE\uFF1F
237
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_SINGULAR=\u540C\u6642\u522A\u9664\u5305\u542B\u672A\u5132\u5B58\u66F4\u6539\u7684\u7269\u4EF6\u55CE\uFF1F
238
238
 
239
- C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_PLURAL=\u540C\u6642\u522A\u9664\u542B\u6709\u5176\u4ED6\u4F7F\u7528\u8005\u6240\u505A\u7684\u672A\u5132\u5B58\u66F4\u6539\u5167\u5BB9\u7684\u7269\u4EF6\u55CE\uFF1F
239
+ C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_OBJECTINFO_AND_FEW_OBJECTS_UNSAVED_PLURAL=\u540C\u6642\u522A\u9664\u5305\u542B\u672A\u5132\u5B58\u66F4\u6539\u7684\u7269\u4EF6\u55CE\uFF1F
240
240
 
241
241
  C_TRANSACTION_HELPER_CONFIRM_DELETE_WITH_SINGLE_OBJECT_LOCKED=\u76EE\u524D {0} \u5DF2\u9396\u4F4F\u6B64\u7269\u4EF6\uFF0C\u56E0\u6B64\u7121\u6CD5\u522A\u9664\u3002
242
242
 
@@ -251,7 +251,7 @@ C_DRAFT_POPOVER_ADMIN_DATA_DRAFTINFO_POPOVER_NO_DATA_TEXT=\u6C92\u6709\u53EF\u75
251
251
 
252
252
 
253
253
 
254
- C_ROUTING_NAVIGATION_DISABLED_TITLE=\u76EE\u524D\u7121\u6CD5\u700F\u89BD\u3002
254
+ C_ROUTING_NAVIGATION_DISABLED_TITLE=\u76EE\u524D\u7121\u6CD5\u700F\u89BD
255
255
 
256
256
  C_DRAFT_OBJECT_PAGE_DRAFT_UNSAVED_CHANGES=\u5176\u4ED6\u4F7F\u7528\u8005\u5DF2\u7DE8\u8F2F\u6B64\u7269\u4EF6\u4E14\u6C92\u6709\u5132\u5B58\uFF1A\n{0} \n\n\u82E5\u60A8\u958B\u59CB\u7DE8\u8F2F\uFF0C\u5247\u6B64\u4F7F\u7528\u8005\u7684\u66F4\u6539\u5167\u5BB9\u5C07\u6703\u907A\u5931\u3002
257
257
 
@@ -347,10 +347,10 @@ C_MASS_EDIT_CONFIRM_MESSAGE_DETAIL_REASON_NON_EDITABLE={0} \u4E0D\u5141\u8A31\u7
347
347
 
348
348
  C_MASS_EDIT_CONFIRM_BUTTON_TEXT=\u7DE8\u8F2F
349
349
 
350
- OBJECTPAGESTATE_ISSUE=\u7269\u4EF6\u5305\u542B\u554F\u984C
350
+ OBJECTPAGESTATE_ISSUE=\u6AA2\u8996\u5305\u542B\u554F\u984C
351
351
 
352
- OBJECTPAGESTATE_ERROR=\u7269\u4EF6\u5305\u542B\u932F\u8AA4\u8A0A\u606F
352
+ OBJECTPAGESTATE_ERROR=\u6AA2\u8996\u5305\u542B\u932F\u8AA4
353
353
 
354
- OBJECTPAGESTATE_WARNING=\u7269\u4EF6\u5305\u542B\u8B66\u544A\u8A0A\u606F
354
+ OBJECTPAGESTATE_WARNING=\u6AA2\u8996\u5305\u542B\u8B66\u544A
355
355
 
356
- OBJECTPAGESTATE_INFORMATION=\u7269\u4EF6\u5305\u542B\u8CC7\u8A0A\u8A0A\u606F
356
+ OBJECTPAGESTATE_INFORMATION=\u6AA2\u8996\u5305\u542B\u8CC7\u8A0A
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpers/LoaderUtils", "sap/fe/core/TemplateModel", "sap/ui/core/cache/CacheManager", "sap/ui/core/Component", "sap/ui/core/Core", "sap/ui/core/mvc/View", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/core/service/ServiceFactoryRegistry", "sap/ui/Device", "sap/ui/model/base/ManagedObjectModel", "sap/ui/model/json/JSONModel", "sap/ui/VersionInfo", "../helpers/DynamicAnnotationPathHelper"], function (Log, UriParameters, LoaderUtils, TemplateModel, CacheManager, Component, Core, View, Service, ServiceFactory, ServiceFactoryRegistry, Device, ManagedObjectModel, JSONModel, VersionInfo, DynamicAnnotationPathHelper) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpers/LoaderUtils", "sap/fe/core/TemplateModel", "sap/ui/core/Component", "sap/ui/core/mvc/View", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/core/service/ServiceFactoryRegistry", "sap/ui/Device", "sap/ui/model/base/ManagedObjectModel", "sap/ui/model/json/JSONModel", "sap/ui/VersionInfo", "../helpers/DynamicAnnotationPathHelper"], function (Log, UriParameters, LoaderUtils, TemplateModel, Component, View, Service, ServiceFactory, ServiceFactoryRegistry, Device, ManagedObjectModel, JSONModel, VersionInfo, DynamicAnnotationPathHelper) {
6
6
  "use strict";
7
7
 
8
8
  var resolveDynamicExpression = DynamicAnnotationPathHelper.resolveDynamicExpression;
@@ -118,27 +118,18 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpe
118
118
  }).catch(function () {
119
119
  return "<NOVALUE>";
120
120
  }));
121
- var sPageModelCacheKey;
122
121
  this.initPromise = Promise.all(aServiceDependencies).then(function (aDependenciesResult) {
123
- var sCacheKey = aDependenciesResult[1];
124
- var sVersionInfo = aDependenciesResult[2];
125
- var oShellServices = oAppComponent.getShellServices();
126
- var oSideEffectsServices = oAppComponent.getSideEffectsService();
127
- oSideEffectsServices.initializeSideEffects(oAppComponent.getEnvironmentCapabilities().getCapabilities()); // In case there is no cache key we ignore the view cache
128
-
129
- sPageModelCacheKey = sCacheKey ? "".concat(sCacheKey, "-").concat(sVersionInfo, "-").concat(sStableId, "-").concat(oShellServices.instanceType, "-pageModel") : undefined;
130
- return Promise.all(aDependenciesResult.concat([_this._getCachedModel(sPageModelCacheKey)]));
131
- }).then(function (aDependenciesResult) {
132
122
  try {
133
123
  var _oResourceModel = aDependenciesResult[0];
134
124
  var sCacheKey = aDependenciesResult[1];
135
- var oPageModelCache = aDependenciesResult[3];
125
+ var oSideEffectsServices = oAppComponent.getSideEffectsService();
126
+ oSideEffectsServices.initializeSideEffects(oAppComponent.getEnvironmentCapabilities().getCapabilities());
136
127
  return Promise.resolve(requireDependencies(["sap/fe/core/converters/TemplateConverter", "sap/fe/core/converters/MetaModelConverter"])).then(function (_ref) {
137
128
  var _ref2 = _slicedToArray(_ref, 2),
138
129
  TemplateConverter = _ref2[0],
139
130
  MetaModelConverter = _ref2[1];
140
131
 
141
- return _this2.createView(_oResourceModel, sStableId, sCacheKey, sPageModelCacheKey, oPageModelCache, TemplateConverter, MetaModelConverter);
132
+ return _this2.createView(_oResourceModel, sStableId, sCacheKey, TemplateConverter, MetaModelConverter);
142
133
  });
143
134
  } catch (e) {
144
135
  return Promise.reject(e);
@@ -147,22 +138,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpe
147
138
  var oCacheHandlerService = ServiceFactoryRegistry.get("sap.fe.core.services.CacheHandlerService").getInstance(oMetaModel);
148
139
  oCacheHandlerService.invalidateIfNeeded(sCacheKey, sCacheIdentifier, oComponent);
149
140
  });
150
- };
151
-
152
- _proto._getCachedModel = function _getCachedModel(sCacheKey) {
153
- if (sCacheKey && Core.getConfiguration().getViewCache()) {
154
- return CacheManager.get(sCacheKey);
155
- }
156
-
157
- return undefined;
158
- };
159
-
160
- _proto._setCachedModel = function _setCachedModel(sCacheKey, oCacheModel) {
161
- if (sCacheKey && Core.getConfiguration().getViewCache()) {
162
- CacheManager.set(sCacheKey, oCacheModel);
163
- }
164
-
165
- return undefined;
166
141
  }
167
142
  /**
168
143
  * Refresh the current view using the same configuration as before.
@@ -183,7 +158,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpe
183
158
  this.oView.destroy();
184
159
  }
185
160
 
186
- return this.createView(this.resourceModel, this.stableId, "", "", undefined, this.TemplateConverter, this.MetaModelConverter).then(function () {
161
+ return this.createView(this.resourceModel, this.stableId, "", this.TemplateConverter, this.MetaModelConverter).then(function () {
187
162
  oComponent.oContainer.invalidate();
188
163
  }).catch(function (oError) {
189
164
  oComponent.oContainer.invalidate();
@@ -191,7 +166,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpe
191
166
  });
192
167
  };
193
168
 
194
- _proto.createView = function createView(oResourceModel, sStableId, sCacheKey, sPageModelCacheKey, oPageModelCache, TemplateConverter, MetaModelConverter) {
169
+ _proto.createView = function createView(oResourceModel, sStableId, sCacheKey, TemplateConverter, MetaModelConverter) {
195
170
  try {
196
171
  var _this4 = this;
197
172
 
@@ -272,7 +247,16 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpe
272
247
  viewName: mServiceSettings.viewName || oComponent.getViewName(),
273
248
  viewData: mViewData,
274
249
  cache: {
275
- keys: [sCacheKey]
250
+ keys: [sCacheKey],
251
+ additionalData: {
252
+ // We store the page model data in the `additionalData` of the view cache, this way it is always in sync
253
+ getAdditionalCacheData: function () {
254
+ return oPageModel.getData();
255
+ },
256
+ setAdditionalCacheData: function (value) {
257
+ oPageModel.setData(value);
258
+ }
259
+ }
276
260
  },
277
261
  models: {
278
262
  "sap.fe.i18n": oResourceModel
@@ -365,21 +349,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpe
365
349
  MetaModelConverter.convertTypes(oMetaModel, oAppComponent.getEnvironmentCapabilities().getCapabilities());
366
350
  oPageModel = new TemplateModel(function () {
367
351
  try {
368
- if (oPageModelCache) {
369
- return oPageModelCache;
370
- } else {
371
- var oDiagnostics = oAppComponent.getDiagnostics();
372
- var iIssueCount = oDiagnostics.getIssues().length;
373
- var oConverterPageModel = TemplateConverter.convertPage(sConverterType, oMetaModel, mViewData, oDiagnostics, sFullContextPath, oAppComponent.getEnvironmentCapabilities().getCapabilities());
374
- var aIssues = oDiagnostics.getIssues();
375
- var aAddedIssues = aIssues.slice(iIssueCount);
376
-
377
- if (aAddedIssues.length > 0) {
378
- Log.warning("Some issues have been detected in your project, please check the UI5 support assistant rule for sap.fe.core");
379
- }
380
-
381
- return oConverterPageModel;
352
+ var oDiagnostics = oAppComponent.getDiagnostics();
353
+ var iIssueCount = oDiagnostics.getIssues().length;
354
+ var oConverterPageModel = TemplateConverter.convertPage(sConverterType, oMetaModel, mViewData, oDiagnostics, sFullContextPath, oAppComponent.getEnvironmentCapabilities().getCapabilities(), oComponent);
355
+ var aIssues = oDiagnostics.getIssues();
356
+ var aAddedIssues = aIssues.slice(iIssueCount);
357
+
358
+ if (aAddedIssues.length > 0) {
359
+ Log.warning("Some issues have been detected in your project, please check the UI5 support assistant rule for sap.fe.core");
382
360
  }
361
+
362
+ return oConverterPageModel;
383
363
  } catch (error) {
384
364
  Log.error(error, error);
385
365
  return {};
@@ -398,12 +378,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpe
398
378
 
399
379
  _this4.oView.setModel(oViewDataModel, "viewData");
400
380
 
401
- oComponent.setAggregation("rootControl", _this4.oView); // Fire and forget in the cache
402
-
403
- if (!oPageModelCache) {
404
- _this4._setCachedModel(sPageModelCacheKey, oPageModel.getData());
405
- }
406
-
381
+ oComponent.setAggregation("rootControl", _this4.oView);
407
382
  return sCacheKey;
408
383
  }).catch(function (e) {
409
384
  return Log.error(e.message, e);
@@ -485,4 +460,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/UriParameters", "sap/fe/core/helpe
485
460
 
486
461
  return TemplatedViewServiceFactory;
487
462
  }, false);
488
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJpbml0IiwiYVNlcnZpY2VEZXBlbmRlbmNpZXMiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvQXBwQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic1N0YWJsZUlkIiwiZ2V0TWV0YWRhdGEiLCJnZXRDb21wb25lbnROYW1lIiwiZ2V0TG9jYWxJZCIsImdldElkIiwiYUVuaGFuY2VJMThuIiwiZ2V0RW5oYW5jZUkxOG4iLCJzQXBwTmFtZXNwYWNlIiwib0ZhY3RvcnkiLCJmYWN0b3J5IiwiaSIsImxlbmd0aCIsIm9SZXNvdXJjZU1vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJyZXBsYWNlIiwic0NhY2hlSWRlbnRpZmllciIsImdldE5hbWUiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRDb25maWd1cmF0aW9uIiwiZ2V0TGFuZ3VhZ2VUYWciLCJwdXNoIiwiU2VydmljZUZhY3RvcnlSZWdpc3RyeSIsImdldCIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwic2V0dGluZ3MiLCJidW5kbGVzIiwiZW5oYW5jZUkxOG4iLCJtb2RlbE5hbWUiLCJvUmVzb3VyY2VNb2RlbFNlcnZpY2UiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29tcG9uZW50Iiwib0NhY2hlSGFuZGxlclNlcnZpY2UiLCJ2YWxpZGF0ZUNhY2hlS2V5IiwiVmVyc2lvbkluZm8iLCJsb2FkIiwib0luZm8iLCJzVGltZXN0YW1wIiwibGlicmFyaWVzIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsInNQYWdlTW9kZWxDYWNoZUtleSIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJzVmVyc2lvbkluZm8iLCJvU2hlbGxTZXJ2aWNlcyIsImdldFNoZWxsU2VydmljZXMiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImluaXRpYWxpemVTaWRlRWZmZWN0cyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiaW5zdGFuY2VUeXBlIiwidW5kZWZpbmVkIiwiY29uY2F0IiwiX2dldENhY2hlZE1vZGVsIiwib1BhZ2VNb2RlbENhY2hlIiwicmVxdWlyZURlcGVuZGVuY2llcyIsIlRlbXBsYXRlQ29udmVydGVyIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY3JlYXRlVmlldyIsImdldEluc3RhbmNlIiwiaW52YWxpZGF0ZUlmTmVlZGVkIiwiQ29yZSIsImdldFZpZXdDYWNoZSIsIkNhY2hlTWFuYWdlciIsIl9zZXRDYWNoZWRNb2RlbCIsIm9DYWNoZU1vZGVsIiwic2V0IiwicmVmcmVzaFZpZXciLCJvUm9vdFZpZXciLCJnZXRSb290Q29udHJvbCIsImRlc3Ryb3kiLCJvVmlldyIsInJlc291cmNlTW9kZWwiLCJzdGFibGVJZCIsIm9Db250YWluZXIiLCJpbnZhbGlkYXRlIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJtU2VydmljZVNldHRpbmdzIiwic0NvbnZlcnRlclR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwic0Z1bGxDb250ZXh0UGF0aCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvcHRpb25zIiwiZnVsbENvbnRleHRQYXRoIiwib01hbmlmZXN0Q29udGVudCIsImdldE1hbmlmZXN0Iiwib0RldmljZU1vZGVsIiwiSlNPTk1vZGVsIiwiRGV2aWNlIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwib01hbmlmZXN0TW9kZWwiLCJiRXJyb3IiLCJnZXRWaWV3U2V0dGluZ3MiLCJhU3BsaXRQYXRoIiwic3BsaXQiLCJzRW50aXR5U2V0UGF0aCIsInJlZHVjZSIsInNQYXRoU29GYXIiLCJzTmV4dFBhdGhQYXJ0Iiwib1RhcmdldCIsImdldE9iamVjdCIsIk9iamVjdCIsImtleXMiLCJ2aWV3VHlwZSIsImdldFZpZXdUeXBlIiwidHlwZSIsInByZXByb2Nlc3NvcnMiLCJ4bWwiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImNvbnRleHRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsIm9QYWdlTW9kZWwiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1WaWV3RGF0YSIsIm9WaWV3RGF0YU1vZGVsIiwibW9kZWxzIiwibWFuaWZlc3QiLCJpZCIsInZpZXdOYW1lIiwiZ2V0Vmlld05hbWUiLCJjYWNoZSIsImhlaWdodCIsIm9WaWV3U2V0dGluZ3MiLCJjcmVhdGVFcnJvclBhZ2UiLCJyZWFzb24iLCJtZXNzYWdlIiwiZXJyb3JWaWV3TmFtZSIsInJ1bkFzT3duZXIiLCJWaWV3IiwiY3JlYXRlIiwic2V0TW9kZWwiLCJNYW5hZ2VkT2JqZWN0TW9kZWwiLCJzZXRBZ2dyZWdhdGlvbiIsImdldFNlcnZpY2UiLCJvUm91dGluZ1NlcnZpY2UiLCJvVGFyZ2V0SW5mbyIsIm1PdXRib3VuZHMiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJtTmF2aWdhdGlvbiIsImdldE5hdmlnYXRpb24iLCJuYXZpZ2F0aW9uT2JqZWN0S2V5IiwibmF2aWdhdGlvbk9iamVjdCIsIm91dGJvdW5kQ29uZmlnIiwiZGV0YWlsIiwib3V0Ym91bmQiLCJvdXRib3VuZERldGFpbCIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1ldGVycyIsIm5hdmlnYXRpb24iLCJ2aWV3TGV2ZWwiLCJjb250ZW50RGVuc2l0aWVzIiwicmVzb3VyY2VCdW5kbGUiLCJfX2J1bmRsZSIsImlzRGVza3RvcCIsInN5c3RlbSIsImRlc2t0b3AiLCJpc1Bob25lIiwicGhvbmUiLCJnZXRWaWV3RGF0YSIsImFzc2lnbiIsInNoZWxsQ29udGVudERlbnNpdHkiLCJnZXRDb250ZW50RGVuc2l0eSIsInVzZU5ld0xhenlMb2FkaW5nIiwiVXJpUGFyYW1ldGVycyIsImZyb21RdWVyeSIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsImZvcm0iLCJjb250cm9sQ29uZmlndXJhdGlvbiIsInNBbm5vdGF0aW9uUGF0aCIsImluZGV4T2YiLCJzVGFyZ2V0QW5ub3RhdGlvblBhdGgiLCJyZXNvbHZlRHluYW1pY0V4cHJlc3Npb24iLCJjb252ZXJ0VHlwZXMiLCJUZW1wbGF0ZU1vZGVsIiwib0RpYWdub3N0aWNzIiwiZ2V0RGlhZ25vc3RpY3MiLCJpSXNzdWVDb3VudCIsImdldElzc3VlcyIsIm9Db252ZXJ0ZXJQYWdlTW9kZWwiLCJjb252ZXJ0UGFnZSIsImFJc3N1ZXMiLCJhQWRkZWRJc3N1ZXMiLCJzbGljZSIsIndhcm5pbmciLCJnZXREYXRhIiwiRXJyb3IiLCJnZXRWaWV3IiwiZ2V0SW50ZXJmYWNlIiwiZXhpdCIsInJlbW92ZUdsb2JhbEluc3RhbmNlIiwiU2VydmljZSIsIlRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeSIsIl9vSW5zdGFuY2VSZWdpc3RyeSIsIm9TZXJ2aWNlQ29udGV4dCIsImlDcmVhdGluZ1ZpZXdzIiwib1RlbXBsYXRlZFZpZXdTZXJ2aWNlIiwiZ2V0TnVtYmVyT2ZWaWV3c0luQ3JlYXRpb25TdGF0ZSIsIlNlcnZpY2VGYWN0b3J5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgVXJpUGFyYW1ldGVycyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9VcmlQYXJhbWV0ZXJzXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgcmVxdWlyZURlcGVuZGVuY2llcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0xvYWRlclV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENhY2hlSGFuZGxlclNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ2FjaGVIYW5kbGVyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBUZW1wbGF0ZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvbWFjcm9zL1Jlc291cmNlTW9kZWxcIjtcbmltcG9ydCBDYWNoZU1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL2NhY2hlL0NhY2hlTWFuYWdlclwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29yZSBmcm9tIFwic2FwL3VpL2NvcmUvQ29yZVwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5UmVnaXN0cnlcIjtcbmltcG9ydCBEZXZpY2UgZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0TW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9iYXNlL01hbmFnZWRPYmplY3RNb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgVmVyc2lvbkluZm8gZnJvbSBcInNhcC91aS9WZXJzaW9uSW5mb1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHJlc29sdmVEeW5hbWljRXhwcmVzc2lvbiB9IGZyb20gXCIuLi9oZWxwZXJzL0R5bmFtaWNBbm5vdGF0aW9uUGF0aEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBSZXNvdXJjZU1vZGVsU2VydmljZSB9IGZyb20gXCIuL1Jlc291cmNlTW9kZWxTZXJ2aWNlRmFjdG9yeVwiO1xuXG50eXBlIFRlbXBsYXRlZFZpZXdTZXJ2aWNlU2V0dGluZ3MgPSB7fTtcbnR5cGUgTWFuaWZlc3RDb250ZW50ID0ge1xuXHRcInNhcC5hcHBcIj86IHtcblx0XHRcImNyb3NzTmF2aWdhdGlvblwiPzoge1xuXHRcdFx0XCJvdXRib3VuZHNcIj86IFJlY29yZDxcblx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHN0cmluZztcblx0XHRcdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBzdHJpbmc7XG5cdFx0XHRcdH1cblx0XHRcdD47XG5cdFx0fTtcblx0fTtcblx0XCJzYXAudWk1XCI/OiB7XG5cdFx0XCJjb250ZW50RGVuc2l0aWVzXCI/OiBzdHJpbmc7XG5cdH07XG5cdFwic2FwLmZlXCI/OiB7XG5cdFx0XCJmb3JtXCI/OiB7XG5cdFx0XHRcInJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3RcIj86IGJvb2xlYW47XG5cdFx0fTtcblx0fTtcbn07XG5jbGFzcyBUZW1wbGF0ZWRWaWV3U2VydmljZSBleHRlbmRzIFNlcnZpY2U8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0b1ZpZXchOiBWaWV3O1xuXHRvUmVzb3VyY2VNb2RlbFNlcnZpY2UhOiBSZXNvdXJjZU1vZGVsU2VydmljZTtcblx0b0NhY2hlSGFuZGxlclNlcnZpY2UhOiBDYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXHRvRmFjdG9yeSE6IFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeTtcblx0cmVzb3VyY2VNb2RlbCE6IHR5cGVvZiBSZXNvdXJjZU1vZGVsO1xuXHRzdGFibGVJZCE6IHN0cmluZztcblx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueTtcblx0TWV0YU1vZGVsQ29udmVydGVyOiBhbnk7XG5cdGluaXQoKSB7XG5cdFx0Y29uc3QgYVNlcnZpY2VEZXBlbmRlbmNpZXMgPSBbXTtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzU3RhYmxlSWQgPSBgJHtvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpfTo6JHtvQXBwQ29tcG9uZW50LmdldExvY2FsSWQob0NvbXBvbmVudC5nZXRJZCgpKX1gO1xuXHRcdGNvbnN0IGFFbmhhbmNlSTE4biA9IG9Db21wb25lbnQuZ2V0RW5oYW5jZUkxOG4oKSB8fCBbXTtcblx0XHRsZXQgc0FwcE5hbWVzcGFjZTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRpZiAoYUVuaGFuY2VJMThuKSB7XG5cdFx0XHRzQXBwTmFtZXNwYWNlID0gb0FwcENvbXBvbmVudC5nZXRNZXRhZGF0YSgpLmdldENvbXBvbmVudE5hbWUoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUVuaGFuY2VJMThuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgdGV4dC12ZXJ0aWNhbGl6YXRpb24gYXBwbGljYXRpb25zIGNhbiBhbHNvIHBhc3NzIGEgcmVzb3VyY2UgbW9kZWwgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0Ly8gVUk1IHRha2VzIGNhcmUgb2YgdGV4dC12ZXJ0aWNhbGl6YXRpb24gZm9yIHJlc291cmNlIG1vZGVscyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBIZW5jZSBjaGVjayBpZiB0aGUgZ2l2ZW4ga2V5IGlzIGEgcmVzb3VyY2UgbW9kZWwgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0Ly8gaWYgc28gdGhpcyBtb2RlbCBzaG91bGQgYmUgdXNlZCB0byBlbmhhbmNlIHRoZSBzYXAuZmUgcmVzb3VyY2UgbW9kZWwgc28gcGFzcyBpdCBhcyBpdCBpc1xuXHRcdFx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TW9kZWwoYUVuaGFuY2VJMThuW2ldKTtcblx0XHRcdFx0aWYgKG9SZXNvdXJjZU1vZGVsICYmIG9SZXNvdXJjZU1vZGVsLmlzQShcInNhcC51aS5tb2RlbC5yZXNvdXJjZS5SZXNvdXJjZU1vZGVsXCIpKSB7XG5cdFx0XHRcdFx0YUVuaGFuY2VJMThuW2ldID0gb1Jlc291cmNlTW9kZWw7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUVuaGFuY2VJMThuW2ldID0gYCR7c0FwcE5hbWVzcGFjZX0uJHthRW5oYW5jZUkxOG5baV0ucmVwbGFjZShcIi5wcm9wZXJ0aWVzXCIsIFwiXCIpfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBzQ2FjaGVJZGVudGlmaWVyID0gYCR7b0FwcENvbXBvbmVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1fJHtzU3RhYmxlSWR9XyR7c2FwLnVpXG5cdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHQuZ2V0TGFuZ3VhZ2VUYWcoKX1gO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIpXG5cdFx0XHRcdC5jcmVhdGVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0c2NvcGVUeXBlOiBcImNvbXBvbmVudFwiLFxuXHRcdFx0XHRcdHNjb3BlT2JqZWN0OiBvQ29tcG9uZW50LFxuXHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRidW5kbGVzOiBbXCJzYXAuZmUuY29yZS5tZXNzYWdlYnVuZGxlXCIsIFwic2FwLmZlLm1hY3Jvcy5tZXNzYWdlYnVuZGxlXCIsIFwic2FwLmZlLnRlbXBsYXRlcy5tZXNzYWdlYnVuZGxlXCJdLFxuXHRcdFx0XHRcdFx0ZW5oYW5jZUkxOG46IGFFbmhhbmNlSTE4bixcblx0XHRcdFx0XHRcdG1vZGVsTmFtZTogXCJzYXAuZmUuaTE4blwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob1Jlc291cmNlTW9kZWxTZXJ2aWNlOiBSZXNvdXJjZU1vZGVsU2VydmljZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1Jlc291cmNlTW9kZWxTZXJ2aWNlID0gb1Jlc291cmNlTW9kZWxTZXJ2aWNlO1xuXHRcdFx0XHRcdHJldHVybiBvUmVzb3VyY2VNb2RlbFNlcnZpY2UuZ2V0UmVzb3VyY2VNb2RlbCgpO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cblx0XHRhU2VydmljZURlcGVuZGVuY2llcy5wdXNoKFxuXHRcdFx0U2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5DYWNoZUhhbmRsZXJTZXJ2aWNlXCIpXG5cdFx0XHRcdC5jcmVhdGVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogb0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdGNvbXBvbmVudDogb0NvbXBvbmVudFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oKG9DYWNoZUhhbmRsZXJTZXJ2aWNlOiBhbnkpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlID0gb0NhY2hlSGFuZGxlclNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9DYWNoZUhhbmRsZXJTZXJ2aWNlLnZhbGlkYXRlQ2FjaGVLZXkoc0NhY2hlSWRlbnRpZmllciwgb0NvbXBvbmVudCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblx0XHRhU2VydmljZURlcGVuZGVuY2llcy5wdXNoKFxuXHRcdFx0KFZlcnNpb25JbmZvIGFzIGFueSlcblx0XHRcdFx0LmxvYWQoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0luZm86IGFueSkge1xuXHRcdFx0XHRcdGxldCBzVGltZXN0YW1wID0gXCJcIjtcblx0XHRcdFx0XHRpZiAoIW9JbmZvLmxpYnJhcmllcykge1xuXHRcdFx0XHRcdFx0c1RpbWVzdGFtcCA9IChzYXAudWkgYXMgYW55KS5idWlsZGluZm8uYnVpbGR0aW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvSW5mby5saWJyYXJpZXMuZm9yRWFjaChmdW5jdGlvbiAob0xpYnJhcnk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRzVGltZXN0YW1wICs9IG9MaWJyYXJ5LmJ1aWxkVGltZXN0YW1wO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzVGltZXN0YW1wO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJldHVybiBcIjxOT1ZBTFVFPlwiO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cblx0XHRsZXQgc1BhZ2VNb2RlbENhY2hlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UuYWxsKGFTZXJ2aWNlRGVwZW5kZW5jaWVzKVxuXHRcdFx0LnRoZW4oKGFEZXBlbmRlbmNpZXNSZXN1bHQ6IGFueVtdKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNDYWNoZUtleSA9IGFEZXBlbmRlbmNpZXNSZXN1bHRbMV07XG5cdFx0XHRcdGNvbnN0IHNWZXJzaW9uSW5mbyA9IGFEZXBlbmRlbmNpZXNSZXN1bHRbMl07XG5cdFx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdGNvbnN0IG9TaWRlRWZmZWN0c1NlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblxuXHRcdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlcy5pbml0aWFsaXplU2lkZUVmZmVjdHMob0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpKTtcblxuXHRcdFx0XHQvLyBJbiBjYXNlIHRoZXJlIGlzIG5vIGNhY2hlIGtleSB3ZSBpZ25vcmUgdGhlIHZpZXcgY2FjaGVcblx0XHRcdFx0c1BhZ2VNb2RlbENhY2hlS2V5ID0gc0NhY2hlS2V5XG5cdFx0XHRcdFx0PyBgJHtzQ2FjaGVLZXl9LSR7c1ZlcnNpb25JbmZvfS0ke3NTdGFibGVJZH0tJHtvU2hlbGxTZXJ2aWNlcy5pbnN0YW5jZVR5cGV9LXBhZ2VNb2RlbGBcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGFEZXBlbmRlbmNpZXNSZXN1bHQuY29uY2F0KFt0aGlzLl9nZXRDYWNoZWRNb2RlbChzUGFnZU1vZGVsQ2FjaGVLZXkpXSkpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGFzeW5jIChhRGVwZW5kZW5jaWVzUmVzdWx0OiBhbnlbXSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IGFEZXBlbmRlbmNpZXNSZXN1bHRbMF07XG5cdFx0XHRcdGNvbnN0IHNDYWNoZUtleSA9IGFEZXBlbmRlbmNpZXNSZXN1bHRbMV07XG5cdFx0XHRcdGNvbnN0IG9QYWdlTW9kZWxDYWNoZSA9IGFEZXBlbmRlbmNpZXNSZXN1bHRbM107XG5cdFx0XHRcdGNvbnN0IFtUZW1wbGF0ZUNvbnZlcnRlciwgTWV0YU1vZGVsQ29udmVydGVyXSA9IGF3YWl0IHJlcXVpcmVEZXBlbmRlbmNpZXMoW1xuXHRcdFx0XHRcdFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiLFxuXHRcdFx0XHRcdFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIlxuXHRcdFx0XHRdKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlVmlldyhcblx0XHRcdFx0XHRvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRzU3RhYmxlSWQsXG5cdFx0XHRcdFx0c0NhY2hlS2V5LFxuXHRcdFx0XHRcdHNQYWdlTW9kZWxDYWNoZUtleSxcblx0XHRcdFx0XHRvUGFnZU1vZGVsQ2FjaGUsXG5cdFx0XHRcdFx0VGVtcGxhdGVDb252ZXJ0ZXIsXG5cdFx0XHRcdFx0TWV0YU1vZGVsQ29udmVydGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oZnVuY3Rpb24gKHNDYWNoZUtleTogYW55KSB7XG5cdFx0XHRcdGNvbnN0IG9DYWNoZUhhbmRsZXJTZXJ2aWNlID0gU2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5DYWNoZUhhbmRsZXJTZXJ2aWNlXCIpLmdldEluc3RhbmNlKG9NZXRhTW9kZWwpO1xuXHRcdFx0XHRvQ2FjaGVIYW5kbGVyU2VydmljZS5pbnZhbGlkYXRlSWZOZWVkZWQoc0NhY2hlS2V5LCBzQ2FjaGVJZGVudGlmaWVyLCBvQ29tcG9uZW50KTtcblx0XHRcdH0pO1xuXHR9XG5cdF9nZXRDYWNoZWRNb2RlbChzQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuXHRcdGlmIChzQ2FjaGVLZXkgJiYgQ29yZS5nZXRDb25maWd1cmF0aW9uKCkuZ2V0Vmlld0NhY2hlKCkpIHtcblx0XHRcdHJldHVybiBDYWNoZU1hbmFnZXIuZ2V0KHNDYWNoZUtleSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0X3NldENhY2hlZE1vZGVsKHNDYWNoZUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBvQ2FjaGVNb2RlbDogYW55KSB7XG5cdFx0aWYgKHNDYWNoZUtleSAmJiBDb3JlLmdldENvbmZpZ3VyYXRpb24oKS5nZXRWaWV3Q2FjaGUoKSkge1xuXHRcdFx0Q2FjaGVNYW5hZ2VyLnNldChzQ2FjaGVLZXksIG9DYWNoZU1vZGVsKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHQvKipcblx0ICogUmVmcmVzaCB0aGUgY3VycmVudCB2aWV3IHVzaW5nIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gYXMgYmVmb3JlLlxuXHQgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igb3VyIGRlbW9raXQgIVxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgaW5kaWNhdGluZyB3aGVuIHRoZSB2aWV3IGlzIHJlZnJlc2hlZFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cmVmcmVzaFZpZXcob0NvbXBvbmVudDogYW55KSB7XG5cdFx0Y29uc3Qgb1Jvb3RWaWV3ID0gb0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdGlmIChvUm9vdFZpZXcpIHtcblx0XHRcdG9Sb290Vmlldy5kZXN0cm95KCk7XG5cdFx0fSBlbHNlIGlmICh0aGlzLm9WaWV3KSB7XG5cdFx0XHR0aGlzLm9WaWV3LmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuY3JlYXRlVmlldyh0aGlzLnJlc291cmNlTW9kZWwsIHRoaXMuc3RhYmxlSWQsIFwiXCIsIFwiXCIsIHVuZGVmaW5lZCwgdGhpcy5UZW1wbGF0ZUNvbnZlcnRlciwgdGhpcy5NZXRhTW9kZWxDb252ZXJ0ZXIpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9Db21wb25lbnQub0NvbnRhaW5lci5pbnZhbGlkYXRlKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRvQ29tcG9uZW50Lm9Db250YWluZXIuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cdGFzeW5jIGNyZWF0ZVZpZXcoXG5cdFx0b1Jlc291cmNlTW9kZWw6IGFueSxcblx0XHRzU3RhYmxlSWQ6IGFueSxcblx0XHRzQ2FjaGVLZXk6IGFueSxcblx0XHRzUGFnZU1vZGVsQ2FjaGVLZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0XHRvUGFnZU1vZGVsQ2FjaGU6IGFueSxcblx0XHRUZW1wbGF0ZUNvbnZlcnRlcjogYW55LFxuXHRcdE1ldGFNb2RlbENvbnZlcnRlcjogYW55XG5cdCk6IFByb21pc2U8YW55IHwgdm9pZD4ge1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IG9SZXNvdXJjZU1vZGVsO1xuXHRcdHRoaXMuc3RhYmxlSWQgPSBzU3RhYmxlSWQ7XG5cdFx0dGhpcy5UZW1wbGF0ZUNvbnZlcnRlciA9IFRlbXBsYXRlQ29udmVydGVyO1xuXHRcdHRoaXMuTWV0YU1vZGVsQ29udmVydGVyID0gTWV0YU1vZGVsQ29udmVydGVyO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3QgbVNlcnZpY2VTZXR0aW5ncyA9IG9Db250ZXh0LnNldHRpbmdzO1xuXHRcdGNvbnN0IHNDb252ZXJ0ZXJUeXBlID0gbVNlcnZpY2VTZXR0aW5ncy5jb252ZXJ0ZXJUeXBlO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IHNGdWxsQ29udGV4dFBhdGggPSBvQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudCkub3B0aW9ucy5zZXR0aW5ncy5mdWxsQ29udGV4dFBhdGg7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudDogTWFuaWZlc3RDb250ZW50ID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpO1xuXHRcdGNvbnN0IG9EZXZpY2VNb2RlbCA9IG5ldyBKU09OTW9kZWwoRGV2aWNlKS5zZXREZWZhdWx0QmluZGluZ01vZGUoXCJPbmVXYXlcIik7XG5cdFx0Y29uc3Qgb01hbmlmZXN0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKG9NYW5pZmVzdENvbnRlbnQpO1xuXHRcdGNvbnN0IGJFcnJvciA9IGZhbHNlO1xuXHRcdGxldCBvUGFnZU1vZGVsOiBUZW1wbGF0ZU1vZGVsLCBvVmlld0RhdGFNb2RlbDogTW9kZWwsIG9WaWV3U2V0dGluZ3M6IGFueSwgbVZpZXdEYXRhOiBhbnk7XG5cdFx0Ly8gTG9hZCB0aGUgaW5kZXggZm9yIHRoZSBhZGRpdGlvbmFsIGJ1aWxkaW5nIGJsb2NrcyB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZW1cblx0XHRmdW5jdGlvbiBnZXRWaWV3U2V0dGluZ3MoKSB7XG5cdFx0XHRjb25zdCBhU3BsaXRQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGFTcGxpdFBhdGgucmVkdWNlKGZ1bmN0aW9uIChzUGF0aFNvRmFyOiBhbnksIHNOZXh0UGF0aFBhcnQ6IGFueSkge1xuXHRcdFx0XHRpZiAoc05leHRQYXRoUGFydCA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHJldHVybiBzUGF0aFNvRmFyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzUGF0aFNvRmFyID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0c1BhdGhTb0ZhciA9IGAvJHtzTmV4dFBhdGhQYXJ0fWA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRoU29GYXJ9LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLyR7c05leHRQYXRoUGFydH1gKTtcblx0XHRcdFx0XHRpZiAob1RhcmdldCAmJiBPYmplY3Qua2V5cyhvVGFyZ2V0KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRzUGF0aFNvRmFyICs9IFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNQYXRoU29GYXIgKz0gYC8ke3NOZXh0UGF0aFBhcnR9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdH0sIFwiXCIpO1xuXHRcdFx0bGV0IHZpZXdUeXBlID0gbVNlcnZpY2VTZXR0aW5ncy52aWV3VHlwZSB8fCBvQ29tcG9uZW50LmdldFZpZXdUeXBlKCkgfHwgXCJYTUxcIjtcblx0XHRcdGlmICh2aWV3VHlwZSAhPT0gXCJYTUxcIikge1xuXHRcdFx0XHR2aWV3VHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IHZpZXdUeXBlLFxuXHRcdFx0XHRwcmVwcm9jZXNzb3JzOiB7XG5cdFx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzRW50aXR5U2V0UGF0aCA/IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVNldFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVsbENvbnRleHRQYXRoKSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVsbENvbnRleHRQYXRoKSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIsIHVuZGVmaW5lZCwgeyBub1Jlc29sdmU6IHRydWUgfSksXG5cdFx0XHRcdFx0XHRcdHZpZXdEYXRhOiBtVmlld0RhdGEgPyBvVmlld0RhdGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgOiBudWxsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcImRldmljZVwiOiBvRGV2aWNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1hbmlmZXN0OiBvTWFuaWZlc3RNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG9WaWV3RGF0YU1vZGVsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpZDogc1N0YWJsZUlkLFxuXHRcdFx0XHR2aWV3TmFtZTogbVNlcnZpY2VTZXR0aW5ncy52aWV3TmFtZSB8fCBvQ29tcG9uZW50LmdldFZpZXdOYW1lKCksXG5cdFx0XHRcdHZpZXdEYXRhOiBtVmlld0RhdGEsXG5cdFx0XHRcdGNhY2hlOiB7IGtleXM6IFtzQ2FjaGVLZXldIH0sXG5cdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogb1Jlc291cmNlTW9kZWxcblx0XHRcdFx0fSxcblx0XHRcdFx0aGVpZ2h0OiBcIjEwMCVcIlxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgY3JlYXRlRXJyb3JQYWdlID0gKHJlYXNvbjogYW55KSA9PiB7XG5cdFx0XHQvLyBqdXN0IHJlcGxhY2UgdGhlIHZpZXcgbmFtZSBhbmQgYWRkIGFuIGFkZGl0aW9uYWwgbW9kZWwgY29udGFpbmluZyB0aGUgcmVhc29uLCBidXRcblx0XHRcdC8vIGtlZXAgdGhlIG90aGVyIHNldHRpbmdzXG5cdFx0XHRMb2cuZXJyb3IocmVhc29uLm1lc3NhZ2UsIHJlYXNvbik7XG5cdFx0XHRvVmlld1NldHRpbmdzLnZpZXdOYW1lID0gbVNlcnZpY2VTZXR0aW5ncy5lcnJvclZpZXdOYW1lIHx8IFwic2FwLmZlLmNvcmUuc2VydmljZXMudmlldy5UZW1wbGF0aW5nRXJyb3JQYWdlXCI7XG5cdFx0XHRvVmlld1NldHRpbmdzLnByZXByb2Nlc3NvcnMueG1sLm1vZGVsc1tcImVycm9yXCJdID0gbmV3IEpTT05Nb2RlbChyZWFzb24pO1xuXG5cdFx0XHRyZXR1cm4gb0NvbXBvbmVudC5ydW5Bc093bmVyKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIFZpZXcuY3JlYXRlKG9WaWV3U2V0dGluZ3MpLnRoZW4oKG9WaWV3OiBhbnkpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9WaWV3ID0gb1ZpZXc7XG5cdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbChuZXcgTWFuYWdlZE9iamVjdE1vZGVsKHRoaXMub1ZpZXcpLCBcIiR2aWV3XCIpO1xuXHRcdFx0XHRcdG9Db21wb25lbnQuc2V0QWdncmVnYXRpb24oXCJyb290Q29udHJvbFwiLCB0aGlzLm9WaWV3KTtcblx0XHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1JvdXRpbmdTZXJ2aWNlID0gYXdhaXQgb0FwcENvbXBvbmVudC5nZXRTZXJ2aWNlKFwicm91dGluZ1NlcnZpY2VcIik7XG5cdFx0XHQvLyBSZXRyaWV2ZSB0aGUgdmlld0xldmVsIGZvciB0aGUgY29tcG9uZW50XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9Sb3V0aW5nU2VydmljZS5nZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50KTtcblx0XHRcdGNvbnN0IG1PdXRib3VuZHMgPVxuXHRcdFx0XHQob01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzKSB8fFxuXHRcdFx0XHR7fTtcblx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uID0gb0NvbXBvbmVudC5nZXROYXZpZ2F0aW9uKCkgfHwge307XG5cdFx0XHRPYmplY3Qua2V5cyhtTmF2aWdhdGlvbikuZm9yRWFjaChmdW5jdGlvbiAobmF2aWdhdGlvbk9iamVjdEtleTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25PYmplY3QgPSBtTmF2aWdhdGlvbltuYXZpZ2F0aW9uT2JqZWN0S2V5XTtcblx0XHRcdFx0bGV0IG91dGJvdW5kQ29uZmlnO1xuXHRcdFx0XHRpZiAobmF2aWdhdGlvbk9iamVjdC5kZXRhaWwgJiYgbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmQgJiYgbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF0pIHtcblx0XHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmRdO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG91dGJvdW5kQ29uZmlnLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmF2aWdhdGlvbk9iamVjdC5jcmVhdGUgJiYgbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmQgJiYgbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZF0pIHtcblx0XHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmRdO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG91dGJvdW5kQ29uZmlnLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRtVmlld0RhdGEgPSB7XG5cdFx0XHRcdG5hdmlnYXRpb246IG1OYXZpZ2F0aW9uLFxuXHRcdFx0XHR2aWV3TGV2ZWw6IG9UYXJnZXRJbmZvLnZpZXdMZXZlbCxcblx0XHRcdFx0c3RhYmxlSWQ6IHNTdGFibGVJZCxcblx0XHRcdFx0Y29udGVudERlbnNpdGllczogb01hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0/LmNvbnRlbnREZW5zaXRpZXMsXG5cdFx0XHRcdHJlc291cmNlQnVuZGxlOiBvUmVzb3VyY2VNb2RlbC5fX2J1bmRsZSxcblx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRpc0Rlc2t0b3A6IChEZXZpY2UgYXMgYW55KS5zeXN0ZW0uZGVza3RvcCxcblx0XHRcdFx0aXNQaG9uZTogKERldmljZSBhcyBhbnkpLnN5c3RlbS5waG9uZVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKG9Db21wb25lbnQuZ2V0Vmlld0RhdGEpIHtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihtVmlld0RhdGEsIG9Db21wb25lbnQuZ2V0Vmlld0RhdGEoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRtVmlld0RhdGEuY29udmVydGVyVHlwZSA9IHNDb252ZXJ0ZXJUeXBlO1xuXHRcdFx0bVZpZXdEYXRhLnNoZWxsQ29udGVudERlbnNpdHkgPSBvU2hlbGxTZXJ2aWNlcy5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHRcdFx0bVZpZXdEYXRhLnVzZU5ld0xhenlMb2FkaW5nID0gVXJpUGFyYW1ldGVycy5mcm9tUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KFwic2FwLWZlLXh4LWxhenlsb2FkaW5ndGVzdFwiKSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRtVmlld0RhdGEucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCA9XG5cdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0gJiYgb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXS5mb3JtXG5cdFx0XHRcdFx0PyBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmZvcm0ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0b1ZpZXdEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1WaWV3RGF0YSk7XG5cdFx0XHRpZiAobVZpZXdEYXRhICYmIG1WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbikge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pLmZvckVhY2goZnVuY3Rpb24gKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiW1wiKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUYXJnZXRBbm5vdGF0aW9uUGF0aCA9IHJlc29sdmVEeW5hbWljRXhwcmVzc2lvbihzQW5ub3RhdGlvblBhdGgsIG9NZXRhTW9kZWwpO1xuXHRcdFx0XHRcdFx0bVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NUYXJnZXRBbm5vdGF0aW9uUGF0aF0gPSBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb25bc0Fubm90YXRpb25QYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0TWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsLCBvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXHRcdFx0b1BhZ2VNb2RlbCA9IG5ldyBUZW1wbGF0ZU1vZGVsKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRpZiAob1BhZ2VNb2RlbENhY2hlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb1BhZ2VNb2RlbENhY2hlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvRGlhZ25vc3RpY3MgPSBvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRcdFx0XHRjb25zdCBpSXNzdWVDb3VudCA9IG9EaWFnbm9zdGljcy5nZXRJc3N1ZXMoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRjb25zdCBvQ29udmVydGVyUGFnZU1vZGVsID0gVGVtcGxhdGVDb252ZXJ0ZXIuY29udmVydFBhZ2UoXG5cdFx0XHRcdFx0XHRcdHNDb252ZXJ0ZXJUeXBlLFxuXHRcdFx0XHRcdFx0XHRvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRtVmlld0RhdGEsXG5cdFx0XHRcdFx0XHRcdG9EaWFnbm9zdGljcyxcblx0XHRcdFx0XHRcdFx0c0Z1bGxDb250ZXh0UGF0aCxcblx0XHRcdFx0XHRcdFx0b0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBhSXNzdWVzID0gb0RpYWdub3N0aWNzLmdldElzc3VlcygpO1xuXHRcdFx0XHRcdFx0Y29uc3QgYUFkZGVkSXNzdWVzID0gYUlzc3Vlcy5zbGljZShpSXNzdWVDb3VudCk7XG5cdFx0XHRcdFx0XHRpZiAoYUFkZGVkSXNzdWVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0XHRcdFx0XCJTb21lIGlzc3VlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQgaW4geW91ciBwcm9qZWN0LCBwbGVhc2UgY2hlY2sgdGhlIFVJNSBzdXBwb3J0IGFzc2lzdGFudCBydWxlIGZvciBzYXAuZmUuY29yZVwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnZlcnRlclBhZ2VNb2RlbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIGFueSwgZXJyb3IgYXMgYW55KTtcblx0XHRcdFx0XHRyZXR1cm4ge307XG5cdFx0XHRcdH1cblx0XHRcdH0sIG9NZXRhTW9kZWwpO1xuXG5cdFx0XHRpZiAoIWJFcnJvcikge1xuXHRcdFx0XHRvVmlld1NldHRpbmdzID0gZ2V0Vmlld1NldHRpbmdzKCk7XG5cdFx0XHRcdC8vIFNldHRpbmcgdGhlIHBhZ2VNb2RlbCBvbiB0aGUgY29tcG9uZW50IGZvciBwb3RlbnRpYWwgcmV1c2Vcblx0XHRcdFx0b0NvbXBvbmVudC5zZXRNb2RlbChvUGFnZU1vZGVsLCBcIl9wYWdlTW9kZWxcIik7XG5cdFx0XHRcdHJldHVybiBvQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBWaWV3LmNyZWF0ZShvVmlld1NldHRpbmdzKVxuXHRcdFx0XHRcdFx0LmNhdGNoKGNyZWF0ZUVycm9yUGFnZSlcblx0XHRcdFx0XHRcdC50aGVuKChvVmlldzogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcgPSBvVmlldztcblx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbChuZXcgTWFuYWdlZE9iamVjdE1vZGVsKHRoaXMub1ZpZXcpLCBcIiR2aWV3XCIpO1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG9WaWV3RGF0YU1vZGVsLCBcInZpZXdEYXRhXCIpO1xuXHRcdFx0XHRcdFx0XHRvQ29tcG9uZW50LnNldEFnZ3JlZ2F0aW9uKFwicm9vdENvbnRyb2xcIiwgdGhpcy5vVmlldyk7XG5cdFx0XHRcdFx0XHRcdC8vIEZpcmUgYW5kIGZvcmdldCBpbiB0aGUgY2FjaGVcblx0XHRcdFx0XHRcdFx0aWYgKCFvUGFnZU1vZGVsQ2FjaGUpIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9zZXRDYWNoZWRNb2RlbChzUGFnZU1vZGVsQ2FjaGVLZXksIChvUGFnZU1vZGVsIGFzIGFueSkuZ2V0RGF0YSgpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdC5jYXRjaCgoZSkgPT4gTG9nLmVycm9yKGUubWVzc2FnZSwgZSkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnJvcjogYW55KSB7XG5cdFx0XHRMb2cuZXJyb3IoZXJyb3IubWVzc2FnZSwgZXJyb3IpO1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBjcmVhdGluZyB2aWV3IDogJHtlcnJvcn1gKTtcblx0XHR9XG5cdH1cblx0Z2V0VmlldygpIHtcblx0XHRyZXR1cm4gdGhpcy5vVmlldztcblx0fVxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRleGl0KCkge1xuXHRcdC8vIERlcmVnaXN0ZXIgZ2xvYmFsIGluc3RhbmNlXG5cdFx0aWYgKHRoaXMub1Jlc291cmNlTW9kZWxTZXJ2aWNlKSB7XG5cdFx0XHR0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlKSB7XG5cdFx0XHR0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3koKTtcblx0XHR9XG5cdFx0dGhpcy5vRmFjdG9yeS5yZW1vdmVHbG9iYWxJbnN0YW5jZSgpO1xuXHR9XG59XG5jbGFzcyBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPiB7XG5cdF9vSW5zdGFuY2VSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgVGVtcGxhdGVkVmlld1NlcnZpY2U+ID0ge307XG5cdHN0YXRpYyBpQ3JlYXRpbmdWaWV3czogMDtcblx0Y3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0OiBTZXJ2aWNlQ29udGV4dDxUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzPikge1xuXHRcdFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cysrO1xuXG5cdFx0Y29uc3Qgb1RlbXBsYXRlZFZpZXdTZXJ2aWNlID0gbmV3IFRlbXBsYXRlZFZpZXdTZXJ2aWNlKE9iamVjdC5hc3NpZ24oeyBmYWN0b3J5OiB0aGlzIH0sIG9TZXJ2aWNlQ29udGV4dCkpO1xuXHRcdHJldHVybiBvVGVtcGxhdGVkVmlld1NlcnZpY2UuaW5pdFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3MtLTtcblx0XHRcdHJldHVybiBvVGVtcGxhdGVkVmlld1NlcnZpY2U7XG5cdFx0fSk7XG5cdH1cblx0cmVtb3ZlR2xvYmFsSW5zdGFuY2UoKSB7XG5cdFx0dGhpcy5fb0luc3RhbmNlUmVnaXN0cnkgPSB7fTtcblx0fVxuXHRzdGF0aWMgZ2V0TnVtYmVyT2ZWaWV3c0luQ3JlYXRpb25TdGF0ZSgpIHtcblx0XHRyZXR1cm4gVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7OztFQWtqQk8sZ0JBQWdCQSxJQUFoQixFQUFzQkMsT0FBdEIsRUFBK0I7SUFDckMsSUFBSTtNQUNILElBQUlDLE1BQU0sR0FBR0YsSUFBSSxFQUFqQjtJQUNBLENBRkQsQ0FFRSxPQUFNRyxDQUFOLEVBQVM7TUFDVixPQUFPRixPQUFPLENBQUNFLENBQUQsQ0FBZDtJQUNBOztJQUNELElBQUlELE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxJQUFyQixFQUEyQjtNQUMxQixPQUFPRixNQUFNLENBQUNFLElBQVAsQ0FBWSxLQUFLLENBQWpCLEVBQW9CSCxPQUFwQixDQUFQO0lBQ0E7O0lBQ0QsT0FBT0MsTUFBUDtFQUNBOzs7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
463
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJib2R5IiwicmVjb3ZlciIsInJlc3VsdCIsImUiLCJ0aGVuIiwiVGVtcGxhdGVkVmlld1NlcnZpY2UiLCJpbml0IiwiYVNlcnZpY2VEZXBlbmRlbmNpZXMiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvQXBwQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwic1N0YWJsZUlkIiwiZ2V0TWV0YWRhdGEiLCJnZXRDb21wb25lbnROYW1lIiwiZ2V0TG9jYWxJZCIsImdldElkIiwiYUVuaGFuY2VJMThuIiwiZ2V0RW5oYW5jZUkxOG4iLCJzQXBwTmFtZXNwYWNlIiwib0ZhY3RvcnkiLCJmYWN0b3J5IiwiaSIsImxlbmd0aCIsIm9SZXNvdXJjZU1vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJyZXBsYWNlIiwic0NhY2hlSWRlbnRpZmllciIsImdldE5hbWUiLCJzYXAiLCJ1aSIsImdldENvcmUiLCJnZXRDb25maWd1cmF0aW9uIiwiZ2V0TGFuZ3VhZ2VUYWciLCJwdXNoIiwiU2VydmljZUZhY3RvcnlSZWdpc3RyeSIsImdldCIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwic2V0dGluZ3MiLCJidW5kbGVzIiwiZW5oYW5jZUkxOG4iLCJtb2RlbE5hbWUiLCJvUmVzb3VyY2VNb2RlbFNlcnZpY2UiLCJnZXRSZXNvdXJjZU1vZGVsIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29tcG9uZW50Iiwib0NhY2hlSGFuZGxlclNlcnZpY2UiLCJ2YWxpZGF0ZUNhY2hlS2V5IiwiVmVyc2lvbkluZm8iLCJsb2FkIiwib0luZm8iLCJzVGltZXN0YW1wIiwibGlicmFyaWVzIiwiYnVpbGRpbmZvIiwiYnVpbGR0aW1lIiwiZm9yRWFjaCIsIm9MaWJyYXJ5IiwiYnVpbGRUaW1lc3RhbXAiLCJjYXRjaCIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImFEZXBlbmRlbmNpZXNSZXN1bHQiLCJzQ2FjaGVLZXkiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlcyIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImluaXRpYWxpemVTaWRlRWZmZWN0cyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwicmVxdWlyZURlcGVuZGVuY2llcyIsIlRlbXBsYXRlQ29udmVydGVyIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY3JlYXRlVmlldyIsImdldEluc3RhbmNlIiwiaW52YWxpZGF0ZUlmTmVlZGVkIiwicmVmcmVzaFZpZXciLCJvUm9vdFZpZXciLCJnZXRSb290Q29udHJvbCIsImRlc3Ryb3kiLCJvVmlldyIsInJlc291cmNlTW9kZWwiLCJzdGFibGVJZCIsIm9Db250YWluZXIiLCJpbnZhbGlkYXRlIiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJtU2VydmljZVNldHRpbmdzIiwic0NvbnZlcnRlclR5cGUiLCJjb252ZXJ0ZXJUeXBlIiwic0Z1bGxDb250ZXh0UGF0aCIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IiLCJvcHRpb25zIiwiZnVsbENvbnRleHRQYXRoIiwib01hbmlmZXN0Q29udGVudCIsImdldE1hbmlmZXN0Iiwib0RldmljZU1vZGVsIiwiSlNPTk1vZGVsIiwiRGV2aWNlIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwib01hbmlmZXN0TW9kZWwiLCJiRXJyb3IiLCJnZXRWaWV3U2V0dGluZ3MiLCJhU3BsaXRQYXRoIiwic3BsaXQiLCJzRW50aXR5U2V0UGF0aCIsInJlZHVjZSIsInNQYXRoU29GYXIiLCJzTmV4dFBhdGhQYXJ0Iiwib1RhcmdldCIsImdldE9iamVjdCIsIk9iamVjdCIsImtleXMiLCJ2aWV3VHlwZSIsImdldFZpZXdUeXBlIiwidW5kZWZpbmVkIiwidHlwZSIsInByZXByb2Nlc3NvcnMiLCJ4bWwiLCJiaW5kaW5nQ29udGV4dHMiLCJlbnRpdHlTZXQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImNvbnRleHRQYXRoIiwiY29udmVydGVyQ29udGV4dCIsIm9QYWdlTW9kZWwiLCJub1Jlc29sdmUiLCJ2aWV3RGF0YSIsIm1WaWV3RGF0YSIsIm9WaWV3RGF0YU1vZGVsIiwibW9kZWxzIiwibWFuaWZlc3QiLCJpZCIsInZpZXdOYW1lIiwiZ2V0Vmlld05hbWUiLCJjYWNoZSIsImFkZGl0aW9uYWxEYXRhIiwiZ2V0QWRkaXRpb25hbENhY2hlRGF0YSIsImdldERhdGEiLCJzZXRBZGRpdGlvbmFsQ2FjaGVEYXRhIiwidmFsdWUiLCJzZXREYXRhIiwiaGVpZ2h0Iiwib1ZpZXdTZXR0aW5ncyIsImNyZWF0ZUVycm9yUGFnZSIsInJlYXNvbiIsIm1lc3NhZ2UiLCJlcnJvclZpZXdOYW1lIiwicnVuQXNPd25lciIsIlZpZXciLCJjcmVhdGUiLCJzZXRNb2RlbCIsIk1hbmFnZWRPYmplY3RNb2RlbCIsInNldEFnZ3JlZ2F0aW9uIiwiZ2V0U2VydmljZSIsIm9Sb3V0aW5nU2VydmljZSIsIm9UYXJnZXRJbmZvIiwibU91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm1OYXZpZ2F0aW9uIiwiZ2V0TmF2aWdhdGlvbiIsIm5hdmlnYXRpb25PYmplY3RLZXkiLCJuYXZpZ2F0aW9uT2JqZWN0Iiwib3V0Ym91bmRDb25maWciLCJkZXRhaWwiLCJvdXRib3VuZCIsIm91dGJvdW5kRGV0YWlsIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbWV0ZXJzIiwibmF2aWdhdGlvbiIsInZpZXdMZXZlbCIsImNvbnRlbnREZW5zaXRpZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIl9fYnVuZGxlIiwiaXNEZXNrdG9wIiwic3lzdGVtIiwiZGVza3RvcCIsImlzUGhvbmUiLCJwaG9uZSIsImdldFZpZXdEYXRhIiwiYXNzaWduIiwib1NoZWxsU2VydmljZXMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2hlbGxDb250ZW50RGVuc2l0eSIsImdldENvbnRlbnREZW5zaXR5IiwidXNlTmV3TGF6eUxvYWRpbmciLCJVcmlQYXJhbWV0ZXJzIiwiZnJvbVF1ZXJ5Iiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwiZm9ybSIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiaW5kZXhPZiIsInNUYXJnZXRBbm5vdGF0aW9uUGF0aCIsInJlc29sdmVEeW5hbWljRXhwcmVzc2lvbiIsImNvbnZlcnRUeXBlcyIsIlRlbXBsYXRlTW9kZWwiLCJvRGlhZ25vc3RpY3MiLCJnZXREaWFnbm9zdGljcyIsImlJc3N1ZUNvdW50IiwiZ2V0SXNzdWVzIiwib0NvbnZlcnRlclBhZ2VNb2RlbCIsImNvbnZlcnRQYWdlIiwiYUlzc3VlcyIsImFBZGRlZElzc3VlcyIsInNsaWNlIiwid2FybmluZyIsIkVycm9yIiwiZ2V0VmlldyIsImdldEludGVyZmFjZSIsImV4aXQiLCJyZW1vdmVHbG9iYWxJbnN0YW5jZSIsIlNlcnZpY2UiLCJUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkiLCJfb0luc3RhbmNlUmVnaXN0cnkiLCJvU2VydmljZUNvbnRleHQiLCJpQ3JlYXRpbmdWaWV3cyIsIm9UZW1wbGF0ZWRWaWV3U2VydmljZSIsImdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUiLCJTZXJ2aWNlRmFjdG9yeSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IFVyaVBhcmFtZXRlcnMgZnJvbSBcInNhcC9iYXNlL3V0aWwvVXJpUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB7IHJlcXVpcmVEZXBlbmRlbmNpZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Mb2FkZXJVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZUhhbmRsZXJTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwic2FwL2ZlL21hY3Jvcy9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IFNlcnZpY2VGYWN0b3J5IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnlSZWdpc3RyeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5XCI7XG5pbXBvcnQgRGV2aWNlIGZyb20gXCJzYXAvdWkvRGV2aWNlXCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvYmFzZS9NYW5hZ2VkT2JqZWN0TW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IFZlcnNpb25JbmZvIGZyb20gXCJzYXAvdWkvVmVyc2lvbkluZm9cIjtcbmltcG9ydCB0eXBlIHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgeyByZXNvbHZlRHluYW1pY0V4cHJlc3Npb24gfSBmcm9tIFwiLi4vaGVscGVycy9EeW5hbWljQW5ub3RhdGlvblBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVzb3VyY2VNb2RlbFNlcnZpY2UgfSBmcm9tIFwiLi9SZXNvdXJjZU1vZGVsU2VydmljZUZhY3RvcnlcIjtcblxudHlwZSBUZW1wbGF0ZWRWaWV3U2VydmljZVNldHRpbmdzID0ge307XG50eXBlIE1hbmlmZXN0Q29udGVudCA9IHtcblx0XCJzYXAuYXBwXCI/OiB7XG5cdFx0XCJjcm9zc05hdmlnYXRpb25cIj86IHtcblx0XHRcdFwib3V0Ym91bmRzXCI/OiBSZWNvcmQ8XG5cdFx0XHRcdHN0cmluZyxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBzdHJpbmc7XG5cdFx0XHRcdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0cGFyYW1ldGVyczogc3RyaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHQ+O1xuXHRcdH07XG5cdH07XG5cdFwic2FwLnVpNVwiPzoge1xuXHRcdFwiY29udGVudERlbnNpdGllc1wiPzogc3RyaW5nO1xuXHR9O1xuXHRcInNhcC5mZVwiPzoge1xuXHRcdFwiZm9ybVwiPzoge1xuXHRcdFx0XCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0XCI/OiBib29sZWFuO1xuXHRcdH07XG5cdH07XG59O1xuXG5jbGFzcyBUZW1wbGF0ZWRWaWV3U2VydmljZSBleHRlbmRzIFNlcnZpY2U8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0b1ZpZXchOiBWaWV3O1xuXHRvUmVzb3VyY2VNb2RlbFNlcnZpY2UhOiBSZXNvdXJjZU1vZGVsU2VydmljZTtcblx0b0NhY2hlSGFuZGxlclNlcnZpY2UhOiBDYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXHRvRmFjdG9yeSE6IFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeTtcblx0cmVzb3VyY2VNb2RlbCE6IHR5cGVvZiBSZXNvdXJjZU1vZGVsO1xuXHRzdGFibGVJZCE6IHN0cmluZztcblx0VGVtcGxhdGVDb252ZXJ0ZXI6IGFueTtcblx0TWV0YU1vZGVsQ29udmVydGVyOiBhbnk7XG5cdGluaXQoKSB7XG5cdFx0Y29uc3QgYVNlcnZpY2VEZXBlbmRlbmNpZXMgPSBbXTtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9Db21wb25lbnQpIGFzIEFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0FwcENvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBzU3RhYmxlSWQgPSBgJHtvQXBwQ29tcG9uZW50LmdldE1ldGFkYXRhKCkuZ2V0Q29tcG9uZW50TmFtZSgpfTo6JHtvQXBwQ29tcG9uZW50LmdldExvY2FsSWQob0NvbXBvbmVudC5nZXRJZCgpKX1gO1xuXHRcdGNvbnN0IGFFbmhhbmNlSTE4biA9IG9Db21wb25lbnQuZ2V0RW5oYW5jZUkxOG4oKSB8fCBbXTtcblx0XHRsZXQgc0FwcE5hbWVzcGFjZTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRpZiAoYUVuaGFuY2VJMThuKSB7XG5cdFx0XHRzQXBwTmFtZXNwYWNlID0gb0FwcENvbXBvbmVudC5nZXRNZXRhZGF0YSgpLmdldENvbXBvbmVudE5hbWUoKTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYUVuaGFuY2VJMThuLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgdGV4dC12ZXJ0aWNhbGl6YXRpb24gYXBwbGljYXRpb25zIGNhbiBhbHNvIHBhc3NzIGEgcmVzb3VyY2UgbW9kZWwgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0Ly8gVUk1IHRha2VzIGNhcmUgb2YgdGV4dC12ZXJ0aWNhbGl6YXRpb24gZm9yIHJlc291cmNlIG1vZGVscyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHQvLyBIZW5jZSBjaGVjayBpZiB0aGUgZ2l2ZW4ga2V5IGlzIGEgcmVzb3VyY2UgbW9kZWwgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0Ly8gaWYgc28gdGhpcyBtb2RlbCBzaG91bGQgYmUgdXNlZCB0byBlbmhhbmNlIHRoZSBzYXAuZmUgcmVzb3VyY2UgbW9kZWwgc28gcGFzcyBpdCBhcyBpdCBpc1xuXHRcdFx0XHRjb25zdCBvUmVzb3VyY2VNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TW9kZWwoYUVuaGFuY2VJMThuW2ldKTtcblx0XHRcdFx0aWYgKG9SZXNvdXJjZU1vZGVsICYmIG9SZXNvdXJjZU1vZGVsLmlzQShcInNhcC51aS5tb2RlbC5yZXNvdXJjZS5SZXNvdXJjZU1vZGVsXCIpKSB7XG5cdFx0XHRcdFx0YUVuaGFuY2VJMThuW2ldID0gb1Jlc291cmNlTW9kZWw7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YUVuaGFuY2VJMThuW2ldID0gYCR7c0FwcE5hbWVzcGFjZX0uJHthRW5oYW5jZUkxOG5baV0ucmVwbGFjZShcIi5wcm9wZXJ0aWVzXCIsIFwiXCIpfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBzQ2FjaGVJZGVudGlmaWVyID0gYCR7b0FwcENvbXBvbmVudC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX1fJHtzU3RhYmxlSWR9XyR7c2FwLnVpXG5cdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHQuZ2V0TGFuZ3VhZ2VUYWcoKX1gO1xuXHRcdGFTZXJ2aWNlRGVwZW5kZW5jaWVzLnB1c2goXG5cdFx0XHRTZXJ2aWNlRmFjdG9yeVJlZ2lzdHJ5LmdldChcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIpXG5cdFx0XHRcdC5jcmVhdGVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0c2NvcGVUeXBlOiBcImNvbXBvbmVudFwiLFxuXHRcdFx0XHRcdHNjb3BlT2JqZWN0OiBvQ29tcG9uZW50LFxuXHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRidW5kbGVzOiBbXCJzYXAuZmUuY29yZS5tZXNzYWdlYnVuZGxlXCIsIFwic2FwLmZlLm1hY3Jvcy5tZXNzYWdlYnVuZGxlXCIsIFwic2FwLmZlLnRlbXBsYXRlcy5tZXNzYWdlYnVuZGxlXCJdLFxuXHRcdFx0XHRcdFx0ZW5oYW5jZUkxOG46IGFFbmhhbmNlSTE4bixcblx0XHRcdFx0XHRcdG1vZGVsTmFtZTogXCJzYXAuZmUuaTE4blwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigob1Jlc291cmNlTW9kZWxTZXJ2aWNlOiBSZXNvdXJjZU1vZGVsU2VydmljZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1Jlc291cmNlTW9kZWxTZXJ2aWNlID0gb1Jlc291cmNlTW9kZWxTZXJ2aWNlO1xuXHRcdFx0XHRcdHJldHVybiBvUmVzb3VyY2VNb2RlbFNlcnZpY2UuZ2V0UmVzb3VyY2VNb2RlbCgpO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cblx0XHRhU2VydmljZURlcGVuZGVuY2llcy5wdXNoKFxuXHRcdFx0U2VydmljZUZhY3RvcnlSZWdpc3RyeS5nZXQoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5DYWNoZUhhbmRsZXJTZXJ2aWNlXCIpXG5cdFx0XHRcdC5jcmVhdGVJbnN0YW5jZSh7XG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdGFwcENvbXBvbmVudDogb0FwcENvbXBvbmVudCxcblx0XHRcdFx0XHRcdGNvbXBvbmVudDogb0NvbXBvbmVudFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LnRoZW4oKG9DYWNoZUhhbmRsZXJTZXJ2aWNlOiBhbnkpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9DYWNoZUhhbmRsZXJTZXJ2aWNlID0gb0NhY2hlSGFuZGxlclNlcnZpY2U7XG5cdFx0XHRcdFx0cmV0dXJuIG9DYWNoZUhhbmRsZXJTZXJ2aWNlLnZhbGlkYXRlQ2FjaGVLZXkoc0NhY2hlSWRlbnRpZmllciwgb0NvbXBvbmVudCk7XG5cdFx0XHRcdH0pXG5cdFx0KTtcblx0XHRhU2VydmljZURlcGVuZGVuY2llcy5wdXNoKFxuXHRcdFx0KFZlcnNpb25JbmZvIGFzIGFueSlcblx0XHRcdFx0LmxvYWQoKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAob0luZm86IGFueSkge1xuXHRcdFx0XHRcdGxldCBzVGltZXN0YW1wID0gXCJcIjtcblx0XHRcdFx0XHRpZiAoIW9JbmZvLmxpYnJhcmllcykge1xuXHRcdFx0XHRcdFx0c1RpbWVzdGFtcCA9IChzYXAudWkgYXMgYW55KS5idWlsZGluZm8uYnVpbGR0aW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvSW5mby5saWJyYXJpZXMuZm9yRWFjaChmdW5jdGlvbiAob0xpYnJhcnk6IGFueSkge1xuXHRcdFx0XHRcdFx0XHRzVGltZXN0YW1wICs9IG9MaWJyYXJ5LmJ1aWxkVGltZXN0YW1wO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBzVGltZXN0YW1wO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdHJldHVybiBcIjxOT1ZBTFVFPlwiO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cblx0XHR0aGlzLmluaXRQcm9taXNlID0gUHJvbWlzZS5hbGwoYVNlcnZpY2VEZXBlbmRlbmNpZXMpXG5cdFx0XHQudGhlbihhc3luYyAoYURlcGVuZGVuY2llc1Jlc3VsdDogYW55W10pID0+IHtcblx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlTW9kZWwgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzBdO1xuXHRcdFx0XHRjb25zdCBzQ2FjaGVLZXkgPSBhRGVwZW5kZW5jaWVzUmVzdWx0WzFdO1xuXHRcdFx0XHRjb25zdCBvU2lkZUVmZmVjdHNTZXJ2aWNlcyA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2VzLmluaXRpYWxpemVTaWRlRWZmZWN0cyhvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXG5cdFx0XHRcdGNvbnN0IFtUZW1wbGF0ZUNvbnZlcnRlciwgTWV0YU1vZGVsQ29udmVydGVyXSA9IGF3YWl0IHJlcXVpcmVEZXBlbmRlbmNpZXMoW1xuXHRcdFx0XHRcdFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiLFxuXHRcdFx0XHRcdFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIlxuXHRcdFx0XHRdKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY3JlYXRlVmlldyhvUmVzb3VyY2VNb2RlbCwgc1N0YWJsZUlkLCBzQ2FjaGVLZXksIFRlbXBsYXRlQ29udmVydGVyLCBNZXRhTW9kZWxDb252ZXJ0ZXIpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKGZ1bmN0aW9uIChzQ2FjaGVLZXk6IGFueSkge1xuXHRcdFx0XHRjb25zdCBvQ2FjaGVIYW5kbGVyU2VydmljZSA9IFNlcnZpY2VGYWN0b3J5UmVnaXN0cnkuZ2V0KFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ2FjaGVIYW5kbGVyU2VydmljZVwiKS5nZXRJbnN0YW5jZShvTWV0YU1vZGVsKTtcblx0XHRcdFx0b0NhY2hlSGFuZGxlclNlcnZpY2UuaW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleSwgc0NhY2hlSWRlbnRpZmllciwgb0NvbXBvbmVudCk7XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWZyZXNoIHRoZSBjdXJyZW50IHZpZXcgdXNpbmcgdGhlIHNhbWUgY29uZmlndXJhdGlvbiBhcyBiZWZvcmUuXG5cdCAqIFRoaXMgaXMgdXNlZnVsIGZvciBvdXIgZGVtb2tpdCAhXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSBpbmRpY2F0aW5nIHdoZW4gdGhlIHZpZXcgaXMgcmVmcmVzaGVkXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRyZWZyZXNoVmlldyhvQ29tcG9uZW50OiBhbnkpIHtcblx0XHRjb25zdCBvUm9vdFZpZXcgPSBvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0aWYgKG9Sb290Vmlldykge1xuXHRcdFx0b1Jvb3RWaWV3LmRlc3Ryb3koKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMub1ZpZXcpIHtcblx0XHRcdHRoaXMub1ZpZXcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5jcmVhdGVWaWV3KHRoaXMucmVzb3VyY2VNb2RlbCwgdGhpcy5zdGFibGVJZCwgXCJcIiwgdGhpcy5UZW1wbGF0ZUNvbnZlcnRlciwgdGhpcy5NZXRhTW9kZWxDb252ZXJ0ZXIpXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdG9Db21wb25lbnQub0NvbnRhaW5lci5pbnZhbGlkYXRlKCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRvQ29tcG9uZW50Lm9Db250YWluZXIuaW52YWxpZGF0ZSgpO1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yKTtcblx0XHRcdH0pO1xuXHR9XG5cdGFzeW5jIGNyZWF0ZVZpZXcoXG5cdFx0b1Jlc291cmNlTW9kZWw6IGFueSxcblx0XHRzU3RhYmxlSWQ6IGFueSxcblx0XHRzQ2FjaGVLZXk6IGFueSxcblx0XHRUZW1wbGF0ZUNvbnZlcnRlcjogYW55LFxuXHRcdE1ldGFNb2RlbENvbnZlcnRlcjogYW55XG5cdCk6IFByb21pc2U8YW55IHwgdm9pZD4ge1xuXHRcdHRoaXMucmVzb3VyY2VNb2RlbCA9IG9SZXNvdXJjZU1vZGVsO1xuXHRcdHRoaXMuc3RhYmxlSWQgPSBzU3RhYmxlSWQ7XG5cdFx0dGhpcy5UZW1wbGF0ZUNvbnZlcnRlciA9IFRlbXBsYXRlQ29udmVydGVyO1xuXHRcdHRoaXMuTWV0YU1vZGVsQ29udmVydGVyID0gTWV0YU1vZGVsQ29udmVydGVyO1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0Y29uc3QgbVNlcnZpY2VTZXR0aW5ncyA9IG9Db250ZXh0LnNldHRpbmdzO1xuXHRcdGNvbnN0IHNDb252ZXJ0ZXJUeXBlID0gbVNlcnZpY2VTZXR0aW5ncy5jb252ZXJ0ZXJUeXBlO1xuXHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29udGV4dC5zY29wZU9iamVjdDtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iob0NvbXBvbmVudCkgYXMgQXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IHNGdWxsQ29udGV4dFBhdGggPSBvQXBwQ29tcG9uZW50LmdldFJvdXRpbmdTZXJ2aWNlKCkuZ2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudCkub3B0aW9ucy5zZXR0aW5ncy5mdWxsQ29udGV4dFBhdGg7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9BcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudDogTWFuaWZlc3RDb250ZW50ID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpO1xuXHRcdGNvbnN0IG9EZXZpY2VNb2RlbCA9IG5ldyBKU09OTW9kZWwoRGV2aWNlKS5zZXREZWZhdWx0QmluZGluZ01vZGUoXCJPbmVXYXlcIik7XG5cdFx0Y29uc3Qgb01hbmlmZXN0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKG9NYW5pZmVzdENvbnRlbnQpO1xuXHRcdGNvbnN0IGJFcnJvciA9IGZhbHNlO1xuXHRcdGxldCBvUGFnZU1vZGVsOiBUZW1wbGF0ZU1vZGVsLCBvVmlld0RhdGFNb2RlbDogTW9kZWwsIG9WaWV3U2V0dGluZ3M6IGFueSwgbVZpZXdEYXRhOiBhbnk7XG5cdFx0Ly8gTG9hZCB0aGUgaW5kZXggZm9yIHRoZSBhZGRpdGlvbmFsIGJ1aWxkaW5nIGJsb2NrcyB3aGljaCBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZW1cblx0XHRmdW5jdGlvbiBnZXRWaWV3U2V0dGluZ3MoKSB7XG5cdFx0XHRjb25zdCBhU3BsaXRQYXRoID0gc0Z1bGxDb250ZXh0UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBzRW50aXR5U2V0UGF0aCA9IGFTcGxpdFBhdGgucmVkdWNlKGZ1bmN0aW9uIChzUGF0aFNvRmFyOiBhbnksIHNOZXh0UGF0aFBhcnQ6IGFueSkge1xuXHRcdFx0XHRpZiAoc05leHRQYXRoUGFydCA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHJldHVybiBzUGF0aFNvRmFyO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChzUGF0aFNvRmFyID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0c1BhdGhTb0ZhciA9IGAvJHtzTmV4dFBhdGhQYXJ0fWA7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRoU29GYXJ9LyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nLyR7c05leHRQYXRoUGFydH1gKTtcblx0XHRcdFx0XHRpZiAob1RhcmdldCAmJiBPYmplY3Qua2V5cyhvVGFyZ2V0KS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRzUGF0aFNvRmFyICs9IFwiLyROYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHNQYXRoU29GYXIgKz0gYC8ke3NOZXh0UGF0aFBhcnR9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc1BhdGhTb0Zhcjtcblx0XHRcdH0sIFwiXCIpO1xuXHRcdFx0bGV0IHZpZXdUeXBlID0gbVNlcnZpY2VTZXR0aW5ncy52aWV3VHlwZSB8fCBvQ29tcG9uZW50LmdldFZpZXdUeXBlKCkgfHwgXCJYTUxcIjtcblx0XHRcdGlmICh2aWV3VHlwZSAhPT0gXCJYTUxcIikge1xuXHRcdFx0XHR2aWV3VHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHR5cGU6IHZpZXdUeXBlLFxuXHRcdFx0XHRwcmVwcm9jZXNzb3JzOiB7XG5cdFx0XHRcdFx0eG1sOiB7XG5cdFx0XHRcdFx0XHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBzRW50aXR5U2V0UGF0aCA/IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoc0VudGl0eVNldFBhdGgpIDogbnVsbCxcblx0XHRcdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVsbENvbnRleHRQYXRoKSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoID8gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzRnVsbENvbnRleHRQYXRoKSA6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIsIHVuZGVmaW5lZCwgeyBub1Jlc29sdmU6IHRydWUgfSksXG5cdFx0XHRcdFx0XHRcdHZpZXdEYXRhOiBtVmlld0RhdGEgPyBvVmlld0RhdGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgOiBudWxsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdGVudGl0eVNldDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBvUmVzb3VyY2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsLFxuXHRcdFx0XHRcdFx0XHRcImRldmljZVwiOiBvRGV2aWNlTW9kZWwsXG5cdFx0XHRcdFx0XHRcdG1hbmlmZXN0OiBvTWFuaWZlc3RNb2RlbCxcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbCxcblx0XHRcdFx0XHRcdFx0dmlld0RhdGE6IG9WaWV3RGF0YU1vZGVsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXBwQ29tcG9uZW50OiBvQXBwQ29tcG9uZW50XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpZDogc1N0YWJsZUlkLFxuXHRcdFx0XHR2aWV3TmFtZTogbVNlcnZpY2VTZXR0aW5ncy52aWV3TmFtZSB8fCBvQ29tcG9uZW50LmdldFZpZXdOYW1lKCksXG5cdFx0XHRcdHZpZXdEYXRhOiBtVmlld0RhdGEsXG5cdFx0XHRcdGNhY2hlOiB7XG5cdFx0XHRcdFx0a2V5czogW3NDYWNoZUtleV0sXG5cdFx0XHRcdFx0YWRkaXRpb25hbERhdGE6IHtcblx0XHRcdFx0XHRcdC8vIFdlIHN0b3JlIHRoZSBwYWdlIG1vZGVsIGRhdGEgaW4gdGhlIGBhZGRpdGlvbmFsRGF0YWAgb2YgdGhlIHZpZXcgY2FjaGUsIHRoaXMgd2F5IGl0IGlzIGFsd2F5cyBpbiBzeW5jXG5cdFx0XHRcdFx0XHRnZXRBZGRpdGlvbmFsQ2FjaGVEYXRhOiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiAob1BhZ2VNb2RlbCBhcyB1bmtub3duIGFzIEpTT05Nb2RlbCkuZ2V0RGF0YSgpO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHNldEFkZGl0aW9uYWxDYWNoZURhdGE6ICh2YWx1ZTogb2JqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRcdChvUGFnZU1vZGVsIGFzIHVua25vd24gYXMgSlNPTk1vZGVsKS5zZXREYXRhKHZhbHVlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG1vZGVsczoge1xuXHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogb1Jlc291cmNlTW9kZWxcblx0XHRcdFx0fSxcblx0XHRcdFx0aGVpZ2h0OiBcIjEwMCVcIlxuXHRcdFx0fTtcblx0XHR9XG5cdFx0Y29uc3QgY3JlYXRlRXJyb3JQYWdlID0gKHJlYXNvbjogYW55KSA9PiB7XG5cdFx0XHQvLyBqdXN0IHJlcGxhY2UgdGhlIHZpZXcgbmFtZSBhbmQgYWRkIGFuIGFkZGl0aW9uYWwgbW9kZWwgY29udGFpbmluZyB0aGUgcmVhc29uLCBidXRcblx0XHRcdC8vIGtlZXAgdGhlIG90aGVyIHNldHRpbmdzXG5cdFx0XHRMb2cuZXJyb3IocmVhc29uLm1lc3NhZ2UsIHJlYXNvbik7XG5cdFx0XHRvVmlld1NldHRpbmdzLnZpZXdOYW1lID0gbVNlcnZpY2VTZXR0aW5ncy5lcnJvclZpZXdOYW1lIHx8IFwic2FwLmZlLmNvcmUuc2VydmljZXMudmlldy5UZW1wbGF0aW5nRXJyb3JQYWdlXCI7XG5cdFx0XHRvVmlld1NldHRpbmdzLnByZXByb2Nlc3NvcnMueG1sLm1vZGVsc1tcImVycm9yXCJdID0gbmV3IEpTT05Nb2RlbChyZWFzb24pO1xuXG5cdFx0XHRyZXR1cm4gb0NvbXBvbmVudC5ydW5Bc093bmVyKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIFZpZXcuY3JlYXRlKG9WaWV3U2V0dGluZ3MpLnRoZW4oKG9WaWV3OiBhbnkpID0+IHtcblx0XHRcdFx0XHR0aGlzLm9WaWV3ID0gb1ZpZXc7XG5cdFx0XHRcdFx0dGhpcy5vVmlldy5zZXRNb2RlbChuZXcgTWFuYWdlZE9iamVjdE1vZGVsKHRoaXMub1ZpZXcpLCBcIiR2aWV3XCIpO1xuXHRcdFx0XHRcdG9Db21wb25lbnQuc2V0QWdncmVnYXRpb24oXCJyb290Q29udHJvbFwiLCB0aGlzLm9WaWV3KTtcblx0XHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1JvdXRpbmdTZXJ2aWNlID0gYXdhaXQgb0FwcENvbXBvbmVudC5nZXRTZXJ2aWNlKFwicm91dGluZ1NlcnZpY2VcIik7XG5cdFx0XHQvLyBSZXRyaWV2ZSB0aGUgdmlld0xldmVsIGZvciB0aGUgY29tcG9uZW50XG5cdFx0XHRjb25zdCBvVGFyZ2V0SW5mbyA9IG9Sb3V0aW5nU2VydmljZS5nZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50KTtcblx0XHRcdGNvbnN0IG1PdXRib3VuZHMgPVxuXHRcdFx0XHQob01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24gJiZcblx0XHRcdFx0XHRvTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXS5jcm9zc05hdmlnYXRpb24ub3V0Ym91bmRzKSB8fFxuXHRcdFx0XHR7fTtcblx0XHRcdGNvbnN0IG1OYXZpZ2F0aW9uID0gb0NvbXBvbmVudC5nZXROYXZpZ2F0aW9uKCkgfHwge307XG5cdFx0XHRPYmplY3Qua2V5cyhtTmF2aWdhdGlvbikuZm9yRWFjaChmdW5jdGlvbiAobmF2aWdhdGlvbk9iamVjdEtleTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25PYmplY3QgPSBtTmF2aWdhdGlvbltuYXZpZ2F0aW9uT2JqZWN0S2V5XTtcblx0XHRcdFx0bGV0IG91dGJvdW5kQ29uZmlnO1xuXHRcdFx0XHRpZiAobmF2aWdhdGlvbk9iamVjdC5kZXRhaWwgJiYgbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmQgJiYgbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmRldGFpbC5vdXRib3VuZF0pIHtcblx0XHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5kZXRhaWwub3V0Ym91bmRdO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuZGV0YWlsLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG91dGJvdW5kQ29uZmlnLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmF2aWdhdGlvbk9iamVjdC5jcmVhdGUgJiYgbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmQgJiYgbU91dGJvdW5kc1tuYXZpZ2F0aW9uT2JqZWN0LmNyZWF0ZS5vdXRib3VuZF0pIHtcblx0XHRcdFx0XHRvdXRib3VuZENvbmZpZyA9IG1PdXRib3VuZHNbbmF2aWdhdGlvbk9iamVjdC5jcmVhdGUub3V0Ym91bmRdO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25PYmplY3QuY3JlYXRlLm91dGJvdW5kRGV0YWlsID0ge1xuXHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IG91dGJvdW5kQ29uZmlnLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBvdXRib3VuZENvbmZpZy5hY3Rpb24sXG5cdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvdXRib3VuZENvbmZpZy5wYXJhbWV0ZXJzXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRtVmlld0RhdGEgPSB7XG5cdFx0XHRcdG5hdmlnYXRpb246IG1OYXZpZ2F0aW9uLFxuXHRcdFx0XHR2aWV3TGV2ZWw6IG9UYXJnZXRJbmZvLnZpZXdMZXZlbCxcblx0XHRcdFx0c3RhYmxlSWQ6IHNTdGFibGVJZCxcblx0XHRcdFx0Y29udGVudERlbnNpdGllczogb01hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0/LmNvbnRlbnREZW5zaXRpZXMsXG5cdFx0XHRcdHJlc291cmNlQnVuZGxlOiBvUmVzb3VyY2VNb2RlbC5fX2J1bmRsZSxcblx0XHRcdFx0ZnVsbENvbnRleHRQYXRoOiBzRnVsbENvbnRleHRQYXRoLFxuXHRcdFx0XHRpc0Rlc2t0b3A6IChEZXZpY2UgYXMgYW55KS5zeXN0ZW0uZGVza3RvcCxcblx0XHRcdFx0aXNQaG9uZTogKERldmljZSBhcyBhbnkpLnN5c3RlbS5waG9uZVxuXHRcdFx0fTtcblxuXHRcdFx0aWYgKG9Db21wb25lbnQuZ2V0Vmlld0RhdGEpIHtcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihtVmlld0RhdGEsIG9Db21wb25lbnQuZ2V0Vmlld0RhdGEoKSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IG9TaGVsbFNlcnZpY2VzID0gb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRtVmlld0RhdGEuY29udmVydGVyVHlwZSA9IHNDb252ZXJ0ZXJUeXBlO1xuXHRcdFx0bVZpZXdEYXRhLnNoZWxsQ29udGVudERlbnNpdHkgPSBvU2hlbGxTZXJ2aWNlcy5nZXRDb250ZW50RGVuc2l0eSgpO1xuXHRcdFx0bVZpZXdEYXRhLnVzZU5ld0xhenlMb2FkaW5nID0gVXJpUGFyYW1ldGVycy5mcm9tUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KFwic2FwLWZlLXh4LWxhenlsb2FkaW5ndGVzdFwiKSA9PT0gXCJ0cnVlXCI7XG5cdFx0XHRtVmlld0RhdGEucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCA9XG5cdFx0XHRcdG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0gJiYgb01hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXS5mb3JtXG5cdFx0XHRcdFx0PyBvTWFuaWZlc3RDb250ZW50W1wic2FwLmZlXCJdLmZvcm0ucmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdFxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0b1ZpZXdEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1WaWV3RGF0YSk7XG5cdFx0XHRpZiAobVZpZXdEYXRhICYmIG1WaWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbikge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24pLmZvckVhY2goZnVuY3Rpb24gKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0aWYgKHNBbm5vdGF0aW9uUGF0aC5pbmRleE9mKFwiW1wiKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNUYXJnZXRBbm5vdGF0aW9uUGF0aCA9IHJlc29sdmVEeW5hbWljRXhwcmVzc2lvbihzQW5ub3RhdGlvblBhdGgsIG9NZXRhTW9kZWwpO1xuXHRcdFx0XHRcdFx0bVZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uW3NUYXJnZXRBbm5vdGF0aW9uUGF0aF0gPSBtVmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb25bc0Fubm90YXRpb25QYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0TWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsLCBvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCkpO1xuXHRcdFx0b1BhZ2VNb2RlbCA9IG5ldyBUZW1wbGF0ZU1vZGVsKCgpID0+IHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBvRGlhZ25vc3RpY3MgPSBvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCk7XG5cdFx0XHRcdFx0Y29uc3QgaUlzc3VlQ291bnQgPSBvRGlhZ25vc3RpY3MuZ2V0SXNzdWVzKCkubGVuZ3RoO1xuXHRcdFx0XHRcdGNvbnN0IG9Db252ZXJ0ZXJQYWdlTW9kZWwgPSBUZW1wbGF0ZUNvbnZlcnRlci5jb252ZXJ0UGFnZShcblx0XHRcdFx0XHRcdHNDb252ZXJ0ZXJUeXBlLFxuXHRcdFx0XHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdFx0XHRcdG1WaWV3RGF0YSxcblx0XHRcdFx0XHRcdG9EaWFnbm9zdGljcyxcblx0XHRcdFx0XHRcdHNGdWxsQ29udGV4dFBhdGgsXG5cdFx0XHRcdFx0XHRvQXBwQ29tcG9uZW50LmdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCkuZ2V0Q2FwYWJpbGl0aWVzKCksXG5cdFx0XHRcdFx0XHRvQ29tcG9uZW50XG5cdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdGNvbnN0IGFJc3N1ZXMgPSBvRGlhZ25vc3RpY3MuZ2V0SXNzdWVzKCk7XG5cdFx0XHRcdFx0Y29uc3QgYUFkZGVkSXNzdWVzID0gYUlzc3Vlcy5zbGljZShpSXNzdWVDb3VudCk7XG5cdFx0XHRcdFx0aWYgKGFBZGRlZElzc3Vlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcdFx0XCJTb21lIGlzc3VlcyBoYXZlIGJlZW4gZGV0ZWN0ZWQgaW4geW91ciBwcm9qZWN0LCBwbGVhc2UgY2hlY2sgdGhlIFVJNSBzdXBwb3J0IGFzc2lzdGFudCBydWxlIGZvciBzYXAuZmUuY29yZVwiXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gb0NvbnZlcnRlclBhZ2VNb2RlbDtcblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgYW55LCBlcnJvciBhcyBhbnkpO1xuXHRcdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgb01ldGFNb2RlbCk7XG5cblx0XHRcdGlmICghYkVycm9yKSB7XG5cdFx0XHRcdG9WaWV3U2V0dGluZ3MgPSBnZXRWaWV3U2V0dGluZ3MoKTtcblx0XHRcdFx0Ly8gU2V0dGluZyB0aGUgcGFnZU1vZGVsIG9uIHRoZSBjb21wb25lbnQgZm9yIHBvdGVudGlhbCByZXVzZVxuXHRcdFx0XHRvQ29tcG9uZW50LnNldE1vZGVsKG9QYWdlTW9kZWwsIFwiX3BhZ2VNb2RlbFwiKTtcblx0XHRcdFx0cmV0dXJuIG9Db21wb25lbnQucnVuQXNPd25lcigoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIFZpZXcuY3JlYXRlKG9WaWV3U2V0dGluZ3MpXG5cdFx0XHRcdFx0XHQuY2F0Y2goY3JlYXRlRXJyb3JQYWdlKVxuXHRcdFx0XHRcdFx0LnRoZW4oKG9WaWV3OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5vVmlldyA9IG9WaWV3O1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9WaWV3LnNldE1vZGVsKG5ldyBNYW5hZ2VkT2JqZWN0TW9kZWwodGhpcy5vVmlldyksIFwiJHZpZXdcIik7XG5cdFx0XHRcdFx0XHRcdHRoaXMub1ZpZXcuc2V0TW9kZWwob1ZpZXdEYXRhTW9kZWwsIFwidmlld0RhdGFcIik7XG5cdFx0XHRcdFx0XHRcdG9Db21wb25lbnQuc2V0QWdncmVnYXRpb24oXCJyb290Q29udHJvbFwiLCB0aGlzLm9WaWV3KTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHNDYWNoZUtleTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQuY2F0Y2goKGUpID0+IExvZy5lcnJvcihlLm1lc3NhZ2UsIGUpKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3I6IGFueSkge1xuXHRcdFx0TG9nLmVycm9yKGVycm9yLm1lc3NhZ2UsIGVycm9yKTtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgdmlldyA6ICR7ZXJyb3J9YCk7XG5cdFx0fVxuXHR9XG5cdGdldFZpZXcoKSB7XG5cdFx0cmV0dXJuIHRoaXMub1ZpZXc7XG5cdH1cblx0Z2V0SW50ZXJmYWNlKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0ZXhpdCgpIHtcblx0XHQvLyBEZXJlZ2lzdGVyIGdsb2JhbCBpbnN0YW5jZVxuXHRcdGlmICh0aGlzLm9SZXNvdXJjZU1vZGVsU2VydmljZSkge1xuXHRcdFx0dGhpcy5vUmVzb3VyY2VNb2RlbFNlcnZpY2UuZGVzdHJveSgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZSkge1xuXHRcdFx0dGhpcy5vQ2FjaGVIYW5kbGVyU2VydmljZS5kZXN0cm95KCk7XG5cdFx0fVxuXHRcdHRoaXMub0ZhY3RvcnkucmVtb3ZlR2xvYmFsSW5zdGFuY2UoKTtcblx0fVxufVxuY2xhc3MgVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlZFZpZXdTZXJ2aWNlPiA9IHt9O1xuXHRzdGF0aWMgaUNyZWF0aW5nVmlld3M6IDA7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8VGVtcGxhdGVkVmlld1NlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3RvcnkuaUNyZWF0aW5nVmlld3MrKztcblxuXHRcdGNvbnN0IG9UZW1wbGF0ZWRWaWV3U2VydmljZSA9IG5ldyBUZW1wbGF0ZWRWaWV3U2VydmljZShPYmplY3QuYXNzaWduKHsgZmFjdG9yeTogdGhpcyB9LCBvU2VydmljZUNvbnRleHQpKTtcblx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlLmluaXRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0VGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5LmlDcmVhdGluZ1ZpZXdzLS07XG5cdFx0XHRyZXR1cm4gb1RlbXBsYXRlZFZpZXdTZXJ2aWNlO1xuXHRcdH0pO1xuXHR9XG5cdHJlbW92ZUdsb2JhbEluc3RhbmNlKCkge1xuXHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5ID0ge307XG5cdH1cblx0c3RhdGljIGdldE51bWJlck9mVmlld3NJbkNyZWF0aW9uU3RhdGUoKSB7XG5cdFx0cmV0dXJuIFRlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeS5pQ3JlYXRpbmdWaWV3cztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZWRWaWV3U2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7RUFrakJPLGdCQUFnQkEsSUFBaEIsRUFBc0JDLE9BQXRCLEVBQStCO0lBQ3JDLElBQUk7TUFDSCxJQUFJQyxNQUFNLEdBQUdGLElBQUksRUFBakI7SUFDQSxDQUZELENBRUUsT0FBTUcsQ0FBTixFQUFTO01BQ1YsT0FBT0YsT0FBTyxDQUFDRSxDQUFELENBQWQ7SUFDQTs7SUFDRCxJQUFJRCxNQUFNLElBQUlBLE1BQU0sQ0FBQ0UsSUFBckIsRUFBMkI7TUFDMUIsT0FBT0YsTUFBTSxDQUFDRSxJQUFQLENBQVksS0FBSyxDQUFqQixFQUFvQkgsT0FBcEIsQ0FBUDtJQUNBOztJQUNELE9BQU9DLE1BQVA7RUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BL2dCS0csb0I7Ozs7Ozs7OztXQVVMQyxJLEdBQUEsZ0JBQU87TUFBQSxhQTJGRyxJQTNGSDs7TUFBQTs7TUFDTixJQUFNQyxvQkFBb0IsR0FBRyxFQUE3QjtNQUNBLElBQU1DLFFBQVEsR0FBRyxLQUFLQyxVQUFMLEVBQWpCO01BQ0EsSUFBTUMsVUFBVSxHQUFHRixRQUFRLENBQUNHLFdBQTVCO01BQ0EsSUFBTUMsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFWLENBQStCSixVQUEvQixDQUF0QjtNQUNBLElBQU1LLFVBQVUsR0FBR0gsYUFBYSxDQUFDSSxZQUFkLEVBQW5CO01BQ0EsSUFBTUMsU0FBUyxhQUFNTCxhQUFhLENBQUNNLFdBQWQsR0FBNEJDLGdCQUE1QixFQUFOLGVBQXlEUCxhQUFhLENBQUNRLFVBQWQsQ0FBeUJWLFVBQVUsQ0FBQ1csS0FBWCxFQUF6QixDQUF6RCxDQUFmO01BQ0EsSUFBTUMsWUFBWSxHQUFHWixVQUFV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