@sapui5/sap.fe.templates 1.146.0 → 1.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +1 -1
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +1 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +45 -10
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +40 -3
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +49 -3
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js +39 -3
- package/src/sap/fe/templates/ListReport/ListReportTemplating.ts +35 -1
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/overrides/MessageHandler.js +3 -2
- package/src/sap/fe/templates/ListReport/overrides/MessageHandler.ts +2 -1
- package/src/sap/fe/templates/ObjectPage/Component.js +4 -2
- package/src/sap/fe/templates/ObjectPage/Component.ts +3 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +30 -5
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +31 -4
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +78 -19
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +91 -23
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +24 -13
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +32 -27
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +2 -2
- package/src/sap/fe/templates/ObjectPage/overrides/Share.ts +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +12 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/EmphasizedFirstHeaderAction.fragment.xml +181 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +2 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionContent.fragment.xml +18 -12
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionFormContent.fragment.xml +2 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionMoreFormContent.fragment.xml +2 -0
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ar.properties +1 -1
- package/src/sap/fe/templates/messagebundle_bg.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ca.properties +1 -1
- package/src/sap/fe/templates/messagebundle_cnr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
- package/src/sap/fe/templates/messagebundle_cy.properties +1 -1
- package/src/sap/fe/templates/messagebundle_da.properties +1 -1
- package/src/sap/fe/templates/messagebundle_de.properties +1 -1
- package/src/sap/fe/templates/messagebundle_el.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en_GB.properties +1 -1
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_es.properties +1 -1
- package/src/sap/fe/templates/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/templates/messagebundle_et.properties +1 -1
- package/src/sap/fe/templates/messagebundle_fi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_fr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +1 -1
- package/src/sap/fe/templates/messagebundle_hi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_hr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_hu.properties +1 -1
- package/src/sap/fe/templates/messagebundle_id.properties +1 -1
- package/src/sap/fe/templates/messagebundle_it.properties +1 -1
- package/src/sap/fe/templates/messagebundle_iw.properties +2 -2
- package/src/sap/fe/templates/messagebundle_ja.properties +1 -1
- package/src/sap/fe/templates/messagebundle_kk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ko.properties +1 -1
- package/src/sap/fe/templates/messagebundle_lt.properties +1 -1
- package/src/sap/fe/templates/messagebundle_lv.properties +1 -1
- package/src/sap/fe/templates/messagebundle_mk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ms.properties +1 -1
- package/src/sap/fe/templates/messagebundle_nl.properties +1 -1
- package/src/sap/fe/templates/messagebundle_no.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pl.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pt.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ro.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ru.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sh.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sl.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sv.properties +1 -1
- package/src/sap/fe/templates/messagebundle_th.properties +1 -1
- package/src/sap/fe/templates/messagebundle_tr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_uk.properties +3 -3
- package/src/sap/fe/templates/messagebundle_vi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +1 -1
|
@@ -106,9 +106,30 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/base/ClassSupport",
|
|
|
106
106
|
*/;
|
|
107
107
|
_proto.showSideContent = function showSideContent(sSubSectionKey, bShow) {
|
|
108
108
|
const sBlockID = getSideContentLayoutID(sSubSectionKey),
|
|
109
|
-
oBlock = this._view.byId(sBlockID)
|
|
110
|
-
|
|
111
|
-
|
|
109
|
+
oBlock = this._view.byId(sBlockID);
|
|
110
|
+
if (!oBlock) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
const sCurrentBreakpoint = oBlock.getCurrentBreakpoint();
|
|
114
|
+
const bBlockState = bShow === undefined ? !oBlock.getShowSideContent() : bShow;
|
|
115
|
+
|
|
116
|
+
// On small screens (S breakpoint), side content should replace main content
|
|
117
|
+
if (sCurrentBreakpoint === "S") {
|
|
118
|
+
if (bBlockState) {
|
|
119
|
+
// Show side content, hide main content
|
|
120
|
+
oBlock.setShowSideContent(true, false);
|
|
121
|
+
oBlock.setShowMainContent(false, false);
|
|
122
|
+
} else {
|
|
123
|
+
// Hide side content, show main content
|
|
124
|
+
oBlock.setShowSideContent(false, false);
|
|
125
|
+
oBlock.setShowMainContent(true, false);
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
// On larger screens, show side content alongside main content
|
|
129
|
+
// Always keep main content visible on large screens
|
|
130
|
+
oBlock.setShowMainContent(true, false);
|
|
131
|
+
oBlock.setShowSideContent(bBlockState, false);
|
|
132
|
+
}
|
|
112
133
|
}
|
|
113
134
|
|
|
114
135
|
/**
|
|
@@ -276,7 +297,11 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/base/ClassSupport",
|
|
|
276
297
|
_proto._showMessages = function _showMessages(messages) {
|
|
277
298
|
let origin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "Custom";
|
|
278
299
|
try {
|
|
279
|
-
|
|
300
|
+
if (messages.length > 0) {
|
|
301
|
+
// Only if there are messages to show, we remove custom message strip.
|
|
302
|
+
// This way we ensure that we don't interfere with custom message strip's lifecyle until there are new messages to show in the standard message strip.
|
|
303
|
+
this.removeCustomMessageStrip();
|
|
304
|
+
}
|
|
280
305
|
const view = this._view;
|
|
281
306
|
const internalModel = view.getModel("internal");
|
|
282
307
|
const messagestripInternalModelContext = internalModel.bindContext(this._getMessageStripBindingContextPath()).getBoundContext();
|
|
@@ -505,4 +530,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/base/ClassSupport",
|
|
|
505
530
|
}(ExtensionAPI)) || _class);
|
|
506
531
|
return ObjectPageExtensionAPI;
|
|
507
532
|
}, false);
|
|
508
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2NsYXNzIiwiX0V4dGVuc2lvbkFQSSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJyZWZyZXNoIiwidlBhdGgiLCJvQmluZGluZ0NvbnRleHQiLCJfdmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJvQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1NpZGVFZmZlY3RzIiwidGFyZ2V0UHJvcGVydGllcyIsInRhcmdldEVudGl0aWVzIiwidW5kZWZpbmVkIiwicHVzaCIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiYWxsUGF0aHMiLCJBcnJheSIsImlzQXJyYXkiLCJvd25lckNvbXBvbmVudCIsIl9jb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwiZ2V0RW50aXR5U2V0IiwicGF0aCIsImtpbmQiLCJnZXRPYmplY3QiLCJyZWplY3QiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwic1RhYmxlSWQiLCJ0YWJsZSIsImJ5SWQiLCJpc0EiLCJnZXRQYXJlbnQiLCJzaG93U2lkZUNvbnRlbnQiLCJzU3ViU2VjdGlvbktleSIsImJTaG93Iiwic0Jsb2NrSUQiLCJnZXRTaWRlQ29udGVudExheW91dElEIiwib0Jsb2NrIiwiYkJsb2NrU3RhdGUiLCJnZXRTaG93U2lkZUNvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoIiwiaW50ZXJuYWxNb2RlbENvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInZpZXdDb250ZXh0UGF0aCIsInJlcGxhY2UiLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlc09yU3RyaXAiLCJfc2hvd01lc3NhZ2VzIiwic2hvd0N1c3RvbU1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJyZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImN1c3RvbU1lc3NhZ2VTdHJpcElkIiwiZ2V0SWQiLCJ1aWQiLCJhZGRTdHlsZUNsYXNzIiwiYWRkQ3VzdG9tTWVzc2FnZVN0cmlwVG9QYWdlIiwibWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQiLCJoZWFkZXJDb250YWluZXIiLCJpbnNlcnRJbnRvQWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbk5hbWUiLCJjb250cm9sVG9JbnNlcnQiLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImNvbnRlbnRBcnJheSIsImluc2VydEFnZ3JlZ2F0aW9uIiwibGVuZ3RoIiwiY2xvbmUiLCJyZW1vdmVGcm9tQWdncmVnYXRpb24iLCJpZE1hdGNoZXIiLCJjb250cm9sVG9SZW1vdmUiLCJmaW5kIiwiY29udHJvbCIsInJlbW92ZUFnZ3JlZ2F0aW9uIiwiZGVzdHJveSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwiY3JlYXRlTWVzc2FnZUl0ZW0iLCJtZXNzYWdlIiwic0Rlc2NyaXB0aW9uVXJsIiwiZ2V0RGVzY3JpcHRpb25VcmwiLCJNZXNzYWdlSXRlbSIsInRpdGxlIiwiZ2V0TWVzc2FnZSIsImRlc2NyaXB0aW9uIiwiZ2V0RGVzY3JpcHRpb24iLCJ0eXBlIiwiZ2V0VHlwZSIsImxvbmd0ZXh0VXJsIiwic3VidGl0bGUiLCJnZXRBZGRpdGlvbmFsVGV4dCIsImdyb3VwTmFtZSIsImFjdGl2ZVRpdGxlIiwiZ2V0Q29udHJvbElkcyIsImNyZWF0ZU1lc3NhZ2VQb3BvdmVyIiwibWVzc2FnZUl0ZW1zIiwicG9wb3ZlciIsIk1lc3NhZ2VQb3BvdmVyIiwiaXRlbXMiLCJzaG93TWVzc2FnZVBvcG92ZXIiLCJldmVudCIsIm1lc3NhZ2VJdGVtIiwic291cmNlQ29udHJvbCIsImdldFNvdXJjZSIsImFkZERlcGVuZGVudCIsIm9wZW5CeSIsIm1lc3NhZ2VzIiwib3JpZ2luIiwidmlldyIsImludGVybmFsTW9kZWwiLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJoYXNEZXNjcmlwdGlvblVybCIsImlzRWRpdE1vZGUiLCJnZXRJc0VkaXRhYmxlIiwib2JqZWN0UGFnZSIsImdldENvbnRlbnQiLCJoZWFkZXJUaXRsZSIsImdldEhlYWRlclRpdGxlIiwiYWxsU3RyaXBzIiwiZ2V0U25hcHBlZENvbnRlbnQiLCJnZXRFeHBhbmRlZENvbnRlbnQiLCJmaWx0ZXIiLCJpdGVtIiwiTWVzc2FnZVN0cmlwIiwiZm9yRWFjaCIsInN0cmlwIiwiZ2V0TGluayIsImRlc3Ryb3lMaW5rIiwibGluayIsIkxpbmsiLCJ0ZXh0IiwiZ2V0VGV4dCIsInByZXNzIiwic2V0TGluayIsImVyciIsIkxvZyIsIndhcm5pbmciLCJtZXNzYWdlU3RhdHMiLCJFcnJvciIsImlkIiwiY291bnQiLCJXYXJuaW5nIiwiSW5mb3JtYXRpb24iLCJyZWR1Y2UiLCJhY2MiLCJjdXJyZW50VmFsdWUiLCJjdXJyZW50VHlwZSIsInNldFR5cGUiLCJNZXNzYWdlIiwiTWVzc2FnZVR5cGUiLCJzZXRNZXNzYWdlIiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiYW5ub3VuY2UiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsImVycm9yIiwiaGlkZU1lc3NhZ2UiLCJzZXRSZWNvbW1lbmRhdGlvbnMiLCJkYXRhIiwicmVjb21tZW5kYXRpb25IZWxwZXIiLCJ0cmFuc2Zvcm1SZWNvbW1lbmRhdGlvbnNGb3JJbnRlcm5hbFN0b3JhZ2UiLCJzZXRBc1NlY3Rpb25UaXRsZU93bmVyIiwic2VjdGlvbiIsIm9yaWdpbmFsQ29udHJvbCIsInJldXNlQ29tcG9uZW50IiwiY29udGFpbmVyIiwiY29udHJvbFBhcmVudCIsImdldFZpc2libGVTdWJTZWN0aW9ucyIsImFkanVzdEZvclNpbmdsZUNvbnRlbnQiLCJtdWx0aXBsZVN1YlNlY3Rpb25zV2l0aFJldXNlQ29tcG9uZW50Iiwic2hvd05hdmlnYXRpb25FcnJvciIsInNUaXRsZSIsIk1lc3NhZ2VCb3giLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInNlY3Rpb25PclN1YlNlY3Rpb25JZCIsIm9iamVjdFBhZ2VMYXlvdXQiLCJ0YXJnZXRTdWJTZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsImdldFZpc2libGUiLCJzdWJzZWN0aW9uRnVsbElkIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwicGFyZW50U2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInN1YlNlY3Rpb24iLCJFeHRlbnNpb25BUEkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkV4dGVuc2lvbkFQSS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdldFNpZGVDb250ZW50TGF5b3V0SUQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lEXCI7XG5pbXBvcnQgRXh0ZW5zaW9uQVBJIGZyb20gXCJzYXAvZmUvY29yZS9FeHRlbnNpb25BUElcIjtcbmltcG9ydCB0eXBlIHsgSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1JlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyByZWNvbW1lbmRhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1JlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgUmVzb3VyY2VNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBSZXVzZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvUmV1c2VDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNUYXJnZXRUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIFNlY3Rpb24gZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgVGFibGVBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvVGFibGVcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgTWVzc2FnZUJveCBmcm9tIFwic2FwL20vTWVzc2FnZUJveFwiO1xuaW1wb3J0IE1lc3NhZ2VJdGVtIGZyb20gXCJzYXAvbS9NZXNzYWdlSXRlbVwiO1xuaW1wb3J0IE1lc3NhZ2VQb3BvdmVyIGZyb20gXCJzYXAvbS9NZXNzYWdlUG9wb3ZlclwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgeyBJbnZpc2libGVNZXNzYWdlTW9kZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNTaWRlQ29udGVudCBmcm9tIFwic2FwL3VpL2xheW91dC9EeW5hbWljU2lkZUNvbnRlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGUgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU2VjdGlvblwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVN1YlNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTdWJTZWN0aW9uXCI7XG5cbi8qKlxuICogRXh0ZW5zaW9uIEFQSSBmb3Igb2JqZWN0IHBhZ2VzIG9uIFNBUCBGaW9yaSBlbGVtZW50cyBmb3IgT0RhdGEgVjQuXG4gKlxuICogVG8gY29ycmVjdGx5IGludGVncmF0ZSB5b3VyIGFwcCBleHRlbnNpb24gY29kaW5nIHdpdGggU0FQIEZpb3JpIGVsZW1lbnRzLCB1c2Ugb25seSB0aGUgZXh0ZW5zaW9uQVBJIG9mIFNBUCBGaW9yaSBlbGVtZW50cy4gRG9uJ3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUgY29udHJvbHMsIHByb3BlcnRpZXMsIG1vZGVscywgb3Igb3RoZXIgaW50ZXJuYWwgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBTQVAgRmlvcmkgZWxlbWVudHMgZnJhbWV3b3JrLlxuICogQHB1YmxpY1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGZpbmFsXG4gKiBAc2luY2UgMS43OS4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5FeHRlbnNpb25BUElcIilcbmNsYXNzIE9iamVjdFBhZ2VFeHRlbnNpb25BUEkgZXh0ZW5kcyBFeHRlbnNpb25BUEkge1xuXHQvKipcblx0ICogSUQgb2YgdGhlIGFjdGl2ZSBjdXN0b20gTWVzc2FnZVN0cmlwIGZvciBwcm9ncmFtbWF0aWMgcmVtb3ZhbC5cblx0ICovXG5cdHByaXZhdGUgY3VzdG9tTWVzc2FnZVN0cmlwSWQ/OiBzdHJpbmc7XG5cblx0LyoqXG5cdCAqIFJlZnJlc2hlcyBlaXRoZXIgdGhlIHdob2xlIG9iamVjdCBwYWdlIG9yIG9ubHkgcGFydHMgb2YgaXQuXG5cdCAqIEBwYXJhbSBbdlBhdGhdIFBhdGggb3IgYXJyYXkgb2YgcGF0aHMgcmVmZXJyaW5nIHRvIGVudGl0aWVzIG9yIHByb3BlcnRpZXMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBJZiBvbWl0dGVkLCB0aGUgd2hvbGUgb2JqZWN0IHBhZ2UgaXMgcmVmcmVzaGVkLiBUaGUgcGF0aCBcIlwiIHJlZnJlc2hlcyB0aGUgZW50aXR5IGFzc2lnbmVkIHRvIHRoZSBvYmplY3QgcGFnZVxuXHQgKiB3aXRob3V0IG5hdmlnYXRpb24uXG5cdCAqIEByZXR1cm5zIFJlc29sdmVkIG9uY2UgdGhlIGRhdGEgaXMgcmVmcmVzaGVkIG9yIHJlamVjdGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxlZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoKHZQYXRoPzogc3RyaW5nIHwgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKCFvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdC8vIG5vdGhpbmcgdG8gYmUgcmVmcmVzaGVkIC0gZG8gbm90IGJsb2NrIHRoZSBhcHAhXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fdmlldyksXG5cdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUYXJnZXRUeXBlID0ge1xuXHRcdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdFx0dGFyZ2V0RW50aXRpZXM6IFtdXG5cdFx0XHR9O1xuXG5cdFx0aWYgKHZQYXRoID09PSB1bmRlZmluZWQgfHwgdlBhdGggPT09IG51bGwpIHtcblx0XHRcdC8vIHdlIGp1c3QgYWRkIGFuIGVtcHR5IHBhdGggd2hpY2ggc2hvdWxkIHJlZnJlc2ggdGhlIHBhZ2Ugd2l0aCBhbGwgZGVwZW5kZW50IGJpbmRpbmdzXG5cdFx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMucHVzaCh7XG5cdFx0XHRcdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgYWxsUGF0aHMgPSBBcnJheS5pc0FycmF5KHZQYXRoKSA/IHZQYXRoIDogW3ZQYXRoXTtcblx0XHRcdGNvbnN0IG93bmVyQ29tcG9uZW50ID0gdGhpcy5fY29udHJvbGxlci5nZXRPd25lckNvbXBvbmVudCgpIGFzIHVua25vd24gYXMge1xuXHRcdFx0XHRnZXRDb250ZXh0UGF0aDogKCkgPT4gc3RyaW5nO1xuXHRcdFx0XHRnZXRFbnRpdHlTZXQ6ICgpID0+IHN0cmluZztcblx0XHRcdH07XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG93bmVyQ29tcG9uZW50LmdldENvbnRleHRQYXRoKCkgfHwgYC8ke293bmVyQ29tcG9uZW50LmdldEVudGl0eVNldCgpfWA7XG5cblx0XHRcdGZvciAoY29uc3QgcGF0aCBvZiBhbGxQYXRocykge1xuXHRcdFx0XHRpZiAocGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHRcdC8vIGFuIGVtcHR5IHBhdGggc2hhbGwgcmVmcmVzaCB0aGUgZW50aXR5IHdpdGhvdXQgZGVwZW5kZW5jaWVzIHdoaWNoIG1lYW5zICogZm9yIHRoZSBtb2RlbFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzLnB1c2goXCIqXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGtpbmQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtjb250ZXh0UGF0aH0vJHtwYXRofS8ka2luZGApO1xuXG5cdFx0XHRcdFx0aWYgKGtpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHBhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoa2luZCkge1xuXHRcdFx0XHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMucHVzaChwYXRoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGAke3BhdGh9IGlzIG5vdCBhIHZhbGlkIHBhdGggdG8gYmUgcmVmcmVzaGVkYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbLi4ub1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzLCAuLi5vU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllc10sIG9CaW5kaW5nQ29udGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGlzdCBlbnRyaWVzIGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gc1RhYmxlSWQgVGhlIElEIGlkZW50aWZ5aW5nIHRoZSB0YWJsZSB0aGUgc2VsZWN0ZWQgY29udGV4dCBpcyByZXF1ZXN0ZWQgZm9yXG5cdCAqIEByZXR1cm5zIEFycmF5IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIGNvbnRleHRzXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldFNlbGVjdGVkQ29udGV4dHMoc1RhYmxlSWQ6IHN0cmluZyk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRcdGxldCB0YWJsZSA9IHRoaXMuX3ZpZXcuYnlJZChzVGFibGVJZCk7XG5cdFx0aWYgKHRhYmxlPy5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0dGFibGUgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHR9XG5cdFx0aWYgKHRhYmxlPy5pc0EoXCJzYXAuZmUubWFjcm9zLlRhYmxlXCIpKSB7XG5cdFx0XHRyZXR1cm4gKHRhYmxlIGFzIFRhYmxlQVBJKS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBvciBoaWRlcyB0aGUgc2lkZSBjb250ZW50IG9mIGFuIG9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gc1N1YlNlY3Rpb25LZXkgS2V5IG9mIHRoZSBzaWRlIGNvbnRlbnQgZnJhZ21lbnQgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuanNvblxuXHQgKiBAcGFyYW0gW2JTaG93XSBPcHRpb25hbCBCb29sZWFuIGZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSBzaWRlIGNvbnRlbnRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2hvd1NpZGVDb250ZW50KHNTdWJTZWN0aW9uS2V5OiBzdHJpbmcsIGJTaG93PzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IHNCbG9ja0lEID0gZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRChzU3ViU2VjdGlvbktleSksXG5cdFx0XHRvQmxvY2sgPSB0aGlzLl92aWV3LmJ5SWQoc0Jsb2NrSUQpLFxuXHRcdFx0YkJsb2NrU3RhdGUgPSBiU2hvdyA9PT0gdW5kZWZpbmVkID8gIShvQmxvY2sgYXMgRHluYW1pY1NpZGVDb250ZW50KS5nZXRTaG93U2lkZUNvbnRlbnQoKSA6IGJTaG93O1xuXHRcdChvQmxvY2sgYXMgRHluYW1pY1NpZGVDb250ZW50KS5zZXRTaG93U2lkZUNvbnRlbnQoYkJsb2NrU3RhdGUsIGZhbHNlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBib3VuZCBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9iamVjdCBwYWdlLlxuXHQgKiBAcmV0dXJucyBDb250ZXh0IGJvdW5kIHRvIHRoZSBvYmplY3QgcGFnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRCaW5kaW5nQ29udGV4dCgpOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCdWlsZCB0aGUgaW50ZXJuYWwgY29udGV4dCBwYXRoIG9mIHRoZSBNZXNzYWdlU3RyaXAgY29udHJvbC5cblx0ICogQHJldHVybnMgVGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCBwYXRoIGZvciB0aGUgbWVzc2FnZVN0cmlwXG5cdCAqL1xuXHRfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHRQYXRoID0gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgdmlld0NvbnRleHRQYXRoID0gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIGludGVybmFsTW9kZWxDb250ZXh0UGF0aCAmJiB2aWV3Q29udGV4dFBhdGhcblx0XHRcdD8gYCR7aW50ZXJuYWxNb2RlbENvbnRleHRQYXRofS9NZXNzYWdlU3RyaXAvJHt2aWV3Q29udGV4dFBhdGgucmVwbGFjZSgvXFwvL2csIFwiLVwiKX1gXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgdGhlIG1lc3NhZ2Ugc3RyaXAgYmV0d2VlbiB0aGUgdGl0bGUgYW5kIHRoZSBoZWFkZXIgb2YgdGhlIE9iamVjdFBhZ2UuIElmIG9ubHkgb25lIG1lc3NhZ2UgaXMgcHJvdmlkZWQsIGl0IGlzIGRpc3BsYXllZCBkaXJlY3RseSBpbiB0aGUgbWVzc2FnZSBzdHJpcC4gSWYgbXVsdGlwbGUgbWVzc2FnZXMgYXJlIHByb3ZpZGVkLCB0aGV5IGFyZSBwcmlvcml0aXplZCBieSB0aGUgb3JkZXI6IEVycm9yLCBXYXJuaW5nLCBhbmQgSW5mb3JtYXRpb24gYW5kIGEgY29ycmVzcG9uZGluZyBnZW5lcmljIHRleHQgaXMgZGlzcGxheWVkOlxuXHQgKiAtIEVycm9yOiBcIlRoZSBvYmplY3QgY29udGFpbnMgZXJyb3JzLlwiXG5cdCAqIC0gV2FybmluZzogXCJUaGUgb2JqZWN0IGNvbnRhaW5zIHdhcm5pbmdzLlwiXG5cdCAqIC0gSW5mb3JtYXRpb246IFwiVGhlIG9iamVjdCBjb250YWlucyBtZXNzYWdlcy5cIlxuXHQgKiBJZiBhIGJhY2stZW5kIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgd2l0aCBhIHRhcmdldCBwb2ludGluZyB0byB0aGUgT2JqZWN0IFBhZ2UsIGl0IGlzIGRpc3BsYXllZCBpbiB0aGUgbWVzc2FnZSBzdHJpcCwgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgbWVzc2FnZSBvciBtZXNzYWdlIHN0cmlwLiBJZiBtdWx0aXBsZSBiYWNrLWVuZCBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQsIHRoZSBtZXNzYWdlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaXMgZGlzcGxheWVkIHdpdGggYSBnZW5lcmljIHRleHQgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXHQgKiBAcGFyYW0gIG1lc3NhZ2VzT3JTdHJpcCBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgb3IgYSBNZXNzYWdlU3RyaXAgY29udHJvbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzaG93TWVzc2FnZXMobWVzc2FnZXNPclN0cmlwOiBNZXNzYWdlW10gfCBNZXNzYWdlU3RyaXApOiB2b2lkIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShtZXNzYWdlc09yU3RyaXApKSB7XG5cdFx0XHR0aGlzLl9zaG93TWVzc2FnZXMobWVzc2FnZXNPclN0cmlwKTtcblx0XHR9IGVsc2UgaWYgKG1lc3NhZ2VzT3JTdHJpcC5pc0EoXCJzYXAubS5NZXNzYWdlU3RyaXBcIikpIHtcblx0XHRcdHRoaXMuc2hvd0N1c3RvbU1lc3NhZ2VTdHJpcChtZXNzYWdlc09yU3RyaXApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIGN1c3RvbSBNZXNzYWdlU3RyaXAgY29udHJvbCBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24uXG5cdCAqIEVuc3VyZXMgbXV0dWFsIGV4Y2x1c2l2aXR5IHdpdGggdGhlIE1lc3NhZ2VTdHJpcCByZW5kZXJlZCBieSB0aGUgb2JqZWN0IHBhZ2Ugdmlldy5cblx0ICogQHBhcmFtIG1lc3NhZ2VTdHJpcCBNZXNzYWdlU3RyaXAgY29udHJvbFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBzaG93Q3VzdG9tTWVzc2FnZVN0cmlwKG1lc3NhZ2VTdHJpcDogTWVzc2FnZVN0cmlwKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZVN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLl92aWV3XG5cdFx0XHQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKVxuXHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdGlmICghbWVzc2FnZVN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnJlbW92ZUN1c3RvbU1lc3NhZ2VTdHJpcCgpOyAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGN1c3RvbSBtZXNzYWdlIHN0cmlwIGJlZm9yZSBhZGRpbmcgbmV3IG9uZVxuXG5cdFx0Ly8gSGlkZSBmcmFtZXdvcmsgZ2VuZXJhdGVkIG1lc3NhZ2Ugc3RyaXAgdG8gZW5zdXJlIG11dHVhbCBleGNsdXNpdml0eVxuXHRcdG1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIiwgZmFsc2UpO1xuXHRcdG1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BDdXN0b21NZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cblx0XHR0aGlzLmN1c3RvbU1lc3NhZ2VTdHJpcElkID0gbWVzc2FnZVN0cmlwLmdldElkKCkgfHwgdWlkKCk7IC8vIFN0b3JlIHJlZmVyZW5jZSBmb3IgcHJvZ3JhbW1hdGljIHJlbW92YWxcblxuXHRcdG1lc3NhZ2VTdHJpcC5hZGRTdHlsZUNsYXNzKFwic2FwVWlTbWFsbE1hcmdpblRvcFwiKTtcblx0XHR0aGlzLmFkZEN1c3RvbU1lc3NhZ2VTdHJpcFRvUGFnZShtZXNzYWdlU3RyaXAsIG1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgY3VzdG9tIE1lc3NhZ2VTdHJpcCB0byB0aGUgcGFnZSBsYXlvdXQgaW4gdGhlIGhlYWRlciBjb250YWluZXIgc3VjaCBhcyBpbiBleHBhbmRlZCBhbmQgc25hcHBlZCBjb250ZW50LlxuXHQgKiBAcGFyYW0gbWVzc2FnZVN0cmlwIFRoZSBNZXNzYWdlU3RyaXAgY29udHJvbCB0byBhZGRcblx0ICogQHBhcmFtIG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0XG5cdCAqL1xuXHRwcml2YXRlIGFkZEN1c3RvbU1lc3NhZ2VTdHJpcFRvUGFnZShtZXNzYWdlU3RyaXA6IE1lc3NhZ2VTdHJpcCwgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQ6IENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBoZWFkZXJDb250YWluZXIgPSB0aGlzLl92aWV3LmJ5SWQoXCJmZTo6T2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiKTtcblx0XHRpZiAoaGVhZGVyQ29udGFpbmVyKSB7XG5cdFx0XHRjb25zdCBpbnNlcnRJbnRvQWdncmVnYXRpb24gPSAoYWdncmVnYXRpb25OYW1lOiBzdHJpbmcsIGNvbnRyb2xUb0luc2VydDogTWVzc2FnZVN0cmlwKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IGhlYWRlckNvbnRhaW5lci5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25Db250ZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGVudEFycmF5ID0gQXJyYXkuaXNBcnJheShhZ2dyZWdhdGlvbkNvbnRlbnQpID8gYWdncmVnYXRpb25Db250ZW50IDogW2FnZ3JlZ2F0aW9uQ29udGVudF07XG5cdFx0XHRcdFx0aGVhZGVyQ29udGFpbmVyLmluc2VydEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uTmFtZSwgY29udHJvbFRvSW5zZXJ0LCBjb250ZW50QXJyYXkubGVuZ3RoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGluc2VydEludG9BZ2dyZWdhdGlvbihcImV4cGFuZGVkQ29udGVudFwiLCBtZXNzYWdlU3RyaXApO1xuXHRcdFx0aW5zZXJ0SW50b0FnZ3JlZ2F0aW9uKFwic25hcHBlZENvbnRlbnRcIiwgbWVzc2FnZVN0cmlwLmNsb25lKCkpO1xuXG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIk9QQ3VzdG9tTWVzc2FnZVN0cmlwVmlzaWJsZVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgYWN0aXZlIGN1c3RvbSBNZXNzYWdlU3RyaXAgcHJvZ3JhbW1hdGljYWxseS5cblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlQ3VzdG9tTWVzc2FnZVN0cmlwKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jdXN0b21NZXNzYWdlU3RyaXBJZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZpbmQgYW5kIHJlbW92ZSB0aGUgY3VzdG9tIG1lc3NhZ2Ugc3RyaXAgZnJvbSBoZWFkZXIgY29udGFpbmVyXG5cdFx0Y29uc3QgaGVhZGVyQ29udGFpbmVyID0gdGhpcy5fdmlldy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIik7XG5cdFx0aWYgKGhlYWRlckNvbnRhaW5lcikge1xuXHRcdFx0Y29uc3QgcmVtb3ZlRnJvbUFnZ3JlZ2F0aW9uID0gKGFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLCBpZE1hdGNoZXI6IChjb250cm9sSWQ6IHN0cmluZykgPT4gYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSBoZWFkZXJDb250YWluZXIuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25OYW1lKSBhcyBDb250cm9sW107XG5cdFx0XHRcdGlmIChhZ2dyZWdhdGlvbkNvbnRlbnQpIHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sVG9SZW1vdmUgPSBhZ2dyZWdhdGlvbkNvbnRlbnQuZmluZCgoY29udHJvbCkgPT4gaWRNYXRjaGVyKGNvbnRyb2wuZ2V0SWQoKSkpO1xuXHRcdFx0XHRcdGlmIChjb250cm9sVG9SZW1vdmUpIHtcblx0XHRcdFx0XHRcdGhlYWRlckNvbnRhaW5lci5yZW1vdmVBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWUsIGNvbnRyb2xUb1JlbW92ZSk7XG5cdFx0XHRcdFx0XHRjb250cm9sVG9SZW1vdmUuZGVzdHJveSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHJlbW92ZUZyb21BZ2dyZWdhdGlvbihcImV4cGFuZGVkQ29udGVudFwiLCAoY29udHJvbElkKSA9PiBjb250cm9sSWQgPT09IHRoaXMuY3VzdG9tTWVzc2FnZVN0cmlwSWQpO1xuXHRcdFx0cmVtb3ZlRnJvbUFnZ3JlZ2F0aW9uKFwic25hcHBlZENvbnRlbnRcIiwgKGNvbnRyb2xJZCkgPT4gY29udHJvbElkLmluY2x1ZGVzKHRoaXMuY3VzdG9tTWVzc2FnZVN0cmlwSWQgKyBcIi1fX2Nsb25lXCIpKTtcblx0XHR9XG5cblx0XHR0aGlzLmN1c3RvbU1lc3NhZ2VTdHJpcElkID0gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLl92aWV3XG5cdFx0XHQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKVxuXHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdGlmIChtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEN1c3RvbU1lc3NhZ2VTdHJpcFZpc2libGVcIiwgZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgTWVzc2FnZUl0ZW0gZnJvbSBhIE1lc3NhZ2UgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIHRleHQsIHR5cGUsIGRlc2NyaXB0aW9uLCBldGMuXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIE1lc3NhZ2VJdGVtIGluc3RhbmNlIGZvciB0aGUgTWVzc2FnZVBvcG92ZXIuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZU1lc3NhZ2VJdGVtKG1lc3NhZ2U6IE1lc3NhZ2UpOiBNZXNzYWdlSXRlbSB7XG5cdFx0Y29uc3Qgc0Rlc2NyaXB0aW9uVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBtZXNzYWdlLmdldERlc2NyaXB0aW9uVXJsPy4oKTtcblxuXHRcdHJldHVybiBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpLFxuXHRcdFx0ZGVzY3JpcHRpb246IG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb24oKSxcblx0XHRcdHR5cGU6IG1lc3NhZ2UuZ2V0VHlwZSgpLFxuXHRcdFx0bG9uZ3RleHRVcmw6IHNEZXNjcmlwdGlvblVybCxcblx0XHRcdHN1YnRpdGxlOiBtZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0Py4oKSxcblx0XHRcdGdyb3VwTmFtZTogXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiLFxuXHRcdFx0YWN0aXZlVGl0bGU6ICEhbWVzc2FnZS5nZXRDb250cm9sSWRzPy4oKS5sZW5ndGhcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgTWVzc2FnZVBvcG92ZXIgZm9yIGEgc2V0IG9mIE1lc3NhZ2VJdGVtcyBhbmQgYXR0YWNoZXNcblx0ICogYW4gYXN5bmMgZGVzY3JpcHRpb24gaGFuZGxlciB0byBsb2FkIGxvbmcgdGV4dCB3aGVuIG5lZWRlZC5cblx0ICogQHBhcmFtIG1lc3NhZ2VJdGVtcyBBcnJheSBvZiBNZXNzYWdlSXRlbXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwb3BvdmVyLlxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBNZXNzYWdlUG9wb3ZlciBpbnN0YW5jZS5cblx0ICovXG5cdGNyZWF0ZU1lc3NhZ2VQb3BvdmVyKG1lc3NhZ2VJdGVtczogTWVzc2FnZUl0ZW0pOiBNZXNzYWdlUG9wb3ZlciB7XG5cdFx0Y29uc3QgcG9wb3ZlciA9IG5ldyBNZXNzYWdlUG9wb3Zlcih7XG5cdFx0XHRpdGVtczogbWVzc2FnZUl0ZW1zXG5cdFx0fSkgYXMgTWVzc2FnZVBvcG92ZXI7XG5cdFx0cmV0dXJuIHBvcG92ZXI7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgYSBNZXNzYWdlUG9wb3ZlciBmb3IgdGhlIHByb3ZpZGVkIG1lc3NhZ2VzLCBhbmNob3JlZCB0byB0aGVcblx0ICogc291cmNlIGNvbnRyb2wgb2YgdGhlIFVJNSBldmVudC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBVSTUgZXZlbnQgZnJvbSB0aGUgY29udHJvbCB0aGF0IHRyaWdnZXJzIHRoZSBwb3BvdmVyLlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBBcnJheSBvZiBNZXNzYWdlIG9iamVjdHMgdG8gYmUgc2hvd24gaW4gdGhlIHBvcG92ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBNZXNzYWdlUG9wb3ZlciB0aGF0IHdhcyBvcGVuZWQuXG5cdCAqL1xuXHRzaG93TWVzc2FnZVBvcG92ZXIoZXZlbnQ6IFVJNUV2ZW50LCBtZXNzYWdlOiBNZXNzYWdlW10pOiBNZXNzYWdlUG9wb3ZlciB7XG5cdFx0Y29uc3QgbWVzc2FnZUl0ZW0gPSB0aGlzLmNyZWF0ZU1lc3NhZ2VJdGVtKG1lc3NhZ2VbMF0pO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSB0aGlzLmNyZWF0ZU1lc3NhZ2VQb3BvdmVyKG1lc3NhZ2VJdGVtKTtcblx0XHRjb25zdCBzb3VyY2VDb250cm9sID0gZXZlbnQuZ2V0U291cmNlPy4oKSBhcyBDb250cm9sO1xuXHRcdHNvdXJjZUNvbnRyb2w/LmFkZERlcGVuZGVudChwb3BvdmVyKTtcblx0XHRwb3BvdmVyLm9wZW5CeShzb3VyY2VDb250cm9sKTtcblx0XHRyZXR1cm4gcG9wb3Zlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyB0aGUgbWVzc2FnZSBzdHJpcCBiZXR3ZWVuIHRoZSB0aXRsZSBhbmQgdGhlIGhlYWRlciBvZiB0aGUgT2JqZWN0UGFnZS5cblx0ICogQHBhcmFtIG1lc3NhZ2VzIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZFxuXHQgKiBAcGFyYW0gb3JpZ2luIFRoZSBvcmlnaW4gb2YgdGhlIG1lc3NhZ2UuIEl0IG1heSBjb21lIGZyb20gYSBiYWNrLWVuZCBtZXNzYWdlIG9yIGEgY3VzdG9tIG1lc3NhZ2Vcblx0ICovXG5cdF9zaG93TWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSwgb3JpZ2luOiBcIkJhY2tlbmRcIiB8IFwiQ3VzdG9tXCIgPSBcIkN1c3RvbVwiKTogdm9pZCB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMucmVtb3ZlQ3VzdG9tTWVzc2FnZVN0cmlwKCk7XG5cblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLl92aWV3O1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dCh0aGlzLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRpZiAoIW1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodmlldyk7XG5cdFx0XHRsZXQgbWVzc2FnZTogTWVzc2FnZSB8IG51bGwgPSBtZXNzYWdlc1swXSB8fCBudWxsO1xuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QJHtvcmlnaW59TWVzc2FnZVZpc2libGVgLCAhIW1lc3NhZ2UpO1xuXHRcdFx0c3dpdGNoIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzWzBdO1xuXHRcdFx0XHRcdGNvbnN0IGhhc0Rlc2NyaXB0aW9uVXJsID0gISFtZXNzYWdlPy5nZXREZXNjcmlwdGlvblVybCgpO1xuXHRcdFx0XHRcdGNvbnN0IGlzRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvYmplY3RQYWdlID0gdmlldy5nZXRDb250ZW50KCk/LlswXSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0XHRcdFx0Y29uc3QgaGVhZGVyVGl0bGUgPSBvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblxuXHRcdFx0XHRcdFx0Ly8gQ29sbGVjdCBhbGwgTWVzc2FnZVN0cmlwcyAoZXhjbHVkaW5nIENvbGxhYm9yYXRpb24gU3RyaXBzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYWxsU3RyaXBzID0gW1xuXHRcdFx0XHRcdFx0XHQuLi4oaGVhZGVyVGl0bGUuZ2V0U25hcHBlZENvbnRlbnQ/LigpIHx8IFtdKSxcblx0XHRcdFx0XHRcdFx0Li4uKGhlYWRlclRpdGxlLmdldEV4cGFuZGVkQ29udGVudD8uKCkgfHwgW10pXG5cdFx0XHRcdFx0XHRdLmZpbHRlcihcblx0XHRcdFx0XHRcdFx0KGl0ZW0pOiBpdGVtIGlzIE1lc3NhZ2VTdHJpcCA9PiBpdGVtIGluc3RhbmNlb2YgTWVzc2FnZVN0cmlwICYmICFpdGVtLmdldElkKCk/LmluY2x1ZGVzKFwiQ29sbGFib3JhdGlvblN0cmlwXCIpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBPbmx5IGFkZCBsaW5rcyB3aGVuIG1lc3NhZ2UgaXMgZnJvbSBCYWNrZW5kLCBpbiBEaXNwbGF5IG1vZGUsIGFuZCBoYXMgYSBkZXNjcmlwdGlvbiBVUkxcblx0XHRcdFx0XHRcdGlmIChvcmlnaW4gPT09IFwiQmFja2VuZFwiICYmICFpc0VkaXRNb2RlICYmIGhhc0Rlc2NyaXB0aW9uVXJsKSB7XG5cdFx0XHRcdFx0XHRcdGFsbFN0cmlwcy5mb3JFYWNoKChzdHJpcCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdC8vIEFsd2F5cyBkZXN0cm95IHRoZSBleGlzdGluZyBsaW5rIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmVcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RyaXAuZ2V0TGluaygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdHJpcC5kZXN0cm95TGluaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBsaW5rID0gbmV3IExpbmsoe1xuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VfU1RSSVBfTElOS19URVhUXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M6IChldmVudDogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zaG93TWVzc2FnZVBvcG92ZXIoZXZlbnQsIFttZXNzYWdlIV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHN0cmlwLnNldExpbmsobGluayk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGxpbmtzIHdoZW4gbm90IGFwcGxpY2FibGVcblx0XHRcdFx0XHRcdFx0YWxsU3RyaXBzLmZvckVhY2goKHN0cmlwKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHN0cmlwLmdldExpbmsoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaXAuZGVzdHJveUxpbmsoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJVbmFibGUgdG8gYXR0YWNoIGxpbmsgdG8gT2JqZWN0UGFnZSBNZXNzYWdlU3RyaXBcIiwgZXJyIGFzIEVycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVN0YXRzOiB7IFtrZXk6IHN0cmluZ106IHsgaWQ6IG51bWJlcjsgY291bnQ6IG51bWJlciB9IH0gPSB7XG5cdFx0XHRcdFx0XHRFcnJvcjogeyBpZDogMiwgY291bnQ6IDAgfSxcblx0XHRcdFx0XHRcdFdhcm5pbmc6IHsgaWQ6IDEsIGNvdW50OiAwIH0sXG5cdFx0XHRcdFx0XHRJbmZvcm1hdGlvbjogeyBpZDogMCwgY291bnQ6IDAgfVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzLnJlZHVjZShcblx0XHRcdFx0XHRcdChhY2MsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50VHlwZSA9IGN1cnJlbnRWYWx1ZS5nZXRUeXBlKCk7XG5cdFx0XHRcdFx0XHRcdGFjYy5zZXRUeXBlKG1lc3NhZ2VTdGF0c1tjdXJyZW50VHlwZV0uaWQgPiBtZXNzYWdlU3RhdHNbYWNjLmdldFR5cGUoKV0uaWQgPyBjdXJyZW50VHlwZSA6IGFjYy5nZXRUeXBlKCkpO1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlU3RhdHNbY3VycmVudFR5cGVdLmNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhY2M7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bmV3IE1lc3NhZ2UoeyB0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiB9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKG9yaWdpbiA9PT0gXCJCYWNrZW5kXCIgJiYgIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodmlldykpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBPUCR7b3JpZ2lufU1lc3NhZ2VWaXNpYmxlYCwgZmFsc2UpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1Ake29yaWdpbn1NZXNzYWdlVmlzaWJsZWAsICEhbWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2VTdGF0cy5FcnJvci5jb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0TWVzc2FnZShyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJPQkpFQ1RQQUdFU1RBVEVfRVJST1JcIikpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAobWVzc2FnZVN0YXRzLldhcm5pbmcuY291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlLnNldE1lc3NhZ2UocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiT0JKRUNUUEFHRVNUQVRFX1dBUk5JTkdcIikpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlLnNldE1lc3NhZ2UocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiT0JKRUNUUEFHRVNUQVRFX0lORk9STUFUSU9OXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1Ake29yaWdpbn1NZXNzYWdlVGV4dGAsIG1lc3NhZ2UgPyBtZXNzYWdlLmdldE1lc3NhZ2UoKSA6IG51bGwpO1xuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QJHtvcmlnaW59TWVzc2FnZVR5cGVgLCBtZXNzYWdlID8gbWVzc2FnZS5nZXRUeXBlKCkgOiBudWxsKTtcblx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShtZXNzYWdlLmdldE1lc3NhZ2UoKSwgSW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBkaXNwbGF5IE9iamVjdFBhZ2UgbWVzc2FnZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGlkZXMgdGhlIG1lc3NhZ2Ugc3RyaXAgYmVsb3cgdGhlIGFuY2hvciBiYXIuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGhpZGVNZXNzYWdlKCk6IHZvaWQge1xuXHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5fdmlld1xuXHRcdFx0LmdldE1vZGVsKFwiaW50ZXJuYWxcIilcblx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QQ3VzdG9tTWVzc2FnZVZpc2libGVgLCBmYWxzZSk7XG5cdFx0dGhpcy5yZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUgcmVjb21tZW5kYXRpb24gZGF0YSBkZXRhaWxzLCB0cmFuc2Zvcm0gaXQsIGFuZCB1cGRhdGUgdGhlIGludGVybmFsIG1vZGVsLlxuXHQgKiBAcGFyYW0gZGF0YSBSZWNvbW1lbmRhdGlvbiBkYXRhIGZvciB0aGUgYXBwXG5cdCAqL1xuXHRzZXRSZWNvbW1lbmRhdGlvbnMoZGF0YTogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSk6IHZvaWQge1xuXHRcdHJlY29tbWVuZGF0aW9uSGVscGVyLnRyYW5zZm9ybVJlY29tbWVuZGF0aW9uc0ZvckludGVybmFsU3RvcmFnZShkYXRhKTtcblx0XHR0aGlzLl92aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiLCBkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGEgY29udHJvbCB0byBiZSB0aGUgdGl0bGUgb3duZXIgb2YgaXRzIHNlY3Rpb24vc3Vic2VjdGlvbi4gQXMgdGhlIHRpdGxlIG93bmVycyBvZiBzdGFuZGFyZCBzdWJzZWN0aW9ucyBhcmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgY3VzdG9tIHNlY3Rpb24vc3Vic2VjdGlvbi5cblx0ICogVGhlIHRpdGxlIG93bmVyIGNhbiBiZSBlaXRoZXIgb25lIG9mIHRoZSBzdGFuZGFyZCBidWlsZGluZyBibG9ja3MgKEZvcm0sIENoYXJ0LCBUYWJsZSksIG9yIHJldXNlIGNvbXBvbmVudHMsIG9yIHNhcC5tLlRpdGxlLlxuXHQgKiBUaGUgZnJhbWV3b3JrIGFkYXB0cyB0aGUgdmFsdWUgb2YgdGhlc2UgcHJvcGVydGllcyB0byBiZSBhbGlnbmVkIHdpdGggdGhlIHRpdGxlIHRoYXQgaXMgc2hvd24gaW4gdGhlIGFuY2hvciBiYXIgKG9yIGljb24gdGFiIGJhcikgZm9yIHRoZSBzZWN0aW9uLiBNb3Jlb3ZlciwgdGhlIHRpdGxlIG9mIHRoZSBzdWJzZWN0aW9uIChhbmQgaWYgYXBwbGljYWJsZSBhbHNvIG9mIHRoZSBzZWN0aW9uKSBpcyBoaWRkZW4gaW4gb3JkZXIgdG8gcHJldmVudCByZWR1bmRhbnQgdGl0bGVzLCBpZiB0aGUgc3Vic2VjdGlvbiBwb3NzZXNzZXMgYSB0aXRsZSBvd25lci5cblx0ICogSGludDogSWYgeW91IGNob29zZSB0byBzZXQgc2FwLm0uVGl0bGUgYXMgdGhlIHRpdGxlIG93bmVyLCBzdHlsaW5nIGFkanVzdG1lbnRzIG1heSBiZSByZXF1aXJlZCBpbiB0aGUgY3VzdG9tIHZpZXcuIEZvciBleGFtcGxlLCBpZiBzYXAubS5UaXRsZSBpcyBzZXQgYXMgdGl0bGUgb3duZXIgd2hpY2ggYmVsb25ncyB0byBzYXAubS5PdmVyZmxvd1Rvb2xiYXIgb3IgdG8gc2FwLm0uVG9vbGJhciwgdGhlbiB0aGUg4oCYZGVzaWdu4oCZIHByb3BlcnR5IG9mIHRoZSB0b29sYmFyIGNvbnRyb2wgaXMgdG8gYmUgc2V0IHRvIOKAmFRyYW5zcGFyZW504oCZLlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgc2luZ2xlIGNvbnRlbnQgY29udHJvbCBjYW4gYmUgZWl0aGVyIG9uZSBvZiB0aGUgc3RhbmRhcmQgYnVpbGRpbmcgYmxvY2tzIChGb3JtLCBDaGFydCwgVGFibGUpLCBvciByZXVzZSBjb21wb25lbnRzLCBvciBzYXAubS5UaXRsZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0QXNTZWN0aW9uVGl0bGVPd25lcihjb250cm9sOiBNYW5hZ2VkT2JqZWN0KTogdm9pZCB7XG5cdFx0bGV0IHNlY3Rpb247XG5cdFx0Y29uc3Qgb3JpZ2luYWxDb250cm9sID0gY29udHJvbDtcblx0XHRsZXQgcmV1c2VDb21wb25lbnQ7XG5cdFx0d2hpbGUgKGNvbnRyb2wpIHtcblx0XHRcdGlmIChjb250cm9sLmlzQTxTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuU2VjdGlvblwiKSkge1xuXHRcdFx0XHRzZWN0aW9uID0gY29udHJvbDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udHJvbC5pc0E8UmV1c2VDb21wb25lbnQ+KFwic2FwLmZlLmNvcmUuUmV1c2VDb21wb25lbnRcIikpIHtcblx0XHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuY29udGFpbmVyLmdldFBhcmVudCgpIGFzIENvbnRyb2w7XG5cdFx0XHRcdHJldXNlQ29tcG9uZW50ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRyb2xQYXJlbnQgPSBjb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKGNvbnRyb2xQYXJlbnQpIHtcblx0XHRcdFx0Y29udHJvbCA9IGNvbnRyb2xQYXJlbnQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNlY3Rpb24pIHtcblx0XHRcdGlmIChyZXVzZUNvbXBvbmVudCAmJiBzZWN0aW9uLmdldFZpc2libGVTdWJTZWN0aW9ucygpLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0c2VjdGlvbi5hZGp1c3RGb3JTaW5nbGVDb250ZW50KG9yaWdpbmFsQ29udHJvbCwgeyBtdWx0aXBsZVN1YlNlY3Rpb25zV2l0aFJldXNlQ29tcG9uZW50OiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VjdGlvbi5hZGp1c3RGb3JTaW5nbGVDb250ZW50KG9yaWdpbmFsQ29udHJvbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBuYXZpZ2F0aW9uIHRvIGEgc2VjdGlvbiBmYWlscy5cblx0ICovXG5cdHByaXZhdGUgc2hvd05hdmlnYXRpb25FcnJvcigpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMuX3ZpZXcpO1xuXHRcdGNvbnN0IHNUaXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIpO1xuXHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byBhIHNwZWNpZmljIHNlY3Rpb24gb3Igc3Vic2VjdGlvbiB3aXRoaW4gdGhlIGN1cnJlbnQgcGFnZS5cblx0ICogV29ya3Mgd2l0aCBPYmplY3QgUGFnZSBsYXlvdXRzIGFuZCBvdGhlciBzZWN0aW9uLWJhc2VkIGxheW91dHMuXG5cdCAqIEBwYXJhbSBzZWN0aW9uT3JTdWJTZWN0aW9uSWQgVGhlIElEIG9mIHRoZSB0YXJnZXQgc2VjdGlvbiBvciBzdWJzZWN0aW9uICh3aXRob3V0IGEgdmlldyBwcmVmaXgsIGZvciBleGFtcGxlLCBcImZlOjpGYWNldFNlY3Rpb246OlRyYXZlbERhdGFcIiBvciBcImZlOjpTdWJTZWN0aW9uOjpEZXRhaWxzXCIpXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdG5hdmlnYXRlVG9TdWJTZWN0aW9uKHNlY3Rpb25PclN1YlNlY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIEZpbmQgdGhlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdFx0XHRjb25zdCBvYmplY3RQYWdlTGF5b3V0ID0gdGhpcy5fdmlldy5nZXRDb250ZW50KClbMF0gYXMgT2JqZWN0UGFnZUxheW91dCB8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCFvYmplY3RQYWdlTGF5b3V0KSB7XG5cdFx0XHRcdHRoaXMuc2hvd05hdmlnYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc2VjdGlvbk9yU3ViU2VjdGlvbklkKSB7XG5cdFx0XHRcdHRoaXMuc2hvd05hdmlnYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGNvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQoc2VjdGlvbk9yU3ViU2VjdGlvbklkKTtcblxuXHRcdFx0aWYgKCFjb250cm9sKSB7XG5cdFx0XHRcdHRoaXMuc2hvd05hdmlnYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGxldCB0YXJnZXRTdWJTZWN0aW9uOiBPYmplY3RQYWdlU3ViU2VjdGlvbiB8IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgY29udHJvbCBpcyBhIFN1YlNlY3Rpb24gb3IgU2VjdGlvblxuXHRcdFx0aWYgKGNvbnRyb2wuaXNBPE9iamVjdFBhZ2VTdWJTZWN0aW9uPihcInNhcC51eGFwLk9iamVjdFBhZ2VTdWJTZWN0aW9uXCIpKSB7XG5cdFx0XHRcdHRhcmdldFN1YlNlY3Rpb24gPSBjb250cm9sO1xuXHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmlzQTxPYmplY3RQYWdlU2VjdGlvbj4oXCJzYXAudXhhcC5PYmplY3RQYWdlU2VjdGlvblwiKSkge1xuXHRcdFx0XHQvLyBJZiBpdCdzIGEgc2VjdGlvbiwgZ2V0IHRoZSBmaXJzdCBzdWJzZWN0aW9uXG5cdFx0XHRcdGNvbnN0IHN1YlNlY3Rpb25zID0gY29udHJvbC5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdFx0XHR0YXJnZXRTdWJTZWN0aW9uID0gc3ViU2VjdGlvbnMubGVuZ3RoID4gMCA/IHN1YlNlY3Rpb25zWzBdIDogdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBWYWxpZGF0ZSBzdWJzZWN0aW9uXG5cdFx0XHRpZiAoIXRhcmdldFN1YlNlY3Rpb24gfHwgIXRhcmdldFN1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSB7XG5cdFx0XHRcdHRoaXMuc2hvd05hdmlnYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEdldCB0aGUgZnVsbCBzdWJzZWN0aW9uIElEIChpbmNsdWRpbmcgdmlldyBwcmVmaXgpXG5cdFx0XHRjb25zdCBzdWJzZWN0aW9uRnVsbElkID0gdGFyZ2V0U3ViU2VjdGlvbi5nZXRJZCgpO1xuXG5cdFx0XHRpZiAoIXN1YnNlY3Rpb25GdWxsSWQpIHtcblx0XHRcdFx0TG9nLmVycm9yKFwiU3Vic2VjdGlvbiBJRCBpcyB1bmRlZmluZWQsIGNhbm5vdCBzZXQgc2VsZWN0ZWQgc2VjdGlvbi5cIik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF2aWdhdGUgdXNpbmcgT2JqZWN0UGFnZUxheW91dCBBUElcblx0XHRcdG9iamVjdFBhZ2VMYXlvdXQuc2V0U2VsZWN0ZWRTZWN0aW9uKHN1YnNlY3Rpb25GdWxsSWQpO1xuXG5cdFx0XHQvLyBUcmlnZ2VyIGlBcHAgc3RhdGUgY2hhbmdlIGJ5IGZpcmluZyBuYXZpZ2F0ZSBldmVudFxuXHRcdFx0Y29uc3QgcGFyZW50U2VjdGlvbiA9IHRhcmdldFN1YlNlY3Rpb24uZ2V0UGFyZW50KCkgYXMgT2JqZWN0UGFnZVNlY3Rpb247XG5cdFx0XHRvYmplY3RQYWdlTGF5b3V0LmZpcmVOYXZpZ2F0ZSh7XG5cdFx0XHRcdHNlY3Rpb246IHBhcmVudFNlY3Rpb24sXG5cdFx0XHRcdHN1YlNlY3Rpb246IHRhcmdldFN1YlNlY3Rpb25cblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciBkdXJpbmcgbmF2aWdhdGlvbiB0byBzdWJzZWN0aW9uOlwiLCBlcnJvciBhcyBFcnJvcik7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9iamVjdFBhZ2VFeHRlbnNpb25BUEk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0VBa0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBLElBVU1BLHNCQUFzQixJQUFBQyxJQUFBLEdBRDNCQyxjQUFjLENBQUMsMENBQTBDLENBQUMsRUFBQUQsSUFBQSxDQUFBRSxNQUFBLDBCQUFBQyxhQUFBO0lBQUEsU0FBQUosdUJBQUE7TUFBQSxPQUFBSSxhQUFBLENBQUFDLEtB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
|
|
533
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2NsYXNzIiwiX0V4dGVuc2lvbkFQSSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJyZWZyZXNoIiwidlBhdGgiLCJvQmluZGluZ0NvbnRleHQiLCJfdmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJvQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1NpZGVFZmZlY3RzIiwidGFyZ2V0UHJvcGVydGllcyIsInRhcmdldEVudGl0aWVzIiwidW5kZWZpbmVkIiwicHVzaCIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiYWxsUGF0aHMiLCJBcnJheSIsImlzQXJyYXkiLCJvd25lckNvbXBvbmVudCIsIl9jb250cm9sbGVyIiwiZ2V0T3duZXJDb21wb25lbnQiLCJjb250ZXh0UGF0aCIsImdldENvbnRleHRQYXRoIiwiZ2V0RW50aXR5U2V0IiwicGF0aCIsImtpbmQiLCJnZXRPYmplY3QiLCJyZWplY3QiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJnZXRTZWxlY3RlZENvbnRleHRzIiwic1RhYmxlSWQiLCJ0YWJsZSIsImJ5SWQiLCJpc0EiLCJnZXRQYXJlbnQiLCJzaG93U2lkZUNvbnRlbnQiLCJzU3ViU2VjdGlvbktleSIsImJTaG93Iiwic0Jsb2NrSUQiLCJnZXRTaWRlQ29udGVudExheW91dElEIiwib0Jsb2NrIiwic0N1cnJlbnRCcmVha3BvaW50IiwiZ2V0Q3VycmVudEJyZWFrcG9pbnQiLCJiQmxvY2tTdGF0ZSIsImdldFNob3dTaWRlQ29udGVudCIsInNldFNob3dTaWRlQ29udGVudCIsInNldFNob3dNYWluQ29udGVudCIsIl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgiLCJpbnRlcm5hbE1vZGVsQ29udGV4dFBhdGgiLCJnZXRQYXRoIiwidmlld0NvbnRleHRQYXRoIiwicmVwbGFjZSIsInNob3dNZXNzYWdlcyIsIm1lc3NhZ2VzT3JTdHJpcCIsIl9zaG93TWVzc2FnZXMiLCJzaG93Q3VzdG9tTWVzc2FnZVN0cmlwIiwibWVzc2FnZVN0cmlwIiwibWVzc2FnZVN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsInJlbW92ZUN1c3RvbU1lc3NhZ2VTdHJpcCIsInNldFByb3BlcnR5IiwiY3VzdG9tTWVzc2FnZVN0cmlwSWQiLCJnZXRJZCIsInVpZCIsImFkZFN0eWxlQ2xhc3MiLCJhZGRDdXN0b21NZXNzYWdlU3RyaXBUb1BhZ2UiLCJtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCIsImhlYWRlckNvbnRhaW5lciIsImluc2VydEludG9BZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xUb0luc2VydCIsImFnZ3JlZ2F0aW9uQ29udGVudCIsImdldEFnZ3JlZ2F0aW9uIiwiY29udGVudEFycmF5IiwiaW5zZXJ0QWdncmVnYXRpb24iLCJsZW5ndGgiLCJjbG9uZSIsInJlbW92ZUZyb21BZ2dyZWdhdGlvbiIsImlkTWF0Y2hlciIsImNvbnRyb2xUb1JlbW92ZSIsImZpbmQiLCJjb250cm9sIiwicmVtb3ZlQWdncmVnYXRpb24iLCJkZXN0cm95IiwiY29udHJvbElkIiwiaW5jbHVkZXMiLCJjcmVhdGVNZXNzYWdlSXRlbSIsIm1lc3NhZ2UiLCJzRGVzY3JpcHRpb25VcmwiLCJnZXREZXNjcmlwdGlvblVybCIsIk1lc3NhZ2VJdGVtIiwidGl0bGUiLCJnZXRNZXNzYWdlIiwiZGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInR5cGUiLCJnZXRUeXBlIiwibG9uZ3RleHRVcmwiLCJzdWJ0aXRsZSIsImdldEFkZGl0aW9uYWxUZXh0IiwiZ3JvdXBOYW1lIiwiYWN0aXZlVGl0bGUiLCJnZXRDb250cm9sSWRzIiwiY3JlYXRlTWVzc2FnZVBvcG92ZXIiLCJtZXNzYWdlSXRlbXMiLCJwb3BvdmVyIiwiTWVzc2FnZVBvcG92ZXIiLCJpdGVtcyIsInNob3dNZXNzYWdlUG9wb3ZlciIsImV2ZW50IiwibWVzc2FnZUl0ZW0iLCJzb3VyY2VDb250cm9sIiwiZ2V0U291cmNlIiwiYWRkRGVwZW5kZW50Iiwib3BlbkJ5IiwibWVzc2FnZXMiLCJvcmlnaW4iLCJ2aWV3IiwiaW50ZXJuYWxNb2RlbCIsInJlc291cmNlTW9kZWwiLCJSZXNvdXJjZU1vZGVsSGVscGVyIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImhhc0Rlc2NyaXB0aW9uVXJsIiwiaXNFZGl0TW9kZSIsImdldElzRWRpdGFibGUiLCJvYmplY3RQYWdlIiwiZ2V0Q29udGVudCIsImhlYWRlclRpdGxlIiwiZ2V0SGVhZGVyVGl0bGUiLCJhbGxTdHJpcHMiLCJnZXRTbmFwcGVkQ29udGVudCIsImdldEV4cGFuZGVkQ29udGVudCIsImZpbHRlciIsIml0ZW0iLCJNZXNzYWdlU3RyaXAiLCJmb3JFYWNoIiwic3RyaXAiLCJnZXRMaW5rIiwiZGVzdHJveUxpbmsiLCJsaW5rIiwiTGluayIsInRleHQiLCJnZXRUZXh0IiwicHJlc3MiLCJzZXRMaW5rIiwiZXJyIiwiTG9nIiwid2FybmluZyIsIm1lc3NhZ2VTdGF0cyIsIkVycm9yIiwiaWQiLCJjb3VudCIsIldhcm5pbmciLCJJbmZvcm1hdGlvbiIsInJlZHVjZSIsImFjYyIsImN1cnJlbnRWYWx1ZSIsImN1cnJlbnRUeXBlIiwic2V0VHlwZSIsIk1lc3NhZ2UiLCJNZXNzYWdlVHlwZSIsInNldE1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJhbm5vdW5jZSIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwiZXJyb3IiLCJoaWRlTWVzc2FnZSIsInNldFJlY29tbWVuZGF0aW9ucyIsImRhdGEiLCJyZWNvbW1lbmRhdGlvbkhlbHBlciIsInRyYW5zZm9ybVJlY29tbWVuZGF0aW9uc0ZvckludGVybmFsU3RvcmFnZSIsInNldEFzU2VjdGlvblRpdGxlT3duZXIiLCJzZWN0aW9uIiwib3JpZ2luYWxDb250cm9sIiwicmV1c2VDb21wb25lbnQiLCJjb250YWluZXIiLCJjb250cm9sUGFyZW50IiwiZ2V0VmlzaWJsZVN1YlNlY3Rpb25zIiwiYWRqdXN0Rm9yU2luZ2xlQ29udGVudCIsIm11bHRpcGxlU3ViU2VjdGlvbnNXaXRoUmV1c2VDb21wb25lbnQiLCJzaG93TmF2aWdhdGlvbkVycm9yIiwic1RpdGxlIiwiTWVzc2FnZUJveCIsIm5hdmlnYXRlVG9TdWJTZWN0aW9uIiwic2VjdGlvbk9yU3ViU2VjdGlvbklkIiwib2JqZWN0UGFnZUxheW91dCIsInRhcmdldFN1YlNlY3Rpb24iLCJzdWJTZWN0aW9ucyIsImdldFN1YlNlY3Rpb25zIiwiZ2V0VmlzaWJsZSIsInN1YnNlY3Rpb25GdWxsSWQiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJwYXJlbnRTZWN0aW9uIiwiZmlyZU5hdmlnYXRlIiwic3ViU2VjdGlvbiIsIkV4dGVuc2lvbkFQSSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRXh0ZW5zaW9uQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgeyBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB7IHJlY29tbWVuZGF0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFJldXNlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9SZXVzZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1RhcmdldFR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgU2VjdGlvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9TZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UYWJsZVwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVBvcG92ZXIgZnJvbSBcInNhcC9tL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvbS9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1NpZGVDb250ZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L0R5bmFtaWNTaWRlQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcblxuLyoqXG4gKiBFeHRlbnNpb24gQVBJIGZvciBvYmplY3QgcGFnZXMgb24gU0FQIEZpb3JpIGVsZW1lbnRzIGZvciBPRGF0YSBWNC5cbiAqXG4gKiBUbyBjb3JyZWN0bHkgaW50ZWdyYXRlIHlvdXIgYXBwIGV4dGVuc2lvbiBjb2Rpbmcgd2l0aCBTQVAgRmlvcmkgZWxlbWVudHMsIHVzZSBvbmx5IHRoZSBleHRlbnNpb25BUEkgb2YgU0FQIEZpb3JpIGVsZW1lbnRzLiBEb24ndCBhY2Nlc3Mgb3IgbWFuaXB1bGF0ZSBjb250cm9scywgcHJvcGVydGllcywgbW9kZWxzLCBvciBvdGhlciBpbnRlcm5hbCBvYmplY3RzIGNyZWF0ZWQgYnkgdGhlIFNBUCBGaW9yaSBlbGVtZW50cyBmcmFtZXdvcmsuXG4gKiBAcHVibGljXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAZmluYWxcbiAqIEBzaW5jZSAxLjc5LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSVwiKVxuY2xhc3MgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSBleHRlbmRzIEV4dGVuc2lvbkFQSSB7XG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgYWN0aXZlIGN1c3RvbSBNZXNzYWdlU3RyaXAgZm9yIHByb2dyYW1tYXRpYyByZW1vdmFsLlxuXHQgKi9cblx0cHJpdmF0ZSBjdXN0b21NZXNzYWdlU3RyaXBJZD86IHN0cmluZztcblxuXHQvKipcblx0ICogUmVmcmVzaGVzIGVpdGhlciB0aGUgd2hvbGUgb2JqZWN0IHBhZ2Ugb3Igb25seSBwYXJ0cyBvZiBpdC5cblx0ICogQHBhcmFtIFt2UGF0aF0gUGF0aCBvciBhcnJheSBvZiBwYXRocyByZWZlcnJpbmcgdG8gZW50aXRpZXMgb3IgcHJvcGVydGllcyB0byBiZSByZWZyZXNoZWQuXG5cdCAqIElmIG9taXR0ZWQsIHRoZSB3aG9sZSBvYmplY3QgcGFnZSBpcyByZWZyZXNoZWQuIFRoZSBwYXRoIFwiXCIgcmVmcmVzaGVzIHRoZSBlbnRpdHkgYXNzaWduZWQgdG8gdGhlIG9iamVjdCBwYWdlXG5cdCAqIHdpdGhvdXQgbmF2aWdhdGlvbi5cblx0ICogQHJldHVybnMgUmVzb2x2ZWQgb25jZSB0aGUgZGF0YSBpcyByZWZyZXNoZWQgb3IgcmVqZWN0ZWQgaWYgdGhlIHJlcXVlc3QgZmFpbGVkXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHJlZnJlc2godlBhdGg/OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IHRoaXMuX3ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRpZiAoIW9CaW5kaW5nQ29udGV4dCkge1xuXHRcdFx0Ly8gbm90aGluZyB0byBiZSByZWZyZXNoZWQgLSBkbyBub3QgYmxvY2sgdGhlIGFwcCFcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl92aWV3KSxcblx0XHRcdG9TaWRlRWZmZWN0c1NlcnZpY2UgPSBvQXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpLFxuXHRcdFx0b01ldGFNb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0b1NpZGVFZmZlY3RzOiBTaWRlRWZmZWN0c1RhcmdldFR5cGUgPSB7XG5cdFx0XHRcdHRhcmdldFByb3BlcnRpZXM6IFtdLFxuXHRcdFx0XHR0YXJnZXRFbnRpdGllczogW11cblx0XHRcdH07XG5cblx0XHRpZiAodlBhdGggPT09IHVuZGVmaW5lZCB8fCB2UGF0aCA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gd2UganVzdCBhZGQgYW4gZW1wdHkgcGF0aCB3aGljaCBzaG91bGQgcmVmcmVzaCB0aGUgcGFnZSB3aXRoIGFsbCBkZXBlbmRlbnQgYmluZGluZ3Ncblx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcy5wdXNoKHtcblx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IFwiXCJcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBhbGxQYXRocyA9IEFycmF5LmlzQXJyYXkodlBhdGgpID8gdlBhdGggOiBbdlBhdGhdO1xuXHRcdFx0Y29uc3Qgb3duZXJDb21wb25lbnQgPSB0aGlzLl9jb250cm9sbGVyLmdldE93bmVyQ29tcG9uZW50KCkgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdGdldENvbnRleHRQYXRoOiAoKSA9PiBzdHJpbmc7XG5cdFx0XHRcdGdldEVudGl0eVNldDogKCkgPT4gc3RyaW5nO1xuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gb3duZXJDb21wb25lbnQuZ2V0Q29udGV4dFBhdGgoKSB8fCBgLyR7b3duZXJDb21wb25lbnQuZ2V0RW50aXR5U2V0KCl9YDtcblxuXHRcdFx0Zm9yIChjb25zdCBwYXRoIG9mIGFsbFBhdGhzKSB7XG5cdFx0XHRcdGlmIChwYXRoID09PSBcIlwiKSB7XG5cdFx0XHRcdFx0Ly8gYW4gZW1wdHkgcGF0aCBzaGFsbCByZWZyZXNoIHRoZSBlbnRpdHkgd2l0aG91dCBkZXBlbmRlbmNpZXMgd2hpY2ggbWVhbnMgKiBmb3IgdGhlIG1vZGVsXG5cdFx0XHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMucHVzaChcIipcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29uc3Qga2luZCA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke2NvbnRleHRQYXRofS8ke3BhdGh9LyRraW5kYCk7XG5cblx0XHRcdFx0XHRpZiAoa2luZCA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0XHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHQkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogcGF0aFxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChraW5kKSB7XG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcy5wdXNoKHBhdGgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZWplY3QoYCR7cGF0aH0gaXMgbm90IGEgdmFsaWQgcGF0aCB0byBiZSByZWZyZXNoZWRgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9TaWRlRWZmZWN0c1NlcnZpY2UucmVxdWVzdFNpZGVFZmZlY3RzKFsuLi5vU2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMsIC4uLm9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzXSwgb0JpbmRpbmdDb250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsaXN0IGVudHJpZXMgY3VycmVudGx5IHNlbGVjdGVkIGZvciB0aGUgdGFibGUuXG5cdCAqIEBwYXJhbSBzVGFibGVJZCBUaGUgSUQgaWRlbnRpZnlpbmcgdGhlIHRhYmxlIHRoZSBzZWxlY3RlZCBjb250ZXh0IGlzIHJlcXVlc3RlZCBmb3Jcblx0ICogQHJldHVybnMgQXJyYXkgY29udGFpbmluZyB0aGUgc2VsZWN0ZWQgY29udGV4dHNcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0U2VsZWN0ZWRDb250ZXh0cyhzVGFibGVJZDogc3RyaW5nKTogT0RhdGFWNENvbnRleHRbXSB7XG5cdFx0bGV0IHRhYmxlID0gdGhpcy5fdmlldy5ieUlkKHNUYWJsZUlkKTtcblx0XHRpZiAodGFibGU/LmlzQTxUYWJsZT4oXCJzYXAudWkubWRjLlRhYmxlXCIpKSB7XG5cdFx0XHR0YWJsZSA9IHRhYmxlLmdldFBhcmVudCgpIGFzIFRhYmxlQVBJO1xuXHRcdH1cblx0XHRpZiAodGFibGU/LmlzQShcInNhcC5mZS5tYWNyb3MuVGFibGVcIikpIHtcblx0XHRcdHJldHVybiAodGFibGUgYXMgVGFibGVBUEkpLmdldFNlbGVjdGVkQ29udGV4dHMoKTtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIG9yIGhpZGVzIHRoZSBzaWRlIGNvbnRlbnQgb2YgYW4gb2JqZWN0IHBhZ2UuXG5cdCAqIEBwYXJhbSBzU3ViU2VjdGlvbktleSBLZXkgb2YgdGhlIHNpZGUgY29udGVudCBmcmFnbWVudCBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdC5qc29uXG5cdCAqIEBwYXJhbSBbYlNob3ddIE9wdGlvbmFsIEJvb2xlYW4gZmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIHNpZGUgY29udGVudFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzaG93U2lkZUNvbnRlbnQoc1N1YlNlY3Rpb25LZXk6IHN0cmluZywgYlNob3c/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0Y29uc3Qgc0Jsb2NrSUQgPSBnZXRTaWRlQ29udGVudExheW91dElEKHNTdWJTZWN0aW9uS2V5KSxcblx0XHRcdG9CbG9jayA9IHRoaXMuX3ZpZXcuYnlJZChzQmxvY2tJRCkgYXMgRHluYW1pY1NpZGVDb250ZW50O1xuXG5cdFx0aWYgKCFvQmxvY2spIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBzQ3VycmVudEJyZWFrcG9pbnQgPSBvQmxvY2suZ2V0Q3VycmVudEJyZWFrcG9pbnQoKTtcblx0XHRjb25zdCBiQmxvY2tTdGF0ZSA9IGJTaG93ID09PSB1bmRlZmluZWQgPyAhb0Jsb2NrLmdldFNob3dTaWRlQ29udGVudCgpIDogYlNob3c7XG5cblx0XHQvLyBPbiBzbWFsbCBzY3JlZW5zIChTIGJyZWFrcG9pbnQpLCBzaWRlIGNvbnRlbnQgc2hvdWxkIHJlcGxhY2UgbWFpbiBjb250ZW50XG5cdFx0aWYgKHNDdXJyZW50QnJlYWtwb2ludCA9PT0gXCJTXCIpIHtcblx0XHRcdGlmIChiQmxvY2tTdGF0ZSkge1xuXHRcdFx0XHQvLyBTaG93IHNpZGUgY29udGVudCwgaGlkZSBtYWluIGNvbnRlbnRcblx0XHRcdFx0b0Jsb2NrLnNldFNob3dTaWRlQ29udGVudCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdG9CbG9jay5zZXRTaG93TWFpbkNvbnRlbnQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEhpZGUgc2lkZSBjb250ZW50LCBzaG93IG1haW4gY29udGVudFxuXHRcdFx0XHRvQmxvY2suc2V0U2hvd1NpZGVDb250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdG9CbG9jay5zZXRTaG93TWFpbkNvbnRlbnQodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBPbiBsYXJnZXIgc2NyZWVucywgc2hvdyBzaWRlIGNvbnRlbnQgYWxvbmdzaWRlIG1haW4gY29udGVudFxuXHRcdFx0Ly8gQWx3YXlzIGtlZXAgbWFpbiBjb250ZW50IHZpc2libGUgb24gbGFyZ2Ugc2NyZWVuc1xuXHRcdFx0b0Jsb2NrLnNldFNob3dNYWluQ29udGVudCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRvQmxvY2suc2V0U2hvd1NpZGVDb250ZW50KGJCbG9ja1N0YXRlLCBmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGJvdW5kIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IHBhZ2UuXG5cdCAqIEByZXR1cm5zIENvbnRleHQgYm91bmQgdG8gdGhlIG9iamVjdCBwYWdlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldEJpbmRpbmdDb250ZXh0KCk6IENvbnRleHQgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJ1aWxkIHRoZSBpbnRlcm5hbCBjb250ZXh0IHBhdGggb2YgdGhlIE1lc3NhZ2VTdHJpcCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyBUaGUgaW50ZXJuYWwgYmluZGluZyBjb250ZXh0IHBhdGggZm9yIHRoZSBtZXNzYWdlU3RyaXBcblx0ICovXG5cdF9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKTogc3RyaW5nIHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dFBhdGggPSB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIik/LmdldFBhdGgoKTtcblx0XHRjb25zdCB2aWV3Q29udGV4dFBhdGggPSB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKTtcblx0XHRyZXR1cm4gaW50ZXJuYWxNb2RlbENvbnRleHRQYXRoICYmIHZpZXdDb250ZXh0UGF0aFxuXHRcdFx0PyBgJHtpbnRlcm5hbE1vZGVsQ29udGV4dFBhdGh9L01lc3NhZ2VTdHJpcC8ke3ZpZXdDb250ZXh0UGF0aC5yZXBsYWNlKC9cXC8vZywgXCItXCIpfWBcblx0XHRcdDogXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyB0aGUgbWVzc2FnZSBzdHJpcCBiZXR3ZWVuIHRoZSB0aXRsZSBhbmQgdGhlIGhlYWRlciBvZiB0aGUgT2JqZWN0UGFnZS4gSWYgb25seSBvbmUgbWVzc2FnZSBpcyBwcm92aWRlZCwgaXQgaXMgZGlzcGxheWVkIGRpcmVjdGx5IGluIHRoZSBtZXNzYWdlIHN0cmlwLiBJZiBtdWx0aXBsZSBtZXNzYWdlcyBhcmUgcHJvdmlkZWQsIHRoZXkgYXJlIHByaW9yaXRpemVkIGJ5IHRoZSBvcmRlcjogRXJyb3IsIFdhcm5pbmcsIGFuZCBJbmZvcm1hdGlvbiBhbmQgYSBjb3JyZXNwb25kaW5nIGdlbmVyaWMgdGV4dCBpcyBkaXNwbGF5ZWQ6XG5cdCAqIC0gRXJyb3I6IFwiVGhlIG9iamVjdCBjb250YWlucyBlcnJvcnMuXCJcblx0ICogLSBXYXJuaW5nOiBcIlRoZSBvYmplY3QgY29udGFpbnMgd2FybmluZ3MuXCJcblx0ICogLSBJbmZvcm1hdGlvbjogXCJUaGUgb2JqZWN0IGNvbnRhaW5zIG1lc3NhZ2VzLlwiXG5cdCAqIElmIGEgYmFjay1lbmQgbWVzc2FnZSBpcyByZWNlaXZlZCB3aXRoIGEgdGFyZ2V0IHBvaW50aW5nIHRvIHRoZSBPYmplY3QgUGFnZSwgaXQgaXMgZGlzcGxheWVkIGluIHRoZSBtZXNzYWdlIHN0cmlwLCBvdmVycmlkaW5nIGFueSBleGlzdGluZyBtZXNzYWdlIG9yIG1lc3NhZ2Ugc3RyaXAuIElmIG11bHRpcGxlIGJhY2stZW5kIG1lc3NhZ2VzIGFyZSByZWNlaXZlZCwgdGhlIG1lc3NhZ2Ugd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSBpcyBkaXNwbGF5ZWQgd2l0aCBhIGdlbmVyaWMgdGV4dCBhcyBkZXNjcmliZWQgYWJvdmUuXG5cdCAqIEBwYXJhbSAgbWVzc2FnZXNPclN0cmlwIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCBvciBhIE1lc3NhZ2VTdHJpcCBjb250cm9sXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNob3dNZXNzYWdlcyhtZXNzYWdlc09yU3RyaXA6IE1lc3NhZ2VbXSB8IE1lc3NhZ2VTdHJpcCk6IHZvaWQge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KG1lc3NhZ2VzT3JTdHJpcCkpIHtcblx0XHRcdHRoaXMuX3Nob3dNZXNzYWdlcyhtZXNzYWdlc09yU3RyaXApO1xuXHRcdH0gZWxzZSBpZiAobWVzc2FnZXNPclN0cmlwLmlzQShcInNhcC5tLk1lc3NhZ2VTdHJpcFwiKSkge1xuXHRcdFx0dGhpcy5zaG93Q3VzdG9tTWVzc2FnZVN0cmlwKG1lc3NhZ2VzT3JTdHJpcCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNob3dzIGEgY3VzdG9tIE1lc3NhZ2VTdHJpcCBjb250cm9sIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi5cblx0ICogRW5zdXJlcyBtdXR1YWwgZXhjbHVzaXZpdHkgd2l0aCB0aGUgTWVzc2FnZVN0cmlwIHJlbmRlcmVkIGJ5IHRoZSBvYmplY3QgcGFnZSB2aWV3LlxuXHQgKiBAcGFyYW0gbWVzc2FnZVN0cmlwIE1lc3NhZ2VTdHJpcCBjb250cm9sXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIHNob3dDdXN0b21NZXNzYWdlU3RyaXAobWVzc2FnZVN0cmlwOiBNZXNzYWdlU3RyaXApOiB2b2lkIHtcblx0XHRjb25zdCBtZXNzYWdlU3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuX3ZpZXdcblx0XHRcdC5nZXRNb2RlbChcImludGVybmFsXCIpXG5cdFx0XHQuYmluZENvbnRleHQodGhpcy5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0aWYgKCFtZXNzYWdlU3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMucmVtb3ZlQ3VzdG9tTWVzc2FnZVN0cmlwKCk7IC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgY3VzdG9tIG1lc3NhZ2Ugc3RyaXAgYmVmb3JlIGFkZGluZyBuZXcgb25lXG5cblx0XHQvLyBIaWRlIGZyYW1ld29yayBnZW5lcmF0ZWQgbWVzc2FnZSBzdHJpcCB0byBlbnN1cmUgbXV0dWFsIGV4Y2x1c2l2aXR5XG5cdFx0bWVzc2FnZVN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEJhY2tlbmRNZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0bWVzc2FnZVN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEN1c3RvbU1lc3NhZ2VWaXNpYmxlXCIsIGZhbHNlKTtcblxuXHRcdHRoaXMuY3VzdG9tTWVzc2FnZVN0cmlwSWQgPSBtZXNzYWdlU3RyaXAuZ2V0SWQoKSB8fCB1aWQoKTsgLy8gU3RvcmUgcmVmZXJlbmNlIGZvciBwcm9ncmFtbWF0aWMgcmVtb3ZhbFxuXG5cdFx0bWVzc2FnZVN0cmlwLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaVNtYWxsTWFyZ2luVG9wXCIpO1xuXHRcdHRoaXMuYWRkQ3VzdG9tTWVzc2FnZVN0cmlwVG9QYWdlKG1lc3NhZ2VTdHJpcCwgbWVzc2FnZVN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBjdXN0b20gTWVzc2FnZVN0cmlwIHRvIHRoZSBwYWdlIGxheW91dCBpbiB0aGUgaGVhZGVyIGNvbnRhaW5lciBzdWNoIGFzIGluIGV4cGFuZGVkIGFuZCBzbmFwcGVkIGNvbnRlbnQuXG5cdCAqIEBwYXJhbSBtZXNzYWdlU3RyaXAgVGhlIE1lc3NhZ2VTdHJpcCBjb250cm9sIHRvIGFkZFxuXHQgKiBAcGFyYW0gbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHRcblx0ICovXG5cdHByaXZhdGUgYWRkQ3VzdG9tTWVzc2FnZVN0cmlwVG9QYWdlKG1lc3NhZ2VTdHJpcDogTWVzc2FnZVN0cmlwLCBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IGhlYWRlckNvbnRhaW5lciA9IHRoaXMuX3ZpZXcuYnlJZChcImZlOjpPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCIpO1xuXHRcdGlmIChoZWFkZXJDb250YWluZXIpIHtcblx0XHRcdGNvbnN0IGluc2VydEludG9BZ2dyZWdhdGlvbiA9IChhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZywgY29udHJvbFRvSW5zZXJ0OiBNZXNzYWdlU3RyaXApOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gaGVhZGVyQ29udGFpbmVyLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uTmFtZSk7XG5cdFx0XHRcdGlmIChhZ2dyZWdhdGlvbkNvbnRlbnQpIHtcblx0XHRcdFx0XHRjb25zdCBjb250ZW50QXJyYXkgPSBBcnJheS5pc0FycmF5KGFnZ3JlZ2F0aW9uQ29udGVudCkgPyBhZ2dyZWdhdGlvbkNvbnRlbnQgOiBbYWdncmVnYXRpb25Db250ZW50XTtcblx0XHRcdFx0XHRoZWFkZXJDb250YWluZXIuaW5zZXJ0QWdncmVnYXRpb24oYWdncmVnYXRpb25OYW1lLCBjb250cm9sVG9JbnNlcnQsIGNvbnRlbnRBcnJheS5sZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0aW5zZXJ0SW50b0FnZ3JlZ2F0aW9uKFwiZXhwYW5kZWRDb250ZW50XCIsIG1lc3NhZ2VTdHJpcCk7XG5cdFx0XHRpbnNlcnRJbnRvQWdncmVnYXRpb24oXCJzbmFwcGVkQ29udGVudFwiLCBtZXNzYWdlU3RyaXAuY2xvbmUoKSk7XG5cblx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BDdXN0b21NZXNzYWdlU3RyaXBWaXNpYmxlXCIsIHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmVzIHRoZSBhY3RpdmUgY3VzdG9tIE1lc3NhZ2VTdHJpcCBwcm9ncmFtbWF0aWNhbGx5LlxuXHQgKi9cblx0cHJpdmF0ZSByZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmN1c3RvbU1lc3NhZ2VTdHJpcElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmluZCBhbmQgcmVtb3ZlIHRoZSBjdXN0b20gbWVzc2FnZSBzdHJpcCBmcm9tIGhlYWRlciBjb250YWluZXJcblx0XHRjb25zdCBoZWFkZXJDb250YWluZXIgPSB0aGlzLl92aWV3LmJ5SWQoXCJmZTo6T2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiKTtcblx0XHRpZiAoaGVhZGVyQ29udGFpbmVyKSB7XG5cdFx0XHRjb25zdCByZW1vdmVGcm9tQWdncmVnYXRpb24gPSAoYWdncmVnYXRpb25OYW1lOiBzdHJpbmcsIGlkTWF0Y2hlcjogKGNvbnRyb2xJZDogc3RyaW5nKSA9PiBib29sZWFuKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IGhlYWRlckNvbnRhaW5lci5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWUpIGFzIENvbnRyb2xbXTtcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0aW9uQ29udGVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRyb2xUb1JlbW92ZSA9IGFnZ3JlZ2F0aW9uQ29udGVudC5maW5kKChjb250cm9sKSA9PiBpZE1hdGNoZXIoY29udHJvbC5nZXRJZCgpKSk7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2xUb1JlbW92ZSkge1xuXHRcdFx0XHRcdFx0aGVhZGVyQ29udGFpbmVyLnJlbW92ZUFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uTmFtZSwgY29udHJvbFRvUmVtb3ZlKTtcblx0XHRcdFx0XHRcdGNvbnRyb2xUb1JlbW92ZS5kZXN0cm95KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0cmVtb3ZlRnJvbUFnZ3JlZ2F0aW9uKFwiZXhwYW5kZWRDb250ZW50XCIsIChjb250cm9sSWQpID0+IGNvbnRyb2xJZCA9PT0gdGhpcy5jdXN0b21NZXNzYWdlU3RyaXBJZCk7XG5cdFx0XHRyZW1vdmVGcm9tQWdncmVnYXRpb24oXCJzbmFwcGVkQ29udGVudFwiLCAoY29udHJvbElkKSA9PiBjb250cm9sSWQuaW5jbHVkZXModGhpcy5jdXN0b21NZXNzYWdlU3RyaXBJZCArIFwiLV9fY2xvbmVcIikpO1xuXHRcdH1cblxuXHRcdHRoaXMuY3VzdG9tTWVzc2FnZVN0cmlwSWQgPSB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuX3ZpZXdcblx0XHRcdC5nZXRNb2RlbChcImludGVybmFsXCIpXG5cdFx0XHQuYmluZENvbnRleHQodGhpcy5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpXG5cdFx0XHQuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0aWYgKG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIk9QQ3VzdG9tTWVzc2FnZVN0cmlwVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBNZXNzYWdlSXRlbSBmcm9tIGEgTWVzc2FnZSBpbnN0YW5jZS5cblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgdGV4dCwgdHlwZSwgZGVzY3JpcHRpb24sIGV0Yy5cblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgTWVzc2FnZUl0ZW0gaW5zdGFuY2UgZm9yIHRoZSBNZXNzYWdlUG9wb3Zlci5cblx0ICovXG5cdHByaXZhdGUgY3JlYXRlTWVzc2FnZUl0ZW0obWVzc2FnZTogTWVzc2FnZSk6IE1lc3NhZ2VJdGVtIHtcblx0XHRjb25zdCBzRGVzY3JpcHRpb25Vcmw6IHN0cmluZyB8IHVuZGVmaW5lZCA9IG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb25Vcmw/LigpO1xuXG5cdFx0cmV0dXJuIG5ldyBNZXNzYWdlSXRlbSh7XG5cdFx0XHR0aXRsZTogbWVzc2FnZS5nZXRNZXNzYWdlKCksXG5cdFx0XHRkZXNjcmlwdGlvbjogbWVzc2FnZS5nZXREZXNjcmlwdGlvbigpLFxuXHRcdFx0dHlwZTogbWVzc2FnZS5nZXRUeXBlKCksXG5cdFx0XHRsb25ndGV4dFVybDogc0Rlc2NyaXB0aW9uVXJsLFxuXHRcdFx0c3VidGl0bGU6IG1lc3NhZ2UuZ2V0QWRkaXRpb25hbFRleHQ/LigpLFxuXHRcdFx0Z3JvdXBOYW1lOiBcIlRfTUVTU0FHRV9CVVRUT05fU0FQRkVfTUVTU0FHRV9HUk9VUF9HRU5FUkFMXCIsXG5cdFx0XHRhY3RpdmVUaXRsZTogISFtZXNzYWdlLmdldENvbnRyb2xJZHM/LigpLmxlbmd0aFxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBNZXNzYWdlUG9wb3ZlciBmb3IgYSBzZXQgb2YgTWVzc2FnZUl0ZW1zIGFuZCBhdHRhY2hlc1xuXHQgKiBhbiBhc3luYyBkZXNjcmlwdGlvbiBoYW5kbGVyIHRvIGxvYWQgbG9uZyB0ZXh0IHdoZW4gbmVlZGVkLlxuXHQgKiBAcGFyYW0gbWVzc2FnZUl0ZW1zIEFycmF5IG9mIE1lc3NhZ2VJdGVtcyB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIHBvcG92ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIE1lc3NhZ2VQb3BvdmVyIGluc3RhbmNlLlxuXHQgKi9cblx0Y3JlYXRlTWVzc2FnZVBvcG92ZXIobWVzc2FnZUl0ZW1zOiBNZXNzYWdlSXRlbSk6IE1lc3NhZ2VQb3BvdmVyIHtcblx0XHRjb25zdCBwb3BvdmVyID0gbmV3IE1lc3NhZ2VQb3BvdmVyKHtcblx0XHRcdGl0ZW1zOiBtZXNzYWdlSXRlbXNcblx0XHR9KSBhcyBNZXNzYWdlUG9wb3Zlcjtcblx0XHRyZXR1cm4gcG9wb3Zlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyBhIE1lc3NhZ2VQb3BvdmVyIGZvciB0aGUgcHJvdmlkZWQgbWVzc2FnZXMsIGFuY2hvcmVkIHRvIHRoZVxuXHQgKiBzb3VyY2UgY29udHJvbCBvZiB0aGUgVUk1IGV2ZW50LlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIFVJNSBldmVudCBmcm9tIHRoZSBjb250cm9sIHRoYXQgdHJpZ2dlcnMgdGhlIHBvcG92ZXIuXG5cdCAqIEBwYXJhbSBtZXNzYWdlIEFycmF5IG9mIE1lc3NhZ2Ugb2JqZWN0cyB0byBiZSBzaG93biBpbiB0aGUgcG9wb3Zlci5cblx0ICogQHJldHVybnMgVGhlIE1lc3NhZ2VQb3BvdmVyIHRoYXQgd2FzIG9wZW5lZC5cblx0ICovXG5cdHNob3dNZXNzYWdlUG9wb3ZlcihldmVudDogVUk1RXZlbnQsIG1lc3NhZ2U6IE1lc3NhZ2VbXSk6IE1lc3NhZ2VQb3BvdmVyIHtcblx0XHRjb25zdCBtZXNzYWdlSXRlbSA9IHRoaXMuY3JlYXRlTWVzc2FnZUl0ZW0obWVzc2FnZVswXSk7XG5cdFx0Y29uc3QgcG9wb3ZlciA9IHRoaXMuY3JlYXRlTWVzc2FnZVBvcG92ZXIobWVzc2FnZUl0ZW0pO1xuXHRcdGNvbnN0IHNvdXJjZUNvbnRyb2wgPSBldmVudC5nZXRTb3VyY2U/LigpIGFzIENvbnRyb2w7XG5cdFx0c291cmNlQ29udHJvbD8uYWRkRGVwZW5kZW50KHBvcG92ZXIpO1xuXHRcdHBvcG92ZXIub3BlbkJ5KHNvdXJjZUNvbnRyb2wpO1xuXHRcdHJldHVybiBwb3BvdmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHRoZSBtZXNzYWdlIHN0cmlwIGJldHdlZW4gdGhlIHRpdGxlIGFuZCB0aGUgaGVhZGVyIG9mIHRoZSBPYmplY3RQYWdlLlxuXHQgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkXG5cdCAqIEBwYXJhbSBvcmlnaW4gVGhlIG9yaWdpbiBvZiB0aGUgbWVzc2FnZS4gSXQgbWF5IGNvbWUgZnJvbSBhIGJhY2stZW5kIG1lc3NhZ2Ugb3IgYSBjdXN0b20gbWVzc2FnZVxuXHQgKi9cblx0X3Nob3dNZXNzYWdlcyhtZXNzYWdlczogTWVzc2FnZVtdLCBvcmlnaW46IFwiQmFja2VuZFwiIHwgXCJDdXN0b21cIiA9IFwiQ3VzdG9tXCIpOiB2b2lkIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKG1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0Ly8gT25seSBpZiB0aGVyZSBhcmUgbWVzc2FnZXMgdG8gc2hvdywgd2UgcmVtb3ZlIGN1c3RvbSBtZXNzYWdlIHN0cmlwLlxuXHRcdFx0XHQvLyBUaGlzIHdheSB3ZSBlbnN1cmUgdGhhdCB3ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCBjdXN0b20gbWVzc2FnZSBzdHJpcCdzIGxpZmVjeWxlIHVudGlsIHRoZXJlIGFyZSBuZXcgbWVzc2FnZXMgdG8gc2hvdyBpbiB0aGUgc3RhbmRhcmQgbWVzc2FnZSBzdHJpcC5cblx0XHRcdFx0dGhpcy5yZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAoKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuX3ZpZXc7XG5cdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gdmlldy5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQgPSBpbnRlcm5hbE1vZGVsLmJpbmRDb250ZXh0KHRoaXMuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKS5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRcdGlmICghbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgcmVzb3VyY2VNb2RlbCA9IFJlc291cmNlTW9kZWxIZWxwZXIuZ2V0UmVzb3VyY2VNb2RlbCh2aWV3KTtcblx0XHRcdGxldCBtZXNzYWdlOiBNZXNzYWdlIHwgbnVsbCA9IG1lc3NhZ2VzWzBdIHx8IG51bGw7XG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1Ake29yaWdpbn1NZXNzYWdlVmlzaWJsZWAsICEhbWVzc2FnZSk7XG5cdFx0XHRzd2l0Y2ggKG1lc3NhZ2VzLmxlbmd0aCkge1xuXHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRtZXNzYWdlID0gbWVzc2FnZXNbMF07XG5cdFx0XHRcdFx0Y29uc3QgaGFzRGVzY3JpcHRpb25VcmwgPSAhIW1lc3NhZ2U/LmdldERlc2NyaXB0aW9uVXJsKCk7XG5cdFx0XHRcdFx0Y29uc3QgaXNFZGl0TW9kZSA9IENvbW1vblV0aWxzLmdldElzRWRpdGFibGUodmlldyk7XG5cdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdGNvbnN0IG9iamVjdFBhZ2UgPSB2aWV3LmdldENvbnRlbnQoKT8uWzBdIGFzIE9iamVjdFBhZ2VMYXlvdXQ7XG5cdFx0XHRcdFx0XHRjb25zdCBoZWFkZXJUaXRsZSA9IG9iamVjdFBhZ2UuZ2V0SGVhZGVyVGl0bGUoKSBhcyBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlO1xuXG5cdFx0XHRcdFx0XHQvLyBDb2xsZWN0IGFsbCBNZXNzYWdlU3RyaXBzIChleGNsdWRpbmcgQ29sbGFib3JhdGlvbiBTdHJpcHMpXG5cdFx0XHRcdFx0XHRjb25zdCBhbGxTdHJpcHMgPSBbXG5cdFx0XHRcdFx0XHRcdC4uLihoZWFkZXJUaXRsZS5nZXRTbmFwcGVkQ29udGVudD8uKCkgfHwgW10pLFxuXHRcdFx0XHRcdFx0XHQuLi4oaGVhZGVyVGl0bGUuZ2V0RXhwYW5kZWRDb250ZW50Py4oKSB8fCBbXSlcblx0XHRcdFx0XHRcdF0uZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHQoaXRlbSk6IGl0ZW0gaXMgTWVzc2FnZVN0cmlwID0+IGl0ZW0gaW5zdGFuY2VvZiBNZXNzYWdlU3RyaXAgJiYgIWl0ZW0uZ2V0SWQoKT8uaW5jbHVkZXMoXCJDb2xsYWJvcmF0aW9uU3RyaXBcIilcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIE9ubHkgYWRkIGxpbmtzIHdoZW4gbWVzc2FnZSBpcyBmcm9tIEJhY2tlbmQsIGluIERpc3BsYXkgbW9kZSwgYW5kIGhhcyBhIGRlc2NyaXB0aW9uIFVSTFxuXHRcdFx0XHRcdFx0aWYgKG9yaWdpbiA9PT0gXCJCYWNrZW5kXCIgJiYgIWlzRWRpdE1vZGUgJiYgaGFzRGVzY3JpcHRpb25VcmwpIHtcblx0XHRcdFx0XHRcdFx0YWxsU3RyaXBzLmZvckVhY2goKHN0cmlwKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQWx3YXlzIGRlc3Ryb3kgdGhlIGV4aXN0aW5nIGxpbmsgYmVmb3JlIGNyZWF0aW5nIGEgbmV3IG9uZVxuXHRcdFx0XHRcdFx0XHRcdGlmIChzdHJpcC5nZXRMaW5rKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmlwLmRlc3Ryb3lMaW5rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGxpbmsgPSBuZXcgTGluayh7XG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0OiByZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX01FU1NBR0VfSEFORExJTkdfU0FQRkVfRVJST1JfTUVTU0FHRV9TVFJJUF9MSU5LX1RFWFRcIiksXG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVzczogKGV2ZW50OiBVSTVFdmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnNob3dNZXNzYWdlUG9wb3ZlcihldmVudCwgW21lc3NhZ2UhXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0c3RyaXAuc2V0TGluayhsaW5rKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgbGlua3Mgd2hlbiBub3QgYXBwbGljYWJsZVxuXHRcdFx0XHRcdFx0XHRhbGxTdHJpcHMuZm9yRWFjaCgoc3RyaXApID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RyaXAuZ2V0TGluaygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdHJpcC5kZXN0cm95TGluaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0XHRMb2cud2FybmluZyhcIlVuYWJsZSB0byBhdHRhY2ggbGluayB0byBPYmplY3RQYWdlIE1lc3NhZ2VTdHJpcFwiLCBlcnIgYXMgRXJyb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjb25zdCBtZXNzYWdlU3RhdHM6IHsgW2tleTogc3RyaW5nXTogeyBpZDogbnVtYmVyOyBjb3VudDogbnVtYmVyIH0gfSA9IHtcblx0XHRcdFx0XHRcdEVycm9yOiB7IGlkOiAyLCBjb3VudDogMCB9LFxuXHRcdFx0XHRcdFx0V2FybmluZzogeyBpZDogMSwgY291bnQ6IDAgfSxcblx0XHRcdFx0XHRcdEluZm9ybWF0aW9uOiB7IGlkOiAwLCBjb3VudDogMCB9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRtZXNzYWdlID0gbWVzc2FnZXMucmVkdWNlKFxuXHRcdFx0XHRcdFx0KGFjYywgY3VycmVudFZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRUeXBlID0gY3VycmVudFZhbHVlLmdldFR5cGUoKTtcblx0XHRcdFx0XHRcdFx0YWNjLnNldFR5cGUobWVzc2FnZVN0YXRzW2N1cnJlbnRUeXBlXS5pZCA+IG1lc3NhZ2VTdGF0c1thY2MuZ2V0VHlwZSgpXS5pZCA/IGN1cnJlbnRUeXBlIDogYWNjLmdldFR5cGUoKSk7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VTdGF0c1tjdXJyZW50VHlwZV0uY291bnQrKztcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFjYztcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRuZXcgTWVzc2FnZSh7IHR5cGU6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uIH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAob3JpZ2luID09PSBcIkJhY2tlbmRcIiAmJiAhQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KSkge1xuXHRcdFx0XHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QJHtvcmlnaW59TWVzc2FnZVZpc2libGVgLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBPUCR7b3JpZ2lufU1lc3NhZ2VWaXNpYmxlYCwgISFtZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAobWVzc2FnZVN0YXRzLkVycm9yLmNvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0bWVzc2FnZS5zZXRNZXNzYWdlKHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIk9CSkVDVFBBR0VTVEFURV9FUlJPUlwiKSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChtZXNzYWdlU3RhdHMuV2FybmluZy5jb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0TWVzc2FnZShyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJPQkpFQ1RQQUdFU1RBVEVfV0FSTklOR1wiKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0TWVzc2FnZShyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJPQkpFQ1RQQUdFU1RBVEVfSU5GT1JNQVRJT05cIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBPUCR7b3JpZ2lufU1lc3NhZ2VUZXh0YCwgbWVzc2FnZSA/IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpIDogbnVsbCk7XG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1Ake29yaWdpbn1NZXNzYWdlVHlwZWAsIG1lc3NhZ2UgPyBtZXNzYWdlLmdldFR5cGUoKSA6IG51bGwpO1xuXHRcdFx0aWYgKG1lc3NhZ2UpIHtcblx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpLmFubm91bmNlKG1lc3NhZ2UuZ2V0TWVzc2FnZSgpLCBJbnZpc2libGVNZXNzYWdlTW9kZS5Bc3NlcnRpdmUpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0TG9nLmVycm9yKFwiQ2Fubm90IGRpc3BsYXkgT2JqZWN0UGFnZSBtZXNzYWdlXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIaWRlcyB0aGUgbWVzc2FnZSBzdHJpcCBiZWxvdyB0aGUgYW5jaG9yIGJhci5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0aGlkZU1lc3NhZ2UoKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLl92aWV3XG5cdFx0XHQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKVxuXHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0LmdldEJvdW5kQ29udGV4dCgpITtcblx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1BDdXN0b21NZXNzYWdlVmlzaWJsZWAsIGZhbHNlKTtcblx0XHR0aGlzLnJlbW92ZUN1c3RvbU1lc3NhZ2VTdHJpcCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0YWtlIHRoZSByZWNvbW1lbmRhdGlvbiBkYXRhIGRldGFpbHMsIHRyYW5zZm9ybSBpdCwgYW5kIHVwZGF0ZSB0aGUgaW50ZXJuYWwgbW9kZWwuXG5cdCAqIEBwYXJhbSBkYXRhIFJlY29tbWVuZGF0aW9uIGRhdGEgZm9yIHRoZSBhcHBcblx0ICovXG5cdHNldFJlY29tbWVuZGF0aW9ucyhkYXRhOiBJbkNvbXBsZXRlbmVzc0luZm9UeXBlKTogdm9pZCB7XG5cdFx0cmVjb21tZW5kYXRpb25IZWxwZXIudHJhbnNmb3JtUmVjb21tZW5kYXRpb25zRm9ySW50ZXJuYWxTdG9yYWdlKGRhdGEpO1xuXHRcdHRoaXMuX3ZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKS5zZXRQcm9wZXJ0eShcIi9yZWNvbW1lbmRhdGlvbnNEYXRhXCIsIGRhdGEpO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgYSBjb250cm9sIHRvIGJlIHRoZSB0aXRsZSBvd25lciBvZiBpdHMgc2VjdGlvbi9zdWJzZWN0aW9uLiBBcyB0aGUgdGl0bGUgb3duZXJzIG9mIHN0YW5kYXJkIHN1YnNlY3Rpb25zIGFyZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHksIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGZ1bmN0aW9uIGZvciBjdXN0b20gc2VjdGlvbi9zdWJzZWN0aW9uLlxuXHQgKiBUaGUgdGl0bGUgb3duZXIgY2FuIGJlIGVpdGhlciBvbmUgb2YgdGhlIHN0YW5kYXJkIGJ1aWxkaW5nIGJsb2NrcyAoRm9ybSwgQ2hhcnQsIFRhYmxlKSwgb3IgcmV1c2UgY29tcG9uZW50cywgb3Igc2FwLm0uVGl0bGUuXG5cdCAqIFRoZSBmcmFtZXdvcmsgYWRhcHRzIHRoZSB2YWx1ZSBvZiB0aGVzZSBwcm9wZXJ0aWVzIHRvIGJlIGFsaWduZWQgd2l0aCB0aGUgdGl0bGUgdGhhdCBpcyBzaG93biBpbiB0aGUgYW5jaG9yIGJhciAob3IgaWNvbiB0YWIgYmFyKSBmb3IgdGhlIHNlY3Rpb24uIE1vcmVvdmVyLCB0aGUgdGl0bGUgb2YgdGhlIHN1YnNlY3Rpb24gKGFuZCBpZiBhcHBsaWNhYmxlIGFsc28gb2YgdGhlIHNlY3Rpb24pIGlzIGhpZGRlbiBpbiBvcmRlciB0byBwcmV2ZW50IHJlZHVuZGFudCB0aXRsZXMsIGlmIHRoZSBzdWJzZWN0aW9uIHBvc3Nlc3NlcyBhIHRpdGxlIG93bmVyLlxuXHQgKiBIaW50OiBJZiB5b3UgY2hvb3NlIHRvIHNldCBzYXAubS5UaXRsZSBhcyB0aGUgdGl0bGUgb3duZXIsIHN0eWxpbmcgYWRqdXN0bWVudHMgbWF5IGJlIHJlcXVpcmVkIGluIHRoZSBjdXN0b20gdmlldy4gRm9yIGV4YW1wbGUsIGlmIHNhcC5tLlRpdGxlIGlzIHNldCBhcyB0aXRsZSBvd25lciB3aGljaCBiZWxvbmdzIHRvIHNhcC5tLk92ZXJmbG93VG9vbGJhciBvciB0byBzYXAubS5Ub29sYmFyLCB0aGVuIHRoZSDigJhkZXNpZ27igJkgcHJvcGVydHkgb2YgdGhlIHRvb2xiYXIgY29udHJvbCBpcyB0byBiZSBzZXQgdG8g4oCYVHJhbnNwYXJlbnTigJkuXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoZSBzaW5nbGUgY29udGVudCBjb250cm9sIGNhbiBiZSBlaXRoZXIgb25lIG9mIHRoZSBzdGFuZGFyZCBidWlsZGluZyBibG9ja3MgKEZvcm0sIENoYXJ0LCBUYWJsZSksIG9yIHJldXNlIGNvbXBvbmVudHMsIG9yIHNhcC5tLlRpdGxlLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZXRBc1NlY3Rpb25UaXRsZU93bmVyKGNvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiB2b2lkIHtcblx0XHRsZXQgc2VjdGlvbjtcblx0XHRjb25zdCBvcmlnaW5hbENvbnRyb2wgPSBjb250cm9sO1xuXHRcdGxldCByZXVzZUNvbXBvbmVudDtcblx0XHR3aGlsZSAoY29udHJvbCkge1xuXHRcdFx0aWYgKGNvbnRyb2wuaXNBPFNlY3Rpb24+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5TZWN0aW9uXCIpKSB7XG5cdFx0XHRcdHNlY3Rpb24gPSBjb250cm9sO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmIChjb250cm9sLmlzQTxSZXVzZUNvbXBvbmVudD4oXCJzYXAuZmUuY29yZS5SZXVzZUNvbXBvbmVudFwiKSkge1xuXHRcdFx0XHRjb250cm9sID0gY29udHJvbC5jb250YWluZXIuZ2V0UGFyZW50KCkgYXMgQ29udHJvbDtcblx0XHRcdFx0cmV1c2VDb21wb25lbnQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgY29udHJvbFBhcmVudCA9IGNvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0XHRpZiAoY29udHJvbFBhcmVudCkge1xuXHRcdFx0XHRjb250cm9sID0gY29udHJvbFBhcmVudDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoc2VjdGlvbikge1xuXHRcdFx0aWYgKHJldXNlQ29tcG9uZW50ICYmIHNlY3Rpb24uZ2V0VmlzaWJsZVN1YlNlY3Rpb25zKCkubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRzZWN0aW9uLmFkanVzdEZvclNpbmdsZUNvbnRlbnQob3JpZ2luYWxDb250cm9sLCB7IG11bHRpcGxlU3ViU2VjdGlvbnNXaXRoUmV1c2VDb21wb25lbnQ6IHRydWUgfSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWN0aW9uLmFkanVzdEZvclNpbmdsZUNvbnRlbnQob3JpZ2luYWxDb250cm9sKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgYW4gZXJyb3IgbWVzc2FnZSB3aGVuIG5hdmlnYXRpb24gdG8gYSBzZWN0aW9uIGZhaWxzLlxuXHQgKi9cblx0cHJpdmF0ZSBzaG93TmF2aWdhdGlvbkVycm9yKCk6IHZvaWQge1xuXHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodGhpcy5fdmlldyk7XG5cdFx0Y29uc3Qgc1RpdGxlID0gcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19ST1VUSU5HX05BVklHQVRJT05fRElTQUJMRURfVElUTEVcIik7XG5cdFx0TG9nLmVycm9yKHNUaXRsZSk7XG5cdFx0TWVzc2FnZUJveC5lcnJvcihzVGl0bGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlIHRvIGEgc3BlY2lmaWMgc2VjdGlvbiBvciBzdWJzZWN0aW9uIHdpdGhpbiB0aGUgY3VycmVudCBwYWdlLlxuXHQgKiBXb3JrcyB3aXRoIE9iamVjdCBQYWdlIGxheW91dHMgYW5kIG90aGVyIHNlY3Rpb24tYmFzZWQgbGF5b3V0cy5cblx0ICogQHBhcmFtIHNlY3Rpb25PclN1YlNlY3Rpb25JZCBUaGUgSUQgb2YgdGhlIHRhcmdldCBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gKHdpdGhvdXQgYSB2aWV3IHByZWZpeCwgZm9yIGV4YW1wbGUsIFwiZmU6OkZhY2V0U2VjdGlvbjo6VHJhdmVsRGF0YVwiIG9yIFwiZmU6OlN1YlNlY3Rpb246OkRldGFpbHNcIilcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGVUb1N1YlNlY3Rpb24oc2VjdGlvbk9yU3ViU2VjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gRmluZCB0aGUgT2JqZWN0IFBhZ2UgTGF5b3V0IGNvbnRyb2xcblx0XHRcdGNvbnN0IG9iamVjdFBhZ2VMYXlvdXQgPSB0aGlzLl92aWV3LmdldENvbnRlbnQoKVswXSBhcyBPYmplY3RQYWdlTGF5b3V0IHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIW9iamVjdFBhZ2VMYXlvdXQpIHtcblx0XHRcdFx0dGhpcy5zaG93TmF2aWdhdGlvbkVycm9yKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWN0aW9uT3JTdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0dGhpcy5zaG93TmF2aWdhdGlvbkVycm9yKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29udHJvbCA9IHRoaXMuX3ZpZXcuYnlJZChzZWN0aW9uT3JTdWJTZWN0aW9uSWQpO1xuXG5cdFx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdFx0dGhpcy5zaG93TmF2aWdhdGlvbkVycm9yKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHRhcmdldFN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDaGVjayBpZiBjb250cm9sIGlzIGEgU3ViU2VjdGlvbiBvciBTZWN0aW9uXG5cdFx0XHRpZiAoY29udHJvbC5pc0E8T2JqZWN0UGFnZVN1YlNlY3Rpb24+KFwic2FwLnV4YXAuT2JqZWN0UGFnZVN1YlNlY3Rpb25cIikpIHtcblx0XHRcdFx0dGFyZ2V0U3ViU2VjdGlvbiA9IGNvbnRyb2w7XG5cdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuaXNBPE9iamVjdFBhZ2VTZWN0aW9uPihcInNhcC51eGFwLk9iamVjdFBhZ2VTZWN0aW9uXCIpKSB7XG5cdFx0XHRcdC8vIElmIGl0J3MgYSBzZWN0aW9uLCBnZXQgdGhlIGZpcnN0IHN1YnNlY3Rpb25cblx0XHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBjb250cm9sLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRhcmdldFN1YlNlY3Rpb24gPSBzdWJTZWN0aW9ucy5sZW5ndGggPiAwID8gc3ViU2VjdGlvbnNbMF0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFZhbGlkYXRlIHN1YnNlY3Rpb25cblx0XHRcdGlmICghdGFyZ2V0U3ViU2VjdGlvbiB8fCAhdGFyZ2V0U3ViU2VjdGlvbi5nZXRWaXNpYmxlKCkpIHtcblx0XHRcdFx0dGhpcy5zaG93TmF2aWdhdGlvbkVycm9yKCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gR2V0IHRoZSBmdWxsIHN1YnNlY3Rpb24gSUQgKGluY2x1ZGluZyB2aWV3IHByZWZpeClcblx0XHRcdGNvbnN0IHN1YnNlY3Rpb25GdWxsSWQgPSB0YXJnZXRTdWJTZWN0aW9uLmdldElkKCk7XG5cblx0XHRcdGlmICghc3Vic2VjdGlvbkZ1bGxJZCkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJTdWJzZWN0aW9uIElEIGlzIHVuZGVmaW5lZCwgY2Fubm90IHNldCBzZWxlY3RlZCBzZWN0aW9uLlwiKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXZpZ2F0ZSB1c2luZyBPYmplY3RQYWdlTGF5b3V0IEFQSVxuXHRcdFx0b2JqZWN0UGFnZUxheW91dC5zZXRTZWxlY3RlZFNlY3Rpb24oc3Vic2VjdGlvbkZ1bGxJZCk7XG5cblx0XHRcdC8vIFRyaWdnZXIgaUFwcCBzdGF0ZSBjaGFuZ2UgYnkgZmlyaW5nIG5hdmlnYXRlIGV2ZW50XG5cdFx0XHRjb25zdCBwYXJlbnRTZWN0aW9uID0gdGFyZ2V0U3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdG9iamVjdFBhZ2VMYXlvdXQuZmlyZU5hdmlnYXRlKHtcblx0XHRcdFx0c2VjdGlvbjogcGFyZW50U2VjdGlvbixcblx0XHRcdFx0c3ViU2VjdGlvbjogdGFyZ2V0U3ViU2VjdGlvblxuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIGR1cmluZyBuYXZpZ2F0aW9uIHRvIHN1YnNlY3Rpb246XCIsIGVycm9yIGFzIEVycm9yKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSTtc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
|
|
@@ -130,9 +130,32 @@ class ObjectPageExtensionAPI extends ExtensionAPI {
|
|
|
130
130
|
*/
|
|
131
131
|
showSideContent(sSubSectionKey: string, bShow?: boolean): void {
|
|
132
132
|
const sBlockID = getSideContentLayoutID(sSubSectionKey),
|
|
133
|
-
oBlock = this._view.byId(sBlockID)
|
|
134
|
-
|
|
135
|
-
(oBlock
|
|
133
|
+
oBlock = this._view.byId(sBlockID) as DynamicSideContent;
|
|
134
|
+
|
|
135
|
+
if (!oBlock) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const sCurrentBreakpoint = oBlock.getCurrentBreakpoint();
|
|
140
|
+
const bBlockState = bShow === undefined ? !oBlock.getShowSideContent() : bShow;
|
|
141
|
+
|
|
142
|
+
// On small screens (S breakpoint), side content should replace main content
|
|
143
|
+
if (sCurrentBreakpoint === "S") {
|
|
144
|
+
if (bBlockState) {
|
|
145
|
+
// Show side content, hide main content
|
|
146
|
+
oBlock.setShowSideContent(true, false);
|
|
147
|
+
oBlock.setShowMainContent(false, false);
|
|
148
|
+
} else {
|
|
149
|
+
// Hide side content, show main content
|
|
150
|
+
oBlock.setShowSideContent(false, false);
|
|
151
|
+
oBlock.setShowMainContent(true, false);
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
// On larger screens, show side content alongside main content
|
|
155
|
+
// Always keep main content visible on large screens
|
|
156
|
+
oBlock.setShowMainContent(true, false);
|
|
157
|
+
oBlock.setShowSideContent(bBlockState, false);
|
|
158
|
+
}
|
|
136
159
|
}
|
|
137
160
|
|
|
138
161
|
/**
|
|
@@ -313,7 +336,11 @@ class ObjectPageExtensionAPI extends ExtensionAPI {
|
|
|
313
336
|
*/
|
|
314
337
|
_showMessages(messages: Message[], origin: "Backend" | "Custom" = "Custom"): void {
|
|
315
338
|
try {
|
|
316
|
-
|
|
339
|
+
if (messages.length > 0) {
|
|
340
|
+
// Only if there are messages to show, we remove custom message strip.
|
|
341
|
+
// This way we ensure that we don't interfere with custom message strip's lifecyle until there are new messages to show in the standard message strip.
|
|
342
|
+
this.removeCustomMessageStrip();
|
|
343
|
+
}
|
|
317
344
|
|
|
318
345
|
const view = this._view;
|
|
319
346
|
const internalModel = view.getModel("internal");
|